/**\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
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
//\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
//\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
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
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
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
//\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
\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
/**\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
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
// 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
//\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