]> git.proxmox.com Git - mirror_edk2.git/blame - UefiCpuPkg/Library/CpuCommonFeaturesLib/CpuCommonFeatures.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / UefiCpuPkg / Library / CpuCommonFeaturesLib / CpuCommonFeatures.h
CommitLineData
80c4b236
JF
1/** @file\r
2 CPU Common features library header file.\r
3\r
01acb06c 4 Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.<BR>\r
0acd8697 5 SPDX-License-Identifier: BSD-2-Clause-Patent\r
80c4b236
JF
6\r
7**/\r
8\r
9#ifndef _CPU_COMMON_FEATURES_H_\r
10#define _CPU_COMMON_FEATURES_H_\r
11\r
12#include <PiDxe.h>\r
13\r
14#include <Library/BaseLib.h>\r
15#include <Library/PcdLib.h>\r
16#include <Library/DebugLib.h>\r
17#include <Library/RegisterCpuFeaturesLib.h>\r
18#include <Library/BaseMemoryLib.h>\r
19#include <Library/MemoryAllocationLib.h>\r
20#include <Library/LocalApicLib.h>\r
21\r
01acb06c
RN
22#include <Register/Intel/Cpuid.h>\r
23#include <Register/Intel/Msr.h>\r
80c4b236
JF
24\r
25/**\r
26 Prepares for the data used by CPU feature detection and initialization.\r
27\r
28 @param[in] NumberOfProcessors The number of CPUs in the platform.\r
29\r
30 @return Pointer to a buffer of CPU related configuration data.\r
31\r
32 @note This service could be called by BSP only.\r
33**/\r
34VOID *\r
35EFIAPI\r
36AesniGetConfigData (\r
37 IN UINTN NumberOfProcessors\r
38 );\r
39\r
40/**\r
41 Detects if AESNI feature supported on current processor.\r
42\r
43 @param[in] ProcessorNumber The index of the CPU executing this function.\r
44 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
45 structure for the CPU executing this function.\r
46 @param[in] ConfigData A pointer to the configuration buffer returned\r
47 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
48 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
49 RegisterCpuFeature().\r
50\r
51 @retval TRUE AESNI feature is supported.\r
52 @retval FALSE AESNI feature is not supported.\r
53\r
54 @note This service could be called by BSP/APs.\r
55**/\r
56BOOLEAN\r
57EFIAPI\r
58AesniSupport (\r
59 IN UINTN ProcessorNumber,\r
60 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
61 IN VOID *ConfigData OPTIONAL\r
62 );\r
63\r
64/**\r
65 Initializes AESNI feature to specific state.\r
66\r
67 @param[in] ProcessorNumber The index of the CPU executing this function.\r
68 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
69 structure for the CPU executing this function.\r
70 @param[in] ConfigData A pointer to the configuration buffer returned\r
71 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
72 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
73 RegisterCpuFeature().\r
74 @param[in] State If TRUE, then the AESNI feature must be enabled.\r
75 If FALSE, then the AESNI feature must be disabled.\r
76\r
77 @retval RETURN_SUCCESS AESNI feature is initialized.\r
78\r
79 @note This service could be called by BSP only.\r
80**/\r
81RETURN_STATUS\r
82EFIAPI\r
83AesniInitialize (\r
84 IN UINTN ProcessorNumber,\r
85 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
4ec586b9 86 IN VOID *ConfigData OPTIONAL,\r
80c4b236
JF
87 IN BOOLEAN State\r
88 );\r
89\r
fe0c2770
SZ
90/**\r
91 Prepares for the data used by CPU feature detection and initialization.\r
92\r
93 @param[in] NumberOfProcessors The number of CPUs in the platform.\r
94\r
95 @return Pointer to a buffer of CPU related configuration data.\r
96\r
97 @note This service could be called by BSP only.\r
98**/\r
99VOID *\r
100EFIAPI\r
101ClockModulationGetConfigData (\r
102 IN UINTN NumberOfProcessors\r
103 );\r
104\r
80c4b236
JF
105/**\r
106 Detects if Clock Modulation feature supported on current processor.\r
107\r
108 @param[in] ProcessorNumber The index of the CPU executing this function.\r
109 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
110 structure for the CPU executing this function.\r
111 @param[in] ConfigData A pointer to the configuration buffer returned\r
112 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
113 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
114 RegisterCpuFeature().\r
115\r
116 @retval TRUE Clock Modulation feature is supported.\r
117 @retval FALSE Clock Modulation feature is not supported.\r
118\r
119 @note This service could be called by BSP/APs.\r
120**/\r
121BOOLEAN\r
122EFIAPI\r
123ClockModulationSupport (\r
124 IN UINTN ProcessorNumber,\r
125 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
126 IN VOID *ConfigData OPTIONAL\r
127 );\r
128\r
129/**\r
130 Initializes Clock Modulation feature to specific state.\r
131\r
132 @param[in] ProcessorNumber The index of the CPU executing this function.\r
133 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
134 structure for the CPU executing this function.\r
135 @param[in] ConfigData A pointer to the configuration buffer returned\r
136 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
137 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
138 RegisterCpuFeature().\r
139 @param[in] State If TRUE, then the Clock Modulation feature must be enabled.\r
140 If FALSE, then the Clock Modulation feature must be disabled.\r
141\r
142 @retval RETURN_SUCCESS Clock Modulation feature is initialized.\r
143\r
144 @note This service could be called by BSP only.\r
145**/\r
146RETURN_STATUS\r
147EFIAPI\r
148ClockModulationInitialize (\r
149 IN UINTN ProcessorNumber,\r
150 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
4ec586b9 151 IN VOID *ConfigData OPTIONAL,\r
80c4b236
JF
152 IN BOOLEAN State\r
153 );\r
154\r
155/**\r
156 Detects if Enhanced Intel SpeedStep feature supported on current processor.\r
157\r
158 @param[in] ProcessorNumber The index of the CPU executing this function.\r
159 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
160 structure for the CPU executing this function.\r
161 @param[in] ConfigData A pointer to the configuration buffer returned\r
162 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
163 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
164 RegisterCpuFeature().\r
165\r
166 @retval TRUE Enhanced Intel SpeedStep feature is supported.\r
167 @retval FALSE Enhanced Intel SpeedStep feature is not supported.\r
168\r
169 @note This service could be called by BSP/APs.\r
170**/\r
171BOOLEAN\r
172EFIAPI\r
173EistSupport (\r
174 IN UINTN ProcessorNumber,\r
175 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
176 IN VOID *ConfigData OPTIONAL\r
177 );\r
178\r
179/**\r
180 Initializes Enhanced Intel SpeedStep feature to specific state.\r
181\r
182 @param[in] ProcessorNumber The index of the CPU executing this function.\r
183 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
184 structure for the CPU executing this function.\r
185 @param[in] ConfigData A pointer to the configuration buffer returned\r
186 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
187 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
188 RegisterCpuFeature().\r
189 @param[in] State If TRUE, then the Enhanced Intel SpeedStep feature\r
190 must be enabled.\r
191 If FALSE, then the Enhanced Intel SpeedStep feature\r
192 must be disabled.\r
193\r
194 @retval RETURN_SUCCESS Enhanced Intel SpeedStep feature is initialized.\r
195\r
196 @note This service could be called by BSP only.\r
197**/\r
198RETURN_STATUS\r
199EFIAPI\r
200EistInitialize (\r
201 IN UINTN ProcessorNumber,\r
202 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
4ec586b9 203 IN VOID *ConfigData OPTIONAL,\r
80c4b236
JF
204 IN BOOLEAN State\r
205 );\r
206\r
207/**\r
208 Detects if Execute Disable feature supported on current processor.\r
209\r
210 @param[in] ProcessorNumber The index of the CPU executing this function.\r
211 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
212 structure for the CPU executing this function.\r
213 @param[in] ConfigData A pointer to the configuration buffer returned\r
214 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
215 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
216 RegisterCpuFeature().\r
217\r
218 @retval TRUE Execute Disable feature is supported.\r
219 @retval FALSE Execute Disable feature is not supported.\r
220\r
221 @note This service could be called by BSP/APs.\r
222**/\r
223BOOLEAN\r
224EFIAPI\r
225ExecuteDisableSupport (\r
226 IN UINTN ProcessorNumber,\r
227 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
228 IN VOID *ConfigData OPTIONAL\r
229 );\r
230\r
231/**\r
232 Initializes Execute Disable feature to specific state.\r
233\r
234 @param[in] ProcessorNumber The index of the CPU executing this function.\r
235 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
236 structure for the CPU executing this function.\r
237 @param[in] ConfigData A pointer to the configuration buffer returned\r
238 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
239 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
240 RegisterCpuFeature().\r
241 @param[in] State If TRUE, then the Execute Disable feature must be enabled.\r
242 If FALSE, then the Execute Disable feature must be disabled.\r
243\r
244 @retval RETURN_SUCCESS Execute Disable feature is initialized.\r
245\r
246 @note This service could be called by BSP only.\r
247**/\r
248RETURN_STATUS\r
249EFIAPI\r
250ExecuteDisableInitialize (\r
251 IN UINTN ProcessorNumber,\r
252 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
4ec586b9 253 IN VOID *ConfigData OPTIONAL,\r
80c4b236
JF
254 IN BOOLEAN State\r
255 );\r
256\r
257/**\r
258 Initializes Fast-Strings feature to specific state.\r
259\r
260 @param[in] ProcessorNumber The index of the CPU executing this function.\r
261 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
262 structure for the CPU executing this function.\r
263 @param[in] ConfigData A pointer to the configuration buffer returned\r
264 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
265 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
266 RegisterCpuFeature().\r
267 @param[in] State If TRUE, then the Fast-Strings feature must be enabled.\r
268 If FALSE, then the Fast-Strings feature must be disabled.\r
269\r
270 @retval RETURN_SUCCESS Fast-Strings feature is initialized.\r
271\r
272 @note This service could be called by BSP only.\r
273**/\r
274RETURN_STATUS\r
275EFIAPI\r
276FastStringsInitialize (\r
277 IN UINTN ProcessorNumber,\r
278 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
4ec586b9 279 IN VOID *ConfigData OPTIONAL,\r
80c4b236
JF
280 IN BOOLEAN State\r
281 );\r
282\r
283/**\r
284 Detects if MONITOR/MWAIT feature supported on current processor.\r
285\r
286 @param[in] ProcessorNumber The index of the CPU executing this function.\r
287 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
288 structure for the CPU executing this function.\r
289 @param[in] ConfigData A pointer to the configuration buffer returned\r
290 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
291 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
292 RegisterCpuFeature().\r
293\r
294 @retval TRUE MONITOR/MWAIT feature is supported.\r
295 @retval FALSE MONITOR/MWAIT feature is not supported.\r
296\r
297 @note This service could be called by BSP/APs.\r
298**/\r
299BOOLEAN\r
300EFIAPI\r
301MonitorMwaitSupport (\r
302 IN UINTN ProcessorNumber,\r
303 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
304 IN VOID *ConfigData OPTIONAL\r
305 );\r
306\r
307/**\r
308 Initializes MONITOR/MWAIT feature to specific state.\r
309\r
310 @param[in] ProcessorNumber The index of the CPU executing this function.\r
311 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
312 structure for the CPU executing this function.\r
313 @param[in] ConfigData A pointer to the configuration buffer returned\r
314 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
315 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
316 RegisterCpuFeature().\r
317 @param[in] State If TRUE, then the MONITOR/MWAIT feature must be enabled.\r
318 If FALSE, then the MONITOR/MWAIT feature must be disabled.\r
319\r
320 @retval RETURN_SUCCESS MONITOR/MWAIT feature is initialized.\r
321\r
322 @note This service could be called by BSP only.\r
323**/\r
324RETURN_STATUS\r
325EFIAPI\r
326MonitorMwaitInitialize (\r
327 IN UINTN ProcessorNumber,\r
328 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
4ec586b9 329 IN VOID *ConfigData OPTIONAL,\r
80c4b236
JF
330 IN BOOLEAN State\r
331 );\r
332\r
333/**\r
334 Detects if VMX feature supported on current processor.\r
335\r
336 @param[in] ProcessorNumber The index of the CPU executing this function.\r
337 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
338 structure for the CPU executing this function.\r
339 @param[in] ConfigData A pointer to the configuration buffer returned\r
340 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
341 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
342 RegisterCpuFeature().\r
343\r
344 @retval TRUE VMX feature is supported.\r
345 @retval FALSE VMX feature is not supported.\r
346\r
347 @note This service could be called by BSP/APs.\r
348**/\r
349BOOLEAN\r
350EFIAPI\r
351VmxSupport (\r
352 IN UINTN ProcessorNumber,\r
353 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
354 IN VOID *ConfigData OPTIONAL\r
355 );\r
356\r
357/**\r
b1fe2029 358 Initializes VMX feature to specific state.\r
80c4b236
JF
359\r
360 @param[in] ProcessorNumber The index of the CPU executing this function.\r
361 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
362 structure for the CPU executing this function.\r
363 @param[in] ConfigData A pointer to the configuration buffer returned\r
364 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
365 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
366 RegisterCpuFeature().\r
b1fe2029
ED
367 @param[in] State If TRUE, then the VMX feature must be enabled.\r
368 If FALSE, then the VMX feature must be disabled.\r
80c4b236 369\r
b1fe2029 370 @retval RETURN_SUCCESS VMX feature is initialized.\r
80c4b236
JF
371\r
372 @note This service could be called by BSP only.\r
373**/\r
374RETURN_STATUS\r
375EFIAPI\r
b1fe2029 376VmxInitialize (\r
80c4b236
JF
377 IN UINTN ProcessorNumber,\r
378 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
4ec586b9 379 IN VOID *ConfigData OPTIONAL,\r
80c4b236
JF
380 IN BOOLEAN State\r
381 );\r
382\r
383/**\r
384 Detects if Lock Feature Control Register feature supported on current processor.\r
385\r
386 @param[in] ProcessorNumber The index of the CPU executing this function.\r
387 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
388 structure for the CPU executing this function.\r
389 @param[in] ConfigData A pointer to the configuration buffer returned\r
390 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
391 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
392 RegisterCpuFeature().\r
393\r
394 @retval TRUE Lock Feature Control Register feature is supported.\r
395 @retval FALSE Lock Feature Control Register feature is not supported.\r
396\r
397 @note This service could be called by BSP/APs.\r
398**/\r
399BOOLEAN\r
400EFIAPI\r
401LockFeatureControlRegisterSupport (\r
402 IN UINTN ProcessorNumber,\r
403 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
404 IN VOID *ConfigData OPTIONAL\r
405 );\r
406\r
407/**\r
408 Initializes Lock Feature Control Register feature to specific state.\r
409\r
410 @param[in] ProcessorNumber The index of the CPU executing this function.\r
411 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
412 structure for the CPU executing this function.\r
413 @param[in] ConfigData A pointer to the configuration buffer returned\r
414 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
415 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
416 RegisterCpuFeature().\r
417 @param[in] State If TRUE, then the Lock Feature Control Register feature must be enabled.\r
418 If FALSE, then the Lock Feature Control Register feature must be disabled.\r
419\r
420 @retval RETURN_SUCCESS Lock Feature Control Register feature is initialized.\r
421\r
422 @note This service could be called by BSP only.\r
423**/\r
424RETURN_STATUS\r
425EFIAPI\r
426LockFeatureControlRegisterInitialize (\r
427 IN UINTN ProcessorNumber,\r
428 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
4ec586b9 429 IN VOID *ConfigData OPTIONAL,\r
80c4b236
JF
430 IN BOOLEAN State\r
431 );\r
432\r
433/**\r
434 Detects if SMX feature supported on current processor.\r
435\r
436 @param[in] ProcessorNumber The index of the CPU executing this function.\r
437 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
438 structure for the CPU executing this function.\r
439 @param[in] ConfigData A pointer to the configuration buffer returned\r
440 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
441 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
442 RegisterCpuFeature().\r
443\r
444 @retval TRUE SMX feature is supported.\r
445 @retval FALSE SMX feature is not supported.\r
446\r
447 @note This service could be called by BSP/APs.\r
448**/\r
449BOOLEAN\r
450EFIAPI\r
451SmxSupport (\r
452 IN UINTN ProcessorNumber,\r
453 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
454 IN VOID *ConfigData OPTIONAL\r
455 );\r
456\r
457/**\r
b1fe2029 458 Initializes SMX feature to specific state.\r
80c4b236
JF
459\r
460 @param[in] ProcessorNumber The index of the CPU executing this function.\r
461 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
462 structure for the CPU executing this function.\r
463 @param[in] ConfigData A pointer to the configuration buffer returned\r
464 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
465 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
466 RegisterCpuFeature().\r
b1fe2029
ED
467 @param[in] State If TRUE, then SMX feature must be enabled.\r
468 If FALSE, then SMX feature must be disabled.\r
80c4b236 469\r
b1fe2029
ED
470 @retval RETURN_SUCCESS SMX feature is initialized.\r
471 @retval RETURN_UNSUPPORTED VMX not initialized.\r
80c4b236
JF
472\r
473 @note This service could be called by BSP only.\r
474**/\r
475RETURN_STATUS\r
476EFIAPI\r
b1fe2029 477SmxInitialize (\r
80c4b236
JF
478 IN UINTN ProcessorNumber,\r
479 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
4ec586b9 480 IN VOID *ConfigData OPTIONAL,\r
80c4b236
JF
481 IN BOOLEAN State\r
482 );\r
483\r
484/**\r
485 Detects if LimitCpuidMaxval feature supported on current processor.\r
486\r
487 @param[in] ProcessorNumber The index of the CPU executing this function.\r
488 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
489 structure for the CPU executing this function.\r
490 @param[in] ConfigData A pointer to the configuration buffer returned\r
491 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
492 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
493 RegisterCpuFeature().\r
494\r
495 @retval TRUE LimitCpuidMaxval feature is supported.\r
496 @retval FALSE LimitCpuidMaxval feature is not supported.\r
497\r
498 @note This service could be called by BSP/APs.\r
499**/\r
500BOOLEAN\r
501EFIAPI\r
502LimitCpuidMaxvalSupport (\r
503 IN UINTN ProcessorNumber,\r
504 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
505 IN VOID *ConfigData OPTIONAL\r
506 );\r
507\r
508/**\r
509 Initializes LimitCpuidMaxval feature to specific state.\r
510\r
511 @param[in] ProcessorNumber The index of the CPU executing this function.\r
512 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
513 structure for the CPU executing this function.\r
514 @param[in] ConfigData A pointer to the configuration buffer returned\r
515 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
516 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
517 RegisterCpuFeature().\r
518 @param[in] State If TRUE, then the LimitCpuidMaxval feature must be enabled.\r
519 If FALSE, then the LimitCpuidMaxval feature must be disabled.\r
520\r
521 @retval RETURN_SUCCESS LimitCpuidMaxval feature is initialized.\r
522\r
523 @note This service could be called by BSP only.\r
524**/\r
525RETURN_STATUS\r
526EFIAPI\r
527LimitCpuidMaxvalInitialize (\r
528 IN UINTN ProcessorNumber,\r
529 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
4ec586b9 530 IN VOID *ConfigData OPTIONAL,\r
80c4b236
JF
531 IN BOOLEAN State\r
532 );\r
533\r
534/**\r
535 Detects if Machine Check Exception feature supported on current processor.\r
536\r
537 @param[in] ProcessorNumber The index of the CPU executing this function.\r
538 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
539 structure for the CPU executing this function.\r
540 @param[in] ConfigData A pointer to the configuration buffer returned\r
541 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
542 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
543 RegisterCpuFeature().\r
544\r
545 @retval TRUE Machine Check Exception feature is supported.\r
546 @retval FALSE Machine Check Exception feature is not supported.\r
547\r
548 @note This service could be called by BSP/APs.\r
549**/\r
550BOOLEAN\r
551EFIAPI\r
552MceSupport (\r
553 IN UINTN ProcessorNumber,\r
554 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
555 IN VOID *ConfigData OPTIONAL\r
556 );\r
557\r
558/**\r
559 Initializes Machine Check Exception feature to specific state.\r
560\r
561 @param[in] ProcessorNumber The index of the CPU executing this function.\r
562 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
563 structure for the CPU executing this function.\r
564 @param[in] ConfigData A pointer to the configuration buffer returned\r
565 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
566 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
567 RegisterCpuFeature().\r
568 @param[in] State If TRUE, then the Machine Check Exception feature must be enabled.\r
569 If FALSE, then the Machine Check Exception feature must be disabled.\r
570\r
571 @retval RETURN_SUCCESS Machine Check Exception feature is initialized.\r
572\r
573 @note This service could be called by BSP only.\r
574**/\r
575RETURN_STATUS\r
576EFIAPI\r
577MceInitialize (\r
578 IN UINTN ProcessorNumber,\r
579 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
4ec586b9 580 IN VOID *ConfigData OPTIONAL,\r
80c4b236
JF
581 IN BOOLEAN State\r
582 );\r
583\r
584/**\r
585 Detects if Machine Check Architecture feature supported on current processor.\r
586\r
587 @param[in] ProcessorNumber The index of the CPU executing this function.\r
588 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
589 structure for the CPU executing this function.\r
590 @param[in] ConfigData A pointer to the configuration buffer returned\r
591 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
592 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
593 RegisterCpuFeature().\r
594\r
595 @retval TRUE Machine Check Architecture feature is supported.\r
596 @retval FALSE Machine Check Architecture feature is not supported.\r
597\r
598 @note This service could be called by BSP/APs.\r
599**/\r
600BOOLEAN\r
601EFIAPI\r
602McaSupport (\r
603 IN UINTN ProcessorNumber,\r
604 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
605 IN VOID *ConfigData OPTIONAL\r
606 );\r
607\r
608/**\r
609 Initializes Machine Check Architecture feature to specific state.\r
610\r
611 @param[in] ProcessorNumber The index of the CPU executing this function.\r
612 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
613 structure for the CPU executing this function.\r
614 @param[in] ConfigData A pointer to the configuration buffer returned\r
615 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
616 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
617 RegisterCpuFeature().\r
618 @param[in] State If TRUE, then the Machine Check Architecture feature must be enabled.\r
619 If FALSE, then the Machine Check Architecture feature must be disabled.\r
620\r
621 @retval RETURN_SUCCESS Machine Check Architecture feature is initialized.\r
622\r
623 @note This service could be called by BSP only.\r
624**/\r
625RETURN_STATUS\r
626EFIAPI\r
627McaInitialize (\r
628 IN UINTN ProcessorNumber,\r
629 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
4ec586b9 630 IN VOID *ConfigData OPTIONAL,\r
80c4b236
JF
631 IN BOOLEAN State\r
632 );\r
633\r
634/**\r
635 Detects if IA32_MCG_CTL feature supported on current processor.\r
636\r
637 @param[in] ProcessorNumber The index of the CPU executing this function.\r
638 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
639 structure for the CPU executing this function.\r
640 @param[in] ConfigData A pointer to the configuration buffer returned\r
641 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
642 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
643 RegisterCpuFeature().\r
644\r
645 @retval TRUE IA32_MCG_CTL feature is supported.\r
646 @retval FALSE IA32_MCG_CTL feature is not supported.\r
647\r
648 @note This service could be called by BSP/APs.\r
649**/\r
650BOOLEAN\r
651EFIAPI\r
652McgCtlSupport (\r
653 IN UINTN ProcessorNumber,\r
654 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
655 IN VOID *ConfigData OPTIONAL\r
656 );\r
657\r
658/**\r
659 Initializes IA32_MCG_CTL feature to specific state.\r
660\r
661 @param[in] ProcessorNumber The index of the CPU executing this function.\r
662 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
663 structure for the CPU executing this function.\r
664 @param[in] ConfigData A pointer to the configuration buffer returned\r
665 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
666 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
667 RegisterCpuFeature().\r
668 @param[in] State If TRUE, then the IA32_MCG_CTL feature must be enabled.\r
669 If FALSE, then the IA32_MCG_CTL feature must be disabled.\r
670\r
671 @retval RETURN_SUCCESS IA32_MCG_CTL feature is initialized.\r
672\r
673 @note This service could be called by BSP only.\r
674**/\r
675RETURN_STATUS\r
676EFIAPI\r
677McgCtlInitialize (\r
678 IN UINTN ProcessorNumber,\r
679 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
4ec586b9 680 IN VOID *ConfigData OPTIONAL,\r
80c4b236
JF
681 IN BOOLEAN State\r
682 );\r
683\r
684/**\r
685 Detects if Pending Break feature supported on current processor.\r
686\r
687 @param[in] ProcessorNumber The index of the CPU executing this function.\r
688 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
689 structure for the CPU executing this function.\r
690 @param[in] ConfigData A pointer to the configuration buffer returned\r
691 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
692 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
693 RegisterCpuFeature().\r
694\r
695 @retval TRUE Pending Break feature is supported.\r
696 @retval FALSE Pending Break feature is not supported.\r
697\r
698 @note This service could be called by BSP/APs.\r
699**/\r
700BOOLEAN\r
701EFIAPI\r
702PendingBreakSupport (\r
703 IN UINTN ProcessorNumber,\r
704 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
705 IN VOID *ConfigData OPTIONAL\r
706 );\r
707\r
708/**\r
709 Initializes Pending Break feature to specific state.\r
710\r
711 @param[in] ProcessorNumber The index of the CPU executing this function.\r
712 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
713 structure for the CPU executing this function.\r
714 @param[in] ConfigData A pointer to the configuration buffer returned\r
715 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
716 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
717 RegisterCpuFeature().\r
718 @param[in] State If TRUE, then the Pending Break feature must be enabled.\r
719 If FALSE, then the Pending Break feature must be disabled.\r
720\r
721 @retval RETURN_SUCCESS Pending Break feature is initialized.\r
722\r
723 @note This service could be called by BSP only.\r
724**/\r
725RETURN_STATUS\r
726EFIAPI\r
727PendingBreakInitialize (\r
728 IN UINTN ProcessorNumber,\r
729 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
4ec586b9 730 IN VOID *ConfigData OPTIONAL,\r
80c4b236
JF
731 IN BOOLEAN State\r
732 );\r
733\r
734/**\r
735 Detects if C1E feature supported on current processor.\r
736\r
737 @param[in] ProcessorNumber The index of the CPU executing this function.\r
738 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
739 structure for the CPU executing this function.\r
740 @param[in] ConfigData A pointer to the configuration buffer returned\r
741 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
742 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
743 RegisterCpuFeature().\r
744\r
745 @retval TRUE C1E feature is supported.\r
746 @retval FALSE C1E feature is not supported.\r
747\r
748 @note This service could be called by BSP/APs.\r
749**/\r
750BOOLEAN\r
751EFIAPI\r
752C1eSupport (\r
753 IN UINTN ProcessorNumber,\r
754 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
755 IN VOID *ConfigData OPTIONAL\r
756 );\r
757\r
758/**\r
759 Initializes C1E feature to specific state.\r
760\r
761 @param[in] ProcessorNumber The index of the CPU executing this function.\r
762 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
763 structure for the CPU executing this function.\r
764 @param[in] ConfigData A pointer to the configuration buffer returned\r
765 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
766 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
767 RegisterCpuFeature().\r
768 @param[in] State If TRUE, then the C1E feature must be enabled.\r
769 If FALSE, then the C1E feature must be disabled.\r
770\r
771 @retval RETURN_SUCCESS C1E feature is initialized.\r
772\r
773 @note This service could be called by BSP only.\r
774**/\r
775RETURN_STATUS\r
776EFIAPI\r
777C1eInitialize (\r
778 IN UINTN ProcessorNumber,\r
779 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
4ec586b9 780 IN VOID *ConfigData OPTIONAL,\r
80c4b236
JF
781 IN BOOLEAN State\r
782 );\r
783\r
6661abb6
JF
784/**\r
785 Prepares for the data used by CPU feature detection and initialization.\r
786\r
787 @param[in] NumberOfProcessors The number of CPUs in the platform.\r
788\r
789 @return Pointer to a buffer of CPU related configuration data.\r
790\r
791 @note This service could be called by BSP only.\r
792**/\r
793VOID *\r
794EFIAPI\r
795X2ApicGetConfigData (\r
796 IN UINTN NumberOfProcessors\r
797 );\r
798\r
80c4b236
JF
799/**\r
800 Detects if X2Apci feature supported on current processor.\r
801\r
802 Detect if X2Apci has been already enabled.\r
803\r
804 @param[in] ProcessorNumber The index of the CPU executing this function.\r
805 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
806 structure for the CPU executing this function.\r
807 @param[in] ConfigData A pointer to the configuration buffer returned\r
808 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
809 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
810 RegisterCpuFeature().\r
811\r
812 @retval TRUE X2Apci feature is supported.\r
813 @retval FALSE X2Apci feature is not supported.\r
814\r
815 @note This service could be called by BSP/APs.\r
816**/\r
817BOOLEAN\r
818EFIAPI\r
819X2ApicSupport (\r
820 IN UINTN ProcessorNumber,\r
821 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
822 IN VOID *ConfigData OPTIONAL\r
823 );\r
824\r
825/**\r
826 Initializes X2Apci feature to specific state.\r
827\r
828 @param[in] ProcessorNumber The index of the CPU executing this function.\r
829 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
830 structure for the CPU executing this function.\r
831 @param[in] ConfigData A pointer to the configuration buffer returned\r
832 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
833 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
834 RegisterCpuFeature().\r
835 @param[in] State If TRUE, then the X2Apci feature must be enabled.\r
836 If FALSE, then the X2Apci feature must be disabled.\r
837\r
838 @retval RETURN_SUCCESS X2Apci feature is initialized.\r
839\r
840 @note This service could be called by BSP only.\r
841**/\r
842RETURN_STATUS\r
843EFIAPI\r
844X2ApicInitialize (\r
845 IN UINTN ProcessorNumber,\r
846 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
4ec586b9 847 IN VOID *ConfigData OPTIONAL,\r
80c4b236
JF
848 IN BOOLEAN State\r
849 );\r
850\r
84a45947
SZ
851/**\r
852 Prepares for the data used by CPU feature detection and initialization.\r
853\r
854 @param[in] NumberOfProcessors The number of CPUs in the platform.\r
855\r
856 @return Pointer to a buffer of CPU related configuration data.\r
857\r
858 @note This service could be called by BSP only.\r
859**/\r
860VOID *\r
861EFIAPI\r
862PpinGetConfigData (\r
053e878b 863 IN UINTN NumberOfProcessors\r
84a45947
SZ
864 );\r
865\r
ee1d736a 866/**\r
7367cc6c 867 Detects if Protected Processor Inventory Number feature supported on current\r
ee1d736a
ED
868 processor.\r
869\r
870 @param[in] ProcessorNumber The index of the CPU executing this function.\r
871 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
872 structure for the CPU executing this function.\r
873 @param[in] ConfigData A pointer to the configuration buffer returned\r
874 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
875 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
876 RegisterCpuFeature().\r
877\r
91ec57c4
MH
878 @retval TRUE Protected Processor Inventory Number feature is supported.\r
879 @retval FALSE Protected Processor Inventory Number feature is not supported.\r
ee1d736a
ED
880\r
881 @note This service could be called by BSP/APs.\r
882**/\r
883BOOLEAN\r
884EFIAPI\r
885PpinSupport (\r
886 IN UINTN ProcessorNumber,\r
887 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
888 IN VOID *ConfigData OPTIONAL\r
889 );\r
890\r
891/**\r
892 Initializes Protected Processor Inventory Number feature to specific state.\r
893\r
894 @param[in] ProcessorNumber The index of the CPU executing this function.\r
895 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
896 structure for the CPU executing this function.\r
897 @param[in] ConfigData A pointer to the configuration buffer returned\r
898 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
899 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
900 RegisterCpuFeature().\r
7367cc6c 901 @param[in] State If TRUE, then the Protected Processor Inventory\r
ee1d736a 902 Number feature must be enabled.\r
7367cc6c 903 If FALSE, then the Protected Processor Inventory\r
ee1d736a
ED
904 Number feature must be disabled.\r
905\r
7367cc6c 906 @retval RETURN_SUCCESS Protected Processor Inventory Number feature is\r
ee1d736a 907 initialized.\r
7367cc6c 908 @retval RETURN_DEVICE_ERROR Device can't change state because it has been\r
ee1d736a
ED
909 locked.\r
910\r
911**/\r
912RETURN_STATUS\r
913EFIAPI\r
914PpinInitialize (\r
915 IN UINTN ProcessorNumber,\r
916 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
4ec586b9 917 IN VOID *ConfigData OPTIONAL,\r
ee1d736a
ED
918 IN BOOLEAN State\r
919 );\r
920\r
3d6275c1 921/**\r
7367cc6c 922 Detects if Local machine check exception feature supported on current\r
3d6275c1
ED
923 processor.\r
924\r
925 @param[in] ProcessorNumber The index of the CPU executing this function.\r
926 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
927 structure for the CPU executing this function.\r
928 @param[in] ConfigData A pointer to the configuration buffer returned\r
929 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
930 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
931 RegisterCpuFeature().\r
932\r
933 @retval TRUE Local machine check exception feature is supported.\r
934 @retval FALSE Local machine check exception feature is not supported.\r
935\r
936 @note This service could be called by BSP/APs.\r
937**/\r
938BOOLEAN\r
939EFIAPI\r
940LmceSupport (\r
941 IN UINTN ProcessorNumber,\r
942 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
943 IN VOID *ConfigData OPTIONAL\r
944 );\r
945\r
946/**\r
947 Initializes Local machine check exception feature to specific state.\r
948\r
949 @param[in] ProcessorNumber The index of the CPU executing this function.\r
950 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
951 structure for the CPU executing this function.\r
952 @param[in] ConfigData A pointer to the configuration buffer returned\r
953 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
954 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
955 RegisterCpuFeature().\r
956 @param[in] State If TRUE, then the Local machine check exception\r
957 feature must be enabled.\r
958 If FALSE, then the Local machine check exception\r
959 feature must be disabled.\r
960\r
961 @retval RETURN_SUCCESS Local machine check exception feature is initialized.\r
962\r
963**/\r
964RETURN_STATUS\r
965EFIAPI\r
966LmceInitialize (\r
967 IN UINTN ProcessorNumber,\r
968 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
4ec586b9 969 IN VOID *ConfigData OPTIONAL,\r
3d6275c1
ED
970 IN BOOLEAN State\r
971 );\r
972\r
bc230057
ED
973/**\r
974 Prepares for the data used by CPU feature detection and initialization.\r
975\r
976 @param[in] NumberOfProcessors The number of CPUs in the platform.\r
977\r
978 @return Pointer to a buffer of CPU related configuration data.\r
979\r
980 @note This service could be called by BSP only.\r
981**/\r
982VOID *\r
983EFIAPI\r
984ProcTraceGetConfigData (\r
985 IN UINTN NumberOfProcessors\r
986 );\r
987\r
988/**\r
989 Detects if Intel Processor Trace feature supported on current processor.\r
990\r
991 @param[in] ProcessorNumber The index of the CPU executing this function.\r
992 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
993 structure for the CPU executing this function.\r
994 @param[in] ConfigData A pointer to the configuration buffer returned\r
995 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
996 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
997 RegisterCpuFeature().\r
998\r
999 @retval TRUE Processor Trace feature is supported.\r
1000 @retval FALSE Processor Trace feature is not supported.\r
1001\r
1002 @note This service could be called by BSP/APs.\r
1003**/\r
1004BOOLEAN\r
1005EFIAPI\r
1006ProcTraceSupport (\r
1007 IN UINTN ProcessorNumber,\r
1008 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
1009 IN VOID *ConfigData OPTIONAL\r
1010 );\r
1011\r
1012/**\r
1013 Initializes Intel Processor Trace feature to specific state.\r
1014\r
1015 @param[in] ProcessorNumber The index of the CPU executing this function.\r
1016 @param[in] CpuInfo A pointer to the REGISTER_CPU_FEATURE_INFORMATION\r
1017 structure for the CPU executing this function.\r
1018 @param[in] ConfigData A pointer to the configuration buffer returned\r
1019 by CPU_FEATURE_GET_CONFIG_DATA. NULL if\r
1020 CPU_FEATURE_GET_CONFIG_DATA was not provided in\r
1021 RegisterCpuFeature().\r
1022 @param[in] State If TRUE, then the Processor Trace feature must be\r
1023 enabled.\r
1024 If FALSE, then the Processor Trace feature must be\r
1025 disabled.\r
1026\r
1027 @retval RETURN_SUCCESS Intel Processor Trace feature is initialized.\r
1028\r
1029**/\r
1030RETURN_STATUS\r
1031EFIAPI\r
1032ProcTraceInitialize (\r
1033 IN UINTN ProcessorNumber,\r
1034 IN REGISTER_CPU_FEATURE_INFORMATION *CpuInfo,\r
4ec586b9 1035 IN VOID *ConfigData OPTIONAL,\r
bc230057
ED
1036 IN BOOLEAN State\r
1037 );\r
1038\r
80c4b236 1039#endif\r