-/** @file
- This library registers CPU features defined in Intel(R) 64 and IA-32
- Architectures Software Developer's Manual.
-
- Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "CpuCommonFeatures.h"
-
-/**
- Register CPU features.
-
- @retval RETURN_SUCCESS Register successfully
-**/
-RETURN_STATUS
-EFIAPI
-CpuCommonFeaturesLibConstructor (
- VOID
- )
-{
- RETURN_STATUS Status;
-
- if (IsCpuFeatureSupported (CPU_FEATURE_AESNI)) {
- Status = RegisterCpuFeature (
- "AESNI",
- AesniGetConfigData,
- AesniSupport,
- AesniInitialize,
- CPU_FEATURE_AESNI,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_MWAIT)) {
- Status = RegisterCpuFeature (
- "MWAIT",
- NULL,
- MonitorMwaitSupport,
- MonitorMwaitInitialize,
- CPU_FEATURE_MWAIT,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_ACPI)) {
- Status = RegisterCpuFeature (
- "ACPI",
- NULL,
- ClockModulationSupport,
- ClockModulationInitialize,
- CPU_FEATURE_ACPI,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_EIST)) {
- Status = RegisterCpuFeature (
- "EIST",
- NULL,
- EistSupport,
- EistInitialize,
- CPU_FEATURE_EIST,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_XD)) {
- Status = RegisterCpuFeature (
- "Execute Disable",
- NULL,
- ExecuteDisableSupport,
- ExecuteDisableInitialize,
- CPU_FEATURE_XD,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_FASTSTRINGS)) {
- Status = RegisterCpuFeature (
- "FastStrings",
- NULL,
- NULL,
- FastStringsInitialize,
- CPU_FEATURE_FASTSTRINGS,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER)) {
- Status = RegisterCpuFeature (
- "Lock Feature Control Register",
- FeatureControlGetConfigData,
- LockFeatureControlRegisterSupport,
- LockFeatureControlRegisterInitialize,
- CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_SENTER)) {
- Status = RegisterCpuFeature (
- "SENTER",
- FeatureControlGetConfigData,
- VmxSupport,
- SenterInitialize,
- CPU_FEATURE_SENTER,
- CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,
- CPU_FEATURE_SMX | CPU_FEATURE_AFTER,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_SMX)) {
- Status = RegisterCpuFeature (
- "SMX",
- FeatureControlGetConfigData,
- SmxSupport,
- VmxInsideSmxInitialize,
- CPU_FEATURE_SMX,
- CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_VMX)) {
- Status = RegisterCpuFeature (
- "VMX",
- FeatureControlGetConfigData,
- SmxSupport,
- VmxOutsideSmxInitialize,
- CPU_FEATURE_VMX,
- CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_LIMIT_CPUID_MAX_VAL)) {
- Status = RegisterCpuFeature (
- "Limit CpuId Maximum Value",
- NULL,
- LimitCpuidMaxvalSupport,
- LimitCpuidMaxvalInitialize,
- CPU_FEATURE_LIMIT_CPUID_MAX_VAL,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_MCE)) {
- Status = RegisterCpuFeature (
- "Machine Check Enable",
- NULL,
- MceSupport,
- MceInitialize,
- CPU_FEATURE_MCE,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_MCA)) {
- Status = RegisterCpuFeature (
- "Machine Check Architect",
- NULL,
- McaSupport,
- McaInitialize,
- CPU_FEATURE_MCA,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_MCG_CTL)) {
- Status = RegisterCpuFeature (
- "MCG_CTL",
- NULL,
- McgCtlSupport,
- McgCtlInitialize,
- CPU_FEATURE_MCG_CTL,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_PENDING_BREAK)) {
- Status = RegisterCpuFeature (
- "Pending Break",
- NULL,
- PendingBreakSupport,
- PendingBreakInitialize,
- CPU_FEATURE_PENDING_BREAK,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_C1E)) {
- Status = RegisterCpuFeature (
- "C1E",
- NULL,
- C1eSupport,
- C1eInitialize,
- CPU_FEATURE_C1E,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
- if (IsCpuFeatureSupported (CPU_FEATURE_X2APIC)) {
- Status = RegisterCpuFeature (
- "X2Apic",
- NULL,
- X2ApicSupport,
- X2ApicInitialize,
- CPU_FEATURE_X2APIC,
- CPU_FEATURE_END
- );
- ASSERT_EFI_ERROR (Status);
- }
-
- return RETURN_SUCCESS;
-}
-
-
-
+/** @file\r
+ This library registers CPU features defined in Intel(R) 64 and IA-32\r
+ Architectures Software Developer's Manual.\r
+\r
+ Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
+ This program and the accompanying materials\r
+ are licensed and made available under the terms and conditions of the BSD License\r
+ which accompanies this distribution. The full text of the license may be found at\r
+ http://opensource.org/licenses/bsd-license.php\r
+\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include "CpuCommonFeatures.h"\r
+\r
+/**\r
+ Register CPU features.\r
+\r
+ @retval RETURN_SUCCESS Register successfully\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+CpuCommonFeaturesLibConstructor (\r
+ VOID\r
+ )\r
+{\r
+ RETURN_STATUS Status;\r
+\r
+ if (IsCpuFeatureSupported (CPU_FEATURE_AESNI)) {\r
+ Status = RegisterCpuFeature (\r
+ "AESNI",\r
+ AesniGetConfigData,\r
+ AesniSupport,\r
+ AesniInitialize,\r
+ CPU_FEATURE_AESNI,\r
+ CPU_FEATURE_END\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
+ if (IsCpuFeatureSupported (CPU_FEATURE_MWAIT)) {\r
+ Status = RegisterCpuFeature (\r
+ "MWAIT",\r
+ NULL,\r
+ MonitorMwaitSupport,\r
+ MonitorMwaitInitialize,\r
+ CPU_FEATURE_MWAIT,\r
+ CPU_FEATURE_END\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
+ if (IsCpuFeatureSupported (CPU_FEATURE_ACPI)) {\r
+ Status = RegisterCpuFeature (\r
+ "ACPI",\r
+ NULL,\r
+ ClockModulationSupport,\r
+ ClockModulationInitialize,\r
+ CPU_FEATURE_ACPI,\r
+ CPU_FEATURE_END\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
+ if (IsCpuFeatureSupported (CPU_FEATURE_EIST)) {\r
+ Status = RegisterCpuFeature (\r
+ "EIST",\r
+ NULL,\r
+ EistSupport,\r
+ EistInitialize,\r
+ CPU_FEATURE_EIST,\r
+ CPU_FEATURE_END\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
+ if (IsCpuFeatureSupported (CPU_FEATURE_XD)) {\r
+ Status = RegisterCpuFeature (\r
+ "Execute Disable",\r
+ NULL,\r
+ ExecuteDisableSupport,\r
+ ExecuteDisableInitialize,\r
+ CPU_FEATURE_XD,\r
+ CPU_FEATURE_END\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
+ if (IsCpuFeatureSupported (CPU_FEATURE_FASTSTRINGS)) {\r
+ Status = RegisterCpuFeature (\r
+ "FastStrings",\r
+ NULL,\r
+ NULL,\r
+ FastStringsInitialize,\r
+ CPU_FEATURE_FASTSTRINGS,\r
+ CPU_FEATURE_END\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
+ if (IsCpuFeatureSupported (CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER)) {\r
+ Status = RegisterCpuFeature (\r
+ "Lock Feature Control Register",\r
+ FeatureControlGetConfigData,\r
+ LockFeatureControlRegisterSupport,\r
+ LockFeatureControlRegisterInitialize,\r
+ CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER,\r
+ CPU_FEATURE_END\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
+ if (IsCpuFeatureSupported (CPU_FEATURE_SENTER)) {\r
+ Status = RegisterCpuFeature (\r
+ "SENTER",\r
+ FeatureControlGetConfigData,\r
+ VmxSupport,\r
+ SenterInitialize,\r
+ CPU_FEATURE_SENTER,\r
+ CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,\r
+ CPU_FEATURE_SMX | CPU_FEATURE_AFTER,\r
+ CPU_FEATURE_END\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
+ if (IsCpuFeatureSupported (CPU_FEATURE_SMX)) {\r
+ Status = RegisterCpuFeature (\r
+ "SMX",\r
+ FeatureControlGetConfigData,\r
+ SmxSupport,\r
+ VmxInsideSmxInitialize,\r
+ CPU_FEATURE_SMX,\r
+ CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,\r
+ CPU_FEATURE_END\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
+ if (IsCpuFeatureSupported (CPU_FEATURE_VMX)) {\r
+ Status = RegisterCpuFeature (\r
+ "VMX",\r
+ FeatureControlGetConfigData,\r
+ SmxSupport,\r
+ VmxOutsideSmxInitialize,\r
+ CPU_FEATURE_VMX,\r
+ CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,\r
+ CPU_FEATURE_END\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
+ if (IsCpuFeatureSupported (CPU_FEATURE_LIMIT_CPUID_MAX_VAL)) {\r
+ Status = RegisterCpuFeature (\r
+ "Limit CpuId Maximum Value",\r
+ NULL,\r
+ LimitCpuidMaxvalSupport,\r
+ LimitCpuidMaxvalInitialize,\r
+ CPU_FEATURE_LIMIT_CPUID_MAX_VAL,\r
+ CPU_FEATURE_END\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
+ if (IsCpuFeatureSupported (CPU_FEATURE_MCE)) {\r
+ Status = RegisterCpuFeature (\r
+ "Machine Check Enable",\r
+ NULL,\r
+ MceSupport,\r
+ MceInitialize,\r
+ CPU_FEATURE_MCE,\r
+ CPU_FEATURE_END\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
+ if (IsCpuFeatureSupported (CPU_FEATURE_MCA)) {\r
+ Status = RegisterCpuFeature (\r
+ "Machine Check Architect",\r
+ NULL,\r
+ McaSupport,\r
+ McaInitialize,\r
+ CPU_FEATURE_MCA,\r
+ CPU_FEATURE_END\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
+ if (IsCpuFeatureSupported (CPU_FEATURE_MCG_CTL)) {\r
+ Status = RegisterCpuFeature (\r
+ "MCG_CTL",\r
+ NULL,\r
+ McgCtlSupport,\r
+ McgCtlInitialize,\r
+ CPU_FEATURE_MCG_CTL,\r
+ CPU_FEATURE_END\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
+ if (IsCpuFeatureSupported (CPU_FEATURE_PENDING_BREAK)) {\r
+ Status = RegisterCpuFeature (\r
+ "Pending Break",\r
+ NULL,\r
+ PendingBreakSupport,\r
+ PendingBreakInitialize,\r
+ CPU_FEATURE_PENDING_BREAK,\r
+ CPU_FEATURE_END\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
+ if (IsCpuFeatureSupported (CPU_FEATURE_C1E)) {\r
+ Status = RegisterCpuFeature (\r
+ "C1E",\r
+ NULL,\r
+ C1eSupport,\r
+ C1eInitialize,\r
+ CPU_FEATURE_C1E,\r
+ CPU_FEATURE_END\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
+ if (IsCpuFeatureSupported (CPU_FEATURE_X2APIC)) {\r
+ Status = RegisterCpuFeature (\r
+ "X2Apic",\r
+ NULL,\r
+ X2ApicSupport,\r
+ X2ApicInitialize,\r
+ CPU_FEATURE_X2APIC,\r
+ CPU_FEATURE_END\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
+\r
+ return RETURN_SUCCESS;\r
+}\r
+\r
+\r
+\r