intel/genxml: Allow referencing enums in type attributes
authorKristian H. Kristensen <hoegsberg@gmail.com>
Tue, 29 Nov 2016 00:24:13 +0000 (16:24 -0800)
committerKristian H. Kristensen <hoegsberg@gmail.com>
Wed, 30 Nov 2016 06:02:49 +0000 (22:02 -0800)
This lets us reference enums in the type attribute of a field.

Signed-off-by: Kristian H. Kristensen <hoegsberg@gmail.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/intel/genxml/gen_pack_header.py

index 83e3fde2daa9ad8ebb0fdbb2dc377210a6fbd676..f09667d3d8e96ba6c4ac0b355e6aa11d6d7abee7 100644 (file)
@@ -267,6 +267,8 @@ class Field(object):
             type = 'uint32_t'
         elif self.type in self.parser.structs:
             type = 'struct ' + self.parser.gen_prefix(safe_name(self.type))
+        elif self.type in self.parser.enums:
+            type = 'uint32_t'
         elif self.type == 'mbo':
             return
         else:
@@ -426,6 +428,9 @@ class Group(object):
                 elif field.type == "uint":
                     s = "__gen_uint(values->%s, %d, %d)" % \
                         (name, field.start - dword_start, field.end - dword_start)
+                elif field.type in self.parser.enums:
+                    s = "__gen_uint(values->%s, %d, %d)" % \
+                        (name, field.start - dword_start, field.end - dword_start)
                 elif field.type == "int":
                     s = "__gen_sint(values->%s, %d, %d)" % \
                         (name, field.start - dword_start, field.end - dword_start)
@@ -484,6 +489,7 @@ class Parser(object):
 
         self.instruction = None
         self.structs = {}
+        self.enums = {}
         self.registers = {}
 
     def gen_prefix(self, name):
@@ -530,6 +536,7 @@ class Parser(object):
         elif name == "enum":
             self.values = []
             self.enum = safe_name(attrs["name"])
+            self.enums[attrs["name"]] = 1
             if "prefix" in attrs:
                 self.prefix = safe_name(attrs["prefix"])
             else: