from ValidCheckingInfoObject import VAR_CHECK_PCD_VARIABLE_TAB\r
from ValidCheckingInfoObject import VAR_VALID_OBJECT_FACTORY\r
from Common.VariableAttributes import VariableAttributes\r
+import copy\r
+from struct import unpack\r
\r
-DATABASE_VERSION = 6\r
+DATABASE_VERSION = 7\r
\r
gPcdDatabaseAutoGenC = TemplateString("""\r
//\r
#define ${PHASE}_EXMAPPING_TABLE_SIZE ${EXMAPPING_TABLE_SIZE}\r
#define ${PHASE}_EX_TOKEN_NUMBER ${EX_TOKEN_NUMBER}\r
#define ${PHASE}_SIZE_TABLE_SIZE ${SIZE_TABLE_SIZE}\r
-#define ${PHASE}_SKU_HEAD_SIZE ${SKU_HEAD_SIZE}\r
#define ${PHASE}_GUID_TABLE_EMPTY ${GUID_TABLE_EMPTY}\r
#define ${PHASE}_STRING_TABLE_EMPTY ${STRING_TABLE_EMPTY}\r
#define ${PHASE}_SKUID_TABLE_EMPTY ${SKUID_TABLE_EMPTY}\r
${BEGIN} STRING_HEAD ${STRING_HEAD_CNAME_DECL}_${STRING_HEAD_GUID_DECL}[${STRING_HEAD_NUMSKUS_DECL}];\r
${END}\r
${BEGIN} VARIABLE_HEAD ${VARIABLE_HEAD_CNAME_DECL}_${VARIABLE_HEAD_GUID_DECL}_Variable_Header[${VARIABLE_HEAD_NUMSKUS_DECL}];\r
-${END}\r
-${BEGIN} SKU_HEAD SkuHead[${PHASE}_SKU_HEAD_SIZE];\r
-${END}\r
${BEGIN} UINT8 StringTable${STRING_TABLE_INDEX}[${STRING_TABLE_LENGTH}]; /* ${STRING_TABLE_CNAME}_${STRING_TABLE_GUID} */\r
${END}\r
SIZE_INFO SizeTable[${PHASE}_SIZE_TABLE_SIZE];\r
//GUID Signature; // PcdDataBaseGuid\r
//UINT32 BuildVersion;\r
//UINT32 Length;\r
- //SKU_ID SystemSkuId; // Current SkuId value.\r
+ //SKU_ID SystemSkuId; // Current SkuId value.\r
+ //UINT32 LengthForAllSkus; // Length of all SKU PCD DB\r
//UINT32 UninitDataBaseSize;// Total size for PCD those default value with 0.\r
//TABLE_OFFSET LocalTokenNumberTableOffset;\r
//TABLE_OFFSET ExMapTableOffset;\r
//UINT16 LocalTokenCount; // LOCAL_TOKEN_NUMBER for all\r
//UINT16 ExTokenCount; // EX_TOKEN_NUMBER for DynamicEx\r
//UINT16 GuidTableCount; // The Number of Guid in GuidTable\r
- //UINT8 Pad[2];\r
+ //UINT8 Pad[6];\r
${PHASE}_PCD_DATABASE_INIT Init;\r
${PHASE}_PCD_DATABASE_UNINIT Uninit;\r
} ${PHASE}_PCD_DATABASE;\r
"PCD_TYPE_DATA":(0x0 << 28),\r
"PCD_TYPE_HII":(0x8 << 28),\r
"PCD_TYPE_VPD":(0x4 << 28),\r
- "PCD_TYPE_SKU_ENABLED":(0x2 << 28),\r
+# "PCD_TYPE_SKU_ENABLED":(0x2 << 28),\r
"PCD_TYPE_STRING":(0x1 << 28),\r
\r
"PCD_DATUM_TYPE_SHIFT":24,\r
VariableTable = Dict['VARIABLE_DB_VALUE']\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
- DbSkuTable = DbSkuHeadTableItemList(8, RawDataList = SkuTable)\r
+\r
Dict['STRING_TABLE_DB_VALUE'] = [StringArrayToList(x) for x in Dict['STRING_TABLE_VALUE']]\r
\r
StringTableValue = Dict['STRING_TABLE_DB_VALUE']\r
DbVardefValueBoolean = DbItemList(1, RawDataList = VardefValueBoolean)\r
SkuidValue = Dict['SKUID_VALUE']\r
DbSkuidValue = DbItemList(8, RawDataList = SkuidValue)\r
- SkuIndexValue = Dict['SKU_INDEX_VALUE']\r
- DbSkuIndexValue = DbItemList(8,RawDataList = SkuIndexValue)\r
+\r
+\r
\r
# Unit Db Items\r
UnInitValueUint64 = Dict['UNINIT_GUID_DECL_UINT64']\r
DbUnInitValueBoolean = DbItemList(1, RawDataList = UnInitValueBoolean)\r
PcdTokenNumberMap = Dict['PCD_ORDER_TOKEN_NUMBER_MAP']\r
\r
- DbNameTotle = ["SkuidValue", "SkuIndexValue", "InitValueUint64", "VardefValueUint64", "InitValueUint32", "VardefValueUint32", "VpdHeadValue", "ExMapTable",\r
- "LocalTokenNumberTable", "GuidTable", "StringHeadValue", "PcdNameOffsetTable","VariableTable","SkuTable", "StringTableLen", "PcdTokenTable", "PcdCNameTable", \r
+ DbNameTotle = ["SkuidValue", "InitValueUint64", "VardefValueUint64", "InitValueUint32", "VardefValueUint32", "VpdHeadValue", "ExMapTable",\r
+ "LocalTokenNumberTable", "GuidTable", "StringHeadValue", "PcdNameOffsetTable","VariableTable", "StringTableLen", "PcdTokenTable", "PcdCNameTable",\r
"SizeTableValue", "InitValueUint16", "VardefValueUint16", "InitValueUint8", "VardefValueUint8", "InitValueBoolean",\r
"VardefValueBoolean", "UnInitValueUint64", "UnInitValueUint32", "UnInitValueUint16", "UnInitValueUint8", "UnInitValueBoolean"]\r
\r
- DbTotal = [SkuidValue, SkuIndexValue, InitValueUint64, VardefValueUint64, InitValueUint32, VardefValueUint32, VpdHeadValue, ExMapTable,\r
- LocalTokenNumberTable, GuidTable, StringHeadValue, PcdNameOffsetTable,VariableTable,SkuTable, StringTableLen, PcdTokenTable,PcdCNameTable, \r
+ DbTotal = [SkuidValue, InitValueUint64, VardefValueUint64, InitValueUint32, VardefValueUint32, VpdHeadValue, ExMapTable,\r
+ LocalTokenNumberTable, GuidTable, StringHeadValue, PcdNameOffsetTable,VariableTable, StringTableLen, PcdTokenTable,PcdCNameTable,\r
SizeTableValue, InitValueUint16, VardefValueUint16, InitValueUint8, VardefValueUint8, InitValueBoolean,\r
VardefValueBoolean, UnInitValueUint64, UnInitValueUint32, UnInitValueUint16, UnInitValueUint8, UnInitValueBoolean]\r
- DbItemTotal = [DbSkuidValue, DbSkuIndexValue, DbInitValueUint64, DbVardefValueUint64, DbInitValueUint32, DbVardefValueUint32, DbVpdHeadValue, DbExMapTable,\r
- DbLocalTokenNumberTable, DbGuidTable, DbStringHeadValue, DbPcdNameOffsetTable,DbVariableTable,DbSkuTable, DbStringTableLen, DbPcdTokenTable, DbPcdCNameTable, \r
+ DbItemTotal = [DbSkuidValue, DbInitValueUint64, DbVardefValueUint64, DbInitValueUint32, DbVardefValueUint32, DbVpdHeadValue, DbExMapTable,\r
+ DbLocalTokenNumberTable, DbGuidTable, DbStringHeadValue, DbPcdNameOffsetTable,DbVariableTable, DbStringTableLen, DbPcdTokenTable, DbPcdCNameTable,\r
DbSizeTableValue, DbInitValueUint16, DbVardefValueUint16, DbInitValueUint8, DbVardefValueUint8, DbInitValueBoolean,\r
DbVardefValueBoolean, DbUnInitValueUint64, DbUnInitValueUint32, DbUnInitValueUint16, DbUnInitValueUint8, DbUnInitValueBoolean]\r
\r
# VardefValueBoolean is the last table in the init table items\r
InitTableNum = DbNameTotle.index("VardefValueBoolean") + 1\r
# The FixedHeader length of the PCD_DATABASE_INIT, from Signature to Pad\r
- FixedHeaderLen = 72\r
+ FixedHeaderLen = 80\r
\r
# Get offset of SkuId table in the database \r
SkuIdTableOffset = FixedHeaderLen\r
\r
\r
# Get offset of SkuValue table in the database \r
- SkuTableOffset = FixedHeaderLen\r
- for DbIndex in xrange(len(DbTotal)):\r
- if DbTotal[DbIndex] is SkuTable:\r
- break\r
- elif DbItemTotal[DbIndex] is DbSkuIndexValue:\r
- if DbItemTotal[DbIndex].RawDataList:\r
- Count = 0\r
- for item in DbItemTotal[DbIndex].RawDataList:\r
- Count += len(item)\r
- SkuTableOffset += DbItemTotal[DbIndex].ItemSize * Count\r
- continue\r
- SkuTableOffset += DbItemTotal[DbIndex].GetListSize()\r
\r
# Fix up the LocalTokenNumberTable, SkuHeader table\r
- SkuHeaderIndex = 0\r
- if len(Dict['SKU_INDEX_VALUE']) > 0:\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] + 1\r
for (LocalTokenNumberTableIndex, (Offset, Table)) in enumerate(LocalTokenNumberTable):\r
DbIndex = 0\r
DbOffset = FixedHeaderLen\r
if DbTotal[DbIndex] is Table:\r
DbOffset += DbItemTotal[DbIndex].GetInterOffset(Offset)\r
break\r
- elif DbItemTotal[DbIndex] is DbSkuIndexValue:\r
- if DbItemTotal[DbIndex].RawDataList:\r
- Count = 0\r
- for item in DbItemTotal[DbIndex].RawDataList:\r
- Count += len(item)\r
- DbOffset += DbItemTotal[DbIndex].ItemSize * Count\r
- continue\r
DbOffset += DbItemTotal[DbIndex].GetListSize()\r
if DbIndex + 1 == InitTableNum:\r
if DbOffset % 8:\r
LocalTokenNumberTable[LocalTokenNumberTableIndex] = DbOffset|int(TokenTypeValue)\r
# if PCD_TYPE_SKU_ENABLED, then we need to fix up the SkuTable\r
\r
- SkuIndexTabalOffset = SkuIdTableOffset + len(Dict['SKUID_VALUE']) * 8\r
- if (TokenTypeValue & (0x2 << 28)):\r
- SkuTable[SkuHeaderIndex] = (DbOffset|int(TokenTypeValue & ~(0x2<<28)), SkuIndexTabalOffset + SkuIndexIndexTable[PcdTokenNumberMap[LocalTokenNumberTableIndex]] * 8)\r
- LocalTokenNumberTable[LocalTokenNumberTableIndex] = (SkuTableOffset + SkuHeaderIndex * 8) | int(TokenTypeValue)\r
- SkuHeaderIndex += 1\r
\r
\r
- if SkuHeaderIndex == 0:\r
- SkuHeaderIndex = 1\r
- assert(SkuHeaderIndex == NumberOfSkuEnabledPcd)\r
\r
# resolve variable table offset \r
for VariableEntries in VariableTable:\r
if DbTotal[DbIndex] is VariableRefTable:\r
DbOffset += DbItemTotal[DbIndex].GetInterOffset(VariableOffset)\r
break\r
- elif DbItemTotal[DbIndex] is DbSkuIndexValue:\r
- if DbItemTotal[DbIndex].RawDataList:\r
- Count = 0\r
- for item in DbItemTotal[DbIndex].RawDataList:\r
- Count += len(item)\r
- DbOffset += DbItemTotal[DbIndex].ItemSize * Count\r
- continue\r
DbOffset += DbItemTotal[DbIndex].GetListSize()\r
if DbIndex + 1 == InitTableNum:\r
if DbOffset % 8:\r
SkuIdTableOffset = DbTotalLength\r
elif DbItemTotal[DbIndex] is DbPcdNameOffsetTable:\r
DbPcdNameOffset = DbTotalLength\r
- elif DbItemTotal[DbIndex] is DbSkuIndexValue:\r
- if DbItemTotal[DbIndex].RawDataList:\r
- Count = 0\r
- for item in DbItemTotal[DbIndex].RawDataList:\r
- Count += len(item)\r
- DbTotalLength += DbItemTotal[DbIndex].ItemSize * Count\r
- continue\r
+\r
\r
DbTotalLength += DbItemTotal[DbIndex].GetListSize()\r
if not Dict['PCD_INFO_FLAG']:\r
Buffer += b\r
b = pack('=Q', SystemSkuId)\r
\r
+ Buffer += b\r
+ b = pack('=L', 0)\r
+\r
Buffer += b\r
b = pack('=L', UninitDataBaseSize)\r
\r
\r
Buffer += b\r
b = pack('=B', Pad)\r
-\r
Buffer += b\r
- b = pack('=B', Pad)\r
- \r
+ Buffer += b\r
+ Buffer += b\r
+ Buffer += b\r
+ Buffer += b\r
Buffer += b\r
\r
Index = 0\r
EdkLogger.error("build", AUTOGEN_ERROR, "Not supported PcdIsDriver type:%s" % Info.PcdIsDriver,\r
ExtraData="[%s]" % str(Info))\r
\r
- AdditionalAutoGenH, AdditionalAutoGenC, PcdDbBuffer = CreatePcdDatabasePhaseSpecificAutoGen (Info.PlatformInfo, 'PEI')\r
+ AdditionalAutoGenH, AdditionalAutoGenC, PcdDbBuffer = NewCreatePcdDatabasePhaseSpecificAutoGen (Info.PlatformInfo, 'PEI')\r
AutoGenH.Append(AdditionalAutoGenH.String)\r
\r
Phase = gPcdPhaseMap[Info.PcdIsDriver]\r
AutoGenC.Append(AdditionalAutoGenC.String)\r
\r
if Phase == 'DXE':\r
- AdditionalAutoGenH, AdditionalAutoGenC, PcdDbBuffer = CreatePcdDatabasePhaseSpecificAutoGen (Info.PlatformInfo, Phase)\r
+ AdditionalAutoGenH, AdditionalAutoGenC, PcdDbBuffer = NewCreatePcdDatabasePhaseSpecificAutoGen (Info.PlatformInfo, Phase)\r
AutoGenH.Append(AdditionalAutoGenH.String)\r
AutoGenC.Append(AdditionalAutoGenC.String)\r
\r
DbFile = StringIO()\r
DbFile.write(PcdDbBuffer)\r
Changed = SaveFileOnChange(DbFileName, DbFile.getvalue(), True)\r
+def CreatePcdDataBase(PcdDBData):\r
+ delta = {}\r
+ basedata = {}\r
+ for skuname,skuid in PcdDBData:\r
+ if len(PcdDBData[(skuname,skuid)][1]) != len(PcdDBData[("DEFAULT","0")][1]):\r
+ EdkLogger.ERROR("The size of each sku in one pcd are not same")\r
+ for skuname,skuid in PcdDBData:\r
+ if skuname == "DEFAULT":\r
+ continue\r
+ delta[(skuname,skuid)] = [(index,data,hex(data)) for index,data in enumerate(PcdDBData[(skuname,skuid)][1]) if PcdDBData[(skuname,skuid)][1][index] != PcdDBData[("DEFAULT","0")][1][index]]\r
+ basedata[(skuname,skuid)] = [(index,PcdDBData[("DEFAULT","0")][1][index],hex(PcdDBData[("DEFAULT","0")][1][index])) for index,data in enumerate(PcdDBData[(skuname,skuid)][1]) if PcdDBData[(skuname,skuid)][1][index] != PcdDBData[("DEFAULT","0")][1][index]]\r
+ databasebuff = PcdDBData[("DEFAULT","0")][0]\r
+\r
+ for skuname,skuid in delta:\r
+ # 8 byte align\r
+ if len(databasebuff) % 8 > 0:\r
+ for i in range(8 - (len(databasebuff) % 8)):\r
+ databasebuff += pack("=B",0)\r
+ databasebuff += pack('=Q', int(skuid))\r
+ databasebuff += pack('=Q', 0)\r
+ databasebuff += pack('=L', 8+8+4+4*len(delta[(skuname,skuid)]))\r
+ for item in delta[(skuname,skuid)]:\r
+ databasebuff += pack("=L",item[0])\r
+ databasebuff = databasebuff[:-1] + pack("=B",item[1])\r
+ totallen = len(databasebuff)\r
+ totallenbuff = pack("=L",totallen)\r
+ newbuffer = databasebuff[:32]\r
+ for i in range(4):\r
+ newbuffer += totallenbuff[i]\r
+ for i in range(36,totallen):\r
+ newbuffer += databasebuff[i]\r
+\r
+ return newbuffer\r
+def CreateVarCheckBin(VarCheckTab):\r
+ return VarCheckTab[('DEFAULT',"0")]\r
+def CreateAutoGen(PcdDriverAutoGenData):\r
+ autogenC = TemplateString()\r
+ for skuname,skuid in PcdDriverAutoGenData:\r
+ autogenC.Append("//SKUID: %s" % skuname)\r
+ autogenC.Append(PcdDriverAutoGenData[(skuname,skuid)][1].String)\r
+ return (PcdDriverAutoGenData[(skuname,skuid)][0],autogenC)\r
+def NewCreatePcdDatabasePhaseSpecificAutoGen(Platform,Phase):\r
+ def prune_sku(pcd,skuname):\r
+ new_pcd = copy.deepcopy(pcd)\r
+ new_pcd.SkuInfoList = {skuname:pcd.SkuInfoList[skuname]}\r
+ new_pcd.isinit = 'INIT'\r
+ if new_pcd.DatumType in ['UINT8','UINT16','UINT32','UINT64']:\r
+ for skuobj in pcd.SkuInfoList.values():\r
+ if skuobj.DefaultValue:\r
+ defaultvalue = int(skuobj.DefaultValue,16) if skuobj.DefaultValue.upper().startswith("0X") else int(skuobj.DefaultValue,10)\r
+ if defaultvalue != 0:\r
+ new_pcd.isinit = "INIT"\r
+ break\r
+ elif skuobj.VariableName:\r
+ new_pcd.isinit = "INIT"\r
+ break\r
+ else:\r
+ new_pcd.isinit = "UNINIT"\r
+ return new_pcd\r
+ DynamicPcds = Platform.DynamicPcdList\r
+ DynamicPcdSet_Sku = {(SkuName,skuobj.SkuId):[] for pcd in DynamicPcds for (SkuName,skuobj) in pcd.SkuInfoList.items() }\r
+ for skuname,skuid in DynamicPcdSet_Sku:\r
+ DynamicPcdSet_Sku[(skuname,skuid)] = [prune_sku(pcd,skuname) for pcd in DynamicPcds]\r
+ PcdDBData = {}\r
+ PcdDriverAutoGenData = {}\r
+ VarCheckTableData = {}\r
+ if DynamicPcdSet_Sku:\r
+ for skuname,skuid in DynamicPcdSet_Sku:\r
+ AdditionalAutoGenH, AdditionalAutoGenC, PcdDbBuffer,VarCheckTab = CreatePcdDatabasePhaseSpecificAutoGen (Platform,DynamicPcdSet_Sku[(skuname,skuid)], Phase)\r
+ final_data = ()\r
+ for item in PcdDbBuffer:\r
+ final_data += unpack("B",item)\r
+ PcdDBData[(skuname,skuid)] = (PcdDbBuffer, final_data)\r
+ PcdDriverAutoGenData[(skuname,skuid)] = (AdditionalAutoGenH, AdditionalAutoGenC)\r
+ VarCheckTableData[(skuname,skuid)] = VarCheckTab\r
+ if Platform.Platform.VarCheckFlag:\r
+ dest = os.path.join(Platform.BuildDir, 'FV')\r
+ VarCheckTable = CreateVarCheckBin(VarCheckTableData)\r
+ VarCheckTable.dump(dest, Phase)\r
+ AdditionalAutoGenH, AdditionalAutoGenC = CreateAutoGen(PcdDriverAutoGenData)\r
+ else:\r
+ AdditionalAutoGenH, AdditionalAutoGenC, PcdDbBuffer,VarCheckTab = CreatePcdDatabasePhaseSpecificAutoGen (Platform,{}, Phase)\r
+ final_data = ()\r
+ for item in PcdDbBuffer:\r
+ final_data += unpack("B",item)\r
+ PcdDBData[("DEFAULT","0")] = (PcdDbBuffer, final_data)\r
\r
+ return AdditionalAutoGenH, AdditionalAutoGenC, CreatePcdDataBase(PcdDBData)\r
## Create PCD database in DXE or PEI phase\r
#\r
# @param Platform The platform object\r
# @retval tuple Two TemplateString objects for C code and header file,\r
# respectively\r
#\r
-def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase):\r
+def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase):\r
AutoGenC = TemplateString()\r
AutoGenH = TemplateString()\r
\r
'SYSTEM_SKU_ID_VALUE' : '0U'\r
}\r
\r
- \r
- SkuObj = SkuClass(Platform.Platform.AvilableSkuIds, Platform.Platform.SkuIds)\r
- Dict['SYSTEM_SKU_ID_VALUE'] = Platform.Platform.SkuIds[SkuObj.SystemSkuId]\r
+ SkuObj = Platform.Platform.SkuIdMgr\r
+ Dict['SYSTEM_SKU_ID_VALUE'] = 0 if SkuObj.SkuUsageType == SkuObj.SINGLE else Platform.Platform.SkuIds[SkuObj.SystemSkuId][0]\r
\r
Dict['PCD_INFO_FLAG'] = Platform.Platform.PcdInfoFlag\r
\r
\r
Dict['LOCAL_TOKEN_NUMBER_DB_VALUE'] = []\r
Dict['VARIABLE_DB_VALUE'] = []\r
- Dict['SKUHEAD_TABLE_VALUE'] = []\r
- Dict['SKU_INDEX_VALUE'] = []\r
\r
Dict['PCD_TOKENSPACE'] = []\r
Dict['PCD_CNAME'] = [] \r
GuidList = []\r
VarCheckTab = VAR_CHECK_PCD_VARIABLE_TAB_CONTAINER()\r
i = 0\r
- ReorderedDynPcdList = GetOrderedDynamicPcdList(Platform.DynamicPcdList, Platform.PcdTokenNumber)\r
+ ReorderedDynPcdList = GetOrderedDynamicPcdList(DynamicPcdList, Platform.PcdTokenNumber)\r
for item in ReorderedDynPcdList:\r
if item.DatumType not in [TAB_UINT8, TAB_UINT16, TAB_UINT32, TAB_UINT64, TAB_VOID, "BOOLEAN"]:\r
item.DatumType = "VOID*"\r
if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.MixedPcd[PcdItem]:\r
CName = PcdItem[0]\r
\r
- if GlobalData.BuildOptionPcd:\r
- for PcdItem in GlobalData.BuildOptionPcd:\r
- if (Pcd.TokenSpaceGuidCName, CName) == (PcdItem[0], PcdItem[1]):\r
- Pcd.DefaultValue = PcdItem[2]\r
- break\r
-\r
EdkLogger.debug(EdkLogger.DEBUG_3, "PCD: %s %s (%s : %s)" % (CName, TokenSpaceGuidCName, Pcd.Phase, Phase))\r
\r
if Pcd.Phase == 'PEI':\r
Pcd.TokenTypeList = ['PCD_DATUM_TYPE_' + Pcd.DatumType]\r
\r
if len(Pcd.SkuInfoList) > 1:\r
- Pcd.TokenTypeList += ['PCD_TYPE_SKU_ENABLED']\r
+# Pcd.TokenTypeList += ['PCD_TYPE_SKU_ENABLED']\r
NumberOfSkuEnabledPcd += 1\r
\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
- if SkuId == None or SkuId == '':\r
+ if SkuId is None or SkuId == '':\r
continue\r
\r
- if (SkuId + 'U') not in Dict['SKUID_VALUE']:\r
- Dict['SKUID_VALUE'].append(SkuId + 'U')\r
\r
- SkuIndexTableTmp.append(SkuId+'U')\r
SkuIdIndex += 1\r
\r
if len(Sku.VariableName) > 0:\r
Pcd.InitString = 'INIT'\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
+ 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
+ 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
if Sku.DefaultValue == 'TRUE':\r
Pcd.InitString = 'INIT'\r
else:\r
- if int(Sku.DefaultValue, 0) != 0:\r
- Pcd.InitString = 'INIT'\r
+ Pcd.InitString = Pcd.isinit\r
#\r
# For UNIT64 type PCD's value, ULL should be append to avoid\r
# warning under linux building environment.\r
Dict['SIZE_TABLE_CURRENT_LENGTH'].append(VoidStarTypeCurrSize)\r
\r
\r
- SkuIndexTableTmp[0] = len(SkuIndexTableTmp) - 1\r
- if len(Pcd.SkuInfoList) > 1:\r
- Dict['SKU_INDEX_VALUE'].append(SkuIndexTableTmp) \r
\r
if 'PCD_TYPE_HII' in Pcd.TokenTypeList:\r
Dict['VARIABLE_HEAD_CNAME_DECL'].append(CName)\r
if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.MixedPcd[PcdItem]:\r
CName = PcdItem[0]\r
\r
- if GlobalData.BuildOptionPcd:\r
- for PcdItem in GlobalData.BuildOptionPcd:\r
- if (Pcd.TokenSpaceGuidCName, CName) == (PcdItem[0], PcdItem[1]):\r
- Pcd.DefaultValue = PcdItem[2]\r
- break\r
-\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
\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
+\r
+# print Phase\r
Buffer = BuildExDataBase(Dict)\r
- return AutoGenH, AutoGenC, Buffer\r
+ return AutoGenH, AutoGenC, Buffer,VarCheckTab\r
\r
def GetOrderedDynamicPcdList(DynamicPcdList, PcdTokenNumberList):\r
ReorderedDyPcdList = [None for i in range(len(DynamicPcdList))]\r