Skip to content

Commit

Permalink
serial: add a new helper function
Browse files Browse the repository at this point in the history
In most of the time, the driver needs to check if the cts flow control
is enabled. But now, the driver checks the ASYNC_CTS_FLOW flag manually,
which is not a grace way. So add a new wraper function to make the code
tidy and clean.

Signed-off-by: Huang Shijie <shijie8@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
zyzii authored and gregkh committed Sep 5, 2012
1 parent e5b57c0 commit f21ec3d
Show file tree
Hide file tree
Showing 13 changed files with 20 additions and 14 deletions.
2 changes: 1 addition & 1 deletion drivers/char/pcmcia/synclink_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -1050,7 +1050,7 @@ static void cts_change(MGSLPC_INFO *info, struct tty_struct *tty)
wake_up_interruptible(&info->status_event_wait_q);
wake_up_interruptible(&info->event_wait_q);

if (info->port.flags & ASYNC_CTS_FLOW) {
if (tty_port_cts_enabled(&info->port)) {
if (tty->hw_stopped) {
if (info->serial_signals & SerialSignal_CTS) {
if (debug_level >= DEBUG_LEVEL_ISR)
Expand Down
2 changes: 1 addition & 1 deletion drivers/tty/amiserial.c
Original file line number Diff line number Diff line change
Expand Up @@ -420,7 +420,7 @@ static void check_modem_status(struct serial_state *info)
tty_hangup(port->tty);
}
}
if (port->flags & ASYNC_CTS_FLOW) {
if (tty_port_cts_enabled(port)) {
if (port->tty->hw_stopped) {
if (!(status & SER_CTS)) {
#if (defined(SERIAL_DEBUG_INTR) || defined(SERIAL_DEBUG_FLOW))
Expand Down
2 changes: 1 addition & 1 deletion drivers/tty/cyclades.c
Original file line number Diff line number Diff line change
Expand Up @@ -727,7 +727,7 @@ static void cyy_chip_modem(struct cyclades_card *cinfo, int chip,
else
tty_hangup(tty);
}
if ((mdm_change & CyCTS) && (info->port.flags & ASYNC_CTS_FLOW)) {
if ((mdm_change & CyCTS) && tty_port_cts_enabled(&info->port)) {
if (tty->hw_stopped) {
if (mdm_status & CyCTS) {
/* cy_start isn't used
Expand Down
2 changes: 1 addition & 1 deletion drivers/tty/isicom.c
Original file line number Diff line number Diff line change
Expand Up @@ -600,7 +600,7 @@ static irqreturn_t isicom_interrupt(int irq, void *dev_id)
port->status &= ~ISI_DCD;
}

if (port->port.flags & ASYNC_CTS_FLOW) {
if (tty_port_cts_enabled(&port->port)) {
if (tty->hw_stopped) {
if (header & ISI_CTS) {
port->port.tty->hw_stopped = 0;
Expand Down
2 changes: 1 addition & 1 deletion drivers/tty/mxser.c
Original file line number Diff line number Diff line change
Expand Up @@ -830,7 +830,7 @@ static void mxser_check_modem_status(struct tty_struct *tty,
wake_up_interruptible(&port->port.open_wait);
}

if (port->port.flags & ASYNC_CTS_FLOW) {
if (tty_port_cts_enabled(&port->port)) {
if (tty->hw_stopped) {
if (status & UART_MSR_CTS) {
tty->hw_stopped = 0;
Expand Down
2 changes: 1 addition & 1 deletion drivers/tty/serial/mxs-auart.c
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,7 @@ static void mxs_auart_set_mctrl(struct uart_port *u, unsigned mctrl)

ctrl &= ~AUART_CTRL2_RTSEN;
if (mctrl & TIOCM_RTS) {
if (u->state->port.flags & ASYNC_CTS_FLOW)
if (tty_port_cts_enabled(&u->state->port))
ctrl |= AUART_CTRL2_RTSEN;
}

Expand Down
4 changes: 2 additions & 2 deletions drivers/tty/serial/serial_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ static int uart_port_startup(struct tty_struct *tty, struct uart_state *state,
uart_set_mctrl(uport, TIOCM_RTS | TIOCM_DTR);
}

if (port->flags & ASYNC_CTS_FLOW) {
if (tty_port_cts_enabled(port)) {
spin_lock_irq(&uport->lock);
if (!(uport->ops->get_mctrl(uport) & TIOCM_CTS))
tty->hw_stopped = 1;
Expand Down Expand Up @@ -2509,7 +2509,7 @@ void uart_handle_cts_change(struct uart_port *uport, unsigned int status)

uport->icount.cts++;

if (port->flags & ASYNC_CTS_FLOW) {
if (tty_port_cts_enabled(port)) {
if (tty->hw_stopped) {
if (status) {
tty->hw_stopped = 0;
Expand Down
2 changes: 1 addition & 1 deletion drivers/tty/synclink.c
Original file line number Diff line number Diff line change
Expand Up @@ -1359,7 +1359,7 @@ static void mgsl_isr_io_pin( struct mgsl_struct *info )
}
}

if ( (info->port.flags & ASYNC_CTS_FLOW) &&
if (tty_port_cts_enabled(&info->port) &&
(status & MISCSTATUS_CTS_LATCHED) ) {
if (info->port.tty->hw_stopped) {
if (status & MISCSTATUS_CTS) {
Expand Down
2 changes: 1 addition & 1 deletion drivers/tty/synclink_gt.c
Original file line number Diff line number Diff line change
Expand Up @@ -2053,7 +2053,7 @@ static void cts_change(struct slgt_info *info, unsigned short status)
wake_up_interruptible(&info->event_wait_q);
info->pending_bh |= BH_STATUS;

if (info->port.flags & ASYNC_CTS_FLOW) {
if (tty_port_cts_enabled(&info->port)) {
if (info->port.tty) {
if (info->port.tty->hw_stopped) {
if (info->signals & SerialSignal_CTS) {
Expand Down
2 changes: 1 addition & 1 deletion drivers/tty/synclinkmp.c
Original file line number Diff line number Diff line change
Expand Up @@ -2500,7 +2500,7 @@ static void isr_io_pin( SLMP_INFO *info, u16 status )
}
}

if ( (info->port.flags & ASYNC_CTS_FLOW) &&
if (tty_port_cts_enabled(&info->port) &&
(status & MISCSTATUS_CTS_LATCHED) ) {
if ( info->port.tty ) {
if (info->port.tty->hw_stopped) {
Expand Down
6 changes: 6 additions & 0 deletions include/linux/tty.h
Original file line number Diff line number Diff line change
Expand Up @@ -514,6 +514,12 @@ static inline struct tty_port *tty_port_get(struct tty_port *port)
return port;
}

/* If the cts flow control is enabled, return true. */
static inline bool tty_port_cts_enabled(struct tty_port *port)
{
return port->flags & ASYNC_CTS_FLOW;
}

extern struct tty_struct *tty_port_tty_get(struct tty_port *port);
extern void tty_port_tty_set(struct tty_port *port, struct tty_struct *tty);
extern int tty_port_carrier_raised(struct tty_port *port);
Expand Down
4 changes: 2 additions & 2 deletions net/irda/ircomm/ircomm_tty.c
Original file line number Diff line number Diff line change
Expand Up @@ -1070,7 +1070,7 @@ void ircomm_tty_check_modem_status(struct ircomm_tty_cb *self)
goto put;
}
}
if (tty && self->port.flags & ASYNC_CTS_FLOW) {
if (tty && tty_port_cts_enabled(&self->port)) {
if (tty->hw_stopped) {
if (status & IRCOMM_CTS) {
IRDA_DEBUG(2,
Expand Down Expand Up @@ -1313,7 +1313,7 @@ static void ircomm_tty_line_info(struct ircomm_tty_cb *self, struct seq_file *m)

seq_puts(m, "Flags:");
sep = ' ';
if (self->port.flags & ASYNC_CTS_FLOW) {
if (tty_port_cts_enabled(&self->port)) {
seq_printf(m, "%cASYNC_CTS_FLOW", sep);
sep = '|';
}
Expand Down
2 changes: 1 addition & 1 deletion net/irda/ircomm/ircomm_tty_attach.c
Original file line number Diff line number Diff line change
Expand Up @@ -578,7 +578,7 @@ void ircomm_tty_link_established(struct ircomm_tty_cb *self)
* will have to wait for the peer device (DCE) to raise the CTS
* line.
*/
if ((self->port.flags & ASYNC_CTS_FLOW) &&
if (tty_port_cts_enabled(&self->port) &&
((self->settings.dce & IRCOMM_CTS) == 0)) {
IRDA_DEBUG(0, "%s(), waiting for CTS ...\n", __func__ );
goto put;
Expand Down

0 comments on commit f21ec3d

Please sign in to comment.