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