From: Kenneth Graunke Date: Mon, 20 Mar 2017 05:11:52 +0000 (-0700) Subject: aubinator: Move the guts of decode_group() to decoder.c. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=40840831244e3d7e46411119b9013d83eef0b6b7;p=mesa.git aubinator: Move the guts of decode_group() to decoder.c. This lets us use it outside of the aubinator binary itself. Reviewed-by: Lionel Landwerlin --- diff --git a/src/intel/tools/aubinator.c b/src/intel/tools/aubinator.c index 739e95493b6..42cff8c4dc5 100644 --- a/src/intel/tools/aubinator.c +++ b/src/intel/tools/aubinator.c @@ -95,40 +95,12 @@ valid_offset(uint32_t offset) return offset < gtt_end; } -static void -print_dword_header(struct gen_field_iterator *iter, uint64_t offset) -{ - fprintf(outfile, "0x%08"PRIx64": 0x%08x : Dword %d\n", - offset + 4 * iter->dword, iter->p[iter->dword], iter->dword); -} - static void decode_group(struct gen_group *strct, const uint32_t *p, int starting_dword) { - struct gen_field_iterator iter; - int last_dword = 0; - uint64_t offset = 0; - - if (option_print_offsets) - offset = (void *) p - gtt; - else - offset = 0; - - gen_field_iterator_init(&iter, strct, p, - option_color == COLOR_ALWAYS); - while (gen_field_iterator_next(&iter)) { - if (last_dword != iter.dword) { - print_dword_header(&iter, offset); - last_dword = iter.dword; - } - if (iter.dword >= starting_dword) { - fprintf(outfile, " %s: %s\n", iter.name, iter.value); - if (iter.struct_desc) { - print_dword_header(&iter, offset + 4 * iter.dword); - decode_group(iter.struct_desc, &p[iter.dword], 0); - } - } - } + uint64_t offset = option_print_offsets ? (void *) p - gtt : 0; + gen_print_group(outfile, strct, offset, p, starting_dword, + option_color == COLOR_ALWAYS); } static void diff --git a/src/intel/tools/decoder.c b/src/intel/tools/decoder.c index a8534d7c0c7..42eed4af693 100644 --- a/src/intel/tools/decoder.c +++ b/src/intel/tools/decoder.c @@ -826,3 +826,37 @@ gen_field_iterator_next(struct gen_field_iterator *iter) return true; } + +static void +print_dword_header(FILE *outfile, + struct gen_field_iterator *iter, uint64_t offset) +{ + fprintf(outfile, "0x%08"PRIx64": 0x%08x : Dword %d\n", + offset + 4 * iter->dword, iter->p[iter->dword], iter->dword); +} + +void +gen_print_group(FILE *outfile, struct gen_group *group, + uint64_t offset, const uint32_t *p, + int starting_dword, bool color) +{ + struct gen_field_iterator iter; + int last_dword = 0; + + gen_field_iterator_init(&iter, group, p, color); + while (gen_field_iterator_next(&iter)) { + if (last_dword != iter.dword) { + print_dword_header(outfile, &iter, offset); + last_dword = iter.dword; + } + if (iter.dword >= starting_dword) { + fprintf(outfile, " %s: %s\n", iter.name, iter.value); + if (iter.struct_desc) { + uint64_t struct_offset = offset + 4 * iter.dword; + print_dword_header(outfile, &iter, struct_offset); + gen_print_group(outfile, iter.struct_desc, struct_offset, + &p[iter.dword], 0, color); + } + } + } +} diff --git a/src/intel/tools/decoder.h b/src/intel/tools/decoder.h index 576b0e08596..4352dea9679 100644 --- a/src/intel/tools/decoder.h +++ b/src/intel/tools/decoder.h @@ -130,4 +130,9 @@ void gen_field_iterator_init(struct gen_field_iterator *iter, bool gen_field_iterator_next(struct gen_field_iterator *iter); +void gen_print_group(FILE *out, + struct gen_group *group, + uint64_t offset, const uint32_t *p, + int starting_dword, bool color); + #endif /* DECODER_H */