[PATCH] forcedeth: write back original mac address during ifdown
authorManfred Spraul <manfred@colorfullife.com>
Sun, 31 Jul 2005 16:38:58 +0000 (18:38 +0200)
committerJeff Garzik <jgarzik@pobox.com>
Sun, 31 Jul 2005 16:59:57 +0000 (12:59 -0400)
This is a multi-part message in MIME format.
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
drivers/net/forcedeth.c

index 1e691024868fc0bac043109aeb0fcda7bcbd5693..f165ae973985f1346e3850d0a95b708d86ebc590 100644 (file)
@@ -91,6 +91,8 @@
  *                        per-packet flags.
  *      0.39: 18 Jul 2005: Add 64bit descriptor support.
  *      0.40: 19 Jul 2005: Add support for mac address change.
+ *      0.41: 30 Jul 2005: Write back original MAC in nv_close instead
+ *                        of nv_remove
  *
  * Known bugs:
  * We suspect that on some hardware no TX done interrupts are generated.
  * DEV_NEED_TIMERIRQ will not harm you on sane hardware, only generating a few
  * superfluous timer interrupts from the nic.
  */
-#define FORCEDETH_VERSION              "0.40"
+#define FORCEDETH_VERSION              "0.41"
 #define DRV_NAME                       "forcedeth"
 
 #include <linux/module.h>
@@ -2230,6 +2232,12 @@ static int nv_close(struct net_device *dev)
        if (np->wolenabled)
                nv_start_rx(dev);
 
+       /* special op: write back the misordered MAC address - otherwise
+        * the next nv_probe would see a wrong address.
+        */
+       writel(np->orig_mac[0], base + NvRegMacAddrA);
+       writel(np->orig_mac[1], base + NvRegMacAddrB);
+
        /* FIXME: power down nic */
 
        return 0;
@@ -2482,16 +2490,9 @@ static void __devexit nv_remove(struct pci_dev *pci_dev)
 {
        struct net_device *dev = pci_get_drvdata(pci_dev);
        struct fe_priv *np = get_nvpriv(dev);
-       u8 __iomem *base = get_hwbase(dev);
 
        unregister_netdev(dev);
 
-       /* special op: write back the misordered MAC address - otherwise
-        * the next nv_probe would see a wrong address.
-        */
-       writel(np->orig_mac[0], base + NvRegMacAddrA);
-       writel(np->orig_mac[1], base + NvRegMacAddrB);
-
        /* free all structures */
        if (np->desc_ver == DESC_VER_1 || np->desc_ver == DESC_VER_2)
                pci_free_consistent(np->pci_dev, sizeof(struct ring_desc) * (RX_RING + TX_RING), np->rx_ring.orig, np->ring_addr);