X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=BaseTools%2FSource%2FPython%2FAutoGen%2FGenPcdDb.py;h=e415cae2905480b5a4b217151b04e6ad191cc741;hp=b60d33526a2e5dde02031cf4f9fbe9ed24b2b572;hb=c33081c912968da46fd6f0c7d2d2e52b7b410626;hpb=7e6e459a3d91c07db1f97258aec323a982375e19 diff --git a/BaseTools/Source/Python/AutoGen/GenPcdDb.py b/BaseTools/Source/Python/AutoGen/GenPcdDb.py index b60d33526a..e415cae290 100644 --- a/BaseTools/Source/Python/AutoGen/GenPcdDb.py +++ b/BaseTools/Source/Python/AutoGen/GenPcdDb.py @@ -1,7 +1,7 @@ ## @file # Routines for generating Pcd Database # -# Copyright (c) 2013 - 2016, Intel Corporation. All rights reserved.
+# Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.
# This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -980,8 +980,6 @@ def CreatePcdDatabaseCode (Info, AutoGenC, AutoGenH): def CreatePcdDataBase(PcdDBData): delta = {} basedata = {} - if not PcdDBData: - return "" for skuname,skuid in PcdDBData: if len(PcdDBData[(skuname,skuid)][1]) != len(PcdDBData[("DEFAULT","0")][1]): EdkLogger.ERROR("The size of each sku in one pcd are not same") @@ -1024,6 +1022,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() } @@ -1048,9 +1059,12 @@ def NewCreatePcdDatabasePhaseSpecificAutoGen(Platform,Phase): AdditionalAutoGenH, AdditionalAutoGenC = CreateAutoGen(PcdDriverAutoGenData) else: AdditionalAutoGenH, AdditionalAutoGenC, PcdDbBuffer,VarCheckTab = CreatePcdDatabasePhaseSpecificAutoGen (Platform,{}, Phase) + final_data = () + for item in PcdDbBuffer: + final_data += unpack("B",item) + PcdDBData[("DEFAULT","0")] = (PcdDbBuffer, final_data) - PcdDbBuffer = CreatePcdDataBase(PcdDBData) - return AdditionalAutoGenH, AdditionalAutoGenC, PcdDbBuffer + return AdditionalAutoGenH, AdditionalAutoGenC, CreatePcdDataBase(PcdDBData) ## Create PCD database in DXE or PEI phase # # @param Platform The platform object @@ -1083,9 +1097,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 @@ -1172,12 +1185,6 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase): if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.MixedPcd[PcdItem]: CName = PcdItem[0] - if GlobalData.BuildOptionPcd: - for PcdItem in GlobalData.BuildOptionPcd: - if (Pcd.TokenSpaceGuidCName, CName) == (PcdItem[0], PcdItem[1]): - Pcd.DefaultValue = PcdItem[2] - break - EdkLogger.debug(EdkLogger.DEBUG_3, "PCD: %s %s (%s : %s)" % (CName, TokenSpaceGuidCName, Pcd.Phase, Phase)) if Pcd.Phase == 'PEI': @@ -1227,7 +1234,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase): for SkuName in Pcd.SkuInfoList: Sku = Pcd.SkuInfoList[SkuName] SkuId = Sku.SkuId - if SkuId == None or SkuId == '': + if SkuId is None or SkuId == '': continue @@ -1383,9 +1390,12 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase): if Pcd.MaxDatumSize != '': MaxDatumSize = int(Pcd.MaxDatumSize, 0) if MaxDatumSize < Size: - EdkLogger.error("build", AUTOGEN_ERROR, + if Pcd.MaxSizeUserSet: + EdkLogger.error("build", AUTOGEN_ERROR, "The maximum size of VOID* type PCD '%s.%s' is less than its actual size occupied." % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName), ExtraData="[%s]" % str(Platform)) + else: + MaxDatumSize = Size else: MaxDatumSize = Size StringTabLen = MaxDatumSize @@ -1402,8 +1412,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. @@ -1494,12 +1503,6 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase): if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.MixedPcd[PcdItem]: CName = PcdItem[0] - if GlobalData.BuildOptionPcd: - for PcdItem in GlobalData.BuildOptionPcd: - if (Pcd.TokenSpaceGuidCName, CName) == (PcdItem[0], PcdItem[1]): - Pcd.DefaultValue = PcdItem[2] - break - EdkLogger.debug(EdkLogger.DEBUG_1, "PCD = %s.%s" % (CName, TokenSpaceGuidCName)) EdkLogger.debug(EdkLogger.DEBUG_1, "phase = %s" % Phase) EdkLogger.debug(EdkLogger.DEBUG_1, "GeneratedTokenNumber = %s" % str(GeneratedTokenNumber))