]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Include/Uefi/UefiInternalFormRepresentation.h
MdePkg UefiHii: Add IMAGE_TOKEN macro to access image resource in C and VFR
[mirror_edk2.git] / MdePkg / Include / Uefi / UefiInternalFormRepresentation.h
index 942c2111353f0b89dd20b95bd3ba211d07b54c92..ae5602f0f80279bb58d844b83a99f7bec630ed8a 100644 (file)
@@ -3,23 +3,26 @@
   IFR is primarily consumed by the EFI presentation engine, and produced by EFI\r
   internal application and drivers as well as all add-in card option-ROM drivers\r
 \r
-  Copyright (c) 2006 - 2008, Intel Corporation                                                         \r
-  All rights reserved. This program and the accompanying materials                          \r
-  are licensed and made available under the terms and conditions of the BSD License         \r
-  which accompanies this distribution.  The full text of the license may be found at        \r
-  http://opensource.org/licenses/bsd-license.php                                            \r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
+Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>\r
+(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>\r
+This program and the accompanying materials are licensed and made available under \r
+the terms and conditions of the BSD License that accompanies this distribution.  \r
+The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php.                                          \r
+    \r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
 \r
   @par Revision Reference:\r
-  These definitions are from UEFI2.1.\r
+  These definitions are from UEFI 2.1 and 2.2.\r
 \r
 **/\r
 \r
 #ifndef __UEFI_INTERNAL_FORMREPRESENTATION_H__\r
 #define __UEFI_INTERNAL_FORMREPRESENTATION_H__\r
 \r
+#include <Guid/HiiFormMapMethodGuid.h>\r
+\r
 ///\r
 /// The following types are currently defined:\r
 ///\r
@@ -30,6 +33,7 @@ typedef UINT16  EFI_QUESTION_ID;
 typedef UINT16  EFI_STRING_ID;\r
 typedef UINT16  EFI_FORM_ID;\r
 typedef UINT16  EFI_VARSTORE_ID;\r
+typedef UINT16  EFI_ANIMATION_ID;\r
 \r
 typedef UINT16  EFI_DEFAULT_ID;\r
 \r
@@ -73,34 +77,76 @@ typedef struct {
 #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_ANIMATIONS           0x0A\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
 // Definitions for Simplified Font Package\r
-// Section 27.3.2\r
 //\r
 \r
-//\r
-// Contents of EFI_NARROW_GLYPH.Attributes\r
-//\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
 \r
+///\r
+/// The EFI_NARROW_GLYPH has a preferred dimension (w x h) of 8 x 19 pixels.\r
+///\r
 typedef struct {\r
+  ///\r
+  /// The Unicode representation of the glyph. The term weight is the \r
+  /// technical term for a character code.\r
+  ///\r
   CHAR16                 UnicodeWeight;\r
+  ///\r
+  /// The data element containing the glyph definitions.\r
+  ///\r
   UINT8                  Attributes;\r
+  ///\r
+  /// The column major glyph representation of the character. Bits \r
+  /// with values of one indicate that the corresponding pixel is to be\r
+  /// on when normally displayed; those with zero are off.\r
+  ///\r
   UINT8                  GlyphCol1[EFI_GLYPH_HEIGHT];\r
 } EFI_NARROW_GLYPH;\r
 \r
+///\r
+/// The EFI_WIDE_GLYPH has a preferred dimension (w x h) of 16 x 19 pixels, which is large enough \r
+/// to accommodate logographic characters.\r
+///\r
 typedef struct {\r
+  ///\r
+  /// The Unicode representation of the glyph. The term weight is the \r
+  /// technical term for a character code.\r
+  ///\r
   CHAR16                 UnicodeWeight;\r
+  ///\r
+  /// The data element containing the glyph definitions.\r
+  ///\r
   UINT8                  Attributes;\r
+  ///\r
+  /// The column major glyph representation of the character. Bits \r
+  /// with values of one indicate that the corresponding pixel is to be \r
+  /// on when normally displayed; those with zero are off.\r
+  ///\r
   UINT8                  GlyphCol1[EFI_GLYPH_HEIGHT];\r
+  ///\r
+  /// The column major glyph representation of the character. Bits \r
+  /// with values of one indicate that the corresponding pixel is to be \r
+  /// on when normally displayed; those with zero are off.\r
+  ///\r
   UINT8                  GlyphCol2[EFI_GLYPH_HEIGHT];\r
+  ///\r
+  /// Ensures that sizeof (EFI_WIDE_GLYPH) is twice the \r
+  /// sizeof (EFI_NARROW_GLYPH). The contents of Pad must \r
+  /// be zero.\r
+  ///\r
   UINT8                  Pad[3];\r
 } EFI_WIDE_GLYPH;\r
 \r
@@ -142,7 +188,7 @@ typedef struct _EFI_HII_GLYPH_INFO {
 } EFI_HII_GLYPH_INFO;\r
 \r
 ///\r
-/// The fixed header consists of a standard record header and\r
+/// The fixed header consists of a standard record header,\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
@@ -164,6 +210,7 @@ typedef struct _EFI_HII_FONT_PACKAGE_HDR {
 #define EFI_HII_GIBT_GLYPHS               0x11\r
 #define EFI_HII_GIBT_GLYPH_DEFAULT        0x12\r
 #define EFI_HII_GIBT_GLYPHS_DEFAULT       0x13\r
+#define EFI_HII_GIBT_GLYPH_VARIABILITY    0x14\r
 #define EFI_HII_GIBT_DUPLICATE            0x20\r
 #define EFI_HII_GIBT_SKIP2                0x21\r
 #define EFI_HII_GIBT_SKIP1                0x22\r
@@ -236,6 +283,13 @@ typedef struct _EFI_HII_GIBT_GLYPHS_DEFAULT_BLOCK {
   UINT8                  BitmapData[1];\r
 } EFI_HII_GIBT_GLYPHS_DEFAULT_BLOCK;\r
 \r
+typedef struct _EFI_HII_GIBT_VARIABILITY_BLOCK {\r
+  EFI_HII_GLYPH_BLOCK    Header;\r
+  EFI_HII_GLYPH_INFO     Cell;\r
+  UINT8                  GlyphPackInBits;\r
+  UINT8                  BitmapData [1];\r
+} EFI_HII_GIBT_VARIABILITY_BLOCK;\r
+\r
 typedef struct _EFI_HII_GIBT_SKIP1_BLOCK {\r
   EFI_HII_GLYPH_BLOCK    Header;\r
   UINT8                  SkipCount;\r
@@ -255,10 +309,10 @@ typedef struct _EFI_HII_GIBT_SKIP2_BLOCK {
 /// 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
+typedef struct _EFI_HII_DEVICE_PATH_PACKAGE_HDR {\r
   EFI_HII_PACKAGE_HEADER   Header;\r
   // EFI_DEVICE_PATH_PROTOCOL DevicePath[];\r
-} EFI_HII_DEVICE_PATH_PACKAGE;\r
+} EFI_HII_DEVICE_PATH_PACKAGE_HDR;\r
 \r
 //\r
 // Definitions for GUID Package\r
@@ -279,8 +333,8 @@ typedef struct _EFI_HII_GUID_PACKAGE_HDR {
 // Section 27.3.6\r
 //\r
 \r
-#define UEFI_CONFIG_LANG  L"x-UEFI"\r
-#define UEFI_CONFIG_LANG2 L"x-i-UEFI"\r
+#define UEFI_CONFIG_LANG   "x-UEFI"\r
+#define UEFI_CONFIG_LANG_2 "x-i-UEFI"\r
 \r
 ///\r
 /// The fixed header consists of a standard record header and then the string identifiers\r
@@ -444,6 +498,7 @@ typedef struct _EFI_HII_IMAGE_BLOCK {
 #define EFI_HII_IIBT_IMAGE_24BIT       0x16\r
 #define EFI_HII_IIBT_IMAGE_24BIT_TRANS 0x17\r
 #define EFI_HII_IIBT_IMAGE_JPEG        0x18\r
+#define EFI_HII_IIBT_IMAGE_PNG         0x19\r
 #define EFI_HII_IIBT_DUPLICATE         0x20\r
 #define EFI_HII_IIBT_SKIP2             0x21\r
 #define EFI_HII_IIBT_SKIP1             0x22\r
@@ -564,6 +619,12 @@ typedef struct _EFI_HII_IIBT_JPEG_BLOCK {
   UINT8                        Data[1];\r
 } EFI_HII_IIBT_JPEG_BLOCK;\r
 \r
+typedef struct _EFI_HII_IIBT_PNG_BLOCK {\r
+  EFI_HII_IMAGE_BLOCK          Header;\r
+  UINT32                       Size;\r
+  UINT8                        Data[1];\r
+} EFI_HII_IIBT_PNG_BLOCK;\r
+\r
 typedef struct _EFI_HII_IIBT_SKIP1_BLOCK {\r
   EFI_HII_IMAGE_BLOCK          Header;\r
   UINT8                        SkipCount;\r
@@ -593,13 +654,13 @@ typedef struct _EFI_HII_IMAGE_PALETTE_INFO {
 //\r
 \r
 ///\r
-/// The Forms package is used to carry forms-based encoding data.\r
+/// The Form package is used to carry form-based encoding data.\r
 ///\r
-typedef struct _EFI_HII_FORM_PACKAGE {\r
+typedef struct _EFI_HII_FORM_PACKAGE_HDR {\r
   EFI_HII_PACKAGE_HEADER       Header;\r
   // EFI_IFR_OP_HEADER         OpCodeHeader;\r
   // More op-codes follow\r
-} EFI_HII_FORM_PACKAGE;\r
+} EFI_HII_FORM_PACKAGE_HDR;\r
 \r
 typedef struct {\r
   UINT8 Hour;\r
@@ -613,6 +674,13 @@ typedef struct {
   UINT8  Day;\r
 } EFI_HII_DATE;\r
 \r
+typedef struct {\r
+  EFI_QUESTION_ID QuestionId;\r
+  EFI_FORM_ID     FormId;\r
+  EFI_GUID        FormSetGuid;\r
+  EFI_STRING_ID   DevicePath;\r
+} EFI_HII_REF;\r
+\r
 typedef union {\r
   UINT8           u8;\r
   UINT16          u16;\r
@@ -621,7 +689,9 @@ typedef union {
   BOOLEAN         b;\r
   EFI_HII_TIME    time;\r
   EFI_HII_DATE    date;\r
-  EFI_STRING_ID   string;\r
+  EFI_STRING_ID   string; ///< EFI_IFR_TYPE_STRING, EFI_IFR_TYPE_ACTION\r
+  EFI_HII_REF     ref;    ///< EFI_IFR_TYPE_REF\r
+  // UINT8 buffer[];      ///< EFI_IFR_TYPE_BUFFER\r
 } EFI_IFR_TYPE_VALUE;\r
 \r
 //\r
@@ -646,7 +716,7 @@ typedef union {
 #define EFI_IFR_INCONSISTENT_IF_OP     0x11\r
 #define EFI_IFR_EQ_ID_VAL_OP           0x12\r
 #define EFI_IFR_EQ_ID_ID_OP            0x13\r
-#define EFI_IFR_EQ_ID_LIST_OP          0x14\r
+#define EFI_IFR_EQ_ID_VAL_LIST_OP      0x14\r
 #define EFI_IFR_AND_OP                 0x15\r
 #define EFI_IFR_OR_OP                  0x16\r
 #define EFI_IFR_NOT_OP                 0x17\r
@@ -657,8 +727,10 @@ typedef union {
 #define EFI_IFR_STRING_OP              0x1C\r
 #define EFI_IFR_REFRESH_OP             0x1D\r
 #define EFI_IFR_DISABLE_IF_OP          0x1E\r
+#define EFI_IFR_ANIMATION_OP           0x1F\r
 #define EFI_IFR_TO_LOWER_OP            0x20\r
 #define EFI_IFR_TO_UPPER_OP            0x21\r
+#define EFI_IFR_MAP_OP                 0x22\r
 #define EFI_IFR_ORDERED_LIST_OP        0x23\r
 #define EFI_IFR_VARSTORE_OP            0x24\r
 #define EFI_IFR_VARSTORE_NAME_VALUE_OP 0x25\r
@@ -667,6 +739,10 @@ typedef union {
 #define EFI_IFR_VERSION_OP             0x28\r
 #define EFI_IFR_END_OP                 0x29\r
 #define EFI_IFR_MATCH_OP               0x2A\r
+#define EFI_IFR_GET_OP                 0x2B\r
+#define EFI_IFR_SET_OP                 0x2C\r
+#define EFI_IFR_READ_OP                0x2D\r
+#define EFI_IFR_WRITE_OP               0x2E\r
 #define EFI_IFR_EQUAL_OP               0x2F\r
 #define EFI_IFR_NOT_EQUAL_OP           0x30\r
 #define EFI_IFR_GREATER_THAN_OP        0x31\r
@@ -713,8 +789,14 @@ typedef union {
 #define EFI_IFR_VALUE_OP               0x5A\r
 #define EFI_IFR_DEFAULT_OP             0x5B\r
 #define EFI_IFR_DEFAULTSTORE_OP        0x5C\r
+#define EFI_IFR_FORM_MAP_OP            0x5D\r
 #define EFI_IFR_CATENATE_OP            0x5E\r
 #define EFI_IFR_GUID_OP                0x5F\r
+#define EFI_IFR_SECURITY_OP            0x60\r
+#define EFI_IFR_MODAL_TAG_OP           0x61\r
+#define EFI_IFR_REFRESH_ID_OP          0x62\r
+#define EFI_IFR_WARNING_IF_OP          0x63\r
+#define EFI_IFR_MATCH2_OP              0x64\r
 \r
 //\r
 // Definitions of IFR Standard Headers\r
@@ -746,10 +828,11 @@ typedef struct _EFI_IFR_QUESTION_HEADER {
 //\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
+#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_RECONNECT_REQUIRED 0x40\r
+#define EFI_IFR_FLAG_OPTIONS_ONLY       0x80\r
 \r
 //\r
 // Definition for Opcode Reference\r
@@ -787,6 +870,8 @@ typedef struct _EFI_IFR_VARSTORE_EFI {
   EFI_VARSTORE_ID          VarStoreId;\r
   EFI_GUID                 Guid;\r
   UINT32                   Attributes;\r
+  UINT16                   Size;\r
+  UINT8                    Name[1];\r
 } EFI_IFR_VARSTORE_EFI;\r
 \r
 typedef struct _EFI_IFR_VARSTORE_NAME_VALUE {\r
@@ -819,6 +904,10 @@ typedef struct _EFI_IFR_IMAGE {
   EFI_IMAGE_ID             Id;\r
 } EFI_IFR_IMAGE;\r
 \r
+typedef struct _EFI_IFR_MODAL_TAG {\r
+  EFI_IFR_OP_HEADER        Header;\r
+} EFI_IFR_MODAL_TAG;\r
+\r
 typedef struct _EFI_IFR_LOCKED {\r
   EFI_IFR_OP_HEADER        Header;\r
 } EFI_IFR_LOCKED;\r
@@ -835,6 +924,12 @@ typedef struct _EFI_IFR_DEFAULT {
   EFI_IFR_TYPE_VALUE       Value;\r
 } EFI_IFR_DEFAULT;\r
 \r
+typedef struct _EFI_IFR_DEFAULT_2 {\r
+  EFI_IFR_OP_HEADER        Header;\r
+  UINT16                   DefaultId;\r
+  UINT8                    Type;\r
+} EFI_IFR_DEFAULT_2;\r
+\r
 typedef struct _EFI_IFR_VALUE {\r
   EFI_IFR_OP_HEADER        Header;\r
 } EFI_IFR_VALUE;\r
@@ -892,9 +987,14 @@ typedef struct _EFI_IFR_REF4 {
   EFI_STRING_ID            DevicePath;\r
 } EFI_IFR_REF4;\r
 \r
+typedef struct _EFI_IFR_REF5 {\r
+  EFI_IFR_OP_HEADER Header;\r
+  EFI_IFR_QUESTION_HEADER Question;\r
+} EFI_IFR_REF5;\r
+\r
 typedef struct _EFI_IFR_RESET_BUTTON {\r
   EFI_IFR_OP_HEADER        Header;\r
-  EFI_IFR_QUESTION_HEADER  Question;\r
+  EFI_IFR_STATEMENT_HEADER Statement;\r
   EFI_DEFAULT_ID           DefaultId;\r
 } EFI_IFR_RESET_BUTTON;\r
 \r
@@ -1045,6 +1145,12 @@ typedef struct _EFI_IFR_NO_SUBMIT_IF {
   EFI_STRING_ID            Error;\r
 } EFI_IFR_NO_SUBMIT_IF;\r
 \r
+typedef struct _EFI_IFR_WARNING_IF {\r
+  EFI_IFR_OP_HEADER        Header;\r
+  EFI_STRING_ID            Warning;\r
+  UINT8                    TimeOut;\r
+} EFI_IFR_WARNING_IF;\r
+\r
 typedef struct _EFI_IFR_REFRESH {\r
   EFI_IFR_OP_HEADER        Header;\r
   UINT8                    RefreshInterval;\r
@@ -1075,6 +1181,10 @@ typedef struct _EFI_IFR_ONE_OF_OPTION {
 #define EFI_IFR_TYPE_DATE              0x06\r
 #define EFI_IFR_TYPE_STRING            0x07\r
 #define EFI_IFR_TYPE_OTHER             0x08\r
+#define EFI_IFR_TYPE_UNDEFINED         0x09\r
+#define EFI_IFR_TYPE_ACTION            0x0A\r
+#define EFI_IFR_TYPE_BUFFER            0x0B\r
+#define EFI_IFR_TYPE_REF               0x0C\r
 \r
 #define EFI_IFR_OPTION_DEFAULT         0x10\r
 #define EFI_IFR_OPTION_DEFAULT_MFG     0x20\r
@@ -1085,6 +1195,11 @@ typedef struct _EFI_IFR_GUID {
   //Optional Data Follows\r
 } EFI_IFR_GUID;\r
 \r
+typedef struct _EFI_IFR_REFRESH_ID {\r
+  EFI_IFR_OP_HEADER Header;\r
+  EFI_GUID          RefreshEventGroupId;\r
+} EFI_IFR_REFRESH_ID;\r
+\r
 typedef struct _EFI_IFR_DUP {\r
   EFI_IFR_OP_HEADER        Header;\r
 } EFI_IFR_DUP;\r
@@ -1101,12 +1216,12 @@ typedef struct _EFI_IFR_EQ_ID_VAL {
   UINT16                   Value;\r
 } EFI_IFR_EQ_ID_VAL;\r
 \r
-typedef struct _EFI_IFR_EQ_ID_LIST {\r
+typedef struct _EFI_IFR_EQ_ID_VAL_LIST {\r
   EFI_IFR_OP_HEADER        Header;\r
   EFI_QUESTION_ID          QuestionId;\r
   UINT16                   ListLength;\r
   UINT16                   ValueList[1];\r
-} EFI_IFR_EQ_ID_LIST;\r
+} EFI_IFR_EQ_ID_VAL_LIST;\r
 \r
 typedef struct _EFI_IFR_UINT8 {\r
   EFI_IFR_OP_HEADER        Header;\r
@@ -1214,25 +1329,28 @@ typedef struct _EFI_IFR_TO_BOOLEAN {
   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
+///\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
-// When converting from a buffer, these flags control the format:\r
-// 0 = ASCII\r
-// 8 = Unicode\r
-//\r
+///@}\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
 \r
 typedef struct _EFI_IFR_TO_STRING {\r
   EFI_IFR_OP_HEADER        Header;\r
@@ -1299,6 +1417,11 @@ typedef struct _EFI_IFR_MATCH {
   EFI_IFR_OP_HEADER        Header;\r
 } EFI_IFR_MATCH;\r
 \r
+typedef struct _EFI_IFR_MATCH2 {\r
+  EFI_IFR_OP_HEADER        Header;\r
+  EFI_GUID                 SyntaxType;\r
+} EFI_IFR_MATCH2;\r
+\r
 typedef struct _EFI_IFR_MULTIPLY {\r
   EFI_IFR_OP_HEADER        Header;\r
 } EFI_IFR_MULTIPLY;\r
@@ -1362,6 +1485,111 @@ typedef struct _EFI_IFR_SPAN {
   UINT8                    Flags;\r
 } EFI_IFR_SPAN;\r
 \r
+typedef struct _EFI_IFR_SECURITY {\r
+  ///\r
+  /// Standard opcode header, where Header.Op = EFI_IFR_SECURITY_OP.\r
+  ///\r
+  EFI_IFR_OP_HEADER        Header;\r
+  ///\r
+  /// Security permission level.\r
+  ///\r
+  EFI_GUID                 Permissions;\r
+} EFI_IFR_SECURITY;\r
+\r
+typedef struct _EFI_IFR_FORM_MAP_METHOD {\r
+  ///\r
+  /// The string identifier which provides the human-readable name of \r
+  /// the configuration method for this standards map form.\r
+  ///\r
+  EFI_STRING_ID            MethodTitle;\r
+  ///\r
+  /// Identifier which uniquely specifies the configuration methods \r
+  /// associated with this standards map form.\r
+  ///\r
+  EFI_GUID                 MethodIdentifier;\r
+} EFI_IFR_FORM_MAP_METHOD;\r
+\r
+typedef struct _EFI_IFR_FORM_MAP {\r
+  ///\r
+  /// The sequence that defines the type of opcode as well as the length \r
+  /// of the opcode being defined. Header.OpCode = EFI_IFR_FORM_MAP_OP. \r
+  ///\r
+  EFI_IFR_OP_HEADER        Header;\r
+  ///\r
+  /// The unique identifier for this particular form.\r
+  ///\r
+  EFI_FORM_ID              FormId;\r
+  ///\r
+  /// One or more configuration method's name and unique identifier.\r
+  ///\r
+  // EFI_IFR_FORM_MAP_METHOD  Methods[];\r
+} EFI_IFR_FORM_MAP;\r
+\r
+typedef struct _EFI_IFR_SET {\r
+  ///\r
+  /// The sequence that defines the type of opcode as well as the length \r
+  /// of the opcode being defined. Header.OpCode = EFI_IFR_SET_OP. \r
+  ///\r
+  EFI_IFR_OP_HEADER  Header;\r
+  ///\r
+  /// Specifies the identifier of a previously declared variable store to \r
+  /// use when storing the question's value. \r
+  ///\r
+  EFI_VARSTORE_ID    VarStoreId;\r
+  union {\r
+    ///\r
+    /// A 16-bit Buffer Storage offset.\r
+    ///\r
+    EFI_STRING_ID    VarName;\r
+    ///\r
+    /// A Name Value or EFI Variable name (VarName).\r
+    ///\r
+    UINT16           VarOffset;\r
+  }                  VarStoreInfo;\r
+  ///\r
+  /// Specifies the type used for storage. \r
+  ///\r
+  UINT8              VarStoreType;\r
+} EFI_IFR_SET;\r
+\r
+typedef struct _EFI_IFR_GET {\r
+  ///\r
+  /// The sequence that defines the type of opcode as well as the length \r
+  /// of the opcode being defined. Header.OpCode = EFI_IFR_GET_OP. \r
+  ///\r
+  EFI_IFR_OP_HEADER  Header;\r
+  ///\r
+  /// Specifies the identifier of a previously declared variable store to \r
+  /// use when retrieving the value. \r
+  ///\r
+  EFI_VARSTORE_ID    VarStoreId;\r
+  union {\r
+    ///\r
+    /// A 16-bit Buffer Storage offset.\r
+    ///\r
+    EFI_STRING_ID    VarName;\r
+    ///\r
+    /// A Name Value or EFI Variable name (VarName).\r
+    ///\r
+    UINT16           VarOffset;\r
+  }                  VarStoreInfo;\r
+  ///\r
+  /// Specifies the type used for storage. \r
+  ///\r
+  UINT8              VarStoreType;\r
+} EFI_IFR_GET;\r
+\r
+typedef struct _EFI_IFR_READ {\r
+  EFI_IFR_OP_HEADER       Header;\r
+} EFI_IFR_READ;\r
+\r
+typedef struct _EFI_IFR_WRITE {\r
+  EFI_IFR_OP_HEADER      Header;\r
+} EFI_IFR_WRITE;\r
+\r
+typedef struct _EFI_IFR_MAP {\r
+  EFI_IFR_OP_HEADER      Header;\r
+} EFI_IFR_MAP;\r
 //\r
 // Definitions for Keyboard Package\r
 // Releated definitions are in Section of EFI_HII_DATABASE_PROTOCOL\r
@@ -1479,11 +1707,31 @@ typedef enum {
 } EFI_KEY;\r
 \r
 typedef struct {\r
+  ///\r
+  /// Used to describe a physical key on a keyboard.\r
+  ///\r
   EFI_KEY                 Key;\r
+  ///\r
+  /// Unicode character code for the Key.\r
+  ///\r
   CHAR16                  Unicode;\r
+  ///\r
+  /// Unicode character code for the key with the shift key being held down.\r
+  ///\r
   CHAR16                  ShiftedUnicode;\r
+  ///\r
+  /// Unicode character code for the key with the Alt-GR being held down.\r
+  ///\r
   CHAR16                  AltGrUnicode;\r
+  ///\r
+  /// Unicode character code for the key with the Alt-GR and shift keys being held down.\r
+  ///\r
   CHAR16                  ShiftedAltGrUnicode;\r
+  ///\r
+  /// Modifier keys are defined to allow for special functionality that is not necessarily \r
+  /// accomplished by a printable character. Many of these modifier keys are flags to toggle \r
+  /// certain state bits on and off inside of a keyboard driver.\r
+  ///\r
   UINT16                  Modifier;\r
   UINT16                  AffectedAttribute;\r
 } EFI_KEY_DESCRIPTOR;\r
@@ -1577,6 +1825,293 @@ typedef struct {
 #define EFI_RIGHT_LOGO_MODIFIER          0x0028\r
 #define EFI_MENU_MODIFIER                0x0029\r
 \r
+///\r
+/// Animation IFR opcode\r
+///\r
+typedef struct _EFI_IFR_ANIMATION {\r
+  ///\r
+  /// Standard opcode header, where Header.OpCode is \r
+  /// EFI_IFR_ANIMATION_OP.\r
+  ///\r
+  EFI_IFR_OP_HEADER        Header;\r
+  ///\r
+  /// Animation identifier in the HII database.\r
+  ///\r
+  EFI_ANIMATION_ID         Id;\r
+} EFI_IFR_ANIMATION;\r
+\r
+///\r
+/// HII animation package header.\r
+///\r
+typedef struct _EFI_HII_ANIMATION_PACKAGE_HDR {\r
+  ///\r
+  /// Standard package header, where Header.Type = EFI_HII_PACKAGE_ANIMATIONS.\r
+  ///\r
+  EFI_HII_PACKAGE_HEADER  Header;\r
+  ///\r
+  /// Offset, relative to this header, of the animation information. If \r
+  /// this is zero, then there are no animation sequences in the package.\r
+  ///\r
+  UINT32                  AnimationInfoOffset;\r
+} EFI_HII_ANIMATION_PACKAGE_HDR;\r
+\r
+///\r
+/// Animation information is encoded as a series of blocks,\r
+/// with each block prefixed by a single byte header EFI_HII_ANIMATION_BLOCK.\r
+///\r
+typedef struct _EFI_HII_ANIMATION_BLOCK {\r
+  UINT8  BlockType;\r
+  //UINT8  BlockBody[];\r
+} EFI_HII_ANIMATION_BLOCK;\r
+\r
+///\r
+/// Animation block types.\r
+///\r
+#define EFI_HII_AIBT_END                 0x00\r
+#define EFI_HII_AIBT_OVERLAY_IMAGES      0x10\r
+#define EFI_HII_AIBT_CLEAR_IMAGES        0x11\r
+#define EFI_HII_AIBT_RESTORE_SCRN        0x12\r
+#define EFI_HII_AIBT_OVERLAY_IMAGES_LOOP 0x18\r
+#define EFI_HII_AIBT_CLEAR_IMAGES_LOOP   0x19\r
+#define EFI_HII_AIBT_RESTORE_SCRN_LOOP   0x1A\r
+#define EFI_HII_AIBT_DUPLICATE           0x20\r
+#define EFI_HII_AIBT_SKIP2               0x21\r
+#define EFI_HII_AIBT_SKIP1               0x22\r
+#define EFI_HII_AIBT_EXT1                0x30\r
+#define EFI_HII_AIBT_EXT2                0x31\r
+#define EFI_HII_AIBT_EXT4                0x32\r
+\r
+///\r
+/// Extended block headers used for variable sized animation records\r
+/// which need an explicit length.\r
+///\r
+\r
+typedef struct _EFI_HII_AIBT_EXT1_BLOCK  {\r
+  ///\r
+  /// Standard animation header, where Header.BlockType = EFI_HII_AIBT_EXT1.\r
+  ///\r
+  EFI_HII_ANIMATION_BLOCK  Header;\r
+  ///\r
+  /// The block type.\r
+  ///\r
+  UINT8                    BlockType2;\r
+  ///\r
+  /// Size of the animation block, in bytes, including the animation block header.\r
+  ///\r
+  UINT8                    Length;\r
+} EFI_HII_AIBT_EXT1_BLOCK;\r
+\r
+typedef struct _EFI_HII_AIBT_EXT2_BLOCK {\r
+  ///\r
+  /// Standard animation header, where Header.BlockType = EFI_HII_AIBT_EXT2.\r
+  ///\r
+  EFI_HII_ANIMATION_BLOCK  Header;\r
+  ///\r
+  /// The block type\r
+  ///\r
+  UINT8                    BlockType2;\r
+  ///\r
+  /// Size of the animation block, in bytes, including the animation block header.\r
+  ///\r
+  UINT16                   Length;\r
+} EFI_HII_AIBT_EXT2_BLOCK;\r
+\r
+typedef struct _EFI_HII_AIBT_EXT4_BLOCK {\r
+  ///\r
+  /// Standard animation header, where Header.BlockType = EFI_HII_AIBT_EXT4.\r
+  ///\r
+  EFI_HII_ANIMATION_BLOCK  Header;\r
+  ///\r
+  /// The block type\r
+  ///\r
+  UINT8                    BlockType2;\r
+  ///\r
+  /// Size of the animation block, in bytes, including the animation block header.\r
+  ///\r
+  UINT32                   Length;\r
+} EFI_HII_AIBT_EXT4_BLOCK;\r
+\r
+typedef struct _EFI_HII_ANIMATION_CELL {\r
+  ///\r
+  /// The X offset from the upper left hand corner of the logical \r
+  /// window to position the indexed image.\r
+  ///\r
+  UINT16                    OffsetX;\r
+  ///\r
+  /// The Y offset from the upper left hand corner of the logical \r
+  /// window to position the indexed image.\r
+  ///\r
+  UINT16                    OffsetY;\r
+  ///\r
+  /// The image to display at the specified offset from the upper left \r
+  /// hand corner of the logical window.\r
+  ///\r
+  EFI_IMAGE_ID              ImageId;\r
+  ///\r
+  /// The number of milliseconds to delay after displaying the indexed \r
+  /// image and before continuing on to the next linked image.  If value \r
+  /// is zero, no delay.\r
+  ///\r
+  UINT16                    Delay;\r
+} EFI_HII_ANIMATION_CELL;\r
+\r
+///\r
+/// An animation block to describe an animation sequence that does not cycle, and\r
+/// where one image is simply displayed over the previous image.\r
+///\r
+typedef struct _EFI_HII_AIBT_OVERLAY_IMAGES_BLOCK {\r
+  ///\r
+  /// This is image that is to be reference by the image protocols, if the \r
+  /// animation function is not supported or disabled. This image can \r
+  /// be one particular image from the animation sequence (if any one \r
+  /// of the animation frames has a complete image) or an alternate \r
+  /// image that can be displayed alone. If the value is zero, no image \r
+  /// is displayed.\r
+  ///\r
+  EFI_IMAGE_ID            DftImageId;\r
+  ///\r
+  /// The overall width of the set of images (logical window width).\r
+  ///\r
+  UINT16                  Width;\r
+  ///\r
+  /// The overall height of the set of images (logical window height).\r
+  ///\r
+  UINT16                  Height;\r
+  ///\r
+  /// The number of EFI_HII_ANIMATION_CELL contained in the \r
+  /// animation sequence.\r
+  ///\r
+  UINT16                  CellCount;\r
+  ///\r
+  /// An array of CellCount animation cells.\r
+  ///\r
+  EFI_HII_ANIMATION_CELL  AnimationCell[1];\r
+} EFI_HII_AIBT_OVERLAY_IMAGES_BLOCK;\r
+\r
+///\r
+/// An animation block to describe an animation sequence that does not cycle,\r
+/// and where the logical window is cleared to the specified color before \r
+/// the next image is displayed.\r
+///\r
+typedef struct _EFI_HII_AIBT_CLEAR_IMAGES_BLOCK {\r
+  ///\r
+  /// This is image that is to be reference by the image protocols, if the \r
+  /// animation function is not supported or disabled. This image can \r
+  /// be one particular image from the animation sequence (if any one \r
+  /// of the animation frames has a complete image) or an alternate \r
+  /// image that can be displayed alone. If the value is zero, no image \r
+  /// is displayed.\r
+  ///\r
+  EFI_IMAGE_ID       DftImageId;\r
+  ///\r
+  /// The overall width of the set of images (logical window width).\r
+  ///\r
+  UINT16             Width;\r
+  ///\r
+  /// The overall height of the set of images (logical window height).\r
+  ///\r
+  UINT16             Height;\r
+  ///\r
+  /// The number of EFI_HII_ANIMATION_CELL contained in the \r
+  /// animation sequence.\r
+  ///\r
+  UINT16             CellCount;\r
+  ///\r
+  /// The color to clear the logical window to before displaying the \r
+  /// indexed image.\r
+  ///\r
+  EFI_HII_RGB_PIXEL  BackgndColor;\r
+  ///\r
+  /// An array of CellCount animation cells.\r
+  ///\r
+  EFI_HII_ANIMATION_CELL AnimationCell[1];\r
+} EFI_HII_AIBT_CLEAR_IMAGES_BLOCK;\r
+\r
+///\r
+/// An animation block to describe an animation sequence that does not cycle,\r
+/// and where the screen is restored to the original state before the next \r
+/// image is displayed.\r
+///\r
+typedef struct _EFI_HII_AIBT_RESTORE_SCRN_BLOCK {\r
+  ///\r
+  /// This is image that is to be reference by the image protocols, if the \r
+  /// animation function is not supported or disabled. This image can \r
+  /// be one particular image from the animation sequence (if any one \r
+  /// of the animation frames has a complete image) or an alternate \r
+  /// image that can be displayed alone. If the value is zero, no image \r
+  /// is displayed.\r
+  ///\r
+  EFI_IMAGE_ID            DftImageId;\r
+  ///\r
+  /// The overall width of the set of images (logical window width).\r
+  ///\r
+  UINT16                  Width;\r
+  ///\r
+  /// The overall height of the set of images (logical window height).\r
+  ///\r
+  UINT16                  Height;\r
+  ///\r
+  /// The number of EFI_HII_ANIMATION_CELL contained in the \r
+  /// animation sequence.\r
+  ///\r
+  UINT16                  CellCount;\r
+  ///\r
+  /// An array of CellCount animation cells.\r
+  ///\r
+  EFI_HII_ANIMATION_CELL  AnimationCell[1];\r
+} EFI_HII_AIBT_RESTORE_SCRN_BLOCK;\r
+\r
+///\r
+/// An animation block to describe an animation sequence that continuously cycles,\r
+/// and where one image is simply displayed over the previous image.\r
+///\r
+typedef EFI_HII_AIBT_OVERLAY_IMAGES_BLOCK  EFI_HII_AIBT_OVERLAY_IMAGES_LOOP_BLOCK;\r
+\r
+///\r
+/// An animation block to describe an animation sequence that continuously cycles,\r
+/// and where the logical window is cleared to the specified color before \r
+/// the next image is displayed.\r
+///\r
+typedef EFI_HII_AIBT_CLEAR_IMAGES_BLOCK    EFI_HII_AIBT_CLEAR_IMAGES_LOOP_BLOCK;\r
+\r
+///\r
+/// An animation block to describe an animation sequence that continuously cycles,\r
+/// and where the screen is restored to the original state before \r
+/// the next image is displayed.\r
+///\r
+typedef EFI_HII_AIBT_RESTORE_SCRN_BLOCK    EFI_HII_AIBT_RESTORE_SCRN_LOOP_BLOCK;\r
+\r
+///\r
+/// Assigns a new character value to a previously defined animation sequence.\r
+///\r
+typedef struct _EFI_HII_AIBT_DUPLICATE_BLOCK {\r
+  ///\r
+  /// The previously defined animation ID with the exact same \r
+  /// animation information.\r
+  ///\r
+  EFI_ANIMATION_ID  AnimationId;\r
+} EFI_HII_AIBT_DUPLICATE_BLOCK;\r
+\r
+///\r
+/// Skips animation IDs.\r
+///\r
+typedef struct _EFI_HII_AIBT_SKIP1_BLOCK {\r
+  ///\r
+  /// The unsigned 8-bit value to add to AnimationIdCurrent.\r
+  ///\r
+  UINT8  SkipCount;\r
+} EFI_HII_AIBT_SKIP1_BLOCK;\r
+\r
+///\r
+/// Skips animation IDs.\r
+///\r
+typedef struct _EFI_HII_AIBT_SKIP2_BLOCK {\r
+  ///\r
+  /// The unsigned 16-bit value to add to AnimationIdCurrent.\r
+  ///\r
+  UINT16  SkipCount;\r
+} EFI_HII_AIBT_SKIP2_BLOCK;\r
+\r
 #pragma pack()\r
 \r
 \r
@@ -1591,4 +2126,10 @@ typedef struct {
 ///\r
 #define STRING_TOKEN(t) t\r
 \r
+///\r
+/// IMAGE_TOKEN is not defined in UEFI specification. But it is placed\r
+/// here for the easy access by C files and VFR source files.\r
+///\r
+#define IMAGE_TOKEN(t) t\r
+\r
 #endif\r