]> git.proxmox.com Git - mirror_edk2.git/blame - EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/HiiDatabase.h
Retire Extended HII library class.
[mirror_edk2.git] / EdkCompatibilityPkg / Compatibility / FrameworkHiiOnUefiHiiThunk / 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
f6f910dd 48#include <Library/DevicePathLib.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
7e26c7e7 55#include <Guid/MdeModuleHii.h>\r
59336178 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
974a0271 72///\r
73/// The size of a 3 character ISO639 language code.\r
74///\r
75#define ISO_639_2_ENTRY_SIZE 3\r
76\r
77\r
a3318eaf 78\r
88b6bcec 79#pragma pack (1)\r
4259256b 80typedef struct {\r
70d72ba9 81 EFI_HII_PACK_HEADER FrameworkPackageHeader;\r
4259256b 82 EFI_HII_PACKAGE_HEADER PackageHeader;\r
83} TIANO_AUTOGEN_PACKAGES_HEADER;\r
88b6bcec 84#pragma pack ()\r
4259256b 85\r
0368663f 86#define HII_THUNK_PRIVATE_DATA_FROM_THIS(Record) CR(Record, HII_THUNK_PRIVATE_DATA, Hii, HII_THUNK_PRIVATE_DATA_SIGNATURE)\r
a3a83173 87#define HII_THUNK_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('H', 'i', 'I', 'T')\r
4259256b 88typedef struct {\r
89 UINTN Signature;\r
90 EFI_HANDLE Handle;\r
91 EFI_HII_PROTOCOL Hii;\r
4259256b 92\r
93 //\r
0368663f 94 // The head of link list for all HII_THUNK_CONTEXT.\r
4259256b 95 //\r
0368663f 96 LIST_ENTRY ThunkContextListHead;\r
ea58467b 97\r
ea58467b 98 EFI_HANDLE RemovePackNotifyHandle;\r
99 EFI_HANDLE AddPackNotifyHandle;\r
0368663f 100} HII_THUNK_PRIVATE_DATA;\r
101\r
4259256b 102\r
103\r
0368663f 104\r
105\r
106#define QUESTION_ID_MAP_ENTRY_FROM_LINK(Record) CR(Record, QUESTION_ID_MAP_ENTRY, Link, QUESTION_ID_MAP_ENTRY_SIGNATURE)\r
a3a83173 107#define QUESTION_ID_MAP_ENTRY_SIGNATURE SIGNATURE_32 ('Q', 'I', 'M', 'E')\r
0368663f 108typedef struct {\r
109 UINT32 Signature;\r
110 LIST_ENTRY Link;\r
111 UINT16 FwQId;\r
112 EFI_QUESTION_ID UefiQid;\r
113} QUESTION_ID_MAP_ENTRY;\r
114\r
115\r
116\r
117#define QUESTION_ID_MAP_FROM_LINK(Record) CR(Record, QUESTION_ID_MAP, Link, QUESTION_ID_MAP_SIGNATURE)\r
a3a83173 118#define QUESTION_ID_MAP_SIGNATURE SIGNATURE_32 ('Q', 'I', 'M', 'P')\r
0368663f 119typedef struct {\r
120 UINT32 Signature;\r
121 LIST_ENTRY Link;\r
122 UINT16 VarStoreId;\r
123 UINTN VarSize;\r
124 LIST_ENTRY MapEntryListHead;\r
125} QUESTION_ID_MAP;\r
126\r
127\r
128\r
129#define HII_THUNK_CONTEXT_FROM_LINK(Record) CR(Record, HII_THUNK_CONTEXT, Link, HII_THUNK_CONTEXT_SIGNATURE)\r
a3a83173 130#define HII_THUNK_CONTEXT_SIGNATURE SIGNATURE_32 ('H', 'T', 'H', 'M')\r
0368663f 131typedef struct {\r
132 LIST_ENTRY Link;\r
4259256b 133 UINT32 Signature;\r
0368663f 134 FRAMEWORK_EFI_HII_HANDLE FwHiiHandle;\r
4259256b 135 EFI_HII_HANDLE UefiHiiHandle;\r
63dd6a96 136 EFI_HANDLE UefiHiiDriverHandle;\r
4259256b 137\r
0368663f 138 UINTN IfrPackageCount;\r
139 UINTN StringPackageCount;\r
140\r
d4775f2a 141 BOOLEAN ByFrameworkHiiNewPack;\r
142\r
4259256b 143 //\r
3321fa09 144 // HII Thunk will use TagGuid to associate the String Package and Form Package togehter.\r
145 // See description for TagGuid. This field is to record if either one of the following condition \r
146 // is TRUE:\r
147 // 1) if ((SharingStringPack == TRUE) && (StringPackageCount != 0 && IfrPackageCount == 0)), then this Package List only \r
148 /// has String Packages and provides Strings to other IFR package.\r
149 // 2) if ((SharingStringPack == TRUE) && (StringPackageCount == 0 && IfrPackageCount != 1)), then this Form Package\r
150 // copied String Packages from other Package List.\r
151 // 3) if ((SharingStringPack == FALSE)), this Package does not provide String Package or copy String Packages from other\r
152 // Package List.\r
153 //\r
154 //\r
155 // When a Hii->NewString() is called for this FwHiiHandle and SharingStringPack is TRUE, then all Package List that sharing\r
156 // the same TagGuid will update or create String in there respective String Packages. If SharingStringPack is FALSE, then\r
157 // only the String from String Packages in this Package List will be updated or created.\r
158 //\r
159 BOOLEAN SharingStringPack;\r
160\r
161 //\r
4259256b 162 // The HII 0.92 version of HII data implementation in EDK 1.03 and 1.04 make an the following assumption\r
163 // in both HII Database implementation and all modules that registering packages:\r
0368663f 164 // If a Package List has only IFR package and no String Package, the IFR package will reference \r
165 // String in another Package List registered with the HII database with the same EFI_HII_PACKAGES.GuidId.\r
166 // TagGuid is the used to record this GuidId.\r
4259256b 167 EFI_GUID TagGuid;\r
0368663f 168\r
0368663f 169 UINT8 *NvMapOverride;\r
170\r
a9d85320 171 FORM_BROWSER_FORMSET *FormSet;\r
172\r
0368663f 173} HII_THUNK_CONTEXT;\r
174\r
4259256b 175\r
0368663f 176\r
a3a83173 177#define BUFFER_STORAGE_ENTRY_SIGNATURE SIGNATURE_32 ('H', 'T', 's', 'k')\r
0368663f 178#define BUFFER_STORAGE_ENTRY_FROM_LINK(Record) CR(Record, BUFFER_STORAGE_ENTRY, Link, BUFFER_STORAGE_ENTRY_SIGNATURE)\r
ebbd2793 179typedef struct {\r
0368663f 180 LIST_ENTRY Link;\r
ebbd2793 181 UINT32 Signature;\r
182 EFI_GUID Guid;\r
183 CHAR16 *Name;\r
184 UINTN Size;\r
185 UINT16 VarStoreId;\r
0368663f 186} BUFFER_STORAGE_ENTRY;\r
187\r
f6f910dd 188#pragma pack(1)\r
ebbd2793 189\r
f6f910dd 190///\r
191/// HII specific Vendor Device Path definition.\r
192///\r
193typedef struct {\r
194 VENDOR_DEVICE_PATH VendorDevicePath;\r
195 EFI_DEVICE_PATH_PROTOCOL End;\r
196} HII_VENDOR_DEVICE_PATH;\r
197\r
198#pragma pack()\r
0368663f 199\r
a3a83173 200#define CONFIG_ACCESS_PRIVATE_SIGNATURE SIGNATURE_32 ('H', 'T', 'c', 'a')\r
0368663f 201#define CONFIG_ACCESS_PRIVATE_FROM_PROTOCOL(Record) CR(Record, CONFIG_ACCESS_PRIVATE, ConfigAccessProtocol, CONFIG_ACCESS_PRIVATE_SIGNATURE)\r
ebbd2793 202typedef struct {\r
203 UINT32 Signature;\r
204 EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccessProtocol;\r
0368663f 205 //\r
206 // Framework's callback\r
207 //\r
208 EFI_FORM_CALLBACK_PROTOCOL *FormCallbackProtocol;\r
209\r
0368663f 210 HII_THUNK_CONTEXT *ThunkContext;\r
211} CONFIG_ACCESS_PRIVATE;\r
212\r
213\r
ebbd2793 214\r
a3a83173 215#define EFI_FORMBROWSER_THUNK_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('F', 'B', 'T', 'd')\r
0368663f 216#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 217typedef struct {\r
218 UINTN Signature;\r
219 EFI_HANDLE Handle;\r
0368663f 220 HII_THUNK_PRIVATE_DATA *ThunkPrivate;\r
137c54ac 221 EFI_FORM_BROWSER_PROTOCOL FormBrowser;\r
222} EFI_FORMBROWSER_THUNK_PRIVATE_DATA;\r
223\r
224\r
4259256b 225//\r
226// Extern Variables\r
227//\r
59336178 228extern CONST EFI_HII_DATABASE_PROTOCOL *mHiiDatabase;\r
59336178 229extern CONST EFI_HII_IMAGE_PROTOCOL *mHiiImageProtocol;\r
230extern CONST EFI_HII_STRING_PROTOCOL *mHiiStringProtocol;\r
133a9dfb 231extern CONST EFI_HII_FONT_PROTOCOL *mHiiFontProtocol;\r
59336178 232extern CONST EFI_HII_CONFIG_ROUTING_PROTOCOL *mHiiConfigRoutingProtocol;\r
0368663f 233extern CONST EFI_FORM_BROWSER2_PROTOCOL *mFormBrowser2Protocol;\r
4259256b 234\r
0368663f 235extern HII_THUNK_PRIVATE_DATA *mHiiThunkPrivateData;\r
236\r
237extern BOOLEAN mInFrameworkUpdatePakcage;\r
ea58467b 238\r
239\r
4259256b 240EFI_STATUS\r
241EFIAPI\r
242HiiNewPack (\r
a3318eaf 243 IN EFI_HII_PROTOCOL *This,\r
244 IN EFI_HII_PACKAGES *PackageList,\r
245 OUT FRAMEWORK_EFI_HII_HANDLE *Handle\r
e00e1d46 246 );\r
4259256b 247\r
248EFI_STATUS\r
249EFIAPI\r
250HiiRemovePack (\r
a3318eaf 251 IN EFI_HII_PROTOCOL *This,\r
4259256b 252 IN FRAMEWORK_EFI_HII_HANDLE Handle\r
e00e1d46 253 );\r
4259256b 254\r
255EFI_STATUS\r
256EFIAPI\r
257HiiFindHandles (\r
a3318eaf 258 IN EFI_HII_PROTOCOL *This,\r
259 IN OUT UINT16 *HandleBufferLength,\r
260 OUT FRAMEWORK_EFI_HII_HANDLE *Handle\r
e00e1d46 261 );\r
4259256b 262\r
263EFI_STATUS\r
264EFIAPI\r
265HiiExportDatabase (\r
a3318eaf 266 IN EFI_HII_PROTOCOL *This,\r
267 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
268 IN OUT UINTN *BufferSize,\r
269 OUT VOID *Buffer\r
e00e1d46 270 );\r
4259256b 271\r
272EFI_STATUS\r
273EFIAPI\r
274HiiGetGlyph (\r
a3318eaf 275 IN EFI_HII_PROTOCOL *This,\r
276 IN CHAR16 *Source,\r
277 IN OUT UINT16 *Index,\r
278 OUT UINT8 **GlyphBuffer,\r
279 OUT UINT16 *BitWidth,\r
280 IN OUT UINT32 *InternalStatus\r
e00e1d46 281 );\r
4259256b 282\r
283EFI_STATUS\r
284EFIAPI\r
285HiiGlyphToBlt (\r
286 IN EFI_HII_PROTOCOL *This,\r
287 IN UINT8 *GlyphBuffer,\r
288 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Foreground,\r
289 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background,\r
290 IN UINTN Count,\r
291 IN UINTN Width,\r
292 IN UINTN Height,\r
293 IN OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer\r
e00e1d46 294 );\r
4259256b 295\r
296EFI_STATUS\r
297EFIAPI\r
298HiiNewString (\r
299 IN EFI_HII_PROTOCOL *This,\r
300 IN CHAR16 *Language,\r
301 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
302 IN OUT STRING_REF *Reference,\r
303 IN CHAR16 *NewString\r
e00e1d46 304 );\r
4259256b 305\r
306EFI_STATUS\r
307EFIAPI\r
308HiiGetString (\r
a3318eaf 309 IN EFI_HII_PROTOCOL *This,\r
310 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
311 IN STRING_REF Token,\r
312 IN BOOLEAN Raw,\r
313 IN CHAR16 *LanguageString,\r
314 IN OUT UINTN *BufferLength,\r
315 OUT EFI_STRING StringBuffer\r
e00e1d46 316 );\r
4259256b 317\r
318EFI_STATUS\r
319EFIAPI\r
320HiiResetStrings (\r
a3318eaf 321 IN EFI_HII_PROTOCOL *This,\r
322 IN FRAMEWORK_EFI_HII_HANDLE Handle\r
e00e1d46 323 );\r
4259256b 324\r
325EFI_STATUS\r
326EFIAPI\r
327HiiTestString (\r
a3318eaf 328 IN EFI_HII_PROTOCOL *This,\r
329 IN CHAR16 *StringToTest,\r
330 IN OUT UINT32 *FirstMissing,\r
331 OUT UINT32 *GlyphBufferSize\r
e00e1d46 332 );\r
4259256b 333\r
334EFI_STATUS\r
335EFIAPI\r
336HiiGetPrimaryLanguages (\r
a3318eaf 337 IN EFI_HII_PROTOCOL *This,\r
338 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
339 OUT EFI_STRING *LanguageString\r
e00e1d46 340 );\r
4259256b 341\r
342EFI_STATUS\r
343EFIAPI\r
344HiiGetSecondaryLanguages (\r
a3318eaf 345 IN EFI_HII_PROTOCOL *This,\r
346 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
347 IN CHAR16 *PrimaryLanguage,\r
348 OUT EFI_STRING *LanguageString\r
e00e1d46 349 );\r
4259256b 350\r
351EFI_STATUS\r
352EFIAPI\r
353HiiGetLine (\r
a3318eaf 354 IN EFI_HII_PROTOCOL *This,\r
4259256b 355 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
a3318eaf 356 IN STRING_REF Token,\r
357 IN OUT UINT16 *Index,\r
358 IN UINT16 LineWidth,\r
359 IN CHAR16 *LanguageString,\r
360 IN OUT UINT16 *BufferLength,\r
361 OUT EFI_STRING StringBuffer\r
e00e1d46 362 );\r
4259256b 363\r
364EFI_STATUS\r
365EFIAPI\r
366HiiGetForms (\r
a3318eaf 367 IN EFI_HII_PROTOCOL *This,\r
4259256b 368 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
a3318eaf 369 IN EFI_FORM_ID FormId,\r
370 IN OUT UINTN *BufferLength,\r
371 OUT UINT8 *Buffer\r
e00e1d46 372 );\r
4259256b 373\r
374EFI_STATUS\r
375EFIAPI\r
376HiiGetDefaultImage (\r
a3318eaf 377 IN EFI_HII_PROTOCOL *This,\r
378 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
379 IN UINTN DefaultMask,\r
380 OUT EFI_HII_VARIABLE_PACK_LIST **VariablePackList\r
e00e1d46 381 );\r
4259256b 382\r
383EFI_STATUS\r
384EFIAPI\r
385HiiUpdateForm (\r
a3318eaf 386 IN EFI_HII_PROTOCOL *This,\r
387 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
388 IN EFI_FORM_LABEL Label,\r
389 IN BOOLEAN AddData,\r
390 IN FRAMEWORK_EFI_HII_UPDATE_DATA *Data\r
e00e1d46 391 );\r
4259256b 392\r
393EFI_STATUS\r
394EFIAPI\r
395HiiGetKeyboardLayout (\r
a3318eaf 396 IN EFI_HII_PROTOCOL *This,\r
397 OUT UINT16 *DescriptorCount,\r
398 OUT FRAMEWORK_EFI_KEY_DESCRIPTOR *Descriptor\r
e00e1d46 399 );\r
4259256b 400\r
137c54ac 401EFI_STATUS\r
402EFIAPI \r
403ThunkSendForm (\r
404 IN EFI_FORM_BROWSER_PROTOCOL *This,\r
405 IN BOOLEAN UseDatabase,\r
406 IN FRAMEWORK_EFI_HII_HANDLE *Handle,\r
407 IN UINTN HandleCount,\r
a3318eaf 408 IN FRAMEWORK_EFI_IFR_PACKET *Packet, OPTIONAL\r
137c54ac 409 IN EFI_HANDLE CallbackHandle, OPTIONAL\r
410 IN UINT8 *NvMapOverride, OPTIONAL\r
a3318eaf 411 IN FRAMEWORK_EFI_SCREEN_DESCRIPTOR *ScreenDimensions, OPTIONAL\r
137c54ac 412 OUT BOOLEAN *ResetRequired OPTIONAL\r
e00e1d46 413 );\r
137c54ac 414\r
415EFI_STATUS\r
416EFIAPI \r
417ThunkCreatePopUp (\r
418 IN UINTN NumberOfLines,\r
419 IN BOOLEAN HotKey,\r
420 IN UINTN MaximumStringSize,\r
421 OUT CHAR16 *StringBuffer,\r
422 OUT EFI_INPUT_KEY *KeyValue,\r
423 IN CHAR16 *String,\r
424 ...\r
e00e1d46 425 );\r
137c54ac 426\r
0368663f 427EFI_STATUS\r
428EFIAPI\r
429RemovePackNotify (\r
430 IN UINT8 PackageType,\r
431 IN CONST EFI_GUID *PackageGuid,\r
432 IN CONST EFI_HII_PACKAGE_HEADER *Package,\r
433 IN EFI_HII_HANDLE Handle,\r
434 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType\r
e00e1d46 435 );\r
0368663f 436\r
437EFI_STATUS\r
438EFIAPI\r
439NewOrAddPackNotify (\r
440 IN UINT8 PackageType,\r
441 IN CONST EFI_GUID *PackageGuid,\r
442 IN CONST EFI_HII_PACKAGE_HEADER *Package,\r
443 IN EFI_HII_HANDLE Handle,\r
444 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType\r
e00e1d46 445 );\r
0368663f 446\r
03254710 447/**\r
448 Create a EFI_HII_UPDATE_DATA structure used to call IfrLibUpdateForm.\r
449\r
450 @param ThunkContext The HII Thunk Context.\r
451 @param FwUpdateData The Framework Update Data.\r
452 @param UefiUpdateData The UEFI Update Data.\r
453\r
454 @retval EFI_SUCCESS The UEFI Update Data is created successfully.\r
455 @retval EFI_UNSUPPORTED There is unsupported opcode in FwUpdateData.\r
456 @retval EFI_OUT_OF_RESOURCES There is not enough resource.\r
457**/\r
458EFI_STATUS\r
459FwUpdateDataToUefiUpdateData (\r
460 IN HII_THUNK_CONTEXT *ThunkContext,\r
461 IN CONST FRAMEWORK_EFI_HII_UPDATE_DATA *FwUpdateData,\r
462 OUT EFI_HII_UPDATE_DATA **UefiUpdateData\r
463 )\r
464;\r
465\r
a235abd2 466/** \r
467\r
468 Initialize string packages in HII database.\r
469\r
470**/\r
471VOID\r
472InitSetBrowserStrings (\r
473 VOID\r
474 )\r
475;\r
476\r
ee3428bb 477#include "Utility.h"\r
ebbd2793 478#include "ConfigAccess.h"\r
ee3428bb 479\r
4259256b 480#endif\r