Linux Audio

Check our new training course

Loading...
v6.2
  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)
v4.10.11
 
  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)