]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/SetupBrowserDxe/Setup.c
Refine the logic about initialize questions value
[mirror_edk2.git] / MdeModulePkg / Universal / SetupBrowserDxe / Setup.c
index d4f3fa01d61f19286a8d82bd677bab1f2bf20dfa..9f01cd3f1a575aa65a86aa138a87741c5577fa3e 100644 (file)
@@ -2974,6 +2974,7 @@ GetQuestionDefault (
   @param  Form                   Form data structure.\r
   @param  DefaultId              The Class of the default.\r
   @param  SettingScope           Setting Scope for Default action.\r
+  @param  Storage                Get default value only for this storage.\r
 \r
   @retval EFI_SUCCESS            The function completed successfully.\r
   @retval EFI_UNSUPPORTED        Unsupport SettingScope.\r
@@ -2984,7 +2985,8 @@ ExtractDefault (
   IN FORM_BROWSER_FORMSET             *FormSet,\r
   IN FORM_BROWSER_FORM                *Form,\r
   IN UINT16                           DefaultId,\r
-  IN BROWSER_SETTING_SCOPE            SettingScope\r
+  IN BROWSER_SETTING_SCOPE            SettingScope,\r
+  IN FORMSET_STORAGE                  *Storage OPTIONAL\r
   )\r
 {\r
   EFI_STATUS              Status;\r
@@ -3012,7 +3014,14 @@ ExtractDefault (
     while (!IsNull (&Form->StatementListHead, Link)) {\r
       Question = FORM_BROWSER_STATEMENT_FROM_LINK (Link);\r
       Link = GetNextNode (&Form->StatementListHead, Link);\r
-  \r
+\r
+      //\r
+      // If get default value only for this storage, check the storage first.\r
+      //\r
+      if ((Storage != NULL) && (Question->Storage != Storage)) {\r
+        continue;\r
+      }\r
+\r
       //\r
       // If Question is disabled, don't reset it to default\r
       //\r
@@ -3046,7 +3055,7 @@ ExtractDefault (
     FormLink = GetFirstNode (&FormSet->FormListHead);\r
     while (!IsNull (&FormSet->FormListHead, FormLink)) {\r
       Form = FORM_BROWSER_FORM_FROM_LINK (FormLink);\r
-      ExtractDefault (FormSet, Form, DefaultId, FormLevel);\r
+      ExtractDefault (FormSet, Form, DefaultId, FormLevel, Storage);\r
       FormLink = GetNextNode (&FormSet->FormListHead, FormLink);\r
     }\r
   } else if (SettingScope == SystemLevel) {\r
@@ -3117,7 +3126,7 @@ ExtractDefault (
     Link = GetFirstNode (&gBrowserFormSetList);\r
     while (!IsNull (&gBrowserFormSetList, Link)) {\r
       LocalFormSet = FORM_BROWSER_FORMSET_FROM_LINK (Link);\r
-      ExtractDefault (LocalFormSet, NULL, DefaultId, FormSetLevel);\r
+      ExtractDefault (LocalFormSet, NULL, DefaultId, FormSetLevel, Storage);\r
       Link = GetNextNode (&gBrowserFormSetList, Link);\r
     }\r
   }\r
@@ -3402,12 +3411,6 @@ InitializeCurrentSetting (
   FORM_BROWSER_FORM       *Form2;\r
   EFI_STATUS              Status;\r
 \r
-  //\r
-  // Extract default from IFR binary\r
-  //\r
-  ExtractDefault (FormSet, NULL, EFI_HII_DEFAULT_CLASS_STANDARD, FormSetLevel);\r
-  UpdateNvInfoInForm (FormSet, FALSE);\r
-\r
   //\r
   // Request current settings from Configuration Driver\r
   //\r
@@ -3438,13 +3441,24 @@ InitializeCurrentSetting (
       // Storage is not found in backup formset, request it from ConfigDriver\r
       //\r
       Status = LoadStorage (FormSet, Storage);\r
+\r
+      if (EFI_ERROR (Status)) {\r
+        //\r
+        // If get last time changed value failed, extract default from IFR binary\r
+        //\r
+        ExtractDefault (FormSet, NULL, EFI_HII_DEFAULT_CLASS_STANDARD, FormSetLevel, Storage);\r
+        //\r
+        // ExtractDefault will set the NV flag to TRUE, so need this function to clean the flag\r
+        // in current situation.\r
+        //\r
+        UpdateNvInfoInForm (FormSet, FALSE);\r
+      }\r
+\r
       //\r
-      // Now Edit Buffer is filled with default values(lower priority) and current\r
+      // Now Edit Buffer is filled with default values(lower priority) or current\r
       // settings(higher priority), sychronize it to shadow Buffer\r
       //\r
-      if (!EFI_ERROR (Status)) {\r
-        SynchronizeStorage (Storage, TRUE);\r
-      }\r
+      SynchronizeStorage (Storage, TRUE);\r
     } else {\r
       //\r
       // Storage found in backup formset, use it\r