@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
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
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
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
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
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
// 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