X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=MdePkg%2FInclude%2FUefi%2FUefiInternalFormRepresentation.h;h=1a77ea7c3e702f939bf0c3ac348ea239eb56c245;hb=a93786ae6c4f8a92e216899c05366ba7aacf72e7;hp=ba1d3b3dde4c8772cbf365ad3e16ae93019c18db;hpb=fb5148a0d8e660e79596d870964db27c3059eca1;p=mirror_edk2.git diff --git a/MdePkg/Include/Uefi/UefiInternalFormRepresentation.h b/MdePkg/Include/Uefi/UefiInternalFormRepresentation.h index ba1d3b3dde..1a77ea7c3e 100644 --- a/MdePkg/Include/Uefi/UefiInternalFormRepresentation.h +++ b/MdePkg/Include/Uefi/UefiInternalFormRepresentation.h @@ -3,28 +3,28 @@ IFR is primarily consumed by the EFI presentation engine, and produced by EFI internal application and drivers as well as all add-in card option-ROM drivers - Copyright (c) 2006 - 2008, Intel Corporation - All rights reserved. This program and the accompanying materials - are licensed and made available under the terms and conditions of the BSD License - which accompanies this distribution. The full text of the license may be found at - http://opensource.org/licenses/bsd-license.php - - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.
+This program and the accompanying materials are licensed and made available under +the terms and conditions of the BSD License that accompanies this distribution. +The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php. + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. @par Revision Reference: - These definitions are from UEFI2.1. + These definitions are from UEFI 2.1 and 2.2. **/ #ifndef __UEFI_INTERNAL_FORMREPRESENTATION_H__ #define __UEFI_INTERNAL_FORMREPRESENTATION_H__ +#include + /// /// The following types are currently defined: /// -typedef UINT32 RELOFST; - typedef VOID* EFI_HII_HANDLE; typedef CHAR16* EFI_STRING; typedef UINT16 EFI_IMAGE_ID; @@ -32,45 +32,32 @@ typedef UINT16 EFI_QUESTION_ID; typedef UINT16 EFI_STRING_ID; typedef UINT16 EFI_FORM_ID; typedef UINT16 EFI_VARSTORE_ID; +typedef UINT16 EFI_ANIMATION_ID; + typedef UINT16 EFI_DEFAULT_ID; + typedef UINT32 EFI_HII_FONT_STYLE; #pragma pack(1) +// +// Definitions for Package Lists and Package Headers +// Section 27.3.1 +// /// -/// HII package list +/// The header found at the start of each package list. /// typedef struct { EFI_GUID PackageListGuid; UINT32 PackageLength; } EFI_HII_PACKAGE_LIST_HEADER; -/** - - Each package starts with a header, as defined above, which - indicates the size and type of the package. When added to a - pointer pointing to the start of the header, Length points at - the next package. The package lists form a package list when - concatenated together and terminated with an - EFI_HII_PACKAGE_HEADER with a Type of EFI_HII_PACKAGE_END. The - type EFI_HII_PACKAGE_TYPE_GUID is used for vendor-defined HII - packages, whose contents are determined by the Guid. The range - of package types starting with EFI_HII_PACKAGE_TYPE_SYSTEM_BEGIN - through EFI_HII_PACKAGE_TYPE_SYSTEM_END are reserved for system - firmware implementers. - - @param Length The size of the package in bytes. - - @param Type The package type. See EFI_HII_PACKAGE_TYPE_x, - below. - - @param Data The package data, the format of which is - determined by Type. - -**/ +/// +/// The header found at the start of each package. +/// typedef struct { UINT32 Length:24; UINT32 Type:8; @@ -78,48 +65,94 @@ typedef struct { } EFI_HII_PACKAGE_HEADER; // -// EFI_HII_PACKAGE_TYPE_x. +// Value of HII package type // #define EFI_HII_PACKAGE_TYPE_ALL 0x00 #define EFI_HII_PACKAGE_TYPE_GUID 0x01 -#define EFI_HII_PACKAGE_FORM 0x02 -#define EFI_HII_PACKAGE_KEYBOARD_LAYOUT 0x03 +#define EFI_HII_PACKAGE_FORMS 0x02 #define EFI_HII_PACKAGE_STRINGS 0x04 #define EFI_HII_PACKAGE_FONTS 0x05 #define EFI_HII_PACKAGE_IMAGES 0x06 #define EFI_HII_PACKAGE_SIMPLE_FONTS 0x07 #define EFI_HII_PACKAGE_DEVICE_PATH 0x08 +#define EFI_HII_PACKAGE_KEYBOARD_LAYOUT 0x09 +#define EFI_HII_PACKAGE_ANIMATIONS 0x0A #define EFI_HII_PACKAGE_END 0xDF #define EFI_HII_PACKAGE_TYPE_SYSTEM_BEGIN 0xE0 #define EFI_HII_PACKAGE_TYPE_SYSTEM_END 0xFF // -// Simplified Font Package +// Definitions for Simplified Font Package // -#define EFI_GLYPH_HEIGHT 19 -#define EFI_GLYPH_WIDTH 8 -// -// Contents of EFI_NARROW_GLYPH.Attributes -// +/// +/// Contents of EFI_NARROW_GLYPH.Attributes. +///@{ #define EFI_GLYPH_NON_SPACING 0x01 #define EFI_GLYPH_WIDE 0x02 +#define EFI_GLYPH_HEIGHT 19 +#define EFI_GLYPH_WIDTH 8 +///@} +/// +/// The EFI_NARROW_GLYPH has a preferred dimension (w x h) of 8 x 19 pixels. +/// typedef struct { + /// + /// The Unicode representation of the glyph. The term weight is the + /// technical term for a character code. + /// CHAR16 UnicodeWeight; + /// + /// The data element containing the glyph definitions. + /// UINT8 Attributes; + /// + /// The column major glyph representation of the character. Bits + /// with values of one indicate that the corresponding pixel is to be + /// on when normally displayed; those with zero are off. + /// UINT8 GlyphCol1[EFI_GLYPH_HEIGHT]; } EFI_NARROW_GLYPH; +/// +/// The EFI_WIDE_GLYPH has a preferred dimension (w x h) of 16 x 19 pixels, which is large enough +/// to accommodate logographic characters. +/// typedef struct { + /// + /// The Unicode representation of the glyph. The term weight is the + /// technical term for a character code. + /// CHAR16 UnicodeWeight; + /// + /// The data element containing the glyph definitions. + /// UINT8 Attributes; + /// + /// The column major glyph representation of the character. Bits + /// with values of one indicate that the corresponding pixel is to be + /// on when normally displayed; those with zero are off. + /// UINT8 GlyphCol1[EFI_GLYPH_HEIGHT]; + /// + /// The column major glyph representation of the character. Bits + /// with values of one indicate that the corresponding pixel is to be + /// on when normally displayed; those with zero are off. + /// UINT8 GlyphCol2[EFI_GLYPH_HEIGHT]; + /// + /// Ensures that sizeof (EFI_WIDE_GLYPH) is twice the + /// sizeof (EFI_NARROW_GLYPH). The contents of Pad must + /// be zero. + /// UINT8 Pad[3]; } EFI_WIDE_GLYPH; - +/// +/// A simplified font package consists of a font header +/// followed by a series of glyph structures. +/// typedef struct _EFI_HII_SIMPLE_FONT_PACKAGE_HDR { EFI_HII_PACKAGE_HEADER Header; UINT16 NumberOfNarrowGlyphs; @@ -129,9 +162,13 @@ typedef struct _EFI_HII_SIMPLE_FONT_PACKAGE_HDR { } EFI_HII_SIMPLE_FONT_PACKAGE_HDR; // -// Font Package +// Definitions for Font Package +// Section 27.3.3 // +// +// Value for font style +// #define EFI_HII_FONT_STYLE_NORMAL 0x00000000 #define EFI_HII_FONT_STYLE_BOLD 0x00000001 #define EFI_HII_FONT_STYLE_ITALIC 0x00000002 @@ -149,6 +186,12 @@ typedef struct _EFI_HII_GLYPH_INFO { INT16 AdvanceX; } EFI_HII_GLYPH_INFO; +/// +/// The fixed header consists of a standard record header, +/// then the character values in this section, the flags +/// (including the encoding method) and the offsets of the glyph +/// information, the glyph bitmaps and the character map. +/// typedef struct _EFI_HII_FONT_PACKAGE_HDR { EFI_HII_PACKAGE_HEADER Header; UINT32 HdrSize; @@ -158,6 +201,9 @@ typedef struct _EFI_HII_FONT_PACKAGE_HDR { CHAR16 FontFamily[1]; } EFI_HII_FONT_PACKAGE_HDR; +// +// Value of different glyph info block types +// #define EFI_HII_GIBT_END 0x00 #define EFI_HII_GIBT_GLYPH 0x10 #define EFI_HII_GIBT_GLYPHS 0x11 @@ -175,6 +221,10 @@ typedef struct _EFI_HII_GLYPH_BLOCK { UINT8 BlockType; } EFI_HII_GLYPH_BLOCK; +// +// Definition of different glyph info block types +// + typedef struct _EFI_HII_GIBT_DEFAULTS_BLOCK { EFI_HII_GLYPH_BLOCK Header; EFI_HII_GLYPH_INFO Cell; @@ -210,25 +260,25 @@ typedef struct _EFI_HII_GIBT_EXT4_BLOCK { typedef struct _EFI_HII_GIBT_GLYPH_BLOCK { EFI_HII_GLYPH_BLOCK Header; EFI_HII_GLYPH_INFO Cell; - UINT8 BitmapData[1]; // the number of bytes per bitmap can be calculated by ((Cell.Width+7)/8)*Cell.Height + UINT8 BitmapData[1]; } EFI_HII_GIBT_GLYPH_BLOCK; typedef struct _EFI_HII_GIBT_GLYPHS_BLOCK { EFI_HII_GLYPH_BLOCK Header; EFI_HII_GLYPH_INFO Cell; UINT16 Count; - UINT8 BitmapData[1]; // the number of bytes per bitmap can be calculated by ((Cell.Width+7)/8)*Cell.Height + UINT8 BitmapData[1]; } EFI_HII_GIBT_GLYPHS_BLOCK; typedef struct _EFI_HII_GIBT_GLYPH_DEFAULT_BLOCK { EFI_HII_GLYPH_BLOCK Header; - UINT8 BitmapData[1]; // the number of bytes per bitmap can be calculated by ((Global.Cell.Width+7)/8)*Global.Cell.Height + UINT8 BitmapData[1]; } EFI_HII_GIBT_GLYPH_DEFAULT_BLOCK; typedef struct _EFI_HII_GIBT_GLYPHS_DEFAULT_BLOCK { EFI_HII_GLYPH_BLOCK Header; UINT16 Count; - UINT8 BitmapData[1]; // the number of bytes per bitmap can be calculated by ((Global.Cell.Width+7)/8)*Global.Cell.Height + UINT8 BitmapData[1]; } EFI_HII_GIBT_GLYPHS_DEFAULT_BLOCK; typedef struct _EFI_HII_GIBT_SKIP1_BLOCK { @@ -242,16 +292,27 @@ typedef struct _EFI_HII_GIBT_SKIP2_BLOCK { } EFI_HII_GIBT_SKIP2_BLOCK; // -// Device Path Package +// Definitions for Device Path Package +// Section 27.3.4 // -typedef struct _EFI_HII_DEVICE_PATH_PACKAGE { + +/// +/// The device path package is used to carry a device path +/// associated with the package list. +/// +typedef struct _EFI_HII_DEVICE_PATH_PACKAGE_HDR { EFI_HII_PACKAGE_HEADER Header; // EFI_DEVICE_PATH_PROTOCOL DevicePath[]; -} EFI_HII_DEVICE_PATH_PACKAGE; +} EFI_HII_DEVICE_PATH_PACKAGE_HDR; // -// GUID Package +// Definitions for GUID Package +// Section 27.3.5 // + +/// +/// The GUID package is used to carry data where the format is defined by a GUID. +/// typedef struct _EFI_HII_GUID_PACKAGE_HDR { EFI_HII_PACKAGE_HEADER Header; EFI_GUID Guid; @@ -259,12 +320,17 @@ typedef struct _EFI_HII_GUID_PACKAGE_HDR { } EFI_HII_GUID_PACKAGE_HDR; // -// String Package +// Definitions for String Package +// Section 27.3.6 // -#define UEFI_CONFIG_LANG L"x-UEFI" -#define UEFI_CONFIG_LANG2 L"x-i-UEFI" // BUGBUG, spec need to be updated. +#define UEFI_CONFIG_LANG "x-UEFI" +#define UEFI_CONFIG_LANG_2 "x-i-UEFI" +/// +/// The fixed header consists of a standard record header and then the string identifiers +/// contained in this section and the offsets of the string and language information. +/// typedef struct _EFI_HII_STRING_PACKAGE_HDR { EFI_HII_PACKAGE_HEADER Header; UINT32 HdrSize; @@ -278,6 +344,9 @@ typedef struct { UINT8 BlockType; } EFI_HII_STRING_BLOCK; +// +// Value of different string information block types +// #define EFI_HII_SIBT_END 0x00 #define EFI_HII_SIBT_STRING_SCSU 0x10 #define EFI_HII_SIBT_STRING_SCSU_FONT 0x11 @@ -295,6 +364,10 @@ typedef struct { #define EFI_HII_SIBT_EXT4 0x32 #define EFI_HII_SIBT_FONT 0x40 +// +// Definition of different string information block types +// + typedef struct _EFI_HII_SIBT_DUPLICATE_BLOCK { EFI_HII_STRING_BLOCK Header; EFI_STRING_ID StringId; @@ -389,7 +462,8 @@ typedef struct _EFI_HII_SIBT_STRINGS_UCS2_FONT_BLOCK { } EFI_HII_SIBT_STRINGS_UCS2_FONT_BLOCK; // -// Image Packages +// Definitions for Image Package +// Section 27.3.7 // typedef struct _EFI_HII_IMAGE_PACKAGE_HDR { @@ -402,6 +476,9 @@ typedef struct _EFI_HII_IMAGE_BLOCK { UINT8 BlockType; } EFI_HII_IMAGE_BLOCK; +// +// Value of different image information block types +// #define EFI_HII_IIBT_END 0x00 #define EFI_HII_IIBT_IMAGE_1BIT 0x10 #define EFI_HII_IIBT_IMAGE_1BIT_TRANS 0x11 @@ -419,6 +496,10 @@ typedef struct _EFI_HII_IMAGE_BLOCK { #define EFI_HII_IIBT_EXT2 0x31 #define EFI_HII_IIBT_EXT4 0x32 +// +// Definition of different image information block types +// + typedef struct _EFI_HII_IIBT_END_BLOCK { EFI_HII_IMAGE_BLOCK Header; } EFI_HII_IIBT_END_BLOCK; @@ -538,6 +619,10 @@ typedef struct _EFI_HII_IIBT_SKIP2_BLOCK { UINT16 SkipCount; } EFI_HII_IIBT_SKIP2_BLOCK; +// +// Definitions for Palette Information +// + typedef struct _EFI_HII_IMAGE_PALETTE_INFO_HEADER { UINT16 PaletteCount; } EFI_HII_IMAGE_PALETTE_INFO_HEADER; @@ -548,14 +633,18 @@ typedef struct _EFI_HII_IMAGE_PALETTE_INFO { } EFI_HII_IMAGE_PALETTE_INFO; // -// Forms Package +// Definitions for Forms Package +// Section 27.3.8 // -typedef struct _EFI_HII_FORM_PACKAGE { +/// +/// The Form package is used to carry form-based encoding data. +/// +typedef struct _EFI_HII_FORM_PACKAGE_HDR { EFI_HII_PACKAGE_HEADER Header; // EFI_IFR_OP_HEADER OpCodeHeader; // More op-codes follow -} EFI_HII_FORM_PACKAGE; +} EFI_HII_FORM_PACKAGE_HDR; typedef struct { UINT8 Hour; @@ -569,6 +658,13 @@ typedef struct { UINT8 Day; } EFI_HII_DATE; +typedef struct { + EFI_QUESTION_ID QuestionId; + EFI_FORM_ID FormId; + EFI_GUID FormSetGuid; + EFI_STRING_ID DevicePath; +} EFI_HII_REF; + typedef union { UINT8 u8; UINT16 u16; @@ -577,7 +673,9 @@ typedef union { BOOLEAN b; EFI_HII_TIME time; EFI_HII_DATE date; - EFI_STRING_ID string; + EFI_STRING_ID string; ///< EFI_IFR_TYPE_STRING, EFI_IFR_TYPE_ACTION + EFI_HII_REF ref; ///< EFI_IFR_TYPE_REF + // UINT8 buffer[]; ///< EFI_IFR_TYPE_BUFFER } EFI_IFR_TYPE_VALUE; // @@ -602,7 +700,7 @@ typedef union { #define EFI_IFR_INCONSISTENT_IF_OP 0x11 #define EFI_IFR_EQ_ID_VAL_OP 0x12 #define EFI_IFR_EQ_ID_ID_OP 0x13 -#define EFI_IFR_EQ_ID_LIST_OP 0x14 +#define EFI_IFR_EQ_ID_VAL_LIST_OP 0x14 #define EFI_IFR_AND_OP 0x15 #define EFI_IFR_OR_OP 0x16 #define EFI_IFR_NOT_OP 0x17 @@ -613,8 +711,10 @@ typedef union { #define EFI_IFR_STRING_OP 0x1C #define EFI_IFR_REFRESH_OP 0x1D #define EFI_IFR_DISABLE_IF_OP 0x1E +#define EFI_IFR_ANIMATION_OP 0x1F #define EFI_IFR_TO_LOWER_OP 0x20 #define EFI_IFR_TO_UPPER_OP 0x21 +#define EFI_IFR_MAP_OP 0x22 #define EFI_IFR_ORDERED_LIST_OP 0x23 #define EFI_IFR_VARSTORE_OP 0x24 #define EFI_IFR_VARSTORE_NAME_VALUE_OP 0x25 @@ -623,6 +723,10 @@ typedef union { #define EFI_IFR_VERSION_OP 0x28 #define EFI_IFR_END_OP 0x29 #define EFI_IFR_MATCH_OP 0x2A +#define EFI_IFR_GET_OP 0x2B +#define EFI_IFR_SET_OP 0x2C +#define EFI_IFR_READ_OP 0x2D +#define EFI_IFR_WRITE_OP 0x2E #define EFI_IFR_EQUAL_OP 0x2F #define EFI_IFR_NOT_EQUAL_OP 0x30 #define EFI_IFR_GREATER_THAN_OP 0x31 @@ -669,9 +773,19 @@ typedef union { #define EFI_IFR_VALUE_OP 0x5A #define EFI_IFR_DEFAULT_OP 0x5B #define EFI_IFR_DEFAULTSTORE_OP 0x5C +#define EFI_IFR_FORM_MAP_OP 0x5D #define EFI_IFR_CATENATE_OP 0x5E #define EFI_IFR_GUID_OP 0x5F +#define EFI_IFR_SECURITY_OP 0x60 +#define EFI_IFR_MODAL_TAG_OP 0x61 +#define EFI_IFR_REFRESH_ID_OP 0x62 +#define EFI_IFR_WARNING_IF_OP 0x63 +#define EFI_IFR_MATCH2_OP 0x64 +// +// Definitions of IFR Standard Headers +// Section 27.3.8.2 +// typedef struct _EFI_IFR_OP_HEADER { UINT8 OpCode; @@ -695,17 +809,28 @@ typedef struct _EFI_IFR_QUESTION_HEADER { UINT8 Flags; } EFI_IFR_QUESTION_HEADER; -#define EFI_IFR_FLAG_READ_ONLY 0x01 -#define EFI_IFR_FLAG_CALLBACK 0x04 -#define EFI_IFR_FLAG_RESET_REQUIRED 0x10 -#define EFI_IFR_FLAG_OPTIONS_ONLY 0x80 +// +// Flag values of EFI_IFR_QUESTION_HEADER +// +#define EFI_IFR_FLAG_READ_ONLY 0x01 +#define EFI_IFR_FLAG_CALLBACK 0x04 +#define EFI_IFR_FLAG_RESET_REQUIRED 0x10 +#define EFI_IFR_FLAG_RECONNECT_REQUIRED 0x40 +#define EFI_IFR_FLAG_OPTIONS_ONLY 0x80 +// +// Definition for Opcode Reference +// Section 27.3.8.3 +// typedef struct _EFI_IFR_DEFAULTSTORE { EFI_IFR_OP_HEADER Header; EFI_STRING_ID DefaultName; UINT16 DefaultId; } EFI_IFR_DEFAULTSTORE; +// +// Default Identifier of default store +// #define EFI_HII_DEFAULT_CLASS_STANDARD 0x0000 #define EFI_HII_DEFAULT_CLASS_MANUFACTURING 0x0001 #define EFI_HII_DEFAULT_CLASS_SAFE 0x0002 @@ -729,6 +854,8 @@ typedef struct _EFI_IFR_VARSTORE_EFI { EFI_VARSTORE_ID VarStoreId; EFI_GUID Guid; UINT32 Attributes; + UINT16 Size; + UINT8 Name[1]; } EFI_IFR_VARSTORE_EFI; typedef struct _EFI_IFR_VARSTORE_NAME_VALUE { @@ -742,6 +869,8 @@ typedef struct _EFI_IFR_FORM_SET { EFI_GUID Guid; EFI_STRING_ID FormSetTitle; EFI_STRING_ID Help; + UINT8 Flags; + // EFI_GUID ClassGuid[]; } EFI_IFR_FORM_SET; typedef struct _EFI_IFR_END { @@ -759,6 +888,10 @@ typedef struct _EFI_IFR_IMAGE { EFI_IMAGE_ID Id; } EFI_IFR_IMAGE; +typedef struct _EFI_IFR_MODAL_TAG { + EFI_IFR_OP_HEADER Header; +} EFI_IFR_MODAL_TAG; + typedef struct _EFI_IFR_LOCKED { EFI_IFR_OP_HEADER Header; } EFI_IFR_LOCKED; @@ -775,6 +908,12 @@ typedef struct _EFI_IFR_DEFAULT { EFI_IFR_TYPE_VALUE Value; } EFI_IFR_DEFAULT; +typedef struct _EFI_IFR_DEFAULT_2 { + EFI_IFR_OP_HEADER Header; + UINT16 DefaultId; + UINT8 Type; +} EFI_IFR_DEFAULT_2; + typedef struct _EFI_IFR_VALUE { EFI_IFR_OP_HEADER Header; } EFI_IFR_VALUE; @@ -832,9 +971,14 @@ typedef struct _EFI_IFR_REF4 { EFI_STRING_ID DevicePath; } EFI_IFR_REF4; +typedef struct _EFI_IFR_REF5 { + EFI_IFR_OP_HEADER Header; + EFI_IFR_QUESTION_HEADER Question; +} EFI_IFR_REF5; + typedef struct _EFI_IFR_RESET_BUTTON { EFI_IFR_OP_HEADER Header; - EFI_IFR_QUESTION_HEADER Question; + EFI_IFR_STATEMENT_HEADER Statement; EFI_DEFAULT_ID DefaultId; } EFI_IFR_RESET_BUTTON; @@ -855,6 +999,9 @@ typedef struct _EFI_IFR_DATE { UINT8 Flags; } EFI_IFR_DATE; +// +// Flags that describe the behavior of the question. +// #define EFI_QF_DATE_YEAR_SUPPRESS 0x01 #define EFI_QF_DATE_MONTH_SUPPRESS 0x02 #define EFI_QF_DATE_DAY_SUPPRESS 0x04 @@ -894,16 +1041,19 @@ typedef struct _EFI_IFR_NUMERIC { MINMAXSTEP_DATA data; } EFI_IFR_NUMERIC; +// +// Flags related to the numeric question +// #define EFI_IFR_NUMERIC_SIZE 0x03 -#define EFI_IFR_NUMERIC_SIZE_1 0x00 -#define EFI_IFR_NUMERIC_SIZE_2 0x01 -#define EFI_IFR_NUMERIC_SIZE_4 0x02 -#define EFI_IFR_NUMERIC_SIZE_8 0x03 +#define EFI_IFR_NUMERIC_SIZE_1 0x00 +#define EFI_IFR_NUMERIC_SIZE_2 0x01 +#define EFI_IFR_NUMERIC_SIZE_4 0x02 +#define EFI_IFR_NUMERIC_SIZE_8 0x03 #define EFI_IFR_DISPLAY 0x30 -#define EFI_IFR_DISPLAY_INT_DEC 0x00 -#define EFI_IFR_DISPLAY_UINT_DEC 0x10 -#define EFI_IFR_DISPLAY_UINT_HEX 0x20 +#define EFI_IFR_DISPLAY_INT_DEC 0x00 +#define EFI_IFR_DISPLAY_UINT_DEC 0x10 +#define EFI_IFR_DISPLAY_UINT_HEX 0x20 typedef struct _EFI_IFR_ONE_OF { EFI_IFR_OP_HEADER Header; @@ -945,14 +1095,17 @@ typedef struct _EFI_IFR_TIME { UINT8 Flags; } EFI_IFR_TIME; +// +// A bit-mask that determines which unique settings are active for this opcode. +// #define QF_TIME_HOUR_SUPPRESS 0x01 #define QF_TIME_MINUTE_SUPPRESS 0x02 #define QF_TIME_SECOND_SUPPRESS 0x04 #define QF_TIME_STORAGE 0x30 -#define QF_TIME_STORAGE_NORMAL 0x00 -#define QF_TIME_STORAGE_TIME 0x10 -#define QF_TIME_STORAGE_WAKEUP 0x20 +#define QF_TIME_STORAGE_NORMAL 0x00 +#define QF_TIME_STORAGE_TIME 0x10 +#define QF_TIME_STORAGE_WAKEUP 0x20 typedef struct _EFI_IFR_DISABLE_IF { EFI_IFR_OP_HEADER Header; @@ -976,6 +1129,12 @@ typedef struct _EFI_IFR_NO_SUBMIT_IF { EFI_STRING_ID Error; } EFI_IFR_NO_SUBMIT_IF; +typedef struct _EFI_IFR_WARNING_IF { + EFI_IFR_OP_HEADER Header; + EFI_STRING_ID Warning; + UINT8 TimeOut; +} EFI_IFR_WARNING_IF; + typedef struct _EFI_IFR_REFRESH { EFI_IFR_OP_HEADER Header; UINT8 RefreshInterval; @@ -994,6 +1153,9 @@ typedef struct _EFI_IFR_ONE_OF_OPTION { EFI_IFR_TYPE_VALUE Value; } EFI_IFR_ONE_OF_OPTION; +// +// Types of the option's value. +// #define EFI_IFR_TYPE_NUM_SIZE_8 0x00 #define EFI_IFR_TYPE_NUM_SIZE_16 0x01 #define EFI_IFR_TYPE_NUM_SIZE_32 0x02 @@ -1003,6 +1165,10 @@ typedef struct _EFI_IFR_ONE_OF_OPTION { #define EFI_IFR_TYPE_DATE 0x06 #define EFI_IFR_TYPE_STRING 0x07 #define EFI_IFR_TYPE_OTHER 0x08 +#define EFI_IFR_TYPE_UNDEFINED 0x09 +#define EFI_IFR_TYPE_ACTION 0x0A +#define EFI_IFR_TYPE_BUFFER 0x0B +#define EFI_IFR_TYPE_REF 0x0C #define EFI_IFR_OPTION_DEFAULT 0x10 #define EFI_IFR_OPTION_DEFAULT_MFG 0x20 @@ -1013,6 +1179,11 @@ typedef struct _EFI_IFR_GUID { //Optional Data Follows } EFI_IFR_GUID; +typedef struct _EFI_IFR_REFRESH_ID { + EFI_IFR_OP_HEADER Header; + EFI_GUID RefreshEventGroupId; +} EFI_IFR_REFRESH_ID; + typedef struct _EFI_IFR_DUP { EFI_IFR_OP_HEADER Header; } EFI_IFR_DUP; @@ -1029,17 +1200,12 @@ typedef struct _EFI_IFR_EQ_ID_VAL { UINT16 Value; } EFI_IFR_EQ_ID_VAL; -typedef struct _EFI_IFR_EQ_ID_LIST { +typedef struct _EFI_IFR_EQ_ID_VAL_LIST { EFI_IFR_OP_HEADER Header; EFI_QUESTION_ID QuestionId; UINT16 ListLength; UINT16 ValueList[1]; -} EFI_IFR_EQ_ID_LIST; - -typedef struct _EFI_IFR_QUESTION_REF1 { - EFI_IFR_OP_HEADER Header; - EFI_QUESTION_ID QuestionId; -} EFI_IFR_QUESTION_REF1; +} EFI_IFR_EQ_ID_VAL_LIST; typedef struct _EFI_IFR_UINT8 { EFI_IFR_OP_HEADER Header; @@ -1051,10 +1217,6 @@ typedef struct _EFI_IFR_UINT16 { UINT16 Value; } EFI_IFR_UINT16; -typedef struct _EFI_IFR_QUESTION_REF2 { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_QUESTION_REF2; - typedef struct _EFI_IFR_UINT32 { EFI_IFR_OP_HEADER Header; UINT32 Value; @@ -1065,6 +1227,15 @@ typedef struct _EFI_IFR_UINT64 { UINT64 Value; } EFI_IFR_UINT64; +typedef struct _EFI_IFR_QUESTION_REF1 { + EFI_IFR_OP_HEADER Header; + EFI_QUESTION_ID QuestionId; +} EFI_IFR_QUESTION_REF1; + +typedef struct _EFI_IFR_QUESTION_REF2 { + EFI_IFR_OP_HEADER Header; +} EFI_IFR_QUESTION_REF2; + typedef struct _EFI_IFR_QUESTION_REF3 { EFI_IFR_OP_HEADER Header; } EFI_IFR_QUESTION_REF3; @@ -1142,13 +1313,28 @@ typedef struct _EFI_IFR_TO_BOOLEAN { EFI_IFR_OP_HEADER Header; } EFI_IFR_TO_BOOLEAN; +/// +/// For EFI_IFR_TO_STRING, when converting from +/// unsigned integers, these flags control the format: +/// 0 = unsigned decimal. +/// 1 = signed decimal. +/// 2 = hexadecimal (lower-case alpha). +/// 3 = hexadecimal (upper-case alpha). +///@{ #define EFI_IFR_STRING_UNSIGNED_DEC 0 #define EFI_IFR_STRING_SIGNED_DEC 1 #define EFI_IFR_STRING_LOWERCASE_HEX 2 #define EFI_IFR_STRING_UPPERCASE_HEX 3 +///@} +/// +/// When converting from a buffer, these flags control the format: +/// 0 = ASCII. +/// 8 = Unicode. +///@{ #define EFI_IFR_STRING_ASCII 0 #define EFI_IFR_STRING_UNICODE 8 +///@} typedef struct _EFI_IFR_TO_STRING { EFI_IFR_OP_HEADER Header; @@ -1215,6 +1401,11 @@ typedef struct _EFI_IFR_MATCH { EFI_IFR_OP_HEADER Header; } EFI_IFR_MATCH; +typedef struct _EFI_IFR_MATCH2 { + EFI_IFR_OP_HEADER Header; + EFI_GUID SyntaxType; +} EFI_IFR_MATCH2; + typedef struct _EFI_IFR_MULTIPLY { EFI_IFR_OP_HEADER Header; } EFI_IFR_MULTIPLY; @@ -1247,6 +1438,9 @@ typedef struct _EFI_IFR_CONDITIONAL { EFI_IFR_OP_HEADER Header; } EFI_IFR_CONDITIONAL; +// +// Flags governing the matching criteria of EFI_IFR_FIND +// #define EFI_IFR_FF_CASE_SENSITIVE 0x00 #define EFI_IFR_FF_CASE_INSENSITIVE 0x01 @@ -1263,6 +1457,10 @@ typedef struct _EFI_IFR_TOKEN { EFI_IFR_OP_HEADER Header; } EFI_IFR_TOKEN; +// +// Flags specifying whether to find the first matching string +// or the first non-matching string. +// #define EFI_IFR_FLAGS_FIRST_MATCHING 0x00 #define EFI_IFR_FLAGS_FIRST_NON_MATCHING 0x01 @@ -1271,10 +1469,119 @@ typedef struct _EFI_IFR_SPAN { UINT8 Flags; } EFI_IFR_SPAN; +typedef struct _EFI_IFR_SECURITY { + /// + /// Standard opcode header, where Header.Op = EFI_IFR_SECURITY_OP. + /// + EFI_IFR_OP_HEADER Header; + /// + /// Security permission level. + /// + EFI_GUID Permissions; +} EFI_IFR_SECURITY; + +typedef struct _EFI_IFR_FORM_MAP_METHOD { + /// + /// The string identifier which provides the human-readable name of + /// the configuration method for this standards map form. + /// + EFI_STRING_ID MethodTitle; + /// + /// Identifier which uniquely specifies the configuration methods + /// associated with this standards map form. + /// + EFI_GUID MethodIdentifier; +} EFI_IFR_FORM_MAP_METHOD; + +typedef struct _EFI_IFR_FORM_MAP { + /// + /// The sequence that defines the type of opcode as well as the length + /// of the opcode being defined. Header.OpCode = EFI_IFR_FORM_MAP_OP. + /// + EFI_IFR_OP_HEADER Header; + /// + /// The unique identifier for this particular form. + /// + EFI_FORM_ID FormId; + /// + /// One or more configuration method's name and unique identifier. + /// + // EFI_IFR_FORM_MAP_METHOD Methods[]; +} EFI_IFR_FORM_MAP; + +typedef struct _EFI_IFR_SET { + /// + /// The sequence that defines the type of opcode as well as the length + /// of the opcode being defined. Header.OpCode = EFI_IFR_SET_OP. + /// + EFI_IFR_OP_HEADER Header; + /// + /// Specifies the identifier of a previously declared variable store to + /// use when storing the question's value. + /// + EFI_VARSTORE_ID VarStoreId; + union { + /// + /// A 16-bit Buffer Storage offset. + /// + EFI_STRING_ID VarName; + /// + /// A Name Value or EFI Variable name (VarName). + /// + UINT16 VarOffset; + } VarStoreInfo; + /// + /// Specifies the type used for storage. + /// + UINT8 VarStoreType; +} EFI_IFR_SET; + +typedef struct _EFI_IFR_GET { + /// + /// The sequence that defines the type of opcode as well as the length + /// of the opcode being defined. Header.OpCode = EFI_IFR_GET_OP. + /// + EFI_IFR_OP_HEADER Header; + /// + /// Specifies the identifier of a previously declared variable store to + /// use when retrieving the value. + /// + EFI_VARSTORE_ID VarStoreId; + union { + /// + /// A 16-bit Buffer Storage offset. + /// + EFI_STRING_ID VarName; + /// + /// A Name Value or EFI Variable name (VarName). + /// + UINT16 VarOffset; + } VarStoreInfo; + /// + /// Specifies the type used for storage. + /// + UINT8 VarStoreType; +} EFI_IFR_GET; + +typedef struct _EFI_IFR_READ { + EFI_IFR_OP_HEADER Header; +} EFI_IFR_READ; + +typedef struct _EFI_IFR_WRITE { + EFI_IFR_OP_HEADER Header; +} EFI_IFR_WRITE; + +typedef struct _EFI_IFR_MAP { + EFI_IFR_OP_HEADER Header; +} EFI_IFR_MAP; // -// Keyboard Package +// Definitions for Keyboard Package +// Releated definitions are in Section of EFI_HII_DATABASE_PROTOCOL // +/// +/// Each enumeration values maps a physical key on a keyboard. +/// typedef enum { EfiKeyLCtrl, EfiKeyA0, @@ -1384,11 +1691,31 @@ typedef enum { } EFI_KEY; typedef struct { + /// + /// Used to describe a physical key on a keyboard. + /// EFI_KEY Key; + /// + /// Unicode character code for the Key. + /// CHAR16 Unicode; + /// + /// Unicode character code for the key with the shift key being held down. + /// CHAR16 ShiftedUnicode; + /// + /// Unicode character code for the key with the Alt-GR being held down. + /// CHAR16 AltGrUnicode; + /// + /// Unicode character code for the key with the Alt-GR and shift keys being held down. + /// CHAR16 ShiftedAltGrUnicode; + /// + /// Modifier keys are defined to allow for special functionality that is not necessarily + /// accomplished by a printable character. Many of these modifier keys are flags to toggle + /// certain state bits on and off inside of a keyboard driver. + /// UINT16 Modifier; UINT16 AffectedAttribute; } EFI_KEY_DESCRIPTOR; @@ -1402,7 +1729,7 @@ typedef struct { /// /// This key is affected by the caps lock so that if a keyboard driver /// would need to disambiguate between a key which had a "1" defined -/// versus a "a" character. Having this bit turned on would tell +/// versus an "a" character. Having this bit turned on would tell /// the keyboard driver to use the appropriate shifted state or not. /// #define EFI_AFFECTED_BY_CAPS_LOCK 0x0002 @@ -1427,17 +1754,6 @@ typedef struct { // EFI_HII_KEYBOARD_LAYOUT Layout[]; } EFI_HII_KEYBOARD_PACKAGE_HDR; -//typedef struct { -// CHAR16 Language[]; // RFC4646 Language Code -// CHAR16 Space; -// CHAR16 DescriptionString[]; -//} EFI_DESCRIPTION_STRING; - -//typedef struct { -// UINT16 DescriptionCount; -// EFI_DESCRIPTION_STRING DescriptionString[]; -//} EFI_DESCRIPTION_STRING_BUNDLE; - // // Modifier values // @@ -1479,7 +1795,7 @@ typedef struct { // // Keys that have multiple control functions based on modifier // settings are handled in the keyboard driver implementation. -// For instance PRINT_KEY might have a modifier held down and +// For instance, PRINT_KEY might have a modifier held down and // is still a nonprinting character, but might have an alternate // control function like SYSREQUEST // @@ -1493,6 +1809,293 @@ typedef struct { #define EFI_RIGHT_LOGO_MODIFIER 0x0028 #define EFI_MENU_MODIFIER 0x0029 +/// +/// Animation IFR opcode +/// +typedef struct _EFI_IFR_ANIMATION { + /// + /// Standard opcode header, where Header.OpCode is + /// EFI_IFR_ANIMATION_OP. + /// + EFI_IFR_OP_HEADER Header; + /// + /// Animation identifier in the HII database. + /// + EFI_ANIMATION_ID Id; +} EFI_IFR_ANIMATION; + +/// +/// HII animation package header. +/// +typedef struct _EFI_HII_ANIMATION_PACKAGE_HDR { + /// + /// Standard package header, where Header.Type = EFI_HII_PACKAGE_ANIMATIONS. + /// + EFI_HII_PACKAGE_HEADER Header; + /// + /// Offset, relative to this header, of the animation information. If + /// this is zero, then there are no animation sequences in the package. + /// + UINT32 AnimationInfoOffset; +} EFI_HII_ANIMATION_PACKAGE_HDR; + +/// +/// Animation information is encoded as a series of blocks, +/// with each block prefixed by a single byte header EFI_HII_ANIMATION_BLOCK. +/// +typedef struct _EFI_HII_ANIMATION_BLOCK { + UINT8 BlockType; + //UINT8 BlockBody[]; +} EFI_HII_ANIMATION_BLOCK; + +/// +/// Animation block types. +/// +#define EFI_HII_AIBT_END 0x00 +#define EFI_HII_AIBT_OVERLAY_IMAGES 0x10 +#define EFI_HII_AIBT_CLEAR_IMAGES 0x11 +#define EFI_HII_AIBT_RESTORE_SCRN 0x12 +#define EFI_HII_AIBT_OVERLAY_IMAGES_LOOP 0x18 +#define EFI_HII_AIBT_CLEAR_IMAGES_LOOP 0x19 +#define EFI_HII_AIBT_RESTORE_SCRN_LOOP 0x1A +#define EFI_HII_AIBT_DUPLICATE 0x20 +#define EFI_HII_AIBT_SKIP2 0x21 +#define EFI_HII_AIBT_SKIP1 0x22 +#define EFI_HII_AIBT_EXT1 0x30 +#define EFI_HII_AIBT_EXT2 0x31 +#define EFI_HII_AIBT_EXT4 0x32 + +/// +/// Extended block headers used for variable sized animation records +/// which need an explicit length. +/// + +typedef struct _EFI_HII_AIBT_EXT1_BLOCK { + /// + /// Standard animation header, where Header.BlockType = EFI_HII_AIBT_EXT1. + /// + EFI_HII_ANIMATION_BLOCK Header; + /// + /// The block type. + /// + UINT8 BlockType2; + /// + /// Size of the animation block, in bytes, including the animation block header. + /// + UINT8 Length; +} EFI_HII_AIBT_EXT1_BLOCK; + +typedef struct _EFI_HII_AIBT_EXT2_BLOCK { + /// + /// Standard animation header, where Header.BlockType = EFI_HII_AIBT_EXT2. + /// + EFI_HII_ANIMATION_BLOCK Header; + /// + /// The block type + /// + UINT8 BlockType2; + /// + /// Size of the animation block, in bytes, including the animation block header. + /// + UINT16 Length; +} EFI_HII_AIBT_EXT2_BLOCK; + +typedef struct _EFI_HII_AIBT_EXT4_BLOCK { + /// + /// Standard animation header, where Header.BlockType = EFI_HII_AIBT_EXT4. + /// + EFI_HII_ANIMATION_BLOCK Header; + /// + /// The block type + /// + UINT8 BlockType2; + /// + /// Size of the animation block, in bytes, including the animation block header. + /// + UINT32 Length; +} EFI_HII_AIBT_EXT4_BLOCK; + +typedef struct _EFI_HII_ANIMATION_CELL { + /// + /// The X offset from the upper left hand corner of the logical + /// window to position the indexed image. + /// + UINT16 OffsetX; + /// + /// The Y offset from the upper left hand corner of the logical + /// window to position the indexed image. + /// + UINT16 OffsetY; + /// + /// The image to display at the specified offset from the upper left + /// hand corner of the logical window. + /// + EFI_IMAGE_ID ImageId; + /// + /// The number of milliseconds to delay after displaying the indexed + /// image and before continuing on to the next linked image. If value + /// is zero, no delay. + /// + UINT16 Delay; +} EFI_HII_ANIMATION_CELL; + +/// +/// An animation block to describe an animation sequence that does not cycle, and +/// where one image is simply displayed over the previous image. +/// +typedef struct _EFI_HII_AIBT_OVERLAY_IMAGES_BLOCK { + /// + /// This is image that is to be reference by the image protocols, if the + /// animation function is not supported or disabled. This image can + /// be one particular image from the animation sequence (if any one + /// of the animation frames has a complete image) or an alternate + /// image that can be displayed alone. If the value is zero, no image + /// is displayed. + /// + EFI_IMAGE_ID DftImageId; + /// + /// The overall width of the set of images (logical window width). + /// + UINT16 Width; + /// + /// The overall height of the set of images (logical window height). + /// + UINT16 Height; + /// + /// The number of EFI_HII_ANIMATION_CELL contained in the + /// animation sequence. + /// + UINT16 CellCount; + /// + /// An array of CellCount animation cells. + /// + EFI_HII_ANIMATION_CELL AnimationCell[1]; +} EFI_HII_AIBT_OVERLAY_IMAGES_BLOCK; + +/// +/// An animation block to describe an animation sequence that does not cycle, +/// and where the logical window is cleared to the specified color before +/// the next image is displayed. +/// +typedef struct _EFI_HII_AIBT_CLEAR_IMAGES_BLOCK { + /// + /// This is image that is to be reference by the image protocols, if the + /// animation function is not supported or disabled. This image can + /// be one particular image from the animation sequence (if any one + /// of the animation frames has a complete image) or an alternate + /// image that can be displayed alone. If the value is zero, no image + /// is displayed. + /// + EFI_IMAGE_ID DftImageId; + /// + /// The overall width of the set of images (logical window width). + /// + UINT16 Width; + /// + /// The overall height of the set of images (logical window height). + /// + UINT16 Height; + /// + /// The number of EFI_HII_ANIMATION_CELL contained in the + /// animation sequence. + /// + UINT16 CellCount; + /// + /// The color to clear the logical window to before displaying the + /// indexed image. + /// + EFI_HII_RGB_PIXEL BackgndColor; + /// + /// An array of CellCount animation cells. + /// + EFI_HII_ANIMATION_CELL AnimationCell[1]; +} EFI_HII_AIBT_CLEAR_IMAGES_BLOCK; + +/// +/// An animation block to describe an animation sequence that does not cycle, +/// and where the screen is restored to the original state before the next +/// image is displayed. +/// +typedef struct _EFI_HII_AIBT_RESTORE_SCRN_BLOCK { + /// + /// This is image that is to be reference by the image protocols, if the + /// animation function is not supported or disabled. This image can + /// be one particular image from the animation sequence (if any one + /// of the animation frames has a complete image) or an alternate + /// image that can be displayed alone. If the value is zero, no image + /// is displayed. + /// + EFI_IMAGE_ID DftImageId; + /// + /// The overall width of the set of images (logical window width). + /// + UINT16 Width; + /// + /// The overall height of the set of images (logical window height). + /// + UINT16 Height; + /// + /// The number of EFI_HII_ANIMATION_CELL contained in the + /// animation sequence. + /// + UINT16 CellCount; + /// + /// An array of CellCount animation cells. + /// + EFI_HII_ANIMATION_CELL AnimationCell[1]; +} EFI_HII_AIBT_RESTORE_SCRN_BLOCK; + +/// +/// An animation block to describe an animation sequence that continuously cycles, +/// and where one image is simply displayed over the previous image. +/// +typedef EFI_HII_AIBT_OVERLAY_IMAGES_BLOCK EFI_HII_AIBT_OVERLAY_IMAGES_LOOP_BLOCK; + +/// +/// An animation block to describe an animation sequence that continuously cycles, +/// and where the logical window is cleared to the specified color before +/// the next image is displayed. +/// +typedef EFI_HII_AIBT_CLEAR_IMAGES_BLOCK EFI_HII_AIBT_CLEAR_IMAGES_LOOP_BLOCK; + +/// +/// An animation block to describe an animation sequence that continuously cycles, +/// and where the screen is restored to the original state before +/// the next image is displayed. +/// +typedef EFI_HII_AIBT_RESTORE_SCRN_BLOCK EFI_HII_AIBT_RESTORE_SCRN_LOOP_BLOCK; + +/// +/// Assigns a new character value to a previously defined animation sequence. +/// +typedef struct _EFI_HII_AIBT_DUPLICATE_BLOCK { + /// + /// The previously defined animation ID with the exact same + /// animation information. + /// + EFI_ANIMATION_ID AnimationId; +} EFI_HII_AIBT_DUPLICATE_BLOCK; + +/// +/// Skips animation IDs. +/// +typedef struct _EFI_HII_AIBT_SKIP1_BLOCK { + /// + /// The unsigned 8-bit value to add to AnimationIdCurrent. + /// + UINT8 SkipCount; +} EFI_HII_AIBT_SKIP1_BLOCK; + +/// +/// Skips animation IDs. +/// +typedef struct _EFI_HII_AIBT_SKIP2_BLOCK { + /// + /// The unsigned 16-bit value to add to AnimationIdCurrent. + /// + UINT16 SkipCount; +} EFI_HII_AIBT_SKIP2_BLOCK; + #pragma pack()