t = schedule_timeout(60*HZ); 
t = schedule_timeout_interruptible(60*HZ); 
static int olympic_close(struct net_device *dev) {	struct olympic_private *olympic_priv=(struct olympic_private *)dev->priv;	u8 __iomem *olympic_mmio=olympic_priv->olympic_mmio,*srb;	unsigned long t,flags;	DECLARE_WAITQUEUE(wait,current) ; 	netif_stop_queue(dev);		writel(olympic_priv->srb,olympic_mmio+LAPA);	srb=olympic_priv->olympic_lap + (olympic_priv->srb & (~0xf800));	    	writeb(SRB_CLOSE_ADAPTER,srb+0);	writeb(0,srb+1);	writeb(OLYMPIC_CLEAR_RET_CODE,srb+2);	add_wait_queue(&olympic_priv->srb_wait,&wait) ;	set_current_state(TASK_INTERRUPTIBLE) ; 	spin_lock_irqsave(&olympic_priv->olympic_lock,flags);	olympic_priv->srb_queued=1;	writel(LISR_SRB_CMD,olympic_mmio+LISR_SUM);	spin_unlock_irqrestore(&olympic_priv->olympic_lock,flags);	while(olympic_priv->srb_queued) {		t = schedule_timeout(60*HZ);         	if(signal_pending(current))	{            			printk(KERN_WARNING "%s: SRB timed out.\n",dev->name);            		printk(KERN_WARNING "SISR=%x MISR=%x\n",readl(olympic_mmio+SISR),readl(olympic_mmio+LISR));            		olympic_priv->srb_queued=0;            		break;        	}		if (t == 0) { 			printk(KERN_WARNING "%s: SRB timed out. May not be fatal. \n",dev->name) ; 		} 		olympic_priv->srb_queued=0;    	}	remove_wait_queue(&olympic_priv->srb_wait,&wait) ; 	olympic_priv->rx_status_last_received++;	olympic_priv->rx_status_last_received&=OLYMPIC_RX_RING_SIZE-1;	olympic_freemem(dev) ; 		/* reset tx/rx fifo's and busmaster logic */	writel(readl(olympic_mmio+BCTL)|(3<<13),olympic_mmio+BCTL);	udelay(1);	writel(readl(olympic_mmio+BCTL)&~(3<<13),olympic_mmio+BCTL);#if OLYMPIC_DEBUG	{	int i ; 	printk("srb(%p): ",srb);	for(i=0;i<4;i++)		printk("%x ",readb(srb+i));	printk("\n");	}#endif	free_irq(dev->irq,dev);	return 0;	}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/3173c8907ffb2c64456142da3df2bd0500bd59e0/olympic.c/clean/drivers/net/tokenring/olympic.c