X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=BaseTools%2FSource%2FPython%2FCommon%2FVpdInfoFile.py;h=b1baf06b9ccd40a4f86b14965b271df980afd7b3;hb=7da06eeede10fc8b908327b375bcdf36707ff7b5;hp=56161efe6ae0bd5846074ea63f1b72db8ff17837;hpb=2b8a6c44e0deb508f79804dd5ff7156bc7e25493;p=mirror_edk2.git diff --git a/BaseTools/Source/Python/Common/VpdInfoFile.py b/BaseTools/Source/Python/Common/VpdInfoFile.py index 56161efe6a..b1baf06b9c 100644 --- a/BaseTools/Source/Python/Common/VpdInfoFile.py +++ b/BaseTools/Source/Python/Common/VpdInfoFile.py @@ -79,6 +79,7 @@ class VpdInfoFile: # @see BuildClassObject.PcdClassObject # Value : offset in different SKU such as [sku1_offset, sku2_offset] self._VpdArray = {} + self._VpdInfo = {} ## Add a VPD PCD collected from platform's autogen when building. # @@ -87,8 +88,8 @@ class VpdInfoFile: # # @param offset integer value for VPD's offset in specific SKU. # - def Add(self, Vpd, Offset): - if (Vpd == None): + def Add(self, Vpd, skuname,Offset): + if (Vpd is None): EdkLogger.error("VpdInfoFile", BuildToolError.ATTRIBUTE_UNKNOWN_ERROR, "Invalid VPD PCD entry.") if not (Offset >= 0 or Offset == "*"): @@ -99,7 +100,7 @@ class VpdInfoFile: EdkLogger.error("VpdInfoFile", BuildToolError.PARAMETER_INVALID, "Invalid max datum size for VPD PCD %s.%s" % (Vpd.TokenSpaceGuidCName, Vpd.TokenCName)) elif Vpd.DatumType in ["BOOLEAN", "UINT8", "UINT16", "UINT32", "UINT64"]: - if Vpd.MaxDatumSize == None or Vpd.MaxDatumSize == "": + if Vpd.MaxDatumSize is None or Vpd.MaxDatumSize == "": Vpd.MaxDatumSize = VpdInfoFile._MAX_SIZE_TYPE[Vpd.DatumType] else: if Vpd.MaxDatumSize <= 0: @@ -110,12 +111,9 @@ class VpdInfoFile: # # If there is no Vpd instance in dict, that imply this offset for a given SKU is a new one # - self._VpdArray[Vpd] = [Offset] - else: - # - # If there is an offset for a specific SKU in dict, then append this offset for other sku to array. - # - self._VpdArray[Vpd].append(Offset) + self._VpdArray[Vpd] = {} + + self._VpdArray[Vpd].update({skuname:Offset}) ## Generate VPD PCD information into a text file @@ -124,7 +122,7 @@ class VpdInfoFile: # If # @param FilePath The given file path which would hold VPD information def Write(self, FilePath): - if not (FilePath != None or len(FilePath) != 0): + if not (FilePath is not None or len(FilePath) != 0): EdkLogger.error("VpdInfoFile", BuildToolError.PARAMETER_INVALID, "Invalid parameter FilePath: %s." % FilePath) @@ -137,12 +135,12 @@ class VpdInfoFile: for PcdItem in GlobalData.MixedPcd: if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.MixedPcd[PcdItem]: PcdTokenCName = PcdItem[0] - for Offset in self._VpdArray[Pcd]: - PcdValue = str(Pcd.SkuInfoList[Pcd.SkuInfoList.keys()[i]].DefaultValue).strip() + for skuname in self._VpdArray[Pcd]: + PcdValue = str(Pcd.SkuInfoList[skuname].DefaultValue).strip() if PcdValue == "" : PcdValue = Pcd.DefaultValue - Content += "%s.%s|%s|%s|%s|%s \n" % (Pcd.TokenSpaceGuidCName, PcdTokenCName, str(Pcd.SkuInfoList.keys()[i]),str(Offset).strip(), str(Pcd.MaxDatumSize).strip(),PcdValue) + Content += "%s.%s|%s|%s|%s|%s \n" % (Pcd.TokenSpaceGuidCName, PcdTokenCName, skuname,str(self._VpdArray[Pcd][skuname]).strip(), str(Pcd.MaxDatumSize).strip(),PcdValue) i += 1 return SaveFileOnChange(FilePath, Content, False) @@ -179,6 +177,9 @@ class VpdInfoFile: Found = False + if (TokenSpaceName, PcdTokenName) not in self._VpdInfo: + self._VpdInfo[(TokenSpaceName, PcdTokenName)] = [] + self._VpdInfo[(TokenSpaceName, PcdTokenName)].append((SkuId,Offset, Value)) for VpdObject in self._VpdArray.keys(): VpdObjectTokenCName = VpdObject.TokenCName for PcdItem in GlobalData.MixedPcd: @@ -186,10 +187,10 @@ class VpdInfoFile: VpdObjectTokenCName = PcdItem[0] for sku in VpdObject.SkuInfoList.keys(): if VpdObject.TokenSpaceGuidCName == TokenSpaceName and VpdObjectTokenCName == PcdTokenName.strip() and sku == SkuId: - if self._VpdArray[VpdObject][VpdObject.SkuInfoList.keys().index(sku)] == "*": + if self._VpdArray[VpdObject][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 + self._VpdArray[VpdObject][sku] = Offset Found = True if not Found: EdkLogger.error("BPDG", BuildToolError.PARSER_ERROR, "Can not find PCD defined in VPD guid file.") @@ -217,6 +218,8 @@ class VpdInfoFile: return None return self._VpdArray[vpd] + def GetVpdInfo(self,(PcdTokenName,TokenSpaceName)): + return self._VpdInfo.get((TokenSpaceName, PcdTokenName)) ## Call external BPDG tool to process VPD file # @@ -224,8 +227,8 @@ class VpdInfoFile: # @param VpdFileName The string path name for VPD information guid.txt # def CallExtenalBPDGTool(ToolPath, VpdFileName): - assert ToolPath != None, "Invalid parameter ToolPath" - assert VpdFileName != None and os.path.exists(VpdFileName), "Invalid parameter VpdFileName" + assert ToolPath is not None, "Invalid parameter ToolPath" + assert VpdFileName is not None and os.path.exists(VpdFileName), "Invalid parameter VpdFileName" OutputDir = os.path.dirname(VpdFileName) FileName = os.path.basename(VpdFileName) @@ -247,7 +250,7 @@ def CallExtenalBPDGTool(ToolPath, VpdFileName): EdkLogger.error("BPDG", BuildToolError.COMMAND_FAILURE, ExtraData="%s" % (str(X))) (out, error) = PopenObject.communicate() print out - while PopenObject.returncode == None : + while PopenObject.returncode is None : PopenObject.wait() if PopenObject.returncode != 0: