1f3ddb82dSVladimir Kondratyev /* Public domain. */ 2f3ddb82dSVladimir Kondratyev 3*307f78f3SVladimir Kondratyev #ifndef _LINUXKPI_ASM_CPUFEATURE_H 4*307f78f3SVladimir Kondratyev #define _LINUXKPI_ASM_CPUFEATURE_H 5f3ddb82dSVladimir Kondratyev 6f3ddb82dSVladimir Kondratyev #if defined(__amd64__) || defined(__i386__) 7f3ddb82dSVladimir Kondratyev 8f3ddb82dSVladimir Kondratyev #include <sys/types.h> 9f3ddb82dSVladimir Kondratyev #include <machine/md_var.h> 10f3ddb82dSVladimir Kondratyev 11f3ddb82dSVladimir Kondratyev #define X86_FEATURE_CLFLUSH 1 12f3ddb82dSVladimir Kondratyev #define X86_FEATURE_XMM4_1 2 13f3ddb82dSVladimir Kondratyev #define X86_FEATURE_PAT 3 14f3ddb82dSVladimir Kondratyev #define X86_FEATURE_HYPERVISOR 4 15f3ddb82dSVladimir Kondratyev 16f3ddb82dSVladimir Kondratyev static inline bool static_cpu_has(uint16_t f)17f3ddb82dSVladimir Kondratyevstatic_cpu_has(uint16_t f) 18f3ddb82dSVladimir Kondratyev { 19f3ddb82dSVladimir Kondratyev switch (f) { 20f3ddb82dSVladimir Kondratyev case X86_FEATURE_CLFLUSH: 21f3ddb82dSVladimir Kondratyev return ((cpu_feature & CPUID_CLFSH) != 0); 22f3ddb82dSVladimir Kondratyev case X86_FEATURE_XMM4_1: 23f3ddb82dSVladimir Kondratyev return ((cpu_feature2 & CPUID2_SSE41) != 0); 24f3ddb82dSVladimir Kondratyev case X86_FEATURE_PAT: 25f3ddb82dSVladimir Kondratyev return ((cpu_feature & CPUID_PAT) != 0); 26f3ddb82dSVladimir Kondratyev case X86_FEATURE_HYPERVISOR: 27f3ddb82dSVladimir Kondratyev return ((cpu_feature2 & CPUID2_HV) != 0); 28f3ddb82dSVladimir Kondratyev default: 29f3ddb82dSVladimir Kondratyev return (false); 30f3ddb82dSVladimir Kondratyev } 31f3ddb82dSVladimir Kondratyev } 32f3ddb82dSVladimir Kondratyev 33f3ddb82dSVladimir Kondratyev #define boot_cpu_has(x) static_cpu_has(x) 34f3ddb82dSVladimir Kondratyev 35f3ddb82dSVladimir Kondratyev #endif 36f3ddb82dSVladimir Kondratyev 37f3ddb82dSVladimir Kondratyev #endif 38