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 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 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 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