int iobase = self->io.fir_base; 
static void smsc_ircc_dma_receive_complete(struct smsc_ircc_cb *self, int iobase){	struct sk_buff *skb;	int len, msgcnt, lsr;	register_bank(iobase, 0);	IRDA_DEBUG(3, "%s\n", __FUNCTION__);#if 0	/* Disable Rx */	register_bank(iobase, 0);	outb(0x00, iobase + IRCC_LCR_B);#endif	register_bank(iobase, 0);	outb(inb(iobase + IRCC_LSAR) & ~IRCC_LSAR_ADDRESS_MASK, iobase + IRCC_LSAR);	lsr= inb(iobase + IRCC_LSR);	msgcnt = inb(iobase + IRCC_LCR_B) & 0x08;	IRDA_DEBUG(2, "%s: dma count = %d\n", __FUNCTION__,		   get_dma_residue(self->io.dma));	len = self->rx_buff.truesize - get_dma_residue(self->io.dma);	/* Look for errors */	if (lsr & (IRCC_LSR_FRAME_ERROR | IRCC_LSR_CRC_ERROR | IRCC_LSR_SIZE_ERROR)) {		self->stats.rx_errors++;		if (lsr & IRCC_LSR_FRAME_ERROR)			self->stats.rx_frame_errors++;		if (lsr & IRCC_LSR_CRC_ERROR)			self->stats.rx_crc_errors++;		if (lsr & IRCC_LSR_SIZE_ERROR)			self->stats.rx_length_errors++;		if (lsr & (IRCC_LSR_UNDERRUN | IRCC_LSR_OVERRUN))			self->stats.rx_length_errors++;		return;	}	/* Remove CRC */	len -= self->io.speed < 4000000 ? 2 : 4;	if (len < 2 || len > 2050) {		IRDA_WARNING("%s(), bogus len=%d\n", __FUNCTION__, len);		return;	}	IRDA_DEBUG(2, "%s: msgcnt = %d, len=%d\n", __FUNCTION__, msgcnt, len);	skb = dev_alloc_skb(len + 1);	if (!skb) {		IRDA_WARNING("%s(), memory squeeze, dropping frame.\n",			     __FUNCTION__);		return;	}	/* Make sure IP header gets aligned */	skb_reserve(skb, 1);	memcpy(skb_put(skb, len), self->rx_buff.data, len);	self->stats.rx_packets++;	self->stats.rx_bytes += len;	skb->dev = self->netdev;	skb->mac.raw  = skb->data;	skb->protocol = htons(ETH_P_IRDA);	netif_rx(skb);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/80a9058924d66643b645dbf5ad92acdac6d1d134/smsc-ircc2.c/clean/drivers/net/irda/smsc-ircc2.c