From 552cfb7b74cc0f39aee0c6babecdb045c81073e7 Mon Sep 17 00:00:00 2001 From: "Robinson P. Tryon" Date: Tue, 15 Jan 2008 22:30:55 +0000 Subject: Add new --list-supported switch for printing the list of Super I/Os supported by superiotool (closes #91). Signed-off-by: Robinson P. Tryon Acked-by: Uwe Hermann git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3050 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1 --- util/superiotool/ali.c | 5 +++++ util/superiotool/fintek.c | 5 +++++ util/superiotool/ite.c | 5 +++++ util/superiotool/nsc.c | 5 +++++ util/superiotool/smsc.c | 5 +++++ util/superiotool/superiotool.8 | 14 ++++++++++++-- util/superiotool/superiotool.c | 43 +++++++++++++++++++++++++++++++++++++++++- util/superiotool/superiotool.h | 25 +++++++++++++++++++++++- util/superiotool/winbond.c | 5 +++++ 9 files changed, 108 insertions(+), 4 deletions(-) (limited to 'util/superiotool') diff --git a/util/superiotool/ali.c b/util/superiotool/ali.c index 2d0e71d73f..52144dde01 100644 --- a/util/superiotool/ali.c +++ b/util/superiotool/ali.c @@ -99,3 +99,8 @@ void probe_idregs_ali(uint16_t port) exit_conf_mode_ali(port); } + +void print_ali_chips(void) +{ + print_vendor_chips("ALi", reg_table); +} diff --git a/util/superiotool/fintek.c b/util/superiotool/fintek.c index e1ff0f44f7..0cc1fee46a 100644 --- a/util/superiotool/fintek.c +++ b/util/superiotool/fintek.c @@ -99,3 +99,8 @@ void probe_idregs_fintek(uint16_t port) exit_conf_mode_winbond_fintek_ite_8787(port); } + +void print_fintek_chips(void) +{ + print_vendor_chips("Fintek", reg_table); +} diff --git a/util/superiotool/ite.c b/util/superiotool/ite.c index fbb75f4132..dcb61787bc 100644 --- a/util/superiotool/ite.c +++ b/util/superiotool/ite.c @@ -380,3 +380,8 @@ void probe_idregs_ite(uint16_t port) 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); +} diff --git a/util/superiotool/nsc.c b/util/superiotool/nsc.c index 9b87aa01a7..adb65b6bf4 100644 --- a/util/superiotool/nsc.c +++ b/util/superiotool/nsc.c @@ -449,3 +449,8 @@ void probe_idregs_nsc(uint16_t port) dump_superio("NSC", reg_table, port, id); } + +void print_nsc_chips(void) +{ + print_vendor_chips("NSC", reg_table); +} diff --git a/util/superiotool/smsc.c b/util/superiotool/smsc.c index b86507875e..69cf9df111 100644 --- a/util/superiotool/smsc.c +++ b/util/superiotool/smsc.c @@ -546,3 +546,8 @@ void probe_idregs_smsc(uint16_t port) 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); +} diff --git a/util/superiotool/superiotool.8 b/util/superiotool/superiotool.8 index 9928bf3aed..401480abd5 100644 --- a/util/superiotool/superiotool.8 +++ b/util/superiotool/superiotool.8 @@ -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 @@ which can mean several things. It's recommended to consult the datasheet for 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." diff --git a/util/superiotool/superiotool.c b/util/superiotool/superiotool.c index bce0b324f3..d96396f24a 100644 --- a/util/superiotool/superiotool.c +++ b/util/superiotool/superiotool.c @@ -4,6 +4,7 @@ * Copyright (C) 2006 Ronald Minnich * Copyright (C) 2007 Uwe Hermann * Copyright (C) 2007 Carl-Daniel Hailfinger + * Copyright (C) 2008 Robinson P. Tryon * * 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 @@ void probing_for(const char *vendor, const char *info, uint16_t port) 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 " + "for more information.\n"); +} + static void print_version(void) { printf("superiotool r%s\n", SUPERIOTOOL_VERSION); @@ -172,18 +208,23 @@ int main(int argc, char *argv[]) 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; diff --git a/util/superiotool/superiotool.h b/util/superiotool/superiotool.h index e7c4e2363b..5d402561a9 100644 --- a/util/superiotool/superiotool.h +++ b/util/superiotool/superiotool.h @@ -3,6 +3,7 @@ * * Copyright (C) 2007 Carl-Daniel Hailfinger * Copyright (C) 2007 Uwe Hermann + * Copyright (C) 2008 Robinson P. Tryon * * 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 #include -#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 @@ const char *get_superio_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); 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 @@ static const struct { {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 diff --git a/util/superiotool/winbond.c b/util/superiotool/winbond.c index dca64fe0a6..ebc65adad3 100644 --- a/util/superiotool/winbond.c +++ b/util/superiotool/winbond.c @@ -445,3 +445,8 @@ void probe_idregs_winbond(uint16_t port) 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); +} -- cgit v1.2.3