audk/BaseTools/Source/C/FCE/IfrParse.h
Shenglei Zhang 3c59d94637 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>
2019-07-04 11:34:56 +08:00

790 lines
24 KiB
C

/** @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