From 6fd184d0322dbd12abfd18753bd2d29a6637cbf3 Mon Sep 17 00:00:00 2001 From: Eric Dong Date: Mon, 14 Apr 2014 10:03:00 +0000 Subject: Call EFI_BROWSER_ACTION_RETRIEVE for each form instead of only call once before enter this formset. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Eric Dong Reviewed-by: Liming, Gao git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15465 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Universal/SetupBrowserDxe/Presentation.c | 44 +++++++++++++--------- MdeModulePkg/Universal/SetupBrowserDxe/Setup.c | 40 -------------------- MdeModulePkg/Universal/SetupBrowserDxe/Setup.h | 1 - 3 files changed, 27 insertions(+), 58 deletions(-) (limited to 'MdeModulePkg/Universal/SetupBrowserDxe') diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c b/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c index 8f67f86446..8f2816502f 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c +++ b/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c @@ -25,6 +25,7 @@ UINT32 gBrowserStatus = BROWSER_SUCCESS; CHAR16 *gErrorInfo; UINT16 mCurFakeQestId; FORM_DISPLAY_ENGINE_FORM gDisplayFormData; +BOOLEAN mFinishRetrieveCall = FALSE; /** Evaluate all expressions in a Form. @@ -2394,11 +2395,6 @@ SetupBrowser ( return Status; } - if ((Selection->Handle != mCurrentHiiHandle) || - (!CompareGuid (&Selection->FormSetGuid, &mCurrentFormSetGuid))) { - gFinishRetrieveCall = FALSE; - } - // // Initialize current settings of Questions in this FormSet // @@ -2469,6 +2465,11 @@ SetupBrowser ( if (((Selection->Handle != mCurrentHiiHandle) || (!CompareGuid (&Selection->FormSetGuid, &mCurrentFormSetGuid)) || (Selection->FormId != mCurrentFormId))) { + // + // Update Retrieve flag. + // + mFinishRetrieveCall = FALSE; + // // Keep current form information // @@ -2477,7 +2478,7 @@ SetupBrowser ( mCurrentFormId = Selection->FormId; if (ConfigAccess != NULL) { - Status = ProcessCallBackFunction (Selection, gCurrentSelection->FormSet, Selection->Form, NULL, EFI_BROWSER_ACTION_FORM_OPEN, FALSE); + Status = ProcessCallBackFunction (Selection, Selection->FormSet, Selection->Form, NULL, EFI_BROWSER_ACTION_FORM_OPEN, FALSE); if (EFI_ERROR (Status)) { goto Done; } @@ -2501,18 +2502,27 @@ SetupBrowser ( goto Done; } - // - // Finish call RETRIEVE callback for this formset. - // - gFinishRetrieveCall = TRUE; + if (!mFinishRetrieveCall) { + // + // Finish call RETRIEVE callback for this form. + // + mFinishRetrieveCall = TRUE; - // - // IFR is updated during callback of read value, force to reparse the IFR binary - // - if (mHiiPackageListUpdated) { - Selection->Action = UI_ACTION_REFRESH_FORMSET; - mHiiPackageListUpdated = FALSE; - break; + if (ConfigAccess != NULL) { + Status = ProcessCallBackFunction (Selection, Selection->FormSet, Selection->Form, NULL, EFI_BROWSER_ACTION_RETRIEVE, FALSE); + if (EFI_ERROR (Status)) { + goto Done; + } + + // + // IFR is updated during callback of open form, force to reparse the IFR binary + // + if (mHiiPackageListUpdated) { + Selection->Action = UI_ACTION_REFRESH_FORMSET; + mHiiPackageListUpdated = FALSE; + break; + } + } } // diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c index 1f8da4237e..26cbd234c6 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c +++ b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c @@ -48,7 +48,6 @@ LIST_ENTRY gBrowserFormSetList = INITIALIZE_LIST_HEAD_VARIABLE (gBrowserFor LIST_ENTRY gBrowserHotKeyList = INITIALIZE_LIST_HEAD_VARIABLE (gBrowserHotKeyList); LIST_ENTRY gBrowserStorageList = INITIALIZE_LIST_HEAD_VARIABLE (gBrowserStorageList); -BOOLEAN gFinishRetrieveCall; BOOLEAN gResetRequired; BOOLEAN gExitRequired; BROWSER_SETTING_SCOPE gBrowserSettingScope = FormSetLevel; @@ -258,11 +257,8 @@ LoadAllHiiFormset ( EFI_GUID ZeroGuid; EFI_STATUS Status; FORM_BROWSER_FORMSET *OldFormset; - BOOLEAN OldRetrieveValue; OldFormset = mSystemLevelFormSet; - OldRetrieveValue = gFinishRetrieveCall; - gFinishRetrieveCall = FALSE; // // Get all the Hii handles @@ -311,7 +307,6 @@ LoadAllHiiFormset ( // FreePool (HiiHandles); - gFinishRetrieveCall = OldRetrieveValue; mSystemLevelFormSet = OldFormset; } @@ -370,7 +365,6 @@ SendForm ( // SaveBrowserContext (); - gFinishRetrieveCall = FALSE; gResetRequired = FALSE; gExitRequired = FALSE; Status = EFI_SUCCESS; @@ -3483,8 +3477,6 @@ LoadFormConfig ( EFI_STATUS Status; LIST_ENTRY *Link; FORM_BROWSER_STATEMENT *Question; - UINT8 *BufferValue; - UINTN StorageWidth; Link = GetFirstNode (&Form->StatementListHead); while (!IsNull (&Form->StatementListHead, Link)) { @@ -3506,38 +3498,6 @@ LoadFormConfig ( HiiSetString (FormSet->HiiHandle, Question->HiiValue.Value.string, (CHAR16*)Question->BufferValue, NULL); } - // - // Call the Retrieve call back function for all questions. - // - if ((FormSet->ConfigAccess != NULL) && (Selection != NULL) && - ((Question->QuestionFlags & EFI_IFR_FLAG_CALLBACK) == EFI_IFR_FLAG_CALLBACK) && - !gFinishRetrieveCall) { - // - // Check QuestionValue does exist. - // - StorageWidth = Question->StorageWidth; - if (Question->BufferValue != NULL) { - BufferValue = Question->BufferValue; - } else { - BufferValue = (UINT8 *) &Question->HiiValue.Value; - } - - // - // For efivarstore storage, initial question value first. - // - if ((Question->Storage != NULL) && (Question->Storage->Type == EFI_HII_VARSTORE_EFI_VARIABLE)) { - Status = gRT->GetVariable ( - Question->VariableName, - &Question->Storage->Guid, - NULL, - &StorageWidth, - BufferValue - ); - } - - Status = ProcessCallBackFunction(Selection, FormSet, Form, Question, EFI_BROWSER_ACTION_RETRIEVE, TRUE); - } - Link = GetNextNode (&Form->StatementListHead, Link); } diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h index b47c402c9e..44094efb29 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h +++ b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h @@ -546,7 +546,6 @@ extern EDKII_FORM_DISPLAY_ENGINE_PROTOCOL *mFormDisplay; extern BOOLEAN gResetRequired; extern BOOLEAN gExitRequired; -extern BOOLEAN gFinishRetrieveCall; extern LIST_ENTRY gBrowserFormSetList; extern LIST_ENTRY gBrowserHotKeyList; extern BROWSER_SETTING_SCOPE gBrowserSettingScope; -- cgit v1.2.3