aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/serial_core.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/serial_core.h')
-rw-r--r--include/linux/serial_core.h27
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 */
345struct uart_info { 346struct 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
517uart_handle_cts_change(struct uart_port *port, unsigned int status) 516uart_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
543uart_insert_char(struct uart_port *port, unsigned int status, 542uart_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);