addr = (void *)dev->base_addr; 
addr = etherh_priv(dev)->base; 
etherh_block_output (struct net_device *dev, int count, const unsigned char *buf, int start_page){	struct ei_device *ei_local = netdev_priv(dev);	unsigned long dma_start;	void __iomem *dma_base, *addr;	if (ei_local->dmaing) {		printk(KERN_ERR "%s: DMAing conflict in etherh_block_input: "			" DMAstat %d irqlock %d\n", dev->name,			ei_local->dmaing, ei_local->irqlock);		return;	}	/*	 * Make sure we have a round number of bytes if we're in word mode.	 */	if (count & 1 && ei_local->word16)		count++;	ei_local->dmaing = 1;	addr = (void *)dev->base_addr;	dma_base = etherh_priv(dev)->dma_base;	count = (count + 1) & ~1;	writeb (E8390_NODMA | E8390_PAGE0 | E8390_START, addr + E8390_CMD);	writeb (0x42, addr + EN0_RCNTLO);	writeb (0x00, addr + EN0_RCNTHI);	writeb (0x42, addr + EN0_RSARLO);	writeb (0x00, addr + EN0_RSARHI);	writeb (E8390_RREAD | E8390_START, addr + E8390_CMD);	udelay (1);	writeb (ENISR_RDC, addr + EN0_ISR);	writeb (count, addr + EN0_RCNTLO);	writeb (count >> 8, addr + EN0_RCNTHI);	writeb (0, addr + EN0_RSARLO);	writeb (start_page, addr + EN0_RSARHI);	writeb (E8390_RWRITE | E8390_START, addr + E8390_CMD);	if (ei_local->word16)		writesw (dma_base, buf, count >> 1);	else		writesb (dma_base, buf, count);	dma_start = jiffies;	while ((readb (addr + EN0_ISR) & ENISR_RDC) == 0)		if (jiffies - dma_start > 2*HZ/100) { /* 20ms */			printk(KERN_ERR "%s: timeout waiting for TX RDC\n",				dev->name);			etherh_reset (dev);			NS8390_init (dev, 1);			break;		}	writeb (ENISR_RDC, addr + EN0_ISR);	ei_local->dmaing = 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/507ef165e8bc078e877db293a5e3048e692491fb/etherh.c/buggy/drivers/net/arm/etherh.c