BaseTools: merge towards minimum PCD MAX <something> methods

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>
This commit is contained in:
Carsey, Jaben
2018-04-12 07:08:08 +08:00
committed by Yonghong Zhu
parent 9eb87141ec
commit 25598f8bdb
5 changed files with 31 additions and 44 deletions

View 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, \
TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_SMM_PAGE_SIZE]
## The mapping dictionary from datum type to its maximum number.
MAX_VAL_TYPE = {"BOOLEAN":0x01, TAB_UINT8:0xFF, TAB_UINT16:0xFFFF, TAB_UINT32:0xFFFFFFFF, TAB_UINT64:0xFFFFFFFFFFFFFFFF}
## The mapping dictionary from datum type to size string.
MAX_SIZE_TYPE = {"BOOLEAN":"1", TAB_UINT8:"1", TAB_UINT16:"2", TAB_UINT32:"4", TAB_UINT64:"8"}
TAB_DEPEX = 'Depex'
TAB_DEPEX_COMMON = TAB_DEPEX + TAB_SPLIT + TAB_ARCH_COMMON
TAB_DEPEX_IA32 = TAB_DEPEX + TAB_SPLIT + TAB_ARCH_IA32

View File

@@ -17,6 +17,7 @@ from CommonDataClass.Exceptions import BadExpression
from CommonDataClass.Exceptions import WrnExpression
import uuid
from Common.Expression import PcdPattern
from Common.DataType import *
ERR_STRING_EXPR = 'This operator cannot be used in string expression: [%s].'
ERR_SNYTAX = 'Syntax error, the rest of expression cannot be evaluated: [%s].'
@@ -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.'
ERR_IN_OPERAND = 'Macro after IN operator can only be: $(FAMILY), $(ARCH), $(TOOL_CHAIN_TAG) and $(TARGET).'
def MaxOfType(DataType):
if DataType == 'UINT8':
return int('0xFF', 16)
if DataType == 'UINT16':
return int('0xFFFF', 16)
if DataType == 'UINT32':
return int('0xFFFFFFFF', 16)
if DataType == 'UINT64':
return int('0xFFFFFFFFFFFFFFFF', 16)
class RangeObject(object):
def __init__(self, start, end, empty = False):
@@ -111,7 +102,7 @@ class XOROperatorObject(object):
rangeId = str(uuid.uuid1())
rangeContainer = RangeContainer()
rangeContainer.push(RangeObject(0, int(Operand) - 1))
rangeContainer.push(RangeObject(int(Operand) + 1, MaxOfType(DataType)))
rangeContainer.push(RangeObject(int(Operand) + 1, MAX_VAL_TYPE[DataType]))
SymbolTable[rangeId] = rangeContainer
return rangeId
@@ -149,7 +140,7 @@ class GEOperatorObject(object):
raise BadExpression(ERR_SNYTAX % Expr)
rangeId1 = str(uuid.uuid1())
rangeContainer = RangeContainer()
rangeContainer.push(RangeObject(int(Operand), MaxOfType(DataType)))
rangeContainer.push(RangeObject(int(Operand), MAX_VAL_TYPE[DataType]))
SymbolTable[rangeId1] = rangeContainer
return rangeId1
@@ -162,7 +153,7 @@ class GTOperatorObject(object):
raise BadExpression(ERR_SNYTAX % Expr)
rangeId1 = str(uuid.uuid1())
rangeContainer = RangeContainer()
rangeContainer.push(RangeObject(int(Operand) + 1, MaxOfType(DataType)))
rangeContainer.push(RangeObject(int(Operand) + 1, MAX_VAL_TYPE[DataType]))
SymbolTable[rangeId1] = rangeContainer
return rangeId1
@@ -307,18 +298,18 @@ class RangeExpression(object):
rangeContainer = RangeContainer()
rangeid = str(uuid.uuid1())
if rangeobj.empty:
rangeContainer.push(RangeObject(0, MaxOfType(self.PcdDataType)))
rangeContainer.push(RangeObject(0, MAX_VAL_TYPE[self.PcdDataType]))
else:
if rangeobj.start > 0:
rangeContainer.push(RangeObject(0, rangeobj.start - 1))
if rangeobj.end < MaxOfType(self.PcdDataType):
rangeContainer.push(RangeObject(rangeobj.end + 1, MaxOfType(self.PcdDataType)))
if rangeobj.end < MAX_VAL_TYPE[self.PcdDataType]:
rangeContainer.push(RangeObject(rangeobj.end + 1, MAX_VAL_TYPE[self.PcdDataType]))
self.operanddict[rangeid] = rangeContainer
rangeids.append(rangeid)
if len(rangeids) == 0:
rangeContainer = RangeContainer()
rangeContainer.push(RangeObject(0, MaxOfType(self.PcdDataType)))
rangeContainer.push(RangeObject(0, MAX_VAL_TYPE[self.PcdDataType]))
rangeid = str(uuid.uuid1())
self.operanddict[rangeid] = rangeContainer
return rangeid

View File

@@ -23,6 +23,7 @@ import subprocess
import Common.GlobalData as GlobalData
from Common.LongFilePathSupport import OpenLongFilePath as open
from Common.Misc import SaveFileOnChange
from Common.DataType import *
FILE_COMMENT_TEMPLATE = \
"""
@@ -67,9 +68,7 @@ FILE_COMMENT_TEMPLATE = \
# <NList> ::= <HexNumber> ["," <HexNumber>]*
#
class VpdInfoFile:
## The mapping dictionary from datum type to size string.
_MAX_SIZE_TYPE = {"BOOLEAN":"1", "UINT8":"1", "UINT16":"2", "UINT32":"4", "UINT64":"8"}
_rVpdPcdLine = None
## Constructor
def __init__(self):
@@ -101,7 +100,7 @@ class VpdInfoFile:
"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 is None or Vpd.MaxDatumSize == "":
Vpd.MaxDatumSize = VpdInfoFile._MAX_SIZE_TYPE[Vpd.DatumType]
Vpd.MaxDatumSize = MAX_SIZE_TYPE[Vpd.DatumType]
else:
if Vpd.MaxDatumSize <= 0:
EdkLogger.error("VpdInfoFile", BuildToolError.PARAMETER_INVALID,