]> git.proxmox.com Git - mirror_edk2.git/blame - UefiCpuPkg/Library/CpuCommonFeaturesLib/CpuCommonFeaturesLib.c
UefiCpuPkg/RegisterCpuFeaturesLib: Delete CPU_FEATURE_[BEFORE|AFTER]
[mirror_edk2.git] / UefiCpuPkg / Library / CpuCommonFeaturesLib / CpuCommonFeaturesLib.c
CommitLineData
80c4b236
JF
1/** @file\r
2 This library registers CPU features defined in Intel(R) 64 and IA-32\r
3 Architectures Software Developer's Manual.\r
4\r
707e6be7 5 Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>\r
0acd8697 6 SPDX-License-Identifier: BSD-2-Clause-Patent\r
80c4b236
JF
7\r
8**/\r
9\r
10#include "CpuCommonFeatures.h"\r
11\r
12/**\r
13 Register CPU features.\r
14\r
15 @retval RETURN_SUCCESS Register successfully\r
16**/\r
17RETURN_STATUS\r
18EFIAPI\r
19CpuCommonFeaturesLibConstructor (\r
20 VOID\r
21 )\r
22{\r
23 RETURN_STATUS Status;\r
24\r
25 if (IsCpuFeatureSupported (CPU_FEATURE_AESNI)) {\r
26 Status = RegisterCpuFeature (\r
27 "AESNI",\r
28 AesniGetConfigData,\r
29 AesniSupport,\r
30 AesniInitialize,\r
31 CPU_FEATURE_AESNI,\r
32 CPU_FEATURE_END\r
33 );\r
34 ASSERT_EFI_ERROR (Status);\r
35 }\r
36 if (IsCpuFeatureSupported (CPU_FEATURE_MWAIT)) {\r
37 Status = RegisterCpuFeature (\r
38 "MWAIT",\r
39 NULL,\r
40 MonitorMwaitSupport,\r
41 MonitorMwaitInitialize,\r
42 CPU_FEATURE_MWAIT,\r
43 CPU_FEATURE_END\r
44 );\r
45 ASSERT_EFI_ERROR (Status);\r
46 }\r
47 if (IsCpuFeatureSupported (CPU_FEATURE_ACPI)) {\r
48 Status = RegisterCpuFeature (\r
49 "ACPI",\r
fe0c2770 50 ClockModulationGetConfigData,\r
80c4b236
JF
51 ClockModulationSupport,\r
52 ClockModulationInitialize,\r
53 CPU_FEATURE_ACPI,\r
54 CPU_FEATURE_END\r
55 );\r
56 ASSERT_EFI_ERROR (Status);\r
57 }\r
58 if (IsCpuFeatureSupported (CPU_FEATURE_EIST)) {\r
59 Status = RegisterCpuFeature (\r
60 "EIST",\r
61 NULL,\r
62 EistSupport,\r
63 EistInitialize,\r
64 CPU_FEATURE_EIST,\r
65 CPU_FEATURE_END\r
80c4b236
JF
66 );\r
67 ASSERT_EFI_ERROR (Status);\r
68 }\r
69 if (IsCpuFeatureSupported (CPU_FEATURE_FASTSTRINGS)) {\r
70 Status = RegisterCpuFeature (\r
71 "FastStrings",\r
72 NULL,\r
73 NULL,\r
74 FastStringsInitialize,\r
75 CPU_FEATURE_FASTSTRINGS,\r
76 CPU_FEATURE_END\r
77 );\r
78 ASSERT_EFI_ERROR (Status);\r
79 }\r
80 if (IsCpuFeatureSupported (CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER)) {\r
81 Status = RegisterCpuFeature (\r
82 "Lock Feature Control Register",\r
9c90d39b 83 NULL,\r
80c4b236
JF
84 LockFeatureControlRegisterSupport,\r
85 LockFeatureControlRegisterInitialize,\r
86 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER,\r
87 CPU_FEATURE_END\r
88 );\r
89 ASSERT_EFI_ERROR (Status);\r
90 }\r
80c4b236
JF
91 if (IsCpuFeatureSupported (CPU_FEATURE_SMX)) {\r
92 Status = RegisterCpuFeature (\r
93 "SMX",\r
9c90d39b 94 NULL,\r
80c4b236 95 SmxSupport,\r
b1fe2029 96 SmxInitialize,\r
80c4b236 97 CPU_FEATURE_SMX,\r
707e6be7 98 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_THREAD_BEFORE,\r
80c4b236
JF
99 CPU_FEATURE_END\r
100 );\r
101 ASSERT_EFI_ERROR (Status);\r
102 }\r
103 if (IsCpuFeatureSupported (CPU_FEATURE_VMX)) {\r
104 Status = RegisterCpuFeature (\r
105 "VMX",\r
9c90d39b 106 NULL,\r
b1fe2029
ED
107 VmxSupport,\r
108 VmxInitialize,\r
80c4b236 109 CPU_FEATURE_VMX,\r
707e6be7 110 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_THREAD_BEFORE,\r
80c4b236
JF
111 CPU_FEATURE_END\r
112 );\r
113 ASSERT_EFI_ERROR (Status);\r
114 }\r
115 if (IsCpuFeatureSupported (CPU_FEATURE_LIMIT_CPUID_MAX_VAL)) {\r
116 Status = RegisterCpuFeature (\r
117 "Limit CpuId Maximum Value",\r
118 NULL,\r
119 LimitCpuidMaxvalSupport,\r
120 LimitCpuidMaxvalInitialize,\r
121 CPU_FEATURE_LIMIT_CPUID_MAX_VAL,\r
122 CPU_FEATURE_END\r
123 );\r
124 ASSERT_EFI_ERROR (Status);\r
125 }\r
126 if (IsCpuFeatureSupported (CPU_FEATURE_MCE)) {\r
127 Status = RegisterCpuFeature (\r
128 "Machine Check Enable",\r
129 NULL,\r
130 MceSupport,\r
131 MceInitialize,\r
132 CPU_FEATURE_MCE,\r
133 CPU_FEATURE_END\r
134 );\r
135 ASSERT_EFI_ERROR (Status);\r
136 }\r
137 if (IsCpuFeatureSupported (CPU_FEATURE_MCA)) {\r
138 Status = RegisterCpuFeature (\r
139 "Machine Check Architect",\r
140 NULL,\r
141 McaSupport,\r
142 McaInitialize,\r
143 CPU_FEATURE_MCA,\r
144 CPU_FEATURE_END\r
145 );\r
146 ASSERT_EFI_ERROR (Status);\r
147 }\r
148 if (IsCpuFeatureSupported (CPU_FEATURE_MCG_CTL)) {\r
149 Status = RegisterCpuFeature (\r
150 "MCG_CTL",\r
151 NULL,\r
152 McgCtlSupport,\r
153 McgCtlInitialize,\r
154 CPU_FEATURE_MCG_CTL,\r
155 CPU_FEATURE_END\r
156 );\r
157 ASSERT_EFI_ERROR (Status);\r
158 }\r
159 if (IsCpuFeatureSupported (CPU_FEATURE_PENDING_BREAK)) {\r
160 Status = RegisterCpuFeature (\r
161 "Pending Break",\r
162 NULL,\r
163 PendingBreakSupport,\r
164 PendingBreakInitialize,\r
165 CPU_FEATURE_PENDING_BREAK,\r
166 CPU_FEATURE_END\r
167 );\r
168 ASSERT_EFI_ERROR (Status);\r
169 }\r
170 if (IsCpuFeatureSupported (CPU_FEATURE_C1E)) {\r
171 Status = RegisterCpuFeature (\r
172 "C1E",\r
173 NULL,\r
174 C1eSupport,\r
175 C1eInitialize,\r
176 CPU_FEATURE_C1E,\r
177 CPU_FEATURE_END\r
178 );\r
179 ASSERT_EFI_ERROR (Status);\r
180 }\r
181 if (IsCpuFeatureSupported (CPU_FEATURE_X2APIC)) {\r
182 Status = RegisterCpuFeature (\r
183 "X2Apic",\r
6661abb6 184 X2ApicGetConfigData,\r
80c4b236
JF
185 X2ApicSupport,\r
186 X2ApicInitialize,\r
187 CPU_FEATURE_X2APIC,\r
188 CPU_FEATURE_END\r
189 );\r
190 ASSERT_EFI_ERROR (Status);\r
191 }\r
ee1d736a
ED
192 if (IsCpuFeatureSupported (CPU_FEATURE_PPIN)) {\r
193 Status = RegisterCpuFeature (\r
194 "PPIN",\r
84a45947 195 PpinGetConfigData,\r
ee1d736a
ED
196 PpinSupport,\r
197 PpinInitialize,\r
198 CPU_FEATURE_PPIN,\r
199 CPU_FEATURE_END\r
200 );\r
201 ASSERT_EFI_ERROR (Status);\r
202 }\r
3d6275c1
ED
203 if (IsCpuFeatureSupported (CPU_FEATURE_LMCE)) {\r
204 Status = RegisterCpuFeature (\r
205 "LMCE",\r
9c90d39b 206 NULL,\r
3d6275c1
ED
207 LmceSupport,\r
208 LmceInitialize,\r
209 CPU_FEATURE_LMCE,\r
707e6be7 210 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_THREAD_BEFORE,\r
3d6275c1
ED
211 CPU_FEATURE_END\r
212 );\r
213 ASSERT_EFI_ERROR (Status);\r
214 }\r
bc230057
ED
215 if (IsCpuFeatureSupported (CPU_FEATURE_PROC_TRACE)) {\r
216 Status = RegisterCpuFeature (\r
217 "Proc Trace",\r
218 ProcTraceGetConfigData,\r
219 ProcTraceSupport,\r
220 ProcTraceInitialize,\r
221 CPU_FEATURE_PROC_TRACE,\r
222 CPU_FEATURE_END\r
223 );\r
224 ASSERT_EFI_ERROR (Status);\r
225 }\r
80c4b236
JF
226\r
227 return RETURN_SUCCESS;\r
228}\r
229\r
230\r
231\r