required-features.h 2.7 KB

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