Skip to content

Commit

Permalink
serial: Factor out uart_poll_timeout() from 8250 driver
Browse files Browse the repository at this point in the history
Soon we will use that handy function in the altera_uart driver.

Signed-off-by: Anton Vorontsov <[email protected]>
Cc: Alan Cox <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
  • Loading branch information
enomsg authored and gregkh committed Oct 22, 2010
1 parent 8ee16a1 commit 5438106
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 10 deletions.
14 changes: 4 additions & 10 deletions drivers/serial/8250.c
Original file line number Diff line number Diff line change
Expand Up @@ -1722,12 +1722,6 @@ static void serial_unlink_irq_chain(struct uart_8250_port *up)
mutex_unlock(&hash_mutex);
}

/* Base timer interval for polling */
static inline int poll_timeout(int timeout)
{
return timeout > 6 ? (timeout / 2 - 2) : 1;
}

/*
* This function is used to handle ports that do not have an
* interrupt. This doesn't work very well for 16450's, but gives
Expand All @@ -1742,7 +1736,7 @@ static void serial8250_timeout(unsigned long data)
iir = serial_in(up, UART_IIR);
if (!(iir & UART_IIR_NO_INT))
serial8250_handle_port(up);
mod_timer(&up->timer, jiffies + poll_timeout(up->port.timeout));
mod_timer(&up->timer, jiffies + uart_poll_timeout(&up->port));
}

static void serial8250_backup_timeout(unsigned long data)
Expand Down Expand Up @@ -1787,7 +1781,7 @@ static void serial8250_backup_timeout(unsigned long data)

/* Standard timer interval plus 0.2s to keep the port running */
mod_timer(&up->timer,
jiffies + poll_timeout(up->port.timeout) + HZ / 5);
jiffies + uart_poll_timeout(&up->port) + HZ / 5);
}

static unsigned int serial8250_tx_empty(struct uart_port *port)
Expand Down Expand Up @@ -2071,7 +2065,7 @@ static int serial8250_startup(struct uart_port *port)
up->timer.function = serial8250_backup_timeout;
up->timer.data = (unsigned long)up;
mod_timer(&up->timer, jiffies +
poll_timeout(up->port.timeout) + HZ / 5);
uart_poll_timeout(port) + HZ / 5);
}

/*
Expand All @@ -2081,7 +2075,7 @@ static int serial8250_startup(struct uart_port *port)
*/
if (!is_real_interrupt(up->port.irq)) {
up->timer.data = (unsigned long)up;
mod_timer(&up->timer, jiffies + poll_timeout(up->port.timeout));
mod_timer(&up->timer, jiffies + uart_poll_timeout(port));
} else {
retval = serial_link_irq_chain(up);
if (retval)
Expand Down
8 changes: 8 additions & 0 deletions include/linux/serial_core.h
Original file line number Diff line number Diff line change
Expand Up @@ -411,6 +411,14 @@ unsigned int uart_get_baud_rate(struct uart_port *port, struct ktermios *termios
unsigned int max);
unsigned int uart_get_divisor(struct uart_port *port, unsigned int baud);

/* Base timer interval for polling */
static inline int uart_poll_timeout(struct uart_port *port)
{
int timeout = port->timeout;

return timeout > 6 ? (timeout / 2 - 2) : 1;
}

/*
* Console helpers.
*/
Expand Down

0 comments on commit 5438106

Please sign in to comment.