diff options
author | Lubomir Rintel <lkundrak@v3.sk> | 2017-01-22 22:19:33 +0100 |
---|---|---|
committer | Philipp Deppenwiese <zaolin.daisuki@gmail.com> | 2018-05-13 10:07:23 +0000 |
commit | 38686f15dd57745e24f100797db33a84e65f7ec7 (patch) | |
tree | df3ff832875c99d86b284e8401bd8841c75ae117 | |
parent | 199a23cd8ac32236b9112709a6910c4055c71932 (diff) |
msrtool: add support for printing string values
The VIA CPUs allow setting the CPUID vendor, which is best read as
a character string.
Change-Id: I67f77ca75f7d77e47b3ba09bad904df5805e373a
Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
Reviewed-on: https://review.coreboot.org/18257
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Martin Roth <martinroth@google.com>
-rw-r--r-- | util/msrtool/msrtool.h | 4 | ||||
-rw-r--r-- | util/msrtool/msrutils.c | 22 |
2 files changed, 25 insertions, 1 deletions
diff --git a/util/msrtool/msrtool.h b/util/msrtool/msrtool.h index 93881e964c..1e923c4bfd 100644 --- a/util/msrtool/msrtool.h +++ b/util/msrtool/msrtool.h @@ -45,7 +45,8 @@ enum { PRESENT_BIN, PRESENT_OCT, PRESENT_HEX, - PRESENT_HEXDEC + PRESENT_HEXDEC, + PRESENT_STR, } PresentTypes; struct msr { @@ -162,6 +163,7 @@ struct pci_dev *pci_dev_find(uint16_t vendor, uint16_t device); /* msrutils.c */ void hexprint(FILE *f, const struct msr val, const uint8_t bits); +void strprint(FILE *f, const struct msr val, const uint8_t bits); int msr_eq(const struct msr a, const struct msr b); struct msr msr_shl(const struct msr a, const uint8_t bits); struct msr msr_shr(const struct msr a, const uint8_t bits); diff --git a/util/msrtool/msrutils.c b/util/msrtool/msrutils.c index 57a271d05d..1c6707e4c2 100644 --- a/util/msrtool/msrutils.c +++ b/util/msrtool/msrutils.c @@ -65,6 +65,9 @@ static void print_bitval(FILE *f, const struct msrbits *mb, const struct msr val hexprint(f, val, mb->size); fprintf(f, " %d", val.lo); break; + case PRESENT_STR: + strprint(f, val, mb->size); + break; } if (mbv->text) fprintf(f, ": %s", mbv->text); @@ -106,6 +109,25 @@ void hexprint(FILE *f, const struct msr val, const uint8_t bits) { fprintf(f, "0x%08x%08x", val.hi, val.lo); } +void strprint(FILE *f, const struct msr val, const uint8_t bits) { + if (bits > 56) + fputc(val.hi, f); + if (bits > 48) + fputc(val.hi >> 8, f); + if (bits > 40) + fputc(val.hi >> 16, f); + if (bits > 32) + fputc(val.hi >> 24, f); + if (bits > 24) + fputc(val.lo, f); + if (bits > 16) + fputc(val.lo >> 8, f); + if (bits > 8) + fputc(val.lo >> 16, f); + if (bits > 0) + fputc(val.lo >> 24, f); +} + int msr_eq(const struct msr a, const struct msr b) { return a.hi == b.hi && a.lo == b.lo; } |