Merge tag 'tty-3.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty
Pull TTY/Serial merge from Greg Kroah-Hartman: "Here's the big tty/serial tree set of changes for 3.8-rc1. Contained in here is a bunch more reworks of the tty port layer from Jiri and bugfixes from Alan, along with a number of other tty and serial driver updates by the various driver authors. Also, Jiri has been coerced^Wconvinced to be the co-maintainer of the TTY layer, which is much appreciated by me. All of these have been in the linux-next tree for a while. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>" Fixed up some trivial conflicts in the staging tree, due to the fwserial driver having come in both ways (but fixed up a bit in the serial tree), and the ioctl handling in the dgrp driver having been done slightly differently (staging tree got that one right, and removed both TIOCGSOFTCAR and TIOCSSOFTCAR). * tag 'tty-3.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty: (146 commits) staging: sb105x: fix potential NULL pointer dereference in mp_chars_in_buffer() staging/fwserial: Remove superfluous free staging/fwserial: Use WARN_ONCE when port table is corrupted staging/fwserial: Destruct embedded tty_port on teardown staging/fwserial: Fix build breakage when !CONFIG_BUG staging: fwserial: Add TTY-over-Firewire serial driver drivers/tty/serial/serial_core.c: clean up HIGH_BITS_OFFSET usage staging: dgrp: dgrp_tty.c: Audit the return values of get/put_user() staging: dgrp: dgrp_tty.c: Remove the TIOCSSOFTCAR ioctl handler from dgrp driver serial: ifx6x60: Add modem power off function in the platform reboot process serial: mxs-auart: unmap the scatter list before we copy the data serial: mxs-auart: disable the Receive Timeout Interrupt when DMA is enabled serial: max310x: Setup missing "can_sleep" field for GPIO tty/serial: fix ifx6x60.c declaration warning serial: samsung: add devicetree properties for non-Exynos SoCs serial: samsung: fix potential soft lockup during uart write tty: vt: Remove redundant null check before kfree. tty/8250 Add check for pci_ioremap_bar failure tty/8250 Add support for Commtech's Fastcom Async-335 and Fastcom Async-PCIe cards tty/8250 Add XR17D15x devices to the exar_handle_irq override ...
This commit is contained in:
+10
-10
@@ -20,28 +20,28 @@
|
||||
int devpts_new_index(struct inode *ptmx_inode);
|
||||
void devpts_kill_index(struct inode *ptmx_inode, int idx);
|
||||
/* mknod in devpts */
|
||||
int devpts_pty_new(struct inode *ptmx_inode, struct tty_struct *tty);
|
||||
/* get tty structure */
|
||||
struct tty_struct *devpts_get_tty(struct inode *pts_inode, int number);
|
||||
struct inode *devpts_pty_new(struct inode *ptmx_inode, dev_t device, int index,
|
||||
void *priv);
|
||||
/* get private structure */
|
||||
void *devpts_get_priv(struct inode *pts_inode);
|
||||
/* unlink */
|
||||
void devpts_pty_kill(struct tty_struct *tty);
|
||||
void devpts_pty_kill(struct inode *inode);
|
||||
|
||||
#else
|
||||
|
||||
/* Dummy stubs in the no-pty case */
|
||||
static inline int devpts_new_index(struct inode *ptmx_inode) { return -EINVAL; }
|
||||
static inline void devpts_kill_index(struct inode *ptmx_inode, int idx) { }
|
||||
static inline int devpts_pty_new(struct inode *ptmx_inode,
|
||||
struct tty_struct *tty)
|
||||
static inline struct inode *devpts_pty_new(struct inode *ptmx_inode,
|
||||
dev_t device, int index, void *priv)
|
||||
{
|
||||
return -EINVAL;
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
static inline struct tty_struct *devpts_get_tty(struct inode *pts_inode,
|
||||
int number)
|
||||
static inline void *devpts_get_priv(struct inode *pts_inode)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
static inline void devpts_pty_kill(struct tty_struct *tty) { }
|
||||
static inline void devpts_pty_kill(struct inode *inode) { }
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1985,6 +1985,9 @@
|
||||
#define PCI_DEVICE_ID_EXAR_XR17C152 0x0152
|
||||
#define PCI_DEVICE_ID_EXAR_XR17C154 0x0154
|
||||
#define PCI_DEVICE_ID_EXAR_XR17C158 0x0158
|
||||
#define PCI_DEVICE_ID_EXAR_XR17V352 0x0352
|
||||
#define PCI_DEVICE_ID_EXAR_XR17V354 0x0354
|
||||
#define PCI_DEVICE_ID_EXAR_XR17V358 0x0358
|
||||
|
||||
#define PCI_VENDOR_ID_MICROGATE 0x13c0
|
||||
#define PCI_DEVICE_ID_MICROGATE_USC 0x0010
|
||||
@@ -2323,6 +2326,8 @@
|
||||
|
||||
#define PCI_VENDOR_ID_TOPSPIN 0x1867
|
||||
|
||||
#define PCI_VENDOR_ID_COMMTECH 0x18f7
|
||||
|
||||
#define PCI_VENDOR_ID_SILAN 0x1904
|
||||
|
||||
#define PCI_VENDOR_ID_RENESAS 0x1912
|
||||
|
||||
@@ -105,6 +105,8 @@ extern int early_serial_setup(struct uart_port *port);
|
||||
|
||||
extern int serial8250_find_port(struct uart_port *p);
|
||||
extern int serial8250_find_port_for_earlycon(void);
|
||||
extern unsigned int serial8250_early_in(struct uart_port *port, int offset);
|
||||
extern void serial8250_early_out(struct uart_port *port, int offset, int value);
|
||||
extern int setup_early_serial8250_console(char *cmdline);
|
||||
extern void serial8250_do_set_termios(struct uart_port *port,
|
||||
struct ktermios *termios, struct ktermios *old);
|
||||
|
||||
+11
-34
@@ -188,7 +188,9 @@ struct tty_port_operations {
|
||||
};
|
||||
|
||||
struct tty_port {
|
||||
struct tty_bufhead buf; /* Locked internally */
|
||||
struct tty_struct *tty; /* Back pointer */
|
||||
struct tty_struct *itty; /* internal back ptr */
|
||||
const struct tty_port_operations *ops; /* Port operations */
|
||||
spinlock_t lock; /* Lock protecting tty field */
|
||||
int blocked_open; /* Waiting to open */
|
||||
@@ -197,6 +199,9 @@ struct tty_port {
|
||||
wait_queue_head_t close_wait; /* Close waiters */
|
||||
wait_queue_head_t delta_msr_wait; /* Modem status change */
|
||||
unsigned long flags; /* TTY flags ASY_*/
|
||||
unsigned long iflags; /* TTYP_ internal flags */
|
||||
#define TTYP_FLUSHING 1 /* Flushing to ldisc in progress */
|
||||
#define TTYP_FLUSHPENDING 2 /* Queued buffer flush pending */
|
||||
unsigned char console:1; /* port is a console */
|
||||
struct mutex mutex; /* Locking */
|
||||
struct mutex buf_mutex; /* Buffer alloc lock */
|
||||
@@ -235,6 +240,7 @@ struct tty_struct {
|
||||
struct mutex ldisc_mutex;
|
||||
struct tty_ldisc *ldisc;
|
||||
|
||||
struct mutex atomic_write_lock;
|
||||
struct mutex legacy_mutex;
|
||||
struct mutex termios_mutex;
|
||||
spinlock_t ctrl_lock;
|
||||
@@ -254,7 +260,6 @@ struct tty_struct {
|
||||
|
||||
struct tty_struct *link;
|
||||
struct fasync_struct *fasync;
|
||||
struct tty_bufhead buf; /* Locked internally */
|
||||
int alt_speed; /* For magic substitution of 38400 bps */
|
||||
wait_queue_head_t write_wait;
|
||||
wait_queue_head_t read_wait;
|
||||
@@ -265,37 +270,10 @@ struct tty_struct {
|
||||
|
||||
#define N_TTY_BUF_SIZE 4096
|
||||
|
||||
/*
|
||||
* The following is data for the N_TTY line discipline. For
|
||||
* historical reasons, this is included in the tty structure.
|
||||
* Mostly locked by the BKL.
|
||||
*/
|
||||
unsigned int column;
|
||||
unsigned char lnext:1, erasing:1, raw:1, real_raw:1, icanon:1;
|
||||
unsigned char closing:1;
|
||||
unsigned char echo_overrun:1;
|
||||
unsigned short minimum_to_wake;
|
||||
unsigned long overrun_time;
|
||||
int num_overrun;
|
||||
unsigned long process_char_map[256/(8*sizeof(unsigned long))];
|
||||
char *read_buf;
|
||||
int read_head;
|
||||
int read_tail;
|
||||
int read_cnt;
|
||||
unsigned long read_flags[N_TTY_BUF_SIZE/(8*sizeof(unsigned long))];
|
||||
unsigned char *echo_buf;
|
||||
unsigned int echo_pos;
|
||||
unsigned int echo_cnt;
|
||||
int canon_data;
|
||||
unsigned long canon_head;
|
||||
unsigned int canon_column;
|
||||
struct mutex atomic_read_lock;
|
||||
struct mutex atomic_write_lock;
|
||||
struct mutex output_lock;
|
||||
struct mutex echo_lock;
|
||||
unsigned char *write_buf;
|
||||
int write_cnt;
|
||||
spinlock_t read_lock;
|
||||
/* If the tty has a pending do_SAK, queue it here - akpm */
|
||||
struct work_struct SAK_work;
|
||||
struct tty_port *port;
|
||||
@@ -335,8 +313,6 @@ struct tty_file_private {
|
||||
#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_FLUSHING 19 /* Flushing to ldisc in progress */
|
||||
#define TTY_FLUSHPENDING 20 /* Queued buffer flush pending */
|
||||
#define TTY_HUPPING 21 /* ->hangup() in progress */
|
||||
|
||||
#define TTY_WRITE_FLUSH(tty) tty_write_flush((tty))
|
||||
@@ -412,9 +388,9 @@ extern void disassociate_ctty(int priv);
|
||||
extern void no_tty(void);
|
||||
extern void tty_flip_buffer_push(struct tty_struct *tty);
|
||||
extern void tty_flush_to_ldisc(struct tty_struct *tty);
|
||||
extern void tty_buffer_free_all(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_init(struct tty_struct *tty);
|
||||
extern void tty_buffer_init(struct tty_port *port);
|
||||
extern speed_t tty_get_baud_rate(struct tty_struct *tty);
|
||||
extern speed_t tty_termios_baud_rate(struct ktermios *termios);
|
||||
extern speed_t tty_termios_input_baud_rate(struct ktermios *termios);
|
||||
@@ -479,6 +455,7 @@ extern struct device *tty_port_register_device_attr(struct tty_port *port,
|
||||
const struct attribute_group **attr_grp);
|
||||
extern int tty_port_alloc_xmit_buf(struct tty_port *port);
|
||||
extern void tty_port_free_xmit_buf(struct tty_port *port);
|
||||
extern void tty_port_destroy(struct tty_port *port);
|
||||
extern void tty_port_put(struct tty_port *port);
|
||||
|
||||
static inline struct tty_port *tty_port_get(struct tty_port *port)
|
||||
@@ -535,7 +512,7 @@ extern void n_tty_inherit_ops(struct tty_ldisc_ops *ops);
|
||||
/* tty_audit.c */
|
||||
#ifdef CONFIG_AUDIT
|
||||
extern void tty_audit_add_data(struct tty_struct *tty, unsigned char *data,
|
||||
size_t size);
|
||||
size_t size, unsigned icanon);
|
||||
extern void tty_audit_exit(void);
|
||||
extern void tty_audit_fork(struct signal_struct *sig);
|
||||
extern void tty_audit_tiocsti(struct tty_struct *tty, char ch);
|
||||
@@ -544,7 +521,7 @@ extern int tty_audit_push_task(struct task_struct *tsk,
|
||||
kuid_t loginuid, u32 sessionid);
|
||||
#else
|
||||
static inline void tty_audit_add_data(struct tty_struct *tty,
|
||||
unsigned char *data, size_t size)
|
||||
unsigned char *data, size_t size, unsigned icanon)
|
||||
{
|
||||
}
|
||||
static inline void tty_audit_tiocsti(struct tty_struct *tty, char ch)
|
||||
|
||||
@@ -11,7 +11,7 @@ void tty_schedule_flip(struct tty_struct *tty);
|
||||
static inline int tty_insert_flip_char(struct tty_struct *tty,
|
||||
unsigned char ch, char flag)
|
||||
{
|
||||
struct tty_buffer *tb = tty->buf.tail;
|
||||
struct tty_buffer *tb = tty->port->buf.tail;
|
||||
if (tb && tb->used < tb->size) {
|
||||
tb->flag_buf_ptr[tb->used] = flag;
|
||||
tb->char_buf_ptr[tb->used++] = ch;
|
||||
|
||||
@@ -74,6 +74,9 @@
|
||||
#define TCSETXW 0x5435
|
||||
#define TIOCSIG _IOW('T', 0x36, int) /* pty: generate signal */
|
||||
#define TIOCVHANGUP 0x5437
|
||||
#define TIOCGPKT _IOR('T', 0x38, int) /* Get packet mode state */
|
||||
#define TIOCGPTLCK _IOR('T', 0x39, int) /* Get Pty lock state */
|
||||
#define TIOCGEXCL _IOR('T', 0x40, int) /* Get exclusive mode state */
|
||||
|
||||
#define FIONCLEX 0x5450
|
||||
#define FIOCLEX 0x5451
|
||||
|
||||
@@ -49,7 +49,8 @@
|
||||
#define PORT_XR17D15X 21 /* Exar XR17D15x UART */
|
||||
#define PORT_LPC3220 22 /* NXP LPC32xx SoC "Standard" UART */
|
||||
#define PORT_8250_CIR 23 /* CIR infrared port, has its own driver */
|
||||
#define PORT_MAX_8250 23 /* max port ID */
|
||||
#define PORT_XR17V35X 24 /* Exar XR17V35x UARTs */
|
||||
#define PORT_MAX_8250 24 /* max port ID */
|
||||
|
||||
/*
|
||||
* ARM specific type numbers. These are not currently guaranteed
|
||||
@@ -215,5 +216,7 @@
|
||||
/* Energy Micro efm32 SoC */
|
||||
#define PORT_EFMUART 100
|
||||
|
||||
/* ARC (Synopsys) on-chip UART */
|
||||
#define PORT_ARC 101
|
||||
|
||||
#endif /* _UAPILINUX_SERIAL_CORE_H */
|
||||
|
||||
@@ -367,5 +367,23 @@
|
||||
#define UART_OMAP_MDR1_CIR_MODE 0x06 /* CIR mode */
|
||||
#define UART_OMAP_MDR1_DISABLE 0x07 /* Disable (default state) */
|
||||
|
||||
/*
|
||||
* These are definitions for the Exar XR17V35X and XR17(C|D)15X
|
||||
*/
|
||||
#define UART_EXAR_8XMODE 0x88 /* 8X sampling rate select */
|
||||
#define UART_EXAR_SLEEP 0x8b /* Sleep mode */
|
||||
#define UART_EXAR_DVID 0x8d /* Device identification */
|
||||
|
||||
#define UART_EXAR_FCTR 0x08 /* Feature Control Register */
|
||||
#define UART_FCTR_EXAR_IRDA 0x08 /* IrDa data encode select */
|
||||
#define UART_FCTR_EXAR_485 0x10 /* Auto 485 half duplex dir ctl */
|
||||
#define UART_FCTR_EXAR_TRGA 0x00 /* FIFO trigger table A */
|
||||
#define UART_FCTR_EXAR_TRGB 0x60 /* FIFO trigger table B */
|
||||
#define UART_FCTR_EXAR_TRGC 0x80 /* FIFO trigger table C */
|
||||
#define UART_FCTR_EXAR_TRGD 0xc0 /* FIFO trigger table D programmable */
|
||||
|
||||
#define UART_EXAR_TXTRG 0x0a /* Tx FIFO trigger level write-only */
|
||||
#define UART_EXAR_RXTRG 0x0b /* Rx FIFO trigger level write-only */
|
||||
|
||||
#endif /* _LINUX_SERIAL_REG_H */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user