]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Common/VpdInfoFile.py
BaseTools: Optimize VPD PCD value for the different SKUs
[mirror_edk2.git] / BaseTools / Source / Python / Common / VpdInfoFile.py
index d45fb4cf0316106f2672d9c6799536da559dc5d6..130d5c7e0cdec42cec504e98b62e834af1b881e1 100644 (file)
@@ -79,6 +79,7 @@ class VpdInfoFile:
         #           @see BuildClassObject.PcdClassObject\r
         #  Value  : offset in different SKU such as [sku1_offset, sku2_offset]\r
         self._VpdArray = {}\r
+        self._VpdInfo = {}\r
     \r
     ## Add a VPD PCD collected from platform's autogen when building.\r
     #\r
@@ -102,8 +103,9 @@ class VpdInfoFile:
             if Vpd.MaxDatumSize == None or Vpd.MaxDatumSize == "":\r
                 Vpd.MaxDatumSize = VpdInfoFile._MAX_SIZE_TYPE[Vpd.DatumType]\r
         else:\r
-            EdkLogger.error("VpdInfoFile", BuildToolError.PARAMETER_INVALID,  \r
-                            "Invalid DatumType %s for VPD PCD %s.%s" % (Vpd.DatumType, Vpd.TokenSpaceGuidCName, Vpd.TokenCName))\r
+            if Vpd.MaxDatumSize <= 0:\r
+                EdkLogger.error("VpdInfoFile", BuildToolError.PARAMETER_INVALID,\r
+                                "Invalid max datum size for VPD PCD %s.%s" % (Vpd.TokenSpaceGuidCName, Vpd.TokenCName))\r
             \r
         if Vpd not in self._VpdArray.keys():\r
             #\r
@@ -178,6 +180,9 @@ class VpdInfoFile:
             \r
             Found = False\r
             \r
+            if (TokenSpaceName, PcdTokenName) not in self._VpdInfo:\r
+                self._VpdInfo[(TokenSpaceName, PcdTokenName)] = []\r
+            self._VpdInfo[(TokenSpaceName, PcdTokenName)].append((SkuId,Offset, Value))\r
             for VpdObject in self._VpdArray.keys():\r
                 VpdObjectTokenCName = VpdObject.TokenCName\r
                 for PcdItem in GlobalData.MixedPcd:\r
@@ -216,6 +221,8 @@ class VpdInfoFile:
             return None\r
         \r
         return self._VpdArray[vpd]\r
+    def GetVpdInfo(self,(PcdTokenName,TokenSpaceName)):\r
+        return self._VpdInfo.get((TokenSpaceName, PcdTokenName))\r
     \r
 ## Call external BPDG tool to process VPD file\r
 #    \r