]> git.proxmox.com Git - mirror_edk2.git/blame - EdkCompatibilityPkg/Compatibility/FrameworkHiiToUefiHiiThunk/HiiDatabase.h
Following UEFI spec to do auto booting after a time-out. This feature is implemented
[mirror_edk2.git] / EdkCompatibilityPkg / Compatibility / FrameworkHiiToUefiHiiThunk / HiiDatabase.h
CommitLineData
4259256b 1/**@file\r
2\r
3 This file contains global defines and prototype definitions\r
a3318eaf 4 for the Framework HII to Uefi HII Thunk Module.\r
4259256b 5 \r
6Copyright (c) 2006 - 2008, Intel Corporation\r
7All rights reserved. This program and the accompanying materials\r
8are licensed and made available under the terms and conditions of the BSD License\r
9which accompanies this distribution. The full text of the license may be found at\r
10http://opensource.org/licenses/bsd-license.php\r
11\r
12THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
13WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
14\r
15**/\r
16\r
17#ifndef _HIIDATABASE_H\r
18#define _HIIDATABASE_H\r
19\r
20\r
21#include <FrameworkDxe.h>\r
22\r
23#include <Guid/GlobalVariable.h>\r
24#include <Protocol/FrameworkFormCallback.h>\r
25#include <Protocol/FrameworkHii.h>\r
137c54ac 26#include <Protocol/FrameworkFormBrowser.h>\r
4259256b 27\r
28//\r
29// UEFI HII Protocols\r
30//\r
31#include <Protocol/HiiFont.h>\r
32#include <Protocol/HiiImage.h>\r
33#include <Protocol/HiiString.h>\r
34#include <Protocol/HiiDatabase.h>\r
35#include <Protocol/HiiConfigRouting.h>\r
36#include <Protocol/HiiConfigAccess.h>\r
a235abd2 37#include <Protocol/UgaDraw.h>\r
4259256b 38\r
39\r
40#include <Library/BaseLib.h>\r
41#include <Library/DebugLib.h>\r
42#include <Library/UefiDriverEntryPoint.h>\r
43#include <Library/MemoryAllocationLib.h>\r
44#include <Library/BaseMemoryLib.h>\r
45#include <Library/UefiBootServicesTableLib.h>\r
46#include <Library/UefiRuntimeServicesTableLib.h>\r
4259256b 47#include <Library/HiiLib.h>\r
ebbd2793 48#include <Library/ExtendedHiiLib.h>\r
a235abd2 49#include <Library/UefiLib.h>\r
4259256b 50\r
99a83b4c 51#include <Library/IfrSupportLib.h>\r
52#include <Library/ExtendedIfrSupportLib.h>\r
a235abd2 53#include <Library/PcdLib.h>\r
99a83b4c 54\r
59336178 55#include <MdeModuleHii.h>\r
56\r
a9d85320 57#include "UefiIfrParser.h"\r
58\r
a3318eaf 59\r
60//\r
73d1dcbb 61// VARSTORE ID of 0 for Buffer Storage Type Storage is defined as invalid in UEFI 2.1 HII. VARSTORE ID\r
62// 0 is the default VarStore ID for storage without explicit declaration in Framework HII 0.92. EDK II UEFI VFR compiler\r
63// in compatible mode will assign 0x0001 as UEFI VARSTORE ID to this default storage id in Framework VFR without\r
64// VARSTORE declaration.\r
65// \r
66// In addition, the Name of Default VarStore is assumed to be L"Setup" for those storage without explicit VARSTORE declaration in the formset\r
67// by Framework HII. EDK II UEFI VFR compiler in compatible mode hard-coded L"Setup" as VARSTORE name.\r
a3318eaf 68//\r
a9d85320 69#define FRAMEWORK_RESERVED_VARSTORE_ID 0x0001\r
73d1dcbb 70#define FRAMEWORK_RESERVED_VARSTORE_NAME L"Setup"\r
a3318eaf 71\r
72\r
88b6bcec 73#pragma pack (1)\r
4259256b 74typedef struct {\r
70d72ba9 75 EFI_HII_PACK_HEADER FrameworkPackageHeader;\r
4259256b 76 EFI_HII_PACKAGE_HEADER PackageHeader;\r
77} TIANO_AUTOGEN_PACKAGES_HEADER;\r
88b6bcec 78#pragma pack ()\r
4259256b 79\r
0368663f 80#define HII_THUNK_PRIVATE_DATA_FROM_THIS(Record) CR(Record, HII_THUNK_PRIVATE_DATA, Hii, HII_THUNK_PRIVATE_DATA_SIGNATURE)\r
a3a83173 81#define HII_THUNK_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('H', 'i', 'I', 'T')\r
4259256b 82typedef struct {\r
83 UINTN Signature;\r
84 EFI_HANDLE Handle;\r
85 EFI_HII_PROTOCOL Hii;\r
4259256b 86\r
87 //\r
0368663f 88 // The head of link list for all HII_THUNK_CONTEXT.\r
4259256b 89 //\r
0368663f 90 LIST_ENTRY ThunkContextListHead;\r
ea58467b 91\r
ea58467b 92 EFI_HANDLE RemovePackNotifyHandle;\r
93 EFI_HANDLE AddPackNotifyHandle;\r
0368663f 94} HII_THUNK_PRIVATE_DATA;\r
95\r
4259256b 96\r
97\r
0368663f 98\r
99\r
100#define QUESTION_ID_MAP_ENTRY_FROM_LINK(Record) CR(Record, QUESTION_ID_MAP_ENTRY, Link, QUESTION_ID_MAP_ENTRY_SIGNATURE)\r
a3a83173 101#define QUESTION_ID_MAP_ENTRY_SIGNATURE SIGNATURE_32 ('Q', 'I', 'M', 'E')\r
0368663f 102typedef struct {\r
103 UINT32 Signature;\r
104 LIST_ENTRY Link;\r
105 UINT16 FwQId;\r
106 EFI_QUESTION_ID UefiQid;\r
107} QUESTION_ID_MAP_ENTRY;\r
108\r
109\r
110\r
111#define QUESTION_ID_MAP_FROM_LINK(Record) CR(Record, QUESTION_ID_MAP, Link, QUESTION_ID_MAP_SIGNATURE)\r
a3a83173 112#define QUESTION_ID_MAP_SIGNATURE SIGNATURE_32 ('Q', 'I', 'M', 'P')\r
0368663f 113typedef struct {\r
114 UINT32 Signature;\r
115 LIST_ENTRY Link;\r
116 UINT16 VarStoreId;\r
117 UINTN VarSize;\r
118 LIST_ENTRY MapEntryListHead;\r
119} QUESTION_ID_MAP;\r
120\r
121\r
122\r
123#define HII_THUNK_CONTEXT_FROM_LINK(Record) CR(Record, HII_THUNK_CONTEXT, Link, HII_THUNK_CONTEXT_SIGNATURE)\r
a3a83173 124#define HII_THUNK_CONTEXT_SIGNATURE SIGNATURE_32 ('H', 'T', 'H', 'M')\r
0368663f 125typedef struct {\r
126 LIST_ENTRY Link;\r
4259256b 127 UINT32 Signature;\r
0368663f 128 FRAMEWORK_EFI_HII_HANDLE FwHiiHandle;\r
4259256b 129 EFI_HII_HANDLE UefiHiiHandle;\r
63dd6a96 130 EFI_HANDLE UefiHiiDriverHandle;\r
4259256b 131\r
0368663f 132 UINTN IfrPackageCount;\r
133 UINTN StringPackageCount;\r
134\r
d4775f2a 135 BOOLEAN ByFrameworkHiiNewPack;\r
136\r
4259256b 137 //\r
3321fa09 138 // HII Thunk will use TagGuid to associate the String Package and Form Package togehter.\r
139 // See description for TagGuid. This field is to record if either one of the following condition \r
140 // is TRUE:\r
141 // 1) if ((SharingStringPack == TRUE) && (StringPackageCount != 0 && IfrPackageCount == 0)), then this Package List only \r
142 /// has String Packages and provides Strings to other IFR package.\r
143 // 2) if ((SharingStringPack == TRUE) && (StringPackageCount == 0 && IfrPackageCount != 1)), then this Form Package\r
144 // copied String Packages from other Package List.\r
145 // 3) if ((SharingStringPack == FALSE)), this Package does not provide String Package or copy String Packages from other\r
146 // Package List.\r
147 //\r
148 //\r
149 // When a Hii->NewString() is called for this FwHiiHandle and SharingStringPack is TRUE, then all Package List that sharing\r
150 // the same TagGuid will update or create String in there respective String Packages. If SharingStringPack is FALSE, then\r
151 // only the String from String Packages in this Package List will be updated or created.\r
152 //\r
153 BOOLEAN SharingStringPack;\r
154\r
155 //\r
4259256b 156 // The HII 0.92 version of HII data implementation in EDK 1.03 and 1.04 make an the following assumption\r
157 // in both HII Database implementation and all modules that registering packages:\r
0368663f 158 // If a Package List has only IFR package and no String Package, the IFR package will reference \r
159 // String in another Package List registered with the HII database with the same EFI_HII_PACKAGES.GuidId.\r
160 // TagGuid is the used to record this GuidId.\r
4259256b 161 EFI_GUID TagGuid;\r
0368663f 162\r
0368663f 163 UINT8 *NvMapOverride;\r
164\r
a9d85320 165 FORM_BROWSER_FORMSET *FormSet;\r
166\r
0368663f 167} HII_THUNK_CONTEXT;\r
168\r
4259256b 169\r
0368663f 170\r
a3a83173 171#define BUFFER_STORAGE_ENTRY_SIGNATURE SIGNATURE_32 ('H', 'T', 's', 'k')\r
0368663f 172#define BUFFER_STORAGE_ENTRY_FROM_LINK(Record) CR(Record, BUFFER_STORAGE_ENTRY, Link, BUFFER_STORAGE_ENTRY_SIGNATURE)\r
ebbd2793 173typedef struct {\r
0368663f 174 LIST_ENTRY Link;\r
ebbd2793 175 UINT32 Signature;\r
176 EFI_GUID Guid;\r
177 CHAR16 *Name;\r
178 UINTN Size;\r
179 UINT16 VarStoreId;\r
0368663f 180} BUFFER_STORAGE_ENTRY;\r
181\r
ebbd2793 182\r
0368663f 183\r
a3a83173 184#define CONFIG_ACCESS_PRIVATE_SIGNATURE SIGNATURE_32 ('H', 'T', 'c', 'a')\r
0368663f 185#define CONFIG_ACCESS_PRIVATE_FROM_PROTOCOL(Record) CR(Record, CONFIG_ACCESS_PRIVATE, ConfigAccessProtocol, CONFIG_ACCESS_PRIVATE_SIGNATURE)\r
ebbd2793 186typedef struct {\r
187 UINT32 Signature;\r
188 EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccessProtocol;\r
0368663f 189 //\r
190 // Framework's callback\r
191 //\r
192 EFI_FORM_CALLBACK_PROTOCOL *FormCallbackProtocol;\r
193\r
0368663f 194 HII_THUNK_CONTEXT *ThunkContext;\r
195} CONFIG_ACCESS_PRIVATE;\r
196\r
197\r
ebbd2793 198\r
a3a83173 199#define EFI_FORMBROWSER_THUNK_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('F', 'B', 'T', 'd')\r
0368663f 200#define EFI_FORMBROWSER_THUNK_PRIVATE_DATA_FROM_THIS(Record) CR(Record, EFI_FORMBROWSER_THUNK_PRIVATE_DATA, FormBrowser, EFI_FORMBROWSER_THUNK_PRIVATE_DATA_SIGNATURE)\r
137c54ac 201typedef struct {\r
202 UINTN Signature;\r
203 EFI_HANDLE Handle;\r
0368663f 204 HII_THUNK_PRIVATE_DATA *ThunkPrivate;\r
137c54ac 205 EFI_FORM_BROWSER_PROTOCOL FormBrowser;\r
206} EFI_FORMBROWSER_THUNK_PRIVATE_DATA;\r
207\r
208\r
4259256b 209//\r
210// Extern Variables\r
211//\r
59336178 212extern CONST EFI_HII_DATABASE_PROTOCOL *mHiiDatabase;\r
59336178 213extern CONST EFI_HII_IMAGE_PROTOCOL *mHiiImageProtocol;\r
214extern CONST EFI_HII_STRING_PROTOCOL *mHiiStringProtocol;\r
133a9dfb 215extern CONST EFI_HII_FONT_PROTOCOL *mHiiFontProtocol;\r
59336178 216extern CONST EFI_HII_CONFIG_ROUTING_PROTOCOL *mHiiConfigRoutingProtocol;\r
0368663f 217extern CONST EFI_FORM_BROWSER2_PROTOCOL *mFormBrowser2Protocol;\r
4259256b 218\r
0368663f 219extern HII_THUNK_PRIVATE_DATA *mHiiThunkPrivateData;\r
220\r
221extern BOOLEAN mInFrameworkUpdatePakcage;\r
ea58467b 222\r
223\r
4259256b 224EFI_STATUS\r
225EFIAPI\r
226HiiNewPack (\r
a3318eaf 227 IN EFI_HII_PROTOCOL *This,\r
228 IN EFI_HII_PACKAGES *PackageList,\r
229 OUT FRAMEWORK_EFI_HII_HANDLE *Handle\r
e00e1d46 230 );\r
4259256b 231\r
232EFI_STATUS\r
233EFIAPI\r
234HiiRemovePack (\r
a3318eaf 235 IN EFI_HII_PROTOCOL *This,\r
4259256b 236 IN FRAMEWORK_EFI_HII_HANDLE Handle\r
e00e1d46 237 );\r
4259256b 238\r
239EFI_STATUS\r
240EFIAPI\r
241HiiFindHandles (\r
a3318eaf 242 IN EFI_HII_PROTOCOL *This,\r
243 IN OUT UINT16 *HandleBufferLength,\r
244 OUT FRAMEWORK_EFI_HII_HANDLE *Handle\r
e00e1d46 245 );\r
4259256b 246\r
247EFI_STATUS\r
248EFIAPI\r
249HiiExportDatabase (\r
a3318eaf 250 IN EFI_HII_PROTOCOL *This,\r
251 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
252 IN OUT UINTN *BufferSize,\r
253 OUT VOID *Buffer\r
e00e1d46 254 );\r
4259256b 255\r
256EFI_STATUS\r
257EFIAPI\r
258HiiGetGlyph (\r
a3318eaf 259 IN EFI_HII_PROTOCOL *This,\r
260 IN CHAR16 *Source,\r
261 IN OUT UINT16 *Index,\r
262 OUT UINT8 **GlyphBuffer,\r
263 OUT UINT16 *BitWidth,\r
264 IN OUT UINT32 *InternalStatus\r
e00e1d46 265 );\r
4259256b 266\r
267EFI_STATUS\r
268EFIAPI\r
269HiiGlyphToBlt (\r
270 IN EFI_HII_PROTOCOL *This,\r
271 IN UINT8 *GlyphBuffer,\r
272 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Foreground,\r
273 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background,\r
274 IN UINTN Count,\r
275 IN UINTN Width,\r
276 IN UINTN Height,\r
277 IN OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer\r
e00e1d46 278 );\r
4259256b 279\r
280EFI_STATUS\r
281EFIAPI\r
282HiiNewString (\r
283 IN EFI_HII_PROTOCOL *This,\r
284 IN CHAR16 *Language,\r
285 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
286 IN OUT STRING_REF *Reference,\r
287 IN CHAR16 *NewString\r
e00e1d46 288 );\r
4259256b 289\r
290EFI_STATUS\r
291EFIAPI\r
292HiiGetString (\r
a3318eaf 293 IN EFI_HII_PROTOCOL *This,\r
294 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
295 IN STRING_REF Token,\r
296 IN BOOLEAN Raw,\r
297 IN CHAR16 *LanguageString,\r
298 IN OUT UINTN *BufferLength,\r
299 OUT EFI_STRING StringBuffer\r
e00e1d46 300 );\r
4259256b 301\r
302EFI_STATUS\r
303EFIAPI\r
304HiiResetStrings (\r
a3318eaf 305 IN EFI_HII_PROTOCOL *This,\r
306 IN FRAMEWORK_EFI_HII_HANDLE Handle\r
e00e1d46 307 );\r
4259256b 308\r
309EFI_STATUS\r
310EFIAPI\r
311HiiTestString (\r
a3318eaf 312 IN EFI_HII_PROTOCOL *This,\r
313 IN CHAR16 *StringToTest,\r
314 IN OUT UINT32 *FirstMissing,\r
315 OUT UINT32 *GlyphBufferSize\r
e00e1d46 316 );\r
4259256b 317\r
318EFI_STATUS\r
319EFIAPI\r
320HiiGetPrimaryLanguages (\r
a3318eaf 321 IN EFI_HII_PROTOCOL *This,\r
322 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
323 OUT EFI_STRING *LanguageString\r
e00e1d46 324 );\r
4259256b 325\r
326EFI_STATUS\r
327EFIAPI\r
328HiiGetSecondaryLanguages (\r
a3318eaf 329 IN EFI_HII_PROTOCOL *This,\r
330 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
331 IN CHAR16 *PrimaryLanguage,\r
332 OUT EFI_STRING *LanguageString\r
e00e1d46 333 );\r
4259256b 334\r
335EFI_STATUS\r
336EFIAPI\r
337HiiGetLine (\r
a3318eaf 338 IN EFI_HII_PROTOCOL *This,\r
4259256b 339 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
a3318eaf 340 IN STRING_REF Token,\r
341 IN OUT UINT16 *Index,\r
342 IN UINT16 LineWidth,\r
343 IN CHAR16 *LanguageString,\r
344 IN OUT UINT16 *BufferLength,\r
345 OUT EFI_STRING StringBuffer\r
e00e1d46 346 );\r
4259256b 347\r
348EFI_STATUS\r
349EFIAPI\r
350HiiGetForms (\r
a3318eaf 351 IN EFI_HII_PROTOCOL *This,\r
4259256b 352 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
a3318eaf 353 IN EFI_FORM_ID FormId,\r
354 IN OUT UINTN *BufferLength,\r
355 OUT UINT8 *Buffer\r
e00e1d46 356 );\r
4259256b 357\r
358EFI_STATUS\r
359EFIAPI\r
360HiiGetDefaultImage (\r
a3318eaf 361 IN EFI_HII_PROTOCOL *This,\r
362 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
363 IN UINTN DefaultMask,\r
364 OUT EFI_HII_VARIABLE_PACK_LIST **VariablePackList\r
e00e1d46 365 );\r
4259256b 366\r
367EFI_STATUS\r
368EFIAPI\r
369HiiUpdateForm (\r
a3318eaf 370 IN EFI_HII_PROTOCOL *This,\r
371 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
372 IN EFI_FORM_LABEL Label,\r
373 IN BOOLEAN AddData,\r
374 IN FRAMEWORK_EFI_HII_UPDATE_DATA *Data\r
e00e1d46 375 );\r
4259256b 376\r
377EFI_STATUS\r
378EFIAPI\r
379HiiGetKeyboardLayout (\r
a3318eaf 380 IN EFI_HII_PROTOCOL *This,\r
381 OUT UINT16 *DescriptorCount,\r
382 OUT FRAMEWORK_EFI_KEY_DESCRIPTOR *Descriptor\r
e00e1d46 383 );\r
4259256b 384\r
137c54ac 385EFI_STATUS\r
386EFIAPI \r
387ThunkSendForm (\r
388 IN EFI_FORM_BROWSER_PROTOCOL *This,\r
389 IN BOOLEAN UseDatabase,\r
390 IN FRAMEWORK_EFI_HII_HANDLE *Handle,\r
391 IN UINTN HandleCount,\r
a3318eaf 392 IN FRAMEWORK_EFI_IFR_PACKET *Packet, OPTIONAL\r
137c54ac 393 IN EFI_HANDLE CallbackHandle, OPTIONAL\r
394 IN UINT8 *NvMapOverride, OPTIONAL\r
a3318eaf 395 IN FRAMEWORK_EFI_SCREEN_DESCRIPTOR *ScreenDimensions, OPTIONAL\r
137c54ac 396 OUT BOOLEAN *ResetRequired OPTIONAL\r
e00e1d46 397 );\r
137c54ac 398\r
399EFI_STATUS\r
400EFIAPI \r
401ThunkCreatePopUp (\r
402 IN UINTN NumberOfLines,\r
403 IN BOOLEAN HotKey,\r
404 IN UINTN MaximumStringSize,\r
405 OUT CHAR16 *StringBuffer,\r
406 OUT EFI_INPUT_KEY *KeyValue,\r
407 IN CHAR16 *String,\r
408 ...\r
e00e1d46 409 );\r
137c54ac 410\r
0368663f 411EFI_STATUS\r
412EFIAPI\r
413RemovePackNotify (\r
414 IN UINT8 PackageType,\r
415 IN CONST EFI_GUID *PackageGuid,\r
416 IN CONST EFI_HII_PACKAGE_HEADER *Package,\r
417 IN EFI_HII_HANDLE Handle,\r
418 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType\r
e00e1d46 419 );\r
0368663f 420\r
421EFI_STATUS\r
422EFIAPI\r
423NewOrAddPackNotify (\r
424 IN UINT8 PackageType,\r
425 IN CONST EFI_GUID *PackageGuid,\r
426 IN CONST EFI_HII_PACKAGE_HEADER *Package,\r
427 IN EFI_HII_HANDLE Handle,\r
428 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType\r
e00e1d46 429 );\r
0368663f 430\r
03254710 431/**\r
432 Create a EFI_HII_UPDATE_DATA structure used to call IfrLibUpdateForm.\r
433\r
434 @param ThunkContext The HII Thunk Context.\r
435 @param FwUpdateData The Framework Update Data.\r
436 @param UefiUpdateData The UEFI Update Data.\r
437\r
438 @retval EFI_SUCCESS The UEFI Update Data is created successfully.\r
439 @retval EFI_UNSUPPORTED There is unsupported opcode in FwUpdateData.\r
440 @retval EFI_OUT_OF_RESOURCES There is not enough resource.\r
441**/\r
442EFI_STATUS\r
443FwUpdateDataToUefiUpdateData (\r
444 IN HII_THUNK_CONTEXT *ThunkContext,\r
445 IN CONST FRAMEWORK_EFI_HII_UPDATE_DATA *FwUpdateData,\r
446 OUT EFI_HII_UPDATE_DATA **UefiUpdateData\r
447 )\r
448;\r
449\r
a235abd2 450/** \r
451\r
452 Initialize string packages in HII database.\r
453\r
454**/\r
455VOID\r
456InitSetBrowserStrings (\r
457 VOID\r
458 )\r
459;\r
460\r
ee3428bb 461#include "Utility.h"\r
ebbd2793 462#include "ConfigAccess.h"\r
ee3428bb 463\r
4259256b 464#endif\r