mxser: extract mxser_receive_chars_new

Extract the new handling of receive chars (using the MUST chip
enhancements) into a separate function. This eliminates the need for the
intr_old label and makes the code of mxser_receive_chars more compact.
In the next step, we will extract the old handling too.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Link: https://lore.kernel.org/r/20210618061516.662-16-jslaby@suse.cz
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Jiri Slaby 2021-06-18 08:14:21 +02:00 committed by Greg Kroah-Hartman
parent 9cb5c9c322
commit e5ce1bceda

View File

@ -2055,10 +2055,41 @@ static int mxser_rs_break(struct tty_struct *tty, int break_state)
return 0;
}
static bool mxser_receive_chars_new(struct tty_struct *tty,
struct mxser_port *port, u8 status, int *cnt)
{
enum mxser_must_hwid hwid = port->board->must_hwid;
u8 gdl;
if (hwid == MOXA_OTHER_UART)
return false;
if (status & UART_LSR_SPECIAL)
return false;
if (hwid == MOXA_MUST_MU860_HWID && (status & MOXA_MUST_LSR_RERR))
return false;
if (status & MOXA_MUST_LSR_RERR)
return false;
gdl = inb(port->ioaddr + MOXA_MUST_GDL_REGISTER);
if (hwid == MOXA_MUST_MU150_HWID)
gdl &= MOXA_MUST_GDL_MASK;
if (gdl >= tty->receive_room && !port->ldisc_stop_rx)
mxser_stoprx(tty);
while (gdl--) {
u8 ch = inb(port->ioaddr + UART_RX);
tty_insert_flip_char(&port->port, ch, 0);
(*cnt)++;
}
return true;
}
static u8 mxser_receive_chars(struct tty_struct *tty,
struct mxser_port *port, u8 status)
{
unsigned char ch, gdl;
unsigned char ch;
int ignored = 0;
int cnt = 0;
int recv_room;
@ -2067,32 +2098,9 @@ static u8 mxser_receive_chars(struct tty_struct *tty,
recv_room = tty->receive_room;
if (recv_room == 0 && !port->ldisc_stop_rx)
mxser_stoprx(tty);
if (port->board->must_hwid != MOXA_OTHER_UART) {
if (status & UART_LSR_SPECIAL)
goto intr_old;
if (port->board->must_hwid == MOXA_MUST_MU860_HWID &&
(status & MOXA_MUST_LSR_RERR))
goto intr_old;
if (status & MOXA_MUST_LSR_RERR)
goto intr_old;
gdl = inb(port->ioaddr + MOXA_MUST_GDL_REGISTER);
if (port->board->must_hwid == MOXA_MUST_MU150_HWID)
gdl &= MOXA_MUST_GDL_MASK;
if (gdl >= recv_room) {
if (!port->ldisc_stop_rx)
mxser_stoprx(tty);
}
while (gdl--) {
ch = inb(port->ioaddr + UART_RX);
tty_insert_flip_char(&port->port, ch, 0);
cnt++;
}
if (mxser_receive_chars_new(tty, port, status, &cnt))
goto end_intr;
}
intr_old:
do {
if (max-- < 0)