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