xref: /freebsd/sys/compat/linuxkpi/common/include/asm/cpufeature.h (revision 307f78f3ed90a4145eeb2c8cc79bc95b2666f57a)
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 Kondratyev static_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