diff --git a/src/intel/tools/aubinator.c b/src/intel/tools/aubinator.c index 73df16b6dce..0d4b3f944f4 100644 --- a/src/intel/tools/aubinator.c +++ b/src/intel/tools/aubinator.c @@ -111,7 +111,12 @@ print_iterator_values(struct gen_field_iterator *iter, int *idx) { char *token = NULL; if (strstr(iter->value, "struct") == NULL) { - printf(" %s: %s\n", iter->name, iter->value); + if (strlen(iter->description) > 0) { + printf(" %s: %s (%s)\n", + iter->name, iter->value, iter->description); + } else { + printf(" %s: %s\n", iter->name, iter->value); + } } else { token = strtok(iter->value, " "); if (token != NULL) { diff --git a/src/intel/tools/decoder.c b/src/intel/tools/decoder.c index 88ba5c0f5fc..6bd02bf9053 100644 --- a/src/intel/tools/decoder.c +++ b/src/intel/tools/decoder.c @@ -635,6 +635,19 @@ gen_field_iterator_init(struct gen_field_iterator *iter, iter->print_colors = print_colors; } +static void +gen_field_write_value(char *str, size_t max_length, + struct gen_field *field, + uint64_t value) +{ + for (int i = 0; i < field->n_values; i++) { + if (field->values[i]->value == value) { + strncpy(str, field->values[i]->name, max_length); + return; + } + } +} + bool gen_field_iterator_next(struct gen_field_iterator *iter) { @@ -656,16 +669,26 @@ gen_field_iterator_next(struct gen_field_iterator *iter) else v.qw = iter->p[index]; + iter->description[0] = '\0'; + switch (f->type.kind) { case GEN_TYPE_UNKNOWN: - case GEN_TYPE_INT: + case GEN_TYPE_INT: { + uint64_t value = field(v.qw, f->start, f->end); snprintf(iter->value, sizeof(iter->value), - "%"PRId64, field(v.qw, f->start, f->end)); + "%"PRId64, value); + gen_field_write_value(iter->description, sizeof(iter->description), + f, value); break; - case GEN_TYPE_UINT: + } + case GEN_TYPE_UINT: { + uint64_t value = field(v.qw, f->start, f->end); snprintf(iter->value, sizeof(iter->value), - "%"PRIu64, field(v.qw, f->start, f->end)); + "%"PRIu64, value); + gen_field_write_value(iter->description, sizeof(iter->description), + f, value); break; + } case GEN_TYPE_BOOL: { const char *true_string = iter->print_colors ? "\e[0;35mtrue\e[0m" : "true"; diff --git a/src/intel/tools/decoder.h b/src/intel/tools/decoder.h index ecc9ff116b7..b28e6031249 100644 --- a/src/intel/tools/decoder.h +++ b/src/intel/tools/decoder.h @@ -53,6 +53,7 @@ struct gen_field_iterator { struct gen_group *group; const char *name; char value[128]; + char description[128]; const uint32_t *p; int i; bool print_colors;