Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[cascardo/linux.git] / arch / sparc / kernel / hvcalls.S
1         /* %o0: devhandle
2          * %o1: devino
3          *
4          * returns %o0: sysino
5          */
6 ENTRY(sun4v_devino_to_sysino)
7         mov     HV_FAST_INTR_DEVINO2SYSINO, %o5
8         ta      HV_FAST_TRAP
9         retl
10          mov    %o1, %o0
11 ENDPROC(sun4v_devino_to_sysino)
12
13         /* %o0: sysino
14          *
15          * returns %o0: intr_enabled (HV_INTR_{DISABLED,ENABLED})
16          */
17 ENTRY(sun4v_intr_getenabled)
18         mov     HV_FAST_INTR_GETENABLED, %o5
19         ta      HV_FAST_TRAP
20         retl
21          mov    %o1, %o0
22 ENDPROC(sun4v_intr_getenabled)
23
24         /* %o0: sysino
25          * %o1: intr_enabled (HV_INTR_{DISABLED,ENABLED})
26          */
27 ENTRY(sun4v_intr_setenabled)
28         mov     HV_FAST_INTR_SETENABLED, %o5
29         ta      HV_FAST_TRAP
30         retl
31          nop
32 ENDPROC(sun4v_intr_setenabled)
33
34         /* %o0: sysino
35          *
36          * returns %o0: intr_state (HV_INTR_STATE_*)
37          */
38 ENTRY(sun4v_intr_getstate)
39         mov     HV_FAST_INTR_GETSTATE, %o5
40         ta      HV_FAST_TRAP
41         retl
42          mov    %o1, %o0
43 ENDPROC(sun4v_intr_getstate)
44
45         /* %o0: sysino
46          * %o1: intr_state (HV_INTR_STATE_*)
47          */
48 ENTRY(sun4v_intr_setstate)
49         mov     HV_FAST_INTR_SETSTATE, %o5
50         ta      HV_FAST_TRAP
51         retl
52          nop
53 ENDPROC(sun4v_intr_setstate)
54
55         /* %o0: sysino
56          *
57          * returns %o0: cpuid
58          */
59 ENTRY(sun4v_intr_gettarget)
60         mov     HV_FAST_INTR_GETTARGET, %o5
61         ta      HV_FAST_TRAP
62         retl
63          mov    %o1, %o0
64 ENDPROC(sun4v_intr_gettarget)
65
66         /* %o0: sysino
67          * %o1: cpuid
68          */
69 ENTRY(sun4v_intr_settarget)
70         mov     HV_FAST_INTR_SETTARGET, %o5
71         ta      HV_FAST_TRAP
72         retl
73          nop
74 ENDPROC(sun4v_intr_settarget)
75
76         /* %o0: cpuid
77          * %o1: pc
78          * %o2: rtba
79          * %o3: arg0
80          *
81          * returns %o0: status
82          */
83 ENTRY(sun4v_cpu_start)
84         mov     HV_FAST_CPU_START, %o5
85         ta      HV_FAST_TRAP
86         retl
87          nop
88 ENDPROC(sun4v_cpu_start)
89
90         /* %o0: cpuid
91          *
92          * returns %o0: status
93          */
94 ENTRY(sun4v_cpu_stop)
95         mov     HV_FAST_CPU_STOP, %o5
96         ta      HV_FAST_TRAP
97         retl
98          nop
99 ENDPROC(sun4v_cpu_stop)
100
101         /* returns %o0: status  */
102 ENTRY(sun4v_cpu_yield)
103         mov     HV_FAST_CPU_YIELD, %o5
104         ta      HV_FAST_TRAP
105         retl
106          nop
107 ENDPROC(sun4v_cpu_yield)
108
109         /* %o0: type
110          * %o1: queue paddr
111          * %o2: num queue entries
112          *
113          * returns %o0: status
114          */
115 ENTRY(sun4v_cpu_qconf)
116         mov     HV_FAST_CPU_QCONF, %o5
117         ta      HV_FAST_TRAP
118         retl
119          nop
120 ENDPROC(sun4v_cpu_qconf)
121
122         /* %o0: num cpus in cpu list
123          * %o1: cpu list paddr
124          * %o2: mondo block paddr
125          *
126          * returns %o0: status
127          */
128 ENTRY(sun4v_cpu_mondo_send)
129         mov     HV_FAST_CPU_MONDO_SEND, %o5
130         ta      HV_FAST_TRAP
131         retl
132          nop
133 ENDPROC(sun4v_cpu_mondo_send)
134
135         /* %o0: CPU ID
136          *
137          * returns %o0: -status if status non-zero, else
138          *         %o0: cpu state as HV_CPU_STATE_*
139          */
140 ENTRY(sun4v_cpu_state)
141         mov     HV_FAST_CPU_STATE, %o5
142         ta      HV_FAST_TRAP
143         brnz,pn %o0, 1f
144          sub    %g0, %o0, %o0
145         mov     %o1, %o0
146 1:      retl
147          nop
148 ENDPROC(sun4v_cpu_state)
149
150         /* %o0: virtual address
151          * %o1: must be zero
152          * %o2: TTE
153          * %o3: HV_MMU_* flags
154          *
155          * returns %o0: status
156          */
157 ENTRY(sun4v_mmu_map_perm_addr)
158         mov     HV_FAST_MMU_MAP_PERM_ADDR, %o5
159         ta      HV_FAST_TRAP
160         retl
161          nop
162 ENDPROC(sun4v_mmu_map_perm_addr)
163
164         /* %o0: number of TSB descriptions
165          * %o1: TSB descriptions real address
166          *
167          * returns %o0: status
168          */
169 ENTRY(sun4v_mmu_tsb_ctx0)
170         mov     HV_FAST_MMU_TSB_CTX0, %o5
171         ta      HV_FAST_TRAP
172         retl
173          nop
174 ENDPROC(sun4v_mmu_tsb_ctx0)
175
176         /* %o0: API group number
177          * %o1: pointer to unsigned long major number storage
178          * %o2: pointer to unsigned long minor number storage
179          *
180          * returns %o0: status
181          */
182 ENTRY(sun4v_get_version)
183         mov     HV_CORE_GET_VER, %o5
184         mov     %o1, %o3
185         mov     %o2, %o4
186         ta      HV_CORE_TRAP
187         stx     %o1, [%o3]
188         retl
189          stx    %o2, [%o4]
190 ENDPROC(sun4v_get_version)
191
192         /* %o0: API group number
193          * %o1: desired major number
194          * %o2: desired minor number
195          * %o3: pointer to unsigned long actual minor number storage
196          *
197          * returns %o0: status
198          */
199 ENTRY(sun4v_set_version)
200         mov     HV_CORE_SET_VER, %o5
201         mov     %o3, %o4
202         ta      HV_CORE_TRAP
203         retl
204          stx    %o1, [%o4]
205 ENDPROC(sun4v_set_version)
206
207         /* %o0: pointer to unsigned long time
208          *
209          * returns %o0: status
210          */
211 ENTRY(sun4v_tod_get)
212         mov     %o0, %o4
213         mov     HV_FAST_TOD_GET, %o5
214         ta      HV_FAST_TRAP
215         stx     %o1, [%o4]
216         retl
217          nop
218 ENDPROC(sun4v_tod_get)
219
220         /* %o0: time
221          *
222          * returns %o0: status
223          */
224 ENTRY(sun4v_tod_set)
225         mov     HV_FAST_TOD_SET, %o5
226         ta      HV_FAST_TRAP
227         retl
228          nop
229 ENDPROC(sun4v_tod_set)
230
231         /* %o0: pointer to unsigned long status
232          *
233          * returns %o0: signed character
234          */
235 ENTRY(sun4v_con_getchar)
236         mov     %o0, %o4
237         mov     HV_FAST_CONS_GETCHAR, %o5
238         clr     %o0
239         clr     %o1
240         ta      HV_FAST_TRAP
241         stx     %o0, [%o4]
242         retl
243          sra    %o1, 0, %o0
244 ENDPROC(sun4v_con_getchar)
245
246         /* %o0: signed long character
247          *
248          * returns %o0: status
249          */
250 ENTRY(sun4v_con_putchar)
251         mov     HV_FAST_CONS_PUTCHAR, %o5
252         ta      HV_FAST_TRAP
253         retl
254          sra    %o0, 0, %o0
255 ENDPROC(sun4v_con_putchar)
256
257         /* %o0: buffer real address
258          * %o1: buffer size
259          * %o2: pointer to unsigned long bytes_read
260          *
261          * returns %o0: status
262          */
263 ENTRY(sun4v_con_read)
264         mov     %o2, %o4
265         mov     HV_FAST_CONS_READ, %o5
266         ta      HV_FAST_TRAP
267         brnz    %o0, 1f
268          cmp    %o1, -1         /* break */
269         be,a,pn %icc, 1f
270          mov    %o1, %o0
271         cmp     %o1, -2         /* hup */
272         be,a,pn %icc, 1f
273          mov    %o1, %o0
274         stx     %o1, [%o4]
275 1:      retl
276          nop
277 ENDPROC(sun4v_con_read)
278
279         /* %o0: buffer real address
280          * %o1: buffer size
281          * %o2: pointer to unsigned long bytes_written
282          *
283          * returns %o0: status
284          */
285 ENTRY(sun4v_con_write)
286         mov     %o2, %o4
287         mov     HV_FAST_CONS_WRITE, %o5
288         ta      HV_FAST_TRAP
289         stx     %o1, [%o4]
290         retl
291          nop
292 ENDPROC(sun4v_con_write)
293
294         /* %o0: soft state
295          * %o1: address of description string
296          *
297          * returns %o0: status
298          */
299 ENTRY(sun4v_mach_set_soft_state)
300         mov     HV_FAST_MACH_SET_SOFT_STATE, %o5
301         ta      HV_FAST_TRAP
302         retl
303          nop
304 ENDPROC(sun4v_mach_set_soft_state)
305
306         /* %o0: exit code
307          *
308          * Does not return.
309          */
310 ENTRY(sun4v_mach_exit)
311         mov     HV_FAST_MACH_EXIT, %o5
312         ta      HV_FAST_TRAP
313         retl
314          nop
315 ENDPROC(sun4v_mach_exit)
316
317         /* %o0: buffer real address
318          * %o1: buffer length
319          * %o2: pointer to unsigned long real_buf_len
320          *
321          * returns %o0: status
322          */
323 ENTRY(sun4v_mach_desc)
324         mov     %o2, %o4
325         mov     HV_FAST_MACH_DESC, %o5
326         ta      HV_FAST_TRAP
327         stx     %o1, [%o4]
328         retl
329          nop
330 ENDPROC(sun4v_mach_desc)
331
332         /* %o0: new timeout in milliseconds
333          * %o1: pointer to unsigned long orig_timeout
334          *
335          * returns %o0: status
336          */
337 ENTRY(sun4v_mach_set_watchdog)
338         mov     %o1, %o4
339         mov     HV_FAST_MACH_SET_WATCHDOG, %o5
340         ta      HV_FAST_TRAP
341         brnz,a,pn %o4, 0f
342         stx     %o1, [%o4]
343 0:      retl
344          nop
345 ENDPROC(sun4v_mach_set_watchdog)
346
347         /* No inputs and does not return.  */
348 ENTRY(sun4v_mach_sir)
349         mov     %o1, %o4
350         mov     HV_FAST_MACH_SIR, %o5
351         ta      HV_FAST_TRAP
352         stx     %o1, [%o4]
353         retl
354          nop
355 ENDPROC(sun4v_mach_sir)
356
357         /* %o0: channel
358          * %o1: ra
359          * %o2: num_entries
360          *
361          * returns %o0: status
362          */
363 ENTRY(sun4v_ldc_tx_qconf)
364         mov     HV_FAST_LDC_TX_QCONF, %o5
365         ta      HV_FAST_TRAP
366         retl
367          nop
368 ENDPROC(sun4v_ldc_tx_qconf)
369
370         /* %o0: channel
371          * %o1: pointer to unsigned long ra
372          * %o2: pointer to unsigned long num_entries
373          *
374          * returns %o0: status
375          */
376 ENTRY(sun4v_ldc_tx_qinfo)
377         mov     %o1, %g1
378         mov     %o2, %g2
379         mov     HV_FAST_LDC_TX_QINFO, %o5
380         ta      HV_FAST_TRAP
381         stx     %o1, [%g1]
382         stx     %o2, [%g2]
383         retl
384          nop
385 ENDPROC(sun4v_ldc_tx_qinfo)
386
387         /* %o0: channel
388          * %o1: pointer to unsigned long head_off
389          * %o2: pointer to unsigned long tail_off
390          * %o2: pointer to unsigned long chan_state
391          *
392          * returns %o0: status
393          */
394 ENTRY(sun4v_ldc_tx_get_state)
395         mov     %o1, %g1
396         mov     %o2, %g2
397         mov     %o3, %g3
398         mov     HV_FAST_LDC_TX_GET_STATE, %o5
399         ta      HV_FAST_TRAP
400         stx     %o1, [%g1]
401         stx     %o2, [%g2]
402         stx     %o3, [%g3]
403         retl
404          nop
405 ENDPROC(sun4v_ldc_tx_get_state)
406
407         /* %o0: channel
408          * %o1: tail_off
409          *
410          * returns %o0: status
411          */
412 ENTRY(sun4v_ldc_tx_set_qtail)
413         mov     HV_FAST_LDC_TX_SET_QTAIL, %o5
414         ta      HV_FAST_TRAP
415         retl
416          nop
417 ENDPROC(sun4v_ldc_tx_set_qtail)
418
419         /* %o0: channel
420          * %o1: ra
421          * %o2: num_entries
422          *
423          * returns %o0: status
424          */
425 ENTRY(sun4v_ldc_rx_qconf)
426         mov     HV_FAST_LDC_RX_QCONF, %o5
427         ta      HV_FAST_TRAP
428         retl
429          nop
430 ENDPROC(sun4v_ldc_rx_qconf)
431
432         /* %o0: channel
433          * %o1: pointer to unsigned long ra
434          * %o2: pointer to unsigned long num_entries
435          *
436          * returns %o0: status
437          */
438 ENTRY(sun4v_ldc_rx_qinfo)
439         mov     %o1, %g1
440         mov     %o2, %g2
441         mov     HV_FAST_LDC_RX_QINFO, %o5
442         ta      HV_FAST_TRAP
443         stx     %o1, [%g1]
444         stx     %o2, [%g2]
445         retl
446          nop
447 ENDPROC(sun4v_ldc_rx_qinfo)
448
449         /* %o0: channel
450          * %o1: pointer to unsigned long head_off
451          * %o2: pointer to unsigned long tail_off
452          * %o2: pointer to unsigned long chan_state
453          *
454          * returns %o0: status
455          */
456 ENTRY(sun4v_ldc_rx_get_state)
457         mov     %o1, %g1
458         mov     %o2, %g2
459         mov     %o3, %g3
460         mov     HV_FAST_LDC_RX_GET_STATE, %o5
461         ta      HV_FAST_TRAP
462         stx     %o1, [%g1]
463         stx     %o2, [%g2]
464         stx     %o3, [%g3]
465         retl
466          nop
467 ENDPROC(sun4v_ldc_rx_get_state)
468
469         /* %o0: channel
470          * %o1: head_off
471          *
472          * returns %o0: status
473          */
474 ENTRY(sun4v_ldc_rx_set_qhead)
475         mov     HV_FAST_LDC_RX_SET_QHEAD, %o5
476         ta      HV_FAST_TRAP
477         retl
478          nop
479 ENDPROC(sun4v_ldc_rx_set_qhead)
480
481         /* %o0: channel
482          * %o1: ra
483          * %o2: num_entries
484          *
485          * returns %o0: status
486          */
487 ENTRY(sun4v_ldc_set_map_table)
488         mov     HV_FAST_LDC_SET_MAP_TABLE, %o5
489         ta      HV_FAST_TRAP
490         retl
491          nop
492 ENDPROC(sun4v_ldc_set_map_table)
493
494         /* %o0: channel
495          * %o1: pointer to unsigned long ra
496          * %o2: pointer to unsigned long num_entries
497          *
498          * returns %o0: status
499          */
500 ENTRY(sun4v_ldc_get_map_table)
501         mov     %o1, %g1
502         mov     %o2, %g2
503         mov     HV_FAST_LDC_GET_MAP_TABLE, %o5
504         ta      HV_FAST_TRAP
505         stx     %o1, [%g1]
506         stx     %o2, [%g2]
507         retl
508          nop
509 ENDPROC(sun4v_ldc_get_map_table)
510
511         /* %o0: channel
512          * %o1: dir_code
513          * %o2: tgt_raddr
514          * %o3: lcl_raddr
515          * %o4: len
516          * %o5: pointer to unsigned long actual_len
517          *
518          * returns %o0: status
519          */
520 ENTRY(sun4v_ldc_copy)
521         mov     %o5, %g1
522         mov     HV_FAST_LDC_COPY, %o5
523         ta      HV_FAST_TRAP
524         stx     %o1, [%g1]
525         retl
526          nop
527 ENDPROC(sun4v_ldc_copy)
528
529         /* %o0: channel
530          * %o1: cookie
531          * %o2: pointer to unsigned long ra
532          * %o3: pointer to unsigned long perm
533          *
534          * returns %o0: status
535          */
536 ENTRY(sun4v_ldc_mapin)
537         mov     %o2, %g1
538         mov     %o3, %g2
539         mov     HV_FAST_LDC_MAPIN, %o5
540         ta      HV_FAST_TRAP
541         stx     %o1, [%g1]
542         stx     %o2, [%g2]
543         retl
544          nop
545 ENDPROC(sun4v_ldc_mapin)
546
547         /* %o0: ra
548          *
549          * returns %o0: status
550          */
551 ENTRY(sun4v_ldc_unmap)
552         mov     HV_FAST_LDC_UNMAP, %o5
553         ta      HV_FAST_TRAP
554         retl
555          nop
556 ENDPROC(sun4v_ldc_unmap)
557
558         /* %o0: channel
559          * %o1: cookie
560          * %o2: mte_cookie
561          *
562          * returns %o0: status
563          */
564 ENTRY(sun4v_ldc_revoke)
565         mov     HV_FAST_LDC_REVOKE, %o5
566         ta      HV_FAST_TRAP
567         retl
568          nop
569 ENDPROC(sun4v_ldc_revoke)
570
571         /* %o0: device handle
572          * %o1: device INO
573          * %o2: pointer to unsigned long cookie
574          *
575          * returns %o0: status
576          */
577 ENTRY(sun4v_vintr_get_cookie)
578         mov     %o2, %g1
579         mov     HV_FAST_VINTR_GET_COOKIE, %o5
580         ta      HV_FAST_TRAP
581         stx     %o1, [%g1]
582         retl
583          nop
584 ENDPROC(sun4v_vintr_get_cookie)
585
586         /* %o0: device handle
587          * %o1: device INO
588          * %o2: cookie
589          *
590          * returns %o0: status
591          */
592 ENTRY(sun4v_vintr_set_cookie)
593         mov     HV_FAST_VINTR_SET_COOKIE, %o5
594         ta      HV_FAST_TRAP
595         retl
596          nop
597 ENDPROC(sun4v_vintr_set_cookie)
598
599         /* %o0: device handle
600          * %o1: device INO
601          * %o2: pointer to unsigned long valid_state
602          *
603          * returns %o0: status
604          */
605 ENTRY(sun4v_vintr_get_valid)
606         mov     %o2, %g1
607         mov     HV_FAST_VINTR_GET_VALID, %o5
608         ta      HV_FAST_TRAP
609         stx     %o1, [%g1]
610         retl
611          nop
612 ENDPROC(sun4v_vintr_get_valid)
613
614         /* %o0: device handle
615          * %o1: device INO
616          * %o2: valid_state
617          *
618          * returns %o0: status
619          */
620 ENTRY(sun4v_vintr_set_valid)
621         mov     HV_FAST_VINTR_SET_VALID, %o5
622         ta      HV_FAST_TRAP
623         retl
624          nop
625 ENDPROC(sun4v_vintr_set_valid)
626
627         /* %o0: device handle
628          * %o1: device INO
629          * %o2: pointer to unsigned long state
630          *
631          * returns %o0: status
632          */
633 ENTRY(sun4v_vintr_get_state)
634         mov     %o2, %g1
635         mov     HV_FAST_VINTR_GET_STATE, %o5
636         ta      HV_FAST_TRAP
637         stx     %o1, [%g1]
638         retl
639          nop
640 ENDPROC(sun4v_vintr_get_state)
641
642         /* %o0: device handle
643          * %o1: device INO
644          * %o2: state
645          *
646          * returns %o0: status
647          */
648 ENTRY(sun4v_vintr_set_state)
649         mov     HV_FAST_VINTR_SET_STATE, %o5
650         ta      HV_FAST_TRAP
651         retl
652          nop
653 ENDPROC(sun4v_vintr_set_state)
654
655         /* %o0: device handle
656          * %o1: device INO
657          * %o2: pointer to unsigned long cpuid
658          *
659          * returns %o0: status
660          */
661 ENTRY(sun4v_vintr_get_target)
662         mov     %o2, %g1
663         mov     HV_FAST_VINTR_GET_TARGET, %o5
664         ta      HV_FAST_TRAP
665         stx     %o1, [%g1]
666         retl
667          nop
668 ENDPROC(sun4v_vintr_get_target)
669
670         /* %o0: device handle
671          * %o1: device INO
672          * %o2: cpuid
673          *
674          * returns %o0: status
675          */
676 ENTRY(sun4v_vintr_set_target)
677         mov     HV_FAST_VINTR_SET_TARGET, %o5
678         ta      HV_FAST_TRAP
679         retl
680          nop
681 ENDPROC(sun4v_vintr_set_target)
682
683         /* %o0: NCS sub-function
684          * %o1: sub-function arg real-address
685          * %o2: sub-function arg size
686          *
687          * returns %o0: status
688          */
689 ENTRY(sun4v_ncs_request)
690         mov     HV_FAST_NCS_REQUEST, %o5
691         ta      HV_FAST_TRAP
692         retl
693          nop
694 ENDPROC(sun4v_ncs_request)
695
696 ENTRY(sun4v_svc_send)
697         save    %sp, -192, %sp
698         mov     %i0, %o0
699         mov     %i1, %o1
700         mov     %i2, %o2
701         mov     HV_FAST_SVC_SEND, %o5
702         ta      HV_FAST_TRAP
703         stx     %o1, [%i3]
704         ret
705         restore
706 ENDPROC(sun4v_svc_send)
707
708 ENTRY(sun4v_svc_recv)
709         save    %sp, -192, %sp
710         mov     %i0, %o0
711         mov     %i1, %o1
712         mov     %i2, %o2
713         mov     HV_FAST_SVC_RECV, %o5
714         ta      HV_FAST_TRAP
715         stx     %o1, [%i3]
716         ret
717         restore
718 ENDPROC(sun4v_svc_recv)
719
720 ENTRY(sun4v_svc_getstatus)
721         mov     HV_FAST_SVC_GETSTATUS, %o5
722         mov     %o1, %o4
723         ta      HV_FAST_TRAP
724         stx     %o1, [%o4]
725         retl
726          nop
727 ENDPROC(sun4v_svc_getstatus)
728
729 ENTRY(sun4v_svc_setstatus)
730         mov     HV_FAST_SVC_SETSTATUS, %o5
731         ta      HV_FAST_TRAP
732         retl
733          nop
734 ENDPROC(sun4v_svc_setstatus)
735
736 ENTRY(sun4v_svc_clrstatus)
737         mov     HV_FAST_SVC_CLRSTATUS, %o5
738         ta      HV_FAST_TRAP
739         retl
740          nop
741 ENDPROC(sun4v_svc_clrstatus)
742
743 ENTRY(sun4v_mmustat_conf)
744         mov     %o1, %o4
745         mov     HV_FAST_MMUSTAT_CONF, %o5
746         ta      HV_FAST_TRAP
747         stx     %o1, [%o4]
748         retl
749          nop
750 ENDPROC(sun4v_mmustat_conf)
751
752 ENTRY(sun4v_mmustat_info)
753         mov     %o0, %o4
754         mov     HV_FAST_MMUSTAT_INFO, %o5
755         ta      HV_FAST_TRAP
756         stx     %o1, [%o4]
757         retl
758          nop
759 ENDPROC(sun4v_mmustat_info)
760
761 ENTRY(sun4v_mmu_demap_all)
762         clr     %o0
763         clr     %o1
764         mov     HV_MMU_ALL, %o2
765         mov     HV_FAST_MMU_DEMAP_ALL, %o5
766         ta      HV_FAST_TRAP
767         retl
768          nop
769 ENDPROC(sun4v_mmu_demap_all)
770
771 ENTRY(sun4v_niagara_getperf)
772         mov     %o0, %o4
773         mov     HV_FAST_GET_PERFREG, %o5
774         ta      HV_FAST_TRAP
775         stx     %o1, [%o4]
776         retl
777          nop
778 ENDPROC(sun4v_niagara_getperf)
779
780 ENTRY(sun4v_niagara_setperf)
781         mov     HV_FAST_SET_PERFREG, %o5
782         ta      HV_FAST_TRAP
783         retl
784          nop
785 ENDPROC(sun4v_niagara_setperf)
786
787 ENTRY(sun4v_niagara2_getperf)
788         mov     %o0, %o4
789         mov     HV_FAST_N2_GET_PERFREG, %o5
790         ta      HV_FAST_TRAP
791         stx     %o1, [%o4]
792         retl
793          nop
794 ENDPROC(sun4v_niagara2_getperf)
795
796 ENTRY(sun4v_niagara2_setperf)
797         mov     HV_FAST_N2_SET_PERFREG, %o5
798         ta      HV_FAST_TRAP
799         retl
800          nop
801 ENDPROC(sun4v_niagara2_setperf)
802
803 ENTRY(sun4v_reboot_data_set)
804         mov     HV_FAST_REBOOT_DATA_SET, %o5
805         ta      HV_FAST_TRAP
806         retl
807          nop
808 ENDPROC(sun4v_reboot_data_set)
809
810 ENTRY(sun4v_vt_get_perfreg)
811         mov     %o1, %o4
812         mov     HV_FAST_VT_GET_PERFREG, %o5
813         ta      HV_FAST_TRAP
814         stx     %o1, [%o4]
815         retl
816          nop
817 ENDPROC(sun4v_vt_get_perfreg)
818
819 ENTRY(sun4v_vt_set_perfreg)
820         mov     HV_FAST_VT_SET_PERFREG, %o5
821         ta      HV_FAST_TRAP
822         retl
823          nop
824 ENDPROC(sun4v_vt_set_perfreg)
825
826 ENTRY(sun4v_t5_get_perfreg)
827         mov     %o1, %o4
828         mov     HV_FAST_T5_GET_PERFREG, %o5
829         ta      HV_FAST_TRAP
830         stx     %o1, [%o4]
831         retl
832          nop
833 ENDPROC(sun4v_t5_get_perfreg)
834
835 ENTRY(sun4v_t5_set_perfreg)
836         mov     HV_FAST_T5_SET_PERFREG, %o5
837         ta      HV_FAST_TRAP
838         retl
839          nop
840 ENDPROC(sun4v_t5_set_perfreg)
841
842 ENTRY(sun4v_m7_get_perfreg)
843         mov     %o1, %o4
844         mov     HV_FAST_M7_GET_PERFREG, %o5
845         ta      HV_FAST_TRAP
846         stx     %o1, [%o4]
847         retl
848         nop
849 ENDPROC(sun4v_m7_get_perfreg)
850
851 ENTRY(sun4v_m7_set_perfreg)
852         mov     HV_FAST_M7_SET_PERFREG, %o5
853         ta      HV_FAST_TRAP
854         retl
855         nop
856 ENDPROC(sun4v_m7_set_perfreg)