//GUID Signature; // PcdDataBaseGuid\r
//UINT32 BuildVersion;\r
//UINT32 Length;\r
- //SKU_ID SystemSkuId; // Current SkuId value.\r
+ //SKU_ID SystemSkuId; // Current SkuId value.\r
+ //UINT32 LengthForAllSkus; // Length of all SKU PCD DB\r
//UINT32 UninitDataBaseSize;// Total size for PCD those default value with 0.\r
//TABLE_OFFSET LocalTokenNumberTableOffset;\r
//TABLE_OFFSET ExMapTableOffset;\r
//UINT16 LocalTokenCount; // LOCAL_TOKEN_NUMBER for all\r
//UINT16 ExTokenCount; // EX_TOKEN_NUMBER for DynamicEx\r
//UINT16 GuidTableCount; // The Number of Guid in GuidTable\r
- //UINT8 Pad[2];\r
+ //UINT8 Pad[6];\r
${PHASE}_PCD_DATABASE_INIT Init;\r
${PHASE}_PCD_DATABASE_UNINIT Uninit;\r
} ${PHASE}_PCD_DATABASE;\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 = 76\r
+ FixedHeaderLen = 80\r
\r
# Get offset of SkuId table in the database \r
SkuIdTableOffset = FixedHeaderLen\r
\r
Buffer += b\r
b = pack('=B', Pad)\r
-\r
Buffer += b\r
- b = pack('=B', Pad)\r
- \r
+ Buffer += b\r
+ Buffer += b\r
+ Buffer += b\r
+ Buffer += b\r
Buffer += b\r
\r
Index = 0\r
databasebuff = PcdDBData[("DEFAULT","0")][0]\r
\r
for skuname,skuid in delta:\r
- databasebuff += pack('=H', int(skuid))\r
- databasebuff += pack('=H', 0)\r
- databasebuff += pack('=L', 8+4*len(delta[(skuname,skuid)]))\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('=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
def PatchNVStoreDefaultMaxSize(self,maxsize):\r
if not self.NVHeaderBuff:\r
return ""\r
- self.NVHeaderBuff = self.NVHeaderBuff[:8] + pack("=L",maxsize)\r
+ self.NVHeaderBuff = self.NVHeaderBuff[:8] + pack("=Q",maxsize)\r
default_var_bin = self.format_data(self.NVHeaderBuff + self.VarDefaultBuff + self.VarDeltaBuff)\r
value_str = "{"\r
default_var_bin_strip = [ data.strip("""'""") for data in default_var_bin]\r
\r
variable_storage_header_buffer = self.PACK_VARIABLE_STORE_HEADER(len(NvStoreDataBuffer) + 28)\r
\r
- nv_default_part = self.AlignData(self.PACK_DEFAULT_DATA(0, 0, self.unpack_data(variable_storage_header_buffer+NvStoreDataBuffer)))\r
+ nv_default_part = self.AlignData(self.PACK_DEFAULT_DATA(0, 0, self.unpack_data(variable_storage_header_buffer+NvStoreDataBuffer)), 8)\r
\r
data_delta_structure_buffer = ""\r
for skuname,defaultstore in var_data:\r
delta_data = [(item[0] + offset, item[1]) for item in delta_data]\r
delta_data_set.extend(delta_data)\r
\r
- data_delta_structure_buffer += self.AlignData(self.PACK_DELTA_DATA(skuname,defaultstore,delta_data_set))\r
+ data_delta_structure_buffer += self.AlignData(self.PACK_DELTA_DATA(skuname,defaultstore,delta_data_set), 8)\r
\r
- size = len(nv_default_part + data_delta_structure_buffer) + 12\r
+ size = len(nv_default_part + data_delta_structure_buffer) + 16\r
maxsize = self.VpdRegionSize if self.VpdRegionSize else size\r
NV_Store_Default_Header = self.PACK_NV_STORE_DEFAULT_HEADER(size,maxsize)\r
\r
Signature += pack("=B",ord('B'))\r
\r
SizeBuffer = pack("=L",size)\r
- MaxSizeBuffer = pack("=L",maxsize)\r
+ MaxSizeBuffer = pack("=Q",maxsize)\r
\r
return Signature + SizeBuffer + MaxSizeBuffer\r
\r
\r
def PACK_DEFAULT_DATA(self, defaultstoragename,skuid,var_value):\r
Buffer = ""\r
- Buffer += pack("=L",8)\r
- Buffer += pack("=H",int(defaultstoragename))\r
- Buffer += pack("=H",int(skuid))\r
+ Buffer += pack("=L",4+8+8)\r
+ Buffer += pack("=Q",int(skuid))\r
+ Buffer += pack("=Q",int(defaultstoragename))\r
\r
for item in var_value:\r
Buffer += pack("=B",item)\r
skuid = self.GetSkuId(skuname)\r
defaultstorageid = self.GetDefaultStoreId(defaultstoragename)\r
Buffer = ""\r
- Buffer += pack("=L",8)\r
- Buffer += pack("=H",int(skuid))\r
- Buffer += pack("=H",int(defaultstorageid))\r
+ Buffer += pack("=L",4+8+8)\r
+ Buffer += pack("=Q",int(skuid))\r
+ Buffer += pack("=Q",int(defaultstorageid))\r
for (delta_offset,value) in delta_list:\r
Buffer += pack("=L",delta_offset)\r
Buffer = Buffer[:-1] + pack("=B",value)\r
\r
def AlignData(self,data, align = 4):\r
mybuffer = data\r
- for i in range(len(data) % align):\r
- mybuffer += pack("=B",0)\r
+ if (len(data) % align) > 0:\r
+ for i in range(align - (len(data) % align)):\r
+ mybuffer += pack("=B",0)\r
\r
return mybuffer\r
\r