gOffsetGuidPattern = re.compile(r"(0x[0-9A-Fa-f]+) ([-A-Fa-f0-9]+)")\r
\r
## Pattern to find module base address and entry point in fixed flash map file\r
-gModulePattern = r"\n[-\w]+\s*\(([^,]+),\s*BaseAddress=%(Address)s,\s*EntryPoint=%(Address)s\)\s*\(GUID=([-0-9A-Fa-f]+)[^)]*\)"\r
+gModulePattern = r"\n[-\w]+\s*\(([^,]+),\s*BaseAddress=%(Address)s,\s*EntryPoint=%(Address)s,\s*Type=\w+\)\s*\(GUID=([-0-9A-Fa-f]+)[^)]*\)"\r
gMapFileItemPattern = re.compile(gModulePattern % {"Address" : "(-?0[xX][0-9A-Fa-f]+)"})\r
\r
## Pattern to find all module referenced header files in source files\r
FileWrite(File, gSectionSep)\r
\r
if "PCD" in ReportType:\r
- GlobalPcdReport.GenerateReport(File, self.ModulePcdSet)\r
+ GlobalPcdReport.GenerateReport(File, self.ModulePcdSet,self.FileGuid)\r
\r
if "LIBRARY" in ReportType:\r
self.LibraryReport.GenerateReport(File)\r
if DscDefaultValue:\r
self.DscPcdDefault[(TokenCName, TokenSpaceGuidCName)] = DscDefaultValue\r
\r
- def GenerateReport(self, File, ModulePcdSet):\r
+ def GenerateReport(self, File, ModulePcdSet,ModuleGuid=None):\r
if not ModulePcdSet:\r
if self.ConditionalPcds:\r
self.GenerateReportDetail(File, ModulePcdSet, 1)\r
break\r
if not IsEmpty:\r
self.GenerateReportDetail(File, ModulePcdSet, 2)\r
- self.GenerateReportDetail(File, ModulePcdSet)\r
+ self.GenerateReportDetail(File, ModulePcdSet,ModuleGuid = ModuleGuid)\r
\r
##\r
# Generate report for PCD information\r
# directives section report, 2 means Unused Pcds section report\r
# @param DscOverridePcds Module DSC override PCDs set\r
#\r
- def GenerateReportDetail(self, File, ModulePcdSet, ReportSubType = 0):\r
+ def GenerateReportDetail(self, File, ModulePcdSet, ReportSubType = 0,ModuleGuid=None):\r
PcdDict = self.AllPcds\r
if ReportSubType == 1:\r
PcdDict = self.ConditionalPcds\r
#The DefaultValue of StructurePcd already be the latest, no need to update.\r
if not self.IsStructurePcd(Pcd.TokenCName, Pcd.TokenSpaceGuidCName):\r
Pcd.DefaultValue = PcdValue\r
+ PcdComponentValue = None\r
if ModulePcdSet is not None:\r
if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type) not in ModulePcdSet:\r
continue\r
- InfDefaultValue, PcdValue = ModulePcdSet[Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type]\r
+ InfDefaultValue, PcdComponentValue = ModulePcdSet[Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type]\r
+ PcdValue = PcdComponentValue\r
#The DefaultValue of StructurePcd already be the latest, no need to update.\r
if not self.IsStructurePcd(Pcd.TokenCName, Pcd.TokenSpaceGuidCName):\r
Pcd.DefaultValue = PcdValue\r
if TypeName in ('DYNVPD', 'DEXVPD'):\r
SkuInfoList = Pcd.SkuInfoList\r
Pcd = GlobalData.gStructurePcd[self.Arch][(Pcd.TokenCName, Pcd.TokenSpaceGuidCName)]\r
+ if ModulePcdSet and ModulePcdSet.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type)):\r
+ InfDefaultValue, PcdComponentValue = ModulePcdSet[Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type]\r
+ DscDefaultValBak = Pcd.DefaultValue\r
+ Pcd.DefaultValue = PcdComponentValue\r
+\r
Pcd.DatumType = Pcd.StructName\r
if TypeName in ('DYNVPD', 'DEXVPD'):\r
Pcd.SkuInfoList = SkuInfoList\r
DscDefaultValue = True\r
DscMatch = True\r
DecMatch = False\r
- elif Pcd.SkuOverrideValues:\r
- DscOverride = False\r
- if Pcd.DefaultFromDSC:\r
- DscOverride = True\r
- else:\r
- DictLen = 0\r
- for item in Pcd.SkuOverrideValues:\r
- DictLen += len(Pcd.SkuOverrideValues[item])\r
- if not DictLen:\r
- DscOverride = False\r
+ else:\r
+ if Pcd.Type in PCD_DYNAMIC_TYPE_SET | PCD_DYNAMIC_EX_TYPE_SET:\r
+ DscOverride = False\r
+ if Pcd.DefaultFromDSC:\r
+ DscOverride = True\r
else:\r
- if not Pcd.SkuInfoList:\r
- OverrideValues = Pcd.SkuOverrideValues\r
- if OverrideValues:\r
- for Data in OverrideValues.values():\r
- Struct = list(Data.values())\r
- if Struct:\r
- DscOverride = self.ParseStruct(Struct[0])\r
- break\r
+ DictLen = 0\r
+ for item in Pcd.SkuOverrideValues:\r
+ DictLen += len(Pcd.SkuOverrideValues[item])\r
+ if not DictLen:\r
+ DscOverride = False\r
else:\r
- SkuList = sorted(Pcd.SkuInfoList.keys())\r
- for Sku in SkuList:\r
- SkuInfo = Pcd.SkuInfoList[Sku]\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
+ if not Pcd.SkuInfoList:\r
+ OverrideValues = Pcd.SkuOverrideValues\r
+ if OverrideValues:\r
+ for Data in OverrideValues.values():\r
+ Struct = list(Data.values())\r
+ if Struct:\r
+ DscOverride = self.ParseStruct(Struct[0])\r
break\r
- if DscOverride:\r
- break\r
- if DscOverride:\r
- DscDefaultValue = True\r
- DscMatch = True\r
- DecMatch = False\r
+ else:\r
+ SkuList = sorted(Pcd.SkuInfoList.keys())\r
+ for Sku in SkuList:\r
+ SkuInfo = Pcd.SkuInfoList[Sku]\r
+ if SkuInfo.DefaultStoreDict:\r
+ DefaultStoreList = sorted(SkuInfo.DefaultStoreDict.keys())\r
+ for DefaultStore in DefaultStoreList:\r
+ OverrideValues = Pcd.SkuOverrideValues.get(Sku)\r
+ if OverrideValues:\r
+ DscOverride = self.ParseStruct(OverrideValues[DefaultStore])\r
+ if DscOverride:\r
+ break\r
+ if DscOverride:\r
+ break\r
+ if DscOverride:\r
+ DscDefaultValue = True\r
+ DscMatch = True\r
+ DecMatch = False\r
+ else:\r
+ DecMatch = True\r
else:\r
- DecMatch = True\r
- else:\r
- DscDefaultValue = True\r
- DscMatch = True\r
- DecMatch = False\r
+ if Pcd.DscRawValue or (ModuleGuid and ModuleGuid.replace("-","S") in Pcd.PcdValueFromComponents):\r
+ DscDefaultValue = True\r
+ DscMatch = True\r
+ DecMatch = False\r
+ else:\r
+ DscDefaultValue = False\r
+ DecMatch = True\r
\r
#\r
# Report PCD item according to their override relationship\r
elif BuildOptionMatch:\r
self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*B')\r
else:\r
- if DscDefaultValue and DscMatch:\r
+ if PcdComponentValue:\r
+ self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, PcdComponentValue, DecMatch, DecDefaultValue, '*M', ModuleGuid)\r
+ elif DscDefaultValue and DscMatch:\r
if (Pcd.TokenCName, Key, Field) 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
- else:\r
- self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*M')\r
+\r
\r
if ModulePcdSet is None:\r
if IsStructure:\r
for filedvalues in Pcd.DefaultValues.values():\r
self.PrintStructureInfo(File, filedvalues)\r
\r
- def PrintPcdValue(self, File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, Flag = ' '):\r
+ def PrintPcdValue(self, File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, Flag = ' ',ModuleGuid=None):\r
if not Pcd.SkuInfoList:\r
Value = Pcd.DefaultValue\r
IsByteArray, ArrayList = ByteArrayForamt(Value)\r
OverrideValues = GlobalData.gPcdSkuOverrides[(Pcd.TokenCName,Pcd.TokenSpaceGuidCName)]\r
else:\r
OverrideValues = Pcd.SkuOverrideValues\r
+ FieldOverrideValues = None\r
if OverrideValues:\r
for Data in OverrideValues.values():\r
Struct = list(Data.values())\r
if Struct:\r
- OverrideFieldStruct = self.OverrideFieldValue(Pcd, Struct[0])\r
- self.PrintStructureInfo(File, OverrideFieldStruct)\r
+ FieldOverrideValues = Struct[0]\r
FiledOverrideFlag = True\r
break\r
+ if Pcd.PcdFiledValueFromDscComponent and ModuleGuid and ModuleGuid.replace("-","S") in Pcd.PcdFiledValueFromDscComponent:\r
+ FieldOverrideValues = Pcd.PcdFiledValueFromDscComponent[ModuleGuid.replace("-","S")]\r
+ if FieldOverrideValues:\r
+ OverrideFieldStruct = self.OverrideFieldValue(Pcd, FieldOverrideValues)\r
+ self.PrintStructureInfo(File, OverrideFieldStruct)\r
+\r
if not FiledOverrideFlag and (Pcd.PcdFieldValueFromComm or Pcd.PcdFieldValueFromFdf):\r
OverrideFieldStruct = self.OverrideFieldValue(Pcd, {})\r
self.PrintStructureInfo(File, OverrideFieldStruct)\r
FileWrite(File, ' %-*s : %6s %10s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', '(' + DefaultStore + ')', Value))\r
FileWrite(File, '%*s: %s: %s' % (self.MaxLen + 4, SkuInfo.VariableGuid, SkuInfo.VariableName, SkuInfo.VariableOffset))\r
if IsStructure:\r
- OverrideValues = Pcd.SkuOverrideValues[Sku]\r
- OverrideFieldStruct = self.OverrideFieldValue(Pcd, OverrideValues[DefaultStore])\r
- self.PrintStructureInfo(File, OverrideFieldStruct)\r
+ OverrideValues = Pcd.SkuOverrideValues.get(Sku)\r
+ if OverrideValues:\r
+ OverrideFieldStruct = self.OverrideFieldValue(Pcd, OverrideValues[DefaultStore])\r
+ self.PrintStructureInfo(File, OverrideFieldStruct)\r
self.PrintPcdDefault(File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue)\r
else:\r
Value = SkuInfo.DefaultValue\r
FileWrite(File, '%*s' % (self.MaxLen + 4, SkuInfo.VpdOffset))\r
VPDPcdItem = (Pcd.TokenSpaceGuidCName + '.' + PcdTokenCName, SkuIdName, SkuInfo.VpdOffset, Pcd.MaxDatumSize, SkuInfo.DefaultValue)\r
if VPDPcdItem not in VPDPcdList:\r
- VPDPcdList.append(VPDPcdItem)\r
+ PcdGuidList = self.UnusedPcds.get(Pcd.TokenSpaceGuidCName)\r
+ if PcdGuidList:\r
+ PcdList = PcdGuidList.get(Pcd.Type)\r
+ if not PcdList:\r
+ VPDPcdList.append(VPDPcdItem)\r
+ for VpdPcd in PcdList:\r
+ if PcdTokenCName == VpdPcd.TokenCName:\r
+ break\r
+ else:\r
+ VPDPcdList.append(VPDPcdItem)\r
if IsStructure:\r
FiledOverrideFlag = False\r
- OverrideValues = Pcd.SkuOverrideValues[Sku]\r
+ OverrideValues = Pcd.SkuOverrideValues.get(Sku)\r
if OverrideValues:\r
Keys = list(OverrideValues.keys())\r
OverrideFieldStruct = self.OverrideFieldValue(Pcd, OverrideValues[Keys[0]])\r
self.VPDBaseAddress = 0\r
self.VPDSize = 0\r
for index, FdRegion in enumerate(Fd.RegionList):\r
- if str(FdRegion.RegionType) is 'FILE' and Wa.Platform.VpdToolGuid in str(FdRegion.RegionDataList):\r
+ if str(FdRegion.RegionType) == 'FILE' and Wa.Platform.VpdToolGuid in str(FdRegion.RegionDataList):\r
self.VPDBaseAddress = self.FdRegionList[index].BaseAddress\r
self.VPDSize = self.FdRegionList[index].Size\r
break\r