netdev
[Top] [All Lists]

[PATCH] old-tulip 2104x update

To: netdev@xxxxxxxxxxx
Subject: [PATCH] old-tulip 2104x update
From: Jeff Garzik <jgarzik@xxxxxxxxx>
Date: Wed, 17 Mar 2004 14:36:01 -0500
Cc: Krzysztof Halasa <khc@xxxxxxxxx>, lars.vahlenberg@xxxxxxxxxxxx, Geert Uytterhoeven <geert@xxxxxxxxxxxxxx>, Rask Ingemann Lambertsen <rask@xxxxxxxxxx>
In-reply-to: <m3ish3wi6p.fsf@xxxxxxxxxxxxxxxxx>
References: <m3wu5nnzch.fsf@xxxxxxxxxxxxxxxxx> <m3ish3wi6p.fsf@xxxxxxxxxxxxxxxxx>
Sender: netdev-bounce@xxxxxxxxxxx
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030703

Here's a patch versus 2.6 upstream, and also the complete driver if that's easier.

Anybody wanna give it a test?

And Rask, don't you have some other patches?

        Jeff



diff -Nru a/drivers/net/tulip/de2104x.c b/drivers/net/tulip/de2104x.c
--- a/drivers/net/tulip/de2104x.c       Wed Mar 17 14:33:43 2004
+++ b/drivers/net/tulip/de2104x.c       Wed Mar 17 14:33:43 2004
@@ -28,8 +28,8 @@
  */
 
 #define DRV_NAME               "de2104x"
-#define DRV_VERSION            "0.6"
-#define DRV_RELDATE            "Sep 1, 2003"
+#define DRV_VERSION            "0.7"
+#define DRV_RELDATE            "Mar 17, 2004"
 
 #include <linux/config.h>
 #include <linux/module.h>
@@ -303,7 +303,6 @@
        struct net_device_stats net_stats;
 
        struct pci_dev          *pdev;
-       u32                     macmode;
 
        u16                     setup_frame[DE_SETUP_FRAME_WORDS];
 
@@ -732,7 +731,7 @@
        struct de_desc *txd;
        struct de_desc *dummy_txd = NULL;
 
-       macmode = de->macmode & ~(AcceptAllMulticast | AcceptAllPhys);
+       macmode = dr32(MacMode) & ~(AcceptAllMulticast | AcceptAllPhys);
 
        if (dev->flags & IFF_PROMISC) { /* Set promiscuous. */
                macmode |= AcceptAllMulticast | AcceptAllPhys;
@@ -805,10 +804,8 @@
        dw32(TxPoll, NormalTxPoll);
 
 out:
-       if (macmode != de->macmode) {
-               dw32 (MacMode, macmode);
-               de->macmode = macmode;
-       }
+       if (macmode != dr32(MacMode))
+               dw32(MacMode, macmode);
 }
 
 static void de_set_rx_mode (struct net_device *dev)
@@ -923,6 +920,7 @@
 static void de_set_media (struct de_private *de)
 {
        unsigned media = de->media_type;
+       u32 macmode = dr32(MacMode);
 
        if (de_is_running(de))
                BUG();
@@ -940,9 +938,9 @@
        mdelay(10);
 
        if (media == DE_MEDIA_TP_FD)
-               de->macmode |= FullDuplex;
+               macmode |= FullDuplex;
        else
-               de->macmode &= ~FullDuplex;
+               macmode &= ~FullDuplex;
        
        if (netif_msg_link(de)) {
                printk(KERN_INFO "%s: set link %s\n"
@@ -951,9 +949,11 @@
                       de->dev->name, media_name[media],
                       de->dev->name, dr32(MacMode), dr32(SIAStatus),
                       dr32(CSR13), dr32(CSR14), dr32(CSR15),
-                      de->dev->name, de->macmode, de->media[media].csr13,
+                      de->dev->name, macmode, de->media[media].csr13,
                       de->media[media].csr14, de->media[media].csr15);
        }
+       if (macmode != dr32(MacMode))
+               dw32(MacMode, macmode);
 }
 
 static void de_next_media (struct de_private *de, u32 *media,
@@ -1173,18 +1173,18 @@
        u32 status, tmp;
 
        /*
-        * Reset MAC.  Copied from de4x5.c.
+        * Reset MAC.  de4x5.c and tulip.c examined for "advice"
+        * in this area.
         */
 
-       tmp = dr32 (BusMode);
-       if (tmp == 0xffffffff)
-               return -ENODEV;
-       mdelay (1);
+       if (dr32(BusMode) == 0xffffffff)
+               return -EBUSY;
 
-       dw32 (BusMode, tmp | CmdReset);
+       /* Reset the chip, holding bit 0 set at least 50 PCI cycles. */
+       dw32 (BusMode, CmdReset);
        mdelay (1);
 
-       dw32 (BusMode, tmp);
+       dw32 (BusMode, de_bus_mode);
        mdelay (1);
 
        for (tmp = 0; tmp < 5; tmp++) {
@@ -1235,11 +1235,12 @@
 static int de_init_hw (struct de_private *de)
 {
        struct net_device *dev = de->dev;
+       u32 macmode;
        int rc;
 
        de_adapter_wake(de);
        
-       de->macmode = dr32(MacMode) & ~MacModeClear;
+       macmode = dr32(MacMode) & ~MacModeClear;
 
        rc = de_reset_mac(de);
        if (rc)
@@ -1250,7 +1251,7 @@
        dw32(RxRingAddr, de->ring_dma);
        dw32(TxRingAddr, de->ring_dma + (sizeof(struct de_desc) * 
DE_RX_RING_SIZE));
 
-       dw32(MacMode, RxTx | de->macmode);
+       dw32(MacMode, RxTx | macmode);
 
        dr32(RxMissed); /* self-clearing */
 
@@ -1501,7 +1502,7 @@
                break;
        }
        
-       if (de->macmode & FullDuplex)
+       if (dr32(MacMode) & FullDuplex)
                ecmd->duplex = DUPLEX_FULL;
        else
                ecmd->duplex = DUPLEX_HALF;

Attachment: de2104x.c.bz2
Description: BZip2 compressed data

<Prev in Thread] Current Thread [Next in Thread>