Revision: 14895
          http://sourceforge.net/p/edk2/code/14895
Author:   ydong10
Date:     2013-11-25 02:55:45 +0000 (Mon, 25 Nov 2013)
Log Message:
-----------
When need to find varstore in the storage list, based on the extra HiiHandle to 
find the storage.

Signed-off-by: Eric Dong <[email protected]>
Reviewed-by: Liming Gao <[email protected]>

Modified Paths:
--------------
    trunk/edk2/MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c
    trunk/edk2/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c
    trunk/edk2/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h

Modified: trunk/edk2/MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c
===================================================================
--- trunk/edk2/MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c        
2013-11-25 02:38:03 UTC (rev 14894)
+++ trunk/edk2/MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c        
2013-11-25 02:55:45 UTC (rev 14895)
@@ -348,9 +348,19 @@
 /**
   Find the global storage link base on the input storate type, name and guid.
 
+  For EFI_HII_VARSTORE_EFI_VARIABLE and EFI_HII_VARSTORE_EFI_VARIABLE_BUFFER,
+  same guid + name = same storage
+
+  For EFI_HII_VARSTORE_NAME_VALUE:
+  same guid + HiiHandle = same storage
+
+  For EFI_HII_VARSTORE_BUFFER:
+  same guid + name + HiiHandle = same storage
+
   @param  StorageType                Storage type.
   @param  StorageGuid                Storage guid.
   @param  StorageName                Storage Name.
+  @param  HiiHandle                  HiiHandle for this varstore.
 
   @return Pointer to a GLOBAL_STORAGE data structure.
 
@@ -359,7 +369,8 @@
 FindStorageInList (
   IN UINT8                 StorageType,
   IN EFI_GUID              *StorageGuid,
-  IN CHAR16                *StorageName
+  IN CHAR16                *StorageName,
+  IN EFI_HII_HANDLE        HiiHandle
   )
 {
   LIST_ENTRY       *Link;
@@ -370,12 +381,16 @@
     BrowserStorage = BROWSER_STORAGE_FROM_LINK (Link);
 
     if ((BrowserStorage->Type == StorageType) && CompareGuid 
(&BrowserStorage->Guid, StorageGuid)) {
-      if (StorageType == EFI_HII_VARSTORE_NAME_VALUE) {
+      if (StorageType == EFI_HII_VARSTORE_NAME_VALUE && 
BrowserStorage->HiiHandle == HiiHandle) {
         return BrowserStorage;
       }
 
       if (StrCmp (BrowserStorage->Name, StorageName) == 0) {
-        return BrowserStorage;
+        if (StorageType == EFI_HII_VARSTORE_EFI_VARIABLE || StorageType == 
EFI_HII_VARSTORE_EFI_VARIABLE_BUFFER) {
+          return BrowserStorage;
+        } else if (StorageType == EFI_HII_VARSTORE_BUFFER && 
BrowserStorage->HiiHandle == HiiHandle) {
+          return BrowserStorage;
+        }
       }
     }
 
@@ -494,7 +509,7 @@
   Storage->Signature = FORMSET_STORAGE_SIGNATURE;
   InsertTailList (&FormSet->StorageListHead, &Storage->Link);
 
-  BrowserStorage = FindStorageInList(StorageType, StorageGuid, UnicodeString);
+  BrowserStorage = FindStorageInList(StorageType, StorageGuid, UnicodeString, 
FormSet->HiiHandle);
   if (BrowserStorage == NULL) {
     BrowserStorage = AllocateZeroPool (sizeof (BROWSER_STORAGE));
     ASSERT (BrowserStorage != NULL);
@@ -508,7 +523,10 @@
       BrowserStorage->Name = UnicodeString;
     }
 
+    BrowserStorage->HiiHandle = FormSet->HiiHandle;
     InitializeConfigHdr (FormSet, BrowserStorage);
+
+    BrowserStorage->Initialized = FALSE;
   }
 
   Storage->BrowserStorage = BrowserStorage;

Modified: trunk/edk2/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c
===================================================================
--- trunk/edk2/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c   2013-11-25 
02:38:03 UTC (rev 14894)
+++ trunk/edk2/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c   2013-11-25 
02:55:45 UTC (rev 14895)
@@ -645,6 +645,17 @@
         }
       }
 
+      if (Storage->Type == EFI_HII_VARSTORE_NAME_VALUE ||
+          Storage->Type == EFI_HII_VARSTORE_BUFFER) {
+        if (mSystemLevelFormSet == NULL || mSystemLevelFormSet->HiiHandle == 
NULL) {
+          return EFI_NOT_FOUND;
+        }
+
+        if (Storage->HiiHandle != mSystemLevelFormSet->HiiHandle) {
+          continue;
+        }
+      }
+
       Status = ProcessStorage (&TotalSize, &ResultsData, RetrieveData, 
Storage);
       if (EFI_ERROR (Status)) {
         return Status;
@@ -3880,18 +3891,20 @@
     Storage = FORMSET_STORAGE_FROM_LINK (Link);
     Link = GetNextNode (&FormSet->StorageListHead, Link);
 
-    if ((Storage->BrowserStorage->Type != EFI_HII_VARSTORE_BUFFER) && 
-        (Storage->BrowserStorage->Type != EFI_HII_VARSTORE_NAME_VALUE) && 
-        (Storage->BrowserStorage->Type != 
EFI_HII_VARSTORE_EFI_VARIABLE_BUFFER)) {
-      continue;
-    }
+    if (Storage->BrowserStorage->Type == EFI_HII_VARSTORE_EFI_VARIABLE_BUFFER) 
{
+      if (Storage->ConfigRequest == NULL || 
Storage->BrowserStorage->ConfigRequest == NULL) {
+        continue;
+      }
 
-    if (Storage->ConfigRequest == NULL || 
Storage->BrowserStorage->ConfigRequest == NULL) {
-      continue;
+      ConfigRequest = FormSet->QuestionInited ? Storage->ConfigRequest : 
Storage->ConfigElements;
+      RemoveConfigRequest (Storage->BrowserStorage, ConfigRequest);
+    } else if (Storage->BrowserStorage->Type == EFI_HII_VARSTORE_BUFFER ||
+               Storage->BrowserStorage->Type == EFI_HII_VARSTORE_NAME_VALUE) {
+      if (Storage->BrowserStorage->ConfigRequest != NULL) { 
+        FreePool (Storage->BrowserStorage->ConfigRequest);
+      }
+      Storage->BrowserStorage->Initialized = FALSE;
     }
-
-    ConfigRequest = FormSet->QuestionInited ? Storage->ConfigRequest : 
Storage->ConfigElements;
-    RemoveConfigRequest (Storage->BrowserStorage, ConfigRequest);
   }
 }
 
@@ -4269,22 +4282,12 @@
     case EFI_HII_VARSTORE_BUFFER:
     case EFI_HII_VARSTORE_NAME_VALUE:
       //
-      // Skip if there is no RequestElement
+      // Skip if there is no RequestElement or data has initilized.
       //
-      if (Storage->ElementCount == 0) {
+      if (Storage->ElementCount == 0 || Storage->BrowserStorage->Initialized) {
         return;
       }
 
-      //
-      // Adjust the ConfigRequest string, only the field not saved in 
BrowserStorage->AllConfig
-      // will used to call ExtractConfig.
-      // If not elements need to udpate, return.
-      //
-      if (!ConfigRequestAdjust(Storage)) {
-        return;
-      }
-      ASSERT (Storage->ConfigElements != NULL);
-
       Status = EFI_NOT_FOUND;
       if (FormSet->ConfigAccess != NULL) { 
         //
@@ -4292,7 +4295,7 @@
         //
         Status = FormSet->ConfigAccess->ExtractConfig (
                                           FormSet->ConfigAccess,
-                                          Storage->ConfigElements,
+                                          Storage->ConfigRequest,
                                           &Progress,
                                           &Result
                                           );
@@ -4315,10 +4318,13 @@
         //
         // Base on the configRequest string to get default value.
         //
-        GetDefaultForFormset (FormSet, Storage->BrowserStorage, 
Storage->ConfigElements);
+        GetDefaultForFormset (FormSet, Storage->BrowserStorage, 
Storage->ConfigRequest);
       }
 
-      SynchronizeStorage(FormSet, Storage->BrowserStorage, 
Storage->ConfigElements, TRUE);
+      SynchronizeStorage(FormSet, Storage->BrowserStorage, 
Storage->ConfigRequest, TRUE);
+
+      Storage->BrowserStorage->ConfigRequest = AllocateCopyPool (StrSize 
(Storage->ConfigRequest), Storage->ConfigRequest);
+      Storage->BrowserStorage->Initialized = TRUE;
       break;
 
     default:

Modified: trunk/edk2/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h
===================================================================
--- trunk/edk2/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h   2013-11-25 
02:38:03 UTC (rev 14894)
+++ trunk/edk2/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h   2013-11-25 
02:55:45 UTC (rev 14895)
@@ -136,6 +136,9 @@
 
   UINT8            Type;           // Storage type
 
+  BOOLEAN          Initialized;    // Whether this varstore is initialized, 
efi varstore not used.
+
+  EFI_HII_HANDLE   HiiHandle;      // HiiHandle for this varstore, efi 
varstore not used.
   EFI_GUID         Guid;
 
   CHAR16           *Name;          // For EFI_IFR_VARSTORE

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Shape the Mobile Experience: Free Subscription
Software experts and developers: Be at the forefront of tech innovation.
Intel(R) Software Adrenaline delivers strategic insight and game-changing 
conversations that shape the rapidly evolving mobile landscape. Sign up now. 
http://pubads.g.doubleclick.net/gampad/clk?id=63431311&iu=/4140/ostg.clktrk
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to