From 8acb3f7b54ec6ebf9c01b8c570f5ec0c7530be80 Mon Sep 17 00:00:00 2001 From: Eric Dong Date: Fri, 4 Jul 2014 01:58:48 +0000 Subject: Refine the save action for the BdsDxe. 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@15616 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Universal/BdsDxe/BootMaint/FileExplorer.c | 56 ++++++++++------------ 1 file changed, 26 insertions(+), 30 deletions(-) (limited to 'IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/FileExplorer.c') diff --git a/IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/FileExplorer.c b/IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/FileExplorer.c index 69bcb94535..f804984fa9 100644 --- a/IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/FileExplorer.c +++ b/IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/FileExplorer.c @@ -177,8 +177,16 @@ UpdateFileExplorer ( case FileExplorerStateAddDriverOptionState: if (FileExplorerStateAddBootOption == CallbackData->FeCurrentState) { FormId = FORM_BOOT_ADD_DESCRIPTION_ID; + if (!CallbackData->FeFakeNvData.BootOptionChanged) { + ZeroMem (CallbackData->FeFakeNvData.BootOptionalData, sizeof (CallbackData->FeFakeNvData.BootOptionalData)); + ZeroMem (CallbackData->FeFakeNvData.BootDescriptionData, sizeof (CallbackData->FeFakeNvData.BootDescriptionData)); + } } else { FormId = FORM_DRIVER_ADD_FILE_DESCRIPTION_ID; + if (!CallbackData->FeFakeNvData.DriverOptionChanged) { + ZeroMem (CallbackData->FeFakeNvData.DriverOptionalData, sizeof (CallbackData->FeFakeNvData.DriverOptionalData)); + ZeroMem (CallbackData->FeFakeNvData.DriverDescriptionData, sizeof (CallbackData->FeFakeNvData.DriverDescriptionData)); + } } CallbackData->MenuEntry = NewMenuEntry; @@ -400,41 +408,19 @@ FileExplorerCallback ( return EFI_INVALID_PARAMETER; } - if (QuestionId == KEY_VALUE_SAVE_AND_EXIT_BOOT || QuestionId == KEY_VALUE_SAVE_AND_EXIT_DRIVER) { - // - // Apply changes and exit formset - // - if (FileExplorerStateAddBootOption == Private->FeCurrentState) { - Status = Var_UpdateBootOption (Private, NvRamMap); - if (EFI_ERROR (Status)) { - return Status; - } - - BOpt_GetBootOptions (Private); - CreateMenuStringToken (Private, Private->FeHiiHandle, &BootOptionMenu); - } else if (FileExplorerStateAddDriverOptionState == Private->FeCurrentState) { - Status = Var_UpdateDriverOption ( - Private, - Private->FeHiiHandle, - NvRamMap->DriverDescriptionData, - NvRamMap->DriverOptionalData, - NvRamMap->ForceReconnect - ); - if (EFI_ERROR (Status)) { - return Status; - } - - BOpt_GetDriverOptions (Private); - CreateMenuStringToken (Private, Private->FeHiiHandle, &DriverOptionMenu); - } - - *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT; + if (QuestionId == KEY_VALUE_SAVE_AND_EXIT_BOOT) { + NvRamMap->BootOptionChanged = FALSE; + *ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT; + } else if (QuestionId == KEY_VALUE_SAVE_AND_EXIT_DRIVER) { + NvRamMap->DriverOptionChanged = FALSE; + *ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT; } else if (QuestionId == KEY_VALUE_NO_SAVE_AND_EXIT_DRIVER) { // // Discard changes and exit formset // NvRamMap->DriverOptionalData[0] = 0x0000; NvRamMap->DriverDescriptionData[0] = 0x0000; + NvRamMap->DriverOptionChanged = FALSE; *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT; } else if (QuestionId == KEY_VALUE_NO_SAVE_AND_EXIT_BOOT) { // @@ -442,8 +428,13 @@ FileExplorerCallback ( // NvRamMap->BootOptionalData[0] = 0x0000; NvRamMap->BootDescriptionData[0] = 0x0000; + NvRamMap->BootOptionChanged = FALSE; *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT; - }else if (QuestionId < FILE_OPTION_OFFSET) { + } else if (QuestionId == KEY_VALUE_BOOT_DESCRIPTION || QuestionId == KEY_VALUE_BOOT_OPTION) { + NvRamMap->BootOptionChanged = TRUE; + } else if (QuestionId == KEY_VALUE_DRIVER_DESCRIPTION || QuestionId == KEY_VALUE_DRIVER_OPTION) { + NvRamMap->DriverOptionChanged = TRUE; + } else if (QuestionId < FILE_OPTION_OFFSET) { // // Exit File Explorer formset // @@ -469,5 +460,10 @@ FileExplorerCallback ( } } + // + // Pass changed uncommitted data back to Form Browser + // + HiiSetBrowserData (&gFileExploreFormSetGuid, mFileExplorerStorageName, sizeof (FILE_EXPLORER_NV_DATA), (UINT8 *) NvRamMap, NULL); + return Status; } -- cgit v1.2.3