if (inw(ioaddr + TxFree) > 1536) { 
if (ioread16(ioaddr + TxFree) > 1536) { 
vortex_interrupt(int irq, void *dev_id, struct pt_regs *regs){	struct net_device *dev = dev_id;	struct vortex_private *vp = netdev_priv(dev);	long ioaddr;	int status;	int work_done = max_interrupt_work;	int handled = 0;	ioaddr = dev->base_addr;	spin_lock(&vp->lock);	status = inw(ioaddr + EL3_STATUS);	if (vortex_debug > 6)		printk("vortex_interrupt(). status=0x%4x\n", status);	if ((status & IntLatch) == 0)		goto handler_exit;		/* No interrupt: shared IRQs cause this */	handled = 1;	if (status & IntReq) {		status |= vp->deferred;		vp->deferred = 0;	}	if (status == 0xffff)		/* h/w no longer present (hotplug)? */		goto handler_exit;	if (vortex_debug > 4)		printk(KERN_DEBUG "%s: interrupt, status %4.4x, latency %d ticks.\n",			   dev->name, status, inb(ioaddr + Timer));	do {		if (vortex_debug > 5)				printk(KERN_DEBUG "%s: In interrupt loop, status %4.4x.\n",					   dev->name, status);		if (status & RxComplete)			vortex_rx(dev);		if (status & TxAvailable) {			if (vortex_debug > 5)				printk(KERN_DEBUG "	TX room bit was handled.\n");			/* There's room in the FIFO for a full-sized packet. */			outw(AckIntr | TxAvailable, ioaddr + EL3_CMD);			netif_wake_queue (dev);		}		if (status & DMADone) {			if (inw(ioaddr + Wn7_MasterStatus) & 0x1000) {				outw(0x1000, ioaddr + Wn7_MasterStatus); /* Ack the event. */				pci_unmap_single(VORTEX_PCI(vp), vp->tx_skb_dma, (vp->tx_skb->len + 3) & ~3, PCI_DMA_TODEVICE);				dev_kfree_skb_irq(vp->tx_skb); /* Release the transferred buffer */				if (inw(ioaddr + TxFree) > 1536) {					/*					 * AKPM: FIXME: I don't think we need this.  If the queue was stopped due to					 * insufficient FIFO room, the TxAvailable test will succeed and call					 * netif_wake_queue()					 */					netif_wake_queue(dev);				} else { /* Interrupt when FIFO has room for max-sized packet. */					outw(SetTxThreshold + (1536>>2), ioaddr + EL3_CMD);					netif_stop_queue(dev);				}			}		}		/* Check for all uncommon interrupts at once. */		if (status & (HostError | RxEarly | StatsFull | TxComplete | IntReq)) {			if (status == 0xffff)				break;			vortex_error(dev, status);		}		if (--work_done < 0) {			printk(KERN_WARNING "%s: Too much work in interrupt, status "				   "%4.4x.\n", dev->name, status);			/* Disable all pending interrupts. */			do {				vp->deferred |= status;				outw(SetStatusEnb | (~vp->deferred & vp->status_enable),					 ioaddr + EL3_CMD);				outw(AckIntr | (vp->deferred & 0x7ff), ioaddr + EL3_CMD);			} while ((status = inw(ioaddr + EL3_CMD)) & IntLatch);			/* The timer will reenable interrupts. */			mod_timer(&vp->timer, jiffies + 1*HZ);			break;		}		/* Acknowledge the IRQ. */		outw(AckIntr | IntReq | IntLatch, ioaddr + EL3_CMD);	} while ((status = inw(ioaddr + EL3_STATUS)) & (IntLatch | RxComplete));	if (vortex_debug > 4)		printk(KERN_DEBUG "%s: exiting interrupt, status %4.4x.\n",			   dev->name, status);handler_exit:	spin_unlock(&vp->lock);	return IRQ_RETVAL(handled);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/62afe595de7aaac6c140103a34dc8c208afa34e7/3c59x.c/buggy/drivers/net/3c59x.c