diff options
Diffstat (limited to 'util/msrtool')
-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; } |