]> git.proxmox.com Git - mirror_edk2.git/blame - UefiCpuPkg/Library/CpuCommonFeaturesLib/CpuCommonFeaturesLib.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[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
053e878b 23 RETURN_STATUS Status;\r
80c4b236
JF
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
053e878b 36\r
80c4b236
JF
37 if (IsCpuFeatureSupported (CPU_FEATURE_MWAIT)) {\r
38 Status = RegisterCpuFeature (\r
39 "MWAIT",\r
40 NULL,\r
41 MonitorMwaitSupport,\r
42 MonitorMwaitInitialize,\r
43 CPU_FEATURE_MWAIT,\r
44 CPU_FEATURE_END\r
45 );\r
46 ASSERT_EFI_ERROR (Status);\r
47 }\r
053e878b 48\r
80c4b236
JF
49 if (IsCpuFeatureSupported (CPU_FEATURE_ACPI)) {\r
50 Status = RegisterCpuFeature (\r
51 "ACPI",\r
fe0c2770 52 ClockModulationGetConfigData,\r
80c4b236
JF
53 ClockModulationSupport,\r
54 ClockModulationInitialize,\r
55 CPU_FEATURE_ACPI,\r
56 CPU_FEATURE_END\r
57 );\r
58 ASSERT_EFI_ERROR (Status);\r
59 }\r
053e878b 60\r
80c4b236
JF
61 if (IsCpuFeatureSupported (CPU_FEATURE_EIST)) {\r
62 Status = RegisterCpuFeature (\r
63 "EIST",\r
64 NULL,\r
65 EistSupport,\r
66 EistInitialize,\r
67 CPU_FEATURE_EIST,\r
68 CPU_FEATURE_END\r
80c4b236
JF
69 );\r
70 ASSERT_EFI_ERROR (Status);\r
71 }\r
053e878b 72\r
80c4b236
JF
73 if (IsCpuFeatureSupported (CPU_FEATURE_FASTSTRINGS)) {\r
74 Status = RegisterCpuFeature (\r
75 "FastStrings",\r
76 NULL,\r
77 NULL,\r
78 FastStringsInitialize,\r
79 CPU_FEATURE_FASTSTRINGS,\r
80 CPU_FEATURE_END\r
81 );\r
82 ASSERT_EFI_ERROR (Status);\r
83 }\r
053e878b 84\r
80c4b236
JF
85 if (IsCpuFeatureSupported (CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER)) {\r
86 Status = RegisterCpuFeature (\r
87 "Lock Feature Control Register",\r
9c90d39b 88 NULL,\r
80c4b236
JF
89 LockFeatureControlRegisterSupport,\r
90 LockFeatureControlRegisterInitialize,\r
91 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER,\r
92 CPU_FEATURE_END\r
93 );\r
94 ASSERT_EFI_ERROR (Status);\r
95 }\r
053e878b 96\r
80c4b236
JF
97 if (IsCpuFeatureSupported (CPU_FEATURE_SMX)) {\r
98 Status = RegisterCpuFeature (\r
99 "SMX",\r
9c90d39b 100 NULL,\r
80c4b236 101 SmxSupport,\r
b1fe2029 102 SmxInitialize,\r
80c4b236 103 CPU_FEATURE_SMX,\r
707e6be7 104 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_THREAD_BEFORE,\r
80c4b236
JF
105 CPU_FEATURE_END\r
106 );\r
107 ASSERT_EFI_ERROR (Status);\r
108 }\r
053e878b 109\r
80c4b236
JF
110 if (IsCpuFeatureSupported (CPU_FEATURE_VMX)) {\r
111 Status = RegisterCpuFeature (\r
112 "VMX",\r
9c90d39b 113 NULL,\r
b1fe2029
ED
114 VmxSupport,\r
115 VmxInitialize,\r
80c4b236 116 CPU_FEATURE_VMX,\r
707e6be7 117 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_THREAD_BEFORE,\r
80c4b236
JF
118 CPU_FEATURE_END\r
119 );\r
120 ASSERT_EFI_ERROR (Status);\r
121 }\r
053e878b 122\r
80c4b236
JF
123 if (IsCpuFeatureSupported (CPU_FEATURE_LIMIT_CPUID_MAX_VAL)) {\r
124 Status = RegisterCpuFeature (\r
125 "Limit CpuId Maximum Value",\r
126 NULL,\r
127 LimitCpuidMaxvalSupport,\r
128 LimitCpuidMaxvalInitialize,\r
129 CPU_FEATURE_LIMIT_CPUID_MAX_VAL,\r
130 CPU_FEATURE_END\r
131 );\r
132 ASSERT_EFI_ERROR (Status);\r
133 }\r
053e878b 134\r
80c4b236
JF
135 if (IsCpuFeatureSupported (CPU_FEATURE_MCE)) {\r
136 Status = RegisterCpuFeature (\r
137 "Machine Check Enable",\r
138 NULL,\r
139 MceSupport,\r
140 MceInitialize,\r
141 CPU_FEATURE_MCE,\r
142 CPU_FEATURE_END\r
143 );\r
144 ASSERT_EFI_ERROR (Status);\r
145 }\r
053e878b 146\r
80c4b236
JF
147 if (IsCpuFeatureSupported (CPU_FEATURE_MCA)) {\r
148 Status = RegisterCpuFeature (\r
149 "Machine Check Architect",\r
150 NULL,\r
151 McaSupport,\r
152 McaInitialize,\r
153 CPU_FEATURE_MCA,\r
154 CPU_FEATURE_END\r
155 );\r
156 ASSERT_EFI_ERROR (Status);\r
157 }\r
053e878b 158\r
80c4b236
JF
159 if (IsCpuFeatureSupported (CPU_FEATURE_MCG_CTL)) {\r
160 Status = RegisterCpuFeature (\r
161 "MCG_CTL",\r
162 NULL,\r
163 McgCtlSupport,\r
164 McgCtlInitialize,\r
165 CPU_FEATURE_MCG_CTL,\r
166 CPU_FEATURE_END\r
167 );\r
168 ASSERT_EFI_ERROR (Status);\r
169 }\r
053e878b 170\r
80c4b236
JF
171 if (IsCpuFeatureSupported (CPU_FEATURE_PENDING_BREAK)) {\r
172 Status = RegisterCpuFeature (\r
173 "Pending Break",\r
174 NULL,\r
175 PendingBreakSupport,\r
176 PendingBreakInitialize,\r
177 CPU_FEATURE_PENDING_BREAK,\r
178 CPU_FEATURE_END\r
179 );\r
180 ASSERT_EFI_ERROR (Status);\r
181 }\r
053e878b 182\r
80c4b236
JF
183 if (IsCpuFeatureSupported (CPU_FEATURE_C1E)) {\r
184 Status = RegisterCpuFeature (\r
185 "C1E",\r
186 NULL,\r
187 C1eSupport,\r
188 C1eInitialize,\r
189 CPU_FEATURE_C1E,\r
190 CPU_FEATURE_END\r
191 );\r
192 ASSERT_EFI_ERROR (Status);\r
193 }\r
053e878b 194\r
80c4b236
JF
195 if (IsCpuFeatureSupported (CPU_FEATURE_X2APIC)) {\r
196 Status = RegisterCpuFeature (\r
197 "X2Apic",\r
6661abb6 198 X2ApicGetConfigData,\r
80c4b236
JF
199 X2ApicSupport,\r
200 X2ApicInitialize,\r
201 CPU_FEATURE_X2APIC,\r
202 CPU_FEATURE_END\r
203 );\r
204 ASSERT_EFI_ERROR (Status);\r
205 }\r
053e878b 206\r
ee1d736a
ED
207 if (IsCpuFeatureSupported (CPU_FEATURE_PPIN)) {\r
208 Status = RegisterCpuFeature (\r
209 "PPIN",\r
84a45947 210 PpinGetConfigData,\r
ee1d736a
ED
211 PpinSupport,\r
212 PpinInitialize,\r
213 CPU_FEATURE_PPIN,\r
214 CPU_FEATURE_END\r
215 );\r
216 ASSERT_EFI_ERROR (Status);\r
217 }\r
053e878b 218\r
3d6275c1
ED
219 if (IsCpuFeatureSupported (CPU_FEATURE_LMCE)) {\r
220 Status = RegisterCpuFeature (\r
221 "LMCE",\r
9c90d39b 222 NULL,\r
3d6275c1
ED
223 LmceSupport,\r
224 LmceInitialize,\r
225 CPU_FEATURE_LMCE,\r
707e6be7 226 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_THREAD_BEFORE,\r
3d6275c1
ED
227 CPU_FEATURE_END\r
228 );\r
229 ASSERT_EFI_ERROR (Status);\r
230 }\r
053e878b 231\r
bc230057
ED
232 if (IsCpuFeatureSupported (CPU_FEATURE_PROC_TRACE)) {\r
233 Status = RegisterCpuFeature (\r
234 "Proc Trace",\r
235 ProcTraceGetConfigData,\r
236 ProcTraceSupport,\r
237 ProcTraceInitialize,\r
238 CPU_FEATURE_PROC_TRACE,\r
239 CPU_FEATURE_END\r
240 );\r
241 ASSERT_EFI_ERROR (Status);\r
242 }\r
80c4b236
JF
243\r
244 return RETURN_SUCCESS;\r
245}\r