1 /* SPDX-License-Identifier: BSD-2-Clause */ 2 /* 3 * Copyright 2022, 2025 NXP 4 */ 5 6 #ifndef __SBI_H 7 #define __SBI_H 8 9 #if defined(CFG_RISCV_SBI) 10 11 /* SBI return error codes */ 12 #define SBI_SUCCESS 0 13 #define SBI_ERR_FAILURE -1 14 #define SBI_ERR_NOT_SUPPORTED -2 15 #define SBI_ERR_INVALID_PARAM -3 16 #define SBI_ERR_DENIED -4 17 #define SBI_ERR_INVALID_ADDRESS -5 18 #define SBI_ERR_ALREADY_AVAILABLE -6 19 #define SBI_ERR_ALREADY_STARTED -7 20 #define SBI_ERR_ALREADY_STOPPED -8 21 #define SBI_ERR_NO_SHMEM -9 22 #define SBI_ERR_INVALID_STATE -10 23 #define SBI_ERR_BAD_RANGE -11 24 #define SBI_ERR_TIMEOUT -12 25 #define SBI_ERR_IO -13 26 #define SBI_ERR_DENIED_LOCKED -14 27 28 #define SBI_LAST_ERR SBI_ERR_DENIED_LOCKED 29 30 /* SBI Extension IDs */ 31 #define SBI_EXT_0_1_CONSOLE_PUTCHAR 0x01 32 #define SBI_EXT_BASE 0x10 33 #define SBI_EXT_HSM 0x48534D 34 #define SBI_EXT_DBCN 0x4442434E 35 #define SBI_EXT_TEE 0x544545 36 37 #ifndef __ASSEMBLER__ 38 39 /* SBI function IDs for Base extension */ 40 enum sbi_ext_base_fid { 41 SBI_EXT_BASE_GET_SPEC_VERSION = 0, 42 SBI_EXT_BASE_GET_IMP_ID, 43 SBI_EXT_BASE_GET_IMP_VERSION, 44 SBI_EXT_BASE_PROBE_EXT, 45 SBI_EXT_BASE_GET_MVENDORID, 46 SBI_EXT_BASE_GET_MARCHID, 47 SBI_EXT_BASE_GET_MIMPID, 48 }; 49 50 /* SBI function IDs for HSM extension */ 51 enum sbi_ext_hsm_fid { 52 SBI_EXT_HSM_HART_START = 0, 53 SBI_EXT_HSM_HART_STOP, 54 SBI_EXT_HSM_HART_GET_STATUS, 55 SBI_EXT_HSM_HART_SUSPEND, 56 }; 57 58 /* SBI function IDs for Debug Console extension */ 59 enum sbi_ext_dbcn_fid { 60 SBI_EXT_DBCN_CONSOLE_WRITE = 0, 61 SBI_EXT_DBCN_CONSOLE_READ = 1, 62 SBI_EXT_DBCN_CONSOLE_WRITE_BYTE = 2, 63 }; 64 65 enum sbi_hsm_hart_state { 66 SBI_HSM_STATE_STARTED = 0, 67 SBI_HSM_STATE_STOPPED, 68 SBI_HSM_STATE_START_PENDING, 69 SBI_HSM_STATE_STOP_PENDING, 70 SBI_HSM_STATE_SUSPENDED, 71 SBI_HSM_STATE_SUSPEND_PENDING, 72 SBI_HSM_STATE_RESUME_PENDING, 73 }; 74 75 #include <compiler.h> 76 #include <encoding.h> 77 #include <stdint.h> 78 #include <sys/cdefs.h> 79 #include <types_ext.h> 80 #include <util.h> 81 82 int sbi_probe_extension(int extid); 83 void sbi_console_putchar(int ch); 84 int sbi_dbcn_write_byte(unsigned char ch); 85 int sbi_hsm_hart_start(uint32_t hartid, paddr_t start_addr, unsigned long arg); 86 int sbi_hsm_hart_get_status(uint32_t hartid, enum sbi_hsm_hart_state *status); 87 88 #endif /*__ASSEMBLER__*/ 89 #endif /*defined(CFG_RISCV_SBI)*/ 90 #endif /*__SBI_H*/ 91