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
\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
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
NumberOfSkuEnabledPcd = 0\r
GuidList = []\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
# 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 SkuName in Pcd.SkuInfoList:\r
- SkuInfo = Pcd.SkuInfoList[SkuName]\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
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
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