BROWSER_SETTING_SCOPE gBrowserSettingScope = FormSetLevel;\r
BOOLEAN mBrowserScopeFirstSet = TRUE;\r
EXIT_HANDLER ExitHandlerFunction = NULL;\r
+FORM_BROWSER_FORMSET *mSystemLevelFormSet;\r
\r
//\r
// Browser Global Strings\r
UINTN Index;\r
EFI_GUID ZeroGuid;\r
EFI_STATUS Status;\r
+ FORM_BROWSER_FORMSET *OldFormset;\r
+\r
+ OldFormset = mSystemLevelFormSet;\r
\r
//\r
// Get all the Hii handles\r
//\r
LocalFormSet = AllocateZeroPool (sizeof (FORM_BROWSER_FORMSET));\r
ASSERT (LocalFormSet != NULL);\r
+ mSystemLevelFormSet = LocalFormSet;\r
+\r
ZeroMem (&ZeroGuid, sizeof (ZeroGuid));\r
Status = InitializeFormSet (HiiHandles[Index], &ZeroGuid, LocalFormSet);\r
if (EFI_ERROR (Status) || IsListEmpty (&LocalFormSet->FormListHead)) {\r
// Free resources, and restore gOldFormSet and gClassOfVfr\r
//\r
FreePool (HiiHandles);\r
+\r
+ mSystemLevelFormSet = OldFormset;\r
}\r
\r
/**\r
break;\r
}\r
Selection->FormSet = FormSet;\r
+ mSystemLevelFormSet = FormSet;\r
\r
//\r
// Display this formset\r
Status = SetupBrowser (Selection);\r
\r
gCurrentSelection = NULL;\r
+ mSystemLevelFormSet = NULL;\r
\r
//\r
// If no data is changed, don't need to save current FormSet into the maintain list.\r
LIST_ENTRY *Link;\r
BROWSER_STORAGE *Storage;\r
FORMSET_STORAGE *FormsetStorage;\r
- FORM_BROWSER_FORMSET *FormSet;\r
UINTN TotalSize;\r
BOOLEAN Found;\r
\r
//\r
// GUID/Name is not specified, take the first storage in FormSet\r
//\r
- if (gCurrentSelection == NULL) {\r
+ if (mSystemLevelFormSet == NULL) {\r
return EFI_NOT_READY;\r
}\r
\r
//\r
// Generate <ConfigResp>\r
//\r
- FormSet = gCurrentSelection->FormSet;\r
- Link = GetFirstNode (&FormSet->StorageListHead);\r
- if (IsNull (&FormSet->StorageListHead, Link)) {\r
+ Link = GetFirstNode (&mSystemLevelFormSet->StorageListHead);\r
+ if (IsNull (&mSystemLevelFormSet->StorageListHead, Link)) {\r
return EFI_UNSUPPORTED;\r
}\r
\r
LIST_ENTRY *Link;\r
FORMSET_STORAGE *Storage;\r
FORM_BROWSER_CONFIG_REQUEST *ConfigInfo;\r
- FORM_BROWSER_FORMSET *LocalFormSet;\r
+ FORM_BROWSER_FORMSET *LocalFormSet;\r
+ FORM_BROWSER_FORMSET *OldFormSet;\r
\r
//\r
// Check the supported setting level.\r
//\r
// System Level Discard.\r
//\r
- \r
+ OldFormSet = mSystemLevelFormSet;\r
+\r
//\r
// Discard changed value for each FormSet in the maintain list.\r
//\r
if (!ValidateFormSet(LocalFormSet)) {\r
continue;\r
}\r
+\r
+ mSystemLevelFormSet = LocalFormSet;\r
+\r
DiscardForm (LocalFormSet, NULL, FormSetLevel);\r
if (!IsHiiHandleInBrowserContext (LocalFormSet->HiiHandle)) {\r
//\r
DestroyFormSet (LocalFormSet);\r
}\r
}\r
+\r
+ mSystemLevelFormSet = OldFormSet;\r
}\r
\r
return EFI_SUCCESS; \r
LIST_ENTRY *Link;\r
FORM_BROWSER_STATEMENT *Question;\r
FORM_BROWSER_FORMSET *LocalFormSet;\r
+ FORM_BROWSER_FORMSET *OldFormSet;\r
\r
Status = EFI_SUCCESS;\r
\r
// Preload all Hii formset.\r
//\r
LoadAllHiiFormset();\r
- \r
+\r
+ OldFormSet = mSystemLevelFormSet;\r
+\r
//\r
// Set Default Value for each FormSet in the maintain list.\r
//\r
if (!ValidateFormSet(LocalFormSet)) {\r
continue;\r
}\r
+\r
+ mSystemLevelFormSet = LocalFormSet;\r
+\r
ExtractDefault (LocalFormSet, NULL, DefaultId, FormSetLevel, GetDefaultValueScope, Storage, RetrieveValueFirst);\r
}\r
+\r
+ mSystemLevelFormSet = OldFormSet;\r
}\r
\r
return EFI_SUCCESS;\r
return;\r
\r
case EFI_HII_VARSTORE_EFI_VARIABLE_BUFFER:\r
- if (Storage->BrowserStorage->ReferenceCount > 1) {\r
+ if (Storage->BrowserStorage->ConfigRequest != NULL) {\r
ConfigRequestAdjust(Storage);\r
return;\r
}\r
FORMSET_STORAGE *Storage;\r
FORM_BROWSER_FORMSET *OldFormSet;\r
\r
+ //\r
+ // Try to find pre FormSet in the maintain backup list.\r
+ // If old formset != NULL, destroy this formset. Add new formset to gBrowserFormSetList.\r
+ //\r
+ OldFormSet = GetFormSetFromHiiHandle (FormSet->HiiHandle);\r
+ if (OldFormSet != NULL) {\r
+ RemoveEntryList (&OldFormSet->Link);\r
+ DestroyFormSet (OldFormSet);\r
+ }\r
+ InsertTailList (&gBrowserFormSetList, &FormSet->Link);\r
+\r
//\r
// Extract default from IFR binary for no storage questions.\r
// \r
\r
Link = GetNextNode (&FormSet->StorageListHead, Link);\r
}\r
-\r
- //\r
- // Try to find pre FormSet in the maintain backup list.\r
- // If old formset != NULL, destroy this formset. Add new formset to gBrowserFormSetList.\r
- //\r
- OldFormSet = GetFormSetFromHiiHandle (FormSet->HiiHandle);\r
- if (OldFormSet != NULL) {\r
- RemoveEntryList (&OldFormSet->Link);\r
- DestroyFormSet (OldFormSet);\r
- }\r
- InsertTailList (&gBrowserFormSetList, &FormSet->Link);\r
}\r
\r
\r