diff options
author | Sirisha Gandikota <[email protected]> | 2016-08-19 12:13:25 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2016-08-23 21:19:55 -0700 |
commit | 56ba9656bb38ce0d1448545a6d9d3ebcc39f18bf (patch) | |
tree | cedf1b1de37ca26a5c319df292b1f011a6e7fd12 /src/intel/tools/decoder.h | |
parent | 3e218ad7f85e4f21d5d206adf7ebb283842f9732 (diff) |
aubinator: Fix the tool to correctly decode the DWords
Several fixes have been added as part of this as listed below:
1) Fix the mask and add disassembler handling for STATE_DS, STATE_HS
as the mask returned wrong values of the fields.
2) Fix the GEN_TYPE_ADDRESS/GEN_TYPE_OFFSET decoding - the address/
offset were handled the same way as the other fields and that gives
the wrong values for the address/offset.
3) Decode nested/recurssive structures - Many packets contain nested
structures, ex: 3DSATE_SO_BUFFER, STATE_BASE_ADDRESS, etc contain MOC
structures. Previously, the aubinator printed 1 if there was a MOC
structure. Now we decode the entire structure and print out its fields.
4) Print out the DWord address along with its hex value - For a better
clarity of information, it is helpful to print both the address and
hex value of the DWord along with the DWord count. Since the DWord0
contains the instruction code and the instruction length, it is
unnecessary to print the decoded values for DWord0. This information
is already available from the DWord hex value.
5) Decode the <group> and the corresponding fields in the group- The
<group> tag can have fields of several types including structures. A
group can contain one or more number of fields and this has be correctly
decoded. Previously, aubinator did not decode the groups or the
fields/structures inside them. Now we decode the <group> in the
instructions and structures where the fields in it repeat for any number
of times specified.
v2: Fix the formatting (per Matt)
Make the start and end pos calculation to extract fields from a DWord
more appropriate by moving %32 away from mask() method
Signed-off-by: Sirisha Gandikota <[email protected]>
Acked-by: Kenneth Graunke <[email protected]>
Acked-by: Ben Widawsky <[email protected]>
Diffstat (limited to 'src/intel/tools/decoder.h')
-rw-r--r-- | src/intel/tools/decoder.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/intel/tools/decoder.h b/src/intel/tools/decoder.h index af9e075f00e..b46e451652f 100644 --- a/src/intel/tools/decoder.h +++ b/src/intel/tools/decoder.h @@ -51,6 +51,46 @@ struct gen_field_iterator { int i; }; +struct gen_group { + char *name; + int nfields; + struct gen_field **fields; + uint32_t group_offset, group_count; + + uint32_t opcode_mask; + uint32_t opcode; +}; + +struct gen_type { + enum { + GEN_TYPE_UNKNOWN, + GEN_TYPE_INT, + GEN_TYPE_UINT, + GEN_TYPE_BOOL, + GEN_TYPE_FLOAT, + GEN_TYPE_ADDRESS, + GEN_TYPE_OFFSET, + GEN_TYPE_STRUCT, + GEN_TYPE_UFIXED, + GEN_TYPE_SFIXED, + GEN_TYPE_MBO + } kind; + + /* Struct definition for GEN_TYPE_STRUCT */ + struct gen_group *gen_struct; + + /* Integer and fractional sizes for GEN_TYPE_UFIXED and GEN_TYPE_SFIXED */ + int i, f; +}; + +struct gen_field { + char *name; + int start, end; + struct gen_type type; + bool has_default; + uint32_t default_value; +}; + void gen_field_iterator_init(struct gen_field_iterator *iter, struct gen_group *group, const uint32_t *p); |