@@ -35,6 +35,7 @@ enum sbi_ext_id {
35
35
SBI_EXT_DBCN = 0x4442434E ,
36
36
SBI_EXT_STA = 0x535441 ,
37
37
SBI_EXT_NACL = 0x4E41434C ,
38
+ SBI_EXT_FWFT = 0x46574654 ,
38
39
39
40
/* Experimentals extensions must lie within this range */
40
41
SBI_EXT_EXPERIMENTAL_START = 0x08000000 ,
@@ -402,6 +403,33 @@ enum sbi_ext_nacl_feature {
402
403
#define SBI_NACL_SHMEM_SRET_X (__i ) ((__riscv_xlen / 8) * (__i))
403
404
#define SBI_NACL_SHMEM_SRET_X_LAST 31
404
405
406
+ /* SBI function IDs for FW feature extension */
407
+ #define SBI_EXT_FWFT_SET 0x0
408
+ #define SBI_EXT_FWFT_GET 0x1
409
+
410
+ enum sbi_fwft_feature_t {
411
+ SBI_FWFT_MISALIGNED_EXC_DELEG = 0x0 ,
412
+ SBI_FWFT_LANDING_PAD = 0x1 ,
413
+ SBI_FWFT_SHADOW_STACK = 0x2 ,
414
+ SBI_FWFT_DOUBLE_TRAP = 0x3 ,
415
+ SBI_FWFT_PTE_AD_HW_UPDATING = 0x4 ,
416
+ SBI_FWFT_POINTER_MASKING_PMLEN = 0x5 ,
417
+ SBI_FWFT_LOCAL_RESERVED_START = 0x6 ,
418
+ SBI_FWFT_LOCAL_RESERVED_END = 0x3fffffff ,
419
+ SBI_FWFT_LOCAL_PLATFORM_START = 0x40000000 ,
420
+ SBI_FWFT_LOCAL_PLATFORM_END = 0x7fffffff ,
421
+
422
+ SBI_FWFT_GLOBAL_RESERVED_START = 0x80000000 ,
423
+ SBI_FWFT_GLOBAL_RESERVED_END = 0xbfffffff ,
424
+ SBI_FWFT_GLOBAL_PLATFORM_START = 0xc0000000 ,
425
+ SBI_FWFT_GLOBAL_PLATFORM_END = 0xffffffff ,
426
+ };
427
+
428
+ #define SBI_FWFT_PLATFORM_FEATURE_BIT BIT(30)
429
+ #define SBI_FWFT_GLOBAL_FEATURE_BIT BIT(31)
430
+
431
+ #define SBI_FWFT_SET_FLAG_LOCK BIT(0)
432
+
405
433
/* SBI spec version fields */
406
434
#define SBI_SPEC_VERSION_DEFAULT 0x1
407
435
#define SBI_SPEC_VERSION_MAJOR_SHIFT 24
@@ -419,6 +447,11 @@ enum sbi_ext_nacl_feature {
419
447
#define SBI_ERR_ALREADY_STARTED -7
420
448
#define SBI_ERR_ALREADY_STOPPED -8
421
449
#define SBI_ERR_NO_SHMEM -9
450
+ #define SBI_ERR_INVALID_STATE -10
451
+ #define SBI_ERR_BAD_RANGE -11
452
+ #define SBI_ERR_TIMEOUT -12
453
+ #define SBI_ERR_IO -13
454
+ #define SBI_ERR_DENIED_LOCKED -14
422
455
423
456
extern unsigned long sbi_spec_version ;
424
457
struct sbiret {
0 commit comments