static _INLINE_ void receive_chars(struct mcf_serial *info,
volatile unsigned char *uartp)
{
struct tty_struct *tty = info->tty;
unsigned char status, ch;
if (!tty)
return;
while ((status = uartp[MCFUART_USR]) & MCFUART_USR_RXREADY) {
if (tty->flip.count >= TTY_FLIPBUF_SIZE) {
/*
* can't take any more data. Turn off receiver
* so that the interrupt doesn't continually
* occur.
*/
info->imr &= ~MCFUART_UIR_RXREADY; uartp[MCFUART_UIMR] = info->imr;
break;
}
.... //process the character
}
schedule_delayed_work(&tty->flip.work, 1);
return;
}
if (tty->flip.count >= TTY_FLIPBUF_SIZE) { break;}schedule_work(&tty->flip.work);