Line data Source code
1 : /* SPDX-License-Identifier: GPL-2.0 */
2 : #ifndef _LINUX_TTY_H
3 : #define _LINUX_TTY_H
4 :
5 : #include <linux/fs.h>
6 : #include <linux/major.h>
7 : #include <linux/termios.h>
8 : #include <linux/workqueue.h>
9 : #include <linux/tty_driver.h>
10 : #include <linux/tty_ldisc.h>
11 : #include <linux/mutex.h>
12 : #include <linux/tty_flags.h>
13 : #include <linux/seq_file.h>
14 : #include <uapi/linux/tty.h>
15 : #include <linux/rwsem.h>
16 : #include <linux/llist.h>
17 :
18 :
19 : /*
20 : * Lock subclasses for tty locks
21 : *
22 : * TTY_LOCK_NORMAL is for normal ttys and master ptys.
23 : * TTY_LOCK_SLAVE is for slave ptys only.
24 : *
25 : * Lock subclasses are necessary for handling nested locking with pty pairs.
26 : * tty locks which use nested locking:
27 : *
28 : * legacy_mutex - Nested tty locks are necessary for releasing pty pairs.
29 : * The stable lock order is master pty first, then slave pty.
30 : * termios_rwsem - The stable lock order is tty_buffer lock->termios_rwsem.
31 : * Subclassing this lock enables the slave pty to hold its
32 : * termios_rwsem when claiming the master tty_buffer lock.
33 : * tty_buffer lock - slave ptys can claim nested buffer lock when handling
34 : * signal chars. The stable lock order is slave pty, then
35 : * master.
36 : */
37 :
38 : enum {
39 : TTY_LOCK_NORMAL = 0,
40 : TTY_LOCK_SLAVE,
41 : };
42 :
43 : /*
44 : * (Note: the *_driver.minor_start values 1, 64, 128, 192 are
45 : * hardcoded at present.)
46 : */
47 : #define NR_UNIX98_PTY_DEFAULT 4096 /* Default maximum for Unix98 ptys */
48 : #define NR_UNIX98_PTY_RESERVE 1024 /* Default reserve for main devpts */
49 : #define NR_UNIX98_PTY_MAX (1 << MINORBITS) /* Absolute limit */
50 :
51 : /*
52 : * This character is the same as _POSIX_VDISABLE: it cannot be used as
53 : * a c_cc[] character, but indicates that a particular special character
54 : * isn't in use (eg VINTR has no character etc)
55 : */
56 : #define __DISABLED_CHAR '\0'
57 :
58 : struct tty_buffer {
59 : union {
60 : struct tty_buffer *next;
61 : struct llist_node free;
62 : };
63 : int used;
64 : int size;
65 : int commit;
66 : int read;
67 : int flags;
68 : /* Data points here */
69 : unsigned long data[];
70 : };
71 :
72 : /* Values for .flags field of tty_buffer */
73 : #define TTYB_NORMAL 1 /* buffer has no flags buffer */
74 :
75 0 : static inline unsigned char *char_buf_ptr(struct tty_buffer *b, int ofs)
76 : {
77 0 : return ((unsigned char *)b->data) + ofs;
78 : }
79 :
80 0 : static inline char *flag_buf_ptr(struct tty_buffer *b, int ofs)
81 : {
82 0 : return (char *)char_buf_ptr(b, ofs) + b->size;
83 : }
84 :
85 : struct tty_bufhead {
86 : struct tty_buffer *head; /* Queue head */
87 : struct work_struct work;
88 : struct mutex lock;
89 : atomic_t priority;
90 : struct tty_buffer sentinel;
91 : struct llist_head free; /* Free queue head */
92 : atomic_t mem_used; /* In-use buffers excluding free list */
93 : int mem_limit;
94 : struct tty_buffer *tail; /* Active buffer */
95 : };
96 : /*
97 : * When a break, frame error, or parity error happens, these codes are
98 : * stuffed into the flags buffer.
99 : */
100 : #define TTY_NORMAL 0
101 : #define TTY_BREAK 1
102 : #define TTY_FRAME 2
103 : #define TTY_PARITY 3
104 : #define TTY_OVERRUN 4
105 :
106 : #define INTR_CHAR(tty) ((tty)->termios.c_cc[VINTR])
107 : #define QUIT_CHAR(tty) ((tty)->termios.c_cc[VQUIT])
108 : #define ERASE_CHAR(tty) ((tty)->termios.c_cc[VERASE])
109 : #define KILL_CHAR(tty) ((tty)->termios.c_cc[VKILL])
110 : #define EOF_CHAR(tty) ((tty)->termios.c_cc[VEOF])
111 : #define TIME_CHAR(tty) ((tty)->termios.c_cc[VTIME])
112 : #define MIN_CHAR(tty) ((tty)->termios.c_cc[VMIN])
113 : #define SWTC_CHAR(tty) ((tty)->termios.c_cc[VSWTC])
114 : #define START_CHAR(tty) ((tty)->termios.c_cc[VSTART])
115 : #define STOP_CHAR(tty) ((tty)->termios.c_cc[VSTOP])
116 : #define SUSP_CHAR(tty) ((tty)->termios.c_cc[VSUSP])
117 : #define EOL_CHAR(tty) ((tty)->termios.c_cc[VEOL])
118 : #define REPRINT_CHAR(tty) ((tty)->termios.c_cc[VREPRINT])
119 : #define DISCARD_CHAR(tty) ((tty)->termios.c_cc[VDISCARD])
120 : #define WERASE_CHAR(tty) ((tty)->termios.c_cc[VWERASE])
121 : #define LNEXT_CHAR(tty) ((tty)->termios.c_cc[VLNEXT])
122 : #define EOL2_CHAR(tty) ((tty)->termios.c_cc[VEOL2])
123 :
124 : #define _I_FLAG(tty, f) ((tty)->termios.c_iflag & (f))
125 : #define _O_FLAG(tty, f) ((tty)->termios.c_oflag & (f))
126 : #define _C_FLAG(tty, f) ((tty)->termios.c_cflag & (f))
127 : #define _L_FLAG(tty, f) ((tty)->termios.c_lflag & (f))
128 :
129 : #define I_IGNBRK(tty) _I_FLAG((tty), IGNBRK)
130 : #define I_BRKINT(tty) _I_FLAG((tty), BRKINT)
131 : #define I_IGNPAR(tty) _I_FLAG((tty), IGNPAR)
132 : #define I_PARMRK(tty) _I_FLAG((tty), PARMRK)
133 : #define I_INPCK(tty) _I_FLAG((tty), INPCK)
134 : #define I_ISTRIP(tty) _I_FLAG((tty), ISTRIP)
135 : #define I_INLCR(tty) _I_FLAG((tty), INLCR)
136 : #define I_IGNCR(tty) _I_FLAG((tty), IGNCR)
137 : #define I_ICRNL(tty) _I_FLAG((tty), ICRNL)
138 : #define I_IUCLC(tty) _I_FLAG((tty), IUCLC)
139 : #define I_IXON(tty) _I_FLAG((tty), IXON)
140 : #define I_IXANY(tty) _I_FLAG((tty), IXANY)
141 : #define I_IXOFF(tty) _I_FLAG((tty), IXOFF)
142 : #define I_IMAXBEL(tty) _I_FLAG((tty), IMAXBEL)
143 : #define I_IUTF8(tty) _I_FLAG((tty), IUTF8)
144 :
145 : #define O_OPOST(tty) _O_FLAG((tty), OPOST)
146 : #define O_OLCUC(tty) _O_FLAG((tty), OLCUC)
147 : #define O_ONLCR(tty) _O_FLAG((tty), ONLCR)
148 : #define O_OCRNL(tty) _O_FLAG((tty), OCRNL)
149 : #define O_ONOCR(tty) _O_FLAG((tty), ONOCR)
150 : #define O_ONLRET(tty) _O_FLAG((tty), ONLRET)
151 : #define O_OFILL(tty) _O_FLAG((tty), OFILL)
152 : #define O_OFDEL(tty) _O_FLAG((tty), OFDEL)
153 : #define O_NLDLY(tty) _O_FLAG((tty), NLDLY)
154 : #define O_CRDLY(tty) _O_FLAG((tty), CRDLY)
155 : #define O_TABDLY(tty) _O_FLAG((tty), TABDLY)
156 : #define O_BSDLY(tty) _O_FLAG((tty), BSDLY)
157 : #define O_VTDLY(tty) _O_FLAG((tty), VTDLY)
158 : #define O_FFDLY(tty) _O_FLAG((tty), FFDLY)
159 :
160 : #define C_BAUD(tty) _C_FLAG((tty), CBAUD)
161 : #define C_CSIZE(tty) _C_FLAG((tty), CSIZE)
162 : #define C_CSTOPB(tty) _C_FLAG((tty), CSTOPB)
163 : #define C_CREAD(tty) _C_FLAG((tty), CREAD)
164 : #define C_PARENB(tty) _C_FLAG((tty), PARENB)
165 : #define C_PARODD(tty) _C_FLAG((tty), PARODD)
166 : #define C_HUPCL(tty) _C_FLAG((tty), HUPCL)
167 : #define C_CLOCAL(tty) _C_FLAG((tty), CLOCAL)
168 : #define C_CIBAUD(tty) _C_FLAG((tty), CIBAUD)
169 : #define C_CRTSCTS(tty) _C_FLAG((tty), CRTSCTS)
170 : #define C_CMSPAR(tty) _C_FLAG((tty), CMSPAR)
171 :
172 : #define L_ISIG(tty) _L_FLAG((tty), ISIG)
173 : #define L_ICANON(tty) _L_FLAG((tty), ICANON)
174 : #define L_XCASE(tty) _L_FLAG((tty), XCASE)
175 : #define L_ECHO(tty) _L_FLAG((tty), ECHO)
176 : #define L_ECHOE(tty) _L_FLAG((tty), ECHOE)
177 : #define L_ECHOK(tty) _L_FLAG((tty), ECHOK)
178 : #define L_ECHONL(tty) _L_FLAG((tty), ECHONL)
179 : #define L_NOFLSH(tty) _L_FLAG((tty), NOFLSH)
180 : #define L_TOSTOP(tty) _L_FLAG((tty), TOSTOP)
181 : #define L_ECHOCTL(tty) _L_FLAG((tty), ECHOCTL)
182 : #define L_ECHOPRT(tty) _L_FLAG((tty), ECHOPRT)
183 : #define L_ECHOKE(tty) _L_FLAG((tty), ECHOKE)
184 : #define L_FLUSHO(tty) _L_FLAG((tty), FLUSHO)
185 : #define L_PENDIN(tty) _L_FLAG((tty), PENDIN)
186 : #define L_IEXTEN(tty) _L_FLAG((tty), IEXTEN)
187 : #define L_EXTPROC(tty) _L_FLAG((tty), EXTPROC)
188 :
189 : struct device;
190 : struct signal_struct;
191 :
192 : /*
193 : * Port level information. Each device keeps its own port level information
194 : * so provide a common structure for those ports wanting to use common support
195 : * routines.
196 : *
197 : * The tty port has a different lifetime to the tty so must be kept apart.
198 : * In addition be careful as tty -> port mappings are valid for the life
199 : * of the tty object but in many cases port -> tty mappings are valid only
200 : * until a hangup so don't use the wrong path.
201 : */
202 :
203 : struct tty_port;
204 :
205 : struct tty_port_operations {
206 : /* Return 1 if the carrier is raised */
207 : int (*carrier_raised)(struct tty_port *port);
208 : /* Control the DTR line */
209 : void (*dtr_rts)(struct tty_port *port, int raise);
210 : /* Called when the last close completes or a hangup finishes
211 : IFF the port was initialized. Do not use to free resources. Called
212 : under the port mutex to serialize against activate/shutdowns */
213 : void (*shutdown)(struct tty_port *port);
214 : /* Called under the port mutex from tty_port_open, serialized using
215 : the port mutex */
216 : /* FIXME: long term getting the tty argument *out* of this would be
217 : good for consoles */
218 : int (*activate)(struct tty_port *port, struct tty_struct *tty);
219 : /* Called on the final put of a port */
220 : void (*destruct)(struct tty_port *port);
221 : };
222 :
223 : struct tty_port_client_operations {
224 : int (*receive_buf)(struct tty_port *port, const unsigned char *, const unsigned char *, size_t);
225 : void (*write_wakeup)(struct tty_port *port);
226 : };
227 :
228 : extern const struct tty_port_client_operations tty_port_default_client_ops;
229 :
230 : struct tty_port {
231 : struct tty_bufhead buf; /* Locked internally */
232 : struct tty_struct *tty; /* Back pointer */
233 : struct tty_struct *itty; /* internal back ptr */
234 : const struct tty_port_operations *ops; /* Port operations */
235 : const struct tty_port_client_operations *client_ops; /* Port client operations */
236 : spinlock_t lock; /* Lock protecting tty field */
237 : int blocked_open; /* Waiting to open */
238 : int count; /* Usage count */
239 : wait_queue_head_t open_wait; /* Open waiters */
240 : wait_queue_head_t delta_msr_wait; /* Modem status change */
241 : unsigned long flags; /* User TTY flags ASYNC_ */
242 : unsigned long iflags; /* Internal flags TTY_PORT_ */
243 : unsigned char console:1; /* port is a console */
244 : struct mutex mutex; /* Locking */
245 : struct mutex buf_mutex; /* Buffer alloc lock */
246 : unsigned char *xmit_buf; /* Optional buffer */
247 : unsigned int close_delay; /* Close port delay */
248 : unsigned int closing_wait; /* Delay for output */
249 : int drain_delay; /* Set to zero if no pure time
250 : based drain is needed else
251 : set to size of fifo */
252 : struct kref kref; /* Ref counter */
253 : void *client_data;
254 : };
255 :
256 : /* tty_port::iflags bits -- use atomic bit ops */
257 : #define TTY_PORT_INITIALIZED 0 /* device is initialized */
258 : #define TTY_PORT_SUSPENDED 1 /* device is suspended */
259 : #define TTY_PORT_ACTIVE 2 /* device is open */
260 :
261 : /*
262 : * uart drivers: use the uart_port::status field and the UPSTAT_* defines
263 : * for s/w-based flow control steering and carrier detection status
264 : */
265 : #define TTY_PORT_CTS_FLOW 3 /* h/w flow control enabled */
266 : #define TTY_PORT_CHECK_CD 4 /* carrier detect enabled */
267 : #define TTY_PORT_KOPENED 5 /* device exclusively opened by
268 : kernel */
269 :
270 : /*
271 : * Where all of the state associated with a tty is kept while the tty
272 : * is open. Since the termios state should be kept even if the tty
273 : * has been closed --- for things like the baud rate, etc --- it is
274 : * not stored here, but rather a pointer to the real state is stored
275 : * here. Possible the winsize structure should have the same
276 : * treatment, but (1) the default 80x24 is usually right and (2) it's
277 : * most often used by a windowing system, which will set the correct
278 : * size each time the window is created or resized anyway.
279 : * - TYT, 9/14/92
280 : */
281 :
282 : struct tty_operations;
283 :
284 : struct tty_struct {
285 : int magic;
286 : struct kref kref;
287 : struct device *dev;
288 : struct tty_driver *driver;
289 : const struct tty_operations *ops;
290 : int index;
291 :
292 : /* Protects ldisc changes: Lock tty not pty */
293 : struct ld_semaphore ldisc_sem;
294 : struct tty_ldisc *ldisc;
295 :
296 : struct mutex atomic_write_lock;
297 : struct mutex legacy_mutex;
298 : struct mutex throttle_mutex;
299 : struct rw_semaphore termios_rwsem;
300 : struct mutex winsize_mutex;
301 : spinlock_t ctrl_lock;
302 : spinlock_t flow_lock;
303 : /* Termios values are protected by the termios rwsem */
304 : struct ktermios termios, termios_locked;
305 : char name[64];
306 : struct pid *pgrp; /* Protected by ctrl lock */
307 : /*
308 : * Writes protected by both ctrl lock and legacy mutex, readers must use
309 : * at least one of them.
310 : */
311 : struct pid *session;
312 : unsigned long flags;
313 : int count;
314 : struct winsize winsize; /* winsize_mutex */
315 : unsigned long stopped:1, /* flow_lock */
316 : flow_stopped:1,
317 : unused:BITS_PER_LONG - 2;
318 : int hw_stopped;
319 : unsigned long ctrl_status:8, /* ctrl_lock */
320 : packet:1,
321 : unused_ctrl:BITS_PER_LONG - 9;
322 : unsigned int receive_room; /* Bytes free for queue */
323 : int flow_change;
324 :
325 : struct tty_struct *link;
326 : struct fasync_struct *fasync;
327 : wait_queue_head_t write_wait;
328 : wait_queue_head_t read_wait;
329 : struct work_struct hangup_work;
330 : void *disc_data;
331 : void *driver_data;
332 : spinlock_t files_lock; /* protects tty_files list */
333 : struct list_head tty_files;
334 :
335 : #define N_TTY_BUF_SIZE 4096
336 :
337 : int closing;
338 : unsigned char *write_buf;
339 : int write_cnt;
340 : /* If the tty has a pending do_SAK, queue it here - akpm */
341 : struct work_struct SAK_work;
342 : struct tty_port *port;
343 : } __randomize_layout;
344 :
345 : /* Each of a tty's open files has private_data pointing to tty_file_private */
346 : struct tty_file_private {
347 : struct tty_struct *tty;
348 : struct file *file;
349 : struct list_head list;
350 : };
351 :
352 : /* tty magic number */
353 : #define TTY_MAGIC 0x5401
354 :
355 : /*
356 : * These bits are used in the flags field of the tty structure.
357 : *
358 : * So that interrupts won't be able to mess up the queues,
359 : * copy_to_cooked must be atomic with respect to itself, as must
360 : * tty->write. Thus, you must use the inline functions set_bit() and
361 : * clear_bit() to make things atomic.
362 : */
363 : #define TTY_THROTTLED 0 /* Call unthrottle() at threshold min */
364 : #define TTY_IO_ERROR 1 /* Cause an I/O error (may be no ldisc too) */
365 : #define TTY_OTHER_CLOSED 2 /* Other side (if any) has closed */
366 : #define TTY_EXCLUSIVE 3 /* Exclusive open mode */
367 : #define TTY_DO_WRITE_WAKEUP 5 /* Call write_wakeup after queuing new */
368 : #define TTY_LDISC_OPEN 11 /* Line discipline is open */
369 : #define TTY_PTY_LOCK 16 /* pty private */
370 : #define TTY_NO_WRITE_SPLIT 17 /* Preserve write boundaries to driver */
371 : #define TTY_HUPPED 18 /* Post driver->hangup() */
372 : #define TTY_HUPPING 19 /* Hangup in progress */
373 : #define TTY_LDISC_CHANGING 20 /* Change pending - non-block IO */
374 : #define TTY_LDISC_HALTED 22 /* Line discipline is halted */
375 :
376 : /* Values for tty->flow_change */
377 : #define TTY_THROTTLE_SAFE 1
378 : #define TTY_UNTHROTTLE_SAFE 2
379 :
380 0 : static inline void __tty_set_flow_change(struct tty_struct *tty, int val)
381 : {
382 0 : tty->flow_change = val;
383 0 : }
384 :
385 0 : static inline void tty_set_flow_change(struct tty_struct *tty, int val)
386 : {
387 0 : tty->flow_change = val;
388 0 : smp_mb();
389 : }
390 :
391 0 : static inline bool tty_io_nonblock(struct tty_struct *tty, struct file *file)
392 : {
393 0 : return file->f_flags & O_NONBLOCK ||
394 0 : test_bit(TTY_LDISC_CHANGING, &tty->flags);
395 : }
396 :
397 556 : static inline bool tty_io_error(struct tty_struct *tty)
398 : {
399 556 : return test_bit(TTY_IO_ERROR, &tty->flags);
400 : }
401 :
402 0 : static inline bool tty_throttled(struct tty_struct *tty)
403 : {
404 0 : return test_bit(TTY_THROTTLED, &tty->flags);
405 : }
406 :
407 : #ifdef CONFIG_TTY
408 : extern void tty_kref_put(struct tty_struct *tty);
409 : extern struct pid *tty_get_pgrp(struct tty_struct *tty);
410 : extern void tty_vhangup_self(void);
411 : extern void disassociate_ctty(int priv);
412 : extern dev_t tty_devnum(struct tty_struct *tty);
413 : extern void proc_clear_tty(struct task_struct *p);
414 : extern struct tty_struct *get_current_tty(void);
415 : /* tty_io.c */
416 : extern int __init tty_init(void);
417 : extern const char *tty_name(const struct tty_struct *tty);
418 : extern struct tty_struct *tty_kopen_exclusive(dev_t device);
419 : extern struct tty_struct *tty_kopen_shared(dev_t device);
420 : extern void tty_kclose(struct tty_struct *tty);
421 : extern int tty_dev_name_to_number(const char *name, dev_t *number);
422 : extern int tty_ldisc_lock(struct tty_struct *tty, unsigned long timeout);
423 : extern void tty_ldisc_unlock(struct tty_struct *tty);
424 : extern ssize_t redirected_tty_write(struct kiocb *, struct iov_iter *);
425 : extern struct file *tty_release_redirect(struct tty_struct *tty);
426 : #else
427 : static inline void tty_kref_put(struct tty_struct *tty)
428 : { }
429 : static inline struct pid *tty_get_pgrp(struct tty_struct *tty)
430 : { return NULL; }
431 : static inline void tty_vhangup_self(void)
432 : { }
433 : static inline void disassociate_ctty(int priv)
434 : { }
435 : static inline dev_t tty_devnum(struct tty_struct *tty)
436 : { return 0; }
437 : static inline void proc_clear_tty(struct task_struct *p)
438 : { }
439 : static inline struct tty_struct *get_current_tty(void)
440 : { return NULL; }
441 : /* tty_io.c */
442 : static inline int __init tty_init(void)
443 : { return 0; }
444 : static inline const char *tty_name(const struct tty_struct *tty)
445 : { return "(none)"; }
446 : static inline struct tty_struct *tty_kopen_exclusive(dev_t device)
447 : { return ERR_PTR(-ENODEV); }
448 : static inline void tty_kclose(struct tty_struct *tty)
449 : { }
450 : static inline int tty_dev_name_to_number(const char *name, dev_t *number)
451 : { return -ENOTSUPP; }
452 : #endif
453 :
454 : extern struct ktermios tty_std_termios;
455 :
456 : extern int vcs_init(void);
457 :
458 : extern struct class *tty_class;
459 :
460 : /**
461 : * tty_kref_get - get a tty reference
462 : * @tty: tty device
463 : *
464 : * Return a new reference to a tty object. The caller must hold
465 : * sufficient locks/counts to ensure that their existing reference cannot
466 : * go away
467 : */
468 :
469 2478 : static inline struct tty_struct *tty_kref_get(struct tty_struct *tty)
470 : {
471 2478 : if (tty)
472 1216 : kref_get(&tty->kref);
473 2476 : return tty;
474 : }
475 :
476 : extern const char *tty_driver_name(const struct tty_struct *tty);
477 : extern void tty_wait_until_sent(struct tty_struct *tty, long timeout);
478 : extern int __tty_check_change(struct tty_struct *tty, int sig);
479 : extern int tty_check_change(struct tty_struct *tty);
480 : extern void __stop_tty(struct tty_struct *tty);
481 : extern void stop_tty(struct tty_struct *tty);
482 : extern void __start_tty(struct tty_struct *tty);
483 : extern void start_tty(struct tty_struct *tty);
484 : extern int tty_register_driver(struct tty_driver *driver);
485 : extern int tty_unregister_driver(struct tty_driver *driver);
486 : extern struct device *tty_register_device(struct tty_driver *driver,
487 : unsigned index, struct device *dev);
488 : extern struct device *tty_register_device_attr(struct tty_driver *driver,
489 : unsigned index, struct device *device,
490 : void *drvdata,
491 : const struct attribute_group **attr_grp);
492 : extern void tty_unregister_device(struct tty_driver *driver, unsigned index);
493 : extern void tty_write_message(struct tty_struct *tty, char *msg);
494 : extern int tty_send_xchar(struct tty_struct *tty, char ch);
495 : extern int tty_put_char(struct tty_struct *tty, unsigned char c);
496 : extern int tty_chars_in_buffer(struct tty_struct *tty);
497 : extern int tty_write_room(struct tty_struct *tty);
498 : extern void tty_driver_flush_buffer(struct tty_struct *tty);
499 : extern void tty_throttle(struct tty_struct *tty);
500 : extern void tty_unthrottle(struct tty_struct *tty);
501 : extern int tty_throttle_safe(struct tty_struct *tty);
502 : extern int tty_unthrottle_safe(struct tty_struct *tty);
503 : extern int tty_do_resize(struct tty_struct *tty, struct winsize *ws);
504 : extern int tty_get_icount(struct tty_struct *tty,
505 : struct serial_icounter_struct *icount);
506 : extern int is_current_pgrp_orphaned(void);
507 : extern void tty_hangup(struct tty_struct *tty);
508 : extern void tty_vhangup(struct tty_struct *tty);
509 : extern void tty_vhangup_session(struct tty_struct *tty);
510 : extern int tty_hung_up_p(struct file *filp);
511 : extern void do_SAK(struct tty_struct *tty);
512 : extern void __do_SAK(struct tty_struct *tty);
513 : extern void tty_open_proc_set_tty(struct file *filp, struct tty_struct *tty);
514 : extern int tty_signal_session_leader(struct tty_struct *tty, int exit_session);
515 : extern void session_clear_tty(struct pid *session);
516 : extern void no_tty(void);
517 : extern void tty_buffer_free_all(struct tty_port *port);
518 : extern void tty_buffer_flush(struct tty_struct *tty, struct tty_ldisc *ld);
519 : extern void tty_buffer_init(struct tty_port *port);
520 : extern void tty_buffer_set_lock_subclass(struct tty_port *port);
521 : extern bool tty_buffer_restart_work(struct tty_port *port);
522 : extern bool tty_buffer_cancel_work(struct tty_port *port);
523 : extern void tty_buffer_flush_work(struct tty_port *port);
524 : extern speed_t tty_termios_baud_rate(struct ktermios *termios);
525 : extern speed_t tty_termios_input_baud_rate(struct ktermios *termios);
526 : extern void tty_termios_encode_baud_rate(struct ktermios *termios,
527 : speed_t ibaud, speed_t obaud);
528 : extern void tty_encode_baud_rate(struct tty_struct *tty,
529 : speed_t ibaud, speed_t obaud);
530 :
531 : /**
532 : * tty_get_baud_rate - get tty bit rates
533 : * @tty: tty to query
534 : *
535 : * Returns the baud rate as an integer for this terminal. The
536 : * termios lock must be held by the caller and the terminal bit
537 : * flags may be updated.
538 : *
539 : * Locking: none
540 : */
541 0 : static inline speed_t tty_get_baud_rate(struct tty_struct *tty)
542 : {
543 0 : return tty_termios_baud_rate(&tty->termios);
544 : }
545 :
546 : extern void tty_termios_copy_hw(struct ktermios *new, struct ktermios *old);
547 : extern int tty_termios_hw_change(const struct ktermios *a, const struct ktermios *b);
548 : extern int tty_set_termios(struct tty_struct *tty, struct ktermios *kt);
549 :
550 : extern struct tty_ldisc *tty_ldisc_ref(struct tty_struct *);
551 : extern void tty_ldisc_deref(struct tty_ldisc *);
552 : extern struct tty_ldisc *tty_ldisc_ref_wait(struct tty_struct *);
553 : extern void tty_ldisc_hangup(struct tty_struct *tty, bool reset);
554 : extern int tty_ldisc_reinit(struct tty_struct *tty, int disc);
555 : extern const struct seq_operations tty_ldiscs_seq_ops;
556 :
557 : extern void tty_wakeup(struct tty_struct *tty);
558 : extern void tty_ldisc_flush(struct tty_struct *tty);
559 :
560 : extern long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
561 : extern int tty_mode_ioctl(struct tty_struct *tty, struct file *file,
562 : unsigned int cmd, unsigned long arg);
563 : extern long tty_jobctrl_ioctl(struct tty_struct *tty, struct tty_struct *real_tty,
564 : struct file *file, unsigned int cmd, unsigned long arg);
565 : extern int tty_perform_flush(struct tty_struct *tty, unsigned long arg);
566 : extern void tty_default_fops(struct file_operations *fops);
567 : extern struct tty_struct *alloc_tty_struct(struct tty_driver *driver, int idx);
568 : extern int tty_alloc_file(struct file *file);
569 : extern void tty_add_file(struct tty_struct *tty, struct file *file);
570 : extern void tty_free_file(struct file *file);
571 : extern struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx);
572 : extern void tty_release_struct(struct tty_struct *tty, int idx);
573 : extern int tty_release(struct inode *inode, struct file *filp);
574 : extern void tty_init_termios(struct tty_struct *tty);
575 : extern void tty_save_termios(struct tty_struct *tty);
576 : extern int tty_standard_install(struct tty_driver *driver,
577 : struct tty_struct *tty);
578 :
579 : extern struct mutex tty_mutex;
580 :
581 : #define tty_is_writelocked(tty) (mutex_is_locked(&tty->atomic_write_lock))
582 :
583 : extern void tty_port_init(struct tty_port *port);
584 : extern void tty_port_link_device(struct tty_port *port,
585 : struct tty_driver *driver, unsigned index);
586 : extern struct device *tty_port_register_device(struct tty_port *port,
587 : struct tty_driver *driver, unsigned index,
588 : struct device *device);
589 : extern struct device *tty_port_register_device_attr(struct tty_port *port,
590 : struct tty_driver *driver, unsigned index,
591 : struct device *device, void *drvdata,
592 : const struct attribute_group **attr_grp);
593 : extern struct device *tty_port_register_device_serdev(struct tty_port *port,
594 : struct tty_driver *driver, unsigned index,
595 : struct device *device);
596 : extern struct device *tty_port_register_device_attr_serdev(struct tty_port *port,
597 : struct tty_driver *driver, unsigned index,
598 : struct device *device, void *drvdata,
599 : const struct attribute_group **attr_grp);
600 : extern void tty_port_unregister_device(struct tty_port *port,
601 : struct tty_driver *driver, unsigned index);
602 : extern int tty_port_alloc_xmit_buf(struct tty_port *port);
603 : extern void tty_port_free_xmit_buf(struct tty_port *port);
604 : extern void tty_port_destroy(struct tty_port *port);
605 : extern void tty_port_put(struct tty_port *port);
606 :
607 28 : static inline struct tty_port *tty_port_get(struct tty_port *port)
608 : {
609 28 : if (port && kref_get_unless_zero(&port->kref))
610 28 : return port;
611 : return NULL;
612 : }
613 :
614 : /* If the cts flow control is enabled, return true. */
615 : static inline bool tty_port_cts_enabled(const struct tty_port *port)
616 : {
617 : return test_bit(TTY_PORT_CTS_FLOW, &port->iflags);
618 : }
619 :
620 : static inline void tty_port_set_cts_flow(struct tty_port *port, bool val)
621 : {
622 : assign_bit(TTY_PORT_CTS_FLOW, &port->iflags, val);
623 : }
624 :
625 0 : static inline bool tty_port_active(const struct tty_port *port)
626 : {
627 0 : return test_bit(TTY_PORT_ACTIVE, &port->iflags);
628 : }
629 :
630 270 : static inline void tty_port_set_active(struct tty_port *port, bool val)
631 : {
632 270 : assign_bit(TTY_PORT_ACTIVE, &port->iflags, val);
633 270 : }
634 :
635 : static inline bool tty_port_check_carrier(const struct tty_port *port)
636 : {
637 : return test_bit(TTY_PORT_CHECK_CD, &port->iflags);
638 : }
639 :
640 : static inline void tty_port_set_check_carrier(struct tty_port *port, bool val)
641 : {
642 : assign_bit(TTY_PORT_CHECK_CD, &port->iflags, val);
643 : }
644 :
645 0 : static inline bool tty_port_suspended(const struct tty_port *port)
646 : {
647 0 : return test_bit(TTY_PORT_SUSPENDED, &port->iflags);
648 : }
649 :
650 0 : static inline void tty_port_set_suspended(struct tty_port *port, bool val)
651 : {
652 0 : assign_bit(TTY_PORT_SUSPENDED, &port->iflags, val);
653 0 : }
654 :
655 271 : static inline bool tty_port_initialized(const struct tty_port *port)
656 : {
657 271 : return test_bit(TTY_PORT_INITIALIZED, &port->iflags);
658 : }
659 :
660 1 : static inline void tty_port_set_initialized(struct tty_port *port, bool val)
661 : {
662 1 : assign_bit(TTY_PORT_INITIALIZED, &port->iflags, val);
663 1 : }
664 :
665 364 : static inline bool tty_port_kopened(const struct tty_port *port)
666 : {
667 364 : return test_bit(TTY_PORT_KOPENED, &port->iflags);
668 : }
669 :
670 0 : static inline void tty_port_set_kopened(struct tty_port *port, bool val)
671 : {
672 0 : assign_bit(TTY_PORT_KOPENED, &port->iflags, val);
673 0 : }
674 :
675 : extern struct tty_struct *tty_port_tty_get(struct tty_port *port);
676 : extern void tty_port_tty_set(struct tty_port *port, struct tty_struct *tty);
677 : extern int tty_port_carrier_raised(struct tty_port *port);
678 : extern void tty_port_raise_dtr_rts(struct tty_port *port);
679 : extern void tty_port_lower_dtr_rts(struct tty_port *port);
680 : extern void tty_port_hangup(struct tty_port *port);
681 : extern void tty_port_tty_hangup(struct tty_port *port, bool check_clocal);
682 : extern void tty_port_tty_wakeup(struct tty_port *port);
683 : extern int tty_port_block_til_ready(struct tty_port *port,
684 : struct tty_struct *tty, struct file *filp);
685 : extern int tty_port_close_start(struct tty_port *port,
686 : struct tty_struct *tty, struct file *filp);
687 : extern void tty_port_close_end(struct tty_port *port, struct tty_struct *tty);
688 : extern void tty_port_close(struct tty_port *port,
689 : struct tty_struct *tty, struct file *filp);
690 : extern int tty_port_install(struct tty_port *port, struct tty_driver *driver,
691 : struct tty_struct *tty);
692 : extern int tty_port_open(struct tty_port *port,
693 : struct tty_struct *tty, struct file *filp);
694 0 : static inline int tty_port_users(struct tty_port *port)
695 : {
696 0 : return port->count + port->blocked_open;
697 : }
698 :
699 : extern int tty_register_ldisc(int disc, struct tty_ldisc_ops *new_ldisc);
700 : extern int tty_unregister_ldisc(int disc);
701 : extern int tty_set_ldisc(struct tty_struct *tty, int disc);
702 : extern int tty_ldisc_setup(struct tty_struct *tty, struct tty_struct *o_tty);
703 : extern void tty_ldisc_release(struct tty_struct *tty);
704 : extern int __must_check tty_ldisc_init(struct tty_struct *tty);
705 : extern void tty_ldisc_deinit(struct tty_struct *tty);
706 : extern int tty_ldisc_receive_buf(struct tty_ldisc *ld, const unsigned char *p,
707 : char *f, int count);
708 : extern void tty_sysctl_init(void);
709 :
710 : /* n_tty.c */
711 : extern void n_tty_inherit_ops(struct tty_ldisc_ops *ops);
712 : #ifdef CONFIG_TTY
713 : extern void __init n_tty_init(void);
714 : #else
715 : static inline void n_tty_init(void) { }
716 : #endif
717 :
718 : /* tty_audit.c */
719 : #ifdef CONFIG_AUDIT
720 : extern void tty_audit_add_data(struct tty_struct *tty, const void *data,
721 : size_t size);
722 : extern void tty_audit_exit(void);
723 : extern void tty_audit_fork(struct signal_struct *sig);
724 : extern void tty_audit_tiocsti(struct tty_struct *tty, char ch);
725 : extern int tty_audit_push(void);
726 : #else
727 0 : static inline void tty_audit_add_data(struct tty_struct *tty, const void *data,
728 : size_t size)
729 : {
730 0 : }
731 0 : static inline void tty_audit_tiocsti(struct tty_struct *tty, char ch)
732 : {
733 0 : }
734 : static inline void tty_audit_exit(void)
735 : {
736 : }
737 910 : static inline void tty_audit_fork(struct signal_struct *sig)
738 : {
739 910 : }
740 0 : static inline int tty_audit_push(void)
741 : {
742 0 : return 0;
743 : }
744 : #endif
745 :
746 : /* tty_ioctl.c */
747 : extern int n_tty_ioctl_helper(struct tty_struct *tty, struct file *file,
748 : unsigned int cmd, unsigned long arg);
749 :
750 : /* vt.c */
751 :
752 : extern int vt_ioctl(struct tty_struct *tty,
753 : unsigned int cmd, unsigned long arg);
754 :
755 : extern long vt_compat_ioctl(struct tty_struct *tty,
756 : unsigned int cmd, unsigned long arg);
757 :
758 : /* tty_mutex.c */
759 : /* functions for preparation of BKL removal */
760 : extern void tty_lock(struct tty_struct *tty);
761 : extern int tty_lock_interruptible(struct tty_struct *tty);
762 : extern void tty_unlock(struct tty_struct *tty);
763 : extern void tty_lock_slave(struct tty_struct *tty);
764 : extern void tty_unlock_slave(struct tty_struct *tty);
765 : extern void tty_set_lock_subclass(struct tty_struct *tty);
766 :
767 : #ifdef CONFIG_PROC_FS
768 : extern void proc_tty_register_driver(struct tty_driver *);
769 : extern void proc_tty_unregister_driver(struct tty_driver *);
770 : #else
771 : static inline void proc_tty_register_driver(struct tty_driver *d) {}
772 : static inline void proc_tty_unregister_driver(struct tty_driver *d) {}
773 : #endif
774 :
775 : #define tty_msg(fn, tty, f, ...) \
776 : fn("%s %s: " f, tty_driver_name(tty), tty_name(tty), ##__VA_ARGS__)
777 :
778 : #define tty_debug(tty, f, ...) tty_msg(pr_debug, tty, f, ##__VA_ARGS__)
779 : #define tty_info(tty, f, ...) tty_msg(pr_info, tty, f, ##__VA_ARGS__)
780 : #define tty_notice(tty, f, ...) tty_msg(pr_notice, tty, f, ##__VA_ARGS__)
781 : #define tty_warn(tty, f, ...) tty_msg(pr_warn, tty, f, ##__VA_ARGS__)
782 : #define tty_err(tty, f, ...) tty_msg(pr_err, tty, f, ##__VA_ARGS__)
783 :
784 : #define tty_info_ratelimited(tty, f, ...) \
785 : tty_msg(pr_info_ratelimited, tty, f, ##__VA_ARGS__)
786 :
787 : #endif
|