]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseEntry.c
UEFI HII: Merge UEFI HII support changes from branch.
[mirror_edk2.git] / MdeModulePkg / Universal / HiiDatabaseDxe / HiiDatabaseEntry.c
CommitLineData
93e3992d 1/** @file\r
2\r
3Copyright (c) 2007, Intel Corporation\r
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
83 HiiConfigRoutingRoutConfig,\r
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
102 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
103 },\r
104 NULL\r
105};\r
106\r
107//@MT: EFI_DRIVER_ENTRY_POINT (InitializeHiiDatabase)\r
108\r
109EFI_STATUS\r
110EFIAPI\r
111InitializeHiiDatabase (\r
112 IN EFI_HANDLE ImageHandle,\r
113 IN EFI_SYSTEM_TABLE *SystemTable\r
114 )\r
115/*++\r
116\r
117Routine Description:\r
118 Initialize HII Database\r
119\r
120Arguments:\r
121 (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT)\r
122\r
123Returns:\r
124 EFI_SUCCESS -\r
125 other -\r
126\r
127--*/\r
128{\r
129 EFI_STATUS Status;\r
130 EFI_HANDLE Handle;\r
131 EFI_HANDLE *HandleBuffer;\r
132 UINTN HandleCount;\r
133\r
134 //@MT: EfiInitializeDriverLib (ImageHandle, SystemTable);\r
135\r
136 //\r
137 // There will be only one HII Database in the system\r
138 // If there is another out there, someone is trying to install us\r
139 // again. Fail that scenario.\r
140 //\r
141 Status = gBS->LocateHandleBuffer (\r
142 ByProtocol,\r
143 &gEfiHiiDatabaseProtocolGuid,\r
144 NULL,\r
145 &HandleCount,\r
146 &HandleBuffer\r
147 );\r
148\r
149 //\r
150 // If there was no error, assume there is an installation and fail to load\r
151 //\r
152 if (!EFI_ERROR (Status)) {\r
153 if (HandleBuffer != NULL) {\r
154 gBS->FreePool (HandleBuffer);\r
155 }\r
156 return EFI_DEVICE_ERROR;\r
157 }\r
158\r
159 InitializeListHead (&mPrivate.DatabaseList);\r
160 InitializeListHead (&mPrivate.DatabaseNotifyList);\r
161 InitializeListHead (&mPrivate.HiiHandleList);\r
162 InitializeListHead (&mPrivate.FontInfoList);\r
163\r
164 //\r
165 // Create a event with EFI_HII_SET_KEYBOARD_LAYOUT_EVENT_GUID group type.\r
166 //\r
167 Status = gBS->CreateEventEx (\r
168 0,\r
169 0,\r
170 NULL,\r
171 NULL,\r
172 &gHiiSetKbdLayoutEventGuid,\r
173 &gHiiKeyboardLayoutChanged\r
174 );\r
175 if (EFI_ERROR (Status)) {\r
176 return Status;\r
177 }\r
178\r
179 Handle = NULL;\r
180 return gBS->InstallMultipleProtocolInterfaces (\r
181 &Handle,\r
182 &gEfiHiiFontProtocolGuid,\r
183 &mPrivate.HiiFont,\r
184#ifndef DISABLE_UNUSED_HII_PROTOCOLS\r
185 &gEfiHiiImageProtocolGuid,\r
186 &mPrivate.HiiImage,\r
187#endif\r
188 &gEfiHiiStringProtocolGuid,\r
189 &mPrivate.HiiString,\r
190 &gEfiHiiDatabaseProtocolGuid,\r
191 &mPrivate.HiiDatabase,\r
192 &gEfiHiiConfigRoutingProtocolGuid,\r
193 &mPrivate.ConfigRouting,\r
194 NULL\r
195 );\r
196}\r
197\r