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