162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci	/* %o0: devhandle
362306a36Sopenharmony_ci	 * %o1:	devino
462306a36Sopenharmony_ci	 *
562306a36Sopenharmony_ci	 * returns %o0: sysino
662306a36Sopenharmony_ci	 */
762306a36Sopenharmony_ciENTRY(sun4v_devino_to_sysino)
862306a36Sopenharmony_ci	mov	HV_FAST_INTR_DEVINO2SYSINO, %o5
962306a36Sopenharmony_ci	ta	HV_FAST_TRAP
1062306a36Sopenharmony_ci	retl
1162306a36Sopenharmony_ci	 mov	%o1, %o0
1262306a36Sopenharmony_ciENDPROC(sun4v_devino_to_sysino)
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci	/* %o0: sysino
1562306a36Sopenharmony_ci	 *
1662306a36Sopenharmony_ci	 * returns %o0: intr_enabled (HV_INTR_{DISABLED,ENABLED})
1762306a36Sopenharmony_ci	 */
1862306a36Sopenharmony_ciENTRY(sun4v_intr_getenabled)
1962306a36Sopenharmony_ci	mov	HV_FAST_INTR_GETENABLED, %o5
2062306a36Sopenharmony_ci	ta	HV_FAST_TRAP
2162306a36Sopenharmony_ci	retl
2262306a36Sopenharmony_ci	 mov	%o1, %o0
2362306a36Sopenharmony_ciENDPROC(sun4v_intr_getenabled)
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci	/* %o0: sysino
2662306a36Sopenharmony_ci	 * %o1: intr_enabled (HV_INTR_{DISABLED,ENABLED})
2762306a36Sopenharmony_ci	 */
2862306a36Sopenharmony_ciENTRY(sun4v_intr_setenabled)
2962306a36Sopenharmony_ci	mov	HV_FAST_INTR_SETENABLED, %o5
3062306a36Sopenharmony_ci	ta	HV_FAST_TRAP
3162306a36Sopenharmony_ci	retl
3262306a36Sopenharmony_ci	 nop
3362306a36Sopenharmony_ciENDPROC(sun4v_intr_setenabled)
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci	/* %o0: sysino
3662306a36Sopenharmony_ci	 *
3762306a36Sopenharmony_ci	 * returns %o0: intr_state (HV_INTR_STATE_*)
3862306a36Sopenharmony_ci	 */
3962306a36Sopenharmony_ciENTRY(sun4v_intr_getstate)
4062306a36Sopenharmony_ci	mov	HV_FAST_INTR_GETSTATE, %o5
4162306a36Sopenharmony_ci	ta	HV_FAST_TRAP
4262306a36Sopenharmony_ci	retl
4362306a36Sopenharmony_ci	 mov	%o1, %o0
4462306a36Sopenharmony_ciENDPROC(sun4v_intr_getstate)
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci	/* %o0: sysino
4762306a36Sopenharmony_ci	 * %o1: intr_state (HV_INTR_STATE_*)
4862306a36Sopenharmony_ci	 */
4962306a36Sopenharmony_ciENTRY(sun4v_intr_setstate)
5062306a36Sopenharmony_ci	mov	HV_FAST_INTR_SETSTATE, %o5
5162306a36Sopenharmony_ci	ta	HV_FAST_TRAP
5262306a36Sopenharmony_ci	retl
5362306a36Sopenharmony_ci	 nop
5462306a36Sopenharmony_ciENDPROC(sun4v_intr_setstate)
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci	/* %o0: sysino
5762306a36Sopenharmony_ci	 *
5862306a36Sopenharmony_ci	 * returns %o0: cpuid
5962306a36Sopenharmony_ci	 */
6062306a36Sopenharmony_ciENTRY(sun4v_intr_gettarget)
6162306a36Sopenharmony_ci	mov	HV_FAST_INTR_GETTARGET, %o5
6262306a36Sopenharmony_ci	ta	HV_FAST_TRAP
6362306a36Sopenharmony_ci	retl
6462306a36Sopenharmony_ci	 mov	%o1, %o0
6562306a36Sopenharmony_ciENDPROC(sun4v_intr_gettarget)
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci	/* %o0: sysino
6862306a36Sopenharmony_ci	 * %o1: cpuid
6962306a36Sopenharmony_ci	 */
7062306a36Sopenharmony_ciENTRY(sun4v_intr_settarget)
7162306a36Sopenharmony_ci	mov	HV_FAST_INTR_SETTARGET, %o5
7262306a36Sopenharmony_ci	ta	HV_FAST_TRAP
7362306a36Sopenharmony_ci	retl
7462306a36Sopenharmony_ci	 nop
7562306a36Sopenharmony_ciENDPROC(sun4v_intr_settarget)
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci	/* %o0:	cpuid
7862306a36Sopenharmony_ci	 * %o1: pc
7962306a36Sopenharmony_ci	 * %o2:	rtba
8062306a36Sopenharmony_ci	 * %o3:	arg0
8162306a36Sopenharmony_ci	 *
8262306a36Sopenharmony_ci	 * returns %o0:	status
8362306a36Sopenharmony_ci	 */
8462306a36Sopenharmony_ciENTRY(sun4v_cpu_start)
8562306a36Sopenharmony_ci	mov	HV_FAST_CPU_START, %o5
8662306a36Sopenharmony_ci	ta	HV_FAST_TRAP
8762306a36Sopenharmony_ci	retl
8862306a36Sopenharmony_ci	 nop
8962306a36Sopenharmony_ciENDPROC(sun4v_cpu_start)
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci	/* %o0:	cpuid
9262306a36Sopenharmony_ci	 *
9362306a36Sopenharmony_ci	 * returns %o0: status
9462306a36Sopenharmony_ci	 */
9562306a36Sopenharmony_ciENTRY(sun4v_cpu_stop)
9662306a36Sopenharmony_ci	mov	HV_FAST_CPU_STOP, %o5
9762306a36Sopenharmony_ci	ta	HV_FAST_TRAP
9862306a36Sopenharmony_ci	retl
9962306a36Sopenharmony_ci	 nop
10062306a36Sopenharmony_ciENDPROC(sun4v_cpu_stop)
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ci	/* returns %o0:	status  */
10362306a36Sopenharmony_ciENTRY(sun4v_cpu_yield)
10462306a36Sopenharmony_ci	mov	HV_FAST_CPU_YIELD, %o5
10562306a36Sopenharmony_ci	ta	HV_FAST_TRAP
10662306a36Sopenharmony_ci	retl
10762306a36Sopenharmony_ci	 nop
10862306a36Sopenharmony_ciENDPROC(sun4v_cpu_yield)
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_ci	/* %o0: cpuid
11162306a36Sopenharmony_ci	 *
11262306a36Sopenharmony_ci	 * returns %o0:	status
11362306a36Sopenharmony_ci	 */
11462306a36Sopenharmony_ciENTRY(sun4v_cpu_poke)
11562306a36Sopenharmony_ci	mov     HV_FAST_CPU_POKE, %o5
11662306a36Sopenharmony_ci	ta      HV_FAST_TRAP
11762306a36Sopenharmony_ci	retl
11862306a36Sopenharmony_ci	 nop
11962306a36Sopenharmony_ciENDPROC(sun4v_cpu_poke)
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_ci	/* %o0:	type
12262306a36Sopenharmony_ci	 * %o1:	queue paddr
12362306a36Sopenharmony_ci	 * %o2:	num queue entries
12462306a36Sopenharmony_ci	 *
12562306a36Sopenharmony_ci	 * returns %o0:	status
12662306a36Sopenharmony_ci	 */
12762306a36Sopenharmony_ciENTRY(sun4v_cpu_qconf)
12862306a36Sopenharmony_ci	mov	HV_FAST_CPU_QCONF, %o5
12962306a36Sopenharmony_ci	ta	HV_FAST_TRAP
13062306a36Sopenharmony_ci	retl
13162306a36Sopenharmony_ci	 nop
13262306a36Sopenharmony_ciENDPROC(sun4v_cpu_qconf)
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_ci	/* %o0:	num cpus in cpu list
13562306a36Sopenharmony_ci	 * %o1:	cpu list paddr
13662306a36Sopenharmony_ci	 * %o2:	mondo block paddr
13762306a36Sopenharmony_ci	 *
13862306a36Sopenharmony_ci	 * returns %o0: status
13962306a36Sopenharmony_ci	 */
14062306a36Sopenharmony_ciENTRY(sun4v_cpu_mondo_send)
14162306a36Sopenharmony_ci	mov	HV_FAST_CPU_MONDO_SEND, %o5
14262306a36Sopenharmony_ci	ta	HV_FAST_TRAP
14362306a36Sopenharmony_ci	retl
14462306a36Sopenharmony_ci	 nop
14562306a36Sopenharmony_ciENDPROC(sun4v_cpu_mondo_send)
14662306a36Sopenharmony_ci
14762306a36Sopenharmony_ci	/* %o0:	CPU ID
14862306a36Sopenharmony_ci	 *
14962306a36Sopenharmony_ci	 * returns %o0:	-status if status non-zero, else
15062306a36Sopenharmony_ci	 *         %o0:	cpu state as HV_CPU_STATE_*
15162306a36Sopenharmony_ci	 */
15262306a36Sopenharmony_ciENTRY(sun4v_cpu_state)
15362306a36Sopenharmony_ci	mov	HV_FAST_CPU_STATE, %o5
15462306a36Sopenharmony_ci	ta	HV_FAST_TRAP
15562306a36Sopenharmony_ci	brnz,pn	%o0, 1f
15662306a36Sopenharmony_ci	 sub	%g0, %o0, %o0
15762306a36Sopenharmony_ci	mov	%o1, %o0
15862306a36Sopenharmony_ci1:	retl
15962306a36Sopenharmony_ci	 nop
16062306a36Sopenharmony_ciENDPROC(sun4v_cpu_state)
16162306a36Sopenharmony_ci
16262306a36Sopenharmony_ci	/* %o0: virtual address
16362306a36Sopenharmony_ci	 * %o1: must be zero
16462306a36Sopenharmony_ci	 * %o2: TTE
16562306a36Sopenharmony_ci	 * %o3: HV_MMU_* flags
16662306a36Sopenharmony_ci	 *
16762306a36Sopenharmony_ci	 * returns %o0: status
16862306a36Sopenharmony_ci	 */
16962306a36Sopenharmony_ciENTRY(sun4v_mmu_map_perm_addr)
17062306a36Sopenharmony_ci	mov	HV_FAST_MMU_MAP_PERM_ADDR, %o5
17162306a36Sopenharmony_ci	ta	HV_FAST_TRAP
17262306a36Sopenharmony_ci	retl
17362306a36Sopenharmony_ci	 nop
17462306a36Sopenharmony_ciENDPROC(sun4v_mmu_map_perm_addr)
17562306a36Sopenharmony_ci
17662306a36Sopenharmony_ci	/* %o0: number of TSB descriptions
17762306a36Sopenharmony_ci	 * %o1: TSB descriptions real address
17862306a36Sopenharmony_ci	 *
17962306a36Sopenharmony_ci	 * returns %o0: status
18062306a36Sopenharmony_ci	 */
18162306a36Sopenharmony_ciENTRY(sun4v_mmu_tsb_ctx0)
18262306a36Sopenharmony_ci	mov	HV_FAST_MMU_TSB_CTX0, %o5
18362306a36Sopenharmony_ci	ta	HV_FAST_TRAP
18462306a36Sopenharmony_ci	retl
18562306a36Sopenharmony_ci	 nop
18662306a36Sopenharmony_ciENDPROC(sun4v_mmu_tsb_ctx0)
18762306a36Sopenharmony_ci
18862306a36Sopenharmony_ci	/* %o0:	API group number
18962306a36Sopenharmony_ci	 * %o1: pointer to unsigned long major number storage
19062306a36Sopenharmony_ci	 * %o2: pointer to unsigned long minor number storage
19162306a36Sopenharmony_ci	 *
19262306a36Sopenharmony_ci	 * returns %o0: status
19362306a36Sopenharmony_ci	 */
19462306a36Sopenharmony_ciENTRY(sun4v_get_version)
19562306a36Sopenharmony_ci	mov	HV_CORE_GET_VER, %o5
19662306a36Sopenharmony_ci	mov	%o1, %o3
19762306a36Sopenharmony_ci	mov	%o2, %o4
19862306a36Sopenharmony_ci	ta	HV_CORE_TRAP
19962306a36Sopenharmony_ci	stx	%o1, [%o3]
20062306a36Sopenharmony_ci	retl
20162306a36Sopenharmony_ci	 stx	%o2, [%o4]
20262306a36Sopenharmony_ciENDPROC(sun4v_get_version)
20362306a36Sopenharmony_ci
20462306a36Sopenharmony_ci	/* %o0: API group number
20562306a36Sopenharmony_ci	 * %o1: desired major number
20662306a36Sopenharmony_ci	 * %o2: desired minor number
20762306a36Sopenharmony_ci	 * %o3: pointer to unsigned long actual minor number storage
20862306a36Sopenharmony_ci	 *
20962306a36Sopenharmony_ci	 * returns %o0: status
21062306a36Sopenharmony_ci	 */
21162306a36Sopenharmony_ciENTRY(sun4v_set_version)
21262306a36Sopenharmony_ci	mov	HV_CORE_SET_VER, %o5
21362306a36Sopenharmony_ci	mov	%o3, %o4
21462306a36Sopenharmony_ci	ta	HV_CORE_TRAP
21562306a36Sopenharmony_ci	retl
21662306a36Sopenharmony_ci	 stx	%o1, [%o4]
21762306a36Sopenharmony_ciENDPROC(sun4v_set_version)
21862306a36Sopenharmony_ci
21962306a36Sopenharmony_ci	/* %o0: pointer to unsigned long time
22062306a36Sopenharmony_ci	 *
22162306a36Sopenharmony_ci	 * returns %o0: status
22262306a36Sopenharmony_ci	 */
22362306a36Sopenharmony_ciENTRY(sun4v_tod_get)
22462306a36Sopenharmony_ci	mov	%o0, %o4
22562306a36Sopenharmony_ci	mov	HV_FAST_TOD_GET, %o5
22662306a36Sopenharmony_ci	ta	HV_FAST_TRAP
22762306a36Sopenharmony_ci	stx	%o1, [%o4]
22862306a36Sopenharmony_ci	retl
22962306a36Sopenharmony_ci	 nop
23062306a36Sopenharmony_ciENDPROC(sun4v_tod_get)
23162306a36Sopenharmony_ci
23262306a36Sopenharmony_ci	/* %o0: time
23362306a36Sopenharmony_ci	 *
23462306a36Sopenharmony_ci	 * returns %o0: status
23562306a36Sopenharmony_ci	 */
23662306a36Sopenharmony_ciENTRY(sun4v_tod_set)
23762306a36Sopenharmony_ci	mov	HV_FAST_TOD_SET, %o5
23862306a36Sopenharmony_ci	ta	HV_FAST_TRAP
23962306a36Sopenharmony_ci	retl
24062306a36Sopenharmony_ci	 nop
24162306a36Sopenharmony_ciENDPROC(sun4v_tod_set)
24262306a36Sopenharmony_ci
24362306a36Sopenharmony_ci	/* %o0: pointer to unsigned long status
24462306a36Sopenharmony_ci	 *
24562306a36Sopenharmony_ci	 * returns %o0: signed character
24662306a36Sopenharmony_ci	 */
24762306a36Sopenharmony_ciENTRY(sun4v_con_getchar)
24862306a36Sopenharmony_ci	mov	%o0, %o4
24962306a36Sopenharmony_ci	mov	HV_FAST_CONS_GETCHAR, %o5
25062306a36Sopenharmony_ci	clr	%o0
25162306a36Sopenharmony_ci	clr	%o1
25262306a36Sopenharmony_ci	ta	HV_FAST_TRAP
25362306a36Sopenharmony_ci	stx	%o0, [%o4]
25462306a36Sopenharmony_ci	retl
25562306a36Sopenharmony_ci	 sra	%o1, 0, %o0
25662306a36Sopenharmony_ciENDPROC(sun4v_con_getchar)
25762306a36Sopenharmony_ci
25862306a36Sopenharmony_ci	/* %o0: signed long character
25962306a36Sopenharmony_ci	 *
26062306a36Sopenharmony_ci	 * returns %o0: status
26162306a36Sopenharmony_ci	 */
26262306a36Sopenharmony_ciENTRY(sun4v_con_putchar)
26362306a36Sopenharmony_ci	mov	HV_FAST_CONS_PUTCHAR, %o5
26462306a36Sopenharmony_ci	ta	HV_FAST_TRAP
26562306a36Sopenharmony_ci	retl
26662306a36Sopenharmony_ci	 sra	%o0, 0, %o0
26762306a36Sopenharmony_ciENDPROC(sun4v_con_putchar)
26862306a36Sopenharmony_ci
26962306a36Sopenharmony_ci	/* %o0: buffer real address
27062306a36Sopenharmony_ci	 * %o1: buffer size
27162306a36Sopenharmony_ci	 * %o2: pointer to unsigned long bytes_read
27262306a36Sopenharmony_ci	 *
27362306a36Sopenharmony_ci	 * returns %o0: status
27462306a36Sopenharmony_ci	 */
27562306a36Sopenharmony_ciENTRY(sun4v_con_read)
27662306a36Sopenharmony_ci	mov	%o2, %o4
27762306a36Sopenharmony_ci	mov	HV_FAST_CONS_READ, %o5
27862306a36Sopenharmony_ci	ta	HV_FAST_TRAP
27962306a36Sopenharmony_ci	brnz	%o0, 1f
28062306a36Sopenharmony_ci	 cmp	%o1, -1		/* break */
28162306a36Sopenharmony_ci	be,a,pn	%icc, 1f
28262306a36Sopenharmony_ci	 mov	%o1, %o0
28362306a36Sopenharmony_ci	cmp	%o1, -2		/* hup */
28462306a36Sopenharmony_ci	be,a,pn	%icc, 1f
28562306a36Sopenharmony_ci	 mov	%o1, %o0
28662306a36Sopenharmony_ci	stx	%o1, [%o4]
28762306a36Sopenharmony_ci1:	retl
28862306a36Sopenharmony_ci	 nop
28962306a36Sopenharmony_ciENDPROC(sun4v_con_read)
29062306a36Sopenharmony_ci
29162306a36Sopenharmony_ci	/* %o0: buffer real address
29262306a36Sopenharmony_ci	 * %o1: buffer size
29362306a36Sopenharmony_ci	 * %o2: pointer to unsigned long bytes_written
29462306a36Sopenharmony_ci	 *
29562306a36Sopenharmony_ci	 * returns %o0: status
29662306a36Sopenharmony_ci	 */
29762306a36Sopenharmony_ciENTRY(sun4v_con_write)
29862306a36Sopenharmony_ci	mov	%o2, %o4
29962306a36Sopenharmony_ci	mov	HV_FAST_CONS_WRITE, %o5
30062306a36Sopenharmony_ci	ta	HV_FAST_TRAP
30162306a36Sopenharmony_ci	stx	%o1, [%o4]
30262306a36Sopenharmony_ci	retl
30362306a36Sopenharmony_ci	 nop
30462306a36Sopenharmony_ciENDPROC(sun4v_con_write)
30562306a36Sopenharmony_ci
30662306a36Sopenharmony_ci	/* %o0:	soft state
30762306a36Sopenharmony_ci	 * %o1:	address of description string
30862306a36Sopenharmony_ci	 *
30962306a36Sopenharmony_ci	 * returns %o0: status
31062306a36Sopenharmony_ci	 */
31162306a36Sopenharmony_ciENTRY(sun4v_mach_set_soft_state)
31262306a36Sopenharmony_ci	mov	HV_FAST_MACH_SET_SOFT_STATE, %o5
31362306a36Sopenharmony_ci	ta	HV_FAST_TRAP
31462306a36Sopenharmony_ci	retl
31562306a36Sopenharmony_ci	 nop
31662306a36Sopenharmony_ciENDPROC(sun4v_mach_set_soft_state)
31762306a36Sopenharmony_ci
31862306a36Sopenharmony_ci	/* %o0: exit code
31962306a36Sopenharmony_ci	 *
32062306a36Sopenharmony_ci	 * Does not return.
32162306a36Sopenharmony_ci	 */
32262306a36Sopenharmony_ciENTRY(sun4v_mach_exit)
32362306a36Sopenharmony_ci	mov	HV_FAST_MACH_EXIT, %o5
32462306a36Sopenharmony_ci	ta	HV_FAST_TRAP
32562306a36Sopenharmony_ci	retl
32662306a36Sopenharmony_ci	 nop
32762306a36Sopenharmony_ciENDPROC(sun4v_mach_exit)
32862306a36Sopenharmony_ci
32962306a36Sopenharmony_ci	/* %o0: buffer real address
33062306a36Sopenharmony_ci	 * %o1: buffer length
33162306a36Sopenharmony_ci	 * %o2: pointer to unsigned long real_buf_len
33262306a36Sopenharmony_ci	 *
33362306a36Sopenharmony_ci	 * returns %o0: status
33462306a36Sopenharmony_ci	 */
33562306a36Sopenharmony_ciENTRY(sun4v_mach_desc)
33662306a36Sopenharmony_ci	mov	%o2, %o4
33762306a36Sopenharmony_ci	mov	HV_FAST_MACH_DESC, %o5
33862306a36Sopenharmony_ci	ta	HV_FAST_TRAP
33962306a36Sopenharmony_ci	stx	%o1, [%o4]
34062306a36Sopenharmony_ci	retl
34162306a36Sopenharmony_ci	 nop
34262306a36Sopenharmony_ciENDPROC(sun4v_mach_desc)
34362306a36Sopenharmony_ci
34462306a36Sopenharmony_ci	/* %o0: new timeout in milliseconds
34562306a36Sopenharmony_ci	 * %o1: pointer to unsigned long orig_timeout
34662306a36Sopenharmony_ci	 *
34762306a36Sopenharmony_ci	 * returns %o0: status
34862306a36Sopenharmony_ci	 */
34962306a36Sopenharmony_ciENTRY(sun4v_mach_set_watchdog)
35062306a36Sopenharmony_ci	mov	%o1, %o4
35162306a36Sopenharmony_ci	mov	HV_FAST_MACH_SET_WATCHDOG, %o5
35262306a36Sopenharmony_ci	ta	HV_FAST_TRAP
35362306a36Sopenharmony_ci	brnz,a,pn %o4, 0f
35462306a36Sopenharmony_ci	stx	%o1, [%o4]
35562306a36Sopenharmony_ci0:	retl
35662306a36Sopenharmony_ci	 nop
35762306a36Sopenharmony_ciENDPROC(sun4v_mach_set_watchdog)
35862306a36Sopenharmony_ciEXPORT_SYMBOL(sun4v_mach_set_watchdog)
35962306a36Sopenharmony_ci
36062306a36Sopenharmony_ci	/* No inputs and does not return.  */
36162306a36Sopenharmony_ciENTRY(sun4v_mach_sir)
36262306a36Sopenharmony_ci	mov	%o1, %o4
36362306a36Sopenharmony_ci	mov	HV_FAST_MACH_SIR, %o5
36462306a36Sopenharmony_ci	ta	HV_FAST_TRAP
36562306a36Sopenharmony_ci	stx	%o1, [%o4]
36662306a36Sopenharmony_ci	retl
36762306a36Sopenharmony_ci	 nop
36862306a36Sopenharmony_ciENDPROC(sun4v_mach_sir)
36962306a36Sopenharmony_ci
37062306a36Sopenharmony_ci	/* %o0: channel
37162306a36Sopenharmony_ci	 * %o1:	ra
37262306a36Sopenharmony_ci	 * %o2:	num_entries
37362306a36Sopenharmony_ci	 *
37462306a36Sopenharmony_ci	 * returns %o0:	status
37562306a36Sopenharmony_ci	 */
37662306a36Sopenharmony_ciENTRY(sun4v_ldc_tx_qconf)
37762306a36Sopenharmony_ci	mov	HV_FAST_LDC_TX_QCONF, %o5
37862306a36Sopenharmony_ci	ta	HV_FAST_TRAP
37962306a36Sopenharmony_ci	retl
38062306a36Sopenharmony_ci	 nop
38162306a36Sopenharmony_ciENDPROC(sun4v_ldc_tx_qconf)
38262306a36Sopenharmony_ci
38362306a36Sopenharmony_ci	/* %o0: channel
38462306a36Sopenharmony_ci	 * %o1:	pointer to unsigned long ra
38562306a36Sopenharmony_ci	 * %o2:	pointer to unsigned long num_entries
38662306a36Sopenharmony_ci	 *
38762306a36Sopenharmony_ci	 * returns %o0:	status
38862306a36Sopenharmony_ci	 */
38962306a36Sopenharmony_ciENTRY(sun4v_ldc_tx_qinfo)
39062306a36Sopenharmony_ci	mov	%o1, %g1
39162306a36Sopenharmony_ci	mov	%o2, %g2
39262306a36Sopenharmony_ci	mov	HV_FAST_LDC_TX_QINFO, %o5
39362306a36Sopenharmony_ci	ta	HV_FAST_TRAP
39462306a36Sopenharmony_ci	stx	%o1, [%g1]
39562306a36Sopenharmony_ci	stx	%o2, [%g2]
39662306a36Sopenharmony_ci	retl
39762306a36Sopenharmony_ci	 nop
39862306a36Sopenharmony_ciENDPROC(sun4v_ldc_tx_qinfo)
39962306a36Sopenharmony_ci
40062306a36Sopenharmony_ci	/* %o0: channel
40162306a36Sopenharmony_ci	 * %o1:	pointer to unsigned long head_off
40262306a36Sopenharmony_ci	 * %o2:	pointer to unsigned long tail_off
40362306a36Sopenharmony_ci	 * %o2:	pointer to unsigned long chan_state
40462306a36Sopenharmony_ci	 *
40562306a36Sopenharmony_ci	 * returns %o0:	status
40662306a36Sopenharmony_ci	 */
40762306a36Sopenharmony_ciENTRY(sun4v_ldc_tx_get_state)
40862306a36Sopenharmony_ci	mov	%o1, %g1
40962306a36Sopenharmony_ci	mov	%o2, %g2
41062306a36Sopenharmony_ci	mov	%o3, %g3
41162306a36Sopenharmony_ci	mov	HV_FAST_LDC_TX_GET_STATE, %o5
41262306a36Sopenharmony_ci	ta	HV_FAST_TRAP
41362306a36Sopenharmony_ci	stx	%o1, [%g1]
41462306a36Sopenharmony_ci	stx	%o2, [%g2]
41562306a36Sopenharmony_ci	stx	%o3, [%g3]
41662306a36Sopenharmony_ci	retl
41762306a36Sopenharmony_ci	 nop
41862306a36Sopenharmony_ciENDPROC(sun4v_ldc_tx_get_state)
41962306a36Sopenharmony_ci
42062306a36Sopenharmony_ci	/* %o0: channel
42162306a36Sopenharmony_ci	 * %o1:	tail_off
42262306a36Sopenharmony_ci	 *
42362306a36Sopenharmony_ci	 * returns %o0:	status
42462306a36Sopenharmony_ci	 */
42562306a36Sopenharmony_ciENTRY(sun4v_ldc_tx_set_qtail)
42662306a36Sopenharmony_ci	mov	HV_FAST_LDC_TX_SET_QTAIL, %o5
42762306a36Sopenharmony_ci	ta	HV_FAST_TRAP
42862306a36Sopenharmony_ci	retl
42962306a36Sopenharmony_ci	 nop
43062306a36Sopenharmony_ciENDPROC(sun4v_ldc_tx_set_qtail)
43162306a36Sopenharmony_ci
43262306a36Sopenharmony_ci	/* %o0: channel
43362306a36Sopenharmony_ci	 * %o1:	ra
43462306a36Sopenharmony_ci	 * %o2:	num_entries
43562306a36Sopenharmony_ci	 *
43662306a36Sopenharmony_ci	 * returns %o0:	status
43762306a36Sopenharmony_ci	 */
43862306a36Sopenharmony_ciENTRY(sun4v_ldc_rx_qconf)
43962306a36Sopenharmony_ci	mov	HV_FAST_LDC_RX_QCONF, %o5
44062306a36Sopenharmony_ci	ta	HV_FAST_TRAP
44162306a36Sopenharmony_ci	retl
44262306a36Sopenharmony_ci	 nop
44362306a36Sopenharmony_ciENDPROC(sun4v_ldc_rx_qconf)
44462306a36Sopenharmony_ci
44562306a36Sopenharmony_ci	/* %o0: channel
44662306a36Sopenharmony_ci	 * %o1:	pointer to unsigned long ra
44762306a36Sopenharmony_ci	 * %o2:	pointer to unsigned long num_entries
44862306a36Sopenharmony_ci	 *
44962306a36Sopenharmony_ci	 * returns %o0:	status
45062306a36Sopenharmony_ci	 */
45162306a36Sopenharmony_ciENTRY(sun4v_ldc_rx_qinfo)
45262306a36Sopenharmony_ci	mov	%o1, %g1
45362306a36Sopenharmony_ci	mov	%o2, %g2
45462306a36Sopenharmony_ci	mov	HV_FAST_LDC_RX_QINFO, %o5
45562306a36Sopenharmony_ci	ta	HV_FAST_TRAP
45662306a36Sopenharmony_ci	stx	%o1, [%g1]
45762306a36Sopenharmony_ci	stx	%o2, [%g2]
45862306a36Sopenharmony_ci	retl
45962306a36Sopenharmony_ci	 nop
46062306a36Sopenharmony_ciENDPROC(sun4v_ldc_rx_qinfo)
46162306a36Sopenharmony_ci
46262306a36Sopenharmony_ci	/* %o0: channel
46362306a36Sopenharmony_ci	 * %o1:	pointer to unsigned long head_off
46462306a36Sopenharmony_ci	 * %o2:	pointer to unsigned long tail_off
46562306a36Sopenharmony_ci	 * %o2:	pointer to unsigned long chan_state
46662306a36Sopenharmony_ci	 *
46762306a36Sopenharmony_ci	 * returns %o0:	status
46862306a36Sopenharmony_ci	 */
46962306a36Sopenharmony_ciENTRY(sun4v_ldc_rx_get_state)
47062306a36Sopenharmony_ci	mov	%o1, %g1
47162306a36Sopenharmony_ci	mov	%o2, %g2
47262306a36Sopenharmony_ci	mov	%o3, %g3
47362306a36Sopenharmony_ci	mov	HV_FAST_LDC_RX_GET_STATE, %o5
47462306a36Sopenharmony_ci	ta	HV_FAST_TRAP
47562306a36Sopenharmony_ci	stx	%o1, [%g1]
47662306a36Sopenharmony_ci	stx	%o2, [%g2]
47762306a36Sopenharmony_ci	stx	%o3, [%g3]
47862306a36Sopenharmony_ci	retl
47962306a36Sopenharmony_ci	 nop
48062306a36Sopenharmony_ciENDPROC(sun4v_ldc_rx_get_state)
48162306a36Sopenharmony_ci
48262306a36Sopenharmony_ci	/* %o0: channel
48362306a36Sopenharmony_ci	 * %o1:	head_off
48462306a36Sopenharmony_ci	 *
48562306a36Sopenharmony_ci	 * returns %o0:	status
48662306a36Sopenharmony_ci	 */
48762306a36Sopenharmony_ciENTRY(sun4v_ldc_rx_set_qhead)
48862306a36Sopenharmony_ci	mov	HV_FAST_LDC_RX_SET_QHEAD, %o5
48962306a36Sopenharmony_ci	ta	HV_FAST_TRAP
49062306a36Sopenharmony_ci	retl
49162306a36Sopenharmony_ci	 nop
49262306a36Sopenharmony_ciENDPROC(sun4v_ldc_rx_set_qhead)
49362306a36Sopenharmony_ci
49462306a36Sopenharmony_ci	/* %o0: channel
49562306a36Sopenharmony_ci	 * %o1:	ra
49662306a36Sopenharmony_ci	 * %o2:	num_entries
49762306a36Sopenharmony_ci	 *
49862306a36Sopenharmony_ci	 * returns %o0: status
49962306a36Sopenharmony_ci	 */
50062306a36Sopenharmony_ciENTRY(sun4v_ldc_set_map_table)
50162306a36Sopenharmony_ci	mov	HV_FAST_LDC_SET_MAP_TABLE, %o5
50262306a36Sopenharmony_ci	ta	HV_FAST_TRAP
50362306a36Sopenharmony_ci	retl
50462306a36Sopenharmony_ci	 nop
50562306a36Sopenharmony_ciENDPROC(sun4v_ldc_set_map_table)
50662306a36Sopenharmony_ci
50762306a36Sopenharmony_ci	/* %o0: channel
50862306a36Sopenharmony_ci	 * %o1:	pointer to unsigned long ra
50962306a36Sopenharmony_ci	 * %o2:	pointer to unsigned long num_entries
51062306a36Sopenharmony_ci	 *
51162306a36Sopenharmony_ci	 * returns %o0: status
51262306a36Sopenharmony_ci	 */
51362306a36Sopenharmony_ciENTRY(sun4v_ldc_get_map_table)
51462306a36Sopenharmony_ci	mov	%o1, %g1
51562306a36Sopenharmony_ci	mov	%o2, %g2
51662306a36Sopenharmony_ci	mov	HV_FAST_LDC_GET_MAP_TABLE, %o5
51762306a36Sopenharmony_ci	ta	HV_FAST_TRAP
51862306a36Sopenharmony_ci	stx	%o1, [%g1]
51962306a36Sopenharmony_ci	stx	%o2, [%g2]
52062306a36Sopenharmony_ci	retl
52162306a36Sopenharmony_ci	 nop
52262306a36Sopenharmony_ciENDPROC(sun4v_ldc_get_map_table)
52362306a36Sopenharmony_ci
52462306a36Sopenharmony_ci	/* %o0:	channel
52562306a36Sopenharmony_ci	 * %o1:	dir_code
52662306a36Sopenharmony_ci	 * %o2:	tgt_raddr
52762306a36Sopenharmony_ci	 * %o3:	lcl_raddr
52862306a36Sopenharmony_ci	 * %o4:	len
52962306a36Sopenharmony_ci	 * %o5:	pointer to unsigned long actual_len
53062306a36Sopenharmony_ci	 *
53162306a36Sopenharmony_ci	 * returns %o0:	status
53262306a36Sopenharmony_ci	 */
53362306a36Sopenharmony_ciENTRY(sun4v_ldc_copy)
53462306a36Sopenharmony_ci	mov	%o5, %g1
53562306a36Sopenharmony_ci	mov	HV_FAST_LDC_COPY, %o5
53662306a36Sopenharmony_ci	ta	HV_FAST_TRAP
53762306a36Sopenharmony_ci	stx	%o1, [%g1]
53862306a36Sopenharmony_ci	retl
53962306a36Sopenharmony_ci	 nop
54062306a36Sopenharmony_ciENDPROC(sun4v_ldc_copy)
54162306a36Sopenharmony_ci
54262306a36Sopenharmony_ci	/* %o0:	channel
54362306a36Sopenharmony_ci	 * %o1:	cookie
54462306a36Sopenharmony_ci	 * %o2:	pointer to unsigned long ra
54562306a36Sopenharmony_ci	 * %o3:	pointer to unsigned long perm
54662306a36Sopenharmony_ci	 *
54762306a36Sopenharmony_ci	 * returns %o0:	status
54862306a36Sopenharmony_ci	 */
54962306a36Sopenharmony_ciENTRY(sun4v_ldc_mapin)
55062306a36Sopenharmony_ci	mov	%o2, %g1
55162306a36Sopenharmony_ci	mov	%o3, %g2
55262306a36Sopenharmony_ci	mov	HV_FAST_LDC_MAPIN, %o5
55362306a36Sopenharmony_ci	ta	HV_FAST_TRAP
55462306a36Sopenharmony_ci	stx	%o1, [%g1]
55562306a36Sopenharmony_ci	stx	%o2, [%g2]
55662306a36Sopenharmony_ci	retl
55762306a36Sopenharmony_ci	 nop
55862306a36Sopenharmony_ciENDPROC(sun4v_ldc_mapin)
55962306a36Sopenharmony_ci
56062306a36Sopenharmony_ci	/* %o0:	ra
56162306a36Sopenharmony_ci	 *
56262306a36Sopenharmony_ci	 * returns %o0:	status
56362306a36Sopenharmony_ci	 */
56462306a36Sopenharmony_ciENTRY(sun4v_ldc_unmap)
56562306a36Sopenharmony_ci	mov	HV_FAST_LDC_UNMAP, %o5
56662306a36Sopenharmony_ci	ta	HV_FAST_TRAP
56762306a36Sopenharmony_ci	retl
56862306a36Sopenharmony_ci	 nop
56962306a36Sopenharmony_ciENDPROC(sun4v_ldc_unmap)
57062306a36Sopenharmony_ci
57162306a36Sopenharmony_ci	/* %o0: channel
57262306a36Sopenharmony_ci	 * %o1:	cookie
57362306a36Sopenharmony_ci	 * %o2:	mte_cookie
57462306a36Sopenharmony_ci	 *
57562306a36Sopenharmony_ci	 * returns %o0:	status
57662306a36Sopenharmony_ci	 */
57762306a36Sopenharmony_ciENTRY(sun4v_ldc_revoke)
57862306a36Sopenharmony_ci	mov	HV_FAST_LDC_REVOKE, %o5
57962306a36Sopenharmony_ci	ta	HV_FAST_TRAP
58062306a36Sopenharmony_ci	retl
58162306a36Sopenharmony_ci	 nop
58262306a36Sopenharmony_ciENDPROC(sun4v_ldc_revoke)
58362306a36Sopenharmony_ci
58462306a36Sopenharmony_ci	/* %o0: device handle
58562306a36Sopenharmony_ci	 * %o1:	device INO
58662306a36Sopenharmony_ci	 * %o2:	pointer to unsigned long cookie
58762306a36Sopenharmony_ci	 *
58862306a36Sopenharmony_ci	 * returns %o0: status
58962306a36Sopenharmony_ci	 */
59062306a36Sopenharmony_ciENTRY(sun4v_vintr_get_cookie)
59162306a36Sopenharmony_ci	mov	%o2, %g1
59262306a36Sopenharmony_ci	mov	HV_FAST_VINTR_GET_COOKIE, %o5
59362306a36Sopenharmony_ci	ta	HV_FAST_TRAP
59462306a36Sopenharmony_ci	stx	%o1, [%g1]
59562306a36Sopenharmony_ci	retl
59662306a36Sopenharmony_ci	 nop
59762306a36Sopenharmony_ciENDPROC(sun4v_vintr_get_cookie)
59862306a36Sopenharmony_ci
59962306a36Sopenharmony_ci	/* %o0: device handle
60062306a36Sopenharmony_ci	 * %o1:	device INO
60162306a36Sopenharmony_ci	 * %o2:	cookie
60262306a36Sopenharmony_ci	 *
60362306a36Sopenharmony_ci	 * returns %o0: status
60462306a36Sopenharmony_ci	 */
60562306a36Sopenharmony_ciENTRY(sun4v_vintr_set_cookie)
60662306a36Sopenharmony_ci	mov	HV_FAST_VINTR_SET_COOKIE, %o5
60762306a36Sopenharmony_ci	ta	HV_FAST_TRAP
60862306a36Sopenharmony_ci	retl
60962306a36Sopenharmony_ci	 nop
61062306a36Sopenharmony_ciENDPROC(sun4v_vintr_set_cookie)
61162306a36Sopenharmony_ci
61262306a36Sopenharmony_ci	/* %o0: device handle
61362306a36Sopenharmony_ci	 * %o1:	device INO
61462306a36Sopenharmony_ci	 * %o2:	pointer to unsigned long valid_state
61562306a36Sopenharmony_ci	 *
61662306a36Sopenharmony_ci	 * returns %o0: status
61762306a36Sopenharmony_ci	 */
61862306a36Sopenharmony_ciENTRY(sun4v_vintr_get_valid)
61962306a36Sopenharmony_ci	mov	%o2, %g1
62062306a36Sopenharmony_ci	mov	HV_FAST_VINTR_GET_VALID, %o5
62162306a36Sopenharmony_ci	ta	HV_FAST_TRAP
62262306a36Sopenharmony_ci	stx	%o1, [%g1]
62362306a36Sopenharmony_ci	retl
62462306a36Sopenharmony_ci	 nop
62562306a36Sopenharmony_ciENDPROC(sun4v_vintr_get_valid)
62662306a36Sopenharmony_ci
62762306a36Sopenharmony_ci	/* %o0: device handle
62862306a36Sopenharmony_ci	 * %o1:	device INO
62962306a36Sopenharmony_ci	 * %o2:	valid_state
63062306a36Sopenharmony_ci	 *
63162306a36Sopenharmony_ci	 * returns %o0: status
63262306a36Sopenharmony_ci	 */
63362306a36Sopenharmony_ciENTRY(sun4v_vintr_set_valid)
63462306a36Sopenharmony_ci	mov	HV_FAST_VINTR_SET_VALID, %o5
63562306a36Sopenharmony_ci	ta	HV_FAST_TRAP
63662306a36Sopenharmony_ci	retl
63762306a36Sopenharmony_ci	 nop
63862306a36Sopenharmony_ciENDPROC(sun4v_vintr_set_valid)
63962306a36Sopenharmony_ci
64062306a36Sopenharmony_ci	/* %o0: device handle
64162306a36Sopenharmony_ci	 * %o1:	device INO
64262306a36Sopenharmony_ci	 * %o2:	pointer to unsigned long state
64362306a36Sopenharmony_ci	 *
64462306a36Sopenharmony_ci	 * returns %o0: status
64562306a36Sopenharmony_ci	 */
64662306a36Sopenharmony_ciENTRY(sun4v_vintr_get_state)
64762306a36Sopenharmony_ci	mov	%o2, %g1
64862306a36Sopenharmony_ci	mov	HV_FAST_VINTR_GET_STATE, %o5
64962306a36Sopenharmony_ci	ta	HV_FAST_TRAP
65062306a36Sopenharmony_ci	stx	%o1, [%g1]
65162306a36Sopenharmony_ci	retl
65262306a36Sopenharmony_ci	 nop
65362306a36Sopenharmony_ciENDPROC(sun4v_vintr_get_state)
65462306a36Sopenharmony_ci
65562306a36Sopenharmony_ci	/* %o0: device handle
65662306a36Sopenharmony_ci	 * %o1:	device INO
65762306a36Sopenharmony_ci	 * %o2:	state
65862306a36Sopenharmony_ci	 *
65962306a36Sopenharmony_ci	 * returns %o0: status
66062306a36Sopenharmony_ci	 */
66162306a36Sopenharmony_ciENTRY(sun4v_vintr_set_state)
66262306a36Sopenharmony_ci	mov	HV_FAST_VINTR_SET_STATE, %o5
66362306a36Sopenharmony_ci	ta	HV_FAST_TRAP
66462306a36Sopenharmony_ci	retl
66562306a36Sopenharmony_ci	 nop
66662306a36Sopenharmony_ciENDPROC(sun4v_vintr_set_state)
66762306a36Sopenharmony_ci
66862306a36Sopenharmony_ci	/* %o0: device handle
66962306a36Sopenharmony_ci	 * %o1:	device INO
67062306a36Sopenharmony_ci	 * %o2:	pointer to unsigned long cpuid
67162306a36Sopenharmony_ci	 *
67262306a36Sopenharmony_ci	 * returns %o0: status
67362306a36Sopenharmony_ci	 */
67462306a36Sopenharmony_ciENTRY(sun4v_vintr_get_target)
67562306a36Sopenharmony_ci	mov	%o2, %g1
67662306a36Sopenharmony_ci	mov	HV_FAST_VINTR_GET_TARGET, %o5
67762306a36Sopenharmony_ci	ta	HV_FAST_TRAP
67862306a36Sopenharmony_ci	stx	%o1, [%g1]
67962306a36Sopenharmony_ci	retl
68062306a36Sopenharmony_ci	 nop
68162306a36Sopenharmony_ciENDPROC(sun4v_vintr_get_target)
68262306a36Sopenharmony_ci
68362306a36Sopenharmony_ci	/* %o0: device handle
68462306a36Sopenharmony_ci	 * %o1:	device INO
68562306a36Sopenharmony_ci	 * %o2:	cpuid
68662306a36Sopenharmony_ci	 *
68762306a36Sopenharmony_ci	 * returns %o0: status
68862306a36Sopenharmony_ci	 */
68962306a36Sopenharmony_ciENTRY(sun4v_vintr_set_target)
69062306a36Sopenharmony_ci	mov	HV_FAST_VINTR_SET_TARGET, %o5
69162306a36Sopenharmony_ci	ta	HV_FAST_TRAP
69262306a36Sopenharmony_ci	retl
69362306a36Sopenharmony_ci	 nop
69462306a36Sopenharmony_ciENDPROC(sun4v_vintr_set_target)
69562306a36Sopenharmony_ci
69662306a36Sopenharmony_ci	/* %o0: NCS sub-function
69762306a36Sopenharmony_ci	 * %o1:	sub-function arg real-address
69862306a36Sopenharmony_ci	 * %o2:	sub-function arg size
69962306a36Sopenharmony_ci	 *
70062306a36Sopenharmony_ci	 * returns %o0:	status
70162306a36Sopenharmony_ci	 */
70262306a36Sopenharmony_ciENTRY(sun4v_ncs_request)
70362306a36Sopenharmony_ci	mov	HV_FAST_NCS_REQUEST, %o5
70462306a36Sopenharmony_ci	ta	HV_FAST_TRAP
70562306a36Sopenharmony_ci	retl
70662306a36Sopenharmony_ci	 nop
70762306a36Sopenharmony_ciENDPROC(sun4v_ncs_request)
70862306a36Sopenharmony_ci
70962306a36Sopenharmony_ciENTRY(sun4v_svc_send)
71062306a36Sopenharmony_ci	save	%sp, -192, %sp
71162306a36Sopenharmony_ci	mov	%i0, %o0
71262306a36Sopenharmony_ci	mov	%i1, %o1
71362306a36Sopenharmony_ci	mov	%i2, %o2
71462306a36Sopenharmony_ci	mov	HV_FAST_SVC_SEND, %o5
71562306a36Sopenharmony_ci	ta	HV_FAST_TRAP
71662306a36Sopenharmony_ci	stx	%o1, [%i3]
71762306a36Sopenharmony_ci	ret
71862306a36Sopenharmony_ci	restore
71962306a36Sopenharmony_ciENDPROC(sun4v_svc_send)
72062306a36Sopenharmony_ci
72162306a36Sopenharmony_ciENTRY(sun4v_svc_recv)
72262306a36Sopenharmony_ci	save	%sp, -192, %sp
72362306a36Sopenharmony_ci	mov	%i0, %o0
72462306a36Sopenharmony_ci	mov	%i1, %o1
72562306a36Sopenharmony_ci	mov	%i2, %o2
72662306a36Sopenharmony_ci	mov	HV_FAST_SVC_RECV, %o5
72762306a36Sopenharmony_ci	ta	HV_FAST_TRAP
72862306a36Sopenharmony_ci	stx	%o1, [%i3]
72962306a36Sopenharmony_ci	ret
73062306a36Sopenharmony_ci	restore
73162306a36Sopenharmony_ciENDPROC(sun4v_svc_recv)
73262306a36Sopenharmony_ci
73362306a36Sopenharmony_ciENTRY(sun4v_svc_getstatus)
73462306a36Sopenharmony_ci	mov	HV_FAST_SVC_GETSTATUS, %o5
73562306a36Sopenharmony_ci	mov	%o1, %o4
73662306a36Sopenharmony_ci	ta	HV_FAST_TRAP
73762306a36Sopenharmony_ci	stx	%o1, [%o4]
73862306a36Sopenharmony_ci	retl
73962306a36Sopenharmony_ci	 nop
74062306a36Sopenharmony_ciENDPROC(sun4v_svc_getstatus)
74162306a36Sopenharmony_ci
74262306a36Sopenharmony_ciENTRY(sun4v_svc_setstatus)
74362306a36Sopenharmony_ci	mov	HV_FAST_SVC_SETSTATUS, %o5
74462306a36Sopenharmony_ci	ta	HV_FAST_TRAP
74562306a36Sopenharmony_ci	retl
74662306a36Sopenharmony_ci	 nop
74762306a36Sopenharmony_ciENDPROC(sun4v_svc_setstatus)
74862306a36Sopenharmony_ci
74962306a36Sopenharmony_ciENTRY(sun4v_svc_clrstatus)
75062306a36Sopenharmony_ci	mov	HV_FAST_SVC_CLRSTATUS, %o5
75162306a36Sopenharmony_ci	ta	HV_FAST_TRAP
75262306a36Sopenharmony_ci	retl
75362306a36Sopenharmony_ci	 nop
75462306a36Sopenharmony_ciENDPROC(sun4v_svc_clrstatus)
75562306a36Sopenharmony_ci
75662306a36Sopenharmony_ciENTRY(sun4v_mmustat_conf)
75762306a36Sopenharmony_ci	mov	%o1, %o4
75862306a36Sopenharmony_ci	mov	HV_FAST_MMUSTAT_CONF, %o5
75962306a36Sopenharmony_ci	ta	HV_FAST_TRAP
76062306a36Sopenharmony_ci	stx	%o1, [%o4]
76162306a36Sopenharmony_ci	retl
76262306a36Sopenharmony_ci	 nop
76362306a36Sopenharmony_ciENDPROC(sun4v_mmustat_conf)
76462306a36Sopenharmony_ci
76562306a36Sopenharmony_ciENTRY(sun4v_mmustat_info)
76662306a36Sopenharmony_ci	mov	%o0, %o4
76762306a36Sopenharmony_ci	mov	HV_FAST_MMUSTAT_INFO, %o5
76862306a36Sopenharmony_ci	ta	HV_FAST_TRAP
76962306a36Sopenharmony_ci	stx	%o1, [%o4]
77062306a36Sopenharmony_ci	retl
77162306a36Sopenharmony_ci	 nop
77262306a36Sopenharmony_ciENDPROC(sun4v_mmustat_info)
77362306a36Sopenharmony_ci
77462306a36Sopenharmony_ciENTRY(sun4v_mmu_demap_all)
77562306a36Sopenharmony_ci	clr	%o0
77662306a36Sopenharmony_ci	clr	%o1
77762306a36Sopenharmony_ci	mov	HV_MMU_ALL, %o2
77862306a36Sopenharmony_ci	mov	HV_FAST_MMU_DEMAP_ALL, %o5
77962306a36Sopenharmony_ci	ta	HV_FAST_TRAP
78062306a36Sopenharmony_ci	retl
78162306a36Sopenharmony_ci	 nop
78262306a36Sopenharmony_ciENDPROC(sun4v_mmu_demap_all)
78362306a36Sopenharmony_ci
78462306a36Sopenharmony_ciENTRY(sun4v_niagara_getperf)
78562306a36Sopenharmony_ci	mov	%o0, %o4
78662306a36Sopenharmony_ci	mov	HV_FAST_GET_PERFREG, %o5
78762306a36Sopenharmony_ci	ta	HV_FAST_TRAP
78862306a36Sopenharmony_ci	stx	%o1, [%o4]
78962306a36Sopenharmony_ci	retl
79062306a36Sopenharmony_ci	 nop
79162306a36Sopenharmony_ciENDPROC(sun4v_niagara_getperf)
79262306a36Sopenharmony_ciEXPORT_SYMBOL(sun4v_niagara_getperf)
79362306a36Sopenharmony_ci
79462306a36Sopenharmony_ciENTRY(sun4v_niagara_setperf)
79562306a36Sopenharmony_ci	mov	HV_FAST_SET_PERFREG, %o5
79662306a36Sopenharmony_ci	ta	HV_FAST_TRAP
79762306a36Sopenharmony_ci	retl
79862306a36Sopenharmony_ci	 nop
79962306a36Sopenharmony_ciENDPROC(sun4v_niagara_setperf)
80062306a36Sopenharmony_ciEXPORT_SYMBOL(sun4v_niagara_setperf)
80162306a36Sopenharmony_ci
80262306a36Sopenharmony_ciENTRY(sun4v_niagara2_getperf)
80362306a36Sopenharmony_ci	mov	%o0, %o4
80462306a36Sopenharmony_ci	mov	HV_FAST_N2_GET_PERFREG, %o5
80562306a36Sopenharmony_ci	ta	HV_FAST_TRAP
80662306a36Sopenharmony_ci	stx	%o1, [%o4]
80762306a36Sopenharmony_ci	retl
80862306a36Sopenharmony_ci	 nop
80962306a36Sopenharmony_ciENDPROC(sun4v_niagara2_getperf)
81062306a36Sopenharmony_ciEXPORT_SYMBOL(sun4v_niagara2_getperf)
81162306a36Sopenharmony_ci
81262306a36Sopenharmony_ciENTRY(sun4v_niagara2_setperf)
81362306a36Sopenharmony_ci	mov	HV_FAST_N2_SET_PERFREG, %o5
81462306a36Sopenharmony_ci	ta	HV_FAST_TRAP
81562306a36Sopenharmony_ci	retl
81662306a36Sopenharmony_ci	 nop
81762306a36Sopenharmony_ciENDPROC(sun4v_niagara2_setperf)
81862306a36Sopenharmony_ciEXPORT_SYMBOL(sun4v_niagara2_setperf)
81962306a36Sopenharmony_ci
82062306a36Sopenharmony_ciENTRY(sun4v_reboot_data_set)
82162306a36Sopenharmony_ci	mov	HV_FAST_REBOOT_DATA_SET, %o5
82262306a36Sopenharmony_ci	ta	HV_FAST_TRAP
82362306a36Sopenharmony_ci	retl
82462306a36Sopenharmony_ci	 nop
82562306a36Sopenharmony_ciENDPROC(sun4v_reboot_data_set)
82662306a36Sopenharmony_ci
82762306a36Sopenharmony_ciENTRY(sun4v_vt_get_perfreg)
82862306a36Sopenharmony_ci	mov	%o1, %o4
82962306a36Sopenharmony_ci	mov	HV_FAST_VT_GET_PERFREG, %o5
83062306a36Sopenharmony_ci	ta	HV_FAST_TRAP
83162306a36Sopenharmony_ci	stx	%o1, [%o4]
83262306a36Sopenharmony_ci	retl
83362306a36Sopenharmony_ci	 nop
83462306a36Sopenharmony_ciENDPROC(sun4v_vt_get_perfreg)
83562306a36Sopenharmony_ci
83662306a36Sopenharmony_ciENTRY(sun4v_vt_set_perfreg)
83762306a36Sopenharmony_ci	mov	HV_FAST_VT_SET_PERFREG, %o5
83862306a36Sopenharmony_ci	ta	HV_FAST_TRAP
83962306a36Sopenharmony_ci	retl
84062306a36Sopenharmony_ci	 nop
84162306a36Sopenharmony_ciENDPROC(sun4v_vt_set_perfreg)
84262306a36Sopenharmony_ci
84362306a36Sopenharmony_ciENTRY(sun4v_t5_get_perfreg)
84462306a36Sopenharmony_ci	mov	%o1, %o4
84562306a36Sopenharmony_ci	mov	HV_FAST_T5_GET_PERFREG, %o5
84662306a36Sopenharmony_ci	ta	HV_FAST_TRAP
84762306a36Sopenharmony_ci	stx	%o1, [%o4]
84862306a36Sopenharmony_ci	retl
84962306a36Sopenharmony_ci	 nop
85062306a36Sopenharmony_ciENDPROC(sun4v_t5_get_perfreg)
85162306a36Sopenharmony_ci
85262306a36Sopenharmony_ciENTRY(sun4v_t5_set_perfreg)
85362306a36Sopenharmony_ci	mov	HV_FAST_T5_SET_PERFREG, %o5
85462306a36Sopenharmony_ci	ta	HV_FAST_TRAP
85562306a36Sopenharmony_ci	retl
85662306a36Sopenharmony_ci	 nop
85762306a36Sopenharmony_ciENDPROC(sun4v_t5_set_perfreg)
85862306a36Sopenharmony_ci
85962306a36Sopenharmony_ciENTRY(sun4v_m7_get_perfreg)
86062306a36Sopenharmony_ci	mov	%o1, %o4
86162306a36Sopenharmony_ci	mov	HV_FAST_M7_GET_PERFREG, %o5
86262306a36Sopenharmony_ci	ta	HV_FAST_TRAP
86362306a36Sopenharmony_ci	stx	%o1, [%o4]
86462306a36Sopenharmony_ci	retl
86562306a36Sopenharmony_ci	nop
86662306a36Sopenharmony_ciENDPROC(sun4v_m7_get_perfreg)
86762306a36Sopenharmony_ci
86862306a36Sopenharmony_ciENTRY(sun4v_m7_set_perfreg)
86962306a36Sopenharmony_ci	mov	HV_FAST_M7_SET_PERFREG, %o5
87062306a36Sopenharmony_ci	ta	HV_FAST_TRAP
87162306a36Sopenharmony_ci	retl
87262306a36Sopenharmony_ci	nop
87362306a36Sopenharmony_ciENDPROC(sun4v_m7_set_perfreg)
87462306a36Sopenharmony_ci
87562306a36Sopenharmony_ci	/* %o0: address of CCB array
87662306a36Sopenharmony_ci	 * %o1: size (in bytes) of CCB array
87762306a36Sopenharmony_ci	 * %o2: flags
87862306a36Sopenharmony_ci	 * %o3: reserved
87962306a36Sopenharmony_ci	 *
88062306a36Sopenharmony_ci	 * returns:
88162306a36Sopenharmony_ci	 * %o0: status
88262306a36Sopenharmony_ci	 * %o1: size (in bytes) of the CCB array that was accepted
88362306a36Sopenharmony_ci	 * %o2: status data
88462306a36Sopenharmony_ci	 * %o3: reserved
88562306a36Sopenharmony_ci	 */
88662306a36Sopenharmony_ciENTRY(sun4v_ccb_submit)
88762306a36Sopenharmony_ci	mov	%o5, %g1
88862306a36Sopenharmony_ci	mov	HV_CCB_SUBMIT, %o5
88962306a36Sopenharmony_ci	ta	HV_FAST_TRAP
89062306a36Sopenharmony_ci	stx	%o1, [%o4]
89162306a36Sopenharmony_ci	retl
89262306a36Sopenharmony_ci	 stx	%o2, [%g1]
89362306a36Sopenharmony_ciENDPROC(sun4v_ccb_submit)
89462306a36Sopenharmony_ciEXPORT_SYMBOL(sun4v_ccb_submit)
89562306a36Sopenharmony_ci
89662306a36Sopenharmony_ci	/* %o0: completion area ra for the ccb to get info
89762306a36Sopenharmony_ci	 *
89862306a36Sopenharmony_ci	 * returns:
89962306a36Sopenharmony_ci	 * %o0: status
90062306a36Sopenharmony_ci	 * %o1: CCB state
90162306a36Sopenharmony_ci	 * %o2: position
90262306a36Sopenharmony_ci	 * %o3: dax unit
90362306a36Sopenharmony_ci	 * %o4: queue
90462306a36Sopenharmony_ci	 */
90562306a36Sopenharmony_ciENTRY(sun4v_ccb_info)
90662306a36Sopenharmony_ci	mov	%o1, %g1
90762306a36Sopenharmony_ci	mov	HV_CCB_INFO, %o5
90862306a36Sopenharmony_ci	ta	HV_FAST_TRAP
90962306a36Sopenharmony_ci	sth	%o1, [%g1 + CCB_INFO_OFFSET_CCB_STATE]
91062306a36Sopenharmony_ci	sth	%o2, [%g1 + CCB_INFO_OFFSET_QUEUE_POS]
91162306a36Sopenharmony_ci	sth	%o3, [%g1 + CCB_INFO_OFFSET_DAX_UNIT]
91262306a36Sopenharmony_ci	retl
91362306a36Sopenharmony_ci	 sth	%o4, [%g1 + CCB_INFO_OFFSET_QUEUE_NUM]
91462306a36Sopenharmony_ciENDPROC(sun4v_ccb_info)
91562306a36Sopenharmony_ciEXPORT_SYMBOL(sun4v_ccb_info)
91662306a36Sopenharmony_ci
91762306a36Sopenharmony_ci	/* %o0: completion area ra for the ccb to kill
91862306a36Sopenharmony_ci	 *
91962306a36Sopenharmony_ci	 * returns:
92062306a36Sopenharmony_ci	 * %o0: status
92162306a36Sopenharmony_ci	 * %o1: result of the kill
92262306a36Sopenharmony_ci	 */
92362306a36Sopenharmony_ciENTRY(sun4v_ccb_kill)
92462306a36Sopenharmony_ci	mov	%o1, %g1
92562306a36Sopenharmony_ci	mov	HV_CCB_KILL, %o5
92662306a36Sopenharmony_ci	ta	HV_FAST_TRAP
92762306a36Sopenharmony_ci	retl
92862306a36Sopenharmony_ci	 sth	%o1, [%g1]
92962306a36Sopenharmony_ciENDPROC(sun4v_ccb_kill)
93062306a36Sopenharmony_ciEXPORT_SYMBOL(sun4v_ccb_kill)
931