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 <uwe@hermann-uwe.de>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@2795 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Uwe Hermann 2007-09-20 23:57:44 +00:00
parent b4db2209f9
commit eddc473ce0
8 changed files with 52 additions and 36 deletions

View File

@ -28,12 +28,13 @@ Installation
Usage Usage
----- -----
$ superiotool [-d] [-V] [-v] [-h] $ superiotool [-d] [-D] [-V] [-v] [-h]
-d | --dump Dump Super I/O registers -d | --dump Dump Super I/O registers
-V | --verbose Verbose mode -D | --dump-readable Dump Super I/O registers in human-readable format
-v | --version Show the superiotool version -V | --verbose Verbose mode
-h | --help Show a short help text -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 Per default (no options) superiotool will just probe for a Super I/O
and print its vendor, name, ID, version, and config port. and print its vendor, name, ID, version, and config port.
@ -44,10 +45,14 @@ Typical usage of superiotool:
$ 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 $ superiotool -d
- Detailed register dump in human-readable format:
$ superiotool -D
Supported Super I/O Chips Supported Super I/O Chips
------------------------- -------------------------

View File

@ -33,8 +33,11 @@ const static struct superio_registers reg_table[] = {
{EOT} {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) { switch (did) {
case 0x0604: case 0x0604:
printf("Fintek F71805\n"); printf("Fintek F71805\n");
@ -124,9 +127,7 @@ void probe_idregs_fintek(uint16_t port)
get_superio_name(reg_table, did), vid, did, port); get_superio_name(reg_table, did), vid, did, port);
dump_superio("Fintek", reg_table, port, did); dump_superio("Fintek", reg_table, port, did);
dump_readable_fintek(port, did);
/* TODO: Revive this as --dump-human-readable output. */
/* dump_fintek(port, did); */
exit_conf_mode_winbond_fintek_ite_8787(port); exit_conf_mode_winbond_fintek_ite_8787(port);
} }

View File

@ -194,12 +194,6 @@ const static struct superio_registers reg_table[] = {
{EOT} {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). * 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); get_superio_name(reg_table, id), id, chipver, port);
dump_superio("ITE", reg_table, port, id); dump_superio("ITE", reg_table, port, id);
dump_superio_readable(port); /* TODO */
} }
void probe_idregs_ite(uint16_t port) void probe_idregs_ite(uint16_t port)

View File

@ -25,8 +25,11 @@ static const char *familyid[] = {
[0xf1] = "PC8374 (Winbond/NatSemi)" [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", printf("Enables: 21=%02x, 22=%02x, 23=%02x, 24=%02x, 26=%02x\n",
regval(port, 0x21), regval(port, 0x22), regval(port, 0x23), regval(port, 0x21), regval(port, 0x22), regval(port, 0x23),
regval(port, 0x24), regval(port, 0x26)); regval(port, 0x24), regval(port, 0x26));
@ -79,7 +82,7 @@ void probe_idregs_simple(uint16_t port)
switch (id) { switch (id) {
case 0xf1: case 0xf1:
dump_ns8374(port); dump_readable_ns8374(port);
break; break;
default: default:
printf("No dump for 0x%02x\n", id); printf("No dump for 0x%02x\n", id);

View File

@ -69,6 +69,7 @@ void probe_idregs_smsc(uint16_t port)
get_superio_name(reg_table, id), id, rev, port); get_superio_name(reg_table, id), id, rev, port);
dump_superio("SMSC", reg_table, port, id); dump_superio("SMSC", reg_table, port, id);
dump_superio_readable(port); /* TODO */
exit_conf_mode_smsc(port); exit_conf_mode_smsc(port);
} }

View File

@ -23,7 +23,7 @@
#include "superiotool.h" #include "superiotool.h"
/* Command line options. */ /* 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) 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) void no_superio_found(uint16_t port)
{ {
if (!verbose) if (!verbose)
@ -164,19 +171,23 @@ int main(int argc, char *argv[])
int i, j, opt, option_index; int i, j, opt, option_index;
const static struct option long_options[] = { const static struct option long_options[] = {
{"dump", no_argument, NULL, 'd'}, {"dump", no_argument, NULL, 'd'},
{"verbose", no_argument, NULL, 'V'}, {"dump-readable", no_argument, NULL, 'D'},
{"version", no_argument, NULL, 'v'}, {"verbose", no_argument, NULL, 'V'},
{"help", no_argument, NULL, 'h'}, {"version", no_argument, NULL, 'v'},
{"help", no_argument, NULL, 'h'},
{0, 0, 0, 0} {0, 0, 0, 0}
}; };
while ((opt = getopt_long(argc, argv, "dVvh", while ((opt = getopt_long(argc, argv, "dDVvh",
long_options, &option_index)) != EOF) { long_options, &option_index)) != EOF) {
switch (opt) { switch (opt) {
case 'd': case 'd':
dump = 1; dump = 1;
break; break;
case 'D':
dump_readable = 1;
break;
case 'V': case 'V':
verbose = 1; verbose = 1;
break; break;

View File

@ -31,11 +31,12 @@
#define SUPERIOTOOL_VERSION "0.1" #define SUPERIOTOOL_VERSION "0.1"
#define USAGE "Usage: superiotool [-d] [-V] [-v] [-h]\n\n\ #define USAGE "Usage: superiotool [-d] [-D] [-V] [-v] [-h]\n\n\
-d | --dump Dump Super I/O registers\n\ -d | --dump Dump Super I/O registers\n\
-V | --verbose Verbose mode\n\ -D | --dump-readable Dump Super I/O registers in human-readable format\n\
-v | --version Show the superiotool version\n\ -V | --verbose Verbose mode\n\
-h | --help Show a short help text\n\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\ 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" 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 */ #define MAXNUMPORTS (2 + 1) /* Maximum number of Super I/O ports */
/* Command line parameters. */ /* Command line parameters. */
extern int dump, verbose; extern int dump, dump_readable, verbose;
struct superio_registers { struct superio_registers {
int32_t superio_id; /* Signed, as we need EOT. */ int32_t superio_id; /* Signed, as we need EOT. */
const char name[MAXNAMELEN]; const char name[MAXNAMELEN]; /* Super I/O name */
struct { struct {
int ldn; int ldn;
const char *name; const char *name; /* LDN name */
int idx[IDXSIZE]; int idx[IDXSIZE];
int def[IDXSIZE]; int def[IDXSIZE];
} ldn[LDNSIZE]; } ldn[LDNSIZE];
@ -77,18 +78,16 @@ const char *get_superio_name(const struct superio_registers reg_table[],
uint16_t id); uint16_t id);
void dump_superio(const char *name, const struct superio_registers reg_table[], void dump_superio(const char *name, const struct superio_registers reg_table[],
uint16_t port, uint16_t id); uint16_t port, uint16_t id);
void dump_superio_readable(uint16_t port);
void no_superio_found(uint16_t port); void no_superio_found(uint16_t port);
/* fintek.c */ /* fintek.c */
void dump_fintek(uint16_t port, uint16_t did);
void probe_idregs_fintek(uint16_t port); void probe_idregs_fintek(uint16_t port);
/* ite.c */ /* ite.c */
void dump_ite(uint16_t port, uint16_t id);
void probe_idregs_ite(uint16_t port); void probe_idregs_ite(uint16_t port);
/* nsc.c */ /* nsc.c */
void dump_ns8374(uint16_t port);
void probe_idregs_simple(uint16_t port); void probe_idregs_simple(uint16_t port);
/* smsc.c */ /* smsc.c */

View File

@ -150,6 +150,7 @@ void probe_idregs_winbond(uint16_t port)
/* TODO: Special notes in dump output for the MISC entries. */ /* TODO: Special notes in dump output for the MISC entries. */
dump_superio("Winbond", reg_table, port, id); dump_superio("Winbond", reg_table, port, id);
dump_superio_readable(port); /* TODO */
exit_conf_mode_winbond_fintek_ite_8787(port); exit_conf_mode_winbond_fintek_ite_8787(port);
} }