1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 #ifndef _ASMRISCV_SBI_H_ 3 #define _ASMRISCV_SBI_H_ 4 5 #define SBI_SUCCESS 0 6 #define SBI_ERR_FAILURE -1 7 #define SBI_ERR_NOT_SUPPORTED -2 8 #define SBI_ERR_INVALID_PARAM -3 9 #define SBI_ERR_DENIED -4 10 #define SBI_ERR_INVALID_ADDRESS -5 11 #define SBI_ERR_ALREADY_AVAILABLE -6 12 #define SBI_ERR_ALREADY_STARTED -7 13 #define SBI_ERR_ALREADY_STOPPED -8 14 15 #ifndef __ASSEMBLY__ 16 #include <cpumask.h> 17 18 enum sbi_ext_id { 19 SBI_EXT_BASE = 0x10, 20 SBI_EXT_TIME = 0x54494d45, 21 SBI_EXT_IPI = 0x735049, 22 SBI_EXT_HSM = 0x48534d, 23 SBI_EXT_SRST = 0x53525354, 24 SBI_EXT_DBCN = 0x4442434E, 25 SBI_EXT_SUSP = 0x53555350, 26 }; 27 28 enum sbi_ext_base_fid { 29 SBI_EXT_BASE_GET_SPEC_VERSION = 0, 30 SBI_EXT_BASE_GET_IMP_ID, 31 SBI_EXT_BASE_GET_IMP_VERSION, 32 SBI_EXT_BASE_PROBE_EXT, 33 SBI_EXT_BASE_GET_MVENDORID, 34 SBI_EXT_BASE_GET_MARCHID, 35 SBI_EXT_BASE_GET_MIMPID, 36 }; 37 38 enum sbi_ext_hsm_fid { 39 SBI_EXT_HSM_HART_START = 0, 40 SBI_EXT_HSM_HART_STOP, 41 SBI_EXT_HSM_HART_STATUS, 42 SBI_EXT_HSM_HART_SUSPEND, 43 }; 44 45 enum sbi_ext_time_fid { 46 SBI_EXT_TIME_SET_TIMER = 0, 47 }; 48 49 enum sbi_ext_ipi_fid { 50 SBI_EXT_IPI_SEND_IPI = 0, 51 }; 52 53 enum sbi_ext_hsm_sid { 54 SBI_EXT_HSM_STARTED = 0, 55 SBI_EXT_HSM_STOPPED, 56 SBI_EXT_HSM_START_PENDING, 57 SBI_EXT_HSM_STOP_PENDING, 58 SBI_EXT_HSM_SUSPENDED, 59 SBI_EXT_HSM_SUSPEND_PENDING, 60 SBI_EXT_HSM_RESUME_PENDING, 61 }; 62 63 enum sbi_ext_hsm_hart_suspend_type { 64 SBI_EXT_HSM_HART_SUSPEND_RETENTIVE = 0, 65 SBI_EXT_HSM_HART_SUSPEND_NON_RETENTIVE = 0x80000000, 66 }; 67 68 enum sbi_ext_dbcn_fid { 69 SBI_EXT_DBCN_CONSOLE_WRITE = 0, 70 SBI_EXT_DBCN_CONSOLE_READ, 71 SBI_EXT_DBCN_CONSOLE_WRITE_BYTE, 72 }; 73 74 struct sbiret { 75 long error; 76 long value; 77 }; 78 79 struct sbiret sbi_ecall(int ext, int fid, unsigned long arg0, 80 unsigned long arg1, unsigned long arg2, 81 unsigned long arg3, unsigned long arg4, 82 unsigned long arg5); 83 84 void sbi_shutdown(void); 85 struct sbiret sbi_hart_start(unsigned long hartid, unsigned long entry, unsigned long sp); 86 struct sbiret sbi_hart_stop(void); 87 struct sbiret sbi_hart_get_status(unsigned long hartid); 88 struct sbiret sbi_send_ipi(unsigned long hart_mask, unsigned long hart_mask_base); 89 struct sbiret sbi_send_ipi_cpu(int cpu); 90 struct sbiret sbi_send_ipi_cpumask(const cpumask_t *mask); 91 struct sbiret sbi_send_ipi_broadcast(void); 92 struct sbiret sbi_set_timer(unsigned long stime_value); 93 long sbi_probe(int ext); 94 95 #endif /* !__ASSEMBLY__ */ 96 #endif /* _ASMRISCV_SBI_H_ */ 97