]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Update the logic to get default value for question without storage.
authorydong10 <ydong10@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 26 Jun 2012 08:57:44 +0000 (08:57 +0000)
committerydong10 <ydong10@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 26 Jun 2012 08:57:44 +0000 (08:57 +0000)
Signed-off-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13474 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Universal/SetupBrowserDxe/Setup.c
MdeModulePkg/Universal/SetupBrowserDxe/Setup.h
MdeModulePkg/Universal/SetupBrowserDxe/Ui.c

index 9f01cd3f1a575aa65a86aa138a87741c5577fa3e..1389f261aea3cc006cdcee5d18379a8d306834e3 100644 (file)
@@ -2970,10 +2970,14 @@ GetQuestionDefault (
 /**\r
   Reset Questions to their default value in a Form, Formset or System.\r
 \r
+  GetDefaultValueScope parameter decides which questions will reset \r
+  to its default value.\r
+\r
   @param  FormSet                FormSet data structure.\r
   @param  Form                   Form data structure.\r
   @param  DefaultId              The Class of the default.\r
   @param  SettingScope           Setting Scope for Default action.\r
+  @param  GetDefaultValueScope   Get default value scope.\r
   @param  Storage                Get default value only for this storage.\r
 \r
   @retval EFI_SUCCESS            The function completed successfully.\r
@@ -2986,6 +2990,7 @@ ExtractDefault (
   IN FORM_BROWSER_FORM                *Form,\r
   IN UINT16                           DefaultId,\r
   IN BROWSER_SETTING_SCOPE            SettingScope,\r
+  IN BROWSER_GET_DEFAULT_VALUE        GetDefaultValueScope,\r
   IN FORMSET_STORAGE                  *Storage OPTIONAL\r
   )\r
 {\r
@@ -3002,7 +3007,11 @@ ExtractDefault (
   //\r
   // Check the supported setting level.\r
   //\r
-  if (SettingScope >= MaxLevel) {\r
+  if (SettingScope >= MaxLevel || GetDefaultValueScope >= GetDefaultForMax) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  if (GetDefaultValueScope == GetDefaultForStorage && Storage == NULL) {\r
     return EFI_UNSUPPORTED;\r
   }\r
   \r
@@ -3018,7 +3027,14 @@ ExtractDefault (
       //\r
       // If get default value only for this storage, check the storage first.\r
       //\r
-      if ((Storage != NULL) && (Question->Storage != Storage)) {\r
+      if ((GetDefaultValueScope == GetDefaultForStorage) && (Question->Storage != Storage)) {\r
+        continue;\r
+      }\r
+\r
+      //\r
+      // If get default value only for no storage question, just skip the question which has storage.\r
+      //\r
+      if ((GetDefaultValueScope == GetDefaultForNoStorage) && (Question->Storage != NULL)) {\r
         continue;\r
       }\r
 \r
@@ -3055,7 +3071,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, Storage);\r
+      ExtractDefault (FormSet, Form, DefaultId, FormLevel, GetDefaultValueScope, Storage);\r
       FormLink = GetNextNode (&FormSet->FormListHead, FormLink);\r
     }\r
   } else if (SettingScope == SystemLevel) {\r
@@ -3126,7 +3142,7 @@ ExtractDefault (
     Link = GetFirstNode (&gBrowserFormSetList);\r
     while (!IsNull (&gBrowserFormSetList, Link)) {\r
       LocalFormSet = FORM_BROWSER_FORMSET_FROM_LINK (Link);\r
-      ExtractDefault (LocalFormSet, NULL, DefaultId, FormSetLevel, Storage);\r
+      ExtractDefault (LocalFormSet, NULL, DefaultId, FormSetLevel, GetDefaultValueScope, Storage);\r
       Link = GetNextNode (&gBrowserFormSetList, Link);\r
     }\r
   }\r
@@ -3411,6 +3427,11 @@ InitializeCurrentSetting (
   FORM_BROWSER_FORM       *Form2;\r
   EFI_STATUS              Status;\r
 \r
+  //\r
+  // Extract default from IFR binary for no storage questions.\r
+  //\r
+  ExtractDefault (FormSet, NULL, EFI_HII_DEFAULT_CLASS_STANDARD, FormSetLevel, GetDefaultForNoStorage, NULL);\r
+\r
   //\r
   // Request current settings from Configuration Driver\r
   //\r
@@ -3446,7 +3467,7 @@ InitializeCurrentSetting (
         //\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
+        ExtractDefault (FormSet, NULL, EFI_HII_DEFAULT_CLASS_STANDARD, FormSetLevel, GetDefaultForStorage, Storage);\r
         //\r
         // ExtractDefault will set the NV flag to TRUE, so need this function to clean the flag\r
         // in current situation.\r
index f043a6bbcd9228c4cd4213199a0471ebd72696e1..fcc17254edfed2d2eecb94054db0b644fdb2798f 100644 (file)
@@ -574,6 +574,16 @@ typedef struct {
 \r
 #define BROWSER_HOT_KEY_FROM_LINK(a)  CR (a, BROWSER_HOT_KEY, Link, BROWSER_HOT_KEY_SIGNATURE)\r
 \r
+//\r
+// Scope for get defaut value. It may be GetDefaultForNoStorage, GetDefaultForStorage or GetDefaultForAll.\r
+//\r
+typedef enum {\r
+  GetDefaultForNoStorage,       // Get default value for question which not has storage.\r
+  GetDefaultForStorage,         // Get default value for question which has storage.\r
+  GetDefaultForAll,             // Get default value for all questions.\r
+  GetDefaultForMax              // Invalid value.\r
+} BROWSER_GET_DEFAULT_VALUE;\r
+\r
 extern EFI_HII_DATABASE_PROTOCOL         *mHiiDatabase;\r
 extern EFI_HII_STRING_PROTOCOL           *mHiiString;\r
 extern EFI_HII_CONFIG_ROUTING_PROTOCOL   *mHiiConfigRouting;\r
@@ -1063,10 +1073,14 @@ InitializeFormSet (
 /**\r
   Reset Questions to their default value in a Form, Formset or System.\r
 \r
+  GetDefaultValueScope parameter decides which questions will reset \r
+  to its default value.\r
+\r
   @param  FormSet                FormSet data structure.\r
   @param  Form                   Form data structure.\r
   @param  DefaultId              The Class of the default.\r
   @param  SettingScope           Setting Scope for Default action.\r
+  @param  GetDefaultValueScope   Get default value scope.\r
   @param  Storage                Get default value only for this storage.\r
 \r
   @retval EFI_SUCCESS            The function completed successfully.\r
@@ -1079,6 +1093,7 @@ ExtractDefault (
   IN FORM_BROWSER_FORM                *Form,\r
   IN UINT16                           DefaultId,\r
   IN BROWSER_SETTING_SCOPE            SettingScope,\r
+  IN BROWSER_GET_DEFAULT_VALUE        GetDefaultValueScope,\r
   IN FORMSET_STORAGE                  *Storage OPTIONAL\r
   );\r
 \r
index 137115196c6f526972cc569aeafb87b40ef890bc..7e846a29268bf93714f1bfebbbaac5bcc792b029 100644 (file)
@@ -3787,7 +3787,7 @@ UiDisplayMenu (
       // Reterieve default setting. After it. NV flag will be showed.\r
       //\r
       if ((HotKey->Action & BROWSER_ACTION_DEFAULT) == BROWSER_ACTION_DEFAULT) {\r
-        Status = ExtractDefault (Selection->FormSet, Selection->Form, HotKey->DefaultId, gBrowserSettingScope, NULL);\r
+        Status = ExtractDefault (Selection->FormSet, Selection->Form, HotKey->DefaultId, gBrowserSettingScope, GetDefaultForAll, NULL);\r
         if (!EFI_ERROR (Status)) {\r
           Selection->Action = UI_ACTION_REFRESH_FORM;\r
           Selection->Statement = NULL;\r
@@ -3865,7 +3865,7 @@ UiDisplayMenu (
       //\r
       // Reset to default value for all forms in the whole system.\r
       //\r
-      Status = ExtractDefault (Selection->FormSet, NULL, DefaultId, FormSetLevel, NULL);\r
+      Status = ExtractDefault (Selection->FormSet, NULL, DefaultId, FormSetLevel, GetDefaultForAll, NULL);\r
 \r
       if (!EFI_ERROR (Status)) {\r
         Selection->Action = UI_ACTION_REFRESH_FORM;\r