## @file\r
# Routines for generating Pcd Database\r
#\r
-# Copyright (c) 2013, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2013 - 2015, Intel Corporation. All rights reserved.<BR>\r
# This program and the accompanying materials\r
# are licensed and made available under the terms and conditions of the BSD License\r
# which accompanies this distribution. The full text of the license may be found at\r
from Common.Misc import *\r
from Common.String import StringToArray\r
from struct import pack\r
+from ValidCheckingInfoObject import VAR_CHECK_PCD_VARIABLE_TAB_CONTAINER\r
+from ValidCheckingInfoObject import VAR_CHECK_PCD_VARIABLE_TAB\r
+from ValidCheckingInfoObject import VAR_VALID_OBJECT_FACTORY\r
+from Common.VariableAttributes import VariableAttributes\r
\r
-DATABASE_VERSION = 4\r
+DATABASE_VERSION = 5\r
\r
gPcdDatabaseAutoGenC = TemplateString("""\r
//\r
RawDataList = []\r
DbComItemList.__init__(self, ItemSize, DataList, RawDataList)\r
def PackData(self):\r
- PackStr = "=LLHH"\r
+ PackStr = "=LLHHLHH"\r
Buffer = ''\r
for DataList in self.RawDataList:\r
for Data in DataList:\r
GetIntegerValue(Data[0]),\r
GetIntegerValue(Data[1]),\r
GetIntegerValue(Data[2]),\r
- GetIntegerValue(Data[3]))\r
+ GetIntegerValue(Data[3]),\r
+ GetIntegerValue(Data[4]),\r
+ GetIntegerValue(Data[5]),\r
+ GetIntegerValue(0))\r
return Buffer\r
\r
class DbStringHeadTableItemList(DbItemList):\r
if RawDataList is None:\r
RawDataList = [] \r
DbItemList.__init__(self, ItemSize, DataList, RawDataList)\r
+ def GetListSize(self):\r
+ length = 0\r
+ for Data in self.RawDataList:\r
+ length += (1 + len(Data[1]))\r
+ return length * self.ItemSize\r
def PackData(self):\r
- PackStr = "=HH"\r
+ PackStr = "=H"\r
Buffer = ''\r
for Data in self.RawDataList:\r
Buffer += pack(PackStr, \r
- GetIntegerValue(Data[0]),\r
- GetIntegerValue(Data[1]))\r
+ GetIntegerValue(Data[0]))\r
+ for subData in Data[1]:\r
+ Buffer += pack(PackStr, \r
+ GetIntegerValue(subData))\r
return Buffer\r
\r
## DbStringItemList\r
# DbItemList to DbStringHeadTableItemList\r
DbStringHeadValue = DbStringHeadTableItemList(4, RawDataList = StringHeadValue)\r
VariableTable = Dict['VARIABLE_DB_VALUE']\r
- DbVariableTable = DbVariableTableItemList(12, RawDataList = VariableTable)\r
+ DbVariableTable = DbVariableTableItemList(20, RawDataList = VariableTable)\r
NumberOfSkuEnabledPcd = GetIntegerValue(Dict['SKU_HEAD_SIZE'])\r
Dict['SKUHEAD_TABLE_VALUE'] = [(0,0) for i in xrange(NumberOfSkuEnabledPcd)]\r
SkuTable = Dict['SKUHEAD_TABLE_VALUE'] # Generated later\r
DbPcdNameOffsetTable = DbItemList(4,RawDataList = PcdNameOffsetTable)\r
\r
SizeTableValue = zip(Dict['SIZE_TABLE_MAXIMUM_LENGTH'], Dict['SIZE_TABLE_CURRENT_LENGTH'])\r
- DbSizeTableValue = DbSizeTableItemList(4, RawDataList = SizeTableValue)\r
+ DbSizeTableValue = DbSizeTableItemList(2, RawDataList = SizeTableValue)\r
InitValueUint16 = Dict['INIT_DB_VALUE_UINT16']\r
DbInitValueUint16 = DbComItemList(2, RawDataList = InitValueUint16)\r
VardefValueUint16 = Dict['VARDEF_DB_VALUE_UINT16']\r
DbUnInitValueUint8 = DbItemList(1, RawDataList = UnInitValueUint8)\r
UnInitValueBoolean = Dict['UNINIT_GUID_DECL_BOOLEAN']\r
DbUnInitValueBoolean = DbItemList(1, RawDataList = UnInitValueBoolean)\r
+ PcdTokenNumberMap = Dict['PCD_ORDER_TOKEN_NUMBER_MAP']\r
\r
DbNameTotle = ["InitValueUint64", "VardefValueUint64", "InitValueUint32", "VardefValueUint32", "VpdHeadValue", "ExMapTable", \r
"LocalTokenNumberTable", "GuidTable", "StringHeadValue", "PcdNameOffsetTable","VariableTable","SkuTable", "StringTableLen", "PcdTokenTable", "PcdCNameTable", \r
SkuIndexIndexTable = [(0) for i in xrange(len(Dict['SKU_INDEX_VALUE']))]\r
SkuIndexIndexTable[0] = 0 #Dict['SKU_INDEX_VALUE'][0][0]\r
for i in range(1,len(Dict['SKU_INDEX_VALUE'])):\r
- SkuIndexIndexTable[i] = SkuIndexIndexTable[i-1]+Dict['SKU_INDEX_VALUE'][i-1][0]\r
+ SkuIndexIndexTable[i] = SkuIndexIndexTable[i-1]+Dict['SKU_INDEX_VALUE'][i-1][0] + 1\r
for (LocalTokenNumberTableIndex, (Offset, Table)) in enumerate(LocalTokenNumberTable):\r
DbIndex = 0\r
DbOffset = FixedHeaderLen\r
LocalTokenNumberTable[LocalTokenNumberTableIndex] = DbOffset|int(TokenTypeValue)\r
# if PCD_TYPE_SKU_ENABLED, then we need to fix up the SkuTable\r
\r
- SkuIndexTabalOffset = SkuIdTableOffset + Dict['SKUID_VALUE'][0]\r
+ SkuIndexTabalOffset = SkuIdTableOffset + Dict['SKUID_VALUE'][0] + 1\r
if (TokenTypeValue & (0x2 << 28)):\r
- SkuTable[SkuHeaderIndex] = (DbOffset|int(TokenTypeValue & ~(0x2<<28)), SkuIndexTabalOffset + SkuIndexIndexTable[SkuHeaderIndex])\r
+ SkuTable[SkuHeaderIndex] = (DbOffset|int(TokenTypeValue & ~(0x2<<28)), SkuIndexTabalOffset + SkuIndexIndexTable[PcdTokenNumberMap[LocalTokenNumberTableIndex]])\r
LocalTokenNumberTable[LocalTokenNumberTableIndex] = (SkuTableOffset + SkuHeaderIndex * 8) | int(TokenTypeValue)\r
SkuHeaderIndex += 1\r
\r
\r
# resolve variable table offset \r
for VariableEntries in VariableTable:\r
+ skuindex = 0\r
for VariableEntryPerSku in VariableEntries:\r
- (VariableHeadGuidIndex, VariableHeadStringIndex, SKUVariableOffset, VariableOffset, VariableRefTable) = VariableEntryPerSku[:]\r
+ (VariableHeadGuidIndex, VariableHeadStringIndex, SKUVariableOffset, VariableOffset, VariableRefTable, VariableAttribute) = VariableEntryPerSku[:]\r
DbIndex = 0\r
DbOffset = FixedHeaderLen\r
for DbIndex in xrange(len(DbTotal)):\r
DbOffset += DbItemTotal[DbIndex].GetListSize()\r
else:\r
assert(False)\r
- \r
+ if isinstance(VariableRefTable[0],list):\r
+ DbOffset += skuindex * 4 \r
+ skuindex += 1\r
if DbIndex >= InitTableNum:\r
assert(False)\r
-\r
- VariableEntryPerSku[:] = (VariableHeadStringIndex, DbOffset, VariableHeadGuidIndex, SKUVariableOffset)\r
+ VarAttr, VarProp = VariableAttributes.GetVarAttributes(VariableAttribute)\r
+ VariableEntryPerSku[:] = (VariableHeadStringIndex, DbOffset, VariableHeadGuidIndex, SKUVariableOffset, VarAttr, VarProp)\r
\r
# calculate various table offset now\r
DbTotalLength = FixedHeaderLen\r
DbFile.write(PcdDbBuffer)\r
Changed = SaveFileOnChange(DbFileName, DbFile.getvalue(), True)\r
\r
-\r
-def CArrayToArray(carray):\r
- return "{%s, 0x00}" % ", ".join(["0x%02x" % ord(C) for C in carray])\r
-\r
## Create PCD database in DXE or PEI phase\r
#\r
# @param Platform The platform object\r
}\r
\r
\r
- SkuObj = SkuClass(Platform.Platform.SkuName,Platform.Platform.SkuIds)\r
+ SkuObj = SkuClass(Platform.Platform.AvilableSkuIds, Platform.Platform.SkuIds)\r
Dict['SYSTEM_SKU_ID_VALUE'] = Platform.Platform.SkuIds[SkuObj.SystemSkuId]\r
\r
Dict['PCD_INFO_FLAG'] = Platform.Platform.PcdInfoFlag\r
Dict['PCD_TOKENSPACE_MAP'] = []\r
Dict['PCD_NAME_OFFSET'] = []\r
\r
+ Dict['PCD_ORDER_TOKEN_NUMBER_MAP'] = {}\r
+ PCD_STRING_INDEX_MAP = {}\r
+ \r
StringTableIndex = 0\r
StringTableSize = 0\r
NumberOfLocalTokens = 0\r
NumberOfSizeItems = 0\r
NumberOfSkuEnabledPcd = 0\r
GuidList = []\r
+ VarCheckTab = VAR_CHECK_PCD_VARIABLE_TAB_CONTAINER()\r
i = 0\r
- for Pcd in Platform.DynamicPcdList:\r
+ ReorderedDynPcdList = GetOrderedDynamicPcdList(Platform.DynamicPcdList, Platform.PcdTokenNumber)\r
+ for Pcd in ReorderedDynPcdList:\r
+ VoidStarTypeCurrSize = []\r
i += 1\r
CName = Pcd.TokenCName\r
TokenSpaceGuidCName = Pcd.TokenSpaceGuidCName\r
SkuIndexTableTmp = []\r
SkuIndexTableTmp.append(0) \r
SkuIdIndex = 1 \r
+ VariableHeadList = []\r
for SkuName in Pcd.SkuInfoList:\r
Sku = Pcd.SkuInfoList[SkuName]\r
SkuId = Sku.SkuId\r
SkuIdIndex += 1\r
\r
if len(Sku.VariableName) > 0:\r
+ VariableGuidStructure = Sku.VariableGuidValue\r
+ VariableGuid = GuidStructureStringToGuidValueName(VariableGuidStructure)\r
+ if Platform.Platform.VarCheckFlag:\r
+ var_check_obj = VAR_CHECK_PCD_VARIABLE_TAB(VariableGuidStructure, StringToArray(Sku.VariableName))\r
+ try:\r
+ var_check_obj.push_back(VAR_VALID_OBJECT_FACTORY.Get_valid_object(Pcd, Sku.VariableOffset))\r
+ VarAttr, _ = VariableAttributes.GetVarAttributes(Sku.VariableAttribute)\r
+ var_check_obj.SetAttributes(VarAttr)\r
+ var_check_obj.UpdateSize()\r
+ VarCheckTab.push_back(var_check_obj)\r
+ except Exception:\r
+ ValidInfo = ''\r
+ if Pcd.validateranges:\r
+ ValidInfo = Pcd.validateranges[0]\r
+ if Pcd.validlists:\r
+ ValidInfo = Pcd.validlists[0]\r
+ if ValidInfo:\r
+ EdkLogger.error("build", PCD_VALIDATION_INFO_ERROR,\r
+ "The PCD '%s.%s' Validation information defined in DEC file has incorrect format." % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName),\r
+ ExtraData = "[%s]" % str(ValidInfo))\r
+ else:\r
+ EdkLogger.error("build", PCD_VALIDATION_INFO_ERROR,\r
+ "The PCD '%s.%s' Validation information defined in DEC file has incorrect format." % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName))\r
Pcd.TokenTypeList += ['PCD_TYPE_HII']\r
Pcd.InitString = 'INIT'\r
- # store VariableName to stringTable and calculate the VariableHeadStringIndex\r
- if Sku.VariableName.startswith('{'):\r
- VariableNameStructure = CArrayToArray(Sku.VariableName)\r
- else:\r
- VariableNameStructure = StringToArray(Sku.VariableName)\r
- if VariableNameStructure not in Dict['STRING_TABLE_VALUE']:\r
- Dict['STRING_TABLE_CNAME'].append(CName)\r
- Dict['STRING_TABLE_GUID'].append(TokenSpaceGuid)\r
- if StringTableIndex == 0:\r
- Dict['STRING_TABLE_INDEX'].append('')\r
- else:\r
- Dict['STRING_TABLE_INDEX'].append('_%d' % StringTableIndex)\r
-\r
- Dict['STRING_TABLE_LENGTH'].append((len(Sku.VariableName) - 3 + 1) * 2 )\r
- Dict['STRING_TABLE_VALUE'].append(VariableNameStructure)\r
- StringTableIndex += 1\r
- StringTableSize += (len(Sku.VariableName) - 3 + 1) * 2\r
- VariableHeadStringIndex = 0\r
- for Index in range(Dict['STRING_TABLE_VALUE'].index(VariableNameStructure)):\r
- VariableHeadStringIndex += Dict['STRING_TABLE_LENGTH'][Index]\r
-\r
+ # Store all variable names of one HII PCD under different SKU to stringTable\r
+ # and calculate the VariableHeadStringIndex\r
+ if SkuIdIndex - 2 == 0:\r
+ for SkuName2 in Pcd.SkuInfoList:\r
+ SkuInfo = Pcd.SkuInfoList[SkuName2]\r
+ if SkuInfo.SkuId == None or SkuInfo.SkuId == '':\r
+ continue\r
+ VariableNameStructure = StringToArray(SkuInfo.VariableName)\r
+ if VariableNameStructure not in Dict['STRING_TABLE_VALUE']:\r
+ Dict['STRING_TABLE_CNAME'].append(CName)\r
+ Dict['STRING_TABLE_GUID'].append(TokenSpaceGuid)\r
+ if StringTableIndex == 0:\r
+ Dict['STRING_TABLE_INDEX'].append('')\r
+ else:\r
+ Dict['STRING_TABLE_INDEX'].append('_%d' % StringTableIndex)\r
+ VarNameSize = len(VariableNameStructure.replace(',',' ').split())\r
+ Dict['STRING_TABLE_LENGTH'].append(VarNameSize )\r
+ Dict['STRING_TABLE_VALUE'].append(VariableNameStructure)\r
+ StringHeadOffsetList.append(str(StringTableSize) + 'U')\r
+ VarStringDbOffsetList = []\r
+ VarStringDbOffsetList.append(StringTableSize)\r
+ Dict['STRING_DB_VALUE'].append(VarStringDbOffsetList) \r
+ StringTableIndex += 1\r
+ StringTableSize += len(VariableNameStructure.replace(',',' ').split())\r
+ VariableHeadStringIndex = 0\r
+ for Index in range(Dict['STRING_TABLE_VALUE'].index(VariableNameStructure)):\r
+ VariableHeadStringIndex += Dict['STRING_TABLE_LENGTH'][Index]\r
+ VariableHeadList.append(VariableHeadStringIndex)\r
+ \r
+ VariableHeadStringIndex = VariableHeadList[SkuIdIndex - 2]\r
# store VariableGuid to GuidTable and get the VariableHeadGuidIndex\r
- VariableGuidStructure = Sku.VariableGuidValue\r
- VariableGuid = GuidStructureStringToGuidValueName(VariableGuidStructure)\r
\r
if VariableGuid not in GuidList:\r
GuidList += [VariableGuid]\r
# the Pcd default value was filled before\r
VariableOffset = len(Dict['VARDEF_DB_VALUE_' + Pcd.DatumType]) - 1\r
VariableRefTable = Dict['VARDEF_DB_VALUE_' + Pcd.DatumType]\r
- VariableDbValueList.append([VariableHeadGuidIndex, VariableHeadStringIndex, Sku.VariableOffset, VariableOffset, VariableRefTable])\r
+ VariableDbValueList.append([VariableHeadGuidIndex, VariableHeadStringIndex, Sku.VariableOffset, VariableOffset, VariableRefTable, Sku.VariableAttribute])\r
\r
elif Sku.VpdOffset != '':\r
Pcd.TokenTypeList += ['PCD_TYPE_VPD']\r
# Also add the VOID* string of VPD PCD to SizeTable \r
if Pcd.DatumType == 'VOID*':\r
NumberOfSizeItems += 1\r
- Dict['SIZE_TABLE_CNAME'].append(CName)\r
- Dict['SIZE_TABLE_GUID'].append(TokenSpaceGuid)\r
# For VPD type of PCD, its current size is equal to its MAX size.\r
- Dict['SIZE_TABLE_CURRENT_LENGTH'].append(str(Pcd.MaxDatumSize) + 'U')\r
- Dict['SIZE_TABLE_MAXIMUM_LENGTH'].append(str(Pcd.MaxDatumSize) + 'U')\r
+ VoidStarTypeCurrSize = [str(Pcd.MaxDatumSize) + 'U'] \r
continue\r
\r
if Pcd.DatumType == 'VOID*':\r
else:\r
Dict['STRING_TABLE_INDEX'].append('_%d' % StringTableIndex)\r
if Sku.DefaultValue[0] == 'L':\r
- Size = (len(Sku.DefaultValue) - 3 + 1) * 2 \r
- Dict['STRING_TABLE_VALUE'].append(StringToArray(Sku.DefaultValue))\r
+ DefaultValueBinStructure = StringToArray(Sku.DefaultValue)\r
+ Size = len(DefaultValueBinStructure.replace(',',' ').split())\r
+ Dict['STRING_TABLE_VALUE'].append(DefaultValueBinStructure)\r
elif Sku.DefaultValue[0] == '"':\r
- Size = len(Sku.DefaultValue) - 2 + 1\r
- Dict['STRING_TABLE_VALUE'].append(StringToArray(Sku.DefaultValue))\r
+ DefaultValueBinStructure = StringToArray(Sku.DefaultValue)\r
+ Size = len(Sku.DefaultValue) -2 + 1\r
+ Dict['STRING_TABLE_VALUE'].append(DefaultValueBinStructure)\r
elif Sku.DefaultValue[0] == '{':\r
- Size = len(Sku.DefaultValue.replace(',',' ').split())\r
- Dict['STRING_TABLE_VALUE'].append(Sku.DefaultValue)\r
+ DefaultValueBinStructure = StringToArray(Sku.DefaultValue)\r
+ Size = len(Sku.DefaultValue.split(","))\r
+ Dict['STRING_TABLE_VALUE'].append(DefaultValueBinStructure)\r
\r
StringHeadOffsetList.append(str(StringTableSize) + 'U')\r
StringDbOffsetList.append(StringTableSize)\r
- Dict['SIZE_TABLE_CNAME'].append(CName)\r
- Dict['SIZE_TABLE_GUID'].append(TokenSpaceGuid)\r
- Dict['SIZE_TABLE_CURRENT_LENGTH'].append(str(Size) + 'U')\r
- Dict['SIZE_TABLE_MAXIMUM_LENGTH'].append(str(Pcd.MaxDatumSize) + 'U')\r
if Pcd.MaxDatumSize != '':\r
MaxDatumSize = int(Pcd.MaxDatumSize, 0)\r
if MaxDatumSize < Size:\r
- MaxDatumSize = Size\r
- Size = MaxDatumSize\r
- Dict['STRING_TABLE_LENGTH'].append(Size)\r
+ EdkLogger.error("build", AUTOGEN_ERROR,\r
+ "The maximum size of VOID* type PCD '%s.%s' is less than its actual size occupied." % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName),\r
+ ExtraData="[%s]" % str(Platform))\r
+ else:\r
+ MaxDatumSize = Size\r
+ StringTabLen = MaxDatumSize\r
+ if StringTabLen % 2:\r
+ StringTabLen += 1\r
+ if Sku.VpdOffset == '':\r
+ VoidStarTypeCurrSize.append(str(Size) + 'U')\r
+ Dict['STRING_TABLE_LENGTH'].append(StringTabLen)\r
StringTableIndex += 1\r
- StringTableSize += (Size)\r
+ StringTableSize += (StringTabLen)\r
else:\r
if "PCD_TYPE_HII" not in Pcd.TokenTypeList:\r
Pcd.TokenTypeList += ['PCD_TYPE_DATA']\r
DbValueList.append(Sku.DefaultValue)\r
\r
Pcd.TokenTypeList = list(set(Pcd.TokenTypeList))\r
+ if Pcd.DatumType == 'VOID*': \r
+ Dict['SIZE_TABLE_CNAME'].append(CName)\r
+ Dict['SIZE_TABLE_GUID'].append(TokenSpaceGuid)\r
+ Dict['SIZE_TABLE_MAXIMUM_LENGTH'].append(str(Pcd.MaxDatumSize) + 'U')\r
+ Dict['SIZE_TABLE_CURRENT_LENGTH'].append(VoidStarTypeCurrSize)\r
\r
- SkuIndexTableTmp[0] = len(SkuIndexTableTmp)\r
+ \r
+ SkuIndexTableTmp[0] = len(SkuIndexTableTmp) - 1\r
if len(Pcd.SkuInfoList) > 1:\r
Dict['SKU_INDEX_VALUE'].append(SkuIndexTableTmp) \r
\r
Dict['STRING_HEAD_NUMSKUS_DECL'].append(len(Pcd.SkuInfoList))\r
Dict['STRING_HEAD_VALUE'].append(', '.join(StringHeadOffsetList))\r
Dict['STRING_DB_VALUE'].append(StringDbOffsetList)\r
+ PCD_STRING_INDEX_MAP[len(Dict['STRING_HEAD_CNAME_DECL']) -1 ] = len(Dict['STRING_DB_VALUE']) -1\r
if 'PCD_TYPE_DATA' in Pcd.TokenTypeList:\r
Dict[Pcd.InitString+'_CNAME_DECL_'+Pcd.DatumType].append(CName)\r
Dict[Pcd.InitString+'_GUID_DECL_'+Pcd.DatumType].append(TokenSpaceGuid)\r
Dict['PCD_CNAME'] = ['' for x in range(NumberOfLocalTokens)]\r
Dict['PCD_TOKENSPACE_MAP'] = ['' for x in range(NumberOfLocalTokens)] \r
Dict['PCD_CNAME_LENGTH'] = [0 for x in range(NumberOfLocalTokens)]\r
- for Pcd in Platform.DynamicPcdList:\r
+ SkuEnablePcdIndex = 0\r
+ for Pcd in ReorderedDynPcdList:\r
CName = Pcd.TokenCName\r
TokenSpaceGuidCName = Pcd.TokenSpaceGuidCName\r
if Pcd.Phase != Phase:\r
if Phase == 'DXE':\r
GeneratedTokenNumber -= NumberOfPeiLocalTokens\r
\r
+ if len(Pcd.SkuInfoList) > 1:\r
+ Dict['PCD_ORDER_TOKEN_NUMBER_MAP'][GeneratedTokenNumber] = SkuEnablePcdIndex\r
+ SkuEnablePcdIndex += 1\r
EdkLogger.debug(EdkLogger.DEBUG_1, "PCD = %s.%s" % (CName, TokenSpaceGuidCName))\r
EdkLogger.debug(EdkLogger.DEBUG_1, "phase = %s" % Phase)\r
EdkLogger.debug(EdkLogger.DEBUG_1, "GeneratedTokenNumber = %s" % str(GeneratedTokenNumber))\r
TokenSpaceGuidCNameArray = StringToArray('"' + TokenSpaceGuidCName + '"' )\r
if TokenSpaceGuidCNameArray not in Dict['PCD_TOKENSPACE']:\r
Dict['PCD_TOKENSPACE'].append(TokenSpaceGuidCNameArray)\r
- Dict['PCD_TOKENSPACE_LENGTH'].append( len(TokenSpaceGuidCName) + 1 )\r
+ Dict['PCD_TOKENSPACE_LENGTH'].append( len(TokenSpaceGuidCNameArray.split(",")) )\r
Dict['PCD_TOKENSPACE_MAP'][GeneratedTokenNumber] = Dict['PCD_TOKENSPACE'].index(TokenSpaceGuidCNameArray)\r
- Dict['PCD_CNAME'][GeneratedTokenNumber] = StringToArray('"' + CName + '"' )\r
+ CNameBinArray = StringToArray('"' + CName + '"' )\r
+ Dict['PCD_CNAME'][GeneratedTokenNumber] = CNameBinArray\r
\r
- Dict['PCD_CNAME_LENGTH'][GeneratedTokenNumber] = len(CName) + 1\r
+ Dict['PCD_CNAME_LENGTH'][GeneratedTokenNumber] = len(CNameBinArray.split(","))\r
\r
\r
Pcd.TokenTypeList = list(set(Pcd.TokenTypeList))\r
if 'PCD_TYPE_STRING' in Pcd.TokenTypeList and 'PCD_TYPE_HII' not in Pcd.TokenTypeList:\r
# Find index by CName, TokenSpaceGuid\r
Offset = GetMatchedIndex(CName, Dict['STRING_HEAD_CNAME_DECL'], TokenSpaceGuid, Dict['STRING_HEAD_GUID_DECL'])\r
+ Offset = PCD_STRING_INDEX_MAP[Offset]\r
assert(Offset != -1)\r
Table = Dict['STRING_DB_VALUE']\r
if 'PCD_TYPE_DATA' in Pcd.TokenTypeList:\r
Dict['PCD_TOKENSPACE_OFFSET'].append(TokenSpaceIndex) \r
for index in range(len(Dict['PCD_TOKENSPACE'])):\r
StringTableSize += Dict['PCD_TOKENSPACE_LENGTH'][index]\r
- \r
+ StringTableIndex += 1\r
for index in range(len(Dict['PCD_CNAME'])):\r
Dict['PCD_CNAME_OFFSET'].append(StringTableSize) \r
Dict['PCD_NAME_OFFSET'].append(Dict['PCD_TOKENSPACE_OFFSET'][index])\r
Dict['PCD_NAME_OFFSET'].append(StringTableSize)\r
StringTableSize += Dict['PCD_CNAME_LENGTH'][index]\r
- \r
+ StringTableIndex += 1\r
if GuidList != []:\r
Dict['GUID_TABLE_EMPTY'] = 'FALSE'\r
Dict['GUID_TABLE_SIZE'] = str(len(GuidList)) + 'U'\r
if Dict['SIZE_TABLE_CNAME'] == []:\r
Dict['SIZE_TABLE_CNAME'].append('')\r
Dict['SIZE_TABLE_GUID'].append('')\r
- Dict['SIZE_TABLE_CURRENT_LENGTH'].append('0U')\r
+ Dict['SIZE_TABLE_CURRENT_LENGTH'].append(['0U'])\r
Dict['SIZE_TABLE_MAXIMUM_LENGTH'].append('0U')\r
\r
if NumberOfLocalTokens != 0:\r
if NumberOfSkuEnabledPcd != 0: \r
Dict['SKU_HEAD_SIZE'] = str(NumberOfSkuEnabledPcd) + 'U'\r
\r
- Dict['SKUID_VALUE'][0] = len(Dict['SKUID_VALUE'])\r
+ for AvailableSkuNumber in SkuObj.SkuIdNumberSet:\r
+ if AvailableSkuNumber not in Dict['SKUID_VALUE']:\r
+ Dict['SKUID_VALUE'].append(AvailableSkuNumber)\r
+ Dict['SKUID_VALUE'][0] = len(Dict['SKUID_VALUE']) - 1\r
\r
AutoGenH.Append(gPcdDatabaseAutoGenH.Replace(Dict))\r
if NumberOfLocalTokens == 0:\r
\r
AutoGenC.Append(gPcdDatabaseAutoGenC.Replace(Dict))\r
\r
+ if Platform.Platform.VarCheckFlag:\r
+ dest = os.path.join(Platform.BuildDir, 'FV')\r
+ VarCheckTab.dump(dest, Phase)\r
Buffer = BuildExDataBase(Dict)\r
return AutoGenH, AutoGenC, Buffer\r
\r
+def GetOrderedDynamicPcdList(DynamicPcdList, PcdTokenNumberList):\r
+ ReorderedDyPcdList = [None for i in range(len(DynamicPcdList))]\r
+ for Pcd in DynamicPcdList:\r
+ if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in PcdTokenNumberList:\r
+ ReorderedDyPcdList[PcdTokenNumberList[Pcd.TokenCName, Pcd.TokenSpaceGuidCName]-1] = Pcd\r
+ return ReorderedDyPcdList\r
+\r