]> git.proxmox.com Git - mirror_edk2.git/blame - EdkCompatibilityPkg/Compatibility/FrameworkHiiToUefiHiiThunk/HiiDatabase.c
Fixed a NULL library instance issue
[mirror_edk2.git] / EdkCompatibilityPkg / Compatibility / FrameworkHiiToUefiHiiThunk / HiiDatabase.c
CommitLineData
4259256b 1/**@file\r
ee3428bb 2Framework to UEFI 2.1 HII Thunk. The driver consume UEFI HII protocols\r
3to produce a Framework HII protocol.\r
4259256b 4\r
ee3428bb 5Copyright (c) 2008, Intel Corporation\r
4259256b 6All rights reserved. This program and the accompanying materials\r
7are licensed and made available under the terms and conditions of the BSD License\r
8which accompanies this distribution. The full text of the license may be found at\r
9http://opensource.org/licenses/bsd-license.php\r
10\r
11THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13\r
14**/\r
15\r
16#include "HiiDatabase.h"\r
17\r
18\r
19EFI_HII_THUNK_PRIVATE_DATA HiiThunkPrivateDataTempate = {\r
20 {//Signature\r
21 EFI_HII_THUNK_DRIVER_DATA_SIGNATURE \r
22 },\r
23 {//Handle\r
24 (EFI_HANDLE) NULL\r
25 },\r
26 { //Hii\r
27 HiiNewPack,\r
28 HiiRemovePack,\r
29 HiiFindHandles,\r
30 HiiExportDatabase,\r
31 \r
32 HiiTestString,\r
33 HiiGetGlyph,\r
34 HiiGlyphToBlt,\r
35 \r
36 HiiNewString,\r
37 HiiGetPrimaryLanguages,\r
38 HiiGetSecondaryLanguages,\r
39 HiiGetString,\r
40 HiiResetStrings,\r
41 HiiGetLine,\r
42 HiiGetForms,\r
43 HiiGetDefaultImage,\r
44 HiiUpdateForm,\r
45 \r
46 HiiGetKeyboardLayout\r
47 },\r
48 { //StaticHiiHandle\r
49 //The FRAMEWORK_EFI_HII_HANDLE starts from 1 \r
50 // and increase upwords untill reach 2^(sizeof (FRAMEWORK_EFI_HII_HANDLE)) - 1. \r
51 // The code will assert to prevent overflow.\r
52 (FRAMEWORK_EFI_HII_HANDLE) 1 \r
53 },\r
54 {\r
55 NULL, NULL //HiiHandleLinkList\r
56 },\r
57};\r
58\r
59EFI_HII_DATABASE_PROTOCOL *mUefiHiiDatabaseProtocol;\r
60EFI_HII_FONT_PROTOCOL *mUefiHiiFontProtocol;\r
61EFI_HII_IMAGE_PROTOCOL *mUefiHiiImageProtocol;\r
62EFI_HII_STRING_PROTOCOL *mUefiStringProtocol;\r
63\r
64EFI_STATUS\r
65EFIAPI\r
66InitializeHiiDatabase (\r
67 IN EFI_HANDLE ImageHandle,\r
68 IN EFI_SYSTEM_TABLE *SystemTable\r
69 )\r
70/*++\r
71\r
72Routine Description:\r
73 Initialize HII Database\r
74\r
75Arguments:\r
76 (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT)\r
77\r
78Returns:\r
79 EFI_SUCCESS - Setup loaded.\r
80 other - Setup Error\r
81\r
82--*/\r
83{\r
84 EFI_HII_THUNK_PRIVATE_DATA *HiiData;\r
85 EFI_HANDLE Handle;\r
86 EFI_STATUS Status;\r
87\r
88 ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiHiiProtocolGuid);\r
89\r
90 HiiData = AllocateCopyPool (sizeof (EFI_HII_THUNK_PRIVATE_DATA), &HiiThunkPrivateDataTempate);\r
91 ASSERT (HiiData != NULL);\r
92 InitializeListHead (&HiiData->HiiThunkHandleMappingDBListHead);\r
93\r
94 Status = gBS->LocateProtocol (\r
95 &gEfiHiiDatabaseProtocolGuid,\r
96 NULL,\r
97 (VOID **) &mUefiHiiDatabaseProtocol\r
98 );\r
99 ASSERT_EFI_ERROR (Status);\r
100\r
101 Status = gBS->LocateProtocol (\r
102 &gEfiHiiFontProtocolGuid,\r
103 NULL,\r
104 (VOID **) &mUefiHiiFontProtocol\r
105 );\r
106 ASSERT_EFI_ERROR (Status);\r
107\r
108 Status = gBS->LocateProtocol (\r
109 &gEfiHiiImageProtocolGuid,\r
110 NULL,\r
111 (VOID **) &mUefiHiiImageProtocol\r
112 );\r
113 ASSERT_EFI_ERROR (Status);\r
114\r
115 Status = gBS->LocateProtocol (\r
116 &gEfiHiiStringProtocolGuid,\r
117 NULL,\r
118 (VOID **) &mUefiStringProtocol\r
119 );\r
120 ASSERT_EFI_ERROR (Status);\r
121\r
122 //\r
123 // Install protocol interface\r
124 //\r
125 Handle = NULL;\r
126 Status = gBS->InstallProtocolInterface (\r
127 &HiiData->Handle,\r
128 &gEfiHiiProtocolGuid,\r
129 EFI_NATIVE_INTERFACE,\r
130 (VOID *) &HiiData->Hii\r
131 );\r
132 ASSERT_EFI_ERROR (Status);\r
133\r
134 return Status;\r
135}\r
136\r
137EFI_STATUS\r
138EFIAPI\r
139HiiFindHandles (\r
140 IN EFI_HII_PROTOCOL *This,\r
141 IN OUT UINT16 *HandleBufferLength,\r
142 OUT FRAMEWORK_EFI_HII_HANDLE Handle[1]\r
143 )\r
144/*++\r
145\r
146Routine Description:\r
147 Determines the handles that are currently active in the database.\r
148\r
149Arguments:\r
150\r
151Returns:\r
152\r
153--*/\r
154{\r
155 ASSERT (FALSE);\r
156 return EFI_SUCCESS;\r
157}\r
158\r
159EFI_STATUS\r
160EFIAPI\r
161HiiGetPrimaryLanguages (\r
162 IN EFI_HII_PROTOCOL *This,\r
163 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
164 OUT EFI_STRING *LanguageString\r
165 )\r
166/*++\r
167\r
168Routine Description:\r
169\r
170 This function allows a program to determine what the primary languages that are supported on a given handle.\r
171\r
172Arguments:\r
173\r
174Returns:\r
175\r
176--*/\r
177{\r
ee3428bb 178 EFI_HII_THUNK_PRIVATE_DATA *Private;\r
179 EFI_HII_HANDLE UefiHiiHandle;\r
180 CHAR8 *AsciiLanguageCodes;\r
181 CHAR16 *UnicodeLanguageCodes;\r
182\r
183 Private = EFI_HII_THUNK_PRIVATE_DATA_FROM_THIS(This);\r
184\r
185 \r
186 \r
187 UefiHiiHandle = FrameworkHiiHandleToUefiHiiHandle (Private, Handle);\r
188 if (UefiHiiHandle == NULL) {\r
189 return EFI_INVALID_PARAMETER;\r
190 }\r
191\r
192 AsciiLanguageCodes = HiiLibGetSupportedLanguages (UefiHiiHandle);\r
193\r
194 if (AsciiLanguageCodes == NULL) {\r
195 return EFI_INVALID_PARAMETER;\r
196 }\r
197\r
198 UnicodeLanguageCodes = AllocateZeroPool (AsciiStrSize (AsciiLanguageCodes) * sizeof (CHAR16));\r
199 if (UnicodeLanguageCodes == NULL) {\r
200 return EFI_OUT_OF_RESOURCES;\r
201 }\r
202\r
203 //\r
204 // The language returned is in RFC 3066 format.\r
205 //\r
206 *LanguageString = AsciiStrToUnicodeStr (AsciiLanguageCodes, UnicodeLanguageCodes);\r
207\r
4259256b 208 return EFI_SUCCESS;\r
209}\r
210\r
211EFI_STATUS\r
212EFIAPI\r
213HiiGetSecondaryLanguages (\r
214 IN EFI_HII_PROTOCOL *This,\r
215 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
216 IN CHAR16 *PrimaryLanguage,\r
217 OUT EFI_STRING *LanguageString\r
218 )\r
219/*++\r
220\r
221Routine Description:\r
222\r
223 This function allows a program to determine which secondary languages are supported\r
224 on a given handle for a given primary language.\r
225\r
226 Arguments:\r
227\r
228Returns:\r
229\r
230--*/\r
231{\r
ee3428bb 232 EFI_HII_THUNK_PRIVATE_DATA *Private;\r
233 EFI_HII_HANDLE UefiHiiHandle;\r
234 CHAR8 *AsciiPrimaryLanguage;\r
235 CHAR8 *AsciiLanguageCodes;\r
236 CHAR16 *UnicodeLanguageCodes;\r
237\r
238 Private = EFI_HII_THUNK_PRIVATE_DATA_FROM_THIS(This);\r
239\r
240 \r
241 \r
242 UefiHiiHandle = FrameworkHiiHandleToUefiHiiHandle (Private, Handle);\r
243 if (UefiHiiHandle == NULL) {\r
244 return EFI_INVALID_PARAMETER;\r
245 }\r
246\r
247 AsciiPrimaryLanguage = AllocateZeroPool (StrLen (PrimaryLanguage) + 1);\r
248\r
249 UnicodeStrToAsciiStr (PrimaryLanguage, AsciiPrimaryLanguage);\r
250\r
251 AsciiLanguageCodes = HiiLibGetSupportedSecondaryLanguages (UefiHiiHandle, AsciiPrimaryLanguage);\r
252\r
253 if (AsciiLanguageCodes == NULL) {\r
254 return EFI_INVALID_PARAMETER;\r
255 }\r
256\r
257 UnicodeLanguageCodes = AllocateZeroPool (AsciiStrSize (AsciiLanguageCodes) * sizeof (CHAR16));\r
258 if (UnicodeLanguageCodes == NULL) {\r
259 return EFI_OUT_OF_RESOURCES;\r
260 }\r
261\r
262 //\r
263 // The language returned is in RFC 3066 format.\r
264 //\r
265 *LanguageString = AsciiStrToUnicodeStr (AsciiLanguageCodes, UnicodeLanguageCodes);\r
266\r
4259256b 267 return EFI_SUCCESS;\r
268}\r
269\r
270\r