]> git.proxmox.com Git - mirror_edk2.git/blame - EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/HiiDatabase.h
Fix build break.
[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
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
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
ebbd2793 188\r
0368663f 189\r
a3a83173 190#define CONFIG_ACCESS_PRIVATE_SIGNATURE SIGNATURE_32 ('H', 'T', 'c', 'a')\r
0368663f 191#define CONFIG_ACCESS_PRIVATE_FROM_PROTOCOL(Record) CR(Record, CONFIG_ACCESS_PRIVATE, ConfigAccessProtocol, CONFIG_ACCESS_PRIVATE_SIGNATURE)\r
ebbd2793 192typedef struct {\r
193 UINT32 Signature;\r
194 EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccessProtocol;\r
0368663f 195 //\r
196 // Framework's callback\r
197 //\r
198 EFI_FORM_CALLBACK_PROTOCOL *FormCallbackProtocol;\r
199\r
0368663f 200 HII_THUNK_CONTEXT *ThunkContext;\r
201} CONFIG_ACCESS_PRIVATE;\r
202\r
203\r
ebbd2793 204\r
a3a83173 205#define EFI_FORMBROWSER_THUNK_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('F', 'B', 'T', 'd')\r
0368663f 206#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 207typedef struct {\r
208 UINTN Signature;\r
209 EFI_HANDLE Handle;\r
0368663f 210 HII_THUNK_PRIVATE_DATA *ThunkPrivate;\r
137c54ac 211 EFI_FORM_BROWSER_PROTOCOL FormBrowser;\r
212} EFI_FORMBROWSER_THUNK_PRIVATE_DATA;\r
213\r
214\r
4259256b 215//\r
216// Extern Variables\r
217//\r
59336178 218extern CONST EFI_HII_DATABASE_PROTOCOL *mHiiDatabase;\r
59336178 219extern CONST EFI_HII_IMAGE_PROTOCOL *mHiiImageProtocol;\r
220extern CONST EFI_HII_STRING_PROTOCOL *mHiiStringProtocol;\r
133a9dfb 221extern CONST EFI_HII_FONT_PROTOCOL *mHiiFontProtocol;\r
59336178 222extern CONST EFI_HII_CONFIG_ROUTING_PROTOCOL *mHiiConfigRoutingProtocol;\r
0368663f 223extern CONST EFI_FORM_BROWSER2_PROTOCOL *mFormBrowser2Protocol;\r
4259256b 224\r
0368663f 225extern HII_THUNK_PRIVATE_DATA *mHiiThunkPrivateData;\r
226\r
227extern BOOLEAN mInFrameworkUpdatePakcage;\r
ea58467b 228\r
229\r
4259256b 230EFI_STATUS\r
231EFIAPI\r
232HiiNewPack (\r
a3318eaf 233 IN EFI_HII_PROTOCOL *This,\r
234 IN EFI_HII_PACKAGES *PackageList,\r
235 OUT FRAMEWORK_EFI_HII_HANDLE *Handle\r
e00e1d46 236 );\r
4259256b 237\r
238EFI_STATUS\r
239EFIAPI\r
240HiiRemovePack (\r
a3318eaf 241 IN EFI_HII_PROTOCOL *This,\r
4259256b 242 IN FRAMEWORK_EFI_HII_HANDLE Handle\r
e00e1d46 243 );\r
4259256b 244\r
245EFI_STATUS\r
246EFIAPI\r
247HiiFindHandles (\r
a3318eaf 248 IN EFI_HII_PROTOCOL *This,\r
249 IN OUT UINT16 *HandleBufferLength,\r
250 OUT FRAMEWORK_EFI_HII_HANDLE *Handle\r
e00e1d46 251 );\r
4259256b 252\r
253EFI_STATUS\r
254EFIAPI\r
255HiiExportDatabase (\r
a3318eaf 256 IN EFI_HII_PROTOCOL *This,\r
257 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
258 IN OUT UINTN *BufferSize,\r
259 OUT VOID *Buffer\r
e00e1d46 260 );\r
4259256b 261\r
262EFI_STATUS\r
263EFIAPI\r
264HiiGetGlyph (\r
a3318eaf 265 IN EFI_HII_PROTOCOL *This,\r
266 IN CHAR16 *Source,\r
267 IN OUT UINT16 *Index,\r
268 OUT UINT8 **GlyphBuffer,\r
269 OUT UINT16 *BitWidth,\r
270 IN OUT UINT32 *InternalStatus\r
e00e1d46 271 );\r
4259256b 272\r
273EFI_STATUS\r
274EFIAPI\r
275HiiGlyphToBlt (\r
276 IN EFI_HII_PROTOCOL *This,\r
277 IN UINT8 *GlyphBuffer,\r
278 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Foreground,\r
279 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background,\r
280 IN UINTN Count,\r
281 IN UINTN Width,\r
282 IN UINTN Height,\r
283 IN OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer\r
e00e1d46 284 );\r
4259256b 285\r
286EFI_STATUS\r
287EFIAPI\r
288HiiNewString (\r
289 IN EFI_HII_PROTOCOL *This,\r
290 IN CHAR16 *Language,\r
291 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
292 IN OUT STRING_REF *Reference,\r
293 IN CHAR16 *NewString\r
e00e1d46 294 );\r
4259256b 295\r
296EFI_STATUS\r
297EFIAPI\r
298HiiGetString (\r
a3318eaf 299 IN EFI_HII_PROTOCOL *This,\r
300 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
301 IN STRING_REF Token,\r
302 IN BOOLEAN Raw,\r
303 IN CHAR16 *LanguageString,\r
304 IN OUT UINTN *BufferLength,\r
305 OUT EFI_STRING StringBuffer\r
e00e1d46 306 );\r
4259256b 307\r
308EFI_STATUS\r
309EFIAPI\r
310HiiResetStrings (\r
a3318eaf 311 IN EFI_HII_PROTOCOL *This,\r
312 IN FRAMEWORK_EFI_HII_HANDLE Handle\r
e00e1d46 313 );\r
4259256b 314\r
315EFI_STATUS\r
316EFIAPI\r
317HiiTestString (\r
a3318eaf 318 IN EFI_HII_PROTOCOL *This,\r
319 IN CHAR16 *StringToTest,\r
320 IN OUT UINT32 *FirstMissing,\r
321 OUT UINT32 *GlyphBufferSize\r
e00e1d46 322 );\r
4259256b 323\r
324EFI_STATUS\r
325EFIAPI\r
326HiiGetPrimaryLanguages (\r
a3318eaf 327 IN EFI_HII_PROTOCOL *This,\r
328 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
329 OUT EFI_STRING *LanguageString\r
e00e1d46 330 );\r
4259256b 331\r
332EFI_STATUS\r
333EFIAPI\r
334HiiGetSecondaryLanguages (\r
a3318eaf 335 IN EFI_HII_PROTOCOL *This,\r
336 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
337 IN CHAR16 *PrimaryLanguage,\r
338 OUT EFI_STRING *LanguageString\r
e00e1d46 339 );\r
4259256b 340\r
341EFI_STATUS\r
342EFIAPI\r
343HiiGetLine (\r
a3318eaf 344 IN EFI_HII_PROTOCOL *This,\r
4259256b 345 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
a3318eaf 346 IN STRING_REF Token,\r
347 IN OUT UINT16 *Index,\r
348 IN UINT16 LineWidth,\r
349 IN CHAR16 *LanguageString,\r
350 IN OUT UINT16 *BufferLength,\r
351 OUT EFI_STRING StringBuffer\r
e00e1d46 352 );\r
4259256b 353\r
354EFI_STATUS\r
355EFIAPI\r
356HiiGetForms (\r
a3318eaf 357 IN EFI_HII_PROTOCOL *This,\r
4259256b 358 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
a3318eaf 359 IN EFI_FORM_ID FormId,\r
360 IN OUT UINTN *BufferLength,\r
361 OUT UINT8 *Buffer\r
e00e1d46 362 );\r
4259256b 363\r
364EFI_STATUS\r
365EFIAPI\r
366HiiGetDefaultImage (\r
a3318eaf 367 IN EFI_HII_PROTOCOL *This,\r
368 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
369 IN UINTN DefaultMask,\r
370 OUT EFI_HII_VARIABLE_PACK_LIST **VariablePackList\r
e00e1d46 371 );\r
4259256b 372\r
373EFI_STATUS\r
374EFIAPI\r
375HiiUpdateForm (\r
a3318eaf 376 IN EFI_HII_PROTOCOL *This,\r
377 IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
378 IN EFI_FORM_LABEL Label,\r
379 IN BOOLEAN AddData,\r
380 IN FRAMEWORK_EFI_HII_UPDATE_DATA *Data\r
e00e1d46 381 );\r
4259256b 382\r
383EFI_STATUS\r
384EFIAPI\r
385HiiGetKeyboardLayout (\r
a3318eaf 386 IN EFI_HII_PROTOCOL *This,\r
387 OUT UINT16 *DescriptorCount,\r
388 OUT FRAMEWORK_EFI_KEY_DESCRIPTOR *Descriptor\r
e00e1d46 389 );\r
4259256b 390\r
137c54ac 391EFI_STATUS\r
392EFIAPI \r
393ThunkSendForm (\r
394 IN EFI_FORM_BROWSER_PROTOCOL *This,\r
395 IN BOOLEAN UseDatabase,\r
396 IN FRAMEWORK_EFI_HII_HANDLE *Handle,\r
397 IN UINTN HandleCount,\r
a3318eaf 398 IN FRAMEWORK_EFI_IFR_PACKET *Packet, OPTIONAL\r
137c54ac 399 IN EFI_HANDLE CallbackHandle, OPTIONAL\r
400 IN UINT8 *NvMapOverride, OPTIONAL\r
a3318eaf 401 IN FRAMEWORK_EFI_SCREEN_DESCRIPTOR *ScreenDimensions, OPTIONAL\r
137c54ac 402 OUT BOOLEAN *ResetRequired OPTIONAL\r
e00e1d46 403 );\r
137c54ac 404\r
405EFI_STATUS\r
406EFIAPI \r
407ThunkCreatePopUp (\r
408 IN UINTN NumberOfLines,\r
409 IN BOOLEAN HotKey,\r
410 IN UINTN MaximumStringSize,\r
411 OUT CHAR16 *StringBuffer,\r
412 OUT EFI_INPUT_KEY *KeyValue,\r
413 IN CHAR16 *String,\r
414 ...\r
e00e1d46 415 );\r
137c54ac 416\r
0368663f 417EFI_STATUS\r
418EFIAPI\r
419RemovePackNotify (\r
420 IN UINT8 PackageType,\r
421 IN CONST EFI_GUID *PackageGuid,\r
422 IN CONST EFI_HII_PACKAGE_HEADER *Package,\r
423 IN EFI_HII_HANDLE Handle,\r
424 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType\r
e00e1d46 425 );\r
0368663f 426\r
427EFI_STATUS\r
428EFIAPI\r
429NewOrAddPackNotify (\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
03254710 437/**\r
438 Create a EFI_HII_UPDATE_DATA structure used to call IfrLibUpdateForm.\r
439\r
440 @param ThunkContext The HII Thunk Context.\r
441 @param FwUpdateData The Framework Update Data.\r
442 @param UefiUpdateData The UEFI Update Data.\r
443\r
444 @retval EFI_SUCCESS The UEFI Update Data is created successfully.\r
445 @retval EFI_UNSUPPORTED There is unsupported opcode in FwUpdateData.\r
446 @retval EFI_OUT_OF_RESOURCES There is not enough resource.\r
447**/\r
448EFI_STATUS\r
449FwUpdateDataToUefiUpdateData (\r
450 IN HII_THUNK_CONTEXT *ThunkContext,\r
451 IN CONST FRAMEWORK_EFI_HII_UPDATE_DATA *FwUpdateData,\r
452 OUT EFI_HII_UPDATE_DATA **UefiUpdateData\r
453 )\r
454;\r
455\r
a235abd2 456/** \r
457\r
458 Initialize string packages in HII database.\r
459\r
460**/\r
461VOID\r
462InitSetBrowserStrings (\r
463 VOID\r
464 )\r
465;\r
466\r
ee3428bb 467#include "Utility.h"\r
ebbd2793 468#include "ConfigAccess.h"\r
ee3428bb 469\r
4259256b 470#endif\r