From e69d395cd1c79f2ff730fbaf535a75dd7347dfb7 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Tue, 26 Oct 2021 14:46:21 -0700 Subject: [PATCH] intel/genxml: Add an "mbz" data type There are some fields which Must Be Zero, and we don't want to allow setting them from the template struct, but we do want them in the XML to allow them to be decoded properly, and for documentation purposes. This adds a new "mbz" type, much like "mbo", except it doesn't set anything in the struct. We also update the decoder to handle it. Reviewed-by: Jason Ekstrand Part-of: --- src/intel/common/intel_decoder.c | 3 +++ src/intel/common/intel_decoder.h | 1 + src/intel/genxml/gen_pack_header.py | 9 ++++++--- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/intel/common/intel_decoder.c b/src/intel/common/intel_decoder.c index a06176a84c3..8c9d1eba56b 100644 --- a/src/intel/common/intel_decoder.c +++ b/src/intel/common/intel_decoder.c @@ -303,6 +303,8 @@ string_to_type(struct parser_context *ctx, const char *s) return (struct intel_type) { .kind = INTEL_TYPE_ENUM, .intel_enum = e }; else if (strcmp(s, "mbo") == 0) return (struct intel_type) { .kind = INTEL_TYPE_MBO }; + else if (strcmp(s, "mbz") == 0) + return (struct intel_type) { .kind = INTEL_TYPE_MBZ }; else fail(&ctx->loc, "invalid type: %s", s); } @@ -1058,6 +1060,7 @@ iter_decode_field(struct intel_field_iterator *iter) enum_name = intel_get_enum_name(&iter->field->inline_enum, v.qw); break; } + case INTEL_TYPE_MBZ: case INTEL_TYPE_UINT: { snprintf(iter->value, sizeof(iter->value), "%"PRIu64, v.qw); enum_name = intel_get_enum_name(&iter->field->inline_enum, v.qw); diff --git a/src/intel/common/intel_decoder.h b/src/intel/common/intel_decoder.h index 20458073a4e..3a2b692dc49 100644 --- a/src/intel/common/intel_decoder.h +++ b/src/intel/common/intel_decoder.h @@ -159,6 +159,7 @@ struct intel_type { INTEL_TYPE_UFIXED, INTEL_TYPE_SFIXED, INTEL_TYPE_MBO, + INTEL_TYPE_MBZ, INTEL_TYPE_ENUM } kind; diff --git a/src/intel/genxml/gen_pack_header.py b/src/intel/genxml/gen_pack_header.py index 45bbb30c464..7864156ec22 100644 --- a/src/intel/genxml/gen_pack_header.py +++ b/src/intel/genxml/gen_pack_header.py @@ -245,7 +245,8 @@ class Field(object): def is_builtin_type(self): builtins = [ 'address', 'bool', 'float', 'ufixed', - 'offset', 'sfixed', 'offset', 'int', 'uint', 'mbo' ] + 'offset', 'sfixed', 'offset', 'int', 'uint', + 'mbo', 'mbz' ] return self.type in builtins def is_struct_type(self): @@ -277,7 +278,7 @@ class Field(object): type = 'struct ' + self.parser.gen_prefix(safe_name(self.type)) elif self.is_enum_type(): type = 'enum ' + self.parser.gen_prefix(safe_name(self.type)) - elif self.type == 'mbo': + elif self.type == 'mbo' or self.type == 'mbz': return else: print("#error unhandled type: %s" % self.type) @@ -431,12 +432,14 @@ class Group(object): field_index = 0 non_address_fields = [] for field in dw.fields: - if field.type != "mbo": + if field.type != "mbo" and field.type != "mbz": name = field.name + field.dim if field.type == "mbo": non_address_fields.append("__gen_mbo(%d, %d)" % \ (field.start - dword_start, field.end - dword_start)) + elif field.type == "mbz": + pass elif field.type == "address": pass elif field.type == "uint":