diff options
Diffstat (limited to 'arch/x86_64')
-rw-r--r-- | arch/x86_64/kernel/verify_cpu.S | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/arch/x86_64/kernel/verify_cpu.S b/arch/x86_64/kernel/verify_cpu.S index 72edabd2ef9a..e035f5948199 100644 --- a/arch/x86_64/kernel/verify_cpu.S +++ b/arch/x86_64/kernel/verify_cpu.S | |||
@@ -30,18 +30,27 @@ | |||
30 | * appropriately. Either display a message or halt. | 30 | * appropriately. Either display a message or halt. |
31 | */ | 31 | */ |
32 | 32 | ||
33 | verify_cpu: | 33 | #include <asm/cpufeature.h> |
34 | 34 | ||
35 | verify_cpu: | ||
35 | pushfl # Save caller passed flags | 36 | pushfl # Save caller passed flags |
36 | pushl $0 # Kill any dangerous flags | 37 | pushl $0 # Kill any dangerous flags |
37 | popfl | 38 | popfl |
38 | 39 | ||
39 | /* minimum CPUID flags for x86-64 */ | 40 | /* minimum CPUID flags for x86-64 as defined by AMD */ |
40 | /* see http://www.x86-64.org/lists/discuss/msg02971.html */ | 41 | #define M(x) (1<<(x)) |
41 | #define SSE_MASK ((1<<25)|(1<<26)) | 42 | #define M2(a,b) M(a)|M(b) |
42 | #define REQUIRED_MASK1 ((1<<0)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<8)|\ | 43 | #define M4(a,b,c,d) M(a)|M(b)|M(c)|M(d) |
43 | (1<<13)|(1<<15)|(1<<24)) | 44 | |
44 | #define REQUIRED_MASK2 (1<<29) | 45 | #define SSE_MASK \ |
46 | (M2(X86_FEATURE_XMM,X86_FEATURE_XMM2)) | ||
47 | #define REQUIRED_MASK1 \ | ||
48 | (M4(X86_FEATURE_FPU,X86_FEATURE_PSE,X86_FEATURE_TSC,X86_FEATURE_MSR)|\ | ||
49 | M4(X86_FEATURE_PAE,X86_FEATURE_CX8,X86_FEATURE_PGE,X86_FEATURE_CMOV)|\ | ||
50 | M(X86_FEATURE_FXSR)) | ||
51 | #define REQUIRED_MASK2 \ | ||
52 | (M(X86_FEATURE_LM - 32)) | ||
53 | |||
45 | pushfl # standard way to check for cpuid | 54 | pushfl # standard way to check for cpuid |
46 | popl %eax | 55 | popl %eax |
47 | movl %eax,%ebx | 56 | movl %eax,%ebx |