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