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