/** @file | |
Private MACRO, structure and function definitions for Setup Browser module. | |
Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#ifndef _SETUP_H_ | |
#define _SETUP_H_ | |
#include <PiDxe.h> | |
#include <Protocol/SimpleTextOut.h> | |
#include <Protocol/SimpleTextIn.h> | |
#include <Protocol/FormBrowser2.h> | |
#include <Protocol/FormBrowserEx2.h> | |
#include <Protocol/DisplayProtocol.h> | |
#include <Protocol/DevicePath.h> | |
#include <Protocol/UnicodeCollation.h> | |
#include <Protocol/HiiConfigAccess.h> | |
#include <Protocol/HiiConfigRouting.h> | |
#include <Protocol/HiiDatabase.h> | |
#include <Protocol/HiiString.h> | |
#include <Protocol/UserManager.h> | |
#include <Protocol/DevicePathFromText.h> | |
#include <Protocol/RegularExpressionProtocol.h> | |
#include <Guid/MdeModuleHii.h> | |
#include <Guid/HiiPlatformSetupFormset.h> | |
#include <Guid/HiiFormMapMethodGuid.h> | |
#include <Guid/ZeroGuid.h> | |
#include <Library/PrintLib.h> | |
#include <Library/DebugLib.h> | |
#include <Library/BaseMemoryLib.h> | |
#include <Library/UefiRuntimeServicesTableLib.h> | |
#include <Library/UefiDriverEntryPoint.h> | |
#include <Library/UefiBootServicesTableLib.h> | |
#include <Library/BaseLib.h> | |
#include <Library/MemoryAllocationLib.h> | |
#include <Library/HiiLib.h> | |
#include <Library/PcdLib.h> | |
#include <Library/DevicePathLib.h> | |
#include <Library/UefiLib.h> | |
// | |
// This is the generated header file which includes whatever needs to be exported (strings + IFR) | |
// | |
#define UI_ACTION_NONE 0 | |
#define UI_ACTION_REFRESH_FORM 1 | |
#define UI_ACTION_REFRESH_FORMSET 2 | |
#define UI_ACTION_EXIT 3 | |
// | |
// | |
// Time definitions | |
// | |
#define ONE_SECOND 10000000 | |
// Incremental string lenght of ConfigRequest | |
// | |
#define CONFIG_REQUEST_STRING_INCREMENTAL 1024 | |
// | |
// Incremental size of stack for expression | |
// | |
#define EXPRESSION_STACK_SIZE_INCREMENT 0x100 | |
#define EFI_IFR_SPECIFICATION_VERSION (UINT16) (((EFI_SYSTEM_TABLE_REVISION >> 16) << 8) | (((EFI_SYSTEM_TABLE_REVISION & 0xFFFF) / 10) << 4) | ((EFI_SYSTEM_TABLE_REVISION & 0xFFFF) % 10)) | |
#define SETUP_DRIVER_SIGNATURE SIGNATURE_32 ('F', 'B', 'D', 'V') | |
typedef struct { | |
UINT32 Signature; | |
EFI_HANDLE Handle; | |
// | |
// Produced protocol | |
// | |
EFI_FORM_BROWSER2_PROTOCOL FormBrowser2; | |
EDKII_FORM_BROWSER_EXTENSION_PROTOCOL FormBrowserEx; | |
EDKII_FORM_BROWSER_EXTENSION2_PROTOCOL FormBrowserEx2; | |
} SETUP_DRIVER_PRIVATE_DATA; | |
// | |
// 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. | |
#define FORM_INCONSISTENT_VALIDATION 0 | |
#define FORM_NO_SUBMIT_VALIDATION 1 | |
#define NAME_VALUE_NODE_SIGNATURE SIGNATURE_32 ('N', 'V', 'S', 'T') | |
typedef struct { | |
UINTN Signature; | |
LIST_ENTRY Link; | |
CHAR16 *Name; | |
CHAR16 *Value; | |
CHAR16 *EditValue; | |
} NAME_VALUE_NODE; | |
#define NAME_VALUE_NODE_FROM_LINK(a) CR (a, NAME_VALUE_NODE, Link, NAME_VALUE_NODE_SIGNATURE) | |
#define BROWSER_STORAGE_SIGNATURE SIGNATURE_32 ('B', 'S', 'T', 'G') | |
typedef struct { | |
UINTN Signature; | |
LIST_ENTRY Link; | |
UINT8 Type; // Storage type | |
BOOLEAN Initialized; // Whether this varstore is initialized, efi varstore not used. | |
EFI_HII_HANDLE HiiHandle; // HiiHandle for this varstore, efi varstore not used. | |
EFI_GUID Guid; | |
CHAR16 *Name; // For EFI_IFR_VARSTORE | |
UINT16 Size; | |
UINT8 *Buffer; | |
UINT8 *EditBuffer; // Edit copy for Buffer Storage | |
LIST_ENTRY NameValueListHead; // List of NAME_VALUE_NODE | |
UINT32 Attributes; // For EFI_IFR_VARSTORE_EFI: EFI Variable attribute | |
CHAR16 *ConfigRequest; // <ConfigRequest> = <ConfigHdr> + <RequestElement> | |
// <RequestElement> includes all fields which is used by current form sets. | |
UINTN SpareStrLen; // Spare length of ConfigRequest string buffer | |
} BROWSER_STORAGE; | |
#define BROWSER_STORAGE_FROM_LINK(a) CR (a, BROWSER_STORAGE, Link, BROWSER_STORAGE_SIGNATURE) | |
#define FORMSET_STORAGE_SIGNATURE SIGNATURE_32 ('F', 'S', 'T', 'G') | |
typedef struct { | |
UINTN Signature; | |
LIST_ENTRY Link; | |
LIST_ENTRY SaveFailLink; | |
UINT16 VarStoreId; | |
BROWSER_STORAGE *BrowserStorage; | |
CHAR16 *ConfigHdr; // <ConfigHdr> | |
CHAR16 *ConfigRequest; // <ConfigRequest> = <ConfigHdr> + <RequestElement> | |
CHAR16 *ConfigAltResp; // Alt config response string for this ConfigRequest. | |
BOOLEAN HasCallAltCfg; // Flag to show whether browser has call ExtractConfig to get Altcfg string. | |
UINTN ElementCount; // Number of <RequestElement> in the <ConfigRequest> | |
UINTN SpareStrLen; // Spare length of ConfigRequest string buffer | |
CHAR16 *RestoreConfigRequest; // When submit formset fail, the element need to be restored | |
CHAR16 *SyncConfigRequest; // When submit formset fail, the element need to be synced | |
} FORMSET_STORAGE; | |
#define FORMSET_STORAGE_FROM_LINK(a) CR (a, FORMSET_STORAGE, Link, FORMSET_STORAGE_SIGNATURE) | |
#define FORMSET_STORAGE_FROM_SAVE_FAIL_LINK(a) CR (a, FORMSET_STORAGE, SaveFailLink, FORMSET_STORAGE_SIGNATURE) | |
typedef union { | |
EFI_STRING_ID VarName; | |
UINT16 VarOffset; | |
} VAR_STORE_INFO; | |
#define EXPRESSION_OPCODE_SIGNATURE SIGNATURE_32 ('E', 'X', 'O', 'P') | |
typedef struct { | |
UINTN Signature; | |
LIST_ENTRY Link; | |
UINT8 Operand; | |
UINT8 Format; // For EFI_IFR_TO_STRING, EFI_IFR_FIND | |
UINT8 Flags; // For EFI_IFR_SPAN | |
UINT8 RuleId; // For EFI_IFR_RULE_REF | |
EFI_HII_VALUE Value; // For EFI_IFR_EQ_ID_VAL, EFI_IFR_UINT64, EFI_IFR_UINT32, EFI_IFR_UINT16, EFI_IFR_UINT8, EFI_IFR_STRING_REF1 | |
EFI_QUESTION_ID QuestionId; // For EFI_IFR_EQ_ID_ID, EFI_IFR_EQ_ID_VAL_LIST, EFI_IFR_QUESTION_REF1 | |
EFI_QUESTION_ID QuestionId2; | |
UINT16 ListLength; // For EFI_IFR_EQ_ID_VAL_LIST | |
UINT16 *ValueList; | |
EFI_STRING_ID DevicePath; // For EFI_IFR_QUESTION_REF3_2, EFI_IFR_QUESTION_REF3_3 | |
EFI_GUID Guid; | |
BROWSER_STORAGE *VarStorage; // For EFI_IFR_SET, EFI_IFR_GET | |
VAR_STORE_INFO VarStoreInfo; // For EFI_IFR_SET, EFI_IFR_GET | |
UINT8 ValueType; // For EFI_IFR_SET, EFI_IFR_GET | |
UINT8 ValueWidth; // For EFI_IFR_SET, EFI_IFR_GET | |
CHAR16 *ValueName; // For EFI_IFR_SET, EFI_IFR_GET | |
LIST_ENTRY MapExpressionList; // nested expressions inside of Map opcode. | |
} EXPRESSION_OPCODE; | |
#define EXPRESSION_OPCODE_FROM_LINK(a) CR (a, EXPRESSION_OPCODE, Link, EXPRESSION_OPCODE_SIGNATURE) | |
#define FORM_EXPRESSION_SIGNATURE SIGNATURE_32 ('F', 'E', 'X', 'P') | |
typedef struct { | |
UINTN Signature; | |
LIST_ENTRY Link; | |
UINT8 Type; // Type for this expression | |
UINT8 RuleId; // For EFI_IFR_RULE only | |
EFI_STRING_ID Error; // For EFI_IFR_NO_SUBMIT_IF, EFI_IFR_INCONSISTENT_IF only | |
EFI_HII_VALUE Result; // Expression evaluation result | |
UINT8 TimeOut; // For EFI_IFR_WARNING_IF | |
EFI_IFR_OP_HEADER *OpCode; // Save the opcode buffer. | |
LIST_ENTRY OpCodeListHead; // OpCodes consist of this expression (EXPRESSION_OPCODE) | |
} FORM_EXPRESSION; | |
#define FORM_EXPRESSION_FROM_LINK(a) CR (a, FORM_EXPRESSION, Link, FORM_EXPRESSION_SIGNATURE) | |
#define FORM_EXPRESSION_LIST_SIGNATURE SIGNATURE_32 ('F', 'E', 'X', 'R') | |
typedef struct { | |
UINTN Signature; | |
UINTN Count; | |
FORM_EXPRESSION *Expression[1]; // Array[Count] of expressions | |
} FORM_EXPRESSION_LIST; | |
#define QUESTION_DEFAULT_SIGNATURE SIGNATURE_32 ('Q', 'D', 'F', 'T') | |
typedef struct { | |
UINTN Signature; | |
LIST_ENTRY Link; | |
UINT16 DefaultId; | |
EFI_HII_VALUE Value; // Default value | |
FORM_EXPRESSION *ValueExpression; // Not-NULL indicates default value is provided by EFI_IFR_VALUE | |
} QUESTION_DEFAULT; | |
#define QUESTION_DEFAULT_FROM_LINK(a) CR (a, QUESTION_DEFAULT, Link, QUESTION_DEFAULT_SIGNATURE) | |
#define QUESTION_OPTION_SIGNATURE SIGNATURE_32 ('Q', 'O', 'P', 'T') | |
typedef struct { | |
UINTN Signature; | |
LIST_ENTRY Link; | |
EFI_IFR_ONE_OF_OPTION *OpCode; // OneOfOption Data | |
EFI_STRING_ID Text; | |
UINT8 Flags; | |
EFI_HII_VALUE Value; | |
EFI_IMAGE_ID ImageId; | |
FORM_EXPRESSION_LIST *SuppressExpression; // Non-NULL indicates nested inside of SuppressIf | |
} QUESTION_OPTION; | |
#define QUESTION_OPTION_FROM_LINK(a) CR (a, QUESTION_OPTION, Link, QUESTION_OPTION_SIGNATURE) | |
typedef enum { | |
ExpressFalse = 0, | |
ExpressGrayOut, | |
ExpressSuppress, | |
ExpressDisable | |
} EXPRESS_RESULT; | |
typedef enum { | |
ExpressNone = 0, | |
ExpressForm, | |
ExpressStatement, | |
ExpressOption | |
} EXPRESS_LEVEL; | |
typedef struct _FORM_BROWSER_STATEMENT FORM_BROWSER_STATEMENT; | |
#define FORM_BROWSER_STATEMENT_SIGNATURE SIGNATURE_32 ('F', 'S', 'T', 'A') | |
struct _FORM_BROWSER_STATEMENT { | |
UINTN Signature; | |
LIST_ENTRY Link; | |
UINT8 Operand; // The operand (first byte) of this Statement or Question | |
EFI_IFR_OP_HEADER *OpCode; | |
// | |
// Statement Header | |
// | |
EFI_STRING_ID Prompt; | |
EFI_STRING_ID Help; | |
EFI_STRING_ID TextTwo; // For EFI_IFR_TEXT | |
// | |
// Fake Question Id, used for statement not has true QuestionId. | |
// | |
EFI_QUESTION_ID FakeQuestionId; | |
// | |
// Question Header | |
// | |
EFI_QUESTION_ID QuestionId; // The value of zero is reserved | |
EFI_VARSTORE_ID VarStoreId; // A value of zero indicates no variable storage | |
BROWSER_STORAGE *Storage; | |
VAR_STORE_INFO VarStoreInfo; | |
UINT16 StorageWidth; | |
UINT16 BitStorageWidth; | |
UINT16 BitVarOffset; | |
UINT8 QuestionFlags; | |
BOOLEAN QuestionReferToBitField; // Whether the question is stored in a bit field. | |
CHAR16 *VariableName; // Name/Value or EFI Variable name | |
CHAR16 *BlockName; // Buffer storage block name: "OFFSET=...WIDTH=..." | |
EFI_HII_VALUE HiiValue; // Edit copy for checkbox, numberic, oneof | |
UINT8 *BufferValue; // Edit copy for string, password, orderedlist | |
UINT8 ValueType; // Data type for orderedlist value array | |
// | |
// OpCode specific members | |
// | |
UINT8 Flags; // for EFI_IFR_CHECKBOX, EFI_IFR_DATE, EFI_IFR_NUMERIC, EFI_IFR_ONE_OF, | |
// EFI_IFR_ORDERED_LIST, EFI_IFR_STRING,EFI_IFR_SUBTITLE,EFI_IFR_TIME, EFI_IFR_BANNER | |
UINT8 MaxContainers; // for EFI_IFR_ORDERED_LIST | |
UINT16 BannerLineNumber; // for EFI_IFR_BANNER, 1-based line number | |
EFI_STRING_ID QuestionConfig; // for EFI_IFR_ACTION, if 0 then no configuration string will be processed | |
UINT64 Minimum; // for EFI_IFR_ONE_OF/EFI_IFR_NUMERIC, it's Min/Max value | |
UINT64 Maximum; // for EFI_IFR_STRING/EFI_IFR_PASSWORD, it's Min/Max length | |
UINT64 Step; | |
EFI_DEFAULT_ID DefaultId; // for EFI_IFR_RESET_BUTTON | |
EFI_GUID RefreshGuid; // for EFI_IFR_REFRESH_ID | |
BOOLEAN Locked; // Whether this statement is locked. | |
BOOLEAN ValueChanged; // Whether this statement's value is changed. | |
// | |
// Get from IFR parsing | |
// | |
FORM_EXPRESSION *ValueExpression; // nested EFI_IFR_VALUE, provide Question value and indicate Question is ReadOnly | |
LIST_ENTRY DefaultListHead; // nested EFI_IFR_DEFAULT list (QUESTION_DEFAULT), provide default values | |
LIST_ENTRY OptionListHead; // nested EFI_IFR_ONE_OF_OPTION list (QUESTION_OPTION) | |
EFI_IMAGE_ID ImageId; // nested EFI_IFR_IMAGE | |
UINT8 RefreshInterval; // nested EFI_IFR_REFRESH, refresh interval(in seconds) for Question value, 0 means no refresh | |
FORM_BROWSER_STATEMENT *ParentStatement; | |
LIST_ENTRY InconsistentListHead; // nested inconsistent expression list (FORM_EXPRESSION) | |
LIST_ENTRY NoSubmitListHead; // nested nosubmit expression list (FORM_EXPRESSION) | |
LIST_ENTRY WarningListHead; // nested warning expression list (FORM_EXPRESSION) | |
FORM_EXPRESSION_LIST *Expression; // nesting inside of GrayOutIf/DisableIf/SuppressIf | |
FORM_EXPRESSION *ReadExpression; // nested EFI_IFR_READ, provide this question value by read expression. | |
FORM_EXPRESSION *WriteExpression; // nested EFI_IFR_WRITE, evaluate write expression after this question value is set. | |
}; | |
#define FORM_BROWSER_STATEMENT_FROM_LINK(a) CR (a, FORM_BROWSER_STATEMENT, Link, FORM_BROWSER_STATEMENT_SIGNATURE) | |
#define FORM_BROWSER_CONFIG_REQUEST_SIGNATURE SIGNATURE_32 ('F', 'C', 'R', 'S') | |
typedef struct { | |
UINTN Signature; | |
LIST_ENTRY Link; | |
LIST_ENTRY SaveFailLink; | |
CHAR16 *ConfigRequest; // <ConfigRequest> = <ConfigHdr> + <RequestElement> | |
CHAR16 *ConfigAltResp; // Alt config response string for this ConfigRequest. | |
UINTN ElementCount; // Number of <RequestElement> in the <ConfigRequest> | |
UINTN SpareStrLen; | |
CHAR16 *RestoreConfigRequest; // When submit form fail, the element need to be restored | |
CHAR16 *SyncConfigRequest; // When submit form fail, the element need to be synced | |
BROWSER_STORAGE *Storage; | |
} FORM_BROWSER_CONFIG_REQUEST; | |
#define FORM_BROWSER_CONFIG_REQUEST_FROM_LINK(a) CR (a, FORM_BROWSER_CONFIG_REQUEST, Link, FORM_BROWSER_CONFIG_REQUEST_SIGNATURE) | |
#define FORM_BROWSER_CONFIG_REQUEST_FROM_SAVE_FAIL_LINK(a) CR (a, FORM_BROWSER_CONFIG_REQUEST, SaveFailLink, FORM_BROWSER_CONFIG_REQUEST_SIGNATURE) | |
#define FORM_BROWSER_FORM_SIGNATURE SIGNATURE_32 ('F', 'F', 'R', 'M') | |
#define STANDARD_MAP_FORM_TYPE 0x01 | |
typedef struct { | |
UINTN Signature; | |
LIST_ENTRY Link; | |
UINT16 FormId; // FormId of normal form or formmap form. | |
EFI_STRING_ID FormTitle; // FormTile of normal form, or FormMapMethod title of formmap form. | |
UINT16 FormType; // Specific form type for the different form. | |
EFI_IMAGE_ID ImageId; | |
BOOLEAN ModalForm; // Whether this is a modal form. | |
BOOLEAN Locked; // Whether this form is locked. | |
EFI_GUID RefreshGuid; // Form refresh event guid. | |
LIST_ENTRY FormViewListHead; // List of type FORMID_INFO is Browser View Form History List. | |
LIST_ENTRY ExpressionListHead; // List of Expressions (FORM_EXPRESSION) | |
LIST_ENTRY StatementListHead; // List of Statements and Questions (FORM_BROWSER_STATEMENT) | |
LIST_ENTRY ConfigRequestHead; // List of configreques for all storage. | |
FORM_EXPRESSION_LIST *SuppressExpression; // nesting inside of SuppressIf | |
} FORM_BROWSER_FORM; | |
#define FORM_BROWSER_FORM_FROM_LINK(a) CR (a, FORM_BROWSER_FORM, Link, FORM_BROWSER_FORM_SIGNATURE) | |
#define FORMSET_DEFAULTSTORE_SIGNATURE SIGNATURE_32 ('F', 'D', 'F', 'S') | |
typedef struct { | |
UINTN Signature; | |
LIST_ENTRY Link; | |
UINT16 DefaultId; | |
EFI_STRING_ID DefaultName; | |
} FORMSET_DEFAULTSTORE; | |
#define FORMSET_DEFAULTSTORE_FROM_LINK(a) CR (a, FORMSET_DEFAULTSTORE, Link, FORMSET_DEFAULTSTORE_SIGNATURE) | |
#define FORM_BROWSER_FORMSET_SIGNATURE SIGNATURE_32 ('F', 'B', 'F', 'S') | |
typedef struct { | |
UINTN Signature; | |
LIST_ENTRY Link; | |
LIST_ENTRY SaveFailLink; | |
EFI_HII_HANDLE HiiHandle; // unique id for formset. | |
EFI_HANDLE DriverHandle; | |
EFI_HII_CONFIG_ACCESS_PROTOCOL *ConfigAccess; | |
EFI_DEVICE_PATH_PROTOCOL *DevicePath; | |
UINTN IfrBinaryLength; | |
UINT8 *IfrBinaryData; | |
BOOLEAN QuestionInited; // Have finished question initilization? | |
EFI_GUID Guid; | |
EFI_STRING_ID FormSetTitle; | |
EFI_STRING_ID Help; | |
UINT8 NumberOfClassGuid; | |
EFI_GUID ClassGuid[3]; // Up to three ClassGuid | |
UINT16 Class; // Tiano extended Class code | |
UINT16 SubClass; // Tiano extended Subclass code | |
EFI_IMAGE_ID ImageId; | |
EFI_IFR_OP_HEADER *OpCode; // mainly for formset op to get ClassGuid | |
FORM_BROWSER_STATEMENT *StatementBuffer; // Buffer for all Statements and Questions | |
EXPRESSION_OPCODE *ExpressionBuffer; // Buffer for all Expression OpCode | |
FORM_BROWSER_FORM *SaveFailForm; // The form which failed to save. | |
FORM_BROWSER_STATEMENT *SaveFailStatement; // The Statement which failed to save. | |
LIST_ENTRY StatementListOSF; // Statement list out side of the form. | |
LIST_ENTRY StorageListHead; // Storage list (FORMSET_STORAGE) | |
LIST_ENTRY SaveFailStorageListHead; // Storage list for the save fail storage. | |
LIST_ENTRY DefaultStoreListHead; // DefaultStore list (FORMSET_DEFAULTSTORE) | |
LIST_ENTRY FormListHead; // Form list (FORM_BROWSER_FORM) | |
LIST_ENTRY ExpressionListHead; // List of Expressions (FORM_EXPRESSION) | |
} FORM_BROWSER_FORMSET; | |
#define FORM_BROWSER_FORMSET_FROM_LINK(a) CR (a, FORM_BROWSER_FORMSET, Link, FORM_BROWSER_FORMSET_SIGNATURE) | |
#define FORM_BROWSER_FORMSET_FROM_SAVE_FAIL_LINK(a) CR (a, FORM_BROWSER_FORMSET, SaveFailLink, FORM_BROWSER_FORMSET_SIGNATURE) | |
typedef struct { | |
LIST_ENTRY Link; | |
EFI_EVENT RefreshEvent; | |
} FORM_BROWSER_REFRESH_EVENT_NODE; | |
#define FORM_BROWSER_REFRESH_EVENT_FROM_LINK(a) BASE_CR (a, FORM_BROWSER_REFRESH_EVENT_NODE, Link) | |
typedef struct { | |
EFI_HII_HANDLE Handle; | |
// | |
// Target formset/form/Question information | |
// | |
EFI_GUID FormSetGuid; | |
UINT16 FormId; | |
UINT16 QuestionId; | |
UINTN Sequence; // used for time/date only. | |
UINTN TopRow; | |
UINTN BottomRow; | |
UINTN PromptCol; | |
UINTN OptionCol; | |
UINTN CurrentRow; | |
// | |
// Ation for Browser to taken: | |
// UI_ACTION_NONE - navigation inside a form | |
// UI_ACTION_REFRESH_FORM - re-evaluate expressions and repaint form | |
// UI_ACTION_REFRESH_FORMSET - re-parse formset IFR binary | |
// | |
UINTN Action; | |
// | |
// Current selected fomset/form/Question | |
// | |
FORM_BROWSER_FORMSET *FormSet; | |
FORM_BROWSER_FORM *Form; | |
FORM_BROWSER_STATEMENT *Statement; | |
// | |
// Whether the Form is editable | |
// | |
BOOLEAN FormEditable; | |
FORM_ENTRY_INFO *CurrentMenu; | |
} UI_MENU_SELECTION; | |
#define BROWSER_CONTEXT_SIGNATURE SIGNATURE_32 ('B', 'C', 'T', 'X') | |
typedef struct { | |
UINTN Signature; | |
LIST_ENTRY Link; | |
// | |
// Globals defined in Setup.c | |
// | |
BOOLEAN FlagReconnect; | |
BOOLEAN CallbackReconnect; | |
BOOLEAN ResetRequired; | |
BOOLEAN ExitRequired; | |
EFI_HII_HANDLE HiiHandle; | |
EFI_GUID FormSetGuid; | |
EFI_FORM_ID FormId; | |
UI_MENU_SELECTION *Selection; | |
FORM_BROWSER_FORMSET *SystemLevelFormSet; | |
EFI_QUESTION_ID CurFakeQestId; | |
BOOLEAN HiiPackageListUpdated; | |
BOOLEAN FinishRetrieveCall; | |
LIST_ENTRY FormHistoryList; | |
LIST_ENTRY FormSetList; | |
} BROWSER_CONTEXT; | |
#define BROWSER_CONTEXT_FROM_LINK(a) CR (a, BROWSER_CONTEXT, Link, BROWSER_CONTEXT_SIGNATURE) | |
// | |
// Scope for get defaut value. It may be GetDefaultForNoStorage, GetDefaultForStorage or GetDefaultForAll. | |
// | |
typedef enum { | |
GetDefaultForNoStorage, // Get default value for question which not has storage. | |
GetDefaultForStorage, // Get default value for question which has storage. | |
GetDefaultForAll, // Get default value for all questions. | |
GetDefaultForMax // Invalid value. | |
} BROWSER_GET_DEFAULT_VALUE; | |
// | |
// Get/set question value from/to. | |
// | |
typedef enum { | |
GetSetValueWithEditBuffer = 0, // Get/Set question value from/to editbuffer in the storage. | |
GetSetValueWithBuffer, // Get/Set question value from/to buffer in the storage. | |
GetSetValueWithHiiDriver, // Get/Set question value from/to hii driver. | |
GetSetValueWithBothBuffer, // Compare the editbuffer with buffer for this question, not use the question value. | |
GetSetValueWithMax // Invalid value. | |
} GET_SET_QUESTION_VALUE_WITH; | |
extern EFI_HII_DATABASE_PROTOCOL *mHiiDatabase; | |
extern EFI_HII_CONFIG_ROUTING_PROTOCOL *mHiiConfigRouting; | |
extern EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL *mPathFromText; | |
extern EDKII_FORM_DISPLAY_ENGINE_PROTOCOL *mFormDisplay; | |
extern BOOLEAN gCallbackReconnect; | |
extern BOOLEAN gFlagReconnect; | |
extern BOOLEAN gResetRequiredFormLevel; | |
extern BOOLEAN gResetRequiredSystemLevel; | |
extern BOOLEAN gExitRequired; | |
extern LIST_ENTRY gBrowserFormSetList; | |
extern LIST_ENTRY gBrowserHotKeyList; | |
extern BROWSER_SETTING_SCOPE gBrowserSettingScope; | |
extern EXIT_HANDLER ExitHandlerFunction; | |
extern EFI_HII_HANDLE mCurrentHiiHandle; | |
extern SETUP_DRIVER_PRIVATE_DATA mPrivateData; | |
// | |
// Browser Global Strings | |
// | |
extern CHAR16 *gEmptyString; | |
extern UI_MENU_SELECTION *gCurrentSelection; | |
extern BOOLEAN mHiiPackageListUpdated; | |
extern UINT16 mCurFakeQestId; | |
extern BOOLEAN mFinishRetrieveCall; | |
// | |
// Global Procedure Defines | |
// | |
#include "Expression.h" | |
/** | |
Initialize the HII String Token to the correct values. | |
**/ | |
VOID | |
InitializeBrowserStrings ( | |
VOID | |
); | |
/** | |
Parse opcodes in the formset IFR binary. | |
@param FormSet Pointer of the FormSet data structure. | |
@retval EFI_SUCCESS Opcode parse success. | |
@retval Other Opcode parse fail. | |
**/ | |
EFI_STATUS | |
ParseOpCodes ( | |
IN FORM_BROWSER_FORMSET *FormSet | |
); | |
/** | |
Free resources allocated for a FormSet. | |
@param FormSet Pointer of the FormSet | |
**/ | |
VOID | |
DestroyFormSet ( | |
IN OUT FORM_BROWSER_FORMSET *FormSet | |
); | |
/** | |
Create a new string in HII Package List. | |
@param String The String to be added | |
@param HiiHandle The package list in the HII database to insert the | |
specified string. | |
@return The output string. | |
**/ | |
EFI_STRING_ID | |
NewString ( | |
IN CHAR16 *String, | |
IN EFI_HII_HANDLE HiiHandle | |
); | |
/** | |
Delete a string from HII Package List. | |
@param StringId Id of the string in HII database. | |
@param HiiHandle The HII package list handle. | |
@retval EFI_SUCCESS The string was deleted successfully. | |
**/ | |
EFI_STATUS | |
DeleteString ( | |
IN EFI_STRING_ID StringId, | |
IN EFI_HII_HANDLE HiiHandle | |
); | |
/** | |
Get the string based on the StringId and HII Package List Handle. | |
@param Token The String's ID. | |
@param HiiHandle The package list in the HII database to search for | |
the specified string. | |
@return The output string. | |
**/ | |
CHAR16 * | |
GetToken ( | |
IN EFI_STRING_ID Token, | |
IN EFI_HII_HANDLE HiiHandle | |
); | |
/** | |
Get Value for given Name from a NameValue Storage. | |
@param Storage The NameValue Storage. | |
@param Name The Name. | |
@param Value The retured Value. | |
@param GetValueFrom Where to get source value, from EditValue or Value. | |
@retval EFI_SUCCESS Value found for given Name. | |
@retval EFI_NOT_FOUND No such Name found in NameValue storage. | |
**/ | |
EFI_STATUS | |
GetValueByName ( | |
IN BROWSER_STORAGE *Storage, | |
IN CHAR16 *Name, | |
IN OUT CHAR16 **Value, | |
IN GET_SET_QUESTION_VALUE_WITH GetValueFrom | |
); | |
/** | |
Set Value of given Name in a NameValue Storage. | |
@param Storage The NameValue Storage. | |
@param Name The Name. | |
@param Value The Value to set. | |
@param SetValueTo Whether update editValue or Value. | |
@param ReturnNode The node use the input name. | |
@retval EFI_SUCCESS Value found for given Name. | |
@retval EFI_NOT_FOUND No such Name found in NameValue storage. | |
**/ | |
EFI_STATUS | |
SetValueByName ( | |
IN BROWSER_STORAGE *Storage, | |
IN CHAR16 *Name, | |
IN CHAR16 *Value, | |
IN GET_SET_QUESTION_VALUE_WITH SetValueTo, | |
OUT NAME_VALUE_NODE **ReturnNode | |
); | |
/** | |
Validate whether this question's value has changed. | |
@param FormSet FormSet data structure. | |
@param Form Form data structure. | |
@param Question Question to be initialized. | |
@param GetValueFrom Where to get value, may from editbuffer, buffer or hii driver. | |
@retval TRUE Question's value has changed. | |
@retval FALSE Question's value has not changed | |
**/ | |
BOOLEAN | |
IsQuestionValueChanged ( | |
IN FORM_BROWSER_FORMSET *FormSet, | |
IN FORM_BROWSER_FORM *Form, | |
IN OUT FORM_BROWSER_STATEMENT *Question, | |
IN GET_SET_QUESTION_VALUE_WITH GetValueFrom | |
); | |
/** | |
Validate the FormSet. If the formset is not validate, remove it from the list. | |
@param FormSet The input FormSet which need to validate. | |
@retval TRUE The handle is validate. | |
@retval FALSE The handle is invalidate. | |
**/ | |
BOOLEAN | |
ValidateFormSet ( | |
FORM_BROWSER_FORMSET *FormSet | |
); | |
/** | |
Update the ValueChanged status for questions. | |
@param FormSet FormSet data structure. | |
@param Form Form data structure. | |
@param SettingScope Setting Scope for Default action. | |
**/ | |
VOID | |
UpdateStatementStatus ( | |
IN FORM_BROWSER_FORMSET *FormSet, | |
IN FORM_BROWSER_FORM *Form, | |
IN BROWSER_SETTING_SCOPE SettingScope | |
); | |
/** | |
Get Question's current Value. | |
@param FormSet FormSet data structure. | |
@param Form Form data structure. | |
@param Question Question to be initialized. | |
@param GetValueFrom Where to get value, may from editbuffer, buffer or hii driver. | |
@retval EFI_SUCCESS The function completed successfully. | |
**/ | |
EFI_STATUS | |
GetQuestionValue ( | |
IN FORM_BROWSER_FORMSET *FormSet, | |
IN FORM_BROWSER_FORM *Form, | |
IN OUT FORM_BROWSER_STATEMENT *Question, | |
IN GET_SET_QUESTION_VALUE_WITH GetValueFrom | |
); | |
/** | |
Save Question Value to edit copy(cached) or Storage(uncached). | |
@param FormSet FormSet data structure. | |
@param Form Form data structure. | |
@param Question Pointer to the Question. | |
@param SetValueTo Update the question value to editbuffer , buffer or hii driver. | |
@retval EFI_SUCCESS The function completed successfully. | |
**/ | |
EFI_STATUS | |
SetQuestionValue ( | |
IN FORM_BROWSER_FORMSET *FormSet, | |
IN FORM_BROWSER_FORM *Form, | |
IN OUT FORM_BROWSER_STATEMENT *Question, | |
IN GET_SET_QUESTION_VALUE_WITH SetValueTo | |
); | |
/** | |
Perform inconsistent check for a Form. | |
@param FormSet FormSet data structure. | |
@param Form Form data structure. | |
@param Question The Question to be validated. | |
@param Type Validation type: InConsistent or NoSubmit | |
@retval EFI_SUCCESS Form validation pass. | |
@retval other Form validation failed. | |
**/ | |
EFI_STATUS | |
ValidateQuestion ( | |
IN FORM_BROWSER_FORMSET *FormSet, | |
IN FORM_BROWSER_FORM *Form, | |
IN FORM_BROWSER_STATEMENT *Question, | |
IN UINTN Type | |
); | |
/** | |
Discard data based on the input setting scope (Form, FormSet or System). | |
@param FormSet FormSet data structure. | |
@param Form Form data structure. | |
@param SettingScope Setting Scope for Discard action. | |
@retval EFI_SUCCESS The function completed successfully. | |
@retval EFI_UNSUPPORTED Unsupport SettingScope. | |
**/ | |
EFI_STATUS | |
DiscardForm ( | |
IN FORM_BROWSER_FORMSET *FormSet, | |
IN FORM_BROWSER_FORM *Form, | |
IN BROWSER_SETTING_SCOPE SettingScope | |
); | |
/** | |
Submit data based on the input Setting level (Form, FormSet or System). | |
@param FormSet FormSet data structure. | |
@param Form Form data structure. | |
@param SettingScope Setting Scope for Submit action. | |
@retval EFI_SUCCESS The function completed successfully. | |
@retval EFI_UNSUPPORTED Unsupport SettingScope. | |
**/ | |
EFI_STATUS | |
SubmitForm ( | |
IN FORM_BROWSER_FORMSET *FormSet, | |
IN FORM_BROWSER_FORM *Form, | |
IN BROWSER_SETTING_SCOPE SettingScope | |
); | |
/** | |
Reset Question to its default value. | |
@param FormSet The form set. | |
@param Form The form. | |
@param Question The question. | |
@param DefaultId The Class of the default. | |
@retval EFI_SUCCESS Question is reset to default value. | |
**/ | |
EFI_STATUS | |
GetQuestionDefault ( | |
IN FORM_BROWSER_FORMSET *FormSet, | |
IN FORM_BROWSER_FORM *Form, | |
IN FORM_BROWSER_STATEMENT *Question, | |
IN UINT16 DefaultId | |
); | |
/** | |
Get current setting of Questions. | |
@param FormSet FormSet data structure. | |
**/ | |
VOID | |
InitializeCurrentSetting ( | |
IN OUT FORM_BROWSER_FORMSET *FormSet | |
); | |
/** | |
Initialize the internal data structure of a FormSet. | |
@param Handle PackageList Handle | |
@param FormSetGuid GUID of a formset. If not specified (NULL or zero | |
GUID), take the first FormSet found in package | |
list. | |
@param FormSet FormSet data structure. | |
@retval EFI_SUCCESS The function completed successfully. | |
@retval EFI_NOT_FOUND The specified FormSet could not be found. | |
**/ | |
EFI_STATUS | |
InitializeFormSet ( | |
IN EFI_HII_HANDLE Handle, | |
IN OUT EFI_GUID *FormSetGuid, | |
OUT FORM_BROWSER_FORMSET *FormSet | |
); | |
/** | |
Reset Questions to their initial value or default value in a Form, Formset or System. | |
GetDefaultValueScope parameter decides which questions will reset | |
to its default value. | |
@param FormSet FormSet data structure. | |
@param Form Form data structure. | |
@param DefaultId The Class of the default. | |
@param SettingScope Setting Scope for Default action. | |
@param GetDefaultValueScope Get default value scope. | |
@param Storage Get default value only for this storage. | |
@param RetrieveValueFirst Whether call the retrieve call back to | |
get the initial value before get default | |
value. | |
@param SkipGetAltCfg Whether skip the get altcfg string process. | |
@retval EFI_SUCCESS The function completed successfully. | |
@retval EFI_UNSUPPORTED Unsupport SettingScope. | |
**/ | |
EFI_STATUS | |
ExtractDefault ( | |
IN FORM_BROWSER_FORMSET *FormSet, | |
IN FORM_BROWSER_FORM *Form, | |
IN UINT16 DefaultId, | |
IN BROWSER_SETTING_SCOPE SettingScope, | |
IN BROWSER_GET_DEFAULT_VALUE GetDefaultValueScope, | |
IN BROWSER_STORAGE *Storage, | |
IN BOOLEAN RetrieveValueFirst, | |
IN BOOLEAN SkipGetAltCfg | |
); | |
/** | |
Initialize Question's Edit copy from Storage. | |
@param Selection Selection contains the information about | |
the Selection, form and formset to be displayed. | |
Selection action may be updated in retrieve callback. | |
If Selection is NULL, only initialize Question value. | |
@param FormSet FormSet data structure. | |
@param Form Form data structure. | |
@retval EFI_SUCCESS The function completed successfully. | |
**/ | |
EFI_STATUS | |
LoadFormConfig ( | |
IN OUT UI_MENU_SELECTION *Selection, | |
IN FORM_BROWSER_FORMSET *FormSet, | |
IN FORM_BROWSER_FORM *Form | |
); | |
/** | |
Initialize Question's Edit copy from Storage for the whole Formset. | |
@param Selection Selection contains the information about | |
the Selection, form and formset to be displayed. | |
Selection action may be updated in retrieve callback. | |
If Selection is NULL, only initialize Question value. | |
@param FormSet FormSet data structure. | |
@retval EFI_SUCCESS The function completed successfully. | |
**/ | |
EFI_STATUS | |
LoadFormSetConfig ( | |
IN OUT UI_MENU_SELECTION *Selection, | |
IN FORM_BROWSER_FORMSET *FormSet | |
); | |
/** | |
Convert setting of Buffer Storage or NameValue Storage to <ConfigResp>. | |
@param Storage The Storage to be conveted. | |
@param ConfigResp The returned <ConfigResp>. | |
@param ConfigRequest The ConfigRequest string. | |
@param GetEditBuf Get the data from editbuffer or buffer. | |
@retval EFI_SUCCESS Convert success. | |
@retval EFI_INVALID_PARAMETER Incorrect storage type. | |
**/ | |
EFI_STATUS | |
StorageToConfigResp ( | |
IN BROWSER_STORAGE *Storage, | |
IN CHAR16 **ConfigResp, | |
IN CHAR16 *ConfigRequest, | |
IN BOOLEAN GetEditBuf | |
); | |
/** | |
Convert <ConfigResp> to settings in Buffer Storage or NameValue Storage. | |
@param Storage The Storage to receive the settings. | |
@param ConfigResp The <ConfigResp> to be converted. | |
@retval EFI_SUCCESS Convert success. | |
@retval EFI_INVALID_PARAMETER Incorrect storage type. | |
**/ | |
EFI_STATUS | |
ConfigRespToStorage ( | |
IN BROWSER_STORAGE *Storage, | |
IN CHAR16 *ConfigResp | |
); | |
/** | |
Fill storage's edit copy with settings requested from Configuration Driver. | |
@param FormSet FormSet data structure. | |
@param Storage Buffer Storage. | |
**/ | |
VOID | |
LoadStorage ( | |
IN FORM_BROWSER_FORMSET *FormSet, | |
IN FORMSET_STORAGE *Storage | |
); | |
/** | |
Fetch the Ifr binary data of a FormSet. | |
@param Handle PackageList Handle | |
@param FormSetGuid GUID of a formset. If not specified (NULL or zero | |
GUID), take the first FormSet found in package | |
list. | |
@param BinaryLength The length of the FormSet IFR binary. | |
@param BinaryData The buffer designed to receive the FormSet. | |
@retval EFI_SUCCESS Buffer filled with the requested FormSet. | |
BufferLength was updated. | |
@retval EFI_INVALID_PARAMETER The handle is unknown. | |
@retval EFI_NOT_FOUND A form or FormSet on the requested handle cannot | |
be found with the requested FormId. | |
**/ | |
EFI_STATUS | |
GetIfrBinaryData ( | |
IN EFI_HII_HANDLE Handle, | |
IN OUT EFI_GUID *FormSetGuid, | |
OUT UINTN *BinaryLength, | |
OUT UINT8 **BinaryData | |
); | |
/** | |
Save globals used by previous call to SendForm(). SendForm() may be called from | |
HiiConfigAccess.Callback(), this will cause SendForm() be reentried. | |
So, save globals of previous call to SendForm() and restore them upon exit. | |
**/ | |
VOID | |
SaveBrowserContext ( | |
VOID | |
); | |
/** | |
Restore globals used by previous call to SendForm(). | |
**/ | |
VOID | |
RestoreBrowserContext ( | |
VOID | |
); | |
/** | |
This is the routine which an external caller uses to direct the browser | |
where to obtain it's information. | |
@param This The Form Browser protocol instanse. | |
@param Handles A pointer to an array of Handles. If HandleCount > 1 we | |
display a list of the formsets for the handles specified. | |
@param HandleCount The number of Handles specified in Handle. | |
@param FormSetGuid This field points to the EFI_GUID which must match the Guid | |
field in the EFI_IFR_FORM_SET op-code for the specified | |
forms-based package. If FormSetGuid is NULL, then this | |
function will display the first found forms package. | |
@param FormId This field specifies which EFI_IFR_FORM to render as the first | |
displayable page. If this field has a value of 0x0000, then | |
the forms browser will render the specified forms in their encoded order. | |
ScreenDimenions - This allows the browser to be called so that it occupies a | |
portion of the physical screen instead of dynamically determining the screen dimensions. | |
ActionRequest - Points to the action recommended by the form. | |
@param ScreenDimensions Points to recommended form dimensions, including any non-content area, in | |
characters. | |
@param ActionRequest Points to the action recommended by the form. | |
@retval EFI_SUCCESS The function completed successfully. | |
@retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. | |
@retval EFI_NOT_FOUND No valid forms could be found to display. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
SendForm ( | |
IN CONST EFI_FORM_BROWSER2_PROTOCOL *This, | |
IN EFI_HII_HANDLE *Handles, | |
IN UINTN HandleCount, | |
IN EFI_GUID *FormSetGuid OPTIONAL, | |
IN UINT16 FormId OPTIONAL, | |
IN CONST EFI_SCREEN_DESCRIPTOR *ScreenDimensions OPTIONAL, | |
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest OPTIONAL | |
); | |
/** | |
This function is called by a callback handler to retrieve uncommitted state | |
data from the browser. | |
@param This A pointer to the EFI_FORM_BROWSER2_PROTOCOL | |
instance. | |
@param ResultsDataSize A pointer to the size of the buffer associated | |
with ResultsData. | |
@param ResultsData A string returned from an IFR browser or | |
equivalent. The results string will have no | |
routing information in them. | |
@param RetrieveData A BOOLEAN field which allows an agent to retrieve | |
(if RetrieveData = TRUE) data from the uncommitted | |
browser state information or set (if RetrieveData | |
= FALSE) data in the uncommitted browser state | |
information. | |
@param VariableGuid An optional field to indicate the target variable | |
GUID name to use. | |
@param VariableName An optional field to indicate the target | |
human-readable variable name. | |
@retval EFI_SUCCESS The results have been distributed or are awaiting | |
distribution. | |
@retval EFI_BUFFER_TOO_SMALL The ResultsDataSize specified was too small to | |
contain the results data. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
BrowserCallback ( | |
IN CONST EFI_FORM_BROWSER2_PROTOCOL *This, | |
IN OUT UINTN *ResultsDataSize, | |
IN OUT EFI_STRING ResultsData, | |
IN BOOLEAN RetrieveData, | |
IN CONST EFI_GUID *VariableGuid OPTIONAL, | |
IN CONST CHAR16 *VariableName OPTIONAL | |
); | |
/** | |
Find menu which will show next time. | |
@param Selection On input, Selection tell setup browser the information | |
about the Selection, form and formset to be displayed. | |
On output, Selection return the screen item that is selected | |
by user. | |
@param SettingLevel Input Settting level, if it is FormLevel, just exit current form. | |
else, we need to exit current formset. | |
@retval TRUE Exit current form. | |
@retval FALSE User press ESC and keep in current form. | |
**/ | |
BOOLEAN | |
FindNextMenu ( | |
IN OUT UI_MENU_SELECTION *Selection, | |
IN BROWSER_SETTING_SCOPE SettingLevel | |
); | |
/** | |
check whether the form need to update the NV. | |
@param Form Form data structure. | |
@retval TRUE Need to update the NV. | |
@retval FALSE No need to update the NV. | |
**/ | |
BOOLEAN | |
IsNvUpdateRequiredForForm ( | |
IN FORM_BROWSER_FORM *Form | |
); | |
/** | |
check whether the formset need to update the NV. | |
@param FormSet FormSet data structure. | |
@retval TRUE Need to update the NV. | |
@retval FALSE No need to update the NV. | |
**/ | |
BOOLEAN | |
IsNvUpdateRequiredForFormSet ( | |
IN FORM_BROWSER_FORMSET *FormSet | |
); | |
/** | |
Call the call back function for the question and process the return action. | |
@param Selection On input, Selection tell setup browser the information | |
about the Selection, form and formset to be displayed. | |
On output, Selection return the screen item that is selected | |
by user. | |
@param FormSet The formset this question belong to. | |
@param Form The form this question belong to. | |
@param Question The Question which need to call. | |
@param Action The action request. | |
@param SkipSaveOrDiscard Whether skip save or discard action. | |
@retval EFI_SUCCESS The call back function executes successfully. | |
@return Other value if the call back function failed to execute. | |
**/ | |
EFI_STATUS | |
ProcessCallBackFunction ( | |
IN OUT UI_MENU_SELECTION *Selection, | |
IN FORM_BROWSER_FORMSET *FormSet, | |
IN FORM_BROWSER_FORM *Form, | |
IN FORM_BROWSER_STATEMENT *Question, | |
IN EFI_BROWSER_ACTION Action, | |
IN BOOLEAN SkipSaveOrDiscard | |
); | |
/** | |
Call the retrieve type call back function for one question to get the initialize data. | |
This function only used when in the initialize stage, because in this stage, the | |
Selection->Form is not ready. For other case, use the ProcessCallBackFunction instead. | |
@param ConfigAccess The config access protocol produced by the hii driver. | |
@param Statement The Question which need to call. | |
@param FormSet The formset this question belong to. | |
@retval EFI_SUCCESS The call back function executes successfully. | |
@return Other value if the call back function failed to execute. | |
**/ | |
EFI_STATUS | |
ProcessRetrieveForQuestion ( | |
IN EFI_HII_CONFIG_ACCESS_PROTOCOL *ConfigAccess, | |
IN FORM_BROWSER_STATEMENT *Statement, | |
IN FORM_BROWSER_FORMSET *FormSet | |
); | |
/** | |
Find the matched FormSet context in the backup maintain list based on HiiHandle. | |
@param Handle The Hii Handle. | |
@return the found FormSet context. If no found, NULL will return. | |
**/ | |
FORM_BROWSER_FORMSET * | |
GetFormSetFromHiiHandle ( | |
EFI_HII_HANDLE Handle | |
); | |
/** | |
Check whether the input HII handle is the FormSet that is being used. | |
@param Handle The Hii Handle. | |
@retval TRUE HII handle is being used. | |
@retval FALSE HII handle is not being used. | |
**/ | |
BOOLEAN | |
IsHiiHandleInBrowserContext ( | |
EFI_HII_HANDLE Handle | |
); | |
/** | |
Configure what scope the hot key will impact. | |
All hot keys have the same scope. The mixed hot keys with the different level are not supported. | |
If no scope is set, the default scope will be FormSet level. | |
After all registered hot keys are removed, previous Scope can reset to another level. | |
@param[in] Scope Scope level to be set. | |
@retval EFI_SUCCESS Scope is set correctly. | |
@retval EFI_INVALID_PARAMETER Scope is not the valid value specified in BROWSER_SETTING_SCOPE. | |
@retval EFI_UNSPPORTED Scope level is different from current one that the registered hot keys have. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
SetScope ( | |
IN BROWSER_SETTING_SCOPE Scope | |
); | |
/** | |
Register the hot key with its browser action, or unregistered the hot key. | |
Only support hot key that is not printable character (control key, function key, etc.). | |
If the action value is zero, the hot key will be unregistered if it has been registered. | |
If the same hot key has been registered, the new action and help string will override the previous ones. | |
@param[in] KeyData A pointer to a buffer that describes the keystroke | |
information for the hot key. Its type is EFI_INPUT_KEY to | |
be supported by all ConsoleIn devices. | |
@param[in] Action Action value that describes what action will be trigged when the hot key is pressed. | |
@param[in] DefaultId Specifies the type of defaults to retrieve, which is only for DEFAULT action. | |
@param[in] HelpString Help string that describes the hot key information. | |
Its value may be NULL for the unregistered hot key. | |
@retval EFI_SUCCESS Hot key is registered or unregistered. | |
@retval EFI_INVALID_PARAMETER KeyData is NULL. | |
@retval EFI_NOT_FOUND KeyData is not found to be unregistered. | |
@retval EFI_UNSUPPORTED Key represents a printable character. It is conflicted with Browser. | |
@retval EFI_ALREADY_STARTED Key already been registered for one hot key. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
RegisterHotKey ( | |
IN EFI_INPUT_KEY *KeyData, | |
IN UINT32 Action, | |
IN UINT16 DefaultId, | |
IN EFI_STRING HelpString OPTIONAL | |
); | |
/** | |
Register Exit handler function. | |
When more than one handler function is registered, the latter one will override the previous one. | |
When NULL handler is specified, the previous Exit handler will be unregistered. | |
@param[in] Handler Pointer to handler function. | |
**/ | |
VOID | |
EFIAPI | |
RegiserExitHandler ( | |
IN EXIT_HANDLER Handler | |
); | |
/** | |
Check whether the browser data has been modified. | |
@retval TRUE Browser data is changed. | |
@retval FALSE No browser data is changed. | |
**/ | |
BOOLEAN | |
EFIAPI | |
IsBrowserDataModified ( | |
VOID | |
); | |
/** | |
Execute the action requested by the Action parameter. | |
@param[in] Action Execute the request action. | |
@param[in] DefaultId The default Id info when need to load default value. | |
@retval EFI_SUCCESS Execute the request action succss. | |
@retval EFI_INVALID_PARAMETER The input action value is invalid. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
ExecuteAction ( | |
IN UINT32 Action, | |
IN UINT16 DefaultId | |
); | |
/** | |
Create reminder to let user to choose save or discard the changed browser data. | |
Caller can use it to actively check the changed browser data. | |
@retval BROWSER_NO_CHANGES No browser data is changed. | |
@retval BROWSER_SAVE_CHANGES The changed browser data is saved. | |
@retval BROWSER_DISCARD_CHANGES The changed browser data is discard. | |
@retval BROWSER_KEEP_CURRENT Browser keep current changes. | |
**/ | |
UINT32 | |
EFIAPI | |
SaveReminder ( | |
VOID | |
); | |
/** | |
Check whether the Reset Required for the browser | |
@retval TRUE Browser required to reset after exit. | |
@retval FALSE Browser not need to reset after exit. | |
**/ | |
BOOLEAN | |
EFIAPI | |
IsResetRequired ( | |
VOID | |
); | |
/** | |
Find the registered HotKey based on KeyData. | |
@param[in] KeyData A pointer to a buffer that describes the keystroke | |
information for the hot key. | |
@return The registered HotKey context. If no found, NULL will return. | |
**/ | |
BROWSER_HOT_KEY * | |
GetHotKeyFromRegisterList ( | |
IN EFI_INPUT_KEY *KeyData | |
); | |
/** | |
Get FORM_BROWSER_STATEMENT from FORM_DISPLAY_ENGINE_STATEMENT based on the OpCode info. | |
@param DisplayStatement The input FORM_DISPLAY_ENGINE_STATEMENT. | |
@retval FORM_BROWSER_STATEMENT The return FORM_BROWSER_STATEMENT info. | |
**/ | |
FORM_BROWSER_STATEMENT * | |
GetBrowserStatement ( | |
IN FORM_DISPLAY_ENGINE_STATEMENT *DisplayStatement | |
); | |
/** | |
Password may be stored as encrypted by Configuration Driver. When change a | |
password, user will be challenged with old password. To validate user input old | |
password, we will send the clear text to Configuration Driver via Callback(). | |
Configuration driver is responsible to check the passed in password and return | |
the validation result. If validation pass, state machine in password Callback() | |
will transit from BROWSER_STATE_VALIDATE_PASSWORD to BROWSER_STATE_SET_PASSWORD. | |
After user type in new password twice, Callback() will be invoked to send the | |
new password to Configuration Driver. | |
@param Selection Pointer to UI_MENU_SELECTION. | |
@param MenuOption The MenuOption for this password Question. | |
@param String The clear text of password. | |
@retval EFI_NOT_AVAILABLE_YET Callback() request to terminate password input. | |
@return In state of BROWSER_STATE_VALIDATE_PASSWORD: | |
@retval EFI_SUCCESS Password correct, Browser will prompt for new | |
password. | |
@retval EFI_NOT_READY Password incorrect, Browser will show error | |
message. | |
@retval Other Browser will do nothing. | |
@return In state of BROWSER_STATE_SET_PASSWORD: | |
@retval EFI_SUCCESS Set password success. | |
@retval Other Set password failed. | |
**/ | |
EFI_STATUS | |
PasswordCallback ( | |
IN UI_MENU_SELECTION *Selection, | |
IN FORM_BROWSER_STATEMENT *Question, | |
IN CHAR16 *String | |
); | |
/** | |
Display error message for invalid password. | |
**/ | |
VOID | |
PasswordInvalid ( | |
VOID | |
); | |
/** | |
The worker function that send the displays to the screen. On output, | |
the selection made by user is returned. | |
@param Selection On input, Selection tell setup browser the information | |
about the Selection, form and formset to be displayed. | |
On output, Selection return the screen item that is selected | |
by user. | |
@retval EFI_SUCCESS The page is displayed successfully. | |
@return Other value if the page failed to be diplayed. | |
**/ | |
EFI_STATUS | |
SetupBrowser ( | |
IN OUT UI_MENU_SELECTION *Selection | |
); | |
/** | |
Free up the resource allocated for all strings required | |
by Setup Browser. | |
**/ | |
VOID | |
FreeBrowserStrings ( | |
VOID | |
); | |
/** | |
Create a menu with specified formset GUID and form ID, and add it as a child | |
of the given parent menu. | |
@param HiiHandle Hii handle related to this formset. | |
@param FormSetGuid The Formset Guid of menu to be added. | |
@param FormId The Form ID of menu to be added. | |
@param QuestionId The question id of this menu to be added. | |
@return A pointer to the newly added menu or NULL if memory is insufficient. | |
**/ | |
FORM_ENTRY_INFO * | |
UiAddMenuList ( | |
IN EFI_HII_HANDLE HiiHandle, | |
IN EFI_GUID *FormSetGuid, | |
IN UINT16 FormId, | |
IN UINT16 QuestionId | |
); | |
/** | |
Search Menu with given FormSetGuid and FormId in all cached menu list. | |
@param HiiHandle HiiHandle for FormSet. | |
@param FormSetGuid The Formset GUID of the menu to search. | |
@param FormId The Form ID of menu to search. | |
@return A pointer to menu found or NULL if not found. | |
**/ | |
FORM_ENTRY_INFO * | |
UiFindMenuList ( | |
IN EFI_HII_HANDLE HiiHandle, | |
IN EFI_GUID *FormSetGuid, | |
IN UINT16 FormId | |
); | |
/** | |
Free Menu list linked list. | |
@param MenuListHead One Menu list point in the menu list. | |
**/ | |
VOID | |
UiFreeMenuList ( | |
LIST_ENTRY *MenuListHead | |
); | |
/** | |
Find parent menu for current menu. | |
@param CurrentMenu Current Menu | |
@param SettingLevel Whether find parent menu in Form Level or Formset level. | |
In form level, just find the parent menu; | |
In formset level, find the parent menu which has different | |
formset guid value. | |
@retval The parent menu for current menu. | |
**/ | |
FORM_ENTRY_INFO * | |
UiFindParentMenu ( | |
IN FORM_ENTRY_INFO *CurrentMenu, | |
IN BROWSER_SETTING_SCOPE SettingLevel | |
); | |
/** | |
Validate the HiiHandle. | |
@param HiiHandle The input HiiHandle which need to validate. | |
@retval TRUE The handle is validate. | |
@retval FALSE The handle is invalidate. | |
**/ | |
BOOLEAN | |
ValidateHiiHandle ( | |
EFI_HII_HANDLE HiiHandle | |
); | |
/** | |
Copy current Menu list to the new menu list. | |
@param NewMenuListHead New create Menu list. | |
@param CurrentMenuListHead Current Menu list. | |
**/ | |
VOID | |
UiCopyMenuList ( | |
OUT LIST_ENTRY *NewMenuListHead, | |
IN LIST_ENTRY *CurrentMenuListHead | |
); | |
/** | |
Search an Option of a Question by its value. | |
@param Question The Question | |
@param OptionValue Value for Option to be searched. | |
@retval Pointer Pointer to the found Option. | |
@retval NULL Option not found. | |
**/ | |
QUESTION_OPTION * | |
ValueToOption ( | |
IN FORM_BROWSER_STATEMENT *Question, | |
IN EFI_HII_VALUE *OptionValue | |
); | |
/** | |
Return data element in an Array by its Index. | |
@param Array The data array. | |
@param Type Type of the data in this array. | |
@param Index Zero based index for data in this array. | |
@retval Value The data to be returned | |
**/ | |
UINT64 | |
GetArrayData ( | |
IN VOID *Array, | |
IN UINT8 Type, | |
IN UINTN Index | |
); | |
/** | |
Set value of a data element in an Array by its Index. | |
@param Array The data array. | |
@param Type Type of the data in this array. | |
@param Index Zero based index for data in this array. | |
@param Value The value to be set. | |
**/ | |
VOID | |
SetArrayData ( | |
IN VOID *Array, | |
IN UINT8 Type, | |
IN UINTN Index, | |
IN UINT64 Value | |
); | |
/** | |
Compare two Hii value. | |
@param Value1 Expression value to compare on left-hand. | |
@param Value2 Expression value to compare on right-hand. | |
@param Result Return value after compare. | |
retval 0 Two operators equal. | |
return Positive value if Value1 is greater than Value2. | |
retval Negative value if Value1 is less than Value2. | |
@param HiiHandle Only required for string compare. | |
@retval other Could not perform compare on two values. | |
@retval EFI_SUCCESS Compare the value success. | |
**/ | |
EFI_STATUS | |
CompareHiiValue ( | |
IN EFI_HII_VALUE *Value1, | |
IN EFI_HII_VALUE *Value2, | |
OUT INTN *Result, | |
IN EFI_HII_HANDLE HiiHandle OPTIONAL | |
); | |
/** | |
Perform Password check. | |
Passwork may be encrypted by driver that requires the specific check. | |
@param Form Form where Password Statement is in. | |
@param Statement Password statement | |
@param PasswordString Password string to be checked. It may be NULL. | |
NULL means to restore password. | |
"" string can be used to checked whether old password does exist. | |
@return Status Status of Password check. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
PasswordCheck ( | |
IN FORM_DISPLAY_ENGINE_FORM *Form, | |
IN FORM_DISPLAY_ENGINE_STATEMENT *Statement, | |
IN EFI_STRING PasswordString OPTIONAL | |
); | |
/** | |
Get FORM_BROWSER_STATEMENT from FORM_DISPLAY_ENGINE_STATEMENT based on the OpCode info. | |
@param DisplayStatement The input FORM_DISPLAY_ENGINE_STATEMENT. | |
@retval FORM_BROWSER_STATEMENT The return FORM_BROWSER_STATEMENT info. | |
**/ | |
FORM_BROWSER_STATEMENT * | |
GetBrowserStatement ( | |
IN FORM_DISPLAY_ENGINE_STATEMENT *DisplayStatement | |
); | |
/** | |
Initialize the Display form structure data. | |
**/ | |
VOID | |
InitializeDisplayFormData ( | |
VOID | |
); | |
/** | |
Base on the current formset info, clean the ConfigRequest string in browser storage. | |
@param FormSet Pointer of the FormSet | |
**/ | |
VOID | |
CleanBrowserStorage ( | |
IN OUT FORM_BROWSER_FORMSET *FormSet | |
); | |
/** | |
Find HII Handle in the HII database associated with given Device Path. | |
If DevicePath is NULL, then ASSERT. | |
@param DevicePath Device Path associated with the HII package list | |
handle. | |
@param FormsetGuid The formset guid for this formset. | |
@retval Handle HII package list Handle associated with the Device | |
Path. | |
@retval NULL Hii Package list handle is not found. | |
**/ | |
EFI_HII_HANDLE | |
DevicePathToHiiHandle ( | |
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, | |
IN EFI_GUID *FormsetGuid | |
); | |
/** | |
Adjust the config request info, remove the request elements which already in AllConfigRequest string. | |
@param Storage Form set Storage. | |
@param Request The input request string. | |
@param RespString Whether the input is ConfigRequest or ConfigResp format. | |
@retval TRUE Has element not covered by current used elements, need to continue to call ExtractConfig | |
@retval FALSE All elements covered by current used elements. | |
**/ | |
BOOLEAN | |
ConfigRequestAdjust ( | |
IN BROWSER_STORAGE *Storage, | |
IN CHAR16 *Request, | |
IN BOOLEAN RespString | |
); | |
/** | |
Perform question check. | |
If one question has more than one check, process form high priority to low. | |
@param FormSet FormSet data structure. | |
@param Form Form data structure. | |
@param Question The Question to be validated. | |
@retval EFI_SUCCESS Form validation pass. | |
@retval other Form validation failed. | |
**/ | |
EFI_STATUS | |
ValueChangedValidation ( | |
IN FORM_BROWSER_FORMSET *FormSet, | |
IN FORM_BROWSER_FORM *Form, | |
IN FORM_BROWSER_STATEMENT *Question | |
); | |
/** | |
Pop up the error info. | |
@param BrowserStatus The input browser status. | |
@param HiiHandle The HiiHandle for this error opcode. | |
@param OpCode The opcode use to get the erro info and timeout value. | |
@param ErrorString Error string used by BROWSER_NO_SUBMIT_IF. | |
**/ | |
UINT32 | |
PopupErrorMessage ( | |
IN UINT32 BrowserStatus, | |
IN EFI_HII_HANDLE HiiHandle, | |
IN EFI_IFR_OP_HEADER *OpCode OPTIONAL, | |
IN CHAR16 *ErrorString | |
); | |
/** | |
Check whether the result is TRUE or FALSE. | |
For the EFI_HII_VALUE value type is numeric, return TRUE if the | |
value is not 0. | |
@param Result Input the result data. | |
@retval TRUE The result is TRUE. | |
@retval FALSE The result is FALSE. | |
**/ | |
BOOLEAN | |
IsTrue ( | |
IN EFI_HII_VALUE *Result | |
); | |
/** | |
Get Formset_storage base on the input varstoreid info. | |
@param FormSet Pointer of the current FormSet. | |
@param VarStoreId Varstore ID info. | |
@return Pointer to a FORMSET_STORAGE data structure. | |
**/ | |
FORMSET_STORAGE * | |
GetFstStgFromVarId ( | |
IN FORM_BROWSER_FORMSET *FormSet, | |
IN EFI_VARSTORE_ID VarStoreId | |
); | |
/** | |
Get Formset_storage base on the input browser storage. | |
More than one formsets may share the same browser storage, | |
this function just get the first formset storage which | |
share the browser storage. | |
@param Storage browser storage info. | |
@return Pointer to a FORMSET_STORAGE data structure. | |
**/ | |
FORMSET_STORAGE * | |
GetFstStgFromBrsStg ( | |
IN BROWSER_STORAGE *Storage | |
); | |
/** | |
Reconnect the controller. | |
@param DriverHandle The controller handle which need to be reconnect. | |
@retval TRUE do the reconnect behavior success. | |
@retval FALSE do the reconnect behavior failed. | |
**/ | |
BOOLEAN | |
ReconnectController ( | |
IN EFI_HANDLE DriverHandle | |
); | |
/** | |
Converts the unicode character of the string from uppercase to lowercase. | |
This is a internal function. | |
@param ConfigString String to be converted | |
**/ | |
VOID | |
EFIAPI | |
HiiToLower ( | |
IN EFI_STRING ConfigString | |
); | |
#endif |