xref: /kvm-unit-tests/lib/riscv/asm/sbi.h (revision 9ccb00e4e5514d4dd5b279c8ec6a396875782a0b)
1*9ccb00e4SAndrew Jones /* SPDX-License-Identifier: GPL-2.0-only */
2*9ccb00e4SAndrew Jones #ifndef _ASMRISCV_SBI_H_
3*9ccb00e4SAndrew Jones #define _ASMRISCV_SBI_H_
4*9ccb00e4SAndrew Jones 
5*9ccb00e4SAndrew Jones enum sbi_ext_id {
6*9ccb00e4SAndrew Jones 	SBI_EXT_BASE = 0x10,
7*9ccb00e4SAndrew Jones 	SBI_EXT_SRST = 0x53525354,
8*9ccb00e4SAndrew Jones };
9*9ccb00e4SAndrew Jones 
10*9ccb00e4SAndrew Jones enum sbi_ext_base_fid {
11*9ccb00e4SAndrew Jones 	SBI_EXT_BASE_GET_SPEC_VERSION = 0,
12*9ccb00e4SAndrew Jones 	SBI_EXT_BASE_GET_IMP_ID,
13*9ccb00e4SAndrew Jones 	SBI_EXT_BASE_GET_IMP_VERSION,
14*9ccb00e4SAndrew Jones 	SBI_EXT_BASE_PROBE_EXT,
15*9ccb00e4SAndrew Jones 	SBI_EXT_BASE_GET_MVENDORID,
16*9ccb00e4SAndrew Jones 	SBI_EXT_BASE_GET_MARCHID,
17*9ccb00e4SAndrew Jones 	SBI_EXT_BASE_GET_MIMPID,
18*9ccb00e4SAndrew Jones };
19*9ccb00e4SAndrew Jones 
20*9ccb00e4SAndrew Jones struct sbiret {
21*9ccb00e4SAndrew Jones 	long error;
22*9ccb00e4SAndrew Jones 	long value;
23*9ccb00e4SAndrew Jones };
24*9ccb00e4SAndrew Jones 
25*9ccb00e4SAndrew Jones struct sbiret sbi_ecall(int ext, int fid, unsigned long arg0,
26*9ccb00e4SAndrew Jones 			unsigned long arg1, unsigned long arg2,
27*9ccb00e4SAndrew Jones 			unsigned long arg3, unsigned long arg4,
28*9ccb00e4SAndrew Jones 			unsigned long arg5);
29*9ccb00e4SAndrew Jones 
30*9ccb00e4SAndrew Jones void sbi_shutdown(void);
31*9ccb00e4SAndrew Jones 
32*9ccb00e4SAndrew Jones #endif /* _ASMRISCV_SBI_H_ */
33