|
@@ -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);
|
|
|
|