diff options
Diffstat (limited to 'arch/riscv/include/uapi/asm/kvm.h')
| -rw-r--r-- | arch/riscv/include/uapi/asm/kvm.h | 53 | 
1 files changed, 52 insertions, 1 deletions
| diff --git a/arch/riscv/include/uapi/asm/kvm.h b/arch/riscv/include/uapi/asm/kvm.h index 92af6f3f057c..f92790c9481a 100644 --- a/arch/riscv/include/uapi/asm/kvm.h +++ b/arch/riscv/include/uapi/asm/kvm.h @@ -12,6 +12,7 @@  #ifndef __ASSEMBLY__  #include <linux/types.h> +#include <asm/bitsperlong.h>  #include <asm/ptrace.h>  #define __KVM_HAVE_READONLY_MEM @@ -52,6 +53,7 @@ struct kvm_riscv_config {  	unsigned long mvendorid;  	unsigned long marchid;  	unsigned long mimpid; +	unsigned long zicboz_block_size;  };  /* CORE registers for KVM_GET_ONE_REG and KVM_SET_ONE_REG */ @@ -64,7 +66,7 @@ struct kvm_riscv_core {  #define KVM_RISCV_MODE_S	1  #define KVM_RISCV_MODE_U	0 -/* CSR registers for KVM_GET_ONE_REG and KVM_SET_ONE_REG */ +/* General CSR registers for KVM_GET_ONE_REG and KVM_SET_ONE_REG */  struct kvm_riscv_csr {  	unsigned long sstatus;  	unsigned long sie; @@ -78,6 +80,17 @@ struct kvm_riscv_csr {  	unsigned long scounteren;  }; +/* AIA CSR registers for KVM_GET_ONE_REG and KVM_SET_ONE_REG */ +struct kvm_riscv_aia_csr { +	unsigned long siselect; +	unsigned long iprio1; +	unsigned long iprio2; +	unsigned long sieh; +	unsigned long siph; +	unsigned long iprio1h; +	unsigned long iprio2h; +}; +  /* TIMER registers for KVM_GET_ONE_REG and KVM_SET_ONE_REG */  struct kvm_riscv_timer {  	__u64 frequency; @@ -105,9 +118,29 @@ enum KVM_RISCV_ISA_EXT_ID {  	KVM_RISCV_ISA_EXT_SVINVAL,  	KVM_RISCV_ISA_EXT_ZIHINTPAUSE,  	KVM_RISCV_ISA_EXT_ZICBOM, +	KVM_RISCV_ISA_EXT_ZICBOZ, +	KVM_RISCV_ISA_EXT_ZBB, +	KVM_RISCV_ISA_EXT_SSAIA,  	KVM_RISCV_ISA_EXT_MAX,  }; +/* + * SBI extension IDs specific to KVM. This is not the same as the SBI + * extension IDs defined by the RISC-V SBI specification. + */ +enum KVM_RISCV_SBI_EXT_ID { +	KVM_RISCV_SBI_EXT_V01 = 0, +	KVM_RISCV_SBI_EXT_TIME, +	KVM_RISCV_SBI_EXT_IPI, +	KVM_RISCV_SBI_EXT_RFENCE, +	KVM_RISCV_SBI_EXT_SRST, +	KVM_RISCV_SBI_EXT_HSM, +	KVM_RISCV_SBI_EXT_PMU, +	KVM_RISCV_SBI_EXT_EXPERIMENTAL, +	KVM_RISCV_SBI_EXT_VENDOR, +	KVM_RISCV_SBI_EXT_MAX, +}; +  /* Possible states for kvm_riscv_timer */  #define KVM_RISCV_TIMER_STATE_OFF	0  #define KVM_RISCV_TIMER_STATE_ON	1 @@ -118,6 +151,8 @@ enum KVM_RISCV_ISA_EXT_ID {  /* If you need to interpret the index values, here is the key: */  #define KVM_REG_RISCV_TYPE_MASK		0x00000000FF000000  #define KVM_REG_RISCV_TYPE_SHIFT	24 +#define KVM_REG_RISCV_SUBTYPE_MASK	0x0000000000FF0000 +#define KVM_REG_RISCV_SUBTYPE_SHIFT	16  /* Config registers are mapped as type 1 */  #define KVM_REG_RISCV_CONFIG		(0x01 << KVM_REG_RISCV_TYPE_SHIFT) @@ -131,8 +166,12 @@ enum KVM_RISCV_ISA_EXT_ID {  /* Control and status registers are mapped as type 3 */  #define KVM_REG_RISCV_CSR		(0x03 << KVM_REG_RISCV_TYPE_SHIFT) +#define KVM_REG_RISCV_CSR_GENERAL	(0x0 << KVM_REG_RISCV_SUBTYPE_SHIFT) +#define KVM_REG_RISCV_CSR_AIA		(0x1 << KVM_REG_RISCV_SUBTYPE_SHIFT)  #define KVM_REG_RISCV_CSR_REG(name)	\  		(offsetof(struct kvm_riscv_csr, name) / sizeof(unsigned long)) +#define KVM_REG_RISCV_CSR_AIA_REG(name)	\ +	(offsetof(struct kvm_riscv_aia_csr, name) / sizeof(unsigned long))  /* Timer registers are mapped as type 4 */  #define KVM_REG_RISCV_TIMER		(0x04 << KVM_REG_RISCV_TYPE_SHIFT) @@ -152,6 +191,18 @@ enum KVM_RISCV_ISA_EXT_ID {  /* ISA Extension registers are mapped as type 7 */  #define KVM_REG_RISCV_ISA_EXT		(0x07 << KVM_REG_RISCV_TYPE_SHIFT) +/* SBI extension registers are mapped as type 8 */ +#define KVM_REG_RISCV_SBI_EXT		(0x08 << KVM_REG_RISCV_TYPE_SHIFT) +#define KVM_REG_RISCV_SBI_SINGLE	(0x0 << KVM_REG_RISCV_SUBTYPE_SHIFT) +#define KVM_REG_RISCV_SBI_MULTI_EN	(0x1 << KVM_REG_RISCV_SUBTYPE_SHIFT) +#define KVM_REG_RISCV_SBI_MULTI_DIS	(0x2 << KVM_REG_RISCV_SUBTYPE_SHIFT) +#define KVM_REG_RISCV_SBI_MULTI_REG(__ext_id)	\ +		((__ext_id) / __BITS_PER_LONG) +#define KVM_REG_RISCV_SBI_MULTI_MASK(__ext_id)	\ +		(1UL << ((__ext_id) % __BITS_PER_LONG)) +#define KVM_REG_RISCV_SBI_MULTI_REG_LAST	\ +		KVM_REG_RISCV_SBI_MULTI_REG(KVM_RISCV_SBI_EXT_MAX - 1) +  #endif  #endif /* __LINUX_KVM_RISCV_H */ | 
