]> git.proxmox.com Git - mirror_edk2.git/commitdiff
This patch is going to fix the issue of the mis-match between the index of Platform...
authorFeng, Bob C <bob.c.feng@intel.com>
Fri, 12 Sep 2014 08:46:30 +0000 (08:46 +0000)
committerbobfeng <bobfeng@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 12 Sep 2014 08:46:30 +0000 (08:46 +0000)
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Feng, Bob C <bob.c.feng@intel.com>
Reviewed-by: Yingke Liu <yingke.d.liu@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16101 6f19259b-4bc3-4df7-8a09-765794883524

BaseTools/Source/Python/AutoGen/GenPcdDb.py

index 289a6ff841e58b5c92863193ed1da770a787de82..e995e141da7a44be4ea71aec043252f37c8c8d65 100644 (file)
@@ -768,6 +768,7 @@ def BuildExDataBase(Dict):
     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
@@ -838,7 +839,7 @@ def BuildExDataBase(Dict):
         \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
@@ -1100,6 +1101,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase):
     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
@@ -1112,7 +1114,8 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase):
     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
@@ -1184,8 +1187,8 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase):
                 # 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
@@ -1405,7 +1408,8 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase):
     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
@@ -1416,6 +1420,9 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase):
         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
@@ -1596,3 +1603,10 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase):
     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