On 27 February 2014 12:21, Pranavkumar Sawargaonkar <pranavkumar@xxxxxxxxxx> wrote: > Syncup KVM related linux headers from v3.14-rc3. > > Signed-off-by: Pranavkumar Sawargaonkar <pranavkumar@xxxxxxxxxx> > Signed-off-by: Anup Patel <anup.patel@xxxxxxxxxx> > --- > linux-headers/asm-arm/kvm.h | 63 ++++++++++++++++++++++++++++++++++++++- > linux-headers/asm-arm64/kvm.h | 65 +++++++++++++++++++++++++++++++++++++++-- > linux-headers/linux/kvm.h | 10 +++++++ > 3 files changed, 135 insertions(+), 3 deletions(-) > > diff --git a/linux-headers/asm-arm/kvm.h b/linux-headers/asm-arm/kvm.h > index c498b60..1c5acfe 100644 > --- a/linux-headers/asm-arm/kvm.h > +++ b/linux-headers/asm-arm/kvm.h > @@ -83,6 +83,7 @@ struct kvm_regs { > #define KVM_VGIC_V2_CPU_SIZE 0x2000 > > #define KVM_ARM_VCPU_POWER_OFF 0 /* CPU is started in OFF state */ > +#define KVM_ARM_VCPU_PSCI_0_2 1 /* CPU uses PSCI v0.2 */ > > struct kvm_vcpu_init { > __u32 target; > @@ -119,6 +120,26 @@ struct kvm_arch_memory_slot { > #define KVM_REG_ARM_32_CRN_MASK 0x0000000000007800 > #define KVM_REG_ARM_32_CRN_SHIFT 11 > > +#define ARM_CP15_REG_SHIFT_MASK(x,n) \ > + (((x) << KVM_REG_ARM_ ## n ## _SHIFT) & KVM_REG_ARM_ ## n ## _MASK) > + > +#define __ARM_CP15_REG(op1,crn,crm,op2) \ > + (KVM_REG_ARM | (15 << KVM_REG_ARM_COPROC_SHIFT) | \ > + ARM_CP15_REG_SHIFT_MASK(op1, OPC1) | \ > + ARM_CP15_REG_SHIFT_MASK(crn, 32_CRN) | \ > + ARM_CP15_REG_SHIFT_MASK(crm, CRM) | \ > + ARM_CP15_REG_SHIFT_MASK(op2, 32_OPC2)) > + > +#define ARM_CP15_REG32(...) (__ARM_CP15_REG(__VA_ARGS__) | KVM_REG_SIZE_U32) > + > +#define __ARM_CP15_REG64(op1,crm) \ > + (__ARM_CP15_REG(op1, 0, crm, 0) | KVM_REG_SIZE_U64) > +#define ARM_CP15_REG64(...) __ARM_CP15_REG64(__VA_ARGS__) > + > +#define KVM_REG_ARM_TIMER_CTL ARM_CP15_REG32(0, 14, 3, 1) > +#define KVM_REG_ARM_TIMER_CNT ARM_CP15_REG64(1, 14) > +#define KVM_REG_ARM_TIMER_CVAL ARM_CP15_REG64(3, 14) > + > /* Normal registers are mapped as coprocessor 16. */ > #define KVM_REG_ARM_CORE (0x0010 << KVM_REG_ARM_COPROC_SHIFT) > #define KVM_REG_ARM_CORE_REG(name) (offsetof(struct kvm_regs, name) / 4) > @@ -143,6 +164,14 @@ struct kvm_arch_memory_slot { > #define KVM_REG_ARM_VFP_FPINST 0x1009 > #define KVM_REG_ARM_VFP_FPINST2 0x100A > > +/* Device Control API: ARM VGIC */ > +#define KVM_DEV_ARM_VGIC_GRP_ADDR 0 > +#define KVM_DEV_ARM_VGIC_GRP_DIST_REGS 1 > +#define KVM_DEV_ARM_VGIC_GRP_CPU_REGS 2 > +#define KVM_DEV_ARM_VGIC_CPUID_SHIFT 32 > +#define KVM_DEV_ARM_VGIC_CPUID_MASK (0xffULL << KVM_DEV_ARM_VGIC_CPUID_SHIFT) > +#define KVM_DEV_ARM_VGIC_OFFSET_SHIFT 0 > +#define KVM_DEV_ARM_VGIC_OFFSET_MASK (0xffffffffULL << KVM_DEV_ARM_VGIC_OFFSET_SHIFT) > > /* KVM_IRQ_LINE irq field index values */ > #define KVM_ARM_IRQ_TYPE_SHIFT 24 > @@ -164,7 +193,7 @@ struct kvm_arch_memory_slot { > /* Highest supported SPI, from VGIC_NR_IRQS */ > #define KVM_ARM_IRQ_GIC_MAX 127 > > -/* PSCI interface */ > +/* PSCI v0.1 interface */ > #define KVM_PSCI_FN_BASE 0x95c1ba5e > #define KVM_PSCI_FN(n) (KVM_PSCI_FN_BASE + (n)) > > @@ -173,9 +202,41 @@ struct kvm_arch_memory_slot { > #define KVM_PSCI_FN_CPU_ON KVM_PSCI_FN(2) > #define KVM_PSCI_FN_MIGRATE KVM_PSCI_FN(3) > > +/* PSCI v0.2 interface */ > +#define KVM_PSCI_0_2_FN_BASE 0x84000000 > +#define KVM_PSCI_0_2_FN(n) (KVM_PSCI_0_2_FN_BASE + (n)) > +#define KVM_PSCI_0_2_FN64_BASE 0xC4000000 > +#define KVM_PSCI_0_2_FN64(n) (KVM_PSCI_0_2_FN64_BASE + (n)) > + > +#define KVM_PSCI_0_2_FN_PSCI_VERSION KVM_PSCI_0_2_FN(0) > +#define KVM_PSCI_0_2_FN_CPU_SUSPEND KVM_PSCI_0_2_FN(1) > +#define KVM_PSCI_0_2_FN_CPU_OFF KVM_PSCI_0_2_FN(2) > +#define KVM_PSCI_0_2_FN_CPU_ON KVM_PSCI_0_2_FN(3) > +#define KVM_PSCI_0_2_FN_AFFINITY_INFO KVM_PSCI_0_2_FN(4) > +#define KVM_PSCI_0_2_FN_MIGRATE KVM_PSCI_0_2_FN(5) > +#define KVM_PSCI_0_2_FN_MIGRATE_INFO_TYPE \ > + KVM_PSCI_0_2_FN(6) > +#define KVM_PSCI_0_2_FN_MIGRATE_INFO_UP_CPU \ > + KVM_PSCI_0_2_FN(7) > +#define KVM_PSCI_0_2_FN_SYSTEM_OFF KVM_PSCI_0_2_FN(8) > +#define KVM_PSCI_0_2_FN_SYSTEM_RESET KVM_PSCI_0_2_FN(9) > + > +#define KVM_PSCI_0_2_FN64_CPU_SUSPEND KVM_PSCI_0_2_FN64(1) > +#define KVM_PSCI_0_2_FN64_CPU_ON KVM_PSCI_0_2_FN64(3) > +#define KVM_PSCI_0_2_FN64_AFFINITY_INFO KVM_PSCI_0_2_FN64(4) > +#define KVM_PSCI_0_2_FN64_MIGRATE KVM_PSCI_0_2_FN64(5) > +#define KVM_PSCI_0_2_FN64_MIGRATE_INFO_UP_CPU \ > + KVM_PSCI_0_2_FN64(7) > + > +/* PSCI return values */ > #define KVM_PSCI_RET_SUCCESS 0 > #define KVM_PSCI_RET_NI ((unsigned long)-1) > #define KVM_PSCI_RET_INVAL ((unsigned long)-2) > #define KVM_PSCI_RET_DENIED ((unsigned long)-3) > +#define KVM_PSCI_RET_ALREADY_ON ((unsigned long)-4) > +#define KVM_PSCI_RET_ON_PENDING ((unsigned long)-5) > +#define KVM_PSCI_RET_INTERNAL_FAILURE ((unsigned long)-6) > +#define KVM_PSCI_RET_NOT_PRESENT ((unsigned long)-7) > +#define KVM_PSCI_RET_DISABLED ((unsigned long)-8) > > #endif /* __ARM_KVM_H__ */ > diff --git a/linux-headers/asm-arm64/kvm.h b/linux-headers/asm-arm64/kvm.h > index 5031f42..cadc318 100644 > --- a/linux-headers/asm-arm64/kvm.h > +++ b/linux-headers/asm-arm64/kvm.h > @@ -55,8 +55,9 @@ struct kvm_regs { > #define KVM_ARM_TARGET_AEM_V8 0 > #define KVM_ARM_TARGET_FOUNDATION_V8 1 > #define KVM_ARM_TARGET_CORTEX_A57 2 > +#define KVM_ARM_TARGET_XGENE_POTENZA 3 > > -#define KVM_ARM_NUM_TARGETS 3 > +#define KVM_ARM_NUM_TARGETS 4 > > /* KVM_ARM_SET_DEVICE_ADDR ioctl id encoding */ > #define KVM_ARM_DEVICE_TYPE_SHIFT 0 > @@ -76,6 +77,7 @@ struct kvm_regs { > > #define KVM_ARM_VCPU_POWER_OFF 0 /* CPU is started in OFF state */ > #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 */ > > struct kvm_vcpu_init { > __u32 target; > @@ -129,6 +131,33 @@ struct kvm_arch_memory_slot { > #define KVM_REG_ARM64_SYSREG_OP2_MASK 0x0000000000000007 > #define KVM_REG_ARM64_SYSREG_OP2_SHIFT 0 > > +#define ARM64_SYS_REG_SHIFT_MASK(x,n) \ > + (((x) << KVM_REG_ARM64_SYSREG_ ## n ## _SHIFT) & \ > + KVM_REG_ARM64_SYSREG_ ## n ## _MASK) > + > +#define __ARM64_SYS_REG(op0,op1,crn,crm,op2) \ > + (KVM_REG_ARM64 | KVM_REG_ARM64_SYSREG | \ > + ARM64_SYS_REG_SHIFT_MASK(op0, OP0) | \ > + ARM64_SYS_REG_SHIFT_MASK(op1, OP1) | \ > + ARM64_SYS_REG_SHIFT_MASK(crn, CRN) | \ > + ARM64_SYS_REG_SHIFT_MASK(crm, CRM) | \ > + ARM64_SYS_REG_SHIFT_MASK(op2, OP2)) > + > +#define ARM64_SYS_REG(...) (__ARM64_SYS_REG(__VA_ARGS__) | KVM_REG_SIZE_U64) > + > +#define KVM_REG_ARM_TIMER_CTL ARM64_SYS_REG(3, 3, 14, 3, 1) > +#define KVM_REG_ARM_TIMER_CNT ARM64_SYS_REG(3, 3, 14, 3, 2) > +#define KVM_REG_ARM_TIMER_CVAL ARM64_SYS_REG(3, 3, 14, 0, 2) > + > +/* Device Control API: ARM VGIC */ > +#define KVM_DEV_ARM_VGIC_GRP_ADDR 0 > +#define KVM_DEV_ARM_VGIC_GRP_DIST_REGS 1 > +#define KVM_DEV_ARM_VGIC_GRP_CPU_REGS 2 > +#define KVM_DEV_ARM_VGIC_CPUID_SHIFT 32 > +#define KVM_DEV_ARM_VGIC_CPUID_MASK (0xffULL << KVM_DEV_ARM_VGIC_CPUID_SHIFT) > +#define KVM_DEV_ARM_VGIC_OFFSET_SHIFT 0 > +#define KVM_DEV_ARM_VGIC_OFFSET_MASK (0xffffffffULL << KVM_DEV_ARM_VGIC_OFFSET_SHIFT) > + > /* KVM_IRQ_LINE irq field index values */ > #define KVM_ARM_IRQ_TYPE_SHIFT 24 > #define KVM_ARM_IRQ_TYPE_MASK 0xff > @@ -149,7 +178,7 @@ struct kvm_arch_memory_slot { > /* Highest supported SPI, from VGIC_NR_IRQS */ > #define KVM_ARM_IRQ_GIC_MAX 127 > > -/* PSCI interface */ > +/* PSCI v0.1 interface */ > #define KVM_PSCI_FN_BASE 0x95c1ba5e > #define KVM_PSCI_FN(n) (KVM_PSCI_FN_BASE + (n)) > > @@ -158,10 +187,42 @@ struct kvm_arch_memory_slot { > #define KVM_PSCI_FN_CPU_ON KVM_PSCI_FN(2) > #define KVM_PSCI_FN_MIGRATE KVM_PSCI_FN(3) > > +/* PSCI v0.2 interface */ > +#define KVM_PSCI_0_2_FN_BASE 0x84000000 > +#define KVM_PSCI_0_2_FN(n) (KVM_PSCI_0_2_FN_BASE + (n)) > +#define KVM_PSCI_0_2_FN64_BASE 0xC4000000 > +#define KVM_PSCI_0_2_FN64(n) (KVM_PSCI_0_2_FN64_BASE + (n)) > + > +#define KVM_PSCI_0_2_FN_PSCI_VERSION KVM_PSCI_0_2_FN(0) > +#define KVM_PSCI_0_2_FN_CPU_SUSPEND KVM_PSCI_0_2_FN(1) > +#define KVM_PSCI_0_2_FN_CPU_OFF KVM_PSCI_0_2_FN(2) > +#define KVM_PSCI_0_2_FN_CPU_ON KVM_PSCI_0_2_FN(3) > +#define KVM_PSCI_0_2_FN_AFFINITY_INFO KVM_PSCI_0_2_FN(4) > +#define KVM_PSCI_0_2_FN_MIGRATE KVM_PSCI_0_2_FN(5) > +#define KVM_PSCI_0_2_FN_MIGRATE_INFO_TYPE \ > + KVM_PSCI_0_2_FN(6) > +#define KVM_PSCI_0_2_FN_MIGRATE_INFO_UP_CPU \ > + KVM_PSCI_0_2_FN(7) > +#define KVM_PSCI_0_2_FN_SYSTEM_OFF KVM_PSCI_0_2_FN(8) > +#define KVM_PSCI_0_2_FN_SYSTEM_RESET KVM_PSCI_0_2_FN(9) > + > +#define KVM_PSCI_0_2_FN64_CPU_SUSPEND KVM_PSCI_0_2_FN64(1) > +#define KVM_PSCI_0_2_FN64_CPU_ON KVM_PSCI_0_2_FN64(3) > +#define KVM_PSCI_0_2_FN64_AFFINITY_INFO KVM_PSCI_0_2_FN64(4) > +#define KVM_PSCI_0_2_FN64_MIGRATE KVM_PSCI_0_2_FN64(5) > +#define KVM_PSCI_0_2_FN64_MIGRATE_INFO_UP_CPU \ > + KVM_PSCI_0_2_FN64(7) > + > +/* PSCI return values */ > #define KVM_PSCI_RET_SUCCESS 0 > #define KVM_PSCI_RET_NI ((unsigned long)-1) > #define KVM_PSCI_RET_INVAL ((unsigned long)-2) > #define KVM_PSCI_RET_DENIED ((unsigned long)-3) > +#define KVM_PSCI_RET_ALREADY_ON ((unsigned long)-4) > +#define KVM_PSCI_RET_ON_PENDING ((unsigned long)-5) > +#define KVM_PSCI_RET_INTERNAL_FAILURE ((unsigned long)-6) > +#define KVM_PSCI_RET_NOT_PRESENT ((unsigned long)-7) > +#define KVM_PSCI_RET_DISABLED ((unsigned long)-8) > > #endif > > diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h > index 999fb13..d8dd28b 100644 > --- a/linux-headers/linux/kvm.h > +++ b/linux-headers/linux/kvm.h > @@ -171,6 +171,7 @@ struct kvm_pit_config { > #define KVM_EXIT_WATCHDOG 21 > #define KVM_EXIT_S390_TSCH 22 > #define KVM_EXIT_EPR 23 > +#define KVM_EXIT_SYSTEM_EVENT 24 > > /* For KVM_EXIT_INTERNAL_ERROR */ > /* Emulate instruction failed. */ > @@ -301,6 +302,13 @@ struct kvm_run { > struct { > __u32 epr; > } epr; > + /* KVM_EXIT_SYSTEM_EVENT */ > + struct { > +#define KVM_SYSTEM_EVENT_SHUTDOWN 1 > +#define KVM_SYSTEM_EVENT_RESET 2 > + __u32 type; > + __u64 flags; > + } system_event; > /* Fix the size of the union. */ > char padding[256]; > }; > @@ -675,6 +683,7 @@ struct kvm_ppc_smmu_info { > #define KVM_CAP_SPAPR_MULTITCE 94 > #define KVM_CAP_EXT_EMUL_CPUID 95 > #define KVM_CAP_HYPERV_TIME 96 > +#define KVM_CAP_ARM_PSCI_0_2 97 > > #ifdef KVM_CAP_IRQ_ROUTING > > @@ -854,6 +863,7 @@ struct kvm_device_attr { > #define KVM_DEV_VFIO_GROUP 1 > #define KVM_DEV_VFIO_GROUP_ADD 1 > #define KVM_DEV_VFIO_GROUP_DEL 2 > +#define KVM_DEV_TYPE_ARM_VGIC_V2 5 > > /* > * ioctls for VM fds > -- > 1.7.9.5 > Sorry for mentioning wrong qemu devel mail id in my previous mail. Correcting correct qemu-devel id and re-sending. Thanks, Pranav _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm