diff options
Diffstat (limited to 'include/linux/serial_core.h')
| -rw-r--r-- | include/linux/serial_core.h | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index d8f31de632c..f3a1c0e4502 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h | |||
| @@ -190,6 +190,7 @@ struct uart_ops { | |||
| 190 | void (*break_ctl)(struct uart_port *, int ctl); | 190 | void (*break_ctl)(struct uart_port *, int ctl); |
| 191 | int (*startup)(struct uart_port *); | 191 | int (*startup)(struct uart_port *); |
| 192 | void (*shutdown)(struct uart_port *); | 192 | void (*shutdown)(struct uart_port *); |
| 193 | void (*flush_buffer)(struct uart_port *); | ||
| 193 | void (*set_termios)(struct uart_port *, struct ktermios *new, | 194 | void (*set_termios)(struct uart_port *, struct ktermios *new, |
| 194 | struct ktermios *old); | 195 | struct ktermios *old); |
| 195 | void (*set_ldisc)(struct uart_port *); | 196 | void (*set_ldisc)(struct uart_port *); |
| @@ -343,13 +344,15 @@ typedef unsigned int __bitwise__ uif_t; | |||
| 343 | * stuff here. | 344 | * stuff here. |
| 344 | */ | 345 | */ |
| 345 | struct uart_info { | 346 | struct uart_info { |
| 346 | struct tty_struct *tty; | 347 | struct tty_port port; |
| 347 | struct circ_buf xmit; | 348 | struct circ_buf xmit; |
| 348 | uif_t flags; | 349 | uif_t flags; |
| 349 | 350 | ||
| 350 | /* | 351 | /* |
| 351 | * Definitions for info->flags. These are _private_ to serial_core, and | 352 | * Definitions for info->flags. These are _private_ to serial_core, and |
| 352 | * are specific to this structure. They may be queried by low level drivers. | 353 | * are specific to this structure. They may be queried by low level drivers. |
| 354 | * | ||
| 355 | * FIXME: use the ASY_ definitions | ||
| 353 | */ | 356 | */ |
| 354 | #define UIF_CHECK_CD ((__force uif_t) (1 << 25)) | 357 | #define UIF_CHECK_CD ((__force uif_t) (1 << 25)) |
| 355 | #define UIF_CTS_FLOW ((__force uif_t) (1 << 26)) | 358 | #define UIF_CTS_FLOW ((__force uif_t) (1 << 26)) |
| @@ -357,11 +360,7 @@ struct uart_info { | |||
| 357 | #define UIF_INITIALIZED ((__force uif_t) (1 << 31)) | 360 | #define UIF_INITIALIZED ((__force uif_t) (1 << 31)) |
| 358 | #define UIF_SUSPENDED ((__force uif_t) (1 << 30)) | 361 | #define UIF_SUSPENDED ((__force uif_t) (1 << 30)) |
| 359 | 362 | ||
| 360 | int blocked_open; | ||
| 361 | |||
| 362 | struct tasklet_struct tlet; | 363 | struct tasklet_struct tlet; |
| 363 | |||
| 364 | wait_queue_head_t open_wait; | ||
| 365 | wait_queue_head_t delta_msr_wait; | 364 | wait_queue_head_t delta_msr_wait; |
| 366 | }; | 365 | }; |
| 367 | 366 | ||
| @@ -438,8 +437,8 @@ int uart_resume_port(struct uart_driver *reg, struct uart_port *port); | |||
| 438 | #define uart_circ_chars_free(circ) \ | 437 | #define uart_circ_chars_free(circ) \ |
| 439 | (CIRC_SPACE((circ)->head, (circ)->tail, UART_XMIT_SIZE)) | 438 | (CIRC_SPACE((circ)->head, (circ)->tail, UART_XMIT_SIZE)) |
| 440 | 439 | ||
| 441 | #define uart_tx_stopped(port) \ | 440 | #define uart_tx_stopped(portp) \ |
| 442 | ((port)->info->tty->stopped || (port)->info->tty->hw_stopped) | 441 | ((portp)->info->port.tty->stopped || (portp)->info->port.tty->hw_stopped) |
| 443 | 442 | ||
| 444 | /* | 443 | /* |
| 445 | * The following are helper functions for the low level drivers. | 444 | * The following are helper functions for the low level drivers. |
| @@ -450,7 +449,7 @@ uart_handle_sysrq_char(struct uart_port *port, unsigned int ch) | |||
| 450 | #ifdef SUPPORT_SYSRQ | 449 | #ifdef SUPPORT_SYSRQ |
| 451 | if (port->sysrq) { | 450 | if (port->sysrq) { |
| 452 | if (ch && time_before(jiffies, port->sysrq)) { | 451 | if (ch && time_before(jiffies, port->sysrq)) { |
| 453 | handle_sysrq(ch, port->info ? port->info->tty : NULL); | 452 | handle_sysrq(ch, port->info ? port->info->port.tty : NULL); |
| 454 | port->sysrq = 0; | 453 | port->sysrq = 0; |
| 455 | return 1; | 454 | return 1; |
| 456 | } | 455 | } |
| @@ -479,7 +478,7 @@ static inline int uart_handle_break(struct uart_port *port) | |||
| 479 | } | 478 | } |
| 480 | #endif | 479 | #endif |
| 481 | if (port->flags & UPF_SAK) | 480 | if (port->flags & UPF_SAK) |
| 482 | do_SAK(info->tty); | 481 | do_SAK(info->port.tty); |
| 483 | return 0; | 482 | return 0; |
| 484 | } | 483 | } |
| 485 | 484 | ||
| @@ -502,9 +501,9 @@ uart_handle_dcd_change(struct uart_port *port, unsigned int status) | |||
| 502 | 501 | ||
| 503 | if (info->flags & UIF_CHECK_CD) { | 502 | if (info->flags & UIF_CHECK_CD) { |
| 504 | if (status) | 503 | if (status) |
| 505 | wake_up_interruptible(&info->open_wait); | 504 | wake_up_interruptible(&info->port.open_wait); |
| 506 | else if (info->tty) | 505 | else if (info->port.tty) |
| 507 | tty_hangup(info->tty); | 506 | tty_hangup(info->port.tty); |
| 508 | } | 507 | } |
| 509 | } | 508 | } |
| 510 | 509 | ||
| @@ -517,7 +516,7 @@ static inline void | |||
| 517 | uart_handle_cts_change(struct uart_port *port, unsigned int status) | 516 | uart_handle_cts_change(struct uart_port *port, unsigned int status) |
| 518 | { | 517 | { |
| 519 | struct uart_info *info = port->info; | 518 | struct uart_info *info = port->info; |
| 520 | struct tty_struct *tty = info->tty; | 519 | struct tty_struct *tty = info->port.tty; |
| 521 | 520 | ||
| 522 | port->icount.cts++; | 521 | port->icount.cts++; |
| 523 | 522 | ||
| @@ -543,7 +542,7 @@ static inline void | |||
| 543 | uart_insert_char(struct uart_port *port, unsigned int status, | 542 | uart_insert_char(struct uart_port *port, unsigned int status, |
| 544 | unsigned int overrun, unsigned int ch, unsigned int flag) | 543 | unsigned int overrun, unsigned int ch, unsigned int flag) |
| 545 | { | 544 | { |
| 546 | struct tty_struct *tty = port->info->tty; | 545 | struct tty_struct *tty = port->info->port.tty; |
| 547 | 546 | ||
| 548 | if ((status & port->ignore_status_mask & ~overrun) == 0) | 547 | if ((status & port->ignore_status_mask & ~overrun) == 0) |
| 549 | tty_insert_flip_char(tty, ch, flag); | 548 | tty_insert_flip_char(tty, ch, flag); |
