msrtool: Allow MSR symbols (names) to also be used as addresses.
authorPeter Stuge <peter@stuge.se>
Mon, 26 Jan 2009 17:18:31 +0000 (17:18 +0000)
committerPeter Stuge <peter@stuge.se>
Mon, 26 Jan 2009 17:18:31 +0000 (17:18 +0000)
Thanks for the idea Mart!

Signed-off-by: Peter Stuge <peter@stuge.se>
Acked-by: Peter Stuge <peter@stuge.se>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3921 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1

util/msrtool/msrtool.c
util/msrtool/msrtool.h
util/msrtool/msrutils.c

index 5742a1765ccf1416653f0f0d20588493c52b7318..bafb0908c07a555eb843ab4ba0719b1af337463a 100644 (file)
@@ -278,7 +278,7 @@ int main(int argc, char *argv[]) {
                        break;
                case 'i':
                        input = 1;
-                       addr = strtoul(optarg, NULL, 16);
+                       addr = msraddrbyname(optarg);
                        optarg = strchr(optarg, '=');
                        if (NULL == optarg) {
                                fprintf(stderr, "missing value in -i argument!\n");
@@ -398,7 +398,7 @@ int main(int argc, char *argv[]) {
        }
 
        for (; optind < argc; optind++) {
-               addr = strtoul(argv[optind], NULL, 16);
+               addr = msraddrbyname(argv[optind]);
                if (!sys->rdmsr(cpu, addr, &msrval))
                        break;
                decodemsr(cpu, addr, msrval);
index 7b639f06575aff5d410b9893f37aff35364ee477..23bc4b88d29e101cb555fb3aef34c1be92f7f9dd 100644 (file)
@@ -157,6 +157,7 @@ struct msr msr_shl(const struct msr a, const uint8_t bits);
 struct msr msr_shr(const struct msr a, const uint8_t bits);
 void msr_and(struct msr *a, const struct msr b);
 const struct msrdef *findmsrdef(const uint32_t addr);
+const uint32_t msraddrbyname(const char *name);
 void dumpmsrdefs(const struct targetdef *t);
 int dumpmsrdefsvals(FILE *f, const struct targetdef *t, const uint8_t cpu);
 uint8_t str2msr(char *str, struct msr *msr);
index c5fcbea143be926316f72674c7b84fd839727b0c..4a4782b68795f858c564a1055ea7563e830ece0f 100644 (file)
@@ -137,6 +137,22 @@ const struct msrdef *findmsrdef(const uint32_t addr) {
        return NULL;
 }
 
+const uint32_t msraddrbyname(const char *name) {
+       uint8_t t;
+       const uint32_t addr = strtoul(name, NULL, 16);
+       const struct msrdef *m;
+       if (!targets)
+               return 0;
+       for (t = 0; t < targets_found; t++)
+               for (m = targets[t]->msrs; !MSR_ISEOT(*m); m++) {
+                       if (addr == m->addr)
+                               return m->addr;
+                       if (!strcasecmp(name, m->symbol))
+                               return m->addr;
+               }
+       return 0;
+}
+
 void dumpmsrdefs(const struct targetdef *t) {
        const struct msrdef *m;
        const struct msrbits *mb;