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