static inline void sx_receive_exc(struct specialix_board * bp){	struct specialix_port *port;	struct tty_struct *tty;	unsigned char status;	unsigned char ch;	func_enter();	port = sx_get_port(bp, "Receive");	if (!port) {		dprintk (SX_DEBUG_RX, "Hmm, couldn't find port.\n");		func_exit();		return;	}	tty = port->tty;	dprintk (SX_DEBUG_RX, "port: %p count: %d BUFF_SIZE: %d\n",		 port,  tty->flip.count, TTY_FLIPBUF_SIZE);		status = sx_in(bp, CD186x_RCSR);	dprintk (SX_DEBUG_RX, "status: 0x%x\n", status);	if (status & RCSR_OE) {		port->overrun++;		dprintk(SX_DEBUG_FIFO, "sx%d: port %d: Overrun. Total %ld overruns.\n",		       board_No(bp), port_No(port), port->overrun);	}	status &= port->mark_mask;	/* This flip buffer check needs to be below the reading of the	   status register to reset the chip's IRQ.... */	if (tty->flip.count >= TTY_FLIPBUF_SIZE) {		dprintk(SX_DEBUG_FIFO, "sx%d: port %d: Working around flip buffer overflow.\n",		       board_No(bp), port_No(port));		func_exit();		return;	}	ch = sx_in(bp, CD186x_RDR);	if (!status) {		func_exit();		return;	}	if (status & RCSR_TOUT) {		printk(KERN_INFO "sx%d: port %d: Receiver timeout. Hardware problems ?\n", 		       board_No(bp), port_No(port));		func_exit();		return;			} else if (status & RCSR_BREAK) {		dprintk(SX_DEBUG_RX, "sx%d: port %d: Handling break...\n",		       board_No(bp), port_No(port));		*tty->flip.flag_buf_ptr++ = TTY_BREAK;		if (port->flags & ASYNC_SAK)			do_SAK(tty);			} else if (status & RCSR_PE) 		*tty->flip.flag_buf_ptr++ = TTY_PARITY;		else if (status & RCSR_FE) 		*tty->flip.flag_buf_ptr++ = TTY_FRAME;		else if (status & RCSR_OE)		*tty->flip.flag_buf_ptr++ = TTY_OVERRUN;		else		*tty->flip.flag_buf_ptr++ = 0;		*tty->flip.char_buf_ptr++ = ch;	tty->flip.count++;	schedule_delayed_work(&tty->flip.work, 1);	func_exit();}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/d61780c0d384939ef31c46b47442854d5def4623/specialix.c/buggy/drivers/char/specialix.c