BaseTools: merge towards minimum PCD MAX <something> methods
authorCarsey, Jaben <jaben.carsey@intel.com>
Wed, 11 Apr 2018 23:08:08 +0000 (07:08 +0800)
committerYonghong Zhu <yonghong.zhu@intel.com>
Wed, 18 Apr 2018 14:15:36 +0000 (22:15 +0800)
we have 5 different max val or max byte for PCDs.
refactor and remove 2 methods.
we need 3, as one computes for VOID* PCDs.

Cc: Bob Feng <bob.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Jaben Carsey <jaben.carsey@intel.com>
Reviewed-by: Yonghong Zhu <yonghong.zhu@intel.com>
BaseTools/Source/Python/Common/DataType.py
BaseTools/Source/Python/Common/RangeExpression.py
BaseTools/Source/Python/Common/VpdInfoFile.py
BaseTools/Source/Python/GenFds/FfsInfStatement.py
BaseTools/Source/Python/Workspace/DscBuildData.py

index c0db8d0..1e632f3 100644 (file)
@@ -273,6 +273,11 @@ TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_LIST = [TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_
                                             TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_RUNTIME_PAGE_SIZE, \\r
                                             TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_SMM_PAGE_SIZE]\r
 \r
+## The mapping dictionary from datum type to its maximum number.\r
+MAX_VAL_TYPE = {"BOOLEAN":0x01, TAB_UINT8:0xFF, TAB_UINT16:0xFFFF, TAB_UINT32:0xFFFFFFFF, TAB_UINT64:0xFFFFFFFFFFFFFFFF}\r
+## The mapping dictionary from datum type to size string.\r
+MAX_SIZE_TYPE = {"BOOLEAN":"1", TAB_UINT8:"1", TAB_UINT16:"2", TAB_UINT32:"4", TAB_UINT64:"8"}\r
+\r
 TAB_DEPEX = 'Depex'\r
 TAB_DEPEX_COMMON = TAB_DEPEX + TAB_SPLIT + TAB_ARCH_COMMON\r
 TAB_DEPEX_IA32 = TAB_DEPEX + TAB_SPLIT + TAB_ARCH_IA32\r
index 5ee5918..4d07bd7 100644 (file)
@@ -17,6 +17,7 @@ from CommonDataClass.Exceptions import BadExpression
 from CommonDataClass.Exceptions import WrnExpression\r
 import uuid\r
 from Common.Expression import PcdPattern\r
+from Common.DataType import *\r
 \r
 ERR_STRING_EXPR = 'This operator cannot be used in string expression: [%s].'\r
 ERR_SNYTAX = 'Syntax error, the rest of expression cannot be evaluated: [%s].'\r
@@ -39,16 +40,6 @@ ERR_ARRAY_ELE = 'This must be HEX value for NList or Array: [%s].'
 ERR_EMPTY_EXPR = 'Empty expression is not allowed.'\r
 ERR_IN_OPERAND = 'Macro after IN operator can only be: $(FAMILY), $(ARCH), $(TOOL_CHAIN_TAG) and $(TARGET).'\r
 \r
-def MaxOfType(DataType):\r
-    if DataType == 'UINT8':\r
-        return int('0xFF', 16)\r
-    if DataType == 'UINT16':\r
-        return int('0xFFFF', 16)\r
-    if DataType == 'UINT32':\r
-        return int('0xFFFFFFFF', 16)\r
-    if DataType == 'UINT64':\r
-        return int('0xFFFFFFFFFFFFFFFF', 16)\r
-\r
 class RangeObject(object):\r
     def __init__(self, start, end, empty = False):\r
         \r
@@ -111,7 +102,7 @@ class XOROperatorObject(object):
         rangeId = str(uuid.uuid1())\r
         rangeContainer = RangeContainer()\r
         rangeContainer.push(RangeObject(0, int(Operand) - 1))\r
-        rangeContainer.push(RangeObject(int(Operand) + 1, MaxOfType(DataType)))\r
+        rangeContainer.push(RangeObject(int(Operand) + 1, MAX_VAL_TYPE[DataType]))\r
         SymbolTable[rangeId] = rangeContainer\r
         return rangeId\r
 \r
@@ -149,7 +140,7 @@ class GEOperatorObject(object):
             raise BadExpression(ERR_SNYTAX % Expr)\r
         rangeId1 = str(uuid.uuid1())\r
         rangeContainer = RangeContainer()\r
-        rangeContainer.push(RangeObject(int(Operand), MaxOfType(DataType)))\r
+        rangeContainer.push(RangeObject(int(Operand), MAX_VAL_TYPE[DataType]))\r
         SymbolTable[rangeId1] = rangeContainer\r
         return rangeId1   \r
       \r
@@ -162,7 +153,7 @@ class GTOperatorObject(object):
             raise BadExpression(ERR_SNYTAX % Expr)\r
         rangeId1 = str(uuid.uuid1())\r
         rangeContainer = RangeContainer()\r
-        rangeContainer.push(RangeObject(int(Operand) + 1, MaxOfType(DataType)))\r
+        rangeContainer.push(RangeObject(int(Operand) + 1, MAX_VAL_TYPE[DataType]))\r
         SymbolTable[rangeId1] = rangeContainer\r
         return rangeId1   \r
     \r
@@ -307,18 +298,18 @@ class RangeExpression(object):
             rangeContainer = RangeContainer()\r
             rangeid = str(uuid.uuid1())\r
             if rangeobj.empty:\r
-                rangeContainer.push(RangeObject(0, MaxOfType(self.PcdDataType)))\r
+                rangeContainer.push(RangeObject(0, MAX_VAL_TYPE[self.PcdDataType]))\r
             else:\r
                 if rangeobj.start > 0:\r
                     rangeContainer.push(RangeObject(0, rangeobj.start - 1))\r
-                if rangeobj.end < MaxOfType(self.PcdDataType):\r
-                    rangeContainer.push(RangeObject(rangeobj.end + 1, MaxOfType(self.PcdDataType)))\r
+                if rangeobj.end < MAX_VAL_TYPE[self.PcdDataType]:\r
+                    rangeContainer.push(RangeObject(rangeobj.end + 1, MAX_VAL_TYPE[self.PcdDataType]))\r
             self.operanddict[rangeid] = rangeContainer\r
             rangeids.append(rangeid)\r
 \r
         if len(rangeids) == 0:\r
             rangeContainer = RangeContainer()\r
-            rangeContainer.push(RangeObject(0, MaxOfType(self.PcdDataType)))\r
+            rangeContainer.push(RangeObject(0, MAX_VAL_TYPE[self.PcdDataType]))\r
             rangeid = str(uuid.uuid1())\r
             self.operanddict[rangeid] = rangeContainer\r
             return rangeid\r
index 5559a88..b2ad523 100644 (file)
@@ -23,6 +23,7 @@ import subprocess
 import Common.GlobalData as GlobalData\r
 from Common.LongFilePathSupport import OpenLongFilePath as open\r
 from Common.Misc import SaveFileOnChange\r
+from Common.DataType import *\r
 \r
 FILE_COMMENT_TEMPLATE = \\r
 """\r
@@ -67,9 +68,7 @@ FILE_COMMENT_TEMPLATE = \
 #  <NList>           ::=  <HexNumber> ["," <HexNumber>]*\r
 #\r
 class VpdInfoFile:\r
-    \r
-    ## The mapping dictionary from datum type to size string.\r
-    _MAX_SIZE_TYPE = {"BOOLEAN":"1", "UINT8":"1", "UINT16":"2", "UINT32":"4", "UINT64":"8"}\r
+\r
     _rVpdPcdLine = None \r
     ## Constructor\r
     def __init__(self):\r
@@ -101,7 +100,7 @@ class VpdInfoFile:
                                 "Invalid max datum size for VPD PCD %s.%s" % (Vpd.TokenSpaceGuidCName, Vpd.TokenCName))\r
         elif Vpd.DatumType in ["BOOLEAN", "UINT8", "UINT16", "UINT32", "UINT64"]: \r
             if Vpd.MaxDatumSize is None or Vpd.MaxDatumSize == "":\r
-                Vpd.MaxDatumSize = VpdInfoFile._MAX_SIZE_TYPE[Vpd.DatumType]\r
+                Vpd.MaxDatumSize = MAX_SIZE_TYPE[Vpd.DatumType]\r
         else:\r
             if Vpd.MaxDatumSize <= 0:\r
                 EdkLogger.error("VpdInfoFile", BuildToolError.PARAMETER_INVALID,\r
index 8876196..37624f3 100644 (file)
@@ -47,14 +47,12 @@ import Common.GlobalData as GlobalData
 from DepexSection import DepexSection\r
 from Common.Misc import SaveFileOnChange\r
 from Common.Expression import *\r
-from Common.DataType import TAB_COMMON\r
+from Common.DataType import *\r
 \r
 ## generate FFS from INF\r
 #\r
 #\r
 class FfsInfStatement(FfsInfStatementClassObject):\r
-    ## The mapping dictionary from datum type to its maximum number.\r
-    _MAX_SIZE_TYPE = {"BOOLEAN":0x01, "UINT8":0xFF, "UINT16":0xFFFF, "UINT32":0xFFFFFFFF, "UINT64":0xFFFFFFFFFFFFFFFF}\r
     ## The constructor\r
     #\r
     #   @param  self        The object pointer\r
@@ -333,8 +331,8 @@ class FfsInfStatement(FfsInfStatementClassObject):
                     EdkLogger.error("GenFds", GENFDS_ERROR, "The size of VOID* type PCD '%s.%s' exceeds its maximum size %d bytes." \\r
                                     % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName, int(MaxDatumSize) - int(Pcd.MaxDatumSize)))\r
             else:\r
-                if PcdValueInDscOrFdf > FfsInfStatement._MAX_SIZE_TYPE[Pcd.DatumType] \\r
-                    or PcdValueInImg > FfsInfStatement._MAX_SIZE_TYPE[Pcd.DatumType]:\r
+                if PcdValueInDscOrFdf > MAX_VAL_TYPE[Pcd.DatumType] \\r
+                    or PcdValueInImg > MAX_VAL_TYPE[Pcd.DatumType]:\r
                     EdkLogger.error("GenFds", GENFDS_ERROR, "The size of %s type PCD '%s.%s' doesn't match its data type." \\r
                                     % (Pcd.DatumType, Pcd.TokenSpaceGuidCName, Pcd.TokenCName))\r
             self.PatchPcds.append((Pcd, DefaultValue))\r
index 1ca8109..d6b8b76 100644 (file)
@@ -1542,25 +1542,19 @@ class DscBuildData(PlatformBuildClassObject):
 \r
     @staticmethod\r
     def GetPcdMaxSize(Pcd):\r
+        if Pcd.DatumType in TAB_PCD_NUMERIC_TYPES:\r
+            return MAX_SIZE_TYPE[Pcd.DatumType]\r
+\r
         MaxSize = int(Pcd.MaxDatumSize,10) if Pcd.MaxDatumSize else 0\r
-        if Pcd.DatumType not in ['BOOLEAN','UINT8','UINT16','UINT32','UINT64']:\r
-            if Pcd.PcdValueFromComm:\r
-                if Pcd.PcdValueFromComm.startswith("{") and Pcd.PcdValueFromComm.endswith("}"):\r
-                    MaxSize = max([len(Pcd.PcdValueFromComm.split(",")),MaxSize])\r
-                elif Pcd.PcdValueFromComm.startswith("\"") or Pcd.PcdValueFromComm.startswith("\'"):\r
-                    MaxSize = max([len(Pcd.PcdValueFromComm)-2+1,MaxSize])\r
-                elif Pcd.PcdValueFromComm.startswith("L\""):\r
-                    MaxSize = max([2*(len(Pcd.PcdValueFromComm)-3+1),MaxSize])\r
-                else:\r
-                    MaxSize = max([len(Pcd.PcdValueFromComm),MaxSize])\r
-        elif Pcd.DatumType not in ['BOOLEAN','UINT8']:\r
-            MaxSize = 1\r
-        elif Pcd.DatumType  == 'UINT16':\r
-            MaxSize = 2\r
-        elif Pcd.DatumType  == 'UINT32':\r
-            MaxSize = 4\r
-        elif Pcd.DatumType  == 'UINT64':\r
-            MaxSize = 8\r
+        if Pcd.PcdValueFromComm:\r
+            if Pcd.PcdValueFromComm.startswith("{") and Pcd.PcdValueFromComm.endswith("}"):\r
+                return max([len(Pcd.PcdValueFromComm.split(",")),MaxSize])\r
+            elif Pcd.PcdValueFromComm.startswith("\"") or Pcd.PcdValueFromComm.startswith("\'"):\r
+                return max([len(Pcd.PcdValueFromComm)-2+1,MaxSize])\r
+            elif Pcd.PcdValueFromComm.startswith("L\""):\r
+                return max([2*(len(Pcd.PcdValueFromComm)-3+1),MaxSize])\r
+            else:\r
+                return max([len(Pcd.PcdValueFromComm),MaxSize])\r
         return MaxSize\r
 \r
     def GenerateSizeFunction(self,Pcd):\r