3 This file contains global defines and prototype definitions
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>
30 #include <Protocol/HiiFont.h>
31 #include <Protocol/HiiImage.h>
32 #include <Protocol/HiiString.h>
33 #include <Protocol/HiiDatabase.h>
34 #include <Protocol/HiiConfigRouting.h>
35 #include <Protocol/HiiConfigAccess.h>
38 #include <Library/BaseLib.h>
39 #include <Library/DebugLib.h>
40 #include <Library/UefiDriverEntryPoint.h>
41 #include <Library/MemoryAllocationLib.h>
42 #include <Library/BaseMemoryLib.h>
43 #include <Library/UefiBootServicesTableLib.h>
44 #include <Library/UefiRuntimeServicesTableLib.h>
45 //#include <Library/FrameworkIfrSupportLib.h>
46 #include <Library/HiiLib.h>
47 #include <Library/ExtendedHiiLib.h>
50 // There are some type redefinitions between Framework Ifr Support Library and
51 // UEFI HII Ifr Support Library. We undefine the duplicated Framework definition here
52 // so that the duplicated definitions in UEFI HII Ifr can be defined.
53 // In this Thunk Module, we will access all Framework definition with "FRAMEWORK_" prefix.
56 #undef EFI_HII_UPDATE_DATA
58 #include <Library/IfrSupportLib.h>
59 #include <Library/ExtendedIfrSupportLib.h>
70 #pragma pack (push, 1)
73 EFI_HII_PACKAGE_HEADER PackageHeader
;
74 } TIANO_AUTOGEN_PACKAGES_HEADER
;
77 #define EFI_HII_THUNK_PRIVATE_DATA_FROM_THIS(Record) CR(Record, EFI_HII_THUNK_PRIVATE_DATA, Hii, EFI_HII_THUNK_DRIVER_DATA_SIGNATURE)
78 #define EFI_HII_THUNK_DRIVER_DATA_SIGNATURE EFI_SIGNATURE_32 ('H', 'i', 'I', 'T')
83 FRAMEWORK_EFI_HII_HANDLE StaticHiiHandle
;
86 // This LIST_ENTRY is the list head which has HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY type
89 LIST_ENTRY HiiThunkHandleMappingDBListHead
;
91 } EFI_HII_THUNK_PRIVATE_DATA
;
94 #define HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY_FROM_LISTENTRY(Record) CR(Record, HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY, List, HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY_SIGNATURE)
95 #define HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY_SIGNATURE EFI_SIGNATURE_32 ('H', 'T', 'H', 'M')
99 FRAMEWORK_EFI_HII_HANDLE FrameworkHiiHandle
;
100 EFI_HII_HANDLE UefiHiiHandle
;
102 BOOLEAN IsPackageListWithOnlyStringPackages
;
104 // The field below is only valid if IsPackageListWithOnlyStringPack is TRUE.
105 // The HII 0.92 version of HII data implementation in EDK 1.03 and 1.04 make an the following assumption
106 // in both HII Database implementation and all modules that registering packages:
107 // If a Package List has only IFR package and no String Package, the String Package containing the strings
108 // referenced by this IFR package is in another Package List
109 // registered with the HII database with the same EFI_HII_PACKAGES.GuidId.
112 // Only valid if IsPackageListWithSingleStringPack is TRUE.
113 // UEFI Package List Head Pointer, pointing to a allocated buffer containing the package
115 EFI_HII_PACKAGE_LIST_HEADER
*UefiStringPackageListHeader
; //Only valid if IsStringPack is TRUE.
116 //This UEFI Package list only consists of a list of string packages.
120 // TRUE if the package list identified by UefiHiiHandle imports String Packages from
121 // other package list with IsPackageListWithOnlyStringPackages is TRUE.
123 BOOLEAN DoesPackageListImportStringPackages
;
125 } HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY
;
127 #define HII_TRHUNK_BUFFER_STORAGE_KEY_SIGNATURE EFI_SIGNATURE_32 ('H', 'T', 's', 'k')
128 #define HII_TRHUNK_BUFFER_STORAGE_KEY_FROM_LIST_ENTRY(Record) CR(Record, HII_TRHUNK_BUFFER_STORAGE_KEY, List, HII_TRHUNK_BUFFER_STORAGE_KEY_SIGNATURE)
136 } HII_TRHUNK_BUFFER_STORAGE_KEY
;
138 #define HII_TRHUNK_CONFIG_ACCESS_PROTOCOL_INSTANCE_SIGNATURE EFI_SIGNATURE_32 ('H', 'T', 'c', 'a')
139 #define HII_TRHUNK_CONFIG_ACCESS_PROTOCOL_INSTANCE_FROM_PROTOCOL(Record) CR(Record, HII_TRHUNK_CONFIG_ACCESS_PROTOCOL_INSTANCE, ConfigAccessProtocol, HII_TRHUNK_CONFIG_ACCESS_PROTOCOL_INSTANCE_SIGNATURE)
142 EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccessProtocol
;
143 EFI_FORM_CALLBACK_PROTOCOL
*FrameworkFormCallbackProtocol
;
144 LIST_ENTRY ConfigAccessBufferStorageListHead
;
145 } HII_TRHUNK_CONFIG_ACCESS_PROTOCOL_INSTANCE
;
150 extern CONST EFI_HII_DATABASE_PROTOCOL
*mUefiHiiDatabaseProtocol
;
151 extern CONST EFI_HII_FONT_PROTOCOL
*mUefiHiiFontProtocol
;
152 extern CONST EFI_HII_IMAGE_PROTOCOL
*mUefiHiiImageProtocol
;
153 extern CONST EFI_HII_STRING_PROTOCOL
*mUefiStringProtocol
;
154 extern CONST EFI_HII_CONFIG_ROUTING_PROTOCOL
*mUefiConfigRoutingProtocol
;
161 // Public Interface Prototypes
165 InitializeHiiDatabase (
166 IN EFI_HANDLE ImageHandle
,
167 IN EFI_SYSTEM_TABLE
*SystemTable
174 IN EFI_HII_PROTOCOL
*This
,
175 IN EFI_HII_PACKAGES
*PackageList
,
176 OUT FRAMEWORK_EFI_HII_HANDLE
*Handle
183 IN EFI_HII_PROTOCOL
*This
,
184 IN FRAMEWORK_EFI_HII_HANDLE Handle
191 IN EFI_HII_PROTOCOL
*This
,
192 IN OUT UINT16
*HandleBufferLength
,
193 OUT FRAMEWORK_EFI_HII_HANDLE
*Handle
200 IN EFI_HII_PROTOCOL
*This
,
201 IN FRAMEWORK_EFI_HII_HANDLE Handle
,
202 IN OUT UINTN
*BufferSize
,
210 IN EFI_HII_PROTOCOL
*This
,
212 IN OUT UINT16
*Index
,
213 OUT UINT8
**GlyphBuffer
,
214 OUT UINT16
*BitWidth
,
215 IN OUT UINT32
*InternalStatus
222 IN EFI_HII_PROTOCOL
*This
,
223 IN UINT8
*GlyphBuffer
,
224 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Foreground
,
225 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background
,
229 IN OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL
*BltBuffer
236 IN EFI_HII_PROTOCOL
*This
,
238 IN FRAMEWORK_EFI_HII_HANDLE Handle
,
239 IN OUT STRING_REF
*Reference
,
247 IN EFI_HII_PROTOCOL
*This
,
248 IN FRAMEWORK_EFI_HII_HANDLE Handle
,
251 IN CHAR16
*LanguageString
,
252 IN OUT UINTN
*BufferLength
,
253 OUT EFI_STRING StringBuffer
260 IN EFI_HII_PROTOCOL
*This
,
261 IN FRAMEWORK_EFI_HII_HANDLE Handle
268 IN EFI_HII_PROTOCOL
*This
,
269 IN CHAR16
*StringToTest
,
270 IN OUT UINT32
*FirstMissing
,
271 OUT UINT32
*GlyphBufferSize
277 HiiGetPrimaryLanguages (
278 IN EFI_HII_PROTOCOL
*This
,
279 IN FRAMEWORK_EFI_HII_HANDLE Handle
,
280 OUT EFI_STRING
*LanguageString
286 HiiGetSecondaryLanguages (
287 IN EFI_HII_PROTOCOL
*This
,
288 IN FRAMEWORK_EFI_HII_HANDLE Handle
,
289 IN CHAR16
*PrimaryLanguage
,
290 OUT EFI_STRING
*LanguageString
297 IN EFI_HII_PROTOCOL
*This
,
298 IN FRAMEWORK_EFI_HII_HANDLE Handle
,
300 IN OUT UINT16
*Index
,
302 IN CHAR16
*LanguageString
,
303 IN OUT UINT16
*BufferLength
,
304 OUT EFI_STRING StringBuffer
311 IN EFI_HII_PROTOCOL
*This
,
312 IN FRAMEWORK_EFI_HII_HANDLE Handle
,
313 IN EFI_FORM_ID FormId
,
314 IN OUT UINTN
*BufferLength
,
322 IN EFI_HII_PROTOCOL
*This
,
323 IN FRAMEWORK_EFI_HII_HANDLE Handle
,
324 IN UINTN DefaultMask
,
325 OUT EFI_HII_VARIABLE_PACK_LIST
**VariablePackList
332 IN EFI_HII_PROTOCOL
*This
,
333 IN FRAMEWORK_EFI_HII_HANDLE Handle
,
334 IN EFI_FORM_LABEL Label
,
336 IN FRAMEWORK_EFI_HII_UPDATE_DATA
*Data
342 HiiGetKeyboardLayout (
343 IN EFI_HII_PROTOCOL
*This
,
344 OUT UINT16
*DescriptorCount
,
345 OUT FRAMEWORK_EFI_KEY_DESCRIPTOR
*Descriptor
351 IN CHAR16
*LanguageStringLocation
,
357 #include "ConfigAccess.h"