]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Include/Protocol/HiiDatabase.h
UEFI HII: Merge UEFI HII support changes from branch.
[mirror_edk2.git] / MdePkg / Include / Protocol / HiiDatabase.h
index a100a6bba8a53d7cdafebf88ff6b802680357088..75245c11cd6560943dd65265cdcf75bd3302de76 100644 (file)
 #ifndef __HII_DATABASE_H__\r
 #define __HII_DATABASE_H__\r
 \r
-#error "UEFI 2.1 HII is not fully implemented for now, Please don't include this file now."\r
-\r
 #define EFI_HII_DATABASE_PROTOCOL_GUID \\r
   { 0xef9fc172, 0xa1b2, 0x4693, { 0xb3, 0x27, 0x6d, 0x32, 0xfc, 0x41, 0x60, 0x42 } }\r
 \r
 \r
 typedef struct _EFI_HII_DATABASE_PROTOCOL EFI_HII_DATABASE_PROTOCOL;\r
 \r
-//\r
-// ConfigurationS of HII.\r
-// \r
-#define GLYPH_WIDTH         8\r
-#define GLYPH_HEIGHT        19\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
-typedef struct {\r
-  UINT32  Length:24;\r
-  UINT32  Type:8;\r
-  // UINT8  Data[...];\r
-} EFI_HII_PACKAGE_HEADER;\r
-\r
-//\r
-// EFI_HII_PACKAGE_TYPE_x.\r
-// \r
-#define EFI_HII_PACKAGE_TYPE_ALL      0x00\r
-#define EFI_HII_PACKAGE_TYPE_GUID     0x01\r
-#define EFI_HII_PACKAGE_FORM_CONFIG   0x02\r
-#define EFI_HII_PACKAGE_FORM_APP      0x03\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_END           0x09\r
-#define EFI_HII_PACKAGE_TYPE_SYSTEM_BEGIN   0xE0\r
-#define EFI_HII_PACKAGE_TYPE_SYSTEM_END     0xFF\r
-\r
-\r
-/**\r
-  \r
-  This header uniquely identifies the package list.and is placed   \r
-  in front of a list of packages. Package lists with the same   \r
-  PackageListGuid value should contain the same data set. Updated   \r
-  versions should have updated GUIDs.   \r
-  \r
-  @param PackageListGuid  The unique identifier applied to the\r
-                          list of packages which follows.\r
-  \r
-  \r
-  @param PackageLength    The size of the package list (in\r
-                         bytes), including the header.\r
-\r
-**/\r
-typedef struct {\r
-  EFI_GUID  PackageListGuid;\r
-  UINT32    PackagLength;\r
-} EFI_HII_PACKAGE_LIST_HEADER;\r
-\r
-/**\r
-\r
-  The fonts must be presented in Unicode sort order. That is,\r
-  the primary sort key is the UnicodeWeight and the secondary\r
-  sort key is the SurrogateWeight. It is up to developers who\r
-  manage fonts to choose efficient mechanisms for accessing\r
-  fonts. The contiguous presentation can easily be used because\r
-  narrow and wide glyphs are not intermixed, so a binary search\r
-  is possible (hence the requirement that the glyphs be sorted\r
-  by weight).\r
-\r
-  @param Header   The header contains a Length and Type field.\r
-                  In the case of a font package, the type will\r
-                  be EFI_HII_PACKAGE_SIMPLE_FONTS and the length\r
-                  will be the total size of the font package\r
-                  including the size of the narrow and wide\r
-                  glyphs. See EFI_HII_PACKAGE_HEADER.\r
-\r
-  @param NumberOfNarrowGlyphs   The number of NarrowGlyphs that\r
-                                are included in the font package.\r
-\r
-  @param NumberOfWideGlyphs   The number of WideGlyphs that are\r
-                              included in the font package.\r
-\r
-  @param NarrowGlyphs   An array of EFI_NARROW_GLYPH entries.\r
-                        The number of entries is specified by\r
-                        NumberOfNarrowGlyphs.\r
-\r
-  @param WideGlyphs   An array of EFI_WIDE_GLYPH entries. The\r
-                      number of entries is specified by\r
-                      NumberOfWideGlyphs. To calculate the\r
-                      offset of WideGlyphs, use the offset of\r
-                      NarrowGlyphs and add the size of\r
-                      EFI_NARROW_GLYPH multiplied by the\r
-                      NumberOfNarrowGlyphs.\r
-\r
-*/\r
-typedef struct _EFI_HII_SIMPLE_FONT_PACKAGE_HDR {\r
-  EFI_HII_PACKAGE_HEADER  Header;\r
-  UINT16                  NumberOfNarrowGlyphs;\r
-  UINT16                  NumberOfWideGlyphs;\r
-  // EFI_NARROW_GLYPH         NarrowGlyphs[];\r
-  // EFI_WIDE_GLYPH           WideGlyphs[];\r
-} EFI_HII_SIMPLE_FONT_PACKAGE_HDR;\r
-\r
-//\r
-// Contents of EFI_NARROW_GLYPH.Attributes\r
-//\r
-#define EFI_GLYPH_NON_SPACING 0x01\r
-#define EFI_GLYPH_WIDE        0x02\r
-\r
-/**\r
-\r
-  Glyphs are represented by two structures, one each for the two\r
-  sizes of glyphs. The narrow glyph (EFI_NARROW_GLYPH) is the\r
-  normal glyph used for text display.\r
-\r
-  @param UnicodeWeight  The Unicode representation of the glyph.\r
-                        The term weight is the technical term\r
-                        for a character value.\r
-\r
-  @param Attributes   The data element containing the glyph\r
-                      definitions; see Related Definitions\r
-                      below.\r
-\r
-  @param GlyphCol1  The column major glyph representation of the\r
-                    character. Bits   with values of one\r
-                    indicate that the corresponding pixel is to\r
-                    be on when normally displayed; those with\r
-                    zero are off.\r
-\r
-**/\r
-typedef struct {\r
-  CHAR16  UnicodeWeight;\r
-  UINT8   Attributes;\r
-  UINT8   GlyphCol1[19];\r
-} EFI_NARROW_GLYPH;\r
-\r
-/**\r
-   \r
-  Glyphs are represented via the two structures, one each for the\r
-  two sizes of glyphs. The wide glyph (EFI_WIDE_GLYPH) is large\r
-  enough to display logographic characters.\r
-\r
-  @param UnicodeWeight  The Unicode representation of the glyph.\r
-                        The term weight is the technical term\r
-                        for a character value.\r
-\r
-  @param Attributes   The data element containing the glyph\r
-                      definitions; see Related Definitions in\r
-                      EFI_NARROW_GLYPH for attribute values.\r
-  \r
-  @param GlyphCol1, GlyphCol2   The column major glyph\r
-                                representation of the character.\r
-                                Bits with values of one indicate\r
-                                that the corresponding pixel is\r
-                                to be on when normally\r
-                                displayed; those with zero are\r
-                                off.\r
-  \r
-  @param Pad  Ensures that sizeof(EFI_WIDE_GLYPH) is twice the\r
-              sizeof(EFI_NARROW_GLYPH). The contents of Pad must\r
-              bezero.\r
-\r
-\r
-**/\r
-typedef struct {\r
-  CHAR16  UnicodeWeight;\r
-  UINT8   Attributes;\r
-  UINT8   GlyphCol1[GLYPH_HEIGHT];\r
-  UINT8   GlyphCol2[GLYPH_HEIGHT];\r
-  UINT8   Pad[3];\r
-} EFI_WIDE_GLYPH;\r
-\r
-\r
-//\r
-// EFI_HII_FONT_STYLE\r
-// \r
-typedef UINT32  EFI_HII_FONT_STYLE;\r
-#define EFI_HII_FONT_STYLE_BOLD       0x00000001\r
-#define EFI_HII_FONT_STYLE_ITALIC     0x00000002\r
-#define EFI_HII_FONT_STYLE_EMBOSS     0x00010000\r
-#define EFI_HII_FONT_STYLE_OUTLINE    0x00020000\r
-#define EFI_HII_FONT_STYLE_SHADOW     0x00040000\r
-#define EFI_HII_FONT_STYLE_UNDERLINE  0x00080000\r
-#define EFI_HII_FONT_STYLE_DBL_UNDER  0x00100000\r
-\r
-//\r
-// EFI_HII_GLYPH_BLOCK.BlockType\r
-// \r
-#define EFI_HII_GIBT_END            0x00\r
-#define EFI_HII_GIBT_GLYPH          0x10\r
-#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_DUPLICATE      0x20\r
-#define EFI_HII_GIBT_SKIP2          0x21 \r
-#define EFI_HII_GIBT_SKIP1          0x22\r
-#define EFI_HII_GIBT_DEFAULTS       0x23\r
-#define EFI_HII_GIBT_EXT1           0x30\r
-#define EFI_HII_GIBT_EXT2           0x31\r
-#define EFI_HII_GIBT_EXT4           0x32\r
-\r
-/**\r
-\r
-  EFI_HII_GIBT_END block is found. When processing the glyph\r
-  blocks, each block refers to the current character value\r
-  (CharValueCurrent), which is initially set to one (1). Glyph\r
-  blocks of an unknown type should be skipped. If they cannot be\r
-  skipped, then processing halts.\r
-\r
-**/\r
-typedef struct _EFI_HII_GLYPH_BLOCK {\r
-  UINT8 BlockType;\r
-  UINT8 BlockBody[1];\r
-} EFI_HII_GLYPH_BLOCK;\r
-\r
-\r
-/**\r
-\r
-  @param Width  Width of the character or character cell, in\r
-                pixels. For fixed-pitch fonts, this is the same\r
-                as the advance.\r
-\r
-  @param Height   Height of the character or character cell, in\r
-                  pixels.\r
-\r
-  @param OffsetX  Offset to the horizontal edge of the character\r
-                  cell.\r
-\r
-  @param OffsetY  Offset to the vertical edge of the character\r
-                  cell.\r
-\r
-  @param AdvanceX   Number of pixels to advance to the right\r
-                    when moving from the origin of the current\r
-                    glyph to the origin of the next glyph.\r
-   \r
-**/\r
-typedef struct _EFI_HII_GLYPH_INFO {\r
-  UINT16  Width;\r
-  UINT16  Height;\r
-  INT16   OffsetX;\r
-  INT16   OffsetY;\r
-  INT16   AdvanceX;\r
-} EFI_HII_GLYPH_INFO;\r
-\r
-\r
-/**\r
-   \r
-  Changes the default cell information used for subsequent\r
-  EFI_HII_GIBT_GLYPH_DEFAULT and EFI_HII_GIBT_GLYPHS_DEFAULT glyph\r
-  blocks. The cell information described by Cell remains in effect\r
-  until the next EFI_HII_GIBT_DEFAULTS is found. Prior to the\r
-  first EFI_HII_GIBT_DEFAULTS block, the cell information in the\r
-  fixed header are used.\r
-\r
-  @param Header   Standard glyph block header, where\r
-                  Header.BlockType = EFI_HII_GIBT_DEFAULTS.\r
-  \r
-  @param Cell   The new default cell information which will be\r
-                applied to all subsequent GLYPH_DEFAULT and\r
-                GLYPHS_DEFAULT blocks.\r
-\r
-**/\r
-typedef struct _EFI_HII_GIBT_DEFAULTS_BLOCK {\r
-  EFI_HII_GLYPH_BLOCK   Header;\r
-  EFI_HII_GLYPH_INFO    Cell;\r
-} EFI_HII_GIBT_DEFAULTS_BLOCK;\r
-\r
-\r
-/**\r
-   \r
-  Indicates that the glyph with character value CharValueCurrent\r
-  has the same glyph as a previously defined character value and\r
-  increments CharValueCurrent by one.\r
-\r
-  @param Header   Standard glyph block header, where\r
-                  Header.BlockType = EFI_HII_GIBT_DUPLICATE.\r
-\r
-  @param CharValue  The previously defined character value with\r
-                    the exact same glyph.\r
-\r
-**/\r
-typedef struct _EFI_HII_GIBT_DUPLICATE_BLOCK {\r
-  EFI_HII_GLYPH_BLOCK   Header;\r
-  CHAR16                CharValue;\r
-} EFI_HII_GIBT_DUPLICATE_BLOCK;\r
-\r
-\r
-/**\r
-   \r
-  Any glyphs with a character value greater than or equal to\r
-  CharValueCurrent are empty.\r
-\r
-  @param Header   Standard glyph block header, where\r
-                  Header.BlockType = EFI_HII_GIBT_END.\r
-\r
-**/\r
-typedef struct _EFI_GLYPH_GIBT_END_BLOCK {\r
-  EFI_HII_GLYPH_BLOCK   Header;\r
-} EFI_GLYPH_GIBT_END_BLOCK;\r
-\r
-/**\r
-  \r
-  These are reserved for future expansion, with length bytes\r
-  included so that they can be easily skipped.\r
-\r
-  @param Header   Standard glyph block header, where\r
-                  Header.BlockType = EFI_HII_GIBT_EXT1,\r
-                  EFI_HII_GIBT_EXT2 or EFI_HII_GIBT_EXT4.\r
-\r
-  @param Length   Size of the glyph block, in bytes.\r
-\r
-**/\r
-typedef struct _EFI_HII_GIBT_EXT1_BLOCK {\r
-  EFI_HII_GLYPH_BLOCK Header;\r
-  UINT8               BlockType2;\r
-  UINT8               Length;\r
-} EFI_HII_GIBT_EXT1_BLOCK;\r
-\r
-\r
-/**\r
-  \r
-  These are reserved for future expansion, with length bytes\r
-  included so that they can be easily skipped.\r
-\r
-  @param Header   Standard glyph block header, where\r
-                  Header.BlockType = EFI_HII_GIBT_EXT1,\r
-                  EFI_HII_GIBT_EXT2 or EFI_HII_GIBT_EXT4.\r
-\r
-  @param Length   Size of the glyph block, in bytes.\r
-\r
-**/\r
-typedef struct _EFI_HII_GIBT_EXT2_BLOCK {\r
-  EFI_HII_GLYPH_BLOCK Header;\r
-  UINT8               BlockType2;\r
-  UINT16              Length;\r
-} EFI_HII_GIBT_EXT2_BLOCK;\r
-\r
-/**\r
-  \r
-  These are reserved for future expansion, with length bytes\r
-  included so that they can be easily skipped.\r
-\r
-  @param Header   Standard glyph block header, where\r
-                  Header.BlockType = EFI_HII_GIBT_EXT1,\r
-                  EFI_HII_GIBT_EXT2 or EFI_HII_GIBT_EXT4.\r
-\r
-  @param Length   Size of the glyph block, in bytes.\r
-\r
-**/\r
-typedef struct _EFI_HII_GIBT_EXT4_BLOCK {\r
-  EFI_HII_GLYPH_BLOCK Header;\r
-  UINT8               BlockType2;\r
-  UINT32              Length;\r
-} EFI_HII_GIBT_EXT4_BLOCK;\r
-\r
-\r
-/**\r
-   \r
-  This block provides the bitmap for the character with the value\r
-  CharValueCurrent and increments CharValueCurrent by one. Each\r
-  glyph contains a glyph width and height, a drawing offset,\r
-  number of pixels to advance after drawing and then the encoded\r
-  bitmap.\r
-\r
-  @param Header   Standard glyph block header, where\r
-                  Header.BlockType = EFI_HII_GIBT_GLYPH.\r
-\r
-  @param Cell   Contains the width and height of the encoded\r
-                bitmap (Cell.Width and Cell.Height), the number\r
-                of pixels (signed) right of the character cell\r
-                origin where the left edge of the bitmap should\r
-                be placed (Cell.OffsetX), the number of pixels\r
-                above the character cell origin where the top\r
-                edge of the bitmap should be placed\r
-                (Cell.OffsetY) and the number of pixels (signed)\r
-                to move right to find the origin for the next\r
-                charactercell (Cell.AdvanceX).\r
-\r
-  @param GlyphCount   The number of glyph bitmaps.\r
-\r
-  @param BitmapData   The bitmap data specifies a series of\r
-                      pixels, one bit per pixel, left-to-right,\r
-                      top-tobottom. Each glyph bitmap only\r
-                      encodes the portion of the bitmap enclosed\r
-                      by its character-bounding box, but the\r
-                      entire glyph is padded out to the nearest\r
-                      byte. The number of bytes per bitmap can\r
-                      be calculated as: ((Cell.Width + 7)/8) *\r
-                      Cell.Height.\r
-\r
-\r
-**/\r
-typedef struct _EFI_HII_GIBT_GLYPH_BLOCK {\r
-  EFI_HII_GLYPH_BLOCK   Header;\r
-  EFI_HII_GLYPH_INFO    Cell;\r
-  UINT16                GlyphCount;\r
-  UINT8                 BitmapData[1];\r
-} EFI_HII_GIBT_GLYPH_BLOCK;\r
-\r
-/**\r
-   \r
-  Provides the bitmaps for the characters with the values\r
-  CharValueCurrent through CharValueCurrent + Count -1 and\r
-  increments CharValueCurrent by Count. These glyphs have\r
-  identical cell information and the encoded bitmaps are exactly\r
-  the same number of byes.\r
-\r
-  @param Header   Standard glyph block header, where\r
-                  Header.BlockType = EFI_HII_GIBT_GLYPHS.\r
-\r
-  @param Cell     Contains the width and height of the encoded\r
-                  bitmap (Cell.Width and Cell.Height), the\r
-                  number of pixels (signed) right of the\r
-                  character cell origin where the left edge of\r
-                  the bitmap should be placed (Cell.OffsetX),\r
-                  the number of pixels above the character cell\r
-                  origin where the top edge of the bitmap should\r
-                  be placed (Cell.OffsetY) and the number of\r
-                  pixels(signed) to move right to find the\r
-                  origin for the next character cell\r
-                  (Cell.AdvanceX).\r
-\r
-  @param BitmapData   The bitmap data specifies a series of\r
-                      pixels, one bit per pixel, left-to-right,\r
-                      top-tobottom, for each glyph. Each glyph\r
-                      bitmap only encodes the portion of the\r
-                      bitmap enclosed by its character-bounding\r
-                      box. The number of bytes per bitmap can be\r
-                      calculated as: ((Cell.Width + 7)/8) *\r
-                      Cell.Height.\r
-\r
-**/\r
-typedef struct _EFI_HII_GIBT_GLYPHS_BLOCK {\r
-  EFI_HII_GLYPH_BLOCK   Header;\r
-  EFI_HII_GLYPH_INFO    Cell;\r
-  UINT8                 BitmapData[1];\r
-} EFI_HII_GIBT_GLYPHS_BLOCK;\r
-\r
-/**\r
-   \r
-  Provides the bitmap for the character with the value\r
-  CharValueCurrent and increments CharValueCurrent by 1. This\r
-  glyph uses the default cell information. The default cell\r
-  information is found in the font header or the most recently\r
-  processed EFI_HII_GIBT_DEFAULTS.\r
-\r
-  @param Header   Standard glyph block header, where\r
-                  Header.BlockType = EFI_HII_GIBT_GLYPH_DEFAULT.\r
-\r
-  @param BitmapData   The bitmap data specifies a series of\r
-                      pixels, one bit per pixel, left-to-right,\r
-                      top-tobottom. Each glyph bitmap only\r
-                      encodes the portion of the bitmap enclosed\r
-                      by its character-bounding box. The number\r
-                      of bytes per bitmap can be calculated as:\r
-                      ((Global.Cell.Width + 7)/8) *\r
-                      Global.Cell.Height.\r
-\r
-**/\r
-typedef struct _EFI_HII_GIBT_GLYPH_DEFAULT_BLOCK {\r
-  EFI_HII_GLYPH_BLOCK Header;\r
-  UINT8               BitmapData[1];\r
-} EFI_HII_GIBT_GLYPH_DEFAULT_BLOCK;\r
-\r
-\r
-\r
-\r
-/**\r
-   \r
-  Provides the bitmaps for the characters with the values\r
-  CharValueCurrent through CharValueCurrent + Count -1 and\r
-  increments CharValueCurrent by Count. These glyphs use the\r
-  default cell information and the encoded bitmaps have exactly\r
-  the same number of byes.\r
-\r
-  @param Header   Standard glyph block header, where\r
-                  Header.BlockType =\r
-                  EFI_HII_GIBT_GLYPHS_DEFAULT.\r
-\r
-  @param Count    Number of glyphs in the glyph block.\r
-\r
-  @param BitmapData   The bitmap data specifies a series of\r
-                      pixels, one bit per pixel, left-to-right,\r
-                      top-tobottom, for each glyph. Each glyph\r
-                      bitmap only encodes the portion of the\r
-                      bitmap enclosed by its character-bounding\r
-                      box. The number of bytes per bitmap can be\r
-                      calculated as: ((Global.Cell.Width + 7)/8)\r
-                      Global.Cell.Height.\r
-\r
-**/\r
-typedef struct _EFI_HII_GIBT_GLYPHS_DEFAULT_BLOCK {\r
-  EFI_HII_GLYPH_BLOCK Header;\r
-  UINT16              Count;\r
-  UINT8               BitmapData[1];\r
-} EFI_HII_GIBT_GLYPHS_DEFAULT_BLOCK;\r
-\r
-/**\r
-   \r
-  Increments the current character value CharValueCurrent by the\r
-  number specified.\r
-\r
-  @param Header   Standard glyph block header, where BlockType =\r
-                  EFI_HII_GIBT_SKIP1 or EFI_HII_GIBT_SKIP2.\r
-\r
-  @param SkipCount  The unsigned 8- or 16-bit value to add to\r
-                    CharValueCurrent.\r
-\r
-**/\r
-typedef struct _EFI_HII_GIBT_SKIP2_BLOCK {\r
-  EFI_HII_GLYPH_BLOCK Header;\r
-  UINT16              SkipCount;\r
-} EFI_HII_GIBT_SKIP2_BLOCK;\r
-\r
-\r
-/**\r
-   \r
-  Increments the current character value CharValueCurrent by the\r
-  number specified.\r
-\r
-  @param Header   Standard glyph block header, where BlockType =\r
-                  EFI_HII_GIBT_SKIP1 or EFI_HII_GIBT_SKIP2.\r
-\r
-  @param SkipCount  The unsigned 8- or 16-bit value to add to\r
-                    CharValueCurrent.\r
-\r
-**/\r
-typedef struct _EFI_HII_GIBT_SKIP1_BLOCK {\r
-  EFI_HII_GLYPH_BLOCK Header;\r
-  UINT8               SkipCount;\r
-} EFI_HII_GIBT_SKIP1_BLOCK;\r
-\r
-\r
-/**\r
-   \r
-  This package is created by NewPackageList() when the package\r
-  list is first added to the HII database by locating the\r
-  EFI_DEVICE_PATH_PROTOCOL attached to the driver handle passed in\r
-  to that function.\r
-  \r
-**/\r
-typedef EFI_DEVICE_PATH_PROTOCOL  EFI_HII_DEVICE_PATH_PACKAGE_HDR;\r
-\r
-\r
-/**\r
-   \r
-  This is a free-form package type designed to allow extensibility\r
-  by allowing the format to be specified using Guid.\r
-\r
-  @param Guid   Identifier which describes the remaining data\r
-                within the package.\r
-\r
-**/\r
-typedef struct _EFI_HII_GUID_PACKAGE_HDR {\r
-  EFI_GUID Guid;\r
-} EFI_HII_GUID_PACKAGE_HDR;\r
-\r
-\r
-/**\r
-   \r
-  The Strings package record describes the mapping between string\r
-  identifiers and the actual text of the strings themselves. The\r
-  package consists of three parts: a fixed header, the string\r
-  information and the font information.\r
-\r
-  @param Header   The standard package header, where Header.Type\r
-                  = EFI_HII_PACKAGE_STRINGS.\r
-\r
-  @param HdrSize  Size of this header.\r
-\r
-  @param StringInfoOffset   Offset, relative to the start of\r
-                            this header, of the string information.\r
-\r
-  @param LanguageWindow   Specifies the default values placed in\r
-                          the static and dynamic windows before\r
-                          processing each SCSU-encoded strings.\r
-\r
-\r
-  @param LanguageName   String identifier within the current\r
-                        string package of the full name of the\r
-                        language specified by Language. Language\r
-                        Language of the strings, as specified by\r
-                        RFC 3066.\r
-\r
-**/\r
-typedef struct _EFI_HII_STRING_PACKAGE_HDR {\r
-  EFI_HII_PACKAGE_HEADER  Header;\r
-  UINT32                  HdrSize;\r
-  UINT32                  StringInfoOffset;\r
-  CHAR16                  LanguageWindow[16];\r
-  EFI_STRING_ID           LanguageName;\r
-  CHAR8 Language[1];\r
-} EFI_HII_STRING_PACKAGE_HDR;\r
-\r
-\r
-\r
-/**\r
-\r
-  The fixed header consists of a standard record header and then\r
-  the character values in this section, the flags (including the\r
-  encoding method) and the offsets of the glyph information, the\r
-  glyph bitmaps and the character map.\r
-\r
-  @param Header   The standard package header, where Header.Size\r
-                  EFI_HII_PACKAGE_FONTS.\r
-\r
-  @param HdrSize  Size of this header.\r
-\r
-  @param GlyphInfoOffset  The offset, relative to the start of\r
-                          this header, of a series of\r
-                          variable-length glyph blocks, each\r
-                          describing information about the\r
-                          bitmap associated with a glyph.\r
-\r
-  @param Cell   This contains the measurement of the widest and\r
-                tallest characters in the font (Cell.Width and\r
-                Cell.Height). It also contains the offset to the\r
-                horizontal and vertical origin point of the\r
-                character cell (Cell.OffsetX and Cell.OffsetY).\r
-                Finally, it contains the default AdvanceX. The\r
-                individual glyph's OffsetX and OffsetY value is\r
-                added to this position to determine where to\r
-                draw the top-left pixel of the character's\r
-                glyph. The character glyph's AdvanceX is added\r
-                to this position to determine the origin point\r
-                for the next character.\r
-\r
-  @param FontStyle  The design style of the font, 1 bit per\r
-                    style. See EFI_HII_FONT_STYLE.\r
-\r
-  @param FontFamily   The null-terminated string with the name\r
-                      of the font family to which the font\r
-                      belongs.\r
-\r
-**/\r
-typedef struct _EFI_HII_FONT_PACKAGE_HDR {\r
-  EFI_HII_PACKAGE_HEADER  Header;\r
-  UINT32                  HdrSize;\r
-  UINT32                  GlyphBlockOffset;\r
-  EFI_HII_GLYPH_INFO      Cell;\r
-  EFI_HII_FONT_STYLE      FontStyle;\r
-  CHAR16                  FontFamily[1];\r
-} EFI_HII_FONT_PACKAGE_HDR;\r
-\r
-\r
-//\r
-// EFI_HII_STRING_BLOCK.BlockType\r
-// \r
-#define FI_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_STRINGS_SCSU       0x12\r
-#define EFI_HII_SIBT_STRINGS_SCSU_FONT  0x13\r
-#define EFI_HII_SIBT_STRING_UCS2        0x14\r
-#define EFI_HII_SIBT_STRING_UCS2_FONT   0x15\r
-#define EFI_HII_SIBT_STRINGS_UCS2       0x16\r
-#define EFI_HII_SIBT_STRINGS_UCS2_FONT  0x17\r
-#define EFI_HII_SIBT_DUPLICATE          0x20\r
-#define EFI_HII_SIBT_SKIP2              0x21\r
-#define EFI_HII_SIBT_SKIP1              0x22\r
-#define EFI_HII_SIBT_EXT1               0x30\r
-#define EFI_HII_SIBT_EXT2               0x31\r
-#define EFI_HII_SIBT_EXT4               0x32\r
-#define EFI_HII_SIBT_FONT               0x40\r
-\r
-/**\r
-   \r
-  String blocks specify the text and font for the current string\r
-  identifier and increment to the next string identifier.\r
-**/\r
-typedef struct {\r
-  UINT8   BlockType;\r
-  UINT8   BlockBody[1];\r
-} EFI_HII_STRING_BLOCK;\r
-\r
-\r
-/**\r
-   \r
-  Indicates that the string with string identifier\r
-  StringIdCurrent is the same as a previously defined string and\r
-  increments StringIdCurrent by one.\r
-  \r
-  @param Header   Standard string block header, where\r
-                  Header.BlockType = EFI_HII_SIBT_DUPLICATE.\r
-  \r
-  @param StringId   The string identifier of a previously\r
-                    defined string with the exact same string\r
-                    text. Description\r
-\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_DUPLICATE_BLOCK;\r
-\r
-/**\r
-   \r
-  Any strings with a string identifier greater than or equal to\r
-  StringIdCurrent are empty.\r
-\r
-  @param Header   Standard string block header, where\r
-                  Header.BlockType = EFI_HII_SIBT_END.\r
-\r
-**/\r
-typedef struct _EFI_HII_SIBT_END_BLOCK {\r
-  EFI_HII_STRING_BLOCK  Header;\r
-} EFI_HII_SIBT_END_BLOCK;\r
-\r
-\r
-/**\r
-   \r
-  These are reserved for future expansion, with length bytes\r
-  included so that they can be easily skip\r
-\r
-  @param Header   Standard string block header, where\r
-                  Header.BlockType = EFI_HII_SIBT_EXT1,\r
-                  EFI_HII_SIBT_EXT2 or EFI_HII_SIBT_EXT4.\r
-  \r
-  @param Length   Size of the string block, in bytes.\r
-\r
-**/\r
-typedef struct _EFI_HII_SIBT_EXT1_BLOCK {\r
-  EFI_HII_STRING_BLOCK  Header;\r
-  UINT8                 BlockType2;\r
-  UINT8                 Length;\r
-} EFI_HII_SIBT_EXT1_BLOCK;\r
-\r
-/**\r
-   \r
-  These are reserved for future expansion, with length bytes\r
-  included so that they can be easily skip\r
-\r
-  @param Header   Standard string block header, where\r
-                  Header.BlockType = EFI_HII_SIBT_EXT1,\r
-                  EFI_HII_SIBT_EXT2 or EFI_HII_SIBT_EXT4.\r
-  \r
-  @param Length   Size of the string block, in bytes.\r
-\r
-**/\r
-typedef struct _EFI_HII_SIBT_EXT2_BLOCK {\r
-  EFI_HII_STRING_BLOCK  Header;\r
-  UINT8                 BlockType2;\r
-  UINT16                Length;\r
-} EFI_HII_SIBT_EXT2_BLOCK;\r
-\r
-/**\r
-   \r
-  These are reserved for future expansion, with length bytes\r
-  included so that they can be easily skip\r
-\r
-  @param Header   Standard string block header, where\r
-                  Header.BlockType = EFI_HII_SIBT_EXT1,\r
-                  EFI_HII_SIBT_EXT2 or EFI_HII_SIBT_EXT4.\r
-  \r
-  @param Length   Size of the string block, in bytes.\r
-\r
-**/\r
-typedef struct _EFI_HII_SIBT_EXT4_BLOCK {\r
-  EFI_HII_STRING_BLOCK  Header;\r
-  UINT8                 BlockType2;\r
-  UINT32                Length;\r
-} EFI_HII_SIBT_EXT4_BLOCK;\r
-\r
-/**\r
-   \r
-  Associates a font identifier FontId with a font name FontName,\r
-  size FontSize and style FontStyle. This font identifier may be\r
-  used with the string blocks. The font identifier 0 is the\r
-  default font for those string blocks which do not specify a font\r
-  identifier.\r
-\r
-  @param Header   Standard extended header, where\r
-                  Header.BlockType = EFI_HII_SIBT_FONT.\r
-\r
-  @param FontId   Font identifier, which must be unique within\r
-                  the font package.\r
-\r
-  @param FontSize   Character cell size, in pixels, of the font.\r
-\r
-  @param FontStyle  Font style.\r
-\r
-  @param FontName   Null-terminated font family name.\r
-\r
-**/\r
-typedef struct _EFI_HII_SIBT_FONT_BLOCK {\r
-  EFI_HII_SIBT_EXT2_BLOCK   Header;\r
-  UINT8                     FontId;\r
-  UINT16                    FontSize;\r
-  EFI_HII_FONT_STYLE        FontStyle;\r
-  CHAR16                    FontName[1];\r
-} EFI_HII_SIBT_FONT_BLOCK;\r
-\r
-/**\r
-   \r
-  Increments the current string identifier StringIdCurrent by the\r
-  number specified.\r
-\r
-  @param Header   Standard string block header, where\r
-                  Header.BlockType = EFI_HII_SIBT_SKIP1.\r
-  \r
-  @param SkipCount  The unsigned 8-bit value to add to\r
-                    StringIdCurrent.\r
-\r
-**/\r
-typedef struct _EFI_HII_SIBT_SKIP1_BLOCK {\r
-  EFI_HII_STRING_BLOCK  Header;\r
-  UINT8                 SkipCount;\r
-} EFI_HII_SIBT_SKIP1_BLOCK;\r
-\r
-/**\r
-\r
-  Increments the current string identifier StringIdCurrent by\r
-  the number specified.\r
-\r
-  @param Header   Standard string block header, where\r
-                  Header.BlockType = EFI_HII_SIBT_SKIP2.\r
-\r
-  @param SkipCount  The unsigned 16-bit value to add to\r
-                    StringIdCurrent.\r
-\r
-**/\r
-typedef struct _EFI_HII_SIBT_SKIP2_BLOCK {\r
-  EFI_HII_STRING_BLOCK  Header;\r
-  UINT16                SkipCount;\r
-} EFI_HII_SIBT_SKIP2_BLOCK;\r
-\r
-/**\r
-   \r
-  This string block provides the SCSU-encoded text for the string\r
-  in the default font with string identifier StringIdCurrent and\r
-  increments StringIdCurrent by one.\r
-\r
-  @param Header   Standard header where Header.BlockType =\r
-                  EFI_HII_SIBT_STRING_SCSU.\r
-\r
-  @param StringText   The string text is a null-terminated\r
-                      string, which is assigned to the string\r
-                      identifier StringIdCurrent.\r
-\r
-**/\r
-typedef struct _EFI_HII_SIBT_STRING_SCSU_BLOCK {\r
-  EFI_HII_STRING_BLOCK Header;\r
-  UINT8 StringText[1];\r
-} EFI_HII_SIBT_STRING_SCSU_BLOCK;\r
-\r
-\r
-/**\r
-\r
-  This string block provides the SCSU-encoded text for the string\r
-  in the font specified by FontIdentifier with string identifier\r
-  StringIdCurrent and increments StringIdCurrent by one.\r
-\r
-  @param Header   Standard string block header, where\r
-                  Header.BlockType = EFI_HII_SIBT_STRING_SCSU_FONT.\r
-\r
-  @param FontIdentifier   The identifier of the font to be used\r
-                          as the starting font for the entire\r
-                          string. The identifier must either be\r
-                          0 for the default font or an\r
-                          identifier previously specified by an\r
-                          EFI_HII_SIBT_FONT block. Any string\r
-                          characters that deviates from this\r
-                          font family, size or style must\r
-                          provide an explicit control character.\r
-\r
-  @param StringText   The string text is a null-terminated\r
-                      encoded string, which is assigned to the\r
-                      string identifier StringIdCurrent.\r
-\r
-\r
-**/\r
-typedef struct _EFI_HII_SIBT_STRING_SCSU_FONT_BLOCK {\r
-  EFI_HII_STRING_BLOCK  Header;\r
-  UINT8                 FontIdentifier;\r
-  UINT8                 StringText[1];\r
-} EFI_HII_SIBT_STRING_SCSU_FONT_BLOCK;\r
-\r
-\r
-/**\r
-   \r
-  This string block provides the SCSU-encoded text for StringCount\r
-  strings which have the default font and which have sequential\r
-  string identifiers. The strings are assigned the identifiers,\r
-  starting with StringIdCurrent and continuing through\r
-  StringIdCurrent + StringCount ??C 1. StringIdCurrent is\r
-  incremented by StringCount.\r
-\r
-  @param Header   Standard header where Header.BlockType =\r
-                  EFI_HII_SIBT_STRINGS_SCSU.\r
-\r
-  @param StringCount  Number of strings in StringText.\r
-\r
-  @param StringText   The strings, where each string is a\r
-                      null-terminated encoded string.\r
-\r
-**/\r
-typedef struct _EFI_HII_SIBT_STRINGS_SCSU_BLOCK {\r
-  EFI_HII_STRING_BLOCK  Header;\r
-  UINT16                StringCount;\r
-  UINT8                 StringText[1];\r
-} EFI_HII_SIBT_STRINGS_SCSU_BLOCK;\r
-\r
-\r
-/**\r
-   \r
-  This string block provides the SCSU-encoded text for StringCount\r
-  strings which have the font specified by FontIdentifier and\r
-  which have sequential string identifiers. The strings are\r
-  assigned the identifiers, starting with StringIdCurrent and\r
-  continuing through StringIdCurrent + StringCount ??C 1.\r
-  StringIdCurrent is incremented by StringCount.\r
-\r
-  @param Header   Standard header where Header.BlockType =\r
-                  EFI_HII_SIBT_STRINGS_SCSU_FONT.\r
-\r
-  @param StringCount  Number of strings in StringText.\r
-\r
-  @param FontIdentifier   The identifier of the font to be used\r
-                          as the starting font for the entire\r
-                          string. The identifier must either be\r
-                          0 for the default font or an\r
-                          identifier previously specified by an\r
-                          EFI_HII_SIBT_FONT block. Any string\r
-                          characters that deviates from this\r
-                          font family, size or style must\r
-                          provide an explicit control character.\r
-\r
-  @param StringText   The strings, where each string is a\r
-                      null-terminated encoded string.\r
-\r
-**/\r
-typedef struct _EFI_HII_SIBT_STRINGS_SCSU_FONT_BLOCK {\r
-  EFI_HII_STRING_BLOCK  Header;\r
-  UINT16                StringCount;\r
-  UINT8                 FontIdentifier;\r
-  UINT8                 StringText[1];\r
-} EFI_HII_SIBT_STRINGS_SCSU_FONT_BLOCK;\r
-\r
-\r
-/**\r
-   \r
-  This string block provides the UCS-2 encoded text for the string\r
-  in the default font with string identifier StringIdCurrent and\r
-  increments StringIdCurrent by one.\r
-\r
-  @param Header   Standard header where Header.BlockType =\r
-                  EFI_HII_SIBT_STRING_UCS2.\r
-\r
-  @param StringText   The string text is a null-terminated UCS-2\r
-                      string, which is assigned to the string\r
-                      identifier StringIdCurrent.\r
-\r
-**/\r
-typedef struct _EFI_HII_SIBT_STRING_UCS2_BLOCK {\r
-  EFI_HII_STRING_BLOCK  Header;\r
-  CHAR16                StringText[1];\r
-} EFI_HII_SIBT_STRING_UCS2_BLOCK;\r
-\r
-\r
-/**\r
-   \r
-  This string block provides the UCS-2 encoded text for the string\r
-  in the font specified by FontIdentifier with string identifier\r
-  StringIdCurrent and increments StringIdCurrent by one\r
-\r
-  @param Header   Standard header where Header.BlockType =\r
-                  EFI_HII_SIBT_STRING_UCS2_FONT.\r
-\r
-  @param FontIdentifier   The identifier of the font to be used\r
-                          as the starting font for the entire\r
-                          string. The identifier must either be\r
-                          0 for the default font or an\r
-                          identifier previously specified by an\r
-                          EFI_HII_SIBT_FONT block. Any string\r
-                          characters that deviates from this\r
-                          font family, size or style must\r
-                          provide an explicit control character.\r
-\r
-  @param StringText   The string text is a null-terminated UCS-2\r
-                      string, which is assigned to the string\r
-                      identifier StringIdCurrent.\r
-\r
-**/\r
-typedef struct _EFI_HII_SIBT_STRING_UCS2_FONT_BLOCK {\r
-  EFI_HII_STRING_BLOCK  Header;\r
-  UINT8                 FontIdentifier;\r
-  CHAR16                StringText[1];\r
-} EFI_HII_SIBT_STRING_UCS2_FONT_BLOCK;\r
-\r
-\r
-/**\r
-   \r
-  This string block provides the UCS-2 encoded text for the\r
-  strings in the default font with string identifiers\r
-  StringIdCurrent to StringIdCurrent + StringCount - 1 and\r
-  increments StringIdCurrent by StringCount.\r
-\r
-  @param Header   Standard header where Header.BlockType =\r
-                  EFI_HII_SIBT_STRINGS_UCS2.\r
-\r
-  @param StringCount  Number of strings in StringText.\r
-\r
-  @param StringText   The string text is a series of\r
-                      null-terminated UCS-2 strings, which are\r
-                      assigned to the string identifiers\r
-                      StringIdCurrent.to StringIdCurrent +\r
-                      StringCount - 1.\r
-  \r
-**/\r
-typedef struct _EFI_HII_SIBT_STRINGS_UCS2_BLOCK {\r
-  EFI_HII_STRING_BLOCK  Header;\r
-  UINT16                StringCount;\r
-  CHAR16                StringText[1];\r
-} EFI_HII_SIBT_STRINGS_UCS2_BLOCK;\r
-\r
-\r
-/**\r
-   \r
-  The fixed header consists of a standard record header and the\r
-  offsets of the image and palette information.\r
-\r
-  @param Header   Standard package header, where Header.Type =\r
-                  EFI_HII_PACKAGE_IMAGES. ImageInfoOffset\r
-                  Offset, relative to this header, of the image\r
-                  information. If this is zero, then there are\r
-                  no images in the package.\r
-\r
-  @param PaletteInfoOffset  Offset, relative to this header, of\r
-                            the palette information. If this is\r
-                            zero, then there are no palettes in\r
-                            the image package.\r
-\r
-**/\r
-typedef struct _EFI_HII_IMAGE_PACKAGE_HDR {\r
-  EFI_HII_PACKAGE_HEADER  Header;\r
-  UINT32                  ImageInfoOffset;\r
-  UINT32                  PaletteInfoOffset;\r
-} EFI_HII_IMAGE_PACKAGE_HDR;\r
-\r
-\r
-//\r
-// EFI_HII_IMAGE_BLOCK\r
-// \r
-typedef struct _EFI_HII_IMAGE_BLOCK {\r
-  UINT8   BlockType;\r
-  UINT8   BlockBody[1];\r
-} EFI_HII_IMAGE_BLOCK;\r
-\r
-//\r
-// EFI_HII_IMAGE_BLOCK.BlockType.\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_IMAGE_4BIT         0x12\r
-#define EFI_HII_IIBT_IMAGE_4BIT_TRANS   0x13\r
-#define EFI_HII_IIBT_IMAGE_8BIT         0x14\r
-#define EFI_HII_IIBT_IMAGE_8BIT_TRANS   0x15\r
-#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_DUPLICATE          0x20\r
-#define EFI_HII_IIBT_SKIP2              0x21\r
-#define EFI_HII_IIBT_SKIP1              0x22\r
-#define EFI_HII_IIBT_EXT1               0x30\r
-#define EFI_HII_IIBT_EXT2               0x31\r
-#define EFI_HII_IIBT_EXT4               0x32\r
-\r
-\r
-/**\r
-   \r
-  Any images with an image identifier greater than or equal to\r
-  ImageIdCurrent are empty.\r
-\r
-  @param Header   Standard image block header, where\r
-                  Header.BlockType = EFI_HII_IIBT_END.\r
-\r
-**/\r
-typedef struct _EFI_HII_IIBT_END_BLOCK {\r
-  EFI_HII_IMAGE_BLOCK   Header;\r
-} EFI_HII_IIBT_END_BLOCK;\r
-\r
-\r
-/**\r
-   \r
-  Future extensions for image records which need a length-byte\r
-  length use this prefix.\r
-\r
-  @param Header   Standard image block header, where\r
-                  Header.BlockType = EFI_HII_IIBT_EXT1,\r
-                  EFI_HII_IIBT_EXT2 or EFI_HII_IIBT_EXT4.\r
-  \r
-  @param Length   Size of the image block, in bytes, including\r
-                  the image block header.\r
-\r
-**/\r
-typedef struct _EFI_HII_IIBT_EXT1_BLOCK {\r
-  EFI_HII_IMAGE_BLOCK Header;\r
-  UINT8               BlockType2;\r
-  UINT8               Length;\r
-} EFI_HII_IIBT_EXT1_BLOCK;\r
-\r
-/**\r
-   \r
-  Future extensions for image records which need a length-byte\r
-  length use this prefix.\r
-\r
-  @param Header   Standard image block header, where\r
-                  Header.BlockType = EFI_HII_IIBT_EXT1,\r
-                  EFI_HII_IIBT_EXT2 or EFI_HII_IIBT_EXT4.\r
-  \r
-  @param Length   Size of the image block, in bytes, including\r
-                  the image block header.\r
-\r
-**/\r
-typedef struct _EFI_HII_IIBT_EXT2_BLOCK {\r
-  EFI_HII_IMAGE_BLOCK Header;\r
-  UINT8               BlockType2;\r
-  UINT16              Length;\r
-} EFI_HII_IIBT_EXT2_BLOCK;\r
-\r
-/**\r
-   \r
-  Future extensions for image records which need a length-byte\r
-  length use this prefix.\r
-\r
-  @param Header   Standard image block header, where\r
-                  Header.BlockType = EFI_HII_IIBT_EXT1,\r
-                  EFI_HII_IIBT_EXT2 or EFI_HII_IIBT_EXT4.\r
-  \r
-  @param Length   Size of the image block, in bytes, including\r
-                  the image block header.\r
-\r
-**/\r
-typedef struct _EFI_HII_IIBT_EXT4_BLOCK {\r
-  EFI_HII_IMAGE_BLOCK Header;\r
-  UINT8               BlockType2;\r
-  UINT32              Length;\r
-} EFI_HII_IIBT_EXT4_BL0CK;\r
-\r
-//\r
-// EFI_HII_IIBT_IMAGE_1BIT_BASE\r
-// \r
-typedef struct _EFI_HII_IIBT_IMAGE_1BIT_BASE {\r
-  UINT16 Width;\r
-  UINT16 Height;\r
-  // UINT8 Data[...];\r
-} EFI_HII_IIBT_IMAGE_1BIT_BASE;\r
-\r
-/**\r
-\r
-  This record assigns the 1-bit-per-pixel bitmap data to the\r
-  ImageIdCurrent identifier and increment ImageIdCurrent by one.\r
-  The data in the EFI_HII_IMAGE_1BIT_TRANS structure is exactly\r
-  the same as the EFI_HII_IMAGE_1BIT structure, the difference is\r
-  how the data is treated. The bitmap pixel value 0 is the\r
-  transparency value and will not be written to the\r
-  screen. The bitmap pixel value 1 will be translated to the color\r
-  specified by Palette.\r
-\r
-  @param Header   Standard image header, where Header.BlockType\r
-                  = EFI_HII_IIBT_IMAGE_1BIT_TRANS.\r
-\r
-  @param PaletteIndex   Index of the palette in the palette\r
-                        information.\r
-\r
-  @param Bitmap   The bitmap specifies a series of pixels, one\r
-                  bit per pixel, left-to-right, top-to-bottom,\r
-                  and is padded out to the nearest byte. The\r
-                  number of bytes per bitmap can be calculated\r
-                  as: ((Width + 7)/8) * Height.\r
-\r
-**/\r
-typedef struct _EFI_HII_IBIT_IMAGE_1BIT_BLOCK {\r
-  EFI_HII_IMAGE_BLOCK           Header;\r
-  UINT8                         PaletteIndex;\r
-  EFI_HII_IIBT_IMAGE_1BIT_BASE  Bitmap;\r
-} EFI_HII_IIBT_IMAGE_1BIT_BLOCK;\r
-\r
-typedef EFI_HII_IIBT_IMAGE_1BIT_BLOCK   EFI_HII_IIBT_IMAGE_1BIT_TRANS_BLOCK;\r
-\r
-\r
-//\r
-// EFI_HII_RGB_PIXEL\r
-// \r
-typedef struct _EFI_HII_RGB_PIXEL {\r
-  UINT8 b;\r
-  UINT8 g;\r
-  UINT8 r;\r
-} EFI_HII_RGB_PIXEL;\r
-\r
-//\r
-// FI_HII_IIBT_IMAGE_24BIT_BASE\r
-// \r
-typedef struct _EFI_HII_IIBT_IMAGE_24BIT_BASE {\r
-  UINT16 Width;\r
-  UINT16 Height;\r
-  // EFI_HII_RGB_PIXEL Bitmap[...];\r
-} EFI_HII_IIBT_IMAGE_24BIT_BASE;\r
-\r
-/**\r
-\r
-  This record assigns the 24-bit-per-pixel bitmap data to the   \r
-  ImageIdCurrent identifier and increment ImageIdCurrent by one.   \r
-  The image's upper left hand corner pixel is composed of the\r
-  first three bitmap bytes. The first byte is the pixel????s blue   \r
-  component value, the next byte is the pixel????s green component   \r
-  value, and the third byte is the pixel's red component value\r
-  (B,G,R). Each color component value can vary from 0x00 (color   \r
-  off) to 0xFF (color full on), allowing 16.8 millions colors that   \r
-  can be specified.\r
-\r
-  @param Header   Standard image header, where Header.BlockType\r
-                  = EFI_HII_IIBT_IMAGE_24BIT. Bitmap The bitmap\r
-                  specifies a series of pixels, 24 bits per\r
-                  pixel, left-to-right, top-to-bottom. The\r
-                  number of bytes per bitmap can be calculated\r
-                  as: (Width * 3) * Height.\r
-\r
-  @param Type     See EFI_HII_RGB_PIXEL definition.\r
-\r
-**/\r
-typedef struct {\r
-  EFI_HII_IMAGE_BLOCK           Header;\r
-  EFI_HII_IIBT_IMAGE_24BIT_BASE Bitmap;\r
-} EFI_HII_IIBT_IMAGE_24BIT_BLOCK;\r
-\r
-typedef EFI_HII_IIBT_IMAGE_24BIT_BLOCK EFI_HII_IIBT_IMAGE_24BIT_TRANS_BLOCK;\r
-\r
-\r
-\r
-//\r
-// EFI_HII_IIBT_IMAGE_4BIT_BASE\r
-// \r
-typedef struct _EFI_HII_IIBT_IMAGE_4BIT_BASE {\r
-  UINT16 Width;\r
-  UINT16 Height;\r
-  // UINT8 Data[...];\r
-} EFI_HII_IIBT_IMAGE_4BIT_BASE;\r
-\r
-/**\r
-   \r
-  This record assigns the 4-bit-per-pixel bitmap data to the\r
-  ImageIdCurrent identifier using the specified palette and\r
-  increment ImageIdCurrent by one. The image????s upper left hand\r
-  corner pixel is the most significant nibble of the first bitmap\r
-  byte.\r
-\r
-  @param Header   Standard image header, where Header.BlockType\r
-                  = EFI_HII_IIBT_IMAGE_4BIT.\r
-\r
-  @param PaletteIndex   Index of the palette in the palette\r
-                        information.\r
-\r
-  @param Bitmap   The bitmap specifies a series of pixels, four\r
-                  bits per pixel, left-to-right, top-to-bottom,\r
-                  and is padded out to the nearest byte. The\r
-                  number of bytes per bitmap can be calculated\r
-                  as: ((Width + 1)/2) Height.\r
-\r
-**/\r
-typedef struct _EFI_HII_IIBT_IMAGE_4BIT_BLOCK {\r
-  EFI_HII_IMAGE_BLOCK           Header;\r
-  UINT8                         PaletteIndex;\r
-  EFI_HII_IIBT_IMAGE_4BIT_BASE  Bitmap;\r
-} EFI_HII_IIBT_IMAGE_4BIT_BLOCK;\r
-\r
-typedef EFI_HII_IIBT_IMAGE_4BIT_BLOCK EFI_HII_IIBT_IMAGE_4BIT_TRANS_BLOCK;\r
-\r
-\r
-\r
-//\r
-// EFI_HII_IIBT_IMAGE_8BIT_BASE \r
-// \r
-typedef struct _EFI_HII_IIBT_IMAGE_8BIT_BASE {\r
-  UINT16  Width;\r
-  UINT16  Height;\r
-  // UINT8 Data[...];\r
-} EFI_HII_IIBT_IMAGE_8BIT_BASE;\r
-\r
-/**\r
-   \r
-  This record assigns the 8-bit-per-pixel bitmap data to the\r
-  ImageIdCurrent identifier using the specified palette and\r
-  increment ImageIdCurrent by one. The image????s upper left hand\r
-  corner pixel is the first bitmap byte.\r
-\r
-  @param Header   Standard image header, where Header.BlockType\r
-                  = EFI_HII_IIBT_IMAGE_8BIT.\r
-\r
-  @param PaletteIndex   Index of the palette in the palette\r
-                        information.\r
-\r
-  @param Bitmap   The bitmap specifies a series of pixels, eight\r
-                  bits per pixel, left-to-right, top-to-bottom.\r
-                  The number of bytes per bitmap can be\r
-                  calculated as: Width * Height.\r
-\r
-**/\r
-typedef struct _EFI_HII_IIBT_IMAGE_8BIT_PALETTE {\r
-  EFI_HII_IMAGE_BLOCK           Header;\r
-  UINT8                         PaletteIndex;\r
-  EFI_HII_IIBT_IMAGE_8BIT_BASE  Bitmap;\r
-} EFI_HII_IIBT_IMAGE_8BIT_PALETTE;\r
-\r
-typedef EFI_HII_IIBT_IMAGE_8BIT_PALETTE   EFI_HII_IIBT_IMAGE_8BIT_TRANS_BLOCK;\r
-\r
-\r
-/**\r
-   \r
-  Indicates that the image with image ID ImageValueCurrent has the\r
-  same image as a previously defined image ID and increments\r
-  ImageValueCurrent by one\r
-\r
-  @param Header   Standard image header, where Header.BlockType\r
-                  = EFI_HII_IIBT_DUPLICATE.\r
-\r
-  @param ImageId  The previously defined image ID with the exact\r
-                  same image.\r
-\r
-\r
-**/\r
-typedef struct _EFI_HII_IIBT_DUPLICATE_BLOCK {\r
-  EFI_HII_IMAGE_BLOCK   Header;\r
-  EFI_IMAGE_ID          ImageId;\r
-} EFI_HII_IIBT_DUPLICATE_BLOCK;\r
-\r
-\r
-/**\r
-   \r
-  This record assigns the JPEG image data to the ImageIdCurrent\r
-  identifier and increment ImageIdCurrent by one. The JPEG decoder\r
-  is only required to cover the basic JPEG encoding types, which\r
-  are produced by standard available paint packages (for example:\r
-  MSPaint under Windows from Microsoft). This would include JPEG\r
-  encoding of high (1:1:1) and medium (4:1:1) quality with only\r
-  three components (R,G,B) ??C no support for the special gray\r
-  component encoding.\r
-\r
-  @param Header   Standard image header, where Header.BlockType\r
-                  = EFI_HII_IIBT_IMAGE_JPEG.\r
-  \r
-  @param Size   Specifies the size of the JPEG encoded data.\r
-  \r
-  @param Data   JPEG encoded data with ????JFIF???? signature at\r
-                offset 6 in the data block. The JPEG encoded\r
-                data, specifies type of encoding and final size\r
-                of true-color image.\r
-\r
-**/\r
-typedef struct _EFI_HII_IIBT_JPEG {\r
-  EFI_HII_IMAGE_BLOCK Header;\r
-  UINT32              Size;\r
-  //UINT8 Data[ Â¡Â­ ];\r
-} EFI_HII_IIBT_JPEG;\r
-\r
-\r
-/**\r
-   \r
-  Increments the current image ID ImageIdCurrent by the number\r
-  specified.\r
-  \r
-  @param Header   Standard image header, where Header.BlockType\r
-                  = EFI_HII_IIBT_SKIP1.\r
-  \r
-  @param SkipCount  The unsigned 8-bit value to add  to\r
-                    ImageIdCurrent.\r
-\r
-**/\r
-typedef struct _EFI_HII_IIBT_SKIP1_BLOCK {\r
-  EFI_HII_IMAGE_BLOCK Header;\r
-  UINT8               SkipCount;\r
-} EFI_HII_IIBT_SKIP1_BLOCK;\r
-\r
-/**\r
-  \r
-  Increments the current image ID ImageIdCurrent by the number\r
-  specified.\r
-  \r
-  @param Header   Standard image header, where Header.BlockType\r
-                  = EFI_HII_IIBT_SKIP2.\r
-  \r
-  @param SkipCount  The unsigned 16-bit value to add to\r
-                    ImageIdCurrent.\r
-\r
-**/\r
-typedef struct _EFI_HII_IIBT_SKIP2_BLOCK {\r
-  EFI_HII_IMAGE_BLOCK   Header;\r
-  UINT16                SkipCount;\r
-} EFI_HII_IIBT_SKIP2_BLOCK;\r
-\r
-\r
-/**\r
-   \r
-  This fixed header is followed by zero or more variable-length\r
-  palette information records. The structures are assigned a\r
-  number 1 to n.\r
-\r
-  @param PaletteCount   Number of palettes.\r
-\r
-**/\r
-typedef struct _EFI_HII_IMAGE_PALETTE_INFO_HEADER {\r
-  UINT16  PaletteCount;\r
-} EFI_HII_IMAGE_PALETTE_INFO_HEADER;\r
-\r
-/**\r
-   \r
-  Each palette information record is an array of 24-bit color\r
-  structures. The first entry (PaletteValue[0]) corresponds to\r
-  color 0 in the source image; the second entry (PaletteValue[1])\r
-  corresponds to color 1, etc. Each palette entry is a three byte\r
-  entry, with the first byte equal to the blue component of the\r
-  color, followed by green, and finally red (B,G,R). Each color\r
-  component value can vary from 0x00 (color off) to 0xFF (color\r
-  full on), allowing 16.8 millions colors that can be specified.\r
-\r
-  @param PaletteSize  Size of the palette information.\r
-  \r
-  @param PaletteValue   Array of color values.\r
-  \r
-**/\r
-typedef struct _EFI_HII_IMAGE_PALETTE_INFO {\r
-  UINT16 PaletteSize;\r
-  // EFI_HII_RGB_PIXEL PaletteValue[...];\r
-} EFI_HII_IMAGE_PALETTE_INFO;\r
-\r
-\r
 \r
 //\r
 // EFI_HII_DATABASE_NOTIFY_TYPE\r
@@ -1503,11 +59,11 @@ typedef UINTN   EFI_HII_DATABASE_NOTIFY_TYPE;
 typedef\r
 EFI_STATUS\r
 (EFIAPI *EFI_HII_DATABASE_NOTIFY) (\r
-  IN CONST  UINT8                         PackageType,\r
+  IN        UINT8                         PackageType,\r
   IN CONST  EFI_GUID                      *PackageGuid,\r
   IN CONST  EFI_HII_PACKAGE_HEADER        *Package,\r
-  IN CONST  EFI_HII_HANDLE                Handle,\r
-  IN CONST  EFI_HII_DATABASE_NOTIFY_TYPE  NotifyType\r
+  IN        EFI_HII_HANDLE                 Handle,\r
+  IN        EFI_HII_DATABASE_NOTIFY_TYPE  NotifyType\r
 );\r
 \r
 /**\r
@@ -1531,7 +87,7 @@ EFI_STATUS
 \r
   @param DriverHandle   Associate the package list with this EFI\r
                         handle Handle A pointer to the\r
-                        EFI_HII_HANDLE instance.\r
+                        EFI_HII_HANDLE  instance.\r
 \r
   @retval EFI_SUCCESS   The package list associated with the\r
                         Handle was added to the HII database.\r
@@ -1546,11 +102,11 @@ EFI_STATUS
 **/\r
 typedef\r
 EFI_STATUS\r
-(EFIAPI *EFI_HII_NEW_PACK) (\r
+(EFIAPI *EFI_HII_DATABASE_NEW_PACK) (\r
   IN CONST  EFI_HII_DATABASE_PROTOCOL   *This,\r
   IN CONST  EFI_HII_PACKAGE_LIST_HEADER *PackageList,\r
-  IN CONST  EFI_HANDLE                  DriverHandle,\r
-  OUT       EFI_HII_HANDLE              *Handle\r
+  IN        EFI_HANDLE                  DriverHandle,\r
+  OUT       EFI_HII_HANDLE               *Handle\r
 );\r
 \r
 \r
@@ -1577,9 +133,9 @@ EFI_STATUS
 **/\r
 typedef\r
 EFI_STATUS\r
-(EFIAPI *EFI_HII_REMOVE_PACK) (\r
+(EFIAPI *EFI_HII_DATABASE_REMOVE_PACK) (\r
   IN CONST  EFI_HII_DATABASE_PROTOCOL *This,\r
-  IN CONST  EFI_HII_HANDLE            Handle\r
+  IN        EFI_HII_HANDLE             Handle\r
 );\r
 \r
 \r
@@ -1626,9 +182,9 @@ EFI_STATUS
 **/\r
 typedef\r
 EFI_STATUS\r
-(EFIAPI *EFI_HII_UPDATE_PACK) (\r
+(EFIAPI *EFI_HII_DATABASE_UPDATE_PACK) (\r
   IN CONST  EFI_HII_DATABASE_PROTOCOL   *This,\r
-  IN CONST  EFI_HII_HANDLE              Handle,\r
+  IN        EFI_HII_HANDLE               Handle,\r
   IN CONST  EFI_HII_PACKAGE_LIST_HEADER *PackageList\r
 );\r
 \r
@@ -1660,7 +216,7 @@ EFI_STATUS
                               that is required for the handles\r
                               found.\r
 \r
-  @param Handle   An array of EFI_HII_HANDLE instances returned.\r
+  @param Handle   An array of EFI_HII_HANDLE  instances returned.\r
 \r
 \r
   @retval EFI_SUCCESS   Handle was updated successfully.\r
@@ -1676,12 +232,12 @@ EFI_STATUS
 **/\r
 typedef\r
 EFI_STATUS\r
-(EFIAPI *EFI_HII_LIST_PACKS) (\r
+(EFIAPI *EFI_HII_DATABASE_LIST_PACKS) (\r
   IN CONST  EFI_HII_DATABASE_PROTOCOL *This,\r
-  IN CONST  UINT8                     PackageType,\r
+  IN        UINT8                     PackageType,\r
   IN CONST  EFI_GUID                  *PackageGuid,\r
   IN OUT    UINTN                     *HandleBufferLength,\r
-  OUT       EFI_HII_HANDLE            *Handle\r
+  OUT       EFI_HII_HANDLE             *Handle\r
 );\r
 \r
 \r
@@ -1704,7 +260,7 @@ EFI_STATUS
   @param This   A pointer to the EFI_HII_DATABASE_PROTOCOL\r
                 instance.\r
 \r
-  @param Handle   An EFI_HII_HANDLE that corresponds to the\r
+  @param Handle   An EFI_HII_HANDLE  that corresponds to the\r
                   desired package list in the HII database to\r
                   export or NULL to indicate all package lists\r
                   should be exported. \r
@@ -1726,11 +282,11 @@ EFI_STATUS
 **/\r
 typedef\r
 EFI_STATUS\r
-(EFIAPI *EFI_HII_EXPORT_PACKS) (\r
-  IN CONST  EFI_HII_DATABASE_PROTOCOL *This,\r
-  IN CONST  EFI_HII_HANDLE            Handle,\r
-  IN OUT    UINTN                     *BufferSize,\r
-  OUT       EFI_HII_PACKAGE_HEADER    *Buffer\r
+(EFIAPI *EFI_HII_DATABASE_EXPORT_PACKS) (\r
+  IN CONST  EFI_HII_DATABASE_PROTOCOL      *This,\r
+  IN        EFI_HII_HANDLE                 Handle,\r
+  IN OUT    UINTN                          *BufferSize,\r
+  OUT       EFI_HII_PACKAGE_LIST_HEADER    *Buffer\r
 );\r
 \r
 \r
@@ -1789,12 +345,12 @@ EFI_STATUS
 **/\r
 typedef\r
 EFI_STATUS\r
-(EFIAPI *EFI_HII_REGISTER_NOTIFY) (\r
+(EFIAPI *EFI_HII_DATABASE_REGISTER_NOTIFY) (\r
   IN CONST  EFI_HII_DATABASE_PROTOCOL     *This,\r
-  IN CONST  UINT8                         PackageType,\r
+  IN        UINT8                         PackageType,\r
   IN CONST  EFI_GUID                      *PackageGuid,\r
-  IN CONST  EFI_HII_DATABASE_NOTIFY       PackageNotifyFn,\r
-  IN CONST  EFI_HII_DATABASE_NOTIFY_TYPE  NotifyType,\r
+  IN        EFI_HII_DATABASE_NOTIFY       PackageNotifyFn,\r
+  IN        EFI_HII_DATABASE_NOTIFY_TYPE  NotifyType,\r
   OUT       EFI_HANDLE                    *NotifyHandle\r
 );\r
 \r
@@ -1817,215 +373,12 @@ EFI_STATUS
 **/\r
 typedef\r
 EFI_STATUS\r
-(EFIAPI *EFI_HII_UNREGISTER_NOTIFY) (\r
+(EFIAPI *EFI_HII_DATABASE_UNREGISTER_NOTIFY) (\r
   IN CONST  EFI_HII_DATABASE_PROTOCOL *This,\r
-  IN CONST  EFI_HANDLE                NotificationHandle\r
+  IN        EFI_HANDLE                NotificationHandle\r
 );\r
 \r
 \r
-/**\r
-   \r
-  @param Header   The general pack header which defines both the\r
-                  type of pack and the length of the entire\r
-                  pack.\r
-\r
-  @param LayoutCount  The number of keyboard layouts contained\r
-                      in the entire keyboard pack.\r
-\r
-  @param Layout   An array of LayoutCount number of keyboard\r
-                  layouts.\r
-\r
-**/\r
-typedef struct {\r
-  EFI_HII_PACKAGE_HEADER  Header;\r
-  UINT16                  LayoutCount;\r
-  // EFI_HII_KEYBOARD_LAYOUT Layout[...];\r
-} EFI_HII_KEYBOARD_PACK;\r
-\r
-/**\r
-   \r
-  @param LayoutLength   The length of the current keyboard\r
-                        layout.\r
-\r
-  @param Guid   The unique ID associated with this keyboard\r
-                layout.\r
-\r
-  @param LayoutDescriptorString   An offset location (0 is the\r
-                                  beginning of the\r
-                                  EFI_KEYBOARD_LAYOUT instance)\r
-                                  of the string which describes\r
-                                  this keyboard layout. The data\r
-                                  that is being referenced is in\r
-                                  EFI_DESCRIPTION_STRING_BUNDLE\r
-                                  format.\r
-\r
-  @param DescriptorCount  The number of Descriptor entries in\r
-                          this layout.\r
-\r
-  @param Descriptors  An array of key descriptors.\r
-\r
-**/\r
-typedef struct {\r
-  UINT16              LayoutLength;\r
-  EFI_GUID            Guid;\r
-  RELOFST             LayoutDescriptorString;\r
-  UINT8               DescriptorCount;\r
-  // EFI_KEY_DESCRIPTOR   Descriptors[...];\r
-} EFI_HII_KEYBOARD_LAYOUT;\r
-\r
-\r
-/**\r
-   \r
-  @param Language   The language to associate with\r
-                    DescriptionString.\r
-\r
-  @param Space  A space (U-0x0020) character to force as a\r
-                separator between the Language field and the\r
-                formal description string.\r
-\r
-  @param DescriptionString  A null-terminated description\r
-                            string.\r
-\r
-**/\r
-typedef struct {\r
-  CHAR16  Language[3];\r
-  CHAR16  Space;\r
-  CHAR16  DescriptionString[1];\r
-} EFI_DESCRIPTION_STRING;\r
-\r
-/**\r
-   \r
-  @param DescriptionCount   The number of description strings.\r
-\r
-  @param DescriptionString  An array of language-specific\r
-                            description strings.\r
-\r
-**/\r
-typedef struct {\r
-  UINT16                  DescriptionCount;\r
-  // EFI_DESCRIPTION_STRING   DescriptionString[];\r
-} EFI_DESCRIPTION_STRING_BUNDLE;\r
-\r
-/**\r
-\r
-  See the figure below for which key corresponds to the values in\r
-  the enumeration above. For example, EfiKeyLCtrl corresponds to\r
-  the left control key in the lower-left corner of the keyboard,\r
-  EfiKeyFour corresponds to the 4 key on the numeric keypad, and\r
-  EfiKeySLck corresponds to the Scroll Lock key in the upper-right\r
-  corner of the keyboard.\r
-\r
-**/\r
-typedef enum {\r
-  EfiKeyLCtrl, EfiKeyA0, EfiKeyLAlt, EfiKeySpaceBar,\r
-  EfiKeyA2, EfiKeyA3, EfiKeyA4, EfiKeyRCtrl, EfiKeyLeftArrow,\r
-  EfiKeyDownArrow, EfiKeyRightArrow, EfiKeyZero,\r
-  EfiKeyPeriod, EfiKeyEnter, EfiKeyLShift, EfiKeyB0,\r
-  EfiKeyB1, EfiKeyB2, EfiKeyB3, EfiKeyB4, EfiKeyB5, EfiKeyB6,\r
-  EfiKeyB7, EfiKeyB8, EfiKeyB9, EfiKeyB10, EfiKeyRshift,\r
-  EfiKeyUpArrow, EfiKeyOne, EfiKeyTwo, EfiKeyThree,\r
-  EfiKeyCapsLock, EfiKeyC1, EfiKeyC2, EfiKeyC3, EfiKeyC4,\r
-  EfiKeyC5, EfiKeyC6, EfiKeyC7, EfiKeyC8, EfiKeyC9,\r
-  EfiKeyC10, EfiKeyC11, EfiKeyC12, EfiKeyFour, EfiKeyFive,\r
-  EfiKeySix, EfiKeyPlus, EfiKeyTab, EfiKeyD1, EfiKeyD2,\r
-  EfiKeyD3, EfiKeyD4, EfiKeyD5, EfiKeyD6, EfiKeyD7, EfiKeyD8,\r
-  EfiKeyD9, EfiKeyD10, EfiKeyD11, EfiKeyD12, EfiKeyD13,\r
-  EfiKeyDel, EfiKeyEnd, EfiKeyPgDn, EfiKeySeven, EfiKeyEight,\r
-  EfiKeyNine, EfiKeyE0, EfiKeyE1, EfiKeyE2, EfiKeyE3,\r
-  EfiKeyE4, EfiKeyE5, EfiKeyE6, EfiKeyE7, EfiKeyE8, EfiKeyE9,\r
-  EfiKeyE10, EfiKeyE11, EfiKeyE12, EfiKeyBackSpace,\r
-  EfiKeyIns, EfiKeyHome, EfiKeyPgUp, EfiKeyNLck, EfiKeySlash,\r
-  EfiKeyAsterisk, EfiKeyMinus, EfiKeyEsc, EfiKeyF1, EfiKeyF2,\r
-  EfiKeyF3, EfiKeyF4, EfiKeyF5, EfiKeyF6, EfiKeyF7, EfiKeyF8,\r
-  EfiKeyF9, EfiKeyF10, EfiKeyF11, EfiKeyF12, EfiKeyPrint,\r
-  EfiKeySLck, EfiKeyPause\r
-} EFI_KEY;\r
-\r
-/**\r
-   \r
-  @param Key Used to describe a physical key on a keyboard.\r
-\r
-  @param Unicode  Unicode value for the Key.\r
-\r
-  @param ShiftedUnicode   Unicode value for the key with the\r
-                          shift key being held down. \r
-\r
-  @param AltGrUnicode   Unicode value for the key with the\r
-                        Alt-GR being held down.\r
-\r
-  @param ShiftedAltGrUnicode  Unicode value for the key with the\r
-                              Alt-GR and shift keys being held down.\r
-\r
-  @param Modifier   Modifier keys are defined to allow for\r
-                    special functionality that is not\r
-                    necessarily accomplished by a printable\r
-                    character. Many of these modifier keys are\r
-                    flags to toggle certain state bits on and\r
-                    off inside of a keyboard driver.\r
-  \r
-**/\r
-typedef struct {\r
-  EFI_KEY Key;\r
-  CHAR16  Unicode;\r
-  CHAR16  ShiftedUnicode;\r
-  CHAR16  AltGrUnicode;\r
-  CHAR16  ShiftedAltGrUnicode;\r
-  UINT16  Modifier;\r
-} EFI_KEY_DESCRIPTOR;\r
-\r
-\r
-//\r
-// Modifier values\r
-//\r
-#define EFI_NULL_MODIFIER                 0x0000\r
-#define EFI_LEFT_CONTROL_MODIFIER         0x0001\r
-#define EFI_RIGHT_CONTROL_MODIFIER        0x0002\r
-#define EFI_LEFT_ALT_MODIFIER             0x0003\r
-#define EFI_RIGHT_ALT_MODIFIER            0x0004\r
-#define EFI_ALT_GR_MODIFIER               0x0005\r
-#define EFI_INSERT_MODIFIER               0x0006\r
-#define EFI_DELETE_MODIFIER               0x0007\r
-#define EFI_PAGE_DOWN_MODIFIER            0x0008\r
-#define EFI_PAGE_UP_MODIFIER              0x0009\r
-#define EFI_HOME_MODIFIER                 0x000A\r
-#define EFI_END_MODIFIER                  0x000B\r
-#define EFI_LEFT_SHIFT_MODIFIER           0x000C\r
-#define EFI_RIGHT_SHIFT_MODIFIER          0x000D\r
-#define EFI_CAPS_LOCK_MODIFIER            0x000E\r
-#define EFI_NUM_LOCK _MODIFIER            0x000F\r
-#define EFI_LEFT_ARROW_MODIFIER           0x0010\r
-#define EFI_RIGHT_ARROW_MODIFIER          0x0011\r
-#define EFI_DOWN_ARROW_MODIFIER           0x0012\r
-#define EFI_UP_ARROW_MODIFIER             0X0013\r
-#define EFI_NS_KEY_MODIFIER               0x0014\r
-#define EFI_NS_KEY_DEPENDENCY_MODIFIER    0x0015\r
-#define EFI_FUNCTION_KEY_ONE_MODIFIER     0x0016\r
-#define EFI_FUNCTION_KEY_TWO_MODIFIER     0x0017\r
-#define EFI_FUNCTION_KEY_THREE_MODIFIER   0x0018\r
-#define EFI_FUNCTION_KEY_FOUR_MODIFIER    0x0019\r
-#define EFI_FUNCTION_KEY_FIVE_MODIFIER    0x001A\r
-#define EFI_FUNCTION_KEY_SIX_MODIFIER     0x001B\r
-#define EFI_FUNCTION_KEY_SEVEN_MODIFIER   0x001C\r
-#define EFI_FUNCTION_KEY_EIGHT_MODIFIER   0x001D\r
-#define EFI_FUNCTION_KEY_NINE_MODIFIER    0x001E\r
-#define EFI_FUNCTION_KEY_TEN_MODIFIER     0x001F\r
-#define EFI_FUNCTION_KEY_ELEVEN_MODIFIER  0x0020\r
-#define EFI_FUNCTION_KEY_TWELVE_MODIFIER  0x0021\r
-//\r
-// Keys that have multiple control functions based on modifier\r
-// settings are handled in the keyboard driver implementation.\r
-// For instance PRINT_KEY might have a modifier held down and\r
-// is still a nonprinting character, but might have an alternate\r
-// control function like SYSREQUEST\r
-//\r
-#define EFI_PRINT_MODIFIER                0x0022\r
-#define EFI_SYS_REQUEST_MODIFIER          0x0023\r
-#define EFI_SCROLL_LOCK_MODIFIER          0x0024\r
-#define EFI_PAUSE_MODIFIER                0x0025\r
-#define EFI_BREAK_MODIFIER                0x0026\r
-\r
-\r
-\r
 /**\r
    \r
   This routine retrieves an array of GUID values for each keyboard\r
@@ -2089,6 +442,7 @@ EFI_STATUS
 (EFIAPI *EFI_HII_GET_KEYBOARD_LAYOUT) (\r
   IN CONST  EFI_HII_DATABASE_PROTOCOL *This,\r
   IN CONST  EFI_GUID                  *KeyGuid,\r
+  IN OUT UINT16                        *KeyboardLayoutLength,\r
   OUT       EFI_HII_KEYBOARD_LAYOUT   *KeyboardLayout\r
 );\r
 \r
@@ -2129,7 +483,7 @@ EFI_STATUS
   @param This   A pointer to the EFI_HII_DATABASE_PROTOCOL\r
                 instance.\r
   \r
-  @param PackageListHandle  An EFI_HII_HANDLE that corresponds\r
+  @param PackageListHandle  An EFI_HII_HANDLE  that corresponds\r
                             to the desired package list in the\r
                             HIIdatabase.\r
   \r
@@ -2146,9 +500,9 @@ EFI_STATUS
 **/\r
 typedef\r
 EFI_STATUS\r
-(EFIAPI *EFI_HII_GET_PACK_HANDLE) (\r
+(EFIAPI *EFI_HII_DATABASE_GET_PACK_HANDLE) (\r
   IN CONST  EFI_HII_DATABASE_PROTOCOL *This,\r
-  IN CONST  EFI_HII_HANDLE            PackageListHandle,\r
+  IN        EFI_HII_HANDLE             PackageListHandle,\r
   OUT       EFI_HANDLE                *DriverHandle\r
 );\r
 \r
@@ -2190,20 +544,21 @@ EFI_STATUS
 \r
 **/\r
 struct _EFI_HII_DATABASE_PROTOCOL {\r
-  EFI_HII_NEW_PACK                NewPackageList;\r
-  EFI_HII_REMOVE_PACK             RemovePackageList;\r
-  EFI_HII_UPDATE_PACK             UpdatePackageList;\r
-  EFI_HII_LIST_PACKS              ListPackageLists;\r
-  EFI_HII_EXPORT_PACKS            ExportPackageLists;\r
-  EFI_HII_REGISTER_NOTIFY         RegisterPackageNotify;\r
-  EFI_HII_UNREGISTER_NOTIFY       UnregisterPackageNotify;\r
-  EFI_HII_FIND_KEYBOARD_LAYOUTS   FindKeyboardLayouts;\r
-  EFI_HII_GET_KEYBOARD_LAYOUT     GetKeyboardLayout;\r
-  EFI_HII_SET_KEYBOARD_LAYOUT     SetKeyboardLayout;\r
-  EFI_HII_GET_PACK_HANDLE         GetPackageHandle;\r
+  EFI_HII_DATABASE_NEW_PACK                    NewPackageList;\r
+  EFI_HII_DATABASE_REMOVE_PACK                 RemovePackageList;\r
+  EFI_HII_DATABASE_UPDATE_PACK        UpdatePackageList;\r
+  EFI_HII_DATABASE_LIST_PACKS         ListPackageLists;\r
+  EFI_HII_DATABASE_EXPORT_PACKS       ExportPackageLists;\r
+  EFI_HII_DATABASE_REGISTER_NOTIFY    RegisterPackageNotify;\r
+  EFI_HII_DATABASE_UNREGISTER_NOTIFY  UnregisterPackageNotify;\r
+  EFI_HII_FIND_KEYBOARD_LAYOUTS       FindKeyboardLayouts;\r
+  EFI_HII_GET_KEYBOARD_LAYOUT         GetKeyboardLayout;\r
+  EFI_HII_SET_KEYBOARD_LAYOUT         SetKeyboardLayout;\r
+  EFI_HII_DATABASE_GET_PACK_HANDLE    GetPackageListHandle;\r
 };\r
 \r
 extern EFI_GUID gEfiHiiDatabaseProtocolGuid;\r
 \r
 #endif\r
 \r
+\r