serial: 8250: Refactor serial8250_rx_chars() inner loop

Factor the read/process one char inner loop to a separate helper
function serial8250_read_char(). No functional change.

Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Peter Hurley 2016-01-10 14:39:31 -08:00 committed by Greg Kroah-Hartman
parent 87108bc987
commit 3f6b3ce071
1 changed files with 62 additions and 58 deletions

View File

@ -1412,20 +1412,12 @@ static void serial8250_enable_ms(struct uart_port *port)
serial8250_rpm_put(up);
}
/*
* serial8250_rx_chars: processes according to the passed in LSR
* value, and returns the remaining LSR bits not handled
* by this Rx routine.
*/
unsigned char
serial8250_rx_chars(struct uart_8250_port *up, unsigned char lsr)
static void serial8250_read_char(struct uart_8250_port *up, unsigned char lsr)
{
struct uart_port *port = &up->port;
unsigned char ch;
int max_count = 256;
char flag;
char flag = TTY_NORMAL;
do {
if (likely(lsr & UART_LSR_DR))
ch = serial_in(up, UART_RX);
else
@ -1438,7 +1430,6 @@ serial8250_rx_chars(struct uart_8250_port *up, unsigned char lsr)
*/
ch = 0;
flag = TTY_NORMAL;
port->icount.rx++;
lsr |= up->lsr_saved_flags;
@ -1455,7 +1446,7 @@ serial8250_rx_chars(struct uart_8250_port *up, unsigned char lsr)
* or read_status_mask.
*/
if (uart_handle_break(port))
goto ignore_char;
return;
} else if (lsr & UART_LSR_PE)
port->icount.parity++;
else if (lsr & UART_LSR_FE)
@ -1477,11 +1468,24 @@ serial8250_rx_chars(struct uart_8250_port *up, unsigned char lsr)
flag = TTY_FRAME;
}
if (uart_handle_sysrq_char(port, ch))
goto ignore_char;
return;
uart_insert_char(port, lsr, UART_LSR_OE, ch, flag);
}
ignore_char:
/*
* serial8250_rx_chars: processes according to the passed in LSR
* value, and returns the remaining LSR bits not handled
* by this Rx routine.
*/
unsigned char
serial8250_rx_chars(struct uart_8250_port *up, unsigned char lsr)
{
struct uart_port *port = &up->port;
int max_count = 256;
do {
serial8250_read_char(up, lsr);
lsr = serial_in(up, UART_LSR);
} while ((lsr & (UART_LSR_DR | UART_LSR_BI)) && (--max_count > 0));
spin_unlock(&port->lock);