]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseEntry.c
Patch to remove STATIC modifier. This is on longer recommended by EFI Framework codin...
[mirror_edk2.git] / MdeModulePkg / Universal / HiiDatabaseDxe / HiiDatabaseEntry.c
CommitLineData
93e3992d 1/** @file\r
2\r
813acf3a 3Copyright (c) 2007 - 2008, Intel Corporation\r
93e3992d 4All rights reserved. This program and the accompanying materials\r
5are licensed and made available under the terms and conditions of the BSD License\r
6which accompanies this distribution. The full text of the license may be found at\r
7http://opensource.org/licenses/bsd-license.php\r
8\r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11\r
12Module Name:\r
13\r
14 HiiDatabaseEntry.c\r
15\r
16Abstract:\r
17\r
18 This file contains the entry code to the HII database, which is defined by\r
19 UEFI 2.1 specification.\r
20\r
21Revision History\r
22\r
23\r
24**/\r
25\r
26\r
27#include "HiiDatabase.h"\r
28\r
29//\r
30// Global variables\r
31//\r
32EFI_EVENT gHiiKeyboardLayoutChanged;\r
fe1e36e5 33EFI_GUID gHiiSetKbdLayoutEventGuid = EFI_HII_SET_KEYBOARD_LAYOUT_EVENT_GUID;\r
93e3992d 34\r
fe1e36e5 35HII_DATABASE_PRIVATE_DATA mPrivate = {\r
93e3992d 36 HII_DATABASE_PRIVATE_DATA_SIGNATURE,\r
37 {\r
38 (LIST_ENTRY *) NULL,\r
39 (LIST_ENTRY *) NULL\r
40 },\r
41 {\r
42 (LIST_ENTRY *) NULL,\r
43 (LIST_ENTRY *) NULL\r
44 },\r
45 {\r
46 HiiStringToImage,\r
47 HiiStringIdToImage,\r
48 HiiGetGlyph,\r
49 HiiGetFontInfo\r
50 },\r
93e3992d 51 {\r
e94358a3 52 NULL,\r
53 NULL,\r
54 NULL,\r
55 NULL,\r
56 NULL\r
93e3992d 57 },\r
93e3992d 58 {\r
59 HiiNewString,\r
60 HiiGetString,\r
61 HiiSetString,\r
62 HiiGetLanguages,\r
63 HiiGetSecondaryLanguages\r
64 },\r
65 {\r
66 HiiNewPackageList,\r
67 HiiRemovePackageList,\r
68 HiiUpdatePackageList,\r
69 HiiListPackageLists,\r
70 HiiExportPackageLists,\r
71 HiiRegisterPackageNotify,\r
72 HiiUnregisterPackageNotify,\r
73 HiiFindKeyboardLayouts,\r
74 HiiGetKeyboardLayout,\r
75 HiiSetKeyboardLayout,\r
76 HiiGetPackageListHandle\r
77 },\r
78 {\r
79 HiiConfigRoutingExtractConfig,\r
80 HiiConfigRoutingExportConfig,\r
813acf3a 81 HiiConfigRoutingRouteConfig,\r
93e3992d 82 HiiBlockToConfig,\r
83 HiiConfigToBlock,\r
84 HiiGetAltCfg\r
85 },\r
86 {\r
87 (LIST_ENTRY *) NULL,\r
88 (LIST_ENTRY *) NULL\r
89 },\r
90 0,\r
91 {\r
92 (LIST_ENTRY *) NULL,\r
93 (LIST_ENTRY *) NULL\r
94 },\r
95 EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK),\r
96 {\r
97 0x00000000,\r
98 0x0000,\r
99 0x0000,\r
7fd21395 100 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}\r
93e3992d 101 },\r
102 NULL\r
103};\r
104\r
e94358a3 105GLOBAL_REMOVE_IF_UNREFERENCED CONST EFI_HII_IMAGE_PROTOCOL mImageProtocol = {\r
106 HiiNewImage,\r
107 HiiGetImage,\r
108 HiiSetImage,\r
109 HiiDrawImage,\r
110 HiiDrawImageId\r
111};\r
112\r
e90b081a 113/**\r
114 The default event handler for gHiiKeyboardLayoutChanged\r
115 event group.\r
116\r
117 This is internal function.\r
118\r
119 @param Event The event that triggered this notification function.\r
120 @param Context Pointer to the notification functions context.\r
121\r
122**/\r
813acf3a 123VOID\r
124EFIAPI\r
125KeyboardLayoutChangeNullEvent (\r
126 IN EFI_EVENT Event,\r
127 IN VOID *Context\r
128 )\r
129{\r
130 return;\r
131}\r
132\r
e90b081a 133/**\r
134 Initialize HII Database.\r
135\r
136\r
137 @param ImageHandle The image handle.\r
138 @param SystemTable The system table.\r
139\r
140 @retval EFI_SUCCESS The Hii database is setup correctly.\r
141 @return Other value if failed to create the default event for\r
142 gHiiKeyboardLayoutChanged. Check gBS->CreateEventEx for\r
143 details. Or failed to insatll the protocols.\r
144 Check gBS->InstallMultipleProtocolInterfaces for details.\r
145\r
146**/\r
93e3992d 147EFI_STATUS\r
148EFIAPI\r
149InitializeHiiDatabase (\r
150 IN EFI_HANDLE ImageHandle,\r
151 IN EFI_SYSTEM_TABLE *SystemTable\r
152 )\r
93e3992d 153{\r
154 EFI_STATUS Status;\r
155 EFI_HANDLE Handle;\r
93e3992d 156\r
93e3992d 157 //\r
158 // There will be only one HII Database in the system\r
159 // If there is another out there, someone is trying to install us\r
160 // again. Fail that scenario.\r
161 //\r
e90b081a 162 ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiHiiDatabaseProtocolGuid);\r
163 ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiHiiFontProtocolGuid);\r
164 ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiHiiImageProtocolGuid);\r
165 ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiHiiStringProtocolGuid);\r
166 ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiHiiConfigRoutingProtocolGuid);\r
167 \r
93e3992d 168 InitializeListHead (&mPrivate.DatabaseList);\r
169 InitializeListHead (&mPrivate.DatabaseNotifyList);\r
170 InitializeListHead (&mPrivate.HiiHandleList);\r
171 InitializeListHead (&mPrivate.FontInfoList);\r
172\r
173 //\r
174 // Create a event with EFI_HII_SET_KEYBOARD_LAYOUT_EVENT_GUID group type.\r
175 //\r
176 Status = gBS->CreateEventEx (\r
e53a6ea9 177 EVT_NOTIFY_SIGNAL,\r
813acf3a 178 TPL_NOTIFY,\r
179 KeyboardLayoutChangeNullEvent,\r
93e3992d 180 NULL,\r
181 &gHiiSetKbdLayoutEventGuid,\r
182 &gHiiKeyboardLayoutChanged\r
183 );\r
184 if (EFI_ERROR (Status)) {\r
185 return Status;\r
186 }\r
187\r
188 Handle = NULL;\r
e94358a3 189 Status = gBS->InstallMultipleProtocolInterfaces (\r
190 &Handle,\r
191 &gEfiHiiFontProtocolGuid,\r
192 &mPrivate.HiiFont,\r
193 &gEfiHiiStringProtocolGuid,\r
194 &mPrivate.HiiString,\r
195 &gEfiHiiDatabaseProtocolGuid,\r
196 &mPrivate.HiiDatabase,\r
197 &gEfiHiiConfigRoutingProtocolGuid,\r
198 &mPrivate.ConfigRouting,\r
199 NULL\r
200 );\r
201\r
202 if (EFI_ERROR (Status)) {\r
203 return Status;\r
204 }\r
205\r
206 if (FeaturePcdGet (PcdSupportHiiImageProtocol)) {\r
207 CopyMem (&mPrivate.HiiImage, &mImageProtocol, sizeof (mImageProtocol));\r
208\r
209 Status = gBS->InstallMultipleProtocolInterfaces (\r
210 &Handle,\r
211 &gEfiHiiImageProtocolGuid,\r
212 &mPrivate.HiiImage,\r
213 NULL\r
214 );\r
215\r
216 }\r
217\r
218 return Status;\r
93e3992d 219}\r
220\r