mirror of
https://github.com/torvalds/linux.git
synced 2026-05-22 06:01:53 +02:00
serial: 8250: make saved LSR larger
DW flags address received as BIT(8) in LSR. In order to not lose that on read, enlarge lsr_saved_flags to u16. Adjust lsr/status variables and related call chains to use u16. Technically, some of these type conversion would not be needed but it doesn't hurt to be consistent. Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Link: https://lore.kernel.org/r/20220624204210.11112-2-ilpo.jarvinen@linux.intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
34619de1b8
commit
f8ba5680a5
|
|
@ -133,9 +133,9 @@ static inline void serial_out(struct uart_8250_port *up, int offset, int value)
|
|||
*
|
||||
* Returns LSR value or'ed with the preserved flags (if any).
|
||||
*/
|
||||
static inline unsigned int serial_lsr_in(struct uart_8250_port *up)
|
||||
static inline u16 serial_lsr_in(struct uart_8250_port *up)
|
||||
{
|
||||
unsigned int lsr = up->lsr_saved_flags;
|
||||
u16 lsr = up->lsr_saved_flags;
|
||||
|
||||
lsr |= serial_in(up, UART_LSR);
|
||||
up->lsr_saved_flags = lsr & LSR_SAVE_FLAGS;
|
||||
|
|
|
|||
|
|
@ -195,11 +195,11 @@ static int xr17v35x_startup(struct uart_port *port)
|
|||
|
||||
static void exar_shutdown(struct uart_port *port)
|
||||
{
|
||||
unsigned char lsr;
|
||||
bool tx_complete = false;
|
||||
struct uart_8250_port *up = up_to_u8250p(port);
|
||||
struct circ_buf *xmit = &port->state->xmit;
|
||||
int i = 0;
|
||||
u16 lsr;
|
||||
|
||||
do {
|
||||
lsr = serial_in(up, UART_LSR);
|
||||
|
|
|
|||
|
|
@ -25,8 +25,8 @@
|
|||
|
||||
int fsl8250_handle_irq(struct uart_port *port)
|
||||
{
|
||||
unsigned char lsr, orig_lsr;
|
||||
unsigned long flags;
|
||||
u16 lsr, orig_lsr;
|
||||
unsigned int iir;
|
||||
struct uart_8250_port *up = up_to_u8250p(port);
|
||||
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ static void early_out(struct uart_port *port, int offset, uint8_t value)
|
|||
|
||||
static void ingenic_early_console_putc(struct uart_port *port, unsigned char c)
|
||||
{
|
||||
uint8_t lsr;
|
||||
u16 lsr;
|
||||
|
||||
do {
|
||||
lsr = early_in(port, UART_LSR);
|
||||
|
|
|
|||
|
|
@ -1115,8 +1115,7 @@ static bool handle_rx_dma(struct uart_8250_port *up, unsigned int iir)
|
|||
return omap_8250_rx_dma(up);
|
||||
}
|
||||
|
||||
static unsigned char omap_8250_handle_rx_dma(struct uart_8250_port *up,
|
||||
u8 iir, unsigned char status)
|
||||
static u16 omap_8250_handle_rx_dma(struct uart_8250_port *up, u8 iir, u16 status)
|
||||
{
|
||||
if ((status & (UART_LSR_DR | UART_LSR_BI)) &&
|
||||
(iir & UART_IIR_RDI)) {
|
||||
|
|
@ -1130,7 +1129,7 @@ static unsigned char omap_8250_handle_rx_dma(struct uart_8250_port *up,
|
|||
}
|
||||
|
||||
static void am654_8250_handle_rx_dma(struct uart_8250_port *up, u8 iir,
|
||||
unsigned char status)
|
||||
u16 status)
|
||||
{
|
||||
/*
|
||||
* Queue a new transfer if FIFO has data.
|
||||
|
|
@ -1164,7 +1163,7 @@ static int omap_8250_dma_handle_irq(struct uart_port *port)
|
|||
{
|
||||
struct uart_8250_port *up = up_to_u8250p(port);
|
||||
struct omap8250_priv *priv = up->port.private_data;
|
||||
unsigned char status;
|
||||
u16 status;
|
||||
u8 iir;
|
||||
|
||||
serial8250_rpm_get(up);
|
||||
|
|
|
|||
|
|
@ -1502,7 +1502,7 @@ static inline void __stop_tx(struct uart_8250_port *p)
|
|||
struct uart_8250_em485 *em485 = p->em485;
|
||||
|
||||
if (em485) {
|
||||
unsigned char lsr = serial_lsr_in(p);
|
||||
u16 lsr = serial_lsr_in(p);
|
||||
u64 stop_delay = 0;
|
||||
|
||||
p->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS;
|
||||
|
|
@ -1563,7 +1563,7 @@ static inline void __start_tx(struct uart_port *port)
|
|||
|
||||
if (serial8250_set_THRI(up)) {
|
||||
if (up->bugs & UART_BUG_TXEN) {
|
||||
unsigned char lsr = serial_lsr_in(up);
|
||||
u16 lsr = serial_lsr_in(up);
|
||||
|
||||
if (lsr & UART_LSR_THRE)
|
||||
serial8250_tx_chars(up);
|
||||
|
|
@ -1716,7 +1716,7 @@ static void serial8250_enable_ms(struct uart_port *port)
|
|||
serial8250_rpm_put(up);
|
||||
}
|
||||
|
||||
void serial8250_read_char(struct uart_8250_port *up, unsigned char lsr)
|
||||
void serial8250_read_char(struct uart_8250_port *up, u16 lsr)
|
||||
{
|
||||
struct uart_port *port = &up->port;
|
||||
unsigned char ch;
|
||||
|
|
@ -1785,7 +1785,7 @@ EXPORT_SYMBOL_GPL(serial8250_read_char);
|
|||
* (such as THRE) because the LSR value might come from an already consumed
|
||||
* character.
|
||||
*/
|
||||
unsigned char serial8250_rx_chars(struct uart_8250_port *up, unsigned char lsr)
|
||||
u16 serial8250_rx_chars(struct uart_8250_port *up, u16 lsr)
|
||||
{
|
||||
struct uart_port *port = &up->port;
|
||||
int max_count = 256;
|
||||
|
|
@ -1905,10 +1905,10 @@ static bool handle_rx_dma(struct uart_8250_port *up, unsigned int iir)
|
|||
*/
|
||||
int serial8250_handle_irq(struct uart_port *port, unsigned int iir)
|
||||
{
|
||||
unsigned char status;
|
||||
struct uart_8250_port *up = up_to_u8250p(port);
|
||||
bool skip_rx = false;
|
||||
unsigned long flags;
|
||||
u16 status;
|
||||
|
||||
if (iir & UART_IIR_NO_INT)
|
||||
return 0;
|
||||
|
|
@ -1991,7 +1991,7 @@ static unsigned int serial8250_tx_empty(struct uart_port *port)
|
|||
{
|
||||
struct uart_8250_port *up = up_to_u8250p(port);
|
||||
unsigned long flags;
|
||||
unsigned int lsr;
|
||||
u16 lsr;
|
||||
|
||||
serial8250_rpm_get(up);
|
||||
|
||||
|
|
@ -2114,8 +2114,8 @@ static void wait_for_xmitr(struct uart_8250_port *up, int bits)
|
|||
static int serial8250_get_poll_char(struct uart_port *port)
|
||||
{
|
||||
struct uart_8250_port *up = up_to_u8250p(port);
|
||||
unsigned char lsr;
|
||||
int status;
|
||||
u16 lsr;
|
||||
|
||||
serial8250_rpm_get(up);
|
||||
|
||||
|
|
@ -2170,8 +2170,9 @@ int serial8250_do_startup(struct uart_port *port)
|
|||
{
|
||||
struct uart_8250_port *up = up_to_u8250p(port);
|
||||
unsigned long flags;
|
||||
unsigned char lsr, iir;
|
||||
unsigned char iir;
|
||||
int retval;
|
||||
u16 lsr;
|
||||
|
||||
if (!port->fifosize)
|
||||
port->fifosize = uart_config[port->type].fifo_size;
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@ struct uart_8250_port {
|
|||
* be immediately processed.
|
||||
*/
|
||||
#define LSR_SAVE_FLAGS UART_LSR_BRK_ERROR_BITS
|
||||
unsigned char lsr_saved_flags;
|
||||
u16 lsr_saved_flags;
|
||||
#define MSR_SAVE_FLAGS UART_MSR_ANY_DELTA
|
||||
unsigned char msr_saved_flags;
|
||||
|
||||
|
|
@ -170,8 +170,8 @@ extern void serial8250_do_set_divisor(struct uart_port *port, unsigned int baud,
|
|||
unsigned int quot_frac);
|
||||
extern int fsl8250_handle_irq(struct uart_port *port);
|
||||
int serial8250_handle_irq(struct uart_port *port, unsigned int iir);
|
||||
unsigned char serial8250_rx_chars(struct uart_8250_port *up, unsigned char lsr);
|
||||
void serial8250_read_char(struct uart_8250_port *up, unsigned char lsr);
|
||||
u16 serial8250_rx_chars(struct uart_8250_port *up, u16 lsr);
|
||||
void serial8250_read_char(struct uart_8250_port *up, u16 lsr);
|
||||
void serial8250_tx_chars(struct uart_8250_port *up);
|
||||
unsigned int serial8250_modem_status(struct uart_8250_port *up);
|
||||
void serial8250_init_port(struct uart_8250_port *up);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user