--- tlan.c.0 Thu Feb 10 08:06:44 2000
+++ tlan.c Thu Feb 10 08:04:44 2000
@@ -89,16 +89,12 @@
static int duplex = 0;
static int speed = 0;
-#ifdef MODULE
-
MODULE_PARM(aui, "i");
MODULE_PARM(duplex, "i");
MODULE_PARM(speed, "i");
MODULE_PARM(debug, "i");
EXPORT_NO_SYMBOLS;
-#endif
-
/* Turn on debugging. See linux/Documentation/networking/tlan.txt for details */
static int debug = 0;
@@ -645,9 +641,7 @@
return -EAGAIN;
}
- dev->tbusy = 0;
- dev->interrupt = 0;
- dev->start = 1;
+ netif_start_queue(dev);
/* NOTE: It might not be necessary to read the stats before a
reset if you don't care what the values are.
@@ -696,7 +690,10 @@
if ( ! priv->phyOnline ) {
TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: %s PHY is not ready\n", dev->name );
- dev_kfree_skb( skb );
+ if (in_irq())
+ dev_kfree_skb_irq( skb );
+ else
+ dev_kfree_skb( skb );
return 0;
}
@@ -704,7 +701,7 @@
if ( tail_list->cStat != TLAN_CSTAT_UNUSED ) {
TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: %s is busy (Head=%d Tail=%d)\n", dev->name, priv->txHead, priv->txTail );
- dev->tbusy = 1;
+ netif_stop_queue(dev);
priv->txBusyCount++;
return 1;
}
@@ -754,7 +751,10 @@
CIRC_INC( priv->txTail, TLAN_NUM_TX_LISTS );
if ( bbuf ) {
- dev_kfree_skb( skb );
+ if (in_irq())
+ dev_kfree_skb_irq( skb );
+ else
+ dev_kfree_skb( skb );
}
dev->trans_start = jiffies;
@@ -799,10 +799,6 @@
priv = (TLanPrivateInfo *) dev->priv;
spin_lock(&priv->lock);
- if ( dev->interrupt ) {
- printk( "TLAN: Re-entering interrupt handler for %s: %ld.\n" , dev->name, dev->interrupt );
- }
- dev->interrupt++;
host_int = inw( dev->base_addr + TLAN_HOST_INT );
outw( host_int, dev->base_addr + TLAN_HOST_INT );
@@ -816,7 +812,6 @@
outl( host_cmd, dev->base_addr + TLAN_HOST_CMD );
}
- dev->interrupt--;
spin_unlock(&priv->lock);
} /* TLan_HandleInterrupts */
@@ -843,9 +838,7 @@
{
TLanPrivateInfo *priv = (TLanPrivateInfo *) dev->priv;
- dev->start = 0;
- dev->tbusy = 1;
-
+ netif_stop_queue(dev);
TLan_ReadAndClearStats( dev, TLAN_RECORD );
outl( TLAN_HC_AD_RST, dev->base_addr + TLAN_HOST_CMD );
if ( priv->timer.function != NULL )
@@ -1045,7 +1038,10 @@
head_list = priv->txList + priv->txHead;
if ( ! bbuf ) {
- dev_kfree_skb( (struct sk_buff *) head_list->buffer[9].address );
+ if (in_irq())
+ dev_kfree_skb_irq( (struct sk_buff *) head_list->buffer[9].address );
+ else
+ dev_kfree_skb( (struct sk_buff *) head_list->buffer[9].address );
head_list->buffer[9].address = 0;
}
@@ -1058,7 +1054,7 @@
priv->stats.tx_bytes += head_list->frameSize;
head_list->cStat = TLAN_CSTAT_UNUSED;
- dev->tbusy = 0;
+ netif_start_queue(dev);
CIRC_INC( priv->txHead, TLAN_NUM_TX_LISTS );
if ( eoc ) {
TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: Handling TX EOC (Head=%d Tail=%d)\n", priv->txHead, priv->txTail );
@@ -1367,7 +1363,7 @@
TLan_FreeLists( dev );
TLan_ResetLists( dev );
TLan_ResetAdapter( dev );
- dev->tbusy = 0;
+ netif_start_queue(dev);
ack = 0;
} else {
TLAN_DBG( TLAN_DEBUG_GNRL, "%s: Status Check\n", dev->name );
@@ -2377,9 +2373,7 @@
outw(TLAN_NET_SIO, dev->base_addr + TLAN_DIO_ADR);
sio = dev->base_addr + TLAN_DIO_DATA + TLAN_NET_SIO;
- if ( dev->interrupt == 0 )
- spin_lock_irqsave(&priv->lock, flags);
- dev->interrupt++;
+ spin_lock_irqsave(&priv->lock, flags);
TLan_MiiSync(dev->base_addr);
@@ -2426,9 +2420,7 @@
*val = tmp;
- dev->interrupt--;
- if ( dev->interrupt == 0 )
- spin_unlock_irqrestore(&priv->lock, flags);
+ spin_unlock_irqrestore(&priv->lock, flags);
return err;
@@ -2546,9 +2538,7 @@
outw(TLAN_NET_SIO, dev->base_addr + TLAN_DIO_ADR);
sio = dev->base_addr + TLAN_DIO_DATA + TLAN_NET_SIO;
- if ( dev->interrupt == 0 )
- spin_lock_irqsave(&priv->lock, flags);
- dev->interrupt++;
+ spin_lock_irqsave(&priv->lock, flags);
TLan_MiiSync( dev->base_addr );
@@ -2570,9 +2560,7 @@
if ( minten )
TLan_SetBit( TLAN_NET_SIO_MINTEN, sio );
- dev->interrupt--;
- if ( dev->interrupt == 0 )
- spin_unlock_irqrestore(&priv->lock, flags);
+ spin_unlock_irqrestore(&priv->lock, flags);
} /* TLan_MiiWriteReg */
@@ -2774,9 +2762,7 @@
unsigned long flags = 0;
int ret=0;
- if ( dev->interrupt == 0 )
- spin_lock_irqsave(&priv->lock, flags);
- dev->interrupt++;
+ spin_lock_irqsave(&priv->lock, flags);
TLan_EeSendStart( dev->base_addr );
err = TLan_EeSendByte( dev->base_addr, 0xA0, TLAN_EEPROM_ACK );
@@ -2800,9 +2786,7 @@
}
TLan_EeReceiveByte( dev->base_addr, data, TLAN_EEPROM_STOP );
fail:
- dev->interrupt--;
- if ( dev->interrupt == 0 )
- spin_unlock_irqrestore(&priv->lock, flags);
+ spin_unlock_irqrestore(&priv->lock, flags);
return ret;