Loading...
1/* SPDX-License-Identifier: GPL-2.0 */
2 /* %o0: devhandle
3 * %o1: devino
4 *
5 * returns %o0: sysino
6 */
7ENTRY(sun4v_devino_to_sysino)
8 mov HV_FAST_INTR_DEVINO2SYSINO, %o5
9 ta HV_FAST_TRAP
10 retl
11 mov %o1, %o0
12ENDPROC(sun4v_devino_to_sysino)
13
14 /* %o0: sysino
15 *
16 * returns %o0: intr_enabled (HV_INTR_{DISABLED,ENABLED})
17 */
18ENTRY(sun4v_intr_getenabled)
19 mov HV_FAST_INTR_GETENABLED, %o5
20 ta HV_FAST_TRAP
21 retl
22 mov %o1, %o0
23ENDPROC(sun4v_intr_getenabled)
24
25 /* %o0: sysino
26 * %o1: intr_enabled (HV_INTR_{DISABLED,ENABLED})
27 */
28ENTRY(sun4v_intr_setenabled)
29 mov HV_FAST_INTR_SETENABLED, %o5
30 ta HV_FAST_TRAP
31 retl
32 nop
33ENDPROC(sun4v_intr_setenabled)
34
35 /* %o0: sysino
36 *
37 * returns %o0: intr_state (HV_INTR_STATE_*)
38 */
39ENTRY(sun4v_intr_getstate)
40 mov HV_FAST_INTR_GETSTATE, %o5
41 ta HV_FAST_TRAP
42 retl
43 mov %o1, %o0
44ENDPROC(sun4v_intr_getstate)
45
46 /* %o0: sysino
47 * %o1: intr_state (HV_INTR_STATE_*)
48 */
49ENTRY(sun4v_intr_setstate)
50 mov HV_FAST_INTR_SETSTATE, %o5
51 ta HV_FAST_TRAP
52 retl
53 nop
54ENDPROC(sun4v_intr_setstate)
55
56 /* %o0: sysino
57 *
58 * returns %o0: cpuid
59 */
60ENTRY(sun4v_intr_gettarget)
61 mov HV_FAST_INTR_GETTARGET, %o5
62 ta HV_FAST_TRAP
63 retl
64 mov %o1, %o0
65ENDPROC(sun4v_intr_gettarget)
66
67 /* %o0: sysino
68 * %o1: cpuid
69 */
70ENTRY(sun4v_intr_settarget)
71 mov HV_FAST_INTR_SETTARGET, %o5
72 ta HV_FAST_TRAP
73 retl
74 nop
75ENDPROC(sun4v_intr_settarget)
76
77 /* %o0: cpuid
78 * %o1: pc
79 * %o2: rtba
80 * %o3: arg0
81 *
82 * returns %o0: status
83 */
84ENTRY(sun4v_cpu_start)
85 mov HV_FAST_CPU_START, %o5
86 ta HV_FAST_TRAP
87 retl
88 nop
89ENDPROC(sun4v_cpu_start)
90
91 /* %o0: cpuid
92 *
93 * returns %o0: status
94 */
95ENTRY(sun4v_cpu_stop)
96 mov HV_FAST_CPU_STOP, %o5
97 ta HV_FAST_TRAP
98 retl
99 nop
100ENDPROC(sun4v_cpu_stop)
101
102 /* returns %o0: status */
103ENTRY(sun4v_cpu_yield)
104 mov HV_FAST_CPU_YIELD, %o5
105 ta HV_FAST_TRAP
106 retl
107 nop
108ENDPROC(sun4v_cpu_yield)
109
110 /* %o0: cpuid
111 *
112 * returns %o0: status
113 */
114ENTRY(sun4v_cpu_poke)
115 mov HV_FAST_CPU_POKE, %o5
116 ta HV_FAST_TRAP
117 retl
118 nop
119ENDPROC(sun4v_cpu_poke)
120
121 /* %o0: type
122 * %o1: queue paddr
123 * %o2: num queue entries
124 *
125 * returns %o0: status
126 */
127ENTRY(sun4v_cpu_qconf)
128 mov HV_FAST_CPU_QCONF, %o5
129 ta HV_FAST_TRAP
130 retl
131 nop
132ENDPROC(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 */
140ENTRY(sun4v_cpu_mondo_send)
141 mov HV_FAST_CPU_MONDO_SEND, %o5
142 ta HV_FAST_TRAP
143 retl
144 nop
145ENDPROC(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 */
152ENTRY(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
1581: retl
159 nop
160ENDPROC(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 */
169ENTRY(sun4v_mmu_map_perm_addr)
170 mov HV_FAST_MMU_MAP_PERM_ADDR, %o5
171 ta HV_FAST_TRAP
172 retl
173 nop
174ENDPROC(sun4v_mmu_map_perm_addr)
175
176 /* %o0: number of TSB descriptions
177 * %o1: TSB descriptions real address
178 *
179 * returns %o0: status
180 */
181ENTRY(sun4v_mmu_tsb_ctx0)
182 mov HV_FAST_MMU_TSB_CTX0, %o5
183 ta HV_FAST_TRAP
184 retl
185 nop
186ENDPROC(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 */
194ENTRY(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]
202ENDPROC(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 */
211ENTRY(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]
217ENDPROC(sun4v_set_version)
218
219 /* %o0: pointer to unsigned long time
220 *
221 * returns %o0: status
222 */
223ENTRY(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
230ENDPROC(sun4v_tod_get)
231
232 /* %o0: time
233 *
234 * returns %o0: status
235 */
236ENTRY(sun4v_tod_set)
237 mov HV_FAST_TOD_SET, %o5
238 ta HV_FAST_TRAP
239 retl
240 nop
241ENDPROC(sun4v_tod_set)
242
243 /* %o0: pointer to unsigned long status
244 *
245 * returns %o0: signed character
246 */
247ENTRY(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
256ENDPROC(sun4v_con_getchar)
257
258 /* %o0: signed long character
259 *
260 * returns %o0: status
261 */
262ENTRY(sun4v_con_putchar)
263 mov HV_FAST_CONS_PUTCHAR, %o5
264 ta HV_FAST_TRAP
265 retl
266 sra %o0, 0, %o0
267ENDPROC(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 */
275ENTRY(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]
2871: retl
288 nop
289ENDPROC(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 */
297ENTRY(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
304ENDPROC(sun4v_con_write)
305
306 /* %o0: soft state
307 * %o1: address of description string
308 *
309 * returns %o0: status
310 */
311ENTRY(sun4v_mach_set_soft_state)
312 mov HV_FAST_MACH_SET_SOFT_STATE, %o5
313 ta HV_FAST_TRAP
314 retl
315 nop
316ENDPROC(sun4v_mach_set_soft_state)
317
318 /* %o0: exit code
319 *
320 * Does not return.
321 */
322ENTRY(sun4v_mach_exit)
323 mov HV_FAST_MACH_EXIT, %o5
324 ta HV_FAST_TRAP
325 retl
326 nop
327ENDPROC(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 */
335ENTRY(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
342ENDPROC(sun4v_mach_desc)
343
344 /* %o0: new timeout in milliseconds
345 * %o1: pointer to unsigned long orig_timeout
346 *
347 * returns %o0: status
348 */
349ENTRY(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]
3550: retl
356 nop
357ENDPROC(sun4v_mach_set_watchdog)
358EXPORT_SYMBOL(sun4v_mach_set_watchdog)
359
360 /* No inputs and does not return. */
361ENTRY(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
368ENDPROC(sun4v_mach_sir)
369
370 /* %o0: channel
371 * %o1: ra
372 * %o2: num_entries
373 *
374 * returns %o0: status
375 */
376ENTRY(sun4v_ldc_tx_qconf)
377 mov HV_FAST_LDC_TX_QCONF, %o5
378 ta HV_FAST_TRAP
379 retl
380 nop
381ENDPROC(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 */
389ENTRY(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
398ENDPROC(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 */
407ENTRY(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
418ENDPROC(sun4v_ldc_tx_get_state)
419
420 /* %o0: channel
421 * %o1: tail_off
422 *
423 * returns %o0: status
424 */
425ENTRY(sun4v_ldc_tx_set_qtail)
426 mov HV_FAST_LDC_TX_SET_QTAIL, %o5
427 ta HV_FAST_TRAP
428 retl
429 nop
430ENDPROC(sun4v_ldc_tx_set_qtail)
431
432 /* %o0: channel
433 * %o1: ra
434 * %o2: num_entries
435 *
436 * returns %o0: status
437 */
438ENTRY(sun4v_ldc_rx_qconf)
439 mov HV_FAST_LDC_RX_QCONF, %o5
440 ta HV_FAST_TRAP
441 retl
442 nop
443ENDPROC(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 */
451ENTRY(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
460ENDPROC(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 */
469ENTRY(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
480ENDPROC(sun4v_ldc_rx_get_state)
481
482 /* %o0: channel
483 * %o1: head_off
484 *
485 * returns %o0: status
486 */
487ENTRY(sun4v_ldc_rx_set_qhead)
488 mov HV_FAST_LDC_RX_SET_QHEAD, %o5
489 ta HV_FAST_TRAP
490 retl
491 nop
492ENDPROC(sun4v_ldc_rx_set_qhead)
493
494 /* %o0: channel
495 * %o1: ra
496 * %o2: num_entries
497 *
498 * returns %o0: status
499 */
500ENTRY(sun4v_ldc_set_map_table)
501 mov HV_FAST_LDC_SET_MAP_TABLE, %o5
502 ta HV_FAST_TRAP
503 retl
504 nop
505ENDPROC(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 */
513ENTRY(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
522ENDPROC(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 */
533ENTRY(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
540ENDPROC(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 */
549ENTRY(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
558ENDPROC(sun4v_ldc_mapin)
559
560 /* %o0: ra
561 *
562 * returns %o0: status
563 */
564ENTRY(sun4v_ldc_unmap)
565 mov HV_FAST_LDC_UNMAP, %o5
566 ta HV_FAST_TRAP
567 retl
568 nop
569ENDPROC(sun4v_ldc_unmap)
570
571 /* %o0: channel
572 * %o1: cookie
573 * %o2: mte_cookie
574 *
575 * returns %o0: status
576 */
577ENTRY(sun4v_ldc_revoke)
578 mov HV_FAST_LDC_REVOKE, %o5
579 ta HV_FAST_TRAP
580 retl
581 nop
582ENDPROC(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 */
590ENTRY(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
597ENDPROC(sun4v_vintr_get_cookie)
598
599 /* %o0: device handle
600 * %o1: device INO
601 * %o2: cookie
602 *
603 * returns %o0: status
604 */
605ENTRY(sun4v_vintr_set_cookie)
606 mov HV_FAST_VINTR_SET_COOKIE, %o5
607 ta HV_FAST_TRAP
608 retl
609 nop
610ENDPROC(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 */
618ENTRY(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
625ENDPROC(sun4v_vintr_get_valid)
626
627 /* %o0: device handle
628 * %o1: device INO
629 * %o2: valid_state
630 *
631 * returns %o0: status
632 */
633ENTRY(sun4v_vintr_set_valid)
634 mov HV_FAST_VINTR_SET_VALID, %o5
635 ta HV_FAST_TRAP
636 retl
637 nop
638ENDPROC(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 */
646ENTRY(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
653ENDPROC(sun4v_vintr_get_state)
654
655 /* %o0: device handle
656 * %o1: device INO
657 * %o2: state
658 *
659 * returns %o0: status
660 */
661ENTRY(sun4v_vintr_set_state)
662 mov HV_FAST_VINTR_SET_STATE, %o5
663 ta HV_FAST_TRAP
664 retl
665 nop
666ENDPROC(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 */
674ENTRY(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
681ENDPROC(sun4v_vintr_get_target)
682
683 /* %o0: device handle
684 * %o1: device INO
685 * %o2: cpuid
686 *
687 * returns %o0: status
688 */
689ENTRY(sun4v_vintr_set_target)
690 mov HV_FAST_VINTR_SET_TARGET, %o5
691 ta HV_FAST_TRAP
692 retl
693 nop
694ENDPROC(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 */
702ENTRY(sun4v_ncs_request)
703 mov HV_FAST_NCS_REQUEST, %o5
704 ta HV_FAST_TRAP
705 retl
706 nop
707ENDPROC(sun4v_ncs_request)
708
709ENTRY(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
719ENDPROC(sun4v_svc_send)
720
721ENTRY(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
731ENDPROC(sun4v_svc_recv)
732
733ENTRY(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
740ENDPROC(sun4v_svc_getstatus)
741
742ENTRY(sun4v_svc_setstatus)
743 mov HV_FAST_SVC_SETSTATUS, %o5
744 ta HV_FAST_TRAP
745 retl
746 nop
747ENDPROC(sun4v_svc_setstatus)
748
749ENTRY(sun4v_svc_clrstatus)
750 mov HV_FAST_SVC_CLRSTATUS, %o5
751 ta HV_FAST_TRAP
752 retl
753 nop
754ENDPROC(sun4v_svc_clrstatus)
755
756ENTRY(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
763ENDPROC(sun4v_mmustat_conf)
764
765ENTRY(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
772ENDPROC(sun4v_mmustat_info)
773
774ENTRY(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
782ENDPROC(sun4v_mmu_demap_all)
783
784ENTRY(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
791ENDPROC(sun4v_niagara_getperf)
792EXPORT_SYMBOL(sun4v_niagara_getperf)
793
794ENTRY(sun4v_niagara_setperf)
795 mov HV_FAST_SET_PERFREG, %o5
796 ta HV_FAST_TRAP
797 retl
798 nop
799ENDPROC(sun4v_niagara_setperf)
800EXPORT_SYMBOL(sun4v_niagara_setperf)
801
802ENTRY(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
809ENDPROC(sun4v_niagara2_getperf)
810EXPORT_SYMBOL(sun4v_niagara2_getperf)
811
812ENTRY(sun4v_niagara2_setperf)
813 mov HV_FAST_N2_SET_PERFREG, %o5
814 ta HV_FAST_TRAP
815 retl
816 nop
817ENDPROC(sun4v_niagara2_setperf)
818EXPORT_SYMBOL(sun4v_niagara2_setperf)
819
820ENTRY(sun4v_reboot_data_set)
821 mov HV_FAST_REBOOT_DATA_SET, %o5
822 ta HV_FAST_TRAP
823 retl
824 nop
825ENDPROC(sun4v_reboot_data_set)
826
827ENTRY(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
834ENDPROC(sun4v_vt_get_perfreg)
835
836ENTRY(sun4v_vt_set_perfreg)
837 mov HV_FAST_VT_SET_PERFREG, %o5
838 ta HV_FAST_TRAP
839 retl
840 nop
841ENDPROC(sun4v_vt_set_perfreg)
842
843ENTRY(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
850ENDPROC(sun4v_t5_get_perfreg)
851
852ENTRY(sun4v_t5_set_perfreg)
853 mov HV_FAST_T5_SET_PERFREG, %o5
854 ta HV_FAST_TRAP
855 retl
856 nop
857ENDPROC(sun4v_t5_set_perfreg)
858
859ENTRY(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
866ENDPROC(sun4v_m7_get_perfreg)
867
868ENTRY(sun4v_m7_set_perfreg)
869 mov HV_FAST_M7_SET_PERFREG, %o5
870 ta HV_FAST_TRAP
871 retl
872 nop
873ENDPROC(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 */
886ENTRY(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]
893ENDPROC(sun4v_ccb_submit)
894EXPORT_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 */
905ENTRY(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]
914ENDPROC(sun4v_ccb_info)
915EXPORT_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 */
923ENTRY(sun4v_ccb_kill)
924 mov %o1, %g1
925 mov HV_CCB_KILL, %o5
926 ta HV_FAST_TRAP
927 retl
928 sth %o1, [%g1]
929ENDPROC(sun4v_ccb_kill)
930EXPORT_SYMBOL(sun4v_ccb_kill)
1 /* %o0: devhandle
2 * %o1: devino
3 *
4 * returns %o0: sysino
5 */
6ENTRY(sun4v_devino_to_sysino)
7 mov HV_FAST_INTR_DEVINO2SYSINO, %o5
8 ta HV_FAST_TRAP
9 retl
10 mov %o1, %o0
11ENDPROC(sun4v_devino_to_sysino)
12
13 /* %o0: sysino
14 *
15 * returns %o0: intr_enabled (HV_INTR_{DISABLED,ENABLED})
16 */
17ENTRY(sun4v_intr_getenabled)
18 mov HV_FAST_INTR_GETENABLED, %o5
19 ta HV_FAST_TRAP
20 retl
21 mov %o1, %o0
22ENDPROC(sun4v_intr_getenabled)
23
24 /* %o0: sysino
25 * %o1: intr_enabled (HV_INTR_{DISABLED,ENABLED})
26 */
27ENTRY(sun4v_intr_setenabled)
28 mov HV_FAST_INTR_SETENABLED, %o5
29 ta HV_FAST_TRAP
30 retl
31 nop
32ENDPROC(sun4v_intr_setenabled)
33
34 /* %o0: sysino
35 *
36 * returns %o0: intr_state (HV_INTR_STATE_*)
37 */
38ENTRY(sun4v_intr_getstate)
39 mov HV_FAST_INTR_GETSTATE, %o5
40 ta HV_FAST_TRAP
41 retl
42 mov %o1, %o0
43ENDPROC(sun4v_intr_getstate)
44
45 /* %o0: sysino
46 * %o1: intr_state (HV_INTR_STATE_*)
47 */
48ENTRY(sun4v_intr_setstate)
49 mov HV_FAST_INTR_SETSTATE, %o5
50 ta HV_FAST_TRAP
51 retl
52 nop
53ENDPROC(sun4v_intr_setstate)
54
55 /* %o0: sysino
56 *
57 * returns %o0: cpuid
58 */
59ENTRY(sun4v_intr_gettarget)
60 mov HV_FAST_INTR_GETTARGET, %o5
61 ta HV_FAST_TRAP
62 retl
63 mov %o1, %o0
64ENDPROC(sun4v_intr_gettarget)
65
66 /* %o0: sysino
67 * %o1: cpuid
68 */
69ENTRY(sun4v_intr_settarget)
70 mov HV_FAST_INTR_SETTARGET, %o5
71 ta HV_FAST_TRAP
72 retl
73 nop
74ENDPROC(sun4v_intr_settarget)
75
76 /* %o0: cpuid
77 * %o1: pc
78 * %o2: rtba
79 * %o3: arg0
80 *
81 * returns %o0: status
82 */
83ENTRY(sun4v_cpu_start)
84 mov HV_FAST_CPU_START, %o5
85 ta HV_FAST_TRAP
86 retl
87 nop
88ENDPROC(sun4v_cpu_start)
89
90 /* %o0: cpuid
91 *
92 * returns %o0: status
93 */
94ENTRY(sun4v_cpu_stop)
95 mov HV_FAST_CPU_STOP, %o5
96 ta HV_FAST_TRAP
97 retl
98 nop
99ENDPROC(sun4v_cpu_stop)
100
101 /* returns %o0: status */
102ENTRY(sun4v_cpu_yield)
103 mov HV_FAST_CPU_YIELD, %o5
104 ta HV_FAST_TRAP
105 retl
106 nop
107ENDPROC(sun4v_cpu_yield)
108
109 /* %o0: type
110 * %o1: queue paddr
111 * %o2: num queue entries
112 *
113 * returns %o0: status
114 */
115ENTRY(sun4v_cpu_qconf)
116 mov HV_FAST_CPU_QCONF, %o5
117 ta HV_FAST_TRAP
118 retl
119 nop
120ENDPROC(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 */
128ENTRY(sun4v_cpu_mondo_send)
129 mov HV_FAST_CPU_MONDO_SEND, %o5
130 ta HV_FAST_TRAP
131 retl
132 nop
133ENDPROC(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 */
140ENTRY(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
1461: retl
147 nop
148ENDPROC(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 */
157ENTRY(sun4v_mmu_map_perm_addr)
158 mov HV_FAST_MMU_MAP_PERM_ADDR, %o5
159 ta HV_FAST_TRAP
160 retl
161 nop
162ENDPROC(sun4v_mmu_map_perm_addr)
163
164 /* %o0: number of TSB descriptions
165 * %o1: TSB descriptions real address
166 *
167 * returns %o0: status
168 */
169ENTRY(sun4v_mmu_tsb_ctx0)
170 mov HV_FAST_MMU_TSB_CTX0, %o5
171 ta HV_FAST_TRAP
172 retl
173 nop
174ENDPROC(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 */
182ENTRY(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]
190ENDPROC(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 */
199ENTRY(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]
205ENDPROC(sun4v_set_version)
206
207 /* %o0: pointer to unsigned long time
208 *
209 * returns %o0: status
210 */
211ENTRY(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
218ENDPROC(sun4v_tod_get)
219
220 /* %o0: time
221 *
222 * returns %o0: status
223 */
224ENTRY(sun4v_tod_set)
225 mov HV_FAST_TOD_SET, %o5
226 ta HV_FAST_TRAP
227 retl
228 nop
229ENDPROC(sun4v_tod_set)
230
231 /* %o0: pointer to unsigned long status
232 *
233 * returns %o0: signed character
234 */
235ENTRY(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
244ENDPROC(sun4v_con_getchar)
245
246 /* %o0: signed long character
247 *
248 * returns %o0: status
249 */
250ENTRY(sun4v_con_putchar)
251 mov HV_FAST_CONS_PUTCHAR, %o5
252 ta HV_FAST_TRAP
253 retl
254 sra %o0, 0, %o0
255ENDPROC(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 */
263ENTRY(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]
2751: retl
276 nop
277ENDPROC(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 */
285ENTRY(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
292ENDPROC(sun4v_con_write)
293
294 /* %o0: soft state
295 * %o1: address of description string
296 *
297 * returns %o0: status
298 */
299ENTRY(sun4v_mach_set_soft_state)
300 mov HV_FAST_MACH_SET_SOFT_STATE, %o5
301 ta HV_FAST_TRAP
302 retl
303 nop
304ENDPROC(sun4v_mach_set_soft_state)
305
306 /* %o0: exit code
307 *
308 * Does not return.
309 */
310ENTRY(sun4v_mach_exit)
311 mov HV_FAST_MACH_EXIT, %o5
312 ta HV_FAST_TRAP
313 retl
314 nop
315ENDPROC(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 */
323ENTRY(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
330ENDPROC(sun4v_mach_desc)
331
332 /* %o0: new timeout in milliseconds
333 * %o1: pointer to unsigned long orig_timeout
334 *
335 * returns %o0: status
336 */
337ENTRY(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]
3430: retl
344 nop
345ENDPROC(sun4v_mach_set_watchdog)
346EXPORT_SYMBOL(sun4v_mach_set_watchdog)
347
348 /* No inputs and does not return. */
349ENTRY(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
356ENDPROC(sun4v_mach_sir)
357
358 /* %o0: channel
359 * %o1: ra
360 * %o2: num_entries
361 *
362 * returns %o0: status
363 */
364ENTRY(sun4v_ldc_tx_qconf)
365 mov HV_FAST_LDC_TX_QCONF, %o5
366 ta HV_FAST_TRAP
367 retl
368 nop
369ENDPROC(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 */
377ENTRY(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
386ENDPROC(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 */
395ENTRY(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
406ENDPROC(sun4v_ldc_tx_get_state)
407
408 /* %o0: channel
409 * %o1: tail_off
410 *
411 * returns %o0: status
412 */
413ENTRY(sun4v_ldc_tx_set_qtail)
414 mov HV_FAST_LDC_TX_SET_QTAIL, %o5
415 ta HV_FAST_TRAP
416 retl
417 nop
418ENDPROC(sun4v_ldc_tx_set_qtail)
419
420 /* %o0: channel
421 * %o1: ra
422 * %o2: num_entries
423 *
424 * returns %o0: status
425 */
426ENTRY(sun4v_ldc_rx_qconf)
427 mov HV_FAST_LDC_RX_QCONF, %o5
428 ta HV_FAST_TRAP
429 retl
430 nop
431ENDPROC(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 */
439ENTRY(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
448ENDPROC(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 */
457ENTRY(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
468ENDPROC(sun4v_ldc_rx_get_state)
469
470 /* %o0: channel
471 * %o1: head_off
472 *
473 * returns %o0: status
474 */
475ENTRY(sun4v_ldc_rx_set_qhead)
476 mov HV_FAST_LDC_RX_SET_QHEAD, %o5
477 ta HV_FAST_TRAP
478 retl
479 nop
480ENDPROC(sun4v_ldc_rx_set_qhead)
481
482 /* %o0: channel
483 * %o1: ra
484 * %o2: num_entries
485 *
486 * returns %o0: status
487 */
488ENTRY(sun4v_ldc_set_map_table)
489 mov HV_FAST_LDC_SET_MAP_TABLE, %o5
490 ta HV_FAST_TRAP
491 retl
492 nop
493ENDPROC(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 */
501ENTRY(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
510ENDPROC(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 */
521ENTRY(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
528ENDPROC(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 */
537ENTRY(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
546ENDPROC(sun4v_ldc_mapin)
547
548 /* %o0: ra
549 *
550 * returns %o0: status
551 */
552ENTRY(sun4v_ldc_unmap)
553 mov HV_FAST_LDC_UNMAP, %o5
554 ta HV_FAST_TRAP
555 retl
556 nop
557ENDPROC(sun4v_ldc_unmap)
558
559 /* %o0: channel
560 * %o1: cookie
561 * %o2: mte_cookie
562 *
563 * returns %o0: status
564 */
565ENTRY(sun4v_ldc_revoke)
566 mov HV_FAST_LDC_REVOKE, %o5
567 ta HV_FAST_TRAP
568 retl
569 nop
570ENDPROC(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 */
578ENTRY(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
585ENDPROC(sun4v_vintr_get_cookie)
586
587 /* %o0: device handle
588 * %o1: device INO
589 * %o2: cookie
590 *
591 * returns %o0: status
592 */
593ENTRY(sun4v_vintr_set_cookie)
594 mov HV_FAST_VINTR_SET_COOKIE, %o5
595 ta HV_FAST_TRAP
596 retl
597 nop
598ENDPROC(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 */
606ENTRY(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
613ENDPROC(sun4v_vintr_get_valid)
614
615 /* %o0: device handle
616 * %o1: device INO
617 * %o2: valid_state
618 *
619 * returns %o0: status
620 */
621ENTRY(sun4v_vintr_set_valid)
622 mov HV_FAST_VINTR_SET_VALID, %o5
623 ta HV_FAST_TRAP
624 retl
625 nop
626ENDPROC(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 */
634ENTRY(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
641ENDPROC(sun4v_vintr_get_state)
642
643 /* %o0: device handle
644 * %o1: device INO
645 * %o2: state
646 *
647 * returns %o0: status
648 */
649ENTRY(sun4v_vintr_set_state)
650 mov HV_FAST_VINTR_SET_STATE, %o5
651 ta HV_FAST_TRAP
652 retl
653 nop
654ENDPROC(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 */
662ENTRY(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
669ENDPROC(sun4v_vintr_get_target)
670
671 /* %o0: device handle
672 * %o1: device INO
673 * %o2: cpuid
674 *
675 * returns %o0: status
676 */
677ENTRY(sun4v_vintr_set_target)
678 mov HV_FAST_VINTR_SET_TARGET, %o5
679 ta HV_FAST_TRAP
680 retl
681 nop
682ENDPROC(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 */
690ENTRY(sun4v_ncs_request)
691 mov HV_FAST_NCS_REQUEST, %o5
692 ta HV_FAST_TRAP
693 retl
694 nop
695ENDPROC(sun4v_ncs_request)
696
697ENTRY(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
707ENDPROC(sun4v_svc_send)
708
709ENTRY(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
719ENDPROC(sun4v_svc_recv)
720
721ENTRY(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
728ENDPROC(sun4v_svc_getstatus)
729
730ENTRY(sun4v_svc_setstatus)
731 mov HV_FAST_SVC_SETSTATUS, %o5
732 ta HV_FAST_TRAP
733 retl
734 nop
735ENDPROC(sun4v_svc_setstatus)
736
737ENTRY(sun4v_svc_clrstatus)
738 mov HV_FAST_SVC_CLRSTATUS, %o5
739 ta HV_FAST_TRAP
740 retl
741 nop
742ENDPROC(sun4v_svc_clrstatus)
743
744ENTRY(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
751ENDPROC(sun4v_mmustat_conf)
752
753ENTRY(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
760ENDPROC(sun4v_mmustat_info)
761
762ENTRY(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
770ENDPROC(sun4v_mmu_demap_all)
771
772ENTRY(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
779ENDPROC(sun4v_niagara_getperf)
780EXPORT_SYMBOL(sun4v_niagara_getperf)
781
782ENTRY(sun4v_niagara_setperf)
783 mov HV_FAST_SET_PERFREG, %o5
784 ta HV_FAST_TRAP
785 retl
786 nop
787ENDPROC(sun4v_niagara_setperf)
788EXPORT_SYMBOL(sun4v_niagara_setperf)
789
790ENTRY(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
797ENDPROC(sun4v_niagara2_getperf)
798EXPORT_SYMBOL(sun4v_niagara2_getperf)
799
800ENTRY(sun4v_niagara2_setperf)
801 mov HV_FAST_N2_SET_PERFREG, %o5
802 ta HV_FAST_TRAP
803 retl
804 nop
805ENDPROC(sun4v_niagara2_setperf)
806EXPORT_SYMBOL(sun4v_niagara2_setperf)
807
808ENTRY(sun4v_reboot_data_set)
809 mov HV_FAST_REBOOT_DATA_SET, %o5
810 ta HV_FAST_TRAP
811 retl
812 nop
813ENDPROC(sun4v_reboot_data_set)
814
815ENTRY(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
822ENDPROC(sun4v_vt_get_perfreg)
823
824ENTRY(sun4v_vt_set_perfreg)
825 mov HV_FAST_VT_SET_PERFREG, %o5
826 ta HV_FAST_TRAP
827 retl
828 nop
829ENDPROC(sun4v_vt_set_perfreg)
830
831ENTRY(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
838ENDPROC(sun4v_t5_get_perfreg)
839
840ENTRY(sun4v_t5_set_perfreg)
841 mov HV_FAST_T5_SET_PERFREG, %o5
842 ta HV_FAST_TRAP
843 retl
844 nop
845ENDPROC(sun4v_t5_set_perfreg)
846
847ENTRY(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
854ENDPROC(sun4v_m7_get_perfreg)
855
856ENTRY(sun4v_m7_set_perfreg)
857 mov HV_FAST_M7_SET_PERFREG, %o5
858 ta HV_FAST_TRAP
859 retl
860 nop
861ENDPROC(sun4v_m7_set_perfreg)