1*4882a593Smuzhiyun #ifndef _ASM_X86_REQUIRED_FEATURES_H 2*4882a593Smuzhiyun #define _ASM_X86_REQUIRED_FEATURES_H 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun /* Define minimum CPUID feature set for kernel These bits are checked 5*4882a593Smuzhiyun really early to actually display a visible error message before the 6*4882a593Smuzhiyun kernel dies. Make sure to assign features to the proper mask! 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun Some requirements that are not in CPUID yet are also in the 9*4882a593Smuzhiyun CONFIG_X86_MINIMUM_CPU_FAMILY which is checked too. 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun The real information is in arch/x86/Kconfig.cpu, this just converts 12*4882a593Smuzhiyun the CONFIGs into a bitmask */ 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #ifndef CONFIG_MATH_EMULATION 15*4882a593Smuzhiyun # define NEED_FPU (1<<(X86_FEATURE_FPU & 31)) 16*4882a593Smuzhiyun #else 17*4882a593Smuzhiyun # define NEED_FPU 0 18*4882a593Smuzhiyun #endif 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun #if defined(CONFIG_X86_PAE) || defined(CONFIG_X86_64) 21*4882a593Smuzhiyun # define NEED_PAE (1<<(X86_FEATURE_PAE & 31)) 22*4882a593Smuzhiyun #else 23*4882a593Smuzhiyun # define NEED_PAE 0 24*4882a593Smuzhiyun #endif 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun #ifdef CONFIG_X86_CMPXCHG64 27*4882a593Smuzhiyun # define NEED_CX8 (1<<(X86_FEATURE_CX8 & 31)) 28*4882a593Smuzhiyun #else 29*4882a593Smuzhiyun # define NEED_CX8 0 30*4882a593Smuzhiyun #endif 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun #if defined(CONFIG_X86_CMOV) || defined(CONFIG_X86_64) 33*4882a593Smuzhiyun # define NEED_CMOV (1<<(X86_FEATURE_CMOV & 31)) 34*4882a593Smuzhiyun #else 35*4882a593Smuzhiyun # define NEED_CMOV 0 36*4882a593Smuzhiyun #endif 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun #ifdef CONFIG_X86_USE_3DNOW 39*4882a593Smuzhiyun # define NEED_3DNOW (1<<(X86_FEATURE_3DNOW & 31)) 40*4882a593Smuzhiyun #else 41*4882a593Smuzhiyun # define NEED_3DNOW 0 42*4882a593Smuzhiyun #endif 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun #if defined(CONFIG_X86_P6_NOP) || defined(CONFIG_X86_64) 45*4882a593Smuzhiyun # define NEED_NOPL (1<<(X86_FEATURE_NOPL & 31)) 46*4882a593Smuzhiyun #else 47*4882a593Smuzhiyun # define NEED_NOPL 0 48*4882a593Smuzhiyun #endif 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun #ifdef CONFIG_MATOM 51*4882a593Smuzhiyun # define NEED_MOVBE (1<<(X86_FEATURE_MOVBE & 31)) 52*4882a593Smuzhiyun #else 53*4882a593Smuzhiyun # define NEED_MOVBE 0 54*4882a593Smuzhiyun #endif 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun #ifdef CONFIG_X86_64 57*4882a593Smuzhiyun #ifdef CONFIG_PARAVIRT_XXL 58*4882a593Smuzhiyun /* Paravirtualized systems may not have PSE or PGE available */ 59*4882a593Smuzhiyun #define NEED_PSE 0 60*4882a593Smuzhiyun #define NEED_PGE 0 61*4882a593Smuzhiyun #else 62*4882a593Smuzhiyun #define NEED_PSE (1<<(X86_FEATURE_PSE) & 31) 63*4882a593Smuzhiyun #define NEED_PGE (1<<(X86_FEATURE_PGE) & 31) 64*4882a593Smuzhiyun #endif 65*4882a593Smuzhiyun #define NEED_MSR (1<<(X86_FEATURE_MSR & 31)) 66*4882a593Smuzhiyun #define NEED_FXSR (1<<(X86_FEATURE_FXSR & 31)) 67*4882a593Smuzhiyun #define NEED_XMM (1<<(X86_FEATURE_XMM & 31)) 68*4882a593Smuzhiyun #define NEED_XMM2 (1<<(X86_FEATURE_XMM2 & 31)) 69*4882a593Smuzhiyun #define NEED_LM (1<<(X86_FEATURE_LM & 31)) 70*4882a593Smuzhiyun #else 71*4882a593Smuzhiyun #define NEED_PSE 0 72*4882a593Smuzhiyun #define NEED_MSR 0 73*4882a593Smuzhiyun #define NEED_PGE 0 74*4882a593Smuzhiyun #define NEED_FXSR 0 75*4882a593Smuzhiyun #define NEED_XMM 0 76*4882a593Smuzhiyun #define NEED_XMM2 0 77*4882a593Smuzhiyun #define NEED_LM 0 78*4882a593Smuzhiyun #endif 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun #define REQUIRED_MASK0 (NEED_FPU|NEED_PSE|NEED_MSR|NEED_PAE|\ 81*4882a593Smuzhiyun NEED_CX8|NEED_PGE|NEED_FXSR|NEED_CMOV|\ 82*4882a593Smuzhiyun NEED_XMM|NEED_XMM2) 83*4882a593Smuzhiyun #define SSE_MASK (NEED_XMM|NEED_XMM2) 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun #define REQUIRED_MASK1 (NEED_LM|NEED_3DNOW) 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun #define REQUIRED_MASK2 0 88*4882a593Smuzhiyun #define REQUIRED_MASK3 (NEED_NOPL) 89*4882a593Smuzhiyun #define REQUIRED_MASK4 (NEED_MOVBE) 90*4882a593Smuzhiyun #define REQUIRED_MASK5 0 91*4882a593Smuzhiyun #define REQUIRED_MASK6 0 92*4882a593Smuzhiyun #define REQUIRED_MASK7 0 93*4882a593Smuzhiyun #define REQUIRED_MASK8 0 94*4882a593Smuzhiyun #define REQUIRED_MASK9 0 95*4882a593Smuzhiyun #define REQUIRED_MASK10 0 96*4882a593Smuzhiyun #define REQUIRED_MASK11 0 97*4882a593Smuzhiyun #define REQUIRED_MASK12 0 98*4882a593Smuzhiyun #define REQUIRED_MASK13 0 99*4882a593Smuzhiyun #define REQUIRED_MASK14 0 100*4882a593Smuzhiyun #define REQUIRED_MASK15 0 101*4882a593Smuzhiyun #define REQUIRED_MASK16 0 102*4882a593Smuzhiyun #define REQUIRED_MASK17 0 103*4882a593Smuzhiyun #define REQUIRED_MASK18 0 104*4882a593Smuzhiyun #define REQUIRED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 19) 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun #endif /* _ASM_X86_REQUIRED_FEATURES_H */ 107