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 149c92b28eSAndrew Jones 159c92b28eSAndrew Jones #ifndef __ASSEMBLY__ 169c92b28eSAndrew Jones 179ccb00e4SAndrew Jones enum sbi_ext_id { 189ccb00e4SAndrew Jones SBI_EXT_BASE = 0x10, 199c92b28eSAndrew Jones SBI_EXT_HSM = 0x48534d, 209ccb00e4SAndrew Jones SBI_EXT_SRST = 0x53525354, 219ccb00e4SAndrew Jones }; 229ccb00e4SAndrew Jones 239ccb00e4SAndrew Jones enum sbi_ext_base_fid { 249ccb00e4SAndrew Jones SBI_EXT_BASE_GET_SPEC_VERSION = 0, 259ccb00e4SAndrew Jones SBI_EXT_BASE_GET_IMP_ID, 269ccb00e4SAndrew Jones SBI_EXT_BASE_GET_IMP_VERSION, 279ccb00e4SAndrew Jones SBI_EXT_BASE_PROBE_EXT, 289ccb00e4SAndrew Jones SBI_EXT_BASE_GET_MVENDORID, 299ccb00e4SAndrew Jones SBI_EXT_BASE_GET_MARCHID, 309ccb00e4SAndrew Jones SBI_EXT_BASE_GET_MIMPID, 319ccb00e4SAndrew Jones }; 329ccb00e4SAndrew Jones 339c92b28eSAndrew Jones enum sbi_ext_hsm_fid { 349c92b28eSAndrew Jones SBI_EXT_HSM_HART_START = 0, 359c92b28eSAndrew Jones SBI_EXT_HSM_HART_STOP, 369c92b28eSAndrew Jones SBI_EXT_HSM_HART_STATUS, 379c92b28eSAndrew Jones SBI_EXT_HSM_HART_SUSPEND, 389c92b28eSAndrew Jones }; 399c92b28eSAndrew Jones 409ccb00e4SAndrew Jones struct sbiret { 419ccb00e4SAndrew Jones long error; 429ccb00e4SAndrew Jones long value; 439ccb00e4SAndrew Jones }; 449ccb00e4SAndrew Jones 459ccb00e4SAndrew Jones struct sbiret sbi_ecall(int ext, int fid, unsigned long arg0, 469ccb00e4SAndrew Jones unsigned long arg1, unsigned long arg2, 479ccb00e4SAndrew Jones unsigned long arg3, unsigned long arg4, 489ccb00e4SAndrew Jones unsigned long arg5); 499ccb00e4SAndrew Jones 509ccb00e4SAndrew Jones void sbi_shutdown(void); 519c92b28eSAndrew Jones struct sbiret sbi_hart_start(unsigned long hartid, unsigned long entry, unsigned long sp); 52*7040d2a9SJames Raphael Tiovalen long sbi_probe(int ext); 539ccb00e4SAndrew Jones 549c92b28eSAndrew Jones #endif /* !__ASSEMBLY__ */ 559ccb00e4SAndrew Jones #endif /* _ASMRISCV_SBI_H_ */ 56