BaseTools/FCE: Add a tool FCE
FCE is a tool to retrieve and change HII configuration data in Firmware Device(*.fd) files. https://bugzilla.tianocore.org/show_bug.cgi?id=1848 Cc: Bob Feng <bob.c.feng@intel.com> Cc: Liming Gao <liming.gao@intel.com> Signed-off-by: Shenglei Zhang <shenglei.zhang@intel.com> Reviewed-by: Bob Feng <bob.c.feng@intel.com>
This commit is contained in:
committed by
Liming Gao
parent
dc7b0dc8d6
commit
3c59d94637
789
BaseTools/Source/C/FCE/IfrParse.h
Normal file
789
BaseTools/Source/C/FCE/IfrParse.h
Normal file
@@ -0,0 +1,789 @@
|
||||
/** @file
|
||||
|
||||
Parser for IFR binary encoding.
|
||||
|
||||
Copyright (c) 2011-2019, Intel Corporation. All rights reserved.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _IFR_PARSE_H_
|
||||
#define _IFR_PARSE_H_
|
||||
|
||||
#include "Common.h"
|
||||
#include <Common/UefiInternalFormRepresentation.h>
|
||||
#include <Common/MdeModuleHii.h>
|
||||
|
||||
//
|
||||
// Scope for Browser action. It may be Form, FormSet or System level.
|
||||
//
|
||||
typedef enum {
|
||||
FormLevel,
|
||||
FormSetLevel,
|
||||
SystemLevel,
|
||||
MaxLevel
|
||||
} BROWSER_SETTING_SCOPE;
|
||||
|
||||
///
|
||||
///Old EFI_IFR_VARSTORE_EFI structure to complible with UEFI 2.3
|
||||
///
|
||||
typedef struct _EFI_IFR_VARSTORE_EFI_OLD {
|
||||
EFI_IFR_OP_HEADER Header;
|
||||
EFI_VARSTORE_ID VarStoreId;
|
||||
EFI_GUID Guid;
|
||||
UINT32 Attributes;
|
||||
} EFI_IFR_VARSTORE_EFI_OLD;
|
||||
|
||||
///
|
||||
/// The languages used in HII DB
|
||||
///
|
||||
typedef enum {
|
||||
UQI,
|
||||
EN_US,
|
||||
ENG
|
||||
} LANGUAGE;
|
||||
|
||||
///
|
||||
/// Define the structure for the parameters of Uqi and Uqi List
|
||||
///
|
||||
typedef struct _FORM_BROWSER_STATEMENT FORM_BROWSER_STATEMENT;
|
||||
|
||||
typedef enum {
|
||||
ONE_OF,
|
||||
NUMERIC,
|
||||
CHECKBOX,
|
||||
STRING,
|
||||
ORDERED_LIST
|
||||
} QUEST_TYPE;
|
||||
|
||||
typedef struct {
|
||||
UINT16 *DefaultId;
|
||||
UINT64 *PlatformId;
|
||||
UINT32 IdNum;
|
||||
UINT32 HexNum;
|
||||
QUEST_TYPE Type;
|
||||
CHAR16 *Data;
|
||||
UINT8 *Value;
|
||||
UINT8 *DiffValue;
|
||||
UINT32 ScriptsLine;
|
||||
FORM_BROWSER_STATEMENT *Question;
|
||||
} UQI_HEADER;
|
||||
|
||||
typedef struct _UQI_PARAM_LIST {
|
||||
struct _UQI_PARAM_LIST *Next;
|
||||
UQI_HEADER Header;
|
||||
BOOLEAN ParseOrNot;
|
||||
BOOLEAN SameOrNot;
|
||||
BOOLEAN ErrorOrNot;
|
||||
CHAR8 *Error;
|
||||
} UQI_PARAM_LIST;
|
||||
|
||||
//
|
||||
// Incremental size of stack for expression
|
||||
//
|
||||
#define EXPRESSION_STACK_SIZE_INCREMENT 0x100
|
||||
|
||||
//
|
||||
// IFR relative definition
|
||||
//
|
||||
#define EFI_HII_EXPRESSION_INCONSISTENT_IF 0
|
||||
#define EFI_HII_EXPRESSION_NO_SUBMIT_IF 1
|
||||
#define EFI_HII_EXPRESSION_GRAY_OUT_IF 2
|
||||
#define EFI_HII_EXPRESSION_SUPPRESS_IF 3
|
||||
#define EFI_HII_EXPRESSION_DISABLE_IF 4
|
||||
#define EFI_HII_EXPRESSION_VALUE 5
|
||||
#define EFI_HII_EXPRESSION_RULE 6
|
||||
#define EFI_HII_EXPRESSION_READ 7
|
||||
#define EFI_HII_EXPRESSION_WRITE 8
|
||||
#define EFI_HII_EXPRESSION_WARNING_IF 9
|
||||
|
||||
#define EFI_HII_VARSTORE_BUFFER 0
|
||||
#define EFI_HII_VARSTORE_NAME_VALUE 1
|
||||
#define EFI_HII_VARSTORE_EFI_VARIABLE 2
|
||||
#define EFI_HII_VARSTORE_EFI_VARIABLE_BUFFER 3
|
||||
|
||||
#define FORM_INCONSISTENT_VALIDATION 0
|
||||
#define FORM_NO_SUBMIT_VALIDATION 1
|
||||
|
||||
typedef struct {
|
||||
//
|
||||
// HII Data Type
|
||||
//
|
||||
UINT8 Type;
|
||||
//
|
||||
// Buffer Data and Length if Type is EFI_IFR_TYPE_BUFFER or EFI_IFR_TYPE_STRING
|
||||
//
|
||||
UINT8 *Buffer;
|
||||
UINT16 BufferLen;
|
||||
EFI_IFR_TYPE_VALUE Value;
|
||||
} EFI_HII_VALUE;
|
||||
|
||||
#define NAME_VALUE_NODE_SIGNATURE SIGNATURE_32 ('N', 'V', 'S', 'T')
|
||||
|
||||
typedef struct {
|
||||
UINTN Signature;
|
||||
LIST_ENTRY Link;
|
||||
CHAR16 *Name;
|
||||
CHAR16 *Value;
|
||||
CHAR16 *EditValue;
|
||||
} NAME_VALUE_NODE;
|
||||
|
||||
#define NAME_VALUE_NODE_FROM_LINK(a) CR (a, NAME_VALUE_NODE, Link, NAME_VALUE_NODE_SIGNATURE)
|
||||
|
||||
#define FORMSET_STORAGE_SIGNATURE SIGNATURE_32 ('F', 'S', 'T', 'G')
|
||||
|
||||
typedef struct {
|
||||
UINTN Signature;
|
||||
LIST_ENTRY Link;
|
||||
|
||||
UINT16 DefaultId[MAX_PLATFORM_DEFAULT_ID_NUM];
|
||||
UINT64 PlatformId[MAX_PLATFORM_DEFAULT_ID_NUM];
|
||||
UINT32 DefaultPlatformIdNum;
|
||||
UINT32 FormSetOrder;
|
||||
|
||||
BOOLEAN NewEfiVarstore; //EfiVarStore for UEFI 2.31 or not
|
||||
BOOLEAN Skip; //Flag for sorting out the variables
|
||||
|
||||
UINT8 Type; // Storage type
|
||||
|
||||
UINT16 VarStoreId;
|
||||
EFI_GUID Guid;
|
||||
|
||||
CHAR16 *Name; // For EFI_IFR_VARSTORE
|
||||
UINT16 Size;
|
||||
UINT8 *Buffer;
|
||||
|
||||
LIST_ENTRY NameValueListHead; // List of NAME_VALUE_NODE
|
||||
|
||||
UINT32 Attributes; // For EFI_IFR_VARSTORE_EFI: EFI Variable attribute
|
||||
} FORMSET_STORAGE;
|
||||
|
||||
#define FORMSET_STORAGE_FROM_LINK(a) CR (a, FORMSET_STORAGE, Link, FORMSET_STORAGE_SIGNATURE)
|
||||
|
||||
typedef union {
|
||||
EFI_STRING_ID VarName;
|
||||
UINT16 VarOffset;
|
||||
} VAR_STORE_INFO;
|
||||
|
||||
#define EXPRESSION_OPCODE_SIGNATURE SIGNATURE_32 ('E', 'X', 'O', 'P')
|
||||
|
||||
typedef struct {
|
||||
UINTN Signature;
|
||||
LIST_ENTRY Link;
|
||||
|
||||
UINT8 Operand;
|
||||
|
||||
UINT8 Format; // For EFI_IFR_TO_STRING, EFI_IFR_FIND
|
||||
UINT8 Flags; // For EFI_IFR_SPAN
|
||||
UINT8 RuleId; // For EFI_IFR_RULE_REF
|
||||
|
||||
EFI_HII_VALUE Value; // For EFI_IFR_EQ_ID_VAL, EFI_IFR_UINT64, EFI_IFR_UINT32, EFI_IFR_UINT16, EFI_IFR_UINT8, EFI_IFR_STRING_REF1
|
||||
|
||||
EFI_QUESTION_ID QuestionId; // For EFI_IFR_EQ_ID_ID, EFI_IFR_EQ_ID_VAL_LIST, EFI_IFR_QUESTION_REF1
|
||||
EFI_QUESTION_ID QuestionId2;
|
||||
|
||||
UINT16 ListLength; // For EFI_IFR_EQ_ID_VAL_LIST
|
||||
UINT16 *ValueList;
|
||||
|
||||
EFI_STRING_ID DevicePath; // For EFI_IFR_QUESTION_REF3_2, EFI_IFR_QUESTION_REF3_3
|
||||
EFI_GUID Guid;
|
||||
|
||||
FORMSET_STORAGE *VarStorage; // For EFI_IFR_SET, EFI_IFR_GET
|
||||
VAR_STORE_INFO VarStoreInfo;// For EFI_IFR_SET, EFI_IFR_GET
|
||||
UINT8 ValueType; // For EFI_IFR_SET, EFI_IFR_GET
|
||||
UINT8 ValueWidth; // For EFI_IFR_SET, EFI_IFR_GET
|
||||
CHAR16 *ValueName; // For EFI_IFR_SET, EFI_IFR_GET
|
||||
LIST_ENTRY MapExpressionList; // nested expressions inside of Map opcode.
|
||||
} EXPRESSION_OPCODE;
|
||||
|
||||
#define EXPRESSION_OPCODE_FROM_LINK(a) CR (a, EXPRESSION_OPCODE, Link, EXPRESSION_OPCODE_SIGNATURE)
|
||||
|
||||
#define FORM_EXPRESSION_SIGNATURE SIGNATURE_32 ('F', 'E', 'X', 'P')
|
||||
|
||||
typedef struct {
|
||||
UINTN Signature;
|
||||
LIST_ENTRY Link;
|
||||
|
||||
UINT8 Type; // Type for this expression
|
||||
|
||||
UINT8 RuleId; // For EFI_IFR_RULE only
|
||||
EFI_STRING_ID Error; // For EFI_IFR_NO_SUBMIT_IF, EFI_IFR_INCONSISTENT_IF only
|
||||
|
||||
EFI_HII_VALUE Result; // Expression evaluation result
|
||||
UINT8 TimeOut; // For EFI_IFR_WARNING_IF
|
||||
|
||||
LIST_ENTRY OpCodeListHead; // OpCodes consist of this expression (EXPRESSION_OPCODE)
|
||||
} FORM_EXPRESSION;
|
||||
|
||||
#define FORM_EXPRESSION_FROM_LINK(a) CR (a, FORM_EXPRESSION, Link, FORM_EXPRESSION_SIGNATURE)
|
||||
|
||||
#define QUESTION_DEFAULT_SIGNATURE SIGNATURE_32 ('Q', 'D', 'F', 'T')
|
||||
|
||||
typedef struct {
|
||||
UINTN Signature;
|
||||
LIST_ENTRY Link;
|
||||
|
||||
UINT16 DefaultId;
|
||||
EFI_HII_VALUE Value; // Default value
|
||||
|
||||
FORM_EXPRESSION *ValueExpression; // Not-NULL indicates default value is provided by EFI_IFR_VALUE
|
||||
} QUESTION_DEFAULT;
|
||||
|
||||
#define QUESTION_DEFAULT_FROM_LINK(a) CR (a, QUESTION_DEFAULT, Link, QUESTION_DEFAULT_SIGNATURE)
|
||||
|
||||
#define QUESTION_OPTION_SIGNATURE SIGNATURE_32 ('Q', 'O', 'P', 'T')
|
||||
|
||||
typedef struct {
|
||||
UINTN Signature;
|
||||
LIST_ENTRY Link;
|
||||
|
||||
EFI_STRING_ID Text;
|
||||
UINT8 Flags;
|
||||
EFI_HII_VALUE Value;
|
||||
|
||||
FORM_EXPRESSION *SuppressExpression; // Non-NULL indicates nested inside of SuppressIf
|
||||
} QUESTION_OPTION;
|
||||
|
||||
#define QUESTION_OPTION_FROM_LINK(a) CR (a, QUESTION_OPTION, Link, QUESTION_OPTION_SIGNATURE)
|
||||
|
||||
#define FORM_BROWSER_STATEMENT_SIGNATURE SIGNATURE_32 ('F', 'S', 'T', 'A')
|
||||
|
||||
struct _FORM_BROWSER_STATEMENT {
|
||||
UINTN Signature;
|
||||
LIST_ENTRY Link;
|
||||
UINT8 Operand; // The operand (first byte) of this Statement or Question
|
||||
|
||||
UQI_HEADER Uqi;
|
||||
UINT32 FormSetOrder;
|
||||
EFI_GUID Guid;
|
||||
UINT8 Type; // Storage type
|
||||
BOOLEAN NewEfiVarstore; //EfiVarStore for UEFI 2.31 or not
|
||||
UINT32 Attributes; // For EFI_IFR_VARSTORE_EFI: EFI Variable attribute
|
||||
BOOLEAN QuestionReferToBitField;// Whether the question is stored in a bit field.
|
||||
//
|
||||
// Statement Header
|
||||
//
|
||||
EFI_STRING_ID Prompt;
|
||||
EFI_STRING_ID Help;
|
||||
EFI_STRING_ID TextTwo; // For EFI_IFR_TEXT
|
||||
|
||||
//
|
||||
// Question Header
|
||||
//
|
||||
EFI_QUESTION_ID QuestionId; // The value of zero is reserved
|
||||
EFI_VARSTORE_ID VarStoreId; // A value of zero indicates no variable storage
|
||||
FORMSET_STORAGE *Storage;
|
||||
VAR_STORE_INFO VarStoreInfo;
|
||||
UINT16 StorageWidth;
|
||||
UINT16 BitStorageWidth;
|
||||
UINT16 BitVarOffset;
|
||||
UINT8 QuestionFlags;
|
||||
CHAR16 *VariableName; // Name/Value or EFI Variable name
|
||||
|
||||
EFI_HII_VALUE HiiValue; // Edit copy for checkbox, numberic, oneof
|
||||
UINT8 *BufferValue; // Edit copy for string, password, orderedlist
|
||||
UINT8 ValueType; // Data type for orderedlist value array
|
||||
|
||||
//
|
||||
// OpCode specific members
|
||||
//
|
||||
UINT8 Flags; // for EFI_IFR_CHECKBOX, EFI_IFR_DATE, EFI_IFR_NUMERIC, EFI_IFR_ONE_OF,
|
||||
// EFI_IFR_ORDERED_LIST, EFI_IFR_STRING,EFI_IFR_SUBTITLE,EFI_IFR_TIME, EFI_IFR_BANNER
|
||||
UINT8 MaxContainers; // for EFI_IFR_ORDERED_LIST
|
||||
|
||||
UINT16 BannerLineNumber; // for EFI_IFR_BANNER, 1-based line number
|
||||
|
||||
UINT64 Minimum; // for EFI_IFR_ONE_OF/EFI_IFR_NUMERIC, it's Min/Max value
|
||||
UINT64 Maximum; // for EFI_IFR_STRING/EFI_IFR_PASSWORD, it's Min/Max length
|
||||
UINT64 Step;
|
||||
|
||||
EFI_DEFAULT_ID DefaultId; // for EFI_IFR_RESET_BUTTON
|
||||
EFI_GUID RefreshGuid; // for EFI_IFR_REFRESH_ID
|
||||
|
||||
//
|
||||
// Get from IFR parsing
|
||||
//
|
||||
FORM_EXPRESSION *ValueExpression; // nested EFI_IFR_VALUE, provide Question value and indicate Question is ReadOnly
|
||||
LIST_ENTRY DefaultListHead; // nested EFI_IFR_DEFAULT list (QUESTION_DEFAULT), provide default values
|
||||
LIST_ENTRY OptionListHead; // nested EFI_IFR_ONE_OF_OPTION list (QUESTION_OPTION)
|
||||
|
||||
EFI_IMAGE_ID ImageId; // nested EFI_IFR_IMAGE
|
||||
UINT8 RefreshInterval; // nested EFI_IFR_REFRESH, refresh interval(in seconds) for Question value, 0 means no refresh
|
||||
BOOLEAN InSubtitle; // nesting inside of EFI_IFR_SUBTITLE
|
||||
|
||||
LIST_ENTRY InconsistentListHead;// nested inconsistent expression list (FORM_EXPRESSION)
|
||||
LIST_ENTRY NoSubmitListHead; // nested nosubmit expression list (FORM_EXPRESSION)
|
||||
LIST_ENTRY WarningListHead; // nested warning expression list (FORM_EXPRESSION)
|
||||
FORM_EXPRESSION *GrayOutExpression; // nesting inside of GrayOutIf
|
||||
FORM_EXPRESSION *SuppressExpression; // nesting inside of SuppressIf
|
||||
FORM_EXPRESSION *DisableExpression; // nesting inside of DisableIf
|
||||
|
||||
FORM_EXPRESSION *ReadExpression; // nested EFI_IFR_READ, provide this question value by read expression.
|
||||
FORM_EXPRESSION *WriteExpression; // nested EFI_IFR_WRITE, evaluate write expression after this question value is set.
|
||||
};
|
||||
|
||||
#define FORM_BROWSER_STATEMENT_FROM_LINK(a) CR (a, FORM_BROWSER_STATEMENT, Link, FORM_BROWSER_STATEMENT_SIGNATURE)
|
||||
|
||||
#define FORM_BROWSER_FORM_SIGNATURE SIGNATURE_32 ('F', 'F', 'R', 'M')
|
||||
#define STANDARD_MAP_FORM_TYPE 0x01
|
||||
|
||||
typedef struct {
|
||||
UINTN Signature;
|
||||
LIST_ENTRY Link;
|
||||
|
||||
UINT16 FormId; // FormId of normal form or formmap form.
|
||||
EFI_STRING_ID FormTitle; // FormTile of normal form, or FormMapMethod title of formmap form.
|
||||
UINT16 FormType; // Specific form type for the different form.
|
||||
|
||||
BOOLEAN ModalForm; // Whether this is a modal form.
|
||||
LIST_ENTRY ExpressionListHead; // List of Expressions (FORM_EXPRESSION)
|
||||
LIST_ENTRY StatementListHead; // List of Statements and Questions (FORM_BROWSER_STATEMENT)
|
||||
FORM_EXPRESSION *SuppressExpression; // nesting inside of SuppressIf
|
||||
} FORM_BROWSER_FORM;
|
||||
|
||||
#define FORM_BROWSER_FORM_FROM_LINK(a) CR (a, FORM_BROWSER_FORM, Link, FORM_BROWSER_FORM_SIGNATURE)
|
||||
|
||||
#define FORMSET_DEFAULTSTORE_SIGNATURE SIGNATURE_32 ('F', 'D', 'F', 'S')
|
||||
|
||||
typedef struct {
|
||||
UINTN Signature;
|
||||
LIST_ENTRY Link;
|
||||
|
||||
UINT16 DefaultId;
|
||||
EFI_STRING_ID DefaultName;
|
||||
} FORMSET_DEFAULTSTORE;
|
||||
|
||||
#define STRING_NUMBER 100
|
||||
|
||||
typedef struct {
|
||||
EFI_STRING_ID StringId;
|
||||
CHAR16 *String;
|
||||
} STRING_INFO;
|
||||
|
||||
typedef struct {
|
||||
EFI_STRING_ID CachedIdNum;
|
||||
EFI_STRING_ID MaxIdNum;
|
||||
STRING_INFO *StringInfoList;
|
||||
} FORMSET_STRING_LIST;
|
||||
|
||||
#define FORMSET_DEFAULTSTORE_FROM_LINK(a) CR (a, FORMSET_DEFAULTSTORE, Link, FORMSET_DEFAULTSTORE_SIGNATURE)
|
||||
|
||||
#define FORM_BROWSER_FORMSET_SIGNATURE SIGNATURE_32 ('F', 'B', 'F', 'S')
|
||||
|
||||
typedef struct {
|
||||
UINTN Signature;
|
||||
LIST_ENTRY Link;
|
||||
|
||||
UINT32 FormSetOrder;
|
||||
|
||||
UINTN IfrBinaryLength;
|
||||
UINT8 *IfrBinaryData;
|
||||
UINT8 *UnicodeBinary;
|
||||
|
||||
EFI_GUID Guid;
|
||||
EFI_STRING_ID FormSetTitle;
|
||||
EFI_STRING_ID Help;
|
||||
UINT8 NumberOfClassGuid;
|
||||
EFI_GUID ClassGuid[3]; // Up to three ClassGuid
|
||||
UINT16 Class; // Tiano extended Class code
|
||||
UINT16 SubClass; // Tiano extended Subclass code
|
||||
|
||||
FORM_BROWSER_STATEMENT *StatementBuffer; // Buffer for all Statements and Questions
|
||||
EXPRESSION_OPCODE *ExpressionBuffer; // Buffer for all Expression OpCode
|
||||
|
||||
LIST_ENTRY *StorageListHead; // Storage list (FORMSET_STORAGE)
|
||||
LIST_ENTRY DefaultStoreListHead; // DefaultStore list (FORMSET_DEFAULTSTORE)
|
||||
LIST_ENTRY FormListHead; // Form list (FORM_BROWSER_FORM)
|
||||
LIST_ENTRY ExpressionListHead; // List of Expressions (FORM_EXPRESSION)
|
||||
FORMSET_STRING_LIST EnUsStringList; // Cache EN_US English list
|
||||
FORMSET_STRING_LIST UqiStringList; // Cache EN_US English list
|
||||
} FORM_BROWSER_FORMSET;
|
||||
|
||||
#define FORM_BROWSER_FORMSET_FROM_LINK(a) CR (a, FORM_BROWSER_FORMSET, Link, FORM_BROWSER_FORMSET_SIGNATURE)
|
||||
|
||||
///
|
||||
/// Structure for multi-platform support
|
||||
///
|
||||
typedef struct {
|
||||
UINT16 DefaultId[MAX_PLATFORM_DEFAULT_ID_NUM];
|
||||
UINT16 DefaultIdNum;
|
||||
UINT64 PlatformId[MAX_PLATFORM_DEFAULT_ID_NUM];
|
||||
UINT16 PlatformIdNum;
|
||||
UINT16 KeyDefaultId[MAX_PLATFORM_DEFAULT_ID_NUM];
|
||||
UINT64 KeyPlatformId[MAX_PLATFORM_DEFAULT_ID_NUM];
|
||||
UINT16 KeyIdNum;
|
||||
FORM_BROWSER_STATEMENT PlatformIdQuestion;
|
||||
FORM_BROWSER_STATEMENT *Question;
|
||||
UINT16 PlatformIdWidth;
|
||||
UQI_HEADER Uqi;
|
||||
BOOLEAN MultiPlatformOrNot;
|
||||
BOOLEAN ExistStorageFfsInBfv;
|
||||
BOOLEAN SizeOptimized;
|
||||
BOOLEAN SizeOptimizedParam;
|
||||
} MULTI_PLATFORM_PARAMETERS;
|
||||
|
||||
/**
|
||||
Search the variable list according to the variable Guid and name, and return the pointer
|
||||
of that Node.
|
||||
|
||||
@param HiiObjList The pointer to the Question
|
||||
@param VarName The EFI variable name need to be updated to VarList
|
||||
@param Offset The offset of the variable
|
||||
@param StorageListHead The pointer to the LIST_ENTRY of Storage
|
||||
@param Vaue The value in that value offset of the variable
|
||||
@param VarList The dual pointer of Varlist
|
||||
|
||||
@return EFI_SUCCESS
|
||||
**/
|
||||
EFI_STATUS
|
||||
SearchVarStorage (
|
||||
IN FORM_BROWSER_STATEMENT *Question,
|
||||
IN CHAR16* VarName,
|
||||
IN UINT32 Offset,
|
||||
IN LIST_ENTRY *StorageListHead,
|
||||
IN OUT CHAR8 **Value,
|
||||
IN OUT FORMSET_STORAGE **VarList
|
||||
);
|
||||
|
||||
/**
|
||||
Get the string based on the StringId and HII Package List Handle.
|
||||
|
||||
@param Token The String's ID.
|
||||
@param HiiHandle The package list in the HII database to search for
|
||||
the specified string.
|
||||
|
||||
@return The output string.
|
||||
|
||||
**/
|
||||
CHAR16 *
|
||||
GetToken (
|
||||
IN EFI_STRING_ID Token,
|
||||
IN UINT8 *UniPackge
|
||||
);
|
||||
|
||||
/**
|
||||
Free resources allocated for all Storage in an LIST_ENTRY.
|
||||
|
||||
@param FormSet Pointer of the FormSet
|
||||
|
||||
**/
|
||||
VOID
|
||||
DestroyAllStorage (
|
||||
IN LIST_ENTRY *StorageEntryListHead
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Free resources allocated for a FormSet.
|
||||
|
||||
@param FormSet Pointer of the FormSet
|
||||
|
||||
**/
|
||||
VOID
|
||||
DestroyFormSet (
|
||||
IN FORM_BROWSER_FORMSET *FormSet
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Free resources allocated for all FormSet in an LIST_ENTRY.
|
||||
|
||||
@param FormSet Pointer of the FormSet
|
||||
|
||||
**/
|
||||
VOID
|
||||
DestroyAllFormSet (
|
||||
IN LIST_ENTRY *FormSetEntryListHead
|
||||
);
|
||||
|
||||
/**
|
||||
Parse opcodes in the formset IFR binary.
|
||||
|
||||
@param FormSet Pointer of the FormSet data structure.
|
||||
|
||||
@retval EFI_SUCCESS Opcode parse success.
|
||||
@retval Other Opcode parse fail.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
ParseOpCodes (
|
||||
IN FORM_BROWSER_FORMSET *FormSet
|
||||
);
|
||||
|
||||
/**
|
||||
Set the value to the variable of platformId question.
|
||||
|
||||
@param PlatformId The form set.
|
||||
|
||||
@retval EFI_SUCCESS Set successfully.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
AssignThePlatformId (
|
||||
IN UINT64 PlatformId
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Reset Questions to their default value in a Form, Formset or System.
|
||||
|
||||
@param FormSet FormSet data structure.
|
||||
@param Form Form data structure.
|
||||
@param DefaultId The default Id
|
||||
@param PlatformId The platform Id
|
||||
@param SettingScope Setting Scope for Default action.
|
||||
|
||||
@retval EFI_SUCCESS The function completed successfully.
|
||||
@retval EFI_UNSUPPORTED Unsupport SettingScope.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
ExtractDefault (
|
||||
IN FORM_BROWSER_FORMSET *FormSet,
|
||||
IN FORM_BROWSER_FORM *Form,
|
||||
IN UINT16 DefaultId,
|
||||
IN UINT64 PlatformId,
|
||||
IN BROWSER_SETTING_SCOPE SettingScope
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Reset stack pointer to begin of the stack.
|
||||
|
||||
**/
|
||||
VOID
|
||||
ResetCurrentExpressionStack (
|
||||
VOID
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Push current expression onto the Stack
|
||||
|
||||
@param Pointer Pointer to current expression.
|
||||
|
||||
@retval EFI_SUCCESS The value was pushed onto the stack.
|
||||
@retval EFI_OUT_OF_RESOURCES There is not enough system memory to grow the stack.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
PushCurrentExpression (
|
||||
IN VOID *Pointer
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Pop current expression from the Stack
|
||||
|
||||
@param Pointer Pointer to current expression to be pop.
|
||||
|
||||
@retval EFI_SUCCESS The value was pushed onto the stack.
|
||||
@retval EFI_OUT_OF_RESOURCES There is not enough system memory to grow the stack.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
PopCurrentExpression (
|
||||
OUT VOID **Pointer
|
||||
);
|
||||
|
||||
/**
|
||||
Reset stack pointer to begin of the stack.
|
||||
|
||||
**/
|
||||
VOID
|
||||
ResetMapExpressionListStack (
|
||||
VOID
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Push the list of map expression onto the Stack
|
||||
|
||||
@param Pointer Pointer to the list of map expression to be pushed.
|
||||
|
||||
@retval EFI_SUCCESS The value was pushed onto the stack.
|
||||
@retval EFI_OUT_OF_RESOURCES There is not enough system memory to grow the stack.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
PushMapExpressionList (
|
||||
IN VOID *Pointer
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Pop the list of map expression from the Stack
|
||||
|
||||
@param Pointer Pointer to the list of map expression to be pop.
|
||||
|
||||
@retval EFI_SUCCESS The value was pushed onto the stack.
|
||||
@retval EFI_OUT_OF_RESOURCES There is not enough system memory to grow the stack.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
PopMapExpressionList (
|
||||
OUT VOID **Pointer
|
||||
);
|
||||
|
||||
/**
|
||||
Reset stack pointer to begin of the stack.
|
||||
|
||||
**/
|
||||
VOID
|
||||
ResetScopeStack (
|
||||
VOID
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Push an Operand onto the Stack
|
||||
|
||||
@param Operand Operand to push.
|
||||
|
||||
@retval EFI_SUCCESS The value was pushed onto the stack.
|
||||
@retval EFI_OUT_OF_RESOURCES There is not enough system memory to grow the
|
||||
stack.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
PushScope (
|
||||
IN UINT8 Operand
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Pop an Operand from the Stack
|
||||
|
||||
@param Operand Operand to pop.
|
||||
|
||||
@retval EFI_SUCCESS The value was pushed onto the stack.
|
||||
@retval EFI_OUT_OF_RESOURCES There is not enough system memory to grow the
|
||||
stack.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
PopScope (
|
||||
OUT UINT8 *Operand
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Zero extend integer/boolean/date/time to UINT64 for comparing.
|
||||
|
||||
@param Value HII Value to be converted.
|
||||
|
||||
**/
|
||||
VOID
|
||||
ExtendValueToU64 (
|
||||
IN EFI_HII_VALUE *Value
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Compare two Hii value.
|
||||
|
||||
@param Value1 Expression value to compare on left-hand.
|
||||
@param Value2 Expression value to compare on right-hand.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER Could not perform compare on two values.
|
||||
@retval 0 Two operators equal.
|
||||
@return Positive value if Value1 is greater than Value2.
|
||||
@retval Negative value if Value1 is less than Value2.
|
||||
|
||||
**/
|
||||
INTN
|
||||
CompareHiiValue (
|
||||
IN EFI_HII_VALUE *Value1,
|
||||
IN EFI_HII_VALUE *Value2,
|
||||
IN FORM_BROWSER_FORMSET *FormSet
|
||||
);
|
||||
|
||||
/**
|
||||
Evaluate the result of a HII expression.
|
||||
|
||||
If Expression is NULL, then ASSERT.
|
||||
|
||||
@param FormSet FormSet associated with this expression.
|
||||
@param Form Form associated with this expression.
|
||||
@param Expression Expression to be evaluated.
|
||||
@param ConstantExpression The pointer to the flag of constant expression. If constant, will return TRUE.
|
||||
|
||||
@retval EFI_SUCCESS The expression evaluated successfuly
|
||||
@retval EFI_NOT_FOUND The Question which referenced by a QuestionId
|
||||
could not be found.
|
||||
@retval EFI_OUT_OF_RESOURCES There is not enough system memory to grow the
|
||||
stack.
|
||||
@retval EFI_ACCESS_DENIED The pop operation underflowed the stack
|
||||
@retval EFI_INVALID_PARAMETER Syntax error with the Expression
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EvaluateExpression (
|
||||
IN FORM_BROWSER_FORMSET *FormSet,
|
||||
IN FORM_BROWSER_FORM *Form,
|
||||
IN OUT FORM_EXPRESSION *Expression,
|
||||
IN OUT BOOLEAN *ConstantExpression
|
||||
);
|
||||
|
||||
/**
|
||||
Compare two Uqi parameters
|
||||
|
||||
@param UqiParm1 The pointer to the first Uqi parameter.
|
||||
@param UqiParm2 The pointer to the second Uqi parameter.
|
||||
|
||||
@retval TRUE If these two Uqi parameters are the same, return TRUE;
|
||||
@return FALSE Otherwise, return FALSE;
|
||||
**/
|
||||
BOOLEAN
|
||||
CompareUqiHeader (
|
||||
IN CONST UQI_HEADER *UqiParm1,
|
||||
IN CONST UQI_HEADER *UqiParm2
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Print all ONE_OF ORDER_LIST NUMERIC STRING and CHECKBOX in all fromsets.
|
||||
|
||||
@param Formset The pointer to the entry of the fromset list
|
||||
@param Formset The pointer to the entry of the storage list
|
||||
|
||||
@retval EFI_SUCCESS It was complete successfully
|
||||
@return EFI_ABORTED An error occurred
|
||||
**/
|
||||
EFI_STATUS
|
||||
PrintInfoInAllFormset (
|
||||
IN LIST_ENTRY *FormSetEntryListHead,
|
||||
IN LIST_ENTRY *StorageEntryListHead
|
||||
);
|
||||
|
||||
/**
|
||||
Get the question value with bit field from the buffer.
|
||||
|
||||
@param Question The question refer to bit field.
|
||||
@param Buffer The buffer which the question value get from.
|
||||
@param Value Retun the value.
|
||||
|
||||
**/
|
||||
VOID
|
||||
GetBitsQuestionValue(
|
||||
IN FORM_BROWSER_STATEMENT *Question,
|
||||
IN UINT8 *Buffer,
|
||||
OUT UINT32 *Value
|
||||
);
|
||||
|
||||
/**
|
||||
Set the question value with bit field to the buffer.
|
||||
|
||||
@param Question The question refer to bit field.
|
||||
@param Buffer The buffer which the question value set to.
|
||||
@param Value The value need to set.
|
||||
|
||||
**/
|
||||
VOID
|
||||
SetBitsQuestionValue (
|
||||
IN FORM_BROWSER_STATEMENT *Question,
|
||||
IN UINT8 *Buffer,
|
||||
IN UINT32 Value
|
||||
);
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user