Superiotool: Add dump support to the Winbond W83697HF/F.
authorUwe Hermann <uwe@hermann-uwe.de>
Thu, 20 Sep 2007 00:00:49 +0000 (00:00 +0000)
committerUwe Hermann <uwe@hermann-uwe.de>
Thu, 20 Sep 2007 00:00:49 +0000 (00:00 +0000)
Minor coding style changes and code simplifications.

Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@2791 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1

util/superiotool/ite.c
util/superiotool/smsc.c
util/superiotool/superiotool.c
util/superiotool/superiotool.h
util/superiotool/winbond.c

index f02f846c7fe5819b8f2f0f2fd38658904cecb05d..fc7c4137d82868da5dafff81908e4867edecad14 100644 (file)
@@ -27,37 +27,38 @@ const static struct superio_registers reg_table[] = {
        {0x8705, "IT8705 or IT8700", {
                {EOT}}},
        {0x8708, "IT8708", {
-               {NOLDN,
+               {NOLDN, NULL,
                        {0x07,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,
                         0x29,0x2a,0x2e,0x2f,EOT},
                        {NANA,0x87,0x08,0x00,0x00,NANA,0x3f,0x00,0xff,0xff,
                         0xff,0xff,0x00,0x00,EOT}},
-               {0x0,
+               {0x0, NULL,
                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
                        {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
-               {0x1,
+               {0x1, NULL,
                        {0x30,0x60,0x61,0x70,0xf0,EOT},
                        {0x00,0x03,0xf8,0x04,0x00,EOT}},
-               {0x2,
+               {0x2, NULL,
                        {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
                        {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
-               {0x3,
+               {0x3, NULL,
                        {0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x70,0x74,
                         0xf0,EOT},
                        {0x00,0x03,0x78,0x07,0x78,0x00,0x80,0x07,0x03,
                         0x03,EOT}},
-               {0x4,
+               {0x4, NULL,
                        {0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
                         0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,EOT},
                        {NANA,NANA,0x00,0x00,0x00,0x00,0x00,0x00,
                         0x00,0x00,0x00,0x00,0x00,NANA,NANA,EOT}},
-               {0x5,   /* Note: 0x30 can actually be 0x00 _or_ 0x01. */
+               {0x5, NULL,
+                       /* Note: 0x30 can actually be 0x00 _or_ 0x01. */
                        {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
                        {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
-               {0x6,
+               {0x6, NULL,
                        {0x30,0x70,0x71,0xf0,EOT},
                        {0x00,0x0c,0x02,0x00,EOT}},
-               {0x7,
+               {0x7, NULL,
                        {0x70,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,
                         0xbb,0xbc,0xbd,0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc8,
                         0xc9,0xca,0xcb,0xcc,0xcd,0xd0,0xd1,0xd2,0xd3,0xd4,
@@ -70,46 +71,46 @@ const static struct superio_registers reg_table[] = {
                         0x00,0x00,NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x00,
                         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,
                         0x00,EOT}},
-               {0x8,
+               {0x8, NULL,
                        {0x30,0x60,0x61,EOT},
                        {0x00,0x02,0x01,EOT}},
-               {0x9,
+               {0x9, NULL,
                        {0x30,0x60,0x61,0x70,0xf0,EOT},
                        {0x00,0x03,0x10,0x0b,0x00,EOT}},
-               {0xa,
+               {0xa, NULL,
                        {0x30,0x60,0x61,0x70,0xf0,EOT},
                        {0x00,0x03,0x00,0x0a,0x00,EOT}},
                {EOT}}},
        {0x8710, "IT8710", {
                {EOT}}},
        {0x8712, "IT8712", {
-               {NOLDN,
+               {NOLDN, NULL,
                        {0x07,0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
                        {NANA,0x87,0x12,0x08,0x00,0x00,0x00,EOT}},
-               {0x0,
+               {0x0, NULL,
                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
                        {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
-               {0x1,
+               {0x1, NULL,
                        {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
                        {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
-               {0x2,
+               {0x2, NULL,
                        {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
                        {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
-               {0x3,
+               {0x3, NULL,
                        {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
                        {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
-               {0x4,
+               {0x4, NULL,
                        {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
                         0xf4,0xf5,0xf6,EOT},
                        {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
                         0x00,NANA,NANA,EOT}},
-               {0x5,
+               {0x5, NULL,
                        {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
                        {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x08,EOT}},
-               {0x6,
+               {0x6, NULL,
                        {0x30,0x70,0x71,0xf0,EOT},
                        {0x00,0x0c,0x02,0x00,EOT}},
-               {0x7,
+               {0x7, NULL,
                        {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
                         0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
                         0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
@@ -122,44 +123,44 @@ const static struct superio_registers reg_table[] = {
                         0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
                         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                         0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,0x00,EOT}},
-               {0x8,
+               {0x8, NULL,
                        {0x30,0x60,0x61,0x70,0xf0,EOT},
                        {0x00,0x03,0x00,0x0a,0x00,EOT}},
-               {0x9,
+               {0x9, NULL,
                        {0x30,0x60,0x61,EOT},
                        {0x00,0x02,0x01,EOT}},
-               {0xa,
+               {0xa, NULL,
                        {0x30,0x60,0x61,0x70,0xf0,EOT},
                        {0x00,0x03,0x10,0x0b,0x00,EOT}},
                {EOT}}},
        {0x8716, "IT8716", {
-               {NOLDN,
+               {NOLDN, NULL,
                        {0x07,0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
                        {NANA,0x87,0x16,0x01,0x00,0x00,0x00,EOT}},
-               {0x0,
+               {0x0, NULL,
                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
                        {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
-               {0x1,
+               {0x1, NULL,
                        {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
                        {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
-               {0x2,
+               {0x2, NULL,
                        {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
                        {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
-               {0x3,
+               {0x3, NULL,
                        {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
                        {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
-               {0x4,
+               {0x4, NULL,
                        {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
                         0xf4,0xf5,0xf6,EOT},
                        {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
                         0x00,NANA,NANA,EOT}},
-               {0x5,
+               {0x5, NULL,
                        {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
                        {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
-               {0x6,
+               {0x6, NULL,
                        {0x30,0x70,0x71,0xf0,EOT},
                        {0x00,0x0c,0x02,0x00,EOT}},
-               {0x7,
+               {0x7, NULL,
                        {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
                         0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
                         0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
@@ -172,13 +173,13 @@ const static struct superio_registers reg_table[] = {
                         0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
                         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                         0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,0x00,EOT}},
-               {0x8,
+               {0x8, NULL,
                        {0x30,0x60,0x61,0x70,0xf0,EOT},
                        {0x00,0x03,0x00,0x0a,0x00,EOT}},
-               {0x9,
+               {0x9, NULL,
                        {0x30,0x60,0x61,EOT},
                        {0x00,0x02,0x01,EOT}},
-               {0xa,
+               {0xa, NULL,
                        {0x30,0x60,0x61,0x70,0xf0,EOT},
                        {0x00,0x03,0x10,0x0b,0x00,EOT}},
                {EOT}}},
index 4d64a9632bdac9aea66d242f3d6009726590d2ec..3bfc53661f6fbf612f787a71204284f6de8c6895 100644 (file)
@@ -25,7 +25,7 @@
 
 const static struct superio_registers reg_table[] = {
        {0x28, "FDC37N769", {
-               {NOLDN,
+               {NOLDN, NULL,
                        {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
                         0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
                         0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,
index 479c47f7cc8b7362f36eb1f65c09b6b55cb8ed65..8aea0a02d98b42586f909b6103929368be2d66b3 100644 (file)
@@ -60,11 +60,58 @@ const char *get_superio_name(const struct superio_registers reg_table[],
        return "<unknown>";
 }
 
-void dump_superio(const char *vendor, const struct superio_registers reg_table[],
+static void dump_regs(const struct superio_registers reg_table[],
+                     int i, int j, uint16_t port)
+{
+       int k, *idx;
+
+       if (reg_table[i].ldn[j].ldn != NOLDN) {
+               printf("LDN 0x%02x ", reg_table[i].ldn[j].ldn);
+               if (reg_table[i].ldn[j].name != NULL)
+                       printf("(%s)", reg_table[i].ldn[j].name);
+               regwrite(port, 0x07, reg_table[i].ldn[j].ldn);
+       } else {
+               printf("Register dump:");
+       }
+
+       idx = reg_table[i].ldn[j].idx;
+
+       printf("\nidx ");
+       for (k = 0; /* Nothing */; k++) {
+               if (idx[k] == EOT)
+                       break;
+               printf("%02x ", idx[k]);
+       }
+
+       printf("\nval ");
+       for (k = 0; /* Nothing */; k++) {
+               if (idx[k] == EOT)
+                       break;
+               printf("%02x ", regval(port, idx[k]));
+       }
+
+       printf("\ndef ");
+       idx = reg_table[i].ldn[j].def;
+       for (k = 0; /* Nothing */; k++) {
+               if (idx[k] == EOT)
+                       break;
+               else if (idx[k] == NANA)
+                       printf("NA ");
+               else if (idx[k] == RSVD)
+                       printf("RR ");
+               else if (idx[k] == MISC)        /* TODO */
+                       printf("MM ");
+               else
+                       printf("%02x ", idx[k]);
+       }
+       printf("\n");
+}
+
+void dump_superio(const char *vendor,
+                 const struct superio_registers reg_table[],
                  uint16_t port, uint16_t id)
 {
-       int i, j, k, nodump;
-       int *idx;
+       int i, j, no_dump_available = 1;
 
        if (!dump)
                return;
@@ -76,66 +123,28 @@ void dump_superio(const char *vendor, const struct superio_registers reg_table[]
                if ((uint16_t)reg_table[i].superio_id != id)
                        continue;
 
-               nodump = 1;
-
                for (j = 0; /* Nothing */; j++) {
                        if (reg_table[i].ldn[j].ldn == EOT)
                                break;
-
-                       nodump = 0;
-
-                       if (reg_table[i].ldn[j].ldn != NOLDN) {
-                               printf("Switching to LDN 0x%02x\n",
-                                      reg_table[i].ldn[j].ldn);
-                               regwrite(port, 0x07, reg_table[i].ldn[j].ldn);
-                       }
-
-                       idx = reg_table[i].ldn[j].idx;
-
-                       printf("idx ");
-                       for (k = 0; /* Nothing */; k++) {
-                               if (idx[k] == EOT)
-                                       break;
-                               printf("%02x ", idx[k]);
-                       }
-
-                       printf("\nval ");
-                       for (k = 0; /* Nothing */; k++) {
-                               if (idx[k] == EOT)
-                                       break;
-                               printf("%02x ", regval(port, idx[k]));
-                       }
-
-                       printf("\ndef ");
-                       idx = reg_table[i].ldn[j].def;
-                       for (k = 0; /* Nothing */; k++) {
-                               if (idx[k] == EOT)
-                                       break;
-                               else if (idx[k] == NANA)
-                                       printf("NA ");
-                               else if (idx[k] == RSVD)
-                                       printf("RR ");
-                               else if (idx[k] == MISC)        /* TODO */
-                                       printf("MM ");
-                               else
-                                       printf("%02x ", idx[k]);
-                       }
-                       printf("\n");
+                       no_dump_available = 0;
+                       dump_regs(reg_table, i, j, port);
                }
 
-               if (nodump)
-                       printf("No dump for %s %s\n", vendor, reg_table[i].name);
+               if (no_dump_available)
+                       printf("No dump available for this Super I/O\n");
        }
 }
 
-void no_superio_found(uint16_t port) {
+void no_superio_found(uint16_t port)
+{
        if (!verbose)
                return;
 
        if (inb(port) == 0xff)
                printf("No Super I/O chip found at 0x%04x\n", port);
        else
-               printf("Probing 0x%04x, failed (0x%02x), data returns 0x%02x\n", port, inb(port), inb(port + 1));
+               printf("Probing 0x%04x, failed (0x%02x), data returns 0x%02x\n",
+                      port, inb(port), inb(port + 1));
 }
 
 int main(int argc, char *argv[])
index 7b6ef904ae6d18e856149ee8cfbbc70c60a51196..b0d12cd0dd011f1a0706b7009f59b8ed38759548 100644 (file)
@@ -61,6 +61,7 @@ struct superio_registers {
        const char name[MAXNAMELEN];
        struct {
                int ldn;
+               const char *name;
                int idx[IDXSIZE];
                int def[IDXSIZE];
        } ldn[LDNSIZE];
index 0058c33ee9bb3967a473726c7a6b5ec7011cadd1..709e7f329fb0d3f563b61e049111878ebda925a2 100644 (file)
  */
 const static struct superio_registers reg_table[] = {
        {0x601, "W83697HF/F", {
-               /*
-               {NOLDN,
-                       {0x20,0x21,EOT},
-                       {0x60,NANA,EOT}},
-               */
+               {NOLDN, NULL,
+                       /* TODO: 0x02, 0x07. */
+                       {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x28,0x29,
+                        0x2a,EOT},
+                       {0x60,NANA,0xff,0x00,0x00,0x00,0x00,0x00,0x00,
+                        MISC,EOT}},
+               /* Some register defaults depend on the value of PNPCSV. */
+               {0x0, "Floppy",
+                       {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
+                        0xf5,EOT},
+                       {0x01,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
+                        0x00,EOT}},
+               {0x1, "Parallel port",
+                       {0x30,0x60,0x61,0x70,0x74,0xf0,EOT},
+                       {0x01,0x03,0x78,0x07,0x04,0x3f,EOT}},
+               {0x2, "COM1",
+                       {0x30,0x60,0x61,0x70,0xf0,EOT},
+                       {0x01,0x03,0xf8,0x04,0x00,EOT}},
+               {0x3, "COM2",
+                       {0x30,0x60,0x61,0x70,0xf0,0xf1,EOT},
+                       {0x01,0x02,0xf8,0x03,0x00,0x00,EOT}},
+               {0x6, "CIR",
+                       {0x30,0x60,0x61,0x70,EOT},
+                       {0x00,0x00,0x00,0x00,EOT}},
+               {0x7, "Game port, GPIO port 1",
+                       {0x30,0x60,0x61,0x62,0x63,0xf0,0xf1,0xf2,EOT},
+                       {0x00,0x02,0x01,0x00,0x00,0xff,0x00,0x00,EOT}},
+               {0x8, "MIDI port, GPIO port 5",
+                       {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
+                        0xf4,0xf5,EOT},
+                       {0x00,0x03,0x30,0x00,0x00,0x09,0xff,0x00,0x00,0x00,
+                        0x00,0x00,EOT}},
+               {0x9, "GPIO port 2, 3, and 4",
+                       {0x30,0x60,0x61,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,
+                        0xf7,0xf8,0xf5,EOT},
+                       {0x00,0x00,0x00,0xff,0x00,0x00,0xff,0x00,0x00,0xff,
+                        0x00,0x00,0x00,EOT}},
+               {0xa, "ACPI",
+                       {0x30,0x70,0xe0,0xe1,0xe2,0xe5,0xe6,0xe7,
+                        0xf0,0xf1,0xf3,0xf4,0xf6,0xf7,0xf9,EOT},
+                       {0x00,0x00,0x00,0x00,NANA,0x00,0x00,0x00,
+                        0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
+               {0xb, "Hardware monitor",
+                       {0x30,0x60,0x61,0x70,EOT},
+                       {0x00,0x00,0x00,0x00,EOT}},
                {EOT}}},
        {0x886, "W83627EHF/EF/EHG/EG", {
-               {NOLDN,
+               {NOLDN, NULL,
                        {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,
                         0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT},
                        {0x88,NANA,0xff,0x00,MISC,0x00,MISC,RSVD,0x50,
                         0x04,0x00,RSVD,0x00,0x21,0x00,0x00,EOT}},
-               {0x0,
+               {0x0, NULL,
                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
                         0xf5,EOT},
                        {0x01,0x03,0xf0,0x06,0x02,0x8e,0x00,0xff,0x00,
                         0x00,EOT}},
-               {0x1,
+               {0x1, NULL,
                        {0x30,0x60,0x61,0x70,0x74,0xf0,EOT},
                        {0x01,0x03,0x78,0x07,0x04,0x3f,EOT}},
-               {0x2,
+               {0x2, NULL,
                        {0x30,0x60,0x61,0x70,0xf0,EOT},
                        {0x01,0x03,0xf8,0x04,0x00,EOT}},
-               {0x3,
+               {0x3, NULL,
                        {0x30,0x60,0x61,0x70,0xf0,0xf1,EOT},
                        {0x01,0x02,0xf8,0x03,0x00,0x00,EOT}},
-               {0x5,
+               {0x5, NULL,
                        {0x30,0x60,0x61,0x62,0x63,0x70,0x72,0xf0,EOT},
                        {0x01,0x00,0x60,0x00,0x64,0x01,0x0c,0x83,EOT}},
-               {0x6,
+               {0x6, NULL,
                        {0x30,0x62,0x63,EOT},
                        {0x00,0x00,0x00,EOT}},
-               {0x7,
+               {0x7, NULL,
                        {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
                         0xf4,0xf5,0xf6,0xf7,EOT},
                        {0x00,0x02,0x01,0x03,0x30,0x09,0xff,0x00,0x00,0x00,
                         0xff,0x00,0x00,0x00,EOT}},
-               {0x8,
+               {0x8, NULL,
                        {0x30,0xf5,0xf6,0xf7,EOT},
                        {0x00,0x00,0x00,0x00,EOT}},
-               {0x9,
+               {0x9, NULL,
                        {0x30,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xf0,0xf1,0xf2,
                         0xf3,0xf4,0xf5,0xf6,0xf7,EOT},
                        {0x00,0xff,0x00,0x00,0xff,0x00,0x00,0xff,0x00,0x00,
                         0x00,0xff,0x00,0x00,0x00,EOT}},
-               {0xa,
+               {0xa, NULL,
                        {0x30,0x70,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
                         0xe8,0xf2,0xf3,0xf4,0xf6,0xf7,EOT},
                        {0x00,0x00,0x01,0x00,0xff,0x08,0x00,RSVD,0x00,0x00,
                         RSVD,0x7c,0x00,0x00,0x00,0x00,EOT}},
-               {0xb,
+               {0xb, NULL,
                        {0x30,0x60,0x61,0x70,0xf0,0xf1,EOT},
                        {0x00,0x00,0x00,0x00,0xc1,0x00,EOT}},
                {EOT}}},