serial: use tty_port
Switch the serial_core based drivers to use the new tty_port structure. We can't quite use all of it yet because of the dynamically allocated extras in the serial_core layer. Signed-off-by: Alan Cox <alan@redhat.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
@@ -344,13 +344,15 @@ typedef unsigned int __bitwise__ uif_t;
|
||||
* stuff here.
|
||||
*/
|
||||
struct uart_info {
|
||||
struct tty_struct *tty;
|
||||
struct tty_port port;
|
||||
struct circ_buf xmit;
|
||||
uif_t flags;
|
||||
|
||||
/*
|
||||
* Definitions for info->flags. These are _private_ to serial_core, and
|
||||
* are specific to this structure. They may be queried by low level drivers.
|
||||
*
|
||||
* FIXME: use the ASY_ definitions
|
||||
*/
|
||||
#define UIF_CHECK_CD ((__force uif_t) (1 << 25))
|
||||
#define UIF_CTS_FLOW ((__force uif_t) (1 << 26))
|
||||
@@ -358,11 +360,7 @@ struct uart_info {
|
||||
#define UIF_INITIALIZED ((__force uif_t) (1 << 31))
|
||||
#define UIF_SUSPENDED ((__force uif_t) (1 << 30))
|
||||
|
||||
int blocked_open;
|
||||
|
||||
struct tasklet_struct tlet;
|
||||
|
||||
wait_queue_head_t open_wait;
|
||||
wait_queue_head_t delta_msr_wait;
|
||||
};
|
||||
|
||||
@@ -439,8 +437,8 @@ int uart_resume_port(struct uart_driver *reg, struct uart_port *port);
|
||||
#define uart_circ_chars_free(circ) \
|
||||
(CIRC_SPACE((circ)->head, (circ)->tail, UART_XMIT_SIZE))
|
||||
|
||||
#define uart_tx_stopped(port) \
|
||||
((port)->info->tty->stopped || (port)->info->tty->hw_stopped)
|
||||
#define uart_tx_stopped(portp) \
|
||||
((portp)->info->port.tty->stopped || (portp)->info->port.tty->hw_stopped)
|
||||
|
||||
/*
|
||||
* The following are helper functions for the low level drivers.
|
||||
@@ -451,7 +449,7 @@ uart_handle_sysrq_char(struct uart_port *port, unsigned int ch)
|
||||
#ifdef SUPPORT_SYSRQ
|
||||
if (port->sysrq) {
|
||||
if (ch && time_before(jiffies, port->sysrq)) {
|
||||
handle_sysrq(ch, port->info ? port->info->tty : NULL);
|
||||
handle_sysrq(ch, port->info ? port->info->port.tty : NULL);
|
||||
port->sysrq = 0;
|
||||
return 1;
|
||||
}
|
||||
@@ -480,7 +478,7 @@ static inline int uart_handle_break(struct uart_port *port)
|
||||
}
|
||||
#endif
|
||||
if (port->flags & UPF_SAK)
|
||||
do_SAK(info->tty);
|
||||
do_SAK(info->port.tty);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -503,9 +501,9 @@ uart_handle_dcd_change(struct uart_port *port, unsigned int status)
|
||||
|
||||
if (info->flags & UIF_CHECK_CD) {
|
||||
if (status)
|
||||
wake_up_interruptible(&info->open_wait);
|
||||
else if (info->tty)
|
||||
tty_hangup(info->tty);
|
||||
wake_up_interruptible(&info->port.open_wait);
|
||||
else if (info->port.tty)
|
||||
tty_hangup(info->port.tty);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -518,7 +516,7 @@ static inline void
|
||||
uart_handle_cts_change(struct uart_port *port, unsigned int status)
|
||||
{
|
||||
struct uart_info *info = port->info;
|
||||
struct tty_struct *tty = info->tty;
|
||||
struct tty_struct *tty = info->port.tty;
|
||||
|
||||
port->icount.cts++;
|
||||
|
||||
@@ -544,7 +542,7 @@ static inline void
|
||||
uart_insert_char(struct uart_port *port, unsigned int status,
|
||||
unsigned int overrun, unsigned int ch, unsigned int flag)
|
||||
{
|
||||
struct tty_struct *tty = port->info->tty;
|
||||
struct tty_struct *tty = port->info->port.tty;
|
||||
|
||||
if ((status & port->ignore_status_mask & ~overrun) == 0)
|
||||
tty_insert_flip_char(tty, ch, flag);
|
||||
|
Reference in New Issue
Block a user