1/* SPDX-License-Identifier: GPL-2.0 */
2/* n2_asm.S: Hypervisor calls for NCS support.
3 *
4 * Copyright (C) 2009 David S. Miller <davem@davemloft.net>
5 */
6
7#include <linux/linkage.h>
8#include <asm/hypervisor.h>
9#include "n2_core.h"
10
11	/* o0: queue type
12	 * o1: RA of queue
13	 * o2: num entries in queue
14	 * o3: address of queue handle return
15	 */
16ENTRY(sun4v_ncs_qconf)
17	mov	HV_FAST_NCS_QCONF, %o5
18	ta	HV_FAST_TRAP
19	stx	%o1, [%o3]
20	retl
21	 nop
22ENDPROC(sun4v_ncs_qconf)
23
24	/* %o0: queue handle
25	 * %o1: address of queue type return
26	 * %o2: address of queue base address return
27	 * %o3: address of queue num entries return
28	 */
29ENTRY(sun4v_ncs_qinfo)
30	mov	%o1, %g1
31	mov	%o2, %g2
32	mov	%o3, %g3
33	mov	HV_FAST_NCS_QINFO, %o5
34	ta	HV_FAST_TRAP
35	stx	%o1, [%g1]
36	stx	%o2, [%g2]
37	stx	%o3, [%g3]
38	retl
39	 nop
40ENDPROC(sun4v_ncs_qinfo)
41
42	/* %o0: queue handle
43	 * %o1: address of head offset return
44	 */
45ENTRY(sun4v_ncs_gethead)
46	mov	%o1, %o2
47	mov	HV_FAST_NCS_GETHEAD, %o5
48	ta	HV_FAST_TRAP
49	stx	%o1, [%o2]
50	retl
51	 nop
52ENDPROC(sun4v_ncs_gethead)
53
54	/* %o0: queue handle
55	 * %o1: address of tail offset return
56	 */
57ENTRY(sun4v_ncs_gettail)
58	mov	%o1, %o2
59	mov	HV_FAST_NCS_GETTAIL, %o5
60	ta	HV_FAST_TRAP
61	stx	%o1, [%o2]
62	retl
63	 nop
64ENDPROC(sun4v_ncs_gettail)
65
66	/* %o0: queue handle
67	 * %o1: new tail offset
68	 */
69ENTRY(sun4v_ncs_settail)
70	mov	HV_FAST_NCS_SETTAIL, %o5
71	ta	HV_FAST_TRAP
72	retl
73	 nop
74ENDPROC(sun4v_ncs_settail)
75
76	/* %o0: queue handle
77	 * %o1: address of devino return
78	 */
79ENTRY(sun4v_ncs_qhandle_to_devino)
80	mov	%o1, %o2
81	mov	HV_FAST_NCS_QHANDLE_TO_DEVINO, %o5
82	ta	HV_FAST_TRAP
83	stx	%o1, [%o2]
84	retl
85	 nop
86ENDPROC(sun4v_ncs_qhandle_to_devino)
87
88	/* %o0: queue handle
89	 * %o1: new head offset
90	 */
91ENTRY(sun4v_ncs_sethead_marker)
92	mov	HV_FAST_NCS_SETHEAD_MARKER, %o5
93	ta	HV_FAST_TRAP
94	retl
95	 nop
96ENDPROC(sun4v_ncs_sethead_marker)
97