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:
parent
b4db2209f9
commit
eddc473ce0
|
@ -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
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue