From: Uwe Hermann Date: Thu, 20 Sep 2007 23:57:44 +0000 (+0000) Subject: Add -D / --dump-readable option which prints the Super I/O register X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=eddc473ce0753bfd8aa55cc19bcec991866694fd;p=coreboot.git Add -D / --dump-readable option which prints the Super I/O register contents in human-readable form (e.g. "COM1 enabled" etc.) instead of the hex-table format from -d / --dump. Signed-off-by: Uwe Hermann Acked-by: Uwe Hermann git-svn-id: svn://svn.coreboot.org/coreboot/trunk@2795 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1 --- diff --git a/util/superiotool/README b/util/superiotool/README index f0294d41c..9fef6306c 100644 --- a/util/superiotool/README +++ b/util/superiotool/README @@ -28,12 +28,13 @@ Installation Usage ----- - $ superiotool [-d] [-V] [-v] [-h] + $ superiotool [-d] [-D] [-V] [-v] [-h] - -d | --dump Dump Super I/O registers - -V | --verbose Verbose mode - -v | --version Show the superiotool version - -h | --help Show a short help text + -d | --dump Dump Super I/O registers + -D | --dump-readable Dump Super I/O registers in human-readable format + -V | --verbose Verbose mode + -v | --version Show the superiotool version + -h | --help Show a short help text Per default (no options) superiotool will just probe for a Super I/O and print its vendor, name, ID, version, and config port. @@ -44,10 +45,14 @@ Typical usage of superiotool: $ superiotool - - Detailed register dump of the Super I/O (if detected): + - Register dump as table of hex-values of the Super I/O (if detected): $ superiotool -d + - Detailed register dump in human-readable format: + + $ superiotool -D + Supported Super I/O Chips ------------------------- diff --git a/util/superiotool/fintek.c b/util/superiotool/fintek.c index a95a38354..f7f0a7c5c 100644 --- a/util/superiotool/fintek.c +++ b/util/superiotool/fintek.c @@ -33,8 +33,11 @@ const static struct superio_registers reg_table[] = { {EOT} }; -void dump_fintek(uint16_t port, uint16_t did) +static void dump_readable_fintek(uint16_t port, uint16_t did) { + if (!dump_readable) + return; + switch (did) { case 0x0604: printf("Fintek F71805\n"); @@ -124,9 +127,7 @@ void probe_idregs_fintek(uint16_t port) get_superio_name(reg_table, did), vid, did, port); dump_superio("Fintek", reg_table, port, did); - - /* TODO: Revive this as --dump-human-readable output. */ - /* dump_fintek(port, did); */ + dump_readable_fintek(port, did); exit_conf_mode_winbond_fintek_ite_8787(port); } diff --git a/util/superiotool/ite.c b/util/superiotool/ite.c index 1a65e2cff..fbda54780 100644 --- a/util/superiotool/ite.c +++ b/util/superiotool/ite.c @@ -194,12 +194,6 @@ const static struct superio_registers reg_table[] = { {EOT} }; -/* TODO: Drop this function later. */ -void dump_ite(uint16_t port, uint16_t id) -{ - dump_superio("ITE", reg_table, port, id); -} - /** * Enable configuration sequence (ITE uses this for newer IT87[012]xF). * @@ -244,6 +238,7 @@ static void probe_idregs_ite_helper(uint16_t port) get_superio_name(reg_table, id), id, chipver, port); dump_superio("ITE", reg_table, port, id); + dump_superio_readable(port); /* TODO */ } void probe_idregs_ite(uint16_t port) diff --git a/util/superiotool/nsc.c b/util/superiotool/nsc.c index ec9b32619..797f3d4c4 100644 --- a/util/superiotool/nsc.c +++ b/util/superiotool/nsc.c @@ -25,8 +25,11 @@ static const char *familyid[] = { [0xf1] = "PC8374 (Winbond/NatSemi)" }; -void dump_ns8374(uint16_t port) +static void dump_readable_ns8374(uint16_t port) { + if (!dump_readable) + return; + printf("Enables: 21=%02x, 22=%02x, 23=%02x, 24=%02x, 26=%02x\n", regval(port, 0x21), regval(port, 0x22), regval(port, 0x23), regval(port, 0x24), regval(port, 0x26)); @@ -79,7 +82,7 @@ void probe_idregs_simple(uint16_t port) switch (id) { case 0xf1: - dump_ns8374(port); + dump_readable_ns8374(port); break; default: printf("No dump for 0x%02x\n", id); diff --git a/util/superiotool/smsc.c b/util/superiotool/smsc.c index 13ad4a722..cd612e87f 100644 --- a/util/superiotool/smsc.c +++ b/util/superiotool/smsc.c @@ -69,6 +69,7 @@ void probe_idregs_smsc(uint16_t port) get_superio_name(reg_table, id), id, rev, port); dump_superio("SMSC", reg_table, port, id); + dump_superio_readable(port); /* TODO */ exit_conf_mode_smsc(port); } diff --git a/util/superiotool/superiotool.c b/util/superiotool/superiotool.c index 0a253ad62..13e55556d 100644 --- a/util/superiotool/superiotool.c +++ b/util/superiotool/superiotool.c @@ -23,7 +23,7 @@ #include "superiotool.h" /* Command line options. */ -int dump = 0, verbose = 0; +int dump = 0, dump_readable = 0, verbose = 0; uint8_t regval(uint16_t port, uint8_t reg) { @@ -147,6 +147,13 @@ void dump_superio(const char *vendor, } } +void dump_superio_readable(uint16_t port) +{ + /* TODO */ + if (dump_readable) + printf("No human-readable dump available for this Super I/O\n"); +} + void no_superio_found(uint16_t port) { if (!verbose) @@ -164,19 +171,23 @@ int main(int argc, char *argv[]) int i, j, opt, option_index; const static struct option long_options[] = { - {"dump", no_argument, NULL, 'd'}, - {"verbose", no_argument, NULL, 'V'}, - {"version", no_argument, NULL, 'v'}, - {"help", no_argument, NULL, 'h'}, + {"dump", no_argument, NULL, 'd'}, + {"dump-readable", no_argument, NULL, 'D'}, + {"verbose", no_argument, NULL, 'V'}, + {"version", no_argument, NULL, 'v'}, + {"help", no_argument, NULL, 'h'}, {0, 0, 0, 0} }; - while ((opt = getopt_long(argc, argv, "dVvh", + while ((opt = getopt_long(argc, argv, "dDVvh", long_options, &option_index)) != EOF) { switch (opt) { case 'd': dump = 1; break; + case 'D': + dump_readable = 1; + break; case 'V': verbose = 1; break; diff --git a/util/superiotool/superiotool.h b/util/superiotool/superiotool.h index 9b82b4cf9..493c84105 100644 --- a/util/superiotool/superiotool.h +++ b/util/superiotool/superiotool.h @@ -31,11 +31,12 @@ #define SUPERIOTOOL_VERSION "0.1" -#define USAGE "Usage: superiotool [-d] [-V] [-v] [-h]\n\n\ - -d | --dump Dump Super I/O registers\n\ - -V | --verbose Verbose mode\n\ - -v | --version Show the superiotool version\n\ - -h | --help Show a short help text\n\n\ +#define USAGE "Usage: superiotool [-d] [-D] [-V] [-v] [-h]\n\n\ + -d | --dump Dump Super I/O registers\n\ + -D | --dump-readable Dump Super I/O registers in human-readable format\n\ + -V | --verbose Verbose mode\n\ + -v | --version Show the superiotool version\n\ + -h | --help Show a short help text\n\n\ Per default (no options) superiotool will just probe for a Super I/O\n\ and print its vendor, name, ID, version, and config port.\n" @@ -54,14 +55,14 @@ and print its vendor, name, ID, version, and config port.\n" #define MAXNUMPORTS (2 + 1) /* Maximum number of Super I/O ports */ /* Command line parameters. */ -extern int dump, verbose; +extern int dump, dump_readable, verbose; struct superio_registers { - int32_t superio_id; /* Signed, as we need EOT. */ - const char name[MAXNAMELEN]; + int32_t superio_id; /* Signed, as we need EOT. */ + const char name[MAXNAMELEN]; /* Super I/O name */ struct { int ldn; - const char *name; + const char *name; /* LDN name */ int idx[IDXSIZE]; int def[IDXSIZE]; } ldn[LDNSIZE]; @@ -77,18 +78,16 @@ const char *get_superio_name(const struct superio_registers reg_table[], uint16_t id); void dump_superio(const char *name, const struct superio_registers reg_table[], uint16_t port, uint16_t id); +void dump_superio_readable(uint16_t port); void no_superio_found(uint16_t port); /* fintek.c */ -void dump_fintek(uint16_t port, uint16_t did); void probe_idregs_fintek(uint16_t port); /* ite.c */ -void dump_ite(uint16_t port, uint16_t id); void probe_idregs_ite(uint16_t port); /* nsc.c */ -void dump_ns8374(uint16_t port); void probe_idregs_simple(uint16_t port); /* smsc.c */ diff --git a/util/superiotool/winbond.c b/util/superiotool/winbond.c index 0e8f2b86f..9dbaba80d 100644 --- a/util/superiotool/winbond.c +++ b/util/superiotool/winbond.c @@ -150,6 +150,7 @@ void probe_idregs_winbond(uint16_t port) /* TODO: Special notes in dump output for the MISC entries. */ dump_superio("Winbond", reg_table, port, id); + dump_superio_readable(port); /* TODO */ exit_conf_mode_winbond_fintek_ite_8787(port); }