cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

hvcalls.S (16338B)


      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)