+ if not ReportSubType and ModulePcdSet:\r
+ FileWrite(File, gSubSectionEnd)\r
+\r
+ def ParseStruct(self, struct):\r
+ HasDscOverride = False\r
+ if struct:\r
+ for _, Values in struct.items():\r
+ if Values[1] and Values[1].endswith('.dsc'):\r
+ HasDscOverride = True\r
+ break\r
+ return HasDscOverride\r
+\r
+ def PrintPcdDefault(self, File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue):\r
+ if not DscMatch and DscDefaultValue is not None:\r
+ Value = DscDefaultValue.strip()\r
+ IsByteArray, ArrayList = ByteArrayForamt(Value)\r
+ if IsByteArray:\r
+ FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DSC DEFAULT', "{"))\r
+ for Array in ArrayList:\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
+ IsByteArray, ArrayList = ByteArrayForamt(Value)\r
+ if IsByteArray:\r
+ FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'INF DEFAULT', "{"))\r
+ for Array in ArrayList:\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
+ Value = DecDefaultValue.strip()\r
+ IsByteArray, ArrayList = ByteArrayForamt(Value)\r
+ if IsByteArray:\r
+ FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DEC DEFAULT', "{"))\r
+ for Array in ArrayList:\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 DecMatch and IsStructure:\r
+ self.PrintStructureInfo(File, Pcd.DefaultValues)\r
+\r
+ def PrintPcdValue(self, File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, Flag = ' '):\r
+ if not Pcd.SkuInfoList:\r
+ Value = Pcd.DefaultValue\r
+ IsByteArray, ArrayList = ByteArrayForamt(Value)\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, 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
+ FiledOverrideFlag = False\r
+ OverrideValues = Pcd.SkuOverrideValues\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
+ FiledOverrideFlag = True\r
+ break\r
+ if not FiledOverrideFlag and (Pcd.PcdFieldValueFromComm or Pcd.PcdFieldValueFromFdf):\r
+ OverrideFieldStruct = self.OverrideFieldValue(Pcd, {})\r
+ self.PrintStructureInfo(File, OverrideFieldStruct)\r
+ self.PrintPcdDefault(File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue)\r
+ else:\r
+ FirstPrint = True\r
+ SkuList = sorted(Pcd.SkuInfoList.keys())\r
+ for Sku in SkuList:\r
+ SkuInfo = Pcd.SkuInfoList[Sku]\r
+ SkuIdName = SkuInfo.SkuIdName\r
+ if TypeName in ('DYNHII', 'DEXHII'):\r
+ if SkuInfo.DefaultStoreDict:\r
+ DefaultStoreList = sorted(SkuInfo.DefaultStoreDict.keys())\r
+ for DefaultStore in DefaultStoreList:\r
+ Value = SkuInfo.DefaultStoreDict[DefaultStore]\r
+ IsByteArray, ArrayList = ByteArrayForamt(Value)\r
+ if Pcd.DatumType == 'BOOLEAN':\r
+ Value = str(int(Value, 0))\r
+ if FirstPrint:\r
+ FirstPrint = False\r
+ if IsByteArray:\r
+ if self.DefaultStoreSingle and self.SkuSingle:\r
+ FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '{'))\r
+ elif self.DefaultStoreSingle and not self.SkuSingle:\r
+ FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', '{'))\r
+ elif not self.DefaultStoreSingle and self.SkuSingle:\r
+ FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + DefaultStore + ')', '{'))\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, 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
+ FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', Value))\r
+ elif not self.DefaultStoreSingle and self.SkuSingle:\r
+ FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + DefaultStore + ')', Value))\r
+ else:\r
+ FileWrite(File, ' %-*s : %6s %10s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', '(' + DefaultStore + ')', Value))\r
+ else:\r
+ if IsByteArray:\r
+ if self.DefaultStoreSingle and self.SkuSingle:\r
+ FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '{'))\r
+ elif self.DefaultStoreSingle and not self.SkuSingle:\r
+ FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', '{'))\r
+ elif not self.DefaultStoreSingle and self.SkuSingle:\r
+ FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + DefaultStore + ')', '{'))\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, 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
+ FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', Value))\r
+ elif not self.DefaultStoreSingle and self.SkuSingle:\r
+ FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + DefaultStore + ')', Value))\r
+ else:\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
+ self.PrintPcdDefault(File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue)\r
+ else:\r
+ Value = SkuInfo.DefaultValue\r
+ IsByteArray, ArrayList = ByteArrayForamt(Value)\r
+ if Pcd.DatumType == 'BOOLEAN':\r
+ Value = str(int(Value, 0))\r
+ if FirstPrint:\r
+ FirstPrint = False\r
+ if IsByteArray:\r
+ if self.SkuSingle:\r
+ FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', "{"))\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, 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
+ FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', Value))\r
+ else:\r
+ if IsByteArray:\r
+ if self.SkuSingle:\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
+ for Array in ArrayList:\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
+ else:\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
+ FiledOverrideFlag = False\r
+ OverrideValues = Pcd.SkuOverrideValues[Sku]\r
+ if OverrideValues:\r
+ Keys = OverrideValues.keys()\r
+ OverrideFieldStruct = self.OverrideFieldValue(Pcd, OverrideValues[Keys[0]])\r
+ self.PrintStructureInfo(File, OverrideFieldStruct)\r
+ FiledOverrideFlag = True\r
+ if not FiledOverrideFlag and (Pcd.PcdFieldValueFromComm or Pcd.PcdFieldValueFromFdf):\r
+ OverrideFieldStruct = self.OverrideFieldValue(Pcd, {})\r
+ self.PrintStructureInfo(File, OverrideFieldStruct)\r
+ self.PrintPcdDefault(File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue)\r
+\r
+ def OverrideFieldValue(self, Pcd, OverrideStruct):\r
+ OverrideFieldStruct = collections.OrderedDict()\r
+ if OverrideStruct:\r
+ for Key, Values in OverrideStruct.items():\r
+ if Values[1] and Values[1].endswith('.dsc'):\r
+ OverrideFieldStruct[Key] = Values\r
+ if Pcd.PcdFieldValueFromFdf:\r
+ for Key, Values in Pcd.PcdFieldValueFromFdf.items():\r
+ if Key in OverrideFieldStruct and Values[0] == OverrideFieldStruct[Key][0]:\r
+ continue\r
+ OverrideFieldStruct[Key] = Values\r
+ if Pcd.PcdFieldValueFromComm:\r
+ for Key, Values in Pcd.PcdFieldValueFromComm.items():\r
+ if Key in OverrideFieldStruct and Values[0] == OverrideFieldStruct[Key][0]:\r
+ continue\r
+ OverrideFieldStruct[Key] = Values\r
+ return OverrideFieldStruct\r
+\r
+ def PrintStructureInfo(self, File, Struct):\r
+ for Key, Value in sorted(Struct.items(), key=lambda x: x[0]):\r
+ if Value[1] and 'build command options' in Value[1]:\r
+ FileWrite(File, ' *B %-*s = %s' % (self.MaxLen + 4, '.' + Key, Value[0]))\r
+ elif Value[1] and Value[1].endswith('.fdf'):\r
+ FileWrite(File, ' *F %-*s = %s' % (self.MaxLen + 4, '.' + Key, Value[0]))\r
+ else:\r
+ FileWrite(File, ' %-*s = %s' % (self.MaxLen + 4, '.' + Key, Value[0]))\r