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