X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=BaseTools%2FSource%2FPython%2FAutoGen%2FGenPcdDb.py;h=82360ae57deb62f5ac0193f98a8bf6c4200a976d;hb=841d86fe406ed6cf504c62b6838876a65cf8f7a0;hp=fe1a598e41464c1e5eb1d8c3ed77733854b3f6a5;hpb=e651d06c5ed167e706e2dbe122ec0953a54033f3;p=mirror_edk2.git diff --git a/BaseTools/Source/Python/AutoGen/GenPcdDb.py b/BaseTools/Source/Python/AutoGen/GenPcdDb.py index fe1a598e41..82360ae57d 100644 --- a/BaseTools/Source/Python/AutoGen/GenPcdDb.py +++ b/BaseTools/Source/Python/AutoGen/GenPcdDb.py @@ -176,7 +176,8 @@ typedef struct { //GUID Signature; // PcdDataBaseGuid //UINT32 BuildVersion; //UINT32 Length; - //SKU_ID SystemSkuId; // Current SkuId value. + //SKU_ID SystemSkuId; // Current SkuId value. + //UINT32 LengthForAllSkus; // Length of all SKU PCD DB //UINT32 UninitDataBaseSize;// Total size for PCD those default value with 0. //TABLE_OFFSET LocalTokenNumberTableOffset; //TABLE_OFFSET ExMapTableOffset; @@ -188,7 +189,7 @@ typedef struct { //UINT16 LocalTokenCount; // LOCAL_TOKEN_NUMBER for all //UINT16 ExTokenCount; // EX_TOKEN_NUMBER for DynamicEx //UINT16 GuidTableCount; // The Number of Guid in GuidTable - //UINT8 Pad[2]; + //UINT8 Pad[6]; ${PHASE}_PCD_DATABASE_INIT Init; ${PHASE}_PCD_DATABASE_UNINIT Uninit; } ${PHASE}_PCD_DATABASE; @@ -767,7 +768,7 @@ def BuildExDataBase(Dict): # VardefValueBoolean is the last table in the init table items InitTableNum = DbNameTotle.index("VardefValueBoolean") + 1 # The FixedHeader length of the PCD_DATABASE_INIT, from Signature to Pad - FixedHeaderLen = 76 + FixedHeaderLen = 80 # Get offset of SkuId table in the database SkuIdTableOffset = FixedHeaderLen @@ -924,10 +925,11 @@ def BuildExDataBase(Dict): Buffer += b b = pack('=B', Pad) - Buffer += b - b = pack('=B', Pad) - + Buffer += b + Buffer += b + Buffer += b + Buffer += b Buffer += b Index = 0 @@ -991,9 +993,13 @@ def CreatePcdDataBase(PcdDBData): databasebuff = PcdDBData[("DEFAULT","0")][0] for skuname,skuid in delta: - databasebuff += pack('=H', int(skuid)) - databasebuff += pack('=H', 0) - databasebuff += pack('=L', 8+4*len(delta[(skuname,skuid)])) + # 8 byte align + if len(databasebuff) % 8 > 0: + for i in range(8 - (len(databasebuff) % 8)): + databasebuff += pack("=B",0) + databasebuff += pack('=Q', int(skuid)) + databasebuff += pack('=Q', 0) + databasebuff += pack('=L', 8+8+4+4*len(delta[(skuname,skuid)])) for item in delta[(skuname,skuid)]: databasebuff += pack("=L",item[0]) databasebuff = databasebuff[:-1] + pack("=B",item[1]) @@ -1018,6 +1024,19 @@ def NewCreatePcdDatabasePhaseSpecificAutoGen(Platform,Phase): def prune_sku(pcd,skuname): new_pcd = copy.deepcopy(pcd) new_pcd.SkuInfoList = {skuname:pcd.SkuInfoList[skuname]} + new_pcd.isinit = 'INIT' + if new_pcd.DatumType in ['UINT8','UINT16','UINT32','UINT64']: + for skuobj in pcd.SkuInfoList.values(): + if skuobj.DefaultValue: + defaultvalue = int(skuobj.DefaultValue,16) if skuobj.DefaultValue.upper().startswith("0X") else int(skuobj.DefaultValue,10) + if defaultvalue != 0: + new_pcd.isinit = "INIT" + break + elif skuobj.VariableName: + new_pcd.isinit = "INIT" + break + else: + new_pcd.isinit = "UNINIT" return new_pcd DynamicPcds = Platform.DynamicPcdList DynamicPcdSet_Sku = {(SkuName,skuobj.SkuId):[] for pcd in DynamicPcds for (SkuName,skuobj) in pcd.SkuInfoList.items() } @@ -1077,9 +1096,8 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase): 'SYSTEM_SKU_ID_VALUE' : '0U' } - - SkuObj = SkuClass(Platform.Platform.SkuName, Platform.Platform.SkuIds) - Dict['SYSTEM_SKU_ID_VALUE'] = Platform.Platform.SkuIds[SkuObj.SystemSkuId][0] + SkuObj = Platform.Platform.SkuIdMgr + Dict['SYSTEM_SKU_ID_VALUE'] = 0 if SkuObj.SkuUsageType == SkuObj.SINGLE else Platform.Platform.SkuIds[SkuObj.SystemSkuId][0] Dict['PCD_INFO_FLAG'] = Platform.Platform.PcdInfoFlag @@ -1396,8 +1414,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase): if Sku.DefaultValue == 'TRUE': Pcd.InitString = 'INIT' else: - if int(Sku.DefaultValue, 0) != 0: - Pcd.InitString = 'INIT' + Pcd.InitString = Pcd.isinit # # For UNIT64 type PCD's value, ULL should be append to avoid # warning under linux building environment.