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