xref: /kvmtool/x86/include/kvm/cpufeature.h (revision af7b08685968ff8f6ffdf5cac1ef067688bce8c6)
1d8457847SCyrill Gorcunov #ifndef KVM__CPUFEATURE_H
2d8457847SCyrill Gorcunov #define KVM__CPUFEATURE_H
3d8457847SCyrill Gorcunov 
444677817SCyrill Gorcunov #define CPUID_VENDOR_INTEL_1 0x756e6547 /* "Genu" */
544677817SCyrill Gorcunov #define CPUID_VENDOR_INTEL_2 0x49656e69 /* "ineI" */
644677817SCyrill Gorcunov #define CPUID_VENDOR_INTEL_3 0x6c65746e /* "ntel" */
744677817SCyrill Gorcunov 
844677817SCyrill Gorcunov #define CPUID_VENDOR_AMD_1   0x68747541 /* "Auth" */
944677817SCyrill Gorcunov #define CPUID_VENDOR_AMD_2   0x69746e65 /* "enti" */
1044677817SCyrill Gorcunov #define CPUID_VENDOR_AMD_3   0x444d4163 /* "cAMD" */
1144677817SCyrill Gorcunov 
12d8457847SCyrill Gorcunov /*
13d8457847SCyrill Gorcunov  * CPUID flags we need to deal with
14d8457847SCyrill Gorcunov  */
15d8457847SCyrill Gorcunov #define KVM__X86_FEATURE_VMX		5	/* Hardware virtualization */
16ae87afbfSCyrill Gorcunov #define KVM__X86_FEATURE_SVM		2	/* Secure virtual machine */
17d8457847SCyrill Gorcunov #define KVM__X86_FEATURE_XSAVE		26	/* XSAVE/XRSTOR/XSETBV/XGETBV */
18d8457847SCyrill Gorcunov 
19d8457847SCyrill Gorcunov #define cpu_feature_disable(reg, feature)	\
20d8457847SCyrill Gorcunov 	((reg) & ~(1 << (feature)))
21d8457847SCyrill Gorcunov #define cpu_feature_enable(reg, feature)	\
22d8457847SCyrill Gorcunov 	((reg) |  (1 << (feature)))
23d8457847SCyrill Gorcunov 
24c78b8713SAsias He struct cpuid_regs {
25*3fdf659dSSasha Levin 	u32	eax;
26*3fdf659dSSasha Levin 	u32	ebx;
27*3fdf659dSSasha Levin 	u32	ecx;
28*3fdf659dSSasha Levin 	u32	edx;
29c78b8713SAsias He };
30c78b8713SAsias He 
host_cpuid(struct cpuid_regs * regs)31c78b8713SAsias He static inline void host_cpuid(struct cpuid_regs *regs)
32c78b8713SAsias He {
33c78b8713SAsias He 	asm volatile("cpuid"
34c78b8713SAsias He 		: "=a" (regs->eax),
35c78b8713SAsias He 		  "=b" (regs->ebx),
36c78b8713SAsias He 		  "=c" (regs->ecx),
37c78b8713SAsias He 		  "=d" (regs->edx)
38c78b8713SAsias He 		: "0" (regs->eax), "2" (regs->ecx));
39c78b8713SAsias He }
40c78b8713SAsias He 
41d8457847SCyrill Gorcunov #endif /* KVM__CPUFEATURE_H */
42