linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / drivers / net / dl2k.c
index 402961e..fb9dae3 100644 (file)
@@ -9,12 +9,50 @@
     the Free Software Foundation; either version 2 of the License, or
     (at your option) any later version.
 */
+/*
+    Rev                Date            Description
+    ==========================================================================
+    0.01       2001/05/03      Created DL2000-based linux driver
+    0.02       2001/05/21      Added VLAN and hardware checksum support.
+    1.00       2001/06/26      Added jumbo frame support.
+    1.01       2001/08/21      Added two parameters, rx_coalesce and rx_timeout.
+    1.02       2001/10/08      Supported fiber media.
+                               Added flow control parameters.
+    1.03       2001/10/12      Changed the default media to 1000mbps_fd for 
+                               the fiber devices.
+    1.04       2001/11/08      Fixed Tx stopped when tx very busy.
+    1.05       2001/11/22      Fixed Tx stopped when unidirectional tx busy.
+    1.06       2001/12/13      Fixed disconnect bug at 10Mbps mode.
+                               Fixed tx_full flag incorrect.
+                               Added tx_coalesce paramter.
+    1.07       2002/01/03      Fixed miscount of RX frame error.
+    1.08       2002/01/17      Fixed the multicast bug.
+    1.09       2002/03/07      Move rx-poll-now to re-fill loop.       
+                               Added rio_timer() to watch rx buffers. 
+    1.10       2002/04/16      Fixed miscount of carrier error.
+    1.11       2002/05/23      Added ISR schedule scheme
+                               Fixed miscount of rx frame error for DGE-550SX.
+                               Fixed VLAN bug.
+    1.12       2002/06/13      Lock tx_coalesce=1 on 10/100Mbps mode.
+    1.13       2002/08/13      1. Fix disconnection (many tx:carrier/rx:frame
+                                  errs) with some mainboards.
+                               2. Use definition "DRV_NAME" "DRV_VERSION" 
+                                  "DRV_RELDATE" for flexibility.       
+    1.14       2002/08/14      Support ethtool.        
+    1.15       2002/08/27      Changed the default media to Auto-Negotiation
+                               for the fiber devices.    
+    1.16       2002/09/04      More power down time for fiber devices auto-
+                               negotiation.
+                               Fix disconnect bug after ifup and ifdown.
+    1.17       2002/10/03      Fix RMON statistics overflow. 
+                               Always use I/O mapping to access eeprom, 
+                               avoid system freezing with some chipsets.
 
+*/
 #define DRV_NAME       "D-Link DL2000-based linux driver"
-#define DRV_VERSION    "v1.18"
-#define DRV_RELDATE    "2006/06/27"
+#define DRV_VERSION    "v1.17b"
+#define DRV_RELDATE    "2006/03/10"
 #include "dl2k.h"
-#include <linux/dma-mapping.h>
 
 static char version[] __devinitdata =
       KERN_INFO DRV_NAME " " DRV_VERSION " " DRV_RELDATE "\n"; 
@@ -52,8 +90,8 @@ module_param(tx_coalesce, int, 0); /* HW xmit count each TxDMAComplete */
 #define EnableInt() \
 writew(DEFAULT_INTR, ioaddr + IntEnable)
 
-static const int max_intrloop = 50;
-static const int multicast_filter_limit = 0x40;
+static int max_intrloop = 50;
+static int multicast_filter_limit = 0x40;
 
 static int rio_open (struct net_device *dev);
 static void rio_timer (unsigned long data);
@@ -351,7 +389,7 @@ parse_eeprom (struct net_device *dev)
        for (i = 0; i < 6; i++)
                dev->dev_addr[i] = psrom->mac_addr[i];
 
-       /* Parse Software Information Block */
+       /* Parse Software Infomation Block */
        i = 0x30;
        psib = (u8 *) sromdata;
        do {
@@ -401,7 +439,7 @@ rio_open (struct net_device *dev)
        int i;
        u16 macctrl;
        
-       i = request_irq (dev->irq, &rio_interrupt, IRQF_SHARED, dev->name, dev);
+       i = request_irq (dev->irq, &rio_interrupt, SA_SHIRQ, dev->name, dev);
        if (i)
                return i;
        
@@ -727,7 +765,7 @@ rio_free_tx (struct net_device *dev, int irq)
                        break;
                skb = np->tx_skbuff[entry];
                pci_unmap_single (np->pdev,
-                                 np->tx_ring[entry].fraginfo & DMA_48BIT_MASK,
+                                 np->tx_ring[entry].fraginfo & 0xffffffffffff,
                                  skb->len, PCI_DMA_TODEVICE);
                if (irq)
                        dev_kfree_skb_irq (skb);
@@ -855,7 +893,7 @@ receive_packet (struct net_device *dev)
                        /* Small skbuffs for short packets */
                        if (pkt_len > copy_thresh) {
                                pci_unmap_single (np->pdev,
-                                                 desc->fraginfo & DMA_48BIT_MASK,
+                                                 desc->fraginfo & 0xffffffffffff,
                                                  np->rx_buf_sz,
                                                  PCI_DMA_FROMDEVICE);
                                skb_put (skb = np->rx_skbuff[entry], pkt_len);
@@ -863,7 +901,7 @@ receive_packet (struct net_device *dev)
                        } else if ((skb = dev_alloc_skb (pkt_len + 2)) != NULL) {
                                pci_dma_sync_single_for_cpu(np->pdev,
                                                            desc->fraginfo & 
-                                                               DMA_48BIT_MASK,
+                                                               0xffffffffffff,
                                                            np->rx_buf_sz,
                                                            PCI_DMA_FROMDEVICE);
                                skb->dev = dev;
@@ -875,7 +913,7 @@ receive_packet (struct net_device *dev)
                                skb_put (skb, pkt_len);
                                pci_dma_sync_single_for_device(np->pdev,
                                                               desc->fraginfo &
-                                                                DMA_48BIT_MASK,
+                                                                0xffffffffffff,
                                                               np->rx_buf_sz,
                                                               PCI_DMA_FROMDEVICE);
                        }
@@ -1762,7 +1800,7 @@ rio_close (struct net_device *dev)
                skb = np->rx_skbuff[i];
                if (skb) {
                        pci_unmap_single(np->pdev, 
-                                        np->rx_ring[i].fraginfo & DMA_48BIT_MASK,
+                                        np->rx_ring[i].fraginfo & 0xffffffffffff,
                                         skb->len, PCI_DMA_FROMDEVICE);
                        dev_kfree_skb (skb);
                        np->rx_skbuff[i] = NULL;
@@ -1772,7 +1810,7 @@ rio_close (struct net_device *dev)
                skb = np->tx_skbuff[i];
                if (skb) {
                        pci_unmap_single(np->pdev, 
-                                        np->tx_ring[i].fraginfo & DMA_48BIT_MASK,
+                                        np->tx_ring[i].fraginfo & 0xffffffffffff,
                                         skb->len, PCI_DMA_TODEVICE);
                        dev_kfree_skb (skb);
                        np->tx_skbuff[i] = NULL;