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>
This commit is contained in:
parent
199a23cd8a
commit
38686f15dd
|
@ -45,7 +45,8 @@ enum {
|
||||||
PRESENT_BIN,
|
PRESENT_BIN,
|
||||||
PRESENT_OCT,
|
PRESENT_OCT,
|
||||||
PRESENT_HEX,
|
PRESENT_HEX,
|
||||||
PRESENT_HEXDEC
|
PRESENT_HEXDEC,
|
||||||
|
PRESENT_STR,
|
||||||
} PresentTypes;
|
} PresentTypes;
|
||||||
|
|
||||||
struct msr {
|
struct msr {
|
||||||
|
@ -162,6 +163,7 @@ struct pci_dev *pci_dev_find(uint16_t vendor, uint16_t device);
|
||||||
|
|
||||||
/* msrutils.c */
|
/* msrutils.c */
|
||||||
void hexprint(FILE *f, const struct msr val, const uint8_t bits);
|
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);
|
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_shl(const struct msr a, const uint8_t bits);
|
||||||
struct msr msr_shr(const struct msr a, const uint8_t bits);
|
struct msr msr_shr(const struct msr a, const uint8_t bits);
|
||||||
|
|
|
@ -65,6 +65,9 @@ static void print_bitval(FILE *f, const struct msrbits *mb, const struct msr val
|
||||||
hexprint(f, val, mb->size);
|
hexprint(f, val, mb->size);
|
||||||
fprintf(f, " %d", val.lo);
|
fprintf(f, " %d", val.lo);
|
||||||
break;
|
break;
|
||||||
|
case PRESENT_STR:
|
||||||
|
strprint(f, val, mb->size);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if (mbv->text)
|
if (mbv->text)
|
||||||
fprintf(f, ": %s", 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);
|
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) {
|
int msr_eq(const struct msr a, const struct msr b) {
|
||||||
return a.hi == b.hi && a.lo == b.lo;
|
return a.hi == b.hi && a.lo == b.lo;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue