diff options
Diffstat (limited to 'tools/arch/arm64/include/uapi/asm/kvm.h')
| -rw-r--r-- | tools/arch/arm64/include/uapi/asm/kvm.h | 43 | 
1 files changed, 43 insertions, 0 deletions
diff --git a/tools/arch/arm64/include/uapi/asm/kvm.h b/tools/arch/arm64/include/uapi/asm/kvm.h index 97c3478ee6e7..7b7ac0f6cec9 100644 --- a/tools/arch/arm64/include/uapi/asm/kvm.h +++ b/tools/arch/arm64/include/uapi/asm/kvm.h @@ -35,6 +35,7 @@  #include <linux/psci.h>  #include <linux/types.h>  #include <asm/ptrace.h> +#include <asm/sve_context.h>  #define __KVM_HAVE_GUEST_DEBUG  #define __KVM_HAVE_IRQ_LINE @@ -102,6 +103,9 @@ struct kvm_regs {  #define KVM_ARM_VCPU_EL1_32BIT		1 /* CPU running a 32bit VM */  #define KVM_ARM_VCPU_PSCI_0_2		2 /* CPU uses PSCI v0.2 */  #define KVM_ARM_VCPU_PMU_V3		3 /* Support guest PMUv3 */ +#define KVM_ARM_VCPU_SVE		4 /* enable SVE for this CPU */ +#define KVM_ARM_VCPU_PTRAUTH_ADDRESS	5 /* VCPU uses address authentication */ +#define KVM_ARM_VCPU_PTRAUTH_GENERIC	6 /* VCPU uses generic authentication */  struct kvm_vcpu_init {  	__u32 target; @@ -226,6 +230,45 @@ struct kvm_vcpu_events {  					 KVM_REG_ARM_FW | ((r) & 0xffff))  #define KVM_REG_ARM_PSCI_VERSION	KVM_REG_ARM_FW_REG(0) +/* SVE registers */ +#define KVM_REG_ARM64_SVE		(0x15 << KVM_REG_ARM_COPROC_SHIFT) + +/* Z- and P-regs occupy blocks at the following offsets within this range: */ +#define KVM_REG_ARM64_SVE_ZREG_BASE	0 +#define KVM_REG_ARM64_SVE_PREG_BASE	0x400 +#define KVM_REG_ARM64_SVE_FFR_BASE	0x600 + +#define KVM_ARM64_SVE_NUM_ZREGS		__SVE_NUM_ZREGS +#define KVM_ARM64_SVE_NUM_PREGS		__SVE_NUM_PREGS + +#define KVM_ARM64_SVE_MAX_SLICES	32 + +#define KVM_REG_ARM64_SVE_ZREG(n, i)					\ +	(KVM_REG_ARM64 | KVM_REG_ARM64_SVE | KVM_REG_ARM64_SVE_ZREG_BASE | \ +	 KVM_REG_SIZE_U2048 |						\ +	 (((n) & (KVM_ARM64_SVE_NUM_ZREGS - 1)) << 5) |			\ +	 ((i) & (KVM_ARM64_SVE_MAX_SLICES - 1))) + +#define KVM_REG_ARM64_SVE_PREG(n, i)					\ +	(KVM_REG_ARM64 | KVM_REG_ARM64_SVE | KVM_REG_ARM64_SVE_PREG_BASE | \ +	 KVM_REG_SIZE_U256 |						\ +	 (((n) & (KVM_ARM64_SVE_NUM_PREGS - 1)) << 5) |			\ +	 ((i) & (KVM_ARM64_SVE_MAX_SLICES - 1))) + +#define KVM_REG_ARM64_SVE_FFR(i)					\ +	(KVM_REG_ARM64 | KVM_REG_ARM64_SVE | KVM_REG_ARM64_SVE_FFR_BASE | \ +	 KVM_REG_SIZE_U256 |						\ +	 ((i) & (KVM_ARM64_SVE_MAX_SLICES - 1))) + +#define KVM_ARM64_SVE_VQ_MIN __SVE_VQ_MIN +#define KVM_ARM64_SVE_VQ_MAX __SVE_VQ_MAX + +/* Vector lengths pseudo-register: */ +#define KVM_REG_ARM64_SVE_VLS		(KVM_REG_ARM64 | KVM_REG_ARM64_SVE | \ +					 KVM_REG_SIZE_U512 | 0xffff) +#define KVM_ARM64_SVE_VLS_WORDS	\ +	((KVM_ARM64_SVE_VQ_MAX - KVM_ARM64_SVE_VQ_MIN) / 64 + 1) +  /* Device Control API: ARM VGIC */  #define KVM_DEV_ARM_VGIC_GRP_ADDR	0  #define KVM_DEV_ARM_VGIC_GRP_DIST_REGS	1  | 

