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) |
931 | |