]> git.proxmox.com Git - mirror_edk2.git/blob - IntelFrameworkPkg/Include/Framework/FrameworkInternalFormRepresentation.h
04cbae1ef5aefc49eeaba82d38ac89b380f60d18
[mirror_edk2.git] / IntelFrameworkPkg / Include / Framework / FrameworkInternalFormRepresentation.h
1 /** @file
2 This file defines the encoding for the VFR (Visual Form Representation) language.
3 Framework IFR is primarily consumed by the EFI presentation engine, and produced by EFI
4 internal application and drivers as well as all add-in card option-ROM drivers
5
6 Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
7 SPDX-License-Identifier: BSD-2-Clause-Patent
8
9 @par Revision Reference:
10 These definitions are from the Framework Specification HII 0.92.
11
12 **/
13
14 #ifndef __FRAMEWORK_INTERNAL_FORMREPRESENTATION_H__
15 #define __FRAMEWORK_INTERNAL_FORMREPRESENTATION_H__
16
17 typedef UINT16 STRING_REF;
18
19 //
20 // IFR Op codes
21 //
22 #define FRAMEWORK_EFI_IFR_FORM_OP 0x01
23 #define FRAMEWORK_EFI_IFR_SUBTITLE_OP 0x02
24 #define FRAMEWORK_EFI_IFR_TEXT_OP 0x03
25 #define EFI_IFR_GRAPHIC_OP 0x04
26 #define FRAMEWORK_EFI_IFR_ONE_OF_OP 0x05
27 #define FRAMEWORK_EFI_IFR_CHECKBOX_OP 0x06
28 #define FRAMEWORK_EFI_IFR_NUMERIC_OP 0x07
29 #define FRAMEWORK_EFI_IFR_PASSWORD_OP 0x08
30 #define FRAMEWORK_EFI_IFR_ONE_OF_OPTION_OP 0x09 ///< ONEOF OPTION field.
31 #define FRAMEWORK_EFI_IFR_SUPPRESS_IF_OP 0x0A
32 #define EFI_IFR_END_FORM_OP 0x0B
33 #define EFI_IFR_HIDDEN_OP 0x0C
34 #define EFI_IFR_END_FORM_SET_OP 0x0D
35 #define FRAMEWORK_EFI_IFR_FORM_SET_OP 0x0E
36 #define FRAMEWORK_EFI_IFR_REF_OP 0x0F
37 #define EFI_IFR_END_ONE_OF_OP 0x10
38 #define FRAMEWORK_EFI_IFR_END_OP EFI_IFR_END_ONE_OF_OP
39 #define FRAMEWORK_EFI_IFR_INCONSISTENT_IF_OP 0x11
40 #define FRAMEWORK_EFI_IFR_EQ_ID_VAL_OP 0x12
41 #define FRAMEWORK_EFI_IFR_EQ_ID_ID_OP 0x13
42 #define FRAMEWORK_EFI_IFR_EQ_ID_LIST_OP 0x14
43 #define FRAMEWORK_EFI_IFR_AND_OP 0x15
44 #define FRAMEWORK_EFI_IFR_OR_OP 0x16
45 #define FRAMEWORK_EFI_IFR_NOT_OP 0x17
46 #define EFI_IFR_END_IF_OP 0x18 ///< For endif of inconsistentif, suppressif, grayoutif.
47 #define EFI_IFR_GRAYOUT_IF_OP 0x19
48 #define FRAMEWORK_EFI_IFR_DATE_OP 0x1A
49 #define FRAMEWORK_EFI_IFR_TIME_OP 0x1B
50 #define FRAMEWORK_EFI_IFR_STRING_OP 0x1C
51 #define EFI_IFR_LABEL_OP 0x1D
52 #define EFI_IFR_SAVE_DEFAULTS_OP 0x1E
53 #define EFI_IFR_RESTORE_DEFAULTS_OP 0x1F
54 #define EFI_IFR_BANNER_OP 0x20
55 #define EFI_IFR_INVENTORY_OP 0x21
56 #define EFI_IFR_EQ_VAR_VAL_OP 0x22
57 #define FRAMEWORK_EFI_IFR_ORDERED_LIST_OP 0x23
58 #define FRAMEWORK_EFI_IFR_VARSTORE_OP 0x24
59 #define EFI_IFR_VARSTORE_SELECT_OP 0x25
60 #define EFI_IFR_VARSTORE_SELECT_PAIR_OP 0x26
61 #define EFI_IFR_LAST_OPCODE EFI_IFR_VARSTORE_SELECT_PAIR_OP
62 #define EFI_IFR_OEM_OP 0xFE
63 #define EFI_IFR_NV_ACCESS_COMMAND 0xFF
64
65 //
66 // Define values for the flags fields in some VFR opcodes. These are
67 // bitmasks.
68 //
69 #define EFI_IFR_FLAG_DEFAULT 0x01
70 #define EFI_IFR_FLAG_MANUFACTURING 0x02
71 #define EFI_IFR_FLAG_INTERACTIVE 0x04
72 #define EFI_IFR_FLAG_NV_ACCESS 0x08
73 #define EFI_IFR_FLAG_RESET_REQUIRED 0x10
74 #define EFI_IFR_FLAG_LATE_CHECK 0x20
75
76 #define EFI_NON_DEVICE_CLASS 0x00 ///< Useful when you do not want something in the Device Manager.
77 #define EFI_DISK_DEVICE_CLASS 0x01
78 #define EFI_VIDEO_DEVICE_CLASS 0x02
79 #define EFI_NETWORK_DEVICE_CLASS 0x04
80 #define EFI_INPUT_DEVICE_CLASS 0x08
81 #define EFI_ON_BOARD_DEVICE_CLASS 0x10
82 #define EFI_OTHER_DEVICE_CLASS 0x20
83
84 #define EFI_SETUP_APPLICATION_SUBCLASS 0x00
85 #define EFI_GENERAL_APPLICATION_SUBCLASS 0x01
86 #define EFI_FRONT_PAGE_SUBCLASS 0x02
87 #define EFI_SINGLE_USE_SUBCLASS 0x03 ///< Used to display a single entity ,and then exit.
88
89 ///
90 /// Used to flag dynamically created op-codes. This is meaningful to the IFR Library set
91 /// and the browser because we need to distinguish between compiled NV map data and created data.
92 /// We do not allow new entries to be created in the NV map dynamically, but we do need
93 /// to display this information correctly. To dynamically create op-codes and assume that their
94 /// data will be saved, ensure that the NV starting location they refer to is pre-defined in the
95 /// NV map.
96 ///
97 #define EFI_IFR_FLAG_CREATED 128
98
99
100 #pragma pack(1)
101 //
102 // IFR Structure definitions
103 //
104 typedef struct {
105 UINT8 OpCode;
106 UINT8 Length;
107 } FRAMEWORK_EFI_IFR_OP_HEADER;
108
109 typedef struct {
110 FRAMEWORK_EFI_IFR_OP_HEADER Header;
111 EFI_GUID Guid;
112 STRING_REF FormSetTitle;
113 STRING_REF Help;
114 EFI_PHYSICAL_ADDRESS CallbackHandle;
115 UINT16 Class;
116 UINT16 SubClass;
117 UINT16 NvDataSize; ///< Set once; the size of the NV data as defined in the script.
118 } FRAMEWORK_EFI_IFR_FORM_SET;
119
120 typedef struct {
121 FRAMEWORK_EFI_IFR_OP_HEADER Header;
122 UINT16 FormId;
123 STRING_REF FormTitle;
124 } FRAMEWORK_EFI_IFR_FORM;
125
126 typedef struct {
127 FRAMEWORK_EFI_IFR_OP_HEADER Header;
128 UINT16 LabelId;
129 } EFI_IFR_LABEL;
130
131 typedef struct {
132 FRAMEWORK_EFI_IFR_OP_HEADER Header;
133 STRING_REF SubTitle;
134 } FRAMEWORK_EFI_IFR_SUBTITLE;
135
136 typedef struct {
137 FRAMEWORK_EFI_IFR_OP_HEADER Header;
138 STRING_REF Help;
139 STRING_REF Text;
140 STRING_REF TextTwo;
141 UINT8 Flags; ///< This is included solely for purposes of interactive/dynamic support.
142 UINT16 Key; ///< The value to be passed to the caller to identify this particular op-code.
143 } FRAMEWORK_EFI_IFR_TEXT;
144
145 //
146 // goto
147 //
148 typedef struct {
149 FRAMEWORK_EFI_IFR_OP_HEADER Header;
150 UINT16 FormId;
151 STRING_REF Prompt;
152 STRING_REF Help; ///< The string Token for the context-help.
153 UINT8 Flags; ///< This is included solely for purposes of interactive/dynamic support.
154 UINT16 Key; ///< The value to be passed to the caller to identify this particular op-code.
155 } FRAMEWORK_EFI_IFR_REF;
156
157 typedef struct {
158 FRAMEWORK_EFI_IFR_OP_HEADER Header;
159 } EFI_IFR_END_FORM;
160
161 typedef struct {
162 FRAMEWORK_EFI_IFR_OP_HEADER Header;
163 } EFI_IFR_END_FORM_SET;
164
165 //
166 // Also notice that the IFR_ONE_OF and IFR_CHECK_BOX are identical in structure......
167 // code assumes this to be true, if this ever changes we need to revisit the InitializeTagStructures code
168 //
169 typedef struct {
170 FRAMEWORK_EFI_IFR_OP_HEADER Header;
171 UINT16 QuestionId; ///< The ID designating what the question is about...
172 UINT8 Width; ///< The Size of the Data being saved.
173 STRING_REF Prompt; ///< The String Token for the Prompt.
174 STRING_REF Help; ///< The string Token for the context-help.
175 } FRAMEWORK_EFI_IFR_ONE_OF;
176
177 typedef struct {
178 FRAMEWORK_EFI_IFR_OP_HEADER Header;
179 UINT16 QuestionId; ///< The offset in NV for storage of the data.
180 UINT8 MaxEntries; ///< The maximum number of options in the ordered list (=size of NVStore).
181 STRING_REF Prompt; ///< The string token for the prompt.
182 STRING_REF Help; ///< The string token for the context-help.
183 } FRAMEWORK_EFI_IFR_ORDERED_LIST;
184
185 typedef struct {
186 FRAMEWORK_EFI_IFR_OP_HEADER Header;
187 UINT16 QuestionId; ///< The ID designating what the question is about...
188 UINT8 Width; ///< The Size of the Data being saved.
189 STRING_REF Prompt; ///< The String Token for the Prompt.
190 STRING_REF Help; ///< The string Token for the context-help.
191 UINT8 Flags; ///< If non-zero, it means that it is the default option.
192 UINT16 Key; ///< Value to be passed to caller to identify this particular op-code.
193 } FRAMEWORK_EFI_IFR_CHECKBOX, EFI_IFR_CHECK_BOX;
194
195 typedef struct {
196 FRAMEWORK_EFI_IFR_OP_HEADER Header;
197 STRING_REF Option; ///< The string token describing the option.
198 UINT16 Value; ///< The value associated with this option that is stored in the NVRAM.
199 UINT8 Flags; ///< If non-zero, it means that it is the default option.
200 UINT16 Key; ///< Value to be passed to caller to identify this particular op-code.
201 } FRAMEWORK_EFI_IFR_ONE_OF_OPTION;
202
203 typedef struct {
204 FRAMEWORK_EFI_IFR_OP_HEADER Header;
205 UINT16 QuestionId; ///< The ID designating what the question is about...
206 UINT8 Width; ///< The Size of the Data being saved.
207 STRING_REF Prompt; ///< The String Token for the Prompt.
208 STRING_REF Help; ///< The string Token for the context-help.
209 UINT8 Flags; ///< This is included solely for purposes of interactive/dynamic support.
210 UINT16 Key; ///< The value to be passed to caller to identify this particular op-code.
211 UINT16 Minimum;
212 UINT16 Maximum;
213 UINT16 Step; ///< Zero means manual input. Otherwise, arrow selection is called for.
214 UINT16 Default;
215 } FRAMEWORK_EFI_IFR_NUMERIC;
216
217 //
218 // There is an interesting twist with regards to Time and Date. This is one of the few items which can accept input
219 // from a user, and may or may not need to use storage in the NVRAM space. The decided method for determining
220 // if NVRAM space will be used (only for a TimeOp or DateOp) is: If .QuestionId == 0 && .Width == 0 (normally an
221 // impossibility) then use system resources to store the data away and not NV resources. In other words, the setup
222 // engine will call gRT->SetTime, and gRT->SetDate for the saving of data, and the values displayed will be from the
223 // gRT->GetXXXX series of calls.
224 //
225 typedef struct {
226 FRAMEWORK_EFI_IFR_NUMERIC Hour;
227 FRAMEWORK_EFI_IFR_NUMERIC Minute;
228 FRAMEWORK_EFI_IFR_NUMERIC Second;
229 } FRAMEWORK_EFI_IFR_TIME;
230
231 typedef struct {
232 FRAMEWORK_EFI_IFR_NUMERIC Year;
233 FRAMEWORK_EFI_IFR_NUMERIC Month;
234 FRAMEWORK_EFI_IFR_NUMERIC Day;
235 } FRAMEWORK_EFI_IFR_DATE;
236
237 typedef struct {
238 FRAMEWORK_EFI_IFR_OP_HEADER Header;
239 UINT16 QuestionId;///< The ID designating what the question is about...
240 UINT8 Width; ///< The Size of the Data being saved.
241 STRING_REF Prompt; ///< The String Token for the Prompt.
242 STRING_REF Help; ///< The string Token for the context-help.
243 UINT8 Flags; ///< This is included solely for purposes of interactive/dynamic support.
244 UINT16 Key; ///< The value to be passed to caller to identify this particular op-code.
245 UINT8 MinSize; ///< Minimum allowable sized password.
246 UINT8 MaxSize; ///< Maximum allowable sized password.
247 UINT16 Encoding;
248 } FRAMEWORK_EFI_IFR_PASSWORD;
249
250 typedef struct {
251 FRAMEWORK_EFI_IFR_OP_HEADER Header;
252 UINT16 QuestionId; ///< The ID designating what the question is about...
253 UINT8 Width; ///< The Size of the Data being saved.
254 STRING_REF Prompt; ///< The String Token for the Prompt.
255 STRING_REF Help; ///< The string Token for the context-help.
256 UINT8 Flags; ///< This is included solely for purposes of interactive/dynamic support.
257 UINT16 Key; ///< The value to be passed to caller to identify this particular op-code.
258 UINT8 MinSize; ///< Minimum allowable sized password.
259 UINT8 MaxSize; ///< Maximum allowable sized password.
260 } FRAMEWORK_EFI_IFR_STRING;
261
262 typedef struct {
263 FRAMEWORK_EFI_IFR_OP_HEADER Header;
264 } EFI_IFR_END_ONE_OF;
265
266 typedef struct {
267 FRAMEWORK_EFI_IFR_OP_HEADER Header;
268 UINT16 Value;
269 UINT16 Key;
270 } EFI_IFR_HIDDEN;
271
272 ///
273 /// Inconsistent with specification here:
274 /// The following defintion may not comply with Framework Specification HII 0.92. To
275 /// keep the inconsistant is for implementation needed.
276 ///@{
277 typedef struct {
278 FRAMEWORK_EFI_IFR_OP_HEADER Header;
279 UINT8 Flags;
280 } EFI_IFR_SUPPRESS;
281
282 typedef struct {
283 FRAMEWORK_EFI_IFR_OP_HEADER Header;
284 UINT8 Flags;
285 } EFI_IFR_GRAY_OUT;
286
287 typedef struct {
288 FRAMEWORK_EFI_IFR_OP_HEADER Header;
289 STRING_REF Popup;
290 UINT8 Flags;
291 } EFI_IFR_INCONSISTENT;
292
293 typedef struct {
294 FRAMEWORK_EFI_IFR_OP_HEADER Header;
295 UINT16 QuestionId; ///< The offset into variable storage.
296 UINT8 Width; ///< The size of variable storage.
297 UINT16 Value; ///< The value to compare against.
298 } FRAMEWORK_EFI_IFR_EQ_ID_VAL;
299
300 typedef struct {
301 FRAMEWORK_EFI_IFR_OP_HEADER Header;
302 UINT16 QuestionId; ///< The offset into variable storage.
303 UINT8 Width; ///< The size of variable storage.
304 UINT16 ListLength;
305 UINT16 ValueList[1];
306 } FRAMEWORK_EFI_IFR_EQ_ID_LIST;
307
308 typedef struct {
309 FRAMEWORK_EFI_IFR_OP_HEADER Header;
310 UINT16 QuestionId1; ///< The offset into variable storage for first value to compare.
311 UINT8 Width; ///< The size of variable storage (must be same for both).
312 UINT16 QuestionId2; ///< The offset into variable storage for second value to compare.
313 } FRAMEWORK_EFI_IFR_EQ_ID_ID;
314
315 typedef struct {
316 FRAMEWORK_EFI_IFR_OP_HEADER Header;
317 UINT16 VariableId; ///< The offset into variable storage.
318 UINT16 Value; ///< The value to compare against.
319 } EFI_IFR_EQ_VAR_VAL;
320 ///@}
321
322 typedef struct {
323 FRAMEWORK_EFI_IFR_OP_HEADER Header;
324 } FRAMEWORK_EFI_IFR_AND;
325
326 typedef struct {
327 FRAMEWORK_EFI_IFR_OP_HEADER Header;
328 } FRAMEWORK_EFI_IFR_OR;
329
330 typedef struct {
331 FRAMEWORK_EFI_IFR_OP_HEADER Header;
332 } FRAMEWORK_EFI_IFR_NOT;
333
334 typedef struct {
335 FRAMEWORK_EFI_IFR_OP_HEADER Header;
336 } EFI_IFR_END_EXPR, EFI_IFR_END_IF;
337
338 typedef struct {
339 FRAMEWORK_EFI_IFR_OP_HEADER Header;
340 UINT16 FormId;
341 STRING_REF Prompt;
342 STRING_REF Help;
343 UINT8 Flags;
344 UINT16 Key;
345 } EFI_IFR_SAVE_DEFAULTS;
346
347 typedef struct {
348 FRAMEWORK_EFI_IFR_OP_HEADER Header;
349 STRING_REF Help;
350 STRING_REF Text;
351 STRING_REF TextTwo; ///< Optional text.
352 } EFI_IFR_INVENTORY;
353
354 typedef struct {
355 FRAMEWORK_EFI_IFR_OP_HEADER Header;
356 EFI_GUID Guid; ///< GUID for the variable.
357 UINT16 VarId; ///< The variable store ID, as referenced elsewhere in the form.
358 UINT16 Size; ///< The size of the variable storage.
359 } FRAMEWORK_EFI_IFR_VARSTORE;
360
361 typedef struct {
362 FRAMEWORK_EFI_IFR_OP_HEADER Header;
363 UINT16 VarId; ///< The variable store ID, as referenced elsewhere in the form.
364 } EFI_IFR_VARSTORE_SELECT;
365
366 ///
367 /// Used for the ideqid VFR statement where two variable stores may be referenced in the
368 /// same VFR statement.
369 /// A browser should treat this as an FRAMEWORK_EFI_IFR_VARSTORE_SELECT statement and assume that all following
370 /// IFR opcodes use the VarId as defined here.
371 ///
372 typedef struct {
373 FRAMEWORK_EFI_IFR_OP_HEADER Header;
374 UINT16 VarId; ///< The variable store ID, as referenced elsewhere in the form.
375 UINT16 SecondaryVarId; ///< The variable store ID, as referenced elsewhere in the form.
376 } EFI_IFR_VARSTORE_SELECT_PAIR;
377
378 ///
379 /// Save defaults and restore defaults have same structure.
380 ///
381 #define EFI_IFR_RESTORE_DEFAULTS EFI_IFR_SAVE_DEFAULTS
382
383 typedef struct {
384 FRAMEWORK_EFI_IFR_OP_HEADER Header;
385 STRING_REF Title; ///< The string token for the banner title.
386 UINT16 LineNumber; ///< 1-based line number.
387 UINT8 Alignment; ///< Left, center, or right-aligned.
388 } EFI_IFR_BANNER;
389
390 #define EFI_IFR_BANNER_ALIGN_LEFT 0
391 #define EFI_IFR_BANNER_ALIGN_CENTER 1
392 #define EFI_IFR_BANNER_ALIGN_RIGHT 2
393 #define EFI_IFR_BANNER_TIMEOUT 0xFF
394
395 #pragma pack()
396
397 #endif