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