Re: [patch 3/4] new serial flow control

From: Russell King
Date: Sun Oct 09 2005 - 06:18:03 EST

On Sun, Oct 09, 2005 at 12:09:09PM +0200, Samuel Thibault wrote:
> Russell King, le Sun 09 Oct 2005 09:37:24 +0100, a ?crit :
> > What I was thinking of was to use some of the spare termios cflag bits
> > to select the flow control. You'd only want one flow control type at
> > one time though. Eg: define two fields, each to select the signal.
> >
> > 0 - RTS
> > 1 - DTR
> >
> > 0 - CTS
> > 1 - DTR
> > 2 - DSR
> It looks fine, but it might not be sufficient for expressing that:
> - some flow control use RTS to indicate that DTE is ready to send data,
> - some other use it to indicate that DTE wants to send data. (and CTS is
> used for acknowledgment of this),

Agreed - and that's one extra bit of control information.

> - some other use it as a strobe for acknowledging characters, some other
> use it as a strobe for acknowledging frames (announced by CTS).

The last has no business being in the serial driver though - the driver
knows nothing about frames of characters. It's more a userland (in
which case it's TIOCM* ioctls) or ldisc issue (tty_driver->tiocmset).

> > However, bear in mind that the majority of the more inteligent 8250-
> > compatible UARTs with large FIFOs only do hardware flow control on
> Hardward flow control is usually performed in software. Can't their
> hardware implementation of hardware flow control be disabled when
> control method is not usual RTS/CTS?

You missed the point. Of course the hardware flow control can be
disabled. However, if you do have on-chip CTS flow control disabled
with UARTs with large FIFOs, and remote end says "stop sending", the
characters already in the FIFO will be sent, which may be up to
64 or even 128 characters instead of the usual 16 or so with the
16550A. If the remote end only has room for 32 more characters,
you're into an overrun condition at every "stop sending" event.

Hence, people must expect a DTR/DSR software-based hardware flow
control to be less reliable than using RTS/CTS (with an adapter to
swap the RTS/CTS pins for DTR/DSR) with advanced 8250-based UARTs.

Russell King
Linux kernel 2.6 ARM Linux -
maintainer of: 2.6 Serial core
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
Please read the FAQ at