Merge branch 'tty-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty
* 'tty-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty: (79 commits) TTY: serial_core: Fix crash if DCD drop during suspend tty/serial: atmel_serial: bootconsole removed from auto-enumerates Revert "TTY: call tty_driver_lookup_tty unconditionally" tty/serial: atmel_serial: add device tree support tty/serial: atmel_serial: auto-enumerate ports tty/serial: atmel_serial: whitespace and braces modifications tty/serial: atmel_serial: change platform_data variable name tty/serial: RS485 bindings for device tree TTY: call tty_driver_lookup_tty unconditionally TTY: pty, release tty in all ptmx_open fail paths TTY: make tty_add_file non-failing TTY: drop driver reference in tty_open fail path 8250_pci: Fix kernel panic when pch_uart is disabled h8300: drivers/serial/Kconfig was moved parport_pc: release IO region properly if unsupported ITE887x card is found tty: Support compat_ioctl get/set termios_locked hvc_console: display printk messages on console. TTY: snyclinkmp: forever loop in tx_load_dma_buffer() tty/n_gsm: avoid fifo overflow in gsm_dlci_data_output tty/n_gsm: fix a bug in gsm_dlci_data_output (adaption = 2 case) ... Fix up Conflicts in: - drivers/tty/serial/8250_pci.c Trivial conflict with removed duplicate device ID - drivers/tty/serial/atmel_serial.c Annoying silly conflict between "specify the port num via platform_data" and other changes to atmel_console_init
This commit is contained in:
@@ -211,6 +211,7 @@ struct serial_rs485 {
|
||||
#define SER_RS485_RTS_ON_SEND (1 << 1)
|
||||
#define SER_RS485_RTS_AFTER_SEND (1 << 2)
|
||||
#define SER_RS485_RTS_BEFORE_SEND (1 << 3)
|
||||
#define SER_RS485_RX_DURING_TX (1 << 4)
|
||||
__u32 delay_rts_before_send; /* Milliseconds */
|
||||
__u32 delay_rts_after_send; /* Milliseconds */
|
||||
__u32 padding[5]; /* Memory is cheap, new structs
|
||||
|
||||
@@ -35,6 +35,7 @@ struct plat_serial8250_port {
|
||||
void (*set_termios)(struct uart_port *,
|
||||
struct ktermios *new,
|
||||
struct ktermios *old);
|
||||
int (*handle_irq)(struct uart_port *);
|
||||
void (*pm)(struct uart_port *, unsigned int state,
|
||||
unsigned old);
|
||||
};
|
||||
@@ -80,6 +81,7 @@ extern void serial8250_do_set_termios(struct uart_port *port,
|
||||
struct ktermios *termios, struct ktermios *old);
|
||||
extern void serial8250_do_pm(struct uart_port *port, unsigned int state,
|
||||
unsigned int oldstate);
|
||||
int serial8250_handle_irq(struct uart_port *port, unsigned int iir);
|
||||
|
||||
extern void serial8250_set_isa_configurator(void (*v)
|
||||
(int port, struct uart_port *up,
|
||||
|
||||
@@ -46,7 +46,8 @@
|
||||
#define PORT_AR7 18 /* Texas Instruments AR7 internal UART */
|
||||
#define PORT_U6_16550A 19 /* ST-Ericsson U6xxx internal UART */
|
||||
#define PORT_TEGRA 20 /* NVIDIA Tegra internal UART */
|
||||
#define PORT_MAX_8250 20 /* max port ID */
|
||||
#define PORT_XR17D15X 21 /* Exar XR17D15x UART */
|
||||
#define PORT_MAX_8250 21 /* max port ID */
|
||||
|
||||
/*
|
||||
* ARM specific type numbers. These are not currently guaranteed
|
||||
@@ -300,6 +301,7 @@ struct uart_port {
|
||||
void (*set_termios)(struct uart_port *,
|
||||
struct ktermios *new,
|
||||
struct ktermios *old);
|
||||
int (*handle_irq)(struct uart_port *);
|
||||
void (*pm)(struct uart_port *, unsigned int state,
|
||||
unsigned int old);
|
||||
unsigned int irq; /* irq number */
|
||||
@@ -317,9 +319,7 @@ struct uart_port {
|
||||
#define UPIO_MEM32 (3)
|
||||
#define UPIO_AU (4) /* Au1x00 type IO */
|
||||
#define UPIO_TSI (5) /* Tsi108/109 type IO */
|
||||
#define UPIO_DWAPB (6) /* DesignWare APB UART */
|
||||
#define UPIO_RM9000 (7) /* RM9000 type IO */
|
||||
#define UPIO_DWAPB32 (8) /* DesignWare APB UART (32 bit accesses) */
|
||||
#define UPIO_RM9000 (6) /* RM9000 type IO */
|
||||
|
||||
unsigned int read_status_mask; /* driver specific */
|
||||
unsigned int ignore_status_mask; /* driver specific */
|
||||
@@ -350,6 +350,7 @@ struct uart_port {
|
||||
#define UPF_MAGIC_MULTIPLIER ((__force upf_t) (1 << 16))
|
||||
#define UPF_CONS_FLOW ((__force upf_t) (1 << 23))
|
||||
#define UPF_SHARE_IRQ ((__force upf_t) (1 << 24))
|
||||
#define UPF_EXAR_EFR ((__force upf_t) (1 << 25))
|
||||
/* The exact UART type is known and should not be probed. */
|
||||
#define UPF_FIXED_TYPE ((__force upf_t) (1 << 27))
|
||||
#define UPF_BOOT_AUTOCONF ((__force upf_t) (1 << 28))
|
||||
@@ -384,7 +385,6 @@ struct uart_state {
|
||||
int pm_state;
|
||||
struct circ_buf xmit;
|
||||
|
||||
struct tasklet_struct tlet;
|
||||
struct uart_port *uart_port;
|
||||
};
|
||||
|
||||
|
||||
@@ -152,6 +152,7 @@
|
||||
* LCR=0xBF (or DLAB=1 for 16C660)
|
||||
*/
|
||||
#define UART_EFR 2 /* I/O: Extended Features Register */
|
||||
#define UART_XR_EFR 9 /* I/O: Extended Features Register (XR17D15x) */
|
||||
#define UART_EFR_CTS 0x80 /* CTS flow control */
|
||||
#define UART_EFR_RTS 0x40 /* RTS flow control */
|
||||
#define UART_EFR_SCD 0x20 /* Special character detect */
|
||||
|
||||
+23
-3
@@ -473,7 +473,9 @@ extern void proc_clear_tty(struct task_struct *p);
|
||||
extern struct tty_struct *get_current_tty(void);
|
||||
extern void tty_default_fops(struct file_operations *fops);
|
||||
extern struct tty_struct *alloc_tty_struct(void);
|
||||
extern int tty_add_file(struct tty_struct *tty, struct file *file);
|
||||
extern int tty_alloc_file(struct file *file);
|
||||
extern void tty_add_file(struct tty_struct *tty, struct file *file);
|
||||
extern void tty_free_file(struct file *file);
|
||||
extern void free_tty_struct(struct tty_struct *tty);
|
||||
extern void initialize_tty_struct(struct tty_struct *tty,
|
||||
struct tty_driver *driver, int idx);
|
||||
@@ -581,6 +583,8 @@ extern int __init tty_init(void);
|
||||
/* tty_ioctl.c */
|
||||
extern int n_tty_ioctl_helper(struct tty_struct *tty, struct file *file,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
extern long n_tty_compat_ioctl_helper(struct tty_struct *tty, struct file *file,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
|
||||
/* serial.c */
|
||||
|
||||
@@ -602,8 +606,24 @@ extern long vt_compat_ioctl(struct tty_struct *tty,
|
||||
/* functions for preparation of BKL removal */
|
||||
extern void __lockfunc tty_lock(void) __acquires(tty_lock);
|
||||
extern void __lockfunc tty_unlock(void) __releases(tty_lock);
|
||||
extern struct task_struct *__big_tty_mutex_owner;
|
||||
#define tty_locked() (current == __big_tty_mutex_owner)
|
||||
|
||||
/*
|
||||
* this shall be called only from where BTM is held (like close)
|
||||
*
|
||||
* We need this to ensure nobody waits for us to finish while we are waiting.
|
||||
* Without this we were encountering system stalls.
|
||||
*
|
||||
* This should be indeed removed with BTM removal later.
|
||||
*
|
||||
* Locking: BTM required. Nobody is allowed to hold port->mutex.
|
||||
*/
|
||||
static inline void tty_wait_until_sent_from_close(struct tty_struct *tty,
|
||||
long timeout)
|
||||
{
|
||||
tty_unlock(); /* tty->ops->close holds the BTM, drop it while waiting */
|
||||
tty_wait_until_sent(tty, timeout);
|
||||
tty_lock();
|
||||
}
|
||||
|
||||
/*
|
||||
* wait_event_interruptible_tty -- wait for a condition with the tty lock held
|
||||
|
||||
Reference in New Issue
Block a user