]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/C/FCE/IfrParse.h
Revert "BaseTools/FMMT: Add a tool FMMT"
[mirror_edk2.git] / BaseTools / Source / C / FCE / IfrParse.h
CommitLineData
3c59d946
SZ
1/** @file\r
2\r
3 Parser for IFR binary encoding.\r
4\r
5 Copyright (c) 2011-2019, Intel Corporation. All rights reserved.<BR>\r
6 SPDX-License-Identifier: BSD-2-Clause-Patent\r
7\r
8**/\r
9\r
10#ifndef _IFR_PARSE_H_\r
11#define _IFR_PARSE_H_\r
12\r
13#include "Common.h"\r
14#include <Common/UefiInternalFormRepresentation.h>\r
15#include <Common/MdeModuleHii.h>\r
16\r
17//\r
18// Scope for Browser action. It may be Form, FormSet or System level.\r
19//\r
20typedef enum {\r
21 FormLevel,\r
22 FormSetLevel,\r
23 SystemLevel,\r
24 MaxLevel\r
25} BROWSER_SETTING_SCOPE;\r
26\r
27///\r
28///Old EFI_IFR_VARSTORE_EFI structure to complible with UEFI 2.3\r
29///\r
30typedef struct _EFI_IFR_VARSTORE_EFI_OLD {\r
31 EFI_IFR_OP_HEADER Header;\r
32 EFI_VARSTORE_ID VarStoreId;\r
33 EFI_GUID Guid;\r
34 UINT32 Attributes;\r
35} EFI_IFR_VARSTORE_EFI_OLD;\r
36\r
37///\r
38/// The languages used in HII DB\r
39///\r
40typedef enum {\r
41 UQI,\r
42 EN_US,\r
43 ENG\r
44} LANGUAGE;\r
45\r
46///\r
47/// Define the structure for the parameters of Uqi and Uqi List\r
48///\r
49typedef struct _FORM_BROWSER_STATEMENT FORM_BROWSER_STATEMENT;\r
50\r
51typedef enum {\r
52 ONE_OF,\r
53 NUMERIC,\r
54 CHECKBOX,\r
55 STRING,\r
56 ORDERED_LIST\r
57} QUEST_TYPE;\r
58\r
59typedef struct {\r
60 UINT16 *DefaultId;\r
61 UINT64 *PlatformId;\r
62 UINT32 IdNum;\r
63 UINT32 HexNum;\r
64 QUEST_TYPE Type;\r
65 CHAR16 *Data;\r
66 UINT8 *Value;\r
67 UINT8 *DiffValue;\r
68 UINT32 ScriptsLine;\r
69 FORM_BROWSER_STATEMENT *Question;\r
70} UQI_HEADER;\r
71\r
72typedef struct _UQI_PARAM_LIST {\r
73 struct _UQI_PARAM_LIST *Next;\r
74 UQI_HEADER Header;\r
75 BOOLEAN ParseOrNot;\r
76 BOOLEAN SameOrNot;\r
77 BOOLEAN ErrorOrNot;\r
78 CHAR8 *Error;\r
79} UQI_PARAM_LIST;\r
80\r
81//\r
82// Incremental size of stack for expression\r
83//\r
84#define EXPRESSION_STACK_SIZE_INCREMENT 0x100\r
85\r
86//\r
87// IFR relative definition\r
88//\r
89#define EFI_HII_EXPRESSION_INCONSISTENT_IF 0\r
90#define EFI_HII_EXPRESSION_NO_SUBMIT_IF 1\r
91#define EFI_HII_EXPRESSION_GRAY_OUT_IF 2\r
92#define EFI_HII_EXPRESSION_SUPPRESS_IF 3\r
93#define EFI_HII_EXPRESSION_DISABLE_IF 4\r
94#define EFI_HII_EXPRESSION_VALUE 5\r
95#define EFI_HII_EXPRESSION_RULE 6\r
96#define EFI_HII_EXPRESSION_READ 7\r
97#define EFI_HII_EXPRESSION_WRITE 8\r
98#define EFI_HII_EXPRESSION_WARNING_IF 9\r
99\r
100#define EFI_HII_VARSTORE_BUFFER 0\r
101#define EFI_HII_VARSTORE_NAME_VALUE 1\r
102#define EFI_HII_VARSTORE_EFI_VARIABLE 2\r
103#define EFI_HII_VARSTORE_EFI_VARIABLE_BUFFER 3\r
104\r
105#define FORM_INCONSISTENT_VALIDATION 0\r
106#define FORM_NO_SUBMIT_VALIDATION 1\r
107\r
108typedef struct {\r
109 //\r
110 // HII Data Type\r
111 //\r
112 UINT8 Type;\r
113 //\r
114 // Buffer Data and Length if Type is EFI_IFR_TYPE_BUFFER or EFI_IFR_TYPE_STRING\r
115 //\r
116 UINT8 *Buffer;\r
117 UINT16 BufferLen;\r
118 EFI_IFR_TYPE_VALUE Value;\r
119} EFI_HII_VALUE;\r
120\r
121#define NAME_VALUE_NODE_SIGNATURE SIGNATURE_32 ('N', 'V', 'S', 'T')\r
122\r
123typedef struct {\r
124 UINTN Signature;\r
125 LIST_ENTRY Link;\r
126 CHAR16 *Name;\r
127 CHAR16 *Value;\r
128 CHAR16 *EditValue;\r
129} NAME_VALUE_NODE;\r
130\r
131#define NAME_VALUE_NODE_FROM_LINK(a) CR (a, NAME_VALUE_NODE, Link, NAME_VALUE_NODE_SIGNATURE)\r
132\r
133#define FORMSET_STORAGE_SIGNATURE SIGNATURE_32 ('F', 'S', 'T', 'G')\r
134\r
135typedef struct {\r
136 UINTN Signature;\r
137 LIST_ENTRY Link;\r
138\r
139 UINT16 DefaultId[MAX_PLATFORM_DEFAULT_ID_NUM];\r
140 UINT64 PlatformId[MAX_PLATFORM_DEFAULT_ID_NUM];\r
141 UINT32 DefaultPlatformIdNum;\r
142 UINT32 FormSetOrder;\r
143\r
144 BOOLEAN NewEfiVarstore; //EfiVarStore for UEFI 2.31 or not\r
145 BOOLEAN Skip; //Flag for sorting out the variables\r
146\r
147 UINT8 Type; // Storage type\r
148\r
149 UINT16 VarStoreId;\r
150 EFI_GUID Guid;\r
151\r
152 CHAR16 *Name; // For EFI_IFR_VARSTORE\r
153 UINT16 Size;\r
154 UINT8 *Buffer;\r
155\r
156 LIST_ENTRY NameValueListHead; // List of NAME_VALUE_NODE\r
157\r
158 UINT32 Attributes; // For EFI_IFR_VARSTORE_EFI: EFI Variable attribute\r
159} FORMSET_STORAGE;\r
160\r
161#define FORMSET_STORAGE_FROM_LINK(a) CR (a, FORMSET_STORAGE, Link, FORMSET_STORAGE_SIGNATURE)\r
162\r
163typedef union {\r
164 EFI_STRING_ID VarName;\r
165 UINT16 VarOffset;\r
166} VAR_STORE_INFO;\r
167\r
168#define EXPRESSION_OPCODE_SIGNATURE SIGNATURE_32 ('E', 'X', 'O', 'P')\r
169\r
170typedef struct {\r
171 UINTN Signature;\r
172 LIST_ENTRY Link;\r
173\r
174 UINT8 Operand;\r
175\r
176 UINT8 Format; // For EFI_IFR_TO_STRING, EFI_IFR_FIND\r
177 UINT8 Flags; // For EFI_IFR_SPAN\r
178 UINT8 RuleId; // For EFI_IFR_RULE_REF\r
179\r
180 EFI_HII_VALUE Value; // For EFI_IFR_EQ_ID_VAL, EFI_IFR_UINT64, EFI_IFR_UINT32, EFI_IFR_UINT16, EFI_IFR_UINT8, EFI_IFR_STRING_REF1\r
181\r
182 EFI_QUESTION_ID QuestionId; // For EFI_IFR_EQ_ID_ID, EFI_IFR_EQ_ID_VAL_LIST, EFI_IFR_QUESTION_REF1\r
183 EFI_QUESTION_ID QuestionId2;\r
184\r
185 UINT16 ListLength; // For EFI_IFR_EQ_ID_VAL_LIST\r
186 UINT16 *ValueList;\r
187\r
188 EFI_STRING_ID DevicePath; // For EFI_IFR_QUESTION_REF3_2, EFI_IFR_QUESTION_REF3_3\r
189 EFI_GUID Guid;\r
190\r
191 FORMSET_STORAGE *VarStorage; // For EFI_IFR_SET, EFI_IFR_GET\r
192 VAR_STORE_INFO VarStoreInfo;// For EFI_IFR_SET, EFI_IFR_GET\r
193 UINT8 ValueType; // For EFI_IFR_SET, EFI_IFR_GET\r
194 UINT8 ValueWidth; // For EFI_IFR_SET, EFI_IFR_GET\r
195 CHAR16 *ValueName; // For EFI_IFR_SET, EFI_IFR_GET\r
196 LIST_ENTRY MapExpressionList; // nested expressions inside of Map opcode.\r
197} EXPRESSION_OPCODE;\r
198\r
199#define EXPRESSION_OPCODE_FROM_LINK(a) CR (a, EXPRESSION_OPCODE, Link, EXPRESSION_OPCODE_SIGNATURE)\r
200\r
201#define FORM_EXPRESSION_SIGNATURE SIGNATURE_32 ('F', 'E', 'X', 'P')\r
202\r
203typedef struct {\r
204 UINTN Signature;\r
205 LIST_ENTRY Link;\r
206\r
207 UINT8 Type; // Type for this expression\r
208\r
209 UINT8 RuleId; // For EFI_IFR_RULE only\r
210 EFI_STRING_ID Error; // For EFI_IFR_NO_SUBMIT_IF, EFI_IFR_INCONSISTENT_IF only\r
211\r
212 EFI_HII_VALUE Result; // Expression evaluation result\r
213 UINT8 TimeOut; // For EFI_IFR_WARNING_IF\r
214\r
215 LIST_ENTRY OpCodeListHead; // OpCodes consist of this expression (EXPRESSION_OPCODE)\r
216} FORM_EXPRESSION;\r
217\r
218#define FORM_EXPRESSION_FROM_LINK(a) CR (a, FORM_EXPRESSION, Link, FORM_EXPRESSION_SIGNATURE)\r
219\r
220#define QUESTION_DEFAULT_SIGNATURE SIGNATURE_32 ('Q', 'D', 'F', 'T')\r
221\r
222typedef struct {\r
223 UINTN Signature;\r
224 LIST_ENTRY Link;\r
225\r
226 UINT16 DefaultId;\r
227 EFI_HII_VALUE Value; // Default value\r
228\r
229 FORM_EXPRESSION *ValueExpression; // Not-NULL indicates default value is provided by EFI_IFR_VALUE\r
230} QUESTION_DEFAULT;\r
231\r
232#define QUESTION_DEFAULT_FROM_LINK(a) CR (a, QUESTION_DEFAULT, Link, QUESTION_DEFAULT_SIGNATURE)\r
233\r
234#define QUESTION_OPTION_SIGNATURE SIGNATURE_32 ('Q', 'O', 'P', 'T')\r
235\r
236typedef struct {\r
237 UINTN Signature;\r
238 LIST_ENTRY Link;\r
239\r
240 EFI_STRING_ID Text;\r
241 UINT8 Flags;\r
242 EFI_HII_VALUE Value;\r
243\r
244 FORM_EXPRESSION *SuppressExpression; // Non-NULL indicates nested inside of SuppressIf\r
245} QUESTION_OPTION;\r
246\r
247#define QUESTION_OPTION_FROM_LINK(a) CR (a, QUESTION_OPTION, Link, QUESTION_OPTION_SIGNATURE)\r
248\r
249#define FORM_BROWSER_STATEMENT_SIGNATURE SIGNATURE_32 ('F', 'S', 'T', 'A')\r
250\r
251struct _FORM_BROWSER_STATEMENT {\r
252 UINTN Signature;\r
253 LIST_ENTRY Link;\r
254 UINT8 Operand; // The operand (first byte) of this Statement or Question\r
255\r
256 UQI_HEADER Uqi;\r
257 UINT32 FormSetOrder;\r
258 EFI_GUID Guid;\r
259 UINT8 Type; // Storage type\r
260 BOOLEAN NewEfiVarstore; //EfiVarStore for UEFI 2.31 or not\r
261 UINT32 Attributes; // For EFI_IFR_VARSTORE_EFI: EFI Variable attribute\r
262 BOOLEAN QuestionReferToBitField;// Whether the question is stored in a bit field.\r
263 //\r
264 // Statement Header\r
265 //\r
266 EFI_STRING_ID Prompt;\r
267 EFI_STRING_ID Help;\r
268 EFI_STRING_ID TextTwo; // For EFI_IFR_TEXT\r
269\r
270 //\r
271 // Question Header\r
272 //\r
273 EFI_QUESTION_ID QuestionId; // The value of zero is reserved\r
274 EFI_VARSTORE_ID VarStoreId; // A value of zero indicates no variable storage\r
275 FORMSET_STORAGE *Storage;\r
276 VAR_STORE_INFO VarStoreInfo;\r
277 UINT16 StorageWidth;\r
278 UINT16 BitStorageWidth;\r
279 UINT16 BitVarOffset;\r
280 UINT8 QuestionFlags;\r
281 CHAR16 *VariableName; // Name/Value or EFI Variable name\r
282\r
283 EFI_HII_VALUE HiiValue; // Edit copy for checkbox, numberic, oneof\r
284 UINT8 *BufferValue; // Edit copy for string, password, orderedlist\r
285 UINT8 ValueType; // Data type for orderedlist value array\r
286\r
287 //\r
288 // OpCode specific members\r
289 //\r
290 UINT8 Flags; // for EFI_IFR_CHECKBOX, EFI_IFR_DATE, EFI_IFR_NUMERIC, EFI_IFR_ONE_OF,\r
291 // EFI_IFR_ORDERED_LIST, EFI_IFR_STRING,EFI_IFR_SUBTITLE,EFI_IFR_TIME, EFI_IFR_BANNER\r
292 UINT8 MaxContainers; // for EFI_IFR_ORDERED_LIST\r
293\r
294 UINT16 BannerLineNumber; // for EFI_IFR_BANNER, 1-based line number\r
295\r
296 UINT64 Minimum; // for EFI_IFR_ONE_OF/EFI_IFR_NUMERIC, it's Min/Max value\r
297 UINT64 Maximum; // for EFI_IFR_STRING/EFI_IFR_PASSWORD, it's Min/Max length\r
298 UINT64 Step;\r
299\r
300 EFI_DEFAULT_ID DefaultId; // for EFI_IFR_RESET_BUTTON\r
301 EFI_GUID RefreshGuid; // for EFI_IFR_REFRESH_ID\r
302\r
303 //\r
304 // Get from IFR parsing\r
305 //\r
306 FORM_EXPRESSION *ValueExpression; // nested EFI_IFR_VALUE, provide Question value and indicate Question is ReadOnly\r
307 LIST_ENTRY DefaultListHead; // nested EFI_IFR_DEFAULT list (QUESTION_DEFAULT), provide default values\r
308 LIST_ENTRY OptionListHead; // nested EFI_IFR_ONE_OF_OPTION list (QUESTION_OPTION)\r
309\r
310 EFI_IMAGE_ID ImageId; // nested EFI_IFR_IMAGE\r
311 UINT8 RefreshInterval; // nested EFI_IFR_REFRESH, refresh interval(in seconds) for Question value, 0 means no refresh\r
312 BOOLEAN InSubtitle; // nesting inside of EFI_IFR_SUBTITLE\r
313\r
314 LIST_ENTRY InconsistentListHead;// nested inconsistent expression list (FORM_EXPRESSION)\r
315 LIST_ENTRY NoSubmitListHead; // nested nosubmit expression list (FORM_EXPRESSION)\r
316 LIST_ENTRY WarningListHead; // nested warning expression list (FORM_EXPRESSION)\r
317 FORM_EXPRESSION *GrayOutExpression; // nesting inside of GrayOutIf\r
318 FORM_EXPRESSION *SuppressExpression; // nesting inside of SuppressIf\r
319 FORM_EXPRESSION *DisableExpression; // nesting inside of DisableIf\r
320\r
321 FORM_EXPRESSION *ReadExpression; // nested EFI_IFR_READ, provide this question value by read expression.\r
322 FORM_EXPRESSION *WriteExpression; // nested EFI_IFR_WRITE, evaluate write expression after this question value is set.\r
323};\r
324\r
325#define FORM_BROWSER_STATEMENT_FROM_LINK(a) CR (a, FORM_BROWSER_STATEMENT, Link, FORM_BROWSER_STATEMENT_SIGNATURE)\r
326\r
327#define FORM_BROWSER_FORM_SIGNATURE SIGNATURE_32 ('F', 'F', 'R', 'M')\r
328#define STANDARD_MAP_FORM_TYPE 0x01\r
329\r
330typedef struct {\r
331 UINTN Signature;\r
332 LIST_ENTRY Link;\r
333\r
334 UINT16 FormId; // FormId of normal form or formmap form.\r
335 EFI_STRING_ID FormTitle; // FormTile of normal form, or FormMapMethod title of formmap form.\r
336 UINT16 FormType; // Specific form type for the different form.\r
337\r
338 BOOLEAN ModalForm; // Whether this is a modal form.\r
339 LIST_ENTRY ExpressionListHead; // List of Expressions (FORM_EXPRESSION)\r
340 LIST_ENTRY StatementListHead; // List of Statements and Questions (FORM_BROWSER_STATEMENT)\r
341 FORM_EXPRESSION *SuppressExpression; // nesting inside of SuppressIf\r
342} FORM_BROWSER_FORM;\r
343\r
344#define FORM_BROWSER_FORM_FROM_LINK(a) CR (a, FORM_BROWSER_FORM, Link, FORM_BROWSER_FORM_SIGNATURE)\r
345\r
346#define FORMSET_DEFAULTSTORE_SIGNATURE SIGNATURE_32 ('F', 'D', 'F', 'S')\r
347\r
348typedef struct {\r
349 UINTN Signature;\r
350 LIST_ENTRY Link;\r
351\r
352 UINT16 DefaultId;\r
353 EFI_STRING_ID DefaultName;\r
354} FORMSET_DEFAULTSTORE;\r
355\r
356#define STRING_NUMBER 100\r
357\r
358typedef struct {\r
359 EFI_STRING_ID StringId;\r
360 CHAR16 *String;\r
361} STRING_INFO;\r
362\r
363typedef struct {\r
364 EFI_STRING_ID CachedIdNum;\r
365 EFI_STRING_ID MaxIdNum;\r
366 STRING_INFO *StringInfoList;\r
367} FORMSET_STRING_LIST;\r
368\r
369#define FORMSET_DEFAULTSTORE_FROM_LINK(a) CR (a, FORMSET_DEFAULTSTORE, Link, FORMSET_DEFAULTSTORE_SIGNATURE)\r
370\r
371#define FORM_BROWSER_FORMSET_SIGNATURE SIGNATURE_32 ('F', 'B', 'F', 'S')\r
372\r
373typedef struct {\r
374 UINTN Signature;\r
375 LIST_ENTRY Link;\r
376\r
377 UINT32 FormSetOrder;\r
378\r
379 UINTN IfrBinaryLength;\r
380 UINT8 *IfrBinaryData;\r
381 UINT8 *UnicodeBinary;\r
382\r
383 EFI_GUID Guid;\r
384 EFI_STRING_ID FormSetTitle;\r
385 EFI_STRING_ID Help;\r
386 UINT8 NumberOfClassGuid;\r
387 EFI_GUID ClassGuid[3]; // Up to three ClassGuid\r
388 UINT16 Class; // Tiano extended Class code\r
389 UINT16 SubClass; // Tiano extended Subclass code\r
390\r
391 FORM_BROWSER_STATEMENT *StatementBuffer; // Buffer for all Statements and Questions\r
392 EXPRESSION_OPCODE *ExpressionBuffer; // Buffer for all Expression OpCode\r
393\r
394 LIST_ENTRY *StorageListHead; // Storage list (FORMSET_STORAGE)\r
395 LIST_ENTRY DefaultStoreListHead; // DefaultStore list (FORMSET_DEFAULTSTORE)\r
396 LIST_ENTRY FormListHead; // Form list (FORM_BROWSER_FORM)\r
397 LIST_ENTRY ExpressionListHead; // List of Expressions (FORM_EXPRESSION)\r
398 FORMSET_STRING_LIST EnUsStringList; // Cache EN_US English list\r
399 FORMSET_STRING_LIST UqiStringList; // Cache EN_US English list\r
400} FORM_BROWSER_FORMSET;\r
401\r
402#define FORM_BROWSER_FORMSET_FROM_LINK(a) CR (a, FORM_BROWSER_FORMSET, Link, FORM_BROWSER_FORMSET_SIGNATURE)\r
403\r
404///\r
405/// Structure for multi-platform support\r
406///\r
407typedef struct {\r
408 UINT16 DefaultId[MAX_PLATFORM_DEFAULT_ID_NUM];\r
409 UINT16 DefaultIdNum;\r
410 UINT64 PlatformId[MAX_PLATFORM_DEFAULT_ID_NUM];\r
411 UINT16 PlatformIdNum;\r
412 UINT16 KeyDefaultId[MAX_PLATFORM_DEFAULT_ID_NUM];\r
413 UINT64 KeyPlatformId[MAX_PLATFORM_DEFAULT_ID_NUM];\r
414 UINT16 KeyIdNum;\r
415 FORM_BROWSER_STATEMENT PlatformIdQuestion;\r
416 FORM_BROWSER_STATEMENT *Question;\r
417 UINT16 PlatformIdWidth;\r
418 UQI_HEADER Uqi;\r
419 BOOLEAN MultiPlatformOrNot;\r
420 BOOLEAN ExistStorageFfsInBfv;\r
421 BOOLEAN SizeOptimized;\r
422 BOOLEAN SizeOptimizedParam;\r
423} MULTI_PLATFORM_PARAMETERS;\r
424\r
425/**\r
426 Search the variable list according to the variable Guid and name, and return the pointer\r
427 of that Node.\r
428\r
429 @param HiiObjList The pointer to the Question\r
430 @param VarName The EFI variable name need to be updated to VarList\r
431 @param Offset The offset of the variable\r
432 @param StorageListHead The pointer to the LIST_ENTRY of Storage\r
433 @param Vaue The value in that value offset of the variable\r
434 @param VarList The dual pointer of Varlist\r
435\r
436 @return EFI_SUCCESS\r
437**/\r
438EFI_STATUS\r
439SearchVarStorage (\r
440 IN FORM_BROWSER_STATEMENT *Question,\r
441 IN CHAR16* VarName,\r
442 IN UINT32 Offset,\r
443 IN LIST_ENTRY *StorageListHead,\r
444 IN OUT CHAR8 **Value,\r
445 IN OUT FORMSET_STORAGE **VarList\r
446 );\r
447\r
448/**\r
449 Get the string based on the StringId and HII Package List Handle.\r
450\r
451 @param Token The String's ID.\r
452 @param HiiHandle The package list in the HII database to search for\r
453 the specified string.\r
454\r
455 @return The output string.\r
456\r
457**/\r
458CHAR16 *\r
459GetToken (\r
460 IN EFI_STRING_ID Token,\r
461 IN UINT8 *UniPackge\r
462 );\r
463\r
464/**\r
465 Free resources allocated for all Storage in an LIST_ENTRY.\r
466\r
467 @param FormSet Pointer of the FormSet\r
468\r
469**/\r
470VOID\r
471DestroyAllStorage (\r
472 IN LIST_ENTRY *StorageEntryListHead\r
473 );\r
474\r
475\r
476/**\r
477 Free resources allocated for a FormSet.\r
478\r
479 @param FormSet Pointer of the FormSet\r
480\r
481**/\r
482VOID\r
483DestroyFormSet (\r
484 IN FORM_BROWSER_FORMSET *FormSet\r
485 );\r
486\r
487\r
488/**\r
489 Free resources allocated for all FormSet in an LIST_ENTRY.\r
490\r
491 @param FormSet Pointer of the FormSet\r
492\r
493**/\r
494VOID\r
495DestroyAllFormSet (\r
496 IN LIST_ENTRY *FormSetEntryListHead\r
497 );\r
498\r
499/**\r
500 Parse opcodes in the formset IFR binary.\r
501\r
502 @param FormSet Pointer of the FormSet data structure.\r
503\r
504 @retval EFI_SUCCESS Opcode parse success.\r
505 @retval Other Opcode parse fail.\r
506\r
507**/\r
508EFI_STATUS\r
509ParseOpCodes (\r
510 IN FORM_BROWSER_FORMSET *FormSet\r
511 );\r
512\r
513/**\r
514 Set the value to the variable of platformId question.\r
515\r
516 @param PlatformId The form set.\r
517\r
518 @retval EFI_SUCCESS Set successfully.\r
519\r
520**/\r
521EFI_STATUS\r
522AssignThePlatformId (\r
523 IN UINT64 PlatformId\r
524 );\r
525\r
526\r
527/**\r
528 Reset Questions to their default value in a Form, Formset or System.\r
529\r
530 @param FormSet FormSet data structure.\r
531 @param Form Form data structure.\r
532 @param DefaultId The default Id\r
533 @param PlatformId The platform Id\r
534 @param SettingScope Setting Scope for Default action.\r
535\r
536 @retval EFI_SUCCESS The function completed successfully.\r
537 @retval EFI_UNSUPPORTED Unsupport SettingScope.\r
538\r
539**/\r
540EFI_STATUS\r
541ExtractDefault (\r
542 IN FORM_BROWSER_FORMSET *FormSet,\r
543 IN FORM_BROWSER_FORM *Form,\r
544 IN UINT16 DefaultId,\r
545 IN UINT64 PlatformId,\r
546 IN BROWSER_SETTING_SCOPE SettingScope\r
547 );\r
548\r
549\r
550/**\r
551 Reset stack pointer to begin of the stack.\r
552\r
553**/\r
554VOID\r
555ResetCurrentExpressionStack (\r
556 VOID\r
557 );\r
558\r
559\r
560/**\r
561 Push current expression onto the Stack\r
562\r
563 @param Pointer Pointer to current expression.\r
564\r
565 @retval EFI_SUCCESS The value was pushed onto the stack.\r
566 @retval EFI_OUT_OF_RESOURCES There is not enough system memory to grow the stack.\r
567\r
568**/\r
569EFI_STATUS\r
570PushCurrentExpression (\r
571 IN VOID *Pointer\r
572 );\r
573\r
574\r
575/**\r
576 Pop current expression from the Stack\r
577\r
578 @param Pointer Pointer to current expression to be pop.\r
579\r
580 @retval EFI_SUCCESS The value was pushed onto the stack.\r
581 @retval EFI_OUT_OF_RESOURCES There is not enough system memory to grow the stack.\r
582\r
583**/\r
584EFI_STATUS\r
585PopCurrentExpression (\r
586 OUT VOID **Pointer\r
587 );\r
588\r
589/**\r
590 Reset stack pointer to begin of the stack.\r
591\r
592**/\r
593VOID\r
594ResetMapExpressionListStack (\r
595 VOID\r
596 );\r
597\r
598\r
599/**\r
600 Push the list of map expression onto the Stack\r
601\r
602 @param Pointer Pointer to the list of map expression to be pushed.\r
603\r
604 @retval EFI_SUCCESS The value was pushed onto the stack.\r
605 @retval EFI_OUT_OF_RESOURCES There is not enough system memory to grow the stack.\r
606\r
607**/\r
608EFI_STATUS\r
609PushMapExpressionList (\r
610 IN VOID *Pointer\r
611 );\r
612\r
613\r
614/**\r
615 Pop the list of map expression from the Stack\r
616\r
617 @param Pointer Pointer to the list of map expression to be pop.\r
618\r
619 @retval EFI_SUCCESS The value was pushed onto the stack.\r
620 @retval EFI_OUT_OF_RESOURCES There is not enough system memory to grow the stack.\r
621\r
622**/\r
623EFI_STATUS\r
624PopMapExpressionList (\r
625 OUT VOID **Pointer\r
626 );\r
627\r
628/**\r
629 Reset stack pointer to begin of the stack.\r
630\r
631**/\r
632VOID\r
633ResetScopeStack (\r
634 VOID\r
635 );\r
636\r
637\r
638/**\r
639 Push an Operand onto the Stack\r
640\r
641 @param Operand Operand to push.\r
642\r
643 @retval EFI_SUCCESS The value was pushed onto the stack.\r
644 @retval EFI_OUT_OF_RESOURCES There is not enough system memory to grow the\r
645 stack.\r
646\r
647**/\r
648EFI_STATUS\r
649PushScope (\r
650 IN UINT8 Operand\r
651 );\r
652\r
653\r
654/**\r
655 Pop an Operand from the Stack\r
656\r
657 @param Operand Operand to pop.\r
658\r
659 @retval EFI_SUCCESS The value was pushed onto the stack.\r
660 @retval EFI_OUT_OF_RESOURCES There is not enough system memory to grow the\r
661 stack.\r
662\r
663**/\r
664EFI_STATUS\r
665PopScope (\r
666 OUT UINT8 *Operand\r
667 );\r
668\r
669\r
670/**\r
671 Zero extend integer/boolean/date/time to UINT64 for comparing.\r
672\r
673 @param Value HII Value to be converted.\r
674\r
675**/\r
676VOID\r
677ExtendValueToU64 (\r
678 IN EFI_HII_VALUE *Value\r
679 );\r
680\r
681\r
682/**\r
683 Compare two Hii value.\r
684\r
685 @param Value1 Expression value to compare on left-hand.\r
686 @param Value2 Expression value to compare on right-hand.\r
687\r
688 @retval EFI_INVALID_PARAMETER Could not perform compare on two values.\r
689 @retval 0 Two operators equal.\r
690 @return Positive value if Value1 is greater than Value2.\r
691 @retval Negative value if Value1 is less than Value2.\r
692\r
693**/\r
694INTN\r
695CompareHiiValue (\r
696 IN EFI_HII_VALUE *Value1,\r
697 IN EFI_HII_VALUE *Value2,\r
698 IN FORM_BROWSER_FORMSET *FormSet\r
699 );\r
700\r
701/**\r
702 Evaluate the result of a HII expression.\r
703\r
704 If Expression is NULL, then ASSERT.\r
705\r
706 @param FormSet FormSet associated with this expression.\r
707 @param Form Form associated with this expression.\r
708 @param Expression Expression to be evaluated.\r
709 @param ConstantExpression The pointer to the flag of constant expression. If constant, will return TRUE.\r
710\r
711 @retval EFI_SUCCESS The expression evaluated successfuly\r
712 @retval EFI_NOT_FOUND The Question which referenced by a QuestionId\r
713 could not be found.\r
714 @retval EFI_OUT_OF_RESOURCES There is not enough system memory to grow the\r
715 stack.\r
716 @retval EFI_ACCESS_DENIED The pop operation underflowed the stack\r
717 @retval EFI_INVALID_PARAMETER Syntax error with the Expression\r
718\r
719**/\r
720EFI_STATUS\r
721EvaluateExpression (\r
722 IN FORM_BROWSER_FORMSET *FormSet,\r
723 IN FORM_BROWSER_FORM *Form,\r
724 IN OUT FORM_EXPRESSION *Expression,\r
725 IN OUT BOOLEAN *ConstantExpression\r
726 );\r
727\r
728/**\r
729 Compare two Uqi parameters\r
730\r
731 @param UqiParm1 The pointer to the first Uqi parameter.\r
732 @param UqiParm2 The pointer to the second Uqi parameter.\r
733\r
734 @retval TRUE If these two Uqi parameters are the same, return TRUE;\r
735 @return FALSE Otherwise, return FALSE;\r
736**/\r
737BOOLEAN\r
738CompareUqiHeader (\r
739 IN CONST UQI_HEADER *UqiParm1,\r
740 IN CONST UQI_HEADER *UqiParm2\r
741 );\r
742\r
743\r
744/**\r
745 Print all ONE_OF ORDER_LIST NUMERIC STRING and CHECKBOX in all fromsets.\r
746\r
747 @param Formset The pointer to the entry of the fromset list\r
748 @param Formset The pointer to the entry of the storage list\r
749\r
750 @retval EFI_SUCCESS It was complete successfully\r
751 @return EFI_ABORTED An error occurred\r
752**/\r
753EFI_STATUS\r
754PrintInfoInAllFormset (\r
755 IN LIST_ENTRY *FormSetEntryListHead,\r
756 IN LIST_ENTRY *StorageEntryListHead\r
757 );\r
758\r
759 /**\r
760 Get the question value with bit field from the buffer.\r
761\r
762 @param Question The question refer to bit field.\r
763 @param Buffer The buffer which the question value get from.\r
764 @param Value Retun the value.\r
765\r
766**/\r
767VOID\r
768GetBitsQuestionValue(\r
769 IN FORM_BROWSER_STATEMENT *Question,\r
770 IN UINT8 *Buffer,\r
771 OUT UINT32 *Value\r
772 );\r
773\r
774/**\r
775 Set the question value with bit field to the buffer.\r
776\r
777 @param Question The question refer to bit field.\r
778 @param Buffer The buffer which the question value set to.\r
779 @param Value The value need to set.\r
780\r
781**/\r
782VOID\r
783SetBitsQuestionValue (\r
784 IN FORM_BROWSER_STATEMENT *Question,\r
785 IN UINT8 *Buffer,\r
786 IN UINT32 Value\r
787 );\r
788\r
789#endif\r