]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/AutoGen/GenVar.py
BaseTools: use predefined constants instead of local strings
[mirror_edk2.git] / BaseTools / Source / Python / AutoGen / GenVar.py
index 1389d7ff622542725394559a0997729e6bc7c1f9..1c66a9eb050f6f150f9899afa6defa7d58dcbdd0 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2017 - 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 @@ import copy
 from Common.VariableAttributes import VariableAttributes\r
 from Common.Misc import *\r
 import collections\r
+import Common.DataType as DataType\r
 \r
 var_info = collections.namedtuple("uefi_var", "pcdindex,pcdname,defaultstoragename,skuname,var_name, var_guid, var_offset,var_attribute,pcd_default_value, default_value, data_type")\r
 NvStorageHeaderSize = 28\r
@@ -104,10 +105,27 @@ class VariableMgr(object):
                     for data_byte in pack(data_flag,int(data,16) if data.upper().startswith('0X') else int(data)):\r
                         value_list += [hex(unpack("B",data_byte)[0])]\r
                 newvalue[int(item.var_offset,16) if item.var_offset.upper().startswith("0X") else int(item.var_offset)] = value_list\r
-            newvaluestr = "{" + ",".join(reduce(lambda x,y: x+y, [newvalue[k] for k in sorted(newvalue.keys())] )) +"}"\r
+            try:\r
+                newvaluestr = "{" + ",".join(self.assemble_variable(newvalue)) +"}"\r
+            except:\r
+                EdkLogger.error("build", AUTOGEN_ERROR, "Variable offset conflict in PCDs: %s \n" % (" and ".join([item.pcdname for item in sku_var_info_offset_list])))\r
             n = sku_var_info_offset_list[0]\r
             indexedvarinfo[key] =  [var_info(n.pcdindex,n.pcdname,n.defaultstoragename,n.skuname,n.var_name, n.var_guid, "0x00",n.var_attribute,newvaluestr  , newvaluestr , "VOID*")]\r
         self.VarInfo = [item[0] for item in indexedvarinfo.values()]\r
+\r
+    def assemble_variable(self, valuelist):\r
+        ordered_value = [valuelist[k] for k in sorted(valuelist.keys())]\r
+        ordered_offset = sorted(valuelist.keys())\r
+        var_value = []\r
+        num = 0\r
+        for offset in ordered_offset:\r
+            if offset < len(var_value):\r
+                raise\r
+            for _ in xrange(offset - len(var_value)):\r
+                var_value.append('0x00')\r
+            var_value += ordered_value[num]\r
+            num +=1\r
+        return var_value\r
     def process_variable_data(self):\r
 \r
         var_data = dict()\r
@@ -124,7 +142,7 @@ class VariableMgr(object):
             default_data_buffer = ""\r
             others_data_buffer = ""\r
             tail = None\r
-            default_sku_default = indexedvarinfo.get(index).get(("DEFAULT","STANDARD"))\r
+            default_sku_default = indexedvarinfo.get(index).get((DataType.TAB_DEFAULT,DataType.TAB_DEFAULT_STORES_DEFAULT))\r
 \r
             if default_sku_default.data_type not in ["UINT8","UINT16","UINT32","UINT64","BOOLEAN"]:\r
                 var_max_len = max([len(var_item.default_value.split(",")) for var_item in sku_var_info.values()])\r
@@ -137,13 +155,13 @@ class VariableMgr(object):
             for item in default_data_buffer:\r
                 default_data_array += unpack("B",item)\r
 \r
-            if ("DEFAULT","STANDARD") not in var_data:\r
-                var_data[("DEFAULT","STANDARD")] = collections.OrderedDict()\r
-            var_data[("DEFAULT","STANDARD")][index] = (default_data_buffer,sku_var_info[("DEFAULT","STANDARD")])\r
+            if (DataType.TAB_DEFAULT,DataType.TAB_DEFAULT_STORES_DEFAULT) not in var_data:\r
+                var_data[(DataType.TAB_DEFAULT,DataType.TAB_DEFAULT_STORES_DEFAULT)] = collections.OrderedDict()\r
+            var_data[(DataType.TAB_DEFAULT,DataType.TAB_DEFAULT_STORES_DEFAULT)][index] = (default_data_buffer,sku_var_info[(DataType.TAB_DEFAULT,DataType.TAB_DEFAULT_STORES_DEFAULT)])\r
 \r
             for (skuid,defaultstoragename) in indexedvarinfo.get(index):\r
                 tail = None\r
-                if (skuid,defaultstoragename) == ("DEFAULT","STANDARD"):\r
+                if (skuid,defaultstoragename) == (DataType.TAB_DEFAULT,DataType.TAB_DEFAULT_STORES_DEFAULT):\r
                     continue\r
                 other_sku_other = indexedvarinfo.get(index).get((skuid,defaultstoragename))\r
 \r
@@ -172,7 +190,7 @@ class VariableMgr(object):
         if not var_data:\r
             return []\r
 \r
-        pcds_default_data = var_data.get(("DEFAULT","STANDARD"),{})\r
+        pcds_default_data = var_data.get((DataType.TAB_DEFAULT,DataType.TAB_DEFAULT_STORES_DEFAULT),{})\r
         NvStoreDataBuffer = ""\r
         var_data_offset = collections.OrderedDict()\r
         offset = NvStorageHeaderSize\r
@@ -202,7 +220,7 @@ class VariableMgr(object):
 \r
         data_delta_structure_buffer = ""\r
         for skuname,defaultstore in var_data:\r
-            if (skuname,defaultstore) == ("DEFAULT","STANDARD"):\r
+            if (skuname,defaultstore) == (DataType.TAB_DEFAULT,DataType.TAB_DEFAULT_STORES_DEFAULT):\r
                 continue\r
             pcds_sku_data = var_data.get((skuname,defaultstore))\r
             delta_data_set = []\r