diff options
Diffstat (limited to 'arch/x86/include/asm/cpufeature.h')
-rw-r--r-- | arch/x86/include/asm/cpufeature.h | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/arch/x86/include/asm/cpufeature.h b/arch/x86/include/asm/cpufeature.h index 93fe929d1cee..e99ac27f95b2 100644 --- a/arch/x86/include/asm/cpufeature.h +++ b/arch/x86/include/asm/cpufeature.h | |||
@@ -9,6 +9,7 @@ | |||
9 | #endif | 9 | #endif |
10 | 10 | ||
11 | #define NCAPINTS 10 /* N 32-bit words worth of info */ | 11 | #define NCAPINTS 10 /* N 32-bit words worth of info */ |
12 | #define NBUGINTS 1 /* N 32-bit bug flags */ | ||
12 | 13 | ||
13 | /* | 14 | /* |
14 | * Note: If the comment begins with a quoted string, that string is used | 15 | * Note: If the comment begins with a quoted string, that string is used |
@@ -100,6 +101,7 @@ | |||
100 | #define X86_FEATURE_AMD_DCM (3*32+27) /* multi-node processor */ | 101 | #define X86_FEATURE_AMD_DCM (3*32+27) /* multi-node processor */ |
101 | #define X86_FEATURE_APERFMPERF (3*32+28) /* APERFMPERF */ | 102 | #define X86_FEATURE_APERFMPERF (3*32+28) /* APERFMPERF */ |
102 | #define X86_FEATURE_EAGER_FPU (3*32+29) /* "eagerfpu" Non lazy FPU restore */ | 103 | #define X86_FEATURE_EAGER_FPU (3*32+29) /* "eagerfpu" Non lazy FPU restore */ |
104 | #define X86_FEATURE_NONSTOP_TSC_S3 (3*32+30) /* TSC doesn't stop in S3 state */ | ||
103 | 105 | ||
104 | /* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */ | 106 | /* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */ |
105 | #define X86_FEATURE_XMM3 (4*32+ 0) /* "pni" SSE-3 */ | 107 | #define X86_FEATURE_XMM3 (4*32+ 0) /* "pni" SSE-3 */ |
@@ -168,6 +170,7 @@ | |||
168 | #define X86_FEATURE_TOPOEXT (6*32+22) /* topology extensions CPUID leafs */ | 170 | #define X86_FEATURE_TOPOEXT (6*32+22) /* topology extensions CPUID leafs */ |
169 | #define X86_FEATURE_PERFCTR_CORE (6*32+23) /* core performance counter extensions */ | 171 | #define X86_FEATURE_PERFCTR_CORE (6*32+23) /* core performance counter extensions */ |
170 | #define X86_FEATURE_PERFCTR_NB (6*32+24) /* NB performance counter extensions */ | 172 | #define X86_FEATURE_PERFCTR_NB (6*32+24) /* NB performance counter extensions */ |
173 | #define X86_FEATURE_PERFCTR_L2 (6*32+28) /* L2 performance counter extensions */ | ||
171 | 174 | ||
172 | /* | 175 | /* |
173 | * Auxiliary flags: Linux defined - For features scattered in various | 176 | * Auxiliary flags: Linux defined - For features scattered in various |
@@ -182,6 +185,7 @@ | |||
182 | #define X86_FEATURE_PTS (7*32+ 6) /* Intel Package Thermal Status */ | 185 | #define X86_FEATURE_PTS (7*32+ 6) /* Intel Package Thermal Status */ |
183 | #define X86_FEATURE_DTHERM (7*32+ 7) /* Digital Thermal Sensor */ | 186 | #define X86_FEATURE_DTHERM (7*32+ 7) /* Digital Thermal Sensor */ |
184 | #define X86_FEATURE_HW_PSTATE (7*32+ 8) /* AMD HW-PState */ | 187 | #define X86_FEATURE_HW_PSTATE (7*32+ 8) /* AMD HW-PState */ |
188 | #define X86_FEATURE_PROC_FEEDBACK (7*32+ 9) /* AMD ProcFeedbackInterface */ | ||
185 | 189 | ||
186 | /* Virtualization flags: Linux defined, word 8 */ | 190 | /* Virtualization flags: Linux defined, word 8 */ |
187 | #define X86_FEATURE_TPR_SHADOW (8*32+ 0) /* Intel TPR Shadow */ | 191 | #define X86_FEATURE_TPR_SHADOW (8*32+ 0) /* Intel TPR Shadow */ |
@@ -216,6 +220,17 @@ | |||
216 | #define X86_FEATURE_ADX (9*32+19) /* The ADCX and ADOX instructions */ | 220 | #define X86_FEATURE_ADX (9*32+19) /* The ADCX and ADOX instructions */ |
217 | #define X86_FEATURE_SMAP (9*32+20) /* Supervisor Mode Access Prevention */ | 221 | #define X86_FEATURE_SMAP (9*32+20) /* Supervisor Mode Access Prevention */ |
218 | 222 | ||
223 | /* | ||
224 | * BUG word(s) | ||
225 | */ | ||
226 | #define X86_BUG(x) (NCAPINTS*32 + (x)) | ||
227 | |||
228 | #define X86_BUG_F00F X86_BUG(0) /* Intel F00F */ | ||
229 | #define X86_BUG_FDIV X86_BUG(1) /* FPU FDIV */ | ||
230 | #define X86_BUG_COMA X86_BUG(2) /* Cyrix 6x86 coma */ | ||
231 | #define X86_BUG_AMD_TLB_MMATCH X86_BUG(3) /* AMD Erratum 383 */ | ||
232 | #define X86_BUG_AMD_APIC_C1E X86_BUG(4) /* AMD Erratum 400 */ | ||
233 | |||
219 | #if defined(__KERNEL__) && !defined(__ASSEMBLY__) | 234 | #if defined(__KERNEL__) && !defined(__ASSEMBLY__) |
220 | 235 | ||
221 | #include <asm/asm.h> | 236 | #include <asm/asm.h> |
@@ -278,6 +293,7 @@ extern const char * const x86_power_flags[32]; | |||
278 | #define cpu_has_ssse3 boot_cpu_has(X86_FEATURE_SSSE3) | 293 | #define cpu_has_ssse3 boot_cpu_has(X86_FEATURE_SSSE3) |
279 | #define cpu_has_aes boot_cpu_has(X86_FEATURE_AES) | 294 | #define cpu_has_aes boot_cpu_has(X86_FEATURE_AES) |
280 | #define cpu_has_avx boot_cpu_has(X86_FEATURE_AVX) | 295 | #define cpu_has_avx boot_cpu_has(X86_FEATURE_AVX) |
296 | #define cpu_has_avx2 boot_cpu_has(X86_FEATURE_AVX2) | ||
281 | #define cpu_has_ht boot_cpu_has(X86_FEATURE_HT) | 297 | #define cpu_has_ht boot_cpu_has(X86_FEATURE_HT) |
282 | #define cpu_has_mp boot_cpu_has(X86_FEATURE_MP) | 298 | #define cpu_has_mp boot_cpu_has(X86_FEATURE_MP) |
283 | #define cpu_has_nx boot_cpu_has(X86_FEATURE_NX) | 299 | #define cpu_has_nx boot_cpu_has(X86_FEATURE_NX) |
@@ -311,6 +327,7 @@ extern const char * const x86_power_flags[32]; | |||
311 | #define cpu_has_pclmulqdq boot_cpu_has(X86_FEATURE_PCLMULQDQ) | 327 | #define cpu_has_pclmulqdq boot_cpu_has(X86_FEATURE_PCLMULQDQ) |
312 | #define cpu_has_perfctr_core boot_cpu_has(X86_FEATURE_PERFCTR_CORE) | 328 | #define cpu_has_perfctr_core boot_cpu_has(X86_FEATURE_PERFCTR_CORE) |
313 | #define cpu_has_perfctr_nb boot_cpu_has(X86_FEATURE_PERFCTR_NB) | 329 | #define cpu_has_perfctr_nb boot_cpu_has(X86_FEATURE_PERFCTR_NB) |
330 | #define cpu_has_perfctr_l2 boot_cpu_has(X86_FEATURE_PERFCTR_L2) | ||
314 | #define cpu_has_cx8 boot_cpu_has(X86_FEATURE_CX8) | 331 | #define cpu_has_cx8 boot_cpu_has(X86_FEATURE_CX8) |
315 | #define cpu_has_cx16 boot_cpu_has(X86_FEATURE_CX16) | 332 | #define cpu_has_cx16 boot_cpu_has(X86_FEATURE_CX16) |
316 | #define cpu_has_eager_fpu boot_cpu_has(X86_FEATURE_EAGER_FPU) | 333 | #define cpu_has_eager_fpu boot_cpu_has(X86_FEATURE_EAGER_FPU) |
@@ -401,6 +418,13 @@ static __always_inline __pure bool __static_cpu_has(u16 bit) | |||
401 | #define static_cpu_has(bit) boot_cpu_has(bit) | 418 | #define static_cpu_has(bit) boot_cpu_has(bit) |
402 | #endif | 419 | #endif |
403 | 420 | ||
421 | #define cpu_has_bug(c, bit) cpu_has(c, (bit)) | ||
422 | #define set_cpu_bug(c, bit) set_cpu_cap(c, (bit)) | ||
423 | #define clear_cpu_bug(c, bit) clear_cpu_cap(c, (bit)); | ||
424 | |||
425 | #define static_cpu_has_bug(bit) static_cpu_has((bit)) | ||
426 | #define boot_cpu_has_bug(bit) cpu_has_bug(&boot_cpu_data, (bit)) | ||
427 | |||
404 | #endif /* defined(__KERNEL__) && !defined(__ASSEMBLY__) */ | 428 | #endif /* defined(__KERNEL__) && !defined(__ASSEMBLY__) */ |
405 | 429 | ||
406 | #endif /* _ASM_X86_CPUFEATURE_H */ | 430 | #endif /* _ASM_X86_CPUFEATURE_H */ |