## @file\r
# Routines for generating Pcd Database\r
#\r
-# Copyright (c) 2013, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2013 - 2015, 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.Misc import *\r
from Common.String 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 Common.VariableAttributes import VariableAttributes\r
\r
-DATABASE_VERSION = 4\r
+DATABASE_VERSION = 5\r
\r
gPcdDatabaseAutoGenC = TemplateString("""\r
//\r
RawDataList = []\r
DbComItemList.__init__(self, ItemSize, DataList, RawDataList)\r
def PackData(self):\r
- PackStr = "=LLHH"\r
+ PackStr = "=LLHHLHH"\r
Buffer = ''\r
for DataList in self.RawDataList:\r
for Data in DataList:\r
GetIntegerValue(Data[0]),\r
GetIntegerValue(Data[1]),\r
GetIntegerValue(Data[2]),\r
- GetIntegerValue(Data[3]))\r
+ GetIntegerValue(Data[3]),\r
+ GetIntegerValue(Data[4]),\r
+ GetIntegerValue(Data[5]),\r
+ GetIntegerValue(0))\r
return Buffer\r
\r
class DbStringHeadTableItemList(DbItemList):\r
# DbItemList to DbStringHeadTableItemList\r
DbStringHeadValue = DbStringHeadTableItemList(4, RawDataList = StringHeadValue)\r
VariableTable = Dict['VARIABLE_DB_VALUE']\r
- DbVariableTable = DbVariableTableItemList(12, RawDataList = VariableTable)\r
+ DbVariableTable = DbVariableTableItemList(20, RawDataList = VariableTable)\r
NumberOfSkuEnabledPcd = GetIntegerValue(Dict['SKU_HEAD_SIZE'])\r
Dict['SKUHEAD_TABLE_VALUE'] = [(0,0) for i in xrange(NumberOfSkuEnabledPcd)]\r
SkuTable = Dict['SKUHEAD_TABLE_VALUE'] # Generated later\r
for VariableEntries in VariableTable:\r
skuindex = 0\r
for VariableEntryPerSku in VariableEntries:\r
- (VariableHeadGuidIndex, VariableHeadStringIndex, SKUVariableOffset, VariableOffset, VariableRefTable) = VariableEntryPerSku[:]\r
+ (VariableHeadGuidIndex, VariableHeadStringIndex, SKUVariableOffset, VariableOffset, VariableRefTable, VariableAttribute) = VariableEntryPerSku[:]\r
DbIndex = 0\r
DbOffset = FixedHeaderLen\r
for DbIndex in xrange(len(DbTotal)):\r
skuindex += 1\r
if DbIndex >= InitTableNum:\r
assert(False)\r
-\r
- VariableEntryPerSku[:] = (VariableHeadStringIndex, DbOffset, VariableHeadGuidIndex, SKUVariableOffset)\r
+ VarAttr, VarProp = VariableAttributes.GetVarAttributes(VariableAttribute)\r
+ VariableEntryPerSku[:] = (VariableHeadStringIndex, DbOffset, VariableHeadGuidIndex, SKUVariableOffset, VarAttr, VarProp)\r
\r
# calculate various table offset now\r
DbTotalLength = FixedHeaderLen\r
NumberOfSizeItems = 0\r
NumberOfSkuEnabledPcd = 0\r
GuidList = []\r
+ VarCheckTab = VAR_CHECK_PCD_VARIABLE_TAB_CONTAINER()\r
i = 0\r
ReorderedDynPcdList = GetOrderedDynamicPcdList(Platform.DynamicPcdList, Platform.PcdTokenNumber)\r
for Pcd in ReorderedDynPcdList:\r
SkuIdIndex += 1\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
+ VarAttr, _ = VariableAttributes.GetVarAttributes(Sku.VariableAttribute)\r
+ var_check_obj.SetAttributes(VarAttr)\r
+ var_check_obj.UpdateSize()\r
+ VarCheckTab.push_back(var_check_obj)\r
+ except Exception:\r
+ ValidInfo = ''\r
+ if Pcd.validateranges:\r
+ ValidInfo = Pcd.validateranges[0]\r
+ if Pcd.validlists:\r
+ ValidInfo = Pcd.validlists[0]\r
+ if ValidInfo:\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
+ ExtraData = "[%s]" % str(ValidInfo))\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.InitString = 'INIT'\r
# Store all variable names of one HII PCD under different SKU to stringTable\r
\r
VariableHeadStringIndex = VariableHeadList[SkuIdIndex - 2]\r
# store VariableGuid to GuidTable and get the VariableHeadGuidIndex\r
- VariableGuidStructure = Sku.VariableGuidValue\r
- VariableGuid = GuidStructureStringToGuidValueName(VariableGuidStructure)\r
\r
if VariableGuid not in GuidList:\r
GuidList += [VariableGuid]\r
# the Pcd default value was filled before\r
VariableOffset = len(Dict['VARDEF_DB_VALUE_' + Pcd.DatumType]) - 1\r
VariableRefTable = Dict['VARDEF_DB_VALUE_' + Pcd.DatumType]\r
- VariableDbValueList.append([VariableHeadGuidIndex, VariableHeadStringIndex, Sku.VariableOffset, VariableOffset, VariableRefTable])\r
+ VariableDbValueList.append([VariableHeadGuidIndex, VariableHeadStringIndex, Sku.VariableOffset, VariableOffset, VariableRefTable, Sku.VariableAttribute])\r
\r
elif Sku.VpdOffset != '':\r
Pcd.TokenTypeList += ['PCD_TYPE_VPD']\r
\r
AutoGenC.Append(gPcdDatabaseAutoGenC.Replace(Dict))\r
\r
+ if Platform.Platform.VarCheckFlag:\r
+ dest = os.path.join(Platform.BuildDir, 'FV')\r
+ VarCheckTab.dump(dest, Phase)\r
Buffer = BuildExDataBase(Dict)\r
return AutoGenH, AutoGenC, Buffer\r
\r