2011-11-23 16:30:32 +02:00
# ifndef ARCH_X86_KVM_CPUID_H
# define ARCH_X86_KVM_CPUID_H
# include "x86.h"
void kvm_update_cpuid ( struct kvm_vcpu * vcpu ) ;
struct kvm_cpuid_entry2 * kvm_find_cpuid_entry ( struct kvm_vcpu * vcpu ,
u32 function , u32 index ) ;
int kvm_dev_ioctl_get_supported_cpuid ( struct kvm_cpuid2 * cpuid ,
struct kvm_cpuid_entry2 __user * entries ) ;
int kvm_vcpu_ioctl_set_cpuid ( struct kvm_vcpu * vcpu ,
struct kvm_cpuid * cpuid ,
struct kvm_cpuid_entry __user * entries ) ;
int kvm_vcpu_ioctl_set_cpuid2 ( struct kvm_vcpu * vcpu ,
struct kvm_cpuid2 * cpuid ,
struct kvm_cpuid_entry2 __user * entries ) ;
int kvm_vcpu_ioctl_get_cpuid2 ( struct kvm_vcpu * vcpu ,
struct kvm_cpuid2 * cpuid ,
struct kvm_cpuid_entry2 __user * entries ) ;
2012-06-07 14:07:48 +03:00
void kvm_cpuid ( struct kvm_vcpu * vcpu , u32 * eax , u32 * ebx , u32 * ecx , u32 * edx ) ;
2011-11-23 16:30:32 +02:00
static inline bool guest_cpuid_has_xsave ( struct kvm_vcpu * vcpu )
{
struct kvm_cpuid_entry2 * best ;
best = kvm_find_cpuid_entry ( vcpu , 1 , 0 ) ;
return best & & ( best - > ecx & bit ( X86_FEATURE_XSAVE ) ) ;
}
static inline bool guest_cpuid_has_smep ( struct kvm_vcpu * vcpu )
{
struct kvm_cpuid_entry2 * best ;
best = kvm_find_cpuid_entry ( vcpu , 7 , 0 ) ;
return best & & ( best - > ebx & bit ( X86_FEATURE_SMEP ) ) ;
}
static inline bool guest_cpuid_has_fsgsbase ( struct kvm_vcpu * vcpu )
{
struct kvm_cpuid_entry2 * best ;
best = kvm_find_cpuid_entry ( vcpu , 7 , 0 ) ;
return best & & ( best - > ebx & bit ( X86_FEATURE_FSGSBASE ) ) ;
}
2012-01-09 14:00:35 -05:00
static inline bool guest_cpuid_has_osvw ( struct kvm_vcpu * vcpu )
{
struct kvm_cpuid_entry2 * best ;
best = kvm_find_cpuid_entry ( vcpu , 0x80000001 , 0 ) ;
return best & & ( best - > ecx & bit ( X86_FEATURE_OSVW ) ) ;
}
2011-11-23 16:30:32 +02:00
# endif