]> git.proxmox.com Git - mirror_edk2.git/blame - EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/UefiIfrParser.h
Fix GCC build failure.
[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
584d5652
HT
11 Copyright (c) 2008 - 2010, Intel Corporation. All rights reserved.<BR>\r
12 This program and the accompanying materials\r
59336178 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
341515e0 118 EFI_QUESTION_ID QuestionId; // For EFI_IFR_EQ_ID_ID, EFI_IFR_EQ_ID_VAL_LIST, EFI_IFR_QUESTION_REF1\r
59336178 119 EFI_QUESTION_ID QuestionId2;\r
120\r
341515e0 121 UINT16 ListLength; // For EFI_IFR_EQ_ID_VAL_LIST\r
59336178 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
59336178 173} QUESTION_OPTION;\r
174\r
175#define QUESTION_OPTION_FROM_LINK(a) CR (a, QUESTION_OPTION, Link, QUESTION_OPTION_SIGNATURE)\r
176\r
26a76fbc
LG
177typedef union {\r
178 EFI_STRING_ID VarName;\r
179 UINT16 VarOffset;\r
180} VAR_STORE_INFO;\r
181\r
a3a83173 182#define FORM_BROWSER_STATEMENT_SIGNATURE SIGNATURE_32 ('F', 'S', 'T', 'A')\r
59336178 183typedef struct {\r
184 UINTN Signature;\r
185 LIST_ENTRY Link;\r
186\r
187 UINT8 Operand; // The operand (first byte) of this Statement or Question\r
188\r
189 //\r
190 // Statement Header\r
191 //\r
192 EFI_STRING_ID Prompt;\r
193 EFI_STRING_ID Help;\r
194 EFI_STRING_ID TextTwo; // For EFI_IFR_TEXT\r
195\r
196 //\r
197 // Question Header\r
198 //\r
199 EFI_QUESTION_ID QuestionId; // The value of zero is reserved\r
200 EFI_VARSTORE_ID VarStoreId; // A value of zero indicates no variable storage\r
201 FORMSET_STORAGE *Storage;\r
26a76fbc 202 VAR_STORE_INFO VarStoreInfo;\r
a9d85320 203 \r
59336178 204 UINT16 StorageWidth;\r
205 UINT8 QuestionFlags;\r
a9d85320 206\r
59336178 207 EFI_HII_VALUE HiiValue; // Edit copy for checkbox, numberic, oneof\r
208 UINT8 *BufferValue; // Edit copy for string, password, orderedlist\r
209\r
210 //\r
211 // OpCode specific members\r
212 //\r
213 UINT8 Flags; // for EFI_IFR_CHECKBOX, EFI_IFR_DATE, EFI_IFR_NUMERIC, EFI_IFR_ONE_OF,\r
214 // EFI_IFR_ORDERED_LIST, EFI_IFR_STRING,EFI_IFR_SUBTITLE,EFI_IFR_TIME, EFI_IFR_BANNER\r
215 UINT8 MaxContainers; // for EFI_IFR_ORDERED_LIST\r
216\r
217 UINT16 BannerLineNumber; // for EFI_IFR_BANNER, 1-based line number\r
218 EFI_STRING_ID QuestionConfig; // for EFI_IFR_ACTION, if 0 then no configuration string will be processed\r
219\r
220 UINT64 Minimum; // for EFI_IFR_ONE_OF/EFI_IFR_NUMERIC, it's Min/Max value\r
221 UINT64 Maximum; // for EFI_IFR_STRING/EFI_IFR_PASSWORD, it's Min/Max length\r
222 UINT64 Step;\r
223\r
224 EFI_DEFAULT_ID DefaultId; // for EFI_IFR_RESET_BUTTON\r
225 EFI_FORM_ID RefFormId; // for EFI_IFR_REF\r
226 EFI_QUESTION_ID RefQuestionId; // for EFI_IFR_REF2\r
227 EFI_GUID RefFormSetId; // for EFI_IFR_REF3\r
228 EFI_STRING_ID RefDevicePath; // for EFI_IFR_REF4\r
229\r
230 //\r
231 // Get from IFR parsing\r
232 //\r
59336178 233 LIST_ENTRY DefaultListHead; // nested EFI_IFR_DEFAULT list (QUESTION_DEFAULT), provide default values\r
234 LIST_ENTRY OptionListHead; // nested EFI_IFR_ONE_OF_OPTION list (QUESTION_OPTION)\r
235\r
236 EFI_IMAGE_ID ImageId; // nested EFI_IFR_IMAGE\r
237 UINT8 RefreshInterval; // nested EFI_IFR_REFRESH, refresh interval(in seconds) for Question value, 0 means no refresh\r
238 BOOLEAN InSubtitle; // nesting inside of EFI_IFR_SUBTITLE\r
239\r
59336178 240} FORM_BROWSER_STATEMENT;\r
241\r
242#define FORM_BROWSER_STATEMENT_FROM_LINK(a) CR (a, FORM_BROWSER_STATEMENT, Link, FORM_BROWSER_STATEMENT_SIGNATURE)\r
243\r
a3a83173 244#define FORM_BROWSER_FORM_SIGNATURE SIGNATURE_32 ('F', 'F', 'R', 'M')\r
59336178 245\r
246typedef struct {\r
247 UINTN Signature;\r
248 LIST_ENTRY Link;\r
249\r
250 UINT16 FormId;\r
251 EFI_STRING_ID FormTitle;\r
252\r
253 EFI_IMAGE_ID ImageId;\r
254\r
a9d85320 255#if 0\r
59336178 256 LIST_ENTRY ExpressionListHead; // List of Expressions (FORM_EXPRESSION)\r
a9d85320 257#endif\r
59336178 258 LIST_ENTRY StatementListHead; // List of Statements and Questions (FORM_BROWSER_STATEMENT)\r
259} FORM_BROWSER_FORM;\r
260\r
261#define FORM_BROWSER_FORM_FROM_LINK(a) CR (a, FORM_BROWSER_FORM, Link, FORM_BROWSER_FORM_SIGNATURE)\r
262\r
a3a83173 263#define FORMSET_DEFAULTSTORE_SIGNATURE SIGNATURE_32 ('F', 'D', 'F', 'S')\r
59336178 264\r
265typedef struct {\r
266 UINTN Signature;\r
267 LIST_ENTRY Link;\r
268\r
269 UINT16 DefaultId;\r
270 EFI_STRING_ID DefaultName;\r
271} FORMSET_DEFAULTSTORE;\r
272\r
273#define FORMSET_DEFAULTSTORE_FROM_LINK(a) CR (a, FORMSET_DEFAULTSTORE, Link, FORMSET_DEFAULTSTORE_SIGNATURE)\r
274\r
275typedef struct {\r
276 EFI_HII_HANDLE HiiHandle;\r
59336178 277\r
278 UINTN IfrBinaryLength;\r
279 UINT8 *IfrBinaryData;\r
280\r
281 EFI_GUID Guid;\r
282 EFI_STRING_ID FormSetTitle;\r
283 EFI_STRING_ID Help;\r
284 UINT16 Class;\r
285 UINT16 SubClass;\r
286 EFI_IMAGE_ID ImageId;\r
287\r
288 FORM_BROWSER_STATEMENT *StatementBuffer; // Buffer for all Statements and Questions\r
a9d85320 289#if 0\r
59336178 290 EXPRESSION_OPCODE *ExpressionBuffer; // Buffer for all Expression OpCode\r
a9d85320 291#endif\r
59336178 292\r
293 LIST_ENTRY StorageListHead; // Storage list (FORMSET_STORAGE)\r
294 LIST_ENTRY DefaultStoreListHead; // DefaultStore list (FORMSET_DEFAULTSTORE)\r
295 LIST_ENTRY FormListHead; // Form list (FORM_BROWSER_FORM)\r
59336178 296\r
a9d85320 297 LIST_ENTRY OneOfOptionMapListHead; //ONE_OF_OPTION_MAP\r
298\r
299 UINT16 MaxQuestionId;\r
300\r
03254710 301 //\r
302 // Added for Framework HII Thunk. \r
303 // Default Variable Storage built from a Framework VFR file using UEFI VFR Compiler in Compatibility mode is determined \r
304 // by priority rules defined in GetFormsetDefaultVarstoreId (). See the function description for details.\r
305 //\r
a9d85320 306 EFI_VARSTORE_ID DefaultVarStoreId;\r
dee207ee 307 CHAR16 *OriginalDefaultVarStoreName;\r
a9d85320 308\r
309 UINTN NumberOfStatement;\r
310 \r
311} FORM_BROWSER_FORMSET;\r
59336178 312\r
59336178 313\r
26a76fbc
LG
314/**\r
315 Parse opcodes in the formset IFR binary.\r
316\r
317 @param FormSet Pointer of the FormSet data structure.\r
318\r
319 @retval EFI_SUCCESS Opcode parse success.\r
320 @retval Other Opcode parse fail.\r
321\r
322**/\r
59336178 323EFI_STATUS\r
324ParseOpCodes (\r
325 IN FORM_BROWSER_FORMSET *FormSet\r
e00e1d46 326 );\r
59336178 327\r
26a76fbc
LG
328/**\r
329 Free resources allocated for a FormSet\r
330\r
331 @param FormSet Pointer of the FormSet\r
332\r
333 @return None.\r
334\r
335**/\r
59336178 336VOID\r
337DestroyFormSet (\r
338 IN OUT FORM_BROWSER_FORMSET *FormSet\r
e00e1d46 339 );\r
59336178 340\r
341#endif\r
342\r