 iobase = self->io.fir_base; 
static int smsc_ircc_hard_xmit_fir(struct sk_buff *skb, struct net_device *dev){	struct smsc_ircc_cb *self;	unsigned long flags;	s32 speed;	int iobase;	int mtt;	IRDA_ASSERT(dev != NULL, return 0;);	self = (struct smsc_ircc_cb *) dev->priv;	IRDA_ASSERT(self != NULL, return 0;);	iobase = self->io.fir_base;	netif_stop_queue(dev);	/* Make sure test of self->io.speed & speed change are atomic */	spin_lock_irqsave(&self->lock, flags);	/* Check if we need to change the speed after this frame */	speed = irda_get_next_speed(skb);	if (speed != self->io.speed && speed != -1) {		/* Check for empty frame */		if (!skb->len) {			/* Note : you should make sure that speed changes			 * are not going to corrupt any outgoing frame.			 * Look at nsc-ircc for the gory details - Jean II */			smsc_ircc_change_speed(self, speed);			spin_unlock_irqrestore(&self->lock, flags);			dev_kfree_skb(skb);			return 0;		}		self->new_speed = speed;	}	memcpy(self->tx_buff.head, skb->data, skb->len);	self->tx_buff.len = skb->len;	self->tx_buff.data = self->tx_buff.head;	mtt = irda_get_mtt(skb);	if (mtt) {		int bofs;		/*		 * Compute how many BOFs (STA or PA's) we need to waste the		 * min turn time given the speed of the link.		 */		bofs = mtt * (self->io.speed / 1000) / 8000;		if (bofs > 4095)			bofs = 4095;		smsc_ircc_dma_xmit(self, iobase, bofs);	} else {		/* Transmit frame */		smsc_ircc_dma_xmit(self, iobase, 0);	}	spin_unlock_irqrestore(&self->lock, flags);	dev_kfree_skb(skb);	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/80a9058924d66643b645dbf5ad92acdac6d1d134/smsc-ircc2.c/clean/drivers/net/irda/smsc-ircc2.c