mirror of https://github.com/acidanthera/audk.git
947 lines
38 KiB
C
947 lines
38 KiB
C
/** @file
|
|
|
|
This file contains global defines and prototype definitions
|
|
for the Framework HII to Uefi HII Thunk Module.
|
|
|
|
Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
|
|
This program and the accompanying materials
|
|
are licensed and made available under the terms and conditions of the BSD License
|
|
which accompanies this distribution. The full text of the license may be found at
|
|
http://opensource.org/licenses/bsd-license.php
|
|
|
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|
|
|
**/
|
|
|
|
#ifndef _HIIDATABASE_H_
|
|
#define _HIIDATABASE_H_
|
|
|
|
|
|
#include <FrameworkDxe.h>
|
|
|
|
#include <Guid/GlobalVariable.h>
|
|
#include <Protocol/FrameworkFormCallback.h>
|
|
#include <Protocol/FrameworkHii.h>
|
|
#include <Protocol/FrameworkFormBrowser.h>
|
|
|
|
//
|
|
// UEFI HII Protocols
|
|
//
|
|
#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/UgaDraw.h>
|
|
#include <Guid/HiiFormMapMethodGuid.h>
|
|
|
|
#include <Library/BaseLib.h>
|
|
#include <Library/DebugLib.h>
|
|
#include <Library/UefiDriverEntryPoint.h>
|
|
#include <Library/MemoryAllocationLib.h>
|
|
#include <Library/BaseMemoryLib.h>
|
|
#include <Library/UefiBootServicesTableLib.h>
|
|
#include <Library/UefiRuntimeServicesTableLib.h>
|
|
#include <Library/HiiLib.h>
|
|
#include <Library/UefiLib.h>
|
|
#include <Library/PcdLib.h>
|
|
#include <Library/LanguageLib.h>
|
|
#include <Library/PrintLib.h>
|
|
|
|
#include <Guid/MdeModuleHii.h>
|
|
|
|
#include "UefiIfrParser.h"
|
|
|
|
|
|
//
|
|
// VARSTORE ID of 0 for Buffer Storage Type Storage is defined as invalid in UEFI 2.1 HII. VARSTORE ID
|
|
// 0 is the default VarStore ID for storage without explicit declaration in Framework HII 0.92. EDK II UEFI VFR compiler
|
|
// in compatible mode will assign 0x0001 as UEFI VARSTORE ID to this default storage id in Framework VFR without
|
|
// VARSTORE declaration.
|
|
//
|
|
// In addition, the Name of Default VarStore is assumed to be L"Setup" for those storage without explicit VARSTORE declaration in the formset
|
|
// by Framework HII. EDK II UEFI VFR compiler in compatible mode hard-coded L"Setup" as VARSTORE name.
|
|
//
|
|
#define FRAMEWORK_RESERVED_VARSTORE_ID 0x0001
|
|
#define FRAMEWORK_RESERVED_VARSTORE_NAME L"Setup"
|
|
|
|
///
|
|
/// The size of a 3 character ISO639 language code.
|
|
///
|
|
#define ISO_639_2_ENTRY_SIZE 3
|
|
|
|
#pragma pack (1)
|
|
typedef struct {
|
|
EFI_HII_PACK_HEADER FrameworkPackageHeader;
|
|
EFI_HII_PACKAGE_HEADER PackageHeader;
|
|
} TIANO_AUTOGEN_PACKAGES_HEADER;
|
|
#pragma pack ()
|
|
|
|
#define HII_THUNK_PRIVATE_DATA_FROM_THIS(Record) CR(Record, HII_THUNK_PRIVATE_DATA, Hii, HII_THUNK_PRIVATE_DATA_SIGNATURE)
|
|
#define HII_THUNK_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('H', 'i', 'I', 'T')
|
|
typedef struct {
|
|
UINTN Signature;
|
|
EFI_HANDLE Handle;
|
|
EFI_HII_PROTOCOL Hii;
|
|
|
|
//
|
|
// The head of link list for all HII_THUNK_CONTEXT.
|
|
//
|
|
LIST_ENTRY ThunkContextListHead;
|
|
|
|
EFI_HANDLE RemovePackNotifyHandle;
|
|
EFI_HANDLE AddPackNotifyHandle;
|
|
} HII_THUNK_PRIVATE_DATA;
|
|
|
|
|
|
|
|
|
|
|
|
#define QUESTION_ID_MAP_ENTRY_FROM_LINK(Record) CR(Record, QUESTION_ID_MAP_ENTRY, Link, QUESTION_ID_MAP_ENTRY_SIGNATURE)
|
|
#define QUESTION_ID_MAP_ENTRY_SIGNATURE SIGNATURE_32 ('Q', 'I', 'M', 'E')
|
|
typedef struct {
|
|
UINT32 Signature;
|
|
LIST_ENTRY Link;
|
|
UINT16 FwQId;
|
|
EFI_QUESTION_ID UefiQid;
|
|
} QUESTION_ID_MAP_ENTRY;
|
|
|
|
|
|
|
|
#define QUESTION_ID_MAP_FROM_LINK(Record) CR(Record, QUESTION_ID_MAP, Link, QUESTION_ID_MAP_SIGNATURE)
|
|
#define QUESTION_ID_MAP_SIGNATURE SIGNATURE_32 ('Q', 'I', 'M', 'P')
|
|
typedef struct {
|
|
UINT32 Signature;
|
|
LIST_ENTRY Link;
|
|
UINT16 VarStoreId;
|
|
UINTN VarSize;
|
|
LIST_ENTRY MapEntryListHead;
|
|
} QUESTION_ID_MAP;
|
|
|
|
|
|
|
|
#define HII_THUNK_CONTEXT_FROM_LINK(Record) CR(Record, HII_THUNK_CONTEXT, Link, HII_THUNK_CONTEXT_SIGNATURE)
|
|
#define HII_THUNK_CONTEXT_SIGNATURE SIGNATURE_32 ('H', 'T', 'H', 'M')
|
|
typedef struct {
|
|
LIST_ENTRY Link;
|
|
UINT32 Signature;
|
|
FRAMEWORK_EFI_HII_HANDLE FwHiiHandle;
|
|
EFI_HII_HANDLE UefiHiiHandle;
|
|
EFI_HANDLE UefiHiiDriverHandle;
|
|
|
|
UINTN IfrPackageCount;
|
|
UINTN StringPackageCount;
|
|
|
|
BOOLEAN ByFrameworkHiiNewPack;
|
|
|
|
//
|
|
// HII Thunk will use TagGuid to associate the String Package and Form Package togehter.
|
|
// See description for TagGuid. This field is to record if either one of the following condition
|
|
// is TRUE:
|
|
// 1) if ((SharingStringPack == TRUE) && (StringPackageCount != 0 && IfrPackageCount == 0)), then this Package List only
|
|
/// has String Packages and provides Strings to other IFR package.
|
|
// 2) if ((SharingStringPack == TRUE) && (StringPackageCount == 0 && IfrPackageCount != 1)), then this Form Package
|
|
// copied String Packages from other Package List.
|
|
// 3) if ((SharingStringPack == FALSE)), this Package does not provide String Package or copy String Packages from other
|
|
// Package List.
|
|
//
|
|
//
|
|
// When a Hii->NewString() is called for this FwHiiHandle and SharingStringPack is TRUE, then all Package List that sharing
|
|
// the same TagGuid will update or create String in there respective String Packages. If SharingStringPack is FALSE, then
|
|
// only the String from String Packages in this Package List will be updated or created.
|
|
//
|
|
BOOLEAN SharingStringPack;
|
|
|
|
//
|
|
// The HII 0.92 version of HII data implementation in EDK 1.03 and 1.04 make an the following assumption
|
|
// in both HII Database implementation and all modules that registering packages:
|
|
// If a Package List has only IFR package and no String Package, the IFR package will reference
|
|
// String in another Package List registered with the HII database with the same EFI_HII_PACKAGES.GuidId.
|
|
// TagGuid is the used to record this GuidId.
|
|
EFI_GUID TagGuid;
|
|
|
|
UINT8 *NvMapOverride;
|
|
|
|
FORM_BROWSER_FORMSET *FormSet;
|
|
|
|
} HII_THUNK_CONTEXT;
|
|
|
|
|
|
|
|
#define BUFFER_STORAGE_ENTRY_SIGNATURE SIGNATURE_32 ('H', 'T', 's', 'k')
|
|
#define BUFFER_STORAGE_ENTRY_FROM_LINK(Record) CR(Record, BUFFER_STORAGE_ENTRY, Link, BUFFER_STORAGE_ENTRY_SIGNATURE)
|
|
typedef struct {
|
|
LIST_ENTRY Link;
|
|
UINT32 Signature;
|
|
EFI_GUID Guid;
|
|
CHAR16 *Name;
|
|
UINTN Size;
|
|
UINT16 VarStoreId;
|
|
} BUFFER_STORAGE_ENTRY;
|
|
|
|
#pragma pack(1)
|
|
///
|
|
/// HII specific Vendor Device Path Node definition.
|
|
///
|
|
typedef struct {
|
|
VENDOR_DEVICE_PATH VendorDevicePath;
|
|
UINT32 Reserved;
|
|
UINT64 UniqueId;
|
|
} HII_VENDOR_DEVICE_PATH_NODE;
|
|
|
|
///
|
|
/// HII specific Vendor Device Path definition.
|
|
///
|
|
typedef struct {
|
|
HII_VENDOR_DEVICE_PATH_NODE Node;
|
|
EFI_DEVICE_PATH_PROTOCOL End;
|
|
} HII_VENDOR_DEVICE_PATH;
|
|
#pragma pack()
|
|
|
|
#define CONFIG_ACCESS_PRIVATE_SIGNATURE SIGNATURE_32 ('H', 'T', 'c', 'a')
|
|
#define CONFIG_ACCESS_PRIVATE_FROM_PROTOCOL(Record) CR(Record, CONFIG_ACCESS_PRIVATE, ConfigAccessProtocol, CONFIG_ACCESS_PRIVATE_SIGNATURE)
|
|
typedef struct {
|
|
UINT32 Signature;
|
|
EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccessProtocol;
|
|
//
|
|
// Framework's callback
|
|
//
|
|
EFI_FORM_CALLBACK_PROTOCOL *FormCallbackProtocol;
|
|
|
|
HII_THUNK_CONTEXT *ThunkContext;
|
|
} CONFIG_ACCESS_PRIVATE;
|
|
|
|
|
|
|
|
#define EFI_FORMBROWSER_THUNK_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('F', 'B', 'T', 'd')
|
|
#define EFI_FORMBROWSER_THUNK_PRIVATE_DATA_FROM_THIS(Record) CR(Record, EFI_FORMBROWSER_THUNK_PRIVATE_DATA, FormBrowser, EFI_FORMBROWSER_THUNK_PRIVATE_DATA_SIGNATURE)
|
|
typedef struct {
|
|
UINTN Signature;
|
|
EFI_HANDLE Handle;
|
|
HII_THUNK_PRIVATE_DATA *ThunkPrivate;
|
|
EFI_FORM_BROWSER_PROTOCOL FormBrowser;
|
|
} EFI_FORMBROWSER_THUNK_PRIVATE_DATA;
|
|
|
|
|
|
//
|
|
// Extern Variables
|
|
//
|
|
extern CONST EFI_HII_DATABASE_PROTOCOL *mHiiDatabase;
|
|
extern CONST EFI_HII_IMAGE_PROTOCOL *mHiiImageProtocol;
|
|
extern CONST EFI_HII_STRING_PROTOCOL *mHiiStringProtocol;
|
|
extern CONST EFI_HII_FONT_PROTOCOL *mHiiFontProtocol;
|
|
extern CONST EFI_HII_CONFIG_ROUTING_PROTOCOL *mHiiConfigRoutingProtocol;
|
|
extern CONST EFI_FORM_BROWSER2_PROTOCOL *mFormBrowser2Protocol;
|
|
|
|
extern HII_THUNK_PRIVATE_DATA *mHiiThunkPrivateData;
|
|
|
|
extern BOOLEAN mInFrameworkUpdatePakcage;
|
|
|
|
|
|
/**
|
|
|
|
Registers the various packages that are passed in a Package List.
|
|
|
|
@param This Pointer of Frameowk HII protocol instance.
|
|
@param Packages Pointer of HII packages.
|
|
@param Handle Handle value to be returned.
|
|
|
|
@retval EFI_SUCCESS Pacakges has added to HII database successfully.
|
|
@retval EFI_INVALID_PARAMETER If Handle or Packages is NULL.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
HiiNewPack (
|
|
IN EFI_HII_PROTOCOL *This,
|
|
IN EFI_HII_PACKAGES *Packages,
|
|
OUT FRAMEWORK_EFI_HII_HANDLE *Handle
|
|
);
|
|
|
|
/**
|
|
|
|
Remove a package from the HII database.
|
|
|
|
@param This Pointer of Frameowk HII protocol instance.
|
|
@param Handle Handle value to be removed.
|
|
|
|
@retval EFI_SUCCESS Pacakges has added to HII database successfully.
|
|
@retval EFI_INVALID_PARAMETER If Handle or Packages is NULL.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
HiiRemovePack (
|
|
IN EFI_HII_PROTOCOL *This,
|
|
IN FRAMEWORK_EFI_HII_HANDLE Handle
|
|
);
|
|
|
|
/**
|
|
Determines the handles that are currently active in the database.
|
|
|
|
This function determines the handles that are currently active in the database.
|
|
For example, a program wishing to create a Setup-like configuration utility would use this call
|
|
to determine the handles that are available. It would then use calls defined in the forms section
|
|
below to extract forms and then interpret them.
|
|
|
|
@param This A pointer to the EFI_HII_PROTOCOL instance.
|
|
@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 Pointer to an array of EFI_HII_HANDLE instances returned.
|
|
Type EFI_HII_HANDLE is defined in EFI_HII_PROTOCOL.NewPack() in the Packages section.
|
|
|
|
@retval EFI_SUCCESS Handle was updated successfully.
|
|
|
|
@retval EFI_BUFFER_TOO_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.
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
HiiFindHandles (
|
|
IN EFI_HII_PROTOCOL *This,
|
|
IN OUT UINT16 *HandleBufferLength,
|
|
OUT FRAMEWORK_EFI_HII_HANDLE *Handle
|
|
);
|
|
|
|
/**
|
|
|
|
This thunk module only handles UEFI HII packages. The caller of this function
|
|
won't be able to parse the content. Therefore, it is not supported.
|
|
|
|
This function will ASSERT and return EFI_UNSUPPORTED.
|
|
|
|
@param This N.A.
|
|
@param Handle N.A.
|
|
@param BufferSize N.A.
|
|
@param Buffer N.A.
|
|
|
|
@retval EFI_UNSUPPORTED
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
HiiExportDatabase (
|
|
IN EFI_HII_PROTOCOL *This,
|
|
IN FRAMEWORK_EFI_HII_HANDLE Handle,
|
|
IN OUT UINTN *BufferSize,
|
|
OUT VOID *Buffer
|
|
);
|
|
|
|
/**
|
|
Translates a Unicode character into the corresponding font glyph.
|
|
|
|
Notes:
|
|
This function is only called by Graphics Console module and GraphicsLib.
|
|
Wrap the Framework HII GetGlyph function to UEFI Font Protocol.
|
|
|
|
EDK II provides a UEFI Graphics Console module. ECP provides a GraphicsLib
|
|
complying to UEFI HII.
|
|
|
|
@param This A pointer to the EFI_HII_PROTOCOL instance.
|
|
@param Source A pointer to a Unicode string.
|
|
@param Index On input, the offset into the string from which to fetch the character. On successful completion, the
|
|
index is updated to the first character past the character(s) making up the just extracted glyph.
|
|
@param GlyphBuffer Pointer to an array where the glyphs corresponding to the characters in the source may be stored.
|
|
GlyphBuffer is assumed to be wide enough to accept a wide glyph character.
|
|
@param BitWidth If EFI_SUCCESS was returned, the UINT16 pointed to by this value is filled with the length of the glyph in pixels.
|
|
It is unchanged if the call was unsuccessful.
|
|
@param InternalStatus To save the time required to read the string from the beginning on each glyph extraction
|
|
(for example, to ensure that the narrow versus wide glyph mode is correct), this value is
|
|
updated each time the function is called with the status that is local to the call. The cell pointed
|
|
to by this parameter must be initialized to zero prior to invoking the call the first time for any string.
|
|
|
|
@retval EFI_SUCCESS It worked.
|
|
@retval EFI_NOT_FOUND A glyph for a character was not found.
|
|
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
HiiGetGlyph (
|
|
IN EFI_HII_PROTOCOL *This,
|
|
IN CHAR16 *Source,
|
|
IN OUT UINT16 *Index,
|
|
OUT UINT8 **GlyphBuffer,
|
|
OUT UINT16 *BitWidth,
|
|
IN OUT UINT32 *InternalStatus
|
|
);
|
|
|
|
/**
|
|
Translates a glyph into the format required for input to the Universal Graphics Adapter (UGA) Block Transfer (BLT) routines.
|
|
|
|
Notes:
|
|
This function is only called by Graphics Console module and GraphicsLib.
|
|
EDK II provides a UEFI Graphics Console module. ECP provides a GraphicsLib
|
|
complying to UEFI HII.
|
|
|
|
@param This A pointer to the EFI_HII_PROTOCOL instance.
|
|
@param GlyphBuffer A pointer to the buffer that contains glyph data.
|
|
@param Foreground The foreground setting requested to be used for the generated BltBuffer data. Type EFI_UGA_PIXEL is defined in "Related Definitions" below.
|
|
@param Background The background setting requested to be used for the generated BltBuffer data.
|
|
@param Count The entry in the BltBuffer upon which to act.
|
|
@param Width The width in bits of the glyph being converted.
|
|
@param Height The height in bits of the glyph being converted
|
|
@param BltBuffer A pointer to the buffer that contains the data that is ready to be used by the UGA BLT routines.
|
|
|
|
@retval EFI_SUCCESS It worked.
|
|
@retval EFI_NOT_FOUND A glyph for a character was not found.
|
|
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
HiiGlyphToBlt (
|
|
IN EFI_HII_PROTOCOL *This,
|
|
IN UINT8 *GlyphBuffer,
|
|
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Foreground,
|
|
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background,
|
|
IN UINTN Count,
|
|
IN UINTN Width,
|
|
IN UINTN Height,
|
|
IN OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer
|
|
);
|
|
|
|
/**
|
|
Create or update a String Token in a String Package.
|
|
|
|
If *Reference == 0, a new String Token is created.
|
|
|
|
@param This A pointer to the EFI_HII_PROTOCOL instance.
|
|
@param Language Pointer to a NULL-terminated string containing a single ISO 639-2 language
|
|
identifier, indicating the language to print. A string consisting of
|
|
all spaces indicates that the string is applicable to all languages.
|
|
@param Handle The handle of the language pack to which the string is to be added.
|
|
@param Reference The string token assigned to the string.
|
|
@param NewString The string to be added.
|
|
|
|
|
|
@retval EFI_SUCCESS The string was effectively registered.
|
|
@retval EFI_INVALID_PARAMETER The Handle was unknown. The string is not created or updated in the
|
|
the string package.
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
HiiNewString (
|
|
IN EFI_HII_PROTOCOL *This,
|
|
IN CHAR16 *Language,
|
|
IN FRAMEWORK_EFI_HII_HANDLE Handle,
|
|
IN OUT STRING_REF *Reference,
|
|
IN CHAR16 *NewString
|
|
);
|
|
|
|
/**
|
|
This function extracts a string from a package already registered with the EFI HII database.
|
|
|
|
@param This A pointer to the EFI_HII_PROTOCOL instance.
|
|
@param Handle The HII handle on which the string resides.
|
|
@param Token The string token assigned to the string.
|
|
@param Raw If TRUE, the string is returned unedited in the internal storage format described
|
|
above. If false, the string returned is edited by replacing <cr> with <space>
|
|
and by removing special characters such as the <wide> prefix.
|
|
@param LanguageString Pointer to a NULL-terminated string containing a single ISO 639-2 language
|
|
identifier, indicating the language to print. If the LanguageString is empty (starts
|
|
with a NULL), the default system language will be used to determine the language.
|
|
@param BufferLength Length of the StringBuffer. If the status reports that the buffer width is too
|
|
small, this parameter is filled with the length of the buffer needed.
|
|
@param StringBuffer The buffer designed to receive the characters in the string. Type EFI_STRING is
|
|
defined in String.
|
|
|
|
@retval EFI_INVALID_PARAMETER If input parameter is invalid.
|
|
@retval EFI_BUFFER_TOO_SMALL If the *BufferLength is too small.
|
|
@retval EFI_SUCCESS Operation is successful.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
HiiThunkGetString (
|
|
IN EFI_HII_PROTOCOL *This,
|
|
IN FRAMEWORK_EFI_HII_HANDLE Handle,
|
|
IN STRING_REF Token,
|
|
IN BOOLEAN Raw,
|
|
IN CHAR16 *LanguageString,
|
|
IN OUT UINTN *BufferLength,
|
|
OUT EFI_STRING StringBuffer
|
|
);
|
|
|
|
/**
|
|
This function removes any new strings that were added after the initial string export for this handle.
|
|
UEFI HII String Protocol does not have Reset String function. This function perform nothing.
|
|
|
|
@param This A pointer to the EFI_HII_PROTOCOL instance.
|
|
@param Handle The HII handle on which the string resides.
|
|
|
|
@retval EFI_SUCCESS This function is a NOP and always return EFI_SUCCESS.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
HiiResetStrings (
|
|
IN EFI_HII_PROTOCOL *This,
|
|
IN FRAMEWORK_EFI_HII_HANDLE Handle
|
|
);
|
|
|
|
/**
|
|
Test if all of the characters in a string have corresponding font characters.
|
|
|
|
This is a deprecated API. No Framework HII module is calling it. This function will ASSERT and
|
|
return EFI_UNSUPPORTED.
|
|
|
|
@param This A pointer to the EFI_HII_PROTOCOL instance.
|
|
@param StringToTest A pointer to a Unicode string.
|
|
@param FirstMissing A pointer to an index into the string. On input, the index of
|
|
the first character in the StringToTest to examine. On exit, the index
|
|
of the first character encountered for which a glyph is unavailable.
|
|
If all glyphs in the string are available, the index is the index of the terminator
|
|
of the string.
|
|
@param GlyphBufferSize A pointer to a value. On output, if the function returns EFI_SUCCESS,
|
|
it contains the amount of memory that is required to store the string? glyph equivalent.
|
|
|
|
@retval EFI_UNSUPPORTED The function performs nothing and return EFI_UNSUPPORTED.
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
HiiTestString (
|
|
IN EFI_HII_PROTOCOL *This,
|
|
IN CHAR16 *StringToTest,
|
|
IN OUT UINT32 *FirstMissing,
|
|
OUT UINT32 *GlyphBufferSize
|
|
);
|
|
|
|
/**
|
|
Allows a program to determine the primary languages that are supported on a given handle.
|
|
|
|
This routine is intended to be used by drivers to query the interface database for supported languages.
|
|
This routine returns a string of concatenated 3-byte language identifiers, one per string package associated with the handle.
|
|
|
|
@param This A pointer to the EFI_HII_PROTOCOL instance.
|
|
@param Handle The handle on which the strings reside. Type EFI_HII_HANDLE is defined in EFI_HII_PROTOCOL.NewPack()
|
|
in the Packages section.
|
|
@param LanguageString A string allocated by GetPrimaryLanguages() that contains a list of all primary languages
|
|
registered on the handle. The routine will not return the three-spaces language identifier used in
|
|
other functions to indicate non-language-specific strings.
|
|
|
|
@retval EFI_SUCCESS LanguageString was correctly returned.
|
|
|
|
@retval EFI_INVALID_PARAMETER The Handle was unknown.
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
HiiGetPrimaryLanguages (
|
|
IN EFI_HII_PROTOCOL *This,
|
|
IN FRAMEWORK_EFI_HII_HANDLE Handle,
|
|
OUT EFI_STRING *LanguageString
|
|
);
|
|
|
|
/**
|
|
Allows a program to determine which secondary languages are supported on a given handle for a given primary language
|
|
|
|
This routine is intended to be used by drivers to query the interface database for supported languages.
|
|
This routine returns a string of concatenated 3-byte language identifiers, one per string package associated with the handle.
|
|
|
|
@param This A pointer to the EFI_HII_PROTOCOL instance.
|
|
@param Handle The handle on which the strings reside. Type EFI_HII_HANDLE is defined in EFI_HII_PROTOCOL.NewPack()
|
|
in the Packages section.
|
|
@param PrimaryLanguage Pointer to a NULL-terminated string containing a single ISO 639-2 language identifier, indicating
|
|
the primary language.
|
|
@param LanguageString A string allocated by GetSecondaryLanguages() containing a list of all secondary languages registered
|
|
on the handle. The routine will not return the three-spaces language identifier used in other functions
|
|
to indicate non-language-specific strings, nor will it return the primary language. This function succeeds
|
|
but returns a NULL LanguageString if there are no secondary languages associated with the input Handle and
|
|
PrimaryLanguage pair. Type EFI_STRING is defined in String.
|
|
|
|
@retval EFI_SUCCESS LanguageString was correctly returned.
|
|
@retval EFI_INVALID_PARAMETER The Handle was unknown.
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
HiiGetSecondaryLanguages (
|
|
IN EFI_HII_PROTOCOL *This,
|
|
IN FRAMEWORK_EFI_HII_HANDLE Handle,
|
|
IN CHAR16 *PrimaryLanguage,
|
|
OUT EFI_STRING *LanguageString
|
|
);
|
|
|
|
/**
|
|
|
|
This function allows a program to extract a part of a string of not more than a given width.
|
|
With repeated calls, this allows a calling program to extract "lines" of text that fit inside
|
|
columns. The effort of measuring the fit of strings inside columns is localized to this call.
|
|
|
|
This is a deprecated API. No Framework HII module is calling it. This function will ASSERT and
|
|
return EFI_UNSUPPORTED.
|
|
|
|
@param This A pointer to the EFI_HII_PROTOCOL instance.
|
|
@param Handle The HII handle on which the string resides.
|
|
@param Token The string token assigned to the string.
|
|
@param Index On input, the offset into the string where the line is to start.
|
|
On output, the index is updated to point to beyond the last character returned
|
|
in the call.
|
|
@param LineWidth The maximum width of the line in units of narrow glyphs.
|
|
@param LanguageString Pointer to a NULL-terminated string containing a single ISO 639-2 language
|
|
identifier, indicating the language to print. If the LanguageString is empty (starts
|
|
with a NULL), the default system language will be used to determine the language.
|
|
@param BufferLength Length of the StringBuffer. If the status reports that the buffer width is too
|
|
small, this parameter is filled with the length of the buffer needed.
|
|
@param StringBuffer The buffer designed to receive the characters in the string. Type EFI_STRING is
|
|
defined in String.
|
|
|
|
@retval EFI_UNSUPPORTED.
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
HiiGetLine (
|
|
IN EFI_HII_PROTOCOL *This,
|
|
IN FRAMEWORK_EFI_HII_HANDLE Handle,
|
|
IN STRING_REF Token,
|
|
IN OUT UINT16 *Index,
|
|
IN UINT16 LineWidth,
|
|
IN CHAR16 *LanguageString,
|
|
IN OUT UINT16 *BufferLength,
|
|
OUT EFI_STRING StringBuffer
|
|
);
|
|
|
|
/**
|
|
This function allows a program to extract a form or form package that has
|
|
previously been registered with the EFI HII database.
|
|
|
|
In this thunk module, this function will create a IFR Package with only
|
|
one Formset. Effectively, only the GUID of the Formset is updated and return
|
|
in this IFR package to caller. This is enable the Framework modules which call
|
|
a API named GetStringFromToken. GetStringFromToken retieves a String based on
|
|
a String Token from a Package List known only by the Formset GUID.
|
|
|
|
|
|
|
|
@param This A pointer to the EFI_HII_PROTOCOL instance.
|
|
@param Handle Handle on which the form resides. Type FRAMEWORK_EFI_HII_HANDLE is defined in
|
|
EFI_HII_PROTOCOL.NewPack() in the Packages section.
|
|
@param FormId Ignored by this implementation.
|
|
@param BufferLengthTemp On input, the size of input buffer. On output, it
|
|
is the size of FW_HII_FORMSET_TEMPLATE.
|
|
@param Buffer The buffer designed to receive the form(s).
|
|
|
|
@retval EFI_SUCCESS Buffer filled with the requested forms. BufferLength
|
|
was updated.
|
|
@retval EFI_INVALID_PARAMETER The handle is unknown.
|
|
@retval EFI_NOT_FOUND A form on the requested handle cannot be found with the
|
|
requested FormId.
|
|
@retval EFI_BUFFER_TOO_SMALL The buffer provided was not large enough to allow the form to be stored.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
HiiGetForms (
|
|
IN EFI_HII_PROTOCOL *This,
|
|
IN FRAMEWORK_EFI_HII_HANDLE Handle,
|
|
IN EFI_FORM_ID FormId,
|
|
IN OUT UINTN *BufferLengthTemp,
|
|
OUT UINT8 *Buffer
|
|
);
|
|
|
|
/**
|
|
|
|
This function allows a program to extract the NV Image
|
|
that represents the default storage image
|
|
|
|
|
|
@param This A pointer to the EFI_HII_PROTOCOL instance.
|
|
@param Handle The HII handle from which will have default data retrieved.
|
|
UINTN - Mask used to retrieve the default image.
|
|
@param DefaultMask EDES_TODO: Add parameter description
|
|
@param VariablePackList Callee allocated, tightly-packed, link list data
|
|
structure that contain all default varaible packs
|
|
from the Hii Database.
|
|
|
|
@retval EFI_NOT_FOUND If Hii database does not contain any default images.
|
|
@retval EFI_INVALID_PARAMETER Invalid input parameter.
|
|
@retval EFI_SUCCESS Operation successful.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
HiiGetDefaultImage (
|
|
IN EFI_HII_PROTOCOL *This,
|
|
IN FRAMEWORK_EFI_HII_HANDLE Handle,
|
|
IN UINTN DefaultMask,
|
|
OUT EFI_HII_VARIABLE_PACK_LIST **VariablePackList
|
|
);
|
|
|
|
/**
|
|
This function allows the caller to update a form that has
|
|
previously been registered with the EFI HII database.
|
|
|
|
|
|
@param This EDES_TODO: Add parameter description
|
|
@param Handle Hii Handle associated with the Formset to modify
|
|
@param Label Update information starting immediately after this label in the IFR
|
|
@param AddData If TRUE, add data. If FALSE, remove data
|
|
@param Data If adding data, this is the pointer to the data to add
|
|
|
|
@retval EFI_SUCCESS Update success.
|
|
@retval Other Update fail.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
HiiThunkUpdateForm (
|
|
IN EFI_HII_PROTOCOL *This,
|
|
IN FRAMEWORK_EFI_HII_HANDLE Handle,
|
|
IN EFI_FORM_LABEL Label,
|
|
IN BOOLEAN AddData,
|
|
IN EFI_HII_UPDATE_DATA *Data
|
|
);
|
|
|
|
/**
|
|
Retrieves the current keyboard layout.
|
|
This function is not implemented by HII Thunk Module.
|
|
|
|
@param This A pointer to the EFI_HII_PROTOCOL instance.
|
|
@param DescriptorCount A pointer to the number of Descriptor entries being described in the keyboard layout being retrieved.
|
|
@param Descriptor A pointer to a buffer containing an array of EFI_KEY_DESCRIPTOR entries. Each entry will reflect the
|
|
definition of a specific physical key. Type EFI_KEY_DESCRIPTOR is defined in "Related Definitions" below.
|
|
|
|
@retval EFI_SUCCESS The keyboard layout was retrieved successfully.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
HiiGetKeyboardLayout (
|
|
IN EFI_HII_PROTOCOL *This,
|
|
OUT UINT16 *DescriptorCount,
|
|
OUT FRAMEWORK_EFI_KEY_DESCRIPTOR *Descriptor
|
|
);
|
|
|
|
/**
|
|
This is the Framework Setup Browser interface which displays a FormSet.
|
|
|
|
@param This The EFI_FORM_BROWSER_PROTOCOL context.
|
|
@param UseDatabase TRUE if the FormSet is from HII database. The Thunk implementation
|
|
only support UseDatabase is TRUE.
|
|
@param Handle The Handle buffer.
|
|
@param HandleCount The number of Handle in the Handle Buffer. It must be 1 for this implementation.
|
|
@param Packet The pointer to data buffer containing IFR and String package. Not supported.
|
|
@param CallbackHandle Not supported.
|
|
@param NvMapOverride The buffer is used only when there is no NV variable to define the
|
|
current settings and the caller needs to provide to the browser the
|
|
current settings for the the "fake" NV variable. If used, no saving of
|
|
an NV variable is possbile. This parameter is also ignored if Handle is NULL.
|
|
@param ScreenDimensions
|
|
Allows the browser to be called so that it occupies a portion of the physical
|
|
screen instead of dynamically determining the screen dimensions.
|
|
@param ResetRequired This BOOLEAN value denotes whether a reset is required based on the data that
|
|
might have been changed. The ResetRequired parameter is primarily applicable
|
|
for configuration applications, and is an optional parameter.
|
|
|
|
@retval EFI_SUCCESS If the Formset is displayed correctly.
|
|
@retval EFI_UNSUPPORTED If UseDatabase is FALSE or HandleCount is not 1.
|
|
@retval EFI_INVALID_PARAMETER If the *Handle passed in is not found in the database.
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
ThunkSendForm (
|
|
IN EFI_FORM_BROWSER_PROTOCOL *This,
|
|
IN BOOLEAN UseDatabase,
|
|
IN FRAMEWORK_EFI_HII_HANDLE *Handle,
|
|
IN UINTN HandleCount,
|
|
IN EFI_IFR_PACKET *Packet, OPTIONAL
|
|
IN EFI_HANDLE CallbackHandle, OPTIONAL
|
|
IN UINT8 *NvMapOverride, OPTIONAL
|
|
IN FRAMEWORK_EFI_SCREEN_DESCRIPTOR *ScreenDimensions, OPTIONAL
|
|
OUT BOOLEAN *ResetRequired OPTIONAL
|
|
);
|
|
|
|
/**
|
|
|
|
Rountine used to display a generic dialog interface and return
|
|
the Key or Input from user input.
|
|
|
|
@param LinesNumber The number of lines for the dialog box.
|
|
@param HotKey Defines if a single character is parsed (TRUE) and returned in KeyValue
|
|
or if a string is returned in StringBuffer.
|
|
@param MaximumStringSize The maximum size in bytes of a typed-in string.
|
|
@param StringBuffer On return contains the typed-in string if HotKey is FALSE.
|
|
@param Key The EFI_INPUT_KEY value returned if HotKey is TRUE.
|
|
@param FirstString The pointer to the first string in the list of strings
|
|
that comprise the dialog box.
|
|
@param ... A series of NumberOfLines text strings that will be used
|
|
to construct the dialog box.
|
|
@retval EFI_SUCCESS The dialog is created successfully and user interaction was received.
|
|
@retval EFI_DEVICE_ERROR The user typed in an ESC.
|
|
@retval EFI_INVALID_PARAMETER One of the parameters was invalid.(StringBuffer == NULL && HotKey == FALSE).
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
ThunkCreatePopUp (
|
|
IN UINTN LinesNumber,
|
|
IN BOOLEAN HotKey,
|
|
IN UINTN MaximumStringSize,
|
|
OUT CHAR16 *StringBuffer,
|
|
OUT EFI_INPUT_KEY *Key,
|
|
IN CHAR16 *FirstString,
|
|
...
|
|
);
|
|
|
|
/**
|
|
This notification function will be called when a Package List is removed
|
|
using UEFI HII interface. The Package List removed need to be removed from
|
|
Framework Thunk module too.
|
|
|
|
If the Package List registered is not Sting Package,
|
|
then ASSERT. If the NotifyType is not REMOVE_PACK, then ASSERT.
|
|
Both cases means UEFI HII Database itself is buggy.
|
|
|
|
@param PackageType The Package Type.
|
|
@param PackageGuid The Package GUID.
|
|
@param Package The Package Header.
|
|
@param Handle The HII Handle of this Package List.
|
|
@param NotifyType The reason of the notification.
|
|
|
|
@retval EFI_SUCCESS The notification function is successful.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
RemovePackNotify (
|
|
IN UINT8 PackageType,
|
|
IN CONST EFI_GUID *PackageGuid,
|
|
IN CONST EFI_HII_PACKAGE_HEADER *Package,
|
|
IN EFI_HII_HANDLE Handle,
|
|
IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType
|
|
);
|
|
|
|
/**
|
|
This notification function will be called when a Package List is registered
|
|
using UEFI HII interface. The Package List registered need to be recorded in
|
|
Framework Thunk module as Thunk Module may need to look for String Package in
|
|
the package registered.
|
|
|
|
If the Package List registered is not either Sting Package or IFR package,
|
|
then ASSERT. If the NotifyType is not ADD_PACK or NEW_PACK, then ASSERT.
|
|
Both cases means UEFI HII Database itself is buggy.
|
|
|
|
@param PackageType The Package Type.
|
|
@param PackageGuid The Package GUID.
|
|
@param Package The Package Header.
|
|
@param Handle The HII Handle of this Package List.
|
|
@param NotifyType The reason of the notification.
|
|
|
|
@retval EFI_SUCCESS The notification function is successful.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
NewOrAddPackNotify (
|
|
IN UINT8 PackageType,
|
|
IN CONST EFI_GUID *PackageGuid,
|
|
IN CONST EFI_HII_PACKAGE_HEADER *Package,
|
|
IN EFI_HII_HANDLE Handle,
|
|
IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType
|
|
);
|
|
|
|
/**
|
|
Create a Hii Update data Handle used to call IfrLibUpdateForm.
|
|
|
|
@param ThunkContext The HII Thunk Context.
|
|
@param FwUpdateData The Framework Update Data.
|
|
@param UefiOpCodeHandle The UEFI Update Data.
|
|
|
|
@retval EFI_SUCCESS The UEFI Update Data is created successfully.
|
|
@retval EFI_UNSUPPORTED There is unsupported opcode in FwUpdateData.
|
|
@retval EFI_OUT_OF_RESOURCES There is not enough resource.
|
|
**/
|
|
EFI_STATUS
|
|
FwUpdateDataToUefiUpdateData (
|
|
IN HII_THUNK_CONTEXT *ThunkContext,
|
|
IN CONST EFI_HII_UPDATE_DATA *FwUpdateData,
|
|
IN VOID *UefiOpCodeHandle
|
|
)
|
|
;
|
|
|
|
/**
|
|
|
|
Initialize string packages in HII database.
|
|
|
|
**/
|
|
VOID
|
|
InitSetBrowserStrings (
|
|
VOID
|
|
)
|
|
;
|
|
|
|
/**
|
|
Convert language code from RFC4646 to ISO639-2.
|
|
|
|
LanguageRfc4646 contain a single RFC 4646 code such as
|
|
"en-US" or "fr-FR".
|
|
|
|
The LanguageRfc4646 must be a buffer large enough
|
|
for ISO_639_2_ENTRY_SIZE characters.
|
|
|
|
If LanguageRfc4646 is NULL, then ASSERT.
|
|
If LanguageIso639 is NULL, then ASSERT.
|
|
|
|
@param LanguageRfc4646 RFC4646 language code.
|
|
@param LanguageIso639 ISO639-2 language code.
|
|
|
|
@retval EFI_SUCCESS Language code converted.
|
|
@retval EFI_NOT_FOUND Language code not found.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
ConvertRfc4646LanguageToIso639Language (
|
|
IN CHAR8 *LanguageRfc4646,
|
|
OUT CHAR8 *LanguageIso639
|
|
)
|
|
;
|
|
|
|
/**
|
|
Convert language code from ISO639-2 to RFC4646 and return the converted language.
|
|
Caller is responsible for freeing the allocated buffer.
|
|
|
|
LanguageIso639 contain a single ISO639-2 code such as
|
|
"eng" or "fra".
|
|
|
|
If LanguageIso639 is NULL, then ASSERT.
|
|
If LanguageRfc4646 is NULL, then ASSERT.
|
|
|
|
@param LanguageIso639 ISO639-2 language code.
|
|
|
|
@return the allocated buffer or NULL, if the language is not found.
|
|
|
|
**/
|
|
CHAR8*
|
|
EFIAPI
|
|
ConvertIso639LanguageToRfc4646Language (
|
|
IN CONST CHAR8 *LanguageIso639
|
|
)
|
|
;
|
|
|
|
/**
|
|
Get next language from language code list (with separator ';').
|
|
|
|
If LangCode is NULL, then ASSERT.
|
|
If Lang is NULL, then ASSERT.
|
|
|
|
@param LangCode On input: point to first language in the list. On
|
|
output: point to next language in the list, or
|
|
NULL if no more language in the list.
|
|
@param Lang The first language in the list.
|
|
|
|
**/
|
|
VOID
|
|
EFIAPI
|
|
GetNextLanguage (
|
|
IN OUT CHAR8 **LangCode,
|
|
OUT CHAR8 *Lang
|
|
)
|
|
;
|
|
|
|
#include "Utility.h"
|
|
#include "ConfigAccess.h"
|
|
|
|
#endif
|