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, 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
\r
- if First:\r
- if ModulePcdSet is None:\r
- FileWrite(File, "")\r
- FileWrite(File, Key)\r
- First = False\r
+ if First:\r
+ if ModulePcdSet is None:\r
+ FileWrite(File, "")\r
+ FileWrite(File, Key)\r
+ First = False\r
\r
\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
- DecDefaultValueNumber = int(DecDefaultValue.strip(), 0)\r
- DecMatch = (DecDefaultValueNumber == 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
+ DecDefaultValueNumber = int(DecDefaultValue.strip(), 0)\r
+ DecMatch = (DecDefaultValueNumber == PcdValueNumber)\r
\r
- if InfDefaultValue is None:\r
- InfMatch = True\r
- else:\r
- InfDefaultValueNumber = int(InfDefaultValue.strip(), 0)\r
- InfMatch = (InfDefaultValueNumber == PcdValueNumber)\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 DscDefaultValue is None:\r
+ DscMatch = True\r
else:\r
- if DecDefaultValue is None:\r
- DecMatch = True\r
- else:\r
- DecMatch = (DecDefaultValue.strip() == PcdValue.strip())\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
+ 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
+ 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) 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 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 + 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, '%s' % (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