]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Common/VpdInfoFile.py
Sync BaseTool trunk (version r2610) into EDKII BaseTools.
[mirror_edk2.git] / BaseTools / Source / Python / Common / VpdInfoFile.py
index 0111744cc045cc6c1a344f24ac28d82494315348..18f6f5663c51d4386269988ade67e0e00c1a270e 100644 (file)
@@ -135,13 +135,17 @@ class VpdInfoFile:
             fd.write(FILE_COMMENT_TEMPLATE)\r
 \r
             # write each of PCD in VPD type\r
-            for Pcd in self._VpdArray.keys():\r
+            Pcds = self._VpdArray.keys()\r
+            Pcds.sort()\r
+            for Pcd in Pcds:\r
+                i = 0\r
                 for Offset in self._VpdArray[Pcd]:\r
-                    PcdValue = str(Pcd.SkuInfoList[Pcd.SkuInfoList.keys()[0]].DefaultValue).strip()\r
+                    PcdValue = str(Pcd.SkuInfoList[Pcd.SkuInfoList.keys()[i]].DefaultValue).strip()\r
                     if PcdValue == "" :\r
                         PcdValue  = Pcd.DefaultValue\r
                         \r
-                    fd.write("%s.%s|%s|%s|%s  \n" % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName, str(Offset).strip(), str(Pcd.MaxDatumSize).strip(),PcdValue))\r
+                    fd.write("%s.%s|%s|%s|%s|%s  \n" % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName, str(Pcd.SkuInfoList.keys()[i]),str(Offset).strip(), str(Pcd.MaxDatumSize).strip(),PcdValue))\r
+                    i += 1\r
         except:\r
             EdkLogger.error("VpdInfoFile",\r
                             BuildToolError.FILE_WRITE_FAILURE,\r
@@ -172,21 +176,22 @@ class VpdInfoFile:
             # the line must follow output format defined in BPDG spec.\r
             #\r
             try:\r
-                PcdName, Offset, Size, Value = Line.split("#")[0].split("|")\r
+                PcdName, SkuId,Offset, Size, Value = Line.split("#")[0].split("|")\r
+                PcdName, SkuId,Offset, Size, Value = PcdName.strip(), SkuId.strip(),Offset.strip(), Size.strip(), Value.strip()\r
                 TokenSpaceName, PcdTokenName = PcdName.split(".")\r
             except:\r
                 EdkLogger.error("BPDG", BuildToolError.PARSER_ERROR, "Fail to parse VPD information file %s" % FilePath)\r
             \r
             Found = False\r
+            \r
             for VpdObject in self._VpdArray.keys():\r
-                if VpdObject.TokenSpaceGuidCName == TokenSpaceName and VpdObject.TokenCName == PcdTokenName.strip():\r
-                    if self._VpdArray[VpdObject][0] == "*":\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
-                            \r
-                        self._VpdArray[VpdObject][0] = Offset\r
-                    Found = True\r
-                    break\r
+                for sku in VpdObject.SkuInfoList.keys(): \r
+                    if VpdObject.TokenSpaceGuidCName == TokenSpaceName and VpdObject.TokenCName == PcdTokenName.strip() and sku == SkuId:\r
+                        if self._VpdArray[VpdObject][VpdObject.SkuInfoList.keys().index(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
+                        Found = True\r
             if not Found:\r
                 EdkLogger.error("BPDG", BuildToolError.PARSER_ERROR, "Can not find PCD defined in VPD guid file.")\r
                 \r
@@ -219,28 +224,23 @@ class VpdInfoFile:
 #  @param ToolPath      The string path name for BPDG tool\r
 #  @param VpdFileName   The string path name for VPD information guid.txt\r
 # \r
-def CallExtenalBPDGTool(ToolPath, VpdFilePath, VpdFileName):\r
+def CallExtenalBPDGTool(ToolPath, VpdFileName):\r
     assert ToolPath != None, "Invalid parameter ToolPath"\r
-    assert VpdFilePath != None and os.path.exists(VpdFilePath), "Invalid parameter VpdFileName"\r
+    assert VpdFileName != None and os.path.exists(VpdFileName), "Invalid parameter VpdFileName"\r
     \r
-    OutputDir = os.path.dirname(VpdFilePath)\r
-    if (VpdFileName == None or VpdFileName == "") :\r
-        FileName = os.path.basename(VpdFilePath)\r
-        BaseName, ext = os.path.splitext(FileName)\r
-        OutputMapFileName = os.path.join(OutputDir, "%s.map" % BaseName)\r
-        OutputBinFileName = os.path.join(OutputDir, "%s.bin" % BaseName)\r
-    else :\r
-        OutputMapFileName = os.path.join(OutputDir, "%s.map" % VpdFileName)\r
-        OutputBinFileName = os.path.join(OutputDir, "%s.bin" % VpdFileName)\r
+    OutputDir = os.path.dirname(VpdFileName)\r
+    FileName = os.path.basename(VpdFileName)\r
+    BaseName, ext = os.path.splitext(FileName)\r
+    OutputMapFileName = os.path.join(OutputDir, "%s.map" % BaseName)\r
+    OutputBinFileName = os.path.join(OutputDir, "%s.bin" % BaseName)\r
           \r
     try:\r
         PopenObject = subprocess.Popen([ToolPath,\r
                                         '-o', OutputBinFileName, \r
                                         '-m', OutputMapFileName,\r
-                                        '-s',\r
+                                        '-q',\r
                                         '-f',\r
-                                        '-v',\r
-                                        VpdFilePath],\r
+                                        VpdFileName],\r
                                         stdout=subprocess.PIPE, \r
                                         stderr= subprocess.PIPE)\r
     except Exception, X:\r