broadcom/genxml: Add support for enum-typed fields.
This basically comes from the intel genxml script. This will help improve gdb and CLIF output once we convert fields over.
This commit is contained in:
parent
d3a773611c
commit
af3c521528
|
@ -152,6 +152,8 @@ class Field(object):
|
||||||
type = 'uint32_t'
|
type = 'uint32_t'
|
||||||
elif self.type in self.parser.structs:
|
elif self.type in self.parser.structs:
|
||||||
type = 'struct ' + self.parser.gen_prefix(safe_name(self.type))
|
type = 'struct ' + self.parser.gen_prefix(safe_name(self.type))
|
||||||
|
elif self.type in self.parser.enums:
|
||||||
|
type = 'enum ' + self.parser.gen_prefix(safe_name(self.type))
|
||||||
elif self.type == 'mbo':
|
elif self.type == 'mbo':
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
|
@ -283,6 +285,9 @@ class Group(object):
|
||||||
elif field.type == "uint":
|
elif field.type == "uint":
|
||||||
s = "__gen_uint(values->%s, %d, %d)" % \
|
s = "__gen_uint(values->%s, %d, %d)" % \
|
||||||
(name, start, end)
|
(name, start, end)
|
||||||
|
elif field.type in self.parser.enums:
|
||||||
|
s = "__gen_uint(values->%s, %d, %d)" % \
|
||||||
|
(name, start, end)
|
||||||
elif field.type == "int":
|
elif field.type == "int":
|
||||||
s = "__gen_sint(values->%s, %d, %d)" % \
|
s = "__gen_sint(values->%s, %d, %d)" % \
|
||||||
(name, start, end)
|
(name, start, end)
|
||||||
|
@ -335,6 +340,8 @@ class Group(object):
|
||||||
convert = "__gen_unpack_address"
|
convert = "__gen_unpack_address"
|
||||||
elif field.type == "uint":
|
elif field.type == "uint":
|
||||||
convert = "__gen_unpack_uint"
|
convert = "__gen_unpack_uint"
|
||||||
|
elif field.type in self.parser.enums:
|
||||||
|
convert = "__gen_unpack_uint"
|
||||||
elif field.type == "int":
|
elif field.type == "int":
|
||||||
convert = "__gen_unpack_sint"
|
convert = "__gen_unpack_sint"
|
||||||
elif field.type == "bool":
|
elif field.type == "bool":
|
||||||
|
@ -370,6 +377,8 @@ class Parser(object):
|
||||||
self.packet = None
|
self.packet = None
|
||||||
self.struct = None
|
self.struct = None
|
||||||
self.structs = {}
|
self.structs = {}
|
||||||
|
# Set of enum names we've seen.
|
||||||
|
self.enums = set()
|
||||||
self.registers = {}
|
self.registers = {}
|
||||||
|
|
||||||
def gen_prefix(self, name):
|
def gen_prefix(self, name):
|
||||||
|
@ -423,6 +432,7 @@ class Parser(object):
|
||||||
elif name == "enum":
|
elif name == "enum":
|
||||||
self.values = []
|
self.values = []
|
||||||
self.enum = safe_name(attrs["name"])
|
self.enum = safe_name(attrs["name"])
|
||||||
|
self.enums.add(attrs["name"])
|
||||||
if "prefix" in attrs:
|
if "prefix" in attrs:
|
||||||
self.prefix = safe_name(attrs["prefix"])
|
self.prefix = safe_name(attrs["prefix"])
|
||||||
else:
|
else:
|
||||||
|
@ -526,14 +536,14 @@ class Parser(object):
|
||||||
print('')
|
print('')
|
||||||
|
|
||||||
def emit_enum(self):
|
def emit_enum(self):
|
||||||
print('/* enum %s */' % self.gen_prefix(self.enum))
|
print('enum %s {' % self.gen_prefix(self.enum))
|
||||||
for value in self.values:
|
for value in self.values:
|
||||||
if self.prefix:
|
if self.prefix:
|
||||||
name = self.prefix + "_" + value.name
|
name = self.prefix + "_" + value.name
|
||||||
else:
|
else:
|
||||||
name = value.name
|
name = value.name
|
||||||
print('#define %-36s %6d' % (name.upper(), value.value))
|
print(' % -36s = %6d,' % (name.upper(), value.value))
|
||||||
print('')
|
print('};\n')
|
||||||
|
|
||||||
def parse(self, filename):
|
def parse(self, filename):
|
||||||
file = open(filename, "rb")
|
file = open(filename, "rb")
|
||||||
|
|
Loading…
Reference in New Issue