import copy\r
from struct import unpack\r
from Common.DataType import *\r
-from GenVar import PackGUID\r
\r
DATABASE_VERSION = 7\r
\r
GuidString = GuidStructureStringToGuidString(GuidStructureValue)\r
return PackGUID(GuidString.split('-'))\r
\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
+ PackStr = PACK_CODE_BY_SIZE[self.ItemSize]\r
\r
Buffer = ''\r
for Datas in self.RawDataList:\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
for DataList in self.RawDataList:\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
NvStorageHeaderSize = 28\r
VariableHeaderSize = 32\r
\r
-def PackGUID(Guid):\r
- GuidBuffer = 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 GuidBuffer\r
-\r
class VariableMgr(object):\r
def __init__(self, DefaultStoreMap,SkuIdMap):\r
self.VarInfo = []\r
data_type = item.data_type\r
value_list = item.default_value.strip("{").strip("}").split(",")\r
if data_type in DataType.TAB_PCD_NUMERIC_TYPES:\r
- if data_type == ["BOOLEAN", DataType.TAB_UINT8]:\r
- data_flag = "=B"\r
- elif data_type == DataType.TAB_UINT16:\r
- data_flag = "=H"\r
- elif data_type == DataType.TAB_UINT32:\r
- data_flag = "=L"\r
- elif data_type == DataType.TAB_UINT64:\r
- data_flag = "=Q"\r
+ data_flag = DataType.PACK_CODE_BY_SIZE[MAX_SIZE_TYPE[data_type]]\r
data = value_list[0]\r
value_list = []\r
for data_byte in pack(data_flag,int(data,16) if data.upper().startswith('0X') else int(data)):\r
\r
def dump(self, dest, Phase):\r
\r
- FormatMap = {}\r
- FormatMap[1] = "=B"\r
- FormatMap[2] = "=H"\r
- FormatMap[4] = "=L"\r
- FormatMap[8] = "=Q"\r
- \r
if not os.path.isabs(dest):\r
return\r
if not os.path.exists(dest):\r
realLength += 4\r
\r
Guid = var_check_tab.Guid\r
- b = 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
+ b = PackByteFormatGUID(Guid)\r
Buffer += b\r
realLength += 16\r
\r
realLength += 1\r
for v_data in item.data:\r
if type(v_data) in (int, long):\r
- b = pack(FormatMap[item.StorageWidth], v_data)\r
+ b = pack(PACK_CODE_BY_SIZE[item.StorageWidth], v_data)\r
Buffer += b\r
realLength += item.StorageWidth\r
else:\r
- b = pack(FormatMap[item.StorageWidth], v_data[0])\r
+ b = pack(PACK_CODE_BY_SIZE[item.StorageWidth], v_data[0])\r
Buffer += b\r
realLength += item.StorageWidth\r
- b = pack(FormatMap[item.StorageWidth], v_data[1])\r
+ b = pack(PACK_CODE_BY_SIZE[item.StorageWidth], v_data[1])\r
Buffer += b\r
realLength += item.StorageWidth\r
\r
PCDS_DYNAMICEX_HII.upper(),\r
TAB_BUILD_OPTIONS.upper(),\r
TAB_INCLUDES.upper()}\r
+\r
+#\r
+# pack codes as used in PcdDb and elsewhere\r
+#\r
+PACK_PATTERN_GUID = '=LHHBBBBBBBB'\r
+PACK_CODE_BY_SIZE = {8:'=Q',\r
+ 4:'=L',\r
+ 2:'=H',\r
+ 1:'=B',\r
+ 0:'=B',\r
+ 16:""}\r
# Pack a registry format GUID\r
#\r
def PackRegistryFormatGuid(Guid):\r
- Guid = Guid.split('-')\r
- return 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 PackGUID(Guid.split('-'))\r
\r
## Get the integer value from string like "14U" or integer like 2\r
#\r
else:\r
return int(String)\r
\r
+#\r
+# Pack a GUID (registry format) list into a buffer and return it\r
+#\r
+def PackGUID(Guid):\r
+ return pack(PACK_PATTERN_GUID,\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
+\r
+#\r
+# Pack a GUID (byte) list into a buffer and return it\r
+#\r
+def PackByteFormatGUID(Guid):\r
+ return pack(PACK_PATTERN_GUID,\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
+\r
##\r
#\r
# This acts like the main() function for the script, unless it is 'import'ed into another\r
from GenFdsGlobalVariable import GenFdsGlobalVariable\r
from GenFds import GenFds\r
from CommonDataClass.FdfClass import FvClassObject\r
-from Common.Misc import SaveFileOnChange\r
+from Common.Misc import SaveFileOnChange, PackGUID\r
from Common.LongFilePathSupport import CopyLongFilePath\r
from Common.LongFilePathSupport import OpenLongFilePath as open\r
from Common.DataType import *\r
# FV UI name\r
#\r
Buffer += (pack('HH', (FvUiLen + 16 + 4), 0x0002)\r
- + pack('=LHHBBBBBBBB', int(Guid[0], 16), int(Guid[1], 16), int(Guid[2], 16),\r
- int(Guid[3][-4:-2], 16), int(Guid[3][-2:], 16), int(Guid[4][-12:-10], 16),\r
- int(Guid[4][-10:-8], 16), int(Guid[4][-8:-6], 16), int(Guid[4][-6:-4], 16),\r
- int(Guid[4][-4:-2], 16), int(Guid[4][-2:], 16))\r
+ + PackGUID(Guid)\r
+ self.UiFvName)\r
\r
for Index in range (0, len(self.FvExtEntryType)):\r
Buffer += pack('B', int(ByteList[Index1], 16))\r
\r
Guid = self.FvNameGuid.split('-')\r
- Buffer = pack('=LHHBBBBBBBBL', \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
- TotalSize\r
- ) + Buffer\r
+ Buffer = PackGUID(Guid) + pack('=L', TotalSize) + Buffer\r
\r
#\r
# Generate FV extension header file if the total size is not zero\r
Statement = gOpCodeList[struct.unpack("B", OpCode)[0]]\r
if Statement in ["BEFORE", "AFTER", "PUSH"]:\r
GuidValue = "%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X" % \\r
- struct.unpack("=LHHBBBBBBBB", DepexFile.read(16))\r
+ struct.unpack(PACK_PATTERN_GUID, DepexFile.read(16))\r
GuidString = self._GuidDb.get(GuidValue, GuidValue)\r
Statement = "%s %s" % (Statement, GuidString)\r
DepexStatement.append(Statement)\r