}\r
}\r
\r
+/**\r
+ Determines if the CPU feature is valid.\r
+\r
+ @param[in] Feature Pointer to CPU feature\r
+\r
+ @retval TRUE The CPU feature is valid.\r
+ @retval FALSE The CPU feature is invalid.\r
+**/\r
+BOOLEAN\r
+RegisterCpuFeatureLibIsFeatureValid (\r
+ IN UINT32 Feature\r
+ )\r
+{\r
+ UINT32 Data;\r
+\r
+ Data = Feature;\r
+ Data &= ~(CPU_FEATURE_BEFORE | CPU_FEATURE_AFTER | CPU_FEATURE_BEFORE_ALL | CPU_FEATURE_AFTER_ALL);\r
+ //\r
+ // Currently, CPU_FEATURE_PROC_TRACE is the MAX feature we support.\r
+ // If you define a feature bigger than it, please replace it at below.\r
+ //\r
+ if (Data > CPU_FEATURE_PROC_TRACE) {\r
+ DEBUG ((DEBUG_ERROR, "Invalid CPU feature: 0x%x ", Feature));\r
+ return FALSE;\r
+ }\r
+ return TRUE;\r
+}\r
+\r
/**\r
Determines if the feature bit mask is in dependent CPU feature bit mask buffer.\r
\r
\r
VA_START (Marker, InitializeFunc);\r
Feature = VA_ARG (Marker, UINT32);\r
+ ASSERT (RegisterCpuFeatureLibIsFeatureValid(Feature));\r
while (Feature != CPU_FEATURE_END) {\r
ASSERT ((Feature & (CPU_FEATURE_BEFORE | CPU_FEATURE_AFTER))\r
!= (CPU_FEATURE_BEFORE | CPU_FEATURE_AFTER));\r