X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=BaseTools%2FSource%2FPython%2FCommon%2FVpdInfoFile.py;h=4249b9f899e7728516cf01ac42db8fb405535e69;hp=bae184f0407127bfc4f47f03f21a96254985e8f3;hb=HEAD;hpb=487062c048809420de1b008bc9d17815a8c4fbdb diff --git a/BaseTools/Source/Python/Common/VpdInfoFile.py b/BaseTools/Source/Python/Common/VpdInfoFile.py index bae184f040..1e0c3dfe76 100644 --- a/BaseTools/Source/Python/Common/VpdInfoFile.py +++ b/BaseTools/Source/Python/Common/VpdInfoFile.py @@ -7,14 +7,9 @@ # # # Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.
-# This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# SPDX-License-Identifier: BSD-2-Clause-Patent # +from __future__ import print_function import Common.LongFilePathOs as os import re import Common.EdkLogger as EdkLogger @@ -56,7 +51,7 @@ FILE_COMMENT_TEMPLATE = \ # ::= "." # ::= C Variable Name of the Token Space GUID # ::= C Variable Name of the PCD -# ::= {"*"} {} +# ::= {TAB_STAR} {} # ::= "0x" (a-fA-F0-9){1,8} # ::= # ::= {} {} {} {} @@ -91,18 +86,18 @@ class VpdInfoFile: if (Vpd is None): EdkLogger.error("VpdInfoFile", BuildToolError.ATTRIBUTE_UNKNOWN_ERROR, "Invalid VPD PCD entry.") - if not (Offset >= 0 or Offset == "*"): + if not (Offset >= "0" or Offset == TAB_STAR): EdkLogger.error("VpdInfoFile", BuildToolError.PARAMETER_INVALID, "Invalid offset parameter: %s." % Offset) if Vpd.DatumType == TAB_VOID: - if Vpd.MaxDatumSize <= 0: + if Vpd.MaxDatumSize <= "0": EdkLogger.error("VpdInfoFile", BuildToolError.PARAMETER_INVALID, "Invalid max datum size for VPD PCD %s.%s" % (Vpd.TokenSpaceGuidCName, Vpd.TokenCName)) elif Vpd.DatumType in TAB_PCD_NUMERIC_TYPES: if not Vpd.MaxDatumSize: Vpd.MaxDatumSize = MAX_SIZE_TYPE[Vpd.DatumType] else: - if Vpd.MaxDatumSize <= 0: + if Vpd.MaxDatumSize <= "0": EdkLogger.error("VpdInfoFile", BuildToolError.PARAMETER_INVALID, "Invalid max datum size for VPD PCD %s.%s" % (Vpd.TokenSpaceGuidCName, Vpd.TokenCName)) @@ -126,7 +121,7 @@ class VpdInfoFile: "Invalid parameter FilePath: %s." % FilePath) Content = FILE_COMMENT_TEMPLATE - Pcds = sorted(self._VpdArray.keys()) + Pcds = sorted(self._VpdArray.keys(), key=lambda x: x.TokenCName) for Pcd in Pcds: i = 0 PcdTokenCName = Pcd.TokenCName @@ -176,8 +171,8 @@ class VpdInfoFile: Found = False if (TokenSpaceName, PcdTokenName) not in self._VpdInfo: - self._VpdInfo[(TokenSpaceName, PcdTokenName)] = [] - self._VpdInfo[(TokenSpaceName, PcdTokenName)].append((SkuId, Offset, Value)) + self._VpdInfo[(TokenSpaceName, PcdTokenName)] = {} + self._VpdInfo[(TokenSpaceName, PcdTokenName)][(SkuId, Offset)] = Value for VpdObject in self._VpdArray: VpdObjectTokenCName = VpdObject.TokenCName for PcdItem in GlobalData.MixedPcd: @@ -185,8 +180,8 @@ class VpdInfoFile: VpdObjectTokenCName = PcdItem[0] for sku in VpdObject.SkuInfoList: if VpdObject.TokenSpaceGuidCName == TokenSpaceName and VpdObjectTokenCName == PcdTokenName.strip() and sku == SkuId: - if self._VpdArray[VpdObject][sku] == "*": - if Offset == "*": + if self._VpdArray[VpdObject][sku] == TAB_STAR: + if Offset == TAB_STAR: EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, "The offset of %s has not been fixed up by third-party BPDG tool." % PcdName) self._VpdArray[VpdObject][sku] = Offset Found = True @@ -218,7 +213,7 @@ class VpdInfoFile: return self._VpdArray[vpd] def GetVpdInfo(self, arg): (PcdTokenName, TokenSpaceName) = arg - return self._VpdInfo.get((TokenSpaceName, PcdTokenName)) + return [(sku,offset,value) for (sku,offset),value in self._VpdInfo.get((TokenSpaceName, PcdTokenName)).items()] ## Call external BPDG tool to process VPD file # @@ -248,14 +243,13 @@ def CallExtenalBPDGTool(ToolPath, VpdFileName): except Exception as X: EdkLogger.error("BPDG", BuildToolError.COMMAND_FAILURE, ExtraData=str(X)) (out, error) = PopenObject.communicate() - print(out) + print(out.decode()) while PopenObject.returncode is None : PopenObject.wait() if PopenObject.returncode != 0: - if PopenObject.returncode != 0: - EdkLogger.debug(EdkLogger.DEBUG_1, "Fail to call BPDG tool", str(error)) - EdkLogger.error("BPDG", BuildToolError.COMMAND_FAILURE, "Fail to execute BPDG tool with exit code: %d, the error message is: \n %s" % \ - (PopenObject.returncode, str(error))) + EdkLogger.debug(EdkLogger.DEBUG_1, "Fail to call BPDG tool", str(error.decode())) + EdkLogger.error("BPDG", BuildToolError.COMMAND_FAILURE, "Fail to execute BPDG tool with exit code: %d, the error message is: \n %s" % \ + (PopenObject.returncode, str(error.decode()))) return PopenObject.returncode