Author: uwe Date: 2008-01-15 23:30:55 +0100 (Tue, 15 Jan 2008) New Revision: 3050
Modified: trunk/util/superiotool/ali.c trunk/util/superiotool/fintek.c trunk/util/superiotool/ite.c trunk/util/superiotool/nsc.c trunk/util/superiotool/smsc.c trunk/util/superiotool/superiotool.8 trunk/util/superiotool/superiotool.c trunk/util/superiotool/superiotool.h trunk/util/superiotool/winbond.c Log: Add new --list-supported switch for printing the list of Super I/Os supported by superiotool (closes #91).
Signed-off-by: Robinson P. Tryon bishop.robinson@gmail.com Acked-by: Uwe Hermann uwe@hermann-uwe.de
Modified: trunk/util/superiotool/ali.c =================================================================== --- trunk/util/superiotool/ali.c 2008-01-12 22:29:17 UTC (rev 3049) +++ trunk/util/superiotool/ali.c 2008-01-15 22:30:55 UTC (rev 3050) @@ -99,3 +99,8 @@
exit_conf_mode_ali(port); } + +void print_ali_chips(void) +{ + print_vendor_chips("ALi", reg_table); +}
Modified: trunk/util/superiotool/fintek.c =================================================================== --- trunk/util/superiotool/fintek.c 2008-01-12 22:29:17 UTC (rev 3049) +++ trunk/util/superiotool/fintek.c 2008-01-15 22:30:55 UTC (rev 3050) @@ -99,3 +99,8 @@
exit_conf_mode_winbond_fintek_ite_8787(port); } + +void print_fintek_chips(void) +{ + print_vendor_chips("Fintek", reg_table); +}
Modified: trunk/util/superiotool/ite.c =================================================================== --- trunk/util/superiotool/ite.c 2008-01-12 22:29:17 UTC (rev 3049) +++ trunk/util/superiotool/ite.c 2008-01-15 22:30:55 UTC (rev 3050) @@ -380,3 +380,8 @@ probe_idregs_ite_helper("(init=0x87,0x87) ", port); exit_conf_mode_winbond_fintek_ite_8787(port); } + +void print_ite_chips(void) +{ + print_vendor_chips("ITE", reg_table); +}
Modified: trunk/util/superiotool/nsc.c =================================================================== --- trunk/util/superiotool/nsc.c 2008-01-12 22:29:17 UTC (rev 3049) +++ trunk/util/superiotool/nsc.c 2008-01-15 22:30:55 UTC (rev 3050) @@ -449,3 +449,8 @@
dump_superio("NSC", reg_table, port, id); } + +void print_nsc_chips(void) +{ + print_vendor_chips("NSC", reg_table); +}
Modified: trunk/util/superiotool/smsc.c =================================================================== --- trunk/util/superiotool/smsc.c 2008-01-12 22:29:17 UTC (rev 3049) +++ trunk/util/superiotool/smsc.c 2008-01-15 22:30:55 UTC (rev 3050) @@ -546,3 +546,8 @@ probe_idregs_smsc_helper(port, DEVICE_ID_REG, DEVICE_REV_REG); probe_idregs_smsc_helper(port, DEVICE_ID_REG_OLD, DEVICE_REV_REG_OLD); } + +void print_smsc_chips(void) +{ + print_vendor_chips("SMSC", reg_table); +}
Modified: trunk/util/superiotool/superiotool.8 =================================================================== --- trunk/util/superiotool/superiotool.8 2008-01-12 22:29:17 UTC (rev 3049) +++ trunk/util/superiotool/superiotool.8 2008-01-15 22:30:55 UTC (rev 3050) @@ -1,8 +1,8 @@ -.TH SUPERIOTOOL 8 "October 11, 2007" +.TH SUPERIOTOOL 8 "January 13, 2008" .SH NAME superiotool - Super I/O detection tool .SH SYNOPSIS -.B superiotool \fR[\fB-dVvh\fR] +.B superiotool \fR[\fB-dlVvh\fR] .SH DESCRIPTION .B superiotool is a GPL'd user-space utility which can @@ -72,6 +72,16 @@ detailed information about the .BR MM " fields." .TP +.B "-l, --list-supported" +List all Super I/O chips recognized by +.BR superiotool ". The phrase" +.BR (dump available) +following a chip name indicates that +.B superiotool +supports the +.B --dump +option for this chip. +.TP .B "-V, --verbose" Enable verbose mode. This option can be used together with the .BR "-d" " option."
Modified: trunk/util/superiotool/superiotool.c =================================================================== --- trunk/util/superiotool/superiotool.c 2008-01-12 22:29:17 UTC (rev 3049) +++ trunk/util/superiotool/superiotool.c 2008-01-15 22:30:55 UTC (rev 3050) @@ -4,6 +4,7 @@ * Copyright (C) 2006 Ronald Minnich rminnich@gmail.com * Copyright (C) 2007 Uwe Hermann uwe@hermann-uwe.de * Copyright (C) 2007 Carl-Daniel Hailfinger + * Copyright (C) 2008 Robinson P. Tryon bishop.robinson@gmail.com * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -161,6 +162,41 @@ vendor, info, port); }
+/** Print a list of all supported chips from the given vendor. */ +void print_vendor_chips(const char *vendor, + const struct superio_registers reg_table[]) +{ + int i; + + for (i = 0; reg_table[i].superio_id != EOT; i++) { + printf("%s %s", vendor, reg_table[i].name); + + /* Unless the ldn is empty, assume this chip has a dump. */ + if (reg_table[i].ldn[0].ldn != EOT) + printf(" (dump available)"); + + printf("\n"); + } + + /* If we printed any chips for this vendor, put in a blank line. */ + if (i != 0) + printf("\n"); +} + +/** Print a list of all chips supported by superiotool. */ +void print_list_of_supported_chips(void) +{ + int i; + + printf("Supported Super I/O chips:\n\n"); + + for (i = 0; i < ARRAY_SIZE(vendor_print_functions); i++) + vendor_print_functions[i].print_list(); + + printf("See http://coreboot.org/Superiotool#Supported_devices " + "for more information.\n"); +} + static void print_version(void) { printf("superiotool r%s\n", SUPERIOTOOL_VERSION); @@ -172,18 +208,23 @@
static const struct option long_options[] = { {"dump", no_argument, NULL, 'd'}, + {"list-supported", no_argument, NULL, 'l'}, {"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, "dlVvh", long_options, &option_index)) != EOF) { switch (opt) { case 'd': dump = 1; break; + case 'l': + print_list_of_supported_chips(); + exit(0); + break; case 'V': verbose = 1; break;
Modified: trunk/util/superiotool/superiotool.h =================================================================== --- trunk/util/superiotool/superiotool.h 2008-01-12 22:29:17 UTC (rev 3049) +++ trunk/util/superiotool/superiotool.h 2008-01-15 22:30:55 UTC (rev 3050) @@ -3,6 +3,7 @@ * * Copyright (C) 2007 Carl-Daniel Hailfinger * Copyright (C) 2007 Uwe Hermann uwe@hermann-uwe.de + * Copyright (C) 2008 Robinson P. Tryon bishop.robinson@gmail.com * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -29,8 +30,9 @@ #include <getopt.h> #include <sys/io.h>
-#define USAGE "Usage: superiotool [-d] [-V] [-v] [-h]\n\n\ +#define USAGE "Usage: superiotool [-d] [-l] [-V] [-v] [-h]\n\n\ -d | --dump Dump Super I/O register contents\n\ + -l | --list-supported Show the list of supported Super I/O chips\n\ -V | --verbose Verbose mode\n\ -v | --version Show the superiotool version\n\ -h | --help Show a short help text\n\n\ @@ -80,24 +82,32 @@ void dump_superio(const char *name, const struct superio_registers reg_table[], uint16_t port, uint16_t id); void probing_for(const char *vendor, const char *info, uint16_t port); +void print_vendor_chips(const char *vendor, + const struct superio_registers reg_table[]);
/* ali.c */ void probe_idregs_ali(uint16_t port); +void print_ali_chips(void);
/* fintek.c */ void probe_idregs_fintek(uint16_t port); +void print_fintek_chips(void);
/* ite.c */ void probe_idregs_ite(uint16_t port); +void print_ite_chips(void);
/* nsc.c */ void probe_idregs_nsc(uint16_t port); +void print_nsc_chips(void);
/* smsc.c */ void probe_idregs_smsc(uint16_t port); +void print_smsc_chips(void);
/* winbond.c */ void probe_idregs_winbond(uint16_t port); +void print_winbond_chips(void);
/** Table of which config ports to probe for each Super I/O family. */ static const struct { @@ -112,4 +122,17 @@ {probe_idregs_winbond, {0x2e, 0x4e, 0x3f0, 0x370, 0x250, EOT}}, };
+ +/** Table of functions to print out supported Super I/O chips. */ +static const struct { + void (*print_list) (void); +} vendor_print_functions[] = { + {print_ali_chips}, + {print_fintek_chips}, + {print_ite_chips}, + {print_nsc_chips}, + {print_smsc_chips}, + {print_winbond_chips}, +}; + #endif
Modified: trunk/util/superiotool/winbond.c =================================================================== --- trunk/util/superiotool/winbond.c 2008-01-12 22:29:17 UTC (rev 3049) +++ trunk/util/superiotool/winbond.c 2008-01-15 22:30:55 UTC (rev 3050) @@ -445,3 +445,8 @@ probe_idregs_winbond_helper("(init=0x87,0x87) ", port); exit_conf_mode_winbond_fintek_ite_8787(port); } + +void print_winbond_chips(void) +{ + print_vendor_chips("Winbond", reg_table); +}