## @file\r
# Routines for generating Pcd Database\r
#\r
-# Copyright (c) 2013 - 2016, 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
-# http://opensource.org/licenses/bsd-license.php\r
+# Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.<BR>\r
+# SPDX-License-Identifier: BSD-2-Clause-Patent\r
#\r
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-#\r
-from StringIO import StringIO\r
+from __future__ import absolute_import\r
+from io import BytesIO\r
from Common.Misc import *\r
-from Common.String import StringToArray\r
+from Common.StringUtils import StringToArray\r
from struct import pack\r
-from ValidCheckingInfoObject import VAR_CHECK_PCD_VARIABLE_TAB_CONTAINER\r
-from ValidCheckingInfoObject import VAR_CHECK_PCD_VARIABLE_TAB\r
-from ValidCheckingInfoObject import VAR_VALID_OBJECT_FACTORY\r
+from .ValidCheckingInfoObject import VAR_CHECK_PCD_VARIABLE_TAB_CONTAINER\r
+from .ValidCheckingInfoObject import VAR_CHECK_PCD_VARIABLE_TAB\r
+from .ValidCheckingInfoObject import GetValidationObject\r
from Common.VariableAttributes import VariableAttributes\r
import copy\r
from struct import unpack\r
+from Common.DataType import *\r
+from Common import GlobalData\r
+from Common import EdkLogger\r
+import Common.LongFilePathOs as os\r
\r
DATABASE_VERSION = 7\r
\r
//UINT32 UninitDataBaseSize;// Total size for PCD those default value with 0.\r
//TABLE_OFFSET LocalTokenNumberTableOffset;\r
//TABLE_OFFSET ExMapTableOffset;\r
- //TABLE_OFFSET GuidTableOffset; \r
+ //TABLE_OFFSET GuidTableOffset;\r
//TABLE_OFFSET StringTableOffset;\r
//TABLE_OFFSET SizeTableOffset;\r
- //TABLE_OFFSET SkuIdTableOffset; \r
+ //TABLE_OFFSET SkuIdTableOffset;\r
//TABLE_OFFSET PcdNameTableOffset;\r
//UINT16 LocalTokenCount; // LOCAL_TOKEN_NUMBER for all\r
//UINT16 ExTokenCount; // EX_TOKEN_NUMBER for DynamicEx\r
#endif\r
""")\r
\r
-## PackGuid\r
-#\r
-# Pack the GUID value in C structure format into data array\r
-#\r
-# @param GuidStructureValue: The GUID value in C structure format\r
-#\r
-# @retval Buffer: a data array contains the Guid\r
-#\r
-def PackGuid(GuidStructureValue):\r
- GuidString = GuidStructureStringToGuidString(GuidStructureValue)\r
- Guid = GuidString.split('-')\r
- Buffer = pack('=LHHBBBBBBBB', \r
- int(Guid[0], 16), \r
- int(Guid[1], 16), \r
- int(Guid[2], 16), \r
- int(Guid[3][-4:-2], 16), \r
- int(Guid[3][-2:], 16),\r
- int(Guid[4][-12:-10], 16),\r
- int(Guid[4][-10:-8], 16),\r
- int(Guid[4][-8:-6], 16),\r
- int(Guid[4][-6:-4], 16),\r
- int(Guid[4][-4:-2], 16),\r
- int(Guid[4][-2:], 16)\r
- )\r
- return Buffer\r
-\r
-def toHex(s):\r
- lst = []\r
- for ch in s:\r
- hv = hex(ord(ch)).replace('0x', ' ')\r
- if len(hv) == 1:\r
- hv = '0'+hv\r
- lst.append(hv)\r
- if lst:\r
- return reduce(lambda x,y:x+y, lst)\r
- else:\r
- return 'empty'\r
## DbItemList\r
#\r
-# The class holds the Pcd database items. ItemSize if not zero should match the item datum type in the C structure. \r
+# The class holds the Pcd database items. ItemSize if not zero should match the item datum type in the C structure.\r
# When the structure is changed, remember to check the ItemSize and the related PackStr in PackData()\r
-# RawDataList is the RawData that may need some kind of calculation or transformation, \r
+# RawDataList is the RawData that may need some kind of calculation or transformation,\r
# the DataList corresponds to the data that need to be written to database. If DataList is not present, then RawDataList\r
-# will be written to the database. \r
+# will be written to the database.\r
#\r
class DbItemList:\r
def __init__(self, ItemSize, DataList=None, RawDataList=None):\r
- if DataList is None:\r
- DataList = []\r
- if RawDataList is None:\r
- RawDataList = []\r
self.ItemSize = ItemSize\r
- self.DataList = DataList\r
- self.RawDataList = RawDataList\r
+ self.DataList = DataList if DataList else []\r
+ self.RawDataList = RawDataList if RawDataList else []\r
self.ListSize = 0\r
\r
def GetInterOffset(self, Index):\r
# Variable length, need to calculate one by one\r
#\r
assert(Index < len(self.RawDataList))\r
- for ItemIndex in xrange(Index):\r
+ for ItemIndex in range(Index):\r
Offset += len(self.RawDataList[ItemIndex])\r
else:\r
- for Datas in self.RawDataList:\r
- Offset = self.ItemSize * Index\r
+ Offset = self.ItemSize * Index\r
\r
return Offset\r
\r
return self.ListSize\r
\r
def PackData(self):\r
- if self.ItemSize == 8:\r
- PackStr = "=Q"\r
- elif self.ItemSize == 4:\r
- PackStr = "=L"\r
- elif self.ItemSize == 2:\r
- PackStr = "=H"\r
- elif self.ItemSize == 1:\r
- PackStr = "=B"\r
- elif self.ItemSize == 0:\r
- PackStr = "=B"\r
- elif self.ItemSize == 16:\r
- # pack Guid\r
- PackStr = ''\r
- else:\r
- # should not reach here\r
- assert(False)\r
+ ## PackGuid\r
+ #\r
+ # Pack the GUID value in C structure format into data array\r
+ #\r
+ # @param GuidStructureValue: The GUID value in C structure format\r
+ #\r
+ # @retval Buffer: a data array contains the Guid\r
+ #\r
+ def PackGuid(GuidStructureValue):\r
+ GuidString = GuidStructureStringToGuidString(GuidStructureValue)\r
+ return PackGUID(GuidString.split('-'))\r
+\r
+ PackStr = PACK_CODE_BY_SIZE[self.ItemSize]\r
\r
- Buffer = ''\r
+ Buffer = bytearray()\r
for Datas in self.RawDataList:\r
if type(Datas) in (list, tuple):\r
for Data in Datas:\r
\r
## DbExMapTblItemList\r
#\r
-# The class holds the ExMap table \r
+# The class holds the ExMap table\r
#\r
class DbExMapTblItemList (DbItemList):\r
def __init__(self, ItemSize, DataList=None, RawDataList=None):\r
- if DataList is None:\r
- DataList = []\r
- if RawDataList is None:\r
- RawDataList = []\r
DbItemList.__init__(self, ItemSize, DataList, RawDataList)\r
+\r
def PackData(self):\r
- Buffer = ''\r
+ Buffer = bytearray()\r
PackStr = "=LHH"\r
for Datas in self.RawDataList:\r
- Buffer += pack(PackStr, \r
+ Buffer += pack(PackStr,\r
GetIntegerValue(Datas[0]),\r
GetIntegerValue(Datas[1]),\r
- GetIntegerValue(Datas[2])) \r
+ GetIntegerValue(Datas[2]))\r
return Buffer\r
\r
## DbComItemList\r
#\r
-# The DbComItemList is a special kind of DbItemList in case that the size of the List can not be computed by the \r
+# The DbComItemList is a special kind of DbItemList in case that the size of the List can not be computed by the\r
# ItemSize multiply the ItemCount.\r
#\r
class DbComItemList (DbItemList):\r
def __init__(self, ItemSize, DataList=None, RawDataList=None):\r
- if DataList is None:\r
- DataList = []\r
- if RawDataList is None:\r
- RawDataList = []\r
DbItemList.__init__(self, ItemSize, DataList, RawDataList)\r
+\r
def GetInterOffset(self, Index):\r
Offset = 0\r
if self.ItemSize == 0:\r
#\r
- # Variable length, need to calculte one by one\r
+ # Variable length, need to calculate one by one\r
# The only variable table is stringtable, it is not Composite item, should not reach here\r
#\r
assert(False)\r
else:\r
assert(Index < len(self.RawDataList))\r
- for ItemIndex in xrange(Index):\r
- Offset += len(self.RawDataList[ItemIndex]) * self.ItemSize \r
+ for ItemIndex in range(Index):\r
+ Offset += len(self.RawDataList[ItemIndex]) * self.ItemSize\r
\r
return Offset\r
\r
return self.ListSize\r
\r
def PackData(self):\r
- if self.ItemSize == 8:\r
- PackStr = "=Q"\r
- elif self.ItemSize == 4:\r
- PackStr = "=L"\r
- elif self.ItemSize == 2:\r
- PackStr = "=H"\r
- elif self.ItemSize == 1:\r
- PackStr = "=B"\r
- elif self.ItemSize == 0:\r
- PackStr = "=B"\r
- else:\r
- assert(False)\r
+ PackStr = PACK_CODE_BY_SIZE[self.ItemSize]\r
\r
- Buffer = ''\r
+ Buffer = bytearray()\r
for DataList in self.RawDataList:\r
for Data in DataList:\r
if type(Data) in (list, tuple):\r
Buffer += pack(PackStr, GetIntegerValue(SingleData))\r
else:\r
Buffer += pack(PackStr, GetIntegerValue(Data))\r
- \r
+\r
return Buffer\r
\r
## DbVariableTableItemList\r
#\r
-# The class holds the Variable header value table \r
+# The class holds the Variable header value table\r
#\r
class DbVariableTableItemList (DbComItemList):\r
def __init__(self, ItemSize, DataList=None, RawDataList=None):\r
- if DataList is None:\r
- DataList = []\r
- if RawDataList is None:\r
- RawDataList = []\r
DbComItemList.__init__(self, ItemSize, DataList, RawDataList)\r
+\r
def PackData(self):\r
PackStr = "=LLHHLHH"\r
- Buffer = ''\r
+ Buffer = bytearray()\r
for DataList in self.RawDataList:\r
for Data in DataList:\r
- Buffer += pack(PackStr, \r
+ Buffer += pack(PackStr,\r
GetIntegerValue(Data[0]),\r
GetIntegerValue(Data[1]),\r
GetIntegerValue(Data[2]),\r
\r
class DbStringHeadTableItemList(DbItemList):\r
def __init__(self,ItemSize,DataList=None,RawDataList=None):\r
- if DataList is None:\r
- DataList = []\r
- if RawDataList is None:\r
- RawDataList = [] \r
DbItemList.__init__(self, ItemSize, DataList, RawDataList)\r
- \r
+\r
def GetInterOffset(self, Index):\r
Offset = 0\r
if self.ItemSize == 0:\r
# Variable length, need to calculate one by one\r
#\r
assert(Index < len(self.RawDataList))\r
- for ItemIndex in xrange(Index):\r
+ for ItemIndex in range(Index):\r
Offset += len(self.RawDataList[ItemIndex])\r
else:\r
for innerIndex in range(Index):\r
self.ListSize += len(Datas) * self.ItemSize\r
else:\r
self.ListSize += self.ItemSize\r
- return self.ListSize \r
+ return self.ListSize\r
\r
## DbSkuHeadTableItemList\r
#\r
-# The class holds the Sku header value table \r
+# The class holds the Sku header value table\r
#\r
class DbSkuHeadTableItemList (DbItemList):\r
def __init__(self, ItemSize, DataList=None, RawDataList=None):\r
- if DataList is None:\r
- DataList = []\r
- if RawDataList is None:\r
- RawDataList = [] \r
DbItemList.__init__(self, ItemSize, DataList, RawDataList)\r
+\r
def PackData(self):\r
PackStr = "=LL"\r
- Buffer = ''\r
+ Buffer = bytearray()\r
for Data in self.RawDataList:\r
- Buffer += pack(PackStr, \r
+ Buffer += pack(PackStr,\r
GetIntegerValue(Data[0]),\r
GetIntegerValue(Data[1]))\r
return Buffer\r
\r
## DbSizeTableItemList\r
#\r
-# The class holds the size table \r
+# The class holds the size table\r
#\r
class DbSizeTableItemList (DbItemList):\r
def __init__(self, ItemSize, DataList=None, RawDataList=None):\r
- if DataList is None:\r
- DataList = []\r
- if RawDataList is None:\r
- RawDataList = [] \r
DbItemList.__init__(self, ItemSize, DataList, RawDataList)\r
+\r
def GetListSize(self):\r
length = 0\r
for Data in self.RawDataList:\r
return length * self.ItemSize\r
def PackData(self):\r
PackStr = "=H"\r
- Buffer = ''\r
+ Buffer = bytearray()\r
for Data in self.RawDataList:\r
- Buffer += pack(PackStr, \r
+ Buffer += pack(PackStr,\r
GetIntegerValue(Data[0]))\r
for subData in Data[1]:\r
- Buffer += pack(PackStr, \r
+ Buffer += pack(PackStr,\r
GetIntegerValue(subData))\r
return Buffer\r
\r
## DbStringItemList\r
#\r
-# The class holds the string table \r
+# The class holds the string table\r
#\r
class DbStringItemList (DbComItemList):\r
def __init__(self, ItemSize, DataList=None, RawDataList=None, LenList=None):\r
RawDataList = []\r
if LenList is None:\r
LenList = []\r
- \r
+\r
assert(len(RawDataList) == len(LenList))\r
DataList = []\r
# adjust DataList according to the LenList\r
- for Index in xrange(len(RawDataList)):\r
+ for Index in range(len(RawDataList)):\r
Len = LenList[Index]\r
RawDatas = RawDataList[Index]\r
assert(Len >= len(RawDatas))\r
ActualDatas = []\r
- for i in xrange(len(RawDatas)):\r
+ for i in range(len(RawDatas)):\r
ActualDatas.append(RawDatas[i])\r
- for i in xrange(len(RawDatas), Len):\r
+ for i in range(len(RawDatas), Len):\r
ActualDatas.append(0)\r
DataList.append(ActualDatas)\r
self.LenList = LenList\r
Offset = 0\r
\r
assert(Index < len(self.LenList))\r
- for ItemIndex in xrange(Index):\r
+ for ItemIndex in range(Index):\r
Offset += self.LenList[ItemIndex]\r
\r
return Offset\r
return Index\r
else:\r
StartPos = Index + 1\r
- \r
+\r
return -1\r
\r
\r
# to List like [0x36, 0x00, 0x34, 0x00, 0x21, 0x00, 0x36, 0x00, 0x34, 0x00, 0x00, 0x00]\r
#\r
# @param StringArray A string array like {0x36, 0x00, 0x34, 0x00, 0x21, 0x00, 0x36, 0x00, 0x34, 0x00, 0x00, 0x00}\r
-# \r
+#\r
# @retval A list object of integer items\r
#\r
def StringArrayToList(StringArray):\r
## Convert TokenType String like "PCD_DATUM_TYPE_UINT32 | PCD_TYPE_HII" to TokenType value\r
#\r
# @param TokenType A TokenType string like "PCD_DATUM_TYPE_UINT32 | PCD_TYPE_HII"\r
-# \r
+#\r
# @retval A integer representation of the TokenType\r
#\r
def GetTokenTypeValue(TokenType):\r
TokenTypeDict = {\r
- "PCD_TYPE_SHIFT":28,\r
- "PCD_TYPE_DATA":(0x0 << 28),\r
- "PCD_TYPE_HII":(0x8 << 28),\r
- "PCD_TYPE_VPD":(0x4 << 28),\r
+ "PCD_TYPE_SHIFT": 28,\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_STRING":(0x1 << 28),\r
+ "PCD_TYPE_STRING": (0x1 << 28),\r
\r
- "PCD_DATUM_TYPE_SHIFT":24,\r
- "PCD_DATUM_TYPE_POINTER":(0x0 << 24),\r
- "PCD_DATUM_TYPE_UINT8":(0x1 << 24),\r
- "PCD_DATUM_TYPE_UINT16":(0x2 << 24),\r
- "PCD_DATUM_TYPE_UINT32":(0x4 << 24),\r
- "PCD_DATUM_TYPE_UINT64":(0x8 << 24),\r
+ "PCD_DATUM_TYPE_SHIFT": 24,\r
+ "PCD_DATUM_TYPE_POINTER": (0x0 << 24),\r
+ "PCD_DATUM_TYPE_UINT8": (0x1 << 24),\r
+ "PCD_DATUM_TYPE_UINT16": (0x2 << 24),\r
+ "PCD_DATUM_TYPE_UINT32": (0x4 << 24),\r
+ "PCD_DATUM_TYPE_UINT64": (0x8 << 24),\r
\r
- "PCD_DATUM_TYPE_SHIFT2":20,\r
- "PCD_DATUM_TYPE_UINT8_BOOLEAN":(0x1 << 20 | 0x1 << 24),\r
+ "PCD_DATUM_TYPE_SHIFT2": 20,\r
+ "PCD_DATUM_TYPE_UINT8_BOOLEAN": (0x1 << 20 | 0x1 << 24),\r
}\r
return eval(TokenType, TokenTypeDict)\r
\r
## construct the external Pcd database using data from Dict\r
#\r
# @param Dict A dictionary contains Pcd related tables\r
-# \r
+#\r
# @retval Buffer A byte stream of the Pcd database\r
#\r
def BuildExDataBase(Dict):\r
DbVardefValueUint32 = DbItemList(4, RawDataList = VardefValueUint32)\r
VpdHeadValue = Dict['VPD_DB_VALUE']\r
DbVpdHeadValue = DbComItemList(4, RawDataList = VpdHeadValue)\r
- ExMapTable = zip(Dict['EXMAPPING_TABLE_EXTOKEN'], Dict['EXMAPPING_TABLE_LOCAL_TOKEN'], Dict['EXMAPPING_TABLE_GUID_INDEX'])\r
+ ExMapTable = list(zip(Dict['EXMAPPING_TABLE_EXTOKEN'], Dict['EXMAPPING_TABLE_LOCAL_TOKEN'], Dict['EXMAPPING_TABLE_GUID_INDEX']))\r
DbExMapTable = DbExMapTblItemList(8, RawDataList = ExMapTable)\r
LocalTokenNumberTable = Dict['LOCAL_TOKEN_NUMBER_DB_VALUE']\r
DbLocalTokenNumberTable = DbItemList(4, RawDataList = LocalTokenNumberTable)\r
NumberOfSkuEnabledPcd = GetIntegerValue(Dict['SKU_HEAD_SIZE'])\r
\r
Dict['STRING_TABLE_DB_VALUE'] = [StringArrayToList(x) for x in Dict['STRING_TABLE_VALUE']]\r
- \r
+\r
StringTableValue = Dict['STRING_TABLE_DB_VALUE']\r
- # when calcute the offset, should use StringTableLen instead of StringTableValue, as string maxium len may be different with actual len\r
+ # when calcute the offset, should use StringTableLen instead of StringTableValue, as string maximum len may be different with actual len\r
StringTableLen = Dict['STRING_TABLE_LENGTH']\r
DbStringTableLen = DbStringItemList(0, RawDataList = StringTableValue, LenList = StringTableLen)\r
\r
- \r
+\r
PcdTokenTable = Dict['PCD_TOKENSPACE']\r
PcdTokenLen = Dict['PCD_TOKENSPACE_LENGTH']\r
PcdTokenTableValue = [StringArrayToList(x) for x in Dict['PCD_TOKENSPACE']]\r
DbPcdTokenTable = DbStringItemList(0, RawDataList = PcdTokenTableValue, LenList = PcdTokenLen)\r
- \r
+\r
PcdCNameTable = Dict['PCD_CNAME']\r
PcdCNameLen = Dict['PCD_CNAME_LENGTH']\r
PcdCNameTableValue = [StringArrayToList(x) for x in Dict['PCD_CNAME']]\r
DbPcdCNameTable = DbStringItemList(0, RawDataList = PcdCNameTableValue, LenList = PcdCNameLen)\r
- \r
+\r
PcdNameOffsetTable = Dict['PCD_NAME_OFFSET']\r
- DbPcdNameOffsetTable = DbItemList(4,RawDataList = PcdNameOffsetTable)\r
- \r
- SizeTableValue = zip(Dict['SIZE_TABLE_MAXIMUM_LENGTH'], Dict['SIZE_TABLE_CURRENT_LENGTH'])\r
+ DbPcdNameOffsetTable = DbItemList(4, RawDataList = PcdNameOffsetTable)\r
+\r
+ SizeTableValue = list(zip(Dict['SIZE_TABLE_MAXIMUM_LENGTH'], Dict['SIZE_TABLE_CURRENT_LENGTH']))\r
DbSizeTableValue = DbSizeTableItemList(2, RawDataList = SizeTableValue)\r
InitValueUint16 = Dict['INIT_DB_VALUE_UINT16']\r
DbInitValueUint16 = DbComItemList(2, RawDataList = InitValueUint16)\r
DbSkuidValue = DbItemList(8, RawDataList = SkuidValue)\r
\r
\r
- \r
+\r
# Unit Db Items\r
UnInitValueUint64 = Dict['UNINIT_GUID_DECL_UINT64']\r
DbUnInitValueUint64 = DbItemList(8, RawDataList = UnInitValueUint64)\r
UnInitValueBoolean = Dict['UNINIT_GUID_DECL_BOOLEAN']\r
DbUnInitValueBoolean = DbItemList(1, RawDataList = UnInitValueBoolean)\r
PcdTokenNumberMap = Dict['PCD_ORDER_TOKEN_NUMBER_MAP']\r
- \r
+\r
DbNameTotle = ["SkuidValue", "InitValueUint64", "VardefValueUint64", "InitValueUint32", "VardefValueUint32", "VpdHeadValue", "ExMapTable",\r
- "LocalTokenNumberTable", "GuidTable", "StringHeadValue", "PcdNameOffsetTable","VariableTable", "StringTableLen", "PcdTokenTable", "PcdCNameTable",\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
+\r
DbTotal = [SkuidValue, InitValueUint64, VardefValueUint64, InitValueUint32, VardefValueUint32, VpdHeadValue, ExMapTable,\r
- LocalTokenNumberTable, GuidTable, StringHeadValue, PcdNameOffsetTable,VariableTable, StringTableLen, PcdTokenTable,PcdCNameTable,\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, DbInitValueUint64, DbVardefValueUint64, DbInitValueUint32, DbVardefValueUint32, DbVpdHeadValue, DbExMapTable,\r
- DbLocalTokenNumberTable, DbGuidTable, DbStringHeadValue, DbPcdNameOffsetTable,DbVariableTable, DbStringTableLen, DbPcdTokenTable, DbPcdCNameTable,\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
+\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 = 80\r
\r
- # Get offset of SkuId table in the database \r
+ # Get offset of SkuId table in the database\r
SkuIdTableOffset = FixedHeaderLen\r
- for DbIndex in xrange(len(DbTotal)):\r
+ for DbIndex in range(len(DbTotal)):\r
if DbTotal[DbIndex] is SkuidValue:\r
break\r
SkuIdTableOffset += DbItemTotal[DbIndex].GetListSize()\r
- \r
- \r
- # Get offset of SkuValue table in the database \r
+\r
+\r
+ # Get offset of SkuValue table in the database\r
\r
# Fix up the LocalTokenNumberTable, SkuHeader table\r
for (LocalTokenNumberTableIndex, (Offset, Table)) in enumerate(LocalTokenNumberTable):\r
DbIndex = 0\r
DbOffset = FixedHeaderLen\r
- for DbIndex in xrange(len(DbTotal)):\r
+ for DbIndex in range(len(DbTotal)):\r
if DbTotal[DbIndex] is Table:\r
DbOffset += DbItemTotal[DbIndex].GetInterOffset(Offset)\r
break\r
TokenTypeValue = GetTokenTypeValue(TokenTypeValue)\r
LocalTokenNumberTable[LocalTokenNumberTableIndex] = DbOffset|int(TokenTypeValue)\r
# if PCD_TYPE_SKU_ENABLED, then we need to fix up the SkuTable\r
- \r
- \r
- \r
\r
- # resolve variable table offset \r
+\r
+\r
+\r
+ # resolve variable table offset\r
for VariableEntries in VariableTable:\r
skuindex = 0\r
for VariableEntryPerSku in VariableEntries:\r
(VariableHeadGuidIndex, VariableHeadStringIndex, SKUVariableOffset, VariableOffset, VariableRefTable, VariableAttribute) = VariableEntryPerSku[:]\r
DbIndex = 0\r
DbOffset = FixedHeaderLen\r
- for DbIndex in xrange(len(DbTotal)):\r
+ for DbIndex in range(len(DbTotal)):\r
if DbTotal[DbIndex] is VariableRefTable:\r
DbOffset += DbItemTotal[DbIndex].GetInterOffset(VariableOffset)\r
break\r
DbOffset += (8 - DbOffset % 8)\r
else:\r
assert(False)\r
- if isinstance(VariableRefTable[0],list):\r
- DbOffset += skuindex * 4 \r
+ if isinstance(VariableRefTable[0], list):\r
+ DbOffset += skuindex * 4\r
skuindex += 1\r
if DbIndex >= InitTableNum:\r
assert(False)\r
\r
# calculate various table offset now\r
DbTotalLength = FixedHeaderLen\r
- for DbIndex in xrange(len(DbItemTotal)):\r
+ for DbIndex in range(len(DbItemTotal)):\r
if DbItemTotal[DbIndex] is DbLocalTokenNumberTable:\r
LocalTokenNumberTableOffset = DbTotalLength\r
elif DbItemTotal[DbIndex] is DbExMapTable:\r
\r
DbTotalLength += DbItemTotal[DbIndex].GetListSize()\r
if not Dict['PCD_INFO_FLAG']:\r
- DbPcdNameOffset = 0 \r
+ DbPcdNameOffset = 0\r
LocalTokenCount = GetIntegerValue(Dict['LOCAL_TOKEN_NUMBER'])\r
ExTokenCount = GetIntegerValue(Dict['EX_TOKEN_NUMBER'])\r
GuidTableCount = GetIntegerValue(Dict['GUID_TABLE_SIZE'])\r
SystemSkuId = GetIntegerValue(Dict['SYSTEM_SKU_ID_VALUE'])\r
Pad = 0xDA\r
- \r
+\r
UninitDataBaseSize = 0\r
for Item in (DbUnInitValueUint64, DbUnInitValueUint32, DbUnInitValueUint16, DbUnInitValueUint8, DbUnInitValueBoolean):\r
UninitDataBaseSize += Item.GetListSize()\r
- \r
+\r
if (DbTotalLength - UninitDataBaseSize) % 8:\r
DbTotalLength += (8 - (DbTotalLength - UninitDataBaseSize) % 8)\r
# Construct the database buffer\r
Guid = "{0x3c7d193c, 0x682c, 0x4c14, 0xa6, 0x8f, 0x55, 0x2d, 0xea, 0x4f, 0x43, 0x7e}"\r
Guid = StringArrayToList(Guid)\r
- Buffer = pack('=LHHBBBBBBBB', \r
- Guid[0], \r
- Guid[1], \r
- Guid[2], \r
- Guid[3], \r
- Guid[4], \r
- Guid[5],\r
- Guid[6],\r
- Guid[7],\r
- Guid[8],\r
- Guid[9],\r
- Guid[10],\r
- )\r
+ Buffer = PackByteFormatGUID(Guid)\r
\r
b = pack("=L", DATABASE_VERSION)\r
Buffer += b\r
\r
Buffer += b\r
b = pack('=L', ExMapTableOffset)\r
- \r
+\r
Buffer += b\r
b = pack('=L', GuidTableOffset)\r
\r
\r
Buffer += b\r
b = pack('=H', GuidTableCount)\r
- \r
+\r
Buffer += b\r
b = pack('=B', Pad)\r
Buffer += b\r
Buffer += b\r
Buffer += b\r
Buffer += b\r
- \r
+\r
Index = 0\r
for Item in DbItemTotal:\r
Index +=1\r
- b = Item.PackData()\r
- Buffer += b \r
+ packdata = Item.PackData()\r
+ for i in range(len(packdata)):\r
+ Buffer += packdata[i:i + 1]\r
if Index == InitTableNum:\r
if len(Buffer) % 8:\r
for num in range(8 - len(Buffer) % 8):\r
b = pack('=B', Pad)\r
Buffer += b\r
- break \r
+ break\r
return Buffer\r
\r
## Create code for PCD database\r
AutoGenC.Append(AdditionalAutoGenC.String)\r
\r
if Info.IsBinaryModule:\r
- DbFileName = os.path.join(Info.PlatformInfo.BuildDir, "FV", Phase + "PcdDataBase.raw")\r
+ DbFileName = os.path.join(Info.PlatformInfo.BuildDir, TAB_FV_DIRECTORY, Phase + "PcdDataBase.raw")\r
else:\r
DbFileName = os.path.join(Info.OutputDir, Phase + "PcdDataBase.raw")\r
- DbFile = StringIO()\r
+ DbFile = BytesIO()\r
DbFile.write(PcdDbBuffer)\r
Changed = SaveFileOnChange(DbFileName, DbFile.getvalue(), True)\r
def CreatePcdDataBase(PcdDBData):\r
delta = {}\r
- basedata = {}\r
- if not PcdDBData:\r
- return ""\r
- for skuname,skuid in PcdDBData:\r
- if len(PcdDBData[(skuname,skuid)][1]) != len(PcdDBData[("DEFAULT","0")][1]):\r
+ for skuname, skuid in PcdDBData:\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
+ for skuname, skuid in PcdDBData:\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
+ 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("=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
+ 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
+ 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
+ newbuffer += totallenbuff[i:i+1]\r
+ for i in range(36, totallen):\r
+ newbuffer += databasebuff[i:i+1]\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
+ 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
+ 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 TAB_PCD_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
+ 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
+ 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
+ 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
+ for item in range(len(PcdDbBuffer)):\r
+ final_data += unpack("B", PcdDbBuffer[item:item+1])\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
+ dest = os.path.join(Platform.BuildDir, TAB_FV_DIRECTORY)\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
+ AdditionalAutoGenH, AdditionalAutoGenC, PcdDbBuffer, VarCheckTab = CreatePcdDatabasePhaseSpecificAutoGen (Platform, {}, Phase)\r
+ final_data = ()\r
+ for item in range(len(PcdDbBuffer)):\r
+ final_data += unpack("B", PcdDbBuffer[item:item + 1])\r
+ PcdDBData[(TAB_DEFAULT, "0")] = (PcdDbBuffer, final_data)\r
\r
- PcdDbBuffer = CreatePcdDataBase(PcdDBData)\r
- return AdditionalAutoGenH, AdditionalAutoGenC, PcdDbBuffer\r
+ return AdditionalAutoGenH, AdditionalAutoGenC, CreatePcdDataBase(PcdDBData)\r
## Create PCD database in DXE or PEI phase\r
#\r
# @param Platform The platform object\r
'SKUID_TABLE_EMPTY' : 'TRUE',\r
'DATABASE_EMPTY' : 'TRUE',\r
'EXMAP_TABLE_EMPTY' : 'TRUE',\r
- 'PCD_DATABASE_UNINIT_EMPTY' : ' UINT8 dummy; /* PCD_DATABASE_UNINIT is emptry */',\r
+ 'PCD_DATABASE_UNINIT_EMPTY' : ' UINT8 dummy; /* PCD_DATABASE_UNINIT is empty */',\r
'SYSTEM_SKU_ID' : ' SKU_ID SystemSkuId;',\r
'SYSTEM_SKU_ID_VALUE' : '0U'\r
}\r
- \r
+\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
- 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
Dict['VARDEF_VALUE_' + DatumType] = []\r
Dict['VARDEF_DB_VALUE_' + DatumType] = []\r
- for Init in ['INIT','UNINIT']:\r
+ for Init in ['INIT', 'UNINIT']:\r
Dict[Init+'_CNAME_DECL_' + DatumType] = []\r
Dict[Init+'_GUID_DECL_' + DatumType] = []\r
Dict[Init+'_NUMSKUS_DECL_' + DatumType] = []\r
Dict[Init+'_VALUE_' + DatumType] = []\r
Dict[Init+'_DB_VALUE_'+DatumType] = []\r
- \r
- for Type in ['STRING_HEAD','VPD_HEAD','VARIABLE_HEAD']:\r
+\r
+ for Type in ['STRING_HEAD', 'VPD_HEAD', 'VARIABLE_HEAD']:\r
Dict[Type + '_CNAME_DECL'] = []\r
Dict[Type + '_GUID_DECL'] = []\r
Dict[Type + '_NUMSKUS_DECL'] = []\r
Dict['STRING_DB_VALUE'] = []\r
Dict['VPD_DB_VALUE'] = []\r
Dict['VARIABLE_DB_VALUE'] = []\r
- \r
+\r
Dict['STRING_TABLE_INDEX'] = []\r
Dict['STRING_TABLE_LENGTH'] = []\r
Dict['STRING_TABLE_CNAME'] = []\r
\r
Dict['LOCAL_TOKEN_NUMBER_DB_VALUE'] = []\r
Dict['VARIABLE_DB_VALUE'] = []\r
- \r
+\r
Dict['PCD_TOKENSPACE'] = []\r
- Dict['PCD_CNAME'] = [] \r
+ Dict['PCD_CNAME'] = []\r
Dict['PCD_TOKENSPACE_LENGTH'] = []\r
Dict['PCD_CNAME_LENGTH'] = []\r
Dict['PCD_TOKENSPACE_OFFSET'] = []\r
Dict['PCD_CNAME_OFFSET'] = []\r
Dict['PCD_TOKENSPACE_MAP'] = []\r
Dict['PCD_NAME_OFFSET'] = []\r
- \r
+\r
Dict['PCD_ORDER_TOKEN_NUMBER_MAP'] = {}\r
PCD_STRING_INDEX_MAP = {}\r
- \r
+\r
StringTableIndex = 0\r
StringTableSize = 0\r
NumberOfLocalTokens = 0\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
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
#\r
TokenSpaceGuidStructure = Pcd.TokenSpaceGuidValue\r
TokenSpaceGuid = GuidStructureStringToGuidValueName(TokenSpaceGuidStructure)\r
- if Pcd.Type in gDynamicExPcd:\r
+ if Pcd.Type in PCD_DYNAMIC_EX_TYPE_SET:\r
if TokenSpaceGuid not in GuidList:\r
- GuidList += [TokenSpaceGuid]\r
+ GuidList.append(TokenSpaceGuid)\r
Dict['GUID_STRUCTURE'].append(TokenSpaceGuidStructure)\r
NumberOfExTokens += 1\r
\r
VariableDbValueList = []\r
Pcd.InitString = 'UNINIT'\r
\r
- if Pcd.DatumType == 'VOID*':\r
- if Pcd.Type not in ["DynamicVpd", "DynamicExVpd"]:\r
+ if Pcd.DatumType == TAB_VOID:\r
+ if Pcd.Type not in [TAB_PCDS_DYNAMIC_VPD, TAB_PCDS_DYNAMIC_EX_VPD]:\r
Pcd.TokenTypeList = ['PCD_TYPE_STRING']\r
else:\r
Pcd.TokenTypeList = []\r
Pcd.TokenTypeList = ['PCD_DATUM_TYPE_' + Pcd.DatumType]\r
\r
if len(Pcd.SkuInfoList) > 1:\r
-# Pcd.TokenTypeList += ['PCD_TYPE_SKU_ENABLED']\r
NumberOfSkuEnabledPcd += 1\r
- \r
- SkuIdIndex = 1 \r
+\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
- \r
+\r
SkuIdIndex += 1\r
- \r
+\r
if len(Sku.VariableName) > 0:\r
VariableGuidStructure = Sku.VariableGuidValue\r
VariableGuid = GuidStructureStringToGuidValueName(VariableGuidStructure)\r
if Platform.Platform.VarCheckFlag:\r
var_check_obj = VAR_CHECK_PCD_VARIABLE_TAB(VariableGuidStructure, StringToArray(Sku.VariableName))\r
try:\r
- var_check_obj.push_back(VAR_VALID_OBJECT_FACTORY.Get_valid_object(Pcd, Sku.VariableOffset))\r
+ var_check_obj.push_back(GetValidationObject(Pcd, Sku.VariableOffset))\r
VarAttr, _ = VariableAttributes.GetVarAttributes(Sku.VariableAttribute)\r
var_check_obj.SetAttributes(VarAttr)\r
var_check_obj.UpdateSize()\r
else:\r
EdkLogger.error("build", PCD_VALIDATION_INFO_ERROR,\r
"The PCD '%s.%s' Validation information defined in DEC file has incorrect format." % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName))\r
- Pcd.TokenTypeList += ['PCD_TYPE_HII']\r
+ Pcd.TokenTypeList.append('PCD_TYPE_HII')\r
Pcd.InitString = 'INIT'\r
# Store all variable names of one HII PCD under different SKU to stringTable\r
# and calculate the VariableHeadStringIndex\r
\r
VariableNameStructure = StringToArray(Sku.VariableName)\r
+\r
+ # Make pointer of VaraibleName(HII PCD) 2 bytes aligned\r
+ VariableNameStructureBytes = VariableNameStructure.lstrip("{").rstrip("}").split(",")\r
+ if len(VariableNameStructureBytes) % 2:\r
+ VariableNameStructure = "{%s,0x00}" % ",".join(VariableNameStructureBytes)\r
+\r
if VariableNameStructure not in Dict['STRING_TABLE_VALUE']:\r
Dict['STRING_TABLE_CNAME'].append(CName)\r
Dict['STRING_TABLE_GUID'].append(TokenSpaceGuid)\r
Dict['STRING_TABLE_INDEX'].append('')\r
else:\r
Dict['STRING_TABLE_INDEX'].append('_%d' % StringTableIndex)\r
- VarNameSize = len(VariableNameStructure.replace(',',' ').split())\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.append(StringTableSize)\r
Dict['STRING_DB_VALUE'].append(VarStringDbOffsetList)\r
StringTableIndex += 1\r
- StringTableSize += len(VariableNameStructure.replace(',',' ').split())\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
+\r
VariableHeadStringIndex = VariableHeadList[SkuIdIndex - 2]\r
# store VariableGuid to GuidTable and get the VariableHeadGuidIndex\r
\r
if VariableGuid not in GuidList:\r
- GuidList += [VariableGuid]\r
+ GuidList.append(VariableGuid)\r
Dict['GUID_STRUCTURE'].append(VariableGuidStructure)\r
VariableHeadGuidIndex = GuidList.index(VariableGuid)\r
\r
if "PCD_TYPE_STRING" in Pcd.TokenTypeList:\r
VariableHeadValueList.append('%dU, offsetof(%s_PCD_DATABASE, Init.%s_%s), %dU, %sU' %\r
- (VariableHeadStringIndex, Phase, CName, TokenSpaceGuid, \r
+ (VariableHeadStringIndex, Phase, CName, TokenSpaceGuid,\r
VariableHeadGuidIndex, Sku.VariableOffset))\r
else:\r
VariableHeadValueList.append('%dU, offsetof(%s_PCD_DATABASE, Init.%s_%s_VariableDefault_%s), %dU, %sU' %\r
- (VariableHeadStringIndex, Phase, CName, TokenSpaceGuid, SkuIdIndex, \r
+ (VariableHeadStringIndex, Phase, CName, TokenSpaceGuid, SkuIdIndex,\r
VariableHeadGuidIndex, Sku.VariableOffset))\r
Dict['VARDEF_CNAME_'+Pcd.DatumType].append(CName)\r
Dict['VARDEF_GUID_'+Pcd.DatumType].append(TokenSpaceGuid)\r
# warning under linux building environment.\r
#\r
Dict['VARDEF_DB_VALUE_'+Pcd.DatumType].append(Sku.HiiDefaultValue)\r
- \r
- if Pcd.DatumType == "UINT64":\r
+\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
+ if eval(Sku.HiiDefaultValue) in [1, 0]:\r
Dict['VARDEF_VALUE_'+Pcd.DatumType].append(str(eval(Sku.HiiDefaultValue)) + "U")\r
else:\r
Dict['VARDEF_VALUE_'+Pcd.DatumType].append(Sku.HiiDefaultValue)\r
VariableDbValueList.append([VariableHeadGuidIndex, VariableHeadStringIndex, Sku.VariableOffset, VariableOffset, VariableRefTable, Sku.VariableAttribute])\r
\r
elif Sku.VpdOffset != '':\r
- Pcd.TokenTypeList += ['PCD_TYPE_VPD']\r
+ Pcd.TokenTypeList.append('PCD_TYPE_VPD')\r
Pcd.InitString = 'INIT'\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
+ # Also add the VOID* string of VPD PCD to SizeTable\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
+ VoidStarTypeCurrSize = [str(Pcd.MaxDatumSize) + 'U']\r
continue\r
- \r
- if Pcd.DatumType == 'VOID*':\r
- Pcd.TokenTypeList += ['PCD_TYPE_STRING']\r
+\r
+ if Pcd.DatumType == TAB_VOID:\r
+ Pcd.TokenTypeList.append('PCD_TYPE_STRING')\r
Pcd.InitString = 'INIT'\r
if Sku.HiiDefaultValue != '' and Sku.DefaultValue == '':\r
Sku.DefaultValue = Sku.HiiDefaultValue\r
Dict['STRING_TABLE_INDEX'].append('_%d' % StringTableIndex)\r
if Sku.DefaultValue[0] == 'L':\r
DefaultValueBinStructure = StringToArray(Sku.DefaultValue)\r
- Size = len(DefaultValueBinStructure.replace(',',' ').split())\r
+ Size = len(DefaultValueBinStructure.replace(',', ' ').split())\r
Dict['STRING_TABLE_VALUE'].append(DefaultValueBinStructure)\r
elif Sku.DefaultValue[0] == '"':\r
DefaultValueBinStructure = StringToArray(Sku.DefaultValue)\r
DefaultValueBinStructure = StringToArray(Sku.DefaultValue)\r
Size = len(Sku.DefaultValue.split(","))\r
Dict['STRING_TABLE_VALUE'].append(DefaultValueBinStructure)\r
- \r
+\r
StringHeadOffsetList.append(str(StringTableSize) + 'U')\r
StringDbOffsetList.append(StringTableSize)\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
StringTableSize += (StringTabLen)\r
else:\r
if "PCD_TYPE_HII" not in Pcd.TokenTypeList:\r
- Pcd.TokenTypeList += ['PCD_TYPE_DATA']\r
+ Pcd.TokenTypeList.append('PCD_TYPE_DATA')\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
#\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
- ValueList.append(Sku.DefaultValue + "U") \r
+ ValueList.append(Sku.DefaultValue + "U")\r
else:\r
ValueList.append(Sku.DefaultValue)\r
- \r
+\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
Dict['SIZE_TABLE_CURRENT_LENGTH'].append(VoidStarTypeCurrSize)\r
- \r
- \r
+\r
+\r
\r
if 'PCD_TYPE_HII' in Pcd.TokenTypeList:\r
Dict['VARIABLE_HEAD_CNAME_DECL'].append(CName)\r
else:\r
Dict[Pcd.InitString+'_VALUE_'+Pcd.DatumType].append(', '.join(ValueList))\r
Dict[Pcd.InitString+'_DB_VALUE_'+Pcd.DatumType].append(DbValueList)\r
- \r
+\r
if Phase == 'PEI':\r
NumberOfLocalTokens = NumberOfPeiLocalTokens\r
if Phase == 'DXE':\r
Dict['TOKEN_TYPE'] = ['' for x in range(NumberOfLocalTokens)]\r
Dict['LOCAL_TOKEN_NUMBER_DB_VALUE'] = ['' for x in range(NumberOfLocalTokens)]\r
Dict['PCD_CNAME'] = ['' for x in range(NumberOfLocalTokens)]\r
- Dict['PCD_TOKENSPACE_MAP'] = ['' for x in range(NumberOfLocalTokens)] \r
+ Dict['PCD_TOKENSPACE_MAP'] = ['' for x in range(NumberOfLocalTokens)]\r
Dict['PCD_CNAME_LENGTH'] = [0 for x in range(NumberOfLocalTokens)]\r
SkuEnablePcdIndex = 0\r
for Pcd in ReorderedDynPcdList:\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
+\r
#\r
# following four Dict items hold the information for LocalTokenNumberTable\r
#\r
Dict['TOKEN_CNAME'][GeneratedTokenNumber] = CName\r
Dict['TOKEN_GUID'][GeneratedTokenNumber] = TokenSpaceGuid\r
Dict['TOKEN_TYPE'][GeneratedTokenNumber] = ' | '.join(Pcd.TokenTypeList)\r
- \r
+\r
if Platform.Platform.PcdInfoFlag:\r
TokenSpaceGuidCNameArray = StringToArray('"' + TokenSpaceGuidCName + '"' )\r
if TokenSpaceGuidCNameArray not in Dict['PCD_TOKENSPACE']:\r
Dict['PCD_TOKENSPACE_MAP'][GeneratedTokenNumber] = Dict['PCD_TOKENSPACE'].index(TokenSpaceGuidCNameArray)\r
CNameBinArray = StringToArray('"' + CName + '"' )\r
Dict['PCD_CNAME'][GeneratedTokenNumber] = CNameBinArray\r
- \r
+\r
Dict['PCD_CNAME_LENGTH'][GeneratedTokenNumber] = len(CNameBinArray.split(","))\r
- \r
- \r
+\r
+\r
Pcd.TokenTypeList = list(set(Pcd.TokenTypeList))\r
\r
# search the Offset and Table, used by LocalTokenNumberTableOffset\r
if Pcd.InitString == 'UNINIT':\r
Table = Dict[Pcd.InitString+'_GUID_DECL_'+Pcd.DatumType]\r
else:\r
- Table = Dict[Pcd.InitString+'_DB_VALUE_'+Pcd.DatumType] \r
+ Table = Dict[Pcd.InitString+'_DB_VALUE_'+Pcd.DatumType]\r
Dict['LOCAL_TOKEN_NUMBER_DB_VALUE'][GeneratedTokenNumber] = (Offset, Table)\r
\r
#\r
Dict['VARDEF_HEADER'][GeneratedTokenNumber] = '_Variable_Header'\r
else:\r
Dict['VARDEF_HEADER'][GeneratedTokenNumber] = ''\r
- \r
- \r
- if Pcd.Type in gDynamicExPcd:\r
- \r
+\r
+\r
+ if Pcd.Type in PCD_DYNAMIC_EX_TYPE_SET:\r
+\r
if Phase == 'DXE':\r
GeneratedTokenNumber += NumberOfPeiLocalTokens\r
#\r
# Therefore, 1 is added to GeneratedTokenNumber to generate a PCD Token Number before being inserted\r
# to the EXMAPPING_TABLE.\r
#\r
- \r
+\r
\r
Dict['EXMAPPING_TABLE_EXTOKEN'].append(str(Pcd.TokenValue) + 'U')\r
Dict['EXMAPPING_TABLE_LOCAL_TOKEN'].append(str(GeneratedTokenNumber + 1) + 'U')\r
TokenSpaceIndex = StringTableSize\r
for i in range(Dict['PCD_TOKENSPACE_MAP'][index]):\r
TokenSpaceIndex += Dict['PCD_TOKENSPACE_LENGTH'][i]\r
- Dict['PCD_TOKENSPACE_OFFSET'].append(TokenSpaceIndex) \r
+ Dict['PCD_TOKENSPACE_OFFSET'].append(TokenSpaceIndex)\r
for index in range(len(Dict['PCD_TOKENSPACE'])):\r
StringTableSize += Dict['PCD_TOKENSPACE_LENGTH'][index]\r
StringTableIndex += 1\r
for index in range(len(Dict['PCD_CNAME'])):\r
- Dict['PCD_CNAME_OFFSET'].append(StringTableSize) \r
+ Dict['PCD_CNAME_OFFSET'].append(StringTableSize)\r
Dict['PCD_NAME_OFFSET'].append(Dict['PCD_TOKENSPACE_OFFSET'][index])\r
Dict['PCD_NAME_OFFSET'].append(StringTableSize)\r
StringTableSize += Dict['PCD_CNAME_LENGTH'][index]\r
\r
if NumberOfSizeItems != 0:\r
Dict['SIZE_TABLE_SIZE'] = str(NumberOfSizeItems * 2) + 'U'\r
- \r
- if NumberOfSkuEnabledPcd != 0: \r
+\r
+ if NumberOfSkuEnabledPcd != 0:\r
Dict['SKU_HEAD_SIZE'] = str(NumberOfSkuEnabledPcd) + 'U'\r
- \r
+\r
for AvailableSkuNumber in SkuObj.SkuIdNumberSet:\r
if AvailableSkuNumber not in Dict['SKUID_VALUE']:\r
Dict['SKUID_VALUE'].append(AvailableSkuNumber)\r
Dict['SKUID_VALUE'][0] = len(Dict['SKUID_VALUE']) - 1\r
- \r
+\r
AutoGenH.Append(gPcdDatabaseAutoGenH.Replace(Dict))\r
if NumberOfLocalTokens == 0:\r
AutoGenC.Append(gEmptyPcdDatabaseAutoGenC.Replace(Dict))\r
SizeCurLenTempList = []\r
SizeMaxLenTempList = []\r
ReOrderFlag = True\r
- \r
+\r
if len(Dict['SIZE_TABLE_CNAME']) == 1:\r
if not (Dict['SIZE_TABLE_CNAME'][0] and Dict['SIZE_TABLE_GUID'][0]):\r
ReOrderFlag = False\r
- \r
+\r
if ReOrderFlag:\r
for Count in range(len(Dict['TOKEN_CNAME'])):\r
for Count1 in range(len(Dict['SIZE_TABLE_CNAME'])):\r
SizeGuidTempList.append(Dict['SIZE_TABLE_GUID'][Count1])\r
SizeCurLenTempList.append(Dict['SIZE_TABLE_CURRENT_LENGTH'][Count1])\r
SizeMaxLenTempList.append(Dict['SIZE_TABLE_MAXIMUM_LENGTH'][Count1])\r
- \r
+\r
for Count in range(len(Dict['SIZE_TABLE_CNAME'])):\r
Dict['SIZE_TABLE_CNAME'][Count] = SizeCNameTempList[Count]\r
Dict['SIZE_TABLE_GUID'][Count] = SizeGuidTempList[Count]\r
Dict['SIZE_TABLE_CURRENT_LENGTH'][Count] = SizeCurLenTempList[Count]\r
Dict['SIZE_TABLE_MAXIMUM_LENGTH'][Count] = SizeMaxLenTempList[Count]\r
- \r
+\r
AutoGenC.Append(gPcdDatabaseAutoGenC.Replace(Dict))\r
- \r
+\r
\r
# print Phase\r
Buffer = BuildExDataBase(Dict)\r
- return AutoGenH, AutoGenC, Buffer,VarCheckTab\r
+ return AutoGenH, AutoGenC, Buffer, VarCheckTab\r
\r
def GetOrderedDynamicPcdList(DynamicPcdList, PcdTokenNumberList):\r
ReorderedDyPcdList = [None for i in range(len(DynamicPcdList))]\r