]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseEntry.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdeModulePkg / Universal / HiiDatabaseDxe / HiiDatabaseEntry.c
CommitLineData
93e3992d 1/** @file\r
3cb3f198 2This file contains the entry code to the HII database, which is defined by\r
3UEFI 2.1 specification.\r
93e3992d 4\r
d1102dba 5Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>\r
9d510e61 6SPDX-License-Identifier: BSD-2-Clause-Patent\r
93e3992d 7\r
93e3992d 8**/\r
9\r
93e3992d 10#include "HiiDatabase.h"\r
11\r
12//\r
13// Global variables\r
14//\r
1436aea4
MK
15EFI_EVENT gHiiKeyboardLayoutChanged;\r
16BOOLEAN gExportAfterReadyToBoot = FALSE;\r
93e3992d 17\r
1436aea4 18HII_DATABASE_PRIVATE_DATA mPrivate = {\r
93e3992d 19 HII_DATABASE_PRIVATE_DATA_SIGNATURE,\r
20 {\r
1436aea4
MK
21 (LIST_ENTRY *)NULL,\r
22 (LIST_ENTRY *)NULL\r
93e3992d 23 },\r
24 {\r
1436aea4
MK
25 (LIST_ENTRY *)NULL,\r
26 (LIST_ENTRY *)NULL\r
93e3992d 27 },\r
28 {\r
29 HiiStringToImage,\r
30 HiiStringIdToImage,\r
31 HiiGetGlyph,\r
32 HiiGetFontInfo\r
33 },\r
93e3992d 34 {\r
101a1122
RN
35 HiiNewImage,\r
36 HiiGetImage,\r
37 HiiSetImage,\r
38 HiiDrawImage,\r
39 HiiDrawImageId\r
40 },\r
41 {\r
42 HiiNewImageEx,\r
43 HiiGetImageEx,\r
44 HiiSetImageEx,\r
45 HiiDrawImageEx,\r
46 HiiDrawImageIdEx,\r
47 HiiGetImageInfo\r
93e3992d 48 },\r
93e3992d 49 {\r
50 HiiNewString,\r
51 HiiGetString,\r
52 HiiSetString,\r
53 HiiGetLanguages,\r
54 HiiGetSecondaryLanguages\r
55 },\r
56 {\r
57 HiiNewPackageList,\r
58 HiiRemovePackageList,\r
59 HiiUpdatePackageList,\r
60 HiiListPackageLists,\r
61 HiiExportPackageLists,\r
62 HiiRegisterPackageNotify,\r
63 HiiUnregisterPackageNotify,\r
64 HiiFindKeyboardLayouts,\r
65 HiiGetKeyboardLayout,\r
66 HiiSetKeyboardLayout,\r
67 HiiGetPackageListHandle\r
68 },\r
69 {\r
70 HiiConfigRoutingExtractConfig,\r
71 HiiConfigRoutingExportConfig,\r
813acf3a 72 HiiConfigRoutingRouteConfig,\r
93e3992d 73 HiiBlockToConfig,\r
74 HiiConfigToBlock,\r
75 HiiGetAltCfg\r
76 },\r
87bfeb11
ED
77 {\r
78 EfiConfigKeywordHandlerSetData,\r
79 EfiConfigKeywordHandlerGetData\r
80 },\r
93e3992d 81 {\r
1436aea4
MK
82 (LIST_ENTRY *)NULL,\r
83 (LIST_ENTRY *)NULL\r
93e3992d 84 },\r
85 0,\r
86 {\r
1436aea4
MK
87 (LIST_ENTRY *)NULL,\r
88 (LIST_ENTRY *)NULL\r
93e3992d 89 },\r
1436aea4 90 EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK),\r
93e3992d 91 {\r
92 0x00000000,\r
93 0x0000,\r
94 0x0000,\r
1436aea4 95 { 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00 }\r
93e3992d 96 },\r
97 NULL\r
98};\r
99\r
e90b081a 100/**\r
101 The default event handler for gHiiKeyboardLayoutChanged\r
102 event group.\r
103\r
104 This is internal function.\r
105\r
106 @param Event The event that triggered this notification function.\r
107 @param Context Pointer to the notification functions context.\r
108\r
109**/\r
813acf3a 110VOID\r
111EFIAPI\r
112KeyboardLayoutChangeNullEvent (\r
1436aea4
MK
113 IN EFI_EVENT Event,\r
114 IN VOID *Context\r
813acf3a 115 )\r
116{\r
117 return;\r
118}\r
119\r
8a45f80e
DB
120/**\r
121 On Ready To Boot Services Event notification handler.\r
122\r
123 To trigger the function that to export the Hii Configuration setting.\r
124\r
125 @param[in] Event Event whose notification function is being invoked\r
126 @param[in] Context Pointer to the notification function's context\r
127\r
128**/\r
129VOID\r
130EFIAPI\r
131OnReadyToBoot (\r
1436aea4
MK
132 IN EFI_EVENT Event,\r
133 IN VOID *Context\r
8a45f80e
DB
134 )\r
135{\r
136 //\r
137 // When ready to boot, we begin to export the HiiDatabase date.\r
138 // And hook all the possible HiiDatabase change actions to export data.\r
139 //\r
adb2c050
DB
140 HiiGetDatabaseInfo (&mPrivate.HiiDatabase);\r
141 HiiGetConfigRespInfo (&mPrivate.HiiDatabase);\r
8a45f80e 142 gExportAfterReadyToBoot = TRUE;\r
c87b13cd
DB
143\r
144 gBS->CloseEvent (Event);\r
8a45f80e
DB
145}\r
146\r
e90b081a 147/**\r
148 Initialize HII Database.\r
149\r
150\r
151 @param ImageHandle The image handle.\r
152 @param SystemTable The system table.\r
153\r
154 @retval EFI_SUCCESS The Hii database is setup correctly.\r
155 @return Other value if failed to create the default event for\r
156 gHiiKeyboardLayoutChanged. Check gBS->CreateEventEx for\r
4a429716 157 details. Or failed to install the protocols.\r
e90b081a 158 Check gBS->InstallMultipleProtocolInterfaces for details.\r
8a45f80e
DB
159 Or failed to create Ready To Boot Event.\r
160 Check EfiCreateEventReadyToBootEx for details.\r
e90b081a 161\r
162**/\r
93e3992d 163EFI_STATUS\r
164EFIAPI\r
165InitializeHiiDatabase (\r
1436aea4
MK
166 IN EFI_HANDLE ImageHandle,\r
167 IN EFI_SYSTEM_TABLE *SystemTable\r
93e3992d 168 )\r
93e3992d 169{\r
1436aea4
MK
170 EFI_STATUS Status;\r
171 EFI_HANDLE Handle;\r
172 EFI_EVENT ReadyToBootEvent;\r
93e3992d 173\r
93e3992d 174 //\r
175 // There will be only one HII Database in the system\r
176 // If there is another out there, someone is trying to install us\r
177 // again. Fail that scenario.\r
178 //\r
e90b081a 179 ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiHiiDatabaseProtocolGuid);\r
180 ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiHiiFontProtocolGuid);\r
181 ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiHiiImageProtocolGuid);\r
182 ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiHiiStringProtocolGuid);\r
183 ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiHiiConfigRoutingProtocolGuid);\r
87bfeb11 184 ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiConfigKeywordHandlerProtocolGuid);\r
d1102dba 185\r
93e3992d 186 InitializeListHead (&mPrivate.DatabaseList);\r
187 InitializeListHead (&mPrivate.DatabaseNotifyList);\r
188 InitializeListHead (&mPrivate.HiiHandleList);\r
189 InitializeListHead (&mPrivate.FontInfoList);\r
190\r
191 //\r
192 // Create a event with EFI_HII_SET_KEYBOARD_LAYOUT_EVENT_GUID group type.\r
193 //\r
194 Status = gBS->CreateEventEx (\r
e53a6ea9 195 EVT_NOTIFY_SIGNAL,\r
813acf3a 196 TPL_NOTIFY,\r
197 KeyboardLayoutChangeNullEvent,\r
93e3992d 198 NULL,\r
ea021002 199 &gEfiHiiKeyBoardLayoutGuid,\r
93e3992d 200 &gHiiKeyboardLayoutChanged\r
201 );\r
202 if (EFI_ERROR (Status)) {\r
203 return Status;\r
204 }\r
205\r
206 Handle = NULL;\r
e94358a3 207 Status = gBS->InstallMultipleProtocolInterfaces (\r
208 &Handle,\r
209 &gEfiHiiFontProtocolGuid,\r
210 &mPrivate.HiiFont,\r
211 &gEfiHiiStringProtocolGuid,\r
212 &mPrivate.HiiString,\r
213 &gEfiHiiDatabaseProtocolGuid,\r
214 &mPrivate.HiiDatabase,\r
215 &gEfiHiiConfigRoutingProtocolGuid,\r
216 &mPrivate.ConfigRouting,\r
87bfeb11
ED
217 &gEfiConfigKeywordHandlerProtocolGuid,\r
218 &mPrivate.ConfigKeywordHandler,\r
e94358a3 219 NULL\r
220 );\r
221\r
222 if (EFI_ERROR (Status)) {\r
223 return Status;\r
224 }\r
225\r
226 if (FeaturePcdGet (PcdSupportHiiImageProtocol)) {\r
e94358a3 227 Status = gBS->InstallMultipleProtocolInterfaces (\r
228 &Handle,\r
1436aea4
MK
229 &gEfiHiiImageProtocolGuid,\r
230 &mPrivate.HiiImage,\r
231 &gEfiHiiImageExProtocolGuid,\r
232 &mPrivate.HiiImageEx,\r
e94358a3 233 NULL\r
234 );\r
e94358a3 235 }\r
236\r
1436aea4 237 if (FeaturePcdGet (PcdHiiOsRuntimeSupport)) {\r
8a45f80e
DB
238 Status = EfiCreateEventReadyToBootEx (\r
239 TPL_CALLBACK,\r
240 OnReadyToBoot,\r
241 NULL,\r
242 &ReadyToBootEvent\r
243 );\r
244 if (EFI_ERROR (Status)) {\r
245 return Status;\r
246 }\r
247 }\r
248\r
e94358a3 249 return Status;\r
93e3992d 250}\r