///\r
/// The following types are currently defined:\r
///\r
-typedef UINT32 RELOFST;\r
-\r
typedef VOID* EFI_HII_HANDLE;\r
typedef CHAR16* EFI_STRING;\r
typedef UINT16 EFI_IMAGE_ID;\r
typedef UINT16 EFI_STRING_ID;\r
typedef UINT16 EFI_FORM_ID;\r
typedef UINT16 EFI_VARSTORE_ID;\r
+\r
typedef UINT16 EFI_DEFAULT_ID;\r
+\r
typedef UINT32 EFI_HII_FONT_STYLE;\r
\r
\r
\r
#pragma pack(1)\r
\r
+//\r
+// Definitions for Package Lists and Package Headers\r
+// Section 27.3.1\r
+//\r
\r
///\r
-/// HII package list\r
+/// The header found at the start of each package list.\r
///\r
typedef struct {\r
EFI_GUID PackageListGuid;\r
UINT32 PackageLength;\r
} EFI_HII_PACKAGE_LIST_HEADER;\r
\r
-/**\r
- \r
- Each package starts with a header, as defined above, which \r
- indicates the size and type of the package. When added to a \r
- pointer pointing to the start of the header, Length points at \r
- the next package. The package lists form a package list when \r
- concatenated together and terminated with an \r
- EFI_HII_PACKAGE_HEADER with a Type of EFI_HII_PACKAGE_END. The \r
- type EFI_HII_PACKAGE_TYPE_GUID is used for vendor-defined HII \r
- packages, whose contents are determined by the Guid. The range \r
- of package types starting with EFI_HII_PACKAGE_TYPE_SYSTEM_BEGIN \r
- through EFI_HII_PACKAGE_TYPE_SYSTEM_END are reserved for system \r
- firmware implementers. \r
- \r
- @param Length The size of the package in bytes.\r
- \r
- @param Type The package type. See EFI_HII_PACKAGE_TYPE_x,\r
- below.\r
- \r
- @param Data The package data, the format of which is\r
- determined by Type.\r
- \r
-**/\r
+///\r
+/// The header found at the start of each package.\r
+///\r
typedef struct {\r
UINT32 Length:24;\r
UINT32 Type:8;\r
} EFI_HII_PACKAGE_HEADER;\r
\r
//\r
-// EFI_HII_PACKAGE_TYPE_x.\r
+// Value of HII package type\r
// \r
#define EFI_HII_PACKAGE_TYPE_ALL 0x00\r
#define EFI_HII_PACKAGE_TYPE_GUID 0x01\r
-#define EFI_HII_PACKAGE_FORM 0x02\r
-#define EFI_HII_PACKAGE_KEYBOARD_LAYOUT 0x03\r
+#define EFI_HII_PACKAGE_FORMS 0x02\r
#define EFI_HII_PACKAGE_STRINGS 0x04\r
#define EFI_HII_PACKAGE_FONTS 0x05\r
#define EFI_HII_PACKAGE_IMAGES 0x06\r
#define EFI_HII_PACKAGE_SIMPLE_FONTS 0x07\r
#define EFI_HII_PACKAGE_DEVICE_PATH 0x08\r
+#define EFI_HII_PACKAGE_KEYBOARD_LAYOUT 0x09\r
#define EFI_HII_PACKAGE_END 0xDF\r
#define EFI_HII_PACKAGE_TYPE_SYSTEM_BEGIN 0xE0\r
#define EFI_HII_PACKAGE_TYPE_SYSTEM_END 0xFF\r
\r
//\r
-// Simplified Font Package\r
+// Definitions for Simplified Font Package\r
+// Section 27.3.2\r
//\r
\r
-#define EFI_GLYPH_HEIGHT 19\r
-#define EFI_GLYPH_WIDTH 8\r
//\r
// Contents of EFI_NARROW_GLYPH.Attributes\r
//\r
#define EFI_GLYPH_NON_SPACING 0x01\r
#define EFI_GLYPH_WIDE 0x02\r
+#define EFI_GLYPH_HEIGHT 19\r
+#define EFI_GLYPH_WIDTH 8\r
\r
typedef struct {\r
CHAR16 UnicodeWeight;\r
UINT8 Pad[3];\r
} EFI_WIDE_GLYPH;\r
\r
-\r
+///\r
+/// A simplified font package consists of a font header\r
+/// followed by a series of glyph structures.\r
+///\r
typedef struct _EFI_HII_SIMPLE_FONT_PACKAGE_HDR {\r
EFI_HII_PACKAGE_HEADER Header;\r
UINT16 NumberOfNarrowGlyphs;\r
} EFI_HII_SIMPLE_FONT_PACKAGE_HDR;\r
\r
//\r
-// Font Package\r
+// Definitions for Font Package\r
+// Section 27.3.3\r
//\r
\r
+//\r
+// Value for font style\r
+//\r
#define EFI_HII_FONT_STYLE_NORMAL 0x00000000\r
#define EFI_HII_FONT_STYLE_BOLD 0x00000001\r
#define EFI_HII_FONT_STYLE_ITALIC 0x00000002\r
INT16 AdvanceX;\r
} EFI_HII_GLYPH_INFO;\r
\r
+///\r
+/// The fixed header consists of a standard record header and\r
+/// then the character values in this section, the flags\r
+/// (including the encoding method) and the offsets of the glyph\r
+/// information, the glyph bitmaps and the character map.\r
+///\r
typedef struct _EFI_HII_FONT_PACKAGE_HDR {\r
EFI_HII_PACKAGE_HEADER Header;\r
UINT32 HdrSize;\r
CHAR16 FontFamily[1];\r
} EFI_HII_FONT_PACKAGE_HDR;\r
\r
+//\r
+// Value of different glyph info block types\r
+//\r
#define EFI_HII_GIBT_END 0x00\r
#define EFI_HII_GIBT_GLYPH 0x10\r
#define EFI_HII_GIBT_GLYPHS 0x11\r
UINT8 BlockType;\r
} EFI_HII_GLYPH_BLOCK;\r
\r
+//\r
+// Definition of different glyph info block types\r
+//\r
+\r
typedef struct _EFI_HII_GIBT_DEFAULTS_BLOCK {\r
EFI_HII_GLYPH_BLOCK Header;\r
EFI_HII_GLYPH_INFO Cell;\r
typedef struct _EFI_HII_GIBT_GLYPH_BLOCK {\r
EFI_HII_GLYPH_BLOCK Header;\r
EFI_HII_GLYPH_INFO Cell;\r
- UINT8 BitmapData[1]; // the number of bytes per bitmap can be calculated by ((Cell.Width+7)/8)*Cell.Height\r
+ UINT8 BitmapData[1];\r
} EFI_HII_GIBT_GLYPH_BLOCK;\r
\r
typedef struct _EFI_HII_GIBT_GLYPHS_BLOCK {\r
EFI_HII_GLYPH_BLOCK Header;\r
EFI_HII_GLYPH_INFO Cell;\r
UINT16 Count; \r
- UINT8 BitmapData[1]; // the number of bytes per bitmap can be calculated by ((Cell.Width+7)/8)*Cell.Height\r
+ UINT8 BitmapData[1];\r
} EFI_HII_GIBT_GLYPHS_BLOCK;\r
\r
typedef struct _EFI_HII_GIBT_GLYPH_DEFAULT_BLOCK {\r
EFI_HII_GLYPH_BLOCK Header;\r
- UINT8 BitmapData[1]; // the number of bytes per bitmap can be calculated by ((Global.Cell.Width+7)/8)*Global.Cell.Height\r
+ UINT8 BitmapData[1];\r
} EFI_HII_GIBT_GLYPH_DEFAULT_BLOCK;\r
\r
typedef struct _EFI_HII_GIBT_GLYPHS_DEFAULT_BLOCK {\r
EFI_HII_GLYPH_BLOCK Header;\r
UINT16 Count;\r
- UINT8 BitmapData[1]; // the number of bytes per bitmap can be calculated by ((Global.Cell.Width+7)/8)*Global.Cell.Height\r
+ UINT8 BitmapData[1];\r
} EFI_HII_GIBT_GLYPHS_DEFAULT_BLOCK;\r
\r
typedef struct _EFI_HII_GIBT_SKIP1_BLOCK {\r
} EFI_HII_GIBT_SKIP2_BLOCK;\r
\r
//\r
-// Device Path Package\r
+// Definitions for Device Path Package\r
+// Section 27.3.4\r
//\r
+\r
+///\r
+/// The device path package is used to carry a device path\r
+/// associated with the package list.\r
+///\r
typedef struct _EFI_HII_DEVICE_PATH_PACKAGE {\r
EFI_HII_PACKAGE_HEADER Header;\r
// EFI_DEVICE_PATH_PROTOCOL DevicePath[];\r
} EFI_HII_DEVICE_PATH_PACKAGE;\r
\r
//\r
-// GUID Package\r
+// Definitions for GUID Package\r
+// Section 27.3.5\r
//\r
+\r
+///\r
+/// The GUID package is used to carry data where the format is defined by a GUID.\r
+///\r
typedef struct _EFI_HII_GUID_PACKAGE_HDR {\r
EFI_HII_PACKAGE_HEADER Header;\r
EFI_GUID Guid;\r
} EFI_HII_GUID_PACKAGE_HDR;\r
\r
//\r
-// String Package\r
+// Definitions for String Package\r
+// Section 27.3.6\r
//\r
\r
#define UEFI_CONFIG_LANG L"x-UEFI"\r
-#define UEFI_CONFIG_LANG2 L"x-i-UEFI" // BUGBUG, spec need to be updated.\r
+#define UEFI_CONFIG_LANG2 L"x-i-UEFI"\r
\r
+///\r
+/// The fixed header consists of a standard record header and then the string identifiers\r
+/// contained in this section and the offsets of the string and language information.\r
+///\r
typedef struct _EFI_HII_STRING_PACKAGE_HDR {\r
EFI_HII_PACKAGE_HEADER Header;\r
UINT32 HdrSize;\r
UINT8 BlockType;\r
} EFI_HII_STRING_BLOCK;\r
\r
+//\r
+// Value of different string information block types\r
+//\r
#define EFI_HII_SIBT_END 0x00\r
#define EFI_HII_SIBT_STRING_SCSU 0x10\r
#define EFI_HII_SIBT_STRING_SCSU_FONT 0x11\r
#define EFI_HII_SIBT_EXT4 0x32\r
#define EFI_HII_SIBT_FONT 0x40\r
\r
+//\r
+// Definition of different string information block types\r
+//\r
+\r
typedef struct _EFI_HII_SIBT_DUPLICATE_BLOCK {\r
EFI_HII_STRING_BLOCK Header;\r
EFI_STRING_ID StringId;\r
} EFI_HII_SIBT_STRINGS_UCS2_FONT_BLOCK;\r
\r
//\r
-// Image Packages\r
+// Definitions for Image Package\r
+// Section 27.3.7\r
//\r
\r
typedef struct _EFI_HII_IMAGE_PACKAGE_HDR {\r
UINT8 BlockType;\r
} EFI_HII_IMAGE_BLOCK;\r
\r
+//\r
+// Value of different image information block types\r
+//\r
#define EFI_HII_IIBT_END 0x00\r
#define EFI_HII_IIBT_IMAGE_1BIT 0x10\r
#define EFI_HII_IIBT_IMAGE_1BIT_TRANS 0x11\r
#define EFI_HII_IIBT_EXT2 0x31\r
#define EFI_HII_IIBT_EXT4 0x32\r
\r
+//\r
+// Definition of different image information block types\r
+//\r
+\r
typedef struct _EFI_HII_IIBT_END_BLOCK {\r
EFI_HII_IMAGE_BLOCK Header;\r
} EFI_HII_IIBT_END_BLOCK;\r
UINT16 SkipCount;\r
} EFI_HII_IIBT_SKIP2_BLOCK;\r
\r
+//\r
+// Definitions for Palette Information\r
+//\r
+\r
typedef struct _EFI_HII_IMAGE_PALETTE_INFO_HEADER {\r
UINT16 PaletteCount;\r
} EFI_HII_IMAGE_PALETTE_INFO_HEADER;\r
} EFI_HII_IMAGE_PALETTE_INFO;\r
\r
//\r
-// Forms Package\r
+// Definitions for Forms Package\r
+// Section 27.3.8\r
//\r
\r
+///\r
+/// The Forms package is used to carry forms-based encoding data.\r
+///\r
typedef struct _EFI_HII_FORM_PACKAGE {\r
EFI_HII_PACKAGE_HEADER Header;\r
// EFI_IFR_OP_HEADER OpCodeHeader;\r
#define EFI_IFR_CATENATE_OP 0x5E\r
#define EFI_IFR_GUID_OP 0x5F\r
\r
+//\r
+// Definitions of IFR Standard Headers\r
+// Section 27.3.8.2\r
+//\r
\r
typedef struct _EFI_IFR_OP_HEADER {\r
UINT8 OpCode;\r
UINT8 Flags;\r
} EFI_IFR_QUESTION_HEADER;\r
\r
+//\r
+// Flag values of EFI_IFR_QUESTION_HEADER\r
+//\r
#define EFI_IFR_FLAG_READ_ONLY 0x01\r
#define EFI_IFR_FLAG_CALLBACK 0x04\r
#define EFI_IFR_FLAG_RESET_REQUIRED 0x10\r
#define EFI_IFR_FLAG_OPTIONS_ONLY 0x80\r
\r
+//\r
+// Definition for Opcode Reference\r
+// Section 27.3.8.3\r
+//\r
typedef struct _EFI_IFR_DEFAULTSTORE {\r
EFI_IFR_OP_HEADER Header;\r
EFI_STRING_ID DefaultName;\r
UINT16 DefaultId;\r
} EFI_IFR_DEFAULTSTORE;\r
\r
+//\r
+// Default Identifier of default store \r
+//\r
#define EFI_HII_DEFAULT_CLASS_STANDARD 0x0000\r
#define EFI_HII_DEFAULT_CLASS_MANUFACTURING 0x0001\r
#define EFI_HII_DEFAULT_CLASS_SAFE 0x0002\r
UINT8 Flags;\r
} EFI_IFR_DATE;\r
\r
+//\r
+// Flags that describe the behavior of the question.\r
+//\r
#define EFI_QF_DATE_YEAR_SUPPRESS 0x01\r
#define EFI_QF_DATE_MONTH_SUPPRESS 0x02\r
#define EFI_QF_DATE_DAY_SUPPRESS 0x04\r
MINMAXSTEP_DATA data;\r
} EFI_IFR_NUMERIC;\r
\r
+//\r
+// Flags related to the numeric question\r
+//\r
#define EFI_IFR_NUMERIC_SIZE 0x03\r
-#define EFI_IFR_NUMERIC_SIZE_1 0x00\r
-#define EFI_IFR_NUMERIC_SIZE_2 0x01\r
-#define EFI_IFR_NUMERIC_SIZE_4 0x02\r
-#define EFI_IFR_NUMERIC_SIZE_8 0x03\r
+#define EFI_IFR_NUMERIC_SIZE_1 0x00\r
+#define EFI_IFR_NUMERIC_SIZE_2 0x01\r
+#define EFI_IFR_NUMERIC_SIZE_4 0x02\r
+#define EFI_IFR_NUMERIC_SIZE_8 0x03\r
\r
#define EFI_IFR_DISPLAY 0x30\r
-#define EFI_IFR_DISPLAY_INT_DEC 0x00\r
-#define EFI_IFR_DISPLAY_UINT_DEC 0x10\r
-#define EFI_IFR_DISPLAY_UINT_HEX 0x20\r
+#define EFI_IFR_DISPLAY_INT_DEC 0x00\r
+#define EFI_IFR_DISPLAY_UINT_DEC 0x10\r
+#define EFI_IFR_DISPLAY_UINT_HEX 0x20\r
\r
typedef struct _EFI_IFR_ONE_OF {\r
EFI_IFR_OP_HEADER Header;\r
UINT8 Flags;\r
} EFI_IFR_TIME;\r
\r
+//\r
+// A bit-mask that determines which unique settings are active for this opcode.\r
+//\r
#define QF_TIME_HOUR_SUPPRESS 0x01\r
#define QF_TIME_MINUTE_SUPPRESS 0x02\r
#define QF_TIME_SECOND_SUPPRESS 0x04\r
\r
#define QF_TIME_STORAGE 0x30\r
-#define QF_TIME_STORAGE_NORMAL 0x00\r
-#define QF_TIME_STORAGE_TIME 0x10\r
-#define QF_TIME_STORAGE_WAKEUP 0x20\r
+#define QF_TIME_STORAGE_NORMAL 0x00\r
+#define QF_TIME_STORAGE_TIME 0x10\r
+#define QF_TIME_STORAGE_WAKEUP 0x20\r
\r
typedef struct _EFI_IFR_DISABLE_IF {\r
EFI_IFR_OP_HEADER Header;\r
EFI_IFR_TYPE_VALUE Value;\r
} EFI_IFR_ONE_OF_OPTION;\r
\r
+//\r
+// Types of the option's value.\r
+//\r
#define EFI_IFR_TYPE_NUM_SIZE_8 0x00\r
#define EFI_IFR_TYPE_NUM_SIZE_16 0x01\r
#define EFI_IFR_TYPE_NUM_SIZE_32 0x02\r
UINT16 ValueList[1];\r
} EFI_IFR_EQ_ID_LIST;\r
\r
-typedef struct _EFI_IFR_QUESTION_REF1 {\r
- EFI_IFR_OP_HEADER Header;\r
- EFI_QUESTION_ID QuestionId;\r
-} EFI_IFR_QUESTION_REF1;\r
-\r
typedef struct _EFI_IFR_UINT8 {\r
EFI_IFR_OP_HEADER Header;\r
UINT8 Value;\r
UINT16 Value;\r
} EFI_IFR_UINT16;\r
\r
-typedef struct _EFI_IFR_QUESTION_REF2 {\r
- EFI_IFR_OP_HEADER Header;\r
-} EFI_IFR_QUESTION_REF2;\r
-\r
typedef struct _EFI_IFR_UINT32 {\r
EFI_IFR_OP_HEADER Header;\r
UINT32 Value;\r
UINT64 Value;\r
} EFI_IFR_UINT64;\r
\r
+typedef struct _EFI_IFR_QUESTION_REF1 {\r
+ EFI_IFR_OP_HEADER Header;\r
+ EFI_QUESTION_ID QuestionId;\r
+} EFI_IFR_QUESTION_REF1;\r
+\r
+typedef struct _EFI_IFR_QUESTION_REF2 {\r
+ EFI_IFR_OP_HEADER Header;\r
+} EFI_IFR_QUESTION_REF2;\r
+\r
typedef struct _EFI_IFR_QUESTION_REF3 {\r
EFI_IFR_OP_HEADER Header;\r
} EFI_IFR_QUESTION_REF3;\r
EFI_IFR_OP_HEADER Header;\r
} EFI_IFR_TO_BOOLEAN;\r
\r
+//\r
+// For EFI_IFR_TO_STRING, when converting from\r
+// unsigned integers, these flags control the format:\r
+// 0 = unsigned decimal\r
+// 1 = signed decimal\r
+// 2 = hexadecimal (lower-case alpha)\r
+// 3 = hexadecimal (upper-case alpha)\r
+//\r
#define EFI_IFR_STRING_UNSIGNED_DEC 0\r
#define EFI_IFR_STRING_SIGNED_DEC 1\r
#define EFI_IFR_STRING_LOWERCASE_HEX 2\r
#define EFI_IFR_STRING_UPPERCASE_HEX 3\r
-\r
+//\r
+// When converting from a buffer, these flags control the format:\r
+// 0 = ASCII\r
+// 8 = Unicode\r
+//\r
#define EFI_IFR_STRING_ASCII 0\r
#define EFI_IFR_STRING_UNICODE 8\r
\r
EFI_IFR_OP_HEADER Header;\r
} EFI_IFR_CONDITIONAL;\r
\r
+//\r
+// Flags governing the matching criteria of EFI_IFR_FIND\r
+//\r
#define EFI_IFR_FF_CASE_SENSITIVE 0x00\r
#define EFI_IFR_FF_CASE_INSENSITIVE 0x01\r
\r
EFI_IFR_OP_HEADER Header;\r
} EFI_IFR_TOKEN;\r
\r
+//\r
+// Flags specifying whether to find the first matching string\r
+// or the first non-matching string.\r
+//\r
#define EFI_IFR_FLAGS_FIRST_MATCHING 0x00\r
#define EFI_IFR_FLAGS_FIRST_NON_MATCHING 0x01\r
\r
} EFI_IFR_SPAN;\r
\r
//\r
-// Keyboard Package\r
+// Definitions for Keyboard Package\r
+// Releated definitions are in Section of EFI_HII_DATABASE_PROTOCOL\r
//\r
\r
+///\r
+/// Each enumeration values maps a physical key on a keyboard.\r
+///\r
typedef enum { \r
EfiKeyLCtrl,\r
EfiKeyA0, \r
// EFI_HII_KEYBOARD_LAYOUT Layout[];\r
} EFI_HII_KEYBOARD_PACKAGE_HDR;\r
\r
-//typedef struct {\r
-// CHAR16 Language[]; // RFC4646 Language Code\r
-// CHAR16 Space;\r
-// CHAR16 DescriptionString[];\r
-//} EFI_DESCRIPTION_STRING;\r
-\r
-//typedef struct {\r
-// UINT16 DescriptionCount;\r
-// EFI_DESCRIPTION_STRING DescriptionString[];\r
-//} EFI_DESCRIPTION_STRING_BUNDLE;\r
-\r
//\r
// Modifier values\r
//\r