#include <Protocol/SimpleTextOut.h>\r
#include <Protocol/SimpleTextIn.h>\r
#include <Protocol/FormBrowser2.h>\r
-#include <Protocol/FormBrowserEx.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 <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
+#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
-// Screen definitions\r
-//\r
-#define BANNER_HEIGHT 6\r
-#define BANNER_COLUMNS 3\r
-#define BANNER_LEFT_COLUMN_INDENT 1\r
-\r
-#define FRONT_PAGE_HEADER_HEIGHT 6\r
-#define NONE_FRONT_PAGE_HEADER_HEIGHT 3\r
-#define LEFT_SKIPPED_COLUMNS 3\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 ENABLE_FUNCTION_KEY_SETTING 1\r
-\r
-typedef struct {\r
- EFI_GUID FormSetGuid;\r
- UINTN KeySetting;\r
-} FUNCTIION_KEY_SETTING;\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
//\r
// Produced protocol\r
//\r
- EFI_FORM_BROWSER2_PROTOCOL FormBrowser2;\r
- \r
- EFI_FORM_BROWSER_EXTENSION_PROTOCOL FormBrowserEx;\r
+ EFI_FORM_BROWSER2_PROTOCOL FormBrowser2;\r
+ EFI_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 FORM_INCONSISTENT_VALIDATION 0\r
#define FORM_NO_SUBMIT_VALIDATION 1\r
\r
-#define FORMSET_CLASS_PLATFORM_SETUP 0x0001\r
-#define FORMSET_CLASS_FRONT_PAGE 0x0002\r
-\r
-typedef struct {\r
- UINT8 Type;\r
- UINT8 *Buffer;\r
- UINT16 BufferLen;\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
EFI_GUID Guid;\r
\r
CHAR16 *Name; // For EFI_IFR_VARSTORE\r
\r
CHAR16 *ConfigHdr; // <ConfigHdr>\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
+ UINT8 ReferenceCount; // How many form set storage refrence this storage.\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
+ UINT16 VarStoreId;\r
+\r
+ BROWSER_STORAGE *BrowserStorage;\r
+\r
+ CHAR16 *ConfigRequest; // <ConfigRequest> = <ConfigHdr> + <RequestElement>\r
+ CHAR16 *ConfigElements;// Elements need to load initial data.\r
UINTN ElementCount; // Number of <RequestElement> in the <ConfigRequest>\r
UINTN SpareStrLen; // Spare length of ConfigRequest string buffer\r
} FORMSET_STORAGE;\r
EFI_STRING_ID DevicePath; // For EFI_IFR_QUESTION_REF3_2, EFI_IFR_QUESTION_REF3_3\r
EFI_GUID Guid;\r
\r
- FORMSET_STORAGE *VarStorage; // For EFI_IFR_SET, EFI_IFR_GET\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
typedef struct {\r
UINTN Signature;\r
LIST_ENTRY Link;\r
+ \r
+ EFI_IFR_ONE_OF_OPTION *OpCode; // OneOfOption Data\r
\r
EFI_STRING_ID Text;\r
UINT8 Flags;\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
+ BROWSER_STORAGE *Storage;\r
VAR_STORE_INFO VarStoreInfo;\r
UINT16 StorageWidth;\r
UINT8 QuestionFlags;\r
EFI_DEFAULT_ID DefaultId; // for EFI_IFR_RESET_BUTTON\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
UINTN ElementCount; // Number of <RequestElement> in the <ConfigRequest> \r
UINTN SpareStrLen;\r
\r
- FORMSET_STORAGE *Storage;\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
\r
BOOLEAN ModalForm; // Whether this is a modal form.\r
BOOLEAN Locked; // Whether this form is locked.\r
\r
- BOOLEAN NvUpdateRequired; // Whether this form has NV update request.\r
-\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
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
FORM_BROWSER_STATEMENT *StatementBuffer; // Buffer for all Statements and Questions\r
EXPRESSION_OPCODE *ExpressionBuffer; // Buffer for all Expression OpCode\r
\r
+ LIST_ENTRY StatementListOSF; // Statement list out side of the form.\r
LIST_ENTRY StorageListHead; // Storage list (FORMSET_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
-\r
#define FORM_BROWSER_FORMSET_FROM_LINK(a) CR (a, FORM_BROWSER_FORMSET, Link, FORM_BROWSER_FORMSET_SIGNATURE)\r
\r
+typedef struct {\r
+ LIST_ENTRY Link;\r
+ EFI_EVENT RefreshEvent;\r
+} FORM_BROWSER_REFRESH_EVENT_NODE;\r
+\r
+#define FORM_BROWSER_REFRESH_EVENT_FROM_LINK(a) BASE_CR (a, FORM_BROWSER_REFRESH_EVENT_NODE, Link)\r
+\r
#define BROWSER_CONTEXT_SIGNATURE SIGNATURE_32 ('B', 'C', 'T', 'X')\r
\r
typedef struct {\r
//\r
// Globals defined in Setup.c\r
//\r
- BANNER_DATA *BannerData;\r
- UINTN ClassOfVfr;\r
- UINTN FunctionKeySetting;\r
- BOOLEAN ResetRequired;\r
- UINT16 Direction;\r
- EFI_SCREEN_DESCRIPTOR ScreenDimensions;\r
- CHAR16 *EnterString;\r
- CHAR16 *EnterCommitString;\r
- CHAR16 *EnterEscapeString;\r
- CHAR16 *EscapeString;\r
- CHAR16 *MoveHighlight;\r
- CHAR16 *MakeSelection;\r
- CHAR16 *DecNumericInput;\r
- CHAR16 *HexNumericInput;\r
- CHAR16 *ToggleCheckBox;\r
- CHAR16 *PromptForData;\r
- CHAR16 *PromptForPassword;\r
- CHAR16 *PromptForNewPassword;\r
- CHAR16 *ConfirmPassword;\r
- CHAR16 *ConfirmError;\r
- CHAR16 *PassowordInvalid;\r
- CHAR16 *PressEnter;\r
- CHAR16 *EmptyString;\r
- CHAR16 *AreYouSure;\r
- CHAR16 *YesResponse;\r
- CHAR16 *NoResponse;\r
- CHAR16 *MiniString;\r
- CHAR16 *PlusString;\r
- CHAR16 *MinusString;\r
- CHAR16 *AdjustNumber;\r
- CHAR16 *SaveChanges;\r
- CHAR16 *OptionMismatch;\r
- CHAR16 *FormSuppress;\r
- CHAR16 *ProtocolNotFound;\r
- CHAR16 PromptBlockWidth;\r
- CHAR16 OptionBlockWidth;\r
- CHAR16 HelpBlockWidth;\r
- FORM_BROWSER_FORMSET *OldFormSet;\r
+ BOOLEAN ResetRequired;\r
+ BOOLEAN ExitRequired;\r
+ EFI_HII_HANDLE HiiHandle;\r
\r
- //\r
- // Globals defined in Ui.c\r
- //\r
- LIST_ENTRY MenuOption;\r
- VOID *MenuRefreshHead;\r
+ LIST_ENTRY FormHistoryList;\r
} BROWSER_CONTEXT;\r
\r
#define BROWSER_CONTEXT_FROM_LINK(a) CR (a, BROWSER_CONTEXT, Link, BROWSER_CONTEXT_SIGNATURE)\r
\r
-#define BROWSER_HOT_KEY_SIGNATURE SIGNATURE_32 ('B', 'H', 'K', 'S')\r
-\r
typedef struct {\r
- UINTN Signature;\r
- LIST_ENTRY Link;\r
- \r
- EFI_INPUT_KEY *KeyData;\r
- IN UINT32 Action;\r
- IN UINT16 DefaultId;\r
- IN EFI_STRING HelpString;\r
-} BROWSER_HOT_KEY;\r
+ EFI_HII_HANDLE Handle;\r
+\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
+ UINTN TopRow;\r
+ UINTN BottomRow;\r
+ UINTN PromptCol;\r
+ UINTN OptionCol;\r
+ UINTN CurrentRow;\r
\r
-#define BROWSER_HOT_KEY_FROM_LINK(a) CR (a, BROWSER_HOT_KEY, Link, BROWSER_HOT_KEY_SIGNATURE)\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
+ //\r
+ // Current selected fomset/form/Question\r
+ //\r
+ FORM_BROWSER_FORMSET *FormSet;\r
+ FORM_BROWSER_FORM *Form;\r
+ FORM_BROWSER_STATEMENT *Statement;\r
+\r
+ //\r
+ // Whether the Form is editable\r
+ //\r
+ BOOLEAN FormEditable;\r
+\r
+ FORM_ENTRY_INFO *CurrentMenu;\r
+} UI_MENU_SELECTION;\r
\r
//\r
// Scope for get defaut value. It may be GetDefaultForNoStorage, GetDefaultForStorage or GetDefaultForAll.\r
} GET_SET_QUESTION_VALUE_WITH;\r
\r
extern EFI_HII_DATABASE_PROTOCOL *mHiiDatabase;\r
-extern EFI_HII_STRING_PROTOCOL *mHiiString;\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 BANNER_DATA *gBannerData;\r
-extern EFI_HII_HANDLE gFrontPageHandle;\r
-extern UINTN gClassOfVfr;\r
-extern UINTN gFunctionKeySetting;\r
extern BOOLEAN gResetRequired;\r
-extern EFI_HII_HANDLE gHiiHandle;\r
-extern UINT16 gDirection;\r
-extern EFI_SCREEN_DESCRIPTOR gScreenDimensions;\r
+extern BOOLEAN gExitRequired;\r
\r
extern FORM_BROWSER_FORMSET *gOldFormSet;\r
extern LIST_ENTRY gBrowserFormSetList;\r
extern LIST_ENTRY gBrowserHotKeyList;\r
extern BROWSER_SETTING_SCOPE gBrowserSettingScope;\r
extern EXIT_HANDLER ExitHandlerFunction;\r
-extern UINTN gFooterHeight;\r
-\r
+extern EFI_HII_HANDLE mCurrentHiiHandle;\r
//\r
// Browser Global Strings\r
//\r
-extern CHAR16 *gDiscardFailed;\r
-extern CHAR16 *gDefaultFailed;\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
-extern CHAR16 *gFormSuppress;\r
-extern CHAR16 *gProtocolNotFound;\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
-#include "Ui.h"\r
+extern UI_MENU_SELECTION *gCurrentSelection;\r
+\r
//\r
// Global Procedure Defines\r
//\r
+#include "Expression.h"\r
\r
/**\r
Initialize the HII String Token to the correct values.\r
VOID\r
);\r
\r
-/**\r
- Prints a unicode string to the default console,\r
- using L"%s" format.\r
-\r
- @param String String pointer.\r
-\r
- @return Length of string printed to the console\r
-\r
-**/\r
-UINTN\r
-PrintString (\r
- IN CHAR16 *String\r
- );\r
-\r
-/**\r
- Prints a chracter to the default console,\r
- using L"%c" format.\r
-\r
- @param Character Character to print.\r
-\r
- @return Length of string printed to the console.\r
-\r
-**/\r
-UINTN\r
-PrintChar (\r
- CHAR16 Character\r
- );\r
-\r
-/**\r
- Prints a formatted unicode string to the default console, at\r
- the supplied cursor position.\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
-\r
- @return Length of string printed to the console\r
-\r
-**/\r
-UINTN\r
-EFIAPI\r
-PrintAt (\r
- IN UINTN Column,\r
- IN UINTN Row,\r
- IN CHAR16 *Fmt,\r
- ...\r
- );\r
-\r
-/**\r
- Prints a unicode string to the default console, at\r
- the supplied cursor position, using L"%s" 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 String String pointer.\r
-\r
- @return Length of string printed to the console\r
-\r
-**/\r
-UINTN\r
-PrintStringAt (\r
- IN UINTN Column,\r
- IN UINTN Row,\r
- IN CHAR16 *String\r
- );\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
-\r
-**/\r
-UINTN\r
-PrintCharAt (\r
- IN UINTN Column,\r
- IN UINTN Row,\r
- CHAR16 Character\r
- );\r
-\r
/**\r
Parse opcodes in the formset IFR binary.\r
\r
IN OUT FORM_BROWSER_FORMSET *FormSet\r
);\r
\r
-/**\r
- This function displays the page frame.\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
-**/\r
-VOID\r
-DisplayPageFrame (\r
- IN UI_MENU_SELECTION *Selection\r
- );\r
\r
/**\r
Create a new string in HII Package List.\r
IN EFI_HII_HANDLE HiiHandle\r
);\r
\r
-/**\r
- Draw a pop up windows based on the dimension, number of lines and\r
- strings specified.\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
-\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
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\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
- );\r
-\r
/**\r
Get Value for given Name from a NameValue Storage.\r
\r
**/\r
EFI_STATUS\r
GetValueByName (\r
- IN FORMSET_STORAGE *Storage,\r
+ IN BROWSER_STORAGE *Storage,\r
IN CHAR16 *Name,\r
IN OUT CHAR16 **Value,\r
IN GET_SET_QUESTION_VALUE_WITH GetValueFrom\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
EFI_STATUS\r
SetValueByName (\r
- IN FORMSET_STORAGE *Storage,\r
- IN CHAR16 *Name,\r
- IN CHAR16 *Value,\r
- IN GET_SET_QUESTION_VALUE_WITH SetValueTo\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
\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
GUID), take the first FormSet found in package\r
list.\r
@param FormSet FormSet data structure.\r
- @param UpdateGlobalVar Whether need to update the global variable.\r
\r
@retval EFI_SUCCESS The function completed successfully.\r
@retval EFI_NOT_FOUND The specified FormSet could not be found.\r
InitializeFormSet (\r
IN EFI_HII_HANDLE Handle,\r
IN OUT EFI_GUID *FormSetGuid,\r
- OUT FORM_BROWSER_FORMSET *FormSet,\r
- IN BOOLEAN UpdateGlobalVar \r
+ OUT FORM_BROWSER_FORMSET *FormSet \r
);\r
\r
/**\r
IN UINT16 DefaultId,\r
IN BROWSER_SETTING_SCOPE SettingScope,\r
IN BROWSER_GET_DEFAULT_VALUE GetDefaultValueScope,\r
- IN FORMSET_STORAGE *Storage,\r
+ IN BROWSER_STORAGE *Storage,\r
IN BOOLEAN RetrieveValueFirst\r
);\r
\r
/**\r
Convert setting of Buffer Storage or NameValue Storage to <ConfigResp>.\r
\r
- @param Buffer The Storage to be conveted.\r
+ @param Storage The Storage to be conveted.\r
@param ConfigResp The returned <ConfigResp>.\r
- @param SingleForm Whether update data for single form or formset level.\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 VOID *Buffer,\r
+ IN BROWSER_STORAGE *Storage,\r
IN CHAR16 **ConfigResp,\r
- IN BOOLEAN SingleForm\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
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 Repaint Whether need to repaint the menu.\r
- @param NewLine Whether need to show at new line.\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 Need return.\r
- @retval FALSE No need to return.\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 BOOLEAN *Repaint, \r
- IN BOOLEAN *NewLine \r
+ IN OUT UI_MENU_SELECTION *Selection,\r
+ IN BROWSER_SETTING_SCOPE SettingLevel\r
);\r
\r
/**\r
- check whether the formset need to update the NV.\r
+ check whether the form need to update the NV.\r
\r
- @param FormSet FormSet data structure.\r
- @param SetValue Whether set new value or clear old value.\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
-VOID\r
-UpdateNvInfoInForm (\r
- IN FORM_BROWSER_FORMSET *FormSet,\r
- IN BOOLEAN SetValue\r
+BOOLEAN\r
+IsNvUpdateRequiredForForm (\r
+ IN FORM_BROWSER_FORM *Form\r
);\r
\r
/**\r
@retval TRUE Need to update the NV.\r
@retval FALSE No need to update the NV.\r
**/\r
-BOOLEAN \r
-IsNvUpdateRequired (\r
+BOOLEAN\r
+IsNvUpdateRequiredForFormSet (\r
IN FORM_BROWSER_FORMSET *FormSet\r
);\r
\r
+/**\r
+ Check whether the storage data for current form set is changed.\r
+\r
+ @param FormSet FormSet data structure.\r
+\r
+ @retval TRUE Data is changed.\r
+ @retval FALSE Data is not changed.\r
+**/\r
+BOOLEAN \r
+IsStorageDataChangedForFormSet (\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
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
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
+\r
+ @retval The parent menu for current menu.\r
+**/\r
+FORM_ENTRY_INFO *\r
+UiFindParentMenu (\r
+ IN FORM_ENTRY_INFO *CurrentMenu\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
#endif\r