-/** @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
+Private structures definitions in HiiDatabase.\r
+\r
+Copyright (c) 2007 - 2008, Intel Corporation\r
+All rights reserved. This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution. The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#ifndef __HII_DATABASE_PRIVATE_H__\r
+#define __HII_DATABASE_PRIVATE_H__\r
+\r
+#include <Uefi.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
+#include <Guid/GlobalVariable.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
+#include <Library/IfrSupportLib.h>\r
+#include <Library/UefiLib.h>\r
+#include <Library/PcdLib.h>\r
+#include <Library/UefiRuntimeServicesTableLib.h>\r
+\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 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 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 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 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 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 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 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 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 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 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 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 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 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 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
+ EFI_HII_IMAGE_PROTOCOL HiiImage;\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
+ 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
+ This function invokes the matching registered function.\r
+ \r
+ @param Private HII Database driver private structure.\r
+ @param NotifyType The type of change concerning the database.\r
+ @param PackageInstance Points to the package referred to by the notification.\r
+ @param PackageType Package type\r
+ @param Handle The handle of the package list which contains the specified package.\r
+ \r
+ @retval EFI_SUCCESS Already checked all registered function and invoked \r
+ if matched.\r
+ @retval EFI_INVALID_PARAMETER Any input parameter is not valid.\r
+ \r
+**/\r
+EFI_STATUS\r
+InvokeRegisteredFunction (\r
+ IN HII_DATABASE_PRIVATE_DATA *Private, \r
+ IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType,\r
+ IN VOID *PackageInstance,\r
+ IN UINT8 PackageType,\r
+ IN EFI_HII_HANDLE Handle\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
+ 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
+ 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
+// 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 Together with BltX, Specifies the offset from the left and top edge\r
+ of the image of the first character cell in the\r
+ image.\r
+ @param BltY Together with 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 or Blt.\r
+ @retval EFI_INVALID_PARAMETER Flags were invalid combination..\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
+ 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 Together with BltX, Specifies the offset from the left and top edge\r
+ of the image of the first character cell in the\r
+ image.\r
+ @param BltY Together with 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 Blt or PackageList was NULL.\r
+ @retval EFI_INVALID_PARAMETER Flags were invalid combination.\r
+ @retval EFI_NOT_FOUND The specified PackageList is not in the Database or the stringid is not \r
+ in the specified PackageList. \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
+ 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
+ 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. If NULL, then the information about the system default \r
+ font will be returned.\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_INVALID_PARAMETER StringInfoIn->FontInfoMask is an invalid combination.\r
+ @retval EFI_OUT_OF_RESOURCES There were insufficient resources to complete the\r
+ request.\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, OPTIONAL\r
+ OUT EFI_FONT_DISPLAY_INFO **StringInfoOut,\r
+ IN CONST EFI_STRING String OPTIONAL\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
+ 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
+\r
+ @retval EFI_SUCCESS The new image was returned successfully.\r
+ @retval EFI_NOT_FOUND The image specified by ImageId is not available.\r
+ The specified PackageList is not in the database.\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
+ @retval EFI_OUT_OF_RESOURCES The bitmap could not be retrieved because there was not\r
+ enough memory.\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
+ );\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. The specified PackageList is not in the 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
+ 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 BltX Specifies the offset from the left and top edge\r
+ of the output image of the first pixel in the\r
+ image.\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
+ 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 BltX Specifies the offset from the left and top edge\r
+ of the output image of the first pixel in the\r
+ image.\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 Blt was NULL.\r
+ @retval EFI_NOT_FOUND The image specified by ImageId is not in the database. \r
+ The specified PackageList is not in the 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
+ 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
+ The specified PackageList is not in the database.\r
+ @retval EFI_INVALID_LANGUAGE - The string specified by StringId is available but\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
+ 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
+ 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
+ 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 SecondaryLanguagesSize 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_INVALID_LANGUAGE The language specified by FirstLanguage is not\r
+ present in the specified package list.\r
+ @retval EFI_NOT_FOUND The specified PackageList is not in the Database. \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 *SecondaryLanguages,\r
+ IN OUT UINTN *SecondaryLanguagesSize\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
+ 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 Handle is not in database.\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
+ 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 PackageList was NULL.\r
+ @retval EFI_NOT_FOUND The specified Handle is not in 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
+ 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
+ HandleBufferLength is updated with the actual length.\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
+ @retval EFI_INVALID_PARAMETER PackageType is not a EFI_HII_PACKAGE_TYPE_GUID but\r
+ PackageGuid is not NULL, PackageType is a EFI_HII_\r
+ PACKAGE_TYPE_GUID but PackageGuid is NULL.\r
+ \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
+ 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
+ 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
+ Removes the specified HII database package-related notification.\r
+\r
+ @param This A pointer to the EFI_HII_DATABASE_PROTOCOL\r
+ instance.\r
+ @param NotificationHandle The handle of the notification function being\r
+ unregistered.\r
+\r
+ @retval EFI_SUCCESS Notification is unregistered successfully.\r
+ @retval EFI_NOT_FOUND The incoming notification handle does not exist \r
+ in current hii database.\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
+ 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
+ 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
+ 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
+ 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
+// 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
+ 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
+ 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
+HiiConfigRoutingRouteConfig (\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
+ 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
+ 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
+ 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
+// Global variables\r
+//\r
+extern EFI_EVENT gHiiKeyboardLayoutChanged;\r
+\r
+#include "R8Lib.h"\r
+\r
+#endif\r