outb(UART_IER_THRI, iobase+UART_IER); 
outb(UART_IER_THRI, iobase + UART_IER); 
int smsc_ircc_hard_xmit_sir(struct sk_buff *skb, struct net_device *dev){	struct smsc_ircc_cb *self;	unsigned long flags;	int iobase;	s32 speed;	IRDA_DEBUG(1, "%s\n", __FUNCTION__);	IRDA_ASSERT(dev != NULL, return 0;);	self = (struct smsc_ircc_cb *) dev->priv;	IRDA_ASSERT(self != NULL, return 0;);	iobase = self->io.sir_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 */	speed = irda_get_next_speed(skb);	if ((speed != self->io.speed) && (speed != -1)) {		/* Check for empty frame */		if (!skb->len) {			/*			 * We send frames one by one in SIR mode (no			 * pipelining), so at this point, if we were sending			 * a previous frame, we just received the interrupt			 * telling us it is finished (UART_IIR_THRI).			 * Therefore, waiting for the transmitter to really			 * finish draining the fifo won't take too long.			 * And the interrupt handler is not expected to run.			 * - Jean II */			smsc_ircc_sir_wait_hw_transmitter_finish(self);			smsc_ircc_change_speed(self, speed);			spin_unlock_irqrestore(&self->lock, flags);			dev_kfree_skb(skb);			return 0;		} else {			self->new_speed = speed;		}	}	/* Init tx buffer */	self->tx_buff.data = self->tx_buff.head;	/* Copy skb to tx_buff while wrapping, stuffing and making CRC */	self->tx_buff.len = async_wrap_skb(skb, self->tx_buff.data,					   self->tx_buff.truesize);	self->stats.tx_bytes += self->tx_buff.len;	/* Turn on transmit finished interrupt. Will fire immediately!  */	outb(UART_IER_THRI, iobase+UART_IER);	spin_unlock_irqrestore(&self->lock, flags);	dev_kfree_skb(skb);	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/98b7777331d4344821e900040da5d1d3016d9e67/smsc-ircc2.c/clean/drivers/net/irda/smsc-ircc2.c