summaryrefslogtreecommitdiffstats
path: root/RedfishPkg/Include/Library/HiiUtilityLib.h
diff options
context:
space:
mode:
Diffstat (limited to 'RedfishPkg/Include/Library/HiiUtilityLib.h')
-rw-r--r--RedfishPkg/Include/Library/HiiUtilityLib.h1204
1 files changed, 1204 insertions, 0 deletions
diff --git a/RedfishPkg/Include/Library/HiiUtilityLib.h b/RedfishPkg/Include/Library/HiiUtilityLib.h
new file mode 100644
index 0000000000..0999ef77fe
--- /dev/null
+++ b/RedfishPkg/Include/Library/HiiUtilityLib.h
@@ -0,0 +1,1204 @@
+/** @file
+ Definitions of RedfishPlatformConfigLib.
+
+ Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
+ (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
+ 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 <Protocol/DisplayProtocol.h>
+#include <Protocol/HiiConfigAccess.h>
+
+//
+// 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; ///< <ConfigHdr>
+ CHAR16 *ConfigRequest; ///< <ConfigRequest> = <ConfigHdr> + <RequestElement>
+ UINTN ElementCount; ///< Number of <RequestElement> in the <ConfigRequest>
+ 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_