\r
# resolve PCD type, value, datum info, etc. by getting its definition from package\r
for PcdCName, TokenSpaceGuid in PcdList:\r
+ PcdRealName = PcdCName\r
Setting, LineNo = PcdDict[self._Arch, self.Platform, PcdCName, TokenSpaceGuid]\r
if Setting == None:\r
continue\r
# Patch PCD: TokenSpace.PcdCName|Value|Offset\r
Pcd.Offset = ValueList[1]\r
\r
+ if (PcdRealName, TokenSpaceGuid) in GlobalData.MixedPcd:\r
+ for Package in self.Packages:\r
+ for key in Package.Pcds:\r
+ if (Package.Pcds[key].TokenCName, Package.Pcds[key].TokenSpaceGuidCName) == (PcdRealName, TokenSpaceGuid):\r
+ for item in GlobalData.MixedPcd[(PcdRealName, TokenSpaceGuid)]:\r
+ Pcd_Type = item[0].split('_')[-1]\r
+ if Pcd_Type == Package.Pcds[key].Type:\r
+ Value = Package.Pcds[key]\r
+ Value.TokenCName = Package.Pcds[key].TokenCName + '_' + Pcd_Type\r
+ if len(key) == 2:\r
+ newkey = (Value.TokenCName, key[1])\r
+ elif len(key) == 3:\r
+ newkey = (Value.TokenCName, key[1], key[2])\r
+ del Package.Pcds[key]\r
+ Package.Pcds[newkey] = Value\r
+ break\r
+ else:\r
+ pass\r
+ else:\r
+ pass\r
+\r
# get necessary info from package declaring this PCD\r
for Package in self.Packages:\r
#\r
if Type == MODEL_PCD_DYNAMIC:\r
Pcd.Pending = True\r
for T in ["FixedAtBuild", "PatchableInModule", "FeatureFlag", "Dynamic", "DynamicEx"]:\r
- if (PcdCName, TokenSpaceGuid, T) in Package.Pcds:\r
- PcdType = T\r
+ if (PcdRealName, TokenSpaceGuid) in GlobalData.MixedPcd:\r
+ for item in GlobalData.MixedPcd[(PcdRealName, TokenSpaceGuid)]:\r
+ if str(item[0]).endswith(T) and (item[0], item[1], T) in Package.Pcds:\r
+ PcdType = T\r
+ PcdCName = item[0]\r
+ break\r
+ else:\r
+ pass\r
break\r
+ else:\r
+ if (PcdRealName, TokenSpaceGuid, T) in Package.Pcds:\r
+ PcdType = T\r
+ break\r
+\r
else:\r
Pcd.Pending = False\r
+ if (PcdRealName, TokenSpaceGuid) in GlobalData.MixedPcd:\r
+ for item in GlobalData.MixedPcd[(PcdRealName, TokenSpaceGuid)]:\r
+ Pcd_Type = item[0].split('_')[-1]\r
+ if Pcd_Type == PcdType:\r
+ PcdCName = item[0]\r
+ break\r
+ else:\r
+ pass\r
+ else:\r
+ pass\r
\r
if (PcdCName, TokenSpaceGuid, PcdType) in Package.Pcds:\r
PcdInPackage = Package.Pcds[PcdCName, TokenSpaceGuid, PcdType]\r
EdkLogger.error(\r
'build',\r
FORMAT_INVALID,\r
- "No TokenValue for PCD [%s.%s] in [%s]!" % (TokenSpaceGuid, PcdCName, str(Package)),\r
+ "No TokenValue for PCD [%s.%s] in [%s]!" % (TokenSpaceGuid, PcdRealName, str(Package)),\r
File=self.MetaFile, Line=LineNo,\r
ExtraData=None\r
) \r
EdkLogger.error(\r
'build',\r
FORMAT_INVALID,\r
- "The format of TokenValue [%s] of PCD [%s.%s] in [%s] is invalid:" % (Pcd.TokenValue, TokenSpaceGuid, PcdCName, str(Package)),\r
+ "The format of TokenValue [%s] of PCD [%s.%s] in [%s] is invalid:" % (Pcd.TokenValue, TokenSpaceGuid, PcdRealName, str(Package)),\r
File=self.MetaFile, Line=LineNo,\r
ExtraData=None\r
)\r
EdkLogger.error(\r
'build',\r
FORMAT_INVALID,\r
- "The format of TokenValue [%s] of PCD [%s.%s] in [%s] is invalid, as a decimal it should between: 0 - 4294967295!" % (Pcd.TokenValue, TokenSpaceGuid, PcdCName, str(Package)),\r
+ "The format of TokenValue [%s] of PCD [%s.%s] in [%s] is invalid, as a decimal it should between: 0 - 4294967295!" % (Pcd.TokenValue, TokenSpaceGuid, PcdRealName, str(Package)),\r
File=self.MetaFile, Line=LineNo,\r
ExtraData=None\r
)\r
EdkLogger.error(\r
'build',\r
FORMAT_INVALID,\r
- "The format of TokenValue [%s] of PCD [%s.%s] in [%s] is invalid, it should be hexadecimal or decimal!" % (Pcd.TokenValue, TokenSpaceGuid, PcdCName, str(Package)),\r
+ "The format of TokenValue [%s] of PCD [%s.%s] in [%s] is invalid, it should be hexadecimal or decimal!" % (Pcd.TokenValue, TokenSpaceGuid, PcdRealName, str(Package)),\r
File=self.MetaFile, Line=LineNo,\r
ExtraData=None\r
)\r
EdkLogger.error(\r
'build',\r
FORMAT_INVALID,\r
- "PCD [%s.%s] in [%s] is not found in dependent packages:" % (TokenSpaceGuid, PcdCName, self.MetaFile),\r
+ "PCD [%s.%s] in [%s] is not found in dependent packages:" % (TokenSpaceGuid, PcdRealName, self.MetaFile),\r
File=self.MetaFile, Line=LineNo,\r
ExtraData="\t%s" % '\n\t'.join([str(P) for P in self.Packages])\r
)\r