]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/FileExplorer.c
Refine the save action for the BdsDxe.
[mirror_edk2.git] / IntelFrameworkModulePkg / Universal / BdsDxe / BootMaint / FileExplorer.c
index 69bcb94535ad401ccd1f39fdf269308ce316c3db..f804984fa918477e5805e569ced1019b9e56992f 100644 (file)
@@ -177,8 +177,16 @@ UpdateFileExplorer (
       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
@@ -400,41 +408,19 @@ FileExplorerCallback (
       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
@@ -442,8 +428,13 @@ FileExplorerCallback (
       //\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
@@ -469,5 +460,10 @@ FileExplorerCallback (
     }\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