case FileExplorerStateAddDriverOptionState:\r
if (FileExplorerStateAddBootOption == CallbackData->FeCurrentState) {\r
FormId = FORM_BOOT_ADD_DESCRIPTION_ID;\r
+ if (!CallbackData->FeFakeNvData.BootOptionChanged) {\r
+ ZeroMem (CallbackData->FeFakeNvData.BootOptionalData, sizeof (CallbackData->FeFakeNvData.BootOptionalData));\r
+ ZeroMem (CallbackData->FeFakeNvData.BootDescriptionData, sizeof (CallbackData->FeFakeNvData.BootDescriptionData));\r
+ }\r
} else {\r
FormId = FORM_DRIVER_ADD_FILE_DESCRIPTION_ID;\r
+ if (!CallbackData->FeFakeNvData.DriverOptionChanged) {\r
+ ZeroMem (CallbackData->FeFakeNvData.DriverOptionalData, sizeof (CallbackData->FeFakeNvData.DriverOptionalData));\r
+ ZeroMem (CallbackData->FeFakeNvData.DriverDescriptionData, sizeof (CallbackData->FeFakeNvData.DriverDescriptionData));\r
+ }\r
}\r
\r
CallbackData->MenuEntry = NewMenuEntry;\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- if (QuestionId == KEY_VALUE_SAVE_AND_EXIT_BOOT || QuestionId == KEY_VALUE_SAVE_AND_EXIT_DRIVER) {\r
- //\r
- // Apply changes and exit formset\r
- //\r
- if (FileExplorerStateAddBootOption == Private->FeCurrentState) {\r
- Status = Var_UpdateBootOption (Private, NvRamMap);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
-\r
- BOpt_GetBootOptions (Private);\r
- CreateMenuStringToken (Private, Private->FeHiiHandle, &BootOptionMenu);\r
- } else if (FileExplorerStateAddDriverOptionState == Private->FeCurrentState) {\r
- Status = Var_UpdateDriverOption (\r
- Private,\r
- Private->FeHiiHandle,\r
- NvRamMap->DriverDescriptionData,\r
- NvRamMap->DriverOptionalData,\r
- NvRamMap->ForceReconnect\r
- );\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
-\r
- BOpt_GetDriverOptions (Private);\r
- CreateMenuStringToken (Private, Private->FeHiiHandle, &DriverOptionMenu);\r
- }\r
-\r
- *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;\r
+ if (QuestionId == KEY_VALUE_SAVE_AND_EXIT_BOOT) {\r
+ NvRamMap->BootOptionChanged = FALSE;\r
+ *ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;\r
+ } else if (QuestionId == KEY_VALUE_SAVE_AND_EXIT_DRIVER) {\r
+ NvRamMap->DriverOptionChanged = FALSE;\r
+ *ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;\r
} else if (QuestionId == KEY_VALUE_NO_SAVE_AND_EXIT_DRIVER) {\r
//\r
// Discard changes and exit formset\r
//\r
NvRamMap->DriverOptionalData[0] = 0x0000;\r
NvRamMap->DriverDescriptionData[0] = 0x0000;\r
+ NvRamMap->DriverOptionChanged = FALSE;\r
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;\r
} else if (QuestionId == KEY_VALUE_NO_SAVE_AND_EXIT_BOOT) {\r
//\r
//\r
NvRamMap->BootOptionalData[0] = 0x0000;\r
NvRamMap->BootDescriptionData[0] = 0x0000;\r
+ NvRamMap->BootOptionChanged = FALSE;\r
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;\r
- }else if (QuestionId < FILE_OPTION_OFFSET) {\r
+ } else if (QuestionId == KEY_VALUE_BOOT_DESCRIPTION || QuestionId == KEY_VALUE_BOOT_OPTION) {\r
+ NvRamMap->BootOptionChanged = TRUE;\r
+ } else if (QuestionId == KEY_VALUE_DRIVER_DESCRIPTION || QuestionId == KEY_VALUE_DRIVER_OPTION) {\r
+ NvRamMap->DriverOptionChanged = TRUE;\r
+ } else if (QuestionId < FILE_OPTION_OFFSET) {\r
//\r
// Exit File Explorer formset\r
//\r
}\r
}\r
\r
+ //\r
+ // Pass changed uncommitted data back to Form Browser\r
+ //\r
+ HiiSetBrowserData (&gFileExploreFormSetGuid, mFileExplorerStorageName, sizeof (FILE_EXPLORER_NV_DATA), (UINT8 *) NvRamMap, NULL);\r
+\r
return Status;\r
}\r