diff options
Diffstat (limited to 'arch/arm/include/uapi/asm/kvm.h')
-rw-r--r-- | arch/arm/include/uapi/asm/kvm.h | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/arch/arm/include/uapi/asm/kvm.h b/arch/arm/include/uapi/asm/kvm.h index c498b60c0505..ef0c8785ba16 100644 --- a/arch/arm/include/uapi/asm/kvm.h +++ b/arch/arm/include/uapi/asm/kvm.h | |||
@@ -119,6 +119,26 @@ struct kvm_arch_memory_slot { | |||
119 | #define KVM_REG_ARM_32_CRN_MASK 0x0000000000007800 | 119 | #define KVM_REG_ARM_32_CRN_MASK 0x0000000000007800 |
120 | #define KVM_REG_ARM_32_CRN_SHIFT 11 | 120 | #define KVM_REG_ARM_32_CRN_SHIFT 11 |
121 | 121 | ||
122 | #define ARM_CP15_REG_SHIFT_MASK(x,n) \ | ||
123 | (((x) << KVM_REG_ARM_ ## n ## _SHIFT) & KVM_REG_ARM_ ## n ## _MASK) | ||
124 | |||
125 | #define __ARM_CP15_REG(op1,crn,crm,op2) \ | ||
126 | (KVM_REG_ARM | (15 << KVM_REG_ARM_COPROC_SHIFT) | \ | ||
127 | ARM_CP15_REG_SHIFT_MASK(op1, OPC1) | \ | ||
128 | ARM_CP15_REG_SHIFT_MASK(crn, 32_CRN) | \ | ||
129 | ARM_CP15_REG_SHIFT_MASK(crm, CRM) | \ | ||
130 | ARM_CP15_REG_SHIFT_MASK(op2, 32_OPC2)) | ||
131 | |||
132 | #define ARM_CP15_REG32(...) (__ARM_CP15_REG(__VA_ARGS__) | KVM_REG_SIZE_U32) | ||
133 | |||
134 | #define __ARM_CP15_REG64(op1,crm) \ | ||
135 | (__ARM_CP15_REG(op1, 0, crm, 0) | KVM_REG_SIZE_U64) | ||
136 | #define ARM_CP15_REG64(...) __ARM_CP15_REG64(__VA_ARGS__) | ||
137 | |||
138 | #define KVM_REG_ARM_TIMER_CTL ARM_CP15_REG32(0, 14, 3, 1) | ||
139 | #define KVM_REG_ARM_TIMER_CNT ARM_CP15_REG64(1, 14) | ||
140 | #define KVM_REG_ARM_TIMER_CVAL ARM_CP15_REG64(3, 14) | ||
141 | |||
122 | /* Normal registers are mapped as coprocessor 16. */ | 142 | /* Normal registers are mapped as coprocessor 16. */ |
123 | #define KVM_REG_ARM_CORE (0x0010 << KVM_REG_ARM_COPROC_SHIFT) | 143 | #define KVM_REG_ARM_CORE (0x0010 << KVM_REG_ARM_COPROC_SHIFT) |
124 | #define KVM_REG_ARM_CORE_REG(name) (offsetof(struct kvm_regs, name) / 4) | 144 | #define KVM_REG_ARM_CORE_REG(name) (offsetof(struct kvm_regs, name) / 4) |
@@ -143,6 +163,14 @@ struct kvm_arch_memory_slot { | |||
143 | #define KVM_REG_ARM_VFP_FPINST 0x1009 | 163 | #define KVM_REG_ARM_VFP_FPINST 0x1009 |
144 | #define KVM_REG_ARM_VFP_FPINST2 0x100A | 164 | #define KVM_REG_ARM_VFP_FPINST2 0x100A |
145 | 165 | ||
166 | /* Device Control API: ARM VGIC */ | ||
167 | #define KVM_DEV_ARM_VGIC_GRP_ADDR 0 | ||
168 | #define KVM_DEV_ARM_VGIC_GRP_DIST_REGS 1 | ||
169 | #define KVM_DEV_ARM_VGIC_GRP_CPU_REGS 2 | ||
170 | #define KVM_DEV_ARM_VGIC_CPUID_SHIFT 32 | ||
171 | #define KVM_DEV_ARM_VGIC_CPUID_MASK (0xffULL << KVM_DEV_ARM_VGIC_CPUID_SHIFT) | ||
172 | #define KVM_DEV_ARM_VGIC_OFFSET_SHIFT 0 | ||
173 | #define KVM_DEV_ARM_VGIC_OFFSET_MASK (0xffffffffULL << KVM_DEV_ARM_VGIC_OFFSET_SHIFT) | ||
146 | 174 | ||
147 | /* KVM_IRQ_LINE irq field index values */ | 175 | /* KVM_IRQ_LINE irq field index values */ |
148 | #define KVM_ARM_IRQ_TYPE_SHIFT 24 | 176 | #define KVM_ARM_IRQ_TYPE_SHIFT 24 |