diff options
Diffstat (limited to 'include/linux/tty.h')
| -rw-r--r-- | include/linux/tty.h | 44 | 
1 files changed, 10 insertions, 34 deletions
diff --git a/include/linux/tty.h b/include/linux/tty.h index f0b4eb47297..d7ff88fb896 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h @@ -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); @@ -535,7 +511,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 +520,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)  |