diff options
Diffstat (limited to 'include/linux/serial_core.h')
| -rw-r--r-- | include/linux/serial_core.h | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index 057038cf2788..baf3e1d08416 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h | |||
| @@ -123,6 +123,7 @@ struct uart_port { | |||
| 123 | void (*set_termios)(struct uart_port *, | 123 | void (*set_termios)(struct uart_port *, |
| 124 | struct ktermios *new, | 124 | struct ktermios *new, |
| 125 | struct ktermios *old); | 125 | struct ktermios *old); |
| 126 | void (*set_mctrl)(struct uart_port *, unsigned int); | ||
| 126 | int (*startup)(struct uart_port *port); | 127 | int (*startup)(struct uart_port *port); |
| 127 | void (*shutdown)(struct uart_port *port); | 128 | void (*shutdown)(struct uart_port *port); |
| 128 | void (*throttle)(struct uart_port *port); | 129 | void (*throttle)(struct uart_port *port); |
| @@ -190,8 +191,10 @@ struct uart_port { | |||
| 190 | #define UPF_NO_TXEN_TEST ((__force upf_t) (1 << 15)) | 191 | #define UPF_NO_TXEN_TEST ((__force upf_t) (1 << 15)) |
| 191 | #define UPF_MAGIC_MULTIPLIER ((__force upf_t) ASYNC_MAGIC_MULTIPLIER /* 16 */ ) | 192 | #define UPF_MAGIC_MULTIPLIER ((__force upf_t) ASYNC_MAGIC_MULTIPLIER /* 16 */ ) |
| 192 | 193 | ||
| 193 | /* Port has hardware-assisted h/w flow control (iow, auto-RTS *not* auto-CTS) */ | 194 | /* Port has hardware-assisted h/w flow control */ |
| 194 | #define UPF_HARD_FLOW ((__force upf_t) (1 << 21)) | 195 | #define UPF_AUTO_CTS ((__force upf_t) (1 << 20)) |
| 196 | #define UPF_AUTO_RTS ((__force upf_t) (1 << 21)) | ||
| 197 | #define UPF_HARD_FLOW ((__force upf_t) (UPF_AUTO_CTS | UPF_AUTO_RTS)) | ||
| 195 | /* Port has hardware-assisted s/w flow control */ | 198 | /* Port has hardware-assisted s/w flow control */ |
| 196 | #define UPF_SOFT_FLOW ((__force upf_t) (1 << 22)) | 199 | #define UPF_SOFT_FLOW ((__force upf_t) (1 << 22)) |
| 197 | #define UPF_CONS_FLOW ((__force upf_t) (1 << 23)) | 200 | #define UPF_CONS_FLOW ((__force upf_t) (1 << 23)) |
| @@ -213,11 +216,17 @@ struct uart_port { | |||
| 213 | #error Change mask not equivalent to userspace-visible bit defines | 216 | #error Change mask not equivalent to userspace-visible bit defines |
| 214 | #endif | 217 | #endif |
| 215 | 218 | ||
| 216 | /* status must be updated while holding port lock */ | 219 | /* |
| 220 | * Must hold termios_rwsem, port mutex and port lock to change; | ||
| 221 | * can hold any one lock to read. | ||
| 222 | */ | ||
| 217 | upstat_t status; | 223 | upstat_t status; |
| 218 | 224 | ||
| 219 | #define UPSTAT_CTS_ENABLE ((__force upstat_t) (1 << 0)) | 225 | #define UPSTAT_CTS_ENABLE ((__force upstat_t) (1 << 0)) |
| 220 | #define UPSTAT_DCD_ENABLE ((__force upstat_t) (1 << 1)) | 226 | #define UPSTAT_DCD_ENABLE ((__force upstat_t) (1 << 1)) |
| 227 | #define UPSTAT_AUTORTS ((__force upstat_t) (1 << 2)) | ||
| 228 | #define UPSTAT_AUTOCTS ((__force upstat_t) (1 << 3)) | ||
| 229 | #define UPSTAT_AUTOXOFF ((__force upstat_t) (1 << 4)) | ||
| 221 | 230 | ||
| 222 | int hw_stopped; /* sw-assisted CTS flow state */ | 231 | int hw_stopped; /* sw-assisted CTS flow state */ |
| 223 | unsigned int mctrl; /* current modem ctrl settings */ | 232 | unsigned int mctrl; /* current modem ctrl settings */ |
| @@ -391,6 +400,13 @@ static inline bool uart_cts_enabled(struct uart_port *uport) | |||
| 391 | return !!(uport->status & UPSTAT_CTS_ENABLE); | 400 | return !!(uport->status & UPSTAT_CTS_ENABLE); |
| 392 | } | 401 | } |
| 393 | 402 | ||
| 403 | static inline bool uart_softcts_mode(struct uart_port *uport) | ||
| 404 | { | ||
| 405 | upstat_t mask = UPSTAT_CTS_ENABLE | UPSTAT_AUTOCTS; | ||
| 406 | |||
| 407 | return ((uport->status & mask) == UPSTAT_CTS_ENABLE); | ||
| 408 | } | ||
| 409 | |||
| 394 | /* | 410 | /* |
| 395 | * The following are helper functions for the low level drivers. | 411 | * The following are helper functions for the low level drivers. |
| 396 | */ | 412 | */ |
