]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Common/VpdInfoFile.py
BaseTools: Fix VPD data optimization issue
[mirror_edk2.git] / BaseTools / Source / Python / Common / VpdInfoFile.py
index 130d5c7e0cdec42cec504e98b62e834af1b881e1..716155e96d29106dd9eddcee2c4027ee68a38e37 100644 (file)
@@ -88,7 +88,7 @@ class VpdInfoFile:
     #\r
     #  @param offset integer value for VPD's offset in specific SKU.\r
     #\r
-    def Add(self, Vpd, Offset):\r
+    def Add(self, Vpd, skuname,Offset):\r
         if (Vpd == None):\r
             EdkLogger.error("VpdInfoFile", BuildToolError.ATTRIBUTE_UNKNOWN_ERROR, "Invalid VPD PCD entry.")\r
         \r
@@ -111,12 +111,9 @@ class VpdInfoFile:
             #\r
             # If there is no Vpd instance in dict, that imply this offset for a given SKU is a new one \r
             #\r
-            self._VpdArray[Vpd] = [Offset]\r
-        else:\r
-            #\r
-            # If there is an offset for a specific SKU in dict, then append this offset for other sku to array.\r
-            #\r
-            self._VpdArray[Vpd].append(Offset)\r
+            self._VpdArray[Vpd] = {}\r
+\r
+        self._VpdArray[Vpd].update({skuname:Offset})\r
             \r
         \r
     ## Generate VPD PCD information into a text file\r
@@ -138,12 +135,12 @@ class VpdInfoFile:
             for PcdItem in GlobalData.MixedPcd:\r
                 if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.MixedPcd[PcdItem]:\r
                     PcdTokenCName = PcdItem[0]\r
-            for Offset in self._VpdArray[Pcd]:\r
-                PcdValue = str(Pcd.SkuInfoList[Pcd.SkuInfoList.keys()[i]].DefaultValue).strip()\r
+            for skuname in self._VpdArray[Pcd]:\r
+                PcdValue = str(Pcd.SkuInfoList[skuname].DefaultValue).strip()\r
                 if PcdValue == "" :\r
                     PcdValue  = Pcd.DefaultValue\r
 \r
-                Content += "%s.%s|%s|%s|%s|%s  \n" % (Pcd.TokenSpaceGuidCName, PcdTokenCName, str(Pcd.SkuInfoList.keys()[i]),str(Offset).strip(), str(Pcd.MaxDatumSize).strip(),PcdValue)\r
+                Content += "%s.%s|%s|%s|%s|%s  \n" % (Pcd.TokenSpaceGuidCName, PcdTokenCName, skuname,str(self._VpdArray[Pcd][skuname]).strip(), str(Pcd.MaxDatumSize).strip(),PcdValue)\r
                 i += 1\r
 \r
         return SaveFileOnChange(FilePath, Content, False)\r
@@ -190,10 +187,10 @@ class VpdInfoFile:
                         VpdObjectTokenCName = PcdItem[0]\r
                 for sku in VpdObject.SkuInfoList.keys():\r
                     if VpdObject.TokenSpaceGuidCName == TokenSpaceName and VpdObjectTokenCName == PcdTokenName.strip() and sku == SkuId:\r
-                        if self._VpdArray[VpdObject][VpdObject.SkuInfoList.keys().index(sku)] == "*":\r
+                        if self._VpdArray[VpdObject][sku] == "*":\r
                             if Offset == "*":\r
                                 EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, "The offset of %s has not been fixed up by third-party BPDG tool." % PcdName)                              \r
-                            self._VpdArray[VpdObject][VpdObject.SkuInfoList.keys().index(sku)] = Offset\r
+                            self._VpdArray[VpdObject][sku] = Offset\r
                         Found = True\r
             if not Found:\r
                 EdkLogger.error("BPDG", BuildToolError.PARSER_ERROR, "Can not find PCD defined in VPD guid file.")\r