1 #ifndef KVM__CPUFEATURE_H 2 #define KVM__CPUFEATURE_H 3 4 #define CPUID_VENDOR_INTEL_1 0x756e6547 /* "Genu" */ 5 #define CPUID_VENDOR_INTEL_2 0x49656e69 /* "ineI" */ 6 #define CPUID_VENDOR_INTEL_3 0x6c65746e /* "ntel" */ 7 8 #define CPUID_VENDOR_AMD_1 0x68747541 /* "Auth" */ 9 #define CPUID_VENDOR_AMD_2 0x69746e65 /* "enti" */ 10 #define CPUID_VENDOR_AMD_3 0x444d4163 /* "cAMD" */ 11 12 /* 13 * CPUID flags we need to deal with 14 */ 15 #define KVM__X86_FEATURE_VMX 5 /* Hardware virtualization */ 16 #define KVM__X86_FEATURE_SVM 2 /* Secure virtual machine */ 17 #define KVM__X86_FEATURE_XSAVE 26 /* XSAVE/XRSTOR/XSETBV/XGETBV */ 18 19 #define cpu_feature_disable(reg, feature) \ 20 ((reg) & ~(1 << (feature))) 21 #define cpu_feature_enable(reg, feature) \ 22 ((reg) | (1 << (feature))) 23 24 struct cpuid_regs { 25 u32 eax; 26 u32 ebx; 27 u32 ecx; 28 u32 edx; 29 }; 30 host_cpuid(struct cpuid_regs * regs)31static inline void host_cpuid(struct cpuid_regs *regs) 32 { 33 asm volatile("cpuid" 34 : "=a" (regs->eax), 35 "=b" (regs->ebx), 36 "=c" (regs->ecx), 37 "=d" (regs->edx) 38 : "0" (regs->eax), "2" (regs->ecx)); 39 } 40 41 #endif /* KVM__CPUFEATURE_H */ 42