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