## @file\r
# Routines for generating Pcd Database\r
#\r
-# Copyright (c) 2013 - 2016, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.<BR>\r
# This program and the accompanying materials\r
# are licensed and made available under the terms and conditions of the BSD License\r
# which accompanies this distribution. The full text of the license may be found at\r
from Common.VariableAttributes import VariableAttributes\r
import copy\r
from struct import unpack\r
+from Common.DataType import *\r
\r
DATABASE_VERSION = 7\r
\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
+ if len(PcdDBData[(skuname,skuid)][1]) != len(PcdDBData[(TAB_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
+ if skuname == TAB_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
+ delta[(skuname,skuid)] = [(index,data,hex(data)) for index,data in enumerate(PcdDBData[(skuname,skuid)][1]) if PcdDBData[(skuname,skuid)][1][index] != PcdDBData[(TAB_DEFAULT,"0")][1][index]]\r
+ databasebuff = PcdDBData[(TAB_DEFAULT,"0")][0]\r
\r
for skuname,skuid in delta:\r
# 8 byte align\r
newbuffer += databasebuff[i]\r
\r
return newbuffer\r
+\r
def CreateVarCheckBin(VarCheckTab):\r
- return VarCheckTab[('DEFAULT',"0")]\r
+ return VarCheckTab[(TAB_DEFAULT,"0")]\r
+\r
def CreateAutoGen(PcdDriverAutoGenData):\r
autogenC = TemplateString()\r
for skuname,skuid in PcdDriverAutoGenData:\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
+ if new_pcd.DatumType in TAB_PCD_CLEAN_NUMERIC_TYPES:\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
final_data = ()\r
for item in PcdDbBuffer:\r
final_data += unpack("B",item)\r
- PcdDBData[("DEFAULT","0")] = (PcdDbBuffer, final_data)\r
+ PcdDBData[(TAB_DEFAULT,"0")] = (PcdDbBuffer, final_data)\r
\r
return AdditionalAutoGenH, AdditionalAutoGenC, CreatePcdDataBase(PcdDBData)\r
## Create PCD database in DXE or PEI phase\r
\r
Dict['PCD_INFO_FLAG'] = Platform.Platform.PcdInfoFlag\r
\r
- for DatumType in ['UINT64','UINT32','UINT16','UINT8','BOOLEAN', "VOID*"]:\r
+ for DatumType in TAB_PCD_NUMERIC_TYPES_VOID:\r
Dict['VARDEF_CNAME_' + DatumType] = []\r
Dict['VARDEF_GUID_' + DatumType] = []\r
Dict['VARDEF_SKUID_' + DatumType] = []\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
+ item.DatumType = TAB_VOID\r
for Pcd in ReorderedDynPcdList:\r
VoidStarTypeCurrSize = []\r
i += 1\r
VariableDbValueList = []\r
Pcd.InitString = 'UNINIT'\r
\r
- if Pcd.DatumType == 'VOID*':\r
+ if Pcd.DatumType == TAB_VOID:\r
if Pcd.Type not in ["DynamicVpd", "DynamicExVpd"]:\r
Pcd.TokenTypeList = ['PCD_TYPE_STRING']\r
else:\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
\r
#\r
Dict['VARDEF_DB_VALUE_'+Pcd.DatumType].append(Sku.HiiDefaultValue)\r
\r
- if Pcd.DatumType == "UINT64":\r
+ if Pcd.DatumType == TAB_UINT64:\r
Dict['VARDEF_VALUE_'+Pcd.DatumType].append(Sku.HiiDefaultValue + "ULL")\r
- elif Pcd.DatumType in ("UINT32", "UINT16", "UINT8"):\r
+ elif Pcd.DatumType in (TAB_UINT32, TAB_UINT16, TAB_UINT8):\r
Dict['VARDEF_VALUE_'+Pcd.DatumType].append(Sku.HiiDefaultValue + "U")\r
elif Pcd.DatumType == "BOOLEAN":\r
if eval(Sku.HiiDefaultValue) in [1,0]:\r
VpdHeadOffsetList.append(str(Sku.VpdOffset) + 'U')\r
VpdDbOffsetList.append(Sku.VpdOffset)\r
# Also add the VOID* string of VPD PCD to SizeTable \r
- if Pcd.DatumType == 'VOID*':\r
+ if Pcd.DatumType == TAB_VOID:\r
NumberOfSizeItems += 1\r
# For VPD type of PCD, its current size is equal to its MAX size.\r
VoidStarTypeCurrSize = [str(Pcd.MaxDatumSize) + 'U'] \r
continue\r
\r
- if Pcd.DatumType == 'VOID*':\r
+ if Pcd.DatumType == TAB_VOID:\r
Pcd.TokenTypeList += ['PCD_TYPE_STRING']\r
Pcd.InitString = 'INIT'\r
if Sku.HiiDefaultValue != '' and Sku.DefaultValue == '':\r
if Pcd.MaxDatumSize != '':\r
MaxDatumSize = int(Pcd.MaxDatumSize, 0)\r
if MaxDatumSize < Size:\r
- EdkLogger.error("build", AUTOGEN_ERROR,\r
+ if Pcd.MaxSizeUserSet:\r
+ EdkLogger.error("build", AUTOGEN_ERROR,\r
"The maximum size of VOID* type PCD '%s.%s' is less than its actual size occupied." % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName),\r
ExtraData="[%s]" % str(Platform))\r
+ else:\r
+ MaxDatumSize = Size\r
else:\r
MaxDatumSize = Size\r
StringTabLen = MaxDatumSize\r
# For UNIT64 type PCD's value, ULL should be append to avoid\r
# warning under linux building environment.\r
#\r
- if Pcd.DatumType == "UINT64":\r
+ if Pcd.DatumType == TAB_UINT64:\r
ValueList.append(Sku.DefaultValue + "ULL")\r
- elif Pcd.DatumType in ("UINT32", "UINT16", "UINT8"):\r
+ elif Pcd.DatumType in (TAB_UINT32, TAB_UINT16, TAB_UINT8):\r
ValueList.append(Sku.DefaultValue + "U")\r
elif Pcd.DatumType == "BOOLEAN":\r
if Sku.DefaultValue in ["1", "0"]:\r
DbValueList.append(Sku.DefaultValue)\r
\r
Pcd.TokenTypeList = list(set(Pcd.TokenTypeList))\r
- if Pcd.DatumType == 'VOID*': \r
+ if Pcd.DatumType == TAB_VOID:\r
Dict['SIZE_TABLE_CNAME'].append(CName)\r
Dict['SIZE_TABLE_GUID'].append(TokenSpaceGuid)\r
Dict['SIZE_TABLE_MAXIMUM_LENGTH'].append(str(Pcd.MaxDatumSize) + 'U')\r