3 Copyright (c) 2004 - 2005, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14 EfiInternalFormRepresentation.h
18 This file defines the encoding for the VFR (Visual Form Representation) language.
19 IFR is primarily consumed by the EFI presentation engine, and produced by EFI
20 internal application and drivers as well as all add-in card option-ROM drivers
24 #ifndef _EFI_INTERNAL_FORM_REPRESENTATION_H_
25 #define _EFI_INTERNAL_FORM_REPRESENTATION_H_
28 // The following types are currently defined:
30 typedef UINT32 RELOFST
;
31 typedef UINT16 STRING_REF
;
32 typedef CHAR16
*EFI_STRING
;
37 #define EFI_IFR_FORM_OP 0x01
38 #define EFI_IFR_SUBTITLE_OP 0x02
39 #define EFI_IFR_TEXT_OP 0x03
40 #define EFI_IFR_GRAPHIC_OP 0x04
41 #define EFI_IFR_ONE_OF_OP 0x05
42 #define EFI_IFR_CHECKBOX_OP 0x06
43 #define EFI_IFR_NUMERIC_OP 0x07
44 #define EFI_IFR_PASSWORD_OP 0x08
45 #define EFI_IFR_ONE_OF_OPTION_OP 0x09 // ONEOF OPTION field
46 #define EFI_IFR_SUPPRESS_IF_OP 0x0A
47 #define EFI_IFR_END_FORM_OP 0x0B
48 #define EFI_IFR_HIDDEN_OP 0x0C
49 #define EFI_IFR_END_FORM_SET_OP 0x0D
50 #define EFI_IFR_FORM_SET_OP 0x0E
51 #define EFI_IFR_REF_OP 0x0F
52 #define EFI_IFR_END_ONE_OF_OP 0x10
53 #define EFI_IFR_END_OP EFI_IFR_END_ONE_OF_OP
54 #define EFI_IFR_INCONSISTENT_IF_OP 0x11
55 #define EFI_IFR_EQ_ID_VAL_OP 0x12
56 #define EFI_IFR_EQ_ID_ID_OP 0x13
57 #define EFI_IFR_EQ_ID_LIST_OP 0x14
58 #define EFI_IFR_AND_OP 0x15
59 #define EFI_IFR_OR_OP 0x16
60 #define EFI_IFR_NOT_OP 0x17
61 #define EFI_IFR_END_IF_OP 0x18 // for endif of inconsistentif, suppressif, grayoutif
62 #define EFI_IFR_GRAYOUT_IF_OP 0x19
63 #define EFI_IFR_DATE_OP 0x1A
64 #define EFI_IFR_TIME_OP 0x1B
65 #define EFI_IFR_STRING_OP 0x1C
66 #define EFI_IFR_LABEL_OP 0x1D
67 #define EFI_IFR_SAVE_DEFAULTS_OP 0x1E
68 #define EFI_IFR_RESTORE_DEFAULTS_OP 0x1F
69 #define EFI_IFR_BANNER_OP 0x20
70 #define EFI_IFR_INVENTORY_OP 0x21
71 #define EFI_IFR_EQ_VAR_VAL_OP 0x22
72 #define EFI_IFR_ORDERED_LIST_OP 0x23
73 #define EFI_IFR_VARSTORE_OP 0x24
74 #define EFI_IFR_VARSTORE_SELECT_OP 0x25
75 #define EFI_IFR_VARSTORE_SELECT_PAIR_OP 0x26
76 #define EFI_IFR_TRUE_OP 0x27
77 #define EFI_IFR_FALSE_OP 0x28
78 #define EFI_IFR_GT_OP 0x29
79 #define EFI_IFR_GE_OP 0x2A
80 #define EFI_IFR_OEM_DEFINED_OP 0x2B
81 #define EFI_IFR_LAST_OPCODE EFI_IFR_OEM_DEFINED_OP
82 #define EFI_IFR_OEM_OP 0xFE
83 #define EFI_IFR_NV_ACCESS_COMMAND 0xFF
86 // Define values for the flags fields in some VFR opcodes. These are
89 #define EFI_IFR_FLAG_DEFAULT 0x01
90 #define EFI_IFR_FLAG_MANUFACTURING 0x02
91 #define EFI_IFR_FLAG_INTERACTIVE 0x04
92 #define EFI_IFR_FLAG_NV_ACCESS 0x08
93 #define EFI_IFR_FLAG_RESET_REQUIRED 0x10
94 #define EFI_IFR_FLAG_LATE_CHECK 0x20
96 #define EFI_NON_DEVICE_CLASS 0x00 // Useful when you do not want something in the Device Manager
97 #define EFI_DISK_DEVICE_CLASS 0x01
98 #define EFI_VIDEO_DEVICE_CLASS 0x02
99 #define EFI_NETWORK_DEVICE_CLASS 0x04
100 #define EFI_INPUT_DEVICE_CLASS 0x08
101 #define EFI_ON_BOARD_DEVICE_CLASS 0x10
102 #define EFI_OTHER_DEVICE_CLASS 0x20
104 #define EFI_SETUP_APPLICATION_SUBCLASS 0x00
105 #define EFI_GENERAL_APPLICATION_SUBCLASS 0x01
106 #define EFI_FRONT_PAGE_SUBCLASS 0x02
107 #define EFI_SINGLE_USE_SUBCLASS 0x03 // Used to display a single entity and then exit
109 // Used to flag dynamically created op-codes. This is meaningful to the IFR Library set
110 // and the browser since we need to distinguish between compiled NV map data and created data.
111 // We do not allow new entries to be created in the NV map dynamically however we still need
112 // to display this information correctly. To dynamically create op-codes and assume that their
113 // data will be saved, ensure that the NV starting location they refer to is pre-defined in the
116 #define EFI_IFR_FLAG_CREATED 128
120 // IFR Structure definitions
128 EFI_IFR_OP_HEADER Header
;
130 STRING_REF FormSetTitle
;
132 EFI_PHYSICAL_ADDRESS CallbackHandle
;
135 UINT16 NvDataSize
; // set once, size of the NV data as defined in the script
139 EFI_IFR_OP_HEADER Header
;
141 STRING_REF FormTitle
;
145 EFI_IFR_OP_HEADER Header
;
150 EFI_IFR_OP_HEADER Header
;
155 EFI_IFR_OP_HEADER Header
;
159 UINT8 Flags
; // This is included solely for purposes of interactive/dynamic support.
160 UINT16 Key
; // Value to be passed to caller to identify this particular op-code
167 EFI_IFR_OP_HEADER Header
;
170 STRING_REF Help
; // The string Token for the context-help
171 UINT8 Flags
; // This is included solely for purposes of interactive/dynamic support.
172 UINT16 Key
; // Value to be passed to caller to identify this particular op-code
176 EFI_IFR_OP_HEADER Header
;
180 EFI_IFR_OP_HEADER Header
;
181 } EFI_IFR_END_FORM_SET
;
184 // Also notice that the IFR_ONE_OF and IFR_CHECK_BOX are identical in structure......code assumes this to be true, if this ever
185 // changes we need to revisit the InitializeTagStructures code
188 EFI_IFR_OP_HEADER Header
;
189 UINT16 QuestionId
; // The ID designating what the question is about...sucked in from a #define, likely in the form of a variable name
190 UINT8 Width
; // The Size of the Data being saved
191 STRING_REF Prompt
; // The String Token for the Prompt
192 STRING_REF Help
; // The string Token for the context-help
196 EFI_IFR_OP_HEADER Header
;
197 UINT16 QuestionId
; // The offset in NV for storage of the data
198 UINT8 MaxEntries
; // The maximum number of options in the ordered list (=size of NVStore)
199 STRING_REF Prompt
; // The string token for the prompt
200 STRING_REF Help
; // The string token for the context-help
201 } EFI_IFR_ORDERED_LIST
;
204 EFI_IFR_OP_HEADER Header
;
205 UINT16 QuestionId
; // The ID designating what the question is about...sucked in from a #define, likely in the form of a variable name
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
; // For now, if non-zero, means that it is the default option, - further definition likely
210 UINT16 Key
; // Value to be passed to caller to identify this particular op-code
214 EFI_IFR_OP_HEADER Header
;
215 STRING_REF Option
; // The string token describing the option
216 UINT16 Value
; // The value associated with this option that is stored in the NVRAM if chosen
217 UINT8 Flags
; // For now, if non-zero, means that it is the default option, - further definition likely above
218 UINT16 Key
; // Value to be passed to caller to identify this particular op-code
219 } EFI_IFR_ONE_OF_OPTION
;
222 EFI_IFR_OP_HEADER Header
;
223 UINT16 QuestionId
; // The ID designating what the question is about...sucked in from a #define, likely in the form of a variable name
224 UINT8 Width
; // The Size of the Data being saved
225 STRING_REF Prompt
; // The String Token for the Prompt
226 STRING_REF Help
; // The string Token for the context-help
227 UINT8 Flags
; // This is included solely for purposes of interactive/dynamic support.
228 UINT16 Key
; // Value to be passed to caller to identify this particular op-code
231 UINT16 Step
; // If step is 0, then manual input is specified, otherwise, left/right arrow selection is called for
236 // There is an interesting twist with regards to Time and Date. This is one of the few items which can accept input from
237 // a user, however may or may not need to use storage in the NVRAM space. The decided method for determining if NVRAM space
238 // will be used (only for a TimeOp or DateOp) is: If .QuestionId == 0 && .Width == 0 (normally an impossibility) then use system
239 // resources to store the data away and not NV resources. In other words, the setup engine will call gRT->SetTime, and gRT->SetDate
240 // for the saving of data, and the values displayed will be from the gRT->GetXXXX series of calls.
243 EFI_IFR_NUMERIC Hour
;
244 EFI_IFR_NUMERIC Minute
;
245 EFI_IFR_NUMERIC Second
;
249 EFI_IFR_NUMERIC Year
;
250 EFI_IFR_NUMERIC Month
;
255 EFI_IFR_OP_HEADER Header
;
256 UINT16 QuestionId
; // The ID designating what the question is about...sucked in from a #define, likely in the form of a variable name
257 UINT8 Width
; // The Size of the Data being saved -- BUGBUG -- remove someday
258 STRING_REF Prompt
; // The String Token for the Prompt
259 STRING_REF Help
; // The string Token for the context-help
260 UINT8 Flags
; // This is included solely for purposes of interactive/dynamic support.
261 UINT16 Key
; // Value to be passed to caller to identify this particular op-code
262 UINT8 MinSize
; // Minimum allowable sized password
263 UINT8 MaxSize
; // Maximum allowable sized password
268 EFI_IFR_OP_HEADER Header
;
269 UINT16 QuestionId
; // The ID designating what the question is about...sucked in from a #define, likely in the form of a variable name
270 UINT8 Width
; // The Size of the Data being saved -- BUGBUG -- remove someday
271 STRING_REF Prompt
; // The String Token for the Prompt
272 STRING_REF Help
; // The string Token for the context-help
273 UINT8 Flags
; // This is included solely for purposes of interactive/dynamic support.
274 UINT16 Key
; // Value to be passed to caller to identify this particular op-code
275 UINT8 MinSize
; // Minimum allowable sized password
276 UINT8 MaxSize
; // Maximum allowable sized password
280 EFI_IFR_OP_HEADER Header
;
281 } EFI_IFR_END_ONE_OF
;
284 EFI_IFR_OP_HEADER Header
;
290 EFI_IFR_OP_HEADER Header
;
295 EFI_IFR_OP_HEADER Header
;
300 EFI_IFR_OP_HEADER Header
;
303 } EFI_IFR_INCONSISTENT
;
306 EFI_IFR_OP_HEADER Header
;
307 UINT16 QuestionId
; // offset into variable storage
308 UINT8 Width
; // size of variable storage
309 UINT16 Value
; // value to compare against
313 EFI_IFR_OP_HEADER Header
;
314 UINT16 QuestionId
; // offset into variable storage
315 UINT8 Width
; // size of variable storage
318 } EFI_IFR_EQ_ID_LIST
;
321 EFI_IFR_OP_HEADER Header
;
322 UINT16 QuestionId1
; // offset into variable storage for first value to compare
323 UINT8 Width
; // size of variable storage (must be same for both)
324 UINT16 QuestionId2
; // offset into variable storage for second value to compare
328 EFI_IFR_OP_HEADER Header
;
329 UINT16 VariableId
; // offset into variable storage
330 UINT16 Value
; // value to compare against
331 } EFI_IFR_EQ_VAR_VAL
;
334 EFI_IFR_OP_HEADER Header
;
338 EFI_IFR_OP_HEADER Header
;
342 EFI_IFR_OP_HEADER Header
;
346 EFI_IFR_OP_HEADER Header
;
350 EFI_IFR_OP_HEADER Header
;
356 } EFI_IFR_SAVE_DEFAULTS
;
359 EFI_IFR_OP_HEADER Header
;
362 STRING_REF TextTwo
; // optional text
366 EFI_IFR_OP_HEADER Header
;
367 EFI_GUID Guid
; // GUID for the variable
368 UINT16 VarId
; // variable store ID, as referenced elsewhere in the form
369 UINT16 Size
; // size of the variable storage
373 EFI_IFR_OP_HEADER Header
;
374 UINT16 VarId
; // variable store ID, as referenced elsewhere in the form
375 } EFI_IFR_VARSTORE_SELECT
;
378 // Used for the ideqid VFR statement where two variable stores may be referenced in the
379 // same VFR statement.
380 // A browser should treat this as an EFI_IFR_VARSTORE_SELECT statement and assume that all following
381 // IFR opcodes use the VarId as defined here.
384 EFI_IFR_OP_HEADER Header
;
385 UINT16 VarId
; // variable store ID, as referenced elsewhere in the form
386 UINT16 SecondaryVarId
; // variable store ID, as referenced elsewhere in the form
387 } EFI_IFR_VARSTORE_SELECT_PAIR
;
390 EFI_IFR_OP_HEADER Header
;
394 EFI_IFR_OP_HEADER Header
;
398 EFI_IFR_OP_HEADER Header
;
402 EFI_IFR_OP_HEADER Header
;
406 // Save defaults and restore defaults have same structure
408 #define EFI_IFR_RESTORE_DEFAULTS EFI_IFR_SAVE_DEFAULTS
411 EFI_IFR_OP_HEADER Header
;
412 STRING_REF Title
; // The string token for the banner title
413 UINT16 LineNumber
; // 1-based line number
414 UINT8 Alignment
; // left, center, or right-aligned
418 EFI_IFR_OP_HEADER Header
;
419 UINT16 QuestionId
; // Offset into the map
420 UINT8 StorageWidth
; // Width of the value
421 CHAR8 Data
[1]; // The Data itself
424 #define EFI_IFR_BANNER_ALIGN_LEFT 0
425 #define EFI_IFR_BANNER_ALIGN_CENTER 1
426 #define EFI_IFR_BANNER_ALIGN_RIGHT 2
427 #define EFI_IFR_BANNER_TIMEOUT 0xFF