xref: /kvm-unit-tests/lib/riscv/asm/sbi.h (revision 695740795adee59b48599e2f1a6bf19866a77779)
19ccb00e4SAndrew Jones /* SPDX-License-Identifier: GPL-2.0-only */
29ccb00e4SAndrew Jones #ifndef _ASMRISCV_SBI_H_
39ccb00e4SAndrew Jones #define _ASMRISCV_SBI_H_
49ccb00e4SAndrew Jones 
59c92b28eSAndrew Jones #define SBI_SUCCESS			0
69c92b28eSAndrew Jones #define SBI_ERR_FAILURE			-1
79c92b28eSAndrew Jones #define SBI_ERR_NOT_SUPPORTED		-2
89c92b28eSAndrew Jones #define SBI_ERR_INVALID_PARAM		-3
99c92b28eSAndrew Jones #define SBI_ERR_DENIED			-4
109c92b28eSAndrew Jones #define SBI_ERR_INVALID_ADDRESS		-5
119c92b28eSAndrew Jones #define SBI_ERR_ALREADY_AVAILABLE	-6
129c92b28eSAndrew Jones #define SBI_ERR_ALREADY_STARTED		-7
139c92b28eSAndrew Jones #define SBI_ERR_ALREADY_STOPPED		-8
14f1302432SClément Léger #define SBI_ERR_NO_SHMEM		-9
15f1302432SClément Léger #define SBI_ERR_INVALID_STATE		-10
16f1302432SClément Léger #define SBI_ERR_BAD_RANGE		-11
17f1302432SClément Léger #define SBI_ERR_TIMEOUT			-12
18f1302432SClément Léger #define SBI_ERR_IO			-13
19f1302432SClément Léger #define SBI_ERR_DENIED_LOCKED		-14
209c92b28eSAndrew Jones 
21240729eeSClément Léger #define SBI_IMPL_BBL		0
22240729eeSClément Léger #define SBI_IMPL_OPENSBI	1
23240729eeSClément Léger #define SBI_IMPL_XVISOR		2
24240729eeSClément Léger #define SBI_IMPL_KVM		3
25240729eeSClément Léger #define SBI_IMPL_RUSTSBI	4
26240729eeSClément Léger #define SBI_IMPL_DIOSIX		5
27240729eeSClément Léger #define SBI_IMPL_COFFER		6
28240729eeSClément Léger #define SBI_IMPL_XEN		7
29240729eeSClément Léger #define SBI_IMPL_POLARFIRE_HSS	8
30240729eeSClément Léger #define SBI_IMPL_COREBOOT	9
31240729eeSClément Léger #define SBI_IMPL_OREBOOT	10
32240729eeSClément Léger #define SBI_IMPL_BHYVE		11
33240729eeSClément Léger 
34b9d58c27SClément Léger /* SBI spec version fields */
35b9d58c27SClément Léger #define SBI_SPEC_VERSION_MAJOR_SHIFT	24
36b9d58c27SClément Léger #define SBI_SPEC_VERSION_MAJOR_MASK	0x7f
37b9d58c27SClément Léger #define SBI_SPEC_VERSION_MINOR_MASK	0xffffff
38b9d58c27SClément Léger #define SBI_SPEC_VERSION_MASK		((SBI_SPEC_VERSION_MAJOR_MASK << SBI_SPEC_VERSION_MAJOR_SHIFT) | \
39b9d58c27SClément Léger 					 SBI_SPEC_VERSION_MINOR_MASK)
40b9d58c27SClément Léger 
410cc3a351SSean Christopherson #ifndef __ASSEMBLER__
4225475fa5SAndrew Jones #include <cpumask.h>
439c92b28eSAndrew Jones 
449ccb00e4SAndrew Jones enum sbi_ext_id {
459ccb00e4SAndrew Jones 	SBI_EXT_BASE = 0x10,
4614fa12b1SJames Raphael Tiovalen 	SBI_EXT_TIME = 0x54494d45,
476489b8b0SJames Raphael Tiovalen 	SBI_EXT_IPI = 0x735049,
489c92b28eSAndrew Jones 	SBI_EXT_HSM = 0x48534d,
499ccb00e4SAndrew Jones 	SBI_EXT_SRST = 0x53525354,
50ce58d3a4SCade Richard 	SBI_EXT_DBCN = 0x4442434E,
512ffe016fSAndrew Jones 	SBI_EXT_SUSP = 0x53555350,
52f1302432SClément Léger 	SBI_EXT_FWFT = 0x46574654,
53f16317a7SClément Léger 	SBI_EXT_SSE = 0x535345,
549ccb00e4SAndrew Jones };
559ccb00e4SAndrew Jones 
569ccb00e4SAndrew Jones enum sbi_ext_base_fid {
579ccb00e4SAndrew Jones 	SBI_EXT_BASE_GET_SPEC_VERSION = 0,
589ccb00e4SAndrew Jones 	SBI_EXT_BASE_GET_IMP_ID,
599ccb00e4SAndrew Jones 	SBI_EXT_BASE_GET_IMP_VERSION,
609ccb00e4SAndrew Jones 	SBI_EXT_BASE_PROBE_EXT,
619ccb00e4SAndrew Jones 	SBI_EXT_BASE_GET_MVENDORID,
629ccb00e4SAndrew Jones 	SBI_EXT_BASE_GET_MARCHID,
639ccb00e4SAndrew Jones 	SBI_EXT_BASE_GET_MIMPID,
649ccb00e4SAndrew Jones };
659ccb00e4SAndrew Jones 
669c92b28eSAndrew Jones enum sbi_ext_hsm_fid {
679c92b28eSAndrew Jones 	SBI_EXT_HSM_HART_START = 0,
689c92b28eSAndrew Jones 	SBI_EXT_HSM_HART_STOP,
699c92b28eSAndrew Jones 	SBI_EXT_HSM_HART_STATUS,
709c92b28eSAndrew Jones 	SBI_EXT_HSM_HART_SUSPEND,
719c92b28eSAndrew Jones };
729c92b28eSAndrew Jones 
7314fa12b1SJames Raphael Tiovalen enum sbi_ext_time_fid {
7414fa12b1SJames Raphael Tiovalen 	SBI_EXT_TIME_SET_TIMER = 0,
7514fa12b1SJames Raphael Tiovalen };
7614fa12b1SJames Raphael Tiovalen 
776489b8b0SJames Raphael Tiovalen enum sbi_ext_ipi_fid {
786489b8b0SJames Raphael Tiovalen 	SBI_EXT_IPI_SEND_IPI = 0,
796489b8b0SJames Raphael Tiovalen };
806489b8b0SJames Raphael Tiovalen 
8167b8f462SJames Raphael Tiovalen enum sbi_ext_hsm_sid {
8267b8f462SJames Raphael Tiovalen 	SBI_EXT_HSM_STARTED = 0,
8367b8f462SJames Raphael Tiovalen 	SBI_EXT_HSM_STOPPED,
8467b8f462SJames Raphael Tiovalen 	SBI_EXT_HSM_START_PENDING,
8567b8f462SJames Raphael Tiovalen 	SBI_EXT_HSM_STOP_PENDING,
8667b8f462SJames Raphael Tiovalen 	SBI_EXT_HSM_SUSPENDED,
8767b8f462SJames Raphael Tiovalen 	SBI_EXT_HSM_SUSPEND_PENDING,
8867b8f462SJames Raphael Tiovalen 	SBI_EXT_HSM_RESUME_PENDING,
8967b8f462SJames Raphael Tiovalen };
9067b8f462SJames Raphael Tiovalen 
9167b8f462SJames Raphael Tiovalen enum sbi_ext_hsm_hart_suspend_type {
9267b8f462SJames Raphael Tiovalen 	SBI_EXT_HSM_HART_SUSPEND_RETENTIVE = 0,
9367b8f462SJames Raphael Tiovalen 	SBI_EXT_HSM_HART_SUSPEND_NON_RETENTIVE = 0x80000000,
9467b8f462SJames Raphael Tiovalen };
9567b8f462SJames Raphael Tiovalen 
96ce58d3a4SCade Richard enum sbi_ext_dbcn_fid {
97ce58d3a4SCade Richard 	SBI_EXT_DBCN_CONSOLE_WRITE = 0,
98ce58d3a4SCade Richard 	SBI_EXT_DBCN_CONSOLE_READ,
99ce58d3a4SCade Richard 	SBI_EXT_DBCN_CONSOLE_WRITE_BYTE,
100ce58d3a4SCade Richard };
101ce58d3a4SCade Richard 
102f1302432SClément Léger enum sbi_ext_fwft_fid {
103f1302432SClément Léger 	SBI_EXT_FWFT_SET = 0,
104f1302432SClément Léger 	SBI_EXT_FWFT_GET,
105f1302432SClément Léger };
106f1302432SClément Léger 
107f1302432SClément Léger #define SBI_FWFT_MISALIGNED_EXC_DELEG		0x0
108f1302432SClément Léger #define SBI_FWFT_LANDING_PAD			0x1
109f1302432SClément Léger #define SBI_FWFT_SHADOW_STACK			0x2
110f1302432SClément Léger #define SBI_FWFT_DOUBLE_TRAP			0x3
111f1302432SClément Léger #define SBI_FWFT_PTE_AD_HW_UPDATING		0x4
112f1302432SClément Léger #define SBI_FWFT_POINTER_MASKING_PMLEN		0x5
113f1302432SClément Léger #define SBI_FWFT_LOCAL_RESERVED_START		0x6
114f1302432SClément Léger #define SBI_FWFT_LOCAL_RESERVED_END		0x3fffffff
115f1302432SClément Léger #define SBI_FWFT_LOCAL_PLATFORM_START		0x40000000
116f1302432SClément Léger #define SBI_FWFT_LOCAL_PLATFORM_END		0x7fffffff
117f1302432SClément Léger 
118f1302432SClément Léger #define SBI_FWFT_GLOBAL_RESERVED_START		0x80000000
119f1302432SClément Léger #define SBI_FWFT_GLOBAL_RESERVED_END		0xbfffffff
120f1302432SClément Léger #define SBI_FWFT_GLOBAL_PLATFORM_START		0xc0000000
121f1302432SClément Léger #define SBI_FWFT_GLOBAL_PLATFORM_END		0xffffffff
122f1302432SClément Léger 
123f1302432SClément Léger #define SBI_FWFT_PLATFORM_FEATURE_BIT		BIT(30)
124f1302432SClément Léger #define SBI_FWFT_GLOBAL_FEATURE_BIT		BIT(31)
125f1302432SClément Léger 
126f1302432SClément Léger #define SBI_FWFT_SET_FLAG_LOCK			BIT(0)
127f1302432SClément Léger 
128f16317a7SClément Léger enum sbi_ext_sse_fid {
129f16317a7SClément Léger 	SBI_EXT_SSE_READ_ATTRS = 0,
130f16317a7SClément Léger 	SBI_EXT_SSE_WRITE_ATTRS,
131f16317a7SClément Léger 	SBI_EXT_SSE_REGISTER,
132f16317a7SClément Léger 	SBI_EXT_SSE_UNREGISTER,
133f16317a7SClément Léger 	SBI_EXT_SSE_ENABLE,
134f16317a7SClément Léger 	SBI_EXT_SSE_DISABLE,
135f16317a7SClément Léger 	SBI_EXT_SSE_COMPLETE,
136f16317a7SClément Léger 	SBI_EXT_SSE_INJECT,
137f16317a7SClément Léger 	SBI_EXT_SSE_HART_UNMASK,
138f16317a7SClément Léger 	SBI_EXT_SSE_HART_MASK,
139f16317a7SClément Léger };
140f16317a7SClément Léger 
141f16317a7SClément Léger /* SBI SSE Event Attributes. */
142f16317a7SClément Léger enum sbi_sse_attr_id {
143f16317a7SClément Léger 	SBI_SSE_ATTR_STATUS		= 0x00000000,
144f16317a7SClément Léger 	SBI_SSE_ATTR_PRIORITY		= 0x00000001,
145f16317a7SClément Léger 	SBI_SSE_ATTR_CONFIG		= 0x00000002,
146f16317a7SClément Léger 	SBI_SSE_ATTR_PREFERRED_HART	= 0x00000003,
147f16317a7SClément Léger 	SBI_SSE_ATTR_ENTRY_PC		= 0x00000004,
148f16317a7SClément Léger 	SBI_SSE_ATTR_ENTRY_ARG		= 0x00000005,
149f16317a7SClément Léger 	SBI_SSE_ATTR_INTERRUPTED_SEPC	= 0x00000006,
150f16317a7SClément Léger 	SBI_SSE_ATTR_INTERRUPTED_FLAGS	= 0x00000007,
151f16317a7SClément Léger 	SBI_SSE_ATTR_INTERRUPTED_A6	= 0x00000008,
152f16317a7SClément Léger 	SBI_SSE_ATTR_INTERRUPTED_A7	= 0x00000009,
153f16317a7SClément Léger };
154f16317a7SClément Léger 
155f16317a7SClément Léger #define SBI_SSE_ATTR_STATUS_STATE_OFFSET	0
156f16317a7SClément Léger #define SBI_SSE_ATTR_STATUS_STATE_MASK		0x3
157f16317a7SClément Léger #define SBI_SSE_ATTR_STATUS_PENDING_OFFSET	2
158f16317a7SClément Léger #define SBI_SSE_ATTR_STATUS_INJECT_OFFSET	3
159f16317a7SClément Léger 
160f16317a7SClément Léger #define SBI_SSE_ATTR_CONFIG_ONESHOT		BIT(0)
161f16317a7SClément Léger 
162f16317a7SClément Léger #define SBI_SSE_ATTR_INTERRUPTED_FLAGS_SSTATUS_SPP	BIT(0)
163f16317a7SClément Léger #define SBI_SSE_ATTR_INTERRUPTED_FLAGS_SSTATUS_SPIE	BIT(1)
164f16317a7SClément Léger #define SBI_SSE_ATTR_INTERRUPTED_FLAGS_HSTATUS_SPV	BIT(2)
165f16317a7SClément Léger #define SBI_SSE_ATTR_INTERRUPTED_FLAGS_HSTATUS_SPVP	BIT(3)
166f16317a7SClément Léger #define SBI_SSE_ATTR_INTERRUPTED_FLAGS_SSTATUS_SPELP	BIT(4)
167f16317a7SClément Léger #define SBI_SSE_ATTR_INTERRUPTED_FLAGS_SSTATUS_SDT	BIT(5)
168f16317a7SClément Léger 
169f16317a7SClément Léger enum sbi_sse_state {
170f16317a7SClément Léger 	SBI_SSE_STATE_UNUSED		= 0,
171f16317a7SClément Léger 	SBI_SSE_STATE_REGISTERED	= 1,
172f16317a7SClément Léger 	SBI_SSE_STATE_ENABLED		= 2,
173f16317a7SClément Léger 	SBI_SSE_STATE_RUNNING		= 3,
174f16317a7SClément Léger };
175f16317a7SClément Léger 
176f16317a7SClément Léger /* SBI SSE Event IDs. */
177f16317a7SClément Léger /* Range 0x00000000 - 0x0000ffff */
178f16317a7SClément Léger #define SBI_SSE_EVENT_LOCAL_HIGH_PRIO_RAS	0x00000000
179f16317a7SClément Léger #define SBI_SSE_EVENT_LOCAL_DOUBLE_TRAP		0x00000001
180f16317a7SClément Léger #define SBI_SSE_EVENT_LOCAL_RESERVED_0_START	0x00000002
181f16317a7SClément Léger #define SBI_SSE_EVENT_LOCAL_RESERVED_0_END	0x00003fff
182f16317a7SClément Léger #define SBI_SSE_EVENT_LOCAL_PLAT_0_START	0x00004000
183f16317a7SClément Léger #define SBI_SSE_EVENT_LOCAL_PLAT_0_END		0x00007fff
184f16317a7SClément Léger 
185f16317a7SClément Léger #define SBI_SSE_EVENT_GLOBAL_HIGH_PRIO_RAS	0x00008000
186f16317a7SClément Léger #define SBI_SSE_EVENT_GLOBAL_RESERVED_0_START	0x00008001
187f16317a7SClément Léger #define SBI_SSE_EVENT_GLOBAL_RESERVED_0_END	0x0000bfff
188f16317a7SClément Léger #define SBI_SSE_EVENT_GLOBAL_PLAT_0_START	0x0000c000
189f16317a7SClément Léger #define SBI_SSE_EVENT_GLOBAL_PLAT_0_END		0x0000ffff
190f16317a7SClément Léger 
191f16317a7SClément Léger /* Range 0x00010000 - 0x0001ffff */
192f16317a7SClément Léger #define SBI_SSE_EVENT_LOCAL_PMU_OVERFLOW	0x00010000
193f16317a7SClément Léger #define SBI_SSE_EVENT_LOCAL_RESERVED_1_START	0x00010001
194f16317a7SClément Léger #define SBI_SSE_EVENT_LOCAL_RESERVED_1_END	0x00013fff
195f16317a7SClément Léger #define SBI_SSE_EVENT_LOCAL_PLAT_1_START	0x00014000
196f16317a7SClément Léger #define SBI_SSE_EVENT_LOCAL_PLAT_1_END		0x00017fff
197f16317a7SClément Léger 
198f16317a7SClément Léger #define SBI_SSE_EVENT_GLOBAL_RESERVED_1_START	0x00018000
199f16317a7SClément Léger #define SBI_SSE_EVENT_GLOBAL_RESERVED_1_END	0x0001bfff
200f16317a7SClément Léger #define SBI_SSE_EVENT_GLOBAL_PLAT_1_START	0x0001c000
201f16317a7SClément Léger #define SBI_SSE_EVENT_GLOBAL_PLAT_1_END		0x0001ffff
202f16317a7SClément Léger 
203f16317a7SClément Léger /* Range 0x00100000 - 0x0010ffff */
204f16317a7SClément Léger #define SBI_SSE_EVENT_LOCAL_LOW_PRIO_RAS	0x00100000
205f16317a7SClément Léger #define SBI_SSE_EVENT_LOCAL_RESERVED_2_START	0x00100001
206f16317a7SClément Léger #define SBI_SSE_EVENT_LOCAL_RESERVED_2_END	0x00103fff
207f16317a7SClément Léger #define SBI_SSE_EVENT_LOCAL_PLAT_2_START	0x00104000
208f16317a7SClément Léger #define SBI_SSE_EVENT_LOCAL_PLAT_2_END		0x00107fff
209f16317a7SClément Léger 
210f16317a7SClément Léger #define SBI_SSE_EVENT_GLOBAL_LOW_PRIO_RAS	0x00108000
211f16317a7SClément Léger #define SBI_SSE_EVENT_GLOBAL_RESERVED_2_START	0x00108001
212f16317a7SClément Léger #define SBI_SSE_EVENT_GLOBAL_RESERVED_2_END	0x0010bfff
213f16317a7SClément Léger #define SBI_SSE_EVENT_GLOBAL_PLAT_2_START	0x0010c000
214f16317a7SClément Léger #define SBI_SSE_EVENT_GLOBAL_PLAT_2_END		0x0010ffff
215f16317a7SClément Léger 
216f16317a7SClément Léger /* Range 0xffff0000 - 0xffffffff */
217f16317a7SClément Léger #define SBI_SSE_EVENT_LOCAL_SOFTWARE		0xffff0000
218f16317a7SClément Léger #define SBI_SSE_EVENT_LOCAL_RESERVED_3_START	0xffff0001
219f16317a7SClément Léger #define SBI_SSE_EVENT_LOCAL_RESERVED_3_END	0xffff3fff
220f16317a7SClément Léger #define SBI_SSE_EVENT_LOCAL_PLAT_3_START	0xffff4000
221f16317a7SClément Léger #define SBI_SSE_EVENT_LOCAL_PLAT_3_END		0xffff7fff
222f16317a7SClément Léger 
223f16317a7SClément Léger #define SBI_SSE_EVENT_GLOBAL_SOFTWARE		0xffff8000
224f16317a7SClément Léger #define SBI_SSE_EVENT_GLOBAL_RESERVED_3_START	0xffff8001
225f16317a7SClément Léger #define SBI_SSE_EVENT_GLOBAL_RESERVED_3_END	0xffffbfff
226f16317a7SClément Léger #define SBI_SSE_EVENT_GLOBAL_PLAT_3_START	0xffffc000
227f16317a7SClément Léger #define SBI_SSE_EVENT_GLOBAL_PLAT_3_END		0xffffffff
228f16317a7SClément Léger 
229f16317a7SClément Léger #define SBI_SSE_EVENT_PLATFORM_BIT		BIT(14)
230f16317a7SClément Léger #define SBI_SSE_EVENT_GLOBAL_BIT		BIT(15)
231f16317a7SClément Léger 
2329ccb00e4SAndrew Jones struct sbiret {
2339ccb00e4SAndrew Jones 	long error;
2349ccb00e4SAndrew Jones 	long value;
2359ccb00e4SAndrew Jones };
2369ccb00e4SAndrew Jones 
sbi_mk_version(unsigned long major,unsigned long minor)237b9d58c27SClément Léger static inline unsigned long sbi_mk_version(unsigned long major, unsigned long minor)
238b9d58c27SClément Léger {
239b9d58c27SClément Léger 	return ((major & SBI_SPEC_VERSION_MAJOR_MASK) << SBI_SPEC_VERSION_MAJOR_SHIFT)
240b9d58c27SClément Léger 		| (minor & SBI_SPEC_VERSION_MINOR_MASK);
241b9d58c27SClément Léger }
242b9d58c27SClément Léger 
sbi_impl_opensbi_mk_version(unsigned long major,unsigned long minor)243240729eeSClément Léger static inline unsigned long sbi_impl_opensbi_mk_version(unsigned long major, unsigned long minor)
244240729eeSClément Léger {
245240729eeSClément Léger 	return (((major & 0xffff) << 16) | (minor & 0xffff));
246240729eeSClément Léger }
247240729eeSClément Léger 
2489ccb00e4SAndrew Jones struct sbiret sbi_ecall(int ext, int fid, unsigned long arg0,
2499ccb00e4SAndrew Jones 			unsigned long arg1, unsigned long arg2,
2509ccb00e4SAndrew Jones 			unsigned long arg3, unsigned long arg4,
2519ccb00e4SAndrew Jones 			unsigned long arg5);
2529ccb00e4SAndrew Jones 
2539ccb00e4SAndrew Jones void sbi_shutdown(void);
2549c92b28eSAndrew Jones struct sbiret sbi_hart_start(unsigned long hartid, unsigned long entry, unsigned long sp);
25567b8f462SJames Raphael Tiovalen struct sbiret sbi_hart_stop(void);
25667b8f462SJames Raphael Tiovalen struct sbiret sbi_hart_get_status(unsigned long hartid);
2576489b8b0SJames Raphael Tiovalen struct sbiret sbi_send_ipi(unsigned long hart_mask, unsigned long hart_mask_base);
25825475fa5SAndrew Jones struct sbiret sbi_send_ipi_cpu(int cpu);
25925475fa5SAndrew Jones struct sbiret sbi_send_ipi_cpumask(const cpumask_t *mask);
26056ca8093SAndrew Jones struct sbiret sbi_send_ipi_broadcast(void);
2619340e4b7SAndrew Jones struct sbiret sbi_set_timer(unsigned long stime_value);
262b9d58c27SClément Léger struct sbiret sbi_get_spec_version(void);
263*a3fc8778SAndrew Jones struct sbiret sbi_get_imp_version(void);
264*a3fc8778SAndrew Jones struct sbiret sbi_get_imp_id(void);
2657040d2a9SJames Raphael Tiovalen long sbi_probe(int ext);
266*a3fc8778SAndrew Jones unsigned long __sbi_get_imp_version(void);
267*a3fc8778SAndrew Jones unsigned long __sbi_get_imp_id(void);
2689ccb00e4SAndrew Jones 
26998ea1f96SClément Léger typedef void (*sbi_sse_handler_fn)(void *data, struct pt_regs *regs, unsigned int hartid);
27098ea1f96SClément Léger 
27198ea1f96SClément Léger struct sbi_sse_handler_arg {
27298ea1f96SClément Léger 	unsigned long reg_tmp;
27398ea1f96SClément Léger 	sbi_sse_handler_fn handler;
27498ea1f96SClément Léger 	void *handler_data;
27598ea1f96SClément Léger 	void *stack;
27698ea1f96SClément Léger };
27798ea1f96SClément Léger 
27898ea1f96SClément Léger extern void sbi_sse_entry(void);
27998ea1f96SClément Léger 
sbi_sse_event_is_global(uint32_t event_id)28098ea1f96SClément Léger static inline bool sbi_sse_event_is_global(uint32_t event_id)
28198ea1f96SClément Léger {
28298ea1f96SClément Léger 	return !!(event_id & SBI_SSE_EVENT_GLOBAL_BIT);
28398ea1f96SClément Léger }
28498ea1f96SClément Léger 
28598ea1f96SClément Léger struct sbiret sbi_sse_read_attrs_raw(unsigned long event_id, unsigned long base_attr_id,
28698ea1f96SClément Léger 				     unsigned long attr_count, unsigned long phys_lo,
28798ea1f96SClément Léger 				     unsigned long phys_hi);
28898ea1f96SClément Léger struct sbiret sbi_sse_read_attrs(unsigned long event_id, unsigned long base_attr_id,
28998ea1f96SClément Léger 				 unsigned long attr_count, unsigned long *values);
29098ea1f96SClément Léger struct sbiret sbi_sse_write_attrs_raw(unsigned long event_id, unsigned long base_attr_id,
29198ea1f96SClément Léger 				      unsigned long attr_count, unsigned long phys_lo,
29298ea1f96SClément Léger 				      unsigned long phys_hi);
29398ea1f96SClément Léger struct sbiret sbi_sse_write_attrs(unsigned long event_id, unsigned long base_attr_id,
29498ea1f96SClément Léger 				  unsigned long attr_count, unsigned long *values);
29598ea1f96SClément Léger struct sbiret sbi_sse_register_raw(unsigned long event_id, unsigned long entry_pc,
29698ea1f96SClément Léger 				   unsigned long entry_arg);
29798ea1f96SClément Léger struct sbiret sbi_sse_register(unsigned long event_id, struct sbi_sse_handler_arg *arg);
29898ea1f96SClément Léger struct sbiret sbi_sse_unregister(unsigned long event_id);
29998ea1f96SClément Léger struct sbiret sbi_sse_enable(unsigned long event_id);
30098ea1f96SClément Léger struct sbiret sbi_sse_disable(unsigned long event_id);
30198ea1f96SClément Léger struct sbiret sbi_sse_hart_mask(void);
30298ea1f96SClément Léger struct sbiret sbi_sse_hart_unmask(void);
30398ea1f96SClément Léger struct sbiret sbi_sse_inject(unsigned long event_id, unsigned long hart_id);
30498ea1f96SClément Léger 
3050cc3a351SSean Christopherson #endif /* !__ASSEMBLER__ */
3069ccb00e4SAndrew Jones #endif /* _ASMRISCV_SBI_H_ */
307