]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/AutoGen/GenPcdDb.py
BaseTools: replace 'UINT8','UINT16','UINT32','UINT64','VOID*' with shared constants.
[mirror_edk2.git] / BaseTools / Source / Python / AutoGen / GenPcdDb.py
index a2c4fb39ec85b13000ff30757e992ea52370bbdb..d08a389d817f85bf499c8b823b086c1896e79e8b 100644 (file)
@@ -1,7 +1,7 @@
 ## @file\r
 # Routines for generating Pcd Database\r
 #\r
-# Copyright (c) 2013 - 2016, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2013 - 2018, 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
@@ -20,6 +20,7 @@ from ValidCheckingInfoObject import VAR_VALID_OBJECT_FACTORY
 from Common.VariableAttributes import VariableAttributes\r
 import copy\r
 from struct import unpack\r
+from Common.DataType import *\r
 \r
 DATABASE_VERSION = 7\r
 \r
@@ -981,14 +982,14 @@ def CreatePcdDataBase(PcdDBData):
     delta = {}\r
     basedata = {}\r
     for skuname,skuid in PcdDBData:\r
-        if len(PcdDBData[(skuname,skuid)][1]) != len(PcdDBData[("DEFAULT","0")][1]):\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
+        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
+        basedata[(skuname,skuid)] = [(index,PcdDBData[(TAB_DEFAULT,"0")][1][index],hex(PcdDBData[(TAB_DEFAULT,"0")][1][index])) 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
         # 8 byte align\r
@@ -1010,8 +1011,10 @@ def CreatePcdDataBase(PcdDBData):
         newbuffer += databasebuff[i]\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
@@ -1023,7 +1026,7 @@ def NewCreatePcdDatabasePhaseSpecificAutoGen(Platform,Phase):
         new_pcd = copy.deepcopy(pcd)\r
         new_pcd.SkuInfoList = {skuname:pcd.SkuInfoList[skuname]}\r
         new_pcd.isinit = 'INIT'\r
-        if new_pcd.DatumType in ['UINT8','UINT16','UINT32','UINT64']:\r
+        if new_pcd.DatumType in TAB_PCD_CLEAN_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
@@ -1062,7 +1065,7 @@ def NewCreatePcdDatabasePhaseSpecificAutoGen(Platform,Phase):
         final_data = ()\r
         for item in PcdDbBuffer:\r
             final_data += unpack("B",item)\r
-        PcdDBData[("DEFAULT","0")] = (PcdDbBuffer, final_data)\r
+        PcdDBData[(TAB_DEFAULT,"0")] = (PcdDbBuffer, final_data)\r
 \r
     return AdditionalAutoGenH, AdditionalAutoGenC, CreatePcdDataBase(PcdDBData)\r
 ## Create PCD database in DXE or PEI phase\r
@@ -1102,7 +1105,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase):
 \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
@@ -1174,7 +1177,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase):
     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
@@ -1215,7 +1218,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase):
         VariableDbValueList = []\r
         Pcd.InitString = 'UNINIT'\r
 \r
-        if Pcd.DatumType == 'VOID*':\r
+        if Pcd.DatumType == TAB_VOID:\r
             if Pcd.Type not in ["DynamicVpd", "DynamicExVpd"]:\r
                 Pcd.TokenTypeList = ['PCD_TYPE_STRING']\r
             else:\r
@@ -1319,9 +1322,9 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase):
                     #\r
                     Dict['VARDEF_DB_VALUE_'+Pcd.DatumType].append(Sku.HiiDefaultValue)\r
                     \r
-                    if Pcd.DatumType == "UINT64":\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
@@ -1352,13 +1355,13 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase):
                 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
+                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
                 continue\r
           \r
-            if Pcd.DatumType == 'VOID*':\r
+            if Pcd.DatumType == TAB_VOID:\r
                 Pcd.TokenTypeList += ['PCD_TYPE_STRING']\r
                 Pcd.InitString = 'INIT'\r
                 if Sku.HiiDefaultValue != '' and Sku.DefaultValue == '':\r
@@ -1390,9 +1393,12 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase):
                     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
@@ -1414,9 +1420,9 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase):
                 # 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
@@ -1427,7 +1433,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase):
                 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