/** @file\r
-Private MACRO, structure and function definitions for Setup Browser module. \r
+Private MACRO, structure and function definitions for Setup Browser module.\r
\r
-Copyright (c) 2007, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
\r
**/\r
#include <Protocol/SimpleTextOut.h>\r
#include <Protocol/SimpleTextIn.h>\r
#include <Protocol/FormBrowser2.h>\r
+#include <Protocol/FormBrowserEx2.h>\r
+#include <Protocol/DisplayProtocol.h>\r
#include <Protocol/DevicePath.h>\r
#include <Protocol/UnicodeCollation.h>\r
#include <Protocol/HiiConfigAccess.h>\r
#include <Protocol/HiiConfigRouting.h>\r
#include <Protocol/HiiDatabase.h>\r
#include <Protocol/HiiString.h>\r
+#include <Protocol/UserManager.h>\r
+#include <Protocol/DevicePathFromText.h>\r
+#include <Protocol/RegularExpressionProtocol.h>\r
\r
#include <Guid/MdeModuleHii.h>\r
+#include <Guid/HiiPlatformSetupFormset.h>\r
+#include <Guid/HiiFormMapMethodGuid.h>\r
+#include <Guid/ZeroGuid.h>\r
\r
#include <Library/PrintLib.h>\r
#include <Library/DebugLib.h>\r
#include <Library/UefiBootServicesTableLib.h>\r
#include <Library/BaseLib.h>\r
#include <Library/MemoryAllocationLib.h>\r
-#include <Library/IfrSupportLib.h>\r
#include <Library/HiiLib.h>\r
#include <Library/PcdLib.h>\r
+#include <Library/DevicePathLib.h>\r
+#include <Library/UefiLib.h>\r
\r
-#include "Colors.h"\r
\r
//\r
// This is the generated header file which includes whatever needs to be exported (strings + IFR)\r
//\r
\r
-extern UINT8 SetupBrowserStrings[];\r
-\r
-//\r
-// Screen definitions\r
-//\r
-#define BANNER_HEIGHT 6\r
-#define BANNER_COLUMNS 3\r
-\r
-#define FRONT_PAGE_HEADER_HEIGHT 6\r
-#define NONE_FRONT_PAGE_HEADER_HEIGHT 3\r
-#define LEFT_SKIPPED_COLUMNS 4\r
-#define FOOTER_HEIGHT 4\r
-#define STATUS_BAR_HEIGHT 1\r
-#define SCROLL_ARROW_HEIGHT 1\r
-#define POPUP_PAD_SPACE_COUNT 5\r
-#define POPUP_FRAME_WIDTH 2\r
-\r
-//\r
-// Definition for function key setting\r
-//\r
-#define NONE_FUNCTION_KEY_SETTING 0\r
-#define DEFAULT_FUNCTION_KEY_SETTING (FUNCTION_ONE | FUNCTION_TWO | FUNCTION_NINE | FUNCTION_TEN)\r
-\r
-#define FUNCTION_ONE (1 << 0)\r
-#define FUNCTION_TWO (1 << 1)\r
-#define FUNCTION_NINE (1 << 2)\r
-#define FUNCTION_TEN (1 << 3)\r
-\r
-typedef struct {\r
- EFI_GUID FormSetGuid;\r
- UINTN KeySetting;\r
-} FUNCTIION_KEY_SETTING;\r
+#define UI_ACTION_NONE 0\r
+#define UI_ACTION_REFRESH_FORM 1\r
+#define UI_ACTION_REFRESH_FORMSET 2\r
+#define UI_ACTION_EXIT 3\r
\r
//\r
-// Character definitions\r
-//\r
-#define CHAR_SPACE 0x0020\r
-#define UPPER_LOWER_CASE_OFFSET 0x20\r
-\r
//\r
// Time definitions\r
//\r
#define ONE_SECOND 10000000\r
\r
-//\r
-// Display definitions\r
-//\r
-#define LEFT_HYPER_DELIMITER L'<'\r
-#define RIGHT_HYPER_DELIMITER L'>'\r
-\r
-#define LEFT_ONEOF_DELIMITER L'<'\r
-#define RIGHT_ONEOF_DELIMITER L'>'\r
-\r
-#define LEFT_NUMERIC_DELIMITER L'['\r
-#define RIGHT_NUMERIC_DELIMITER L']'\r
-\r
-#define LEFT_CHECKBOX_DELIMITER L'['\r
-#define RIGHT_CHECKBOX_DELIMITER L']'\r
-\r
-#define CHECK_ON L'X'\r
-#define CHECK_OFF L' '\r
-\r
-#define TIME_SEPARATOR L':'\r
-#define DATE_SEPARATOR L'/'\r
-\r
-#define YES_ANSWER L'Y'\r
-#define NO_ANSWER L'N'\r
-\r
-//\r
-// This is the Input Error Message\r
-//\r
-#define INPUT_ERROR 1\r
-\r
-//\r
-// This is the NV RAM update required Message\r
-//\r
-#define NV_UPDATE_REQUIRED 2\r
-\r
-//\r
-// Refresh the Status Bar with flags\r
-//\r
-#define REFRESH_STATUS_BAR 0xff\r
-\r
-//\r
// Incremental string lenght of ConfigRequest\r
//\r
#define CONFIG_REQUEST_STRING_INCREMENTAL 1024\r
\r
-//\r
-// HII value compare result\r
-//\r
-#define HII_VALUE_UNDEFINED 0\r
-#define HII_VALUE_EQUAL 1\r
-#define HII_VALUE_LESS_THAN 2\r
-#define HII_VALUE_GREATER_THAN 3\r
-\r
//\r
// Incremental size of stack for expression\r
//\r
#define EXPRESSION_STACK_SIZE_INCREMENT 0x100\r
\r
+#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))\r
\r
-#define EFI_SPECIFICATION_ERRATA_VERSION 0\r
-\r
-#define EFI_IFR_SPECIFICATION_VERSION \\r
- ((((EFI_SPECIFICATION_VERSION) >> 8) & 0xff00) | \\r
- (((EFI_SPECIFICATION_VERSION) & 0xf) << 4) | \\r
- ((EFI_SPECIFICATION_ERRATA_VERSION) & 0xf))\r
\r
#define SETUP_DRIVER_SIGNATURE SIGNATURE_32 ('F', 'B', 'D', 'V')\r
typedef struct {\r
//\r
// Produced protocol\r
//\r
- EFI_FORM_BROWSER2_PROTOCOL FormBrowser2;\r
+ EFI_FORM_BROWSER2_PROTOCOL FormBrowser2;\r
+ EDKII_FORM_BROWSER_EXTENSION_PROTOCOL FormBrowserEx;\r
\r
-} SETUP_DRIVER_PRIVATE_DATA;\r
+ EDKII_FORM_BROWSER_EXTENSION2_PROTOCOL FormBrowserEx2;\r
\r
-typedef struct {\r
- EFI_STRING_ID Banner[BANNER_HEIGHT][BANNER_COLUMNS];\r
-} BANNER_DATA;\r
+} SETUP_DRIVER_PRIVATE_DATA;\r
\r
//\r
// IFR relative definition\r
#define EFI_HII_EXPRESSION_DISABLE_IF 4\r
#define EFI_HII_EXPRESSION_VALUE 5\r
#define EFI_HII_EXPRESSION_RULE 6\r
+#define EFI_HII_EXPRESSION_READ 7\r
+#define EFI_HII_EXPRESSION_WRITE 8\r
+#define EFI_HII_EXPRESSION_WARNING_IF 9\r
\r
#define EFI_HII_VARSTORE_BUFFER 0\r
#define EFI_HII_VARSTORE_NAME_VALUE 1\r
-#define EFI_HII_VARSTORE_EFI_VARIABLE 2\r
+#define EFI_HII_VARSTORE_EFI_VARIABLE 2 // EFI Varstore type follow UEFI spec before 2.3.1.\r
+#define EFI_HII_VARSTORE_EFI_VARIABLE_BUFFER 3 // EFI varstore type follow UEFI spec 2.3.1 and later.\r
\r
#define FORM_INCONSISTENT_VALIDATION 0\r
#define FORM_NO_SUBMIT_VALIDATION 1\r
\r
-typedef struct {\r
- UINT8 Type;\r
- EFI_IFR_TYPE_VALUE Value;\r
-} EFI_HII_VALUE;\r
-\r
#define NAME_VALUE_NODE_SIGNATURE SIGNATURE_32 ('N', 'V', 'S', 'T')\r
\r
typedef struct {\r
\r
#define NAME_VALUE_NODE_FROM_LINK(a) CR (a, NAME_VALUE_NODE, Link, NAME_VALUE_NODE_SIGNATURE)\r
\r
-#define FORMSET_STORAGE_SIGNATURE SIGNATURE_32 ('F', 'S', 'T', 'G')\r
+#define BROWSER_STORAGE_SIGNATURE SIGNATURE_32 ('B', 'S', 'T', 'G')\r
\r
typedef struct {\r
UINTN Signature;\r
\r
UINT8 Type; // Storage type\r
\r
- UINT16 VarStoreId;\r
+ BOOLEAN Initialized; // Whether this varstore is initialized, efi varstore not used.\r
+\r
+ EFI_HII_HANDLE HiiHandle; // HiiHandle for this varstore, efi varstore not used.\r
EFI_GUID Guid;\r
\r
CHAR16 *Name; // For EFI_IFR_VARSTORE\r
\r
UINT32 Attributes; // For EFI_IFR_VARSTORE_EFI: EFI Variable attribute\r
\r
+ CHAR16 *ConfigRequest; // <ConfigRequest> = <ConfigHdr> + <RequestElement>\r
+ // <RequestElement> includes all fields which is used by current form sets.\r
+ UINTN SpareStrLen; // Spare length of ConfigRequest string buffer\r
+} BROWSER_STORAGE;\r
+\r
+#define BROWSER_STORAGE_FROM_LINK(a) CR (a, BROWSER_STORAGE, Link, BROWSER_STORAGE_SIGNATURE)\r
+\r
+#define FORMSET_STORAGE_SIGNATURE SIGNATURE_32 ('F', 'S', 'T', 'G')\r
+\r
+typedef struct {\r
+ UINTN Signature;\r
+ LIST_ENTRY Link;\r
+\r
+ LIST_ENTRY SaveFailLink;\r
+\r
+ UINT16 VarStoreId;\r
+\r
+ BROWSER_STORAGE *BrowserStorage;\r
+\r
CHAR16 *ConfigHdr; // <ConfigHdr>\r
+\r
CHAR16 *ConfigRequest; // <ConfigRequest> = <ConfigHdr> + <RequestElement>\r
+ CHAR16 *ConfigAltResp; // Alt config response string for this ConfigRequest.\r
+ BOOLEAN HasCallAltCfg; // Flag to show whether browser has call ExtractConfig to get Altcfg string.\r
UINTN ElementCount; // Number of <RequestElement> in the <ConfigRequest>\r
UINTN SpareStrLen; // Spare length of ConfigRequest string buffer\r
+ CHAR16 *RestoreConfigRequest; // When submit formset fail, the element need to be restored\r
+ CHAR16 *SyncConfigRequest; // When submit formset fail, the element need to be synced\r
} FORMSET_STORAGE;\r
\r
#define FORMSET_STORAGE_FROM_LINK(a) CR (a, FORMSET_STORAGE, Link, FORMSET_STORAGE_SIGNATURE)\r
+#define FORMSET_STORAGE_FROM_SAVE_FAIL_LINK(a) CR (a, FORMSET_STORAGE, SaveFailLink, FORMSET_STORAGE_SIGNATURE)\r
+\r
+typedef union {\r
+ EFI_STRING_ID VarName;\r
+ UINT16 VarOffset;\r
+} VAR_STORE_INFO;\r
\r
#define EXPRESSION_OPCODE_SIGNATURE SIGNATURE_32 ('E', 'X', 'O', 'P')\r
\r
\r
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\r
\r
- EFI_QUESTION_ID QuestionId; // For EFI_IFR_EQ_ID_ID, EFI_IFR_EQ_ID_LIST, EFI_IFR_QUESTION_REF1\r
+ EFI_QUESTION_ID QuestionId; // For EFI_IFR_EQ_ID_ID, EFI_IFR_EQ_ID_VAL_LIST, EFI_IFR_QUESTION_REF1\r
EFI_QUESTION_ID QuestionId2;\r
\r
- UINT16 ListLength; // For EFI_IFR_EQ_ID_LIST\r
+ UINT16 ListLength; // For EFI_IFR_EQ_ID_VAL_LIST\r
UINT16 *ValueList;\r
\r
EFI_STRING_ID DevicePath; // For EFI_IFR_QUESTION_REF3_2, EFI_IFR_QUESTION_REF3_3\r
EFI_GUID Guid;\r
+\r
+ BROWSER_STORAGE *VarStorage; // For EFI_IFR_SET, EFI_IFR_GET\r
+ VAR_STORE_INFO VarStoreInfo;// For EFI_IFR_SET, EFI_IFR_GET\r
+ UINT8 ValueType; // For EFI_IFR_SET, EFI_IFR_GET\r
+ UINT8 ValueWidth; // For EFI_IFR_SET, EFI_IFR_GET\r
+ CHAR16 *ValueName; // For EFI_IFR_SET, EFI_IFR_GET\r
+ LIST_ENTRY MapExpressionList; // nested expressions inside of Map opcode.\r
} EXPRESSION_OPCODE;\r
\r
#define EXPRESSION_OPCODE_FROM_LINK(a) CR (a, EXPRESSION_OPCODE, Link, EXPRESSION_OPCODE_SIGNATURE)\r
\r
EFI_HII_VALUE Result; // Expression evaluation result\r
\r
+ UINT8 TimeOut; // For EFI_IFR_WARNING_IF\r
+ EFI_IFR_OP_HEADER *OpCode; // Save the opcode buffer.\r
+\r
LIST_ENTRY OpCodeListHead; // OpCodes consist of this expression (EXPRESSION_OPCODE)\r
} FORM_EXPRESSION;\r
\r
#define FORM_EXPRESSION_FROM_LINK(a) CR (a, FORM_EXPRESSION, Link, FORM_EXPRESSION_SIGNATURE)\r
\r
+#define FORM_EXPRESSION_LIST_SIGNATURE SIGNATURE_32 ('F', 'E', 'X', 'R')\r
+\r
+typedef struct {\r
+ UINTN Signature;\r
+ UINTN Count;\r
+ FORM_EXPRESSION *Expression[1]; // Array[Count] of expressions\r
+} FORM_EXPRESSION_LIST;\r
+\r
#define QUESTION_DEFAULT_SIGNATURE SIGNATURE_32 ('Q', 'D', 'F', 'T')\r
\r
typedef struct {\r
#define QUESTION_OPTION_SIGNATURE SIGNATURE_32 ('Q', 'O', 'P', 'T')\r
\r
typedef struct {\r
- UINTN Signature;\r
- LIST_ENTRY Link;\r
+ UINTN Signature;\r
+ LIST_ENTRY Link;\r
\r
- EFI_STRING_ID Text;\r
- UINT8 Flags;\r
- EFI_HII_VALUE Value;\r
- EFI_IMAGE_ID ImageId;\r
+ EFI_IFR_ONE_OF_OPTION *OpCode; // OneOfOption Data\r
\r
- FORM_EXPRESSION *SuppressExpression; // Non-NULL indicates nested inside of SuppressIf\r
+ EFI_STRING_ID Text;\r
+ UINT8 Flags;\r
+ EFI_HII_VALUE Value;\r
+ EFI_IMAGE_ID ImageId;\r
+\r
+ FORM_EXPRESSION_LIST *SuppressExpression; // Non-NULL indicates nested inside of SuppressIf\r
} QUESTION_OPTION;\r
\r
#define QUESTION_OPTION_FROM_LINK(a) CR (a, QUESTION_OPTION, Link, QUESTION_OPTION_SIGNATURE)\r
\r
+typedef enum {\r
+ ExpressFalse = 0,\r
+ ExpressGrayOut,\r
+ ExpressSuppress,\r
+ ExpressDisable\r
+} EXPRESS_RESULT;\r
+\r
+typedef enum {\r
+ ExpressNone = 0,\r
+ ExpressForm,\r
+ ExpressStatement,\r
+ ExpressOption\r
+} EXPRESS_LEVEL;\r
+\r
+typedef struct _FORM_BROWSER_STATEMENT FORM_BROWSER_STATEMENT;\r
+\r
#define FORM_BROWSER_STATEMENT_SIGNATURE SIGNATURE_32 ('F', 'S', 'T', 'A')\r
-typedef struct {\r
+\r
+struct _FORM_BROWSER_STATEMENT{\r
UINTN Signature;\r
LIST_ENTRY Link;\r
\r
UINT8 Operand; // The operand (first byte) of this Statement or Question\r
+ EFI_IFR_OP_HEADER *OpCode;\r
\r
//\r
// Statement Header\r
EFI_STRING_ID Help;\r
EFI_STRING_ID TextTwo; // For EFI_IFR_TEXT\r
\r
+ //\r
+ // Fake Question Id, used for statement not has true QuestionId.\r
+ //\r
+ EFI_QUESTION_ID FakeQuestionId;\r
+\r
//\r
// Question Header\r
//\r
EFI_QUESTION_ID QuestionId; // The value of zero is reserved\r
EFI_VARSTORE_ID VarStoreId; // A value of zero indicates no variable storage\r
- FORMSET_STORAGE *Storage;\r
- union {\r
- EFI_STRING_ID VarName;\r
- UINT16 VarOffset;\r
- } VarStoreInfo;\r
+ BROWSER_STORAGE *Storage;\r
+ VAR_STORE_INFO VarStoreInfo;\r
UINT16 StorageWidth;\r
+ UINT16 BitStorageWidth;\r
+ UINT16 BitVarOffset;\r
UINT8 QuestionFlags;\r
+ BOOLEAN QuestionReferToBitField;// Whether the question is stored in a bit field.\r
CHAR16 *VariableName; // Name/Value or EFI Variable name\r
CHAR16 *BlockName; // Buffer storage block name: "OFFSET=...WIDTH=..."\r
\r
EFI_HII_VALUE HiiValue; // Edit copy for checkbox, numberic, oneof\r
UINT8 *BufferValue; // Edit copy for string, password, orderedlist\r
+ UINT8 ValueType; // Data type for orderedlist value array\r
\r
//\r
// OpCode specific members\r
UINT64 Step;\r
\r
EFI_DEFAULT_ID DefaultId; // for EFI_IFR_RESET_BUTTON\r
- EFI_FORM_ID RefFormId; // for EFI_IFR_REF\r
- EFI_QUESTION_ID RefQuestionId; // for EFI_IFR_REF2\r
- EFI_GUID RefFormSetId; // for EFI_IFR_REF3\r
- EFI_STRING_ID RefDevicePath; // for EFI_IFR_REF4\r
-\r
+ EFI_GUID RefreshGuid; // for EFI_IFR_REFRESH_ID\r
+ BOOLEAN Locked; // Whether this statement is locked.\r
+ BOOLEAN ValueChanged; // Whether this statement's value is changed.\r
//\r
// Get from IFR parsing\r
//\r
\r
EFI_IMAGE_ID ImageId; // nested EFI_IFR_IMAGE\r
UINT8 RefreshInterval; // nested EFI_IFR_REFRESH, refresh interval(in seconds) for Question value, 0 means no refresh\r
- BOOLEAN InSubtitle; // nesting inside of EFI_IFR_SUBTITLE\r
+\r
+ FORM_BROWSER_STATEMENT *ParentStatement;\r
\r
LIST_ENTRY InconsistentListHead;// nested inconsistent expression list (FORM_EXPRESSION)\r
LIST_ENTRY NoSubmitListHead; // nested nosubmit expression list (FORM_EXPRESSION)\r
- FORM_EXPRESSION *GrayOutExpression; // nesting inside of GrayOutIf\r
- FORM_EXPRESSION *SuppressExpression; // nesting inside of SuppressIf\r
+ LIST_ENTRY WarningListHead; // nested warning expression list (FORM_EXPRESSION)\r
+ FORM_EXPRESSION_LIST *Expression; // nesting inside of GrayOutIf/DisableIf/SuppressIf\r
\r
-} FORM_BROWSER_STATEMENT;\r
+ FORM_EXPRESSION *ReadExpression; // nested EFI_IFR_READ, provide this question value by read expression.\r
+ FORM_EXPRESSION *WriteExpression; // nested EFI_IFR_WRITE, evaluate write expression after this question value is set.\r
+};\r
\r
#define FORM_BROWSER_STATEMENT_FROM_LINK(a) CR (a, FORM_BROWSER_STATEMENT, Link, FORM_BROWSER_STATEMENT_SIGNATURE)\r
\r
+#define FORM_BROWSER_CONFIG_REQUEST_SIGNATURE SIGNATURE_32 ('F', 'C', 'R', 'S')\r
+typedef struct {\r
+ UINTN Signature;\r
+ LIST_ENTRY Link;\r
+\r
+ LIST_ENTRY SaveFailLink;\r
+\r
+ CHAR16 *ConfigRequest; // <ConfigRequest> = <ConfigHdr> + <RequestElement>\r
+ CHAR16 *ConfigAltResp; // Alt config response string for this ConfigRequest.\r
+ UINTN ElementCount; // Number of <RequestElement> in the <ConfigRequest>\r
+ UINTN SpareStrLen;\r
+ CHAR16 *RestoreConfigRequest; // When submit form fail, the element need to be restored\r
+ CHAR16 *SyncConfigRequest; // When submit form fail, the element need to be synced\r
+\r
+ BROWSER_STORAGE *Storage;\r
+} FORM_BROWSER_CONFIG_REQUEST;\r
+#define FORM_BROWSER_CONFIG_REQUEST_FROM_LINK(a) CR (a, FORM_BROWSER_CONFIG_REQUEST, Link, FORM_BROWSER_CONFIG_REQUEST_SIGNATURE)\r
+#define FORM_BROWSER_CONFIG_REQUEST_FROM_SAVE_FAIL_LINK(a) CR (a, FORM_BROWSER_CONFIG_REQUEST, SaveFailLink, FORM_BROWSER_CONFIG_REQUEST_SIGNATURE)\r
+\r
#define FORM_BROWSER_FORM_SIGNATURE SIGNATURE_32 ('F', 'F', 'R', 'M')\r
+#define STANDARD_MAP_FORM_TYPE 0x01\r
\r
typedef struct {\r
- UINTN Signature;\r
- LIST_ENTRY Link;\r
+ UINTN Signature;\r
+ LIST_ENTRY Link;\r
\r
- UINT16 FormId;\r
- EFI_STRING_ID FormTitle;\r
+ UINT16 FormId; // FormId of normal form or formmap form.\r
+ EFI_STRING_ID FormTitle; // FormTile of normal form, or FormMapMethod title of formmap form.\r
+ UINT16 FormType; // Specific form type for the different form.\r
\r
- EFI_IMAGE_ID ImageId;\r
+ EFI_IMAGE_ID ImageId;\r
\r
- LIST_ENTRY ExpressionListHead; // List of Expressions (FORM_EXPRESSION)\r
- LIST_ENTRY StatementListHead; // List of Statements and Questions (FORM_BROWSER_STATEMENT)\r
+ BOOLEAN ModalForm; // Whether this is a modal form.\r
+ BOOLEAN Locked; // Whether this form is locked.\r
+ EFI_GUID RefreshGuid; // Form refresh event guid.\r
+\r
+ LIST_ENTRY FormViewListHead; // List of type FORMID_INFO is Browser View Form History List.\r
+ LIST_ENTRY ExpressionListHead; // List of Expressions (FORM_EXPRESSION)\r
+ LIST_ENTRY StatementListHead; // List of Statements and Questions (FORM_BROWSER_STATEMENT)\r
+ LIST_ENTRY ConfigRequestHead; // List of configreques for all storage.\r
+ FORM_EXPRESSION_LIST *SuppressExpression; // nesting inside of SuppressIf\r
} FORM_BROWSER_FORM;\r
\r
#define FORM_BROWSER_FORM_FROM_LINK(a) CR (a, FORM_BROWSER_FORM, Link, FORM_BROWSER_FORM_SIGNATURE)\r
\r
#define FORMSET_DEFAULTSTORE_FROM_LINK(a) CR (a, FORMSET_DEFAULTSTORE, Link, FORMSET_DEFAULTSTORE_SIGNATURE)\r
\r
+#define FORM_BROWSER_FORMSET_SIGNATURE SIGNATURE_32 ('F', 'B', 'F', 'S')\r
+\r
typedef struct {\r
- EFI_HII_HANDLE HiiHandle;\r
+ UINTN Signature;\r
+ LIST_ENTRY Link;\r
+ LIST_ENTRY SaveFailLink;\r
+\r
+ EFI_HII_HANDLE HiiHandle; // unique id for formset.\r
EFI_HANDLE DriverHandle;\r
EFI_HII_CONFIG_ACCESS_PROTOCOL *ConfigAccess;\r
EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
UINTN IfrBinaryLength;\r
UINT8 *IfrBinaryData;\r
\r
+ BOOLEAN QuestionInited; // Have finished question initilization?\r
EFI_GUID Guid;\r
EFI_STRING_ID FormSetTitle;\r
EFI_STRING_ID Help;\r
- UINT16 Class;\r
- UINT16 SubClass;\r
+ UINT8 NumberOfClassGuid;\r
+ EFI_GUID ClassGuid[3]; // Up to three ClassGuid\r
+ UINT16 Class; // Tiano extended Class code\r
+ UINT16 SubClass; // Tiano extended Subclass code\r
EFI_IMAGE_ID ImageId;\r
+ EFI_IFR_OP_HEADER *OpCode; //mainly for formset op to get ClassGuid\r
\r
FORM_BROWSER_STATEMENT *StatementBuffer; // Buffer for all Statements and Questions\r
EXPRESSION_OPCODE *ExpressionBuffer; // Buffer for all Expression OpCode\r
+ FORM_BROWSER_FORM *SaveFailForm; // The form which failed to save.\r
+ FORM_BROWSER_STATEMENT *SaveFailStatement; // The Statement which failed to save.\r
\r
+ LIST_ENTRY StatementListOSF; // Statement list out side of the form.\r
LIST_ENTRY StorageListHead; // Storage list (FORMSET_STORAGE)\r
+ LIST_ENTRY SaveFailStorageListHead; // Storage list for the save fail storage.\r
LIST_ENTRY DefaultStoreListHead; // DefaultStore list (FORMSET_DEFAULTSTORE)\r
LIST_ENTRY FormListHead; // Form list (FORM_BROWSER_FORM)\r
+ LIST_ENTRY ExpressionListHead; // List of Expressions (FORM_EXPRESSION)\r
} FORM_BROWSER_FORMSET;\r
+#define FORM_BROWSER_FORMSET_FROM_LINK(a) CR (a, FORM_BROWSER_FORMSET, Link, FORM_BROWSER_FORMSET_SIGNATURE)\r
\r
+#define FORM_BROWSER_FORMSET_FROM_SAVE_FAIL_LINK(a) CR (a, FORM_BROWSER_FORMSET, SaveFailLink, FORM_BROWSER_FORMSET_SIGNATURE)\r
\r
-extern EFI_HII_DATABASE_PROTOCOL *mHiiDatabase;\r
-extern EFI_HII_STRING_PROTOCOL *mHiiString;\r
-extern EFI_HII_CONFIG_ROUTING_PROTOCOL *mHiiConfigRouting;\r
-\r
-extern BANNER_DATA *BannerData;\r
-extern EFI_HII_HANDLE FrontPageHandle;\r
-extern UINTN gClassOfVfr;\r
-extern UINTN gFunctionKeySetting;\r
-extern BOOLEAN gResetRequired;\r
-extern BOOLEAN gNvUpdateRequired;\r
-extern EFI_HII_HANDLE gHiiHandle;\r
-extern UINT16 gDirection;\r
-extern EFI_SCREEN_DESCRIPTOR gScreenDimensions;\r
-extern BOOLEAN gUpArrow;\r
-extern BOOLEAN gDownArrow;\r
-\r
-//\r
-// Browser Global Strings\r
-//\r
-extern CHAR16 *gFunctionOneString;\r
-extern CHAR16 *gFunctionTwoString;\r
-extern CHAR16 *gFunctionNineString;\r
-extern CHAR16 *gFunctionTenString;\r
-extern CHAR16 *gEnterString;\r
-extern CHAR16 *gEnterCommitString;\r
-extern CHAR16 *gEnterEscapeString;\r
-extern CHAR16 *gEscapeString;\r
-extern CHAR16 *gSaveFailed;\r
-extern CHAR16 *gMoveHighlight;\r
-extern CHAR16 *gMakeSelection;\r
-extern CHAR16 *gDecNumericInput;\r
-extern CHAR16 *gHexNumericInput;\r
-extern CHAR16 *gToggleCheckBox;\r
-extern CHAR16 *gPromptForData;\r
-extern CHAR16 *gPromptForPassword;\r
-extern CHAR16 *gPromptForNewPassword;\r
-extern CHAR16 *gConfirmPassword;\r
-extern CHAR16 *gConfirmError;\r
-extern CHAR16 *gPassowordInvalid;\r
-extern CHAR16 *gPressEnter;\r
-extern CHAR16 *gEmptyString;\r
-extern CHAR16 *gAreYouSure;\r
-extern CHAR16 *gYesResponse;\r
-extern CHAR16 *gNoResponse;\r
-extern CHAR16 *gMiniString;\r
-extern CHAR16 *gPlusString;\r
-extern CHAR16 *gMinusString;\r
-extern CHAR16 *gAdjustNumber;\r
-extern CHAR16 *gSaveChanges;\r
-extern CHAR16 *gOptionMismatch;\r
-\r
-extern CHAR16 gPromptBlockWidth;\r
-extern CHAR16 gOptionBlockWidth;\r
-extern CHAR16 gHelpBlockWidth;\r
-\r
-extern EFI_GUID gZeroGuid;\r
-extern EFI_GUID gTianoHiiIfrGuid;\r
-\r
-//\r
-// Global Procedure Defines\r
-//\r
-\r
-/**\r
- Initialize the HII String Token to the correct values.\r
+typedef struct {\r
+ LIST_ENTRY Link;\r
+ EFI_EVENT RefreshEvent;\r
+} FORM_BROWSER_REFRESH_EVENT_NODE;\r
\r
-**/\r
-VOID\r
-InitializeBrowserStrings (\r
- VOID\r
- );\r
+#define FORM_BROWSER_REFRESH_EVENT_FROM_LINK(a) BASE_CR (a, FORM_BROWSER_REFRESH_EVENT_NODE, Link)\r
\r
-/**\r
- Prints a unicode string to the default console,\r
- using L"%s" format.\r
\r
- @param String String pointer.\r
+typedef struct {\r
+ EFI_HII_HANDLE Handle;\r
\r
- @return Length of string printed to the console\r
+ //\r
+ // Target formset/form/Question information\r
+ //\r
+ EFI_GUID FormSetGuid;\r
+ UINT16 FormId;\r
+ UINT16 QuestionId;\r
+ UINTN Sequence; // used for time/date only.\r
\r
-**/\r
-UINTN\r
-PrintString (\r
- IN CHAR16 *String\r
- );\r
+ UINTN TopRow;\r
+ UINTN BottomRow;\r
+ UINTN PromptCol;\r
+ UINTN OptionCol;\r
+ UINTN CurrentRow;\r
\r
-/**\r
- Prints a chracter to the default console,\r
- using L"%c" format.\r
+ //\r
+ // Ation for Browser to taken:\r
+ // UI_ACTION_NONE - navigation inside a form\r
+ // UI_ACTION_REFRESH_FORM - re-evaluate expressions and repaint form\r
+ // UI_ACTION_REFRESH_FORMSET - re-parse formset IFR binary\r
+ //\r
+ UINTN Action;\r
\r
- @param Character Character to print.\r
+ //\r
+ // Current selected fomset/form/Question\r
+ //\r
+ FORM_BROWSER_FORMSET *FormSet;\r
+ FORM_BROWSER_FORM *Form;\r
+ FORM_BROWSER_STATEMENT *Statement;\r
\r
- @return Length of string printed to the console.\r
+ //\r
+ // Whether the Form is editable\r
+ //\r
+ BOOLEAN FormEditable;\r
\r
-**/\r
-UINTN\r
-PrintChar (\r
- CHAR16 Character\r
- );\r
+ FORM_ENTRY_INFO *CurrentMenu;\r
+} UI_MENU_SELECTION;\r
\r
-/**\r
- Prints a formatted unicode string to the default console, at\r
- the supplied cursor position.\r
+#define BROWSER_CONTEXT_SIGNATURE SIGNATURE_32 ('B', 'C', 'T', 'X')\r
\r
- @param Column The cursor position to print the string at.\r
- @param Row The cursor position to print the string at\r
- @param Fmt Format string\r
- @param ... Variable argument list for formating string.\r
+typedef struct {\r
+ UINTN Signature;\r
+ LIST_ENTRY Link;\r
\r
- @return Length of string printed to the console\r
+ //\r
+ // Globals defined in Setup.c\r
+ //\r
+ BOOLEAN FlagReconnect;\r
+ BOOLEAN CallbackReconnect;\r
+ BOOLEAN ResetRequired;\r
+ BOOLEAN ExitRequired;\r
+ EFI_HII_HANDLE HiiHandle;\r
+ EFI_GUID FormSetGuid;\r
+ EFI_FORM_ID FormId;\r
+ UI_MENU_SELECTION *Selection;\r
+ FORM_BROWSER_FORMSET *SystemLevelFormSet;\r
+ EFI_QUESTION_ID CurFakeQestId;\r
+ BOOLEAN HiiPackageListUpdated;\r
+ BOOLEAN FinishRetrieveCall;\r
+ LIST_ENTRY FormHistoryList;\r
+ LIST_ENTRY FormSetList;\r
+} BROWSER_CONTEXT;\r
+\r
+#define BROWSER_CONTEXT_FROM_LINK(a) CR (a, BROWSER_CONTEXT, Link, BROWSER_CONTEXT_SIGNATURE)\r
\r
-**/\r
-UINTN\r
-PrintAt (\r
- IN UINTN Column,\r
- IN UINTN Row,\r
- IN CHAR16 *Fmt,\r
- ...\r
- );\r
+//\r
+// Scope for get defaut value. It may be GetDefaultForNoStorage, GetDefaultForStorage or GetDefaultForAll.\r
+//\r
+typedef enum {\r
+ GetDefaultForNoStorage, // Get default value for question which not has storage.\r
+ GetDefaultForStorage, // Get default value for question which has storage.\r
+ GetDefaultForAll, // Get default value for all questions.\r
+ GetDefaultForMax // Invalid value.\r
+} BROWSER_GET_DEFAULT_VALUE;\r
\r
-/**\r
- Prints a unicode string to the default console, at\r
- the supplied cursor position, using L"%s" format.\r
+//\r
+// Get/set question value from/to.\r
+//\r
+typedef enum {\r
+ GetSetValueWithEditBuffer = 0, // Get/Set question value from/to editbuffer in the storage.\r
+ GetSetValueWithBuffer, // Get/Set question value from/to buffer in the storage.\r
+ GetSetValueWithHiiDriver, // Get/Set question value from/to hii driver.\r
+ GetSetValueWithBothBuffer, // Compare the editbuffer with buffer for this question, not use the question value.\r
+ GetSetValueWithMax // Invalid value.\r
+} GET_SET_QUESTION_VALUE_WITH;\r
\r
- @param Column The cursor position to print the string at.\r
- @param Row The cursor position to print the string at\r
- @param String String pointer.\r
+extern EFI_HII_DATABASE_PROTOCOL *mHiiDatabase;\r
+extern EFI_HII_CONFIG_ROUTING_PROTOCOL *mHiiConfigRouting;\r
+extern EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL *mPathFromText;\r
+extern EDKII_FORM_DISPLAY_ENGINE_PROTOCOL *mFormDisplay;\r
+\r
+extern BOOLEAN gCallbackReconnect;\r
+extern BOOLEAN gFlagReconnect;\r
+extern BOOLEAN gResetRequiredFormLevel;\r
+extern BOOLEAN gResetRequiredSystemLevel;\r
+extern BOOLEAN gExitRequired;\r
+extern LIST_ENTRY gBrowserFormSetList;\r
+extern LIST_ENTRY gBrowserHotKeyList;\r
+extern BROWSER_SETTING_SCOPE gBrowserSettingScope;\r
+extern EXIT_HANDLER ExitHandlerFunction;\r
+extern EFI_HII_HANDLE mCurrentHiiHandle;\r
+extern SETUP_DRIVER_PRIVATE_DATA mPrivateData;\r
+//\r
+// Browser Global Strings\r
+//\r
+extern CHAR16 *gEmptyString;\r
\r
- @return Length of string printed to the console\r
+extern UI_MENU_SELECTION *gCurrentSelection;\r
+extern BOOLEAN mHiiPackageListUpdated;\r
+extern UINT16 mCurFakeQestId;\r
+extern BOOLEAN mFinishRetrieveCall;\r
\r
-**/\r
-UINTN\r
-PrintStringAt (\r
- IN UINTN Column,\r
- IN UINTN Row,\r
- IN CHAR16 *String\r
- );\r
+//\r
+// Global Procedure Defines\r
+//\r
+#include "Expression.h"\r
\r
/**\r
- Prints a chracter to the default console, at\r
- the supplied cursor position, using L"%c" format.\r
-\r
- @param Column The cursor position to print the string at.\r
- @param Row The cursor position to print the string at.\r
- @param Character Character to print.\r
-\r
- @return Length of string printed to the console.\r
+ Initialize the HII String Token to the correct values.\r
\r
**/\r
-UINTN\r
-PrintCharAt (\r
- IN UINTN Column,\r
- IN UINTN Row,\r
- CHAR16 Character\r
+VOID\r
+InitializeBrowserStrings (\r
+ VOID\r
);\r
\r
/**\r
IN OUT FORM_BROWSER_FORMSET *FormSet\r
);\r
\r
-/**\r
- This function displays the page frame.\r
-\r
-**/\r
-VOID\r
-DisplayPageFrame (\r
- VOID\r
- );\r
\r
/**\r
Create a new string in HII Package List.\r
);\r
\r
/**\r
- Draw a pop up windows based on the dimension, number of lines and\r
- strings specified.\r
+ Get Value for given Name from a NameValue Storage.\r
+\r
+ @param Storage The NameValue Storage.\r
+ @param Name The Name.\r
+ @param Value The retured Value.\r
+ @param GetValueFrom Where to get source value, from EditValue or Value.\r
\r
- @param RequestedWidth The width of the pop-up.\r
- @param NumberOfLines The number of lines.\r
- @param Marker The variable argument list for the list of string to be printed.\r
+ @retval EFI_SUCCESS Value found for given Name.\r
+ @retval EFI_NOT_FOUND No such Name found in NameValue storage.\r
\r
**/\r
-VOID\r
-CreateSharedPopUp (\r
- IN UINTN RequestedWidth,\r
- IN UINTN NumberOfLines,\r
- IN VA_LIST Marker\r
- );\r
-\r
-/**\r
- Routine used to abstract a generic dialog interface and return the selected key or string\r
-\r
- @param NumberOfLines The number of lines for the dialog box\r
- @param HotKey Defines whether a single character is parsed\r
- (TRUE) and returned in KeyValue or a string is\r
- returned in StringBuffer. Two special characters\r
- are considered when entering a string, a SCAN_ESC\r
- and an CHAR_CARRIAGE_RETURN. SCAN_ESC terminates\r
- string input and returns\r
- @param MaximumStringSize The maximum size in bytes of a typed in string\r
- (each character is a CHAR16) and the minimum\r
- string returned is two bytes\r
- @param StringBuffer The passed in pointer to the buffer which will\r
- hold the typed in string if HotKey is FALSE\r
- @param KeyValue The EFI_KEY value returned if HotKey is TRUE..\r
- @param ... A series of (quantity == NumberOfLines) text\r
- strings which will be used to construct the dialog\r
- box\r
-\r
- @retval EFI_SUCCESS Displayed dialog and received user interaction\r
- @retval EFI_INVALID_PARAMETER One of the parameters was invalid (e.g.\r
- (StringBuffer == NULL) && (HotKey == FALSE))\r
- @retval EFI_DEVICE_ERROR User typed in an ESC character to exit the routine\r
+EFI_STATUS\r
+GetValueByName (\r
+ IN BROWSER_STORAGE *Storage,\r
+ IN CHAR16 *Name,\r
+ IN OUT CHAR16 **Value,\r
+ IN GET_SET_QUESTION_VALUE_WITH GetValueFrom\r
+ );\r
+\r
+/**\r
+ Set Value of given Name in a NameValue Storage.\r
+\r
+ @param Storage The NameValue Storage.\r
+ @param Name The Name.\r
+ @param Value The Value to set.\r
+ @param SetValueTo Whether update editValue or Value.\r
+ @param ReturnNode The node use the input name.\r
+\r
+ @retval EFI_SUCCESS Value found for given Name.\r
+ @retval EFI_NOT_FOUND No such Name found in NameValue storage.\r
\r
**/\r
EFI_STATUS\r
-CreateDialog (\r
- IN UINTN NumberOfLines,\r
- IN BOOLEAN HotKey,\r
- IN UINTN MaximumStringSize,\r
- OUT CHAR16 *StringBuffer,\r
- OUT EFI_INPUT_KEY *KeyValue,\r
- ...\r
+SetValueByName (\r
+ IN BROWSER_STORAGE *Storage,\r
+ IN CHAR16 *Name,\r
+ IN CHAR16 *Value,\r
+ IN GET_SET_QUESTION_VALUE_WITH SetValueTo,\r
+ OUT NAME_VALUE_NODE **ReturnNode\r
+ );\r
+\r
+/**\r
+ Validate whether this question's value has changed.\r
+\r
+ @param FormSet FormSet data structure.\r
+ @param Form Form data structure.\r
+ @param Question Question to be initialized.\r
+ @param GetValueFrom Where to get value, may from editbuffer, buffer or hii driver.\r
+\r
+ @retval TRUE Question's value has changed.\r
+ @retval FALSE Question's value has not changed\r
+\r
+**/\r
+BOOLEAN\r
+IsQuestionValueChanged (\r
+ IN FORM_BROWSER_FORMSET *FormSet,\r
+ IN FORM_BROWSER_FORM *Form,\r
+ IN OUT FORM_BROWSER_STATEMENT *Question,\r
+ IN GET_SET_QUESTION_VALUE_WITH GetValueFrom\r
+ );\r
+\r
+/**\r
+ Validate the FormSet. If the formset is not validate, remove it from the list.\r
+\r
+ @param FormSet The input FormSet which need to validate.\r
+\r
+ @retval TRUE The handle is validate.\r
+ @retval FALSE The handle is invalidate.\r
+\r
+**/\r
+BOOLEAN\r
+ValidateFormSet (\r
+ FORM_BROWSER_FORMSET *FormSet\r
+ );\r
+\r
+/**\r
+ Update the ValueChanged status for questions.\r
+\r
+ @param FormSet FormSet data structure.\r
+ @param Form Form data structure.\r
+ @param SettingScope Setting Scope for Default action.\r
+\r
+**/\r
+VOID\r
+UpdateStatementStatus (\r
+ IN FORM_BROWSER_FORMSET *FormSet,\r
+ IN FORM_BROWSER_FORM *Form,\r
+ IN BROWSER_SETTING_SCOPE SettingScope\r
);\r
\r
/**\r
@param FormSet FormSet data structure.\r
@param Form Form data structure.\r
@param Question Question to be initialized.\r
- @param Cached TRUE: get from Edit copy FALSE: get from original\r
- Storage\r
+ @param GetValueFrom Where to get value, may from editbuffer, buffer or hii driver.\r
\r
@retval EFI_SUCCESS The function completed successfully.\r
\r
IN FORM_BROWSER_FORMSET *FormSet,\r
IN FORM_BROWSER_FORM *Form,\r
IN OUT FORM_BROWSER_STATEMENT *Question,\r
- IN BOOLEAN Cached\r
+ IN GET_SET_QUESTION_VALUE_WITH GetValueFrom\r
);\r
\r
/**\r
@param FormSet FormSet data structure.\r
@param Form Form data structure.\r
@param Question Pointer to the Question.\r
- @param Cached TRUE: set to Edit copy FALSE: set to original\r
- Storage\r
+ @param SetValueTo Update the question value to editbuffer , buffer or hii driver.\r
\r
@retval EFI_SUCCESS The function completed successfully.\r
\r
IN FORM_BROWSER_FORMSET *FormSet,\r
IN FORM_BROWSER_FORM *Form,\r
IN OUT FORM_BROWSER_STATEMENT *Question,\r
- IN BOOLEAN Cached\r
+ IN GET_SET_QUESTION_VALUE_WITH SetValueTo\r
);\r
\r
/**\r
IN UINTN Type\r
);\r
\r
+\r
+/**\r
+ Discard data based on the input setting scope (Form, FormSet or System).\r
+\r
+ @param FormSet FormSet data structure.\r
+ @param Form Form data structure.\r
+ @param SettingScope Setting Scope for Discard action.\r
+\r
+ @retval EFI_SUCCESS The function completed successfully.\r
+ @retval EFI_UNSUPPORTED Unsupport SettingScope.\r
+\r
+**/\r
+EFI_STATUS\r
+DiscardForm (\r
+ IN FORM_BROWSER_FORMSET *FormSet,\r
+ IN FORM_BROWSER_FORM *Form,\r
+ IN BROWSER_SETTING_SCOPE SettingScope\r
+ );\r
+\r
/**\r
- Submit a Form.\r
+ Submit data based on the input Setting level (Form, FormSet or System).\r
\r
@param FormSet FormSet data structure.\r
@param Form Form data structure.\r
+ @param SettingScope Setting Scope for Submit action.\r
\r
@retval EFI_SUCCESS The function completed successfully.\r
+ @retval EFI_UNSUPPORTED Unsupport SettingScope.\r
\r
**/\r
EFI_STATUS\r
SubmitForm (\r
IN FORM_BROWSER_FORMSET *FormSet,\r
- IN FORM_BROWSER_FORM *Form\r
+ IN FORM_BROWSER_FORM *Form,\r
+ IN BROWSER_SETTING_SCOPE SettingScope\r
);\r
\r
/**\r
\r
@param FormSet FormSet data structure.\r
\r
- @retval EFI_SUCCESS The function completed successfully.\r
-\r
**/\r
-EFI_STATUS\r
+VOID\r
InitializeCurrentSetting (\r
IN OUT FORM_BROWSER_FORMSET *FormSet\r
);\r
);\r
\r
/**\r
- Reset Questions in a Form to their default value.\r
+ Reset Questions to their initial value or default value in a Form, Formset or System.\r
+\r
+ GetDefaultValueScope parameter decides which questions will reset\r
+ to its default value.\r
\r
@param FormSet FormSet data structure.\r
- @param Form The Form which to be reset.\r
+ @param Form Form data structure.\r
@param DefaultId The Class of the default.\r
+ @param SettingScope Setting Scope for Default action.\r
+ @param GetDefaultValueScope Get default value scope.\r
+ @param Storage Get default value only for this storage.\r
+ @param RetrieveValueFirst Whether call the retrieve call back to\r
+ get the initial value before get default\r
+ value.\r
+ @param SkipGetAltCfg Whether skip the get altcfg string process.\r
\r
@retval EFI_SUCCESS The function completed successfully.\r
+ @retval EFI_UNSUPPORTED Unsupport SettingScope.\r
\r
**/\r
EFI_STATUS\r
-ExtractFormDefault (\r
+ExtractDefault (\r
IN FORM_BROWSER_FORMSET *FormSet,\r
- IN FORM_BROWSER_FORM *Form,\r
- IN UINT16 DefaultId\r
+ IN FORM_BROWSER_FORM *Form,\r
+ IN UINT16 DefaultId,\r
+ IN BROWSER_SETTING_SCOPE SettingScope,\r
+ IN BROWSER_GET_DEFAULT_VALUE GetDefaultValueScope,\r
+ IN BROWSER_STORAGE *Storage,\r
+ IN BOOLEAN RetrieveValueFirst,\r
+ IN BOOLEAN SkipGetAltCfg\r
);\r
\r
/**\r
Initialize Question's Edit copy from Storage.\r
\r
+ @param Selection Selection contains the information about\r
+ the Selection, form and formset to be displayed.\r
+ Selection action may be updated in retrieve callback.\r
+ If Selection is NULL, only initialize Question value.\r
@param FormSet FormSet data structure.\r
@param Form Form data structure.\r
\r
**/\r
EFI_STATUS\r
LoadFormConfig (\r
- IN FORM_BROWSER_FORMSET *FormSet,\r
- IN FORM_BROWSER_FORM *Form\r
+ IN OUT UI_MENU_SELECTION *Selection,\r
+ IN FORM_BROWSER_FORMSET *FormSet,\r
+ IN FORM_BROWSER_FORM *Form\r
+ );\r
+\r
+/**\r
+ Initialize Question's Edit copy from Storage for the whole Formset.\r
+\r
+ @param Selection Selection contains the information about\r
+ the Selection, form and formset to be displayed.\r
+ Selection action may be updated in retrieve callback.\r
+ If Selection is NULL, only initialize Question value.\r
+ @param FormSet FormSet data structure.\r
+\r
+ @retval EFI_SUCCESS The function completed successfully.\r
+\r
+**/\r
+EFI_STATUS\r
+LoadFormSetConfig (\r
+ IN OUT UI_MENU_SELECTION *Selection,\r
+ IN FORM_BROWSER_FORMSET *FormSet\r
);\r
\r
/**\r
\r
@param Storage The Storage to be conveted.\r
@param ConfigResp The returned <ConfigResp>.\r
+ @param ConfigRequest The ConfigRequest string.\r
+ @param GetEditBuf Get the data from editbuffer or buffer.\r
\r
@retval EFI_SUCCESS Convert success.\r
@retval EFI_INVALID_PARAMETER Incorrect storage type.\r
**/\r
EFI_STATUS\r
StorageToConfigResp (\r
- IN FORMSET_STORAGE *Storage,\r
- IN CHAR16 **ConfigResp\r
+ IN BROWSER_STORAGE *Storage,\r
+ IN CHAR16 **ConfigResp,\r
+ IN CHAR16 *ConfigRequest,\r
+ IN BOOLEAN GetEditBuf\r
);\r
\r
/**\r
**/\r
EFI_STATUS\r
ConfigRespToStorage (\r
- IN FORMSET_STORAGE *Storage,\r
+ IN BROWSER_STORAGE *Storage,\r
IN CHAR16 *ConfigResp\r
);\r
\r
@param FormSet FormSet data structure.\r
@param Storage Buffer Storage.\r
\r
- @retval EFI_SUCCESS The function completed successfully.\r
-\r
**/\r
-EFI_STATUS\r
+VOID\r
LoadStorage (\r
IN FORM_BROWSER_FORMSET *FormSet,\r
IN FORMSET_STORAGE *Storage\r
OUT UINT8 **BinaryData\r
);\r
\r
+/**\r
+ Save globals used by previous call to SendForm(). SendForm() may be called from\r
+ HiiConfigAccess.Callback(), this will cause SendForm() be reentried.\r
+ So, save globals of previous call to SendForm() and restore them upon exit.\r
+\r
+**/\r
+VOID\r
+SaveBrowserContext (\r
+ VOID\r
+ );\r
+\r
+/**\r
+ Restore globals used by previous call to SendForm().\r
+\r
+**/\r
+VOID\r
+RestoreBrowserContext (\r
+ VOID\r
+ );\r
+\r
/**\r
This is the routine which an external caller uses to direct the browser\r
where to obtain it's information.\r
ScreenDimenions - This allows the browser to be called so that it occupies a\r
portion of the physical screen instead of dynamically determining the screen dimensions.\r
ActionRequest - Points to the action recommended by the form.\r
- @param ScreenDimensions Points to recommended form dimensions, including any non-content area, in \r
+ @param ScreenDimensions Points to recommended form dimensions, including any non-content area, in\r
characters.\r
@param ActionRequest Points to the action recommended by the form.\r
\r
IN CONST CHAR16 *VariableName OPTIONAL\r
);\r
\r
+/**\r
+ Find menu which will show next time.\r
+\r
+ @param Selection On input, Selection tell setup browser the information\r
+ about the Selection, form and formset to be displayed.\r
+ On output, Selection return the screen item that is selected\r
+ by user.\r
+ @param SettingLevel Input Settting level, if it is FormLevel, just exit current form.\r
+ else, we need to exit current formset.\r
+\r
+ @retval TRUE Exit current form.\r
+ @retval FALSE User press ESC and keep in current form.\r
+**/\r
+BOOLEAN\r
+FindNextMenu (\r
+ IN OUT UI_MENU_SELECTION *Selection,\r
+ IN BROWSER_SETTING_SCOPE SettingLevel\r
+ );\r
+\r
+/**\r
+ check whether the form need to update the NV.\r
+\r
+ @param Form Form data structure.\r
+\r
+ @retval TRUE Need to update the NV.\r
+ @retval FALSE No need to update the NV.\r
+**/\r
+BOOLEAN\r
+IsNvUpdateRequiredForForm (\r
+ IN FORM_BROWSER_FORM *Form\r
+ );\r
+\r
+/**\r
+ check whether the formset need to update the NV.\r
+\r
+ @param FormSet FormSet data structure.\r
+\r
+ @retval TRUE Need to update the NV.\r
+ @retval FALSE No need to update the NV.\r
+**/\r
+BOOLEAN\r
+IsNvUpdateRequiredForFormSet (\r
+ IN FORM_BROWSER_FORMSET *FormSet\r
+ );\r
+\r
+/**\r
+ Call the call back function for the question and process the return action.\r
+\r
+ @param Selection On input, Selection tell setup browser the information\r
+ about the Selection, form and formset to be displayed.\r
+ On output, Selection return the screen item that is selected\r
+ by user.\r
+ @param FormSet The formset this question belong to.\r
+ @param Form The form this question belong to.\r
+ @param Question The Question which need to call.\r
+ @param Action The action request.\r
+ @param SkipSaveOrDiscard Whether skip save or discard action.\r
+\r
+ @retval EFI_SUCCESS The call back function executes successfully.\r
+ @return Other value if the call back function failed to execute.\r
+**/\r
+EFI_STATUS\r
+ProcessCallBackFunction (\r
+ IN OUT UI_MENU_SELECTION *Selection,\r
+ IN FORM_BROWSER_FORMSET *FormSet,\r
+ IN FORM_BROWSER_FORM *Form,\r
+ IN FORM_BROWSER_STATEMENT *Question,\r
+ IN EFI_BROWSER_ACTION Action,\r
+ IN BOOLEAN SkipSaveOrDiscard\r
+ );\r
+\r
+/**\r
+ Call the retrieve type call back function for one question to get the initialize data.\r
+\r
+ This function only used when in the initialize stage, because in this stage, the\r
+ Selection->Form is not ready. For other case, use the ProcessCallBackFunction instead.\r
+\r
+ @param ConfigAccess The config access protocol produced by the hii driver.\r
+ @param Statement The Question which need to call.\r
+ @param FormSet The formset this question belong to.\r
+\r
+ @retval EFI_SUCCESS The call back function executes successfully.\r
+ @return Other value if the call back function failed to execute.\r
+**/\r
+EFI_STATUS\r
+ProcessRetrieveForQuestion (\r
+ IN EFI_HII_CONFIG_ACCESS_PROTOCOL *ConfigAccess,\r
+ IN FORM_BROWSER_STATEMENT *Statement,\r
+ IN FORM_BROWSER_FORMSET *FormSet\r
+ );\r
+\r
+/**\r
+ Find the matched FormSet context in the backup maintain list based on HiiHandle.\r
+\r
+ @param Handle The Hii Handle.\r
+\r
+ @return the found FormSet context. If no found, NULL will return.\r
+\r
+**/\r
+FORM_BROWSER_FORMSET *\r
+GetFormSetFromHiiHandle (\r
+ EFI_HII_HANDLE Handle\r
+ );\r
+\r
+/**\r
+ Check whether the input HII handle is the FormSet that is being used.\r
+\r
+ @param Handle The Hii Handle.\r
+\r
+ @retval TRUE HII handle is being used.\r
+ @retval FALSE HII handle is not being used.\r
+\r
+**/\r
+BOOLEAN\r
+IsHiiHandleInBrowserContext (\r
+ EFI_HII_HANDLE Handle\r
+ );\r
+\r
+/**\r
+ Configure what scope the hot key will impact.\r
+ All hot keys have the same scope. The mixed hot keys with the different level are not supported.\r
+ If no scope is set, the default scope will be FormSet level.\r
+ After all registered hot keys are removed, previous Scope can reset to another level.\r
+\r
+ @param[in] Scope Scope level to be set.\r
+\r
+ @retval EFI_SUCCESS Scope is set correctly.\r
+ @retval EFI_INVALID_PARAMETER Scope is not the valid value specified in BROWSER_SETTING_SCOPE.\r
+ @retval EFI_UNSPPORTED Scope level is different from current one that the registered hot keys have.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+SetScope (\r
+ IN BROWSER_SETTING_SCOPE Scope\r
+ );\r
+\r
+/**\r
+ Register the hot key with its browser action, or unregistered the hot key.\r
+ Only support hot key that is not printable character (control key, function key, etc.).\r
+ If the action value is zero, the hot key will be unregistered if it has been registered.\r
+ If the same hot key has been registered, the new action and help string will override the previous ones.\r
+\r
+ @param[in] KeyData A pointer to a buffer that describes the keystroke\r
+ information for the hot key. Its type is EFI_INPUT_KEY to\r
+ be supported by all ConsoleIn devices.\r
+ @param[in] Action Action value that describes what action will be trigged when the hot key is pressed.\r
+ @param[in] DefaultId Specifies the type of defaults to retrieve, which is only for DEFAULT action.\r
+ @param[in] HelpString Help string that describes the hot key information.\r
+ Its value may be NULL for the unregistered hot key.\r
+\r
+ @retval EFI_SUCCESS Hot key is registered or unregistered.\r
+ @retval EFI_INVALID_PARAMETER KeyData is NULL.\r
+ @retval EFI_NOT_FOUND KeyData is not found to be unregistered.\r
+ @retval EFI_UNSUPPORTED Key represents a printable character. It is conflicted with Browser.\r
+ @retval EFI_ALREADY_STARTED Key already been registered for one hot key.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+RegisterHotKey (\r
+ IN EFI_INPUT_KEY *KeyData,\r
+ IN UINT32 Action,\r
+ IN UINT16 DefaultId,\r
+ IN EFI_STRING HelpString OPTIONAL\r
+ );\r
+\r
+/**\r
+ Register Exit handler function.\r
+ When more than one handler function is registered, the latter one will override the previous one.\r
+ When NULL handler is specified, the previous Exit handler will be unregistered.\r
+\r
+ @param[in] Handler Pointer to handler function.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+RegiserExitHandler (\r
+ IN EXIT_HANDLER Handler\r
+ );\r
+\r
+/**\r
+\r
+ Check whether the browser data has been modified.\r
+\r
+ @retval TRUE Browser data is changed.\r
+ @retval FALSE No browser data is changed.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+IsBrowserDataModified (\r
+ VOID\r
+ );\r
+\r
+/**\r
+\r
+ Execute the action requested by the Action parameter.\r
+\r
+ @param[in] Action Execute the request action.\r
+ @param[in] DefaultId The default Id info when need to load default value.\r
+\r
+ @retval EFI_SUCCESS Execute the request action succss.\r
+ @retval EFI_INVALID_PARAMETER The input action value is invalid.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+ExecuteAction (\r
+ IN UINT32 Action,\r
+ IN UINT16 DefaultId\r
+ );\r
+\r
+/**\r
+ Create reminder to let user to choose save or discard the changed browser data.\r
+ Caller can use it to actively check the changed browser data.\r
+\r
+ @retval BROWSER_NO_CHANGES No browser data is changed.\r
+ @retval BROWSER_SAVE_CHANGES The changed browser data is saved.\r
+ @retval BROWSER_DISCARD_CHANGES The changed browser data is discard.\r
+ @retval BROWSER_KEEP_CURRENT Browser keep current changes.\r
+\r
+**/\r
+UINT32\r
+EFIAPI\r
+SaveReminder (\r
+ VOID\r
+ );\r
+\r
+/**\r
+ Check whether the Reset Required for the browser\r
+\r
+ @retval TRUE Browser required to reset after exit.\r
+ @retval FALSE Browser not need to reset after exit.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+IsResetRequired (\r
+ VOID\r
+ );\r
+\r
+/**\r
+ Find the registered HotKey based on KeyData.\r
+\r
+ @param[in] KeyData A pointer to a buffer that describes the keystroke\r
+ information for the hot key.\r
+\r
+ @return The registered HotKey context. If no found, NULL will return.\r
+**/\r
+BROWSER_HOT_KEY *\r
+GetHotKeyFromRegisterList (\r
+ IN EFI_INPUT_KEY *KeyData\r
+ );\r
+\r
+/**\r
+\r
+ Get FORM_BROWSER_STATEMENT from FORM_DISPLAY_ENGINE_STATEMENT based on the OpCode info.\r
+\r
+ @param DisplayStatement The input FORM_DISPLAY_ENGINE_STATEMENT.\r
+\r
+ @retval FORM_BROWSER_STATEMENT The return FORM_BROWSER_STATEMENT info.\r
+\r
+**/\r
+FORM_BROWSER_STATEMENT *\r
+GetBrowserStatement (\r
+ IN FORM_DISPLAY_ENGINE_STATEMENT *DisplayStatement\r
+ );\r
+\r
+/**\r
+ Password may be stored as encrypted by Configuration Driver. When change a\r
+ password, user will be challenged with old password. To validate user input old\r
+ password, we will send the clear text to Configuration Driver via Callback().\r
+ Configuration driver is responsible to check the passed in password and return\r
+ the validation result. If validation pass, state machine in password Callback()\r
+ will transit from BROWSER_STATE_VALIDATE_PASSWORD to BROWSER_STATE_SET_PASSWORD.\r
+ After user type in new password twice, Callback() will be invoked to send the\r
+ new password to Configuration Driver.\r
+\r
+ @param Selection Pointer to UI_MENU_SELECTION.\r
+ @param MenuOption The MenuOption for this password Question.\r
+ @param String The clear text of password.\r
+\r
+ @retval EFI_NOT_AVAILABLE_YET Callback() request to terminate password input.\r
+ @return In state of BROWSER_STATE_VALIDATE_PASSWORD:\r
+ @retval EFI_SUCCESS Password correct, Browser will prompt for new\r
+ password.\r
+ @retval EFI_NOT_READY Password incorrect, Browser will show error\r
+ message.\r
+ @retval Other Browser will do nothing.\r
+ @return In state of BROWSER_STATE_SET_PASSWORD:\r
+ @retval EFI_SUCCESS Set password success.\r
+ @retval Other Set password failed.\r
+\r
+**/\r
+EFI_STATUS\r
+PasswordCallback (\r
+ IN UI_MENU_SELECTION *Selection,\r
+ IN FORM_BROWSER_STATEMENT *Question,\r
+ IN CHAR16 *String\r
+ );\r
+\r
+/**\r
+ Display error message for invalid password.\r
+\r
+**/\r
+VOID\r
+PasswordInvalid (\r
+ VOID\r
+ );\r
+\r
+/**\r
+ The worker function that send the displays to the screen. On output,\r
+ the selection made by user is returned.\r
+\r
+ @param Selection On input, Selection tell setup browser the information\r
+ about the Selection, form and formset to be displayed.\r
+ On output, Selection return the screen item that is selected\r
+ by user.\r
+\r
+ @retval EFI_SUCCESS The page is displayed successfully.\r
+ @return Other value if the page failed to be diplayed.\r
+\r
+**/\r
+EFI_STATUS\r
+SetupBrowser (\r
+ IN OUT UI_MENU_SELECTION *Selection\r
+ );\r
+\r
+/**\r
+ Free up the resource allocated for all strings required\r
+ by Setup Browser.\r
+\r
+**/\r
+VOID\r
+FreeBrowserStrings (\r
+ VOID\r
+ );\r
+\r
+/**\r
+ Create a menu with specified formset GUID and form ID, and add it as a child\r
+ of the given parent menu.\r
+\r
+ @param HiiHandle Hii handle related to this formset.\r
+ @param FormSetGuid The Formset Guid of menu to be added.\r
+ @param FormId The Form ID of menu to be added.\r
+ @param QuestionId The question id of this menu to be added.\r
+\r
+ @return A pointer to the newly added menu or NULL if memory is insufficient.\r
+\r
+**/\r
+FORM_ENTRY_INFO *\r
+UiAddMenuList (\r
+ IN EFI_HII_HANDLE HiiHandle,\r
+ IN EFI_GUID *FormSetGuid,\r
+ IN UINT16 FormId,\r
+ IN UINT16 QuestionId\r
+ );\r
+\r
+/**\r
+ Search Menu with given FormSetGuid and FormId in all cached menu list.\r
+\r
+ @param HiiHandle HiiHandle for FormSet.\r
+ @param FormSetGuid The Formset GUID of the menu to search.\r
+ @param FormId The Form ID of menu to search.\r
+\r
+ @return A pointer to menu found or NULL if not found.\r
+\r
+**/\r
+FORM_ENTRY_INFO *\r
+UiFindMenuList (\r
+ IN EFI_HII_HANDLE HiiHandle,\r
+ IN EFI_GUID *FormSetGuid,\r
+ IN UINT16 FormId\r
+ );\r
+\r
+/**\r
+ Free Menu list linked list.\r
+\r
+ @param MenuListHead One Menu list point in the menu list.\r
+\r
+**/\r
+VOID\r
+UiFreeMenuList (\r
+ LIST_ENTRY *MenuListHead\r
+ );\r
+\r
+/**\r
+ Find parent menu for current menu.\r
+\r
+ @param CurrentMenu Current Menu\r
+ @param SettingLevel Whether find parent menu in Form Level or Formset level.\r
+ In form level, just find the parent menu;\r
+ In formset level, find the parent menu which has different\r
+ formset guid value.\r
+\r
+ @retval The parent menu for current menu.\r
+**/\r
+FORM_ENTRY_INFO *\r
+UiFindParentMenu (\r
+ IN FORM_ENTRY_INFO *CurrentMenu,\r
+ IN BROWSER_SETTING_SCOPE SettingLevel\r
+ );\r
+\r
+/**\r
+ Validate the HiiHandle.\r
+\r
+ @param HiiHandle The input HiiHandle which need to validate.\r
+\r
+ @retval TRUE The handle is validate.\r
+ @retval FALSE The handle is invalidate.\r
+\r
+**/\r
+BOOLEAN\r
+ValidateHiiHandle (\r
+ EFI_HII_HANDLE HiiHandle\r
+ );\r
+\r
+/**\r
+ Copy current Menu list to the new menu list.\r
+\r
+ @param NewMenuListHead New create Menu list.\r
+ @param CurrentMenuListHead Current Menu list.\r
+\r
+**/\r
+VOID\r
+UiCopyMenuList (\r
+ OUT LIST_ENTRY *NewMenuListHead,\r
+ IN LIST_ENTRY *CurrentMenuListHead\r
+ );\r
+\r
+/**\r
+ Search an Option of a Question by its value.\r
+\r
+ @param Question The Question\r
+ @param OptionValue Value for Option to be searched.\r
+\r
+ @retval Pointer Pointer to the found Option.\r
+ @retval NULL Option not found.\r
+\r
+**/\r
+QUESTION_OPTION *\r
+ValueToOption (\r
+ IN FORM_BROWSER_STATEMENT *Question,\r
+ IN EFI_HII_VALUE *OptionValue\r
+ );\r
+/**\r
+ Return data element in an Array by its Index.\r
+\r
+ @param Array The data array.\r
+ @param Type Type of the data in this array.\r
+ @param Index Zero based index for data in this array.\r
+\r
+ @retval Value The data to be returned\r
+\r
+**/\r
+UINT64\r
+GetArrayData (\r
+ IN VOID *Array,\r
+ IN UINT8 Type,\r
+ IN UINTN Index\r
+ );\r
+\r
+/**\r
+ Set value of a data element in an Array by its Index.\r
+\r
+ @param Array The data array.\r
+ @param Type Type of the data in this array.\r
+ @param Index Zero based index for data in this array.\r
+ @param Value The value to be set.\r
+\r
+**/\r
+VOID\r
+SetArrayData (\r
+ IN VOID *Array,\r
+ IN UINT8 Type,\r
+ IN UINTN Index,\r
+ IN UINT64 Value\r
+ );\r
+\r
+/**\r
+ Compare two Hii value.\r
+\r
+ @param Value1 Expression value to compare on left-hand.\r
+ @param Value2 Expression value to compare on right-hand.\r
+ @param Result Return value after compare.\r
+ retval 0 Two operators equal.\r
+ return Positive value if Value1 is greater than Value2.\r
+ retval Negative value if Value1 is less than Value2.\r
+ @param HiiHandle Only required for string compare.\r
+\r
+ @retval other Could not perform compare on two values.\r
+ @retval EFI_SUCCESS Compare the value success.\r
+\r
+**/\r
+EFI_STATUS\r
+CompareHiiValue (\r
+ IN EFI_HII_VALUE *Value1,\r
+ IN EFI_HII_VALUE *Value2,\r
+ OUT INTN *Result,\r
+ IN EFI_HII_HANDLE HiiHandle OPTIONAL\r
+ );\r
+\r
+/**\r
+ Perform Password check.\r
+ Passwork may be encrypted by driver that requires the specific check.\r
+\r
+ @param Form Form where Password Statement is in.\r
+ @param Statement Password statement\r
+ @param PasswordString Password string to be checked. It may be NULL.\r
+ NULL means to restore password.\r
+ "" string can be used to checked whether old password does exist.\r
+\r
+ @return Status Status of Password check.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+PasswordCheck (\r
+ IN FORM_DISPLAY_ENGINE_FORM *Form,\r
+ IN FORM_DISPLAY_ENGINE_STATEMENT *Statement,\r
+ IN EFI_STRING PasswordString OPTIONAL\r
+ );\r
+\r
+/**\r
+\r
+ Get FORM_BROWSER_STATEMENT from FORM_DISPLAY_ENGINE_STATEMENT based on the OpCode info.\r
+\r
+ @param DisplayStatement The input FORM_DISPLAY_ENGINE_STATEMENT.\r
+\r
+ @retval FORM_BROWSER_STATEMENT The return FORM_BROWSER_STATEMENT info.\r
+\r
+**/\r
+FORM_BROWSER_STATEMENT *\r
+GetBrowserStatement (\r
+ IN FORM_DISPLAY_ENGINE_STATEMENT *DisplayStatement\r
+ );\r
+\r
+/**\r
+\r
+ Initialize the Display form structure data.\r
+\r
+**/\r
+VOID\r
+InitializeDisplayFormData (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Base on the current formset info, clean the ConfigRequest string in browser storage.\r
+\r
+ @param FormSet Pointer of the FormSet\r
+\r
+**/\r
+VOID\r
+CleanBrowserStorage (\r
+ IN OUT FORM_BROWSER_FORMSET *FormSet\r
+ );\r
+\r
+/**\r
+ Find HII Handle in the HII database associated with given Device Path.\r
+\r
+ If DevicePath is NULL, then ASSERT.\r
+\r
+ @param DevicePath Device Path associated with the HII package list\r
+ handle.\r
+ @param FormsetGuid The formset guid for this formset.\r
+\r
+ @retval Handle HII package list Handle associated with the Device\r
+ Path.\r
+ @retval NULL Hii Package list handle is not found.\r
+\r
+**/\r
+EFI_HII_HANDLE\r
+DevicePathToHiiHandle (\r
+ IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,\r
+ IN EFI_GUID *FormsetGuid\r
+ );\r
+\r
+/**\r
+ Adjust the config request info, remove the request elements which already in AllConfigRequest string.\r
+\r
+ @param Storage Form set Storage.\r
+ @param Request The input request string.\r
+ @param RespString Whether the input is ConfigRequest or ConfigResp format.\r
+\r
+ @retval TRUE Has element not covered by current used elements, need to continue to call ExtractConfig\r
+ @retval FALSE All elements covered by current used elements.\r
+\r
+**/\r
+BOOLEAN\r
+ConfigRequestAdjust (\r
+ IN BROWSER_STORAGE *Storage,\r
+ IN CHAR16 *Request,\r
+ IN BOOLEAN RespString\r
+ );\r
+\r
+/**\r
+ Perform question check.\r
+\r
+ If one question has more than one check, process form high priority to low.\r
+\r
+ @param FormSet FormSet data structure.\r
+ @param Form Form data structure.\r
+ @param Question The Question to be validated.\r
+\r
+ @retval EFI_SUCCESS Form validation pass.\r
+ @retval other Form validation failed.\r
+\r
+**/\r
+EFI_STATUS\r
+ValueChangedValidation (\r
+ IN FORM_BROWSER_FORMSET *FormSet,\r
+ IN FORM_BROWSER_FORM *Form,\r
+ IN FORM_BROWSER_STATEMENT *Question\r
+ );\r
+\r
+/**\r
+ Pop up the error info.\r
+\r
+ @param BrowserStatus The input browser status.\r
+ @param HiiHandle The HiiHandle for this error opcode.\r
+ @param OpCode The opcode use to get the erro info and timeout value.\r
+ @param ErrorString Error string used by BROWSER_NO_SUBMIT_IF.\r
+\r
+**/\r
+UINT32\r
+PopupErrorMessage (\r
+ IN UINT32 BrowserStatus,\r
+ IN EFI_HII_HANDLE HiiHandle,\r
+ IN EFI_IFR_OP_HEADER *OpCode, OPTIONAL\r
+ IN CHAR16 *ErrorString\r
+ );\r
+\r
+/**\r
+ Check whether the result is TRUE or FALSE.\r
+\r
+ For the EFI_HII_VALUE value type is numeric, return TRUE if the\r
+ value is not 0.\r
+\r
+ @param Result Input the result data.\r
+\r
+ @retval TRUE The result is TRUE.\r
+ @retval FALSE The result is FALSE.\r
+\r
+**/\r
+BOOLEAN\r
+IsTrue (\r
+ IN EFI_HII_VALUE *Result\r
+ );\r
+\r
+/**\r
+ Get Formset_storage base on the input varstoreid info.\r
+\r
+ @param FormSet Pointer of the current FormSet.\r
+ @param VarStoreId Varstore ID info.\r
+\r
+ @return Pointer to a FORMSET_STORAGE data structure.\r
+\r
+**/\r
+FORMSET_STORAGE *\r
+GetFstStgFromVarId (\r
+ IN FORM_BROWSER_FORMSET *FormSet,\r
+ IN EFI_VARSTORE_ID VarStoreId\r
+ );\r
+\r
+/**\r
+ Get Formset_storage base on the input browser storage.\r
+\r
+ More than one formsets may share the same browser storage,\r
+ this function just get the first formset storage which\r
+ share the browser storage.\r
+\r
+ @param Storage browser storage info.\r
+\r
+ @return Pointer to a FORMSET_STORAGE data structure.\r
+\r
+\r
+**/\r
+FORMSET_STORAGE *\r
+GetFstStgFromBrsStg (\r
+ IN BROWSER_STORAGE *Storage\r
+ );\r
+\r
+/**\r
+ Reconnect the controller.\r
+\r
+ @param DriverHandle The controller handle which need to be reconnect.\r
+\r
+ @retval TRUE do the reconnect behavior success.\r
+ @retval FALSE do the reconnect behavior failed.\r
+\r
+**/\r
+BOOLEAN\r
+ReconnectController (\r
+ IN EFI_HANDLE DriverHandle\r
+ );\r
+\r
+/**\r
+ Converts the unicode character of the string from uppercase to lowercase.\r
+ This is a internal function.\r
+\r
+ @param ConfigString String to be converted\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+HiiToLower (\r
+ IN EFI_STRING ConfigString\r
+ );\r
+\r
#endif\r