]> git.proxmox.com Git - mirror_edk2.git/blame - EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/UefiIfrParser.h
Fill all EFI_IFR_DATA_ARRAY fields before call FormCallBack function.
[mirror_edk2.git] / EdkCompatibilityPkg / Compatibility / FrameworkHiiOnUefiHiiThunk / UefiIfrParser.h
CommitLineData
59336178 1/** @file\r
2 Function and Macro defintions for IFR parsing. To get the default value from IFR package, the IFR\r
3 opcode needs to be parsed. Most of code is taken from MdeModulePkg\Universal\SetupBrowserDxe\IfrParse.c.\r
a9d85320 4 This parser is simplified from the origianl IfrParser.c in the following way:\r
5\r
6 1) All data structure definition that have nothing to do with IFR Default value scanning (\r
7 required to implement Framework HII's GetDefaultImage ()) is removed.\r
8 2) Ignore the IFR opcode which is invalid for Form Package\r
9 generated using Framework VFR file.\r
59336178 10\r
11 Copyright (c) 2008, Intel Corporation\r
12 All rights reserved. This program and the accompanying materials\r
13 are licensed and made available under the terms and conditions of the BSD License\r
14 which accompanies this distribution. The full text of the license may be found at\r
15 http://opensource.org/licenses/bsd-license.php\r
16\r
17 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
18 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
19\r
20**/\r
21\r
22#ifndef _HII_THUNK_UEFI_IFR_PARSER_\r
23#define _HII_THUNK_UEFI_IFR_PARSER_\r
24\r
59336178 25\r
26//\r
27// IFR relative definition\r
28//\r
29#define EFI_HII_EXPRESSION_INCONSISTENT_IF 0\r
30#define EFI_HII_EXPRESSION_NO_SUBMIT_IF 1\r
31#define EFI_HII_EXPRESSION_GRAY_OUT_IF 2\r
32#define EFI_HII_EXPRESSION_SUPPRESS_IF 3\r
33#define EFI_HII_EXPRESSION_DISABLE_IF 4\r
34#define EFI_HII_EXPRESSION_VALUE 5\r
35#define EFI_HII_EXPRESSION_RULE 6\r
36\r
37#define EFI_HII_VARSTORE_BUFFER 0\r
38#define EFI_HII_VARSTORE_NAME_VALUE 1\r
39#define EFI_HII_VARSTORE_EFI_VARIABLE 2\r
40\r
41#define FORM_INCONSISTENT_VALIDATION 0\r
42#define FORM_NO_SUBMIT_VALIDATION 1\r
43\r
0368663f 44extern EFI_GUID gTianoHiiIfrGuid;\r
45\r
a9d85320 46#define ONE_OF_OPTION_MAP_ENTRY_FROM_LINK(Record) CR(Record, ONE_OF_OPTION_MAP_ENTRY, Link, ONE_OF_OPTION_MAP_ENTRY_SIGNATURE)\r
a3a83173 47#define ONE_OF_OPTION_MAP_ENTRY_SIGNATURE SIGNATURE_32 ('O', 'O', 'M', 'E')\r
a9d85320 48typedef struct {\r
49 UINT32 Signature;\r
50 LIST_ENTRY Link;\r
51\r
52 UINT16 FwKey;\r
53 EFI_IFR_TYPE_VALUE Value;\r
54 \r
55} ONE_OF_OPTION_MAP_ENTRY;\r
56\r
57\r
58\r
59#define ONE_OF_OPTION_MAP_FROM_LINK(Record) CR(Record, ONE_OF_OPTION_MAP, Link, ONE_OF_OPTION_MAP_SIGNATURE)\r
a3a83173 60#define ONE_OF_OPTION_MAP_SIGNATURE SIGNATURE_32 ('O', 'O', 'O', 'M')\r
a9d85320 61typedef struct {\r
62 UINT32 Signature;\r
63 LIST_ENTRY Link; \r
64\r
65 UINT16 VarStoreId;\r
66\r
67 UINT8 ValueType; //EFI_IFR_TYPE_NUM_* \r
68\r
69 EFI_QUESTION_ID QuestionId;\r
70\r
71 LIST_ENTRY OneOfOptionMapEntryListHead; //ONE_OF_OPTION_MAP_ENTRY\r
72} ONE_OF_OPTION_MAP;\r
73\r
59336178 74\r
75typedef struct {\r
76 UINT8 Type;\r
77 EFI_IFR_TYPE_VALUE Value;\r
78} EFI_HII_VALUE;\r
79\r
a3a83173 80#define NAME_VALUE_NODE_SIGNATURE SIGNATURE_32 ('N', 'V', 'S', 'T')\r
59336178 81\r
a3a83173 82#define FORMSET_STORAGE_SIGNATURE SIGNATURE_32 ('F', 'S', 'T', 'G')\r
59336178 83\r
84typedef struct {\r
85 UINTN Signature;\r
86 LIST_ENTRY Link;\r
87\r
88 UINT8 Type; // Storage type\r
89\r
90 UINT16 VarStoreId;\r
91 EFI_GUID Guid;\r
92\r
93 CHAR16 *Name; // For EFI_IFR_VARSTORE\r
94 UINT16 Size;\r
59336178 95\r
96 UINT32 Attributes; // For EFI_IFR_VARSTORE_EFI: EFI Variable attribute\r
97\r
59336178 98} FORMSET_STORAGE;\r
99\r
100#define FORMSET_STORAGE_FROM_LINK(a) CR (a, FORMSET_STORAGE, Link, FORMSET_STORAGE_SIGNATURE)\r
101\r
a9d85320 102#if 0\r
103\r
a3a83173 104#define EXPRESSION_OPCODE_SIGNATURE SIGNATURE_32 ('E', 'X', 'O', 'P')\r
59336178 105\r
106typedef struct {\r
107 UINTN Signature;\r
108 LIST_ENTRY Link;\r
109\r
110 UINT8 Operand;\r
111\r
112 UINT8 Format; // For EFI_IFR_TO_STRING, EFI_IFR_FIND\r
113 UINT8 Flags; // For EFI_IFR_SPAN\r
114 UINT8 RuleId; // For EFI_IFR_RULE_REF\r
115\r
116 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
117\r
118 EFI_QUESTION_ID QuestionId; // For EFI_IFR_EQ_ID_ID, EFI_IFR_EQ_ID_LIST, EFI_IFR_QUESTION_REF1\r
119 EFI_QUESTION_ID QuestionId2;\r
120\r
121 UINT16 ListLength; // For EFI_IFR_EQ_ID_LIST\r
122 UINT16 *ValueList;\r
123\r
124 EFI_STRING_ID DevicePath; // For EFI_IFR_QUESTION_REF3_2, EFI_IFR_QUESTION_REF3_3\r
125 EFI_GUID Guid;\r
126} EXPRESSION_OPCODE;\r
127\r
128#define EXPRESSION_OPCODE_FROM_LINK(a) CR (a, EXPRESSION_OPCODE, Link, EXPRESSION_OPCODE_SIGNATURE)\r
129\r
a3a83173 130#define FORM_EXPRESSION_SIGNATURE SIGNATURE_32 ('F', 'E', 'X', 'P')\r
59336178 131\r
132typedef struct {\r
133 UINTN Signature;\r
134 LIST_ENTRY Link;\r
135\r
136 UINT8 Type; // Type for this expression\r
137\r
138 UINT8 RuleId; // For EFI_IFR_RULE only\r
139 EFI_STRING_ID Error; // For EFI_IFR_NO_SUBMIT_IF, EFI_IFR_INCONSISTENT_IF only\r
140\r
141 EFI_HII_VALUE Result; // Expression evaluation result\r
142\r
143 LIST_ENTRY OpCodeListHead; // OpCodes consist of this expression (EXPRESSION_OPCODE)\r
144} FORM_EXPRESSION;\r
145\r
146#define FORM_EXPRESSION_FROM_LINK(a) CR (a, FORM_EXPRESSION, Link, FORM_EXPRESSION_SIGNATURE)\r
a9d85320 147#endif\r
59336178 148\r
a3a83173 149#define QUESTION_DEFAULT_SIGNATURE SIGNATURE_32 ('Q', 'D', 'F', 'T')\r
59336178 150\r
151typedef struct {\r
152 UINTN Signature;\r
153 LIST_ENTRY Link;\r
154\r
155 UINT16 DefaultId;\r
156 EFI_HII_VALUE Value; // Default value\r
157\r
59336178 158} QUESTION_DEFAULT;\r
159\r
160#define QUESTION_DEFAULT_FROM_LINK(a) CR (a, QUESTION_DEFAULT, Link, QUESTION_DEFAULT_SIGNATURE)\r
161\r
a3a83173 162#define QUESTION_OPTION_SIGNATURE SIGNATURE_32 ('Q', 'O', 'P', 'T')\r
59336178 163\r
164typedef struct {\r
165 UINTN Signature;\r
166 LIST_ENTRY Link;\r
167\r
168 EFI_STRING_ID Text;\r
169 UINT8 Flags;\r
170 EFI_HII_VALUE Value;\r
171 EFI_IMAGE_ID ImageId;\r
172\r
a9d85320 173#if 0\r
59336178 174 FORM_EXPRESSION *SuppressExpression; // Non-NULL indicates nested inside of SuppressIf\r
a9d85320 175#endif\r
59336178 176} QUESTION_OPTION;\r
177\r
178#define QUESTION_OPTION_FROM_LINK(a) CR (a, QUESTION_OPTION, Link, QUESTION_OPTION_SIGNATURE)\r
179\r
a3a83173 180#define FORM_BROWSER_STATEMENT_SIGNATURE SIGNATURE_32 ('F', 'S', 'T', 'A')\r
59336178 181typedef struct {\r
182 UINTN Signature;\r
183 LIST_ENTRY Link;\r
184\r
185 UINT8 Operand; // The operand (first byte) of this Statement or Question\r
186\r
187 //\r
188 // Statement Header\r
189 //\r
190 EFI_STRING_ID Prompt;\r
191 EFI_STRING_ID Help;\r
192 EFI_STRING_ID TextTwo; // For EFI_IFR_TEXT\r
193\r
194 //\r
195 // Question Header\r
196 //\r
197 EFI_QUESTION_ID QuestionId; // The value of zero is reserved\r
198 EFI_VARSTORE_ID VarStoreId; // A value of zero indicates no variable storage\r
199 FORMSET_STORAGE *Storage;\r
200 union {\r
201 EFI_STRING_ID VarName;\r
202 UINT16 VarOffset;\r
203 } VarStoreInfo;\r
a9d85320 204#if 0\r
205 CHAR16 *UnicodeVarName;\r
206#endif\r
207 \r
59336178 208 UINT16 StorageWidth;\r
209 UINT8 QuestionFlags;\r
a9d85320 210\r
211#if 0\r
59336178 212 CHAR16 *VariableName; // Name/Value or EFI Variable name\r
213 CHAR16 *BlockName; // Buffer storage block name: "OFFSET=...WIDTH=..."\r
a9d85320 214#endif\r
59336178 215\r
216 EFI_HII_VALUE HiiValue; // Edit copy for checkbox, numberic, oneof\r
217 UINT8 *BufferValue; // Edit copy for string, password, orderedlist\r
218\r
219 //\r
220 // OpCode specific members\r
221 //\r
222 UINT8 Flags; // for EFI_IFR_CHECKBOX, EFI_IFR_DATE, EFI_IFR_NUMERIC, EFI_IFR_ONE_OF,\r
223 // EFI_IFR_ORDERED_LIST, EFI_IFR_STRING,EFI_IFR_SUBTITLE,EFI_IFR_TIME, EFI_IFR_BANNER\r
224 UINT8 MaxContainers; // for EFI_IFR_ORDERED_LIST\r
225\r
226 UINT16 BannerLineNumber; // for EFI_IFR_BANNER, 1-based line number\r
227 EFI_STRING_ID QuestionConfig; // for EFI_IFR_ACTION, if 0 then no configuration string will be processed\r
228\r
229 UINT64 Minimum; // for EFI_IFR_ONE_OF/EFI_IFR_NUMERIC, it's Min/Max value\r
230 UINT64 Maximum; // for EFI_IFR_STRING/EFI_IFR_PASSWORD, it's Min/Max length\r
231 UINT64 Step;\r
232\r
233 EFI_DEFAULT_ID DefaultId; // for EFI_IFR_RESET_BUTTON\r
234 EFI_FORM_ID RefFormId; // for EFI_IFR_REF\r
235 EFI_QUESTION_ID RefQuestionId; // for EFI_IFR_REF2\r
236 EFI_GUID RefFormSetId; // for EFI_IFR_REF3\r
237 EFI_STRING_ID RefDevicePath; // for EFI_IFR_REF4\r
238\r
239 //\r
240 // Get from IFR parsing\r
241 //\r
a9d85320 242#if 0\r
59336178 243 FORM_EXPRESSION *ValueExpression; // nested EFI_IFR_VALUE, provide Question value and indicate Question is ReadOnly\r
a9d85320 244#endif\r
59336178 245 LIST_ENTRY DefaultListHead; // nested EFI_IFR_DEFAULT list (QUESTION_DEFAULT), provide default values\r
246 LIST_ENTRY OptionListHead; // nested EFI_IFR_ONE_OF_OPTION list (QUESTION_OPTION)\r
247\r
248 EFI_IMAGE_ID ImageId; // nested EFI_IFR_IMAGE\r
249 UINT8 RefreshInterval; // nested EFI_IFR_REFRESH, refresh interval(in seconds) for Question value, 0 means no refresh\r
250 BOOLEAN InSubtitle; // nesting inside of EFI_IFR_SUBTITLE\r
251\r
a9d85320 252#if 0\r
59336178 253 LIST_ENTRY InconsistentListHead;// nested inconsistent expression list (FORM_EXPRESSION)\r
254 LIST_ENTRY NoSubmitListHead; // nested nosubmit expression list (FORM_EXPRESSION)\r
255 FORM_EXPRESSION *GrayOutExpression; // nesting inside of GrayOutIf\r
256 FORM_EXPRESSION *SuppressExpression; // nesting inside of SuppressIf\r
a9d85320 257#endif\r
59336178 258\r
259} FORM_BROWSER_STATEMENT;\r
260\r
261#define FORM_BROWSER_STATEMENT_FROM_LINK(a) CR (a, FORM_BROWSER_STATEMENT, Link, FORM_BROWSER_STATEMENT_SIGNATURE)\r
262\r
a3a83173 263#define FORM_BROWSER_FORM_SIGNATURE SIGNATURE_32 ('F', 'F', 'R', 'M')\r
59336178 264\r
265typedef struct {\r
266 UINTN Signature;\r
267 LIST_ENTRY Link;\r
268\r
269 UINT16 FormId;\r
270 EFI_STRING_ID FormTitle;\r
271\r
272 EFI_IMAGE_ID ImageId;\r
273\r
a9d85320 274#if 0\r
59336178 275 LIST_ENTRY ExpressionListHead; // List of Expressions (FORM_EXPRESSION)\r
a9d85320 276#endif\r
59336178 277 LIST_ENTRY StatementListHead; // List of Statements and Questions (FORM_BROWSER_STATEMENT)\r
278} FORM_BROWSER_FORM;\r
279\r
280#define FORM_BROWSER_FORM_FROM_LINK(a) CR (a, FORM_BROWSER_FORM, Link, FORM_BROWSER_FORM_SIGNATURE)\r
281\r
a3a83173 282#define FORMSET_DEFAULTSTORE_SIGNATURE SIGNATURE_32 ('F', 'D', 'F', 'S')\r
59336178 283\r
284typedef struct {\r
285 UINTN Signature;\r
286 LIST_ENTRY Link;\r
287\r
288 UINT16 DefaultId;\r
289 EFI_STRING_ID DefaultName;\r
290} FORMSET_DEFAULTSTORE;\r
291\r
292#define FORMSET_DEFAULTSTORE_FROM_LINK(a) CR (a, FORMSET_DEFAULTSTORE, Link, FORMSET_DEFAULTSTORE_SIGNATURE)\r
293\r
294typedef struct {\r
295 EFI_HII_HANDLE HiiHandle;\r
59336178 296\r
297 UINTN IfrBinaryLength;\r
298 UINT8 *IfrBinaryData;\r
299\r
300 EFI_GUID Guid;\r
301 EFI_STRING_ID FormSetTitle;\r
302 EFI_STRING_ID Help;\r
303 UINT16 Class;\r
304 UINT16 SubClass;\r
305 EFI_IMAGE_ID ImageId;\r
306\r
307 FORM_BROWSER_STATEMENT *StatementBuffer; // Buffer for all Statements and Questions\r
a9d85320 308#if 0\r
59336178 309 EXPRESSION_OPCODE *ExpressionBuffer; // Buffer for all Expression OpCode\r
a9d85320 310#endif\r
59336178 311\r
312 LIST_ENTRY StorageListHead; // Storage list (FORMSET_STORAGE)\r
313 LIST_ENTRY DefaultStoreListHead; // DefaultStore list (FORMSET_DEFAULTSTORE)\r
314 LIST_ENTRY FormListHead; // Form list (FORM_BROWSER_FORM)\r
59336178 315\r
a9d85320 316 LIST_ENTRY OneOfOptionMapListHead; //ONE_OF_OPTION_MAP\r
317\r
318 UINT16 MaxQuestionId;\r
319\r
03254710 320 //\r
321 // Added for Framework HII Thunk. \r
322 // Default Variable Storage built from a Framework VFR file using UEFI VFR Compiler in Compatibility mode is determined \r
323 // by priority rules defined in GetFormsetDefaultVarstoreId (). See the function description for details.\r
324 //\r
a9d85320 325 EFI_VARSTORE_ID DefaultVarStoreId;\r
dee207ee 326 CHAR16 *OriginalDefaultVarStoreName;\r
a9d85320 327\r
328 UINTN NumberOfStatement;\r
329 \r
330} FORM_BROWSER_FORMSET;\r
59336178 331\r
59336178 332\r
333EFI_STATUS\r
334ParseOpCodes (\r
335 IN FORM_BROWSER_FORMSET *FormSet\r
e00e1d46 336 );\r
59336178 337\r
338VOID\r
339DestroyFormSet (\r
340 IN OUT FORM_BROWSER_FORMSET *FormSet\r
e00e1d46 341 );\r
59336178 342\r
343#endif\r
344\r