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_SENTER
)) {
109 Status
= RegisterCpuFeature (
111 FeatureControlGetConfigData
,
115 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER
| CPU_FEATURE_BEFORE
,
116 CPU_FEATURE_SMX
| CPU_FEATURE_AFTER
,
119 ASSERT_EFI_ERROR (Status
);
121 if (IsCpuFeatureSupported (CPU_FEATURE_SMX
)) {
122 Status
= RegisterCpuFeature (
124 FeatureControlGetConfigData
,
126 VmxInsideSmxInitialize
,
128 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER
| CPU_FEATURE_BEFORE
,
131 ASSERT_EFI_ERROR (Status
);
133 if (IsCpuFeatureSupported (CPU_FEATURE_VMX
)) {
134 Status
= RegisterCpuFeature (
136 FeatureControlGetConfigData
,
138 VmxOutsideSmxInitialize
,
140 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER
| CPU_FEATURE_BEFORE
,
143 ASSERT_EFI_ERROR (Status
);
145 if (IsCpuFeatureSupported (CPU_FEATURE_LIMIT_CPUID_MAX_VAL
)) {
146 Status
= RegisterCpuFeature (
147 "Limit CpuId Maximum Value",
149 LimitCpuidMaxvalSupport
,
150 LimitCpuidMaxvalInitialize
,
151 CPU_FEATURE_LIMIT_CPUID_MAX_VAL
,
154 ASSERT_EFI_ERROR (Status
);
156 if (IsCpuFeatureSupported (CPU_FEATURE_MCE
)) {
157 Status
= RegisterCpuFeature (
158 "Machine Check Enable",
165 ASSERT_EFI_ERROR (Status
);
167 if (IsCpuFeatureSupported (CPU_FEATURE_MCA
)) {
168 Status
= RegisterCpuFeature (
169 "Machine Check Architect",
176 ASSERT_EFI_ERROR (Status
);
178 if (IsCpuFeatureSupported (CPU_FEATURE_MCG_CTL
)) {
179 Status
= RegisterCpuFeature (
187 ASSERT_EFI_ERROR (Status
);
189 if (IsCpuFeatureSupported (CPU_FEATURE_PENDING_BREAK
)) {
190 Status
= RegisterCpuFeature (
194 PendingBreakInitialize
,
195 CPU_FEATURE_PENDING_BREAK
,
198 ASSERT_EFI_ERROR (Status
);
200 if (IsCpuFeatureSupported (CPU_FEATURE_C1E
)) {
201 Status
= RegisterCpuFeature (
209 ASSERT_EFI_ERROR (Status
);
211 if (IsCpuFeatureSupported (CPU_FEATURE_X2APIC
)) {
212 Status
= RegisterCpuFeature (
220 ASSERT_EFI_ERROR (Status
);
223 return RETURN_SUCCESS
;