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