from ValidCheckingInfoObject import VAR_VALID_OBJECT_FACTORY\r
from Common.VariableAttributes import VariableAttributes\r
\r
-DATABASE_VERSION = 5\r
+DATABASE_VERSION = 6\r
\r
gPcdDatabaseAutoGenC = TemplateString("""\r
//\r
//\r
#if 0\r
${PHASE}_PCD_DATABASE_INIT g${PHASE}PcdDbInit = {\r
+ /* SkuIdTable */\r
+ { ${BEGIN}${SKUID_VALUE}, ${END} },\r
${BEGIN} { ${INIT_VALUE_UINT64} }, /* ${INIT_CNAME_DECL_UINT64}_${INIT_GUID_DECL_UINT64}[${INIT_NUMSKUS_DECL_UINT64}] */\r
${END}\r
${BEGIN} ${VARDEF_VALUE_UINT64}, /* ${VARDEF_CNAME_UINT64}_${VARDEF_GUID_UINT64}_VariableDefault_${VARDEF_SKUID_UINT64} */\r
${END}\r
${BEGIN} ${VARDEF_VALUE_BOOLEAN}, /* ${VARDEF_CNAME_BOOLEAN}_${VARDEF_GUID_BOOLEAN}_VariableDefault_${VARDEF_SKUID_BOOLEAN} */\r
${END}\r
- /* SkuIdTable */\r
- { ${BEGIN}${SKUID_VALUE}, ${END} },\r
${SYSTEM_SKU_ID_VALUE}\r
};\r
#endif\r
#define ${PHASE}_EXMAP_TABLE_EMPTY ${EXMAP_TABLE_EMPTY}\r
\r
typedef struct {\r
+ UINT64 SkuIdTable[${PHASE}_SKUID_TABLE_SIZE];\r
${BEGIN} UINT64 ${INIT_CNAME_DECL_UINT64}_${INIT_GUID_DECL_UINT64}[${INIT_NUMSKUS_DECL_UINT64}];\r
${END}\r
${BEGIN} UINT64 ${VARDEF_CNAME_UINT64}_${VARDEF_GUID_UINT64}_VariableDefault_${VARDEF_SKUID_UINT64};\r
${END}\r
${BEGIN} BOOLEAN ${VARDEF_CNAME_BOOLEAN}_${VARDEF_GUID_BOOLEAN}_VariableDefault_${VARDEF_SKUID_BOOLEAN};\r
${END}\r
- UINT8 SkuIdTable[${PHASE}_SKUID_TABLE_SIZE];\r
${SYSTEM_SKU_ID}\r
} ${PHASE}_PCD_DATABASE_INIT;\r
\r
\r
typedef struct {\r
//GUID Signature; // PcdDataBaseGuid\r
+ //UINT32 BuildVersion;\r
//UINT32 Length;\r
+ //SKU_ID SystemSkuId; // Current SkuId value.\r
//UINT32 UninitDataBaseSize;// Total size for PCD those default value with 0.\r
//TABLE_OFFSET LocalTokenNumberTableOffset;\r
//TABLE_OFFSET ExMapTableOffset;\r
//TABLE_OFFSET StringTableOffset;\r
//TABLE_OFFSET SizeTableOffset;\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
//UINT16 GuidTableCount; // The Number of Guid in GuidTable\r
- //SKU_ID SystemSkuId; // Current SkuId value.\r
- //UINT8 Pad;\r
+ //UINT8 Pad[2];\r
${PHASE}_PCD_DATABASE_INIT Init;\r
${PHASE}_PCD_DATABASE_UNINIT Uninit;\r
} ${PHASE}_PCD_DATABASE;\r
//\r
#if 0\r
${PHASE}_PCD_DATABASE_INIT g${PHASE}PcdDbInit = {\r
+ /* SkuIdTable */\r
+ { 0 },\r
/* ExMapTable */\r
{\r
{0, 0, 0}\r
{\r
0, 0\r
},\r
- /* SkuIdTable */\r
- { 0 },\r
${SYSTEM_SKU_ID_VALUE}\r
};\r
#endif\r
VardefValueBoolean = Dict['VARDEF_DB_VALUE_BOOLEAN']\r
DbVardefValueBoolean = DbItemList(1, RawDataList = VardefValueBoolean)\r
SkuidValue = Dict['SKUID_VALUE']\r
- DbSkuidValue = DbItemList(1, RawDataList = SkuidValue)\r
+ DbSkuidValue = DbItemList(8, RawDataList = SkuidValue)\r
SkuIndexValue = Dict['SKU_INDEX_VALUE']\r
- DbSkuIndexValue = DbItemList(0,RawDataList = SkuIndexValue)\r
+ DbSkuIndexValue = DbItemList(8,RawDataList = SkuIndexValue)\r
\r
# Unit Db Items\r
UnInitValueUint64 = Dict['UNINIT_GUID_DECL_UINT64']\r
DbUnInitValueBoolean = DbItemList(1, RawDataList = UnInitValueBoolean)\r
PcdTokenNumberMap = Dict['PCD_ORDER_TOKEN_NUMBER_MAP']\r
\r
- DbNameTotle = ["InitValueUint64", "VardefValueUint64", "InitValueUint32", "VardefValueUint32", "VpdHeadValue", "ExMapTable", \r
+ DbNameTotle = ["SkuidValue", "SkuIndexValue", "InitValueUint64", "VardefValueUint64", "InitValueUint32", "VardefValueUint32", "VpdHeadValue", "ExMapTable",\r
"LocalTokenNumberTable", "GuidTable", "StringHeadValue", "PcdNameOffsetTable","VariableTable","SkuTable", "StringTableLen", "PcdTokenTable", "PcdCNameTable", \r
"SizeTableValue", "InitValueUint16", "VardefValueUint16", "InitValueUint8", "VardefValueUint8", "InitValueBoolean",\r
- "VardefValueBoolean", "SkuidValue", "SkuIndexValue","UnInitValueUint64", "UnInitValueUint32", "UnInitValueUint16", "UnInitValueUint8", "UnInitValueBoolean"]\r
+ "VardefValueBoolean", "UnInitValueUint64", "UnInitValueUint32", "UnInitValueUint16", "UnInitValueUint8", "UnInitValueBoolean"]\r
\r
- DbTotal = [InitValueUint64, VardefValueUint64, InitValueUint32, VardefValueUint32, VpdHeadValue, ExMapTable, \r
+ DbTotal = [SkuidValue, SkuIndexValue, InitValueUint64, VardefValueUint64, InitValueUint32, VardefValueUint32, VpdHeadValue, ExMapTable,\r
LocalTokenNumberTable, GuidTable, StringHeadValue, PcdNameOffsetTable,VariableTable,SkuTable, StringTableLen, PcdTokenTable,PcdCNameTable, \r
SizeTableValue, InitValueUint16, VardefValueUint16, InitValueUint8, VardefValueUint8, InitValueBoolean,\r
- VardefValueBoolean, SkuidValue, SkuIndexValue, UnInitValueUint64, UnInitValueUint32, UnInitValueUint16, UnInitValueUint8, UnInitValueBoolean]\r
- DbItemTotal = [DbInitValueUint64, DbVardefValueUint64, DbInitValueUint32, DbVardefValueUint32, DbVpdHeadValue, DbExMapTable, \r
+ VardefValueBoolean, UnInitValueUint64, UnInitValueUint32, UnInitValueUint16, UnInitValueUint8, UnInitValueBoolean]\r
+ DbItemTotal = [DbSkuidValue, DbSkuIndexValue, DbInitValueUint64, DbVardefValueUint64, DbInitValueUint32, DbVardefValueUint32, DbVpdHeadValue, DbExMapTable,\r
DbLocalTokenNumberTable, DbGuidTable, DbStringHeadValue, DbPcdNameOffsetTable,DbVariableTable,DbSkuTable, DbStringTableLen, DbPcdTokenTable, DbPcdCNameTable, \r
DbSizeTableValue, DbInitValueUint16, DbVardefValueUint16, DbInitValueUint8, DbVardefValueUint8, DbInitValueBoolean,\r
- DbVardefValueBoolean, DbSkuidValue, DbSkuIndexValue, DbUnInitValueUint64, DbUnInitValueUint32, DbUnInitValueUint16, DbUnInitValueUint8, DbUnInitValueBoolean]\r
+ DbVardefValueBoolean, DbUnInitValueUint64, DbUnInitValueUint32, DbUnInitValueUint16, DbUnInitValueUint8, DbUnInitValueBoolean]\r
\r
- # SkuidValue is the last table in the init table items\r
- InitTableNum = DbTotal.index(SkuidValue) + 1 + 1 # +1 is for SkuIndexValue table\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 = 64\r
+ FixedHeaderLen = 72\r
\r
# Get offset of SkuId table in the database \r
SkuIdTableOffset = FixedHeaderLen\r
for DbIndex in xrange(len(DbTotal)):\r
if DbTotal[DbIndex] is SkuTable:\r
break\r
+ elif DbItemTotal[DbIndex] is DbSkuIndexValue:\r
+ if DbItemTotal[DbIndex].RawDataList:\r
+ Count = 0\r
+ for item in DbItemTotal[DbIndex].RawDataList:\r
+ Count += len(item)\r
+ SkuTableOffset += DbItemTotal[DbIndex].ItemSize * Count\r
+ continue\r
SkuTableOffset += DbItemTotal[DbIndex].GetListSize()\r
- PcdTokenTableDbOffset = FixedHeaderLen\r
- for DbIndex in xrange(len(DbTotal)):\r
- if DbTotal[DbIndex] is PcdTokenTable:\r
- break\r
- PcdTokenTableDbOffset += DbItemTotal[DbIndex].GetListSize()\r
- \r
- PcdCNameTableDbOffset = FixedHeaderLen\r
- for DbIndex in xrange(len(DbTotal)):\r
- if DbTotal[DbIndex] is PcdCNameTable:\r
- break\r
- PcdCNameTableDbOffset += DbItemTotal[DbIndex].GetListSize()\r
+\r
# Fix up the LocalTokenNumberTable, SkuHeader table\r
SkuHeaderIndex = 0\r
if len(Dict['SKU_INDEX_VALUE']) > 0:\r
if DbTotal[DbIndex] is Table:\r
DbOffset += DbItemTotal[DbIndex].GetInterOffset(Offset)\r
break\r
+ elif DbItemTotal[DbIndex] is DbSkuIndexValue:\r
+ if DbItemTotal[DbIndex].RawDataList:\r
+ Count = 0\r
+ for item in DbItemTotal[DbIndex].RawDataList:\r
+ Count += len(item)\r
+ DbOffset += DbItemTotal[DbIndex].ItemSize * Count\r
+ continue\r
DbOffset += DbItemTotal[DbIndex].GetListSize()\r
if DbIndex + 1 == InitTableNum:\r
if DbOffset % 8:\r
LocalTokenNumberTable[LocalTokenNumberTableIndex] = DbOffset|int(TokenTypeValue)\r
# if PCD_TYPE_SKU_ENABLED, then we need to fix up the SkuTable\r
\r
- SkuIndexTabalOffset = SkuIdTableOffset + Dict['SKUID_VALUE'][0] + 1\r
+ SkuIndexTabalOffset = SkuIdTableOffset + len(Dict['SKUID_VALUE']) * 8\r
if (TokenTypeValue & (0x2 << 28)):\r
- SkuTable[SkuHeaderIndex] = (DbOffset|int(TokenTypeValue & ~(0x2<<28)), SkuIndexTabalOffset + SkuIndexIndexTable[PcdTokenNumberMap[LocalTokenNumberTableIndex]])\r
+ SkuTable[SkuHeaderIndex] = (DbOffset|int(TokenTypeValue & ~(0x2<<28)), SkuIndexTabalOffset + SkuIndexIndexTable[PcdTokenNumberMap[LocalTokenNumberTableIndex]] * 8)\r
LocalTokenNumberTable[LocalTokenNumberTableIndex] = (SkuTableOffset + SkuHeaderIndex * 8) | int(TokenTypeValue)\r
SkuHeaderIndex += 1\r
\r
if DbTotal[DbIndex] is VariableRefTable:\r
DbOffset += DbItemTotal[DbIndex].GetInterOffset(VariableOffset)\r
break\r
+ elif DbItemTotal[DbIndex] is DbSkuIndexValue:\r
+ if DbItemTotal[DbIndex].RawDataList:\r
+ Count = 0\r
+ for item in DbItemTotal[DbIndex].RawDataList:\r
+ Count += len(item)\r
+ DbOffset += DbItemTotal[DbIndex].ItemSize * Count\r
+ continue\r
DbOffset += DbItemTotal[DbIndex].GetListSize()\r
if DbIndex + 1 == InitTableNum:\r
if DbOffset % 8:\r
SkuIdTableOffset = DbTotalLength\r
elif DbItemTotal[DbIndex] is DbPcdNameOffsetTable:\r
DbPcdNameOffset = DbTotalLength\r
+ elif DbItemTotal[DbIndex] is DbSkuIndexValue:\r
+ if DbItemTotal[DbIndex].RawDataList:\r
+ Count = 0\r
+ for item in DbItemTotal[DbIndex].RawDataList:\r
+ Count += len(item)\r
+ DbTotalLength += DbItemTotal[DbIndex].ItemSize * Count\r
+ continue\r
\r
DbTotalLength += DbItemTotal[DbIndex].GetListSize()\r
if not Dict['PCD_INFO_FLAG']:\r
\r
b = pack('=L', DbTotalLength - UninitDataBaseSize)\r
\r
+ Buffer += b\r
+ b = pack('=Q', SystemSkuId)\r
+\r
Buffer += b\r
b = pack('=L', UninitDataBaseSize)\r
\r
b = pack('=H', GuidTableCount)\r
\r
Buffer += b\r
- b = pack('=B', SystemSkuId)\r
- \r
+ b = pack('=B', Pad)\r
+\r
Buffer += b\r
b = pack('=B', Pad)\r
\r