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