/** @file
Definitions of RedfishPlatformConfigLib.
Copyright (c) 2019, Intel Corporation. All rights reserved.
(C) Copyright 2021 Hewlett Packard Enterprise Development LP
Copyright (c) 2022-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef HII_UTILITY_LIB_
#define HII_UTILITY_LIB_
#include
#include
//
// 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 // EFI Varstore type follow UEFI spec before 2.3.1.
#define EFI_HII_VARSTORE_EFI_VARIABLE_BUFFER 3 // EFI varstore type follow UEFI spec 2.3.1 and later.
///
/// HII_NAME_VALUE_NODE for name/value storage
///
typedef struct {
UINTN Signature;
LIST_ENTRY Link;
CHAR16 *Name;
CHAR16 *Value;
} HII_NAME_VALUE_NODE;
#define HII_NAME_VALUE_NODE_SIGNATURE SIGNATURE_32 ('N', 'V', 'S', 'T')
#define HII_NAME_VALUE_NODE_FROM_LINK(a) CR (a, HII_NAME_VALUE_NODE, Link, HII_NAME_VALUE_NODE_SIGNATURE)
///
/// Storage info
///
typedef union {
EFI_STRING_ID VarName;
UINT16 VarOffset;
} HII_VAR_STORE_INFO;
///
/// FormSet storage
///
typedef struct {
UINTN Signature;
LIST_ENTRY Link;
UINT8 Type; ///< Storage type
EFI_HII_HANDLE HiiHandle; ///< HiiHandle for this varstore.
///
/// For all type of storages.
///
UINT16 VarStoreId; ///< VarStore ID.
EFI_GUID Guid; ///< VarStore Guid.
///
/// For EFI_IFR_VARSTORE, EFI_IFR_VARSTORE_EFI
///
CHAR16 *Name; ///< VarStore name
UINT16 Size; ///< VarStore size.
UINT8 *Buffer; ///< Buffer storage.
UINT8 *EditBuffer; ///< Edit copy for Buffer Storage
///
/// For EFI_IFR_VARSTORE_EFI: EFI Variable.
///
UINT32 Attributes;
///
/// For EFI_IFR_VARSTORE_NAME_VALUE.
///
LIST_ENTRY NameValueList; ///< List of NAME_VALUE_NODE
CHAR16 *ConfigHdr; ///<
CHAR16 *ConfigRequest; ///< = +
UINTN ElementCount; ///< Number of in the
UINTN SpareStrLen; ///< Spare length of ConfigRequest string buffer
} HII_FORMSET_STORAGE;
#define HII_STORAGE_SIGNATURE SIGNATURE_32 ('B', 'S', 'T', 'G')
#define HII_STORAGE_FROM_LINK(a) CR (a, HII_FORMSET_STORAGE, Link, HII_STORAGE_SIGNATURE)
///
/// Definition of EXPRESS_RESULT
///
typedef enum {
ExpressFalse = 0,
ExpressGrayOut,
ExpressSuppress,
ExpressDisable
} EXPRESS_RESULT;
///
/// Definition of EXPRESS_LEVEL
///
typedef enum {
ExpressNone = 0,
ExpressForm,
ExpressStatement,
ExpressOption
} EXPRESS_LEVEL;
///
/// Definition of HII_EXPRESSION_OPCODE_EXTRA
///
typedef union {
EFI_HII_VALUE Value; ///< EFI_IFR_UINT64, EFI_IFR_UINT32, EFI_IFR_UINT16, EFI_IFR_UINT8, EFI_IFR_STRING_REF1
UINT8 Format; ///< For EFI_IFR_TO_STRING, EFI_IFR_FIND
UINT8 Flags; ///< For EFI_IFR_SPAN
UINT8 RuleId; ///< For EFI_IFR_RULE_REF
EFI_GUID Guid; ///< For EFI_IFR_SECURITY, EFI_IFR_MATCH2
struct {
EFI_QUESTION_ID QuestionId;
EFI_HII_VALUE Value;
} EqIdValData;
struct {
EFI_QUESTION_ID QuestionId1;
EFI_QUESTION_ID QuestionId2;
} EqIdIdData;
struct {
EFI_QUESTION_ID QuestionId; ///< For EFI_IFR_EQ_ID_VAL_LIST
UINT16 ListLength;
UINT16 *ValueList;
} EqIdListData;
struct {
EFI_QUESTION_ID QuestionId;
} QuestionRef1Data;
struct {
EFI_STRING_ID DevicePath; ///< For EFI_IFR_QUESTION_REF3_3
EFI_GUID Guid;
} QuestionRef3Data;
struct {
HII_FORMSET_STORAGE *VarStorage;
HII_VAR_STORE_INFO VarStoreInfo;
UINT8 ValueType;
UINT8 ValueWidth;
CHAR16 *ValueName;
} GetSetData;
} HII_EXPRESSION_OPCODE_EXTRA;
typedef union _HII_DEPENDENCY_EXPRESSION HII_DEPENDENCY_EXPRESSION;
///
/// Definition of HII_EXPRESSION_CONSTANT
///
/// Operand:
///
/// EFI_IFR_TRUE
/// EFI_IFR_FALSE
/// EFI_IFR_ONE
/// EFI_IFR_ONES
/// EFI_IFR_ZERO
/// EFI_IFR_UNDEFINED
/// EFI_IFR_VERSION
/// EFI_IFR_UINT8
/// EFI_IFR_UINT16
/// EFI_IFR_UINT32
/// EFI_IFR_UINT64
///
typedef struct {
UINT8 Operand;
EFI_HII_VALUE Value;
} HII_EXPRESSION_CONSTANT;
///
/// Definition of HII_DEPENDENCY_DUP
///
typedef struct {
UINT8 Operand;
} HII_DEPENDENCY_DUP;
///
/// Definition of HII_DEPENDENCY_EQ_ID_VAL
///
typedef struct {
UINT8 Operand;
EFI_QUESTION_ID QuestionId;
EFI_HII_VALUE Value;
} HII_DEPENDENCY_EQ_ID_VAL;
///
/// Definition of HII_DEPENDENCY_EQ_ID_VAL
///
typedef struct {
UINT8 Operand;
EFI_QUESTION_ID QuestionId1;
EFI_QUESTION_ID QuestionId2;
} HII_DEPENDENCY_EQ_ID_ID;
///
/// Definition of HII_DEPENDENCY_EQ_ID_VAL_LIST
///
typedef struct {
UINT8 Operand;
EFI_QUESTION_ID QuestionId;
UINT16 ListLength;
UINT16 *ValueList;
} HII_DEPENDENCY_EQ_ID_VAL_LIST;
///
/// Definition of HII_DEPENDENCY_QUESTION_REF1
///
typedef struct {
UINT8 Operand;
EFI_QUESTION_ID QuestionId;
} HII_DEPENDENCY_QUESTION_REF1;
///
/// Definition of HII_DEPENDENCY_RULE_REF
///
typedef struct {
UINT8 Operand;
UINT8 RuleId;
} HII_DEPENDENCY_RULE_REF;
///
/// Definition of HII_DEPENDENCY_STRING_REF1
///
typedef struct {
UINT8 Operand;
EFI_HII_VALUE Value;
} HII_DEPENDENCY_STRING_REF1;
///
/// Definition of HII_DEPENDENCY_THIS
///
typedef struct {
UINT8 Operand;
EFI_QUESTION_ID QuestionId;
} HII_DEPENDENCY_THIS;
///
/// Definition of HII_DEPENDENCY_SECURITY
///
typedef struct {
UINT8 Operand;
EFI_GUID Permissions;
} HII_DEPENDENCY_SECURITY;
///
/// Definition of HII_DEPENDENCY_GET
///
typedef struct {
UINT8 Operand;
HII_FORMSET_STORAGE *VarStorage;
HII_VAR_STORE_INFO VarStoreInfo;
UINT8 ValueType;
UINT8 ValueWidth;
CHAR16 *ValueName;
} HII_DEPENDENCY_GET;
///
/// Definition of HII_DEPENDENCY_LENGTH
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *SubExpression;
} HII_DEPENDENCY_LENGTH;
///
/// Definition of HII_DEPENDENCY_BITWISE_NOT
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *SubExpression;
} HII_DEPENDENCY_BITWISE_NOT;
///
/// Definition of HII_DEPENDENCY_STRING_REF2
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *SubExpression;
} HII_DEPENDENCY_STRING_REF2;
///
/// Definition of HII_DEPENDENCY_QUESTION_REF2
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *SubExpression;
} HII_DEPENDENCY_QUESTION_REF2;
///
/// Definition of HII_DEPENDENCY_QUESTION_REF3
///
typedef struct {
UINT8 Operand;
EFI_STRING_ID DevicePath;
EFI_GUID Guid;
HII_DEPENDENCY_EXPRESSION *SubExpression;
} HII_DEPENDENCY_QUESTION_REF3;
///
/// Definition of HII_DEPENDENCY_TO_BOOLEAN
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *SubExpression;
} HII_DEPENDENCY_TO_BOOLEAN;
///
/// Definition of HII_DEPENDENCY_TO_STRING
///
typedef struct {
UINT8 Operand;
UINT8 Format;
HII_DEPENDENCY_EXPRESSION *SubExpression;
} HII_DEPENDENCY_TO_STRING;
///
/// Definition of HII_DEPENDENCY_TO_UINT
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *SubExpression;
} HII_DEPENDENCY_TO_UINT;
///
/// Definition of HII_DEPENDENCY_TO_UPPER
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *SubExpression;
} HII_DEPENDENCY_TO_UPPER;
///
/// Definition of HII_DEPENDENCY_TO_LOWER
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *SubExpression;
} HII_DEPENDENCY_TO_LOWER;
///
/// Definition of HII_DEPENDENCY_SET
///
typedef struct {
UINT8 Operand;
HII_FORMSET_STORAGE *VarStorage;
HII_VAR_STORE_INFO VarStoreInfo;
UINT8 ValueType;
UINT8 ValueWidth;
CHAR16 *ValueName;
HII_DEPENDENCY_EXPRESSION *SubExpression;
} HII_DEPENDENCY_SET;
///
/// Definition of HII_DEPENDENCY_NOT
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *SubExpression;
} HII_DEPENDENCY_NOT;
///
/// Definition of HII_DEPENDENCY_CATENATE
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *LeftStringExp;
HII_DEPENDENCY_EXPRESSION *RightStringExp;
} HII_DEPENDENCY_CATENATE;
///
/// Definition of HII_DEPENDENCY_MATCH
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *StringExp;
HII_DEPENDENCY_EXPRESSION *PatternExp;
} HII_DEPENDENCY_MATCH;
///
/// Definition of HII_DEPENDENCY_MATCH2
///
typedef struct {
UINT8 Operand;
EFI_GUID SyntaxType;
HII_DEPENDENCY_EXPRESSION *StringExp;
HII_DEPENDENCY_EXPRESSION *PatternExp;
} HII_DEPENDENCY_MATCH2;
///
/// Definition of HII_DEPENDENCY_MULT
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *RightHandExp;
HII_DEPENDENCY_EXPRESSION *LeftHandExp;
} HII_DEPENDENCY_MULT;
///
/// Definition of HII_DEPENDENCY_DIV
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *RightHandExp; ///< right value
HII_DEPENDENCY_EXPRESSION *LeftHandExp; ///< left value
} HII_DEPENDENCY_DIV;
///
/// Definition of HII_DEPENDENCY_MOD
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *RightHandExp; ///< right value
HII_DEPENDENCY_EXPRESSION *LeftHandExp; ///< left value
} HII_DEPENDENCY_MOD;
///
/// Definition of HII_DEPENDENCY_ADD
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *RightHandExp; ///< right value
HII_DEPENDENCY_EXPRESSION *LeftHandExp; ///< left value
} HII_DEPENDENCY_ADD;
///
/// Definition of HII_DEPENDENCY_SUBTRACT
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *RightHandExp; ///< right value
HII_DEPENDENCY_EXPRESSION *LeftHandExp; ///< left value
} HII_DEPENDENCY_SUBTRACT;
///
/// Definition of HII_DEPENDENCY_SHIFT_LEFT
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *RightHandExp;
HII_DEPENDENCY_EXPRESSION *LeftHandExp;
} HII_DEPENDENCY_SHIFT_LEFT;
///
/// Definition of HII_DEPENDENCY_SHIFT_RIGHT
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *RightHandExp;
HII_DEPENDENCY_EXPRESSION *LeftHandExp;
} HII_DEPENDENCY_SHIFT_RIGHT;
///
/// Definition of HII_DEPENDENCY_GREATER_THAN
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *RightHandExp;
HII_DEPENDENCY_EXPRESSION *LeftHandExp;
} HII_DEPENDENCY_GREATER_THAN;
///
/// Definition of HII_DEPENDENCY_GREATER_EQUAL
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *RightHandExp;
HII_DEPENDENCY_EXPRESSION *LeftHandExp;
} HII_DEPENDENCY_GREATER_EQUAL;
///
/// Definition of HII_DEPENDENCY_LESS_THAN
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *RightHandExp;
HII_DEPENDENCY_EXPRESSION *LeftHandExp;
} HII_DEPENDENCY_LESS_THAN;
///
/// Definition of HII_DEPENDENCY_LESS_EQUAL
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *RightHandExp;
HII_DEPENDENCY_EXPRESSION *LeftHandExp;
} HII_DEPENDENCY_LESS_EQUAL;
///
/// Definition of HII_DEPENDENCY_EQUAL
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *SubExpression1;
HII_DEPENDENCY_EXPRESSION *SubExpression2;
} HII_DEPENDENCY_EQUAL;
///
/// Definition of HII_DEPENDENCY_NOT_EQUAL
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *SubExpression1;
HII_DEPENDENCY_EXPRESSION *SubExpression2;
} HII_DEPENDENCY_NOT_EQUAL;
///
/// Definition of HII_DEPENDENCY_BITWISE_AND
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *SubExpression1;
HII_DEPENDENCY_EXPRESSION *SubExpression2;
} HII_DEPENDENCY_BITWISE_AND;
///
/// Definition of HII_DEPENDENCY_BITWISE_OR
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *SubExpression1;
HII_DEPENDENCY_EXPRESSION *SubExpression2;
} HII_DEPENDENCY_BITWISE_OR;
///
/// Definition of HII_DEPENDENCY_AND
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *SubExpression1;
HII_DEPENDENCY_EXPRESSION *SubExpression2;
} HII_DEPENDENCY_AND;
///
/// Definition of HII_DEPENDENCY_OR
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *SubExpression1;
HII_DEPENDENCY_EXPRESSION *SubExpression2;
} HII_DEPENDENCY_OR;
///
/// Definition of HII_DEPENDENCY_CONDITIONAL
///
/// Ternary expression
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *CondTrueValExp; ///< right value
HII_DEPENDENCY_EXPRESSION *CondFalseValExp; ///< middle value
HII_DEPENDENCY_EXPRESSION *ConditionExp; ///< left value
} HII_DEPENDENCY_CONDITIONAL;
///
/// Definition of HII_DEPENDENCY_FIND
///
typedef struct {
UINT8 Operand;
UINT8 Format;
HII_DEPENDENCY_EXPRESSION *IndexExp; ///< right value
HII_DEPENDENCY_EXPRESSION *StringToCompWithExp; ///< middle value
HII_DEPENDENCY_EXPRESSION *StringToSearchExp; ///< left value
} HII_DEPENDENCY_FIND;
///
/// Definition of HII_DEPENDENCY_MID
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *LengthExp; ///< right value
HII_DEPENDENCY_EXPRESSION *IndexExp; ///< middle value
HII_DEPENDENCY_EXPRESSION *StringOrBufferExp; ///< left value
} HII_DEPENDENCY_MID;
///
/// Definition of HII_DEPENDENCY_TOKEN
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *IndexExp; ///< right value
HII_DEPENDENCY_EXPRESSION *DelimiterExp; ///< middle value
HII_DEPENDENCY_EXPRESSION *StringToSearchExp; ///< left value
} HII_DEPENDENCY_TOKEN;
///
/// Definition of HII_DEPENDENCY_SPAN
///
typedef struct {
UINT8 Operand;
UINT8 Flags;
HII_DEPENDENCY_EXPRESSION *IndexExp; ///< right value
HII_DEPENDENCY_EXPRESSION *CharsetExp; ///< middle value
HII_DEPENDENCY_EXPRESSION *StringToSearchExp; ///< left value
} HII_DEPENDENCY_SPAN;
///
/// Map expression
///
typedef struct {
HII_DEPENDENCY_EXPRESSION *MatchExp;
HII_DEPENDENCY_EXPRESSION *ReturnExp;
} HII_DEPENDENCY_EXPRESSION_PAIR;
///
/// Definition of HII_DEPENDENCY_MAP
///
typedef struct {
UINT8 Operand;
HII_DEPENDENCY_EXPRESSION *SubExp;
HII_DEPENDENCY_EXPRESSION_PAIR *ExpPair;
UINT8 ExpPairNo;
} HII_DEPENDENCY_MAP;
///
/// Definition of HII_DEPENDENCY_EXPRESSION
///
union _HII_DEPENDENCY_EXPRESSION {
///
/// Constant
///
HII_EXPRESSION_CONSTANT ConstantExp;
///
/// build-in expression
///
HII_DEPENDENCY_DUP DupExp;
HII_DEPENDENCY_EQ_ID_VAL EqIdValExp;
HII_DEPENDENCY_EQ_ID_ID EqIdIdExp;
HII_DEPENDENCY_EQ_ID_VAL_LIST EqIdListExp;
HII_DEPENDENCY_QUESTION_REF1 QuestionRef1Exp;
HII_DEPENDENCY_RULE_REF RuleRefExp;
HII_DEPENDENCY_STRING_REF1 StringRef1Exp;
HII_DEPENDENCY_THIS ThisExp;
HII_DEPENDENCY_SECURITY SecurityExp;
HII_DEPENDENCY_GET GetExp;
///
/// unary expression
///
HII_DEPENDENCY_LENGTH LengthExp;
HII_DEPENDENCY_BITWISE_NOT BitWiseNotExp;
HII_DEPENDENCY_STRING_REF2 StringRef2Exp;
HII_DEPENDENCY_QUESTION_REF2 QuestionRef2Exp;
HII_DEPENDENCY_QUESTION_REF3 QuestionRef3Exp;
HII_DEPENDENCY_TO_BOOLEAN ToBooleanExp;
HII_DEPENDENCY_TO_STRING ToStringExp;
HII_DEPENDENCY_TO_UINT ToUintExp;
HII_DEPENDENCY_TO_UPPER ToUpperExp;
HII_DEPENDENCY_TO_LOWER ToLowerExp;
HII_DEPENDENCY_SET SetExp;
HII_DEPENDENCY_NOT NotExp;
///
/// Binary expression
///
HII_DEPENDENCY_CATENATE CatenateExp;
HII_DEPENDENCY_MATCH MatchExp;
HII_DEPENDENCY_MATCH2 Match2Exp;
HII_DEPENDENCY_MULT MultExp;
HII_DEPENDENCY_DIV DivExp;
HII_DEPENDENCY_MOD ModExp;
HII_DEPENDENCY_ADD AddExp;
HII_DEPENDENCY_SUBTRACT SubtractExp;
HII_DEPENDENCY_SHIFT_LEFT ShiftLeftExp;
HII_DEPENDENCY_SHIFT_RIGHT ShiftRightExp;
HII_DEPENDENCY_GREATER_THAN GreaterThanExp;
HII_DEPENDENCY_GREATER_EQUAL GreaterEqualExp;
HII_DEPENDENCY_LESS_THAN LessThanExp;
HII_DEPENDENCY_LESS_EQUAL LessEqualExp;
HII_DEPENDENCY_EQUAL EqualExp;
HII_DEPENDENCY_NOT_EQUAL NotEqualExp;
HII_DEPENDENCY_BITWISE_AND BitwiseAndExp;
HII_DEPENDENCY_BITWISE_OR BitwiseOrExp;
HII_DEPENDENCY_AND AndExp;
HII_DEPENDENCY_OR OrExp;
///
/// ternary expression
///
HII_DEPENDENCY_CONDITIONAL ConditionalExp;
HII_DEPENDENCY_FIND FindExp;
HII_DEPENDENCY_MID MidExp;
HII_DEPENDENCY_TOKEN TokenExp;
HII_DEPENDENCY_SPAN SpanExp;
HII_DEPENDENCY_MAP MapExp;
};
///
/// Definition of HII_EXPRESSION_OPCODE
///
typedef struct {
UINTN Signature;
LIST_ENTRY Link;
UINT8 Operand;
HII_EXPRESSION_OPCODE_EXTRA ExtraData;
LIST_ENTRY MapExpressionList; ///< nested expressions inside of Map opcode.
} HII_EXPRESSION_OPCODE;
#define HII_EXPRESSION_OPCODE_SIGNATURE SIGNATURE_32 ('E', 'X', 'O', 'P')
#define HII_EXPRESSION_OPCODE_FROM_LINK(a) CR (a, HII_EXPRESSION_OPCODE, Link, HII_EXPRESSION_OPCODE_SIGNATURE)
///
/// Definition of HII_WARNING_IF_DATA
///
typedef struct {
EFI_STRING_ID WarningIfError;
UINT8 TimeOut;
} HII_WARNING_IF_DATA;
///
/// Definition of HII_EXTRA_DATA
///
typedef union {
UINT8 RuleId; ///< For EFI_IFR_RULE only
EFI_STRING_ID Error; ///< For EFI_IFR_NO_SUBMIT_IF, EFI_IFR_INCONSISTENT_IF only
HII_WARNING_IF_DATA WarningIfData;
} HII_EXTRA_DATA;
///
/// Definition of HII_EXPRESSION
///
typedef struct {
UINTN Signature;
LIST_ENTRY Link;
UINT8 Type; ///< Type for this expression
EFI_IFR_OP_HEADER *OpCode; ///< Save the opcode buffer.
LIST_ENTRY OpCodeListHead; ///< OpCodes consist of this expression (HII_EXPRESSION_OPCODE)
HII_DEPENDENCY_EXPRESSION *RootDependencyExp; ///< Expression OpCodes tree layout to describe dependency of this expression.
HII_EXTRA_DATA ExtraData;
EFI_HII_VALUE Result; ///< Expression evaluation result
} HII_EXPRESSION;
#define HII_EXPRESSION_SIGNATURE SIGNATURE_32 ('F', 'E', 'X', 'P')
#define HII_EXPRESSION_FROM_LINK(a) CR (a, HII_EXPRESSION, Link, HII_EXPRESSION_SIGNATURE)
///
/// Definition of HII_EXPRESSION_LIST
///
typedef struct {
UINTN Signature;
UINTN Count;
HII_EXPRESSION *Expression[1]; ///< Array[Count] of expressions
} HII_EXPRESSION_LIST;
#define HII_EXPRESSION_LIST_SIGNATURE SIGNATURE_32 ('F', 'E', 'X', 'R')
///
/// Definition of HII_STATEMENT_VALUE
///
typedef struct {
///
/// HII Data Type
///
UINT8 Type;
EFI_IFR_TYPE_VALUE Value;
///
/// Buffer Data and Length if Type is EFI_IFR_TYPE_BUFFER or EFI_IFR_TYPE_STRING
///
UINT8 *Buffer;
UINT16 BufferLen;
UINT8 BufferValueType; ///< Data type for buffer internal data, currently only for orderedlist
} HII_STATEMENT_VALUE;
///
/// Default value
///
typedef struct {
UINTN Signature;
LIST_ENTRY Link;
UINT16 DefaultId;
HII_STATEMENT_VALUE Value; ///< Default value
HII_EXPRESSION *ValueExpression; ///< Not-NULL indicates default value is provided by EFI_IFR_VALUE
} HII_QUESTION_DEFAULT;
#define HII_QUESTION_DEFAULT_SIGNATURE SIGNATURE_32 ('Q', 'D', 'F', 'T')
#define HII_QUESTION_DEFAULT_FROM_LINK(a) CR (a, HII_QUESTION_DEFAULT, Link, HII_QUESTION_DEFAULT_SIGNATURE)
#define HII_QUESTION_OPTION_SIGNATURE SIGNATURE_32 ('Q', 'O', 'P', 'T')
///
/// Option value
///
typedef struct {
UINTN Signature;
LIST_ENTRY Link;
EFI_IFR_ONE_OF_OPTION *OpCode; ///< OneOfOption Data
EFI_STRING_ID Text;
UINT8 Flags;
HII_STATEMENT_VALUE Value;
EFI_IMAGE_ID ImageId;
HII_EXPRESSION_LIST *SuppressExpression; ///< Non-NULL indicates nested inside of SuppressIf
} HII_QUESTION_OPTION;
#define HII_QUESTION_OPTION_FROM_LINK(a) CR (a, HII_QUESTION_OPTION, Link, HII_QUESTION_OPTION_SIGNATURE)
///
/// class of default
///
typedef struct {
UINTN Signature;
LIST_ENTRY Link;
UINT16 DefaultId;
EFI_STRING_ID DefaultName;
} HII_FORMSET_DEFAULTSTORE;
#define HII_FORMSET_DEFAULTSTORE_SIGNATURE SIGNATURE_32 ('F', 'D', 'F', 'S')
#define HII_FORMSET_DEFAULTSTORE_FROM_LINK(a) CR (a, HII_FORMSET_DEFAULTSTORE, Link, HII_FORMSET_DEFAULTSTORE_SIGNATURE)
///
/// Definition of HII_STATEMENT_EXTRA
///
typedef union {
UINT8 Flags;
EFI_STRING_ID TextTwo;
EFI_DEFAULT_ID DefaultId;
EFI_STRING_ID QuestionConfig;
EFI_GUID Guid;
struct {
UINT8 Flags;
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_GUID Guid;
} NumData;
struct {
UINT8 Flags;
UINT8 MaxContainers; ///< for EFI_IFR_ORDERED_LIST
} OrderListData;
struct {
UINT8 Flags;
UINT8 MinSize;
UINT8 MaxSize;
} StrData;
struct {
UINT16 MinSize;
UINT16 MaxSize;
} PwdData;
} HII_STATEMENT_EXTRA;
///
/// Statement (Question)
///
typedef struct _HII_STATEMENT HII_STATEMENT;
struct _HII_STATEMENT {
UINTN Signature;
LIST_ENTRY Link;
UINT8 Operand; ///< The operand (first byte) of this Statement or Question
EFI_IFR_OP_HEADER *OpCode;
///
/// Statement Header
///
EFI_STRING_ID Prompt;
EFI_STRING_ID Help;
///
/// Question Header
///
EFI_QUESTION_ID QuestionId; ///< Question id, the value of zero is reserved
EFI_VARSTORE_ID VarStoreId; ///< VarStore id, a value of zero indicates no variable storage
HII_VAR_STORE_INFO VarStoreInfo; ///< VarStoreInfoIf VarStoreId refers to Buffer Storage (EFI_IFR_VARSTORE or EFI_IFR_VARSTORE_EFI), then VarStoreInfo contains a 16-bit Buffer Storage offset (VarOffset).
///< If VarStoreId refers to Name/Value Storage (EFI_IFR_VARSTORE_NAME_VALUE), then VarStoreInfo contains the String ID of the name (VarName) for this name/value pair.
UINT8 QuestionFlags; ///< The flag of this Question.(Readonly, reset required, callback attribute....)
BOOLEAN QuestionReferToBitField; ///< Whether the question is stored in a bit field.
UINT16 StorageWidth; ///< The storage width of this Question.
UINT16 BitStorageWidth; ///< The Storage width of this Question in bit level.
UINT16 BitVarOffset; ///< The storage offset of this Question in bit level.
CHAR16 *VariableName; ///< Name/Value or EFI Variable name
CHAR16 *BlockName; ///< Buffer storage block name: "OFFSET=...WIDTH=..."
HII_FORMSET_STORAGE *Storage; ///< Point to the storage that store this question.
HII_STATEMENT_EXTRA ExtraData;
BOOLEAN Locked; ///< Whether this statement is locked.
HII_STATEMENT_VALUE Value;
///
/// Get from IFR parsing
///
HII_STATEMENT *ParentStatement; ///< Parent Statement of current statement.
HII_EXPRESSION_LIST *ExpressionList; ///< nesting inside of GrayedOutIf/DisableIf/SuppressIf
HII_EXPRESSION *ValueExpression; ///< nested EFI_IFR_VALUE, provide Question value and indicate Question is ReadOnly
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
LIST_ENTRY DefaultListHead; ///< nested EFI_IFR_DEFAULT list (HII_QUESTION_DEFAULT), provide default values
LIST_ENTRY OptionListHead; ///< nested EFI_IFR_ONE_OF_OPTION list (HII_QUESTION_OPTION)
LIST_ENTRY InconsistentListHead; ///< nested inconsistent expression list (HII_EXPRESSION)
LIST_ENTRY NoSubmitListHead; ///< nested nosubmit expression list (HII_EXPRESSION)
LIST_ENTRY WarningListHead; ///< nested warning expression list (HII_EXPRESSION)
HII_EXPRESSION *ReadExpression; ///< nested EFI_IFR_READ, provide this question value by read expression.
HII_EXPRESSION *WriteExpression; ///< nested EFI_IFR_WRITE, evaluate write expression after this question value is set.
};
#define HII_STATEMENT_SIGNATURE SIGNATURE_32 ('H', 'S', 'T', 'A')
#define HII_STATEMENT_FROM_LINK(a) CR (a, HII_STATEMENT, Link, HII_STATEMENT_SIGNATURE)
///
/// Form
///
#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.
EFI_IMAGE_ID ImageId; ///< The image id.
BOOLEAN ModalForm; ///< Whether this is a modal form.
BOOLEAN Locked; ///< Whether this form is locked.
EFI_GUID RefreshGuid; ///< Form refresh event guid.
LIST_ENTRY StatementListHead; ///< List of Statements and Questions (HII_STATEMENT)
LIST_ENTRY ConfigRequestHead; ///< List of configrequest for all storage.
LIST_ENTRY RuleListHead; ///< nested EFI_IFR_RULE list, pre-defined expressions attached to the form.
HII_EXPRESSION_LIST *SuppressExpression; ///< nesting inside of SuppressIf
} HII_FORM;
#define HII_FORM_SIGNATURE SIGNATURE_32 ('F', 'F', 'R', 'M')
#define HII_FORM_FROM_LINK(a) CR (a, HII_FORM, Link, HII_FORM_SIGNATURE)
///
/// FormSet
///
typedef struct {
UINTN Signature;
LIST_ENTRY Link;
EFI_HII_HANDLE HiiHandle; ///< Unique id for formset, HII Handle of this FormSet package.
EFI_HANDLE DriverHandle; ///< EFI_HANDLE which was registered with the package list in NewPackageList().
EFI_HII_CONFIG_ACCESS_PROTOCOL *ConfigAccess; ///< ConfigAccess Protocol associated with this HiiPackageList
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
UINTN IfrBinaryLength; ///< Ifr binary data length of this formset.
UINT8 *IfrBinaryData; ///< Point to the Ifr binary data.
EFI_GUID Guid; ///< Formset Guid.
EFI_STRING_ID FormSetTitle; ///< String Id of Formset title.
EFI_STRING_ID Help; ///< String Id of Formset title.
UINT8 NumberOfClassGuid; ///< Class Guid name
EFI_GUID ClassGuid[3]; ///< Up to three ClassGuid
EFI_IMAGE_ID ImageId; ///< The image id.
LIST_ENTRY StatementListOSF; ///< Statement list out side of the form.
LIST_ENTRY StorageListHead; ///< Storage list (HII_FORMSET_STORAGE)
LIST_ENTRY DefaultStoreListHead; ///< DefaultStore list (HII_FORMSET_DEFAULTSTORE)
LIST_ENTRY FormListHead; ///< Form list (HII_FORM_BROWSER_FORM)
} HII_FORMSET;
#define HII_FORMSET_SIGNATURE SIGNATURE_32 ('H', 'I', 'F', 'S')
#define HII_FORMSET_FROM_LINK(a) CR (a, HII_FORMSET, Link, HII_FORMSET_SIGNATURE)
///
/// Get/set question value from/to.
///
typedef enum {
GetSetValueWithBuffer = 0, ///< Get/Set question value from/to buffer in the storage.
GetSetValueWithHiiDriver, ///< Get/Set question value from/to hii driver.
GetSetValueWithBoth, ///< Compare the editbuffer with buffer for this question, not use the question value.
GetSetValueWithMax ///< Invalid value.
} GET_SET_QUESTION_VALUE_WITH;
/**
Initialize the internal data structure of a FormSet.
@param[in] Handle PackageList Handle
@param[in,out] FormSetGuid On input, GUID or class GUID of a formset. If not
specified (NULL or zero GUID), take the first
FormSet with class GUID EFI_HII_PLATFORM_SETUP_FORMSET_GUID
found in package list.
On output, GUID of the formset found(if not NULL).
@param[out] FormSet FormSet data structure.
@retval EFI_SUCCESS The function completed successfully.
@retval EFI_NOT_FOUND The specified FormSet could not be found.
**/
EFI_STATUS
CreateFormSetFromHiiHandle (
IN EFI_HII_HANDLE Handle,
IN OUT EFI_GUID *FormSetGuid,
OUT HII_FORMSET *FormSet
);
/**
Initialize a Formset and get current setting for Questions.
@param[in,out] FormSet FormSet data structure.
**/
VOID
InitializeFormSet (
IN OUT HII_FORMSET *FormSet
);
/**
Free resources allocated for a FormSet.
@param[in,out] FormSet Pointer of the FormSet
**/
VOID
DestroyFormSet (
IN OUT HII_FORMSET *FormSet
);
/**
Save Question Value to the memory, but not to storage.
@param[in] FormSet FormSet data structure.
@param[in] Form Form data structure.
@param[in,out] Question Pointer to the Question.
@param[in] QuestionValue New Question Value to be set.
@retval EFI_SUCCESS The question value has been set successfully.
@retval EFI_INVALID_PARAMETER One or more parameters are invalid.
**/
EFI_STATUS
SetQuestionValue (
IN HII_FORMSET *FormSet,
IN HII_FORM *Form,
IN OUT HII_STATEMENT *Question,
IN HII_STATEMENT_VALUE *QuestionValue
);
/**
Get Question's current Value from storage.
@param[in] FormSet FormSet data structure.
@param[in] Form Form data structure.
@param[in,out] Question Question to be initialized.
@return the current Question Value in storage if success.
@return NULL if Question is not found or any error occurs.
**/
HII_STATEMENT_VALUE *
RetrieveQuestion (
IN HII_FORMSET *FormSet,
IN HII_FORM *Form,
IN OUT HII_STATEMENT *Question
);
/**
Get Question's current Value.
@param[in] FormSet FormSet data structure.
@param[in] Form Form data structure.
@param[out] Question Question to be initialized.
@param[in] GetValueFrom Where to get value, may from editbuffer, buffer or hii driver.
@retval EFI_SUCCESS The function completed successfully.
@retval EFI_INVALID_PARAMETER Formset, Form or Question is NULL.
**/
EFI_STATUS
GetQuestionValue (
IN HII_FORMSET *FormSet,
IN HII_FORM *Form,
IN OUT HII_STATEMENT *Question,
IN GET_SET_QUESTION_VALUE_WITH GetValueFrom
);
/**
Submit data for a form.
@param[in] FormSet FormSet which contains the Form.
@param[in] Form Form to submit.
@retval EFI_SUCCESS The function completed successfully.
@retval Others Other errors occur.
**/
EFI_STATUS
SubmitForm (
IN HII_FORMSET *FormSet,
IN HII_FORM *Form
);
/**
Evaluate the result of a HII expression.
If Expression is NULL, then ASSERT.
@param[in] FormSet FormSet associated with this expression.
@param[in] Form Form associated with this expression.
@param[in,out] Expression Expression to be evaluated.
@retval EFI_SUCCESS The expression evaluated successfully
@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
EvaluateHiiExpression (
IN HII_FORMSET *FormSet,
IN HII_FORM *Form,
IN OUT HII_EXPRESSION *Expression
);
/**
Retrieve dependencies within an expression. These dependencies can express how
this expression will be evaluated.
@param[in] Expression Expression to retrieve dependencies.
@retval EFI_SUCCESS The dependencies were successfully retrieved.
@retval EFI_OUT_OF_RESOURCES There is not enough system memory.
**/
EFI_STATUS
GetHiiExpressionDependency (
IN HII_EXPRESSION *Expression
);
/**
Get default value of question.
@param[in] FormSet The form set.
@param[in] Form The form.
@param[in] Question The question.
@param[in] DefaultId The Class of the default.
@param[out] DefaultValue The default value of given question.
@retval EFI_SUCCESS Question is reset to default value.
**/
EFI_STATUS
GetQuestionDefault (
IN HII_FORMSET *FormSet,
IN HII_FORM *Form,
IN HII_STATEMENT *Question,
IN UINT16 DefaultId,
OUT HII_STATEMENT_VALUE *DefaultValue
);
/**
Return the result of the expression list. Check the expression list and
return the highest priority express result.
Priority: DisableIf > SuppressIf > GrayOutIf > FALSE
@param[in] ExpList The input expression list.
@param[in] Evaluate Whether need to evaluate the expression first.
@param[in] FormSet FormSet associated with this expression.
@param[in] Form Form associated with this expression.
@retval EXPRESS_RESULT Return the higher priority express result.
DisableIf > SuppressIf > GrayOutIf > FALSE
**/
EXPRESS_RESULT
EvaluateExpressionList (
IN HII_EXPRESSION_LIST *ExpList,
IN BOOLEAN Evaluate,
IN HII_FORMSET *FormSet OPTIONAL,
IN HII_FORM *Form OPTIONAL
);
#endif // HII_UTILITY_LIB_