]> git.proxmox.com Git - mirror_edk2.git/blame - UefiCpuPkg/CpuFeatures/CpuFeaturesDxe.c
StandaloneMmPkg: Apply uncrustify changes
[mirror_edk2.git] / UefiCpuPkg / CpuFeatures / CpuFeaturesDxe.c
CommitLineData
80c4b236
JF
1/** @file\r
2 CPU Features DXE driver to initialize CPU features.\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#include <PiDxe.h>\r
10\r
11#include <Library/BaseLib.h>\r
12#include <Library/DebugLib.h>\r
13#include <Library/UefiLib.h>\r
14#include <Library/UefiBootServicesTableLib.h>\r
15#include <Library/RegisterCpuFeaturesLib.h>\r
bf5a306a 16#include <Library/HobLib.h>\r
80c4b236
JF
17\r
18#include <Protocol/SmmConfiguration.h>\r
19#include <Guid/CpuFeaturesInitDone.h>\r
20\r
21\r
22/**\r
23 Worker function to perform CPU feature initialization.\r
24\r
25**/\r
26VOID\r
27CpuFeaturesInitializeWorker (\r
28 VOID\r
29 )\r
30{\r
31 EFI_STATUS Status;\r
32 EFI_HANDLE Handle;\r
33\r
34 CpuFeaturesDetect ();\r
35\r
36 CpuFeaturesInitialize ();\r
37\r
38 //\r
39 // Install CPU Features Init Done Protocol\r
40 //\r
41 Handle = NULL;\r
42 Status = gBS->InstallProtocolInterface (\r
43 &Handle,\r
44 &gEdkiiCpuFeaturesInitDoneGuid,\r
45 EFI_NATIVE_INTERFACE,\r
46 NULL\r
47 );\r
48 ASSERT_EFI_ERROR (Status);\r
49}\r
50\r
51/**\r
52 Event notification that initialize CPU features when gEfiSmmConfigurationProtocol installs.\r
53\r
54 @param[in] Event The Event that is being processed, not used.\r
55 @param[in] Context Event Context, not used.\r
56**/\r
57VOID\r
58EFIAPI\r
59SmmConfigurationEventNotify (\r
60 IN EFI_EVENT Event,\r
61 IN VOID *Context\r
62 )\r
63{\r
64 EFI_STATUS Status;\r
65 EFI_SMM_CONFIGURATION_PROTOCOL *SmmConfiguration;\r
66\r
67 //\r
68 // Make sure this notification is for this handler\r
69 //\r
70 Status = gBS->LocateProtocol (&gEfiSmmConfigurationProtocolGuid, NULL, (VOID **)&SmmConfiguration);\r
71 if (EFI_ERROR (Status)) {\r
72 return;\r
73 }\r
74\r
75 CpuFeaturesInitializeWorker ();\r
76}\r
77\r
78/**\r
79 CPU Features driver entry point function.\r
80\r
81 If PcdCpuFeaturesInitAfterSmmRelocation is TRUE, it will register one\r
82 SMM Configuration Protocol notify function to perform CPU features\r
83 initialization. Otherwise, it will perform CPU features initialization\r
84 directly.\r
85\r
86 @param ImageHandle Image handle this driver.\r
87 @param SystemTable Pointer to the System Table.\r
88\r
89 @retval EFI_SUCCESS CPU Features is initialized successfully.\r
90**/\r
91EFI_STATUS\r
92EFIAPI\r
93CpuFeaturesDxeInitialize (\r
94 IN EFI_HANDLE ImageHandle,\r
95 IN EFI_SYSTEM_TABLE *SystemTable\r
96 )\r
97{\r
98 VOID *Registration;\r
bf5a306a
ED
99 EFI_STATUS Status;\r
100 EFI_HANDLE Handle;\r
101\r
102 if (GetFirstGuidHob (&gEdkiiCpuFeaturesInitDoneGuid) != NULL) {\r
103 //\r
7367cc6c
LG
104 // Try to find HOB first. This HOB exist means CPU features have\r
105 // been initialized by CpuFeaturesPei driver, just install\r
bf5a306a
ED
106 // gEdkiiCpuFeaturesInitDoneGuid.\r
107 //\r
108 Handle = NULL;\r
109 Status = gBS->InstallProtocolInterface (\r
110 &Handle,\r
111 &gEdkiiCpuFeaturesInitDoneGuid,\r
112 EFI_NATIVE_INTERFACE,\r
113 NULL\r
114 );\r
115 ASSERT_EFI_ERROR (Status);\r
116 return Status;\r
117 }\r
80c4b236
JF
118\r
119 if (PcdGetBool (PcdCpuFeaturesInitAfterSmmRelocation)) {\r
120 //\r
121 // Install notification callback on SMM Configuration Protocol\r
122 //\r
123 EfiCreateProtocolNotifyEvent (\r
124 &gEfiSmmConfigurationProtocolGuid,\r
125 TPL_CALLBACK,\r
126 SmmConfigurationEventNotify,\r
127 NULL,\r
128 &Registration\r
129 );\r
130 } else {\r
131 CpuFeaturesInitializeWorker ();\r
132 }\r
133\r
134 return EFI_SUCCESS;\r
135}\r
136\r