Index: rtnet/drivers/rt_8139too.c
===================================================================
--- rtnet/drivers/rt_8139too.c	(revision 1155)
+++ rtnet/drivers/rt_8139too.c	(working copy)
@@ -134,15 +134,6 @@ enum {
 
 typedef enum {
         RTL8139 = 0,
-        RTL8139_CB,
-        SMC1211TX,
-        /*MPX5030,*/
-        DELTA8139,
-        ADDTRON8139,
-        DFE538TX,
-        DFE690TXD,
-        FE2000VX,
-        ALLIED8139,
         RTL8129,
 } board_t;
 
@@ -152,32 +143,36 @@ static struct {
         const char *name;
         u32 hw_flags;
 } board_info[] __devinitdata = {
-        { "RealTek RTL8139 Fast Ethernet", RTL8139_CAPS },
-        { "RealTek RTL8139B PCI/CardBus", RTL8139_CAPS },
-        { "SMC1211TX EZCard 10/100 (RealTek RTL8139)", RTL8139_CAPS },
-/*        { MPX5030, "Accton MPX5030 (RealTek RTL8139)", RTL8139_CAPS },*/
-        { "Delta Electronics 8139 10/100BaseTX", RTL8139_CAPS },
-        { "Addtron Technolgy 8139 10/100BaseTX", RTL8139_CAPS },
-        { "D-Link DFE-538TX (RealTek RTL8139)", RTL8139_CAPS },
-        { "D-Link DFE-690TXD (RealTek RTL8139)", RTL8139_CAPS },
-        { "AboCom FE2000VX (RealTek RTL8139)", RTL8139_CAPS },
-        { "Allied Telesyn 8139 CardBus", RTL8139_CAPS },
+        { "RealTek RTL8139", RTL8139_CAPS },
         { "RealTek RTL8129", RTL8129_CAPS },
 };
 
 
 static struct pci_device_id rtl8139_pci_tbl[] __devinitdata = {
         {0x10ec, 0x8139, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
-        {0x10ec, 0x8138, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139_CB },
-        {0x1113, 0x1211, PCI_ANY_ID, PCI_ANY_ID, 0, 0, SMC1211TX },
-/*        {0x1113, 0x1211, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MPX5030 },*/
-        {0x1500, 0x1360, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DELTA8139 },
-        {0x4033, 0x1360, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ADDTRON8139 },
-        {0x1186, 0x1300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DFE538TX },
-        {0x1186, 0x1340, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DFE690TXD },
-        {0x13d1, 0xab06, PCI_ANY_ID, PCI_ANY_ID, 0, 0, FE2000VX },
-        {0x1259, 0xa117, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ALLIED8139 },
-
+        {0x10ec, 0x8138, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
+        {0x1113, 0x1211, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
+        {0x1500, 0x1360, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
+        {0x4033, 0x1360, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
+        {0x1186, 0x1300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
+        {0x1186, 0x1340, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
+        {0x13d1, 0xab06, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
+        {0x1259, 0xa117, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
+        {0x1259, 0xa11e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
+        {0x14ea, 0xab06, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
+        {0x14ea, 0xab07, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
+        {0x11db, 0x1234, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
+        {0x1432, 0x9130, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
+        {0x02ac, 0x1012, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
+        {0x018a, 0x0106, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
+        {0x126c, 0x1211, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
+        {0x1743, 0x8139, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
+        {0x021b, 0x8139, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
+
+#ifdef CONFIG_SH_SECUREEDGE5410
+        /* Bogus 8139 silicon reports 8129 without external PROM :-( */
+        {0x10ec, 0x8129, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
+#endif
 #ifdef CONFIG_8139TOO_8129
         {0x10ec, 0x8129, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8129 },
 #endif
@@ -187,8 +182,8 @@ static struct pci_device_id rtl8139_pci_
          * so we simply don't match on the main vendor id.
          */
         {PCI_ANY_ID, 0x8139, 0x10ec, 0x8139, 0, 0, RTL8139 },
-        {PCI_ANY_ID, 0x8139, 0x1186, 0x1300, 0, 0, DFE538TX },
-        {PCI_ANY_ID, 0x8139, 0x13d1, 0xab06, 0, 0, FE2000VX },
+        {PCI_ANY_ID, 0x8139, 0x1186, 0x1300, 0, 0, RTL8139 },
+        {PCI_ANY_ID, 0x8139, 0x13d1, 0xab06, 0, 0, RTL8139 },
 
         {0,}
 };
@@ -416,6 +411,9 @@ enum chip_flags {
         HasLWake = (1 << 1),
 };
 
+#define HW_REVID(b30, b29, b28, b27, b26, b23, b22) \
+        (b30<<30 | b29<<29 | b28<<28 | b27<<27 | b26<<26 | b23<<23 | b22<<22)
+#define HW_REVID_MASK	HW_REVID(1, 1, 1, 1, 1, 1, 1)
 
 /* directly indexed by chip_t, above */
 const static struct {
@@ -425,41 +423,55 @@ const static struct {
         u32 flags;
 } rtl_chip_info[] = {
         { "RTL-8139",
-          0x40,
-          0xf0fe0040, /* XXX copied from RTL8139A, verify */
+          HW_REVID(1, 0, 0, 0, 0, 0, 0),
           HasHltClk,
         },
 
         { "RTL-8139 rev K",
-          0x60,
-          0xf0fe0040,
+          HW_REVID(1, 1, 0, 0, 0, 0, 0),
           HasHltClk,
         },
 
         { "RTL-8139A",
-          0x70,
-          0xf0fe0040,
+          HW_REVID(1, 1, 1, 0, 0, 0, 0),
+          HasHltClk, /* XXX undocumented? */
+        },
+
+        { "RTL-8139A rev G",
+          HW_REVID(1, 1, 1, 0, 0, 1, 0),
           HasHltClk, /* XXX undocumented? */
         },
 
         { "RTL-8139B",
-          0x78,
-          0xf0fc0040,
+          HW_REVID(1, 1, 1, 1, 0, 0, 0),
           HasLWake,
         },
 
         { "RTL-8130",
-          0x7C,
-          0xf0fe0040, /* XXX copied from RTL8139A, verify */
+          HW_REVID(1, 1, 1, 1, 1, 0, 0),
           HasLWake,
         },
 
         { "RTL-8139C",
-          0x74,
-          0xf0fc0040, /* XXX copied from RTL8139B, verify */
+          HW_REVID(1, 1, 1, 0, 1, 0, 0),
           HasLWake,
         },
 
+        { "RTL-8100",
+          HW_REVID(1, 1, 1, 1, 0, 1, 0),
+           HasLWake,
+         },
+
+        { "RTL-8100B/8139D",
+          HW_REVID(1, 1, 1, 0, 1, 0, 1),
+          HasHltClk /* XXX undocumented? */
+        | HasLWake,
+        },
+
+        { "RTL-8101",
+          HW_REVID(1, 1, 1, 0, 1, 1, 1),
+          HasLWake,
+        },
 };
 
 struct rtl_extra_stats {
