• Peter Hurley's avatar
    serial: core: Rework hw-assisted flow control support · 391f93f2
    Peter Hurley authored
    hw-assisted flow control support was added to the serial core
    in v3.8 with commits,
    dba05832 ("SERIAL: core: add hardware assisted h/w flow control support")
    2cbacafd ("SERIAL: core: add hardware assisted s/w flow control support")
    9aba8d5b ("SERIAL: core: add throttle/unthrottle callbacks for hardware
                    assisted flow control")
    Since then, additional requirements for serial core support have arisen.
    Specifically,
    1. Separate tx and rx flow control settings for UARTs which only support
       tx flow control (ie., autoCTS).
    2. Disable sw-assisted CTS flow control in autoCTS mode
    3. Support for RTS flow control by serial core and userspace in autoRTS mode
    
    Distinguish mode from capability; introduce UPSTAT_AUTORTS, UPSTAT_AUTOCTS
    and UPSTAT_AUTOXOFF which, when set by the uart driver, enable serial core
    support for hw-assisted rx, hw-assisted tx and hw-assisted in-band/IXOFF
    rx flow control, respectively. [Note: hw-assisted in-band/IXON tx flow
    control does not require serial core support/intervention and can be
    enabled by the uart driver when required.]
    
    These modes must be set/reset in the driver's set_termios() method, based
    on termios settings, and thus can be safely queried in any context in which
    one of the port lock, port mutex or termios rwsem are held. Set these modes
    in the 2 in-tree drivers, omap-serial and 8250_omap, which currently
    use UPF_HARD_FLOW/UPF_SOFT_FLOW support.
    
    Retain UPF_HARD_FLOW and UPF_SOFT_FLOW as capabilities; re-define
    UPF_HARD_FLOW as both UPF_AUTO_RTS and UPF_AUTO_CTS to allow for distinct
    and separate rx and tx flow control capabilities.
    
    Disable sw-assisted CTS flow control when UPSTAT_AUTOCTS is enabled.
    Signed-off-by: default avatarPeter Hurley <peter@hurleysoftware.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    391f93f2
serial_core.c 72 KB