]> git.proxmox.com Git - mirror_edk2.git/blame - UefiCpuPkg/Library/CpuCommonFeaturesLib/CpuCommonFeaturesLib.c
UefiCpuPkg: Enable Processor Trace feature.
[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
5 Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
6 This program and the accompanying materials\r
7 are licensed and made available under the terms and conditions of the BSD License\r
8 which accompanies this distribution. The full text of the license may be found at\r
9 http://opensource.org/licenses/bsd-license.php\r
10\r
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13\r
14**/\r
15\r
16#include "CpuCommonFeatures.h"\r
17\r
18/**\r
19 Register CPU features.\r
20\r
21 @retval RETURN_SUCCESS Register successfully\r
22**/\r
23RETURN_STATUS\r
24EFIAPI\r
25CpuCommonFeaturesLibConstructor (\r
26 VOID\r
27 )\r
28{\r
29 RETURN_STATUS Status;\r
30\r
31 if (IsCpuFeatureSupported (CPU_FEATURE_AESNI)) {\r
32 Status = RegisterCpuFeature (\r
33 "AESNI",\r
34 AesniGetConfigData,\r
35 AesniSupport,\r
36 AesniInitialize,\r
37 CPU_FEATURE_AESNI,\r
38 CPU_FEATURE_END\r
39 );\r
40 ASSERT_EFI_ERROR (Status);\r
41 }\r
42 if (IsCpuFeatureSupported (CPU_FEATURE_MWAIT)) {\r
43 Status = RegisterCpuFeature (\r
44 "MWAIT",\r
45 NULL,\r
46 MonitorMwaitSupport,\r
47 MonitorMwaitInitialize,\r
48 CPU_FEATURE_MWAIT,\r
49 CPU_FEATURE_END\r
50 );\r
51 ASSERT_EFI_ERROR (Status);\r
52 }\r
53 if (IsCpuFeatureSupported (CPU_FEATURE_ACPI)) {\r
54 Status = RegisterCpuFeature (\r
55 "ACPI",\r
56 NULL,\r
57 ClockModulationSupport,\r
58 ClockModulationInitialize,\r
59 CPU_FEATURE_ACPI,\r
60 CPU_FEATURE_END\r
61 );\r
62 ASSERT_EFI_ERROR (Status);\r
63 }\r
64 if (IsCpuFeatureSupported (CPU_FEATURE_EIST)) {\r
65 Status = RegisterCpuFeature (\r
66 "EIST",\r
67 NULL,\r
68 EistSupport,\r
69 EistInitialize,\r
70 CPU_FEATURE_EIST,\r
71 CPU_FEATURE_END\r
72 );\r
73 ASSERT_EFI_ERROR (Status);\r
74 }\r
75 if (IsCpuFeatureSupported (CPU_FEATURE_XD)) {\r
76 Status = RegisterCpuFeature (\r
77 "Execute Disable",\r
78 NULL,\r
79 ExecuteDisableSupport,\r
80 ExecuteDisableInitialize,\r
81 CPU_FEATURE_XD,\r
82 CPU_FEATURE_END\r
83 );\r
84 ASSERT_EFI_ERROR (Status);\r
85 }\r
86 if (IsCpuFeatureSupported (CPU_FEATURE_FASTSTRINGS)) {\r
87 Status = RegisterCpuFeature (\r
88 "FastStrings",\r
89 NULL,\r
90 NULL,\r
91 FastStringsInitialize,\r
92 CPU_FEATURE_FASTSTRINGS,\r
93 CPU_FEATURE_END\r
94 );\r
95 ASSERT_EFI_ERROR (Status);\r
96 }\r
97 if (IsCpuFeatureSupported (CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER)) {\r
98 Status = RegisterCpuFeature (\r
99 "Lock Feature Control Register",\r
100 FeatureControlGetConfigData,\r
101 LockFeatureControlRegisterSupport,\r
102 LockFeatureControlRegisterInitialize,\r
103 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER,\r
104 CPU_FEATURE_END\r
105 );\r
106 ASSERT_EFI_ERROR (Status);\r
107 }\r
80c4b236
JF
108 if (IsCpuFeatureSupported (CPU_FEATURE_SMX)) {\r
109 Status = RegisterCpuFeature (\r
110 "SMX",\r
111 FeatureControlGetConfigData,\r
112 SmxSupport,\r
b1fe2029 113 SmxInitialize,\r
80c4b236
JF
114 CPU_FEATURE_SMX,\r
115 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,\r
116 CPU_FEATURE_END\r
117 );\r
118 ASSERT_EFI_ERROR (Status);\r
119 }\r
120 if (IsCpuFeatureSupported (CPU_FEATURE_VMX)) {\r
121 Status = RegisterCpuFeature (\r
122 "VMX",\r
123 FeatureControlGetConfigData,\r
b1fe2029
ED
124 VmxSupport,\r
125 VmxInitialize,\r
80c4b236
JF
126 CPU_FEATURE_VMX,\r
127 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,\r
128 CPU_FEATURE_END\r
129 );\r
130 ASSERT_EFI_ERROR (Status);\r
131 }\r
132 if (IsCpuFeatureSupported (CPU_FEATURE_LIMIT_CPUID_MAX_VAL)) {\r
133 Status = RegisterCpuFeature (\r
134 "Limit CpuId Maximum Value",\r
135 NULL,\r
136 LimitCpuidMaxvalSupport,\r
137 LimitCpuidMaxvalInitialize,\r
138 CPU_FEATURE_LIMIT_CPUID_MAX_VAL,\r
139 CPU_FEATURE_END\r
140 );\r
141 ASSERT_EFI_ERROR (Status);\r
142 }\r
143 if (IsCpuFeatureSupported (CPU_FEATURE_MCE)) {\r
144 Status = RegisterCpuFeature (\r
145 "Machine Check Enable",\r
146 NULL,\r
147 MceSupport,\r
148 MceInitialize,\r
149 CPU_FEATURE_MCE,\r
150 CPU_FEATURE_END\r
151 );\r
152 ASSERT_EFI_ERROR (Status);\r
153 }\r
154 if (IsCpuFeatureSupported (CPU_FEATURE_MCA)) {\r
155 Status = RegisterCpuFeature (\r
156 "Machine Check Architect",\r
157 NULL,\r
158 McaSupport,\r
159 McaInitialize,\r
160 CPU_FEATURE_MCA,\r
161 CPU_FEATURE_END\r
162 );\r
163 ASSERT_EFI_ERROR (Status);\r
164 }\r
165 if (IsCpuFeatureSupported (CPU_FEATURE_MCG_CTL)) {\r
166 Status = RegisterCpuFeature (\r
167 "MCG_CTL",\r
168 NULL,\r
169 McgCtlSupport,\r
170 McgCtlInitialize,\r
171 CPU_FEATURE_MCG_CTL,\r
172 CPU_FEATURE_END\r
173 );\r
174 ASSERT_EFI_ERROR (Status);\r
175 }\r
176 if (IsCpuFeatureSupported (CPU_FEATURE_PENDING_BREAK)) {\r
177 Status = RegisterCpuFeature (\r
178 "Pending Break",\r
179 NULL,\r
180 PendingBreakSupport,\r
181 PendingBreakInitialize,\r
182 CPU_FEATURE_PENDING_BREAK,\r
183 CPU_FEATURE_END\r
184 );\r
185 ASSERT_EFI_ERROR (Status);\r
186 }\r
187 if (IsCpuFeatureSupported (CPU_FEATURE_C1E)) {\r
188 Status = RegisterCpuFeature (\r
189 "C1E",\r
190 NULL,\r
191 C1eSupport,\r
192 C1eInitialize,\r
193 CPU_FEATURE_C1E,\r
194 CPU_FEATURE_END\r
195 );\r
196 ASSERT_EFI_ERROR (Status);\r
197 }\r
198 if (IsCpuFeatureSupported (CPU_FEATURE_X2APIC)) {\r
199 Status = RegisterCpuFeature (\r
200 "X2Apic",\r
6661abb6 201 X2ApicGetConfigData,\r
80c4b236
JF
202 X2ApicSupport,\r
203 X2ApicInitialize,\r
204 CPU_FEATURE_X2APIC,\r
205 CPU_FEATURE_END\r
206 );\r
207 ASSERT_EFI_ERROR (Status);\r
208 }\r
ee1d736a
ED
209 if (IsCpuFeatureSupported (CPU_FEATURE_PPIN)) {\r
210 Status = RegisterCpuFeature (\r
211 "PPIN",\r
212 NULL,\r
213 PpinSupport,\r
214 PpinInitialize,\r
215 CPU_FEATURE_PPIN,\r
216 CPU_FEATURE_END\r
217 );\r
218 ASSERT_EFI_ERROR (Status);\r
219 }\r
3d6275c1
ED
220 if (IsCpuFeatureSupported (CPU_FEATURE_LMCE)) {\r
221 Status = RegisterCpuFeature (\r
222 "LMCE",\r
223 NULL,\r
224 LmceSupport,\r
225 LmceInitialize,\r
226 CPU_FEATURE_LMCE,\r
227 CPU_FEATURE_LOCK_FEATURE_CONTROL_REGISTER | CPU_FEATURE_BEFORE,\r
228 CPU_FEATURE_END\r
229 );\r
230 ASSERT_EFI_ERROR (Status);\r
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
246\r
247\r
248\r