2 Framework to UEFI 2.1 HII Thunk. The driver consume UEFI HII protocols
3 to produce a Framework HII protocol.
5 Copyright (c) 2008, Intel Corporation
6 All rights reserved. This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16 #include "HiiDatabase.h"
19 EFI_HII_THUNK_PRIVATE_DATA HiiThunkPrivateDataTempate
= {
21 EFI_HII_THUNK_DRIVER_DATA_SIGNATURE
37 HiiGetPrimaryLanguages
,
38 HiiGetSecondaryLanguages
,
49 //The FRAMEWORK_EFI_HII_HANDLE starts from 1
50 // and increase upwords untill reach 2^(sizeof (FRAMEWORK_EFI_HII_HANDLE)) - 1.
51 // The code will assert to prevent overflow.
52 (FRAMEWORK_EFI_HII_HANDLE
) 1
55 NULL
, NULL
//HiiHandleLinkList
59 CONST EFI_HII_DATABASE_PROTOCOL
*mUefiHiiDatabaseProtocol
;
60 CONST EFI_HII_FONT_PROTOCOL
*mUefiHiiFontProtocol
;
61 CONST EFI_HII_IMAGE_PROTOCOL
*mUefiHiiImageProtocol
;
62 CONST EFI_HII_STRING_PROTOCOL
*mUefiStringProtocol
;
63 CONST EFI_HII_CONFIG_ROUTING_PROTOCOL
*mUefiConfigRoutingProtocol
;
68 InitializeHiiDatabase (
69 IN EFI_HANDLE ImageHandle
,
70 IN EFI_SYSTEM_TABLE
*SystemTable
75 Initialize HII Database
78 (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT)
81 EFI_SUCCESS - Setup loaded.
86 EFI_HII_THUNK_PRIVATE_DATA
*HiiData
;
90 ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL
, &gEfiHiiProtocolGuid
);
92 HiiData
= AllocateCopyPool (sizeof (EFI_HII_THUNK_PRIVATE_DATA
), &HiiThunkPrivateDataTempate
);
93 ASSERT (HiiData
!= NULL
);
94 InitializeListHead (&HiiData
->HiiThunkHandleMappingDBListHead
);
96 Status
= gBS
->LocateProtocol (
97 &gEfiHiiDatabaseProtocolGuid
,
99 (VOID
**) &mUefiHiiDatabaseProtocol
101 ASSERT_EFI_ERROR (Status
);
103 Status
= gBS
->LocateProtocol (
104 &gEfiHiiFontProtocolGuid
,
106 (VOID
**) &mUefiHiiFontProtocol
108 ASSERT_EFI_ERROR (Status
);
110 Status
= gBS
->LocateProtocol (
111 &gEfiHiiImageProtocolGuid
,
113 (VOID
**) &mUefiHiiImageProtocol
115 ASSERT_EFI_ERROR (Status
);
117 Status
= gBS
->LocateProtocol (
118 &gEfiHiiStringProtocolGuid
,
120 (VOID
**) &mUefiStringProtocol
122 ASSERT_EFI_ERROR (Status
);
124 Status
= gBS
->LocateProtocol (
125 &gEfiHiiConfigRoutingProtocolGuid
,
127 (VOID
**) &mUefiConfigRoutingProtocol
129 ASSERT_EFI_ERROR (Status
);
132 // Install protocol interface
135 Status
= gBS
->InstallProtocolInterface (
137 &gEfiHiiProtocolGuid
,
138 EFI_NATIVE_INTERFACE
,
139 (VOID
*) &HiiData
->Hii
141 ASSERT_EFI_ERROR (Status
);
149 IN EFI_HII_PROTOCOL
*This
,
150 IN OUT UINT16
*HandleBufferLength
,
151 OUT FRAMEWORK_EFI_HII_HANDLE Handle
[1]
156 Determines the handles that are currently active in the database.
170 HiiGetPrimaryLanguages (
171 IN EFI_HII_PROTOCOL
*This
,
172 IN FRAMEWORK_EFI_HII_HANDLE Handle
,
173 OUT EFI_STRING
*LanguageString
179 This function allows a program to determine what the primary languages that are supported on a given handle.
187 EFI_HII_THUNK_PRIVATE_DATA
*Private
;
188 EFI_HII_HANDLE UefiHiiHandle
;
189 CHAR8
*AsciiLanguageCodes
;
190 CHAR16
*UnicodeLanguageCodes
;
192 Private
= EFI_HII_THUNK_PRIVATE_DATA_FROM_THIS(This
);
196 UefiHiiHandle
= FrameworkHiiHandleToUefiHiiHandle (Private
, Handle
);
197 if (UefiHiiHandle
== NULL
) {
198 return EFI_INVALID_PARAMETER
;
201 AsciiLanguageCodes
= HiiLibGetSupportedLanguages (UefiHiiHandle
);
203 if (AsciiLanguageCodes
== NULL
) {
204 return EFI_INVALID_PARAMETER
;
207 UnicodeLanguageCodes
= AllocateZeroPool (AsciiStrSize (AsciiLanguageCodes
) * sizeof (CHAR16
));
208 if (UnicodeLanguageCodes
== NULL
) {
209 return EFI_OUT_OF_RESOURCES
;
213 // The language returned is in RFC 3066 format.
215 *LanguageString
= AsciiStrToUnicodeStr (AsciiLanguageCodes
, UnicodeLanguageCodes
);
222 HiiGetSecondaryLanguages (
223 IN EFI_HII_PROTOCOL
*This
,
224 IN FRAMEWORK_EFI_HII_HANDLE Handle
,
225 IN CHAR16
*PrimaryLanguage
,
226 OUT EFI_STRING
*LanguageString
232 This function allows a program to determine which secondary languages are supported
233 on a given handle for a given primary language.
241 EFI_HII_THUNK_PRIVATE_DATA
*Private
;
242 EFI_HII_HANDLE UefiHiiHandle
;
243 CHAR8
*AsciiPrimaryLanguage
;
244 CHAR8
*AsciiLanguageCodes
;
245 CHAR16
*UnicodeLanguageCodes
;
247 Private
= EFI_HII_THUNK_PRIVATE_DATA_FROM_THIS(This
);
251 UefiHiiHandle
= FrameworkHiiHandleToUefiHiiHandle (Private
, Handle
);
252 if (UefiHiiHandle
== NULL
) {
253 return EFI_INVALID_PARAMETER
;
256 AsciiPrimaryLanguage
= AllocateZeroPool (StrLen (PrimaryLanguage
) + 1);
258 UnicodeStrToAsciiStr (PrimaryLanguage
, AsciiPrimaryLanguage
);
260 AsciiLanguageCodes
= HiiLibGetSupportedSecondaryLanguages (UefiHiiHandle
, AsciiPrimaryLanguage
);
262 if (AsciiLanguageCodes
== NULL
) {
263 return EFI_INVALID_PARAMETER
;
266 UnicodeLanguageCodes
= AllocateZeroPool (AsciiStrSize (AsciiLanguageCodes
) * sizeof (CHAR16
));
267 if (UnicodeLanguageCodes
== NULL
) {
268 return EFI_OUT_OF_RESOURCES
;
272 // The language returned is in RFC 3066 format.
274 *LanguageString
= AsciiStrToUnicodeStr (AsciiLanguageCodes
, UnicodeLanguageCodes
);