linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / drivers / net / sundance.c
index 698568e..0ab9c38 100644 (file)
 
        Support and updates available at
        http://www.scyld.com/network/sundance.html
-       [link no longer provides useful info -jgarzik]
+
+
+       Version LK1.01a (jgarzik):
+       - Replace some MII-related magic numbers with constants
+
+       Version LK1.02 (D-Link):
+       - Add new board to PCI ID list
+       - Fix multicast bug
+
+       Version LK1.03 (D-Link):
+       - New Rx scheme, reduce Rx congestion
+       - Option to disable flow control
+
+       Version LK1.04 (D-Link):
+       - Tx timeout recovery
+       - More support for ethtool.
+
+       Version LK1.04a:
+       - Remove unused/constant members from struct pci_id_info
+       (which then allows removal of 'drv_flags' from private struct)
+       (jgarzik)
+       - If no phy is found, fail to load that board (jgarzik)
+       - Always start phy id scan at id 1 to avoid problems (Donald Becker)
+       - Autodetect where mii_preable_required is needed,
+       default to not needed.  (Donald Becker)
+
+       Version LK1.04b:
+       - Remove mii_preamble_required module parameter (Donald Becker)
+       - Add per-interface mii_preamble_required (setting is autodetected)
+         (Donald Becker)
+       - Remove unnecessary cast from void pointer (jgarzik)
+       - Re-align comments in private struct (jgarzik)
+
+       Version LK1.04c (jgarzik):
+       - Support bitmapped message levels (NETIF_MSG_xxx), and the
+         two ethtool ioctls that get/set them
+       - Don't hand-code MII ethtool support, use standard API/lib
+
+       Version LK1.04d:
+       - Merge from Donald Becker's sundance.c: (Jason Lunz)
+               * proper support for variably-sized MTUs
+               * default to PIO, to fix chip bugs
+       - Add missing unregister_netdev (Jason Lunz)
+       - Add CONFIG_SUNDANCE_MMIO config option (jgarzik)
+       - Better rx buf size calculation (Donald Becker)
+
+       Version LK1.05 (D-Link):
+       - Fix DFE-580TX packet drop issue (for DL10050C)
+       - Fix reset_tx logic
+
+       Version LK1.06 (D-Link):
+       - Fix crash while unloading driver
+
+       Versin LK1.06b (D-Link):
+       - New tx scheme, adaptive tx_coalesce
+       
+       Version LK1.07 (D-Link):
+       - Fix tx bugs in big-endian machines
+       - Remove unused max_interrupt_work module parameter, the new 
+         NAPI-like rx scheme doesn't need it.
+       - Remove redundancy get_stats() in intr_handler(), those 
+         I/O access could affect performance in ARM-based system
+       - Add Linux software VLAN support
+       
+       Version LK1.08 (Philippe De Muyter phdm@macqel.be):
+       - Fix bug of custom mac address 
+       (StationAddr register only accept word write) 
+
+       Version LK1.09 (D-Link):
+       - Fix the flowctrl bug. 
+       - Set Pause bit in MII ANAR if flow control enabled.    
+
+       Version LK1.09a (ICPlus):
+       - Add the delay time in reading the contents of EEPROM
+
+       Version LK1.10 (Philippe De Muyter phdm@macqel.be):
+       - Make 'unblock interface after Tx underrun' work
 
 */
 
 #define DRV_NAME       "sundance"
-#define DRV_VERSION    "1.1"
-#define DRV_RELDATE    "27-Jun-2006"
+#define DRV_VERSION    "1.01+LK1.10"
+#define DRV_RELDATE    "28-Oct-2005"
 
 
 /* The user-configurable values.
 static int debug = 1;                  /* 1 normal messages, 0 quiet .. 7 verbose. */
 /* Maximum number of multicast addresses to filter (vs. rx-all-multicast).
    Typical is a 64 element hash table based on the Ethernet CRC.  */
-static const int multicast_filter_limit = 32;
+static int multicast_filter_limit = 32;
 
 /* Set the copy breakpoint for the copy-only-tiny-frames scheme.
    Setting to > 1518 effectively disables this feature.
@@ -107,7 +183,7 @@ static char *media[MAX_UNITS];
 #endif
 
 /* These identify the driver base version and may not be removed. */
-static char version[] =
+static char version[] __devinitdata =
 KERN_INFO DRV_NAME ".c:v" DRV_VERSION " " DRV_RELDATE "  Written by Donald Becker\n"
 KERN_INFO "  http://www.scyld.com/network/sundance.html\n";
 
@@ -204,15 +280,14 @@ IVc. Errata
 #define USE_IO_OPS 1
 #endif
 
-static const struct pci_device_id sundance_pci_tbl[] = {
-       { 0x1186, 0x1002, 0x1186, 0x1002, 0, 0, 0 },
-       { 0x1186, 0x1002, 0x1186, 0x1003, 0, 0, 1 },
-       { 0x1186, 0x1002, 0x1186, 0x1012, 0, 0, 2 },
-       { 0x1186, 0x1002, 0x1186, 0x1040, 0, 0, 3 },
-       { 0x1186, 0x1002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 },
-       { 0x13F0, 0x0201, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5 },
-       { 0x13F0, 0x0200, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 6 },
-       { }
+static struct pci_device_id sundance_pci_tbl[] = {
+       {0x1186, 0x1002, 0x1186, 0x1002, 0, 0, 0},
+       {0x1186, 0x1002, 0x1186, 0x1003, 0, 0, 1},
+       {0x1186, 0x1002, 0x1186, 0x1012, 0, 0, 2},
+       {0x1186, 0x1002, 0x1186, 0x1040, 0, 0, 3},
+       {0x1186, 0x1002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4},
+       {0x13F0, 0x0201, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5},
+       {0,}
 };
 MODULE_DEVICE_TABLE(pci, sundance_pci_tbl);
 
@@ -223,15 +298,14 @@ enum {
 struct pci_id_info {
         const char *name;
 };
-static const struct pci_id_info pci_id_tbl[] __devinitdata = {
+static struct pci_id_info pci_id_tbl[] = {
        {"D-Link DFE-550TX FAST Ethernet Adapter"},
        {"D-Link DFE-550FX 100Mbps Fiber-optics Adapter"},
        {"D-Link DFE-580TX 4 port Server Adapter"},
        {"D-Link DFE-530TXS FAST Ethernet Adapter"},
        {"D-Link DL10050-based FAST Ethernet Adapter"},
        {"Sundance Technology Alta"},
-       {"IC Plus Corporation IP100A FAST Ethernet Adapter"},
-       { }     /* terminate list. */
+       {NULL,},                        /* 0 terminated list. */
 };
 
 /* This driver was written to use PCI memory space, however x86-oriented
@@ -559,13 +633,9 @@ static int __devinit sundance_probe1 (struct pci_dev *pdev,
 
        np->phys[0] = 1;                /* Default setting */
        np->mii_preamble_required++;
-       /*
-        * It seems some phys doesn't deal well with address 0 being accessed
-        * first, so leave address zero to the end of the loop (32 & 31).
-        */
        for (phy = 1; phy <= 32 && phy_idx < MII_CNT; phy++) {
+               int mii_status = mdio_read(dev, phy, MII_BMSR);
                int phyx = phy & 0x1f;
-               int mii_status = mdio_read(dev, phyx, MII_BMSR);
                if (mii_status != 0xffff  &&  mii_status != 0x0000) {
                        np->phys[phy_idx++] = phyx;
                        np->mii_if.advertising = mdio_read(dev, phyx, MII_ADVERTISE);
@@ -792,7 +862,7 @@ static int netdev_open(struct net_device *dev)
 
        /* Do we need to reset the chip??? */
 
-       i = request_irq(dev->irq, &intr_handler, IRQF_SHARED, dev->name, dev);
+       i = request_irq(dev->irq, &intr_handler, SA_SHIRQ, dev->name, dev);
        if (i)
                return i;