HiiUtilityLib is a helper library that provides the functions to manipulate HII options. Signed-off-by: Nickle Wang <nicklew@nvidia.com> Cc: Abner Chang <abner.chang@amd.com> Cc: Igor Kulchytskyy <igork@ami.com> Cc: Nick Ramirez <nramirez@nvidia.com> Reviewed-by: Abner Chang <abner.chang@amd.com> Reviewed-by: Igor Kulchytskyy <igork @ami.com>
		
			
				
	
	
		
			1205 lines
		
	
	
		
			38 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			1205 lines
		
	
	
		
			38 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @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_
 |