Author: uwe
Date: 2007-09-19 01:30:24 +0200 (Wed, 19 Sep 2007)
New Revision: 2782

Modified:
   trunk/util/superiotool/Makefile
   trunk/util/superiotool/smsc.c
   trunk/util/superiotool/superiotool.c
   trunk/util/superiotool/superiotool.h
Log:
Make the code a bit more generic (trivial). Different Super I/Os
use different config ports.

Signed-off-by: Uwe Hermann <[EMAIL PROTECTED]>
Acked-by: Uwe Hermann <[EMAIL PROTECTED]>



Modified: trunk/util/superiotool/Makefile
===================================================================
--- trunk/util/superiotool/Makefile     2007-09-18 22:24:34 UTC (rev 2781)
+++ trunk/util/superiotool/Makefile     2007-09-18 23:30:24 UTC (rev 2782)
@@ -32,7 +32,7 @@
 
 all: $(PROGRAM)
 
-$(PROGRAM): $(OBJS)
+$(PROGRAM): $(OBJS) superiotool.h
        $(CC) $(CFLAGS) -o $(PROGRAM) $(OBJS)
 
 install: $(PROGRAM)

Modified: trunk/util/superiotool/smsc.c
===================================================================
--- trunk/util/superiotool/smsc.c       2007-09-18 22:24:34 UTC (rev 2781)
+++ trunk/util/superiotool/smsc.c       2007-09-18 23:30:24 UTC (rev 2782)
@@ -53,7 +53,7 @@
        }
 }
 
-void probe_idregs_smsc(uint32_t port)
+void probe_idregs_smsc(unsigned short port)
 {
        uint16_t id, rev;
 

Modified: trunk/util/superiotool/superiotool.c
===================================================================
--- trunk/util/superiotool/superiotool.c        2007-09-18 22:24:34 UTC (rev 
2781)
+++ trunk/util/superiotool/superiotool.c        2007-09-18 23:30:24 UTC (rev 
2782)
@@ -97,22 +97,18 @@
 
 int main(int argc, char *argv[])
 {
+       int i, j;
+
        if (iopl(3) < 0) {
                perror("iopl");
                exit(1);
        }
 
-       probe_idregs_simple(0x2e);
-       probe_idregs_simple(0x4e);
+       for (i = 0; i < ARRAY_SIZE(superio_ports_table); i++) {
+               for (j = 0; superio_ports_table[i].ports[j] != EOT; j++)
+                       superio_ports_table[i].probe_idregs(
+                               superio_ports_table[i].ports[j]);
+       }
 
-       probe_idregs_fintek(0x2e);
-       probe_idregs_fintek(0x4e);
-
-       probe_idregs_ite(0x2e);
-       probe_idregs_ite(0x4e);
-
-       probe_idregs_smsc(0x3f0);
-       probe_idregs_smsc(0x370);
-
        return 0;
 }

Modified: trunk/util/superiotool/superiotool.h
===================================================================
--- trunk/util/superiotool/superiotool.h        2007-09-18 22:24:34 UTC (rev 
2781)
+++ trunk/util/superiotool/superiotool.h        2007-09-18 23:30:24 UTC (rev 
2782)
@@ -27,6 +27,8 @@
 #include <stdint.h>
 #include <sys/io.h>
 
+#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
+
 #define EOT            -1              /* End Of Table */
 #define NOLDN          -2              /* NO LDN needed */
 #define NANA           -3              /* Not Available */
@@ -36,6 +38,7 @@
 #define LDNSIZE                (MAXLDN + 3)    /* Biggest LDN + 0 + NOLDN + 
EOT */
 #define MAXNUMIDX      70              /* Maximum number of indexes */
 #define IDXSIZE        (MAXNUMIDX + 1)
+#define MAXNUMPORTS    (2 + 1)         /* Maximum number of Super I/O ports */
 
 struct superio_registers {
        /* Yes, superio_id should be unsigned, but EOT has to be negative. */
@@ -69,6 +72,17 @@
 
 /* smsc.c */
 void dump_smsc(uint32_t port, uint32_t id);
-void probe_idregs_smsc(uint32_t port);
+void probe_idregs_smsc(unsigned short port);
 
+/** Table of which config ports to probe on each Super I/O. */
+const static struct {
+       void (*probe_idregs) (unsigned short port);
+       signed short ports[MAXNUMPORTS]; /* Signed, as we need EOT. */
+} superio_ports_table[] = {
+       {probe_idregs_simple,   {0x2e,  0x4e,   EOT}},
+       {probe_idregs_fintek,   {0x2e,  0x4e,   EOT}},
+       {probe_idregs_ite,      {0x2e,  0x4e,   EOT}},
+       {probe_idregs_smsc,     {0x3f0, 0x370,  EOT}},
+};
+
 #endif


-- 
linuxbios mailing list
[email protected]
http://www.linuxbios.org/mailman/listinfo/linuxbios

Reply via email to