xref: /kvmtool/x86/include/kvm/cpufeature.h (revision af7b08685968ff8f6ffdf5cac1ef067688bce8c6)
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)31 static 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