De-unicode in comment for all source files.
authorqhuang8 <qhuang8@de2fecce-e211-0410-80a6-f3fac2684e05>
Tue, 27 May 2008 03:24:01 +0000 (03:24 +0000)
committerqhuang8 <qhuang8@de2fecce-e211-0410-80a6-f3fac2684e05>
Tue, 27 May 2008 03:24:01 +0000 (03:24 +0000)
git-svn-id: https://edk2.tianocore.org/svn/edk2/trunk@5302 de2fecce-e211-0410-80a6-f3fac2684e05

19 files changed:
edk2/IntelFrameworkPkg/Include/Ppi/Security.h
edk2/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbEnumer.c
edk2/MdeModulePkg/Universal/HiiDatabaseDxe/Font.c
edk2/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabase.h
edk2/MdeModulePkg/Universal/HiiDatabaseDxe/Image.c
edk2/MdeModulePkg/Universal/HiiDatabaseDxe/String.c
edk2/MdePkg/Include/Library/BaseLib.h
edk2/MdePkg/Include/Library/PalCallLib.h
edk2/MdePkg/Include/Pi/PiHob.h
edk2/MdePkg/Include/Ppi/Decompress.h
edk2/MdePkg/Include/Ppi/ReadOnlyVariable2.h
edk2/MdePkg/Include/Protocol/HiiFont.h
edk2/MdePkg/Include/Protocol/PlatformToDriverConfiguration.h
edk2/MdePkg/Include/Protocol/TcgService.h
edk2/MdePkg/Include/Uefi/UefiInternalFormRepresentation.h
edk2/MdePkg/Include/Uefi/UefiSpec.h
edk2/MdePkg/Library/BaseLib/Ipf/AsmPalCall.s
edk2/MdePkg/Library/BasePalCallLibNull/PalCall.c
edk2/MdePkg/Library/PeiPalCallLib/PalCallLib.c

index 8c7adb6..514c249 100644 (file)
@@ -2,7 +2,7 @@
   This file declares Security Architectural PPI.\r
   \r
   This PPI is installed by some platform PEIM that abstracts the security policy to the PEI\r
-  Foundation, namely the case of a PEIM¡¯s authentication state being returned during the PEI section\r
+  Foundation, namely the case of a PEIM's authentication state being returned during the PEI section\r
   extraction process.\r
   \r
   Copyright (c) 2006, Intel Corporation\r
index 6b46e5c..8d527e0 100644 (file)
@@ -732,14 +732,14 @@ UsbEnumerateNewDev (
 \r
   //\r
   // After port is reset, hub establishes a signal path between\r
-  // the device and host (DEFALUT state). Device¡¯s registers are\r
+  // the device and host (DEFALUT state). Device's registers are\r
   // reset, use default address 0 (host enumerates one device at\r
   // a time) , and ready to respond to control transfer at EP 0.\r
   //\r
 \r
   //\r
   // Host sends a Get_Descriptor request to learn the max packet\r
-  // size of default pipe (only part of the device¡¯s descriptor).\r
+  // size of default pipe (only part of the device's descriptor).\r
   //\r
   Status = UsbGetMaxPacketSize0 (Child);\r
 \r
@@ -782,7 +782,7 @@ UsbEnumerateNewDev (
   DEBUG ((EFI_D_INFO, "UsbEnumerateNewDev: device is now ADDRESSED at %d\n", Address));\r
 \r
   //\r
-  // Host learns about the device¡¯s abilities by requesting device's\r
+  // Host learns about the device's abilities by requesting device's\r
   // entire descriptions.\r
   //\r
   Status = UsbBuildDescTable (Child);\r
index 2df03fc..eb8e651 100644 (file)
@@ -1370,7 +1370,7 @@ IsLineBreak (
                                   EFI_HII_OUT_FLAG_CLIP is implied. If this points\r
                                   to a NULL on entry, then a              buffer\r
                                   will be allocated to hold the generated image and\r
-                                  the pointer updated on exit. It is the caller¡¯s\r
+                                  the pointer updated on exit. It is the caller's\r
                                   responsibility to free this buffer.\r
   @param  BltX,BLTY               Specifies the offset from the left and top edge\r
                                   of the image of the first character cell in the\r
@@ -1381,7 +1381,7 @@ IsLineBreak (
                                   updated to contain the        number of elements.\r
                                   This array describes the characters which were at\r
                                   least partially drawn and the heights of the\r
-                                  rows. It is the caller¡¯s responsibility to free\r
+                                  rows. It is the caller's responsibility to free\r
                                   this buffer.\r
   @param  RowInfoArraySize        If this is non-NULL on entry, then on exit it\r
                                   contains the number of elements in RowInfoArray.\r
@@ -1923,7 +1923,7 @@ Exit:
   @param  Flags                   Describes how the string is to be drawn.\r
   @param  PackageList             The package list in the HII database to search\r
                                   for the specified string.\r
-  @param  StringId                The string¡¯s id, which is unique within\r
+  @param  StringId                The string's id, which is unique within\r
                                   PackageList.\r
   @param  Language                Points to the language for the retrieved string.\r
                                   If NULL, then the current system language is\r
@@ -1939,7 +1939,7 @@ Exit:
                                   EFI_HII_OUT_FLAG_CLIP is implied. If this points\r
                                   to a NULL on entry, then a              buffer\r
                                   will be allocated to hold the generated image and\r
-                                  the pointer updated on exit. It is the caller¡¯s\r
+                                  the pointer updated on exit. It is the caller's\r
                                   responsibility to free this buffer.\r
   @param  BltX,BLTY               Specifies the offset from the left and top edge\r
                                   of the image of the first character cell in the\r
@@ -1950,7 +1950,7 @@ Exit:
                                   updated to contain the        number of elements.\r
                                   This array describes the characters which were at\r
                                   least partially drawn and the heights of the\r
-                                  rows. It is the caller¡¯s responsibility to free\r
+                                  rows. It is the caller's responsibility to free\r
                                   this buffer.\r
   @param  RowInfoArraySize        If this is non-NULL on entry, then on exit it\r
                                   contains the number of elements in RowInfoArray.\r
@@ -2071,7 +2071,7 @@ HiiStringIdToImage (
                                   system font and color.\r
   @param  Blt                     Thus must point to a NULL on entry. A buffer will\r
                                   be allocated to hold the output and the pointer\r
-                                  updated on exit. It is the caller¡¯s\r
+                                  updated on exit. It is the caller's\r
                                   responsibility to free this buffer.\r
   @param  Baseline                Number of pixels from the bottom of the bitmap to\r
                                   the baseline.\r
@@ -2232,7 +2232,7 @@ Exit:
                                   are no more matching fonts.\r
   @param  StringInfoIn            Upon entry, points to the font to return\r
                                   information about.\r
-  @param  StringInfoOut           Upon return, contains the matching font¡¯s\r
+  @param  StringInfoOut           Upon return, contains the matching font's\r
                                   information.  If NULL, then no information is\r
                                   returned. It's caller's responsibility to free\r
                                   this buffer.\r
index 7a311f2..f198132 100644 (file)
-/** @file
-
-Copyright (c) 2007, Intel Corporation
-All rights reserved. This program and the accompanying materials
-are licensed and made available under the terms and conditions of the BSD License
-which accompanies this distribution.  The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-Module Name:
-
-    HiiDatabase.h
-
-Abstract:
-
-    Private structures definitions in HiiDatabase.
-
-Revision History
-
-
-**/
-
-#ifndef __HII_DATABASE_PRIVATE_H__
-#define __HII_DATABASE_PRIVATE_H__
-
-#include <PiDxe.h>
-
-#include <Protocol/ConsoleControl.h>
-#include <Protocol/DevicePath.h>
-#include <Protocol/HiiFont.h>
-#include <Protocol/HiiImage.h>
-#include <Protocol/HiiString.h>
-#include <Protocol/HiiDatabase.h>
-#include <Protocol/HiiConfigRouting.h>
-#include <Protocol/HiiConfigAccess.h>
-#include <Protocol/SimpleTextOut.h>
-
-#include <Guid/HiiKeyBoardLayout.h>
-
-
-#include <Library/DebugLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/UefiDriverEntryPoint.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/BaseLib.h>
-#include <Library/DevicePathLib.h>
-#include <Library/MemoryAllocationLib.h>
-
-#define HII_DATABASE_NOTIFY_GUID \
-  { \
-    0xc1c76, 0xd79e, 0x42fe, {0x86, 0xb, 0x8b, 0xe8, 0x7b, 0x3e, 0x7a, 0x78} \
-  }
-
-#define MAX_STRING_LENGTH                  1024
-#define MAX_FONT_NAME_LEN                  256
-#define NARROW_BASELINE                    15
-#define WIDE_BASELINE                      14
-#define SYS_FONT_INFO_MASK                 0x37
-#define REPLACE_UNKNOWN_GLYPH              0xFFFD
-#define PROPORTIONAL_GLYPH                 0x80
-#define NARROW_GLYPH                       0x40
-
-#define BITMAP_LEN_1_BIT(Width, Height)  (((Width) + 7) / 8 * (Height))
-#define BITMAP_LEN_4_BIT(Width, Height)  (((Width) + 1) / 2 * (Height))
-#define BITMAP_LEN_8_BIT(Width, Height)  ((Width) * (Height))
-#define BITMAP_LEN_24_BIT(Width, Height) ((Width) * (Height) * 3)
-
-//
-// Storage types
-//
-#define EFI_HII_VARSTORE_BUFFER            0
-#define EFI_HII_VARSTORE_NAME_VALUE        1
-#define EFI_HII_VARSTORE_EFI_VARIABLE      2
-
-#define HII_FORMSET_STORAGE_SIGNATURE           EFI_SIGNATURE_32 ('H', 'S', 'T', 'G')
-typedef struct {
-  UINTN               Signature;
-  LIST_ENTRY          Entry;
-
-  EFI_HII_HANDLE      HiiHandle;
-  EFI_HANDLE          DriverHandle;
-
-  UINT8               Type;   // EFI_HII_VARSTORE_BUFFER, EFI_HII_VARSTORE_NAME_VALUE, EFI_HII_VARSTORE_EFI_VARIABLE
-  EFI_GUID            Guid;
-  CHAR16              *Name;
-  UINT16              Size;
-} HII_FORMSET_STORAGE;
-
-#define HII_FORMSET_STORAGE_FROM_LINK(a)  CR (a, HII_FORMSET_STORAGE, Link, HII_FORMSET_STORAGE_SIGNATURE)
-
-
-//
-// String Package definitions
-//
-#define HII_STRING_PACKAGE_SIGNATURE    EFI_SIGNATURE_32 ('h','i','s','p')
-typedef struct _HII_STRING_PACKAGE_INSTANCE {
-  UINTN                                 Signature;
-  EFI_HII_STRING_PACKAGE_HDR            *StringPkgHdr;
-  UINT8                                 *StringBlock;
-  LIST_ENTRY                            StringEntry;
-  LIST_ENTRY                            FontInfoList;  // local font info list
-  UINT8                                 FontId;
-} HII_STRING_PACKAGE_INSTANCE;
-
-//
-// Form Package definitions
-//
-#define HII_IFR_PACKAGE_SIGNATURE       EFI_SIGNATURE_32 ('h','f','r','p')
-typedef struct _HII_IFR_PACKAGE_INSTANCE {
-  UINTN                                 Signature;
-  EFI_HII_PACKAGE_HEADER                FormPkgHdr;
-  UINT8                                 *IfrData;
-  LIST_ENTRY                            IfrEntry;
-} HII_IFR_PACKAGE_INSTANCE;
-
-//
-// Simple Font Package definitions
-//
-#define HII_S_FONT_PACKAGE_SIGNATURE    EFI_SIGNATURE_32 ('h','s','f','p')
-typedef struct _HII_SIMPLE_FONT_PACKAGE_INSTANCE {
-  UINTN                                 Signature;
-  EFI_HII_SIMPLE_FONT_PACKAGE_HDR       *SimpleFontPkgHdr;
-  LIST_ENTRY                            SimpleFontEntry;
-} HII_SIMPLE_FONT_PACKAGE_INSTANCE;
-
-//
-// Font Package definitions
-//
-#define HII_FONT_PACKAGE_SIGNATURE      EFI_SIGNATURE_32 ('h','i','f','p')
-typedef struct _HII_FONT_PACKAGE_INSTANCE {
-  UINTN                                 Signature;
-  EFI_HII_FONT_PACKAGE_HDR              *FontPkgHdr;
-  UINT8                                 *GlyphBlock;
-  LIST_ENTRY                            FontEntry;
-  LIST_ENTRY                            GlyphInfoList;
-} HII_FONT_PACKAGE_INSTANCE;
-
-#define HII_GLYPH_INFO_SIGNATURE        EFI_SIGNATURE_32 ('h','g','i','s')
-typedef struct _HII_GLYPH_INFO {
-  UINTN                                 Signature;
-  LIST_ENTRY                            Entry;
-  CHAR16                                CharId;
-  EFI_HII_GLYPH_INFO                    Cell;
-} HII_GLYPH_INFO;
-
-#define HII_FONT_INFO_SIGNATURE         EFI_SIGNATURE_32 ('h','l','f','i')
-typedef struct _HII_FONT_INFO {
-  UINTN                                 Signature;
-  LIST_ENTRY                            Entry;
-  LIST_ENTRY                            *GlobalEntry;
-  UINT8                                 FontId;
-} HII_FONT_INFO;
-
-#define HII_GLOBAL_FONT_INFO_SIGNATURE  EFI_SIGNATURE_32 ('h','g','f','i')
-typedef struct _HII_GLOBAL_FONT_INFO {
-  UINTN                                 Signature;
-  LIST_ENTRY                            Entry;
-  HII_FONT_PACKAGE_INSTANCE             *FontPackage;
-  UINTN                                 FontInfoSize;
-  EFI_FONT_INFO                         *FontInfo;
-} HII_GLOBAL_FONT_INFO;
-
-//
-// Image Package definitions
-//
-
-#define HII_PIXEL_MASK                  0x80
-
-typedef struct _HII_IMAGE_PACKAGE_INSTANCE {
-  EFI_HII_IMAGE_PACKAGE_HDR             ImagePkgHdr;
-  UINT32                                ImageBlockSize;
-  UINT32                                PaletteInfoSize;
-  UINT8                                 *ImageBlock;
-  UINT8                                 *PaletteBlock;
-} HII_IMAGE_PACKAGE_INSTANCE;
-
-//
-// Keyboard Layout Pacakge definitions
-//
-#define HII_KB_LAYOUT_PACKAGE_SIGNATURE EFI_SIGNATURE_32 ('h','k','l','p')
-typedef struct _HII_KEYBOARD_LAYOUT_PACKAGE_INSTANCE {
-  UINTN                                 Signature;
-  UINT8                                 *KeyboardPkg;
-  LIST_ENTRY                            KeyboardEntry;
-} HII_KEYBOARD_LAYOUT_PACKAGE_INSTANCE;
-
-//
-// Guid Package definitions
-//
-#define HII_GUID_PACKAGE_SIGNATURE      EFI_SIGNATURE_32 ('h','i','g','p')
-typedef struct _HII_GUID_PACKAGE_INSTANCE {
-  UINTN                                 Signature;
-  UINT8                                 *GuidPkg;
-  LIST_ENTRY                            GuidEntry;
-} HII_GUID_PACKAGE_INSTANCE;
-
-//
-// A package list can contain only one or less than one device path package.
-// This rule also applies to image package since ImageId can not be duplicate.
-//
-typedef struct _HII_DATABASE_PACKAGE_LIST_INSTANCE {
-  EFI_HII_PACKAGE_LIST_HEADER           PackageListHdr;
-  LIST_ENTRY                            GuidPkgHdr;
-  LIST_ENTRY                            FormPkgHdr;
-  LIST_ENTRY                            KeyboardLayoutHdr;
-  LIST_ENTRY                            StringPkgHdr;
-  LIST_ENTRY                            FontPkgHdr;
-  HII_IMAGE_PACKAGE_INSTANCE            *ImagePkg;
-  LIST_ENTRY                            SimpleFontPkgHdr;
-  UINT8                                 *DevicePathPkg;
-} HII_DATABASE_PACKAGE_LIST_INSTANCE;
-
-#define HII_HANDLE_SIGNATURE            EFI_SIGNATURE_32 ('h','i','h','l')
-
-typedef struct {
-  UINTN               Signature;
-  LIST_ENTRY          Handle;
-  UINTN               Key;
-} HII_HANDLE;
-
-#define HII_DATABASE_RECORD_SIGNATURE   EFI_SIGNATURE_32 ('h','i','d','r')
-
-typedef struct _HII_DATABASE_RECORD {
-  UINTN                                 Signature;
-  HII_DATABASE_PACKAGE_LIST_INSTANCE    *PackageList;
-  EFI_HANDLE                            DriverHandle;
-  EFI_HII_HANDLE                        Handle;
-  LIST_ENTRY                            DatabaseEntry;
-} HII_DATABASE_RECORD;
-
-#define HII_DATABASE_NOTIFY_SIGNATURE   EFI_SIGNATURE_32 ('h','i','d','n')
-
-typedef struct _HII_DATABASE_NOTIFY {
-  UINTN                                 Signature;
-  EFI_HANDLE                            NotifyHandle;
-  UINT8                                 PackageType;
-  EFI_GUID                              *PackageGuid;
-  EFI_HII_DATABASE_NOTIFY               PackageNotifyFn;
-  EFI_HII_DATABASE_NOTIFY_TYPE          NotifyType;
-  LIST_ENTRY                            DatabaseNotifyEntry;
-} HII_DATABASE_NOTIFY;
-
-#define HII_DATABASE_PRIVATE_DATA_SIGNATURE EFI_SIGNATURE_32 ('H', 'i', 'D', 'p')
-
-typedef struct _HII_DATABASE_PRIVATE_DATA {
-  UINTN                                 Signature;
-  LIST_ENTRY                            DatabaseList;
-  LIST_ENTRY                            DatabaseNotifyList;
-  EFI_HII_FONT_PROTOCOL                 HiiFont;
-#ifndef DISABLE_UNUSED_HII_PROTOCOLS
-  EFI_HII_IMAGE_PROTOCOL                HiiImage;
-#endif
-  EFI_HII_STRING_PROTOCOL               HiiString;
-  EFI_HII_DATABASE_PROTOCOL             HiiDatabase;
-  EFI_HII_CONFIG_ROUTING_PROTOCOL       ConfigRouting;
-  LIST_ENTRY                            HiiHandleList;
-  INTN                                  HiiHandleCount;
-  LIST_ENTRY                            FontInfoList;  // global font info list
-  UINTN                                 Attribute;     // default system color
-  EFI_GUID                              CurrentLayoutGuid;
-  EFI_HII_KEYBOARD_LAYOUT               *CurrentLayout;
-} HII_DATABASE_PRIVATE_DATA;
-
-#define HII_FONT_DATABASE_PRIVATE_DATA_FROM_THIS(a) \
-  CR (a, \
-      HII_DATABASE_PRIVATE_DATA, \
-      HiiFont, \
-      HII_DATABASE_PRIVATE_DATA_SIGNATURE \
-      )
-
-#define HII_IMAGE_DATABASE_PRIVATE_DATA_FROM_THIS(a) \
-  CR (a, \
-      HII_DATABASE_PRIVATE_DATA, \
-      HiiImage, \
-      HII_DATABASE_PRIVATE_DATA_SIGNATURE \
-      )
-
-#define HII_STRING_DATABASE_PRIVATE_DATA_FROM_THIS(a) \
-  CR (a, \
-      HII_DATABASE_PRIVATE_DATA, \
-      HiiString, \
-      HII_DATABASE_PRIVATE_DATA_SIGNATURE \
-      )
-
-#define HII_DATABASE_DATABASE_PRIVATE_DATA_FROM_THIS(a) \
-  CR (a, \
-      HII_DATABASE_PRIVATE_DATA, \
-      HiiDatabase, \
-      HII_DATABASE_PRIVATE_DATA_SIGNATURE \
-      )
-
-#define CONFIG_ROUTING_DATABASE_PRIVATE_DATA_FROM_THIS(a) \
-  CR (a, \
-      HII_DATABASE_PRIVATE_DATA, \
-      ConfigRouting, \
-      HII_DATABASE_PRIVATE_DATA_SIGNATURE \
-      )
-
-//
-// Internal function prototypes.
-//
-
-/**
-  This function checks whether a handle is a valid EFI_HII_HANDLE
-
-  @param  Handle                  Pointer to a EFI_HII_HANDLE
-
-  @retval TRUE                    Valid
-  @retval FALSE                   Invalid
-
-**/
-BOOLEAN
-IsHiiHandleValid (
-  EFI_HII_HANDLE Handle
-  )
-;
-
-
-/**
-  This function checks whether EFI_FONT_INFO exists in current database. If
-  FontInfoMask is specified, check what options can be used to make a match.
-  Note that the masks relate to where the system default should be supplied
-  are ignored by this function.
-
-  @param  Private                 Hii database private structure.
-  @param  FontInfo                Points to EFI_FONT_INFO structure.
-  @param  FontInfoMask            If not NULL, describes what options can be used
-                                  to make a match between the font requested and
-                                  the font available. The caller must guarantee
-                                  this mask is valid.
-  @param  FontHandle              On entry, Points to the font handle returned by a
-                                  previous  call to GetFontInfo() or NULL to start
-                                  with the first font.
-  @param  GlobalFontInfo          If not NULL, output the corresponding globa font
-                                  info.
-
-  @retval TRUE                    Existed
-  @retval FALSE                   Not existed
-
-**/
-BOOLEAN
-IsFontInfoExisted (
-  IN  HII_DATABASE_PRIVATE_DATA *Private,
-  IN  EFI_FONT_INFO             *FontInfo,
-  IN  EFI_FONT_INFO_MASK        *FontInfoMask,   OPTIONAL
-  IN  EFI_FONT_HANDLE           FontHandle,      OPTIONAL
-  OUT HII_GLOBAL_FONT_INFO      **GlobalFontInfo OPTIONAL
-  )
-;
-
-
-/**
-  Retrieve system default font and color.
-
-  @param  Private                 HII database driver private data.
-  @param  FontInfo                Points to system default font output-related
-                                  information. It's caller's responsibility to free
-                                  this buffer.
-  @param  FontInfoSize            If not NULL, output the size of buffer FontInfo.
-
-  @retval EFI_SUCCESS             Cell information is added to the GlyphInfoList.
-  @retval EFI_OUT_OF_RESOURCES    The system is out of resources to accomplish the
-                                  task.
-  @retval EFI_INVALID_PARAMETER   Any input parameter is invalid.
-
-**/
-EFI_STATUS
-GetSystemFont (
-  IN  HII_DATABASE_PRIVATE_DATA      *Private,
-  OUT EFI_FONT_DISPLAY_INFO          **FontInfo,
-  OUT UINTN                          *FontInfoSize OPTIONAL
-  )
-;
-
-
-/**
-  Parse all string blocks to find a String block specified by StringId.
-  If StringId = (EFI_STRING_ID) (-1), find out all EFI_HII_SIBT_FONT blocks
-  within this string package and backup its information.
-  If StringId = 0, output the string id of last string block (EFI_HII_SIBT_END).
-
-  @param  Private                 Hii database private structure.
-  @param  StringPackage           Hii string package instance.
-  @param  StringId                The string¡¯s id, which is unique within
-                                  PackageList.
-  @param  BlockType               Output the block type of found string block.
-  @param  StringBlockAddr         Output the block address of found string block.
-  @param  StringTextOffset        Offset, relative to the found block address, of
-                                  the  string text information.
-  @param  LastStringId            Output the last string id when StringId = 0.
-
-  @retval EFI_SUCCESS             The string text and font is retrieved
-                                  successfully.
-  @retval EFI_NOT_FOUND           The specified text or font info can not be found
-                                  out.
-  @retval EFI_OUT_OF_RESOURCES    The system is out of resources to accomplish the
-                                  task.
-
-**/
-EFI_STATUS
-FindStringBlock (
-  IN HII_DATABASE_PRIVATE_DATA        *Private,
-  IN  HII_STRING_PACKAGE_INSTANCE     *StringPackage,
-  IN  EFI_STRING_ID                   StringId,
-  OUT UINT8                           *BlockType, OPTIONAL
-  OUT UINT8                           **StringBlockAddr, OPTIONAL
-  OUT UINTN                           *StringTextOffset, OPTIONAL
-  OUT EFI_STRING_ID                   *LastStringId OPTIONAL
-  )
-;
-
-
-/**
-  Parse all glyph blocks to find a glyph block specified by CharValue.
-  If CharValue = (CHAR16) (-1), collect all default character cell information
-  within this font package and backup its information.
-
-  @param  FontPackage             Hii string package instance.
-  @param  CharValue               Unicode character value, which identifies a glyph
-                                  block.
-  @param  GlyphBuffer             Output the corresponding bitmap data of the found
-                                  block. It is the caller's responsiblity to free
-                                  this buffer.
-  @param  Cell                    Output cell information of the encoded bitmap.
-  @param  GlyphBufferLen          If not NULL, output the length of GlyphBuffer.
-
-  @retval EFI_SUCCESS             The bitmap data is retrieved successfully.
-  @retval EFI_NOT_FOUND           The specified CharValue does not exist in current
-                                  database.
-  @retval EFI_OUT_OF_RESOURCES    The system is out of resources to accomplish the
-                                  task.
-
-**/
-EFI_STATUS
-FindGlyphBlock (
-  IN  HII_FONT_PACKAGE_INSTANCE      *FontPackage,
-  IN  CHAR16                         CharValue,
-  OUT UINT8                          **GlyphBuffer, OPTIONAL
-  OUT EFI_HII_GLYPH_INFO             *Cell, OPTIONAL
-  OUT UINTN                          *GlyphBufferLen OPTIONAL
-  )
-;
-
-//
-// EFI_HII_FONT_PROTOCOL protocol interfaces
-//
-
-
-/**
-  Renders a string to a bitmap or to the display.
-
-  @param  This                    A pointer to the EFI_HII_FONT_PROTOCOL instance.
-  @param  Flags                   Describes how the string is to be drawn.
-  @param  String                  Points to the null-terminated string to be
-                                  displayed.
-  @param  StringInfo              Points to the string output information,
-                                  including the color and font.  If NULL, then the
-                                  string will be output in the default system font
-                                  and color.
-  @param  Blt                     If this points to a non-NULL on entry, this
-                                  points to the image, which is Width pixels   wide
-                                  and Height pixels high. The string will be drawn
-                                  onto this image and
-                                  EFI_HII_OUT_FLAG_CLIP is implied. If this points
-                                  to a NULL on entry, then a              buffer
-                                  will be allocated to hold the generated image and
-                                  the pointer updated on exit. It is the caller¡¯s
-                                  responsibility to free this buffer.
-  @param  BltX,BLTY               Specifies the offset from the left and top edge
-                                  of the image of the first character cell in the
-                                  image.
-  @param  RowInfoArray            If this is non-NULL on entry, then on exit, this
-                                  will point to an allocated buffer    containing
-                                  row information and RowInfoArraySize will be
-                                  updated to contain the        number of elements.
-                                  This array describes the characters which were at
-                                  least partially drawn and the heights of the
-                                  rows. It is the caller¡¯s responsibility to free
-                                  this buffer.
-  @param  RowInfoArraySize        If this is non-NULL on entry, then on exit it
-                                  contains the number of elements in RowInfoArray.
-  @param  ColumnInfoArray         If this is non-NULL, then on return it will be
-                                  filled with the horizontal offset for each
-                                  character in the string on the row where it is
-                                  displayed. Non-printing characters will     have
-                                  the offset ~0. The caller is responsible to
-                                  allocate a buffer large enough so that    there
-                                  is one entry for each character in the string,
-                                  not including the null-terminator. It is possible
-                                  when character display is normalized that some
-                                  character cells overlap.
-
-  @retval EFI_SUCCESS             The string was successfully rendered.
-  @retval EFI_OUT_OF_RESOURCES    Unable to allocate an output buffer for
-                                  RowInfoArray or Blt.
-  @retval EFI_INVALID_PARAMETER   The String was NULL.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiStringToImage (
-  IN  CONST EFI_HII_FONT_PROTOCOL    *This,
-  IN  EFI_HII_OUT_FLAGS              Flags,
-  IN  CONST EFI_STRING               String,
-  IN  CONST EFI_FONT_DISPLAY_INFO    *StringInfo       OPTIONAL,
-  IN  OUT EFI_IMAGE_OUTPUT           **Blt,
-  IN  UINTN                          BltX,
-  IN  UINTN                          BltY,
-  OUT EFI_HII_ROW_INFO               **RowInfoArray    OPTIONAL,
-  OUT UINTN                          *RowInfoArraySize OPTIONAL,
-  OUT UINTN                          *ColumnInfoArray  OPTIONAL
-  )
-;
-
-
-/**
-  Render a string to a bitmap or the screen containing the contents of the specified string.
-
-  @param  This                    A pointer to the EFI_HII_FONT_PROTOCOL instance.
-  @param  Flags                   Describes how the string is to be drawn.
-  @param  PackageList             The package list in the HII database to search
-                                  for the specified string.
-  @param  StringId                The string¡¯s id, which is unique within
-                                  PackageList.
-  @param  Language                Points to the language for the retrieved string.
-                                  If NULL, then the current system language is
-                                  used.
-  @param  StringInfo              Points to the string output information,
-                                  including the color and font.  If NULL, then the
-                                  string will be output in the default system font
-                                  and color.
-  @param  Blt                     If this points to a non-NULL on entry, this
-                                  points to the image, which is Width pixels   wide
-                                  and Height pixels high. The string will be drawn
-                                  onto this image and
-                                  EFI_HII_OUT_FLAG_CLIP is implied. If this points
-                                  to a NULL on entry, then a              buffer
-                                  will be allocated to hold the generated image and
-                                  the pointer updated on exit. It is the caller¡¯s
-                                  responsibility to free this buffer.
-  @param  BltX,BLTY               Specifies the offset from the left and top edge
-                                  of the image of the first character cell in the
-                                  image.
-  @param  RowInfoArray            If this is non-NULL on entry, then on exit, this
-                                  will point to an allocated buffer    containing
-                                  row information and RowInfoArraySize will be
-                                  updated to contain the        number of elements.
-                                  This array describes the characters which were at
-                                  least partially drawn and the heights of the
-                                  rows. It is the caller¡¯s responsibility to free
-                                  this buffer.
-  @param  RowInfoArraySize        If this is non-NULL on entry, then on exit it
-                                  contains the number of elements in RowInfoArray.
-  @param  ColumnInfoArray         If this is non-NULL, then on return it will be
-                                  filled with the horizontal offset for each
-                                  character in the string on the row where it is
-                                  displayed. Non-printing characters will     have
-                                  the offset ~0. The caller is responsible to
-                                  allocate a buffer large enough so that    there
-                                  is one entry for each character in the string,
-                                  not including the null-terminator. It is possible
-                                  when character display is normalized that some
-                                  character cells overlap.
-
-  @retval EFI_SUCCESS             The string was successfully rendered.
-  @retval EFI_OUT_OF_RESOURCES    Unable to allocate an output buffer for
-                                  RowInfoArray or Blt.
-  @retval EFI_INVALID_PARAMETER   The String was NULL.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiStringIdToImage (
-  IN  CONST EFI_HII_FONT_PROTOCOL    *This,
-  IN  EFI_HII_OUT_FLAGS              Flags,
-  IN  EFI_HII_HANDLE                 PackageList,
-  IN  EFI_STRING_ID                  StringId,
-  IN  CONST CHAR8*                   Language,
-  IN  CONST EFI_FONT_DISPLAY_INFO    *StringInfo       OPTIONAL,
-  IN  OUT EFI_IMAGE_OUTPUT           **Blt,
-  IN  UINTN                          BltX,
-  IN  UINTN                          BltY,
-  OUT EFI_HII_ROW_INFO               **RowInfoArray    OPTIONAL,
-  OUT UINTN                          *RowInfoArraySize OPTIONAL,
-  OUT UINTN                          *ColumnInfoArray  OPTIONAL
-  )
-;
-
-
-/**
-  Convert the glyph for a single character into a bitmap.
-
-  @param  This                    A pointer to the EFI_HII_FONT_PROTOCOL instance.
-  @param  Char                    Character to retrieve.
-  @param  StringInfo              Points to the string font and color information
-                                  or NULL if the string should use the default
-                                  system font and color.
-  @param  Blt                     Thus must point to a NULL on entry. A buffer will
-                                  be allocated to hold the output and the pointer
-                                  updated on exit. It is the caller¡¯s
-                                  responsibility to free this buffer.
-  @param  Baseline                Number of pixels from the bottom of the bitmap to
-                                  the baseline.
-
-  @retval EFI_SUCCESS             Glyph bitmap created.
-  @retval EFI_OUT_OF_RESOURCES    Unable to allocate the output buffer Blt.
-  @retval EFI_WARN_UNKNOWN_GLYPH  The glyph was unknown and was replaced with the
-                                  glyph for Unicode character 0xFFFD.
-  @retval EFI_INVALID_PARAMETER   Blt is NULL or *Blt is not NULL.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiGetGlyph (
-  IN  CONST EFI_HII_FONT_PROTOCOL    *This,
-  IN  CHAR16                         Char,
-  IN  CONST EFI_FONT_DISPLAY_INFO    *StringInfo,
-  OUT EFI_IMAGE_OUTPUT               **Blt,
-  OUT UINTN                          *Baseline OPTIONAL
-  )
-;
-
-
-/**
-  This function iterates through fonts which match the specified font, using
-  the specified criteria. If String is non-NULL, then all of the characters in
-  the string must exist in order for a candidate font to be returned.
-
-  @param  This                    A pointer to the EFI_HII_FONT_PROTOCOL instance.
-  @param  FontHandle              On entry, points to the font handle returned by a
-                                   previous call to GetFontInfo() or NULL to start
-                                  with the  first font. On return, points to the
-                                  returned font handle or points to NULL if there
-                                  are no more matching fonts.
-  @param  StringInfoIn            Upon entry, points to the font to return
-                                  information about.
-  @param  StringInfoOut           Upon return, contains the matching font¡¯s
-                                  information.  If NULL, then no information is
-                                  returned. It's caller's responsibility to free
-                                  this buffer.
-  @param  String                  Points to the string which will be tested to
-                                  determine  if all characters are available. If
-                                  NULL, then any font  is acceptable.
-
-  @retval EFI_SUCCESS             Matching font returned successfully.
-  @retval EFI_NOT_FOUND           No matching font was found.
-  @retval EFI_INVALID_PARAMETER   StringInfoIn is NULL.
-  @retval EFI_OUT_OF_RESOURCES    There were insufficient resources to complete the
-                                  request.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiGetFontInfo (
-  IN  CONST EFI_HII_FONT_PROTOCOL    *This,
-  IN  OUT   EFI_FONT_HANDLE          *FontHandle,
-  IN  CONST EFI_FONT_DISPLAY_INFO    *StringInfoIn,
-  OUT       EFI_FONT_DISPLAY_INFO    **StringInfoOut,
-  IN  CONST EFI_STRING               String OPTIONAL
-  )
-;
-
-//
-// EFI_HII_IMAGE_PROTOCOL interfaces
-//
-
-
-/**
-  This function adds the image Image to the group of images owned by PackageList, and returns
-  a new image identifier (ImageId).
-
-  @param  This                    A pointer to the EFI_HII_IMAGE_PROTOCOL instance.
-  @param  PackageList             Handle of the package list where this image will
-                                  be added.
-  @param  ImageId                 On return, contains the new image id, which is
-                                  unique within PackageList.
-  @param  Image                   Points to the image.
-
-  @retval EFI_SUCCESS             The new image was added successfully.
-  @retval EFI_NOT_FOUND           The specified PackageList could not be found in
-                                  database.
-  @retval EFI_OUT_OF_RESOURCES    Could not add the image due to lack of resources.
-  @retval EFI_INVALID_PARAMETER   Image is NULL or ImageId is NULL.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiNewImage (
-  IN  CONST EFI_HII_IMAGE_PROTOCOL   *This,
-  IN  EFI_HII_HANDLE                 PackageList,
-  OUT EFI_IMAGE_ID                   *ImageId,
-  IN  CONST EFI_IMAGE_INPUT          *Image
-  )
-;
-
-
-/**
-  This function retrieves the image specified by ImageId which is associated with
-  the specified PackageList and copies it into the buffer specified by Image.
-
-  @param  This                    A pointer to the EFI_HII_IMAGE_PROTOCOL instance.
-  @param  PackageList             Handle of the package list where this image will
-                                  be searched.
-  @param  ImageId                 The image¡¯s id,, which is unique within
-                                  PackageList.
-  @param  Image                   Points to the image.
-  @param  ImageSize               On entry, points to the size of the buffer
-                                  pointed to by Image, in bytes. On return, points
-                                  to the length of the image, in bytes.
-
-  @retval EFI_SUCCESS             The new image was returned successfully.
-  @retval EFI_NOT_FOUND           The image specified by ImageId is not available.
-  @retval EFI_BUFFER_TOO_SMALL    The buffer specified by ImageSize is too small to
-                                  hold the image.
-  @retval EFI_INVALID_PARAMETER   The Image or ImageSize was NULL.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiGetImage (
-  IN  CONST EFI_HII_IMAGE_PROTOCOL   *This,
-  IN  EFI_HII_HANDLE                 PackageList,
-  IN  EFI_IMAGE_ID                   ImageId,
-  OUT EFI_IMAGE_INPUT                *Image,
-  OUT UINTN                          *ImageSize
-  )
-;
-
-
-/**
-  This function updates the image specified by ImageId in the specified PackageListHandle to
-  the image specified by Image.
-
-  @param  This                    A pointer to the EFI_HII_IMAGE_PROTOCOL instance.
-  @param  PackageList             The package list containing the images.
-  @param  ImageId                 The image¡¯s id,, which is unique within
-                                  PackageList.
-  @param  Image                   Points to the image.
-
-  @retval EFI_SUCCESS             The new image was updated successfully.
-  @retval EFI_NOT_FOUND           The image specified by ImageId is not in the
-                                  database.
-  @retval EFI_INVALID_PARAMETER   The Image was NULL.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiSetImage (
-  IN CONST EFI_HII_IMAGE_PROTOCOL    *This,
-  IN EFI_HII_HANDLE                  PackageList,
-  IN EFI_IMAGE_ID                    ImageId,
-  IN CONST EFI_IMAGE_INPUT           *Image
-  )
-;
-
-
-/**
-  This function renders an image to a bitmap or the screen using the specified
-  color and options. It draws the image on an existing bitmap, allocates a new
-  bitmap or uses the screen. The images can be clipped.
-
-  @param  This                    A pointer to the EFI_HII_IMAGE_PROTOCOL instance.
-  @param  Flags                   Describes how the image is to be drawn.
-  @param  Image                   Points to the image to be displayed.
-  @param  Blt                     If this points to a non-NULL on entry, this
-                                  points to the image, which is Width pixels wide
-                                  and Height pixels high.  The image will be drawn
-                                  onto this image and  EFI_HII_DRAW_FLAG_CLIP is
-                                  implied. If this points to a  NULL on entry, then
-                                  a buffer will be allocated to hold  the generated
-                                  image and the pointer updated on exit. It is the
-                                  caller¡¯s responsibility to free this buffer.
-  @param  BltY                    Specifies the offset from the left and top edge
-                                  of the  output image of the first pixel in the
-                                  image.
-
-  @retval EFI_SUCCESS             The image was successfully drawn.
-  @retval EFI_OUT_OF_RESOURCES    Unable to allocate an output buffer for Blt.
-  @retval EFI_INVALID_PARAMETER   The Image or Blt was NULL.
-  @retval EFI_INVALID_PARAMETER   Any combination of Flags is invalid.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiDrawImage (
-  IN CONST EFI_HII_IMAGE_PROTOCOL    *This,
-  IN EFI_HII_DRAW_FLAGS              Flags,
-  IN CONST EFI_IMAGE_INPUT           *Image,
-  IN OUT EFI_IMAGE_OUTPUT            **Blt,
-  IN UINTN                           BltX,
-  IN UINTN                           BltY
-  )
-;
-
-
-/**
-  This function renders an image to a bitmap or the screen using the specified
-  color and options. It draws the image on an existing bitmap, allocates a new
-  bitmap or uses the screen. The images can be clipped.
-
-  @param  This                    A pointer to the EFI_HII_IMAGE_PROTOCOL instance.
-  @param  Flags                   Describes how the image is to be drawn.
-  @param  PackageList             The package list in the HII database to search
-                                  for the  specified image.
-  @param  ImageId                 The image's id, which is unique within
-                                  PackageList.
-  @param  Blt                     If this points to a non-NULL on entry, this
-                                  points to the image, which is Width pixels wide
-                                  and Height pixels high. The image will be drawn
-                                  onto this image and
-                                  EFI_HII_DRAW_FLAG_CLIP is implied. If this points
-                                  to a  NULL on entry, then a buffer will be
-                                  allocated to hold  the generated image and the
-                                  pointer updated on exit. It is the caller¡¯s
-                                  responsibility to free this buffer.
-  @param  BltY                    Specifies the offset from the left and top edge
-                                  of the  output image of the first pixel in the
-                                  image.
-
-  @retval EFI_SUCCESS             The image was successfully drawn.
-  @retval EFI_OUT_OF_RESOURCES    Unable to allocate an output buffer for Blt.
-  @retval EFI_INVALID_PARAMETER   The Image was NULL.
-  @retval EFI_NOT_FOUND           The specified packagelist could not be found in
-                                  current database.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiDrawImageId (
-  IN CONST EFI_HII_IMAGE_PROTOCOL    *This,
-  IN EFI_HII_DRAW_FLAGS              Flags,
-  IN EFI_HII_HANDLE                  PackageList,
-  IN EFI_IMAGE_ID                    ImageId,
-  IN OUT EFI_IMAGE_OUTPUT            **Blt,
-  IN UINTN                           BltX,
-  IN UINTN                           BltY
-  )
-
-;
-
-//
-// EFI_HII_STRING_PROTOCOL
-//
-
-
-/**
-  This function adds the string String to the group of strings owned by PackageList, with the
-  specified font information StringFontInfo and returns a new string id.
-
-  @param  This                    A pointer to the EFI_HII_STRING_PROTOCOL
-                                  instance.
-  @param  PackageList             Handle of the package list where this string will
-                                  be added.
-  @param  StringId                On return, contains the new strings id, which is
-                                  unique within PackageList.
-  @param  Language                Points to the language for the new string.
-  @param  LanguageName            Points to the printable language name to
-                                  associate with the passed in  Language field.If
-                                  LanguageName is not NULL and the string package
-                                  header's LanguageName  associated with a given
-                                  Language is not zero, the LanguageName being
-                                  passed  in will be ignored.
-  @param  String                  Points to the new null-terminated string.
-  @param  StringFontInfo          Points to the new string¡¯s font information or
-                                  NULL if the string should have the default system
-                                  font, size and style.
-
-  @retval EFI_SUCCESS             The new string was added successfully.
-  @retval EFI_NOT_FOUND           The specified PackageList could not be found in
-                                  database.
-  @retval EFI_OUT_OF_RESOURCES    Could not add the string due to lack of
-                                  resources.
-  @retval EFI_INVALID_PARAMETER   String is NULL or StringId is NULL or Language is
-                                  NULL.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiNewString (
-  IN  CONST EFI_HII_STRING_PROTOCOL   *This,
-  IN  EFI_HII_HANDLE                  PackageList,
-  OUT EFI_STRING_ID                   *StringId,
-  IN  CONST CHAR8                     *Language,
-  IN  CONST CHAR16                    *LanguageName, OPTIONAL
-  IN  CONST EFI_STRING                String,
-  IN  CONST EFI_FONT_INFO             *StringFontInfo OPTIONAL
-  )
-;
-
-
-/**
-  This function retrieves the string specified by StringId which is associated
-  with the specified PackageList in the language Language and copies it into
-  the buffer specified by String.
-
-  @param  This                    A pointer to the EFI_HII_STRING_PROTOCOL
-                                  instance.
-  @param  Language                Points to the language for the retrieved string.
-  @param  PackageList             The package list in the HII database to search
-                                  for the  specified string.
-  @param  StringId                The string's id, which is unique within
-                                  PackageList.
-  @param  String                  Points to the new null-terminated string.
-  @param  StringSize              On entry, points to the size of the buffer
-                                  pointed to by  String, in bytes. On return,
-                                  points to the length of the string, in bytes.
-  @param  StringFontInfo          If not NULL, points to the string¡¯s font
-                                  information.  It's caller's responsibility to
-                                  free this buffer.
-
-  @retval EFI_SUCCESS             The string was returned successfully.
-  @retval EFI_NOT_FOUND           The string specified by StringId is not
-                                  available.
-  @retval EFI_NOT_FOUND           The string specified by StringId is available but
-                                  not in the specified language.
-  @retval EFI_BUFFER_TOO_SMALL    The buffer specified by StringSize is too small
-                                  to  hold the string.
-  @retval EFI_INVALID_PARAMETER   The String or Language or StringSize was NULL.
-  @retval EFI_OUT_OF_RESOURCES    There were insufficient resources to complete the
-                                   request.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiGetString (
-  IN  CONST EFI_HII_STRING_PROTOCOL   *This,
-  IN  CONST CHAR8                     *Language,
-  IN  EFI_HII_HANDLE                  PackageList,
-  IN  EFI_STRING_ID                   StringId,
-  OUT EFI_STRING                      String,
-  IN  OUT UINTN                       *StringSize,
-  OUT EFI_FONT_INFO                   **StringFontInfo OPTIONAL
-  )
-;
-
-
-/**
-  This function updates the string specified by StringId in the specified PackageList to the text
-  specified by String and, optionally, the font information specified by StringFontInfo.
-
-  @param  This                    A pointer to the EFI_HII_STRING_PROTOCOL
-                                  instance.
-  @param  PackageList             The package list containing the strings.
-  @param  StringId                The string¡¯s id, which is unique within
-                                  PackageList.
-  @param  Language                Points to the language for the updated string.
-  @param  String                  Points to the new null-terminated string.
-  @param  StringFontInfo          Points to the string¡¯s font information or NULL
-                                  if the string font information is not changed.
-
-  @retval EFI_SUCCESS             The string was updated successfully.
-  @retval EFI_NOT_FOUND           The string specified by StringId is not in the
-                                  database.
-  @retval EFI_INVALID_PARAMETER   The String or Language was NULL.
-  @retval EFI_OUT_OF_RESOURCES    The system is out of resources to accomplish the
-                                  task.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiSetString (
-  IN CONST EFI_HII_STRING_PROTOCOL    *This,
-  IN EFI_HII_HANDLE                   PackageList,
-  IN EFI_STRING_ID                    StringId,
-  IN CONST CHAR8                      *Language,
-  IN CONST EFI_STRING                 String,
-  IN CONST EFI_FONT_INFO              *StringFontInfo OPTIONAL
-  )
-;
-
-
-/**
-  This function returns the list of supported languages, in the format specified
-  in Appendix M of UEFI 2.1 spec.
-
-  @param  This                    A pointer to the EFI_HII_STRING_PROTOCOL
-                                  instance.
-  @param  PackageList             The package list to examine.
-  @param  Languages               Points to the buffer to hold the returned string.
-  @param  LanguagesSize           On entry, points to the size of the buffer
-                                  pointed to by  Languages, in bytes. On  return,
-                                  points to the length of Languages, in bytes.
-
-  @retval EFI_SUCCESS             The languages were returned successfully.
-  @retval EFI_INVALID_PARAMETER   The Languages or LanguagesSize was NULL.
-  @retval EFI_BUFFER_TOO_SMALL    The LanguagesSize is too small to hold the list
-                                  of  supported languages. LanguageSize is updated
-                                  to contain the required size.
-  @retval EFI_NOT_FOUND           Could not find string package in specified
-                                  packagelist.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiGetLanguages (
-  IN CONST EFI_HII_STRING_PROTOCOL    *This,
-  IN EFI_HII_HANDLE                   PackageList,
-  IN OUT CHAR8                        *Languages,
-  IN OUT UINTN                        *LanguagesSize
-  )
-;
-
-
-/**
-  Each string package has associated with it a single primary language and zero
-  or more secondary languages. This routine returns the secondary languages
-  associated with a package list.
-
-  @param  This                    A pointer to the EFI_HII_STRING_PROTOCOL
-                                  instance.
-  @param  PackageList             The package list to examine.
-  @param  FirstLanguage           Points to the primary language.
-  @param  SecondaryLanguages      Points to the buffer to hold the returned list of
-                                   secondary languages for the specified
-                                  FirstLanguage. If there are no secondary
-                                  languages, the function  returns successfully,
-                                  but this is set to NULL.
-  @param  SecondaryLanguageSize   On entry, points to the size of the buffer
-                                  pointed to  by SecondLanguages, in bytes. On
-                                  return, points to the length of SecondLanguages
-                                  in bytes.
-
-  @retval EFI_SUCCESS             Secondary languages were correctly returned.
-  @retval EFI_INVALID_PARAMETER   FirstLanguage or SecondLanguages or
-                                  SecondLanguagesSize was NULL.
-  @retval EFI_BUFFER_TOO_SMALL    The buffer specified by SecondLanguagesSize is
-                                  too small to hold the returned information.
-                                  SecondLanguageSize is updated to hold the size of
-                                  the buffer required.
-  @retval EFI_NOT_FOUND           The language specified by FirstLanguage is not
-                                  present in the specified package list.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiGetSecondaryLanguages (
-  IN CONST EFI_HII_STRING_PROTOCOL   *This,
-  IN EFI_HII_HANDLE                  PackageList,
-  IN CONST CHAR8                     *FirstLanguage,
-  IN OUT CHAR8                       *SecondLanguages,
-  IN OUT UINTN                       *SecondLanguagesSize
-  )
-;
-
-//
-// EFI_HII_DATABASE_PROTOCOL protocol interfaces
-//
-
-
-/**
-  This function adds the packages in the package list to the database and returns a handle. If there is a
-  EFI_DEVICE_PATH_PROTOCOL associated with the DriverHandle, then this function will
-  create a package of type EFI_PACKAGE_TYPE_DEVICE_PATH and add it to the package list.
-
-  @param  This                    A pointer to the EFI_HII_DATABASE_PROTOCOL
-                                  instance.
-  @param  PackageList             A pointer to an EFI_HII_PACKAGE_LIST_HEADER
-                                  structure.
-  @param  DriverHandle            Associate the package list with this EFI handle.
-  @param  Handle                  A pointer to the EFI_HII_HANDLE instance.
-
-  @retval EFI_SUCCESS             The package list associated with the Handle was
-                                  added to the HII database.
-  @retval EFI_OUT_OF_RESOURCES    Unable to allocate necessary resources for the
-                                  new database contents.
-  @retval EFI_INVALID_PARAMETER   PackageList is NULL or Handle is NULL.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiNewPackageList (
-  IN CONST EFI_HII_DATABASE_PROTOCOL    *This,
-  IN CONST EFI_HII_PACKAGE_LIST_HEADER  *PackageList,
-  IN CONST EFI_HANDLE                   DriverHandle,
-  OUT EFI_HII_HANDLE                    *Handle
-  )
-;
-
-
-/**
-  This function removes the package list that is associated with a handle Handle
-  from the HII database. Before removing the package, any registered functions
-  with the notification type REMOVE_PACK and the same package type will be called.
-
-  @param  This                    A pointer to the EFI_HII_DATABASE_PROTOCOL
-                                  instance.
-  @param  Handle                  The handle that was registered to the data that
-                                  is requested  for removal.
-
-  @retval EFI_SUCCESS             The data associated with the Handle was removed
-                                  from  the HII database.
-  @retval EFI_NOT_FOUND           The specified PackageList could not be found in
-                                  database.
-  @retval EFI_INVALID_PARAMETER   The Handle was not valid.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiRemovePackageList (
-  IN CONST EFI_HII_DATABASE_PROTOCOL    *This,
-  IN EFI_HII_HANDLE                     Handle
-  )
-;
-
-
-/**
-  This function updates the existing package list (which has the specified Handle)
-  in the HII databases, using the new package list specified by PackageList.
-
-  @param  This                    A pointer to the EFI_HII_DATABASE_PROTOCOL
-                                  instance.
-  @param  Handle                  The handle that was registered to the data that
-                                  is  requested to be updated.
-  @param  PackageList             A pointer to an EFI_HII_PACKAGE_LIST_HEADER
-                                  package.
-
-  @retval EFI_SUCCESS             The HII database was successfully updated.
-  @retval EFI_OUT_OF_RESOURCES    Unable to allocate enough memory for the updated
-                                  database.
-  @retval EFI_INVALID_PARAMETER   Handle or PackageList was NULL.
-  @retval EFI_NOT_FOUND           The Handle was not valid or could not be found in
-                                  database.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiUpdatePackageList (
-  IN CONST EFI_HII_DATABASE_PROTOCOL    *This,
-  IN EFI_HII_HANDLE                     Handle,
-  IN CONST EFI_HII_PACKAGE_LIST_HEADER  *PackageList
-  )
-;
-
-
-/**
-  This function returns a list of the package handles of the specified type
-  that are currently active in the database. The pseudo-type
-  EFI_HII_PACKAGE_TYPE_ALL will cause all package handles to be listed.
-
-  @param  This                    A pointer to the EFI_HII_DATABASE_PROTOCOL
-                                  instance.
-  @param  PackageType             Specifies the package type of the packages to
-                                  list or EFI_HII_PACKAGE_TYPE_ALL for all packages
-                                  to be listed.
-  @param  PackageGuid             If PackageType is EFI_HII_PACKAGE_TYPE_GUID, then
-                                  this  is the pointer to the GUID which must match
-                                  the Guid field of EFI_HII_GUID_PACKAGE_GUID_HDR.
-                                  Otherwise,  it must be NULL.
-  @param  HandleBufferLength      On input, a pointer to the length of the handle
-                                  buffer.  On output, the length of the handle
-                                  buffer that is required for the handles found.
-  @param  Handle                  An array of EFI_HII_HANDLE instances returned.
-
-  @retval EFI_SUCCESS             The matching handles are outputed successfully.
-  @retval EFI_BUFFER_TO_SMALL     The HandleBufferLength parameter indicates that
-                                  Handle is too small to support the number of
-                                  handles. HandleBufferLength is updated with a
-                                  value that will  enable the data to fit.
-  @retval EFI_NOT_FOUND           No matching handle could not be found in
-                                  database.
-  @retval EFI_INVALID_PARAMETER   Handle or HandleBufferLength was NULL.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiListPackageLists (
-  IN  CONST EFI_HII_DATABASE_PROTOCOL   *This,
-  IN  UINT8                             PackageType,
-  IN  CONST EFI_GUID                    *PackageGuid,
-  IN  OUT UINTN                         *HandleBufferLength,
-  OUT EFI_HII_HANDLE                    *Handle
-  )
-;
-
-
-/**
-  This function will export one or all package lists in the database to a buffer.
-  For each package list exported, this function will call functions registered
-  with EXPORT_PACK and then copy the package list to the buffer.
-
-  @param  This                    A pointer to the EFI_HII_DATABASE_PROTOCOL
-                                  instance.
-  @param  Handle                  An EFI_HII_HANDLE that corresponds to the desired
-                                  package list in the HII database to export or
-                                  NULL to indicate  all package lists should be
-                                  exported.
-  @param  BufferSize              On input, a pointer to the length of the buffer.
-                                  On output, the length of the buffer that is
-                                  required for the exported data.
-  @param  Buffer                  A pointer to a buffer that will contain the
-                                  results of  the export function.
-
-  @retval EFI_SUCCESS             Package exported.
-  @retval EFI_BUFFER_TO_SMALL     The HandleBufferLength parameter indicates that
-                                  Handle is too small to support the number of
-                                  handles.      HandleBufferLength is updated with
-                                  a value that will enable the data to fit.
-  @retval EFI_NOT_FOUND           The specifiecd Handle could not be found in the
-                                  current database.
-  @retval EFI_INVALID_PARAMETER   Handle or Buffer or BufferSize was NULL.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiExportPackageLists (
-  IN  CONST EFI_HII_DATABASE_PROTOCOL   *This,
-  IN  EFI_HII_HANDLE                    Handle,
-  IN  OUT UINTN                         *BufferSize,
-  OUT EFI_HII_PACKAGE_LIST_HEADER       *Buffer
-  )
-;
-
-
-/**
-  This function registers a function which will be called when specified actions related to packages of
-  the specified type occur in the HII database. By registering a function, other HII-related drivers are
-  notified when specific package types are added, removed or updated in the HII database.
-  Each driver or application which registers a notification should use
-  EFI_HII_DATABASE_PROTOCOL.UnregisterPackageNotify() before exiting.
-
-  @param  This                    A pointer to the EFI_HII_DATABASE_PROTOCOL
-                                  instance.
-  @param  PackageType             Specifies the package type of the packages to
-                                  list or EFI_HII_PACKAGE_TYPE_ALL for all packages
-                                  to be listed.
-  @param  PackageGuid             If PackageType is EFI_HII_PACKAGE_TYPE_GUID, then
-                                  this is the pointer to the GUID which must match
-                                  the Guid field of
-                                  EFI_HII_GUID_PACKAGE_GUID_HDR. Otherwise, it must
-                                  be NULL.
-  @param  PackageNotifyFn         Points to the function to be called when the
-                                  event specified by
-                                  NotificationType occurs.
-  @param  NotifyType              Describes the types of notification which this
-                                  function will be receiving.
-  @param  NotifyHandle            Points to the unique handle assigned to the
-                                  registered notification. Can be used in
-                                  EFI_HII_DATABASE_PROTOCOL.UnregisterPackageNotify()
-                                  to stop notifications.
-
-  @retval EFI_SUCCESS             Notification registered successfully.
-  @retval EFI_OUT_OF_RESOURCES    Unable to allocate necessary data structures
-  @retval EFI_INVALID_PARAMETER   NotifyHandle is NULL.
-  @retval EFI_INVALID_PARAMETER   PackageGuid is not NULL when PackageType is not
-                                  EFI_HII_PACKAGE_TYPE_GUID.
-  @retval EFI_INVALID_PARAMETER   PackageGuid is NULL when PackageType is
-                                  EFI_HII_PACKAGE_TYPE_GUID.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiRegisterPackageNotify (
-  IN  CONST EFI_HII_DATABASE_PROTOCOL   *This,
-  IN  UINT8                             PackageType,
-  IN  CONST EFI_GUID                    *PackageGuid,
-  IN  CONST EFI_HII_DATABASE_NOTIFY     PackageNotifyFn,
-  IN  EFI_HII_DATABASE_NOTIFY_TYPE      NotifyType,
-  OUT EFI_HANDLE                        *NotifyHandle
-  )
-;
-
-
-/**
-  Removes the specified HII database package-related notification.
-
-  @param  This                    A pointer to the EFI_HII_DATABASE_PROTOCOL
-                                  instance.
-  @param  NotifyHandle            The handle of the notification function being
-                                  unregistered.
-
-  @retval EFI_SUCCESS             Notification is unregistered successfully.
-  @retval EFI_INVALID_PARAMETER   The Handle is invalid.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiUnregisterPackageNotify (
-  IN CONST EFI_HII_DATABASE_PROTOCOL    *This,
-  IN EFI_HANDLE                         NotificationHandle
-  )
-;
-
-
-/**
-  This routine retrieves an array of GUID values for each keyboard layout that
-  was previously registered in the system.
-
-  @param  This                    A pointer to the EFI_HII_DATABASE_PROTOCOL
-                                  instance.
-  @param  KeyGuidBufferLength     On input, a pointer to the length of the keyboard
-                                  GUID  buffer. On output, the length of the handle
-                                  buffer  that is required for the handles found.
-  @param  KeyGuidBuffer           An array of keyboard layout GUID instances
-                                  returned.
-
-  @retval EFI_SUCCESS             KeyGuidBuffer was updated successfully.
-  @retval EFI_BUFFER_TOO_SMALL    The KeyGuidBufferLength parameter indicates
-                                  that KeyGuidBuffer is too small to support the
-                                  number of GUIDs. KeyGuidBufferLength is
-                                  updated with a value that will enable the data to
-                                  fit.
-  @retval EFI_INVALID_PARAMETER   The KeyGuidBuffer or KeyGuidBufferLength was
-                                  NULL.
-  @retval EFI_NOT_FOUND           There was no keyboard layout.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiFindKeyboardLayouts (
-  IN  CONST EFI_HII_DATABASE_PROTOCOL   *This,
-  IN  OUT UINT16                        *KeyGuidBufferLength,
-  OUT EFI_GUID                          *KeyGuidBuffer
-  )
-;
-
-
-/**
-  This routine retrieves the requested keyboard layout. The layout is a physical description of the keys
-  on a keyboard and the character(s) that are associated with a particular set of key strokes.
-
-  @param  This                    A pointer to the EFI_HII_DATABASE_PROTOCOL
-                                  instance.
-  @param  KeyGuid                 A pointer to the unique ID associated with a
-                                  given keyboard layout. If KeyGuid is NULL then
-                                  the current layout will be retrieved.
-  @param  KeyboardLayoutLength    On input, a pointer to the length of the
-                                  KeyboardLayout buffer.  On output, the length of
-                                  the data placed into KeyboardLayout.
-  @param  KeyboardLayout          A pointer to a buffer containing the retrieved
-                                  keyboard layout.
-
-  @retval EFI_SUCCESS             The keyboard layout was retrieved successfully.
-  @retval EFI_NOT_FOUND           The requested keyboard layout was not found.
-  @retval EFI_INVALID_PARAMETER   The KeyboardLayout or KeyboardLayoutLength was
-                                  NULL.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiGetKeyboardLayout (
-  IN  CONST EFI_HII_DATABASE_PROTOCOL   *This,
-  IN  CONST EFI_GUID                          *KeyGuid,
-  IN OUT UINT16                         *KeyboardLayoutLength,
-  OUT EFI_HII_KEYBOARD_LAYOUT           *KeyboardLayout
-  )
-;
-
-
-/**
-  This routine sets the default keyboard layout to the one referenced by KeyGuid. When this routine
-  is called, an event will be signaled of the EFI_HII_SET_KEYBOARD_LAYOUT_EVENT_GUID
-  group type. This is so that agents which are sensitive to the current keyboard layout being changed
-  can be notified of this change.
-
-  @param  This                    A pointer to the EFI_HII_DATABASE_PROTOCOL
-                                  instance.
-  @param  KeyGuid                 A pointer to the unique ID associated with a
-                                  given keyboard layout.
-
-  @retval EFI_SUCCESS             The current keyboard layout was successfully set.
-  @retval EFI_NOT_FOUND           The referenced keyboard layout was not found, so
-                                  action was taken.
-  @retval EFI_INVALID_PARAMETER   The KeyGuid was NULL.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiSetKeyboardLayout (
-  IN CONST EFI_HII_DATABASE_PROTOCOL          *This,
-  IN CONST EFI_GUID                           *KeyGuid
-  )
-;
-
-
-/**
-  Return the EFI handle associated with a package list.
-
-  @param  This                    A pointer to the EFI_HII_DATABASE_PROTOCOL
-                                  instance.
-  @param  PackageListHandle       An EFI_HII_HANDLE that corresponds to the desired
-                                  package list in the HIIdatabase.
-  @param  DriverHandle            On return, contains the EFI_HANDLE which was
-                                  registered with the package list in
-                                  NewPackageList().
-
-  @retval EFI_SUCCESS             The DriverHandle was returned successfully.
-  @retval EFI_INVALID_PARAMETER   The PackageListHandle was not valid or
-                                  DriverHandle was NULL.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiGetPackageListHandle (
-  IN  CONST EFI_HII_DATABASE_PROTOCOL         *This,
-  IN  EFI_HII_HANDLE                    PackageListHandle,
-  OUT EFI_HANDLE                        *DriverHandle
-  )
-;
-
-//
-// EFI_HII_CONFIG_ROUTING_PROTOCOL interfaces
-//
-
-
-/**
-  This function allows a caller to extract the current configuration
-  for one or more named elements from one or more drivers.
-
-  @param  This                    A pointer to the EFI_HII_CONFIG_ROUTING_PROTOCOL
-                                  instance.
-  @param  Request                 A null-terminated Unicode string in
-                                  <MultiConfigRequest> format.
-  @param  Progress                On return, points to a character in the Request
-                                  string. Points to the string's null terminator if
-                                  request was successful. Points to the most recent
-                                  & before the first failing name / value pair (or
-                                  the beginning of the string if the failure is in
-                                  the first name / value pair) if the request was
-                                  not successful.
-  @param  Results                 Null-terminated Unicode string in
-                                  <MultiConfigAltResp> format which has all values
-                                  filled in for the names in the Request string.
-                                  String to be allocated by the called function.
-
-  @retval EFI_SUCCESS             The Results string is filled with the values
-                                  corresponding to all requested names.
-  @retval EFI_OUT_OF_RESOURCES    Not enough memory to store the parts of the
-                                  results that must be stored awaiting possible
-                                  future        protocols.
-  @retval EFI_NOT_FOUND           Routing data doesn¡¯t match any known driver.
-                                     Progress set to the ¡°G¡± in ¡°GUID¡± of the
-                                  routing  header that doesn¡¯t match. Note: There
-                                  is no         requirement that all routing data
-                                  be validated before any configuration extraction.
-  @retval EFI_INVALID_PARAMETER   For example, passing in a NULL for the Request
-                                  parameter would result in this type of error. The
-                                  Progress parameter is set to NULL.
-  @retval EFI_INVALID_PARAMETER   Illegal syntax. Progress set to most recent &
-                                  before the error or the beginning of the string.
-  @retval EFI_INVALID_PARAMETER   Unknown name. Progress points to the & before the
-                                  name in question.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiConfigRoutingExtractConfig (
-  IN  CONST EFI_HII_CONFIG_ROUTING_PROTOCOL  *This,
-  IN  CONST EFI_STRING                       Request,
-  OUT EFI_STRING                             *Progress,
-  OUT EFI_STRING                             *Results
-  )
-;
-
-
-/**
-  This function allows the caller to request the current configuration for the
-  entirety of the current HII database and returns the data in a null-terminated Unicode string.
-
-  @param  This                    A pointer to the EFI_HII_CONFIG_ROUTING_PROTOCOL
-                                  instance.
-  @param  Results                 Null-terminated Unicode string in
-                                  <MultiConfigAltResp> format which has all values
-                                  filled in for the names in the Request string.
-                                  String to be allocated by the  called function.
-                                  De-allocation is up to the caller.
-
-  @retval EFI_SUCCESS             The Results string is filled with the values
-                                  corresponding to all requested names.
-  @retval EFI_OUT_OF_RESOURCES    Not enough memory to store the parts of the
-                                  results that must be stored awaiting possible
-                                  future        protocols.
-  @retval EFI_INVALID_PARAMETER   For example, passing in a NULL for the Results
-                                  parameter would result in this type of error.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiConfigRoutingExportConfig (
-  IN  CONST EFI_HII_CONFIG_ROUTING_PROTOCOL  *This,
-  OUT EFI_STRING                             *Results
-  )
-;
-
-
-/**
-  This function processes the results of processing forms and routes it to the
-  appropriate handlers or storage.
-
-  @param  This                    A pointer to the EFI_HII_CONFIG_ROUTING_PROTOCOL
-                                  instance.
-  @param  Configuration           A null-terminated Unicode string in
-                                  <MulltiConfigResp> format.
-  @param  Progress                A pointer to a string filled in with the offset
-                                  of the most recent & before the first failing
-                                  name / value pair (or the beginning of the string
-                                  if the failure is in the first name / value pair)
-                                  or the terminating NULL if all was successful.
-
-  @retval EFI_SUCCESS             The results have been distributed or are awaiting
-                                  distribution.
-  @retval EFI_OUT_OF_RESOURCES    Not enough memory to store the parts of the
-                                  results that must be stored awaiting possible
-                                  future        protocols.
-  @retval EFI_INVALID_PARAMETER   Passing in a NULL for the Configuration parameter
-                                  would result in this type of error.
-  @retval EFI_NOT_FOUND           Target for the specified routing data was not
-                                  found.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiConfigRoutingRoutConfig (
-  IN  CONST EFI_HII_CONFIG_ROUTING_PROTOCOL  *This,
-  IN  CONST EFI_STRING                       Configuration,
-  OUT EFI_STRING                             *Progress
-  )
-;
-
-
-
-/**
-  This helper function is to be called by drivers to map configuration data stored
-  in byte array (¡°block¡±) formats such as UEFI Variables into current configuration strings.
-
-  @param  This                    A pointer to the EFI_HII_CONFIG_ROUTING_PROTOCOL
-                                  instance.
-  @param  ConfigRequest           A null-terminated Unicode string in
-                                  <ConfigRequest> format.
-  @param  Block                   Array of bytes defining the block's
-                                  configuration.
-  @param  BlockSize               Length in bytes of Block.
-  @param  Config                  Filled-in configuration string. String allocated
-                                  by  the function. Returned only if call is
-                                  successful.
-  @param  Progress                A pointer to a string filled in with the offset
-                                  of  the most recent & before the first failing
-                                  name/value pair (or the beginning of the string
-                                  if the failure is in the first name / value pair)
-                                  or the terminating NULL if all was successful.
-
-  @retval EFI_SUCCESS             The request succeeded. Progress points to the
-                                  null terminator at the end of the ConfigRequest
-                                        string.
-  @retval EFI_OUT_OF_RESOURCES    Not enough memory to allocate Config.
-                                  Progress points to the first character of
-                                  ConfigRequest.
-  @retval EFI_INVALID_PARAMETER   Passing in a NULL for the ConfigRequest or
-                                  Block parameter would result in this type of
-                                  error. Progress points to the first character of
-                                  ConfigRequest.
-  @retval EFI_NOT_FOUND           Target for the specified routing data was not
-                                  found. Progress points to the ¡°G¡± in ¡°GUID¡± of
-                                  the      errant routing data.
-  @retval EFI_DEVICE_ERROR        Block not large enough. Progress undefined.
-  @retval EFI_INVALID_PARAMETER   Encountered non <BlockName> formatted string.
-                                       Block is left updated and Progress points at
-                                  the ¡®&¡¯ preceding the first non-<BlockName>.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiBlockToConfig (
-  IN  CONST EFI_HII_CONFIG_ROUTING_PROTOCOL  *This,
-  IN  CONST EFI_STRING                       ConfigRequest,
-  IN  CONST UINT8                            *Block,
-  IN  CONST UINTN                            BlockSize,
-  OUT EFI_STRING                             *Config,
-  OUT EFI_STRING                             *Progress
-  )
-;
-
-
-/**
-  This helper function is to be called by drivers to map configuration strings
-  to configurations stored in byte array (¡°block¡±) formats such as UEFI Variables.
-
-  @param  This                    A pointer to the EFI_HII_CONFIG_ROUTING_PROTOCOL
-                                  instance.
-  @param  ConfigResp              A null-terminated Unicode string in <ConfigResp>
-                                  format.
-  @param  Block                   A possibly null array of bytes representing the
-                                  current  block. Only bytes referenced in the
-                                  ConfigResp string  in the block are modified. If
-                                  this parameter is null or if the *BlockSize
-                                  parameter is (on input) shorter than required by
-                                  the Configuration string, only the BlockSize
-                                  parameter is updated and an appropriate status
-                                  (see below)  is returned.
-  @param  BlockSize               The length of the Block in units of UINT8.  On
-                                  input, this is the size of the Block. On output,
-                                  if successful, contains the index of the  last
-                                  modified byte in the Block.
-  @param  Progress                On return, points to an element of the ConfigResp
-                                   string filled in with the offset of the most
-                                  recent '&' before the first failing name / value
-                                  pair (or  the beginning of the string if the
-                                  failure is in the  first name / value pair) or
-                                  the terminating NULL if all was successful.
-
-  @retval EFI_SUCCESS             The request succeeded. Progress points to the
-                                  null terminator at the end of the ConfigResp
-                                  string.
-  @retval EFI_OUT_OF_RESOURCES    Not enough memory to allocate Config.
-                                  Progress points to the first character of
-                                  ConfigResp.
-  @retval EFI_INVALID_PARAMETER   Passing in a NULL for the ConfigResp or
-                                  Block parameter would result in this type of
-                                  error. Progress points to the first character of
-                                           ConfigResp.
-  @retval EFI_NOT_FOUND           Target for the specified routing data was not
-                                  found. Progress points to the ¡°G¡± in ¡°GUID¡± of
-                                  the      errant routing data.
-  @retval EFI_INVALID_PARAMETER   Encountered non <BlockName> formatted name /
-                                  value pair. Block is left updated and
-                                  Progress points at the ¡®&¡¯ preceding the first
-                                  non-<BlockName>.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiConfigToBlock (
-  IN     CONST EFI_HII_CONFIG_ROUTING_PROTOCOL *This,
-  IN     CONST EFI_STRING                      ConfigResp,
-  IN OUT UINT8                                 *Block,
-  IN OUT UINTN                                 *BlockSize,
-  OUT    EFI_STRING                            *Progress
-  )
-;
-
-
-/**
-  This helper function is to be called by drivers to extract portions of
-  a larger configuration string.
-
-  @param  This                    A pointer to the EFI_HII_CONFIG_ROUTING_PROTOCOL
-                                  instance.
-  @param  Configuration           A null-terminated Unicode string in
-                                  <MultiConfigAltResp> format.
-  @param  Guid                    A pointer to the GUID value to search for in the
-                                  routing portion of the ConfigResp string when
-                                  retrieving  the requested data. If Guid is NULL,
-                                  then all GUID  values will be searched for.
-  @param  Name                    A pointer to the NAME value to search for in the
-                                  routing portion of the ConfigResp string when
-                                  retrieving  the requested data. If Name is NULL,
-                                  then all Name  values will be searched for.
-  @param  DevicePath              A pointer to the PATH value to search for in the
-                                  routing portion of the ConfigResp string when
-                                  retrieving  the requested data. If DevicePath is
-                                  NULL, then all  DevicePath values will be
-                                  searched for.
-  @param  AltCfgId                A pointer to the ALTCFG value to search for in
-                                  the  routing portion of the ConfigResp string
-                                  when retrieving  the requested data.  If this
-                                  parameter is NULL,  then the current setting will
-                                  be retrieved.
-  @param  AltCfgResp              A pointer to a buffer which will be allocated by
-                                  the  function which contains the retrieved string
-                                  as requested.   This buffer is only allocated if
-                                  the call was successful.
-
-  @retval EFI_SUCCESS             The request succeeded. The requested data was
-                                  extracted  and placed in the newly allocated
-                                  AltCfgResp buffer.
-  @retval EFI_OUT_OF_RESOURCES    Not enough memory to allocate AltCfgResp.
-  @retval EFI_INVALID_PARAMETER   Any parameter is invalid.
-  @retval EFI_NOT_FOUND           Target for the specified routing data was not
-                                  found.
-
-**/
-EFI_STATUS
-EFIAPI
-HiiGetAltCfg (
-  IN  CONST EFI_HII_CONFIG_ROUTING_PROTOCOL    *This,
-  IN  CONST EFI_STRING                         Configuration,
-  IN  CONST EFI_GUID                           *Guid,
-  IN  CONST EFI_STRING                         Name,
-  IN  CONST EFI_DEVICE_PATH_PROTOCOL           *DevicePath,
-  IN  CONST UINT16                             *AltCfgId,
-  OUT EFI_STRING                               *AltCfgResp
-  )
-;
-
-
-//
-// Global variables
-//
-extern EFI_EVENT gHiiKeyboardLayoutChanged;
-
-#include "R8Lib.h"
-
-#endif
+/** @file\r
+\r
+Copyright (c) 2007, Intel Corporation\r
+All rights reserved. This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution.  The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+Module Name:\r
+\r
+    HiiDatabase.h\r
+\r
+Abstract:\r
+\r
+    Private structures definitions in HiiDatabase.\r
+\r
+Revision History\r
+\r
+\r
+**/\r
+\r
+#ifndef __HII_DATABASE_PRIVATE_H__\r
+#define __HII_DATABASE_PRIVATE_H__\r
+\r
+#include <PiDxe.h>\r
+\r
+#include <Protocol/ConsoleControl.h>\r
+#include <Protocol/DevicePath.h>\r
+#include <Protocol/HiiFont.h>\r
+#include <Protocol/HiiImage.h>\r
+#include <Protocol/HiiString.h>\r
+#include <Protocol/HiiDatabase.h>\r
+#include <Protocol/HiiConfigRouting.h>\r
+#include <Protocol/HiiConfigAccess.h>\r
+#include <Protocol/SimpleTextOut.h>\r
+\r
+#include <Guid/HiiKeyBoardLayout.h>\r
+\r
+\r
+#include <Library/DebugLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Library/UefiDriverEntryPoint.h>\r
+#include <Library/UefiBootServicesTableLib.h>\r
+#include <Library/BaseLib.h>\r
+#include <Library/DevicePathLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+\r
+#define HII_DATABASE_NOTIFY_GUID \\r
+  { \\r
+    0xc1c76, 0xd79e, 0x42fe, {0x86, 0xb, 0x8b, 0xe8, 0x7b, 0x3e, 0x7a, 0x78} \\r
+  }\r
+\r
+#define MAX_STRING_LENGTH                  1024\r
+#define MAX_FONT_NAME_LEN                  256\r
+#define NARROW_BASELINE                    15\r
+#define WIDE_BASELINE                      14\r
+#define SYS_FONT_INFO_MASK                 0x37\r
+#define REPLACE_UNKNOWN_GLYPH              0xFFFD\r
+#define PROPORTIONAL_GLYPH                 0x80\r
+#define NARROW_GLYPH                       0x40\r
+\r
+#define BITMAP_LEN_1_BIT(Width, Height)  (((Width) + 7) / 8 * (Height))\r
+#define BITMAP_LEN_4_BIT(Width, Height)  (((Width) + 1) / 2 * (Height))\r
+#define BITMAP_LEN_8_BIT(Width, Height)  ((Width) * (Height))\r
+#define BITMAP_LEN_24_BIT(Width, Height) ((Width) * (Height) * 3)\r
+\r
+//\r
+// Storage types\r
+//\r
+#define EFI_HII_VARSTORE_BUFFER            0\r
+#define EFI_HII_VARSTORE_NAME_VALUE        1\r
+#define EFI_HII_VARSTORE_EFI_VARIABLE      2\r
+\r
+#define HII_FORMSET_STORAGE_SIGNATURE           EFI_SIGNATURE_32 ('H', 'S', 'T', 'G')\r
+typedef struct {\r
+  UINTN               Signature;\r
+  LIST_ENTRY          Entry;\r
+\r
+  EFI_HII_HANDLE      HiiHandle;\r
+  EFI_HANDLE          DriverHandle;\r
+\r
+  UINT8               Type;   // EFI_HII_VARSTORE_BUFFER, EFI_HII_VARSTORE_NAME_VALUE, EFI_HII_VARSTORE_EFI_VARIABLE\r
+  EFI_GUID            Guid;\r
+  CHAR16              *Name;\r
+  UINT16              Size;\r
+} HII_FORMSET_STORAGE;\r
+\r
+#define HII_FORMSET_STORAGE_FROM_LINK(a)  CR (a, HII_FORMSET_STORAGE, Link, HII_FORMSET_STORAGE_SIGNATURE)\r
+\r
+\r
+//\r
+// String Package definitions\r
+//\r
+#define HII_STRING_PACKAGE_SIGNATURE    EFI_SIGNATURE_32 ('h','i','s','p')\r
+typedef struct _HII_STRING_PACKAGE_INSTANCE {\r
+  UINTN                                 Signature;\r
+  EFI_HII_STRING_PACKAGE_HDR            *StringPkgHdr;\r
+  UINT8                                 *StringBlock;\r
+  LIST_ENTRY                            StringEntry;\r
+  LIST_ENTRY                            FontInfoList;  // local font info list\r
+  UINT8                                 FontId;\r
+} HII_STRING_PACKAGE_INSTANCE;\r
+\r
+//\r
+// Form Package definitions\r
+//\r
+#define HII_IFR_PACKAGE_SIGNATURE       EFI_SIGNATURE_32 ('h','f','r','p')\r
+typedef struct _HII_IFR_PACKAGE_INSTANCE {\r
+  UINTN                                 Signature;\r
+  EFI_HII_PACKAGE_HEADER                FormPkgHdr;\r
+  UINT8                                 *IfrData;\r
+  LIST_ENTRY                            IfrEntry;\r
+} HII_IFR_PACKAGE_INSTANCE;\r
+\r
+//\r
+// Simple Font Package definitions\r
+//\r
+#define HII_S_FONT_PACKAGE_SIGNATURE    EFI_SIGNATURE_32 ('h','s','f','p')\r
+typedef struct _HII_SIMPLE_FONT_PACKAGE_INSTANCE {\r
+  UINTN                                 Signature;\r
+  EFI_HII_SIMPLE_FONT_PACKAGE_HDR       *SimpleFontPkgHdr;\r
+  LIST_ENTRY                            SimpleFontEntry;\r
+} HII_SIMPLE_FONT_PACKAGE_INSTANCE;\r
+\r
+//\r
+// Font Package definitions\r
+//\r
+#define HII_FONT_PACKAGE_SIGNATURE      EFI_SIGNATURE_32 ('h','i','f','p')\r
+typedef struct _HII_FONT_PACKAGE_INSTANCE {\r
+  UINTN                                 Signature;\r
+  EFI_HII_FONT_PACKAGE_HDR              *FontPkgHdr;\r
+  UINT8                                 *GlyphBlock;\r
+  LIST_ENTRY                            FontEntry;\r
+  LIST_ENTRY                            GlyphInfoList;\r
+} HII_FONT_PACKAGE_INSTANCE;\r
+\r
+#define HII_GLYPH_INFO_SIGNATURE        EFI_SIGNATURE_32 ('h','g','i','s')\r
+typedef struct _HII_GLYPH_INFO {\r
+  UINTN                                 Signature;\r
+  LIST_ENTRY                            Entry;\r
+  CHAR16                                CharId;\r
+  EFI_HII_GLYPH_INFO                    Cell;\r
+} HII_GLYPH_INFO;\r
+\r
+#define HII_FONT_INFO_SIGNATURE         EFI_SIGNATURE_32 ('h','l','f','i')\r
+typedef struct _HII_FONT_INFO {\r
+  UINTN                                 Signature;\r
+  LIST_ENTRY                            Entry;\r
+  LIST_ENTRY                            *GlobalEntry;\r
+  UINT8                                 FontId;\r
+} HII_FONT_INFO;\r
+\r
+#define HII_GLOBAL_FONT_INFO_SIGNATURE  EFI_SIGNATURE_32 ('h','g','f','i')\r
+typedef struct _HII_GLOBAL_FONT_INFO {\r
+  UINTN                                 Signature;\r
+  LIST_ENTRY                            Entry;\r
+  HII_FONT_PACKAGE_INSTANCE             *FontPackage;\r
+  UINTN                                 FontInfoSize;\r
+  EFI_FONT_INFO                         *FontInfo;\r
+} HII_GLOBAL_FONT_INFO;\r
+\r
+//\r
+// Image Package definitions\r
+//\r
+\r
+#define HII_PIXEL_MASK                  0x80\r
+\r
+typedef struct _HII_IMAGE_PACKAGE_INSTANCE {\r
+  EFI_HII_IMAGE_PACKAGE_HDR             ImagePkgHdr;\r
+  UINT32                                ImageBlockSize;\r
+  UINT32                                PaletteInfoSize;\r
+  UINT8                                 *ImageBlock;\r
+  UINT8                                 *PaletteBlock;\r
+} HII_IMAGE_PACKAGE_INSTANCE;\r
+\r
+//\r
+// Keyboard Layout Pacakge definitions\r
+//\r
+#define HII_KB_LAYOUT_PACKAGE_SIGNATURE EFI_SIGNATURE_32 ('h','k','l','p')\r
+typedef struct _HII_KEYBOARD_LAYOUT_PACKAGE_INSTANCE {\r
+  UINTN                                 Signature;\r
+  UINT8                                 *KeyboardPkg;\r
+  LIST_ENTRY                            KeyboardEntry;\r
+} HII_KEYBOARD_LAYOUT_PACKAGE_INSTANCE;\r
+\r
+//\r
+// Guid Package definitions\r
+//\r
+#define HII_GUID_PACKAGE_SIGNATURE      EFI_SIGNATURE_32 ('h','i','g','p')\r
+typedef struct _HII_GUID_PACKAGE_INSTANCE {\r
+  UINTN                                 Signature;\r
+  UINT8                                 *GuidPkg;\r
+  LIST_ENTRY                            GuidEntry;\r
+} HII_GUID_PACKAGE_INSTANCE;\r
+\r
+//\r
+// A package list can contain only one or less than one device path package.\r
+// This rule also applies to image package since ImageId can not be duplicate.\r
+//\r
+typedef struct _HII_DATABASE_PACKAGE_LIST_INSTANCE {\r
+  EFI_HII_PACKAGE_LIST_HEADER           PackageListHdr;\r
+  LIST_ENTRY                            GuidPkgHdr;\r
+  LIST_ENTRY                            FormPkgHdr;\r
+  LIST_ENTRY                            KeyboardLayoutHdr;\r
+  LIST_ENTRY                            StringPkgHdr;\r
+  LIST_ENTRY                            FontPkgHdr;\r
+  HII_IMAGE_PACKAGE_INSTANCE            *ImagePkg;\r
+  LIST_ENTRY                            SimpleFontPkgHdr;\r
+  UINT8                                 *DevicePathPkg;\r
+} HII_DATABASE_PACKAGE_LIST_INSTANCE;\r
+\r
+#define HII_HANDLE_SIGNATURE            EFI_SIGNATURE_32 ('h','i','h','l')\r
+\r
+typedef struct {\r
+  UINTN               Signature;\r
+  LIST_ENTRY          Handle;\r
+  UINTN               Key;\r
+} HII_HANDLE;\r
+\r
+#define HII_DATABASE_RECORD_SIGNATURE   EFI_SIGNATURE_32 ('h','i','d','r')\r
+\r
+typedef struct _HII_DATABASE_RECORD {\r
+  UINTN                                 Signature;\r
+  HII_DATABASE_PACKAGE_LIST_INSTANCE    *PackageList;\r
+  EFI_HANDLE                            DriverHandle;\r
+  EFI_HII_HANDLE                        Handle;\r
+  LIST_ENTRY                            DatabaseEntry;\r
+} HII_DATABASE_RECORD;\r
+\r
+#define HII_DATABASE_NOTIFY_SIGNATURE   EFI_SIGNATURE_32 ('h','i','d','n')\r
+\r
+typedef struct _HII_DATABASE_NOTIFY {\r
+  UINTN                                 Signature;\r
+  EFI_HANDLE                            NotifyHandle;\r
+  UINT8                                 PackageType;\r
+  EFI_GUID                              *PackageGuid;\r
+  EFI_HII_DATABASE_NOTIFY               PackageNotifyFn;\r
+  EFI_HII_DATABASE_NOTIFY_TYPE          NotifyType;\r
+  LIST_ENTRY                            DatabaseNotifyEntry;\r
+} HII_DATABASE_NOTIFY;\r
+\r
+#define HII_DATABASE_PRIVATE_DATA_SIGNATURE EFI_SIGNATURE_32 ('H', 'i', 'D', 'p')\r
+\r
+typedef struct _HII_DATABASE_PRIVATE_DATA {\r
+  UINTN                                 Signature;\r
+  LIST_ENTRY                            DatabaseList;\r
+  LIST_ENTRY                            DatabaseNotifyList;\r
+  EFI_HII_FONT_PROTOCOL                 HiiFont;\r
+#ifndef DISABLE_UNUSED_HII_PROTOCOLS\r
+  EFI_HII_IMAGE_PROTOCOL                HiiImage;\r
+#endif\r
+  EFI_HII_STRING_PROTOCOL               HiiString;\r
+  EFI_HII_DATABASE_PROTOCOL             HiiDatabase;\r
+  EFI_HII_CONFIG_ROUTING_PROTOCOL       ConfigRouting;\r
+  LIST_ENTRY                            HiiHandleList;\r
+  INTN                                  HiiHandleCount;\r
+  LIST_ENTRY                            FontInfoList;  // global font info list\r
+  UINTN                                 Attribute;     // default system color\r
+  EFI_GUID                              CurrentLayoutGuid;\r
+  EFI_HII_KEYBOARD_LAYOUT               *CurrentLayout;\r
+} HII_DATABASE_PRIVATE_DATA;\r
+\r
+#define HII_FONT_DATABASE_PRIVATE_DATA_FROM_THIS(a) \\r
+  CR (a, \\r
+      HII_DATABASE_PRIVATE_DATA, \\r
+      HiiFont, \\r
+      HII_DATABASE_PRIVATE_DATA_SIGNATURE \\r
+      )\r
+\r
+#define HII_IMAGE_DATABASE_PRIVATE_DATA_FROM_THIS(a) \\r
+  CR (a, \\r
+      HII_DATABASE_PRIVATE_DATA, \\r
+      HiiImage, \\r
+      HII_DATABASE_PRIVATE_DATA_SIGNATURE \\r
+      )\r
+\r
+#define HII_STRING_DATABASE_PRIVATE_DATA_FROM_THIS(a) \\r
+  CR (a, \\r
+      HII_DATABASE_PRIVATE_DATA, \\r
+      HiiString, \\r
+      HII_DATABASE_PRIVATE_DATA_SIGNATURE \\r
+      )\r
+\r
+#define HII_DATABASE_DATABASE_PRIVATE_DATA_FROM_THIS(a) \\r
+  CR (a, \\r
+      HII_DATABASE_PRIVATE_DATA, \\r
+      HiiDatabase, \\r
+      HII_DATABASE_PRIVATE_DATA_SIGNATURE \\r
+      )\r
+\r
+#define CONFIG_ROUTING_DATABASE_PRIVATE_DATA_FROM_THIS(a) \\r
+  CR (a, \\r
+      HII_DATABASE_PRIVATE_DATA, \\r
+      ConfigRouting, \\r
+      HII_DATABASE_PRIVATE_DATA_SIGNATURE \\r
+      )\r
+\r
+//\r
+// Internal function prototypes.\r
+//\r
+\r
+/**\r
+  This function checks whether a handle is a valid EFI_HII_HANDLE\r
+\r
+  @param  Handle                  Pointer to a EFI_HII_HANDLE\r
+\r
+  @retval TRUE                    Valid\r
+  @retval FALSE                   Invalid\r
+\r
+**/\r
+BOOLEAN\r
+IsHiiHandleValid (\r
+  EFI_HII_HANDLE Handle\r
+  )\r
+;\r
+\r
+\r
+/**\r
+  This function checks whether EFI_FONT_INFO exists in current database. If\r
+  FontInfoMask is specified, check what options can be used to make a match.\r
+  Note that the masks relate to where the system default should be supplied\r
+  are ignored by this function.\r
+\r
+  @param  Private                 Hii database private structure.\r
+  @param  FontInfo                Points to EFI_FONT_INFO structure.\r
+  @param  FontInfoMask            If not NULL, describes what options can be used\r
+                                  to make a match between the font requested and\r
+                                  the font available. The caller must guarantee\r
+                                  this mask is valid.\r
+  @param  FontHandle              On entry, Points to the font handle returned by a\r
+                                  previous  call to GetFontInfo() or NULL to start\r
+                                  with the first font.\r
+  @param  GlobalFontInfo          If not NULL, output the corresponding globa font\r
+                                  info.\r
+\r
+  @retval TRUE                    Existed\r
+  @retval FALSE                   Not existed\r
+\r
+**/\r
+BOOLEAN\r
+IsFontInfoExisted (\r
+  IN  HII_DATABASE_PRIVATE_DATA *Private,\r
+  IN  EFI_FONT_INFO             *FontInfo,\r
+  IN  EFI_FONT_INFO_MASK        *FontInfoMask,   OPTIONAL\r
+  IN  EFI_FONT_HANDLE           FontHandle,      OPTIONAL\r
+  OUT HII_GLOBAL_FONT_INFO      **GlobalFontInfo OPTIONAL\r
+  )\r
+;\r
+\r
+\r
+/**\r
+  Retrieve system default font and color.\r
+\r
+  @param  Private                 HII database driver private data.\r
+  @param  FontInfo                Points to system default font output-related\r
+                                  information. It's caller's responsibility to free\r
+                                  this buffer.\r
+  @param  FontInfoSize            If not NULL, output the size of buffer FontInfo.\r
+\r
+  @retval EFI_SUCCESS             Cell information is added to the GlyphInfoList.\r
+  @retval EFI_OUT_OF_RESOURCES    The system is out of resources to accomplish the\r
+                                  task.\r
+  @retval EFI_INVALID_PARAMETER   Any input parameter is invalid.\r
+\r
+**/\r
+EFI_STATUS\r
+GetSystemFont (\r
+  IN  HII_DATABASE_PRIVATE_DATA      *Private,\r
+  OUT EFI_FONT_DISPLAY_INFO          **FontInfo,\r
+  OUT UINTN                          *FontInfoSize OPTIONAL\r
+  )\r
+;\r
+\r
+\r
+/**\r
+  Parse all string blocks to find a String block specified by StringId.\r
+  If StringId = (EFI_STRING_ID) (-1), find out all EFI_HII_SIBT_FONT blocks\r
+  within this string package and backup its information.\r
+  If StringId = 0, output the string id of last string block (EFI_HII_SIBT_END).\r
+\r
+  @param  Private                 Hii database private structure.\r
+  @param  StringPackage           Hii string package instance.\r
+  @param  StringId                The string's id, which is unique within\r
+                                  PackageList.\r
+  @param  BlockType               Output the block type of found string block.\r
+  @param  StringBlockAddr         Output the block address of found string block.\r
+  @param  StringTextOffset        Offset, relative to the found block address, of\r
+                                  the  string text information.\r
+  @param  LastStringId            Output the last string id when StringId = 0.\r
+\r
+  @retval EFI_SUCCESS             The string text and font is retrieved\r
+                                  successfully.\r
+  @retval EFI_NOT_FOUND           The specified text or font info can not be found\r
+                                  out.\r
+  @retval EFI_OUT_OF_RESOURCES    The system is out of resources to accomplish the\r
+                                  task.\r
+\r
+**/\r
+EFI_STATUS\r
+FindStringBlock (\r
+  IN HII_DATABASE_PRIVATE_DATA        *Private,\r
+  IN  HII_STRING_PACKAGE_INSTANCE     *StringPackage,\r
+  IN  EFI_STRING_ID                   StringId,\r
+  OUT UINT8                           *BlockType, OPTIONAL\r
+  OUT UINT8                           **StringBlockAddr, OPTIONAL\r
+  OUT UINTN                           *StringTextOffset, OPTIONAL\r
+  OUT EFI_STRING_ID                   *LastStringId OPTIONAL\r
+  )\r
+;\r
+\r
+\r
+/**\r
+  Parse all glyph blocks to find a glyph block specified by CharValue.\r
+  If CharValue = (CHAR16) (-1), collect all default character cell information\r
+  within this font package and backup its information.\r
+\r
+  @param  FontPackage             Hii string package instance.\r
+  @param  CharValue               Unicode character value, which identifies a glyph\r
+                                  block.\r
+  @param  GlyphBuffer             Output the corresponding bitmap data of the found\r
+                                  block. It is the caller's responsiblity to free\r
+                                  this buffer.\r
+  @param  Cell                    Output cell information of the encoded bitmap.\r
+  @param  GlyphBufferLen          If not NULL, output the length of GlyphBuffer.\r
+\r
+  @retval EFI_SUCCESS             The bitmap data is retrieved successfully.\r
+  @retval EFI_NOT_FOUND           The specified CharValue does not exist in current\r
+                                  database.\r
+  @retval EFI_OUT_OF_RESOURCES    The system is out of resources to accomplish the\r
+                                  task.\r
+\r
+**/\r
+EFI_STATUS\r
+FindGlyphBlock (\r
+  IN  HII_FONT_PACKAGE_INSTANCE      *FontPackage,\r
+  IN  CHAR16                         CharValue,\r
+  OUT UINT8                          **GlyphBuffer, OPTIONAL\r
+  OUT EFI_HII_GLYPH_INFO             *Cell, OPTIONAL\r
+  OUT UINTN                          *GlyphBufferLen OPTIONAL\r
+  )\r
+;\r
+\r
+//\r
+// EFI_HII_FONT_PROTOCOL protocol interfaces\r
+//\r
+\r
+\r
+/**\r
+  Renders a string to a bitmap or to the display.\r
+\r
+  @param  This                    A pointer to the EFI_HII_FONT_PROTOCOL instance.\r
+  @param  Flags                   Describes how the string is to be drawn.\r
+  @param  String                  Points to the null-terminated string to be\r
+                                  displayed.\r
+  @param  StringInfo              Points to the string output information,\r
+                                  including the color and font.  If NULL, then the\r
+                                  string will be output in the default system font\r
+                                  and color.\r
+  @param  Blt                     If this points to a non-NULL on entry, this\r
+                                  points to the image, which is Width pixels   wide\r
+                                  and Height pixels high. The string will be drawn\r
+                                  onto this image and\r
+                                  EFI_HII_OUT_FLAG_CLIP is implied. If this points\r
+                                  to a NULL on entry, then a              buffer\r
+                                  will be allocated to hold the generated image and\r
+                                  the pointer updated on exit. It is the caller's\r
+                                  responsibility to free this buffer.\r
+  @param  BltX,BLTY               Specifies the offset from the left and top edge\r
+                                  of the image of the first character cell in the\r
+                                  image.\r
+  @param  RowInfoArray            If this is non-NULL on entry, then on exit, this\r
+                                  will point to an allocated buffer    containing\r
+                                  row information and RowInfoArraySize will be\r
+                                  updated to contain the        number of elements.\r
+                                  This array describes the characters which were at\r
+                                  least partially drawn and the heights of the\r
+                                  rows. It is the caller's responsibility to free\r
+                                  this buffer.\r
+  @param  RowInfoArraySize        If this is non-NULL on entry, then on exit it\r
+                                  contains the number of elements in RowInfoArray.\r
+  @param  ColumnInfoArray         If this is non-NULL, then on return it will be\r
+                                  filled with the horizontal offset for each\r
+                                  character in the string on the row where it is\r
+                                  displayed. Non-printing characters will     have\r
+                                  the offset ~0. The caller is responsible to\r
+                                  allocate a buffer large enough so that    there\r
+                                  is one entry for each character in the string,\r
+                                  not including the null-terminator. It is possible\r
+                                  when character display is normalized that some\r
+                                  character cells overlap.\r
+\r
+  @retval EFI_SUCCESS             The string was successfully rendered.\r
+  @retval EFI_OUT_OF_RESOURCES    Unable to allocate an output buffer for\r
+                                  RowInfoArray or Blt.\r
+  @retval EFI_INVALID_PARAMETER   The String was NULL.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiStringToImage (\r
+  IN  CONST EFI_HII_FONT_PROTOCOL    *This,\r
+  IN  EFI_HII_OUT_FLAGS              Flags,\r
+  IN  CONST EFI_STRING               String,\r
+  IN  CONST EFI_FONT_DISPLAY_INFO    *StringInfo       OPTIONAL,\r
+  IN  OUT EFI_IMAGE_OUTPUT           **Blt,\r
+  IN  UINTN                          BltX,\r
+  IN  UINTN                          BltY,\r
+  OUT EFI_HII_ROW_INFO               **RowInfoArray    OPTIONAL,\r
+  OUT UINTN                          *RowInfoArraySize OPTIONAL,\r
+  OUT UINTN                          *ColumnInfoArray  OPTIONAL\r
+  )\r
+;\r
+\r
+\r
+/**\r
+  Render a string to a bitmap or the screen containing the contents of the specified string.\r
+\r
+  @param  This                    A pointer to the EFI_HII_FONT_PROTOCOL instance.\r
+  @param  Flags                   Describes how the string is to be drawn.\r
+  @param  PackageList             The package list in the HII database to search\r
+                                  for the specified string.\r
+  @param  StringId                The string's id, which is unique within\r
+                                  PackageList.\r
+  @param  Language                Points to the language for the retrieved string.\r
+                                  If NULL, then the current system language is\r
+                                  used.\r
+  @param  StringInfo              Points to the string output information,\r
+                                  including the color and font.  If NULL, then the\r
+                                  string will be output in the default system font\r
+                                  and color.\r
+  @param  Blt                     If this points to a non-NULL on entry, this\r
+                                  points to the image, which is Width pixels   wide\r
+                                  and Height pixels high. The string will be drawn\r
+                                  onto this image and\r
+                                  EFI_HII_OUT_FLAG_CLIP is implied. If this points\r
+                                  to a NULL on entry, then a              buffer\r
+                                  will be allocated to hold the generated image and\r
+                                  the pointer updated on exit. It is the caller's\r
+                                  responsibility to free this buffer.\r
+  @param  BltX,BLTY               Specifies the offset from the left and top edge\r
+                                  of the image of the first character cell in the\r
+                                  image.\r
+  @param  RowInfoArray            If this is non-NULL on entry, then on exit, this\r
+                                  will point to an allocated buffer    containing\r
+                                  row information and RowInfoArraySize will be\r
+                                  updated to contain the        number of elements.\r
+                                  This array describes the characters which were at\r
+                                  least partially drawn and the heights of the\r
+                                  rows. It is the caller's responsibility to free\r
+                                  this buffer.\r
+  @param  RowInfoArraySize        If this is non-NULL on entry, then on exit it\r
+                                  contains the number of elements in RowInfoArray.\r
+  @param  ColumnInfoArray         If this is non-NULL, then on return it will be\r
+                                  filled with the horizontal offset for each\r
+                                  character in the string on the row where it is\r
+                                  displayed. Non-printing characters will     have\r
+                                  the offset ~0. The caller is responsible to\r
+                                  allocate a buffer large enough so that    there\r
+                                  is one entry for each character in the string,\r
+                                  not including the null-terminator. It is possible\r
+                                  when character display is normalized that some\r
+                                  character cells overlap.\r
+\r
+  @retval EFI_SUCCESS             The string was successfully rendered.\r
+  @retval EFI_OUT_OF_RESOURCES    Unable to allocate an output buffer for\r
+                                  RowInfoArray or Blt.\r
+  @retval EFI_INVALID_PARAMETER   The String was NULL.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiStringIdToImage (\r
+  IN  CONST EFI_HII_FONT_PROTOCOL    *This,\r
+  IN  EFI_HII_OUT_FLAGS              Flags,\r
+  IN  EFI_HII_HANDLE                 PackageList,\r
+  IN  EFI_STRING_ID                  StringId,\r
+  IN  CONST CHAR8*                   Language,\r
+  IN  CONST EFI_FONT_DISPLAY_INFO    *StringInfo       OPTIONAL,\r
+  IN  OUT EFI_IMAGE_OUTPUT           **Blt,\r
+  IN  UINTN                          BltX,\r
+  IN  UINTN                          BltY,\r
+  OUT EFI_HII_ROW_INFO               **RowInfoArray    OPTIONAL,\r
+  OUT UINTN                          *RowInfoArraySize OPTIONAL,\r
+  OUT UINTN                          *ColumnInfoArray  OPTIONAL\r
+  )\r
+;\r
+\r
+\r
+/**\r
+  Convert the glyph for a single character into a bitmap.\r
+\r
+  @param  This                    A pointer to the EFI_HII_FONT_PROTOCOL instance.\r
+  @param  Char                    Character to retrieve.\r
+  @param  StringInfo              Points to the string font and color information\r
+                                  or NULL if the string should use the default\r
+                                  system font and color.\r
+  @param  Blt                     Thus must point to a NULL on entry. A buffer will\r
+                                  be allocated to hold the output and the pointer\r
+                                  updated on exit. It is the caller's\r
+                                  responsibility to free this buffer.\r
+  @param  Baseline                Number of pixels from the bottom of the bitmap to\r
+                                  the baseline.\r
+\r
+  @retval EFI_SUCCESS             Glyph bitmap created.\r
+  @retval EFI_OUT_OF_RESOURCES    Unable to allocate the output buffer Blt.\r
+  @retval EFI_WARN_UNKNOWN_GLYPH  The glyph was unknown and was replaced with the\r
+                                  glyph for Unicode character 0xFFFD.\r
+  @retval EFI_INVALID_PARAMETER   Blt is NULL or *Blt is not NULL.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiGetGlyph (\r
+  IN  CONST EFI_HII_FONT_PROTOCOL    *This,\r
+  IN  CHAR16                         Char,\r
+  IN  CONST EFI_FONT_DISPLAY_INFO    *StringInfo,\r
+  OUT EFI_IMAGE_OUTPUT               **Blt,\r
+  OUT UINTN                          *Baseline OPTIONAL\r
+  )\r
+;\r
+\r
+\r
+/**\r
+  This function iterates through fonts which match the specified font, using\r
+  the specified criteria. If String is non-NULL, then all of the characters in\r
+  the string must exist in order for a candidate font to be returned.\r
+\r
+  @param  This                    A pointer to the EFI_HII_FONT_PROTOCOL instance.\r
+  @param  FontHandle              On entry, points to the font handle returned by a\r
+                                   previous call to GetFontInfo() or NULL to start\r
+                                  with the  first font. On return, points to the\r
+                                  returned font handle or points to NULL if there\r
+                                  are no more matching fonts.\r
+  @param  StringInfoIn            Upon entry, points to the font to return\r
+                                  information about.\r
+  @param  StringInfoOut           Upon return, contains the matching font's\r
+                                  information.  If NULL, then no information is\r
+                                  returned. It's caller's responsibility to free\r
+                                  this buffer.\r
+  @param  String                  Points to the string which will be tested to\r
+                                  determine  if all characters are available. If\r
+                                  NULL, then any font  is acceptable.\r
+\r
+  @retval EFI_SUCCESS             Matching font returned successfully.\r
+  @retval EFI_NOT_FOUND           No matching font was found.\r
+  @retval EFI_INVALID_PARAMETER   StringInfoIn is NULL.\r
+  @retval EFI_OUT_OF_RESOURCES    There were insufficient resources to complete the\r
+                                  request.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiGetFontInfo (\r
+  IN  CONST EFI_HII_FONT_PROTOCOL    *This,\r
+  IN  OUT   EFI_FONT_HANDLE          *FontHandle,\r
+  IN  CONST EFI_FONT_DISPLAY_INFO    *StringInfoIn,\r
+  OUT       EFI_FONT_DISPLAY_INFO    **StringInfoOut,\r
+  IN  CONST EFI_STRING               String OPTIONAL\r
+  )\r
+;\r
+\r
+//\r
+// EFI_HII_IMAGE_PROTOCOL interfaces\r
+//\r
+\r
+\r
+/**\r
+  This function adds the image Image to the group of images owned by PackageList, and returns\r
+  a new image identifier (ImageId).\r
+\r
+  @param  This                    A pointer to the EFI_HII_IMAGE_PROTOCOL instance.\r
+  @param  PackageList             Handle of the package list where this image will\r
+                                  be added.\r
+  @param  ImageId                 On return, contains the new image id, which is\r
+                                  unique within PackageList.\r
+  @param  Image                   Points to the image.\r
+\r
+  @retval EFI_SUCCESS             The new image was added successfully.\r
+  @retval EFI_NOT_FOUND           The specified PackageList could not be found in\r
+                                  database.\r
+  @retval EFI_OUT_OF_RESOURCES    Could not add the image due to lack of resources.\r
+  @retval EFI_INVALID_PARAMETER   Image is NULL or ImageId is NULL.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiNewImage (\r
+  IN  CONST EFI_HII_IMAGE_PROTOCOL   *This,\r
+  IN  EFI_HII_HANDLE                 PackageList,\r
+  OUT EFI_IMAGE_ID                   *ImageId,\r
+  IN  CONST EFI_IMAGE_INPUT          *Image\r
+  )\r
+;\r
+\r
+\r
+/**\r
+  This function retrieves the image specified by ImageId which is associated with\r
+  the specified PackageList and copies it into the buffer specified by Image.\r
+\r
+  @param  This                    A pointer to the EFI_HII_IMAGE_PROTOCOL instance.\r
+  @param  PackageList             Handle of the package list where this image will\r
+                                  be searched.\r
+  @param  ImageId                 The image's id,, which is unique within\r
+                                  PackageList.\r
+  @param  Image                   Points to the image.\r
+  @param  ImageSize               On entry, points to the size of the buffer\r
+                                  pointed to by Image, in bytes. On return, points\r
+                                  to the length of the image, in bytes.\r
+\r
+  @retval EFI_SUCCESS             The new image was returned successfully.\r
+  @retval EFI_NOT_FOUND           The image specified by ImageId is not available.\r
+  @retval EFI_BUFFER_TOO_SMALL    The buffer specified by ImageSize is too small to\r
+                                  hold the image.\r
+  @retval EFI_INVALID_PARAMETER   The Image or ImageSize was NULL.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiGetImage (\r
+  IN  CONST EFI_HII_IMAGE_PROTOCOL   *This,\r
+  IN  EFI_HII_HANDLE                 PackageList,\r
+  IN  EFI_IMAGE_ID                   ImageId,\r
+  OUT EFI_IMAGE_INPUT                *Image,\r
+  OUT UINTN                          *ImageSize\r
+  )\r
+;\r
+\r
+\r
+/**\r
+  This function updates the image specified by ImageId in the specified PackageListHandle to\r
+  the image specified by Image.\r
+\r
+  @param  This                    A pointer to the EFI_HII_IMAGE_PROTOCOL instance.\r
+  @param  PackageList             The package list containing the images.\r
+  @param  ImageId                 The image's id,, which is unique within\r
+                                  PackageList.\r
+  @param  Image                   Points to the image.\r
+\r
+  @retval EFI_SUCCESS             The new image was updated successfully.\r
+  @retval EFI_NOT_FOUND           The image specified by ImageId is not in the\r
+                                  database.\r
+  @retval EFI_INVALID_PARAMETER   The Image was NULL.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiSetImage (\r
+  IN CONST EFI_HII_IMAGE_PROTOCOL    *This,\r
+  IN EFI_HII_HANDLE                  PackageList,\r
+  IN EFI_IMAGE_ID                    ImageId,\r
+  IN CONST EFI_IMAGE_INPUT           *Image\r
+  )\r
+;\r
+\r
+\r
+/**\r
+  This function renders an image to a bitmap or the screen using the specified\r
+  color and options. It draws the image on an existing bitmap, allocates a new\r
+  bitmap or uses the screen. The images can be clipped.\r
+\r
+  @param  This                    A pointer to the EFI_HII_IMAGE_PROTOCOL instance.\r
+  @param  Flags                   Describes how the image is to be drawn.\r
+  @param  Image                   Points to the image to be displayed.\r
+  @param  Blt                     If this points to a non-NULL on entry, this\r
+                                  points to the image, which is Width pixels wide\r
+                                  and Height pixels high.  The image will be drawn\r
+                                  onto this image and  EFI_HII_DRAW_FLAG_CLIP is\r
+                                  implied. If this points to a  NULL on entry, then\r
+                                  a buffer will be allocated to hold  the generated\r
+                                  image and the pointer updated on exit. It is the\r
+                                  caller's responsibility to free this buffer.\r
+  @param  BltY                    Specifies the offset from the left and top edge\r
+                                  of the  output image of the first pixel in the\r
+                                  image.\r
+\r
+  @retval EFI_SUCCESS             The image was successfully drawn.\r
+  @retval EFI_OUT_OF_RESOURCES    Unable to allocate an output buffer for Blt.\r
+  @retval EFI_INVALID_PARAMETER   The Image or Blt was NULL.\r
+  @retval EFI_INVALID_PARAMETER   Any combination of Flags is invalid.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiDrawImage (\r
+  IN CONST EFI_HII_IMAGE_PROTOCOL    *This,\r
+  IN EFI_HII_DRAW_FLAGS              Flags,\r
+  IN CONST EFI_IMAGE_INPUT           *Image,\r
+  IN OUT EFI_IMAGE_OUTPUT            **Blt,\r
+  IN UINTN                           BltX,\r
+  IN UINTN                           BltY\r
+  )\r
+;\r
+\r
+\r
+/**\r
+  This function renders an image to a bitmap or the screen using the specified\r
+  color and options. It draws the image on an existing bitmap, allocates a new\r
+  bitmap or uses the screen. The images can be clipped.\r
+\r
+  @param  This                    A pointer to the EFI_HII_IMAGE_PROTOCOL instance.\r
+  @param  Flags                   Describes how the image is to be drawn.\r
+  @param  PackageList             The package list in the HII database to search\r
+                                  for the  specified image.\r
+  @param  ImageId                 The image's id, which is unique within\r
+                                  PackageList.\r
+  @param  Blt                     If this points to a non-NULL on entry, this\r
+                                  points to the image, which is Width pixels wide\r
+                                  and Height pixels high. The image will be drawn\r
+                                  onto this image and\r
+                                  EFI_HII_DRAW_FLAG_CLIP is implied. If this points\r
+                                  to a  NULL on entry, then a buffer will be\r
+                                  allocated to hold  the generated image and the\r
+                                  pointer updated on exit. It is the caller's\r
+                                  responsibility to free this buffer.\r
+  @param  BltY                    Specifies the offset from the left and top edge\r
+                                  of the  output image of the first pixel in the\r
+                                  image.\r
+\r
+  @retval EFI_SUCCESS             The image was successfully drawn.\r
+  @retval EFI_OUT_OF_RESOURCES    Unable to allocate an output buffer for Blt.\r
+  @retval EFI_INVALID_PARAMETER   The Image was NULL.\r
+  @retval EFI_NOT_FOUND           The specified packagelist could not be found in\r
+                                  current database.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiDrawImageId (\r
+  IN CONST EFI_HII_IMAGE_PROTOCOL    *This,\r
+  IN EFI_HII_DRAW_FLAGS              Flags,\r
+  IN EFI_HII_HANDLE                  PackageList,\r
+  IN EFI_IMAGE_ID                    ImageId,\r
+  IN OUT EFI_IMAGE_OUTPUT            **Blt,\r
+  IN UINTN                           BltX,\r
+  IN UINTN                           BltY\r
+  )\r
+\r
+;\r
+\r
+//\r
+// EFI_HII_STRING_PROTOCOL\r
+//\r
+\r
+\r
+/**\r
+  This function adds the string String to the group of strings owned by PackageList, with the\r
+  specified font information StringFontInfo and returns a new string id.\r
+\r
+  @param  This                    A pointer to the EFI_HII_STRING_PROTOCOL\r
+                                  instance.\r
+  @param  PackageList             Handle of the package list where this string will\r
+                                  be added.\r
+  @param  StringId                On return, contains the new strings id, which is\r
+                                  unique within PackageList.\r
+  @param  Language                Points to the language for the new string.\r
+  @param  LanguageName            Points to the printable language name to\r
+                                  associate with the passed in  Language field.If\r
+                                  LanguageName is not NULL and the string package\r
+                                  header's LanguageName  associated with a given\r
+                                  Language is not zero, the LanguageName being\r
+                                  passed  in will be ignored.\r
+  @param  String                  Points to the new null-terminated string.\r
+  @param  StringFontInfo          Points to the new string's font information or\r
+                                  NULL if the string should have the default system\r
+                                  font, size and style.\r
+\r
+  @retval EFI_SUCCESS             The new string was added successfully.\r
+  @retval EFI_NOT_FOUND           The specified PackageList could not be found in\r
+                                  database.\r
+  @retval EFI_OUT_OF_RESOURCES    Could not add the string due to lack of\r
+                                  resources.\r
+  @retval EFI_INVALID_PARAMETER   String is NULL or StringId is NULL or Language is\r
+                                  NULL.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiNewString (\r
+  IN  CONST EFI_HII_STRING_PROTOCOL   *This,\r
+  IN  EFI_HII_HANDLE                  PackageList,\r
+  OUT EFI_STRING_ID                   *StringId,\r
+  IN  CONST CHAR8                     *Language,\r
+  IN  CONST CHAR16                    *LanguageName, OPTIONAL\r
+  IN  CONST EFI_STRING                String,\r
+  IN  CONST EFI_FONT_INFO             *StringFontInfo OPTIONAL\r
+  )\r
+;\r
+\r
+\r
+/**\r
+  This function retrieves the string specified by StringId which is associated\r
+  with the specified PackageList in the language Language and copies it into\r
+  the buffer specified by String.\r
+\r
+  @param  This                    A pointer to the EFI_HII_STRING_PROTOCOL\r
+                                  instance.\r
+  @param  Language                Points to the language for the retrieved string.\r
+  @param  PackageList             The package list in the HII database to search\r
+                                  for the  specified string.\r
+  @param  StringId                The string's id, which is unique within\r
+                                  PackageList.\r
+  @param  String                  Points to the new null-terminated string.\r
+  @param  StringSize              On entry, points to the size of the buffer\r
+                                  pointed to by  String, in bytes. On return,\r
+                                  points to the length of the string, in bytes.\r
+  @param  StringFontInfo          If not NULL, points to the string's font\r
+                                  information.  It's caller's responsibility to\r
+                                  free this buffer.\r
+\r
+  @retval EFI_SUCCESS             The string was returned successfully.\r
+  @retval EFI_NOT_FOUND           The string specified by StringId is not\r
+                                  available.\r
+  @retval EFI_NOT_FOUND           The string specified by StringId is available but\r
+                                  not in the specified language.\r
+  @retval EFI_BUFFER_TOO_SMALL    The buffer specified by StringSize is too small\r
+                                  to  hold the string.\r
+  @retval EFI_INVALID_PARAMETER   The String or Language or StringSize was NULL.\r
+  @retval EFI_OUT_OF_RESOURCES    There were insufficient resources to complete the\r
+                                   request.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiGetString (\r
+  IN  CONST EFI_HII_STRING_PROTOCOL   *This,\r
+  IN  CONST CHAR8                     *Language,\r
+  IN  EFI_HII_HANDLE                  PackageList,\r
+  IN  EFI_STRING_ID                   StringId,\r
+  OUT EFI_STRING                      String,\r
+  IN  OUT UINTN                       *StringSize,\r
+  OUT EFI_FONT_INFO                   **StringFontInfo OPTIONAL\r
+  )\r
+;\r
+\r
+\r
+/**\r
+  This function updates the string specified by StringId in the specified PackageList to the text\r
+  specified by String and, optionally, the font information specified by StringFontInfo.\r
+\r
+  @param  This                    A pointer to the EFI_HII_STRING_PROTOCOL\r
+                                  instance.\r
+  @param  PackageList             The package list containing the strings.\r
+  @param  StringId                The string's id, which is unique within\r
+                                  PackageList.\r
+  @param  Language                Points to the language for the updated string.\r
+  @param  String                  Points to the new null-terminated string.\r
+  @param  StringFontInfo          Points to the string's font information or NULL\r
+                                  if the string font information is not changed.\r
+\r
+  @retval EFI_SUCCESS             The string was updated successfully.\r
+  @retval EFI_NOT_FOUND           The string specified by StringId is not in the\r
+                                  database.\r
+  @retval EFI_INVALID_PARAMETER   The String or Language was NULL.\r
+  @retval EFI_OUT_OF_RESOURCES    The system is out of resources to accomplish the\r
+                                  task.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiSetString (\r
+  IN CONST EFI_HII_STRING_PROTOCOL    *This,\r
+  IN EFI_HII_HANDLE                   PackageList,\r
+  IN EFI_STRING_ID                    StringId,\r
+  IN CONST CHAR8                      *Language,\r
+  IN CONST EFI_STRING                 String,\r
+  IN CONST EFI_FONT_INFO              *StringFontInfo OPTIONAL\r
+  )\r
+;\r
+\r
+\r
+/**\r
+  This function returns the list of supported languages, in the format specified\r
+  in Appendix M of UEFI 2.1 spec.\r
+\r
+  @param  This                    A pointer to the EFI_HII_STRING_PROTOCOL\r
+                                  instance.\r
+  @param  PackageList             The package list to examine.\r
+  @param  Languages               Points to the buffer to hold the returned string.\r
+  @param  LanguagesSize           On entry, points to the size of the buffer\r
+                                  pointed to by  Languages, in bytes. On  return,\r
+                                  points to the length of Languages, in bytes.\r
+\r
+  @retval EFI_SUCCESS             The languages were returned successfully.\r
+  @retval EFI_INVALID_PARAMETER   The Languages or LanguagesSize was NULL.\r
+  @retval EFI_BUFFER_TOO_SMALL    The LanguagesSize is too small to hold the list\r
+                                  of  supported languages. LanguageSize is updated\r
+                                  to contain the required size.\r
+  @retval EFI_NOT_FOUND           Could not find string package in specified\r
+                                  packagelist.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiGetLanguages (\r
+  IN CONST EFI_HII_STRING_PROTOCOL    *This,\r
+  IN EFI_HII_HANDLE                   PackageList,\r
+  IN OUT CHAR8                        *Languages,\r
+  IN OUT UINTN                        *LanguagesSize\r
+  )\r
+;\r
+\r
+\r
+/**\r
+  Each string package has associated with it a single primary language and zero\r
+  or more secondary languages. This routine returns the secondary languages\r
+  associated with a package list.\r
+\r
+  @param  This                    A pointer to the EFI_HII_STRING_PROTOCOL\r
+                                  instance.\r
+  @param  PackageList             The package list to examine.\r
+  @param  FirstLanguage           Points to the primary language.\r
+  @param  SecondaryLanguages      Points to the buffer to hold the returned list of\r
+                                   secondary languages for the specified\r
+                                  FirstLanguage. If there are no secondary\r
+                                  languages, the function  returns successfully,\r
+                                  but this is set to NULL.\r
+  @param  SecondaryLanguageSize   On entry, points to the size of the buffer\r
+                                  pointed to  by SecondLanguages, in bytes. On\r
+                                  return, points to the length of SecondLanguages\r
+                                  in bytes.\r
+\r
+  @retval EFI_SUCCESS             Secondary languages were correctly returned.\r
+  @retval EFI_INVALID_PARAMETER   FirstLanguage or SecondLanguages or\r
+                                  SecondLanguagesSize was NULL.\r
+  @retval EFI_BUFFER_TOO_SMALL    The buffer specified by SecondLanguagesSize is\r
+                                  too small to hold the returned information.\r
+                                  SecondLanguageSize is updated to hold the size of\r
+                                  the buffer required.\r
+  @retval EFI_NOT_FOUND           The language specified by FirstLanguage is not\r
+                                  present in the specified package list.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiGetSecondaryLanguages (\r
+  IN CONST EFI_HII_STRING_PROTOCOL   *This,\r
+  IN EFI_HII_HANDLE                  PackageList,\r
+  IN CONST CHAR8                     *FirstLanguage,\r
+  IN OUT CHAR8                       *SecondLanguages,\r
+  IN OUT UINTN                       *SecondLanguagesSize\r
+  )\r
+;\r
+\r
+//\r
+// EFI_HII_DATABASE_PROTOCOL protocol interfaces\r
+//\r
+\r
+\r
+/**\r
+  This function adds the packages in the package list to the database and returns a handle. If there is a\r
+  EFI_DEVICE_PATH_PROTOCOL associated with the DriverHandle, then this function will\r
+  create a package of type EFI_PACKAGE_TYPE_DEVICE_PATH and add it to the package list.\r
+\r
+  @param  This                    A pointer to the EFI_HII_DATABASE_PROTOCOL\r
+                                  instance.\r
+  @param  PackageList             A pointer to an EFI_HII_PACKAGE_LIST_HEADER\r
+                                  structure.\r
+  @param  DriverHandle            Associate the package list with this EFI handle.\r
+  @param  Handle                  A pointer to the EFI_HII_HANDLE instance.\r
+\r
+  @retval EFI_SUCCESS             The package list associated with the Handle was\r
+                                  added to the HII database.\r
+  @retval EFI_OUT_OF_RESOURCES    Unable to allocate necessary resources for the\r
+                                  new database contents.\r
+  @retval EFI_INVALID_PARAMETER   PackageList is NULL or Handle is NULL.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiNewPackageList (\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
+  )\r
+;\r
+\r
+\r
+/**\r
+  This function removes the package list that is associated with a handle Handle\r
+  from the HII database. Before removing the package, any registered functions\r
+  with the notification type REMOVE_PACK and the same package type will be called.\r
+\r
+  @param  This                    A pointer to the EFI_HII_DATABASE_PROTOCOL\r
+                                  instance.\r
+  @param  Handle                  The handle that was registered to the data that\r
+                                  is requested  for removal.\r
+\r
+  @retval EFI_SUCCESS             The data associated with the Handle was removed\r
+                                  from  the HII database.\r
+  @retval EFI_NOT_FOUND           The specified PackageList could not be found in\r
+                                  database.\r
+  @retval EFI_INVALID_PARAMETER   The Handle was not valid.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiRemovePackageList (\r
+  IN CONST EFI_HII_DATABASE_PROTOCOL    *This,\r
+  IN EFI_HII_HANDLE                     Handle\r
+  )\r
+;\r
+\r
+\r
+/**\r
+  This function updates the existing package list (which has the specified Handle)\r
+  in the HII databases, using the new package list specified by PackageList.\r
+\r
+  @param  This                    A pointer to the EFI_HII_DATABASE_PROTOCOL\r
+                                  instance.\r
+  @param  Handle                  The handle that was registered to the data that\r
+                                  is  requested to be updated.\r
+  @param  PackageList             A pointer to an EFI_HII_PACKAGE_LIST_HEADER\r
+                                  package.\r
+\r
+  @retval EFI_SUCCESS             The HII database was successfully updated.\r
+  @retval EFI_OUT_OF_RESOURCES    Unable to allocate enough memory for the updated\r
+                                  database.\r
+  @retval EFI_INVALID_PARAMETER   Handle or PackageList was NULL.\r
+  @retval EFI_NOT_FOUND           The Handle was not valid or could not be found in\r
+                                  database.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiUpdatePackageList (\r
+  IN CONST EFI_HII_DATABASE_PROTOCOL    *This,\r
+  IN EFI_HII_HANDLE                     Handle,\r
+  IN CONST EFI_HII_PACKAGE_LIST_HEADER  *PackageList\r
+  )\r
+;\r
+\r
+\r
+/**\r
+  This function returns a list of the package handles of the specified type\r
+  that are currently active in the database. The pseudo-type\r
+  EFI_HII_PACKAGE_TYPE_ALL will cause all package handles to be listed.\r
+\r
+  @param  This                    A pointer to the EFI_HII_DATABASE_PROTOCOL\r
+                                  instance.\r
+  @param  PackageType             Specifies the package type of the packages to\r
+                                  list or EFI_HII_PACKAGE_TYPE_ALL for all packages\r
+                                  to be listed.\r
+  @param  PackageGuid             If PackageType is EFI_HII_PACKAGE_TYPE_GUID, then\r
+                                  this  is the pointer to the GUID which must match\r
+                                  the Guid field of EFI_HII_GUID_PACKAGE_GUID_HDR.\r
+                                  Otherwise,  it must be NULL.\r
+  @param  HandleBufferLength      On input, a pointer to the length of the handle\r
+                                  buffer.  On output, the length of the handle\r
+                                  buffer that is required for the handles found.\r
+  @param  Handle                  An array of EFI_HII_HANDLE instances returned.\r
+\r
+  @retval EFI_SUCCESS             The matching handles are outputed successfully.\r
+  @retval EFI_BUFFER_TO_SMALL     The HandleBufferLength parameter indicates that\r
+                                  Handle is too small to support the number of\r
+                                  handles. HandleBufferLength is updated with a\r
+                                  value that will  enable the data to fit.\r
+  @retval EFI_NOT_FOUND           No matching handle could not be found in\r
+                                  database.\r
+  @retval EFI_INVALID_PARAMETER   Handle or HandleBufferLength was NULL.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiListPackageLists (\r
+  IN  CONST EFI_HII_DATABASE_PROTOCOL   *This,\r
+  IN  UINT8                             PackageType,\r
+  IN  CONST EFI_GUID                    *PackageGuid,\r
+  IN  OUT UINTN                         *HandleBufferLength,\r
+  OUT EFI_HII_HANDLE                    *Handle\r
+  )\r
+;\r
+\r
+\r
+/**\r
+  This function will export one or all package lists in the database to a buffer.\r
+  For each package list exported, this function will call functions registered\r
+  with EXPORT_PACK and then copy the package list to the buffer.\r
+\r
+  @param  This                    A pointer to the EFI_HII_DATABASE_PROTOCOL\r
+                                  instance.\r
+  @param  Handle                  An EFI_HII_HANDLE that corresponds to the desired\r
+                                  package list in the HII database to export or\r
+                                  NULL to indicate  all package lists should be\r
+                                  exported.\r
+  @param  BufferSize              On input, a pointer to the length of the buffer.\r
+                                  On output, the length of the buffer that is\r
+                                  required for the exported data.\r
+  @param  Buffer                  A pointer to a buffer that will contain the\r
+                                  results of  the export function.\r
+\r
+  @retval EFI_SUCCESS             Package exported.\r
+  @retval EFI_BUFFER_TO_SMALL     The HandleBufferLength parameter indicates that\r
+                                  Handle is too small to support the number of\r
+                                  handles.      HandleBufferLength is updated with\r
+                                  a value that will enable the data to fit.\r
+  @retval EFI_NOT_FOUND           The specifiecd Handle could not be found in the\r
+                                  current database.\r
+  @retval EFI_INVALID_PARAMETER   Handle or Buffer or BufferSize was NULL.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiExportPackageLists (\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
+\r
+/**\r
+  This function registers a function which will be called when specified actions related to packages of\r
+  the specified type occur in the HII database. By registering a function, other HII-related drivers are\r
+  notified when specific package types are added, removed or updated in the HII database.\r
+  Each driver or application which registers a notification should use\r
+  EFI_HII_DATABASE_PROTOCOL.UnregisterPackageNotify() before exiting.\r
+\r
+  @param  This                    A pointer to the EFI_HII_DATABASE_PROTOCOL\r
+                                  instance.\r
+  @param  PackageType             Specifies the package type of the packages to\r
+                                  list or EFI_HII_PACKAGE_TYPE_ALL for all packages\r
+                                  to be listed.\r
+  @param  PackageGuid             If PackageType is EFI_HII_PACKAGE_TYPE_GUID, then\r
+                                  this is the pointer to the GUID which must match\r
+                                  the Guid field of\r
+                                  EFI_HII_GUID_PACKAGE_GUID_HDR. Otherwise, it must\r
+                                  be NULL.\r
+  @param  PackageNotifyFn         Points to the function to be called when the\r
+                                  event specified by\r
+                                  NotificationType occurs.\r
+  @param  NotifyType              Describes the types of notification which this\r
+                                  function will be receiving.\r
+  @param  NotifyHandle            Points to the unique handle assigned to the\r
+                                  registered notification. Can be used in\r
+                                  EFI_HII_DATABASE_PROTOCOL.UnregisterPackageNotify()\r
+                                  to stop notifications.\r
+\r
+  @retval EFI_SUCCESS             Notification registered successfully.\r
+  @retval EFI_OUT_OF_RESOURCES    Unable to allocate necessary data structures\r
+  @retval EFI_INVALID_PARAMETER   NotifyHandle is NULL.\r
+  @retval EFI_INVALID_PARAMETER   PackageGuid is not NULL when PackageType is not\r
+                                  EFI_HII_PACKAGE_TYPE_GUID.\r
+  @retval EFI_INVALID_PARAMETER   PackageGuid is NULL when PackageType is\r
+                                  EFI_HII_PACKAGE_TYPE_GUID.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiRegisterPackageNotify (\r
+  IN  CONST EFI_HII_DATABASE_PROTOCOL   *This,\r
+  IN  UINT8                             PackageType,\r
+  IN  CONST EFI_GUID                    *PackageGuid,\r
+  IN  CONST EFI_HII_DATABASE_NOTIFY     PackageNotifyFn,\r
+  IN  EFI_HII_DATABASE_NOTIFY_TYPE      NotifyType,\r
+  OUT EFI_HANDLE                        *NotifyHandle\r
+  )\r
+;\r
+\r
+\r
+/**\r
+  Removes the specified HII database package-related notification.\r
+\r
+  @param  This                    A pointer to the EFI_HII_DATABASE_PROTOCOL\r
+                                  instance.\r
+  @param  NotifyHandle            The handle of the notification function being\r
+                                  unregistered.\r
+\r
+  @retval EFI_SUCCESS             Notification is unregistered successfully.\r
+  @retval EFI_INVALID_PARAMETER   The Handle is invalid.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiUnregisterPackageNotify (\r
+  IN CONST EFI_HII_DATABASE_PROTOCOL    *This,\r
+  IN EFI_HANDLE                         NotificationHandle\r
+  )\r
+;\r
+\r
+\r
+/**\r
+  This routine retrieves an array of GUID values for each keyboard layout that\r
+  was previously registered in the system.\r
+\r
+  @param  This                    A pointer to the EFI_HII_DATABASE_PROTOCOL\r
+                                  instance.\r
+  @param  KeyGuidBufferLength     On input, a pointer to the length of the keyboard\r
+                                  GUID  buffer. On output, the length of the handle\r
+                                  buffer  that is required for the handles found.\r
+  @param  KeyGuidBuffer           An array of keyboard layout GUID instances\r
+                                  returned.\r
+\r
+  @retval EFI_SUCCESS             KeyGuidBuffer was updated successfully.\r
+  @retval EFI_BUFFER_TOO_SMALL    The KeyGuidBufferLength parameter indicates\r
+                                  that KeyGuidBuffer is too small to support the\r
+                                  number of GUIDs. KeyGuidBufferLength is\r
+                                  updated with a value that will enable the data to\r
+                                  fit.\r
+  @retval EFI_INVALID_PARAMETER   The KeyGuidBuffer or KeyGuidBufferLength was\r
+                                  NULL.\r
+  @retval EFI_NOT_FOUND           There was no keyboard layout.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiFindKeyboardLayouts (\r
+  IN  CONST EFI_HII_DATABASE_PROTOCOL   *This,\r
+  IN  OUT UINT16                        *KeyGuidBufferLength,\r
+  OUT EFI_GUID                          *KeyGuidBuffer\r
+  )\r
+;\r
+\r
+\r
+/**\r
+  This routine retrieves the requested keyboard layout. The layout is a physical description of the keys\r
+  on a keyboard and the character(s) that are associated with a particular set of key strokes.\r
+\r
+  @param  This                    A pointer to the EFI_HII_DATABASE_PROTOCOL\r
+                                  instance.\r
+  @param  KeyGuid                 A pointer to the unique ID associated with a\r
+                                  given keyboard layout. If KeyGuid is NULL then\r
+                                  the current layout will be retrieved.\r
+  @param  KeyboardLayoutLength    On input, a pointer to the length of the\r
+                                  KeyboardLayout buffer.  On output, the length of\r
+                                  the data placed into KeyboardLayout.\r
+  @param  KeyboardLayout          A pointer to a buffer containing the retrieved\r
+                                  keyboard layout.\r
+\r
+  @retval EFI_SUCCESS             The keyboard layout was retrieved successfully.\r
+  @retval EFI_NOT_FOUND           The requested keyboard layout was not found.\r
+  @retval EFI_INVALID_PARAMETER   The KeyboardLayout or KeyboardLayoutLength was\r
+                                  NULL.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiGetKeyboardLayout (\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
+\r
+\r
+/**\r
+  This routine sets the default keyboard layout to the one referenced by KeyGuid. When this routine\r
+  is called, an event will be signaled of the EFI_HII_SET_KEYBOARD_LAYOUT_EVENT_GUID\r
+  group type. This is so that agents which are sensitive to the current keyboard layout being changed\r
+  can be notified of this change.\r
+\r
+  @param  This                    A pointer to the EFI_HII_DATABASE_PROTOCOL\r
+                                  instance.\r
+  @param  KeyGuid                 A pointer to the unique ID associated with a\r
+                                  given keyboard layout.\r
+\r
+  @retval EFI_SUCCESS             The current keyboard layout was successfully set.\r
+  @retval EFI_NOT_FOUND           The referenced keyboard layout was not found, so\r
+                                  action was taken.\r
+  @retval EFI_INVALID_PARAMETER   The KeyGuid was NULL.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiSetKeyboardLayout (\r
+  IN CONST EFI_HII_DATABASE_PROTOCOL          *This,\r
+  IN CONST EFI_GUID                           *KeyGuid\r
+  )\r
+;\r
+\r
+\r
+/**\r
+  Return the EFI handle associated with a package list.\r
+\r
+  @param  This                    A pointer to the EFI_HII_DATABASE_PROTOCOL\r
+                                  instance.\r
+  @param  PackageListHandle       An EFI_HII_HANDLE that corresponds to the desired\r
+                                  package list in the HIIdatabase.\r
+  @param  DriverHandle            On return, contains the EFI_HANDLE which was\r
+                                  registered with the package list in\r
+                                  NewPackageList().\r
+\r
+  @retval EFI_SUCCESS             The DriverHandle was returned successfully.\r
+  @retval EFI_INVALID_PARAMETER   The PackageListHandle was not valid or\r
+                                  DriverHandle was NULL.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiGetPackageListHandle (\r
+  IN  CONST EFI_HII_DATABASE_PROTOCOL         *This,\r
+  IN  EFI_HII_HANDLE                    PackageListHandle,\r
+  OUT EFI_HANDLE                        *DriverHandle\r
+  )\r
+;\r
+\r
+//\r
+// EFI_HII_CONFIG_ROUTING_PROTOCOL interfaces\r
+//\r
+\r
+\r
+/**\r
+  This function allows a caller to extract the current configuration\r
+  for one or more named elements from one or more drivers.\r
+\r
+  @param  This                    A pointer to the EFI_HII_CONFIG_ROUTING_PROTOCOL\r
+                                  instance.\r
+  @param  Request                 A null-terminated Unicode string in\r
+                                  <MultiConfigRequest> format.\r
+  @param  Progress                On return, points to a character in the Request\r
+                                  string. Points to the string's null terminator if\r
+                                  request was successful. Points to the most recent\r
+                                  & before the first failing name / value pair (or\r
+                                  the beginning of the string if the failure is in\r
+                                  the first name / value pair) if the request was\r
+                                  not successful.\r
+  @param  Results                 Null-terminated Unicode string in\r
+                                  <MultiConfigAltResp> format which has all values\r
+                                  filled in for the names in the Request string.\r
+                                  String to be allocated by the called function.\r
+\r
+  @retval EFI_SUCCESS             The Results string is filled with the values\r
+                                  corresponding to all requested names.\r
+  @retval EFI_OUT_OF_RESOURCES    Not enough memory to store the parts of the\r
+                                  results that must be stored awaiting possible\r
+                                  future        protocols.\r
+  @retval EFI_NOT_FOUND           Routing data doesn't match any known driver.\r
+                                     Progress set to the "G" in "GUID" of the\r
+                                  routing  header that doesn't match. Note: There\r
+                                  is no         requirement that all routing data\r
+                                  be validated before any configuration extraction.\r
+  @retval EFI_INVALID_PARAMETER   For example, passing in a NULL for the Request\r
+                                  parameter would result in this type of error. The\r
+                                  Progress parameter is set to NULL.\r
+  @retval EFI_INVALID_PARAMETER   Illegal syntax. Progress set to most recent &\r
+                                  before the error or the beginning of the string.\r
+  @retval EFI_INVALID_PARAMETER   Unknown name. Progress points to the & before the\r
+                                  name in question.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiConfigRoutingExtractConfig (\r
+  IN  CONST EFI_HII_CONFIG_ROUTING_PROTOCOL  *This,\r
+  IN  CONST EFI_STRING                       Request,\r
+  OUT EFI_STRING                             *Progress,\r
+  OUT EFI_STRING                             *Results\r
+  )\r
+;\r
+\r
+\r
+/**\r
+  This function allows the caller to request the current configuration for the\r
+  entirety of the current HII database and returns the data in a null-terminated Unicode string.\r
+\r
+  @param  This                    A pointer to the EFI_HII_CONFIG_ROUTING_PROTOCOL\r
+                                  instance.\r
+  @param  Results                 Null-terminated Unicode string in\r
+                                  <MultiConfigAltResp> format which has all values\r
+                                  filled in for the names in the Request string.\r
+                                  String to be allocated by the  called function.\r
+                                  De-allocation is up to the caller.\r
+\r
+  @retval EFI_SUCCESS             The Results string is filled with the values\r
+                                  corresponding to all requested names.\r
+  @retval EFI_OUT_OF_RESOURCES    Not enough memory to store the parts of the\r
+                                  results that must be stored awaiting possible\r
+                                  future        protocols.\r
+  @retval EFI_INVALID_PARAMETER   For example, passing in a NULL for the Results\r
+                                  parameter would result in this type of error.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiConfigRoutingExportConfig (\r
+  IN  CONST EFI_HII_CONFIG_ROUTING_PROTOCOL  *This,\r
+  OUT EFI_STRING                             *Results\r
+  )\r
+;\r
+\r
+\r
+/**\r
+  This function processes the results of processing forms and routes it to the\r
+  appropriate handlers or storage.\r
+\r
+  @param  This                    A pointer to the EFI_HII_CONFIG_ROUTING_PROTOCOL\r
+                                  instance.\r
+  @param  Configuration           A null-terminated Unicode string in\r
+                                  <MulltiConfigResp> format.\r
+  @param  Progress                A pointer to a string filled in with the offset\r
+                                  of the most recent & before the first failing\r
+                                  name / value pair (or the beginning of the string\r
+                                  if the failure is in the first name / value pair)\r
+                                  or the terminating NULL if all was successful.\r
+\r
+  @retval EFI_SUCCESS             The results have been distributed or are awaiting\r
+                                  distribution.\r
+  @retval EFI_OUT_OF_RESOURCES    Not enough memory to store the parts of the\r
+                                  results that must be stored awaiting possible\r
+                                  future        protocols.\r
+  @retval EFI_INVALID_PARAMETER   Passing in a NULL for the Configuration parameter\r
+                                  would result in this type of error.\r
+  @retval EFI_NOT_FOUND           Target for the specified routing data was not\r
+                                  found.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiConfigRoutingRoutConfig (\r
+  IN  CONST EFI_HII_CONFIG_ROUTING_PROTOCOL  *This,\r
+  IN  CONST EFI_STRING                       Configuration,\r
+  OUT EFI_STRING                             *Progress\r
+  )\r
+;\r
+\r
+\r
+\r
+/**\r
+  This helper function is to be called by drivers to map configuration data stored\r
+  in byte array ("block") formats such as UEFI Variables into current configuration strings.\r
+\r
+  @param  This                    A pointer to the EFI_HII_CONFIG_ROUTING_PROTOCOL\r
+                                  instance.\r
+  @param  ConfigRequest           A null-terminated Unicode string in\r
+                                  <ConfigRequest> format.\r
+  @param  Block                   Array of bytes defining the block's\r
+                                  configuration.\r
+  @param  BlockSize               Length in bytes of Block.\r
+  @param  Config                  Filled-in configuration string. String allocated\r
+                                  by  the function. Returned only if call is\r
+                                  successful.\r
+  @param  Progress                A pointer to a string filled in with the offset\r
+                                  of  the most recent & before the first failing\r
+                                  name/value pair (or the beginning of the string\r
+                                  if the failure is in the first name / value pair)\r
+                                  or the terminating NULL if all was successful.\r
+\r
+  @retval EFI_SUCCESS             The request succeeded. Progress points to the\r
+                                  null terminator at the end of the ConfigRequest\r
+                                        string.\r
+  @retval EFI_OUT_OF_RESOURCES    Not enough memory to allocate Config.\r
+                                  Progress points to the first character of\r
+                                  ConfigRequest.\r
+  @retval EFI_INVALID_PARAMETER   Passing in a NULL for the ConfigRequest or\r
+                                  Block parameter would result in this type of\r
+                                  error. Progress points to the first character of\r
+                                  ConfigRequest.\r
+  @retval EFI_NOT_FOUND           Target for the specified routing data was not\r
+                                  found. Progress points to the "G" in "GUID" of\r
+                                  the      errant routing data.\r
+  @retval EFI_DEVICE_ERROR        Block not large enough. Progress undefined.\r
+  @retval EFI_INVALID_PARAMETER   Encountered non <BlockName> formatted string.\r
+                                       Block is left updated and Progress points at\r
+                                  the '&' preceding the first non-<BlockName>.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiBlockToConfig (\r
+  IN  CONST EFI_HII_CONFIG_ROUTING_PROTOCOL  *This,\r
+  IN  CONST EFI_STRING                       ConfigRequest,\r
+  IN  CONST UINT8                            *Block,\r
+  IN  CONST UINTN                            BlockSize,\r
+  OUT EFI_STRING                             *Config,\r
+  OUT EFI_STRING                             *Progress\r
+  )\r
+;\r
+\r
+\r
+/**\r
+  This helper function is to be called by drivers to map configuration strings\r
+  to configurations stored in byte array ("block") formats such as UEFI Variables.\r
+\r
+  @param  This                    A pointer to the EFI_HII_CONFIG_ROUTING_PROTOCOL\r
+                                  instance.\r
+  @param  ConfigResp              A null-terminated Unicode string in <ConfigResp>\r
+                                  format.\r
+  @param  Block                   A possibly null array of bytes representing the\r
+                                  current  block. Only bytes referenced in the\r
+                                  ConfigResp string  in the block are modified. If\r
+                                  this parameter is null or if the *BlockSize\r
+                                  parameter is (on input) shorter than required by\r
+                                  the Configuration string, only the BlockSize\r
+                                  parameter is updated and an appropriate status\r
+                                  (see below)  is returned.\r
+  @param  BlockSize               The length of the Block in units of UINT8.  On\r
+                                  input, this is the size of the Block. On output,\r
+                                  if successful, contains the index of the  last\r
+                                  modified byte in the Block.\r
+  @param  Progress                On return, points to an element of the ConfigResp\r
+                                   string filled in with the offset of the most\r
+                                  recent '&' before the first failing name / value\r
+                                  pair (or  the beginning of the string if the\r
+                                  failure is in the  first name / value pair) or\r
+                                  the terminating NULL if all was successful.\r
+\r
+  @retval EFI_SUCCESS             The request succeeded. Progress points to the\r
+                                  null terminator at the end of the ConfigResp\r
+                                  string.\r
+  @retval EFI_OUT_OF_RESOURCES    Not enough memory to allocate Config.\r
+                                  Progress points to the first character of\r
+                                  ConfigResp.\r
+  @retval EFI_INVALID_PARAMETER   Passing in a NULL for the ConfigResp or\r
+                                  Block parameter would result in this type of\r
+                                  error. Progress points to the first character of\r
+                                           ConfigResp.\r
+  @retval EFI_NOT_FOUND           Target for the specified routing data was not\r
+                                  found. Progress points to the "G" in "GUID" of\r
+                                  the      errant routing data.\r
+  @retval EFI_INVALID_PARAMETER   Encountered non <BlockName> formatted name /\r
+                                  value pair. Block is left updated and\r
+                                  Progress points at the '&' preceding the first\r
+                                  non-<BlockName>.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiConfigToBlock (\r
+  IN     CONST EFI_HII_CONFIG_ROUTING_PROTOCOL *This,\r
+  IN     CONST EFI_STRING                      ConfigResp,\r
+  IN OUT UINT8                                 *Block,\r
+  IN OUT UINTN                                 *BlockSize,\r
+  OUT    EFI_STRING                            *Progress\r
+  )\r
+;\r
+\r
+\r
+/**\r
+  This helper function is to be called by drivers to extract portions of\r
+  a larger configuration string.\r
+\r
+  @param  This                    A pointer to the EFI_HII_CONFIG_ROUTING_PROTOCOL\r
+                                  instance.\r
+  @param  Configuration           A null-terminated Unicode string in\r
+                                  <MultiConfigAltResp> format.\r
+  @param  Guid                    A pointer to the GUID value to search for in the\r
+                                  routing portion of the ConfigResp string when\r
+                                  retrieving  the requested data. If Guid is NULL,\r
+                                  then all GUID  values will be searched for.\r
+  @param  Name                    A pointer to the NAME value to search for in the\r
+                                  routing portion of the ConfigResp string when\r
+                                  retrieving  the requested data. If Name is NULL,\r
+                                  then all Name  values will be searched for.\r
+  @param  DevicePath              A pointer to the PATH value to search for in the\r
+                                  routing portion of the ConfigResp string when\r
+                                  retrieving  the requested data. If DevicePath is\r
+                                  NULL, then all  DevicePath values will be\r
+                                  searched for.\r
+  @param  AltCfgId                A pointer to the ALTCFG value to search for in\r
+                                  the  routing portion of the ConfigResp string\r
+                                  when retrieving  the requested data.  If this\r
+                                  parameter is NULL,  then the current setting will\r
+                                  be retrieved.\r
+  @param  AltCfgResp              A pointer to a buffer which will be allocated by\r
+                                  the  function which contains the retrieved string\r
+                                  as requested.   This buffer is only allocated if\r
+                                  the call was successful.\r
+\r
+  @retval EFI_SUCCESS             The request succeeded. The requested data was\r
+                                  extracted  and placed in the newly allocated\r
+                                  AltCfgResp buffer.\r
+  @retval EFI_OUT_OF_RESOURCES    Not enough memory to allocate AltCfgResp.\r
+  @retval EFI_INVALID_PARAMETER   Any parameter is invalid.\r
+  @retval EFI_NOT_FOUND           Target for the specified routing data was not\r
+                                  found.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiGetAltCfg (\r
+  IN  CONST EFI_HII_CONFIG_ROUTING_PROTOCOL    *This,\r
+  IN  CONST EFI_STRING                         Configuration,\r
+  IN  CONST EFI_GUID                           *Guid,\r
+  IN  CONST EFI_STRING                         Name,\r
+  IN  CONST EFI_DEVICE_PATH_PROTOCOL           *DevicePath,\r
+  IN  CONST UINT16                             *AltCfgId,\r
+  OUT EFI_STRING                               *AltCfgResp\r
+  )\r
+;\r
+\r
+\r
+//\r
+// Global variables\r
+//\r
+extern EFI_EVENT gHiiKeyboardLayoutChanged;\r
+\r
+#include "R8Lib.h"\r
+\r
+#endif\r
index 06d783a..341a50a 100644 (file)
@@ -790,7 +790,7 @@ HiiNewImage (
   @param  This                   A pointer to the EFI_HII_IMAGE_PROTOCOL instance.\r
   @param  PackageList            Handle of the package list where this image will\r
                                  be searched.\r
-  @param  ImageId                The image¡¯s id,, which is unique within\r
+  @param  ImageId                The image's id,, which is unique within\r
                                  PackageList.\r
   @param  Image                  Points to the image.\r
   @param  ImageSize              On entry, points to the size of the buffer pointed\r
@@ -993,7 +993,7 @@ HiiGetImage (
 \r
   @param  This                   A pointer to the EFI_HII_IMAGE_PROTOCOL instance.\r
   @param  PackageList            The package list containing the images.\r
-  @param  ImageId                The image¡¯s id,, which is unique within\r
+  @param  ImageId                The image's id,, which is unique within\r
                                  PackageList.\r
   @param  Image                  Points to the image.\r
 \r
@@ -1196,7 +1196,7 @@ HiiSetImage (
                                  this image and  EFI_HII_DRAW_FLAG_CLIP is implied.\r
                                  If this points to a  NULL on entry, then a buffer\r
                                  will be allocated to hold  the generated image and\r
-                                 the pointer updated on exit. It is the caller¡¯s\r
+                                 the pointer updated on exit. It is the caller's\r
                                  responsibility to free this buffer.\r
   @param  BltY                   Specifies the offset from the left and top edge of\r
                                  the  output image of the first pixel in the image.\r
@@ -1441,7 +1441,7 @@ HiiDrawImage (
                                  EFI_HII_DRAW_FLAG_CLIP is implied. If this points\r
                                  to a  NULL on entry, then a buffer will be\r
                                  allocated to hold  the generated image and the\r
-                                 pointer updated on exit. It is the caller¡¯s\r
+                                 pointer updated on exit. It is the caller's\r
                                  responsibility to free this buffer.\r
   @param  BltY                   Specifies the offset from the left and top edge of\r
                                  the  output image of the first pixel in the image.\r
index d408365..0d83010 100644 (file)
@@ -249,7 +249,7 @@ GetStringFontInfo (
 \r
   @param  Private                Hii database private structure.\r
   @param  StringPackage          Hii string package instance.\r
-  @param  StringId               The string¡¯s id, which is unique within\r
+  @param  StringId               The string's id, which is unique within\r
                                  PackageList.\r
   @param  BlockType              Output the block type of found string block.\r
   @param  StringBlockAddr        Output the block address of found string block.\r
@@ -567,7 +567,7 @@ FindStringBlock (
 \r
   @param  Private                Hii database private structure.\r
   @param  StringPackage          Hii string package instance.\r
-  @param  StringId               The string¡¯s id, which is unique within\r
+  @param  StringId               The string's id, which is unique within\r
                                  PackageList.\r
   @param  String                 Points to retrieved null-terminated string.\r
   @param  StringSize             On entry, points to the size of the buffer pointed\r
@@ -672,7 +672,7 @@ GetStringWorker (
 \r
   @param  Private                HII database driver private structure.\r
   @param  StringPackage          HII string package instance.\r
-  @param  StringId               The string¡¯s id, which is unique within\r
+  @param  StringId               The string's id, which is unique within\r
                                  PackageList.\r
   @param  String                 Points to the new null-terminated string.\r
   @param  StringFontInfo         Points to the input font info.\r
@@ -909,7 +909,7 @@ SetStringWorker (
                                  not zero, the LanguageName being passed  in will\r
                                  be ignored.\r
   @param  String                 Points to the new null-terminated string.\r
-  @param  StringFontInfo         Points to the new string¡¯s font information or\r
+  @param  StringFontInfo         Points to the new string's font information or\r
                                  NULL if the string should have the default system\r
                                  font, size and style.\r
 \r
@@ -1251,7 +1251,7 @@ HiiNewString (
   @param  StringSize             On entry, points to the size of the buffer pointed\r
                                  to by  String, in bytes. On return, points to the\r
                                  length of the string, in bytes.\r
-  @param  StringFontInfo         If not NULL, points to the string¡¯s font\r
+  @param  StringFontInfo         If not NULL, points to the string's font\r
                                  information.  It's caller's responsibility to free\r
                                  this buffer.\r
 \r
@@ -1334,11 +1334,11 @@ HiiGetString (
 \r
   @param  This                   A pointer to the EFI_HII_STRING_PROTOCOL instance.\r
   @param  PackageList            The package list containing the strings.\r
-  @param  StringId               The string¡¯s id, which is unique within\r
+  @param  StringId               The string's id, which is unique within\r
                                  PackageList.\r
   @param  Language               Points to the language for the updated string.\r
   @param  String                 Points to the new null-terminated string.\r
-  @param  StringFontInfo         Points to the string¡¯s font information or NULL if\r
+  @param  StringFontInfo         Points to the string's font information or NULL if\r
                                  the  string font information is not changed.\r
 \r
   @retval EFI_SUCCESS            The string was updated successfully.\r
index 0733da1..6961c0a 100644 (file)
-/** @file
-  Memory-only library functions with no library constructor/destructor
-
-  Copyright (c) 2006 - 2007, Intel Corporation
-  All rights reserved. This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#ifndef __BASE_LIB__
-#define __BASE_LIB__
-
-//
-// Definitions for architecture specific types
-// These include SPIN_LOCK and BASE_LIBRARY_JUMP_BUFFER
-//
-
-//
-// SPIN_LOCK
-//
-typedef volatile UINTN              SPIN_LOCK;
-
-#if   defined (MDE_CPU_IA32)
-//
-// IA32 context buffer used by SetJump() and LongJump()
-//
-typedef struct {
-  UINT32                            Ebx;
-  UINT32                            Esi;
-  UINT32                            Edi;
-  UINT32                            Ebp;
-  UINT32                            Esp;
-  UINT32                            Eip;
-} BASE_LIBRARY_JUMP_BUFFER;
-
-#define BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT 4
-
-#elif defined (MDE_CPU_IPF)
-
-//
-// IPF context buffer used by SetJump() and LongJump()
-//
-typedef struct {
-  UINT64                            F2[2];
-  UINT64                            F3[2];
-  UINT64                            F4[2];
-  UINT64                            F5[2];
-  UINT64                            F16[2];
-  UINT64                            F17[2];
-  UINT64                            F18[2];
-  UINT64                            F19[2];
-  UINT64                            F20[2];
-  UINT64                            F21[2];
-  UINT64                            F22[2];
-  UINT64                            F23[2];
-  UINT64                            F24[2];
-  UINT64                            F25[2];
-  UINT64                            F26[2];
-  UINT64                            F27[2];
-  UINT64                            F28[2];
-  UINT64                            F29[2];
-  UINT64                            F30[2];
-  UINT64                            F31[2];
-  UINT64                            R4;
-  UINT64                            R5;
-  UINT64                            R6;
-  UINT64                            R7;
-  UINT64                            SP;
-  UINT64                            BR0;
-  UINT64                            BR1;
-  UINT64                            BR2;
-  UINT64                            BR3;
-  UINT64                            BR4;
-  UINT64                            BR5;
-  UINT64                            InitialUNAT;
-  UINT64                            AfterSpillUNAT;
-  UINT64                            PFS;
-  UINT64                            BSP;
-  UINT64                            Predicates;
-  UINT64                            LoopCount;
-  UINT64                            FPSR;
-} BASE_LIBRARY_JUMP_BUFFER;
-
-#define BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT 0x10
-
-#elif defined (MDE_CPU_X64)
-//
-// X64 context buffer used by SetJump() and LongJump()
-//
-typedef struct {
-  UINT64                            Rbx;
-  UINT64                            Rsp;
-  UINT64                            Rbp;
-  UINT64                            Rdi;
-  UINT64                            Rsi;
-  UINT64                            R12;
-  UINT64                            R13;
-  UINT64                            R14;
-  UINT64                            R15;
-  UINT64                            Rip;
-} BASE_LIBRARY_JUMP_BUFFER;
-
-#define BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT 8
-
-#elif defined (MDE_CPU_EBC)
-//
-// EBC context buffer used by SetJump() and LongJump()
-//
-typedef struct {
-  UINT64                            R0;
-  UINT64                            R1;
-  UINT64                            R2;
-  UINT64                            R3;
-  UINT64                            IP;
-} BASE_LIBRARY_JUMP_BUFFER;
-
-#define BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT 8
-
-#else
-#error Unknown Processor Type
-#endif
-
-//
-// String Services
-//
-
-/**
-  Copies one Null-terminated Unicode string to another Null-terminated Unicode
-  string and returns the new Unicode string.
-
-  This function copies the contents of the Unicode string Source to the Unicode
-  string Destination, and returns Destination. If Source and Destination
-  overlap, then the results are undefined.
-
-  If Destination is NULL, then ASSERT().
-  If Destination is not aligned on a 16-bit boundary, then ASSERT().
-  If Source is NULL, then ASSERT().
-  If Source is not aligned on a 16-bit boundary, then ASSERT().
-  If Source and Destination overlap, then ASSERT().
-  If PcdMaximumUnicodeStringLength is not zero, and Source contains more than
-  PcdMaximumUnicodeStringLength Unicode characters not including the
-  Null-terminator, then ASSERT().
-
-  @param  Destination Pointer to a Null-terminated Unicode string.
-  @param  Source      Pointer to a Null-terminated Unicode string.
-
-  @return Destiantion
-
-**/
-CHAR16 *
-EFIAPI
-StrCpy (
-  OUT     CHAR16                    *Destination,
-  IN      CONST CHAR16              *Source
-  );
-
-
-/**
-  Copies one Null-terminated Unicode string with a maximum length to another
-  Null-terminated Unicode string with a maximum length and returns the new
-  Unicode string.
-
-  This function copies the contents of the Unicode string Source to the Unicode
-  string Destination, and returns Destination. At most, Length Unicode
-  characters are copied from Source to Destination. If Length is 0, then
-  Destination is returned unmodified. If Length is greater that the number of
-  Unicode characters in Source, then Destination is padded with Null Unicode
-  characters. If Source and Destination overlap, then the results are
-  undefined.
-
-  If Length > 0 and Destination is NULL, then ASSERT().
-  If Length > 0 and Destination is not aligned on a 16-bit boundary, then ASSERT().
-  If Length > 0 and Source is NULL, then ASSERT().
-  If Length > 0 and Source is not aligned on a 16-bit bounadry, then ASSERT().
-  If Source and Destination overlap, then ASSERT().
-  If PcdMaximumUnicodeStringLength is not zero, and Source contains more than
-  PcdMaximumUnicodeStringLength Unicode characters not including the
-  Null-terminator, then ASSERT().
-
-  @param  Destination Pointer to a Null-terminated Unicode string.
-  @param  Source      Pointer to a Null-terminated Unicode string.
-  @param  Length      Maximum number of Unicode characters to copy.
-
-  @return Destination
-
-**/
-CHAR16 *
-EFIAPI
-StrnCpy (
-  OUT     CHAR16                    *Destination,
-  IN      CONST CHAR16              *Source,
-  IN      UINTN                     Length
-  );
-
-
-/**
-  Returns the length of a Null-terminated Unicode string.
-
-  This function returns the number of Unicode characters in the Null-terminated
-  Unicode string specified by String.
-
-  If String is NULL, then ASSERT().
-  If String is not aligned on a 16-bit boundary, then ASSERT().
-  If PcdMaximumUnicodeStringLength is not zero, and String contains more than
-  PcdMaximumUnicodeStringLength Unicode characters not including the
-  Null-terminator, then ASSERT().
-
-  @param  String  Pointer to a Null-terminated Unicode string.
-
-  @return The length of String.
-
-**/
-UINTN
-EFIAPI
-StrLen (
-  IN      CONST CHAR16              *String
-  );
-
-
-/**
-  Returns the size of a Null-terminated Unicode string in bytes, including the
-  Null terminator.
-
-  This function returns the size, in bytes, of the Null-terminated Unicode
-  string specified by String.
-
-  If String is NULL, then ASSERT().
-  If String is not aligned on a 16-bit boundary, then ASSERT().
-  If PcdMaximumUnicodeStringLength is not zero, and String contains more than
-  PcdMaximumUnicodeStringLength Unicode characters not including the
-  Null-terminator, then ASSERT().
-
-  @param  String  Pointer to a Null-terminated Unicode string.
-
-  @return The size of String.
-
-**/
-UINTN
-EFIAPI
-StrSize (
-  IN      CONST CHAR16              *String
-  );
-
-
-/**
-  Compares two Null-terminated Unicode strings, and returns the difference
-  between the first mismatched Unicode characters.
-
-  This function compares the Null-terminated Unicode string FirstString to the
-  Null-terminated Unicode string SecondString. If FirstString is identical to
-  SecondString, then 0 is returned. Otherwise, the value returned is the first
-  mismatched Unicode character in SecondString subtracted from the first
-  mismatched Unicode character in FirstString.
-
-  If FirstString is NULL, then ASSERT().
-  If FirstString is not aligned on a 16-bit boundary, then ASSERT().
-  If SecondString is NULL, then ASSERT().
-  If SecondString is not aligned on a 16-bit boundary, then ASSERT().
-  If PcdMaximumUnicodeStringLength is not zero, and FirstString contains more
-  than PcdMaximumUnicodeStringLength Unicode characters not including the
-  Null-terminator, then ASSERT().
-  If PcdMaximumUnicodeStringLength is not zero, and SecondString contains more
-  than PcdMaximumUnicodeStringLength Unicode characters not including the
-  Null-terminator, then ASSERT().
-
-  @param  FirstString   Pointer to a Null-terminated Unicode string.
-  @param  SecondString  Pointer to a Null-terminated Unicode string.
-
-  @retval 0   FirstString is identical to SecondString.
-  @retval !=0 FirstString is not identical to SecondString.
-
-**/
-INTN
-EFIAPI
-StrCmp (
-  IN      CONST CHAR16              *FirstString,
-  IN      CONST CHAR16              *SecondString
-  );
-
-
-/**
-  Compares two Null-terminated Unicode strings with maximum lengths, and
-  returns the difference between the first mismatched Unicode characters.
-
-  This function compares the Null-terminated Unicode string FirstString to the
-  Null-terminated Unicode string SecondString. At most, Length Unicode
-  characters will be compared. If Length is 0, then 0 is returned. If
-  FirstString is identical to SecondString, then 0 is returned. Otherwise, the
-  value returned is the first mismatched Unicode character in SecondString
-  subtracted from the first mismatched Unicode character in FirstString.
-
-  If Length > 0 and FirstString is NULL, then ASSERT().
-  If Length > 0 and FirstString is not aligned on a 16-bit bounadary, then ASSERT().
-  If Length > 0 and SecondString is NULL, then ASSERT().
-  If Length > 0 and SecondString is not aligned on a 16-bit bounadary, then ASSERT().
-  If PcdMaximumUnicodeStringLength is not zero, and FirstString contains more
-  than PcdMaximumUnicodeStringLength Unicode characters not including the
-  Null-terminator, then ASSERT().
-  If PcdMaximumUnicodeStringLength is not zero, and SecondString contains more
-  than PcdMaximumUnicodeStringLength Unicode characters not including the
-  Null-terminator, then ASSERT().
-
-  @param  FirstString   Pointer to a Null-terminated Unicode string.
-  @param  SecondString  Pointer to a Null-terminated Unicode string.
-  @param  Length        Maximum number of Unicode characters to compare.
-
-  @retval 0   FirstString is identical to SecondString.
-  @retval !=0 FirstString is not identical to SecondString.
-
-**/
-INTN
-EFIAPI
-StrnCmp (
-  IN      CONST CHAR16              *FirstString,
-  IN      CONST CHAR16              *SecondString,
-  IN      UINTN                     Length
-  );
-
-
-/**
-  Concatenates one Null-terminated Unicode string to another Null-terminated
-  Unicode string, and returns the concatenated Unicode string.
-
-  This function concatenates two Null-terminated Unicode strings. The contents
-  of Null-terminated Unicode string Source are concatenated to the end of
-  Null-terminated Unicode string Destination. The Null-terminated concatenated
-  Unicode String is returned. If Source and Destination overlap, then the
-  results are undefined.
-
-  If Destination is NULL, then ASSERT().
-  If Destination is not aligned on a 16-bit bounadary, then ASSERT().
-  If Source is NULL, then ASSERT().
-  If Source is not aligned on a 16-bit bounadary, then ASSERT().
-  If Source and Destination overlap, then ASSERT().
-  If PcdMaximumUnicodeStringLength is not zero, and Destination contains more
-  than PcdMaximumUnicodeStringLength Unicode characters not including the
-  Null-terminator, then ASSERT().
-  If PcdMaximumUnicodeStringLength is not zero, and Source contains more than
-  PcdMaximumUnicodeStringLength Unicode characters not including the
-  Null-terminator, then ASSERT().
-  If PcdMaximumUnicodeStringLength is not zero, and concatenating Destination
-  and Source results in a Unicode string with more than
-  PcdMaximumUnicodeStringLength Unicode characters not including the
-  Null-terminator, then ASSERT().
-
-  @param  Destination Pointer to a Null-terminated Unicode string.
-  @param  Source      Pointer to a Null-terminated Unicode string.
-
-  @return Destination
-
-**/
-CHAR16 *
-EFIAPI
-StrCat (
-  IN OUT  CHAR16                    *Destination,
-  IN      CONST CHAR16              *Source
-  );
-
-
-/**
-  Concatenates one Null-terminated Unicode string with a maximum length to the
-  end of another Null-terminated Unicode string, and returns the concatenated
-  Unicode string.
-
-  This function concatenates two Null-terminated Unicode strings. The contents
-  of Null-terminated Unicode string Source are concatenated to the end of
-  Null-terminated Unicode string Destination, and Destination is returned. At
-  most, Length Unicode characters are concatenated from Source to the end of
-  Destination, and Destination is always Null-terminated. If Length is 0, then
-  Destination is returned unmodified. If Source and Destination overlap, then
-  the results are undefined.
-
-  If Destination is NULL, then ASSERT().
-  If Length > 0 and Destination is not aligned on a 16-bit boundary, then ASSERT().
-  If Length > 0 and Source is NULL, then ASSERT().
-  If Length > 0 and Source is not aligned on a 16-bit boundary, then ASSERT().
-  If Source and Destination overlap, then ASSERT().
-  If PcdMaximumUnicodeStringLength is not zero, and Destination contains more
-  than PcdMaximumUnicodeStringLength Unicode characters not including the
-  Null-terminator, then ASSERT().
-  If PcdMaximumUnicodeStringLength is not zero, and Source contains more than
-  PcdMaximumUnicodeStringLength Unicode characters not including the
-  Null-terminator, then ASSERT().
-  If PcdMaximumUnicodeStringLength is not zero, and concatenating Destination
-  and Source results in a Unicode string with more than
-  PcdMaximumUnicodeStringLength Unicode characters not including the
-  Null-terminator, then ASSERT().
-
-  @param  Destination Pointer to a Null-terminated Unicode string.
-  @param  Source      Pointer to a Null-terminated Unicode string.
-  @param  Length      Maximum number of Unicode characters to concatenate from
-                      Source.
-
-  @return Destination
-
-**/
-CHAR16 *
-EFIAPI
-StrnCat (
-  IN OUT  CHAR16                    *Destination,
-  IN      CONST CHAR16              *Source,
-  IN      UINTN                     Length
-  );
-
-/**
-  Returns the first occurance of a Null-terminated Unicode sub-string
-  in a Null-terminated Unicode string.
-
-  This function scans the contents of the Null-terminated Unicode string
-  specified by String and returns the first occurrence of SearchString.
-  If SearchString is not found in String, then NULL is returned.  If
-  the length of SearchString is zero, then String is
-  returned.
-
-  If String is NULL, then ASSERT().
-  If String is not aligned on a 16-bit boundary, then ASSERT().
-  If SearchString is NULL, then ASSERT().
-  If SearchString is not aligned on a 16-bit boundary, then ASSERT().
-
-  If PcdMaximumUnicodeStringLength is not zero, and SearchString
-  or String contains more than PcdMaximumUnicodeStringLength Unicode
-  characters not including the Null-terminator, then ASSERT().
-
-  @param  String                                 Pointer to a Null-terminated Unicode string.
-  @param  SearchString Pointer to a Null-terminated Unicode string to search for.
-
-  @retval NULL            If the SearchString does not appear in String.
-  @retval !NULL           If there is a match.
-
-**/
-CHAR16 *
-EFIAPI
-StrStr (
-  IN      CONST CHAR16               *String,
-  IN      CONST CHAR16               *SearchString
-  );
-
-/**
-  Convert a Null-terminated Unicode decimal string to a value of
-  type UINTN.
-
-  This function returns a value of type UINTN by interpreting the contents
-  of the Unicode string specified by String as a decimal number. The format
-  of the input Unicode string String is:
-
-                  [spaces] [decimal digits].
-
-  The valid decimal digit character is in the range [0-9]. The
-  function will ignore the pad space, which includes spaces or
-  tab characters, before [decimal digits]. The running zero in the
-  beginning of [decimal digits] will be ignored. Then, the function
-  stops at the first character that is a not a valid decimal character
-  or a Null-terminator, whichever one comes first.
-
-  If String is NULL, then ASSERT().
-  If String is not aligned in a 16-bit boundary, then ASSERT().
-  If String has only pad spaces, then 0 is returned.
-  If String has no pad spaces or valid decimal digits,
-  then 0 is returned.
-  If the number represented by String overflows according
-  to the range defined by UINTN, then ASSERT().
-
-  If PcdMaximumUnicodeStringLength is not zero, and String contains
-  more than PcdMaximumUnicodeStringLength Unicode characters not including
-  the Null-terminator, then ASSERT().
-
-  @param  String                           Pointer to a Null-terminated Unicode string.
-
-  @retval UINTN
-
-**/
-UINTN
-EFIAPI
-StrDecimalToUintn (
-  IN      CONST CHAR16               *String
-  );
-
-/**
-  Convert a Null-terminated Unicode decimal string to a value of
-  type UINT64.
-
-  This function returns a value of type UINT64 by interpreting the contents
-  of the Unicode string specified by String as a decimal number. The format
-  of the input Unicode string String is:
-
-                  [spaces] [decimal digits].
-
-  The valid decimal digit character is in the range [0-9]. The
-  function will ignore the pad space, which includes spaces or
-  tab characters, before [decimal digits]. The running zero in the
-  beginning of [decimal digits] will be ignored. Then, the function
-  stops at the first character that is a not a valid decimal character
-  or a Null-terminator, whichever one comes first.
-
-  If String is NULL, then ASSERT().
-  If String is not aligned in a 16-bit boundary, then ASSERT().
-  If String has only pad spaces, then 0 is returned.
-  If String has no pad spaces or valid decimal digits,
-  then 0 is returned.
-  If the number represented by String overflows according
-  to the range defined by UINT64, then ASSERT().
-
-  If PcdMaximumUnicodeStringLength is not zero, and String contains
-  more than PcdMaximumUnicodeStringLength Unicode characters not including
-  the Null-terminator, then ASSERT().
-
-  @param  String                           Pointer to a Null-terminated Unicode string.
-
-  @retval UINT64
-
-**/
-UINT64
-EFIAPI
-StrDecimalToUint64 (
-  IN      CONST CHAR16               *String
-  );
-
-/**
-  Convert a Null-terminated Unicode hexadecimal string to a value of type UINTN.
-
-  This function returns a value of type UINTN by interpreting the contents
-  of the Unicode string specified by String as a hexadecimal number.
-  The format of the input Unicode string String is:
-
-                  [spaces][zeros][x][hexadecimal digits].
-
-  The valid hexadecimal digit character is in the range [0-9], [a-f] and [A-F].
-  The prefix "0x" is optional. Both "x" and "X" is allowed in "0x" prefix.
-  If "x" appears in the input string, it must be prefixed with at least one 0.
-  The function will ignore the pad space, which includes spaces or tab characters,
-  before [zeros], [x] or [hexadecimal digit]. The running zero before [x] or
-  [hexadecimal digit] will be ignored. Then, the decoding starts after [x] or the
-  first valid hexadecimal digit. Then, the function stops at the first character that is
-  a not a valid hexadecimal character or NULL, whichever one comes first.
-
-  If String is NULL, then ASSERT().
-  If String is not aligned in a 16-bit boundary, then ASSERT().
-  If String has only pad spaces, then zero is returned.
-  If String has no leading pad spaces, leading zeros or valid hexadecimal digits,
-  then zero is returned.
-  If the number represented by String overflows according to the range defined by
-  UINTN, then ASSERT().
-
-  If PcdMaximumUnicodeStringLength is not zero, and String contains more than
-  PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator,
-  then ASSERT().
-
-  @param  String                           Pointer to a Null-terminated Unicode string.
-
-  @retval UINTN
-
-**/
-UINTN
-EFIAPI
-StrHexToUintn (
-  IN      CONST CHAR16               *String
-  );
-
-
-/**
-  Convert a Null-terminated Unicode hexadecimal string to a value of type UINT64.
-
-  This function returns a value of type UINT64 by interpreting the contents
-  of the Unicode string specified by String as a hexadecimal number.
-  The format of the input Unicode string String is
-
-                  [spaces][zeros][x][hexadecimal digits].
-
-  The valid hexadecimal digit character is in the range [0-9], [a-f] and [A-F].
-  The prefix "0x" is optional. Both "x" and "X" is allowed in "0x" prefix.
-  If "x" appears in the input string, it must be prefixed with at least one 0.
-  The function will ignore the pad space, which includes spaces or tab characters,
-  before [zeros], [x] or [hexadecimal digit]. The running zero before [x] or
-  [hexadecimal digit] will be ignored. Then, the decoding starts after [x] or the
-  first valid hexadecimal digit. Then, the function stops at the first character that is
-  a not a valid hexadecimal character or NULL, whichever one comes first.
-
-  If String is NULL, then ASSERT().
-  If String is not aligned in a 16-bit boundary, then ASSERT().
-  If String has only pad spaces, then zero is returned.
-  If String has no leading pad spaces, leading zeros or valid hexadecimal digits,
-  then zero is returned.
-  If the number represented by String overflows according to the range defined by
-  UINT64, then ASSERT().
-
-  If PcdMaximumUnicodeStringLength is not zero, and String contains more than
-  PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator,
-  then ASSERT().
-
-  @param  String                           Pointer to a Null-terminated Unicode string.
-
-  @retval UINT64
-
-**/
-UINT64
-EFIAPI
-StrHexToUint64 (
-  IN      CONST CHAR16               *String
-  );
-
-/**
-  Convert a nibble in the low 4 bits of a byte to a Unicode hexadecimal character.
-
-  This function converts a nibble in the low 4 bits of a byte to a Unicode hexadecimal 
-  character  For example, the nibble  0x01 and 0x0A will converted to L'1' and L'A' 
-  respectively.
-
-  The upper nibble in the input byte will be masked off.
-
-  @param Nibble     The nibble which is in the low 4 bits of the input byte.
-
-  @retval  CHAR16   The Unicode hexadecimal character.
-  
-**/
-CHAR16
-EFIAPI
-NibbleToHexChar (
-  IN UINT8      Nibble
-  )
-;
-
-/** 
-  Convert binary buffer to a Unicode String in a specified sequence. 
-
-  This function converts bytes in the binary Buffer Buf to a Unicode String Str. 
-  Each byte will be represented by two Unicode characters. For example, byte 0xA1 will 
-  be converted into two Unicode character L'A' and L'1'. In the output String, the Unicode Character 
-  for the Most Significant Nibble will be put before the Unicode Character for the Least Significant
-  Nibble. The output string for the buffer containing a single byte 0xA1 will be L"A1". 
-  For a buffer with multiple bytes, the Unicode character produced by the first byte will be put into the 
-  the last character in the output string. The one next to first byte will be put into the
-  character before the last character. This rules applies to the rest of the bytes. The Unicode
-  character by the last byte will be put into the first character in the output string. For example,
-  the input buffer for a 64-bits unsigned integrer 0x12345678abcdef1234 will be converted to
-  a Unicode string equal to L"12345678abcdef1234".
-
-  @param String                        On input, String is pointed to the buffer allocated for the convertion.
-  @param StringLen                     The Length of String buffer to hold the output String. The length must include the tailing '\0' character.
-                                       The StringLen required to convert a N bytes Buffer will be a least equal to or greater 
-                                       than 2*N + 1.
-  @param Buffer                        The pointer to a input buffer.
-  @param BufferSizeInBytes             Lenth in bytes of the input buffer.
-  
-
-  @retval  EFI_SUCCESS                 The convertion is successfull. All bytes in Buffer has been convert to the corresponding
-                                       Unicode character and placed into the right place in String.
-  @retval  EFI_BUFFER_TOO_SMALL        StringSizeInBytes is smaller than 2 * N + 1the number of bytes required to
-                                       complete the convertion. 
-**/
-RETURN_STATUS
-EFIAPI
-BufToHexString (
-  IN OUT       CHAR16               *String,
-  IN OUT       UINTN                *StringLen,
-  IN     CONST UINT8                *Buffer,
-  IN           UINTN                BufferSizeInBytes
-  )
-;
-
-
-/**
-  Convert a Unicode string consisting of hexadecimal characters to a output byte buffer.
-
-  This function converts a Unicode string consisting of characters in the range of Hexadecimal
-  character (L'0' to L'9', L'A' to L'F' and L'a' to L'f') to a output byte buffer. The function will stop
-  at the first non-hexadecimal character or the NULL character. The convertion process can be
-  simply viewed as the reverse operations defined by BufToHexString. Two Unicode characters will be 
-  converted into one byte. The first Unicode character represents the Most Significant Nibble and the
-  second Unicode character represents the Least Significant Nibble in the output byte. 
-  The first pair of Unicode characters represents the last byte in the output buffer. The second pair of Unicode 
-  characters represent the  the byte preceding the last byte. This rule applies to the rest pairs of bytes. 
-  The last pair represent the first byte in the output buffer. 
-
-  For example, a Unciode String L"12345678" will be converted into a buffer wil the following bytes 
-  (first byte is the byte in the lowest memory address): "0x78, 0x56, 0x34, 0x12".
-
-  If String has N valid hexadecimal characters for conversion,  the caller must make sure Buffer is at least 
-  N/2 (if N is even) or (N+1)/2 (if N if odd) bytes. 
-
-  @param Buffer                      The output buffer allocated by the caller.
-  @param BufferSizeInBytes           On input, the size in bytes of Buffer. On output, it is updated to 
-                                     contain the size of the Buffer which is actually used for the converstion.
-                                     For Unicode string with 2*N hexadecimal characters (not including the 
-                                     tailing NULL character), N bytes of Buffer will be used for the output.
-  @param String                      The input hexadecimal string.
-  @param ConvertedStrLen             The number of hexadecimal characters used to produce content in output
-                                     buffer Buffer.
-
-  @retval  RETURN_BUFFER_TOO_SMALL   The input BufferSizeInBytes is too small to hold the output. BufferSizeInBytes
-                                     will be updated to the size required for the converstion.
-  @retval  RETURN_SUCCESS            The convertion is successful or the first Unicode character from String
-                                     is hexadecimal. If ConvertedStrLen is not NULL, it is updated
-                                     to the number of hexadecimal character used for the converstion.
-**/
-RETURN_STATUS
-EFIAPI
-HexStringToBuf (
-  OUT          UINT8                    *Buffer,   
-  IN OUT       UINTN                    *BufferSizeInBytes,
-  IN     CONST CHAR16                   *String,
-  OUT          UINTN                    *ConvertedStrLen  OPTIONAL
-  )
-;
-
-
-/**
-  Test if  a Unicode character is a hexadecimal digit. If true, the input
-  Unicode character is converted to a byte. 
-
-  This function tests if a Unicode character is a hexadecimal digit. If true, the input
-  Unicode character is converted to a byte. For example, Unicode character
-  L'A' will be converted to 0x0A. 
-
-  If Digit is NULL, then ASSERT.
-
-  @retval TRUE        Char is in the range of Hexadecimal number. Digit is updated
-                      to the byte value of the number.
-  @retval FALSE       Char is not in the range of Hexadecimal number. Digit is keep
-                      intact.
-  
-**/
-BOOLEAN
-EFIAPI
-IsHexDigit (
-  OUT UINT8      *Digit,
-  IN  CHAR16      Char
-  )
-;
-
-/**
-  Convert one Null-terminated Unicode string to a Null-terminated
-  ASCII string and returns the ASCII string.
-
-  This function converts the content of the Unicode string Source
-  to the ASCII string Destination by copying the lower 8 bits of
-  each Unicode character. It returns Destination.
-
-  If any Unicode characters in Source contain non-zero value in
-  the upper 8 bits, then ASSERT().
-
-  If Destination is NULL, then ASSERT().
-  If Source is NULL, then ASSERT().
-  If Source is not aligned on a 16-bit boundary, then ASSERT().
-  If Source and Destination overlap, then ASSERT().
-
-  If PcdMaximumUnicodeStringLength is not zero, and Source contains
-  more than PcdMaximumUnicodeStringLength Unicode characters not including
-  the Null-terminator, then ASSERT().
-
-  If PcdMaximumAsciiStringLength is not zero, and Source contains more
-  than PcdMaximumAsciiStringLength Unicode characters not including the
-  Null-terminator, then ASSERT().
-
-  @param  Source        Pointer to a Null-terminated Unicode string.
-  @param  Destination   Pointer to a Null-terminated ASCII string.
-
-  @return Destination
-
-**/
-CHAR8 *
-EFIAPI
-UnicodeStrToAsciiStr (
-  IN      CONST CHAR16               *Source,
-  OUT    CHAR8                           *Destination
-  );
-
-
-/**
-  Copies one Null-terminated ASCII string to another Null-terminated ASCII
-  string and returns the new ASCII string.
-
-  This function copies the contents of the ASCII string Source to the ASCII
-  string Destination, and returns Destination. If Source and Destination
-  overlap, then the results are undefined.
-
-  If Destination is NULL, then ASSERT().
-  If Source is NULL, then ASSERT().
-  If Source and Destination overlap, then ASSERT().
-  If PcdMaximumAsciiStringLength is not zero and Source contains more than
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,
-  then ASSERT().
-
-  @param  Destination Pointer to a Null-terminated ASCII string.
-  @param  Source      Pointer to a Null-terminated ASCII string.
-
-  @return Destination
-
-**/
-CHAR8 *
-EFIAPI
-AsciiStrCpy (
-  OUT     CHAR8                     *Destination,
-  IN      CONST CHAR8               *Source
-  );
-
-
-/**
-  Copies one Null-terminated ASCII string with a maximum length to another
-  Null-terminated ASCII string with a maximum length and returns the new ASCII
-  string.
-
-  This function copies the contents of the ASCII string Source to the ASCII
-  string Destination, and returns Destination. At most, Length ASCII characters
-  are copied from Source to Destination. If Length is 0, then Destination is
-  returned unmodified. If Length is greater that the number of ASCII characters
-  in Source, then Destination is padded with Null ASCII characters. If Source
-  and Destination overlap, then the results are undefined.
-
-  If Destination is NULL, then ASSERT().
-  If Source is NULL, then ASSERT().
-  If Source and Destination overlap, then ASSERT().
-  If PcdMaximumAsciiStringLength is not zero, and Source contains more than
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,
-  then ASSERT().
-
-  @param  Destination Pointer to a Null-terminated ASCII string.
-  @param  Source      Pointer to a Null-terminated ASCII string.
-  @param  Length      Maximum number of ASCII characters to copy.
-
-  @return Destination
-
-**/
-CHAR8 *
-EFIAPI
-AsciiStrnCpy (
-  OUT     CHAR8                     *Destination,
-  IN      CONST CHAR8               *Source,
-  IN      UINTN                     Length
-  );
-
-
-/**
-  Returns the length of a Null-terminated ASCII string.
-
-  This function returns the number of ASCII characters in the Null-terminated
-  ASCII string specified by String.
-
-  If Length > 0 and Destination is NULL, then ASSERT().
-  If Length > 0 and Source is NULL, then ASSERT().
-  If PcdMaximumAsciiStringLength is not zero and String contains more than
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,
-  then ASSERT().
-
-  @param  String  Pointer to a Null-terminated ASCII string.
-
-  @return The length of String.
-
-**/
-UINTN
-EFIAPI
-AsciiStrLen (
-  IN      CONST CHAR8               *String
-  );
-
-
-/**
-  Returns the size of a Null-terminated ASCII string in bytes, including the
-  Null terminator.
-
-  This function returns the size, in bytes, of the Null-terminated ASCII string
-  specified by String.
-
-  If String is NULL, then ASSERT().
-  If PcdMaximumAsciiStringLength is not zero and String contains more than
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,
-  then ASSERT().
-
-  @param  String  Pointer to a Null-terminated ASCII string.
-
-  @return The size of String.
-
-**/
-UINTN
-EFIAPI
-AsciiStrSize (
-  IN      CONST CHAR8               *String
-  );
-
-
-/**
-  Compares two Null-terminated ASCII strings, and returns the difference
-  between the first mismatched ASCII characters.
-
-  This function compares the Null-terminated ASCII string FirstString to the
-  Null-terminated ASCII string SecondString. If FirstString is identical to
-  SecondString, then 0 is returned. Otherwise, the value returned is the first
-  mismatched ASCII character in SecondString subtracted from the first
-  mismatched ASCII character in FirstString.
-
-  If FirstString is NULL, then ASSERT().
-  If SecondString is NULL, then ASSERT().
-  If PcdMaximumAsciiStringLength is not zero and FirstString contains more than
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,
-  then ASSERT().
-  If PcdMaximumAsciiStringLength is not zero and SecondString contains more
-  than PcdMaximumAsciiStringLength ASCII characters not including the
-  Null-terminator, then ASSERT().
-
-  @param  FirstString   Pointer to a Null-terminated ASCII string.
-  @param  SecondString  Pointer to a Null-terminated ASCII string.
-
-  @retval 0   FirstString is identical to SecondString.
-  @retval !=0 FirstString is not identical to SecondString.
-
-**/
-INTN
-EFIAPI
-AsciiStrCmp (
-  IN      CONST CHAR8               *FirstString,
-  IN      CONST CHAR8               *SecondString
-  );
-
-
-/**
-  Performs a case insensitive comparison of two Null-terminated ASCII strings,
-  and returns the difference between the first mismatched ASCII characters.
-
-  This function performs a case insensitive comparison of the Null-terminated
-  ASCII string FirstString to the Null-terminated ASCII string SecondString. If
-  FirstString is identical to SecondString, then 0 is returned. Otherwise, the
-  value returned is the first mismatched lower case ASCII character in
-  SecondString subtracted from the first mismatched lower case ASCII character
-  in FirstString.
-
-  If FirstString is NULL, then ASSERT().
-  If SecondString is NULL, then ASSERT().
-  If PcdMaximumAsciiStringLength is not zero and FirstString contains more than
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,
-  then ASSERT().
-  If PcdMaximumAsciiStringLength is not zero and SecondString contains more
-  than PcdMaximumAsciiStringLength ASCII characters not including the
-  Null-terminator, then ASSERT().
-
-  @param  FirstString   Pointer to a Null-terminated ASCII string.
-  @param  SecondString  Pointer to a Null-terminated ASCII string.
-
-  @retval 0   FirstString is identical to SecondString using case insensitive
-              comparisons.
-  @retval !=0 FirstString is not identical to SecondString using case
-              insensitive comparisons.
-
-**/
-INTN
-EFIAPI
-AsciiStriCmp (
-  IN      CONST CHAR8               *FirstString,
-  IN      CONST CHAR8               *SecondString
-  );
-
-
-/**
-  Compares two Null-terminated ASCII strings with maximum lengths, and returns
-  the difference between the first mismatched ASCII characters.
-
-  This function compares the Null-terminated ASCII string FirstString to the
-  Null-terminated ASCII  string SecondString. At most, Length ASCII characters
-  will be compared. If Length is 0, then 0 is returned. If FirstString is
-  identical to SecondString, then 0 is returned. Otherwise, the value returned
-  is the first mismatched ASCII character in SecondString subtracted from the
-  first mismatched ASCII character in FirstString.
-
-  If Length > 0 and FirstString is NULL, then ASSERT().
-  If Length > 0 and SecondString is NULL, then ASSERT().
-  If PcdMaximumAsciiStringLength is not zero and FirstString contains more than
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,
-  then ASSERT().
-  If PcdMaximumAsciiStringLength is not zero and SecondString contains more than
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,
-  then ASSERT().
-
-  @param  FirstString   Pointer to a Null-terminated ASCII string.
-  @param  SecondString  Pointer to a Null-terminated ASCII string.
-  @param  Length        Maximum number of ASCII characters for compare.
-  
-  @retval 0   FirstString is identical to SecondString.
-  @retval !=0 FirstString is not identical to SecondString.
-
-**/
-INTN
-EFIAPI
-AsciiStrnCmp (
-  IN      CONST CHAR8               *FirstString,
-  IN      CONST CHAR8               *SecondString,
-  IN      UINTN                     Length
-  );
-
-
-/**
-  Concatenates one Null-terminated ASCII string to another Null-terminated
-  ASCII string, and returns the concatenated ASCII string.
-
-  This function concatenates two Null-terminated ASCII strings. The contents of
-  Null-terminated ASCII string Source are concatenated to the end of Null-
-  terminated ASCII string Destination. The Null-terminated concatenated ASCII
-  String is returned.
-
-  If Destination is NULL, then ASSERT().
-  If Source is NULL, then ASSERT().
-  If PcdMaximumAsciiStringLength is not zero and Destination contains more than
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,
-  then ASSERT().
-  If PcdMaximumAsciiStringLength is not zero and Source contains more than
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,
-  then ASSERT().
-  If PcdMaximumAsciiStringLength is not zero and concatenating Destination and
-  Source results in a ASCII string with more than PcdMaximumAsciiStringLength
-  ASCII characters, then ASSERT().
-
-  @param  Destination Pointer to a Null-terminated ASCII string.
-  @param  Source      Pointer to a Null-terminated ASCII string.
-
-  @return Destination
-
-**/
-CHAR8 *
-EFIAPI
-AsciiStrCat (
-  IN OUT CHAR8    *Destination,
-  IN CONST CHAR8  *Source
-  );
-
-
-/**
-  Concatenates one Null-terminated ASCII string with a maximum length to the
-  end of another Null-terminated ASCII string, and returns the concatenated
-  ASCII string.
-
-  This function concatenates two Null-terminated ASCII strings. The contents
-  of Null-terminated ASCII string Source are concatenated to the end of Null-
-  terminated ASCII string Destination, and Destination is returned. At most,
-  Length ASCII characters are concatenated from Source to the end of
-  Destination, and Destination is always Null-terminated. If Length is 0, then
-  Destination is returned unmodified. If Source and Destination overlap, then
-  the results are undefined.
-
-  If Length > 0 and Destination is NULL, then ASSERT().
-  If Length > 0 and Source is NULL, then ASSERT().
-  If Source and Destination overlap, then ASSERT().
-  If PcdMaximumAsciiStringLength is not zero, and Destination contains more than
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,
-  then ASSERT().
-  If PcdMaximumAsciiStringLength is not zero, and Source contains more than
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,
-  then ASSERT().
-  If PcdMaximumAsciiStringLength is not zero, and concatenating Destination and
-  Source results in a ASCII string with more than PcdMaximumAsciiStringLength
-  ASCII characters not including the Null-terminator, then ASSERT().
-
-  @param  Destination Pointer to a Null-terminated ASCII string.
-  @param  Source      Pointer to a Null-terminated ASCII string.
-  @param  Length      Maximum number of ASCII characters to concatenate from
-                      Source.
-
-  @return Destination
-
-**/
-CHAR8 *
-EFIAPI
-AsciiStrnCat (
-  IN OUT  CHAR8                     *Destination,
-  IN      CONST CHAR8               *Source,
-  IN      UINTN                     Length
-  );
-
-
-/**
-  Returns the first occurance of a Null-terminated ASCII sub-string
-  in a Null-terminated ASCII string.
-
-  This function scans the contents of the ASCII string specified by String
-  and returns the first occurrence of SearchString. If SearchString is not
-  found in String, then NULL is returned. If the length of SearchString is zero,
-  then String is returned.
-
-  If String is NULL, then ASSERT().
-  If SearchString is NULL, then ASSERT().
-
-  If PcdMaximumAsciiStringLength is not zero, and SearchString or
-  String contains more than PcdMaximumAsciiStringLength Unicode characters
-  not including the Null-terminator, then ASSERT().
-
-  @param  String                                 Pointer to a Null-terminated ASCII string.
-  @param  SearchString   Pointer to a Null-terminated ASCII string to search for.
-
-  @retval NULL            If the SearchString does not appear in String.
-  @retval !NULL           If there is a match.
-
-**/
-CHAR8 *
-EFIAPI
-AsciiStrStr (
-  IN      CONST CHAR8                  *String,
-  IN      CONST CHAR8                  *SearchString
-  );
-
-
-/**
-  Convert a Null-terminated ASCII decimal string to a value of type
-  UINTN.
-
-  This function returns a value of type UINTN by interpreting the contents
-  of the ASCII string String as a decimal number. The format of the input
-  ASCII string String is:
-
-                    [spaces] [decimal digits].
-
-  The valid decimal digit character is in the range [0-9]. The function will
-  ignore the pad space, which includes spaces or tab characters, before the digits.
-  The running zero in the beginning of [decimal digits] will be ignored. Then, the
-  function stops at the first character that is a not a valid decimal character or
-  Null-terminator, whichever on comes first.
-
-  If String has only pad spaces, then 0 is returned.
-  If String has no pad spaces or valid decimal digits, then 0 is returned.
-  If the number represented by String overflows according to the range defined by
-  UINTN, then ASSERT().
-  If String is NULL, then ASSERT().
-  If PcdMaximumAsciiStringLength is not zero, and String contains more than
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,
-  then ASSERT().
-
-  @param  String                           Pointer to a Null-terminated ASCII string.
-
-  @retval UINTN
-
-**/
-UINTN
-EFIAPI
-AsciiStrDecimalToUintn (
-  IN      CONST CHAR8               *String
-  );
-
-
-/**
-  Convert a Null-terminated ASCII decimal string to a value of type
-  UINT64.
-
-  This function returns a value of type UINT64 by interpreting the contents
-  of the ASCII string String as a decimal number. The format of the input
-  ASCII string String is:
-
-                    [spaces] [decimal digits].
-
-  The valid decimal digit character is in the range [0-9]. The function will
-  ignore the pad space, which includes spaces or tab characters, before the digits.
-  The running zero in the beginning of [decimal digits] will be ignored. Then, the
-  function stops at the first character that is a not a valid decimal character or
-  Null-terminator, whichever on comes first.
-
-  If String has only pad spaces, then 0 is returned.
-  If String has no pad spaces or valid decimal digits, then 0 is returned.
-  If the number represented by String overflows according to the range defined by
-  UINT64, then ASSERT().
-  If String is NULL, then ASSERT().
-  If PcdMaximumAsciiStringLength is not zero, and String contains more than
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,
-  then ASSERT().
-
-  @param  String                           Pointer to a Null-terminated ASCII string.
-
-  @retval UINT64
-
-**/
-UINT64
-EFIAPI
-AsciiStrDecimalToUint64 (
-  IN      CONST CHAR8                *String
-  );
-
-
-/**
-  Convert a Null-terminated ASCII hexadecimal string to a value of type UINTN.
-
-  This function returns a value of type UINTN by interpreting the contents of
-  the ASCII string String as a hexadecimal number. The format of the input ASCII
-  string String is:
-
-                  [spaces][zeros][x][hexadecimal digits].
-
-  The valid hexadecimal digit character is in the range [0-9], [a-f] and [A-F].
-  The prefix "0x" is optional. Both "x" and "X" is allowed in "0x" prefix. If "x"
-  appears in the input string, it must be prefixed with at least one 0. The function
-  will ignore the pad space, which includes spaces or tab characters, before [zeros],
-  [x] or [hexadecimal digits]. The running zero before [x] or [hexadecimal digits]
-  will be ignored. Then, the decoding starts after [x] or the first valid hexadecimal
-  digit. Then, the function stops at the first character that is a not a valid
-  hexadecimal character or Null-terminator, whichever on comes first.
-
-  If String has only pad spaces, then 0 is returned.
-  If String has no leading pad spaces, leading zeros or valid hexadecimal digits, then
-  0 is returned.
-
-  If the number represented by String overflows according to the range defined by UINTN,
-  then ASSERT().
-  If String is NULL, then ASSERT().
-  If PcdMaximumAsciiStringLength is not zero,
-  and String contains more than PcdMaximumAsciiStringLength ASCII characters not including
-  the Null-terminator, then ASSERT().
-
-  @param  String                           Pointer to a Null-terminated ASCII string.
-
-  @retval UINTN
-
-**/
-UINTN
-EFIAPI
-AsciiStrHexToUintn (
-  IN      CONST CHAR8                *String
-  );
-
-
-/**
-  Convert a Null-terminated ASCII hexadecimal string to a value of type UINT64.
-
-  This function returns a value of type UINT64 by interpreting the contents of
-  the ASCII string String as a hexadecimal number. The format of the input ASCII
-  string String is:
-
-                  [spaces][zeros][x][hexadecimal digits].
-
-  The valid hexadecimal digit character is in the range [0-9], [a-f] and [A-F].
-  The prefix "0x" is optional. Both "x" and "X" is allowed in "0x" prefix. If "x"
-  appears in the input string, it must be prefixed with at least one 0. The function
-  will ignore the pad space, which includes spaces or tab characters, before [zeros],
-  [x] or [hexadecimal digits]. The running zero before [x] or [hexadecimal digits]
-  will be ignored. Then, the decoding starts after [x] or the first valid hexadecimal
-  digit. Then, the function stops at the first character that is a not a valid
-  hexadecimal character or Null-terminator, whichever on comes first.
-
-  If String has only pad spaces, then 0 is returned.
-  If String has no leading pad spaces, leading zeros or valid hexadecimal digits, then
-  0 is returned.
-
-  If the number represented by String overflows according to the range defined by UINT64,
-  then ASSERT().
-  If String is NULL, then ASSERT().
-  If PcdMaximumAsciiStringLength is not zero,
-  and String contains more than PcdMaximumAsciiStringLength ASCII characters not including
-  the Null-terminator, then ASSERT().
-
-  @param  String                           Pointer to a Null-terminated ASCII string.
-
-  @retval UINT64
-
-**/
-UINT64
-EFIAPI
-AsciiStrHexToUint64 (
-  IN      CONST CHAR8                  *String
-  );
-
-
-/**
-  Convert one Null-terminated ASCII string to a Null-terminated
-  Unicode string and returns the Unicode string.
-
-  This function converts the contents of the ASCII string Source to the Unicode
-  string Destination, and returns Destination.  The function terminates the
-  Unicode string Destination by appending a Null-terminator character at the end.
-  The caller is responsible to make sure Destination points to a buffer with size
-  equal or greater than ((AsciiStrLen (Source) + 1) * sizeof (CHAR16)) in bytes.
-
-  If Destination is NULL, then ASSERT().
-  If Destination is not aligned on a 16-bit boundary, then ASSERT().
-  If Source is NULL, then ASSERT().
-  If Source and Destination overlap, then ASSERT().
-  If PcdMaximumAsciiStringLength is not zero, and Source contains more than
-  PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,
-  then ASSERT().
-  If PcdMaximumUnicodeStringLength is not zero, and Source contains more than
-  PcdMaximumUnicodeStringLength ASCII characters not including the
-  Null-terminator, then ASSERT().
-
-  @param  Source        Pointer to a Null-terminated ASCII string.
-  @param  Destination   Pointer to a Null-terminated Unicode string.
-
-  @return Destination
-
-**/
-CHAR16 *
-EFIAPI
-AsciiStrToUnicodeStr (
-  IN      CONST CHAR8                *Source,
-  OUT    CHAR16                        *Destination
-  );
-
-
-/**
-  Converts an 8-bit value to an 8-bit BCD value.
-
-  Converts the 8-bit value specified by Value to BCD. The BCD value is
-  returned.
-
-  If Value >= 100, then ASSERT().
-
-  @param  Value The 8-bit value to convert to BCD. Range 0..99.
-
-  @return The BCD value
-
-**/
-UINT8
-EFIAPI
-DecimalToBcd8 (
-  IN      UINT8                     Value
-  );
-
-
-/**
-  Converts an 8-bit BCD value to an 8-bit value.
-
-  Converts the 8-bit BCD value specified by Value to an 8-bit value. The 8-bit
-  value is returned.
-
-  If Value >= 0xA0, then ASSERT().
-  If (Value & 0x0F) >= 0x0A, then ASSERT().
-
-  @param  Value The 8-bit BCD value to convert to an 8-bit value.
-
-  @return The 8-bit value is returned.
-
-**/
-UINT8
-EFIAPI
-BcdToDecimal8 (
-  IN      UINT8                     Value
-  );
-
-
-//
-// Linked List Functions and Macros
-//
-
-/**
-  Initializes the head node of a doubly linked list that is declared as a
-  global variable in a module.
-
-  Initializes the forward and backward links of a new linked list. After
-  initializing a linked list with this macro, the other linked list functions
-  may be used to add and remove nodes from the linked list. This macro results
-  in smaller executables by initializing the linked list in the data section,
-  instead if calling the InitializeListHead() function to perform the
-  equivalent operation.
-
-  @param  ListHead  The head note of a list to initiailize.
-
-**/
-#define INITIALIZE_LIST_HEAD_VARIABLE(ListHead)  {&ListHead, &ListHead}
-
-
-/**
-  Initializes the head node of a doubly linked list, and returns the pointer to
-  the head node of the doubly linked list.
-
-  Initializes the forward and backward links of a new linked list. After
-  initializing a linked list with this function, the other linked list
-  functions may be used to add and remove nodes from the linked list. It is up
-  to the caller of this function to allocate the memory for ListHead.
-
-  If ListHead is NULL, then ASSERT().
-
-  @param  ListHead  A pointer to the head node of a new doubly linked list.
-
-  @return ListHead
-
-**/
-LIST_ENTRY *
-EFIAPI
-InitializeListHead (
-  IN      LIST_ENTRY                *ListHead
-  );
-
-
-/**
-  Adds a node to the beginning of a doubly linked list, and returns the pointer
-  to the head node of the doubly linked list.
-
-  Adds the node Entry at the beginning of the doubly linked list denoted by
-  ListHead, and returns ListHead.
-
-  If ListHead is NULL, then ASSERT().
-  If Entry is NULL, then ASSERT().
-  If ListHead was not initialized with InitializeListHead(), then ASSERT().
-  If PcdMaximumLinkedListLenth is not zero, and prior to insertion the number
-  of nodes in ListHead, including the ListHead node, is greater than or
-  equal to PcdMaximumLinkedListLength, then ASSERT().
-
-  @param  ListHead  A pointer to the head node of a doubly linked list.
-  @param  Entry     A pointer to a node that is to be inserted at the beginning
-                    of a doubly linked list.
-
-  @return ListHead
-
-**/
-LIST_ENTRY *
-EFIAPI
-InsertHeadList (
-  IN      LIST_ENTRY                *ListHead,
-  IN      LIST_ENTRY                *Entry
-  );
-
-
-/**
-  Adds a node to the end of a doubly linked list, and returns the pointer to
-  the head node of the doubly linked list.
-
-  Adds the node Entry to the end of the doubly linked list denoted by ListHead,
-  and returns ListHead.
-
-  If ListHead is NULL, then ASSERT().
-  If Entry is NULL, then ASSERT().
-  If ListHead was not initialized with InitializeListHead(), then ASSERT().
-  If PcdMaximumLinkedListLenth is not zero, and prior to insertion the number
-  of nodes in ListHead, including the ListHead node, is greater than or
-  equal to PcdMaximumLinkedListLength, then ASSERT().
-
-  @param  ListHead  A pointer to the head node of a doubly linked list.
-  @param  Entry     A pointer to a node that is to be added at the end of the
-                    doubly linked list.
-
-  @return ListHead
-
-**/
-LIST_ENTRY *
-EFIAPI
-InsertTailList (
-  IN      LIST_ENTRY                *ListHead,
-  IN      LIST_ENTRY                *Entry
-  );
-
-
-/**
-  Retrieves the first node of a doubly linked list.
-
-  Returns the first node of a doubly linked list. List must have been
-  initialized with InitializeListHead(). If List is empty, then NULL is
-  returned.
-
-  If List is NULL, then ASSERT().
-  If List was not initialized with InitializeListHead(), then ASSERT().
-  If PcdMaximumLinkedListLenth is not zero, and the number of nodes
-  in List, including the List node, is greater than or equal to
-  PcdMaximumLinkedListLength, then ASSERT().
-
-  @param  List  A pointer to the head node of a doubly linked list.
-
-  @return The first node of a doubly linked list.
-  @retval NULL  The list is empty.
-
-**/
-LIST_ENTRY *
-EFIAPI
-GetFirstNode (
-  IN      CONST LIST_ENTRY          *List
-  );
-
-
-/**
-  Retrieves the next node of a doubly linked list.
-
-  Returns the node of a doubly linked list that follows Node. List must have
-  been initialized with InitializeListHead(). If List is empty, then List is
-  returned.
-
-  If List is NULL, then ASSERT().
-  If Node is NULL, then ASSERT().
-  If List was not initialized with InitializeListHead(), then ASSERT().
-  If PcdMaximumLinkedListLenth is not zero, and List contains more than
-  PcdMaximumLinkedListLenth nodes, then ASSERT().
-  If Node is not a node in List, then ASSERT().
-
-  @param  List  A pointer to the head node of a doubly linked list.
-  @param  Node  A pointer to a node in the doubly linked list.
-
-  @return Pointer to the next node if one exists. Otherwise a null value which
-          is actually List is returned.
-
-**/
-LIST_ENTRY *
-EFIAPI
-GetNextNode (
-  IN      CONST LIST_ENTRY          *List,
-  IN      CONST LIST_ENTRY          *Node
-  );
-
-
-/**
-  Checks to see if a doubly linked list is empty or not.
-
-  Checks to see if the doubly linked list is empty. If the linked list contains
-  zero nodes, this function returns TRUE. Otherwise, it returns FALSE.
-
-  If ListHead is NULL, then ASSERT().
-  If ListHead was not initialized with InitializeListHead(), then ASSERT().
-  If PcdMaximumLinkedListLenth is not zero, and the number of nodes
-  in List, including the List node, is greater than or equal to
-  PcdMaximumLinkedListLength, then ASSERT().
-
-  @param  ListHead  A pointer to the head node of a doubly linked list.
-
-  @retval TRUE  The linked list is empty.
-  @retval FALSE The linked list is not empty.
-
-**/
-BOOLEAN
-EFIAPI
-IsListEmpty (
-  IN      CONST LIST_ENTRY          *ListHead
-  );
-
-
-/**
-  Determines if a node in a doubly linked list is null.
-
-  Returns FALSE if Node is one of the nodes in the doubly linked list specified
-  by List. Otherwise, TRUE is returned. List must have been initialized with
-  InitializeListHead().
-
-  If List is NULL, then ASSERT().
-  If Node is NULL, then ASSERT().
-  If List was not initialized with InitializeListHead(), then ASSERT().
-  If PcdMaximumLinkedListLenth is not zero, and the number of nodes
-  in List, including the List node, is greater than or equal to
-  PcdMaximumLinkedListLength, then ASSERT().
-  If Node is not a node in List and Node is not equal to List, then ASSERT().
-
-  @param  List  A pointer to the head node of a doubly linked list.
-  @param  Node  A pointer to a node in the doubly linked list.
-
-  @retval TRUE  Node is one of the nodes in the doubly linked list.
-  @retval FALSE Node is not one of the nodes in the doubly linked list.
-
-**/
-BOOLEAN
-EFIAPI
-IsNull (
-  IN      CONST LIST_ENTRY          *List,
-  IN      CONST LIST_ENTRY          *Node
-  );
-
-
-/**
-  Determines if a node the last node in a doubly linked list.
-
-  Returns TRUE if Node is the last node in the doubly linked list specified by
-  List. Otherwise, FALSE is returned. List must have been initialized with
-  InitializeListHead().
-
-  If List is NULL, then ASSERT().
-  If Node is NULL, then ASSERT().
-  If List was not initialized with InitializeListHead(), then ASSERT().
-  If PcdMaximumLinkedListLenth is not zero, and the number of nodes
-  in List, including the List node, is greater than or equal to
-  PcdMaximumLinkedListLength, then ASSERT().
-  If Node is not a node in List, then ASSERT().
-
-  @param  List  A pointer to the head node of a doubly linked list.
-  @param  Node  A pointer to a node in the doubly linked list.
-
-  @retval TRUE  Node is the last node in the linked list.
-  @retval FALSE Node is not the last node in the linked list.
-
-**/
-BOOLEAN
-EFIAPI
-IsNodeAtEnd (
-  IN      CONST LIST_ENTRY          *List,
-  IN      CONST LIST_ENTRY          *Node
-  );
-
-
-/**
-  Swaps the location of two nodes in a doubly linked list, and returns the
-  first node after the swap.
-
-  If FirstEntry is identical to SecondEntry, then SecondEntry is returned.
-  Otherwise, the location of the FirstEntry node is swapped with the location
-  of the SecondEntry node in a doubly linked list. SecondEntry must be in the
-  same double linked list as FirstEntry and that double linked list must have
-  been initialized with InitializeListHead(). SecondEntry is returned after the
-  nodes are swapped.
-
-  If FirstEntry is NULL, then ASSERT().
-  If SecondEntry is NULL, then ASSERT().
-  If SecondEntry and FirstEntry are not in the same linked list, then ASSERT().
-  If PcdMaximumLinkedListLength is not zero, and the number of nodes in the
-  linked list containing the FirstEntry and SecondEntry nodes, including
-  the FirstEntry and SecondEntry nodes, is greater than or equal to
-  PcdMaximumLinkedListLength, then ASSERT().
-
-  @param  FirstEntry  A pointer to a node in a linked list.
-  @param  SecondEntry A pointer to another node in the same linked list.
-
-**/
-LIST_ENTRY *
-EFIAPI
-SwapListEntries (
-  IN      LIST_ENTRY                *FirstEntry,
-  IN      LIST_ENTRY                *SecondEntry
-  );
-
-
-/**
-  Removes a node from a doubly linked list, and returns the node that follows
-  the removed node.
-
-  Removes the node Entry from a doubly linked list. It is up to the caller of
-  this function to release the memory used by this node if that is required. On
-  exit, the node following Entry in the doubly linked list is returned. If
-  Entry is the only node in the linked list, then the head node of the linked
-  list is returned.
-
-  If Entry is NULL, then ASSERT().
-  If Entry is the head node of an empty list, then ASSERT().
-  If PcdMaximumLinkedListLength is not zero, and the number of nodes in the
-  linked list containing Entry, including the Entry node, is greater than
-  or equal to PcdMaximumLinkedListLength, then ASSERT().
-
-  @param  Entry A pointer to a node in a linked list
-
-  @return Entry
-
-**/
-LIST_ENTRY *
-EFIAPI
-RemoveEntryList (
-  IN      CONST LIST_ENTRY          *Entry
-  );
-
-//
-// Math Services
-//
-
-/**
-  Shifts a 64-bit integer left between 0 and 63 bits. The low bits are filled
-  with zeros. The shifted value is returned.
-
-  This function shifts the 64-bit value Operand to the left by Count bits. The
-  low Count bits are set to zero. The shifted value is returned.
-
-  If Count is greater than 63, then ASSERT().
-
-  @param  Operand The 64-bit operand to shift left.
-  @param  Count   The number of bits to shift left.
-
-  @return Operand << Count
-
-**/
-UINT64
-EFIAPI
-LShiftU64 (
-  IN      UINT64                    Operand,
-  IN      UINTN                     Count
-  );
-
-
-/**
-  Shifts a 64-bit integer right between 0 and 63 bits. This high bits are
-  filled with zeros. The shifted value is returned.
-
-  This function shifts the 64-bit value Operand to the right by Count bits. The
-  high Count bits are set to zero. The shifted value is returned.
-
-  If Count is greater than 63, then ASSERT().
-
-  @param  Operand The 64-bit operand to shift right.
-  @param  Count   The number of bits to shift right.
-
-  @return Operand >> Count
-
-**/
-UINT64
-EFIAPI
-RShiftU64 (
-  IN      UINT64                    Operand,
-  IN      UINTN                     Count
-  );
-
-
-/**
-  Shifts a 64-bit integer right between 0 and 63 bits. The high bits are filled
-  with original integer's bit 63. The shifted value is returned.
-
-  This function shifts the 64-bit value Operand to the right by Count bits. The
-  high Count bits are set to bit 63 of Operand.  The shifted value is returned.
-
-  If Count is greater than 63, then ASSERT().
-
-  @param  Operand The 64-bit operand to shift right.
-  @param  Count   The number of bits to shift right.
-
-  @return Operand >> Count
-
-**/
-UINT64
-EFIAPI
-ARShiftU64 (
-  IN      UINT64                    Operand,
-  IN      UINTN                     Count
-  );
-
-
-/**
-  Rotates a 32-bit integer left between 0 and 31 bits, filling the low bits
-  with the high bits that were rotated.
-
-  This function rotates the 32-bit value Operand to the left by Count bits. The
-  low Count bits are fill with the high Count bits of Operand. The rotated
-  value is returned.
-
-  If Count is greater than 31, then ASSERT().
-
-  @param  Operand The 32-bit operand to rotate left.
-  @param  Count   The number of bits to rotate left.
-
-  @return Operand <<< Count
-
-**/
-UINT32
-EFIAPI
-LRotU32 (
-  IN      UINT32                    Operand,
-  IN      UINTN                     Count
-  );
-
-
-/**
-  Rotates a 32-bit integer right between 0 and 31 bits, filling the high bits
-  with the low bits that were rotated.
-
-  This function rotates the 32-bit value Operand to the right by Count bits.
-  The high Count bits are fill with the low Count bits of Operand. The rotated
-  value is returned.
-
-  If Count is greater than 31, then ASSERT().
-
-  @param  Operand The 32-bit operand to rotate right.
-  @param  Count   The number of bits to rotate right.
-
-  @return Operand >>> Count
-
-**/
-UINT32
-EFIAPI
-RRotU32 (
-  IN      UINT32                    Operand,
-  IN      UINTN                     Count
-  );
-
-
-/**
-  Rotates a 64-bit integer left between 0 and 63 bits, filling the low bits
-  with the high bits that were rotated.
-
-  This function rotates the 64-bit value Operand to the left by Count bits. The
-  low Count bits are fill with the high Count bits of Operand. The rotated
-  value is returned.
-
-  If Count is greater than 63, then ASSERT().
-
-  @param  Operand The 64-bit operand to rotate left.
-  @param  Count   The number of bits to rotate left.
-
-  @return Operand <<< Count
-
-**/
-UINT64
-EFIAPI
-LRotU64 (
-  IN      UINT64                    Operand,
-  IN      UINTN                     Count
-  );
-
-
-/**
-  Rotates a 64-bit integer right between 0 and 63 bits, filling the high bits
-  with the high low bits that were rotated.
-
-  This function rotates the 64-bit value Operand to the right by Count bits.
-  The high Count bits are fill with the low Count bits of Operand. The rotated
-  value is returned.
-
-  If Count is greater than 63, then ASSERT().
-
-  @param  Operand The 64-bit operand to rotate right.
-  @param  Count   The number of bits to rotate right.
-
-  @return Operand >>> Count
-
-**/
-UINT64
-EFIAPI
-RRotU64 (
-  IN      UINT64                    Operand,
-  IN      UINTN                     Count
-  );
-
-
-/**
-  Returns the bit position of the lowest bit set in a 32-bit value.
-
-  This function computes the bit position of the lowest bit set in the 32-bit
-  value specified by Operand. If Operand is zero, then -1 is returned.
-  Otherwise, a value between 0 and 31 is returned.
-
-  @param  Operand The 32-bit operand to evaluate.
-
-  @return Position of the lowest bit set in Operand if found.
-  @retval -1 Operand is zero.
-
-**/
-INTN
-EFIAPI
-LowBitSet32 (
-  IN      UINT32                    Operand
-  );
-
-
-/**
-  Returns the bit position of the lowest bit set in a 64-bit value.
-
-  This function computes the bit position of the lowest bit set in the 64-bit
-  value specified by Operand. If Operand is zero, then -1 is returned.
-  Otherwise, a value between 0 and 63 is returned.
-
-  @param  Operand The 64-bit operand to evaluate.
-
-  @return Position of the lowest bit set in Operand if found.
-  @retval -1  Operand is zero.
-
-**/
-INTN
-EFIAPI
-LowBitSet64 (
-  IN      UINT64                    Operand
-  );
-
-
-/**
-  Returns the bit position of the highest bit set in a 32-bit value. Equivalent
-  to log2(x).
-
-  This function computes the bit position of the highest bit set in the 32-bit
-  value specified by Operand. If Operand is zero, then -1 is returned.
-  Otherwise, a value between 0 and 31 is returned.
-
-  @param  Operand The 32-bit operand to evaluate.
-
-  @return Position of the highest bit set in Operand if found.
-  @retval -1  Operand is zero.
-
-**/
-INTN
-EFIAPI
-HighBitSet32 (
-  IN      UINT32                    Operand
-  );
-
-
-/**
-  Returns the bit position of the highest bit set in a 64-bit value. Equivalent
-  to log2(x).
-
-  This function computes the bit position of the highest bit set in the 64-bit
-  value specified by Operand. If Operand is zero, then -1 is returned.
-  Otherwise, a value between 0 and 63 is returned.
-
-  @param  Operand The 64-bit operand to evaluate.
-
-  @return Position of the highest bit set in Operand if found.
-  @retval -1  Operand is zero.
-
-**/
-INTN
-EFIAPI
-HighBitSet64 (
-  IN      UINT64                    Operand
-  );
-
-
-/**
-  Returns the value of the highest bit set in a 32-bit value. Equivalent to
-  1 << HighBitSet32(x).
-
-  This function computes the value of the highest bit set in the 32-bit value
-  specified by Operand. If Operand is zero, then zero is returned.
-
-  @param  Operand The 32-bit operand to evaluate.
-
-  @return 1 << HighBitSet32(Operand)
-  @retval 0 Operand is zero.
-
-**/
-UINT32
-EFIAPI
-GetPowerOfTwo32 (
-  IN      UINT32                    Operand
-  );
-
-
-/**
-  Returns the value of the highest bit set in a 64-bit value. Equivalent to
-  1 << HighBitSet64(x).
-
-  This function computes the value of the highest bit set in the 64-bit value
-  specified by Operand. If Operand is zero, then zero is returned.
-
-  @param  Operand The 64-bit operand to evaluate.
-
-  @return 1 << HighBitSet64(Operand)
-  @retval 0 Operand is zero.
-
-**/
-UINT64
-EFIAPI
-GetPowerOfTwo64 (
-  IN      UINT64                    Operand
-  );
-
-
-/**
-  Switches the endianess of a 16-bit integer.
-
-  This function swaps the bytes in a 16-bit unsigned value to switch the value
-  from little endian to big endian or vice versa. The byte swapped value is
-  returned.
-
-  @param  Value Operand A 16-bit unsigned value.
-
-  @return The byte swaped Operand.
-
-**/
-UINT16
-EFIAPI
-SwapBytes16 (
-  IN      UINT16                    Value
-  );
-
-
-/**
-  Switches the endianess of a 32-bit integer.
-
-  This function swaps the bytes in a 32-bit unsigned value to switch the value
-  from little endian to big endian or vice versa. The byte swapped value is
-  returned.
-
-  @param  Value Operand A 32-bit unsigned value.
-
-  @return The byte swaped Operand.
-
-**/
-UINT32
-EFIAPI
-SwapBytes32 (
-  IN      UINT32                    Value
-  );
-
-
-/**
-  Switches the endianess of a 64-bit integer.
-
-  This function swaps the bytes in a 64-bit unsigned value to switch the value
-  from little endian to big endian or vice versa. The byte swapped value is
-  returned.
-
-  @param  Value Operand A 64-bit unsigned value.
-
-  @return The byte swaped Operand.
-
-**/
-UINT64
-EFIAPI
-SwapBytes64 (
-  IN      UINT64                    Value
-  );
-
-
-/**
-  Multiples a 64-bit unsigned integer by a 32-bit unsigned integer and
-  generates a 64-bit unsigned result.
-
-  This function multiples the 64-bit unsigned value Multiplicand by the 32-bit
-  unsigned value Multiplier and generates a 64-bit unsigned result. This 64-
-  bit unsigned result is returned.
-
-  If the result overflows, then ASSERT().
-
-  @param  Multiplicand  A 64-bit unsigned value.
-  @param  Multiplier    A 32-bit unsigned value.
-
-  @return Multiplicand * Multiplier
-
-**/
-UINT64
-EFIAPI
-MultU64x32 (
-  IN      UINT64                    Multiplicand,
-  IN      UINT32                    Multiplier
-  );
-
-
-/**
-  Multiples a 64-bit unsigned integer by a 64-bit unsigned integer and
-  generates a 64-bit unsigned result.
-
-  This function multiples the 64-bit unsigned value Multiplicand by the 64-bit
-  unsigned value Multiplier and generates a 64-bit unsigned result. This 64-
-  bit unsigned result is returned.
-
-  If the result overflows, then ASSERT().
-
-  @param  Multiplicand  A 64-bit unsigned value.
-  @param  Multiplier    A 64-bit unsigned value.
-
-  @return Multiplicand * Multiplier
-
-**/
-UINT64
-EFIAPI
-MultU64x64 (
-  IN      UINT64                    Multiplicand,
-  IN      UINT64                    Multiplier
-  );
-
-
-/**
-  Multiples a 64-bit signed integer by a 64-bit signed integer and generates a
-  64-bit signed result.
-
-  This function multiples the 64-bit signed value Multiplicand by the 64-bit
-  signed value Multiplier and generates a 64-bit signed result. This 64-bit
-  signed result is returned.
-
-  If the result overflows, then ASSERT().
-
-  @param  Multiplicand  A 64-bit signed value.
-  @param  Multiplier    A 64-bit signed value.
-
-  @return Multiplicand * Multiplier
-
-**/
-INT64
-EFIAPI
-MultS64x64 (
-  IN      INT64                     Multiplicand,
-  IN      INT64                     Multiplier
-  );
-
-
-/**
-  Divides a 64-bit unsigned integer by a 32-bit unsigned integer and generates
-  a 64-bit unsigned result.
-
-  This function divides the 64-bit unsigned value Dividend by the 32-bit
-  unsigned value Divisor and generates a 64-bit unsigned quotient. This
-  function returns the 64-bit unsigned quotient.
-
-  If Divisor is 0, then ASSERT().
-
-  @param  Dividend  A 64-bit unsigned value.
-  @param  Divisor   A 32-bit unsigned value.
-
-  @return Dividend / Divisor
-
-**/
-UINT64
-EFIAPI
-DivU64x32 (
-  IN      UINT64                    Dividend,
-  IN      UINT32                    Divisor
-  );
-
-
-/**
-  Divides a 64-bit unsigned integer by a 32-bit unsigned integer and generates
-  a 32-bit unsigned remainder.
-
-  This function divides the 64-bit unsigned value Dividend by the 32-bit
-  unsigned value Divisor and generates a 32-bit remainder. This function
-  returns the 32-bit unsigned remainder.
-
-  If Divisor is 0, then ASSERT().
-
-  @param  Dividend  A 64-bit unsigned value.
-  @param  Divisor   A 32-bit unsigned value.
-
-  @return Dividend % Divisor
-
-**/
-UINT32
-EFIAPI
-ModU64x32 (
-  IN      UINT64                    Dividend,
-  IN      UINT32                    Divisor
-  );
-
-
-/**
-  Divides a 64-bit unsigned integer by a 32-bit unsigned integer and generates
-  a 64-bit unsigned result and an optional 32-bit unsigned remainder.
-
-  This function divides the 64-bit unsigned value Dividend by the 32-bit
-  unsigned value Divisor and generates a 64-bit unsigned quotient. If Remainder
-  is not NULL, then the 32-bit unsigned remainder is returned in Remainder.
-  This function returns the 64-bit unsigned quotient.
-
-  If Divisor is 0, then ASSERT().
-
-  @param  Dividend  A 64-bit unsigned value.
-  @param  Divisor   A 32-bit unsigned value.
-  @param  Remainder A pointer to a 32-bit unsigned value. This parameter is
-                    optional and may be NULL.
-
-  @return Dividend / Divisor
-
-**/
-UINT64
-EFIAPI
-DivU64x32Remainder (
-  IN      UINT64                    Dividend,
-  IN      UINT32                    Divisor,
-  OUT     UINT32                    *Remainder  OPTIONAL
-  );
-
-
-/**
-  Divides a 64-bit unsigned integer by a 64-bit unsigned integer and generates
-  a 64-bit unsigned result and an optional 64-bit unsigned remainder.
-
-  This function divides the 64-bit unsigned value Dividend by the 64-bit
-  unsigned value Divisor and generates a 64-bit unsigned quotient. If Remainder
-  is not NULL, then the 64-bit unsigned remainder is returned in Remainder.
-  This function returns the 64-bit unsigned quotient.
-
-  If Divisor is 0, then ASSERT().
-
-  @param  Dividend  A 64-bit unsigned value.
-  @param  Divisor   A 64-bit unsigned value.
-  @param  Remainder A pointer to a 64-bit unsigned value. This parameter is
-                    optional and may be NULL.
-
-  @return Dividend / Divisor
-
-**/
-UINT64
-EFIAPI
-DivU64x64Remainder (
-  IN      UINT64                    Dividend,
-  IN      UINT64                    Divisor,
-  OUT     UINT64                    *Remainder  OPTIONAL
-  );
-
-
-/**
-  Divides a 64-bit signed integer by a 64-bit signed integer and generates a
-  64-bit signed result and a optional 64-bit signed remainder.
-
-  This function divides the 64-bit signed value Dividend by the 64-bit signed
-  value Divisor and generates a 64-bit signed quotient. If Remainder is not
-  NULL, then the 64-bit signed remainder is returned in Remainder. This
-  function returns the 64-bit signed quotient.
-
-  If Divisor is 0, then ASSERT().
-
-  @param  Dividend  A 64-bit signed value.
-  @param  Divisor   A 64-bit signed value.
-  @param  Remainder A pointer to a 64-bit signed value. This parameter is
-                    optional and may be NULL.
-
-  @return Dividend / Divisor
-
-**/
-INT64
-EFIAPI
-DivS64x64Remainder (
-  IN      INT64                     Dividend,
-  IN      INT64                     Divisor,
-  OUT     INT64                     *Remainder  OPTIONAL
-  );
-
-
-/**
-  Reads a 16-bit value from memory that may be unaligned.
-
-  This function returns the 16-bit value pointed to by Buffer. The function
-  guarantees that the read operation does not produce an alignment fault.
-
-  If the Buffer is NULL, then ASSERT().
-
-  @param  Uint16  Pointer to a 16-bit value that may be unaligned.
-
-  @return *Uint16
-
-**/
-UINT16
-EFIAPI
-ReadUnaligned16 (
-  IN      CONST UINT16              *Uint16
-  );
-
-
-/**
-  Writes a 16-bit value to memory that may be unaligned.
-
-  This function writes the 16-bit value specified by Value to Buffer. Value is
-  returned. The function guarantees that the write operation does not produce
-  an alignment fault.
-
-  If the Buffer is NULL, then ASSERT().
-
-  @param  Uint16  Pointer to a 16-bit value that may be unaligned.
-  @param  Value   16-bit value to write to Buffer.
-
-  @return Value
-
-**/
-UINT16
-EFIAPI
-WriteUnaligned16 (
-  OUT     UINT16                    *Uint16,
-  IN      UINT16                    Value
-  );
-
-
-/**
-  Reads a 24-bit value from memory that may be unaligned.
-
-  This function returns the 24-bit value pointed to by Buffer. The function
-  guarantees that the read operation does not produce an alignment fault.
-
-  If the Buffer is NULL, then ASSERT().
-
-  @param  Buffer  Pointer to a 24-bit value that may be unaligned.
-
-  @return The value read.
-
-**/
-UINT32
-EFIAPI
-ReadUnaligned24 (
-  IN      CONST UINT32              *Buffer
-  );
-
-
-/**
-  Writes a 24-bit value to memory that may be unaligned.
-
-  This function writes the 24-bit value specified by Value to Buffer. Value is
-  returned. The function guarantees that the write operation does not produce
-  an alignment fault.
-
-  If the Buffer is NULL, then ASSERT().
-
-  @param  Buffer  Pointer to a 24-bit value that may be unaligned.
-  @param  Value   24-bit value to write to Buffer.
-
-  @return The value written.
-
-**/
-UINT32
-EFIAPI
-WriteUnaligned24 (
-  OUT     UINT32                    *Buffer,
-  IN      UINT32                    Value
-  );
-
-
-/**
-  Reads a 32-bit value from memory that may be unaligned.
-
-  This function returns the 32-bit value pointed to by Buffer. The function
-  guarantees that the read operation does not produce an alignment fault.
-
-  If the Buffer is NULL, then ASSERT().
-
-  @param  Uint32  Pointer to a 32-bit value that may be unaligned.
-
-  @return *Uint32
-
-**/
-UINT32
-EFIAPI
-ReadUnaligned32 (
-  IN      CONST UINT32              *Uint32
-  );
-
-
-/**
-  Writes a 32-bit value to memory that may be unaligned.
-
-  This function writes the 32-bit value specified by Value to Buffer. Value is
-  returned. The function guarantees that the write operation does not produce
-  an alignment fault.
-
-  If the Buffer is NULL, then ASSERT().
-
-  @param  Uint32  Pointer to a 32-bit value that may be unaligned.
-  @param  Value   32-bit value to write to Buffer.
-
-  @return Value
-
-**/
-UINT32
-EFIAPI
-WriteUnaligned32 (
-  OUT     UINT32                    *Uint32,
-  IN      UINT32                    Value
-  );
-
-
-/**
-  Reads a 64-bit value from memory that may be unaligned.
-
-  This function returns the 64-bit value pointed to by Buffer. The function
-  guarantees that the read operation does not produce an alignment fault.
-
-  If the Buffer is NULL, then ASSERT().
-
-  @param  Uint64  Pointer to a 64-bit value that may be unaligned.
-
-  @return *Uint64
-
-**/
-UINT64
-EFIAPI
-ReadUnaligned64 (
-  IN      CONST UINT64              *Uint64
-  );
-
-
-/**
-  Writes a 64-bit value to memory that may be unaligned.
-
-  This function writes the 64-bit value specified by Value to Buffer. Value is
-  returned. The function guarantees that the write operation does not produce
-  an alignment fault.
-
-  If the Buffer is NULL, then ASSERT().
-
-  @param  Uint64  Pointer to a 64-bit value that may be unaligned.
-  @param  Value   64-bit value to write to Buffer.
-
-  @return Value
-
-**/
-UINT64
-EFIAPI
-WriteUnaligned64 (
-  OUT     UINT64                    *Uint64,
-  IN      UINT64                    Value
-  );
-
-
-//
-// Bit Field Functions
-//
-
-/**
-  Returns a bit field from an 8-bit value.
-
-  Returns the bitfield specified by the StartBit and the EndBit from Operand.
-
-  If 8-bit operations are not supported, then ASSERT().
-  If StartBit is greater than 7, then ASSERT().
-  If EndBit is greater than 7, then ASSERT().
-  If EndBit is less than StartBit, then ASSERT().
-
-  @param  Operand   Operand on which to perform the bitfield operation.
-  @param  StartBit  The ordinal of the least significant bit in the bit field.
-                    Range 0..7.
-  @param  EndBit    The ordinal of the most significant bit in the bit field.
-                    Range 0..7.
-
-  @return The bit field read.
-
-**/
-UINT8
-EFIAPI
-BitFieldRead8 (
-  IN      UINT8                     Operand,
-  IN      UINTN                     StartBit,
-  IN      UINTN                     EndBit
-  );
-
-
-/**
-  Writes a bit field to an 8-bit value, and returns the result.
-
-  Writes Value to the bit field specified by the StartBit and the EndBit in
-  Operand. All other bits in Operand are preserved. The new 8-bit value is
-  returned.
-
-  If 8-bit operations are not supported, then ASSERT().
-  If StartBit is greater than 7, then ASSERT().
-  If EndBit is greater than 7, then ASSERT().
-  If EndBit is less than StartBit, then ASSERT().
-
-  @param  Operand   Operand on which to perform the bitfield operation.
-  @param  StartBit  The ordinal of the least significant bit in the bit field.
-                    Range 0..7.
-  @param  EndBit    The ordinal of the most significant bit in the bit field.
-                    Range 0..7.
-  @param  Value     New value of the bit field.
-
-  @return The new 8-bit value.
-
-**/
-UINT8
-EFIAPI
-BitFieldWrite8 (
-  IN      UINT8                     Operand,
-  IN      UINTN                     StartBit,
-  IN      UINTN                     EndBit,
-  IN      UINT8                     Value
-  );
-
-
-/**
-  Reads a bit field from an 8-bit value, performs a bitwise OR, and returns the
-  result.
-
-  Performs a bitwise inclusive OR between the bit field specified by StartBit
-  and EndBit in Operand and the value specified by OrData. All other bits in
-  Operand are preserved. The new 8-bit value is returned.
-
-  If 8-bit operations are not supported, then ASSERT().
-  If StartBit is greater than 7, then ASSERT().
-  If EndBit is greater than 7, then ASSERT().
-  If EndBit is less than StartBit, then ASSERT().
-
-  @param  Operand   Operand on which to perform the bitfield operation.
-  @param  StartBit  The ordinal of the least significant bit in the bit field.
-                    Range 0..7.
-  @param  EndBit    The ordinal of the most significant bit in the bit field.
-                    Range 0..7.
-  @param  OrData    The value to OR with the read value from the value
-
-  @return The new 8-bit value.
-
-**/
-UINT8
-EFIAPI
-BitFieldOr8 (
-  IN      UINT8                     Operand,
-  IN      UINTN                     StartBit,
-  IN      UINTN                     EndBit,
-  IN      UINT8                     OrData
-  );
-
-
-/**
-  Reads a bit field from an 8-bit value, performs a bitwise AND, and returns
-  the result.
-
-  Performs a bitwise AND between the bit field specified by StartBit and EndBit
-  in Operand and the value specified by AndData. All other bits in Operand are
-  preserved. The new 8-bit value is returned.
-
-  If 8-bit operations are not supported, then ASSERT().
-  If StartBit is greater than 7, then ASSERT().
-  If EndBit is greater than 7, then ASSERT().
-  If EndBit is less than StartBit, then ASSERT().
-
-  @param  Operand   Operand on which to perform the bitfield operation.
-  @param  StartBit  The ordinal of the least significant bit in the bit field.
-                    Range 0..7.
-  @param  EndBit    The ordinal of the most significant bit in the bit field.
-                    Range 0..7.
-  @param  AndData   The value to AND with the read value from the value.
-
-  @return The new 8-bit value.
-
-**/
-UINT8
-EFIAPI
-BitFieldAnd8 (
-  IN      UINT8                     Operand,
-  IN      UINTN                     StartBit,
-  IN      UINTN                     EndBit,
-  IN      UINT8                     AndData
-  );
-
-
-/**
-  Reads a bit field from an 8-bit value, performs a bitwise AND followed by a
-  bitwise OR, and returns the result.
-
-  Performs a bitwise AND between the bit field specified by StartBit and EndBit
-  in Operand and the value specified by AndData, followed by a bitwise
-  inclusive OR with value specified by OrData. All other bits in Operand are
-  preserved. The new 8-bit value is returned.
-
-  If 8-bit operations are not supported, then ASSERT().
-  If StartBit is greater than 7, then ASSERT().
-  If EndBit is greater than 7, then ASSERT().
-  If EndBit is less than StartBit, then ASSERT().
-
-  @param  Operand   Operand on which to perform the bitfield operation.
-  @param  StartBit  The ordinal of the least significant bit in the bit field.
-                    Range 0..7.
-  @param  EndBit    The ordinal of the most significant bit in the bit field.
-                    Range 0..7.
-  @param  AndData   The value to AND with the read value from the value.
-  @param  OrData    The value to OR with the result of the AND operation.
-
-  @return The new 8-bit value.
-
-**/
-UINT8
-EFIAPI
-BitFieldAndThenOr8 (
-  IN      UINT8                     Operand,
-  IN      UINTN                     StartBit,
-  IN      UINTN                     EndBit,
-  IN      UINT8                     AndData,
-  IN      UINT8                     OrData
-  );
-
-
-/**
-  Returns a bit field from a 16-bit value.
-
-  Returns the bitfield specified by the StartBit and the EndBit from Operand.
-
-  If 16-bit operations are not supported, then ASSERT().
-  If StartBit is greater than 15, then ASSERT().
-  If EndBit is greater than 15, then ASSERT().
-  If EndBit is less than StartBit, then ASSERT().
-
-  @param  Operand   Operand on which to perform the bitfield operation.
-  @param  StartBit  The ordinal of the least significant bit in the bit field.
-                    Range 0..15.
-  @param  EndBit    The ordinal of the most significant bit in the bit field.
-                    Range 0..15.
-
-  @return The bit field read.
-
-**/
-UINT16
-EFIAPI
-BitFieldRead16 (
-  IN      UINT16                    Operand,
-  IN      UINTN                     StartBit,
-  IN      UINTN                     EndBit
-  );
-
-
-/**
-  Writes a bit field to a 16-bit value, and returns the result.
-
-  Writes Value to the bit field specified by the StartBit and the EndBit in
-  Operand. All other bits in Operand are preserved. The new 16-bit value is
-  returned.
-
-  If 16-bit operations are not supported, then ASSERT().
-  If StartBit is greater than 15, then ASSERT().
-  If EndBit is greater than 15, then ASSERT().
-  If EndBit is less than StartBit, then ASSERT().
-
-  @param  Operand   Operand on which to perform the bitfield operation.
-  @param  StartBit  The ordinal of the least significant bit in the bit field.
-                    Range 0..15.
-  @param  EndBit    The ordinal of the most significant bit in the bit field.
-                    Range 0..15.
-  @param  Value     New value of the bit field.
-
-  @return The new 16-bit value.
-
-**/
-UINT16
-EFIAPI
-BitFieldWrite16 (
-  IN      UINT16                    Operand,
-  IN      UINTN                     StartBit,
-  IN      UINTN                     EndBit,
-  IN      UINT16                    Value
-  );
-
-
-/**
-  Reads a bit field from a 16-bit value, performs a bitwise OR, and returns the
-  result.
-
-  Performs a bitwise inclusive OR between the bit field specified by StartBit
-  and EndBit in Operand and the value specified by OrData. All other bits in
-  Operand are preserved. The new 16-bit value is returned.
-
-  If 16-bit operations are not supported, then ASSERT().
-  If StartBit is greater than 15, then ASSERT().
-  If EndBit is greater than 15, then ASSERT().
-  If EndBit is less than StartBit, then ASSERT().
-
-  @param  Operand   Operand on which to perform the bitfield operation.
-  @param  StartBit  The ordinal of the least significant bit in the bit field.
-                    Range 0..15.
-  @param  EndBit    The ordinal of the most significant bit in the bit field.
-                    Range 0..15.
-  @param  OrData    The value to OR with the read value from the value
-
-  @return The new 16-bit value.
-
-**/
-UINT16
-EFIAPI
-BitFieldOr16 (
-  IN      UINT16                    Operand,
-  IN      UINTN                     StartBit,
-  IN      UINTN                     EndBit,
-  IN      UINT16                    OrData
-  );
-
-
-/**
-  Reads a bit field from a 16-bit value, performs a bitwise AND, and returns
-  the result.
-
-  Performs a bitwise AND between the bit field specified by StartBit and EndBit
-  in Operand and the value specified by AndData. All other bits in Operand are
-  preserved. The new 16-bit value is returned.
-
-  If 16-bit operations are not supported, then ASSERT().
-  If StartBit is greater than 15, then ASSERT().
-  If EndBit is greater than 15, then ASSERT().
-  If EndBit is less than StartBit, then ASSERT().
-
-  @param  Operand   Operand on which to perform the bitfield operation.
-  @param  StartBit  The ordinal of the least significant bit in the bit field.
-                    Range 0..15.
-  @param  EndBit    The ordinal of the most significant bit in the bit field.
-                    Range 0..15.
-  @param  AndData   The value to AND with the read value from the value
-
-  @return The new 16-bit value.
-
-**/
-UINT16
-EFIAPI
-BitFieldAnd16 (
-  IN      UINT16                    Operand,
-  IN      UINTN                     StartBit,
-  IN      UINTN                     EndBit,
-  IN      UINT16                    AndData
-  );
-
-
-/**
-  Reads a bit field from a 16-bit value, performs a bitwise AND followed by a
-  bitwise OR, and returns the result.
-
-  Performs a bitwise AND between the bit field specified by StartBit and EndBit
-  in Operand and the value specified by AndData, followed by a bitwise
-  inclusive OR with value specified by OrData. All other bits in Operand are
-  preserved. The new 16-bit value is returned.
-
-  If 16-bit operations are not supported, then ASSERT().
-  If StartBit is greater than 15, then ASSERT().
-  If EndBit is greater than 15, then ASSERT().
-  If EndBit is less than StartBit, then ASSERT().
-
-  @param  Operand   Operand on which to perform the bitfield operation.
-  @param  StartBit  The ordinal of the least significant bit in the bit field.
-                    Range 0..15.
-  @param  EndBit    The ordinal of the most significant bit in the bit field.
-                    Range 0..15.
-  @param  AndData   The value to AND with the read value from the value.
-  @param  OrData    The value to OR with the result of the AND operation.
-
-  @return The new 16-bit value.
-
-**/
-UINT16
-EFIAPI
-BitFieldAndThenOr16 (
-  IN      UINT16                    Operand,
-  IN      UINTN                     StartBit,
-  IN      UINTN                     EndBit,
-  IN      UINT16                    AndData,
-  IN      UINT16                    OrData
-  );
-
-
-/**
-  Returns a bit field from a 32-bit value.
-
-  Returns the bitfield specified by the StartBit and the EndBit from Operand.
-
-  If 32-bit operations are not supported, then ASSERT().
-  If StartBit is greater than 31, then ASSERT().
-  If EndBit is greater than 31, then ASSERT().
-  If EndBit is less than StartBit, then ASSERT().
-
-  @param  Operand   Operand on which to perform the bitfield operation.
-  @param  StartBit  The ordinal of the least significant bit in the bit field.
-                    Range 0..31.
-  @param  EndBit    The ordinal of the most significant bit in the bit field.
-                    Range 0..31.
-
-  @return The bit field read.
-
-**/
-UINT32
-EFIAPI
-BitFieldRead32 (
-  IN      UINT32                    Operand,
-  IN      UINTN                     StartBit,
-  IN      UINTN                     EndBit
-  );
-
-
-/**
-  Writes a bit field to a 32-bit value, and returns the result.
-
-  Writes Value to the bit field specified by the StartBit and the EndBit in
-  Operand. All other bits in Operand are preserved. The new 32-bit value is
-  returned.
-
-  If 32-bit operations are not supported, then ASSERT().
-  If StartBit is greater than 31, then ASSERT().
-  If EndBit is greater than 31, then ASSERT().
-  If EndBit is less than StartBit, then ASSERT().
-
-  @param  Operand   Operand on which to perform the bitfield operation.
-  @param  StartBit  The ordinal of the least significant bit in the bit field.
-                    Range 0..31.
-  @param  EndBit    The ordinal of the most significant bit in the bit field.
-                    Range 0..31.
-  @param  Value     New value of the bit field.
-
-  @return The new 32-bit value.
-
-**/
-UINT32
-EFIAPI
-BitFieldWrite32 (
-  IN      UINT32                    Operand,
-  IN      UINTN                     StartBit,
-  IN      UINTN                     EndBit,
-  IN      UINT32                    Value
-  );
-
-
-/**
-  Reads a bit field from a 32-bit value, performs a bitwise OR, and returns the
-  result.
-
-  Performs a bitwise inclusive OR between the bit field specified by StartBit
-  and EndBit in Operand and the value specified by OrData. All other bits in
-  Operand are preserved. The new 32-bit value is returned.
-
-  If 32-bit operations are not supported, then ASSERT().
-  If StartBit is greater than 31, then ASSERT().
-  If EndBit is greater than 31, then ASSERT().
-  If EndBit is less than StartBit, then ASSERT().
-
-  @param  Operand   Operand on which to perform the bitfield operation.
-  @param  StartBit  The ordinal of the least significant bit in the bit field.
-                    Range 0..31.
-  @param  EndBit    The ordinal of the most significant bit in the bit field.
-                    Range 0..31.
-  @param  OrData    The value to OR with the read value from the value
-
-  @return The new 32-bit value.
-
-**/
-UINT32
-EFIAPI
-BitFieldOr32 (
-  IN      UINT32                    Operand,
-  IN      UINTN                     StartBit,
-  IN      UINTN                     EndBit,
-  IN      UINT32                    OrData
-  );
-
-
-/**
-  Reads a bit field from a 32-bit value, performs a bitwise AND, and returns
-  the result.
-
-  Performs a bitwise AND between the bit field specified by StartBit and EndBit
-  in Operand and the value specified by AndData. All other bits in Operand are
-  preserved. The new 32-bit value is returned.
-
-  If 32-bit operations are not supported, then ASSERT().
-  If StartBit is greater than 31, then ASSERT().
-  If EndBit is greater than 31, then ASSERT().
-  If EndBit is less than StartBit, then ASSERT().
-
-  @param  Operand   Operand on which to perform the bitfield operation.
-  @param  StartBit  The ordinal of the least significant bit in the bit field.
-                    Range 0..31.
-  @param  EndBit    The ordinal of the most significant bit in the bit field.
-                    Range 0..31.
-  @param  AndData   The value to AND with the read value from the value
-
-  @return The new 32-bit value.
-
-**/
-UINT32
-EFIAPI
-BitFieldAnd32 (
-  IN      UINT32                    Operand,
-  IN      UINTN                     StartBit,
-  IN      UINTN                     EndBit,
-  IN      UINT32                    AndData
-  );
-
-
-/**
-  Reads a bit field from a 32-bit value, performs a bitwise AND followed by a
-  bitwise OR, and returns the result.
-
-  Performs a bitwise AND between the bit field specified by StartBit and EndBit
-  in Operand and the value specified by AndData, followed by a bitwise
-  inclusive OR with value specified by OrData. All other bits in Operand are
-  preserved. The new 32-bit value is returned.
-
-  If 32-bit operations are not supported, then ASSERT().
-  If StartBit is greater than 31, then ASSERT().
-  If EndBit is greater than 31, then ASSERT().
-  If EndBit is less than StartBit, then ASSERT().
-
-  @param  Operand   Operand on which to perform the bitfield operation.
-  @param  StartBit  The ordinal of the least significant bit in the bit field.
-                    Range 0..31.
-  @param  EndBit    The ordinal of the most significant bit in the bit field.
-                    Range 0..31.
-  @param  AndData   The value to AND with the read value from the value.
-  @param  OrData    The value to OR with the result of the AND operation.
-
-  @return The new 32-bit value.
-
-**/
-UINT32
-EFIAPI
-BitFieldAndThenOr32 (
-  IN      UINT32                    Operand,
-  IN      UINTN                     StartBit,
-  IN      UINTN                     EndBit,
-  IN      UINT32                    AndData,
-  IN      UINT32                    OrData
-  );
-
-
-/**
-  Returns a bit field from a 64-bit value.
-
-  Returns the bitfield specified by the StartBit and the EndBit from Operand.
-
-  If 64-bit operations are not supported, then ASSERT().
-  If StartBit is greater than 63, then ASSERT().
-  If EndBit is greater than 63, then ASSERT().
-  If EndBit is less than StartBit, then ASSERT().
-
-  @param  Operand   Operand on which to perform the bitfield operation.
-  @param  StartBit  The ordinal of the least significant bit in the bit field.
-                    Range 0..63.
-  @param  EndBit    The ordinal of the most significant bit in the bit field.
-                    Range 0..63.
-
-  @return The bit field read.
-
-**/
-UINT64
-EFIAPI
-BitFieldRead64 (
-  IN      UINT64                    Operand,
-  IN      UINTN                     StartBit,
-  IN      UINTN                     EndBit
-  );
-
-
-/**
-  Writes a bit field to a 64-bit value, and returns the result.
-
-  Writes Value to the bit field specified by the StartBit and the EndBit in
-  Operand. All other bits in Operand are preserved. The new 64-bit value is
-  returned.
-
-  If 64-bit operations are not supported, then ASSERT().
-  If StartBit is greater than 63, then ASSERT().
-  If EndBit is greater than 63, then ASSERT().
-  If EndBit is less than StartBit, then ASSERT().
-
-  @param  Operand   Operand on which to perform the bitfield operation.
-  @param  StartBit  The ordinal of the least significant bit in the bit field.
-                    Range 0..63.
-  @param  EndBit    The ordinal of the most significant bit in the bit field.
-                    Range 0..63.
-  @param  Value     New value of the bit field.
-
-  @return The new 64-bit value.
-
-**/
-UINT64
-EFIAPI
-BitFieldWrite64 (
-  IN      UINT64                    Operand,
-  IN      UINTN                     StartBit,
-  IN      UINTN                     EndBit,
-  IN      UINT64                    Value
-  );
-
-
-/**
-  Reads a bit field from a 64-bit value, performs a bitwise OR, and returns the
-  result.
-
-  Performs a bitwise inclusive OR between the bit field specified by StartBit
-  and EndBit in Operand and the value specified by OrData. All other bits in
-  Operand are preserved. The new 64-bit value is returned.
-
-  If 64-bit operations are not supported, then ASSERT().
-  If StartBit is greater than 63, then ASSERT().
-  If EndBit is greater than 63, then ASSERT().
-  If EndBit is less than StartBit, then ASSERT().
-
-  @param  Operand   Operand on which to perform the bitfield operation.
-  @param  StartBit  The ordinal of the least significant bit in the bit field.
-                    Range 0..63.
-  @param  EndBit    The ordinal of the most significant bit in the bit field.
-                    Range 0..63.
-  @param  OrData    The value to OR with the read value from the value
-
-  @return The new 64-bit value.
-
-**/
-UINT64
-EFIAPI
-BitFieldOr64 (
-  IN      UINT64                    Operand,
-  IN      UINTN                     StartBit,
-  IN      UINTN                     EndBit,
-  IN      UINT64                    OrData
-  );
-
-
-/**
-  Reads a bit field from a 64-bit value, performs a bitwise AND, and returns
-  the result.
-
-  Performs a bitwise AND between the bit field specified by StartBit and EndBit
-  in Operand and the value specified by AndData. All other bits in Operand are
-  preserved. The new 64-bit value is returned.
-
-  If 64-bit operations are not supported, then ASSERT().
-  If StartBit is greater than 63, then ASSERT().
-  If EndBit is greater than 63, then ASSERT().
-  If EndBit is less than StartBit, then ASSERT().
-
-  @param  Operand   Operand on which to perform the bitfield operation.
-  @param  StartBit  The ordinal of the least significant bit in the bit field.
-                    Range 0..63.
-  @param  EndBit    The ordinal of the most significant bit in the bit field.
-                    Range 0..63.
-  @param  AndData   The value to AND with the read value from the value
-
-  @return The new 64-bit value.
-
-**/
-UINT64
-EFIAPI
-BitFieldAnd64 (
-  IN      UINT64                    Operand,
-  IN      UINTN                     StartBit,
-  IN      UINTN                     EndBit,
-  IN      UINT64                    AndData
-  );
-
-
-/**
-  Reads a bit field from a 64-bit value, performs a bitwise AND followed by a
-  bitwise OR, and returns the result.
-
-  Performs a bitwise AND between the bit field specified by StartBit and EndBit
-  in Operand and the value specified by AndData, followed by a bitwise
-  inclusive OR with value specified by OrData. All other bits in Operand are
-  preserved. The new 64-bit value is returned.
-
-  If 64-bit operations are not supported, then ASSERT().
-  If StartBit is greater than 63, then ASSERT().
-  If EndBit is greater than 63, then ASSERT().
-  If EndBit is less than StartBit, then ASSERT().
-
-  @param  Operand   Operand on which to perform the bitfield operation.
-  @param  StartBit  The ordinal of the least significant bit in the bit field.
-                    Range 0..63.
-  @param  EndBit    The ordinal of the most significant bit in the bit field.
-                    Range 0..63.
-  @param  AndData   The value to AND with the read value from the value.
-  @param  OrData    The value to OR with the result of the AND operation.
-
-  @return The new 64-bit value.
-
-**/
-UINT64
-EFIAPI
-BitFieldAndThenOr64 (
-  IN      UINT64                    Operand,
-  IN      UINTN                     StartBit,
-  IN      UINTN                     EndBit,
-  IN      UINT64                    AndData,
-  IN      UINT64                    OrData
-  );
-
-
-//
-// Base Library Synchronization Functions
-//
-
-/**
-  Retrieves the architecture specific spin lock alignment requirements for
-  optimal spin lock performance.
-
-  This function retrieves the spin lock alignment requirements for optimal
-  performance on a given CPU architecture. The spin lock alignment must be a
-  power of two and is returned by this function. If there are no alignment
-  requirements, then 1 must be returned. The spin lock synchronization
-  functions must function correctly if the spin lock size and alignment values
-  returned by this function are not used at all. These values are hints to the
-  consumers of the spin lock synchronization functions to obtain optimal spin
-  lock performance.
-
-  @return The architecture specific spin lock alignment.
-
-**/
-UINTN
-EFIAPI
-GetSpinLockProperties (
-  VOID
-  );
-
-
-/**
-  Initializes a spin lock to the released state and returns the spin lock.
-
-  This function initializes the spin lock specified by SpinLock to the released
-  state, and returns SpinLock. Optimal performance can be achieved by calling
-  GetSpinLockProperties() to determine the size and alignment requirements for
-  SpinLock.
-
-  If SpinLock is NULL, then ASSERT().
-
-  @param  SpinLock  A pointer to the spin lock to initialize to the released
-                    state.
-
-  @return SpinLock
-
-**/
-SPIN_LOCK *
-EFIAPI
-InitializeSpinLock (
-  IN      SPIN_LOCK                 *SpinLock
-  );
-
-
-/**
-  Waits until a spin lock can be placed in the acquired state.
-
-  This function checks the state of the spin lock specified by SpinLock. If
-  SpinLock is in the released state, then this function places SpinLock in the
-  acquired state and returns SpinLock. Otherwise, this function waits
-  indefinitely for the spin lock to be released, and then places it in the
-  acquired state and returns SpinLock. All state transitions of SpinLock must
-  be performed using MP safe mechanisms.
-
-  If SpinLock is NULL, then ASSERT().
-  If SpinLock was not initialized with InitializeSpinLock(), then ASSERT().
-  If PcdSpinLockTimeout is not zero, and SpinLock is can not be acquired in
-  PcdSpinLockTimeout microseconds, then ASSERT().
-
-  @param  SpinLock  A pointer to the spin lock to place in the acquired state.
-
-  @return SpinLock
-
-**/
-SPIN_LOCK *
-EFIAPI
-AcquireSpinLock (
-  IN      SPIN_LOCK                 *SpinLock
-  );
-
-
-/**
-  Attempts to place a spin lock in the acquired state.
-
-  This function checks the state of the spin lock specified by SpinLock. If
-  SpinLock is in the released state, then this function places SpinLock in the
-  acquired state and returns TRUE. Otherwise, FALSE is returned. All state
-  transitions of SpinLock must be performed using MP safe mechanisms.
-
-  If SpinLock is NULL, then ASSERT().
-  If SpinLock was not initialized with InitializeSpinLock(), then ASSERT().
-
-  @param  SpinLock  A pointer to the spin lock to place in the acquired state.
-
-  @retval TRUE  SpinLock was placed in the acquired state.
-  @retval FALSE SpinLock could not be acquired.
-
-**/
-BOOLEAN
-EFIAPI
-AcquireSpinLockOrFail (
-  IN      SPIN_LOCK                 *SpinLock
-  );
-
-
-/**
-  Releases a spin lock.
-
-  This function places the spin lock specified by SpinLock in the release state
-  and returns SpinLock.
-
-  If SpinLock is NULL, then ASSERT().
-  If SpinLock was not initialized with InitializeSpinLock(), then ASSERT().
-
-  @param  SpinLock  A pointer to the spin lock to release.
-
-  @return SpinLock
-
-**/
-SPIN_LOCK *
-EFIAPI
-ReleaseSpinLock (
-  IN      SPIN_LOCK                 *SpinLock
-  );
-
-
-/**
-  Performs an atomic increment of an 32-bit unsigned integer.
-
-  Performs an atomic increment of the 32-bit unsigned integer specified by
-  Value and returns the incremented value. The increment operation must be
-  performed using MP safe mechanisms. The state of the return value is not
-  guaranteed to be MP safe.
-
-  If Value is NULL, then ASSERT().
-
-  @param  Value A pointer to the 32-bit value to increment.
-
-  @return The incremented value.
-
-**/
-UINT32
-EFIAPI
-InterlockedIncrement (
-  IN      UINT32                    *Value
-  );
-
-
-/**
-  Performs an atomic decrement of an 32-bit unsigned integer.
-
-  Performs an atomic decrement of the 32-bit unsigned integer specified by
-  Value and returns the decremented value. The decrement operation must be
-  performed using MP safe mechanisms. The state of the return value is not
-  guaranteed to be MP safe.
-
-  If Value is NULL, then ASSERT().
-
-  @param  Value A pointer to the 32-bit value to decrement.
-
-  @return The decremented value.
-
-**/
-UINT32
-EFIAPI
-InterlockedDecrement (
-  IN      UINT32                    *Value
-  );
-
-
-/**
-  Performs an atomic compare exchange operation on a 32-bit unsigned integer.
-
-  Performs an atomic compare exchange operation on the 32-bit unsigned integer
-  specified by Value.  If Value is equal to CompareValue, then Value is set to
-  ExchangeValue and CompareValue is returned.  If Value is not equal to CompareValue,
-  then Value is returned.  The compare exchange operation must be performed using
-  MP safe mechanisms.
-
-  If Value is NULL, then ASSERT().
-
-  @param  Value         A pointer to the 32-bit value for the compare exchange
-                        operation.
-  @param  CompareValue  32-bit value used in compare operation.
-  @param  ExchangeValue 32-bit value used in exchange operation.
-
-  @return The original *Value before exchange.
-
-**/
-UINT32
-EFIAPI
-InterlockedCompareExchange32 (
-  IN OUT  UINT32                    *Value,
-  IN      UINT32                    CompareValue,
-  IN      UINT32                    ExchangeValue
-  );
-
-
-/**
-  Performs an atomic compare exchange operation on a 64-bit unsigned integer.
-
-  Performs an atomic compare exchange operation on the 64-bit unsigned integer specified
-  by Value.  If Value is equal to CompareValue, then Value is set to ExchangeValue and
-  CompareValue is returned.  If Value is not equal to CompareValue, then Value is returned.
-  The compare exchange operation must be performed using MP safe mechanisms.
-
-  If Value is NULL, then ASSERT().
-
-  @param  Value         A pointer to the 64-bit value for the compare exchange
-                        operation.
-  @param  CompareValue  64-bit value used in compare operation.
-  @param  ExchangeValue 64-bit value used in exchange operation.
-
-  @return The original *Value before exchange.
-
-**/
-UINT64
-EFIAPI
-InterlockedCompareExchange64 (
-  IN OUT  UINT64                    *Value,
-  IN      UINT64                    CompareValue,
-  IN      UINT64                    ExchangeValue
-  );
-
-
-/**
-  Performs an atomic compare exchange operation on a pointer value.
-
-  Performs an atomic compare exchange operation on the pointer value specified
-  by Value. If Value is equal to CompareValue, then Value is set to
-  ExchangeValue and CompareValue is returned. If Value is not equal to
-  CompareValue, then Value is returned. The compare exchange operation must be
-  performed using MP safe mechanisms.
-
-  If Value is NULL, then ASSERT().
-
-  @param  Value         A pointer to the pointer value for the compare exchange
-                        operation.
-  @param  CompareValue  Pointer value used in compare operation.
-  @param  ExchangeValue Pointer value used in exchange operation.
-
-**/
-VOID *
-EFIAPI
-InterlockedCompareExchangePointer (
-  IN OUT  VOID                      **Value,
-  IN      VOID                      *CompareValue,
-  IN      VOID                      *ExchangeValue
-  );
-
-
-//
-// Base Library Checksum Functions
-//
-
-/**
-  Calculate&n