import Common.GlobalData as GlobalData\r
from AutoGen.AutoGen import ModuleAutoGen\r
from Common.Misc import PathClass\r
-from Common.String import NormPath\r
+from Common.StringUtils import NormPath\r
from Common.DataType import *\r
import collections\r
from Common.Expression import *\r
\r
-gComponentType2ModuleType = {\r
- "LIBRARY" : "BASE",\r
- "SECURITY_CORE" : "SEC",\r
- "PEI_CORE" : "PEI_CORE",\r
- "COMBINED_PEIM_DRIVER" : "PEIM",\r
- "PIC_PEIM" : "PEIM",\r
- "RELOCATABLE_PEIM" : "PEIM",\r
- "PE32_PEIM" : "PEIM",\r
- "BS_DRIVER" : "DXE_DRIVER",\r
- "RT_DRIVER" : "DXE_RUNTIME_DRIVER",\r
- "SAL_RT_DRIVER" : "DXE_SAL_DRIVER",\r
- "APPLICATION" : "UEFI_APPLICATION",\r
- "LOGO" : "BASE",\r
-}\r
-\r
## Pattern to extract contents in EDK DXS files\r
gDxsDependencyPattern = re.compile(r"DEPENDENCY_START(.+)DEPENDENCY_END", re.DOTALL)\r
\r
\r
## The look up table to map PCD type to pair of report display type and DEC type\r
gPcdTypeMap = {\r
- 'FixedAtBuild' : ('FIXED', 'FixedAtBuild'),\r
- 'PatchableInModule': ('PATCH', 'PatchableInModule'),\r
- 'FeatureFlag' : ('FLAG', 'FeatureFlag'),\r
- 'Dynamic' : ('DYN', 'Dynamic'),\r
- 'DynamicHii' : ('DYNHII', 'Dynamic'),\r
- 'DynamicVpd' : ('DYNVPD', 'Dynamic'),\r
- 'DynamicEx' : ('DEX', 'DynamicEx'),\r
- 'DynamicExHii' : ('DEXHII', 'DynamicEx'),\r
- 'DynamicExVpd' : ('DEXVPD', 'DynamicEx'),\r
+ TAB_PCDS_FIXED_AT_BUILD : ('FIXED', TAB_PCDS_FIXED_AT_BUILD),\r
+ TAB_PCDS_PATCHABLE_IN_MODULE: ('PATCH', TAB_PCDS_PATCHABLE_IN_MODULE),\r
+ TAB_PCDS_FEATURE_FLAG : ('FLAG', TAB_PCDS_FEATURE_FLAG),\r
+ TAB_PCDS_DYNAMIC : ('DYN', TAB_PCDS_DYNAMIC),\r
+ TAB_PCDS_DYNAMIC_HII : ('DYNHII', TAB_PCDS_DYNAMIC),\r
+ TAB_PCDS_DYNAMIC_VPD : ('DYNVPD', TAB_PCDS_DYNAMIC),\r
+ TAB_PCDS_DYNAMIC_EX : ('DEX', TAB_PCDS_DYNAMIC_EX),\r
+ TAB_PCDS_DYNAMIC_EX_HII : ('DEXHII', TAB_PCDS_DYNAMIC_EX),\r
+ TAB_PCDS_DYNAMIC_EX_VPD : ('DEXVPD', TAB_PCDS_DYNAMIC_EX),\r
}\r
\r
## The look up table to map module type to driver type\r
gDriverTypeMap = {\r
- 'SEC' : '0x3 (SECURITY_CORE)',\r
- 'PEI_CORE' : '0x4 (PEI_CORE)',\r
- 'PEIM' : '0x6 (PEIM)',\r
- 'DXE_CORE' : '0x5 (DXE_CORE)',\r
- 'DXE_DRIVER' : '0x7 (DRIVER)',\r
- 'DXE_SAL_DRIVER' : '0x7 (DRIVER)',\r
- 'DXE_SMM_DRIVER' : '0x7 (DRIVER)',\r
- 'DXE_RUNTIME_DRIVER': '0x7 (DRIVER)',\r
- 'UEFI_DRIVER' : '0x7 (DRIVER)',\r
- 'UEFI_APPLICATION' : '0x9 (APPLICATION)',\r
- 'SMM_CORE' : '0xD (SMM_CORE)',\r
+ SUP_MODULE_SEC : '0x3 (SECURITY_CORE)',\r
+ SUP_MODULE_PEI_CORE : '0x4 (PEI_CORE)',\r
+ SUP_MODULE_PEIM : '0x6 (PEIM)',\r
+ SUP_MODULE_DXE_CORE : '0x5 (DXE_CORE)',\r
+ SUP_MODULE_DXE_DRIVER : '0x7 (DRIVER)',\r
+ SUP_MODULE_DXE_SAL_DRIVER : '0x7 (DRIVER)',\r
+ SUP_MODULE_DXE_SMM_DRIVER : '0x7 (DRIVER)',\r
+ SUP_MODULE_DXE_RUNTIME_DRIVER: '0x7 (DRIVER)',\r
+ SUP_MODULE_UEFI_DRIVER : '0x7 (DRIVER)',\r
+ SUP_MODULE_UEFI_APPLICATION : '0x9 (APPLICATION)',\r
+ SUP_MODULE_SMM_CORE : '0xD (SMM_CORE)',\r
'SMM_DRIVER' : '0xA (SMM)', # Extension of module type to support PI 1.1 SMM drivers\r
- 'MM_STANDALONE' : '0xE (MM_STANDALONE)',\r
- 'MM_CORE_STANDALONE' : '0xF (MM_CORE_STANDALONE)'\r
+ SUP_MODULE_MM_STANDALONE : '0xE (MM_STANDALONE)',\r
+ SUP_MODULE_MM_CORE_STANDALONE : '0xF (MM_CORE_STANDALONE)'\r
}\r
\r
## The look up table of the supported opcode in the dependency expression binaries\r
FileName = "Protocol/%(Key)s/%(Key)s.h" % {"Key" : Key}\r
elif "PPI" in Type:\r
FileName = "Ppi/%(Key)s/%(Key)s.h" % {"Key" : Key}\r
- elif "GUID" in Type:\r
+ elif TAB_GUID in Type:\r
FileName = "Guid/%(Key)s/%(Key)s.h" % {"Key" : Key}\r
else:\r
continue\r
Statement = gOpCodeList[struct.unpack("B", OpCode)[0]]\r
if Statement in ["BEFORE", "AFTER", "PUSH"]:\r
GuidValue = "%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X" % \\r
- struct.unpack("=LHHBBBBBBBB", DepexFile.read(16))\r
+ struct.unpack(PACK_PATTERN_GUID, DepexFile.read(16))\r
GuidString = self._GuidDb.get(GuidValue, GuidValue)\r
Statement = "%s %s" % (Statement, GuidString)\r
DepexStatement.append(Statement)\r
self._DepexFileName = os.path.join(M.BuildDir, "OUTPUT", M.Module.BaseName + ".depex")\r
ModuleType = M.ModuleType\r
if not ModuleType:\r
- ModuleType = gComponentType2ModuleType.get(M.ComponentType, "")\r
+ ModuleType = COMPONENT_TO_MODULE_MAP_DICT.get(M.ComponentType, "")\r
\r
- if ModuleType in ["SEC", "PEI_CORE", "DXE_CORE", "SMM_CORE", "MM_CORE_STANDALONE", "UEFI_APPLICATION"]:\r
+ if ModuleType in [SUP_MODULE_SEC, SUP_MODULE_PEI_CORE, SUP_MODULE_DXE_CORE, SUP_MODULE_SMM_CORE, SUP_MODULE_MM_CORE_STANDALONE, SUP_MODULE_UEFI_APPLICATION]:\r
return\r
\r
for Source in M.SourceFileList:\r
self.Source = "DXS"\r
break\r
else:\r
- self.Depex = M.DepexExpressionList.get(M.ModuleType, "")\r
+ self.Depex = M.DepexExpressionDict.get(M.ModuleType, "")\r
self.ModuleDepex = " ".join(M.Module.DepexExpression[M.Arch, M.ModuleType])\r
if not self.ModuleDepex:\r
self.ModuleDepex = "(None)"\r
FileWrite(File, "Dependency Expression (DEPEX) from %s" % self.Source)\r
\r
if self.Source == "INF":\r
- FileWrite(File, "%s" % self.Depex, True)\r
+ FileWrite(File, self.Depex, True)\r
FileWrite(File, gSubSectionSep)\r
FileWrite(File, "From Module INF: %s" % self.ModuleDepex, True)\r
FileWrite(File, "From Library INF: %s" % self.LibraryDepex, True)\r
else:\r
- FileWrite(File, "%s" % self.Depex)\r
+ FileWrite(File, self.Depex)\r
FileWrite(File, gSubSectionEnd)\r
\r
##\r
if not M.IsLibrary:\r
ModuleType = M.ModuleType\r
if not ModuleType:\r
- ModuleType = gComponentType2ModuleType.get(M.ComponentType, "")\r
+ ModuleType = COMPONENT_TO_MODULE_MAP_DICT.get(M.ComponentType, "")\r
#\r
# If a module complies to PI 1.1, promote Module type to "SMM_DRIVER"\r
#\r
- if ModuleType == "DXE_SMM_DRIVER":\r
+ if ModuleType == SUP_MODULE_DXE_SMM_DRIVER:\r
PiSpec = M.Module.Specification.get("PI_SPECIFICATION_VERSION", "0x00010000")\r
if int(PiSpec, 0) >= 0x0001000A:\r
ModuleType = "SMM_DRIVER"\r
cmd = ["GenFw", "--rebase", str(0), "-o", Tempfile, DefaultEFIfile]\r
try:\r
PopenObject = subprocess.Popen(' '.join(cmd), stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)\r
- except Exception, X:\r
+ except Exception as X:\r
EdkLogger.error("GenFw", COMMAND_FAILURE, ExtraData="%s: %s" % (str(X), cmd[0]))\r
EndOfProcedure = threading.Event()\r
EndOfProcedure.clear()\r
Pcd = Pa.Platform.Pcds[item]\r
if not Pcd.Type:\r
# check the Pcd in FDF file, whether it is used in module first\r
- for T in ["FixedAtBuild", "PatchableInModule", "FeatureFlag", "Dynamic", "DynamicEx"]:\r
+ for T in PCD_TYPE_LIST:\r
PcdList = self.AllPcds.setdefault(Pcd.TokenSpaceGuidCName, {}).setdefault(T, [])\r
if Pcd in PcdList:\r
Pcd.Type = T\r
if not Pcd.Type:\r
PcdTypeFlag = False\r
for package in Pa.PackageList:\r
- for T in ["FixedAtBuild", "PatchableInModule", "FeatureFlag", "Dynamic", "DynamicEx"]:\r
+ for T in PCD_TYPE_LIST:\r
if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, T) in package.Pcds:\r
Pcd.Type = T\r
PcdTypeFlag = True\r
if not Pcd.DatumType:\r
PcdType = Pcd.Type\r
# Try to remove Hii and Vpd suffix\r
- if PcdType.startswith("DynamicEx"):\r
- PcdType = "DynamicEx"\r
- elif PcdType.startswith("Dynamic"):\r
- PcdType = "Dynamic"\r
+ if PcdType.startswith(TAB_PCDS_DYNAMIC_EX):\r
+ PcdType = TAB_PCDS_DYNAMIC_EX\r
+ elif PcdType.startswith(TAB_PCDS_DYNAMIC):\r
+ PcdType = TAB_PCDS_DYNAMIC\r
for package in Pa.PackageList:\r
if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, PcdType) in package.Pcds:\r
Pcd.DatumType = package.Pcds[(Pcd.TokenCName, Pcd.TokenSpaceGuidCName, PcdType)].DatumType\r
for PcdItem in GlobalData.gConditionalPcds:\r
if '.' in PcdItem:\r
(TokenSpaceGuidCName, TokenCName) = PcdItem.split('.')\r
- if (TokenCName, TokenSpaceGuidCName) in Pa.Platform.Pcds.keys():\r
+ if (TokenCName, TokenSpaceGuidCName) in Pa.Platform.Pcds:\r
Pcd = Pa.Platform.Pcds[(TokenCName, TokenSpaceGuidCName)]\r
PcdList = self.ConditionalPcds.setdefault(Pcd.TokenSpaceGuidCName, {}).setdefault(Pcd.Type, [])\r
if Pcd not in PcdList:\r
FileWrite(File, gSubSectionStart)\r
FileWrite(File, TAB_BRG_PCD)\r
FileWrite(File, gSubSectionSep)\r
-\r
+ AllPcdDict = {}\r
for Key in PcdDict:\r
+ AllPcdDict[Key] = {}\r
+ for Type in PcdDict[Key]:\r
+ for Pcd in PcdDict[Key][Type]:\r
+ AllPcdDict[Key][(Pcd.TokenCName, Type)] = Pcd\r
+ for Key in sorted(AllPcdDict):\r
#\r
# Group PCD by their token space GUID C Name\r
#\r
First = True\r
- for Type in PcdDict[Key]:\r
+ for PcdTokenCName, Type in sorted(AllPcdDict[Key]):\r
#\r
# Group PCD by their usage type\r
#\r
+ Pcd = AllPcdDict[Key][(PcdTokenCName, Type)]\r
TypeName, DecType = gPcdTypeMap.get(Type, ("", Type))\r
- for Pcd in PcdDict[Key][Type]:\r
- PcdTokenCName = Pcd.TokenCName\r
- MixedPcdFlag = False\r
- if GlobalData.MixedPcd:\r
- for PcdKey in GlobalData.MixedPcd:\r
- if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.MixedPcd[PcdKey]:\r
- PcdTokenCName = PcdKey[0]\r
- MixedPcdFlag = True\r
- if MixedPcdFlag and not ModulePcdSet:\r
- continue\r
- #\r
- # Get PCD default value and their override relationship\r
- #\r
- DecDefaultValue = self.DecPcdDefault.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName, DecType))\r
- DscDefaultValue = self.DscPcdDefault.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName))\r
- DscDefaultValBak = DscDefaultValue\r
- DscDefaultValue = self.FdfPcdSet.get((Pcd.TokenCName, Key), DscDefaultValue)\r
- if DscDefaultValue != DscDefaultValBak:\r
- try:\r
- DscDefaultValue = ValueExpressionEx(DscDefaultValue, Pcd.DatumType, self._GuidDict)(True)\r
- except BadExpression, DscDefaultValue:\r
- EdkLogger.error('BuildReport', FORMAT_INVALID, "PCD Value: %s, Type: %s" %(DscDefaultValue, Pcd.DatumType))\r
-\r
- InfDefaultValue = None\r
- \r
- PcdValue = DecDefaultValue\r
- if DscDefaultValue:\r
- PcdValue = DscDefaultValue\r
- if ModulePcdSet is not None:\r
- if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type) not in ModulePcdSet:\r
- continue\r
- InfDefault, PcdValue = ModulePcdSet[Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type]\r
- Pcd.DefaultValue = PcdValue\r
- if InfDefault == "":\r
- InfDefault = None\r
-\r
- BuildOptionMatch = False\r
- if GlobalData.BuildOptionPcd:\r
- for pcd in GlobalData.BuildOptionPcd:\r
- if (Pcd.TokenSpaceGuidCName, Pcd.TokenCName) == (pcd[0], pcd[1]):\r
- if pcd[2]:\r
- continue\r
- PcdValue = pcd[3]\r
- Pcd.DefaultValue = PcdValue\r
- BuildOptionMatch = True\r
- break\r
+ MixedPcdFlag = False\r
+ if GlobalData.MixedPcd:\r
+ for PcdKey in GlobalData.MixedPcd:\r
+ if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.MixedPcd[PcdKey]:\r
+ PcdTokenCName = PcdKey[0]\r
+ MixedPcdFlag = True\r
+ if MixedPcdFlag and not ModulePcdSet:\r
+ continue\r
+ #\r
+ # Get PCD default value and their override relationship\r
+ #\r
+ DecDefaultValue = self.DecPcdDefault.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName, DecType))\r
+ DscDefaultValue = self.DscPcdDefault.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName))\r
+ DscDefaultValBak = DscDefaultValue\r
+ DscDefaultValue = self.FdfPcdSet.get((Pcd.TokenCName, Key), DscDefaultValue)\r
+ if DscDefaultValue != DscDefaultValBak:\r
+ try:\r
+ DscDefaultValue = ValueExpressionEx(DscDefaultValue, Pcd.DatumType, self._GuidDict)(True)\r
+ except BadExpression as DscDefaultValue:\r
+ EdkLogger.error('BuildReport', FORMAT_INVALID, "PCD Value: %s, Type: %s" %(DscDefaultValue, Pcd.DatumType))\r
\r
- if First:\r
- if ModulePcdSet is None:\r
- FileWrite(File, "")\r
- FileWrite(File, Key)\r
- First = False\r
+ InfDefaultValue = None\r
\r
+ PcdValue = DecDefaultValue\r
+ if DscDefaultValue:\r
+ PcdValue = DscDefaultValue\r
+ if ModulePcdSet is not None:\r
+ if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type) not in ModulePcdSet:\r
+ continue\r
+ InfDefault, PcdValue = ModulePcdSet[Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type]\r
+ Pcd.DefaultValue = PcdValue\r
+ if InfDefault == "":\r
+ InfDefault = None\r
+\r
+ BuildOptionMatch = False\r
+ if GlobalData.BuildOptionPcd:\r
+ for pcd in GlobalData.BuildOptionPcd:\r
+ if (Pcd.TokenSpaceGuidCName, Pcd.TokenCName) == (pcd[0], pcd[1]):\r
+ if pcd[2]:\r
+ continue\r
+ PcdValue = pcd[3]\r
+ Pcd.DefaultValue = PcdValue\r
+ BuildOptionMatch = True\r
+ break\r
\r
- if Pcd.DatumType in ('UINT8', 'UINT16', 'UINT32', 'UINT64'):\r
- PcdValueNumber = int(PcdValue.strip(), 0)\r
- if DecDefaultValue is None:\r
- DecMatch = True\r
- else:\r
- DecDefaultValueNumber = int(DecDefaultValue.strip(), 0)\r
- DecMatch = (DecDefaultValueNumber == PcdValueNumber)\r
+ if First:\r
+ if ModulePcdSet is None:\r
+ FileWrite(File, "")\r
+ FileWrite(File, Key)\r
+ First = False\r
\r
- if InfDefaultValue is None:\r
- InfMatch = True\r
- else:\r
- InfDefaultValueNumber = int(InfDefaultValue.strip(), 0)\r
- InfMatch = (InfDefaultValueNumber == PcdValueNumber)\r
\r
- if DscDefaultValue is None:\r
- DscMatch = True\r
- else:\r
- DscDefaultValueNumber = int(DscDefaultValue.strip(), 0)\r
- DscMatch = (DscDefaultValueNumber == PcdValueNumber)\r
+ if Pcd.DatumType in TAB_PCD_CLEAN_NUMERIC_TYPES:\r
+ PcdValueNumber = int(PcdValue.strip(), 0)\r
+ if DecDefaultValue is None:\r
+ DecMatch = True\r
else:\r
- if DecDefaultValue is None:\r
- DecMatch = True\r
- else:\r
- DecMatch = (DecDefaultValue.strip() == PcdValue.strip())\r
+ DecDefaultValueNumber = int(DecDefaultValue.strip(), 0)\r
+ DecMatch = (DecDefaultValueNumber == PcdValueNumber)\r
\r
- if InfDefaultValue is None:\r
- InfMatch = True\r
- else:\r
- InfMatch = (InfDefaultValue.strip() == PcdValue.strip())\r
+ if InfDefaultValue is None:\r
+ InfMatch = True\r
+ else:\r
+ InfDefaultValueNumber = int(InfDefaultValue.strip(), 0)\r
+ InfMatch = (InfDefaultValueNumber == PcdValueNumber)\r
\r
- if DscDefaultValue is None:\r
- DscMatch = True\r
+ if DscDefaultValue is None:\r
+ DscMatch = True\r
+ else:\r
+ DscDefaultValueNumber = int(DscDefaultValue.strip(), 0)\r
+ DscMatch = (DscDefaultValueNumber == PcdValueNumber)\r
+ else:\r
+ if DecDefaultValue is None:\r
+ DecMatch = True\r
+ else:\r
+ DecMatch = (DecDefaultValue.strip() == PcdValue.strip())\r
+\r
+ if InfDefaultValue is None:\r
+ InfMatch = True\r
+ else:\r
+ InfMatch = (InfDefaultValue.strip() == PcdValue.strip())\r
+\r
+ if DscDefaultValue is None:\r
+ DscMatch = True\r
+ else:\r
+ DscMatch = (DscDefaultValue.strip() == PcdValue.strip())\r
+\r
+ IsStructure = False\r
+ if GlobalData.gStructurePcd and (self.Arch in GlobalData.gStructurePcd) and ((Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.gStructurePcd[self.Arch]):\r
+ IsStructure = True\r
+ if TypeName in ('DYNVPD', 'DEXVPD'):\r
+ SkuInfoList = Pcd.SkuInfoList\r
+ Pcd = GlobalData.gStructurePcd[self.Arch][(Pcd.TokenCName, Pcd.TokenSpaceGuidCName)]\r
+ Pcd.DatumType = Pcd.StructName\r
+ if TypeName in ('DYNVPD', 'DEXVPD'):\r
+ Pcd.SkuInfoList = SkuInfoList\r
+ if Pcd.PcdFieldValueFromComm:\r
+ BuildOptionMatch = True\r
+ DecMatch = False\r
+ elif Pcd.SkuOverrideValues:\r
+ DscOverride = False\r
+ if not Pcd.SkuInfoList:\r
+ OverrideValues = Pcd.SkuOverrideValues\r
+ if OverrideValues:\r
+ Keys = OverrideValues.keys()\r
+ Data = OverrideValues[Keys[0]]\r
+ Struct = Data.values()[0]\r
+ DscOverride = self.ParseStruct(Struct)\r
else:\r
- DscMatch = (DscDefaultValue.strip() == PcdValue.strip())\r
-\r
- IsStructure = False\r
- if GlobalData.gStructurePcd and (self.Arch in GlobalData.gStructurePcd.keys()) and ((Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.gStructurePcd[self.Arch]):\r
- IsStructure = True\r
- if TypeName in ('DYNVPD', 'DEXVPD'):\r
- SkuInfoList = Pcd.SkuInfoList\r
- Pcd = GlobalData.gStructurePcd[self.Arch][(Pcd.TokenCName, Pcd.TokenSpaceGuidCName)]\r
- Pcd.DatumType = Pcd.StructName\r
- if TypeName in ('DYNVPD', 'DEXVPD'):\r
- Pcd.SkuInfoList = SkuInfoList\r
- if Pcd.PcdFieldValueFromComm:\r
- BuildOptionMatch = True\r
+ SkuList = sorted(Pcd.SkuInfoList.keys())\r
+ for Sku in SkuList:\r
+ SkuInfo = Pcd.SkuInfoList[Sku]\r
+ if TypeName in ('DYNHII', 'DEXHII'):\r
+ if SkuInfo.DefaultStoreDict:\r
+ DefaultStoreList = sorted(SkuInfo.DefaultStoreDict.keys())\r
+ for DefaultStore in DefaultStoreList:\r
+ OverrideValues = Pcd.SkuOverrideValues[Sku]\r
+ DscOverride = self.ParseStruct(OverrideValues[DefaultStore])\r
+ if DscOverride:\r
+ break\r
+ else:\r
+ OverrideValues = Pcd.SkuOverrideValues[Sku]\r
+ if OverrideValues:\r
+ Keys = OverrideValues.keys()\r
+ OverrideFieldStruct = self.OverrideFieldValue(Pcd, OverrideValues[Keys[0]])\r
+ DscOverride = self.ParseStruct(OverrideFieldStruct)\r
+ if DscOverride:\r
+ break\r
+ if DscOverride:\r
+ DscMatch = True\r
DecMatch = False\r
- elif Pcd.SkuOverrideValues:\r
- DscOverride = False\r
- if not Pcd.SkuInfoList:\r
- OverrideValues = Pcd.SkuOverrideValues\r
- if OverrideValues:\r
- Keys = OverrideValues.keys()\r
- Data = OverrideValues[Keys[0]]\r
- Struct = Data.values()[0]\r
- DscOverride = self.ParseStruct(Struct)\r
- else:\r
- SkuList = sorted(Pcd.SkuInfoList.keys())\r
- for Sku in SkuList:\r
- SkuInfo = Pcd.SkuInfoList[Sku]\r
- if TypeName in ('DYNHII', 'DEXHII'):\r
- if SkuInfo.DefaultStoreDict:\r
- DefaultStoreList = sorted(SkuInfo.DefaultStoreDict.keys())\r
- for DefaultStore in DefaultStoreList:\r
- OverrideValues = Pcd.SkuOverrideValues[Sku]\r
- DscOverride = self.ParseStruct(OverrideValues[DefaultStore])\r
- if DscOverride:\r
- break\r
- else:\r
- OverrideValues = Pcd.SkuOverrideValues[Sku]\r
- if OverrideValues:\r
- Keys = OverrideValues.keys()\r
- OverrideFieldStruct = self.OverrideFieldValue(Pcd, OverrideValues[Keys[0]])\r
- DscOverride = self.ParseStruct(OverrideFieldStruct)\r
- if DscOverride:\r
- break\r
- if DscOverride:\r
- DscMatch = True\r
- DecMatch = False\r
-\r
- #\r
- # Report PCD item according to their override relationship\r
- #\r
- if DecMatch and InfMatch:\r
- self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, ' ')\r
- elif BuildOptionMatch:\r
- self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*B')\r
- else:\r
- if DscMatch:\r
- if (Pcd.TokenCName, Key) in self.FdfPcdSet:\r
- self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*F')\r
- else:\r
- self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*P')\r
+\r
+ #\r
+ # Report PCD item according to their override relationship\r
+ #\r
+ if DecMatch and InfMatch:\r
+ self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, ' ')\r
+ elif BuildOptionMatch:\r
+ self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*B')\r
+ else:\r
+ if DscMatch:\r
+ if (Pcd.TokenCName, Key) in self.FdfPcdSet:\r
+ self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*F')\r
else:\r
- self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*M')\r
+ self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*P')\r
+ else:\r
+ self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*M')\r
\r
- if ModulePcdSet is None:\r
- if IsStructure:\r
- continue\r
- if not TypeName in ('PATCH', 'FLAG', 'FIXED'):\r
- continue\r
- if not BuildOptionMatch:\r
- ModuleOverride = self.ModulePcdOverride.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName), {})\r
- for ModulePath in ModuleOverride:\r
- ModuleDefault = ModuleOverride[ModulePath]\r
- if Pcd.DatumType in ('UINT8', 'UINT16', 'UINT32', 'UINT64'):\r
- ModulePcdDefaultValueNumber = int(ModuleDefault.strip(), 0)\r
- Match = (ModulePcdDefaultValueNumber == PcdValueNumber)\r
- else:\r
- Match = (ModuleDefault.strip() == PcdValue.strip())\r
- if Match:\r
- continue\r
- IsByteArray, ArrayList = ByteArrayForamt(ModuleDefault.strip())\r
- if IsByteArray:\r
- FileWrite(File, ' *M %-*s = %s' % (self.MaxLen + 19, ModulePath, '{'))\r
- for Array in ArrayList:\r
- FileWrite(File, '%s' % (Array))\r
- else:\r
- FileWrite(File, ' *M %-*s = %s' % (self.MaxLen + 19, ModulePath, ModuleDefault.strip()))\r
+ if ModulePcdSet is None:\r
+ if IsStructure:\r
+ continue\r
+ if not TypeName in ('PATCH', 'FLAG', 'FIXED'):\r
+ continue\r
+ if not BuildOptionMatch:\r
+ ModuleOverride = self.ModulePcdOverride.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName), {})\r
+ for ModulePath in ModuleOverride:\r
+ ModuleDefault = ModuleOverride[ModulePath]\r
+ if Pcd.DatumType in TAB_PCD_CLEAN_NUMERIC_TYPES:\r
+ ModulePcdDefaultValueNumber = int(ModuleDefault.strip(), 0)\r
+ Match = (ModulePcdDefaultValueNumber == PcdValueNumber)\r
+ else:\r
+ Match = (ModuleDefault.strip() == PcdValue.strip())\r
+ if Match:\r
+ continue\r
+ IsByteArray, ArrayList = ByteArrayForamt(ModuleDefault.strip())\r
+ if IsByteArray:\r
+ FileWrite(File, ' *M %-*s = %s' % (self.MaxLen + 15, ModulePath, '{'))\r
+ for Array in ArrayList:\r
+ FileWrite(File, Array)\r
+ else:\r
+ FileWrite(File, ' *M %-*s = %s' % (self.MaxLen + 15, ModulePath, ModuleDefault.strip()))\r
\r
if ModulePcdSet is None:\r
FileWrite(File, gSectionEnd)\r
if IsByteArray:\r
FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DSC DEFAULT', "{"))\r
for Array in ArrayList:\r
- FileWrite(File, '%s' % (Array))\r
+ FileWrite(File, Array)\r
else:\r
+ if Pcd.DatumType in TAB_PCD_CLEAN_NUMERIC_TYPES:\r
+ if Value.startswith(('0x', '0X')):\r
+ Value = '{} ({:d})'.format(Value, int(Value, 0))\r
+ else:\r
+ Value = "0x{:X} ({})".format(int(Value, 0), Value)\r
FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DSC DEFAULT', Value))\r
if not InfMatch and InfDefaultValue is not None:\r
Value = InfDefaultValue.strip()\r
if IsByteArray:\r
FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'INF DEFAULT', "{"))\r
for Array in ArrayList:\r
- FileWrite(File, '%s' % (Array))\r
+ FileWrite(File, Array)\r
else:\r
+ if Pcd.DatumType in TAB_PCD_CLEAN_NUMERIC_TYPES:\r
+ if Value.startswith(('0x', '0X')):\r
+ Value = '{} ({:d})'.format(Value, int(Value, 0))\r
+ else:\r
+ Value = "0x{:X} ({})".format(int(Value, 0), Value)\r
FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'INF DEFAULT', Value))\r
\r
if not DecMatch and DecDefaultValue is not None:\r
if IsByteArray:\r
FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DEC DEFAULT', "{"))\r
for Array in ArrayList:\r
- FileWrite(File, '%s' % (Array))\r
+ FileWrite(File, Array)\r
else:\r
+ if Pcd.DatumType in TAB_PCD_CLEAN_NUMERIC_TYPES:\r
+ if Value.startswith(('0x', '0X')):\r
+ Value = '{} ({:d})'.format(Value, int(Value, 0))\r
+ else:\r
+ Value = "0x{:X} ({})".format(int(Value, 0), Value)\r
FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DEC DEFAULT', Value))\r
if IsStructure:\r
self.PrintStructureInfo(File, Pcd.DefaultValues)\r
if IsByteArray:\r
FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '{'))\r
for Array in ArrayList:\r
- FileWrite(File, '%s' % (Array))\r
+ FileWrite(File, Array)\r
else:\r
+ if Pcd.DatumType in TAB_PCD_CLEAN_NUMERIC_TYPES:\r
+ if Value.startswith(('0x', '0X')):\r
+ Value = '{} ({:d})'.format(Value, int(Value, 0))\r
+ else:\r
+ Value = "0x{:X} ({})".format(int(Value, 0), Value)\r
FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', Value))\r
if IsStructure:\r
OverrideValues = Pcd.SkuOverrideValues\r
else:\r
FileWrite(File, ' %-*s : %6s %10s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', '(' + DefaultStore + ')', '{'))\r
for Array in ArrayList:\r
- FileWrite(File, '%s' % (Array))\r
+ FileWrite(File, Array)\r
else:\r
+ if Pcd.DatumType in TAB_PCD_CLEAN_NUMERIC_TYPES:\r
+ if Value.startswith(('0x', '0X')):\r
+ Value = '{} ({:d})'.format(Value, int(Value, 0))\r
+ else:\r
+ Value = "0x{:X} ({})".format(int(Value, 0), Value)\r
if self.DefaultStoreSingle and self.SkuSingle:\r
FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', Value))\r
elif self.DefaultStoreSingle and not self.SkuSingle:\r
else:\r
FileWrite(File, ' %-*s : %6s %10s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', '(' + DefaultStore + ')', '{'))\r
for Array in ArrayList:\r
- FileWrite(File, '%s' % (Array))\r
+ FileWrite(File, Array)\r
else:\r
+ if Pcd.DatumType in TAB_PCD_CLEAN_NUMERIC_TYPES:\r
+ if Value.startswith(('0x', '0X')):\r
+ Value = '{} ({:d})'.format(Value, int(Value, 0))\r
+ else:\r
+ Value = "0x{:X} ({})".format(int(Value, 0), Value)\r
if self.DefaultStoreSingle and self.SkuSingle:\r
FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', Value))\r
elif self.DefaultStoreSingle and not self.SkuSingle:\r
else:\r
FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', "{"))\r
for Array in ArrayList:\r
- FileWrite(File, '%s' % (Array))\r
+ FileWrite(File, Array)\r
else:\r
+ if Pcd.DatumType in TAB_PCD_CLEAN_NUMERIC_TYPES:\r
+ if Value.startswith(('0x', '0X')):\r
+ Value = '{} ({:d})'.format(Value, int(Value, 0))\r
+ else:\r
+ Value = "0x{:X} ({})".format(int(Value, 0), Value)\r
if self.SkuSingle:\r
FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', Value))\r
else:\r
else:\r
if IsByteArray:\r
if self.SkuSingle:\r
- FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, ' ' , TypeName, '(' + Pcd.DatumType + ')', "{"))\r
+ FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', "{"))\r
else:\r
- FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ' , TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', "{"))\r
+ FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', "{"))\r
for Array in ArrayList:\r
- FileWrite(File, '%s' % (Array))\r
+ FileWrite(File, Array)\r
else:\r
+ if Pcd.DatumType in TAB_PCD_CLEAN_NUMERIC_TYPES:\r
+ if Value.startswith(('0x', '0X')):\r
+ Value = '{} ({:d})'.format(Value, int(Value, 0))\r
+ else:\r
+ Value = "0x{:X} ({})".format(int(Value, 0), Value)\r
if self.SkuSingle:\r
- FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, ' ' , TypeName, '(' + Pcd.DatumType + ')', Value))\r
+ FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', Value))\r
else:\r
- FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ' , TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', Value))\r
+ FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', Value))\r
if TypeName in ('DYNVPD', 'DEXVPD'):\r
FileWrite(File, '%*s' % (self.MaxLen + 4, SkuInfo.VpdOffset))\r
if IsStructure:\r
# their source code to find PPI/Protocol produce or consume\r
# information.\r
#\r
- if Module.ModuleType == "BASE":\r
+ if Module.ModuleType == SUP_MODULE_BASE:\r
continue\r
#\r
# Add module referenced source files\r
if Wa.FdfProfile:\r
for Fd in Wa.FdfProfile.FdDict:\r
for FdRegion in Wa.FdfProfile.FdDict[Fd].RegionList:\r
- if FdRegion.RegionType != "FV":\r
+ if FdRegion.RegionType != BINARY_FILE_TYPE_FV:\r
continue\r
for FvName in FdRegion.RegionDataList:\r
if FvName in self._FvList:\r
# If the input FdRegion is not a firmware volume,\r
# we are done.\r
#\r
- if self.Type != "FV":\r
+ if self.Type != BINARY_FILE_TYPE_FV:\r
return\r
\r
#\r
FileWrite(File, "Type: %s" % Type)\r
FileWrite(File, "Base Address: 0x%X" % BaseAddress)\r
\r
- if self.Type == "FV":\r
+ if self.Type == BINARY_FILE_TYPE_FV:\r
FvTotalSize = 0\r
FvTakenSize = 0\r
FvFreeSize = 0\r
for Match in gOffsetGuidPattern.finditer(FvReport):\r
Guid = Match.group(2).upper()\r
OffsetInfo[Match.group(1)] = self._GuidsDb.get(Guid, Guid)\r
- OffsetList = OffsetInfo.keys()\r
- OffsetList.sort()\r
+ OffsetList = sorted(OffsetInfo.keys())\r
for Offset in OffsetList:\r
FileWrite (File, "%s %s" % (Offset, OffsetInfo[Offset]))\r
except IOError:\r
if (len(self.FvList) > 0):\r
for FvItem in self.FvList:\r
Info = self.FvInfo[FvItem]\r
- self._GenerateReport(File, Info[0], "FV", Info[1], Info[2], FvItem)\r
+ self._GenerateReport(File, Info[0], TAB_FV_DIRECTORY, Info[1], Info[2], FvItem)\r
else:\r
self._GenerateReport(File, "FD Region", self.Type, self.BaseAddress, self.Size)\r
\r
self.BaseAddress = Fd.BaseAddress\r
self.Size = Fd.Size\r
self.FdRegionList = [FdRegionReport(FdRegion, Wa) for FdRegion in Fd.RegionList]\r
- self.FvPath = os.path.join(Wa.BuildDir, "FV")\r
+ self.FvPath = os.path.join(Wa.BuildDir, TAB_FV_DIRECTORY)\r
self.VpdFilePath = os.path.join(self.FvPath, "%s.map" % Wa.Platform.VpdToolGuid)\r
self.VPDBaseAddress = 0\r
self.VPDSize = 0\r
ValueList[-1] = ' {'\r
FileWrite(File, '|'.join(ValueList))\r
for Array in ArrayList:\r
- FileWrite(File, '%s' % (Array))\r
+ FileWrite(File, Array)\r
else:\r
FileWrite(File, item)\r
FileWrite(File, gSubSectionEnd)\r