]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseEntry.c
Merged in the following trackers from EDK:
[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
33STATIC EFI_GUID gHiiSetKbdLayoutEventGuid = EFI_HII_SET_KEYBOARD_LAYOUT_EVENT_GUID;\r
34\r
35STATIC HII_DATABASE_PRIVATE_DATA mPrivate = {\r
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
51#ifndef DISABLE_UNUSED_HII_PROTOCOLS\r
52 {\r
53 HiiNewImage,\r
54 HiiGetImage,\r
55 HiiSetImage,\r
56 HiiDrawImage,\r
57 HiiDrawImageId\r
58 },\r
59#endif\r
60 {\r
61 HiiNewString,\r
62 HiiGetString,\r
63 HiiSetString,\r
64 HiiGetLanguages,\r
65 HiiGetSecondaryLanguages\r
66 },\r
67 {\r
68 HiiNewPackageList,\r
69 HiiRemovePackageList,\r
70 HiiUpdatePackageList,\r
71 HiiListPackageLists,\r
72 HiiExportPackageLists,\r
73 HiiRegisterPackageNotify,\r
74 HiiUnregisterPackageNotify,\r
75 HiiFindKeyboardLayouts,\r
76 HiiGetKeyboardLayout,\r
77 HiiSetKeyboardLayout,\r
78 HiiGetPackageListHandle\r
79 },\r
80 {\r
81 HiiConfigRoutingExtractConfig,\r
82 HiiConfigRoutingExportConfig,\r
813acf3a 83 HiiConfigRoutingRouteConfig,\r
93e3992d 84 HiiBlockToConfig,\r
85 HiiConfigToBlock,\r
86 HiiGetAltCfg\r
87 },\r
88 {\r
89 (LIST_ENTRY *) NULL,\r
90 (LIST_ENTRY *) NULL\r
91 },\r
92 0,\r
93 {\r
94 (LIST_ENTRY *) NULL,\r
95 (LIST_ENTRY *) NULL\r
96 },\r
97 EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK),\r
98 {\r
99 0x00000000,\r
100 0x0000,\r
101 0x0000,\r
7fd21395 102 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}\r
93e3992d 103 },\r
104 NULL\r
105};\r
106\r
813acf3a 107STATIC\r
108VOID\r
109EFIAPI\r
110KeyboardLayoutChangeNullEvent (\r
111 IN EFI_EVENT Event,\r
112 IN VOID *Context\r
113 )\r
114{\r
115 return;\r
116}\r
117\r
93e3992d 118EFI_STATUS\r
119EFIAPI\r
120InitializeHiiDatabase (\r
121 IN EFI_HANDLE ImageHandle,\r
122 IN EFI_SYSTEM_TABLE *SystemTable\r
123 )\r
124/*++\r
125\r
126Routine Description:\r
127 Initialize HII Database\r
128\r
129Arguments:\r
130 (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT)\r
131\r
132Returns:\r
133 EFI_SUCCESS -\r
134 other -\r
135\r
136--*/\r
137{\r
138 EFI_STATUS Status;\r
139 EFI_HANDLE Handle;\r
140 EFI_HANDLE *HandleBuffer;\r
141 UINTN HandleCount;\r
142\r
93e3992d 143 //\r
144 // There will be only one HII Database in the system\r
145 // If there is another out there, someone is trying to install us\r
146 // again. Fail that scenario.\r
147 //\r
148 Status = gBS->LocateHandleBuffer (\r
149 ByProtocol,\r
150 &gEfiHiiDatabaseProtocolGuid,\r
151 NULL,\r
152 &HandleCount,\r
153 &HandleBuffer\r
154 );\r
155\r
156 //\r
157 // If there was no error, assume there is an installation and fail to load\r
158 //\r
159 if (!EFI_ERROR (Status)) {\r
160 if (HandleBuffer != NULL) {\r
161 gBS->FreePool (HandleBuffer);\r
162 }\r
163 return EFI_DEVICE_ERROR;\r
164 }\r
165\r
166 InitializeListHead (&mPrivate.DatabaseList);\r
167 InitializeListHead (&mPrivate.DatabaseNotifyList);\r
168 InitializeListHead (&mPrivate.HiiHandleList);\r
169 InitializeListHead (&mPrivate.FontInfoList);\r
170\r
171 //\r
172 // Create a event with EFI_HII_SET_KEYBOARD_LAYOUT_EVENT_GUID group type.\r
173 //\r
174 Status = gBS->CreateEventEx (\r
813acf3a 175 EFI_EVENT_NOTIFY_SIGNAL,\r
176 TPL_NOTIFY,\r
177 KeyboardLayoutChangeNullEvent,\r
93e3992d 178 NULL,\r
179 &gHiiSetKbdLayoutEventGuid,\r
180 &gHiiKeyboardLayoutChanged\r
181 );\r
182 if (EFI_ERROR (Status)) {\r
183 return Status;\r
184 }\r
185\r
186 Handle = NULL;\r
187 return gBS->InstallMultipleProtocolInterfaces (\r
188 &Handle,\r
189 &gEfiHiiFontProtocolGuid,\r
190 &mPrivate.HiiFont,\r
191#ifndef DISABLE_UNUSED_HII_PROTOCOLS\r
192 &gEfiHiiImageProtocolGuid,\r
193 &mPrivate.HiiImage,\r
194#endif\r
195 &gEfiHiiStringProtocolGuid,\r
196 &mPrivate.HiiString,\r
197 &gEfiHiiDatabaseProtocolGuid,\r
198 &mPrivate.HiiDatabase,\r
199 &gEfiHiiConfigRoutingProtocolGuid,\r
200 &mPrivate.ConfigRouting,\r
201 NULL\r
202 );\r
203}\r
204\r