From 795483fe2e7e644fa9ed7358f515fbf4827401ba Mon Sep 17 00:00:00 2001 From: Jesse Huang Date: Fri, 20 Oct 2006 14:42:13 -0700 Subject: [PATCH] --- yaml --- r: 41506 b: refs/heads/master c: acd70c2bfddb52aee27a4864c160bea7f0d117e1 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/net/sundance.c | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index bedcf1ae28fd..ae4b5370cb41 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 6b655529c3d817ed1b69cf2dd29e2c3ce5148a2b +refs/heads/master: acd70c2bfddb52aee27a4864c160bea7f0d117e1 diff --git a/trunk/drivers/net/sundance.c b/trunk/drivers/net/sundance.c index 91cd2f52e628..fba64d39ba19 100644 --- a/trunk/drivers/net/sundance.c +++ b/trunk/drivers/net/sundance.c @@ -788,6 +788,7 @@ static int netdev_open(struct net_device *dev) { struct netdev_private *np = netdev_priv(dev); void __iomem *ioaddr = np->base; + unsigned long flags; int i; /* Do we need to reset the chip??? */ @@ -832,6 +833,10 @@ static int netdev_open(struct net_device *dev) iowrite8(0x01, ioaddr + DebugCtrl1); netif_start_queue(dev); + spin_lock_irqsave(&np->lock, flags); + reset_tx(dev); + spin_unlock_irqrestore(&np->lock, flags); + iowrite16 (StatsEnable | RxEnable | TxEnable, ioaddr + MACCtrl1); if (netif_msg_ifup(np)) @@ -1651,6 +1656,9 @@ static int netdev_close(struct net_device *dev) /* Disable interrupts by clearing the interrupt mask. */ iowrite16(0x0000, ioaddr + IntrEnable); + /* Disable Rx and Tx DMA for safely release resource */ + iowrite32(0x500, ioaddr + DMACtrl); + /* Stop the chip's Tx and Rx processes. */ iowrite16(TxDisable | RxDisable | StatsDisable, ioaddr + MACCtrl1);