3 This file contains global defines and prototype definitions
4 for the Framework HII to Uefi HII Thunk Module.
6 Copyright (c) 2006 - 2008, Intel Corporation
7 All rights reserved. This program and the accompanying materials
8 are licensed and made available under the terms and conditions of the BSD License
9 which accompanies this distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
17 #ifndef _HIIDATABASE_H
18 #define _HIIDATABASE_H
21 #include <FrameworkDxe.h>
23 #include <Guid/GlobalVariable.h>
24 #include <Protocol/FrameworkFormCallback.h>
25 #include <Protocol/FrameworkHii.h>
26 #include <Protocol/FrameworkFormBrowser.h>
31 #include <Protocol/HiiFont.h>
32 #include <Protocol/HiiImage.h>
33 #include <Protocol/HiiString.h>
34 #include <Protocol/HiiDatabase.h>
35 #include <Protocol/HiiConfigRouting.h>
36 #include <Protocol/HiiConfigAccess.h>
37 #include <Protocol/UgaDraw.h>
38 #include <Guid/HiiFormMapMethodGuid.h>
40 #include <Library/BaseLib.h>
41 #include <Library/DebugLib.h>
42 #include <Library/UefiDriverEntryPoint.h>
43 #include <Library/MemoryAllocationLib.h>
44 #include <Library/BaseMemoryLib.h>
45 #include <Library/UefiBootServicesTableLib.h>
46 #include <Library/UefiRuntimeServicesTableLib.h>
47 #include <Library/HiiLib.h>
48 #include <Library/UefiLib.h>
49 #include <Library/PcdLib.h>
50 #include <Library/LanguageLib.h>
52 #include <Guid/MdeModuleHii.h>
54 #include "UefiIfrParser.h"
58 // VARSTORE ID of 0 for Buffer Storage Type Storage is defined as invalid in UEFI 2.1 HII. VARSTORE ID
59 // 0 is the default VarStore ID for storage without explicit declaration in Framework HII 0.92. EDK II UEFI VFR compiler
60 // in compatible mode will assign 0x0001 as UEFI VARSTORE ID to this default storage id in Framework VFR without
61 // VARSTORE declaration.
63 // In addition, the Name of Default VarStore is assumed to be L"Setup" for those storage without explicit VARSTORE declaration in the formset
64 // by Framework HII. EDK II UEFI VFR compiler in compatible mode hard-coded L"Setup" as VARSTORE name.
66 #define FRAMEWORK_RESERVED_VARSTORE_ID 0x0001
67 #define FRAMEWORK_RESERVED_VARSTORE_NAME L"Setup"
70 /// The size of a 3 character ISO639 language code.
72 #define ISO_639_2_ENTRY_SIZE 3
76 EFI_HII_PACK_HEADER FrameworkPackageHeader
;
77 EFI_HII_PACKAGE_HEADER PackageHeader
;
78 } TIANO_AUTOGEN_PACKAGES_HEADER
;
81 #define HII_THUNK_PRIVATE_DATA_FROM_THIS(Record) CR(Record, HII_THUNK_PRIVATE_DATA, Hii, HII_THUNK_PRIVATE_DATA_SIGNATURE)
82 #define HII_THUNK_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('H', 'i', 'I', 'T')
89 // The head of link list for all HII_THUNK_CONTEXT.
91 LIST_ENTRY ThunkContextListHead
;
93 EFI_HANDLE RemovePackNotifyHandle
;
94 EFI_HANDLE AddPackNotifyHandle
;
95 } HII_THUNK_PRIVATE_DATA
;
101 #define QUESTION_ID_MAP_ENTRY_FROM_LINK(Record) CR(Record, QUESTION_ID_MAP_ENTRY, Link, QUESTION_ID_MAP_ENTRY_SIGNATURE)
102 #define QUESTION_ID_MAP_ENTRY_SIGNATURE SIGNATURE_32 ('Q', 'I', 'M', 'E')
107 EFI_QUESTION_ID UefiQid
;
108 } QUESTION_ID_MAP_ENTRY
;
112 #define QUESTION_ID_MAP_FROM_LINK(Record) CR(Record, QUESTION_ID_MAP, Link, QUESTION_ID_MAP_SIGNATURE)
113 #define QUESTION_ID_MAP_SIGNATURE SIGNATURE_32 ('Q', 'I', 'M', 'P')
119 LIST_ENTRY MapEntryListHead
;
124 #define HII_THUNK_CONTEXT_FROM_LINK(Record) CR(Record, HII_THUNK_CONTEXT, Link, HII_THUNK_CONTEXT_SIGNATURE)
125 #define HII_THUNK_CONTEXT_SIGNATURE SIGNATURE_32 ('H', 'T', 'H', 'M')
129 FRAMEWORK_EFI_HII_HANDLE FwHiiHandle
;
130 EFI_HII_HANDLE UefiHiiHandle
;
131 EFI_HANDLE UefiHiiDriverHandle
;
133 UINTN IfrPackageCount
;
134 UINTN StringPackageCount
;
136 BOOLEAN ByFrameworkHiiNewPack
;
139 // HII Thunk will use TagGuid to associate the String Package and Form Package togehter.
140 // See description for TagGuid. This field is to record if either one of the following condition
142 // 1) if ((SharingStringPack == TRUE) && (StringPackageCount != 0 && IfrPackageCount == 0)), then this Package List only
143 /// has String Packages and provides Strings to other IFR package.
144 // 2) if ((SharingStringPack == TRUE) && (StringPackageCount == 0 && IfrPackageCount != 1)), then this Form Package
145 // copied String Packages from other Package List.
146 // 3) if ((SharingStringPack == FALSE)), this Package does not provide String Package or copy String Packages from other
150 // When a Hii->NewString() is called for this FwHiiHandle and SharingStringPack is TRUE, then all Package List that sharing
151 // the same TagGuid will update or create String in there respective String Packages. If SharingStringPack is FALSE, then
152 // only the String from String Packages in this Package List will be updated or created.
154 BOOLEAN SharingStringPack
;
157 // The HII 0.92 version of HII data implementation in EDK 1.03 and 1.04 make an the following assumption
158 // in both HII Database implementation and all modules that registering packages:
159 // If a Package List has only IFR package and no String Package, the IFR package will reference
160 // String in another Package List registered with the HII database with the same EFI_HII_PACKAGES.GuidId.
161 // TagGuid is the used to record this GuidId.
164 UINT8
*NvMapOverride
;
166 FORM_BROWSER_FORMSET
*FormSet
;
172 #define BUFFER_STORAGE_ENTRY_SIGNATURE SIGNATURE_32 ('H', 'T', 's', 'k')
173 #define BUFFER_STORAGE_ENTRY_FROM_LINK(Record) CR(Record, BUFFER_STORAGE_ENTRY, Link, BUFFER_STORAGE_ENTRY_SIGNATURE)
181 } BUFFER_STORAGE_ENTRY
;
185 /// HII specific Vendor Device Path Node definition.
188 VENDOR_DEVICE_PATH VendorDevicePath
;
191 } HII_VENDOR_DEVICE_PATH_NODE
;
194 /// HII specific Vendor Device Path definition.
197 HII_VENDOR_DEVICE_PATH_NODE Node
;
198 EFI_DEVICE_PATH_PROTOCOL End
;
199 } HII_VENDOR_DEVICE_PATH
;
202 #define CONFIG_ACCESS_PRIVATE_SIGNATURE SIGNATURE_32 ('H', 'T', 'c', 'a')
203 #define CONFIG_ACCESS_PRIVATE_FROM_PROTOCOL(Record) CR(Record, CONFIG_ACCESS_PRIVATE, ConfigAccessProtocol, CONFIG_ACCESS_PRIVATE_SIGNATURE)
206 EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccessProtocol
;
208 // Framework's callback
210 EFI_FORM_CALLBACK_PROTOCOL
*FormCallbackProtocol
;
212 HII_THUNK_CONTEXT
*ThunkContext
;
213 } CONFIG_ACCESS_PRIVATE
;
217 #define EFI_FORMBROWSER_THUNK_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('F', 'B', 'T', 'd')
218 #define EFI_FORMBROWSER_THUNK_PRIVATE_DATA_FROM_THIS(Record) CR(Record, EFI_FORMBROWSER_THUNK_PRIVATE_DATA, FormBrowser, EFI_FORMBROWSER_THUNK_PRIVATE_DATA_SIGNATURE)
222 HII_THUNK_PRIVATE_DATA
*ThunkPrivate
;
223 EFI_FORM_BROWSER_PROTOCOL FormBrowser
;
224 } EFI_FORMBROWSER_THUNK_PRIVATE_DATA
;
230 extern CONST EFI_HII_DATABASE_PROTOCOL
*mHiiDatabase
;
231 extern CONST EFI_HII_IMAGE_PROTOCOL
*mHiiImageProtocol
;
232 extern CONST EFI_HII_STRING_PROTOCOL
*mHiiStringProtocol
;
233 extern CONST EFI_HII_FONT_PROTOCOL
*mHiiFontProtocol
;
234 extern CONST EFI_HII_CONFIG_ROUTING_PROTOCOL
*mHiiConfigRoutingProtocol
;
235 extern CONST EFI_FORM_BROWSER2_PROTOCOL
*mFormBrowser2Protocol
;
237 extern HII_THUNK_PRIVATE_DATA
*mHiiThunkPrivateData
;
239 extern BOOLEAN mInFrameworkUpdatePakcage
;
245 IN EFI_HII_PROTOCOL
*This
,
246 IN EFI_HII_PACKAGES
*PackageList
,
247 OUT FRAMEWORK_EFI_HII_HANDLE
*Handle
253 IN EFI_HII_PROTOCOL
*This
,
254 IN FRAMEWORK_EFI_HII_HANDLE Handle
260 IN EFI_HII_PROTOCOL
*This
,
261 IN OUT UINT16
*HandleBufferLength
,
262 OUT FRAMEWORK_EFI_HII_HANDLE
*Handle
268 IN EFI_HII_PROTOCOL
*This
,
269 IN FRAMEWORK_EFI_HII_HANDLE Handle
,
270 IN OUT UINTN
*BufferSize
,
277 IN EFI_HII_PROTOCOL
*This
,
279 IN OUT UINT16
*Index
,
280 OUT UINT8
**GlyphBuffer
,
281 OUT UINT16
*BitWidth
,
282 IN OUT UINT32
*InternalStatus
288 IN EFI_HII_PROTOCOL
*This
,
289 IN UINT8
*GlyphBuffer
,
290 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Foreground
,
291 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background
,
295 IN OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL
*BltBuffer
301 IN EFI_HII_PROTOCOL
*This
,
303 IN FRAMEWORK_EFI_HII_HANDLE Handle
,
304 IN OUT STRING_REF
*Reference
,
311 IN EFI_HII_PROTOCOL
*This
,
312 IN FRAMEWORK_EFI_HII_HANDLE Handle
,
315 IN CHAR16
*LanguageString
,
316 IN OUT UINTN
*BufferLength
,
317 OUT EFI_STRING StringBuffer
323 IN EFI_HII_PROTOCOL
*This
,
324 IN FRAMEWORK_EFI_HII_HANDLE Handle
330 IN EFI_HII_PROTOCOL
*This
,
331 IN CHAR16
*StringToTest
,
332 IN OUT UINT32
*FirstMissing
,
333 OUT UINT32
*GlyphBufferSize
338 HiiGetPrimaryLanguages (
339 IN EFI_HII_PROTOCOL
*This
,
340 IN FRAMEWORK_EFI_HII_HANDLE Handle
,
341 OUT EFI_STRING
*LanguageString
346 HiiGetSecondaryLanguages (
347 IN EFI_HII_PROTOCOL
*This
,
348 IN FRAMEWORK_EFI_HII_HANDLE Handle
,
349 IN CHAR16
*PrimaryLanguage
,
350 OUT EFI_STRING
*LanguageString
356 IN EFI_HII_PROTOCOL
*This
,
357 IN FRAMEWORK_EFI_HII_HANDLE Handle
,
359 IN OUT UINT16
*Index
,
361 IN CHAR16
*LanguageString
,
362 IN OUT UINT16
*BufferLength
,
363 OUT EFI_STRING StringBuffer
369 IN EFI_HII_PROTOCOL
*This
,
370 IN FRAMEWORK_EFI_HII_HANDLE Handle
,
371 IN EFI_FORM_ID FormId
,
372 IN OUT UINTN
*BufferLength
,
379 IN EFI_HII_PROTOCOL
*This
,
380 IN FRAMEWORK_EFI_HII_HANDLE Handle
,
381 IN UINTN DefaultMask
,
382 OUT EFI_HII_VARIABLE_PACK_LIST
**VariablePackList
388 IN EFI_HII_PROTOCOL
*This
,
389 IN FRAMEWORK_EFI_HII_HANDLE Handle
,
390 IN EFI_FORM_LABEL Label
,
392 IN EFI_HII_UPDATE_DATA
*Data
397 HiiGetKeyboardLayout (
398 IN EFI_HII_PROTOCOL
*This
,
399 OUT UINT16
*DescriptorCount
,
400 OUT FRAMEWORK_EFI_KEY_DESCRIPTOR
*Descriptor
406 IN EFI_FORM_BROWSER_PROTOCOL
*This
,
407 IN BOOLEAN UseDatabase
,
408 IN FRAMEWORK_EFI_HII_HANDLE
*Handle
,
409 IN UINTN HandleCount
,
410 IN EFI_IFR_PACKET
*Packet
, OPTIONAL
411 IN EFI_HANDLE CallbackHandle
, OPTIONAL
412 IN UINT8
*NvMapOverride
, OPTIONAL
413 IN FRAMEWORK_EFI_SCREEN_DESCRIPTOR
*ScreenDimensions
, OPTIONAL
414 OUT BOOLEAN
*ResetRequired OPTIONAL
420 IN UINTN LinesNumber
,
422 IN UINTN MaximumStringSize
,
423 OUT CHAR16
*StringBuffer
,
424 OUT EFI_INPUT_KEY
*Key
,
425 IN CHAR16
*FirstString
,
432 IN UINT8 PackageType
,
433 IN CONST EFI_GUID
*PackageGuid
,
434 IN CONST EFI_HII_PACKAGE_HEADER
*Package
,
435 IN EFI_HII_HANDLE Handle
,
436 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType
442 IN UINT8 PackageType
,
443 IN CONST EFI_GUID
*PackageGuid
,
444 IN CONST EFI_HII_PACKAGE_HEADER
*Package
,
445 IN EFI_HII_HANDLE Handle
,
446 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType
450 Create a Hii Update data Handle used to call IfrLibUpdateForm.
452 @param ThunkContext The HII Thunk Context.
453 @param FwUpdateData The Framework Update Data.
454 @param UefiOpCodeHandle The UEFI Update Data.
456 @retval EFI_SUCCESS The UEFI Update Data is created successfully.
457 @retval EFI_UNSUPPORTED There is unsupported opcode in FwUpdateData.
458 @retval EFI_OUT_OF_RESOURCES There is not enough resource.
461 FwUpdateDataToUefiUpdateData (
462 IN HII_THUNK_CONTEXT
*ThunkContext
,
463 IN CONST EFI_HII_UPDATE_DATA
*FwUpdateData
,
464 IN VOID
*UefiOpCodeHandle
470 Initialize string packages in HII database.
474 InitSetBrowserStrings (
480 Convert language code from RFC4646 to ISO639-2.
482 LanguageRfc4646 contain a single RFC 4646 code such as
485 The LanguageRfc4646 must be a buffer large enough
486 for ISO_639_2_ENTRY_SIZE characters.
488 If LanguageRfc4646 is NULL, then ASSERT.
489 If LanguageIso639 is NULL, then ASSERT.
491 @param LanguageRfc4646 RFC4646 language code.
492 @param LanguageIso639 ISO639-2 language code.
494 @retval EFI_SUCCESS Language code converted.
495 @retval EFI_NOT_FOUND Language code not found.
500 ConvertRfc4646LanguageToIso639Language (
501 IN CHAR8
*LanguageRfc4646
,
502 OUT CHAR8
*LanguageIso639
507 Convert language code from ISO639-2 to RFC4646 and return the converted language.
508 Caller is responsible for freeing the allocated buffer.
510 LanguageIso639 contain a single ISO639-2 code such as
513 If LanguageIso639 is NULL, then ASSERT.
514 If LanguageRfc4646 is NULL, then ASSERT.
516 @param LanguageIso639 ISO639-2 language code.
518 @return the allocated buffer or NULL, if the language is not found.
523 ConvertIso639LanguageToRfc4646Language (
524 IN CONST CHAR8
*LanguageIso639
529 Get next language from language code list (with separator ';').
531 If LangCode is NULL, then ASSERT.
532 If Lang is NULL, then ASSERT.
534 @param LangCode On input: point to first language in the list. On
535 output: point to next language in the list, or
536 NULL if no more language in the list.
537 @param Lang The first language in the list.
543 IN OUT CHAR8
**LangCode
,
549 #include "ConfigAccess.h"