Merge tag 'mmc-v4.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc
[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 EXPORT_SYMBOL(sun4v_mach_set_watchdog)
347
348         /* No inputs and does not return.  */
349 ENTRY(sun4v_mach_sir)
350         mov     %o1, %o4
351         mov     HV_FAST_MACH_SIR, %o5
352         ta      HV_FAST_TRAP
353         stx     %o1, [%o4]
354         retl
355          nop
356 ENDPROC(sun4v_mach_sir)
357
358         /* %o0: channel
359          * %o1: ra
360          * %o2: num_entries
361          *
362          * returns %o0: status
363          */
364 ENTRY(sun4v_ldc_tx_qconf)
365         mov     HV_FAST_LDC_TX_QCONF, %o5
366         ta      HV_FAST_TRAP
367         retl
368          nop
369 ENDPROC(sun4v_ldc_tx_qconf)
370
371         /* %o0: channel
372          * %o1: pointer to unsigned long ra
373          * %o2: pointer to unsigned long num_entries
374          *
375          * returns %o0: status
376          */
377 ENTRY(sun4v_ldc_tx_qinfo)
378         mov     %o1, %g1
379         mov     %o2, %g2
380         mov     HV_FAST_LDC_TX_QINFO, %o5
381         ta      HV_FAST_TRAP
382         stx     %o1, [%g1]
383         stx     %o2, [%g2]
384         retl
385          nop
386 ENDPROC(sun4v_ldc_tx_qinfo)
387
388         /* %o0: channel
389          * %o1: pointer to unsigned long head_off
390          * %o2: pointer to unsigned long tail_off
391          * %o2: pointer to unsigned long chan_state
392          *
393          * returns %o0: status
394          */
395 ENTRY(sun4v_ldc_tx_get_state)
396         mov     %o1, %g1
397         mov     %o2, %g2
398         mov     %o3, %g3
399         mov     HV_FAST_LDC_TX_GET_STATE, %o5
400         ta      HV_FAST_TRAP
401         stx     %o1, [%g1]
402         stx     %o2, [%g2]
403         stx     %o3, [%g3]
404         retl
405          nop
406 ENDPROC(sun4v_ldc_tx_get_state)
407
408         /* %o0: channel
409          * %o1: tail_off
410          *
411          * returns %o0: status
412          */
413 ENTRY(sun4v_ldc_tx_set_qtail)
414         mov     HV_FAST_LDC_TX_SET_QTAIL, %o5
415         ta      HV_FAST_TRAP
416         retl
417          nop
418 ENDPROC(sun4v_ldc_tx_set_qtail)
419
420         /* %o0: channel
421          * %o1: ra
422          * %o2: num_entries
423          *
424          * returns %o0: status
425          */
426 ENTRY(sun4v_ldc_rx_qconf)
427         mov     HV_FAST_LDC_RX_QCONF, %o5
428         ta      HV_FAST_TRAP
429         retl
430          nop
431 ENDPROC(sun4v_ldc_rx_qconf)
432
433         /* %o0: channel
434          * %o1: pointer to unsigned long ra
435          * %o2: pointer to unsigned long num_entries
436          *
437          * returns %o0: status
438          */
439 ENTRY(sun4v_ldc_rx_qinfo)
440         mov     %o1, %g1
441         mov     %o2, %g2
442         mov     HV_FAST_LDC_RX_QINFO, %o5
443         ta      HV_FAST_TRAP
444         stx     %o1, [%g1]
445         stx     %o2, [%g2]
446         retl
447          nop
448 ENDPROC(sun4v_ldc_rx_qinfo)
449
450         /* %o0: channel
451          * %o1: pointer to unsigned long head_off
452          * %o2: pointer to unsigned long tail_off
453          * %o2: pointer to unsigned long chan_state
454          *
455          * returns %o0: status
456          */
457 ENTRY(sun4v_ldc_rx_get_state)
458         mov     %o1, %g1
459         mov     %o2, %g2
460         mov     %o3, %g3
461         mov     HV_FAST_LDC_RX_GET_STATE, %o5
462         ta      HV_FAST_TRAP
463         stx     %o1, [%g1]
464         stx     %o2, [%g2]
465         stx     %o3, [%g3]
466         retl
467          nop
468 ENDPROC(sun4v_ldc_rx_get_state)
469
470         /* %o0: channel
471          * %o1: head_off
472          *
473          * returns %o0: status
474          */
475 ENTRY(sun4v_ldc_rx_set_qhead)
476         mov     HV_FAST_LDC_RX_SET_QHEAD, %o5
477         ta      HV_FAST_TRAP
478         retl
479          nop
480 ENDPROC(sun4v_ldc_rx_set_qhead)
481
482         /* %o0: channel
483          * %o1: ra
484          * %o2: num_entries
485          *
486          * returns %o0: status
487          */
488 ENTRY(sun4v_ldc_set_map_table)
489         mov     HV_FAST_LDC_SET_MAP_TABLE, %o5
490         ta      HV_FAST_TRAP
491         retl
492          nop
493 ENDPROC(sun4v_ldc_set_map_table)
494
495         /* %o0: channel
496          * %o1: pointer to unsigned long ra
497          * %o2: pointer to unsigned long num_entries
498          *
499          * returns %o0: status
500          */
501 ENTRY(sun4v_ldc_get_map_table)
502         mov     %o1, %g1
503         mov     %o2, %g2
504         mov     HV_FAST_LDC_GET_MAP_TABLE, %o5
505         ta      HV_FAST_TRAP
506         stx     %o1, [%g1]
507         stx     %o2, [%g2]
508         retl
509          nop
510 ENDPROC(sun4v_ldc_get_map_table)
511
512         /* %o0: channel
513          * %o1: dir_code
514          * %o2: tgt_raddr
515          * %o3: lcl_raddr
516          * %o4: len
517          * %o5: pointer to unsigned long actual_len
518          *
519          * returns %o0: status
520          */
521 ENTRY(sun4v_ldc_copy)
522         mov     %o5, %g1
523         mov     HV_FAST_LDC_COPY, %o5
524         ta      HV_FAST_TRAP
525         stx     %o1, [%g1]
526         retl
527          nop
528 ENDPROC(sun4v_ldc_copy)
529
530         /* %o0: channel
531          * %o1: cookie
532          * %o2: pointer to unsigned long ra
533          * %o3: pointer to unsigned long perm
534          *
535          * returns %o0: status
536          */
537 ENTRY(sun4v_ldc_mapin)
538         mov     %o2, %g1
539         mov     %o3, %g2
540         mov     HV_FAST_LDC_MAPIN, %o5
541         ta      HV_FAST_TRAP
542         stx     %o1, [%g1]
543         stx     %o2, [%g2]
544         retl
545          nop
546 ENDPROC(sun4v_ldc_mapin)
547
548         /* %o0: ra
549          *
550          * returns %o0: status
551          */
552 ENTRY(sun4v_ldc_unmap)
553         mov     HV_FAST_LDC_UNMAP, %o5
554         ta      HV_FAST_TRAP
555         retl
556          nop
557 ENDPROC(sun4v_ldc_unmap)
558
559         /* %o0: channel
560          * %o1: cookie
561          * %o2: mte_cookie
562          *
563          * returns %o0: status
564          */
565 ENTRY(sun4v_ldc_revoke)
566         mov     HV_FAST_LDC_REVOKE, %o5
567         ta      HV_FAST_TRAP
568         retl
569          nop
570 ENDPROC(sun4v_ldc_revoke)
571
572         /* %o0: device handle
573          * %o1: device INO
574          * %o2: pointer to unsigned long cookie
575          *
576          * returns %o0: status
577          */
578 ENTRY(sun4v_vintr_get_cookie)
579         mov     %o2, %g1
580         mov     HV_FAST_VINTR_GET_COOKIE, %o5
581         ta      HV_FAST_TRAP
582         stx     %o1, [%g1]
583         retl
584          nop
585 ENDPROC(sun4v_vintr_get_cookie)
586
587         /* %o0: device handle
588          * %o1: device INO
589          * %o2: cookie
590          *
591          * returns %o0: status
592          */
593 ENTRY(sun4v_vintr_set_cookie)
594         mov     HV_FAST_VINTR_SET_COOKIE, %o5
595         ta      HV_FAST_TRAP
596         retl
597          nop
598 ENDPROC(sun4v_vintr_set_cookie)
599
600         /* %o0: device handle
601          * %o1: device INO
602          * %o2: pointer to unsigned long valid_state
603          *
604          * returns %o0: status
605          */
606 ENTRY(sun4v_vintr_get_valid)
607         mov     %o2, %g1
608         mov     HV_FAST_VINTR_GET_VALID, %o5
609         ta      HV_FAST_TRAP
610         stx     %o1, [%g1]
611         retl
612          nop
613 ENDPROC(sun4v_vintr_get_valid)
614
615         /* %o0: device handle
616          * %o1: device INO
617          * %o2: valid_state
618          *
619          * returns %o0: status
620          */
621 ENTRY(sun4v_vintr_set_valid)
622         mov     HV_FAST_VINTR_SET_VALID, %o5
623         ta      HV_FAST_TRAP
624         retl
625          nop
626 ENDPROC(sun4v_vintr_set_valid)
627
628         /* %o0: device handle
629          * %o1: device INO
630          * %o2: pointer to unsigned long state
631          *
632          * returns %o0: status
633          */
634 ENTRY(sun4v_vintr_get_state)
635         mov     %o2, %g1
636         mov     HV_FAST_VINTR_GET_STATE, %o5
637         ta      HV_FAST_TRAP
638         stx     %o1, [%g1]
639         retl
640          nop
641 ENDPROC(sun4v_vintr_get_state)
642
643         /* %o0: device handle
644          * %o1: device INO
645          * %o2: state
646          *
647          * returns %o0: status
648          */
649 ENTRY(sun4v_vintr_set_state)
650         mov     HV_FAST_VINTR_SET_STATE, %o5
651         ta      HV_FAST_TRAP
652         retl
653          nop
654 ENDPROC(sun4v_vintr_set_state)
655
656         /* %o0: device handle
657          * %o1: device INO
658          * %o2: pointer to unsigned long cpuid
659          *
660          * returns %o0: status
661          */
662 ENTRY(sun4v_vintr_get_target)
663         mov     %o2, %g1
664         mov     HV_FAST_VINTR_GET_TARGET, %o5
665         ta      HV_FAST_TRAP
666         stx     %o1, [%g1]
667         retl
668          nop
669 ENDPROC(sun4v_vintr_get_target)
670
671         /* %o0: device handle
672          * %o1: device INO
673          * %o2: cpuid
674          *
675          * returns %o0: status
676          */
677 ENTRY(sun4v_vintr_set_target)
678         mov     HV_FAST_VINTR_SET_TARGET, %o5
679         ta      HV_FAST_TRAP
680         retl
681          nop
682 ENDPROC(sun4v_vintr_set_target)
683
684         /* %o0: NCS sub-function
685          * %o1: sub-function arg real-address
686          * %o2: sub-function arg size
687          *
688          * returns %o0: status
689          */
690 ENTRY(sun4v_ncs_request)
691         mov     HV_FAST_NCS_REQUEST, %o5
692         ta      HV_FAST_TRAP
693         retl
694          nop
695 ENDPROC(sun4v_ncs_request)
696
697 ENTRY(sun4v_svc_send)
698         save    %sp, -192, %sp
699         mov     %i0, %o0
700         mov     %i1, %o1
701         mov     %i2, %o2
702         mov     HV_FAST_SVC_SEND, %o5
703         ta      HV_FAST_TRAP
704         stx     %o1, [%i3]
705         ret
706         restore
707 ENDPROC(sun4v_svc_send)
708
709 ENTRY(sun4v_svc_recv)
710         save    %sp, -192, %sp
711         mov     %i0, %o0
712         mov     %i1, %o1
713         mov     %i2, %o2
714         mov     HV_FAST_SVC_RECV, %o5
715         ta      HV_FAST_TRAP
716         stx     %o1, [%i3]
717         ret
718         restore
719 ENDPROC(sun4v_svc_recv)
720
721 ENTRY(sun4v_svc_getstatus)
722         mov     HV_FAST_SVC_GETSTATUS, %o5
723         mov     %o1, %o4
724         ta      HV_FAST_TRAP
725         stx     %o1, [%o4]
726         retl
727          nop
728 ENDPROC(sun4v_svc_getstatus)
729
730 ENTRY(sun4v_svc_setstatus)
731         mov     HV_FAST_SVC_SETSTATUS, %o5
732         ta      HV_FAST_TRAP
733         retl
734          nop
735 ENDPROC(sun4v_svc_setstatus)
736
737 ENTRY(sun4v_svc_clrstatus)
738         mov     HV_FAST_SVC_CLRSTATUS, %o5
739         ta      HV_FAST_TRAP
740         retl
741          nop
742 ENDPROC(sun4v_svc_clrstatus)
743
744 ENTRY(sun4v_mmustat_conf)
745         mov     %o1, %o4
746         mov     HV_FAST_MMUSTAT_CONF, %o5
747         ta      HV_FAST_TRAP
748         stx     %o1, [%o4]
749         retl
750          nop
751 ENDPROC(sun4v_mmustat_conf)
752
753 ENTRY(sun4v_mmustat_info)
754         mov     %o0, %o4
755         mov     HV_FAST_MMUSTAT_INFO, %o5
756         ta      HV_FAST_TRAP
757         stx     %o1, [%o4]
758         retl
759          nop
760 ENDPROC(sun4v_mmustat_info)
761
762 ENTRY(sun4v_mmu_demap_all)
763         clr     %o0
764         clr     %o1
765         mov     HV_MMU_ALL, %o2
766         mov     HV_FAST_MMU_DEMAP_ALL, %o5
767         ta      HV_FAST_TRAP
768         retl
769          nop
770 ENDPROC(sun4v_mmu_demap_all)
771
772 ENTRY(sun4v_niagara_getperf)
773         mov     %o0, %o4
774         mov     HV_FAST_GET_PERFREG, %o5
775         ta      HV_FAST_TRAP
776         stx     %o1, [%o4]
777         retl
778          nop
779 ENDPROC(sun4v_niagara_getperf)
780 EXPORT_SYMBOL(sun4v_niagara_getperf)
781
782 ENTRY(sun4v_niagara_setperf)
783         mov     HV_FAST_SET_PERFREG, %o5
784         ta      HV_FAST_TRAP
785         retl
786          nop
787 ENDPROC(sun4v_niagara_setperf)
788 EXPORT_SYMBOL(sun4v_niagara_setperf)
789
790 ENTRY(sun4v_niagara2_getperf)
791         mov     %o0, %o4
792         mov     HV_FAST_N2_GET_PERFREG, %o5
793         ta      HV_FAST_TRAP
794         stx     %o1, [%o4]
795         retl
796          nop
797 ENDPROC(sun4v_niagara2_getperf)
798 EXPORT_SYMBOL(sun4v_niagara2_getperf)
799
800 ENTRY(sun4v_niagara2_setperf)
801         mov     HV_FAST_N2_SET_PERFREG, %o5
802         ta      HV_FAST_TRAP
803         retl
804          nop
805 ENDPROC(sun4v_niagara2_setperf)
806 EXPORT_SYMBOL(sun4v_niagara2_setperf)
807
808 ENTRY(sun4v_reboot_data_set)
809         mov     HV_FAST_REBOOT_DATA_SET, %o5
810         ta      HV_FAST_TRAP
811         retl
812          nop
813 ENDPROC(sun4v_reboot_data_set)
814
815 ENTRY(sun4v_vt_get_perfreg)
816         mov     %o1, %o4
817         mov     HV_FAST_VT_GET_PERFREG, %o5
818         ta      HV_FAST_TRAP
819         stx     %o1, [%o4]
820         retl
821          nop
822 ENDPROC(sun4v_vt_get_perfreg)
823
824 ENTRY(sun4v_vt_set_perfreg)
825         mov     HV_FAST_VT_SET_PERFREG, %o5
826         ta      HV_FAST_TRAP
827         retl
828          nop
829 ENDPROC(sun4v_vt_set_perfreg)
830
831 ENTRY(sun4v_t5_get_perfreg)
832         mov     %o1, %o4
833         mov     HV_FAST_T5_GET_PERFREG, %o5
834         ta      HV_FAST_TRAP
835         stx     %o1, [%o4]
836         retl
837          nop
838 ENDPROC(sun4v_t5_get_perfreg)
839
840 ENTRY(sun4v_t5_set_perfreg)
841         mov     HV_FAST_T5_SET_PERFREG, %o5
842         ta      HV_FAST_TRAP
843         retl
844          nop
845 ENDPROC(sun4v_t5_set_perfreg)
846
847 ENTRY(sun4v_m7_get_perfreg)
848         mov     %o1, %o4
849         mov     HV_FAST_M7_GET_PERFREG, %o5
850         ta      HV_FAST_TRAP
851         stx     %o1, [%o4]
852         retl
853         nop
854 ENDPROC(sun4v_m7_get_perfreg)
855
856 ENTRY(sun4v_m7_set_perfreg)
857         mov     HV_FAST_M7_SET_PERFREG, %o5
858         ta      HV_FAST_TRAP
859         retl
860         nop
861 ENDPROC(sun4v_m7_set_perfreg)