TTY/Serial driver patches for 3.19-rc1
Here's the big tty/serial driver update for 3.19-rc1. There are a number of TTY core changes/fixes in here from Peter Hurley that have all been teted in linux-next for a long time now. There are also the normal serial driver updates as well, full details in the changelog below. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iEYEABECAAYFAlSOD/MACgkQMUfUDdst+ymW+wCfbSzoYMRObIImMPWfoQtxkvvN rpkAnAtyEP/zZIfkQIuKTSH6FJxocF8V =WZt3 -----END PGP SIGNATURE----- Merge tag 'tty-3.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty Pull tty/serial driver updates from Greg KH: "Here's the big tty/serial driver update for 3.19-rc1. There are a number of TTY core changes/fixes in here from Peter Hurley that have all been teted in linux-next for a long time now. There are also the normal serial driver updates as well, full details in the changelog below" * tag 'tty-3.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty: (219 commits) serial: pxa: hold port.lock when reporting modem line changes tty-hvsi_lib: Deletion of an unnecessary check before the function call "tty_kref_put" tty: Deletion of unnecessary checks before two function calls n_tty: Fix read_buf race condition, increment read_head after pushing data serial: of-serial: add PM suspend/resume support Revert "serial: of-serial: add PM suspend/resume support" Revert "serial: of-serial: fix up PM ops on no_console_suspend and port type" serial: 8250: don't attempt a trylock if in sysrq serial: core: Add big-endian iotype serial: samsung: use port->fifosize instead of hardcoded values serial: samsung: prefer to use fifosize from driver data serial: samsung: fix style problems serial: samsung: wait for transfer completion before clock disable serial: icom: fix error return code serial: tegra: clean up tty-flag assignments serial: Fix io address assign flow with Fintek PCI-to-UART Product serial: mxs-auart: fix tx_empty against shift register serial: mxs-auart: fix gpio change detection on interrupt serial: mxs-auart: Fix mxs_auart_set_ldisc() serial: 8250_dw: Use 64-bit access for OCTEON. ...
This commit is contained in:
commit
37da7bbbe8
102 changed files with 4762 additions and 1603 deletions
|
|
@ -416,9 +416,6 @@ extern int __kernel_text_address(unsigned long addr);
|
|||
extern int kernel_text_address(unsigned long addr);
|
||||
extern int func_ptr_is_kernel_text(void *ptr);
|
||||
|
||||
struct pid;
|
||||
extern struct pid *session_of_pgrp(struct pid *pgrp);
|
||||
|
||||
unsigned long int_sqrt(unsigned long);
|
||||
|
||||
extern void bust_spinlocks(int yes);
|
||||
|
|
|
|||
|
|
@ -97,13 +97,10 @@ struct uart_8250_port {
|
|||
unsigned char msr_saved_flags;
|
||||
|
||||
struct uart_8250_dma *dma;
|
||||
struct serial_rs485 rs485;
|
||||
|
||||
/* 8250 specific callbacks */
|
||||
int (*dl_read)(struct uart_8250_port *);
|
||||
void (*dl_write)(struct uart_8250_port *, int);
|
||||
int (*rs485_config)(struct uart_8250_port *,
|
||||
struct serial_rs485 *rs485);
|
||||
};
|
||||
|
||||
static inline struct uart_8250_port *up_to_u8250p(struct uart_port *up)
|
||||
|
|
|
|||
|
|
@ -116,6 +116,4 @@
|
|||
UART_FIFO_PARERR_MASK | \
|
||||
UART_FIFO_BRKDET_MASK)
|
||||
|
||||
#define UART_REG_SIZE 24
|
||||
|
||||
#endif /* _LINUX_SERIAL_BCM63XX_H */
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ struct uart_ops {
|
|||
void (*flush_buffer)(struct uart_port *);
|
||||
void (*set_termios)(struct uart_port *, struct ktermios *new,
|
||||
struct ktermios *old);
|
||||
void (*set_ldisc)(struct uart_port *, int new);
|
||||
void (*set_ldisc)(struct uart_port *, struct ktermios *);
|
||||
void (*pm)(struct uart_port *, unsigned int state,
|
||||
unsigned int oldstate);
|
||||
|
||||
|
|
@ -131,6 +131,8 @@ struct uart_port {
|
|||
void (*pm)(struct uart_port *, unsigned int state,
|
||||
unsigned int old);
|
||||
void (*handle_break)(struct uart_port *);
|
||||
int (*rs485_config)(struct uart_port *,
|
||||
struct serial_rs485 *rs485);
|
||||
unsigned int irq; /* irq number */
|
||||
unsigned long irqflags; /* irq flags */
|
||||
unsigned int uartclk; /* base uart clock */
|
||||
|
|
@ -140,12 +142,13 @@ struct uart_port {
|
|||
unsigned char iotype; /* io access style */
|
||||
unsigned char unused1;
|
||||
|
||||
#define UPIO_PORT (0)
|
||||
#define UPIO_HUB6 (1)
|
||||
#define UPIO_MEM (2)
|
||||
#define UPIO_MEM32 (3)
|
||||
#define UPIO_AU (4) /* Au1x00 and RT288x type IO */
|
||||
#define UPIO_TSI (5) /* Tsi108/109 type IO */
|
||||
#define UPIO_PORT (0) /* 8b I/O port access */
|
||||
#define UPIO_HUB6 (1) /* Hub6 ISA card */
|
||||
#define UPIO_MEM (2) /* 8b MMIO access */
|
||||
#define UPIO_MEM32 (3) /* 32b little endian */
|
||||
#define UPIO_MEM32BE (4) /* 32b big endian */
|
||||
#define UPIO_AU (5) /* Au1x00 and RT288x type IO */
|
||||
#define UPIO_TSI (6) /* Tsi108/109 type IO */
|
||||
|
||||
unsigned int read_status_mask; /* driver specific */
|
||||
unsigned int ignore_status_mask; /* driver specific */
|
||||
|
|
@ -160,21 +163,33 @@ struct uart_port {
|
|||
/* flags must be updated while holding port mutex */
|
||||
upf_t flags;
|
||||
|
||||
#define UPF_FOURPORT ((__force upf_t) (1 << 1))
|
||||
#define UPF_SAK ((__force upf_t) (1 << 2))
|
||||
#define UPF_SPD_MASK ((__force upf_t) (0x1030))
|
||||
#define UPF_SPD_HI ((__force upf_t) (0x0010))
|
||||
#define UPF_SPD_VHI ((__force upf_t) (0x0020))
|
||||
#define UPF_SPD_CUST ((__force upf_t) (0x0030))
|
||||
#define UPF_SPD_SHI ((__force upf_t) (0x1000))
|
||||
#define UPF_SPD_WARP ((__force upf_t) (0x1010))
|
||||
#define UPF_SKIP_TEST ((__force upf_t) (1 << 6))
|
||||
#define UPF_AUTO_IRQ ((__force upf_t) (1 << 7))
|
||||
#define UPF_HARDPPS_CD ((__force upf_t) (1 << 11))
|
||||
#define UPF_LOW_LATENCY ((__force upf_t) (1 << 13))
|
||||
#define UPF_BUGGY_UART ((__force upf_t) (1 << 14))
|
||||
/*
|
||||
* These flags must be equivalent to the flags defined in
|
||||
* include/uapi/linux/tty_flags.h which are the userspace definitions
|
||||
* assigned from the serial_struct flags in uart_set_info()
|
||||
* [for bit definitions in the UPF_CHANGE_MASK]
|
||||
*
|
||||
* Bits [0..UPF_LAST_USER] are userspace defined/visible/changeable
|
||||
* except bit 15 (UPF_NO_TXEN_TEST) which is masked off.
|
||||
* The remaining bits are serial-core specific and not modifiable by
|
||||
* userspace.
|
||||
*/
|
||||
#define UPF_FOURPORT ((__force upf_t) ASYNC_FOURPORT /* 1 */ )
|
||||
#define UPF_SAK ((__force upf_t) ASYNC_SAK /* 2 */ )
|
||||
#define UPF_SPD_HI ((__force upf_t) ASYNC_SPD_HI /* 4 */ )
|
||||
#define UPF_SPD_VHI ((__force upf_t) ASYNC_SPD_VHI /* 5 */ )
|
||||
#define UPF_SPD_CUST ((__force upf_t) ASYNC_SPD_CUST /* 0x0030 */ )
|
||||
#define UPF_SPD_WARP ((__force upf_t) ASYNC_SPD_WARP /* 0x1010 */ )
|
||||
#define UPF_SPD_MASK ((__force upf_t) ASYNC_SPD_MASK /* 0x1030 */ )
|
||||
#define UPF_SKIP_TEST ((__force upf_t) ASYNC_SKIP_TEST /* 6 */ )
|
||||
#define UPF_AUTO_IRQ ((__force upf_t) ASYNC_AUTO_IRQ /* 7 */ )
|
||||
#define UPF_HARDPPS_CD ((__force upf_t) ASYNC_HARDPPS_CD /* 11 */ )
|
||||
#define UPF_SPD_SHI ((__force upf_t) ASYNC_SPD_SHI /* 12 */ )
|
||||
#define UPF_LOW_LATENCY ((__force upf_t) ASYNC_LOW_LATENCY /* 13 */ )
|
||||
#define UPF_BUGGY_UART ((__force upf_t) ASYNC_BUGGY_UART /* 14 */ )
|
||||
#define UPF_NO_TXEN_TEST ((__force upf_t) (1 << 15))
|
||||
#define UPF_MAGIC_MULTIPLIER ((__force upf_t) (1 << 16))
|
||||
#define UPF_MAGIC_MULTIPLIER ((__force upf_t) ASYNC_MAGIC_MULTIPLIER /* 16 */ )
|
||||
|
||||
/* Port has hardware-assisted h/w flow control (iow, auto-RTS *not* auto-CTS) */
|
||||
#define UPF_HARD_FLOW ((__force upf_t) (1 << 21))
|
||||
/* Port has hardware-assisted s/w flow control */
|
||||
|
|
@ -190,9 +205,14 @@ struct uart_port {
|
|||
#define UPF_DEAD ((__force upf_t) (1 << 30))
|
||||
#define UPF_IOREMAP ((__force upf_t) (1 << 31))
|
||||
|
||||
#define UPF_CHANGE_MASK ((__force upf_t) (0x17fff))
|
||||
#define __UPF_CHANGE_MASK 0x17fff
|
||||
#define UPF_CHANGE_MASK ((__force upf_t) __UPF_CHANGE_MASK)
|
||||
#define UPF_USR_MASK ((__force upf_t) (UPF_SPD_MASK|UPF_LOW_LATENCY))
|
||||
|
||||
#if __UPF_CHANGE_MASK > ASYNC_FLAGS
|
||||
#error Change mask not equivalent to userspace-visible bit defines
|
||||
#endif
|
||||
|
||||
/* status must be updated while holding port lock */
|
||||
upstat_t status;
|
||||
|
||||
|
|
@ -214,6 +234,7 @@ struct uart_port {
|
|||
unsigned char unused[2];
|
||||
struct attribute_group *attr_group; /* port specific attributes */
|
||||
const struct attribute_group **tty_groups; /* all attributes (serial core use only) */
|
||||
struct serial_rs485 rs485;
|
||||
void *private_data; /* generic platform data pointer */
|
||||
};
|
||||
|
||||
|
|
@ -367,7 +388,7 @@ static inline int uart_tx_stopped(struct uart_port *port)
|
|||
|
||||
static inline bool uart_cts_enabled(struct uart_port *uport)
|
||||
{
|
||||
return uport->status & UPSTAT_CTS_ENABLE;
|
||||
return !!(uport->status & UPSTAT_CTS_ENABLE);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -284,7 +284,7 @@ struct tty_struct {
|
|||
|
||||
#define N_TTY_BUF_SIZE 4096
|
||||
|
||||
unsigned char closing:1;
|
||||
int closing;
|
||||
unsigned char *write_buf;
|
||||
int write_cnt;
|
||||
/* If the tty has a pending do_SAK, queue it here - akpm */
|
||||
|
|
@ -316,12 +316,10 @@ struct tty_file_private {
|
|||
#define TTY_EXCLUSIVE 3 /* Exclusive open mode */
|
||||
#define TTY_DEBUG 4 /* Debugging */
|
||||
#define TTY_DO_WRITE_WAKEUP 5 /* Call write_wakeup after queuing new */
|
||||
#define TTY_CLOSING 7 /* ->close() in progress */
|
||||
#define TTY_LDISC_OPEN 11 /* Line discipline is open */
|
||||
#define TTY_PTY_LOCK 16 /* pty private */
|
||||
#define TTY_NO_WRITE_SPLIT 17 /* Preserve write boundaries to driver */
|
||||
#define TTY_HUPPED 18 /* Post driver->hangup() */
|
||||
#define TTY_HUPPING 21 /* ->hangup() in progress */
|
||||
#define TTY_LDISC_HALTED 22 /* Line discipline is halted */
|
||||
|
||||
#define TTY_WRITE_FLUSH(tty) tty_write_flush((tty))
|
||||
|
|
@ -437,14 +435,13 @@ extern int is_ignored(int sig);
|
|||
extern int tty_signal(int sig, struct tty_struct *tty);
|
||||
extern void tty_hangup(struct tty_struct *tty);
|
||||
extern void tty_vhangup(struct tty_struct *tty);
|
||||
extern void tty_unhangup(struct file *filp);
|
||||
extern int tty_hung_up_p(struct file *filp);
|
||||
extern void do_SAK(struct tty_struct *tty);
|
||||
extern void __do_SAK(struct tty_struct *tty);
|
||||
extern void no_tty(void);
|
||||
extern void tty_flush_to_ldisc(struct tty_struct *tty);
|
||||
extern void tty_buffer_free_all(struct tty_port *port);
|
||||
extern void tty_buffer_flush(struct tty_struct *tty);
|
||||
extern void tty_buffer_flush(struct tty_struct *tty, struct tty_ldisc *ld);
|
||||
extern void tty_buffer_init(struct tty_port *port);
|
||||
extern speed_t tty_termios_baud_rate(struct ktermios *termios);
|
||||
extern speed_t tty_termios_input_baud_rate(struct ktermios *termios);
|
||||
|
|
@ -498,9 +495,6 @@ extern int tty_init_termios(struct tty_struct *tty);
|
|||
extern int tty_standard_install(struct tty_driver *driver,
|
||||
struct tty_struct *tty);
|
||||
|
||||
extern struct tty_struct *tty_pair_get_tty(struct tty_struct *tty);
|
||||
extern struct tty_struct *tty_pair_get_pty(struct tty_struct *tty);
|
||||
|
||||
extern struct mutex tty_mutex;
|
||||
extern spinlock_t tty_files_lock;
|
||||
|
||||
|
|
@ -562,7 +556,7 @@ extern int tty_register_ldisc(int disc, struct tty_ldisc_ops *new_ldisc);
|
|||
extern int tty_unregister_ldisc(int disc);
|
||||
extern int tty_set_ldisc(struct tty_struct *tty, int ldisc);
|
||||
extern int tty_ldisc_setup(struct tty_struct *tty, struct tty_struct *o_tty);
|
||||
extern void tty_ldisc_release(struct tty_struct *tty, struct tty_struct *o_tty);
|
||||
extern void tty_ldisc_release(struct tty_struct *tty);
|
||||
extern void tty_ldisc_init(struct tty_struct *tty);
|
||||
extern void tty_ldisc_deinit(struct tty_struct *tty);
|
||||
extern void tty_ldisc_begin(void);
|
||||
|
|
@ -623,14 +617,6 @@ extern int n_tty_ioctl_helper(struct tty_struct *tty, struct file *file,
|
|||
extern long n_tty_compat_ioctl_helper(struct tty_struct *tty, struct file *file,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
|
||||
/* serial.c */
|
||||
|
||||
extern void serial_console_init(void);
|
||||
|
||||
/* pcxx.c */
|
||||
|
||||
extern int pcxe_open(struct tty_struct *tty, struct file *filp);
|
||||
|
||||
/* vt.c */
|
||||
|
||||
extern int vt_ioctl(struct tty_struct *tty,
|
||||
|
|
@ -643,11 +629,9 @@ extern long vt_compat_ioctl(struct tty_struct *tty,
|
|||
/* functions for preparation of BKL removal */
|
||||
extern void __lockfunc tty_lock(struct tty_struct *tty);
|
||||
extern void __lockfunc tty_unlock(struct tty_struct *tty);
|
||||
extern void __lockfunc tty_lock_pair(struct tty_struct *tty,
|
||||
struct tty_struct *tty2);
|
||||
extern void __lockfunc tty_unlock_pair(struct tty_struct *tty,
|
||||
struct tty_struct *tty2);
|
||||
|
||||
extern void __lockfunc tty_lock_slave(struct tty_struct *tty);
|
||||
extern void __lockfunc tty_unlock_slave(struct tty_struct *tty);
|
||||
extern void tty_set_lock_subclass(struct tty_struct *tty);
|
||||
/*
|
||||
* this shall be called only from where BTM is held (like close)
|
||||
*
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue