2 This library registers CPU features defined in Intel(R) 64 and IA-32
3 Architectures Software Developer's Manual.
5 Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
6 This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16 #include "CpuCommonFeatures.h"
19 Register CPU features.
21 @retval RETURN_SUCCESS Register successfully
25 CpuCommonFeaturesLibConstructor (
31 if (IsCpuFeatureSupported (CPU_FEATURE_AESNI
)) {
32 Status
= RegisterCpuFeature (
40 ASSERT_EFI_ERROR (Status
);
42 if (IsCpuFeatureSupported (CPU_FEATURE_MWAIT
)) {
43 Status
= RegisterCpuFeature (
47 MonitorMwaitInitialize
,
51 ASSERT_EFI_ERROR (Status
);
53 if (IsCpuFeatureSupported (CPU_FEATURE_ACPI
)) {
54 Status
= RegisterCpuFeature (
57 ClockModulationSupport
,
58 ClockModulationInitialize
,
62 ASSERT_EFI_ERROR (Status
);
64 if (IsCpuFeatureSupported (CPU_FEATURE_EIST
)) {
65 Status
= RegisterCpuFeature (
73 ASSERT_EFI_ERROR (Status
);
75 if (IsCpuFeatureSupported (CPU_FEATURE_XD
)) {
76 Status
= RegisterCpuFeature (
79 ExecuteDisableSupport
,
80 ExecuteDisableInitialize
,
84 ASSERT_EFI_ERROR (Status
);
86 if (IsCpuFeatureSupported (CPU_FEATURE_FASTSTRINGS
)) {
87 Status
= RegisterCpuFeature (
91 FastStringsInitialize
,
92 CPU_FEATURE_FASTSTRINGS
,
95 ASSERT_EFI_ERROR (Status
);
97 if (IsCpuFeatureSupported (CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER
)) {
98 Status
= RegisterCpuFeature (
99 "Lock Feature Control Register",
100 FeatureControlGetConfigData
,
101 LockFeatureControlRegisterSupport
,
102 LockFeatureControlRegisterInitialize
,
103 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER
,
106 ASSERT_EFI_ERROR (Status
);
108 if (IsCpuFeatureSupported (CPU_FEATURE_SMX
)) {
109 Status
= RegisterCpuFeature (
111 FeatureControlGetConfigData
,
115 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER
| CPU_FEATURE_BEFORE
,
118 ASSERT_EFI_ERROR (Status
);
120 if (IsCpuFeatureSupported (CPU_FEATURE_VMX
)) {
121 Status
= RegisterCpuFeature (
123 FeatureControlGetConfigData
,
127 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER
| CPU_FEATURE_BEFORE
,
130 ASSERT_EFI_ERROR (Status
);
132 if (IsCpuFeatureSupported (CPU_FEATURE_LIMIT_CPUID_MAX_VAL
)) {
133 Status
= RegisterCpuFeature (
134 "Limit CpuId Maximum Value",
136 LimitCpuidMaxvalSupport
,
137 LimitCpuidMaxvalInitialize
,
138 CPU_FEATURE_LIMIT_CPUID_MAX_VAL
,
141 ASSERT_EFI_ERROR (Status
);
143 if (IsCpuFeatureSupported (CPU_FEATURE_MCE
)) {
144 Status
= RegisterCpuFeature (
145 "Machine Check Enable",
152 ASSERT_EFI_ERROR (Status
);
154 if (IsCpuFeatureSupported (CPU_FEATURE_MCA
)) {
155 Status
= RegisterCpuFeature (
156 "Machine Check Architect",
163 ASSERT_EFI_ERROR (Status
);
165 if (IsCpuFeatureSupported (CPU_FEATURE_MCG_CTL
)) {
166 Status
= RegisterCpuFeature (
174 ASSERT_EFI_ERROR (Status
);
176 if (IsCpuFeatureSupported (CPU_FEATURE_PENDING_BREAK
)) {
177 Status
= RegisterCpuFeature (
181 PendingBreakInitialize
,
182 CPU_FEATURE_PENDING_BREAK
,
185 ASSERT_EFI_ERROR (Status
);
187 if (IsCpuFeatureSupported (CPU_FEATURE_C1E
)) {
188 Status
= RegisterCpuFeature (
196 ASSERT_EFI_ERROR (Status
);
198 if (IsCpuFeatureSupported (CPU_FEATURE_X2APIC
)) {
199 Status
= RegisterCpuFeature (
207 ASSERT_EFI_ERROR (Status
);
209 if (IsCpuFeatureSupported (CPU_FEATURE_PPIN
)) {
210 Status
= RegisterCpuFeature (
218 ASSERT_EFI_ERROR (Status
);
220 if (IsCpuFeatureSupported (CPU_FEATURE_LMCE
)) {
221 Status
= RegisterCpuFeature (
227 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER
| CPU_FEATURE_BEFORE
,
230 ASSERT_EFI_ERROR (Status
);
232 if (IsCpuFeatureSupported (CPU_FEATURE_PROC_TRACE
)) {
233 Status
= RegisterCpuFeature (
235 ProcTraceGetConfigData
,
238 CPU_FEATURE_PROC_TRACE
,
241 ASSERT_EFI_ERROR (Status
);
244 return RETURN_SUCCESS
;