Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
linux
tty.h
Go to the documentation of this file.
1
#ifndef _LINUX_TTY_H
2
#define _LINUX_TTY_H
3
4
#include <linux/fs.h>
5
#include <
linux/major.h
>
6
#include <
linux/termios.h
>
7
#include <
linux/workqueue.h
>
8
#include <
linux/tty_driver.h
>
9
#include <
linux/tty_ldisc.h
>
10
#include <
linux/mutex.h
>
11
#include <
linux/tty_flags.h
>
12
#include <
uapi/linux/tty.h
>
13
14
15
16
/*
17
* (Note: the *_driver.minor_start values 1, 64, 128, 192 are
18
* hardcoded at present.)
19
*/
20
#define NR_UNIX98_PTY_DEFAULT 4096
/* Default maximum for Unix98 ptys */
21
#define NR_UNIX98_PTY_RESERVE 1024
/* Default reserve for main devpts */
22
#define NR_UNIX98_PTY_MAX (1 << MINORBITS)
/* Absolute limit */
23
24
/*
25
* This character is the same as _POSIX_VDISABLE: it cannot be used as
26
* a c_cc[] character, but indicates that a particular special character
27
* isn't in use (eg VINTR has no character etc)
28
*/
29
#define __DISABLED_CHAR '\0'
30
31
struct
tty_buffer
{
32
struct
tty_buffer
*
next
;
33
char
*
char_buf_ptr
;
34
unsigned
char
*
flag_buf_ptr
;
35
int
used
;
36
int
size
;
37
int
commit
;
38
int
read
;
39
/* Data points here */
40
unsigned
long
data
[0];
41
};
42
43
/*
44
* We default to dicing tty buffer allocations to this many characters
45
* in order to avoid multiple page allocations. We know the size of
46
* tty_buffer itself but it must also be taken into account that the
47
* the buffer is 256 byte aligned. See tty_buffer_find for the allocation
48
* logic this must match
49
*/
50
51
#define TTY_BUFFER_PAGE (((PAGE_SIZE - sizeof(struct tty_buffer)) / 2) & ~0xFF)
52
53
54
struct
tty_bufhead
{
55
struct
work_struct
work
;
56
spinlock_t
lock
;
57
struct
tty_buffer
*
head
;
/* Queue head */
58
struct
tty_buffer
*
tail
;
/* Active buffer */
59
struct
tty_buffer
*
free
;
/* Free queue head */
60
int
memory_used
;
/* Buffer space used excluding
61
free queue */
62
};
63
/*
64
* When a break, frame error, or parity error happens, these codes are
65
* stuffed into the flags buffer.
66
*/
67
#define TTY_NORMAL 0
68
#define TTY_BREAK 1
69
#define TTY_FRAME 2
70
#define TTY_PARITY 3
71
#define TTY_OVERRUN 4
72
73
#define INTR_CHAR(tty) ((tty)->termios.c_cc[VINTR])
74
#define QUIT_CHAR(tty) ((tty)->termios.c_cc[VQUIT])
75
#define ERASE_CHAR(tty) ((tty)->termios.c_cc[VERASE])
76
#define KILL_CHAR(tty) ((tty)->termios.c_cc[VKILL])
77
#define EOF_CHAR(tty) ((tty)->termios.c_cc[VEOF])
78
#define TIME_CHAR(tty) ((tty)->termios.c_cc[VTIME])
79
#define MIN_CHAR(tty) ((tty)->termios.c_cc[VMIN])
80
#define SWTC_CHAR(tty) ((tty)->termios.c_cc[VSWTC])
81
#define START_CHAR(tty) ((tty)->termios.c_cc[VSTART])
82
#define STOP_CHAR(tty) ((tty)->termios.c_cc[VSTOP])
83
#define SUSP_CHAR(tty) ((tty)->termios.c_cc[VSUSP])
84
#define EOL_CHAR(tty) ((tty)->termios.c_cc[VEOL])
85
#define REPRINT_CHAR(tty) ((tty)->termios.c_cc[VREPRINT])
86
#define DISCARD_CHAR(tty) ((tty)->termios.c_cc[VDISCARD])
87
#define WERASE_CHAR(tty) ((tty)->termios.c_cc[VWERASE])
88
#define LNEXT_CHAR(tty) ((tty)->termios.c_cc[VLNEXT])
89
#define EOL2_CHAR(tty) ((tty)->termios.c_cc[VEOL2])
90
91
#define _I_FLAG(tty, f) ((tty)->termios.c_iflag & (f))
92
#define _O_FLAG(tty, f) ((tty)->termios.c_oflag & (f))
93
#define _C_FLAG(tty, f) ((tty)->termios.c_cflag & (f))
94
#define _L_FLAG(tty, f) ((tty)->termios.c_lflag & (f))
95
96
#define I_IGNBRK(tty) _I_FLAG((tty), IGNBRK)
97
#define I_BRKINT(tty) _I_FLAG((tty), BRKINT)
98
#define I_IGNPAR(tty) _I_FLAG((tty), IGNPAR)
99
#define I_PARMRK(tty) _I_FLAG((tty), PARMRK)
100
#define I_INPCK(tty) _I_FLAG((tty), INPCK)
101
#define I_ISTRIP(tty) _I_FLAG((tty), ISTRIP)
102
#define I_INLCR(tty) _I_FLAG((tty), INLCR)
103
#define I_IGNCR(tty) _I_FLAG((tty), IGNCR)
104
#define I_ICRNL(tty) _I_FLAG((tty), ICRNL)
105
#define I_IUCLC(tty) _I_FLAG((tty), IUCLC)
106
#define I_IXON(tty) _I_FLAG((tty), IXON)
107
#define I_IXANY(tty) _I_FLAG((tty), IXANY)
108
#define I_IXOFF(tty) _I_FLAG((tty), IXOFF)
109
#define I_IMAXBEL(tty) _I_FLAG((tty), IMAXBEL)
110
#define I_IUTF8(tty) _I_FLAG((tty), IUTF8)
111
112
#define O_OPOST(tty) _O_FLAG((tty), OPOST)
113
#define O_OLCUC(tty) _O_FLAG((tty), OLCUC)
114
#define O_ONLCR(tty) _O_FLAG((tty), ONLCR)
115
#define O_OCRNL(tty) _O_FLAG((tty), OCRNL)
116
#define O_ONOCR(tty) _O_FLAG((tty), ONOCR)
117
#define O_ONLRET(tty) _O_FLAG((tty), ONLRET)
118
#define O_OFILL(tty) _O_FLAG((tty), OFILL)
119
#define O_OFDEL(tty) _O_FLAG((tty), OFDEL)
120
#define O_NLDLY(tty) _O_FLAG((tty), NLDLY)
121
#define O_CRDLY(tty) _O_FLAG((tty), CRDLY)
122
#define O_TABDLY(tty) _O_FLAG((tty), TABDLY)
123
#define O_BSDLY(tty) _O_FLAG((tty), BSDLY)
124
#define O_VTDLY(tty) _O_FLAG((tty), VTDLY)
125
#define O_FFDLY(tty) _O_FLAG((tty), FFDLY)
126
127
#define C_BAUD(tty) _C_FLAG((tty), CBAUD)
128
#define C_CSIZE(tty) _C_FLAG((tty), CSIZE)
129
#define C_CSTOPB(tty) _C_FLAG((tty), CSTOPB)
130
#define C_CREAD(tty) _C_FLAG((tty), CREAD)
131
#define C_PARENB(tty) _C_FLAG((tty), PARENB)
132
#define C_PARODD(tty) _C_FLAG((tty), PARODD)
133
#define C_HUPCL(tty) _C_FLAG((tty), HUPCL)
134
#define C_CLOCAL(tty) _C_FLAG((tty), CLOCAL)
135
#define C_CIBAUD(tty) _C_FLAG((tty), CIBAUD)
136
#define C_CRTSCTS(tty) _C_FLAG((tty), CRTSCTS)
137
138
#define L_ISIG(tty) _L_FLAG((tty), ISIG)
139
#define L_ICANON(tty) _L_FLAG((tty), ICANON)
140
#define L_XCASE(tty) _L_FLAG((tty), XCASE)
141
#define L_ECHO(tty) _L_FLAG((tty), ECHO)
142
#define L_ECHOE(tty) _L_FLAG((tty), ECHOE)
143
#define L_ECHOK(tty) _L_FLAG((tty), ECHOK)
144
#define L_ECHONL(tty) _L_FLAG((tty), ECHONL)
145
#define L_NOFLSH(tty) _L_FLAG((tty), NOFLSH)
146
#define L_TOSTOP(tty) _L_FLAG((tty), TOSTOP)
147
#define L_ECHOCTL(tty) _L_FLAG((tty), ECHOCTL)
148
#define L_ECHOPRT(tty) _L_FLAG((tty), ECHOPRT)
149
#define L_ECHOKE(tty) _L_FLAG((tty), ECHOKE)
150
#define L_FLUSHO(tty) _L_FLAG((tty), FLUSHO)
151
#define L_PENDIN(tty) _L_FLAG((tty), PENDIN)
152
#define L_IEXTEN(tty) _L_FLAG((tty), IEXTEN)
153
#define L_EXTPROC(tty) _L_FLAG((tty), EXTPROC)
154
155
struct
device
;
156
struct
signal_struct
;
157
158
/*
159
* Port level information. Each device keeps its own port level information
160
* so provide a common structure for those ports wanting to use common support
161
* routines.
162
*
163
* The tty port has a different lifetime to the tty so must be kept apart.
164
* In addition be careful as tty -> port mappings are valid for the life
165
* of the tty object but in many cases port -> tty mappings are valid only
166
* until a hangup so don't use the wrong path.
167
*/
168
169
struct
tty_port
;
170
171
struct
tty_port_operations
{
172
/* Return 1 if the carrier is raised */
173
int
(*
carrier_raised
)(
struct
tty_port
*
port
);
174
/* Control the DTR line */
175
void
(*
dtr_rts
)(
struct
tty_port
*
port
,
int
raise
);
176
/* Called when the last close completes or a hangup finishes
177
IFF the port was initialized. Do not use to free resources. Called
178
under the port mutex to serialize against activate/shutdowns */
179
void
(*
shutdown
)(
struct
tty_port
*
port
);
180
void
(*
drop
)(
struct
tty_port
*
port
);
181
/* Called under the port mutex from tty_port_open, serialized using
182
the port mutex */
183
/* FIXME: long term getting the tty argument *out* of this would be
184
good for consoles */
185
int
(*
activate
)(
struct
tty_port
*
port
,
struct
tty_struct
*tty);
186
/* Called on the final put of a port */
187
void
(*
destruct
)(
struct
tty_port
*
port
);
188
};
189
190
struct
tty_port
{
191
struct
tty_struct
*
tty
;
/* Back pointer */
192
const
struct
tty_port_operations
*
ops
;
/* Port operations */
193
spinlock_t
lock
;
/* Lock protecting tty field */
194
int
blocked_open
;
/* Waiting to open */
195
int
count
;
/* Usage count */
196
wait_queue_head_t
open_wait
;
/* Open waiters */
197
wait_queue_head_t
close_wait
;
/* Close waiters */
198
wait_queue_head_t
delta_msr_wait
;
/* Modem status change */
199
unsigned
long
flags
;
/* TTY flags ASY_*/
200
unsigned
char
console
:1;
/* port is a console */
201
struct
mutex
mutex
;
/* Locking */
202
struct
mutex
buf_mutex
;
/* Buffer alloc lock */
203
unsigned
char
*
xmit_buf
;
/* Optional buffer */
204
unsigned
int
close_delay
;
/* Close port delay */
205
unsigned
int
closing_wait
;
/* Delay for output */
206
int
drain_delay
;
/* Set to zero if no pure time
207
based drain is needed else
208
set to size of fifo */
209
struct
kref
kref
;
/* Ref counter */
210
};
211
212
/*
213
* Where all of the state associated with a tty is kept while the tty
214
* is open. Since the termios state should be kept even if the tty
215
* has been closed --- for things like the baud rate, etc --- it is
216
* not stored here, but rather a pointer to the real state is stored
217
* here. Possible the winsize structure should have the same
218
* treatment, but (1) the default 80x24 is usually right and (2) it's
219
* most often used by a windowing system, which will set the correct
220
* size each time the window is created or resized anyway.
221
* - TYT, 9/14/92
222
*/
223
224
struct
tty_operations
;
225
226
struct
tty_struct
{
227
int
magic
;
228
struct
kref
kref
;
229
struct
device
*
dev
;
230
struct
tty_driver
*
driver
;
231
const
struct
tty_operations
*
ops
;
232
int
index
;
233
234
/* Protects ldisc changes: Lock tty not pty */
235
struct
mutex
ldisc_mutex
;
236
struct
tty_ldisc
*
ldisc
;
237
238
struct
mutex
legacy_mutex
;
239
struct
mutex
termios_mutex
;
240
spinlock_t
ctrl_lock
;
241
/* Termios values are protected by the termios mutex */
242
struct
ktermios
termios
,
termios_locked
;
243
struct
termiox
*
termiox
;
/* May be NULL for unsupported */
244
char
name
[64];
245
struct
pid
*
pgrp
;
/* Protected by ctrl lock */
246
struct
pid
*
session
;
247
unsigned
long
flags
;
248
int
count
;
249
struct
winsize
winsize
;
/* termios mutex */
250
unsigned
char
stopped
:1,
hw_stopped
:1,
flow_stopped
:1,
packet
:1;
251
unsigned
char
low_latency
:1,
warned
:1;
252
unsigned
char
ctrl_status
;
/* ctrl_lock */
253
unsigned
int
receive_room
;
/* Bytes free for queue */
254
255
struct
tty_struct
*
link
;
256
struct
fasync_struct
*
fasync
;
257
struct
tty_bufhead
buf
;
/* Locked internally */
258
int
alt_speed
;
/* For magic substitution of 38400 bps */
259
wait_queue_head_t
write_wait
;
260
wait_queue_head_t
read_wait
;
261
struct
work_struct
hangup_work
;
262
void
*
disc_data
;
263
void
*
driver_data
;
264
struct
list_head
tty_files
;
265
266
#define N_TTY_BUF_SIZE 4096
267
268
/*
269
* The following is data for the N_TTY line discipline. For
270
* historical reasons, this is included in the tty structure.
271
* Mostly locked by the BKL.
272
*/
273
unsigned
int
column
;
274
unsigned
char
lnext
:1,
erasing
:1,
raw
:1,
real_raw
:1,
icanon
:1;
275
unsigned
char
closing
:1;
276
unsigned
char
echo_overrun
:1;
277
unsigned
short
minimum_to_wake
;
278
unsigned
long
overrun_time
;
279
int
num_overrun
;
280
unsigned
long
process_char_map
[256/(8*
sizeof
(
unsigned
long
))];
281
char
*
read_buf
;
282
int
read_head
;
283
int
read_tail
;
284
int
read_cnt
;
285
unsigned
long
read_flags
[
N_TTY_BUF_SIZE
/(8*
sizeof
(
unsigned
long
))];
286
unsigned
char
*
echo_buf
;
287
unsigned
int
echo_pos
;
288
unsigned
int
echo_cnt
;
289
int
canon_data
;
290
unsigned
long
canon_head
;
291
unsigned
int
canon_column
;
292
struct
mutex
atomic_read_lock
;
293
struct
mutex
atomic_write_lock
;
294
struct
mutex
output_lock
;
295
struct
mutex
echo_lock
;
296
unsigned
char
*
write_buf
;
297
int
write_cnt
;
298
spinlock_t
read_lock
;
299
/* If the tty has a pending do_SAK, queue it here - akpm */
300
struct
work_struct
SAK_work
;
301
struct
tty_port
*
port
;
302
};
303
304
/* Each of a tty's open files has private_data pointing to tty_file_private */
305
struct
tty_file_private
{
306
struct
tty_struct
*
tty
;
307
struct
file
*
file
;
308
struct
list_head
list
;
309
};
310
311
/* tty magic number */
312
#define TTY_MAGIC 0x5401
313
314
/*
315
* These bits are used in the flags field of the tty structure.
316
*
317
* So that interrupts won't be able to mess up the queues,
318
* copy_to_cooked must be atomic with respect to itself, as must
319
* tty->write. Thus, you must use the inline functions set_bit() and
320
* clear_bit() to make things atomic.
321
*/
322
#define TTY_THROTTLED 0
/* Call unthrottle() at threshold min */
323
#define TTY_IO_ERROR 1
/* Cause an I/O error (may be no ldisc too) */
324
#define TTY_OTHER_CLOSED 2
/* Other side (if any) has closed */
325
#define TTY_EXCLUSIVE 3
/* Exclusive open mode */
326
#define TTY_DEBUG 4
/* Debugging */
327
#define TTY_DO_WRITE_WAKEUP 5
/* Call write_wakeup after queuing new */
328
#define TTY_PUSH 6
/* n_tty private */
329
#define TTY_CLOSING 7
/* ->close() in progress */
330
#define TTY_LDISC 9
/* Line discipline attached */
331
#define TTY_LDISC_CHANGING 10
/* Line discipline changing */
332
#define TTY_LDISC_OPEN 11
/* Line discipline is open */
333
#define TTY_HW_COOK_OUT 14
/* Hardware can do output cooking */
334
#define TTY_HW_COOK_IN 15
/* Hardware can do input cooking */
335
#define TTY_PTY_LOCK 16
/* pty private */
336
#define TTY_NO_WRITE_SPLIT 17
/* Preserve write boundaries to driver */
337
#define TTY_HUPPED 18
/* Post driver->hangup() */
338
#define TTY_FLUSHING 19
/* Flushing to ldisc in progress */
339
#define TTY_FLUSHPENDING 20
/* Queued buffer flush pending */
340
#define TTY_HUPPING 21
/* ->hangup() in progress */
341
342
#define TTY_WRITE_FLUSH(tty) tty_write_flush((tty))
343
344
extern
void
tty_write_flush
(
struct
tty_struct
*);
345
346
extern
struct
ktermios
tty_std_termios
;
347
348
extern
void
console_init
(
void
);
349
extern
int
vcs_init
(
void
);
350
351
extern
struct
class
*
tty_class
;
352
362
static
inline
struct
tty_struct
*tty_kref_get(
struct
tty_struct
*tty)
363
{
364
if
(tty)
365
kref_get(&tty->
kref
);
366
return
tty;
367
}
368
extern
void
tty_kref_put
(
struct
tty_struct
*tty);
369
370
extern
int
tty_paranoia_check
(
struct
tty_struct
*tty,
struct
inode
*
inode
,
371
const
char
*
routine
);
372
extern
char
*
tty_name
(
struct
tty_struct
*tty,
char
*
buf
);
373
extern
void
tty_wait_until_sent
(
struct
tty_struct
*tty,
long
timeout);
374
extern
int
tty_check_change
(
struct
tty_struct
*tty);
375
extern
void
stop_tty
(
struct
tty_struct
*tty);
376
extern
void
start_tty
(
struct
tty_struct
*tty);
377
extern
int
tty_register_driver
(
struct
tty_driver
*
driver
);
378
extern
int
tty_unregister_driver
(
struct
tty_driver
*
driver
);
379
extern
struct
device
*
tty_register_device
(
struct
tty_driver
*
driver
,
380
unsigned
index
,
struct
device
*
dev
);
381
extern
struct
device
*
tty_register_device_attr
(
struct
tty_driver
*
driver
,
382
unsigned
index
,
struct
device
*
device
,
383
void
*
drvdata
,
384
const
struct
attribute_group
**attr_grp);
385
extern
void
tty_unregister_device
(
struct
tty_driver
*
driver
,
unsigned
index
);
386
extern
int
tty_read_raw_data
(
struct
tty_struct
*tty,
unsigned
char
*bufp,
387
int
buflen
);
388
extern
void
tty_write_message
(
struct
tty_struct
*tty,
char
*
msg
);
389
extern
int
tty_put_char
(
struct
tty_struct
*tty,
unsigned
char
c
);
390
extern
int
tty_chars_in_buffer
(
struct
tty_struct
*tty);
391
extern
int
tty_write_room
(
struct
tty_struct
*tty);
392
extern
void
tty_driver_flush_buffer
(
struct
tty_struct
*tty);
393
extern
void
tty_throttle
(
struct
tty_struct
*tty);
394
extern
void
tty_unthrottle
(
struct
tty_struct
*tty);
395
extern
int
tty_do_resize
(
struct
tty_struct
*tty,
struct
winsize
*
ws
);
396
extern
void
tty_driver_remove_tty
(
struct
tty_driver
*
driver
,
397
struct
tty_struct
*tty);
398
extern
void
tty_free_termios
(
struct
tty_struct
*tty);
399
extern
int
is_current_pgrp_orphaned
(
void
);
400
extern
struct
pid
*
tty_get_pgrp
(
struct
tty_struct
*tty);
401
extern
int
is_ignored
(
int
sig
);
402
extern
int
tty_signal
(
int
sig
,
struct
tty_struct
*tty);
403
extern
void
tty_hangup
(
struct
tty_struct
*tty);
404
extern
void
tty_vhangup
(
struct
tty_struct
*tty);
405
extern
void
tty_vhangup_locked
(
struct
tty_struct
*tty);
406
extern
void
tty_vhangup_self
(
void
);
407
extern
void
tty_unhangup
(
struct
file
*filp);
408
extern
int
tty_hung_up_p
(
struct
file
*filp);
409
extern
void
do_SAK
(
struct
tty_struct
*tty);
410
extern
void
__do_SAK
(
struct
tty_struct
*tty);
411
extern
void
disassociate_ctty
(
int
priv
);
412
extern
void
no_tty
(
void
);
413
extern
void
tty_flip_buffer_push
(
struct
tty_struct
*tty);
414
extern
void
tty_flush_to_ldisc
(
struct
tty_struct
*tty);
415
extern
void
tty_buffer_free_all
(
struct
tty_struct
*tty);
416
extern
void
tty_buffer_flush
(
struct
tty_struct
*tty);
417
extern
void
tty_buffer_init
(
struct
tty_struct
*tty);
418
extern
speed_t
tty_get_baud_rate
(
struct
tty_struct
*tty);
419
extern
speed_t
tty_termios_baud_rate
(
struct
ktermios
*
termios
);
420
extern
speed_t
tty_termios_input_baud_rate
(
struct
ktermios
*
termios
);
421
extern
void
tty_termios_encode_baud_rate
(
struct
ktermios
*
termios
,
422
speed_t
ibaud,
speed_t
obaud);
423
extern
void
tty_encode_baud_rate
(
struct
tty_struct
*tty,
424
speed_t
ibaud,
speed_t
obaud);
425
extern
void
tty_termios_copy_hw
(
struct
ktermios
*
new
,
struct
ktermios
*old);
426
extern
int
tty_termios_hw_change
(
struct
ktermios
*
a
,
struct
ktermios
*
b
);
427
extern
int
tty_set_termios
(
struct
tty_struct
*tty,
struct
ktermios
*kt);
428
429
extern
struct
tty_ldisc
*
tty_ldisc_ref
(
struct
tty_struct
*);
430
extern
void
tty_ldisc_deref
(
struct
tty_ldisc
*);
431
extern
struct
tty_ldisc
*
tty_ldisc_ref_wait
(
struct
tty_struct
*);
432
extern
void
tty_ldisc_hangup
(
struct
tty_struct
*tty);
433
extern
const
struct
file_operations
tty_ldiscs_proc_fops
;
434
435
extern
void
tty_wakeup
(
struct
tty_struct
*tty);
436
extern
void
tty_ldisc_flush
(
struct
tty_struct
*tty);
437
438
extern
long
tty_ioctl
(
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
);
439
extern
int
tty_mode_ioctl
(
struct
tty_struct
*tty,
struct
file
*
file
,
440
unsigned
int
cmd
,
unsigned
long
arg
);
441
extern
int
tty_perform_flush
(
struct
tty_struct
*tty,
unsigned
long
arg
);
442
extern
dev_t
tty_devnum
(
struct
tty_struct
*tty);
443
extern
void
proc_clear_tty
(
struct
task_struct
*
p
);
444
extern
struct
tty_struct
*
get_current_tty
(
void
);
445
extern
void
tty_default_fops
(
struct
file_operations
*
fops
);
446
extern
struct
tty_struct
*
alloc_tty_struct
(
void
);
447
extern
int
tty_alloc_file
(
struct
file
*
file
);
448
extern
void
tty_add_file
(
struct
tty_struct
*tty,
struct
file
*
file
);
449
extern
void
tty_free_file
(
struct
file
*
file
);
450
extern
void
free_tty_struct
(
struct
tty_struct
*tty);
451
extern
void
initialize_tty_struct
(
struct
tty_struct
*tty,
452
struct
tty_driver
*
driver
,
int
idx
);
453
extern
void
deinitialize_tty_struct
(
struct
tty_struct
*tty);
454
extern
struct
tty_struct
*
tty_init_dev
(
struct
tty_driver
*
driver
,
int
idx
);
455
extern
int
tty_release
(
struct
inode
*
inode
,
struct
file
*filp);
456
extern
int
tty_init_termios
(
struct
tty_struct
*tty);
457
extern
int
tty_standard_install
(
struct
tty_driver
*
driver
,
458
struct
tty_struct
*tty);
459
460
extern
struct
tty_struct
*
tty_pair_get_tty
(
struct
tty_struct
*tty);
461
extern
struct
tty_struct
*
tty_pair_get_pty
(
struct
tty_struct
*tty);
462
463
extern
struct
mutex
tty_mutex
;
464
extern
spinlock_t
tty_files_lock
;
465
466
extern
void
tty_write_unlock
(
struct
tty_struct
*tty);
467
extern
int
tty_write_lock
(
struct
tty_struct
*tty,
int
ndelay
);
468
#define tty_is_writelocked(tty) (mutex_is_locked(&tty->atomic_write_lock))
469
470
extern
void
tty_port_init
(
struct
tty_port
*
port
);
471
extern
void
tty_port_link_device
(
struct
tty_port
*
port
,
472
struct
tty_driver
*
driver
,
unsigned
index
);
473
extern
struct
device
*
tty_port_register_device
(
struct
tty_port
*
port
,
474
struct
tty_driver
*
driver
,
unsigned
index
,
475
struct
device
*
device
);
476
extern
struct
device
*
tty_port_register_device_attr
(
struct
tty_port
*
port
,
477
struct
tty_driver
*
driver
,
unsigned
index
,
478
struct
device
*
device
,
void
*
drvdata
,
479
const
struct
attribute_group
**attr_grp);
480
extern
int
tty_port_alloc_xmit_buf
(
struct
tty_port
*
port
);
481
extern
void
tty_port_free_xmit_buf
(
struct
tty_port
*
port
);
482
extern
void
tty_port_put
(
struct
tty_port
*
port
);
483
484
static
inline
struct
tty_port
*tty_port_get(
struct
tty_port
*
port
)
485
{
486
if
(port)
487
kref_get(&port->
kref
);
488
return
port
;
489
}
490
491
/* If the cts flow control is enabled, return true. */
492
static
inline
bool
tty_port_cts_enabled(
struct
tty_port
*port)
493
{
494
return
port->
flags
&
ASYNC_CTS_FLOW
;
495
}
496
497
extern
struct
tty_struct
*
tty_port_tty_get
(
struct
tty_port
*port);
498
extern
void
tty_port_tty_set
(
struct
tty_port
*port,
struct
tty_struct
*tty);
499
extern
int
tty_port_carrier_raised
(
struct
tty_port
*port);
500
extern
void
tty_port_raise_dtr_rts
(
struct
tty_port
*port);
501
extern
void
tty_port_lower_dtr_rts
(
struct
tty_port
*port);
502
extern
void
tty_port_hangup
(
struct
tty_port
*port);
503
extern
int
tty_port_block_til_ready
(
struct
tty_port
*port,
504
struct
tty_struct
*tty,
struct
file
*filp);
505
extern
int
tty_port_close_start
(
struct
tty_port
*port,
506
struct
tty_struct
*tty,
struct
file
*filp);
507
extern
void
tty_port_close_end
(
struct
tty_port
*port,
struct
tty_struct
*tty);
508
extern
void
tty_port_close
(
struct
tty_port
*port,
509
struct
tty_struct
*tty,
struct
file
*filp);
510
extern
int
tty_port_install
(
struct
tty_port
*port,
struct
tty_driver
*
driver
,
511
struct
tty_struct
*tty);
512
extern
int
tty_port_open
(
struct
tty_port
*port,
513
struct
tty_struct
*tty,
struct
file
*filp);
514
static
inline
int
tty_port_users(
struct
tty_port
*port)
515
{
516
return
port->
count
+ port->
blocked_open
;
517
}
518
519
extern
int
tty_register_ldisc
(
int
disc,
struct
tty_ldisc_ops
*new_ldisc);
520
extern
int
tty_unregister_ldisc
(
int
disc);
521
extern
int
tty_set_ldisc
(
struct
tty_struct
*tty,
int
ldisc
);
522
extern
int
tty_ldisc_setup
(
struct
tty_struct
*tty,
struct
tty_struct
*o_tty);
523
extern
void
tty_ldisc_release
(
struct
tty_struct
*tty,
struct
tty_struct
*o_tty);
524
extern
void
tty_ldisc_init
(
struct
tty_struct
*tty);
525
extern
void
tty_ldisc_deinit
(
struct
tty_struct
*tty);
526
extern
void
tty_ldisc_begin
(
void
);
527
/* This last one is just for the tty layer internals and shouldn't be used elsewhere */
528
extern
void
tty_ldisc_enable
(
struct
tty_struct
*tty);
529
530
531
/* n_tty.c */
532
extern
struct
tty_ldisc_ops
tty_ldisc_N_TTY
;
533
extern
void
n_tty_inherit_ops
(
struct
tty_ldisc_ops
*ops);
534
535
/* tty_audit.c */
536
#ifdef CONFIG_AUDIT
537
extern
void
tty_audit_add_data
(
struct
tty_struct
*tty,
unsigned
char
*
data
,
538
size_t
size
);
539
extern
void
tty_audit_exit
(
void
);
540
extern
void
tty_audit_fork
(
struct
signal_struct
*
sig
);
541
extern
void
tty_audit_tiocsti
(
struct
tty_struct
*tty,
char
ch);
542
extern
void
tty_audit_push
(
struct
tty_struct
*tty);
543
extern
int
tty_audit_push_task
(
struct
task_struct
*tsk,
544
kuid_t
loginuid,
u32
sessionid);
545
#else
546
static
inline
void
tty_audit_add_data
(
struct
tty_struct
*tty,
547
unsigned
char
*
data
,
size_t
size
)
548
{
549
}
550
static
inline
void
tty_audit_tiocsti
(
struct
tty_struct
*tty,
char
ch)
551
{
552
}
553
static
inline
void
tty_audit_exit
(
void
)
554
{
555
}
556
static
inline
void
tty_audit_fork
(
struct
signal_struct
*
sig
)
557
{
558
}
559
static
inline
void
tty_audit_push
(
struct
tty_struct
*tty)
560
{
561
}
562
static
inline
int
tty_audit_push_task
(
struct
task_struct
*tsk,
563
kuid_t
loginuid,
u32
sessionid)
564
{
565
return
0;
566
}
567
#endif
568
569
/* tty_io.c */
570
extern
int
__init
tty_init
(
void
);
571
572
/* tty_ioctl.c */
573
extern
int
n_tty_ioctl_helper
(
struct
tty_struct
*tty,
struct
file
*
file
,
574
unsigned
int
cmd
,
unsigned
long
arg
);
575
extern
long
n_tty_compat_ioctl_helper
(
struct
tty_struct
*tty,
struct
file
*
file
,
576
unsigned
int
cmd
,
unsigned
long
arg
);
577
578
/* serial.c */
579
580
extern
void
serial_console_init
(
void
);
581
582
/* pcxx.c */
583
584
extern
int
pcxe_open
(
struct
tty_struct
*tty,
struct
file
*filp);
585
586
/* vt.c */
587
588
extern
int
vt_ioctl
(
struct
tty_struct
*tty,
589
unsigned
int
cmd
,
unsigned
long
arg
);
590
591
extern
long
vt_compat_ioctl
(
struct
tty_struct
*tty,
592
unsigned
int
cmd
,
unsigned
long
arg
);
593
594
/* tty_mutex.c */
595
/* functions for preparation of BKL removal */
596
extern
void
__lockfunc
tty_lock
(
struct
tty_struct
*tty);
597
extern
void
__lockfunc
tty_unlock
(
struct
tty_struct
*tty);
598
extern
void
__lockfunc
tty_lock_pair
(
struct
tty_struct
*tty,
599
struct
tty_struct
*tty2);
600
extern
void
__lockfunc
tty_unlock_pair
(
struct
tty_struct
*tty,
601
struct
tty_struct
*tty2);
602
603
/*
604
* this shall be called only from where BTM is held (like close)
605
*
606
* We need this to ensure nobody waits for us to finish while we are waiting.
607
* Without this we were encountering system stalls.
608
*
609
* This should be indeed removed with BTM removal later.
610
*
611
* Locking: BTM required. Nobody is allowed to hold port->mutex.
612
*/
613
static
inline
void
tty_wait_until_sent_from_close(
struct
tty_struct
*tty,
614
long
timeout)
615
{
616
tty_unlock
(tty);
/* tty->ops->close holds the BTM, drop it while waiting */
617
tty_wait_until_sent
(tty, timeout);
618
tty_lock
(tty);
619
}
620
621
/*
622
* wait_event_interruptible_tty -- wait for a condition with the tty lock held
623
*
624
* The condition we are waiting for might take a long time to
625
* become true, or might depend on another thread taking the
626
* BTM. In either case, we need to drop the BTM to guarantee
627
* forward progress. This is a leftover from the conversion
628
* from the BKL and should eventually get removed as the BTM
629
* falls out of use.
630
*
631
* Do not use in new code.
632
*/
633
#define wait_event_interruptible_tty(tty, wq, condition) \
634
({ \
635
int __ret = 0; \
636
if (!(condition)) { \
637
__wait_event_interruptible_tty(tty, wq, condition, __ret); \
638
} \
639
__ret; \
640
})
641
642
#define __wait_event_interruptible_tty(tty, wq, condition, ret) \
643
do { \
644
DEFINE_WAIT(__wait); \
645
\
646
for (;;) { \
647
prepare_to_wait(&wq, &__wait, TASK_INTERRUPTIBLE); \
648
if (condition) \
649
break; \
650
if (!signal_pending(current)) { \
651
tty_unlock(tty); \
652
schedule(); \
653
tty_lock(tty); \
654
continue; \
655
} \
656
ret = -ERESTARTSYS; \
657
break; \
658
} \
659
finish_wait(&wq, &__wait); \
660
} while (0)
661
662
663
#endif
Generated on Thu Jan 10 2013 14:33:43 for Linux Kernel by
1.8.2