return FALSE;\r
}\r
\r
-/**\r
- Check whether the storage data for current form set is changed.\r
-\r
- @param FormSet FormSet data structure.\r
-\r
- @retval TRUE Data is changed.\r
- @retval FALSE Data is not changed.\r
-**/\r
-BOOLEAN \r
-IsStorageDataChangedForFormSet (\r
- IN FORM_BROWSER_FORMSET *FormSet\r
- )\r
-{\r
- LIST_ENTRY *Link;\r
- FORMSET_STORAGE *Storage;\r
- BROWSER_STORAGE *BrowserStorage;\r
- CHAR16 *ConfigRespNew;\r
- CHAR16 *ConfigRespOld;\r
- BOOLEAN RetVal;\r
-\r
- RetVal = FALSE;\r
- ConfigRespNew = NULL;\r
- ConfigRespOld = NULL;\r
-\r
- //\r
- // Request current settings from Configuration Driver\r
- //\r
- Link = GetFirstNode (&FormSet->StorageListHead);\r
- while (!IsNull (&FormSet->StorageListHead, Link)) {\r
- Storage = FORMSET_STORAGE_FROM_LINK (Link);\r
- Link = GetNextNode (&FormSet->StorageListHead, Link);\r
-\r
- BrowserStorage = Storage->BrowserStorage;\r
-\r
- if (BrowserStorage->Type == EFI_HII_VARSTORE_EFI_VARIABLE) {\r
- continue;\r
- }\r
-\r
- if (Storage->ElementCount == 0) {\r
- continue;\r
- }\r
-\r
- StorageToConfigResp (BrowserStorage, &ConfigRespNew, Storage->ConfigRequest, TRUE);\r
- StorageToConfigResp (BrowserStorage, &ConfigRespOld, Storage->ConfigRequest, FALSE);\r
- ASSERT (ConfigRespNew != NULL && ConfigRespOld != NULL);\r
-\r
- if (StrCmp (ConfigRespNew, ConfigRespOld) != 0) {\r
- RetVal = TRUE;\r
- }\r
-\r
- FreePool (ConfigRespNew);\r
- ConfigRespNew = NULL;\r
-\r
- FreePool (ConfigRespOld);\r
- ConfigRespOld = NULL;\r
-\r
- if (RetVal) {\r
- break;\r
- }\r
- }\r
-\r
- return RetVal;\r
-}\r
-\r
/**\r
Find menu which will show next time.\r
\r
//\r
// If no data is changed, don't need to save current FormSet into the maintain list.\r
//\r
- if (!IsNvUpdateRequiredForFormSet (FormSet) && !IsStorageDataChangedForFormSet(FormSet)) {\r
+ if (!IsNvUpdateRequiredForFormSet (FormSet)) {\r
CleanBrowserStorage(FormSet);\r
RemoveEntryList (&FormSet->Link);\r
DestroyFormSet (FormSet);\r
ConfigRequestAdjust(Storage);\r
return;\r
}\r
-\r
- //\r
- // Create the config request string to get all fields for this storage.\r
- // Allocate and fill a buffer large enough to hold the <ConfigHdr> template\r
- // followed by "&OFFSET=0&WIDTH=WWWW"followed by a Null-terminator\r
- //\r
- StrLen = StrSize (Storage->BrowserStorage->ConfigHdr) + 20 * sizeof (CHAR16);\r
- ConfigRequest = AllocateZeroPool (StrLen);\r
- ASSERT (ConfigRequest != NULL);\r
- UnicodeSPrint (\r
- ConfigRequest, \r
- StrLen, \r
- L"%s&OFFSET=0&WIDTH=%04x", \r
- Storage->BrowserStorage->ConfigHdr,\r
- Storage->BrowserStorage->Size);\r
break;\r
\r
case EFI_HII_VARSTORE_BUFFER:\r
case EFI_HII_VARSTORE_NAME_VALUE:\r
//\r
- // Skip if there is no RequestElement or data has initilized.\r
+ // Skip if there is no RequestElement.\r
//\r
- if (Storage->ElementCount == 0 || Storage->BrowserStorage->Initialized) {\r
+ if (Storage->ElementCount == 0) {\r
return;\r
}\r
+\r
+ //\r
+ // Just update the ConfigRequest, if storage already initialized. \r
+ //\r
+ if (Storage->BrowserStorage->Initialized) {\r
+ ConfigRequestAdjust(Storage);\r
+ return;\r
+ }\r
+\r
Storage->BrowserStorage->Initialized = TRUE;\r
- ConfigRequest = Storage->ConfigRequest;\r
break;\r
\r
default:\r
return;\r
}\r
\r
+ if (Storage->BrowserStorage->Type != EFI_HII_VARSTORE_NAME_VALUE) {\r
+ //\r
+ // Create the config request string to get all fields for this storage.\r
+ // Allocate and fill a buffer large enough to hold the <ConfigHdr> template\r
+ // followed by "&OFFSET=0&WIDTH=WWWW"followed by a Null-terminator\r
+ //\r
+ StrLen = StrSize (Storage->BrowserStorage->ConfigHdr) + 20 * sizeof (CHAR16);\r
+ ConfigRequest = AllocateZeroPool (StrLen);\r
+ ASSERT (ConfigRequest != NULL);\r
+ UnicodeSPrint (\r
+ ConfigRequest, \r
+ StrLen, \r
+ L"%s&OFFSET=0&WIDTH=%04x", \r
+ Storage->BrowserStorage->ConfigHdr,\r
+ Storage->BrowserStorage->Size);\r
+ } else {\r
+ ConfigRequest = Storage->ConfigRequest;\r
+ }\r
+\r
//\r
// Request current settings from Configuration Driver\r
//\r
//\r
SynchronizeStorage(FormSet, Storage->BrowserStorage, NULL, TRUE);\r
\r
- if (Storage->BrowserStorage->Type == EFI_HII_VARSTORE_EFI_VARIABLE_BUFFER) {\r
+ if (Storage->BrowserStorage->Type != EFI_HII_VARSTORE_NAME_VALUE) {\r
if (ConfigRequest != NULL) {\r
FreePool (ConfigRequest);\r
}\r