static inline void sx_transmit(struct specialix_board * bp){	struct specialix_port *port;	struct tty_struct *tty;	unsigned char count;	func_enter();	if (!(port = sx_get_port(bp, "Transmit"))) {		func_exit();		return;	}	dprintk (SX_DEBUG_TX, "port: %p\n", port);	tty = port->tty;		if (port->IER & IER_TXEMPTY) {		/* FIFO drained */		sx_out(bp, CD186x_CAR, port_No(port));		port->IER &= ~IER_TXEMPTY;		sx_out(bp, CD186x_IER, port->IER);		func_exit();		return;	}		if ((port->xmit_cnt <= 0 && !port->break_length)	    || tty->stopped || tty->hw_stopped) {		sx_out(bp, CD186x_CAR, port_No(port));		port->IER &= ~IER_TXRDY;		sx_out(bp, CD186x_IER, port->IER);		func_exit();		return;	}		if (port->break_length) {		if (port->break_length > 0) {			if (port->COR2 & COR2_ETC) {				sx_out(bp, CD186x_TDR, CD186x_C_ESC);				sx_out(bp, CD186x_TDR, CD186x_C_SBRK);				port->COR2 &= ~COR2_ETC;			}			count = min_t(int, port->break_length, 0xff);			sx_out(bp, CD186x_TDR, CD186x_C_ESC);			sx_out(bp, CD186x_TDR, CD186x_C_DELAY);			sx_out(bp, CD186x_TDR, count);			if (!(port->break_length -= count))				port->break_length--;		} else {			sx_out(bp, CD186x_TDR, CD186x_C_ESC);			sx_out(bp, CD186x_TDR, CD186x_C_EBRK);			sx_out(bp, CD186x_COR2, port->COR2);			sx_wait_CCR(bp);			sx_out(bp, CD186x_CCR, CCR_CORCHG2);			port->break_length = 0;		}		func_exit();		return;	}		count = CD186x_NFIFO;	do {		sx_out(bp, CD186x_TDR, port->xmit_buf[port->xmit_tail++]);		port->xmit_tail = port->xmit_tail & (SERIAL_XMIT_SIZE-1);		if (--port->xmit_cnt <= 0)			break;	} while (--count > 0);		if (port->xmit_cnt <= 0) {		sx_out(bp, CD186x_CAR, port_No(port));		port->IER &= ~IER_TXRDY;		sx_out(bp, CD186x_IER, port->IER);	}	if (port->xmit_cnt <= port->wakeup_chars)		sx_mark_event(port, RS_EVENT_WRITE_WAKEUP);	func_exit();}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/d61780c0d384939ef31c46b47442854d5def4623/specialix.c/buggy/drivers/char/specialix.c