/** @file
  This file defines the encoding for the VFR (Visual Form Representation) language.
  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 - 2018, Intel Corporation. All rights reserved.<BR>
(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent

  @par Revision Reference:
  These definitions are from UEFI 2.1 and 2.2.

**/

#ifndef __UEFI_INTERNAL_FORMREPRESENTATION_H__
#define __UEFI_INTERNAL_FORMREPRESENTATION_H__

#include <Guid/HiiFormMapMethodGuid.h>

///
/// The following types are currently defined:
///
typedef VOID    *EFI_HII_HANDLE;
typedef CHAR16  *EFI_STRING;
typedef UINT16  EFI_IMAGE_ID;
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
//

///
/// The header found at the start of each package list.
///
typedef struct {
  EFI_GUID    PackageListGuid;
  UINT32      PackageLength;
} EFI_HII_PACKAGE_LIST_HEADER;

///
/// The header found at the start of each package.
///
typedef struct {
  UINT32    Length : 24;
  UINT32    Type   : 8;
  // UINT8  Data[...];
} EFI_HII_PACKAGE_HEADER;

//
// Value of HII package type
//
#define EFI_HII_PACKAGE_TYPE_ALL           0x00
#define EFI_HII_PACKAGE_TYPE_GUID          0x01
#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

//
// Definitions for Simplified Font Package
//

///
/// 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;
  UINT16                    NumberOfWideGlyphs;
  // EFI_NARROW_GLYPH       NarrowGlyphs[];
  // EFI_WIDE_GLYPH         WideGlyphs[];
} EFI_HII_SIMPLE_FONT_PACKAGE_HDR;

//
// 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
#define EFI_HII_FONT_STYLE_EMBOSS     0x00010000
#define EFI_HII_FONT_STYLE_OUTLINE    0x00020000
#define EFI_HII_FONT_STYLE_SHADOW     0x00040000
#define EFI_HII_FONT_STYLE_UNDERLINE  0x00080000
#define EFI_HII_FONT_STYLE_DBL_UNDER  0x00100000

typedef struct _EFI_HII_GLYPH_INFO {
  UINT16    Width;
  UINT16    Height;
  INT16     OffsetX;
  INT16     OffsetY;
  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;
  UINT32                    GlyphBlockOffset;
  EFI_HII_GLYPH_INFO        Cell;
  EFI_HII_FONT_STYLE        FontStyle;
  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
#define EFI_HII_GIBT_GLYPH_DEFAULT      0x12
#define EFI_HII_GIBT_GLYPHS_DEFAULT     0x13
#define EFI_HII_GIBT_GLYPH_VARIABILITY  0x14
#define EFI_HII_GIBT_DUPLICATE          0x20
#define EFI_HII_GIBT_SKIP2              0x21
#define EFI_HII_GIBT_SKIP1              0x22
#define EFI_HII_GIBT_DEFAULTS           0x23
#define EFI_HII_GIBT_EXT1               0x30
#define EFI_HII_GIBT_EXT2               0x31
#define EFI_HII_GIBT_EXT4               0x32

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;
} EFI_HII_GIBT_DEFAULTS_BLOCK;

typedef struct _EFI_HII_GIBT_DUPLICATE_BLOCK {
  EFI_HII_GLYPH_BLOCK    Header;
  CHAR16                 CharValue;
} EFI_HII_GIBT_DUPLICATE_BLOCK;

typedef struct _EFI_GLYPH_GIBT_END_BLOCK {
  EFI_HII_GLYPH_BLOCK    Header;
} EFI_GLYPH_GIBT_END_BLOCK;

typedef struct _EFI_HII_GIBT_EXT1_BLOCK {
  EFI_HII_GLYPH_BLOCK    Header;
  UINT8                  BlockType2;
  UINT8                  Length;
} EFI_HII_GIBT_EXT1_BLOCK;

typedef struct _EFI_HII_GIBT_EXT2_BLOCK {
  EFI_HII_GLYPH_BLOCK    Header;
  UINT8                  BlockType2;
  UINT16                 Length;
} EFI_HII_GIBT_EXT2_BLOCK;

typedef struct _EFI_HII_GIBT_EXT4_BLOCK {
  EFI_HII_GLYPH_BLOCK    Header;
  UINT8                  BlockType2;
  UINT32                 Length;
} 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];
} 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];
} EFI_HII_GIBT_GLYPHS_BLOCK;

typedef struct _EFI_HII_GIBT_GLYPH_DEFAULT_BLOCK {
  EFI_HII_GLYPH_BLOCK    Header;
  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];
} EFI_HII_GIBT_GLYPHS_DEFAULT_BLOCK;

typedef struct _EFI_HII_GIBT_VARIABILITY_BLOCK {
  EFI_HII_GLYPH_BLOCK    Header;
  EFI_HII_GLYPH_INFO     Cell;
  UINT8                  GlyphPackInBits;
  UINT8                  BitmapData[1];
} EFI_HII_GIBT_VARIABILITY_BLOCK;

typedef struct _EFI_HII_GIBT_SKIP1_BLOCK {
  EFI_HII_GLYPH_BLOCK    Header;
  UINT8                  SkipCount;
} EFI_HII_GIBT_SKIP1_BLOCK;

typedef struct _EFI_HII_GIBT_SKIP2_BLOCK {
  EFI_HII_GLYPH_BLOCK    Header;
  UINT16                 SkipCount;
} EFI_HII_GIBT_SKIP2_BLOCK;

//
// Definitions for Device Path Package
// Section 27.3.4
//

///
/// 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_HDR;

//
// 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;
  // Data per GUID definition may follow
} EFI_HII_GUID_PACKAGE_HDR;

//
// Definitions for String Package
// Section 27.3.6
//

#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;
  UINT32                    StringInfoOffset;
  CHAR16                    LanguageWindow[16];
  EFI_STRING_ID             LanguageName;
  CHAR8                     Language[1];
} EFI_HII_STRING_PACKAGE_HDR;

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
#define EFI_HII_SIBT_STRINGS_SCSU       0x12
#define EFI_HII_SIBT_STRINGS_SCSU_FONT  0x13
#define EFI_HII_SIBT_STRING_UCS2        0x14
#define EFI_HII_SIBT_STRING_UCS2_FONT   0x15
#define EFI_HII_SIBT_STRINGS_UCS2       0x16
#define EFI_HII_SIBT_STRINGS_UCS2_FONT  0x17
#define EFI_HII_SIBT_DUPLICATE          0x20
#define EFI_HII_SIBT_SKIP2              0x21
#define EFI_HII_SIBT_SKIP1              0x22
#define EFI_HII_SIBT_EXT1               0x30
#define EFI_HII_SIBT_EXT2               0x31
#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;
} EFI_HII_SIBT_DUPLICATE_BLOCK;

typedef struct _EFI_HII_SIBT_END_BLOCK {
  EFI_HII_STRING_BLOCK    Header;
} EFI_HII_SIBT_END_BLOCK;

typedef struct _EFI_HII_SIBT_EXT1_BLOCK {
  EFI_HII_STRING_BLOCK    Header;
  UINT8                   BlockType2;
  UINT8                   Length;
} EFI_HII_SIBT_EXT1_BLOCK;

typedef struct _EFI_HII_SIBT_EXT2_BLOCK {
  EFI_HII_STRING_BLOCK    Header;
  UINT8                   BlockType2;
  UINT16                  Length;
} EFI_HII_SIBT_EXT2_BLOCK;

typedef struct _EFI_HII_SIBT_EXT4_BLOCK {
  EFI_HII_STRING_BLOCK    Header;
  UINT8                   BlockType2;
  UINT32                  Length;
} EFI_HII_SIBT_EXT4_BLOCK;

typedef struct _EFI_HII_SIBT_FONT_BLOCK {
  EFI_HII_SIBT_EXT2_BLOCK    Header;
  UINT8                      FontId;
  UINT16                     FontSize;
  EFI_HII_FONT_STYLE         FontStyle;
  CHAR16                     FontName[1];
} EFI_HII_SIBT_FONT_BLOCK;

typedef struct _EFI_HII_SIBT_SKIP1_BLOCK {
  EFI_HII_STRING_BLOCK    Header;
  UINT8                   SkipCount;
} EFI_HII_SIBT_SKIP1_BLOCK;

typedef struct _EFI_HII_SIBT_SKIP2_BLOCK {
  EFI_HII_STRING_BLOCK    Header;
  UINT16                  SkipCount;
} EFI_HII_SIBT_SKIP2_BLOCK;

typedef struct _EFI_HII_SIBT_STRING_SCSU_BLOCK {
  EFI_HII_STRING_BLOCK    Header;
  UINT8                   StringText[1];
} EFI_HII_SIBT_STRING_SCSU_BLOCK;

typedef struct _EFI_HII_SIBT_STRING_SCSU_FONT_BLOCK {
  EFI_HII_STRING_BLOCK    Header;
  UINT8                   FontIdentifier;
  UINT8                   StringText[1];
} EFI_HII_SIBT_STRING_SCSU_FONT_BLOCK;

typedef struct _EFI_HII_SIBT_STRINGS_SCSU_BLOCK {
  EFI_HII_STRING_BLOCK    Header;
  UINT16                  StringCount;
  UINT8                   StringText[1];
} EFI_HII_SIBT_STRINGS_SCSU_BLOCK;

typedef struct _EFI_HII_SIBT_STRINGS_SCSU_FONT_BLOCK {
  EFI_HII_STRING_BLOCK    Header;
  UINT8                   FontIdentifier;
  UINT16                  StringCount;
  UINT8                   StringText[1];
} EFI_HII_SIBT_STRINGS_SCSU_FONT_BLOCK;

typedef struct _EFI_HII_SIBT_STRING_UCS2_BLOCK {
  EFI_HII_STRING_BLOCK    Header;
  CHAR16                  StringText[1];
} EFI_HII_SIBT_STRING_UCS2_BLOCK;

typedef struct _EFI_HII_SIBT_STRING_UCS2_FONT_BLOCK {
  EFI_HII_STRING_BLOCK    Header;
  UINT8                   FontIdentifier;
  CHAR16                  StringText[1];
} EFI_HII_SIBT_STRING_UCS2_FONT_BLOCK;

typedef struct _EFI_HII_SIBT_STRINGS_UCS2_BLOCK {
  EFI_HII_STRING_BLOCK    Header;
  UINT16                  StringCount;
  CHAR16                  StringText[1];
} EFI_HII_SIBT_STRINGS_UCS2_BLOCK;

typedef struct _EFI_HII_SIBT_STRINGS_UCS2_FONT_BLOCK {
  EFI_HII_STRING_BLOCK    Header;
  UINT8                   FontIdentifier;
  UINT16                  StringCount;
  CHAR16                  StringText[1];
} EFI_HII_SIBT_STRINGS_UCS2_FONT_BLOCK;

//
// Definitions for Image Package
// Section 27.3.7
//

typedef struct _EFI_HII_IMAGE_PACKAGE_HDR {
  EFI_HII_PACKAGE_HEADER    Header;
  UINT32                    ImageInfoOffset;
  UINT32                    PaletteInfoOffset;
} EFI_HII_IMAGE_PACKAGE_HDR;

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
#define EFI_HII_IIBT_IMAGE_4BIT         0x12
#define EFI_HII_IIBT_IMAGE_4BIT_TRANS   0x13
#define EFI_HII_IIBT_IMAGE_8BIT         0x14
#define EFI_HII_IIBT_IMAGE_8BIT_TRANS   0x15
#define EFI_HII_IIBT_IMAGE_24BIT        0x16
#define EFI_HII_IIBT_IMAGE_24BIT_TRANS  0x17
#define EFI_HII_IIBT_IMAGE_JPEG         0x18
#define EFI_HII_IIBT_IMAGE_PNG          0x19
#define EFI_HII_IIBT_DUPLICATE          0x20
#define EFI_HII_IIBT_SKIP2              0x21
#define EFI_HII_IIBT_SKIP1              0x22
#define EFI_HII_IIBT_EXT1               0x30
#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;

typedef struct _EFI_HII_IIBT_EXT1_BLOCK {
  EFI_HII_IMAGE_BLOCK    Header;
  UINT8                  BlockType2;
  UINT8                  Length;
} EFI_HII_IIBT_EXT1_BLOCK;

typedef struct _EFI_HII_IIBT_EXT2_BLOCK {
  EFI_HII_IMAGE_BLOCK    Header;
  UINT8                  BlockType2;
  UINT16                 Length;
} EFI_HII_IIBT_EXT2_BLOCK;

typedef struct _EFI_HII_IIBT_EXT4_BLOCK {
  EFI_HII_IMAGE_BLOCK    Header;
  UINT8                  BlockType2;
  UINT32                 Length;
} EFI_HII_IIBT_EXT4_BLOCK;

typedef struct _EFI_HII_IIBT_IMAGE_1BIT_BASE {
  UINT16    Width;
  UINT16    Height;
  UINT8     Data[1];
} EFI_HII_IIBT_IMAGE_1BIT_BASE;

typedef struct _EFI_HII_IIBT_IMAGE_1BIT_BLOCK {
  EFI_HII_IMAGE_BLOCK             Header;
  UINT8                           PaletteIndex;
  EFI_HII_IIBT_IMAGE_1BIT_BASE    Bitmap;
} EFI_HII_IIBT_IMAGE_1BIT_BLOCK;

typedef struct _EFI_HII_IIBT_IMAGE_1BIT_TRANS_BLOCK {
  EFI_HII_IMAGE_BLOCK             Header;
  UINT8                           PaletteIndex;
  EFI_HII_IIBT_IMAGE_1BIT_BASE    Bitmap;
} EFI_HII_IIBT_IMAGE_1BIT_TRANS_BLOCK;

typedef struct _EFI_HII_RGB_PIXEL {
  UINT8    b;
  UINT8    g;
  UINT8    r;
} EFI_HII_RGB_PIXEL;

typedef struct _EFI_HII_IIBT_IMAGE_24BIT_BASE {
  UINT16               Width;
  UINT16               Height;
  EFI_HII_RGB_PIXEL    Bitmap[1];
} EFI_HII_IIBT_IMAGE_24BIT_BASE;

typedef struct _EFI_HII_IIBT_IMAGE_24BIT_BLOCK {
  EFI_HII_IMAGE_BLOCK              Header;
  EFI_HII_IIBT_IMAGE_24BIT_BASE    Bitmap;
} EFI_HII_IIBT_IMAGE_24BIT_BLOCK;

typedef struct _EFI_HII_IIBT_IMAGE_24BIT_TRANS_BLOCK {
  EFI_HII_IMAGE_BLOCK              Header;
  EFI_HII_IIBT_IMAGE_24BIT_BASE    Bitmap;
} EFI_HII_IIBT_IMAGE_24BIT_TRANS_BLOCK;

typedef struct _EFI_HII_IIBT_IMAGE_4BIT_BASE {
  UINT16    Width;
  UINT16    Height;
  UINT8     Data[1];
} EFI_HII_IIBT_IMAGE_4BIT_BASE;

typedef struct _EFI_HII_IIBT_IMAGE_4BIT_BLOCK {
  EFI_HII_IMAGE_BLOCK             Header;
  UINT8                           PaletteIndex;
  EFI_HII_IIBT_IMAGE_4BIT_BASE    Bitmap;
} EFI_HII_IIBT_IMAGE_4BIT_BLOCK;

typedef struct _EFI_HII_IIBT_IMAGE_4BIT_TRANS_BLOCK {
  EFI_HII_IMAGE_BLOCK             Header;
  UINT8                           PaletteIndex;
  EFI_HII_IIBT_IMAGE_4BIT_BASE    Bitmap;
} EFI_HII_IIBT_IMAGE_4BIT_TRANS_BLOCK;

typedef struct _EFI_HII_IIBT_IMAGE_8BIT_BASE {
  UINT16    Width;
  UINT16    Height;
  UINT8     Data[1];
} EFI_HII_IIBT_IMAGE_8BIT_BASE;

typedef struct _EFI_HII_IIBT_IMAGE_8BIT_PALETTE_BLOCK {
  EFI_HII_IMAGE_BLOCK             Header;
  UINT8                           PaletteIndex;
  EFI_HII_IIBT_IMAGE_8BIT_BASE    Bitmap;
} EFI_HII_IIBT_IMAGE_8BIT_BLOCK;

typedef struct _EFI_HII_IIBT_IMAGE_8BIT_TRANS_BLOCK {
  EFI_HII_IMAGE_BLOCK             Header;
  UINT8                           PaletteIndex;
  EFI_HII_IIBT_IMAGE_8BIT_BASE    Bitmap;
} EFI_HII_IIBT_IMAGE_8BIT_TRAN_BLOCK;

typedef struct _EFI_HII_IIBT_DUPLICATE_BLOCK {
  EFI_HII_IMAGE_BLOCK    Header;
  EFI_IMAGE_ID           ImageId;
} EFI_HII_IIBT_DUPLICATE_BLOCK;

typedef struct _EFI_HII_IIBT_JPEG_BLOCK {
  EFI_HII_IMAGE_BLOCK    Header;
  UINT32                 Size;
  UINT8                  Data[1];
} EFI_HII_IIBT_JPEG_BLOCK;

typedef struct _EFI_HII_IIBT_PNG_BLOCK {
  EFI_HII_IMAGE_BLOCK    Header;
  UINT32                 Size;
  UINT8                  Data[1];
} EFI_HII_IIBT_PNG_BLOCK;

typedef struct _EFI_HII_IIBT_SKIP1_BLOCK {
  EFI_HII_IMAGE_BLOCK    Header;
  UINT8                  SkipCount;
} EFI_HII_IIBT_SKIP1_BLOCK;

typedef struct _EFI_HII_IIBT_SKIP2_BLOCK {
  EFI_HII_IMAGE_BLOCK    Header;
  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;

typedef struct _EFI_HII_IMAGE_PALETTE_INFO {
  UINT16               PaletteSize;
  EFI_HII_RGB_PIXEL    PaletteValue[1];
} EFI_HII_IMAGE_PALETTE_INFO;

//
// Definitions for Forms Package
// Section 27.3.8
//

///
/// 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_HDR;

typedef struct {
  UINT8    Hour;
  UINT8    Minute;
  UINT8    Second;
} EFI_HII_TIME;

typedef struct {
  UINT16    Year;
  UINT8     Month;
  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;
  UINT32           u32;
  UINT64           u64;
  BOOLEAN          b;
  EFI_HII_TIME     time;
  EFI_HII_DATE     date;
  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;

//
// IFR Opcodes
//
#define EFI_IFR_FORM_OP                 0x01
#define EFI_IFR_SUBTITLE_OP             0x02
#define EFI_IFR_TEXT_OP                 0x03
#define EFI_IFR_IMAGE_OP                0x04
#define EFI_IFR_ONE_OF_OP               0x05
#define EFI_IFR_CHECKBOX_OP             0x06
#define EFI_IFR_NUMERIC_OP              0x07
#define EFI_IFR_PASSWORD_OP             0x08
#define EFI_IFR_ONE_OF_OPTION_OP        0x09
#define EFI_IFR_SUPPRESS_IF_OP          0x0A
#define EFI_IFR_LOCKED_OP               0x0B
#define EFI_IFR_ACTION_OP               0x0C
#define EFI_IFR_RESET_BUTTON_OP         0x0D
#define EFI_IFR_FORM_SET_OP             0x0E
#define EFI_IFR_REF_OP                  0x0F
#define EFI_IFR_NO_SUBMIT_IF_OP         0x10
#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_VAL_LIST_OP       0x14
#define EFI_IFR_AND_OP                  0x15
#define EFI_IFR_OR_OP                   0x16
#define EFI_IFR_NOT_OP                  0x17
#define EFI_IFR_RULE_OP                 0x18
#define EFI_IFR_GRAY_OUT_IF_OP          0x19
#define EFI_IFR_DATE_OP                 0x1A
#define EFI_IFR_TIME_OP                 0x1B
#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
#define EFI_IFR_VARSTORE_EFI_OP         0x26
#define EFI_IFR_VARSTORE_DEVICE_OP      0x27
#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
#define EFI_IFR_GREATER_EQUAL_OP        0x32
#define EFI_IFR_LESS_THAN_OP            0x33
#define EFI_IFR_LESS_EQUAL_OP           0x34
#define EFI_IFR_BITWISE_AND_OP          0x35
#define EFI_IFR_BITWISE_OR_OP           0x36
#define EFI_IFR_BITWISE_NOT_OP          0x37
#define EFI_IFR_SHIFT_LEFT_OP           0x38
#define EFI_IFR_SHIFT_RIGHT_OP          0x39
#define EFI_IFR_ADD_OP                  0x3A
#define EFI_IFR_SUBTRACT_OP             0x3B
#define EFI_IFR_MULTIPLY_OP             0x3C
#define EFI_IFR_DIVIDE_OP               0x3D
#define EFI_IFR_MODULO_OP               0x3E
#define EFI_IFR_RULE_REF_OP             0x3F
#define EFI_IFR_QUESTION_REF1_OP        0x40
#define EFI_IFR_QUESTION_REF2_OP        0x41
#define EFI_IFR_UINT8_OP                0x42
#define EFI_IFR_UINT16_OP               0x43
#define EFI_IFR_UINT32_OP               0x44
#define EFI_IFR_UINT64_OP               0x45
#define EFI_IFR_TRUE_OP                 0x46
#define EFI_IFR_FALSE_OP                0x47
#define EFI_IFR_TO_UINT_OP              0x48
#define EFI_IFR_TO_STRING_OP            0x49
#define EFI_IFR_TO_BOOLEAN_OP           0x4A
#define EFI_IFR_MID_OP                  0x4B
#define EFI_IFR_FIND_OP                 0x4C
#define EFI_IFR_TOKEN_OP                0x4D
#define EFI_IFR_STRING_REF1_OP          0x4E
#define EFI_IFR_STRING_REF2_OP          0x4F
#define EFI_IFR_CONDITIONAL_OP          0x50
#define EFI_IFR_QUESTION_REF3_OP        0x51
#define EFI_IFR_ZERO_OP                 0x52
#define EFI_IFR_ONE_OP                  0x53
#define EFI_IFR_ONES_OP                 0x54
#define EFI_IFR_UNDEFINED_OP            0x55
#define EFI_IFR_LENGTH_OP               0x56
#define EFI_IFR_DUP_OP                  0x57
#define EFI_IFR_THIS_OP                 0x58
#define EFI_IFR_SPAN_OP                 0x59
#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;
  UINT8    Length : 7;
  UINT8    Scope  : 1;
} EFI_IFR_OP_HEADER;

typedef struct _EFI_IFR_STATEMENT_HEADER {
  EFI_STRING_ID    Prompt;
  EFI_STRING_ID    Help;
} EFI_IFR_STATEMENT_HEADER;

typedef struct _EFI_IFR_QUESTION_HEADER {
  EFI_IFR_STATEMENT_HEADER    Header;
  EFI_QUESTION_ID             QuestionId;
  EFI_VARSTORE_ID             VarStoreId;
  union {
    EFI_STRING_ID    VarName;
    UINT16           VarOffset;
  }                        VarStoreInfo;
  UINT8                       Flags;
} EFI_IFR_QUESTION_HEADER;

//
// 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_REST_STYLE          0x20
#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
#define EFI_HII_DEFAULT_CLASS_PLATFORM_BEGIN  0x4000
#define EFI_HII_DEFAULT_CLASS_PLATFORM_END    0x7fff
#define EFI_HII_DEFAULT_CLASS_HARDWARE_BEGIN  0x8000
#define EFI_HII_DEFAULT_CLASS_HARDWARE_END    0xbfff
#define EFI_HII_DEFAULT_CLASS_FIRMWARE_BEGIN  0xc000
#define EFI_HII_DEFAULT_CLASS_FIRMWARE_END    0xffff

typedef struct _EFI_IFR_VARSTORE {
  EFI_IFR_OP_HEADER    Header;
  EFI_GUID             Guid;
  EFI_VARSTORE_ID      VarStoreId;
  UINT16               Size;
  UINT8                Name[1];
} EFI_IFR_VARSTORE;

typedef struct _EFI_IFR_VARSTORE_EFI {
  EFI_IFR_OP_HEADER    Header;
  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 {
  EFI_IFR_OP_HEADER    Header;
  EFI_VARSTORE_ID      VarStoreId;
  EFI_GUID             Guid;
} EFI_IFR_VARSTORE_NAME_VALUE;

typedef struct _EFI_IFR_FORM_SET {
  EFI_IFR_OP_HEADER    Header;
  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 {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_END;

typedef struct _EFI_IFR_FORM {
  EFI_IFR_OP_HEADER    Header;
  UINT16               FormId;
  EFI_STRING_ID        FormTitle;
} EFI_IFR_FORM;

typedef struct _EFI_IFR_IMAGE {
  EFI_IFR_OP_HEADER    Header;
  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;

typedef struct _EFI_IFR_RULE {
  EFI_IFR_OP_HEADER    Header;
  UINT8                RuleId;
} EFI_IFR_RULE;

typedef struct _EFI_IFR_DEFAULT {
  EFI_IFR_OP_HEADER     Header;
  UINT16                DefaultId;
  UINT8                 Type;
  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;

typedef struct _EFI_IFR_SUBTITLE {
  EFI_IFR_OP_HEADER           Header;
  EFI_IFR_STATEMENT_HEADER    Statement;
  UINT8                       Flags;
} EFI_IFR_SUBTITLE;

#define EFI_IFR_FLAGS_HORIZONTAL  0x01

typedef struct _EFI_IFR_CHECKBOX {
  EFI_IFR_OP_HEADER          Header;
  EFI_IFR_QUESTION_HEADER    Question;
  UINT8                      Flags;
} EFI_IFR_CHECKBOX;

#define EFI_IFR_CHECKBOX_DEFAULT      0x01
#define EFI_IFR_CHECKBOX_DEFAULT_MFG  0x02

typedef struct _EFI_IFR_TEXT {
  EFI_IFR_OP_HEADER           Header;
  EFI_IFR_STATEMENT_HEADER    Statement;
  EFI_STRING_ID               TextTwo;
} EFI_IFR_TEXT;

typedef struct _EFI_IFR_REF {
  EFI_IFR_OP_HEADER          Header;
  EFI_IFR_QUESTION_HEADER    Question;
  EFI_FORM_ID                FormId;
} EFI_IFR_REF;

typedef struct _EFI_IFR_REF2 {
  EFI_IFR_OP_HEADER          Header;
  EFI_IFR_QUESTION_HEADER    Question;
  EFI_FORM_ID                FormId;
  EFI_QUESTION_ID            QuestionId;
} EFI_IFR_REF2;

typedef struct _EFI_IFR_REF3 {
  EFI_IFR_OP_HEADER          Header;
  EFI_IFR_QUESTION_HEADER    Question;
  EFI_FORM_ID                FormId;
  EFI_QUESTION_ID            QuestionId;
  EFI_GUID                   FormSetId;
} EFI_IFR_REF3;

typedef struct _EFI_IFR_REF4 {
  EFI_IFR_OP_HEADER          Header;
  EFI_IFR_QUESTION_HEADER    Question;
  EFI_FORM_ID                FormId;
  EFI_QUESTION_ID            QuestionId;
  EFI_GUID                   FormSetId;
  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_STATEMENT_HEADER    Statement;
  EFI_DEFAULT_ID              DefaultId;
} EFI_IFR_RESET_BUTTON;

typedef struct _EFI_IFR_ACTION {
  EFI_IFR_OP_HEADER          Header;
  EFI_IFR_QUESTION_HEADER    Question;
  EFI_STRING_ID              QuestionConfig;
} EFI_IFR_ACTION;

typedef struct _EFI_IFR_ACTION_1 {
  EFI_IFR_OP_HEADER          Header;
  EFI_IFR_QUESTION_HEADER    Question;
} EFI_IFR_ACTION_1;

typedef struct _EFI_IFR_DATE {
  EFI_IFR_OP_HEADER          Header;
  EFI_IFR_QUESTION_HEADER    Question;
  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

#define EFI_QF_DATE_STORAGE         0x30
#define     QF_DATE_STORAGE_NORMAL  0x00
#define     QF_DATE_STORAGE_TIME    0x10
#define     QF_DATE_STORAGE_WAKEUP  0x20

typedef union {
  struct {
    UINT8    MinValue;
    UINT8    MaxValue;
    UINT8    Step;
  } u8;
  struct {
    UINT16    MinValue;
    UINT16    MaxValue;
    UINT16    Step;
  } u16;
  struct {
    UINT32    MinValue;
    UINT32    MaxValue;
    UINT32    Step;
  } u32;
  struct {
    UINT64    MinValue;
    UINT64    MaxValue;
    UINT64    Step;
  } u64;
} MINMAXSTEP_DATA;

typedef struct _EFI_IFR_NUMERIC {
  EFI_IFR_OP_HEADER          Header;
  EFI_IFR_QUESTION_HEADER    Question;
  UINT8                      Flags;
  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_DISPLAY             0x30
#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;
  EFI_IFR_QUESTION_HEADER    Question;
  UINT8                      Flags;
  MINMAXSTEP_DATA            data;
} EFI_IFR_ONE_OF;

typedef struct _EFI_IFR_STRING {
  EFI_IFR_OP_HEADER          Header;
  EFI_IFR_QUESTION_HEADER    Question;
  UINT8                      MinSize;
  UINT8                      MaxSize;
  UINT8                      Flags;
} EFI_IFR_STRING;

#define EFI_IFR_STRING_MULTI_LINE  0x01

typedef struct _EFI_IFR_PASSWORD {
  EFI_IFR_OP_HEADER          Header;
  EFI_IFR_QUESTION_HEADER    Question;
  UINT16                     MinSize;
  UINT16                     MaxSize;
} EFI_IFR_PASSWORD;

typedef struct _EFI_IFR_ORDERED_LIST {
  EFI_IFR_OP_HEADER          Header;
  EFI_IFR_QUESTION_HEADER    Question;
  UINT8                      MaxContainers;
  UINT8                      Flags;
} EFI_IFR_ORDERED_LIST;

#define EFI_IFR_UNIQUE_SET    0x01
#define EFI_IFR_NO_EMPTY_SET  0x02

typedef struct _EFI_IFR_TIME {
  EFI_IFR_OP_HEADER          Header;
  EFI_IFR_QUESTION_HEADER    Question;
  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

typedef struct _EFI_IFR_DISABLE_IF {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_DISABLE_IF;

typedef struct _EFI_IFR_SUPPRESS_IF {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_SUPPRESS_IF;

typedef struct _EFI_IFR_GRAY_OUT_IF {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_GRAY_OUT_IF;

typedef struct _EFI_IFR_INCONSISTENT_IF {
  EFI_IFR_OP_HEADER    Header;
  EFI_STRING_ID        Error;
} EFI_IFR_INCONSISTENT_IF;

typedef struct _EFI_IFR_NO_SUBMIT_IF {
  EFI_IFR_OP_HEADER    Header;
  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;
} EFI_IFR_REFRESH;

typedef struct _EFI_IFR_VARSTORE_DEVICE {
  EFI_IFR_OP_HEADER    Header;
  EFI_STRING_ID        DevicePath;
} EFI_IFR_VARSTORE_DEVICE;

typedef struct _EFI_IFR_ONE_OF_OPTION {
  EFI_IFR_OP_HEADER     Header;
  EFI_STRING_ID         Option;
  UINT8                 Flags;
  UINT8                 Type;
  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
#define EFI_IFR_TYPE_NUM_SIZE_64  0x03
#define EFI_IFR_TYPE_BOOLEAN      0x04
#define EFI_IFR_TYPE_TIME         0x05
#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

typedef struct _EFI_IFR_GUID {
  EFI_IFR_OP_HEADER    Header;
  EFI_GUID             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;

typedef struct _EFI_IFR_EQ_ID_ID {
  EFI_IFR_OP_HEADER    Header;
  EFI_QUESTION_ID      QuestionId1;
  EFI_QUESTION_ID      QuestionId2;
} EFI_IFR_EQ_ID_ID;

typedef struct _EFI_IFR_EQ_ID_VAL {
  EFI_IFR_OP_HEADER    Header;
  EFI_QUESTION_ID      QuestionId;
  UINT16               Value;
} EFI_IFR_EQ_ID_VAL;

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_VAL_LIST;

typedef struct _EFI_IFR_UINT8 {
  EFI_IFR_OP_HEADER    Header;
  UINT8                Value;
} EFI_IFR_UINT8;

typedef struct _EFI_IFR_UINT16 {
  EFI_IFR_OP_HEADER    Header;
  UINT16               Value;
} EFI_IFR_UINT16;

typedef struct _EFI_IFR_UINT32 {
  EFI_IFR_OP_HEADER    Header;
  UINT32               Value;
} EFI_IFR_UINT32;

typedef struct _EFI_IFR_UINT64 {
  EFI_IFR_OP_HEADER    Header;
  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;

typedef struct _EFI_IFR_QUESTION_REF3_2 {
  EFI_IFR_OP_HEADER    Header;
  EFI_STRING_ID        DevicePath;
} EFI_IFR_QUESTION_REF3_2;

typedef struct _EFI_IFR_QUESTION_REF3_3 {
  EFI_IFR_OP_HEADER    Header;
  EFI_STRING_ID        DevicePath;
  EFI_GUID             Guid;
} EFI_IFR_QUESTION_REF3_3;

typedef struct _EFI_IFR_RULE_REF {
  EFI_IFR_OP_HEADER    Header;
  UINT8                RuleId;
} EFI_IFR_RULE_REF;

typedef struct _EFI_IFR_STRING_REF1 {
  EFI_IFR_OP_HEADER    Header;
  EFI_STRING_ID        StringId;
} EFI_IFR_STRING_REF1;

typedef struct _EFI_IFR_STRING_REF2 {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_STRING_REF2;

typedef struct _EFI_IFR_THIS {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_THIS;

typedef struct _EFI_IFR_TRUE {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_TRUE;

typedef struct _EFI_IFR_FALSE {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_FALSE;

typedef struct _EFI_IFR_ONE {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_ONE;

typedef struct _EFI_IFR_ONES {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_ONES;

typedef struct _EFI_IFR_ZERO {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_ZERO;

typedef struct _EFI_IFR_UNDEFINED {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_UNDEFINED;

typedef struct _EFI_IFR_VERSION {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_VERSION;

typedef struct _EFI_IFR_LENGTH {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_LENGTH;

typedef struct _EFI_IFR_NOT {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_NOT;

typedef struct _EFI_IFR_BITWISE_NOT {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_BITWISE_NOT;

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;
  UINT8                Format;
} EFI_IFR_TO_STRING;

typedef struct _EFI_IFR_TO_UINT {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_TO_UINT;

typedef struct _EFI_IFR_TO_UPPER {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_TO_UPPER;

typedef struct _EFI_IFR_TO_LOWER {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_TO_LOWER;

typedef struct _EFI_IFR_ADD {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_ADD;

typedef struct _EFI_IFR_AND {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_AND;

typedef struct _EFI_IFR_BITWISE_AND {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_BITWISE_AND;

typedef struct _EFI_IFR_BITWISE_OR {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_BITWISE_OR;

typedef struct _EFI_IFR_CATENATE {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_CATENATE;

typedef struct _EFI_IFR_DIVIDE {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_DIVIDE;

typedef struct _EFI_IFR_EQUAL {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_EQUAL;

typedef struct _EFI_IFR_GREATER_EQUAL {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_GREATER_EQUAL;

typedef struct _EFI_IFR_GREATER_THAN {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_GREATER_THAN;

typedef struct _EFI_IFR_LESS_EQUAL {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_LESS_EQUAL;

typedef struct _EFI_IFR_LESS_THAN {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_LESS_THAN;

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;

typedef struct _EFI_IFR_MODULO {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_MODULO;

typedef struct _EFI_IFR_NOT_EQUAL {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_NOT_EQUAL;

typedef struct _EFI_IFR_OR {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_OR;

typedef struct _EFI_IFR_SHIFT_LEFT {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_SHIFT_LEFT;

typedef struct _EFI_IFR_SHIFT_RIGHT {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_SHIFT_RIGHT;

typedef struct _EFI_IFR_SUBTRACT {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_SUBTRACT;

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

typedef struct _EFI_IFR_FIND {
  EFI_IFR_OP_HEADER    Header;
  UINT8                Format;
} EFI_IFR_FIND;

typedef struct _EFI_IFR_MID {
  EFI_IFR_OP_HEADER    Header;
} EFI_IFR_MID;

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

typedef struct _EFI_IFR_SPAN {
  EFI_IFR_OP_HEADER    Header;
  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;
//
// 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,
  EfiKeyLAlt,
  EfiKeySpaceBar,
  EfiKeyA2,
  EfiKeyA3,
  EfiKeyA4,
  EfiKeyRCtrl,
  EfiKeyLeftArrow,
  EfiKeyDownArrow,
  EfiKeyRightArrow,
  EfiKeyZero,
  EfiKeyPeriod,
  EfiKeyEnter,
  EfiKeyLShift,
  EfiKeyB0,
  EfiKeyB1,
  EfiKeyB2,
  EfiKeyB3,
  EfiKeyB4,
  EfiKeyB5,
  EfiKeyB6,
  EfiKeyB7,
  EfiKeyB8,
  EfiKeyB9,
  EfiKeyB10,
  EfiKeyRShift,
  EfiKeyUpArrow,
  EfiKeyOne,
  EfiKeyTwo,
  EfiKeyThree,
  EfiKeyCapsLock,
  EfiKeyC1,
  EfiKeyC2,
  EfiKeyC3,
  EfiKeyC4,
  EfiKeyC5,
  EfiKeyC6,
  EfiKeyC7,
  EfiKeyC8,
  EfiKeyC9,
  EfiKeyC10,
  EfiKeyC11,
  EfiKeyC12,
  EfiKeyFour,
  EfiKeyFive,
  EfiKeySix,
  EfiKeyPlus,
  EfiKeyTab,
  EfiKeyD1,
  EfiKeyD2,
  EfiKeyD3,
  EfiKeyD4,
  EfiKeyD5,
  EfiKeyD6,
  EfiKeyD7,
  EfiKeyD8,
  EfiKeyD9,
  EfiKeyD10,
  EfiKeyD11,
  EfiKeyD12,
  EfiKeyD13,
  EfiKeyDel,
  EfiKeyEnd,
  EfiKeyPgDn,
  EfiKeySeven,
  EfiKeyEight,
  EfiKeyNine,
  EfiKeyE0,
  EfiKeyE1,
  EfiKeyE2,
  EfiKeyE3,
  EfiKeyE4,
  EfiKeyE5,
  EfiKeyE6,
  EfiKeyE7,
  EfiKeyE8,
  EfiKeyE9,
  EfiKeyE10,
  EfiKeyE11,
  EfiKeyE12,
  EfiKeyBackSpace,
  EfiKeyIns,
  EfiKeyHome,
  EfiKeyPgUp,
  EfiKeyNLck,
  EfiKeySlash,
  EfiKeyAsterisk,
  EfiKeyMinus,
  EfiKeyEsc,
  EfiKeyF1,
  EfiKeyF2,
  EfiKeyF3,
  EfiKeyF4,
  EfiKeyF5,
  EfiKeyF6,
  EfiKeyF7,
  EfiKeyF8,
  EfiKeyF9,
  EfiKeyF10,
  EfiKeyF11,
  EfiKeyF12,
  EfiKeyPrint,
  EfiKeySLck,
  EfiKeyPause
} 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;

///
/// A key which is affected by all the standard shift modifiers.
/// Most keys would be expected to have this bit active.
///
#define EFI_AFFECTED_BY_STANDARD_SHIFT  0x0001

///
/// 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 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

///
/// Similar to the case of CAPS lock, if this bit is active, the key
/// is affected by the num lock being turned on.
///
#define EFI_AFFECTED_BY_NUM_LOCK  0x0004

typedef struct {
  UINT16      LayoutLength;
  EFI_GUID    Guid;
  UINT32      LayoutDescriptorStringOffset;
  UINT8       DescriptorCount;
  // EFI_KEY_DESCRIPTOR    Descriptors[];
} EFI_HII_KEYBOARD_LAYOUT;

typedef struct {
  EFI_HII_PACKAGE_HEADER    Header;
  UINT16                    LayoutCount;
  // EFI_HII_KEYBOARD_LAYOUT Layout[];
} EFI_HII_KEYBOARD_PACKAGE_HDR;

//
// Modifier values
//
#define EFI_NULL_MODIFIER                 0x0000
#define EFI_LEFT_CONTROL_MODIFIER         0x0001
#define EFI_RIGHT_CONTROL_MODIFIER        0x0002
#define EFI_LEFT_ALT_MODIFIER             0x0003
#define EFI_RIGHT_ALT_MODIFIER            0x0004
#define EFI_ALT_GR_MODIFIER               0x0005
#define EFI_INSERT_MODIFIER               0x0006
#define EFI_DELETE_MODIFIER               0x0007
#define EFI_PAGE_DOWN_MODIFIER            0x0008
#define EFI_PAGE_UP_MODIFIER              0x0009
#define EFI_HOME_MODIFIER                 0x000A
#define EFI_END_MODIFIER                  0x000B
#define EFI_LEFT_SHIFT_MODIFIER           0x000C
#define EFI_RIGHT_SHIFT_MODIFIER          0x000D
#define EFI_CAPS_LOCK_MODIFIER            0x000E
#define EFI_NUM_LOCK_MODIFIER             0x000F
#define EFI_LEFT_ARROW_MODIFIER           0x0010
#define EFI_RIGHT_ARROW_MODIFIER          0x0011
#define EFI_DOWN_ARROW_MODIFIER           0x0012
#define EFI_UP_ARROW_MODIFIER             0x0013
#define EFI_NS_KEY_MODIFIER               0x0014
#define EFI_NS_KEY_DEPENDENCY_MODIFIER    0x0015
#define EFI_FUNCTION_KEY_ONE_MODIFIER     0x0016
#define EFI_FUNCTION_KEY_TWO_MODIFIER     0x0017
#define EFI_FUNCTION_KEY_THREE_MODIFIER   0x0018
#define EFI_FUNCTION_KEY_FOUR_MODIFIER    0x0019
#define EFI_FUNCTION_KEY_FIVE_MODIFIER    0x001A
#define EFI_FUNCTION_KEY_SIX_MODIFIER     0x001B
#define EFI_FUNCTION_KEY_SEVEN_MODIFIER   0x001C
#define EFI_FUNCTION_KEY_EIGHT_MODIFIER   0x001D
#define EFI_FUNCTION_KEY_NINE_MODIFIER    0x001E
#define EFI_FUNCTION_KEY_TEN_MODIFIER     0x001F
#define EFI_FUNCTION_KEY_ELEVEN_MODIFIER  0x0020
#define EFI_FUNCTION_KEY_TWELVE_MODIFIER  0x0021

//
// 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
// is still a nonprinting character, but might have an alternate
// control function like SYSREQUEST
//
#define EFI_PRINT_MODIFIER        0x0022
#define EFI_SYS_REQUEST_MODIFIER  0x0023
#define EFI_SCROLL_LOCK_MODIFIER  0x0024
#define EFI_PAUSE_MODIFIER        0x0025
#define EFI_BREAK_MODIFIER        0x0026

#define EFI_LEFT_LOGO_MODIFIER   0x0027
#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()

///
/// References to string tokens must use this macro to enable scanning for
/// token usages.
///
///
/// STRING_TOKEN is not defined in UEFI specification. But it is placed
/// here for the easy access by C files and VFR source files.
///
#define STRING_TOKEN(t)  t

///
/// IMAGE_TOKEN is not defined in UEFI specification. But it is placed
/// here for the easy access by C files and VFR source files.
///
#define IMAGE_TOKEN(t)  t

#endif
