[3c90x] Fix a3c90x_close() and a3c90x_remove() methods.
authorThomas Miletich <thomas.miletich@gmail.com>
Sat, 5 Sep 2009 09:23:55 +0000 (11:23 +0200)
committerMarty Connor <mdc@etherboot.org>
Thu, 15 Oct 2009 17:06:01 +0000 (13:06 -0400)
Both methods disabled packet tx and rx just to have it enabled again
by calling a3c90x_reset().
Fixed by disabling tx and rx after the call to a3c90x_reset().

Tested by booting Ubuntu intrepid(8.10) directly from gPXE and pxelinux.
Tested on 3c905, 3c905B, 3c905C.

Signed-off-by: Marty Connor <mdc@etherboot.org>
src/drivers/net/3c90x.c

index aeed633..9c1879b 100644 (file)
@@ -619,13 +619,13 @@ static void a3c90x_remove(struct pci_device *pci)
 
        DBGP("a3c90x_remove\n");
 
 
        DBGP("a3c90x_remove\n");
 
-       unregister_netdev(netdev);
+       a3c90x_reset(inf_3c90x);
 
        /* Disable the receiver and transmitter. */
        outw(cmdRxDisable, inf_3c90x->IOAddr + regCommandIntStatus_w);
        outw(cmdTxDisable, inf_3c90x->IOAddr + regCommandIntStatus_w);
 
 
        /* Disable the receiver and transmitter. */
        outw(cmdRxDisable, inf_3c90x->IOAddr + regCommandIntStatus_w);
        outw(cmdTxDisable, inf_3c90x->IOAddr + regCommandIntStatus_w);
 
-       a3c90x_reset(inf_3c90x);
+       unregister_netdev(netdev);
        netdev_nullify(netdev);
        netdev_put(netdev);
 }
        netdev_nullify(netdev);
        netdev_put(netdev);
 }
@@ -845,9 +845,9 @@ static void a3c90x_close(struct net_device *netdev)
 
        DBGP("a3c90x_close\n");
 
 
        DBGP("a3c90x_close\n");
 
+       a3c90x_reset(inf_3c90x);
        outw(cmdRxDisable, inf_3c90x->IOAddr + regCommandIntStatus_w);
        outw(cmdTxDisable, inf_3c90x->IOAddr + regCommandIntStatus_w);
        outw(cmdRxDisable, inf_3c90x->IOAddr + regCommandIntStatus_w);
        outw(cmdTxDisable, inf_3c90x->IOAddr + regCommandIntStatus_w);
-       a3c90x_reset(inf_3c90x);
        a3c90x_free_resources(inf_3c90x);
 }
 
        a3c90x_free_resources(inf_3c90x);
 }