18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/* n2_asm.S: Hypervisor calls for NCS support.
38c2ecf20Sopenharmony_ci *
48c2ecf20Sopenharmony_ci * Copyright (C) 2009 David S. Miller <davem@davemloft.net>
58c2ecf20Sopenharmony_ci */
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_ci#include <linux/linkage.h>
88c2ecf20Sopenharmony_ci#include <asm/hypervisor.h>
98c2ecf20Sopenharmony_ci#include "n2_core.h"
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci	/* o0: queue type
128c2ecf20Sopenharmony_ci	 * o1: RA of queue
138c2ecf20Sopenharmony_ci	 * o2: num entries in queue
148c2ecf20Sopenharmony_ci	 * o3: address of queue handle return
158c2ecf20Sopenharmony_ci	 */
168c2ecf20Sopenharmony_ciENTRY(sun4v_ncs_qconf)
178c2ecf20Sopenharmony_ci	mov	HV_FAST_NCS_QCONF, %o5
188c2ecf20Sopenharmony_ci	ta	HV_FAST_TRAP
198c2ecf20Sopenharmony_ci	stx	%o1, [%o3]
208c2ecf20Sopenharmony_ci	retl
218c2ecf20Sopenharmony_ci	 nop
228c2ecf20Sopenharmony_ciENDPROC(sun4v_ncs_qconf)
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci	/* %o0: queue handle
258c2ecf20Sopenharmony_ci	 * %o1: address of queue type return
268c2ecf20Sopenharmony_ci	 * %o2: address of queue base address return
278c2ecf20Sopenharmony_ci	 * %o3: address of queue num entries return
288c2ecf20Sopenharmony_ci	 */
298c2ecf20Sopenharmony_ciENTRY(sun4v_ncs_qinfo)
308c2ecf20Sopenharmony_ci	mov	%o1, %g1
318c2ecf20Sopenharmony_ci	mov	%o2, %g2
328c2ecf20Sopenharmony_ci	mov	%o3, %g3
338c2ecf20Sopenharmony_ci	mov	HV_FAST_NCS_QINFO, %o5
348c2ecf20Sopenharmony_ci	ta	HV_FAST_TRAP
358c2ecf20Sopenharmony_ci	stx	%o1, [%g1]
368c2ecf20Sopenharmony_ci	stx	%o2, [%g2]
378c2ecf20Sopenharmony_ci	stx	%o3, [%g3]
388c2ecf20Sopenharmony_ci	retl
398c2ecf20Sopenharmony_ci	 nop
408c2ecf20Sopenharmony_ciENDPROC(sun4v_ncs_qinfo)
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci	/* %o0: queue handle
438c2ecf20Sopenharmony_ci	 * %o1: address of head offset return
448c2ecf20Sopenharmony_ci	 */
458c2ecf20Sopenharmony_ciENTRY(sun4v_ncs_gethead)
468c2ecf20Sopenharmony_ci	mov	%o1, %o2
478c2ecf20Sopenharmony_ci	mov	HV_FAST_NCS_GETHEAD, %o5
488c2ecf20Sopenharmony_ci	ta	HV_FAST_TRAP
498c2ecf20Sopenharmony_ci	stx	%o1, [%o2]
508c2ecf20Sopenharmony_ci	retl
518c2ecf20Sopenharmony_ci	 nop
528c2ecf20Sopenharmony_ciENDPROC(sun4v_ncs_gethead)
538c2ecf20Sopenharmony_ci
548c2ecf20Sopenharmony_ci	/* %o0: queue handle
558c2ecf20Sopenharmony_ci	 * %o1: address of tail offset return
568c2ecf20Sopenharmony_ci	 */
578c2ecf20Sopenharmony_ciENTRY(sun4v_ncs_gettail)
588c2ecf20Sopenharmony_ci	mov	%o1, %o2
598c2ecf20Sopenharmony_ci	mov	HV_FAST_NCS_GETTAIL, %o5
608c2ecf20Sopenharmony_ci	ta	HV_FAST_TRAP
618c2ecf20Sopenharmony_ci	stx	%o1, [%o2]
628c2ecf20Sopenharmony_ci	retl
638c2ecf20Sopenharmony_ci	 nop
648c2ecf20Sopenharmony_ciENDPROC(sun4v_ncs_gettail)
658c2ecf20Sopenharmony_ci
668c2ecf20Sopenharmony_ci	/* %o0: queue handle
678c2ecf20Sopenharmony_ci	 * %o1: new tail offset
688c2ecf20Sopenharmony_ci	 */
698c2ecf20Sopenharmony_ciENTRY(sun4v_ncs_settail)
708c2ecf20Sopenharmony_ci	mov	HV_FAST_NCS_SETTAIL, %o5
718c2ecf20Sopenharmony_ci	ta	HV_FAST_TRAP
728c2ecf20Sopenharmony_ci	retl
738c2ecf20Sopenharmony_ci	 nop
748c2ecf20Sopenharmony_ciENDPROC(sun4v_ncs_settail)
758c2ecf20Sopenharmony_ci
768c2ecf20Sopenharmony_ci	/* %o0: queue handle
778c2ecf20Sopenharmony_ci	 * %o1: address of devino return
788c2ecf20Sopenharmony_ci	 */
798c2ecf20Sopenharmony_ciENTRY(sun4v_ncs_qhandle_to_devino)
808c2ecf20Sopenharmony_ci	mov	%o1, %o2
818c2ecf20Sopenharmony_ci	mov	HV_FAST_NCS_QHANDLE_TO_DEVINO, %o5
828c2ecf20Sopenharmony_ci	ta	HV_FAST_TRAP
838c2ecf20Sopenharmony_ci	stx	%o1, [%o2]
848c2ecf20Sopenharmony_ci	retl
858c2ecf20Sopenharmony_ci	 nop
868c2ecf20Sopenharmony_ciENDPROC(sun4v_ncs_qhandle_to_devino)
878c2ecf20Sopenharmony_ci
888c2ecf20Sopenharmony_ci	/* %o0: queue handle
898c2ecf20Sopenharmony_ci	 * %o1: new head offset
908c2ecf20Sopenharmony_ci	 */
918c2ecf20Sopenharmony_ciENTRY(sun4v_ncs_sethead_marker)
928c2ecf20Sopenharmony_ci	mov	HV_FAST_NCS_SETHEAD_MARKER, %o5
938c2ecf20Sopenharmony_ci	ta	HV_FAST_TRAP
948c2ecf20Sopenharmony_ci	retl
958c2ecf20Sopenharmony_ci	 nop
968c2ecf20Sopenharmony_ciENDPROC(sun4v_ncs_sethead_marker)
97