]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/AutoGen/GenVar.py
BaseTools: AutoGen - use defaultdict to auto initialize
[mirror_edk2.git] / BaseTools / Source / Python / AutoGen / GenVar.py
index d222e6ed5e7ed608793cbc578e279a63bae2dc92..13bcf99b2627b410fa7274ad824a63b4cdee4baa 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
@@ -90,14 +91,14 @@ class VariableMgr(object):
             for item in sku_var_info_offset_list:\r
                 data_type = item.data_type\r
                 value_list = item.default_value.strip("{").strip("}").split(",")\r
-                if data_type in ["BOOLEAN","UINT8","UINT16","UINT32","UINT64"]:\r
-                    if data_type == ["BOOLEAN","UINT8"]:\r
+                if data_type in DataType.TAB_PCD_NUMERIC_TYPES:\r
+                    if data_type == ["BOOLEAN", DataType.TAB_UINT8]:\r
                         data_flag = "=B"\r
-                    elif data_type == "UINT16":\r
+                    elif data_type == DataType.TAB_UINT16:\r
                         data_flag = "=H"\r
-                    elif data_type == "UINT32":\r
+                    elif data_type == DataType.TAB_UINT32:\r
                         data_flag = "=L"\r
-                    elif data_type == "UINT64":\r
+                    elif data_type == DataType.TAB_UINT64:\r
                         data_flag = "=Q"\r
                     data = value_list[0]\r
                     value_list = []\r
@@ -109,12 +110,12 @@ class VariableMgr(object):
             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
+            indexedvarinfo[key] =  [var_info(n.pcdindex,n.pcdname,n.defaultstoragename,n.skuname,n.var_name, n.var_guid, "0x00",n.var_attribute,newvaluestr  , newvaluestr , DataType.TAB_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
+        ordered_value = [valuelist[k] for k in ordered_offset]\r
         var_value = []\r
         num = 0\r
         for offset in ordered_offset:\r
@@ -127,7 +128,7 @@ class VariableMgr(object):
         return var_value\r
     def process_variable_data(self):\r
 \r
-        var_data = dict()\r
+        var_data = collections.defaultdict(collections.OrderedDict)\r
 \r
         indexedvarinfo = collections.OrderedDict()\r
         for item in self.VarInfo:\r
@@ -141,9 +142,9 @@ 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
+            if default_sku_default.data_type not in DataType.TAB_PCD_NUMERIC_TYPES:\r
                 var_max_len = max([len(var_item.default_value.split(",")) for var_item in sku_var_info.values()])\r
                 if len(default_sku_default.default_value.split(",")) < var_max_len:\r
                     tail = ",".join([ "0x00" for i in range(var_max_len-len(default_sku_default.default_value.split(",")))])\r
@@ -154,17 +155,15 @@ 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
+            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
-                if default_sku_default.data_type not in ["UINT8","UINT16","UINT32","UINT64","BOOLEAN"]:\r
+                if default_sku_default.data_type not in DataType.TAB_PCD_NUMERIC_TYPES:\r
                     if len(other_sku_other.default_value.split(",")) < var_max_len:\r
                         tail = ",".join([ "0x00" for i in range(var_max_len-len(other_sku_other.default_value.split(",")))])\r
 \r
@@ -176,8 +175,6 @@ class VariableMgr(object):
 \r
                 data_delta = self.calculate_delta(default_data_array, others_data_array)\r
 \r
-                if (skuid,defaultstoragename) not in var_data:\r
-                    var_data[(skuid,defaultstoragename)] = collections.OrderedDict()\r
                 var_data[(skuid,defaultstoragename)][index] = (data_delta,sku_var_info[(skuid,defaultstoragename)])\r
         return var_data\r
 \r
@@ -189,7 +186,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
@@ -219,7 +216,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
@@ -313,7 +310,7 @@ class VariableMgr(object):
     def PACK_VARIABLES_DATA(self, var_value,data_type, tail = None):\r
         Buffer = ""\r
         data_len = 0\r
-        if data_type == "VOID*":\r
+        if data_type == DataType.TAB_VOID:\r
             for value_char in var_value.strip("{").strip("}").split(","):\r
                 Buffer += pack("=B",int(value_char,16))\r
             data_len += len(var_value.split(","))\r
@@ -324,16 +321,16 @@ class VariableMgr(object):
         elif data_type == "BOOLEAN":\r
             Buffer += pack("=B",True) if var_value.upper() == "TRUE" else pack("=B",False)\r
             data_len += 1\r
-        elif data_type  == "UINT8":\r
+        elif data_type  == DataType.TAB_UINT8:\r
             Buffer += pack("=B",GetIntegerValue(var_value))\r
             data_len += 1\r
-        elif data_type == "UINT16":\r
+        elif data_type == DataType.TAB_UINT16:\r
             Buffer += pack("=H",GetIntegerValue(var_value))\r
             data_len += 2\r
-        elif data_type == "UINT32":\r
+        elif data_type == DataType.TAB_UINT32:\r
             Buffer += pack("=L",GetIntegerValue(var_value))\r
             data_len += 4\r
-        elif data_type == "UINT64":\r
+        elif data_type == DataType.TAB_UINT64:\r
             Buffer += pack("=Q",GetIntegerValue(var_value))\r
             data_len += 8\r
 \r