diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-12-14 18:23:32 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-12-14 18:23:32 -0500 |
| commit | 37da7bbbe84fe9e8862940d3f9194fd27dce59bb (patch) | |
| tree | 6c3fae910b4cfd4e2f9a1fdc035400cd4df78be3 /include/linux | |
| parent | e7cf773d431a63a2417902696fcc9e0ebdc83bbe (diff) | |
| parent | dd63af108f0814f0b589659f4e55a7a5af3b7e53 (diff) | |
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.
...
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/kernel.h | 3 | ||||
| -rw-r--r-- | include/linux/serial_8250.h | 3 | ||||
| -rw-r--r-- | include/linux/serial_bcm63xx.h | 2 | ||||
| -rw-r--r-- | include/linux/serial_core.h | 67 | ||||
| -rw-r--r-- | include/linux/tty.h | 28 |
5 files changed, 50 insertions, 53 deletions
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 233ea8107038..5449d2f4a1ef 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
| @@ -416,9 +416,6 @@ extern int __kernel_text_address(unsigned long addr); | |||
| 416 | extern int kernel_text_address(unsigned long addr); | 416 | extern int kernel_text_address(unsigned long addr); |
| 417 | extern int func_ptr_is_kernel_text(void *ptr); | 417 | extern int func_ptr_is_kernel_text(void *ptr); |
| 418 | 418 | ||
| 419 | struct pid; | ||
| 420 | extern struct pid *session_of_pgrp(struct pid *pgrp); | ||
| 421 | |||
| 422 | unsigned long int_sqrt(unsigned long); | 419 | unsigned long int_sqrt(unsigned long); |
| 423 | 420 | ||
| 424 | extern void bust_spinlocks(int yes); | 421 | extern void bust_spinlocks(int yes); |
diff --git a/include/linux/serial_8250.h b/include/linux/serial_8250.h index 3df10d5f154b..e02acf0a0ec9 100644 --- a/include/linux/serial_8250.h +++ b/include/linux/serial_8250.h | |||
| @@ -97,13 +97,10 @@ struct uart_8250_port { | |||
| 97 | unsigned char msr_saved_flags; | 97 | unsigned char msr_saved_flags; |
| 98 | 98 | ||
| 99 | struct uart_8250_dma *dma; | 99 | struct uart_8250_dma *dma; |
| 100 | struct serial_rs485 rs485; | ||
| 101 | 100 | ||
| 102 | /* 8250 specific callbacks */ | 101 | /* 8250 specific callbacks */ |
| 103 | int (*dl_read)(struct uart_8250_port *); | 102 | int (*dl_read)(struct uart_8250_port *); |
| 104 | void (*dl_write)(struct uart_8250_port *, int); | 103 | void (*dl_write)(struct uart_8250_port *, int); |
| 105 | int (*rs485_config)(struct uart_8250_port *, | ||
| 106 | struct serial_rs485 *rs485); | ||
| 107 | }; | 104 | }; |
| 108 | 105 | ||
| 109 | static inline struct uart_8250_port *up_to_u8250p(struct uart_port *up) | 106 | static inline struct uart_8250_port *up_to_u8250p(struct uart_port *up) |
diff --git a/include/linux/serial_bcm63xx.h b/include/linux/serial_bcm63xx.h index a80aa1a5bee2..570e964dc899 100644 --- a/include/linux/serial_bcm63xx.h +++ b/include/linux/serial_bcm63xx.h | |||
| @@ -116,6 +116,4 @@ | |||
| 116 | UART_FIFO_PARERR_MASK | \ | 116 | UART_FIFO_PARERR_MASK | \ |
| 117 | UART_FIFO_BRKDET_MASK) | 117 | UART_FIFO_BRKDET_MASK) |
| 118 | 118 | ||
| 119 | #define UART_REG_SIZE 24 | ||
| 120 | |||
| 121 | #endif /* _LINUX_SERIAL_BCM63XX_H */ | 119 | #endif /* _LINUX_SERIAL_BCM63XX_H */ |
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index 21c2e05c1bc3..057038cf2788 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h | |||
| @@ -63,7 +63,7 @@ struct uart_ops { | |||
| 63 | void (*flush_buffer)(struct uart_port *); | 63 | void (*flush_buffer)(struct uart_port *); |
| 64 | void (*set_termios)(struct uart_port *, struct ktermios *new, | 64 | void (*set_termios)(struct uart_port *, struct ktermios *new, |
| 65 | struct ktermios *old); | 65 | struct ktermios *old); |
| 66 | void (*set_ldisc)(struct uart_port *, int new); | 66 | void (*set_ldisc)(struct uart_port *, struct ktermios *); |
| 67 | void (*pm)(struct uart_port *, unsigned int state, | 67 | void (*pm)(struct uart_port *, unsigned int state, |
| 68 | unsigned int oldstate); | 68 | unsigned int oldstate); |
| 69 | 69 | ||
| @@ -131,6 +131,8 @@ struct uart_port { | |||
| 131 | void (*pm)(struct uart_port *, unsigned int state, | 131 | void (*pm)(struct uart_port *, unsigned int state, |
| 132 | unsigned int old); | 132 | unsigned int old); |
| 133 | void (*handle_break)(struct uart_port *); | 133 | void (*handle_break)(struct uart_port *); |
| 134 | int (*rs485_config)(struct uart_port *, | ||
| 135 | struct serial_rs485 *rs485); | ||
| 134 | unsigned int irq; /* irq number */ | 136 | unsigned int irq; /* irq number */ |
| 135 | unsigned long irqflags; /* irq flags */ | 137 | unsigned long irqflags; /* irq flags */ |
| 136 | unsigned int uartclk; /* base uart clock */ | 138 | unsigned int uartclk; /* base uart clock */ |
| @@ -140,12 +142,13 @@ struct uart_port { | |||
| 140 | unsigned char iotype; /* io access style */ | 142 | unsigned char iotype; /* io access style */ |
| 141 | unsigned char unused1; | 143 | unsigned char unused1; |
| 142 | 144 | ||
| 143 | #define UPIO_PORT (0) | 145 | #define UPIO_PORT (0) /* 8b I/O port access */ |
| 144 | #define UPIO_HUB6 (1) | 146 | #define UPIO_HUB6 (1) /* Hub6 ISA card */ |
| 145 | #define UPIO_MEM (2) | 147 | #define UPIO_MEM (2) /* 8b MMIO access */ |
| 146 | #define UPIO_MEM32 (3) | 148 | #define UPIO_MEM32 (3) /* 32b little endian */ |
| 147 | #define UPIO_AU (4) /* Au1x00 and RT288x type IO */ | 149 | #define UPIO_MEM32BE (4) /* 32b big endian */ |
| 148 | #define UPIO_TSI (5) /* Tsi108/109 type IO */ | 150 | #define UPIO_AU (5) /* Au1x00 and RT288x type IO */ |
| 151 | #define UPIO_TSI (6) /* Tsi108/109 type IO */ | ||
| 149 | 152 | ||
| 150 | unsigned int read_status_mask; /* driver specific */ | 153 | unsigned int read_status_mask; /* driver specific */ |
| 151 | unsigned int ignore_status_mask; /* driver specific */ | 154 | unsigned int ignore_status_mask; /* driver specific */ |
| @@ -160,21 +163,33 @@ struct uart_port { | |||
| 160 | /* flags must be updated while holding port mutex */ | 163 | /* flags must be updated while holding port mutex */ |
| 161 | upf_t flags; | 164 | upf_t flags; |
| 162 | 165 | ||
| 163 | #define UPF_FOURPORT ((__force upf_t) (1 << 1)) | 166 | /* |
| 164 | #define UPF_SAK ((__force upf_t) (1 << 2)) | 167 | * These flags must be equivalent to the flags defined in |
| 165 | #define UPF_SPD_MASK ((__force upf_t) (0x1030)) | 168 | * include/uapi/linux/tty_flags.h which are the userspace definitions |
| 166 | #define UPF_SPD_HI ((__force upf_t) (0x0010)) | 169 | * assigned from the serial_struct flags in uart_set_info() |
| 167 | #define UPF_SPD_VHI ((__force upf_t) (0x0020)) | 170 | * [for bit definitions in the UPF_CHANGE_MASK] |
| 168 | #define UPF_SPD_CUST ((__force upf_t) (0x0030)) | 171 | * |
| 169 | #define UPF_SPD_SHI ((__force upf_t) (0x1000)) | 172 | * Bits [0..UPF_LAST_USER] are userspace defined/visible/changeable |
| 170 | #define UPF_SPD_WARP ((__force upf_t) (0x1010)) | 173 | * except bit 15 (UPF_NO_TXEN_TEST) which is masked off. |
| 171 | #define UPF_SKIP_TEST ((__force upf_t) (1 << 6)) | 174 | * The remaining bits are serial-core specific and not modifiable by |
| 172 | #define UPF_AUTO_IRQ ((__force upf_t) (1 << 7)) | 175 | * userspace. |
| 173 | #define UPF_HARDPPS_CD ((__force upf_t) (1 << 11)) | 176 | */ |
| 174 | #define UPF_LOW_LATENCY ((__force upf_t) (1 << 13)) | 177 | #define UPF_FOURPORT ((__force upf_t) ASYNC_FOURPORT /* 1 */ ) |
| 175 | #define UPF_BUGGY_UART ((__force upf_t) (1 << 14)) | 178 | #define UPF_SAK ((__force upf_t) ASYNC_SAK /* 2 */ ) |
| 179 | #define UPF_SPD_HI ((__force upf_t) ASYNC_SPD_HI /* 4 */ ) | ||
| 180 | #define UPF_SPD_VHI ((__force upf_t) ASYNC_SPD_VHI /* 5 */ ) | ||
| 181 | #define UPF_SPD_CUST ((__force upf_t) ASYNC_SPD_CUST /* 0x0030 */ ) | ||
| 182 | #define UPF_SPD_WARP ((__force upf_t) ASYNC_SPD_WARP /* 0x1010 */ ) | ||
| 183 | #define UPF_SPD_MASK ((__force upf_t) ASYNC_SPD_MASK /* 0x1030 */ ) | ||
| 184 | #define UPF_SKIP_TEST ((__force upf_t) ASYNC_SKIP_TEST /* 6 */ ) | ||
| 185 | #define UPF_AUTO_IRQ ((__force upf_t) ASYNC_AUTO_IRQ /* 7 */ ) | ||
| 186 | #define UPF_HARDPPS_CD ((__force upf_t) ASYNC_HARDPPS_CD /* 11 */ ) | ||
| 187 | #define UPF_SPD_SHI ((__force upf_t) ASYNC_SPD_SHI /* 12 */ ) | ||
| 188 | #define UPF_LOW_LATENCY ((__force upf_t) ASYNC_LOW_LATENCY /* 13 */ ) | ||
| 189 | #define UPF_BUGGY_UART ((__force upf_t) ASYNC_BUGGY_UART /* 14 */ ) | ||
| 176 | #define UPF_NO_TXEN_TEST ((__force upf_t) (1 << 15)) | 190 | #define UPF_NO_TXEN_TEST ((__force upf_t) (1 << 15)) |
| 177 | #define UPF_MAGIC_MULTIPLIER ((__force upf_t) (1 << 16)) | 191 | #define UPF_MAGIC_MULTIPLIER ((__force upf_t) ASYNC_MAGIC_MULTIPLIER /* 16 */ ) |
| 192 | |||
| 178 | /* Port has hardware-assisted h/w flow control (iow, auto-RTS *not* auto-CTS) */ | 193 | /* Port has hardware-assisted h/w flow control (iow, auto-RTS *not* auto-CTS) */ |
| 179 | #define UPF_HARD_FLOW ((__force upf_t) (1 << 21)) | 194 | #define UPF_HARD_FLOW ((__force upf_t) (1 << 21)) |
| 180 | /* Port has hardware-assisted s/w flow control */ | 195 | /* Port has hardware-assisted s/w flow control */ |
| @@ -190,9 +205,14 @@ struct uart_port { | |||
| 190 | #define UPF_DEAD ((__force upf_t) (1 << 30)) | 205 | #define UPF_DEAD ((__force upf_t) (1 << 30)) |
| 191 | #define UPF_IOREMAP ((__force upf_t) (1 << 31)) | 206 | #define UPF_IOREMAP ((__force upf_t) (1 << 31)) |
| 192 | 207 | ||
| 193 | #define UPF_CHANGE_MASK ((__force upf_t) (0x17fff)) | 208 | #define __UPF_CHANGE_MASK 0x17fff |
| 209 | #define UPF_CHANGE_MASK ((__force upf_t) __UPF_CHANGE_MASK) | ||
| 194 | #define UPF_USR_MASK ((__force upf_t) (UPF_SPD_MASK|UPF_LOW_LATENCY)) | 210 | #define UPF_USR_MASK ((__force upf_t) (UPF_SPD_MASK|UPF_LOW_LATENCY)) |
| 195 | 211 | ||
| 212 | #if __UPF_CHANGE_MASK > ASYNC_FLAGS | ||
| 213 | #error Change mask not equivalent to userspace-visible bit defines | ||
| 214 | #endif | ||
| 215 | |||
| 196 | /* status must be updated while holding port lock */ | 216 | /* status must be updated while holding port lock */ |
| 197 | upstat_t status; | 217 | upstat_t status; |
| 198 | 218 | ||
| @@ -214,6 +234,7 @@ struct uart_port { | |||
| 214 | unsigned char unused[2]; | 234 | unsigned char unused[2]; |
| 215 | struct attribute_group *attr_group; /* port specific attributes */ | 235 | struct attribute_group *attr_group; /* port specific attributes */ |
| 216 | const struct attribute_group **tty_groups; /* all attributes (serial core use only) */ | 236 | const struct attribute_group **tty_groups; /* all attributes (serial core use only) */ |
| 237 | struct serial_rs485 rs485; | ||
| 217 | void *private_data; /* generic platform data pointer */ | 238 | void *private_data; /* generic platform data pointer */ |
| 218 | }; | 239 | }; |
| 219 | 240 | ||
| @@ -367,7 +388,7 @@ static inline int uart_tx_stopped(struct uart_port *port) | |||
| 367 | 388 | ||
| 368 | static inline bool uart_cts_enabled(struct uart_port *uport) | 389 | static inline bool uart_cts_enabled(struct uart_port *uport) |
| 369 | { | 390 | { |
| 370 | return uport->status & UPSTAT_CTS_ENABLE; | 391 | return !!(uport->status & UPSTAT_CTS_ENABLE); |
| 371 | } | 392 | } |
| 372 | 393 | ||
| 373 | /* | 394 | /* |
diff --git a/include/linux/tty.h b/include/linux/tty.h index 5171ef8f7b85..7d66ae508e5c 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h | |||
| @@ -284,7 +284,7 @@ struct tty_struct { | |||
| 284 | 284 | ||
| 285 | #define N_TTY_BUF_SIZE 4096 | 285 | #define N_TTY_BUF_SIZE 4096 |
| 286 | 286 | ||
| 287 | unsigned char closing:1; | 287 | int closing; |
| 288 | unsigned char *write_buf; | 288 | unsigned char *write_buf; |
| 289 | int write_cnt; | 289 | int write_cnt; |
| 290 | /* If the tty has a pending do_SAK, queue it here - akpm */ | 290 | /* If the tty has a pending do_SAK, queue it here - akpm */ |
| @@ -316,12 +316,10 @@ struct tty_file_private { | |||
| 316 | #define TTY_EXCLUSIVE 3 /* Exclusive open mode */ | 316 | #define TTY_EXCLUSIVE 3 /* Exclusive open mode */ |
| 317 | #define TTY_DEBUG 4 /* Debugging */ | 317 | #define TTY_DEBUG 4 /* Debugging */ |
| 318 | #define TTY_DO_WRITE_WAKEUP 5 /* Call write_wakeup after queuing new */ | 318 | #define TTY_DO_WRITE_WAKEUP 5 /* Call write_wakeup after queuing new */ |
| 319 | #define TTY_CLOSING 7 /* ->close() in progress */ | ||
| 320 | #define TTY_LDISC_OPEN 11 /* Line discipline is open */ | 319 | #define TTY_LDISC_OPEN 11 /* Line discipline is open */ |
| 321 | #define TTY_PTY_LOCK 16 /* pty private */ | 320 | #define TTY_PTY_LOCK 16 /* pty private */ |
| 322 | #define TTY_NO_WRITE_SPLIT 17 /* Preserve write boundaries to driver */ | 321 | #define TTY_NO_WRITE_SPLIT 17 /* Preserve write boundaries to driver */ |
| 323 | #define TTY_HUPPED 18 /* Post driver->hangup() */ | 322 | #define TTY_HUPPED 18 /* Post driver->hangup() */ |
| 324 | #define TTY_HUPPING 21 /* ->hangup() in progress */ | ||
| 325 | #define TTY_LDISC_HALTED 22 /* Line discipline is halted */ | 323 | #define TTY_LDISC_HALTED 22 /* Line discipline is halted */ |
| 326 | 324 | ||
| 327 | #define TTY_WRITE_FLUSH(tty) tty_write_flush((tty)) | 325 | #define TTY_WRITE_FLUSH(tty) tty_write_flush((tty)) |
| @@ -437,14 +435,13 @@ extern int is_ignored(int sig); | |||
| 437 | extern int tty_signal(int sig, struct tty_struct *tty); | 435 | extern int tty_signal(int sig, struct tty_struct *tty); |
| 438 | extern void tty_hangup(struct tty_struct *tty); | 436 | extern void tty_hangup(struct tty_struct *tty); |
| 439 | extern void tty_vhangup(struct tty_struct *tty); | 437 | extern void tty_vhangup(struct tty_struct *tty); |
| 440 | extern void tty_unhangup(struct file *filp); | ||
| 441 | extern int tty_hung_up_p(struct file *filp); | 438 | extern int tty_hung_up_p(struct file *filp); |
| 442 | extern void do_SAK(struct tty_struct *tty); | 439 | extern void do_SAK(struct tty_struct *tty); |
| 443 | extern void __do_SAK(struct tty_struct *tty); | 440 | extern void __do_SAK(struct tty_struct *tty); |
| 444 | extern void no_tty(void); | 441 | extern void no_tty(void); |
| 445 | extern void tty_flush_to_ldisc(struct tty_struct *tty); | 442 | extern void tty_flush_to_ldisc(struct tty_struct *tty); |
| 446 | extern void tty_buffer_free_all(struct tty_port *port); | 443 | extern void tty_buffer_free_all(struct tty_port *port); |
| 447 | extern void tty_buffer_flush(struct tty_struct *tty); | 444 | extern void tty_buffer_flush(struct tty_struct *tty, struct tty_ldisc *ld); |
| 448 | extern void tty_buffer_init(struct tty_port *port); | 445 | extern void tty_buffer_init(struct tty_port *port); |
| 449 | extern speed_t tty_termios_baud_rate(struct ktermios *termios); | 446 | extern speed_t tty_termios_baud_rate(struct ktermios *termios); |
| 450 | extern speed_t tty_termios_input_baud_rate(struct ktermios *termios); | 447 | extern speed_t tty_termios_input_baud_rate(struct ktermios *termios); |
| @@ -498,9 +495,6 @@ extern int tty_init_termios(struct tty_struct *tty); | |||
| 498 | extern int tty_standard_install(struct tty_driver *driver, | 495 | extern int tty_standard_install(struct tty_driver *driver, |
| 499 | struct tty_struct *tty); | 496 | struct tty_struct *tty); |
| 500 | 497 | ||
| 501 | extern struct tty_struct *tty_pair_get_tty(struct tty_struct *tty); | ||
| 502 | extern struct tty_struct *tty_pair_get_pty(struct tty_struct *tty); | ||
| 503 | |||
| 504 | extern struct mutex tty_mutex; | 498 | extern struct mutex tty_mutex; |
| 505 | extern spinlock_t tty_files_lock; | 499 | extern spinlock_t tty_files_lock; |
| 506 | 500 | ||
| @@ -562,7 +556,7 @@ extern int tty_register_ldisc(int disc, struct tty_ldisc_ops *new_ldisc); | |||
| 562 | extern int tty_unregister_ldisc(int disc); | 556 | extern int tty_unregister_ldisc(int disc); |
| 563 | extern int tty_set_ldisc(struct tty_struct *tty, int ldisc); | 557 | extern int tty_set_ldisc(struct tty_struct *tty, int ldisc); |
| 564 | extern int tty_ldisc_setup(struct tty_struct *tty, struct tty_struct *o_tty); | 558 | extern int tty_ldisc_setup(struct tty_struct *tty, struct tty_struct *o_tty); |
| 565 | extern void tty_ldisc_release(struct tty_struct *tty, struct tty_struct *o_tty); | 559 | extern void tty_ldisc_release(struct tty_struct *tty); |
| 566 | extern void tty_ldisc_init(struct tty_struct *tty); | 560 | extern void tty_ldisc_init(struct tty_struct *tty); |
| 567 | extern void tty_ldisc_deinit(struct tty_struct *tty); | 561 | extern void tty_ldisc_deinit(struct tty_struct *tty); |
| 568 | extern void tty_ldisc_begin(void); | 562 | extern void tty_ldisc_begin(void); |
| @@ -623,14 +617,6 @@ extern int n_tty_ioctl_helper(struct tty_struct *tty, struct file *file, | |||
| 623 | extern long n_tty_compat_ioctl_helper(struct tty_struct *tty, struct file *file, | 617 | extern long n_tty_compat_ioctl_helper(struct tty_struct *tty, struct file *file, |
| 624 | unsigned int cmd, unsigned long arg); | 618 | unsigned int cmd, unsigned long arg); |
| 625 | 619 | ||
| 626 | /* serial.c */ | ||
| 627 | |||
| 628 | extern void serial_console_init(void); | ||
| 629 | |||
| 630 | /* pcxx.c */ | ||
| 631 | |||
| 632 | extern int pcxe_open(struct tty_struct *tty, struct file *filp); | ||
| 633 | |||
| 634 | /* vt.c */ | 620 | /* vt.c */ |
| 635 | 621 | ||
| 636 | extern int vt_ioctl(struct tty_struct *tty, | 622 | extern int vt_ioctl(struct tty_struct *tty, |
| @@ -643,11 +629,9 @@ extern long vt_compat_ioctl(struct tty_struct *tty, | |||
| 643 | /* functions for preparation of BKL removal */ | 629 | /* functions for preparation of BKL removal */ |
| 644 | extern void __lockfunc tty_lock(struct tty_struct *tty); | 630 | extern void __lockfunc tty_lock(struct tty_struct *tty); |
| 645 | extern void __lockfunc tty_unlock(struct tty_struct *tty); | 631 | extern void __lockfunc tty_unlock(struct tty_struct *tty); |
| 646 | extern void __lockfunc tty_lock_pair(struct tty_struct *tty, | 632 | extern void __lockfunc tty_lock_slave(struct tty_struct *tty); |
| 647 | struct tty_struct *tty2); | 633 | extern void __lockfunc tty_unlock_slave(struct tty_struct *tty); |
| 648 | extern void __lockfunc tty_unlock_pair(struct tty_struct *tty, | 634 | extern void tty_set_lock_subclass(struct tty_struct *tty); |
| 649 | struct tty_struct *tty2); | ||
| 650 | |||
| 651 | /* | 635 | /* |
| 652 | * this shall be called only from where BTM is held (like close) | 636 | * this shall be called only from where BTM is held (like close) |
| 653 | * | 637 | * |
