TTY: move ldisc data from tty_struct: bitmaps
[deliverable/linux.git] / drivers / tty / n_tty.c
CommitLineData
1da177e4
LT
1/*
2 * n_tty.c --- implements the N_TTY line discipline.
4edf1827 3 *
1da177e4
LT
4 * This code used to be in tty_io.c, but things are getting hairy
5 * enough that it made sense to split things off. (The N_TTY
6 * processing has changed so much that it's hardly recognizable,
7 * anyway...)
8 *
9 * Note that the open routine for N_TTY is guaranteed never to return
10 * an error. This is because Linux will fall back to setting a line
4edf1827 11 * to N_TTY if it can not switch to any other line discipline.
1da177e4
LT
12 *
13 * Written by Theodore Ts'o, Copyright 1994.
4edf1827 14 *
1da177e4
LT
15 * This file also contains code originally written by Linus Torvalds,
16 * Copyright 1991, 1992, 1993, and by Julian Cowley, Copyright 1994.
4edf1827 17 *
1da177e4
LT
18 * This file may be redistributed under the terms of the GNU General Public
19 * License.
20 *
21 * Reduced memory usage for older ARM systems - Russell King.
22 *
4edf1827 23 * 2000/01/20 Fixed SMP locking on put_tty_queue using bits of
1da177e4
LT
24 * the patch by Andrew J. Kroll <ag784@freenet.buffalo.edu>
25 * who actually finally proved there really was a race.
26 *
27 * 2002/03/18 Implemented n_tty_wakeup to send SIGIO POLL_OUTs to
28 * waiting writing processes-Sapan Bhatia <sapan@corewars.org>.
11a96d18 29 * Also fixed a bug in BLOCKING mode where n_tty_write returns
1da177e4
LT
30 * EAGAIN
31 */
32
33#include <linux/types.h>
34#include <linux/major.h>
35#include <linux/errno.h>
36#include <linux/signal.h>
37#include <linux/fcntl.h>
38#include <linux/sched.h>
39#include <linux/interrupt.h>
40#include <linux/tty.h>
41#include <linux/timer.h>
42#include <linux/ctype.h>
43#include <linux/mm.h>
44#include <linux/string.h>
45#include <linux/slab.h>
46#include <linux/poll.h>
47#include <linux/bitops.h>
522ed776
MT
48#include <linux/audit.h>
49#include <linux/file.h>
300a6204 50#include <linux/uaccess.h>
572b9adb 51#include <linux/module.h>
1da177e4 52
1da177e4
LT
53
54/* number of characters left in xmit buffer before select has we have room */
55#define WAKEUP_CHARS 256
56
57/*
58 * This defines the low- and high-watermarks for throttling and
59 * unthrottling the TTY driver. These watermarks are used for
60 * controlling the space in the read buffer.
61 */
62#define TTY_THRESHOLD_THROTTLE 128 /* now based on remaining room */
bbd20759 63#define TTY_THRESHOLD_UNTHROTTLE 128
1da177e4 64
a88a69c9
JP
65/*
66 * Special byte codes used in the echo buffer to represent operations
67 * or special handling of characters. Bytes in the echo buffer that
68 * are not part of such special blocks are treated as normal character
69 * codes.
70 */
71#define ECHO_OP_START 0xff
72#define ECHO_OP_MOVE_BACK_COL 0x80
73#define ECHO_OP_SET_CANON_COL 0x81
74#define ECHO_OP_ERASE_TAB 0x82
75
70ece7a7 76struct n_tty_data {
53c5ee2c
JS
77 unsigned int column;
78 unsigned long overrun_time;
79 int num_overrun;
80
81 unsigned char lnext:1, erasing:1, raw:1, real_raw:1, icanon:1;
82 unsigned char echo_overrun:1;
3fe780b3
JS
83
84 DECLARE_BITMAP(process_char_map, 256);
85 DECLARE_BITMAP(read_flags, N_TTY_BUF_SIZE);
70ece7a7
JS
86};
87
522ed776
MT
88static inline int tty_put_user(struct tty_struct *tty, unsigned char x,
89 unsigned char __user *ptr)
90{
53c5ee2c
JS
91 struct n_tty_data *ldata = tty->disc_data;
92
93 tty_audit_add_data(tty, &x, 1, ldata->icanon);
522ed776
MT
94 return put_user(x, ptr);
95}
96
55db4c64
LT
97/**
98 * n_tty_set__room - receive space
99 * @tty: terminal
100 *
101 * Called by the driver to find out how much data it is
102 * permitted to feed to the line discipline without any being lost
103 * and thus to manage flow control. Not serialized. Answers for the
104 * "instant".
105 */
106
107static void n_tty_set_room(struct tty_struct *tty)
108{
53c5ee2c 109 struct n_tty_data *ldata = tty->disc_data;
090abf7b 110 int left;
55db4c64
LT
111 int old_left;
112
090abf7b
JA
113 /* tty->read_cnt is not read locked ? */
114 if (I_PARMRK(tty)) {
115 /* Multiply read_cnt by 3, since each byte might take up to
116 * three times as many spaces when PARMRK is set (depending on
117 * its flags, e.g. parity error). */
118 left = N_TTY_BUF_SIZE - tty->read_cnt * 3 - 1;
119 } else
120 left = N_TTY_BUF_SIZE - tty->read_cnt - 1;
121
55db4c64
LT
122 /*
123 * If we are doing input canonicalization, and there are no
124 * pending newlines, let characters through without limit, so
125 * that erase characters will be handled. Other excess
126 * characters will be beeped.
127 */
128 if (left <= 0)
53c5ee2c 129 left = ldata->icanon && !tty->canon_data;
55db4c64
LT
130 old_left = tty->receive_room;
131 tty->receive_room = left;
132
133 /* Did this open up the receive buffer? We may need to flip */
134 if (left && !old_left)
135 schedule_work(&tty->buf.work);
136}
137
33f0f88f 138static void put_tty_queue_nolock(unsigned char c, struct tty_struct *tty)
1da177e4
LT
139{
140 if (tty->read_cnt < N_TTY_BUF_SIZE) {
141 tty->read_buf[tty->read_head] = c;
142 tty->read_head = (tty->read_head + 1) & (N_TTY_BUF_SIZE-1);
143 tty->read_cnt++;
144 }
145}
146
17b82060
AC
147/**
148 * put_tty_queue - add character to tty
149 * @c: character
150 * @tty: tty device
151 *
152 * Add a character to the tty read_buf queue. This is done under the
153 * read_lock to serialize character addition and also to protect us
154 * against parallel reads or flushes
155 */
156
33f0f88f 157static void put_tty_queue(unsigned char c, struct tty_struct *tty)
1da177e4
LT
158{
159 unsigned long flags;
160 /*
161 * The problem of stomping on the buffers ends here.
162 * Why didn't anyone see this one coming? --AJK
163 */
164 spin_lock_irqsave(&tty->read_lock, flags);
165 put_tty_queue_nolock(c, tty);
166 spin_unlock_irqrestore(&tty->read_lock, flags);
167}
168
169/**
170 * check_unthrottle - allow new receive data
171 * @tty; tty device
172 *
17b82060
AC
173 * Check whether to call the driver unthrottle functions
174 *
70522e12 175 * Can sleep, may be called under the atomic_read_lock mutex but
1da177e4
LT
176 * this is not guaranteed.
177 */
4edf1827 178static void check_unthrottle(struct tty_struct *tty)
1da177e4 179{
39c2e60f
AC
180 if (tty->count)
181 tty_unthrottle(tty);
1da177e4
LT
182}
183
184/**
185 * reset_buffer_flags - reset buffer state
186 * @tty: terminal to reset
187 *
4edf1827 188 * Reset the read buffer counters, clear the flags,
1da177e4
LT
189 * and make sure the driver is unthrottled. Called
190 * from n_tty_open() and n_tty_flush_buffer().
17b82060
AC
191 *
192 * Locking: tty_read_lock for read fields.
1da177e4 193 */
a88a69c9 194
1da177e4
LT
195static void reset_buffer_flags(struct tty_struct *tty)
196{
53c5ee2c 197 struct n_tty_data *ldata = tty->disc_data;
1da177e4
LT
198 unsigned long flags;
199
200 spin_lock_irqsave(&tty->read_lock, flags);
201 tty->read_head = tty->read_tail = tty->read_cnt = 0;
202 spin_unlock_irqrestore(&tty->read_lock, flags);
a88a69c9
JP
203
204 mutex_lock(&tty->echo_lock);
53c5ee2c 205 tty->echo_pos = tty->echo_cnt = ldata->echo_overrun = 0;
a88a69c9
JP
206 mutex_unlock(&tty->echo_lock);
207
53c5ee2c 208 tty->canon_head = tty->canon_data = ldata->erasing = 0;
3fe780b3 209 bitmap_zero(ldata->read_flags, N_TTY_BUF_SIZE);
55db4c64 210 n_tty_set_room(tty);
1da177e4
LT
211}
212
213/**
214 * n_tty_flush_buffer - clean input queue
215 * @tty: terminal device
216 *
217 * Flush the input buffer. Called when the line discipline is
218 * being closed, when the tty layer wants the buffer flushed (eg
219 * at hangup) or when the N_TTY line discipline internally has to
220 * clean the pending queue (for example some signals).
221 *
17b82060 222 * Locking: ctrl_lock, read_lock.
1da177e4 223 */
4edf1827
AC
224
225static void n_tty_flush_buffer(struct tty_struct *tty)
1da177e4 226{
04f378b1 227 unsigned long flags;
1da177e4
LT
228 /* clear everything and unthrottle the driver */
229 reset_buffer_flags(tty);
4edf1827 230
1da177e4
LT
231 if (!tty->link)
232 return;
233
04f378b1 234 spin_lock_irqsave(&tty->ctrl_lock, flags);
1da177e4
LT
235 if (tty->link->packet) {
236 tty->ctrl_status |= TIOCPKT_FLUSHREAD;
237 wake_up_interruptible(&tty->link->read_wait);
238 }
04f378b1 239 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
1da177e4
LT
240}
241
242/**
243 * n_tty_chars_in_buffer - report available bytes
244 * @tty: tty device
245 *
246 * Report the number of characters buffered to be delivered to user
4edf1827 247 * at this instant in time.
17b82060
AC
248 *
249 * Locking: read_lock
1da177e4 250 */
4edf1827 251
1da177e4
LT
252static ssize_t n_tty_chars_in_buffer(struct tty_struct *tty)
253{
53c5ee2c 254 struct n_tty_data *ldata = tty->disc_data;
1da177e4
LT
255 unsigned long flags;
256 ssize_t n = 0;
257
258 spin_lock_irqsave(&tty->read_lock, flags);
53c5ee2c 259 if (!ldata->icanon) {
1da177e4
LT
260 n = tty->read_cnt;
261 } else if (tty->canon_data) {
262 n = (tty->canon_head > tty->read_tail) ?
263 tty->canon_head - tty->read_tail :
264 tty->canon_head + (N_TTY_BUF_SIZE - tty->read_tail);
265 }
266 spin_unlock_irqrestore(&tty->read_lock, flags);
267 return n;
268}
269
270/**
271 * is_utf8_continuation - utf8 multibyte check
272 * @c: byte to check
273 *
274 * Returns true if the utf8 character 'c' is a multibyte continuation
275 * character. We use this to correctly compute the on screen size
276 * of the character when printing
277 */
4edf1827 278
1da177e4
LT
279static inline int is_utf8_continuation(unsigned char c)
280{
281 return (c & 0xc0) == 0x80;
282}
283
284/**
285 * is_continuation - multibyte check
286 * @c: byte to check
287 *
288 * Returns true if the utf8 character 'c' is a multibyte continuation
289 * character and the terminal is in unicode mode.
290 */
4edf1827 291
1da177e4
LT
292static inline int is_continuation(unsigned char c, struct tty_struct *tty)
293{
294 return I_IUTF8(tty) && is_utf8_continuation(c);
295}
296
297/**
a88a69c9 298 * do_output_char - output one character
1da177e4
LT
299 * @c: character (or partial unicode symbol)
300 * @tty: terminal device
a88a69c9 301 * @space: space available in tty driver write buffer
1da177e4 302 *
a88a69c9
JP
303 * This is a helper function that handles one output character
304 * (including special characters like TAB, CR, LF, etc.),
ee5aa7b8
JP
305 * doing OPOST processing and putting the results in the
306 * tty driver's write buffer.
a88a69c9
JP
307 *
308 * Note that Linux currently ignores TABDLY, CRDLY, VTDLY, FFDLY
309 * and NLDLY. They simply aren't relevant in the world today.
310 * If you ever need them, add them here.
1da177e4 311 *
a88a69c9
JP
312 * Returns the number of bytes of buffer space used or -1 if
313 * no space left.
314 *
315 * Locking: should be called under the output_lock to protect
316 * the column state and space left in the buffer
1da177e4 317 */
4edf1827 318
a88a69c9 319static int do_output_char(unsigned char c, struct tty_struct *tty, int space)
1da177e4 320{
53c5ee2c 321 struct n_tty_data *ldata = tty->disc_data;
a88a69c9 322 int spaces;
1da177e4 323
1da177e4
LT
324 if (!space)
325 return -1;
300a6204 326
a88a69c9
JP
327 switch (c) {
328 case '\n':
329 if (O_ONLRET(tty))
53c5ee2c 330 ldata->column = 0;
a88a69c9
JP
331 if (O_ONLCR(tty)) {
332 if (space < 2)
333 return -1;
53c5ee2c 334 tty->canon_column = ldata->column = 0;
37f81fa1 335 tty->ops->write(tty, "\r\n", 2);
a88a69c9
JP
336 return 2;
337 }
53c5ee2c 338 tty->canon_column = ldata->column;
a88a69c9
JP
339 break;
340 case '\r':
53c5ee2c 341 if (O_ONOCR(tty) && ldata->column == 0)
a88a69c9
JP
342 return 0;
343 if (O_OCRNL(tty)) {
344 c = '\n';
345 if (O_ONLRET(tty))
53c5ee2c 346 tty->canon_column = ldata->column = 0;
1da177e4 347 break;
a88a69c9 348 }
53c5ee2c 349 tty->canon_column = ldata->column = 0;
a88a69c9
JP
350 break;
351 case '\t':
53c5ee2c 352 spaces = 8 - (ldata->column & 7);
a88a69c9
JP
353 if (O_TABDLY(tty) == XTABS) {
354 if (space < spaces)
355 return -1;
53c5ee2c 356 ldata->column += spaces;
a88a69c9
JP
357 tty->ops->write(tty, " ", spaces);
358 return spaces;
1da177e4 359 }
53c5ee2c 360 ldata->column += spaces;
a88a69c9
JP
361 break;
362 case '\b':
53c5ee2c
JS
363 if (ldata->column > 0)
364 ldata->column--;
a88a69c9
JP
365 break;
366 default:
a59c0d6f
JP
367 if (!iscntrl(c)) {
368 if (O_OLCUC(tty))
369 c = toupper(c);
370 if (!is_continuation(c, tty))
53c5ee2c 371 ldata->column++;
a59c0d6f 372 }
a88a69c9 373 break;
1da177e4 374 }
a88a69c9 375
f34d7a5b 376 tty_put_char(tty, c);
a88a69c9
JP
377 return 1;
378}
379
380/**
381 * process_output - output post processor
382 * @c: character (or partial unicode symbol)
383 * @tty: terminal device
384 *
ee5aa7b8
JP
385 * Output one character with OPOST processing.
386 * Returns -1 when the output device is full and the character
387 * must be retried.
a88a69c9
JP
388 *
389 * Locking: output_lock to protect column state and space left
390 * (also, this is called from n_tty_write under the
391 * tty layer write lock)
392 */
393
394static int process_output(unsigned char c, struct tty_struct *tty)
395{
396 int space, retval;
397
398 mutex_lock(&tty->output_lock);
399
400 space = tty_write_room(tty);
401 retval = do_output_char(c, tty, space);
402
403 mutex_unlock(&tty->output_lock);
404 if (retval < 0)
405 return -1;
406 else
407 return 0;
1da177e4
LT
408}
409
410/**
a88a69c9 411 * process_output_block - block post processor
1da177e4 412 * @tty: terminal device
ee5aa7b8
JP
413 * @buf: character buffer
414 * @nr: number of bytes to output
415 *
416 * Output a block of characters with OPOST processing.
417 * Returns the number of characters output.
1da177e4
LT
418 *
419 * This path is used to speed up block console writes, among other
420 * things when processing blocks of output data. It handles only
421 * the simple cases normally found and helps to generate blocks of
422 * symbols for the console driver and thus improve performance.
423 *
a88a69c9
JP
424 * Locking: output_lock to protect column state and space left
425 * (also, this is called from n_tty_write under the
426 * tty layer write lock)
1da177e4 427 */
4edf1827 428
a88a69c9
JP
429static ssize_t process_output_block(struct tty_struct *tty,
430 const unsigned char *buf, unsigned int nr)
1da177e4 431{
53c5ee2c 432 struct n_tty_data *ldata = tty->disc_data;
1da177e4 433 int space;
bbd20759 434 int i;
1da177e4
LT
435 const unsigned char *cp;
436
a88a69c9
JP
437 mutex_lock(&tty->output_lock);
438
f34d7a5b 439 space = tty_write_room(tty);
300a6204 440 if (!space) {
a88a69c9 441 mutex_unlock(&tty->output_lock);
1da177e4 442 return 0;
a88a69c9 443 }
1da177e4
LT
444 if (nr > space)
445 nr = space;
446
447 for (i = 0, cp = buf; i < nr; i++, cp++) {
a59c0d6f
JP
448 unsigned char c = *cp;
449
450 switch (c) {
1da177e4
LT
451 case '\n':
452 if (O_ONLRET(tty))
53c5ee2c 453 ldata->column = 0;
1da177e4
LT
454 if (O_ONLCR(tty))
455 goto break_out;
53c5ee2c 456 tty->canon_column = ldata->column;
1da177e4
LT
457 break;
458 case '\r':
53c5ee2c 459 if (O_ONOCR(tty) && ldata->column == 0)
1da177e4
LT
460 goto break_out;
461 if (O_OCRNL(tty))
462 goto break_out;
53c5ee2c 463 tty->canon_column = ldata->column = 0;
1da177e4
LT
464 break;
465 case '\t':
466 goto break_out;
467 case '\b':
53c5ee2c
JS
468 if (ldata->column > 0)
469 ldata->column--;
1da177e4
LT
470 break;
471 default:
a59c0d6f
JP
472 if (!iscntrl(c)) {
473 if (O_OLCUC(tty))
474 goto break_out;
475 if (!is_continuation(c, tty))
53c5ee2c 476 ldata->column++;
a59c0d6f 477 }
1da177e4
LT
478 break;
479 }
480 }
481break_out:
f34d7a5b 482 i = tty->ops->write(tty, buf, i);
a88a69c9
JP
483
484 mutex_unlock(&tty->output_lock);
1da177e4
LT
485 return i;
486}
487
a88a69c9
JP
488/**
489 * process_echoes - write pending echo characters
490 * @tty: terminal device
491 *
492 * Write previously buffered echo (and other ldisc-generated)
493 * characters to the tty.
494 *
495 * Characters generated by the ldisc (including echoes) need to
496 * be buffered because the driver's write buffer can fill during
497 * heavy program output. Echoing straight to the driver will
498 * often fail under these conditions, causing lost characters and
499 * resulting mismatches of ldisc state information.
500 *
501 * Since the ldisc state must represent the characters actually sent
502 * to the driver at the time of the write, operations like certain
503 * changes in column state are also saved in the buffer and executed
504 * here.
505 *
506 * A circular fifo buffer is used so that the most recent characters
507 * are prioritized. Also, when control characters are echoed with a
508 * prefixed "^", the pair is treated atomically and thus not separated.
509 *
510 * Locking: output_lock to protect column state and space left,
511 * echo_lock to protect the echo buffer
512 */
513
514static void process_echoes(struct tty_struct *tty)
515{
53c5ee2c 516 struct n_tty_data *ldata = tty->disc_data;
a88a69c9
JP
517 int space, nr;
518 unsigned char c;
519 unsigned char *cp, *buf_end;
520
521 if (!tty->echo_cnt)
522 return;
523
524 mutex_lock(&tty->output_lock);
525 mutex_lock(&tty->echo_lock);
526
527 space = tty_write_room(tty);
528
529 buf_end = tty->echo_buf + N_TTY_BUF_SIZE;
530 cp = tty->echo_buf + tty->echo_pos;
531 nr = tty->echo_cnt;
532 while (nr > 0) {
533 c = *cp;
534 if (c == ECHO_OP_START) {
535 unsigned char op;
536 unsigned char *opp;
537 int no_space_left = 0;
538
539 /*
540 * If the buffer byte is the start of a multi-byte
541 * operation, get the next byte, which is either the
542 * op code or a control character value.
543 */
544 opp = cp + 1;
545 if (opp == buf_end)
546 opp -= N_TTY_BUF_SIZE;
547 op = *opp;
300a6204 548
a88a69c9
JP
549 switch (op) {
550 unsigned int num_chars, num_bs;
551
552 case ECHO_OP_ERASE_TAB:
553 if (++opp == buf_end)
554 opp -= N_TTY_BUF_SIZE;
555 num_chars = *opp;
556
557 /*
558 * Determine how many columns to go back
559 * in order to erase the tab.
560 * This depends on the number of columns
561 * used by other characters within the tab
562 * area. If this (modulo 8) count is from
563 * the start of input rather than from a
564 * previous tab, we offset by canon column.
565 * Otherwise, tab spacing is normal.
566 */
567 if (!(num_chars & 0x80))
568 num_chars += tty->canon_column;
569 num_bs = 8 - (num_chars & 7);
570
571 if (num_bs > space) {
572 no_space_left = 1;
573 break;
574 }
575 space -= num_bs;
576 while (num_bs--) {
577 tty_put_char(tty, '\b');
53c5ee2c
JS
578 if (ldata->column > 0)
579 ldata->column--;
a88a69c9
JP
580 }
581 cp += 3;
582 nr -= 3;
583 break;
584
585 case ECHO_OP_SET_CANON_COL:
53c5ee2c 586 tty->canon_column = ldata->column;
a88a69c9
JP
587 cp += 2;
588 nr -= 2;
589 break;
590
591 case ECHO_OP_MOVE_BACK_COL:
53c5ee2c
JS
592 if (ldata->column > 0)
593 ldata->column--;
a88a69c9
JP
594 cp += 2;
595 nr -= 2;
596 break;
597
598 case ECHO_OP_START:
599 /* This is an escaped echo op start code */
600 if (!space) {
601 no_space_left = 1;
602 break;
603 }
604 tty_put_char(tty, ECHO_OP_START);
53c5ee2c 605 ldata->column++;
a88a69c9
JP
606 space--;
607 cp += 2;
608 nr -= 2;
609 break;
610
611 default:
a88a69c9 612 /*
62b26358
JP
613 * If the op is not a special byte code,
614 * it is a ctrl char tagged to be echoed
615 * as "^X" (where X is the letter
616 * representing the control char).
617 * Note that we must ensure there is
618 * enough space for the whole ctrl pair.
619 *
a88a69c9 620 */
62b26358
JP
621 if (space < 2) {
622 no_space_left = 1;
623 break;
624 }
625 tty_put_char(tty, '^');
626 tty_put_char(tty, op ^ 0100);
53c5ee2c 627 ldata->column += 2;
62b26358 628 space -= 2;
a88a69c9
JP
629 cp += 2;
630 nr -= 2;
631 }
632
633 if (no_space_left)
634 break;
635 } else {
ee5aa7b8
JP
636 if (O_OPOST(tty) &&
637 !(test_bit(TTY_HW_COOK_OUT, &tty->flags))) {
638 int retval = do_output_char(c, tty, space);
639 if (retval < 0)
640 break;
641 space -= retval;
642 } else {
643 if (!space)
644 break;
645 tty_put_char(tty, c);
646 space -= 1;
647 }
a88a69c9
JP
648 cp += 1;
649 nr -= 1;
650 }
651
652 /* When end of circular buffer reached, wrap around */
653 if (cp >= buf_end)
654 cp -= N_TTY_BUF_SIZE;
655 }
656
657 if (nr == 0) {
658 tty->echo_pos = 0;
659 tty->echo_cnt = 0;
53c5ee2c 660 ldata->echo_overrun = 0;
a88a69c9
JP
661 } else {
662 int num_processed = tty->echo_cnt - nr;
663 tty->echo_pos += num_processed;
664 tty->echo_pos &= N_TTY_BUF_SIZE - 1;
665 tty->echo_cnt = nr;
666 if (num_processed > 0)
53c5ee2c 667 ldata->echo_overrun = 0;
a88a69c9
JP
668 }
669
670 mutex_unlock(&tty->echo_lock);
671 mutex_unlock(&tty->output_lock);
672
673 if (tty->ops->flush_chars)
674 tty->ops->flush_chars(tty);
675}
676
677/**
678 * add_echo_byte - add a byte to the echo buffer
679 * @c: unicode byte to echo
680 * @tty: terminal device
681 *
682 * Add a character or operation byte to the echo buffer.
683 *
684 * Should be called under the echo lock to protect the echo buffer.
685 */
686
687static void add_echo_byte(unsigned char c, struct tty_struct *tty)
688{
53c5ee2c 689 struct n_tty_data *ldata = tty->disc_data;
a88a69c9
JP
690 int new_byte_pos;
691
692 if (tty->echo_cnt == N_TTY_BUF_SIZE) {
693 /* Circular buffer is already at capacity */
694 new_byte_pos = tty->echo_pos;
695
696 /*
697 * Since the buffer start position needs to be advanced,
698 * be sure to step by a whole operation byte group.
699 */
300a6204 700 if (tty->echo_buf[tty->echo_pos] == ECHO_OP_START) {
a88a69c9
JP
701 if (tty->echo_buf[(tty->echo_pos + 1) &
702 (N_TTY_BUF_SIZE - 1)] ==
703 ECHO_OP_ERASE_TAB) {
704 tty->echo_pos += 3;
705 tty->echo_cnt -= 2;
706 } else {
707 tty->echo_pos += 2;
708 tty->echo_cnt -= 1;
709 }
710 } else {
711 tty->echo_pos++;
712 }
713 tty->echo_pos &= N_TTY_BUF_SIZE - 1;
714
53c5ee2c 715 ldata->echo_overrun = 1;
a88a69c9
JP
716 } else {
717 new_byte_pos = tty->echo_pos + tty->echo_cnt;
718 new_byte_pos &= N_TTY_BUF_SIZE - 1;
719 tty->echo_cnt++;
720 }
721
722 tty->echo_buf[new_byte_pos] = c;
723}
724
725/**
726 * echo_move_back_col - add operation to move back a column
727 * @tty: terminal device
728 *
729 * Add an operation to the echo buffer to move back one column.
730 *
731 * Locking: echo_lock to protect the echo buffer
732 */
733
734static void echo_move_back_col(struct tty_struct *tty)
735{
736 mutex_lock(&tty->echo_lock);
737
738 add_echo_byte(ECHO_OP_START, tty);
739 add_echo_byte(ECHO_OP_MOVE_BACK_COL, tty);
740
741 mutex_unlock(&tty->echo_lock);
742}
743
744/**
745 * echo_set_canon_col - add operation to set the canon column
746 * @tty: terminal device
747 *
748 * Add an operation to the echo buffer to set the canon column
749 * to the current column.
750 *
751 * Locking: echo_lock to protect the echo buffer
752 */
753
754static void echo_set_canon_col(struct tty_struct *tty)
755{
756 mutex_lock(&tty->echo_lock);
757
758 add_echo_byte(ECHO_OP_START, tty);
759 add_echo_byte(ECHO_OP_SET_CANON_COL, tty);
760
761 mutex_unlock(&tty->echo_lock);
762}
763
764/**
765 * echo_erase_tab - add operation to erase a tab
766 * @num_chars: number of character columns already used
767 * @after_tab: true if num_chars starts after a previous tab
768 * @tty: terminal device
769 *
770 * Add an operation to the echo buffer to erase a tab.
771 *
772 * Called by the eraser function, which knows how many character
773 * columns have been used since either a previous tab or the start
774 * of input. This information will be used later, along with
775 * canon column (if applicable), to go back the correct number
776 * of columns.
777 *
778 * Locking: echo_lock to protect the echo buffer
779 */
780
781static void echo_erase_tab(unsigned int num_chars, int after_tab,
782 struct tty_struct *tty)
783{
784 mutex_lock(&tty->echo_lock);
785
786 add_echo_byte(ECHO_OP_START, tty);
787 add_echo_byte(ECHO_OP_ERASE_TAB, tty);
788
789 /* We only need to know this modulo 8 (tab spacing) */
790 num_chars &= 7;
791
792 /* Set the high bit as a flag if num_chars is after a previous tab */
793 if (after_tab)
794 num_chars |= 0x80;
300a6204 795
a88a69c9
JP
796 add_echo_byte(num_chars, tty);
797
798 mutex_unlock(&tty->echo_lock);
799}
800
801/**
802 * echo_char_raw - echo a character raw
803 * @c: unicode byte to echo
804 * @tty: terminal device
805 *
806 * Echo user input back onto the screen. This must be called only when
807 * L_ECHO(tty) is true. Called from the driver receive_buf path.
808 *
809 * This variant does not treat control characters specially.
810 *
811 * Locking: echo_lock to protect the echo buffer
812 */
813
814static void echo_char_raw(unsigned char c, struct tty_struct *tty)
815{
816 mutex_lock(&tty->echo_lock);
817
818 if (c == ECHO_OP_START) {
819 add_echo_byte(ECHO_OP_START, tty);
820 add_echo_byte(ECHO_OP_START, tty);
821 } else {
822 add_echo_byte(c, tty);
823 }
824
825 mutex_unlock(&tty->echo_lock);
826}
1da177e4 827
1da177e4 828/**
a88a69c9 829 * echo_char - echo a character
1da177e4
LT
830 * @c: unicode byte to echo
831 * @tty: terminal device
832 *
4edf1827 833 * Echo user input back onto the screen. This must be called only when
1da177e4 834 * L_ECHO(tty) is true. Called from the driver receive_buf path.
17b82060 835 *
62b26358
JP
836 * This variant tags control characters to be echoed as "^X"
837 * (where X is the letter representing the control char).
a88a69c9
JP
838 *
839 * Locking: echo_lock to protect the echo buffer
1da177e4
LT
840 */
841
842static void echo_char(unsigned char c, struct tty_struct *tty)
843{
a88a69c9
JP
844 mutex_lock(&tty->echo_lock);
845
846 if (c == ECHO_OP_START) {
847 add_echo_byte(ECHO_OP_START, tty);
848 add_echo_byte(ECHO_OP_START, tty);
849 } else {
62b26358 850 if (L_ECHOCTL(tty) && iscntrl(c) && c != '\t')
a88a69c9
JP
851 add_echo_byte(ECHO_OP_START, tty);
852 add_echo_byte(c, tty);
853 }
854
855 mutex_unlock(&tty->echo_lock);
1da177e4
LT
856}
857
17b82060 858/**
a88a69c9 859 * finish_erasing - complete erase
17b82060 860 * @tty: tty doing the erase
17b82060 861 */
a88a69c9 862
1da177e4
LT
863static inline void finish_erasing(struct tty_struct *tty)
864{
53c5ee2c
JS
865 struct n_tty_data *ldata = tty->disc_data;
866 if (ldata->erasing) {
a88a69c9 867 echo_char_raw('/', tty);
53c5ee2c 868 ldata->erasing = 0;
1da177e4
LT
869 }
870}
871
872/**
873 * eraser - handle erase function
874 * @c: character input
875 * @tty: terminal device
876 *
3a4fa0a2 877 * Perform erase and necessary output when an erase character is
1da177e4
LT
878 * present in the stream from the driver layer. Handles the complexities
879 * of UTF-8 multibyte symbols.
17b82060 880 *
a88a69c9 881 * Locking: read_lock for tty buffers
1da177e4 882 */
4edf1827 883
1da177e4
LT
884static void eraser(unsigned char c, struct tty_struct *tty)
885{
53c5ee2c 886 struct n_tty_data *ldata = tty->disc_data;
1da177e4
LT
887 enum { ERASE, WERASE, KILL } kill_type;
888 int head, seen_alnums, cnt;
889 unsigned long flags;
890
17b82060 891 /* FIXME: locking needed ? */
1da177e4 892 if (tty->read_head == tty->canon_head) {
7e94b1d9 893 /* process_output('\a', tty); */ /* what do you think? */
1da177e4
LT
894 return;
895 }
896 if (c == ERASE_CHAR(tty))
897 kill_type = ERASE;
898 else if (c == WERASE_CHAR(tty))
899 kill_type = WERASE;
900 else {
901 if (!L_ECHO(tty)) {
902 spin_lock_irqsave(&tty->read_lock, flags);
903 tty->read_cnt -= ((tty->read_head - tty->canon_head) &
904 (N_TTY_BUF_SIZE - 1));
905 tty->read_head = tty->canon_head;
906 spin_unlock_irqrestore(&tty->read_lock, flags);
907 return;
908 }
909 if (!L_ECHOK(tty) || !L_ECHOKE(tty) || !L_ECHOE(tty)) {
910 spin_lock_irqsave(&tty->read_lock, flags);
911 tty->read_cnt -= ((tty->read_head - tty->canon_head) &
912 (N_TTY_BUF_SIZE - 1));
913 tty->read_head = tty->canon_head;
914 spin_unlock_irqrestore(&tty->read_lock, flags);
915 finish_erasing(tty);
916 echo_char(KILL_CHAR(tty), tty);
917 /* Add a newline if ECHOK is on and ECHOKE is off. */
918 if (L_ECHOK(tty))
a88a69c9 919 echo_char_raw('\n', tty);
1da177e4
LT
920 return;
921 }
922 kill_type = KILL;
923 }
924
925 seen_alnums = 0;
17b82060 926 /* FIXME: Locking ?? */
1da177e4
LT
927 while (tty->read_head != tty->canon_head) {
928 head = tty->read_head;
929
930 /* erase a single possibly multibyte character */
931 do {
932 head = (head - 1) & (N_TTY_BUF_SIZE-1);
933 c = tty->read_buf[head];
934 } while (is_continuation(c, tty) && head != tty->canon_head);
935
936 /* do not partially erase */
937 if (is_continuation(c, tty))
938 break;
939
940 if (kill_type == WERASE) {
941 /* Equivalent to BSD's ALTWERASE. */
942 if (isalnum(c) || c == '_')
943 seen_alnums++;
944 else if (seen_alnums)
945 break;
946 }
947 cnt = (tty->read_head - head) & (N_TTY_BUF_SIZE-1);
948 spin_lock_irqsave(&tty->read_lock, flags);
949 tty->read_head = head;
950 tty->read_cnt -= cnt;
951 spin_unlock_irqrestore(&tty->read_lock, flags);
952 if (L_ECHO(tty)) {
953 if (L_ECHOPRT(tty)) {
53c5ee2c 954 if (!ldata->erasing) {
a88a69c9 955 echo_char_raw('\\', tty);
53c5ee2c 956 ldata->erasing = 1;
1da177e4
LT
957 }
958 /* if cnt > 1, output a multi-byte character */
959 echo_char(c, tty);
960 while (--cnt > 0) {
961 head = (head+1) & (N_TTY_BUF_SIZE-1);
a88a69c9
JP
962 echo_char_raw(tty->read_buf[head], tty);
963 echo_move_back_col(tty);
1da177e4
LT
964 }
965 } else if (kill_type == ERASE && !L_ECHOE(tty)) {
966 echo_char(ERASE_CHAR(tty), tty);
967 } else if (c == '\t') {
a88a69c9
JP
968 unsigned int num_chars = 0;
969 int after_tab = 0;
970 unsigned long tail = tty->read_head;
971
972 /*
973 * Count the columns used for characters
974 * since the start of input or after a
975 * previous tab.
976 * This info is used to go back the correct
977 * number of columns.
978 */
979 while (tail != tty->canon_head) {
980 tail = (tail-1) & (N_TTY_BUF_SIZE-1);
1da177e4 981 c = tty->read_buf[tail];
a88a69c9
JP
982 if (c == '\t') {
983 after_tab = 1;
984 break;
300a6204 985 } else if (iscntrl(c)) {
1da177e4 986 if (L_ECHOCTL(tty))
a88a69c9
JP
987 num_chars += 2;
988 } else if (!is_continuation(c, tty)) {
989 num_chars++;
990 }
1da177e4 991 }
a88a69c9 992 echo_erase_tab(num_chars, after_tab, tty);
1da177e4
LT
993 } else {
994 if (iscntrl(c) && L_ECHOCTL(tty)) {
a88a69c9
JP
995 echo_char_raw('\b', tty);
996 echo_char_raw(' ', tty);
997 echo_char_raw('\b', tty);
1da177e4
LT
998 }
999 if (!iscntrl(c) || L_ECHOCTL(tty)) {
a88a69c9
JP
1000 echo_char_raw('\b', tty);
1001 echo_char_raw(' ', tty);
1002 echo_char_raw('\b', tty);
1da177e4
LT
1003 }
1004 }
1005 }
1006 if (kill_type == ERASE)
1007 break;
1008 }
a88a69c9 1009 if (tty->read_head == tty->canon_head && L_ECHO(tty))
1da177e4
LT
1010 finish_erasing(tty);
1011}
1012
1013/**
1014 * isig - handle the ISIG optio
1015 * @sig: signal
1016 * @tty: terminal
1017 * @flush: force flush
1018 *
1019 * Called when a signal is being sent due to terminal input. This
1020 * may caus terminal flushing to take place according to the termios
1021 * settings and character used. Called from the driver receive_buf
1022 * path so serialized.
17b82060
AC
1023 *
1024 * Locking: ctrl_lock, read_lock (both via flush buffer)
1da177e4 1025 */
4edf1827 1026
1da177e4
LT
1027static inline void isig(int sig, struct tty_struct *tty, int flush)
1028{
ab521dc0
EB
1029 if (tty->pgrp)
1030 kill_pgrp(tty->pgrp, sig, 1);
1da177e4
LT
1031 if (flush || !L_NOFLSH(tty)) {
1032 n_tty_flush_buffer(tty);
f34d7a5b 1033 tty_driver_flush_buffer(tty);
1da177e4
LT
1034 }
1035}
1036
1037/**
1038 * n_tty_receive_break - handle break
1039 * @tty: terminal
1040 *
1041 * An RS232 break event has been hit in the incoming bitstream. This
1042 * can cause a variety of events depending upon the termios settings.
1043 *
1044 * Called from the receive_buf path so single threaded.
1045 */
4edf1827 1046
1da177e4
LT
1047static inline void n_tty_receive_break(struct tty_struct *tty)
1048{
1049 if (I_IGNBRK(tty))
1050 return;
1051 if (I_BRKINT(tty)) {
1052 isig(SIGINT, tty, 1);
1053 return;
1054 }
1055 if (I_PARMRK(tty)) {
1056 put_tty_queue('\377', tty);
1057 put_tty_queue('\0', tty);
1058 }
1059 put_tty_queue('\0', tty);
1060 wake_up_interruptible(&tty->read_wait);
1061}
1062
1063/**
1064 * n_tty_receive_overrun - handle overrun reporting
1065 * @tty: terminal
1066 *
1067 * Data arrived faster than we could process it. While the tty
1068 * driver has flagged this the bits that were missed are gone
1069 * forever.
1070 *
1071 * Called from the receive_buf path so single threaded. Does not
1072 * need locking as num_overrun and overrun_time are function
1073 * private.
1074 */
4edf1827 1075
1da177e4
LT
1076static inline void n_tty_receive_overrun(struct tty_struct *tty)
1077{
53c5ee2c 1078 struct n_tty_data *ldata = tty->disc_data;
1da177e4
LT
1079 char buf[64];
1080
53c5ee2c
JS
1081 ldata->num_overrun++;
1082 if (time_after(jiffies, ldata->overrun_time + HZ) ||
1083 time_after(ldata->overrun_time, jiffies)) {
1da177e4
LT
1084 printk(KERN_WARNING "%s: %d input overrun(s)\n",
1085 tty_name(tty, buf),
53c5ee2c
JS
1086 ldata->num_overrun);
1087 ldata->overrun_time = jiffies;
1088 ldata->num_overrun = 0;
1da177e4
LT
1089 }
1090}
1091
1092/**
1093 * n_tty_receive_parity_error - error notifier
1094 * @tty: terminal device
1095 * @c: character
1096 *
1097 * Process a parity error and queue the right data to indicate
3a4fa0a2 1098 * the error case if necessary. Locking as per n_tty_receive_buf.
1da177e4
LT
1099 */
1100static inline void n_tty_receive_parity_error(struct tty_struct *tty,
1101 unsigned char c)
1102{
4edf1827 1103 if (I_IGNPAR(tty))
1da177e4 1104 return;
1da177e4
LT
1105 if (I_PARMRK(tty)) {
1106 put_tty_queue('\377', tty);
1107 put_tty_queue('\0', tty);
1108 put_tty_queue(c, tty);
1109 } else if (I_INPCK(tty))
1110 put_tty_queue('\0', tty);
1111 else
1112 put_tty_queue(c, tty);
1113 wake_up_interruptible(&tty->read_wait);
1114}
1115
1116/**
1117 * n_tty_receive_char - perform processing
1118 * @tty: terminal device
1119 * @c: character
1120 *
1121 * Process an individual character of input received from the driver.
4edf1827 1122 * This is serialized with respect to itself by the rules for the
1da177e4
LT
1123 * driver above.
1124 */
1125
1126static inline void n_tty_receive_char(struct tty_struct *tty, unsigned char c)
1127{
53c5ee2c 1128 struct n_tty_data *ldata = tty->disc_data;
1da177e4 1129 unsigned long flags;
acc71bba 1130 int parmrk;
1da177e4 1131
53c5ee2c 1132 if (ldata->raw) {
1da177e4
LT
1133 put_tty_queue(c, tty);
1134 return;
1135 }
4edf1827 1136
1da177e4
LT
1137 if (I_ISTRIP(tty))
1138 c &= 0x7f;
1139 if (I_IUCLC(tty) && L_IEXTEN(tty))
300a6204 1140 c = tolower(c);
1da177e4 1141
26df6d13 1142 if (L_EXTPROC(tty)) {
1143 put_tty_queue(c, tty);
1144 return;
1145 }
1146
54d2a37e 1147 if (tty->stopped && !tty->flow_stopped && I_IXON(tty) &&
a88a69c9
JP
1148 I_IXANY(tty) && c != START_CHAR(tty) && c != STOP_CHAR(tty) &&
1149 c != INTR_CHAR(tty) && c != QUIT_CHAR(tty) && c != SUSP_CHAR(tty)) {
54d2a37e 1150 start_tty(tty);
a88a69c9
JP
1151 process_echoes(tty);
1152 }
54d2a37e 1153
1da177e4
LT
1154 if (tty->closing) {
1155 if (I_IXON(tty)) {
a88a69c9 1156 if (c == START_CHAR(tty)) {
1da177e4 1157 start_tty(tty);
a88a69c9 1158 process_echoes(tty);
300a6204 1159 } else if (c == STOP_CHAR(tty))
1da177e4
LT
1160 stop_tty(tty);
1161 }
1162 return;
1163 }
1164
1165 /*
1166 * If the previous character was LNEXT, or we know that this
1167 * character is not one of the characters that we'll have to
1168 * handle specially, do shortcut processing to speed things
1169 * up.
1170 */
3fe780b3 1171 if (!test_bit(c, ldata->process_char_map) || ldata->lnext) {
53c5ee2c 1172 ldata->lnext = 0;
acc71bba
JP
1173 parmrk = (c == (unsigned char) '\377' && I_PARMRK(tty)) ? 1 : 0;
1174 if (tty->read_cnt >= (N_TTY_BUF_SIZE - parmrk - 1)) {
1175 /* beep if no space */
7e94b1d9
JP
1176 if (L_ECHO(tty))
1177 process_output('\a', tty);
acc71bba
JP
1178 return;
1179 }
1180 if (L_ECHO(tty)) {
1181 finish_erasing(tty);
1da177e4
LT
1182 /* Record the column of first canon char. */
1183 if (tty->canon_head == tty->read_head)
a88a69c9 1184 echo_set_canon_col(tty);
1da177e4 1185 echo_char(c, tty);
a88a69c9 1186 process_echoes(tty);
1da177e4 1187 }
acc71bba 1188 if (parmrk)
1da177e4
LT
1189 put_tty_queue(c, tty);
1190 put_tty_queue(c, tty);
1191 return;
1192 }
4edf1827 1193
1da177e4
LT
1194 if (I_IXON(tty)) {
1195 if (c == START_CHAR(tty)) {
1196 start_tty(tty);
a88a69c9 1197 process_echoes(tty);
1da177e4
LT
1198 return;
1199 }
1200 if (c == STOP_CHAR(tty)) {
1201 stop_tty(tty);
1202 return;
1203 }
1204 }
575537b3 1205
1da177e4
LT
1206 if (L_ISIG(tty)) {
1207 int signal;
1208 signal = SIGINT;
1209 if (c == INTR_CHAR(tty))
1210 goto send_signal;
1211 signal = SIGQUIT;
1212 if (c == QUIT_CHAR(tty))
1213 goto send_signal;
1214 signal = SIGTSTP;
1215 if (c == SUSP_CHAR(tty)) {
1216send_signal:
ec5b1157 1217 /*
ec5b1157
JP
1218 * Note that we do not use isig() here because we want
1219 * the order to be:
1220 * 1) flush, 2) echo, 3) signal
1221 */
1222 if (!L_NOFLSH(tty)) {
1223 n_tty_flush_buffer(tty);
f34d7a5b 1224 tty_driver_flush_buffer(tty);
ec5b1157 1225 }
a88a69c9
JP
1226 if (I_IXON(tty))
1227 start_tty(tty);
1228 if (L_ECHO(tty)) {
ec5b1157 1229 echo_char(c, tty);
a88a69c9
JP
1230 process_echoes(tty);
1231 }
ec5b1157
JP
1232 if (tty->pgrp)
1233 kill_pgrp(tty->pgrp, signal, 1);
1da177e4
LT
1234 return;
1235 }
1236 }
575537b3
JP
1237
1238 if (c == '\r') {
1239 if (I_IGNCR(tty))
1240 return;
1241 if (I_ICRNL(tty))
1242 c = '\n';
1243 } else if (c == '\n' && I_INLCR(tty))
1244 c = '\r';
1245
53c5ee2c 1246 if (ldata->icanon) {
1da177e4
LT
1247 if (c == ERASE_CHAR(tty) || c == KILL_CHAR(tty) ||
1248 (c == WERASE_CHAR(tty) && L_IEXTEN(tty))) {
1249 eraser(c, tty);
a88a69c9 1250 process_echoes(tty);
1da177e4
LT
1251 return;
1252 }
1253 if (c == LNEXT_CHAR(tty) && L_IEXTEN(tty)) {
53c5ee2c 1254 ldata->lnext = 1;
1da177e4
LT
1255 if (L_ECHO(tty)) {
1256 finish_erasing(tty);
1257 if (L_ECHOCTL(tty)) {
a88a69c9
JP
1258 echo_char_raw('^', tty);
1259 echo_char_raw('\b', tty);
1260 process_echoes(tty);
1da177e4
LT
1261 }
1262 }
1263 return;
1264 }
1265 if (c == REPRINT_CHAR(tty) && L_ECHO(tty) &&
1266 L_IEXTEN(tty)) {
1267 unsigned long tail = tty->canon_head;
1268
1269 finish_erasing(tty);
1270 echo_char(c, tty);
a88a69c9 1271 echo_char_raw('\n', tty);
1da177e4
LT
1272 while (tail != tty->read_head) {
1273 echo_char(tty->read_buf[tail], tty);
1274 tail = (tail+1) & (N_TTY_BUF_SIZE-1);
1275 }
a88a69c9 1276 process_echoes(tty);
1da177e4
LT
1277 return;
1278 }
1279 if (c == '\n') {
acc71bba 1280 if (tty->read_cnt >= N_TTY_BUF_SIZE) {
7e94b1d9
JP
1281 if (L_ECHO(tty))
1282 process_output('\a', tty);
acc71bba
JP
1283 return;
1284 }
1285 if (L_ECHO(tty) || L_ECHONL(tty)) {
a88a69c9
JP
1286 echo_char_raw('\n', tty);
1287 process_echoes(tty);
1da177e4
LT
1288 }
1289 goto handle_newline;
1290 }
1291 if (c == EOF_CHAR(tty)) {
acc71bba
JP
1292 if (tty->read_cnt >= N_TTY_BUF_SIZE)
1293 return;
4edf1827
AC
1294 if (tty->canon_head != tty->read_head)
1295 set_bit(TTY_PUSH, &tty->flags);
1da177e4
LT
1296 c = __DISABLED_CHAR;
1297 goto handle_newline;
1298 }
1299 if ((c == EOL_CHAR(tty)) ||
1300 (c == EOL2_CHAR(tty) && L_IEXTEN(tty))) {
acc71bba
JP
1301 parmrk = (c == (unsigned char) '\377' && I_PARMRK(tty))
1302 ? 1 : 0;
1303 if (tty->read_cnt >= (N_TTY_BUF_SIZE - parmrk)) {
7e94b1d9
JP
1304 if (L_ECHO(tty))
1305 process_output('\a', tty);
acc71bba
JP
1306 return;
1307 }
1da177e4
LT
1308 /*
1309 * XXX are EOL_CHAR and EOL2_CHAR echoed?!?
1310 */
1311 if (L_ECHO(tty)) {
1da177e4
LT
1312 /* Record the column of first canon char. */
1313 if (tty->canon_head == tty->read_head)
a88a69c9 1314 echo_set_canon_col(tty);
1da177e4 1315 echo_char(c, tty);
a88a69c9 1316 process_echoes(tty);
1da177e4
LT
1317 }
1318 /*
1319 * XXX does PARMRK doubling happen for
1320 * EOL_CHAR and EOL2_CHAR?
1321 */
acc71bba 1322 if (parmrk)
1da177e4
LT
1323 put_tty_queue(c, tty);
1324
4edf1827 1325handle_newline:
1da177e4 1326 spin_lock_irqsave(&tty->read_lock, flags);
3fe780b3 1327 set_bit(tty->read_head, ldata->read_flags);
1da177e4
LT
1328 put_tty_queue_nolock(c, tty);
1329 tty->canon_head = tty->read_head;
1330 tty->canon_data++;
1331 spin_unlock_irqrestore(&tty->read_lock, flags);
1332 kill_fasync(&tty->fasync, SIGIO, POLL_IN);
1333 if (waitqueue_active(&tty->read_wait))
1334 wake_up_interruptible(&tty->read_wait);
1335 return;
1336 }
1337 }
4edf1827 1338
acc71bba
JP
1339 parmrk = (c == (unsigned char) '\377' && I_PARMRK(tty)) ? 1 : 0;
1340 if (tty->read_cnt >= (N_TTY_BUF_SIZE - parmrk - 1)) {
1341 /* beep if no space */
7e94b1d9
JP
1342 if (L_ECHO(tty))
1343 process_output('\a', tty);
acc71bba
JP
1344 return;
1345 }
1346 if (L_ECHO(tty)) {
1347 finish_erasing(tty);
1da177e4 1348 if (c == '\n')
a88a69c9 1349 echo_char_raw('\n', tty);
1da177e4
LT
1350 else {
1351 /* Record the column of first canon char. */
1352 if (tty->canon_head == tty->read_head)
a88a69c9 1353 echo_set_canon_col(tty);
1da177e4
LT
1354 echo_char(c, tty);
1355 }
a88a69c9 1356 process_echoes(tty);
1da177e4
LT
1357 }
1358
acc71bba 1359 if (parmrk)
1da177e4
LT
1360 put_tty_queue(c, tty);
1361
1362 put_tty_queue(c, tty);
4edf1827 1363}
1da177e4 1364
1da177e4
LT
1365
1366/**
1367 * n_tty_write_wakeup - asynchronous I/O notifier
1368 * @tty: tty device
1369 *
1370 * Required for the ptys, serial driver etc. since processes
1371 * that attach themselves to the master and rely on ASYNC
1372 * IO must be woken up
1373 */
1374
1375static void n_tty_write_wakeup(struct tty_struct *tty)
1376{
ff8cb0fd 1377 if (tty->fasync && test_and_clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags))
1da177e4 1378 kill_fasync(&tty->fasync, SIGIO, POLL_OUT);
1da177e4
LT
1379}
1380
1381/**
1382 * n_tty_receive_buf - data receive
1383 * @tty: terminal device
1384 * @cp: buffer
1385 * @fp: flag buffer
1386 * @count: characters
1387 *
1388 * Called by the terminal driver when a block of characters has
1389 * been received. This function must be called from soft contexts
1390 * not from interrupt context. The driver is responsible for making
1391 * calls one at a time and in order (or using flush_to_ldisc)
1392 */
4edf1827 1393
55db4c64
LT
1394static void n_tty_receive_buf(struct tty_struct *tty, const unsigned char *cp,
1395 char *fp, int count)
1da177e4 1396{
53c5ee2c 1397 struct n_tty_data *ldata = tty->disc_data;
1da177e4
LT
1398 const unsigned char *p;
1399 char *f, flags = TTY_NORMAL;
1400 int i;
1401 char buf[64];
1402 unsigned long cpuflags;
1403
53c5ee2c 1404 if (ldata->real_raw) {
1da177e4
LT
1405 spin_lock_irqsave(&tty->read_lock, cpuflags);
1406 i = min(N_TTY_BUF_SIZE - tty->read_cnt,
1407 N_TTY_BUF_SIZE - tty->read_head);
1408 i = min(count, i);
1409 memcpy(tty->read_buf + tty->read_head, cp, i);
1410 tty->read_head = (tty->read_head + i) & (N_TTY_BUF_SIZE-1);
1411 tty->read_cnt += i;
1412 cp += i;
1413 count -= i;
1414
1415 i = min(N_TTY_BUF_SIZE - tty->read_cnt,
1416 N_TTY_BUF_SIZE - tty->read_head);
1417 i = min(count, i);
1418 memcpy(tty->read_buf + tty->read_head, cp, i);
1419 tty->read_head = (tty->read_head + i) & (N_TTY_BUF_SIZE-1);
1420 tty->read_cnt += i;
1421 spin_unlock_irqrestore(&tty->read_lock, cpuflags);
1422 } else {
4edf1827 1423 for (i = count, p = cp, f = fp; i; i--, p++) {
1da177e4
LT
1424 if (f)
1425 flags = *f++;
1426 switch (flags) {
1427 case TTY_NORMAL:
1428 n_tty_receive_char(tty, *p);
1429 break;
1430 case TTY_BREAK:
1431 n_tty_receive_break(tty);
1432 break;
1433 case TTY_PARITY:
1434 case TTY_FRAME:
1435 n_tty_receive_parity_error(tty, *p);
1436 break;
1437 case TTY_OVERRUN:
1438 n_tty_receive_overrun(tty);
1439 break;
1440 default:
4edf1827 1441 printk(KERN_ERR "%s: unknown flag %d\n",
1da177e4
LT
1442 tty_name(tty, buf), flags);
1443 break;
1444 }
1445 }
f34d7a5b
AC
1446 if (tty->ops->flush_chars)
1447 tty->ops->flush_chars(tty);
1da177e4
LT
1448 }
1449
55db4c64
LT
1450 n_tty_set_room(tty);
1451
53c5ee2c 1452 if ((!ldata->icanon && (tty->read_cnt >= tty->minimum_to_wake)) ||
26df6d13 1453 L_EXTPROC(tty)) {
1da177e4
LT
1454 kill_fasync(&tty->fasync, SIGIO, POLL_IN);
1455 if (waitqueue_active(&tty->read_wait))
1456 wake_up_interruptible(&tty->read_wait);
1457 }
1458
1459 /*
1460 * Check the remaining room for the input canonicalization
1461 * mode. We don't want to throttle the driver if we're in
1462 * canonical mode and don't have a newline yet!
1463 */
55db4c64 1464 if (tty->receive_room < TTY_THRESHOLD_THROTTLE)
39c2e60f 1465 tty_throttle(tty);
0a44ab41
AC
1466
1467 /* FIXME: there is a tiny race here if the receive room check runs
1468 before the other work executes and empties the buffer (upping
1469 the receiving room and unthrottling. We then throttle and get
1470 stuck. This has been observed and traced down by Vincent Pillet/
1471 We need to address this when we sort out out the rx path locking */
1da177e4
LT
1472}
1473
1474int is_ignored(int sig)
1475{
1476 return (sigismember(&current->blocked, sig) ||
4edf1827 1477 current->sighand->action[sig-1].sa.sa_handler == SIG_IGN);
1da177e4
LT
1478}
1479
1480/**
1481 * n_tty_set_termios - termios data changed
1482 * @tty: terminal
1483 * @old: previous data
1484 *
1485 * Called by the tty layer when the user changes termios flags so
1486 * that the line discipline can plan ahead. This function cannot sleep
4edf1827 1487 * and is protected from re-entry by the tty layer. The user is
1da177e4
LT
1488 * guaranteed that this function will not be re-entered or in progress
1489 * when the ldisc is closed.
17b82060
AC
1490 *
1491 * Locking: Caller holds tty->termios_mutex
1da177e4 1492 */
4edf1827
AC
1493
1494static void n_tty_set_termios(struct tty_struct *tty, struct ktermios *old)
1da177e4 1495{
53c5ee2c 1496 struct n_tty_data *ldata = tty->disc_data;
47afa7a5 1497 int canon_change = 1;
47afa7a5
AC
1498
1499 if (old)
adc8d746 1500 canon_change = (old->c_lflag ^ tty->termios.c_lflag) & ICANON;
47afa7a5 1501 if (canon_change) {
3fe780b3 1502 bitmap_zero(ldata->read_flags, N_TTY_BUF_SIZE);
47afa7a5
AC
1503 tty->canon_head = tty->read_tail;
1504 tty->canon_data = 0;
53c5ee2c 1505 ldata->erasing = 0;
47afa7a5
AC
1506 }
1507
1508 if (canon_change && !L_ICANON(tty) && tty->read_cnt)
1509 wake_up_interruptible(&tty->read_wait);
4edf1827 1510
53c5ee2c 1511 ldata->icanon = (L_ICANON(tty) != 0);
1da177e4 1512 if (test_bit(TTY_HW_COOK_IN, &tty->flags)) {
53c5ee2c
JS
1513 ldata->raw = 1;
1514 ldata->real_raw = 1;
55db4c64 1515 n_tty_set_room(tty);
1da177e4
LT
1516 return;
1517 }
1518 if (I_ISTRIP(tty) || I_IUCLC(tty) || I_IGNCR(tty) ||
1519 I_ICRNL(tty) || I_INLCR(tty) || L_ICANON(tty) ||
1520 I_IXON(tty) || L_ISIG(tty) || L_ECHO(tty) ||
1521 I_PARMRK(tty)) {
3fe780b3 1522 bitmap_zero(ldata->process_char_map, 256);
1da177e4
LT
1523
1524 if (I_IGNCR(tty) || I_ICRNL(tty))
3fe780b3 1525 set_bit('\r', ldata->process_char_map);
1da177e4 1526 if (I_INLCR(tty))
3fe780b3 1527 set_bit('\n', ldata->process_char_map);
1da177e4
LT
1528
1529 if (L_ICANON(tty)) {
3fe780b3
JS
1530 set_bit(ERASE_CHAR(tty), ldata->process_char_map);
1531 set_bit(KILL_CHAR(tty), ldata->process_char_map);
1532 set_bit(EOF_CHAR(tty), ldata->process_char_map);
1533 set_bit('\n', ldata->process_char_map);
1534 set_bit(EOL_CHAR(tty), ldata->process_char_map);
1da177e4
LT
1535 if (L_IEXTEN(tty)) {
1536 set_bit(WERASE_CHAR(tty),
3fe780b3 1537 ldata->process_char_map);
1da177e4 1538 set_bit(LNEXT_CHAR(tty),
3fe780b3 1539 ldata->process_char_map);
1da177e4 1540 set_bit(EOL2_CHAR(tty),
3fe780b3 1541 ldata->process_char_map);
1da177e4
LT
1542 if (L_ECHO(tty))
1543 set_bit(REPRINT_CHAR(tty),
3fe780b3 1544 ldata->process_char_map);
1da177e4
LT
1545 }
1546 }
1547 if (I_IXON(tty)) {
3fe780b3
JS
1548 set_bit(START_CHAR(tty), ldata->process_char_map);
1549 set_bit(STOP_CHAR(tty), ldata->process_char_map);
1da177e4
LT
1550 }
1551 if (L_ISIG(tty)) {
3fe780b3
JS
1552 set_bit(INTR_CHAR(tty), ldata->process_char_map);
1553 set_bit(QUIT_CHAR(tty), ldata->process_char_map);
1554 set_bit(SUSP_CHAR(tty), ldata->process_char_map);
1da177e4 1555 }
3fe780b3 1556 clear_bit(__DISABLED_CHAR, ldata->process_char_map);
53c5ee2c
JS
1557 ldata->raw = 0;
1558 ldata->real_raw = 0;
1da177e4 1559 } else {
53c5ee2c 1560 ldata->raw = 1;
1da177e4
LT
1561 if ((I_IGNBRK(tty) || (!I_BRKINT(tty) && !I_PARMRK(tty))) &&
1562 (I_IGNPAR(tty) || !I_INPCK(tty)) &&
1563 (tty->driver->flags & TTY_DRIVER_REAL_RAW))
53c5ee2c 1564 ldata->real_raw = 1;
1da177e4 1565 else
53c5ee2c 1566 ldata->real_raw = 0;
1da177e4 1567 }
55db4c64 1568 n_tty_set_room(tty);
f34d7a5b
AC
1569 /* The termios change make the tty ready for I/O */
1570 wake_up_interruptible(&tty->write_wait);
1571 wake_up_interruptible(&tty->read_wait);
1da177e4
LT
1572}
1573
1574/**
1575 * n_tty_close - close the ldisc for this tty
1576 * @tty: device
1577 *
4edf1827
AC
1578 * Called from the terminal layer when this line discipline is
1579 * being shut down, either because of a close or becsuse of a
1da177e4
LT
1580 * discipline change. The function will not be called while other
1581 * ldisc methods are in progress.
1582 */
4edf1827 1583
1da177e4
LT
1584static void n_tty_close(struct tty_struct *tty)
1585{
70ece7a7
JS
1586 struct n_tty_data *ldata = tty->disc_data;
1587
1da177e4 1588 n_tty_flush_buffer(tty);
b91939f5
JS
1589 kfree(tty->read_buf);
1590 kfree(tty->echo_buf);
70ece7a7 1591 kfree(ldata);
b91939f5
JS
1592 tty->read_buf = NULL;
1593 tty->echo_buf = NULL;
70ece7a7 1594 tty->disc_data = NULL;
1da177e4
LT
1595}
1596
1597/**
1598 * n_tty_open - open an ldisc
1599 * @tty: terminal to open
1600 *
4edf1827 1601 * Called when this line discipline is being attached to the
1da177e4
LT
1602 * terminal device. Can sleep. Called serialized so that no
1603 * other events will occur in parallel. No further open will occur
1604 * until a close.
1605 */
1606
1607static int n_tty_open(struct tty_struct *tty)
1608{
70ece7a7
JS
1609 struct n_tty_data *ldata;
1610
1611 ldata = kzalloc(sizeof(*ldata), GFP_KERNEL);
1612 if (!ldata)
1613 goto err;
1614
53c5ee2c
JS
1615 ldata->overrun_time = jiffies;
1616
a88a69c9 1617 /* These are ugly. Currently a malloc failure here can panic */
b91939f5
JS
1618 tty->read_buf = kzalloc(N_TTY_BUF_SIZE, GFP_KERNEL);
1619 tty->echo_buf = kzalloc(N_TTY_BUF_SIZE, GFP_KERNEL);
1620 if (!tty->read_buf || !tty->echo_buf)
1621 goto err_free_bufs;
0b4068a1 1622
70ece7a7 1623 tty->disc_data = ldata;
1da177e4 1624 reset_buffer_flags(tty);
7b292b4b 1625 tty_unthrottle(tty);
53c5ee2c 1626 ldata->column = 0;
1da177e4
LT
1627 n_tty_set_termios(tty, NULL);
1628 tty->minimum_to_wake = 1;
1629 tty->closing = 0;
70ece7a7 1630
1da177e4 1631 return 0;
b91939f5
JS
1632err_free_bufs:
1633 kfree(tty->read_buf);
1634 kfree(tty->echo_buf);
70ece7a7
JS
1635 kfree(ldata);
1636err:
b91939f5 1637 return -ENOMEM;
1da177e4
LT
1638}
1639
1640static inline int input_available_p(struct tty_struct *tty, int amt)
1641{
53c5ee2c
JS
1642 struct n_tty_data *ldata = tty->disc_data;
1643
e043e42b 1644 tty_flush_to_ldisc(tty);
53c5ee2c 1645 if (ldata->icanon && !L_EXTPROC(tty)) {
1da177e4
LT
1646 if (tty->canon_data)
1647 return 1;
1648 } else if (tty->read_cnt >= (amt ? amt : 1))
1649 return 1;
1650
1651 return 0;
1652}
1653
1654/**
bbd20759 1655 * copy_from_read_buf - copy read data directly
1da177e4
LT
1656 * @tty: terminal device
1657 * @b: user data
1658 * @nr: size of data
1659 *
11a96d18 1660 * Helper function to speed up n_tty_read. It is only called when
1da177e4
LT
1661 * ICANON is off; it copies characters straight from the tty queue to
1662 * user space directly. It can be profitably called twice; once to
1663 * drain the space from the tail pointer to the (physical) end of the
1664 * buffer, and once to drain the space from the (physical) beginning of
1665 * the buffer to head pointer.
1666 *
817d6d3b 1667 * Called under the tty->atomic_read_lock sem
1da177e4
LT
1668 *
1669 */
4edf1827 1670
33f0f88f 1671static int copy_from_read_buf(struct tty_struct *tty,
1da177e4
LT
1672 unsigned char __user **b,
1673 size_t *nr)
1674
1675{
53c5ee2c 1676 struct n_tty_data *ldata = tty->disc_data;
1da177e4
LT
1677 int retval;
1678 size_t n;
1679 unsigned long flags;
3fa10cc8 1680 bool is_eof;
1da177e4
LT
1681
1682 retval = 0;
1683 spin_lock_irqsave(&tty->read_lock, flags);
1684 n = min(tty->read_cnt, N_TTY_BUF_SIZE - tty->read_tail);
1685 n = min(*nr, n);
1686 spin_unlock_irqrestore(&tty->read_lock, flags);
1687 if (n) {
1da177e4
LT
1688 retval = copy_to_user(*b, &tty->read_buf[tty->read_tail], n);
1689 n -= retval;
3fa10cc8
JS
1690 is_eof = n == 1 &&
1691 tty->read_buf[tty->read_tail] == EOF_CHAR(tty);
6c633f27 1692 tty_audit_add_data(tty, &tty->read_buf[tty->read_tail], n,
53c5ee2c 1693 ldata->icanon);
1da177e4
LT
1694 spin_lock_irqsave(&tty->read_lock, flags);
1695 tty->read_tail = (tty->read_tail + n) & (N_TTY_BUF_SIZE-1);
1696 tty->read_cnt -= n;
26df6d13 1697 /* Turn single EOF into zero-length read */
53c5ee2c 1698 if (L_EXTPROC(tty) && ldata->icanon && is_eof && !tty->read_cnt)
3fa10cc8 1699 n = 0;
1da177e4
LT
1700 spin_unlock_irqrestore(&tty->read_lock, flags);
1701 *b += n;
1702 *nr -= n;
1703 }
1704 return retval;
1705}
1706
cc4191dc 1707extern ssize_t redirected_tty_write(struct file *, const char __user *,
4edf1827 1708 size_t, loff_t *);
1da177e4
LT
1709
1710/**
1711 * job_control - check job control
1712 * @tty: tty
1713 * @file: file handle
1714 *
1715 * Perform job control management checks on this file/tty descriptor
4edf1827 1716 * and if appropriate send any needed signals and return a negative
1da177e4 1717 * error code if action should be taken.
04f378b1
AC
1718 *
1719 * FIXME:
1720 * Locking: None - redirected write test is safe, testing
1721 * current->signal should possibly lock current->sighand
1722 * pgrp locking ?
1da177e4 1723 */
4edf1827 1724
1da177e4
LT
1725static int job_control(struct tty_struct *tty, struct file *file)
1726{
1727 /* Job control check -- must be done at start and after
1728 every sleep (POSIX.1 7.1.1.4). */
1729 /* NOTE: not yet done after every sleep pending a thorough
1730 check of the logic of this change. -- jlc */
1731 /* don't stop on /dev/console */
1732 if (file->f_op->write != redirected_tty_write &&
1733 current->signal->tty == tty) {
ab521dc0 1734 if (!tty->pgrp)
11a96d18 1735 printk(KERN_ERR "n_tty_read: no tty->pgrp!\n");
ab521dc0 1736 else if (task_pgrp(current) != tty->pgrp) {
1da177e4 1737 if (is_ignored(SIGTTIN) ||
3e7cd6c4 1738 is_current_pgrp_orphaned())
1da177e4 1739 return -EIO;
ab521dc0 1740 kill_pgrp(task_pgrp(current), SIGTTIN, 1);
040b6362 1741 set_thread_flag(TIF_SIGPENDING);
1da177e4
LT
1742 return -ERESTARTSYS;
1743 }
1744 }
1745 return 0;
1746}
4edf1827 1747
1da177e4
LT
1748
1749/**
11a96d18 1750 * n_tty_read - read function for tty
1da177e4
LT
1751 * @tty: tty device
1752 * @file: file object
1753 * @buf: userspace buffer pointer
1754 * @nr: size of I/O
1755 *
1756 * Perform reads for the line discipline. We are guaranteed that the
1757 * line discipline will not be closed under us but we may get multiple
1758 * parallel readers and must handle this ourselves. We may also get
1759 * a hangup. Always called in user context, may sleep.
1760 *
1761 * This code must be sure never to sleep through a hangup.
1762 */
4edf1827 1763
11a96d18 1764static ssize_t n_tty_read(struct tty_struct *tty, struct file *file,
1da177e4
LT
1765 unsigned char __user *buf, size_t nr)
1766{
53c5ee2c 1767 struct n_tty_data *ldata = tty->disc_data;
1da177e4
LT
1768 unsigned char __user *b = buf;
1769 DECLARE_WAITQUEUE(wait, current);
1770 int c;
1771 int minimum, time;
1772 ssize_t retval = 0;
1773 ssize_t size;
1774 long timeout;
1775 unsigned long flags;
04f378b1 1776 int packet;
1da177e4
LT
1777
1778do_it_again:
1da177e4 1779 c = job_control(tty, file);
4edf1827 1780 if (c < 0)
1da177e4 1781 return c;
4edf1827 1782
1da177e4
LT
1783 minimum = time = 0;
1784 timeout = MAX_SCHEDULE_TIMEOUT;
53c5ee2c 1785 if (!ldata->icanon) {
1da177e4
LT
1786 time = (HZ / 10) * TIME_CHAR(tty);
1787 minimum = MIN_CHAR(tty);
1788 if (minimum) {
1789 if (time)
1790 tty->minimum_to_wake = 1;
1791 else if (!waitqueue_active(&tty->read_wait) ||
1792 (tty->minimum_to_wake > minimum))
1793 tty->minimum_to_wake = minimum;
1794 } else {
1795 timeout = 0;
1796 if (time) {
1797 timeout = time;
1798 time = 0;
1799 }
1800 tty->minimum_to_wake = minimum = 1;
1801 }
1802 }
1803
1804 /*
1805 * Internal serialization of reads.
1806 */
1807 if (file->f_flags & O_NONBLOCK) {
70522e12 1808 if (!mutex_trylock(&tty->atomic_read_lock))
1da177e4 1809 return -EAGAIN;
4edf1827 1810 } else {
70522e12 1811 if (mutex_lock_interruptible(&tty->atomic_read_lock))
1da177e4
LT
1812 return -ERESTARTSYS;
1813 }
04f378b1 1814 packet = tty->packet;
1da177e4
LT
1815
1816 add_wait_queue(&tty->read_wait, &wait);
1da177e4
LT
1817 while (nr) {
1818 /* First test for status change. */
04f378b1 1819 if (packet && tty->link->ctrl_status) {
1da177e4
LT
1820 unsigned char cs;
1821 if (b != buf)
1822 break;
04f378b1 1823 spin_lock_irqsave(&tty->link->ctrl_lock, flags);
1da177e4
LT
1824 cs = tty->link->ctrl_status;
1825 tty->link->ctrl_status = 0;
04f378b1 1826 spin_unlock_irqrestore(&tty->link->ctrl_lock, flags);
522ed776 1827 if (tty_put_user(tty, cs, b++)) {
1da177e4
LT
1828 retval = -EFAULT;
1829 b--;
1830 break;
1831 }
1832 nr--;
1833 break;
1834 }
1835 /* This statement must be first before checking for input
1836 so that any interrupt will set the state back to
1837 TASK_RUNNING. */
1838 set_current_state(TASK_INTERRUPTIBLE);
4edf1827 1839
1da177e4
LT
1840 if (((minimum - (b - buf)) < tty->minimum_to_wake) &&
1841 ((minimum - (b - buf)) >= 1))
1842 tty->minimum_to_wake = (minimum - (b - buf));
4edf1827 1843
1da177e4
LT
1844 if (!input_available_p(tty, 0)) {
1845 if (test_bit(TTY_OTHER_CLOSED, &tty->flags)) {
1846 retval = -EIO;
1847 break;
1848 }
1849 if (tty_hung_up_p(file))
1850 break;
1851 if (!timeout)
1852 break;
1853 if (file->f_flags & O_NONBLOCK) {
1854 retval = -EAGAIN;
1855 break;
1856 }
1857 if (signal_pending(current)) {
1858 retval = -ERESTARTSYS;
1859 break;
1860 }
55db4c64
LT
1861 /* FIXME: does n_tty_set_room need locking ? */
1862 n_tty_set_room(tty);
1da177e4 1863 timeout = schedule_timeout(timeout);
1da177e4
LT
1864 continue;
1865 }
1866 __set_current_state(TASK_RUNNING);
1867
1868 /* Deal with packet mode. */
04f378b1 1869 if (packet && b == buf) {
522ed776 1870 if (tty_put_user(tty, TIOCPKT_DATA, b++)) {
1da177e4
LT
1871 retval = -EFAULT;
1872 b--;
1873 break;
1874 }
1875 nr--;
1876 }
1877
53c5ee2c 1878 if (ldata->icanon && !L_EXTPROC(tty)) {
1da177e4 1879 /* N.B. avoid overrun if nr == 0 */
00aaae03 1880 spin_lock_irqsave(&tty->read_lock, flags);
1da177e4 1881 while (nr && tty->read_cnt) {
4edf1827 1882 int eol;
1da177e4
LT
1883
1884 eol = test_and_clear_bit(tty->read_tail,
3fe780b3 1885 ldata->read_flags);
1da177e4 1886 c = tty->read_buf[tty->read_tail];
1da177e4
LT
1887 tty->read_tail = ((tty->read_tail+1) &
1888 (N_TTY_BUF_SIZE-1));
1889 tty->read_cnt--;
1890 if (eol) {
1891 /* this test should be redundant:
1892 * we shouldn't be reading data if
1893 * canon_data is 0
1894 */
1895 if (--tty->canon_data < 0)
1896 tty->canon_data = 0;
1897 }
1898 spin_unlock_irqrestore(&tty->read_lock, flags);
1899
1900 if (!eol || (c != __DISABLED_CHAR)) {
522ed776 1901 if (tty_put_user(tty, c, b++)) {
1da177e4
LT
1902 retval = -EFAULT;
1903 b--;
00aaae03 1904 spin_lock_irqsave(&tty->read_lock, flags);
1da177e4
LT
1905 break;
1906 }
1907 nr--;
1908 }
522ed776
MT
1909 if (eol) {
1910 tty_audit_push(tty);
00aaae03 1911 spin_lock_irqsave(&tty->read_lock, flags);
1da177e4 1912 break;
522ed776 1913 }
00aaae03 1914 spin_lock_irqsave(&tty->read_lock, flags);
1da177e4 1915 }
00aaae03 1916 spin_unlock_irqrestore(&tty->read_lock, flags);
1da177e4
LT
1917 if (retval)
1918 break;
1919 } else {
1920 int uncopied;
04f378b1
AC
1921 /* The copy function takes the read lock and handles
1922 locking internally for this case */
1da177e4
LT
1923 uncopied = copy_from_read_buf(tty, &b, &nr);
1924 uncopied += copy_from_read_buf(tty, &b, &nr);
1925 if (uncopied) {
1926 retval = -EFAULT;
1927 break;
1928 }
1929 }
1930
1931 /* If there is enough space in the read buffer now, let the
1932 * low-level driver know. We use n_tty_chars_in_buffer() to
1933 * check the buffer, as it now knows about canonical mode.
1934 * Otherwise, if the driver is throttled and the line is
1935 * longer than TTY_THRESHOLD_UNTHROTTLE in canonical mode,
1936 * we won't get any more characters.
1937 */
55db4c64
LT
1938 if (n_tty_chars_in_buffer(tty) <= TTY_THRESHOLD_UNTHROTTLE) {
1939 n_tty_set_room(tty);
1da177e4 1940 check_unthrottle(tty);
55db4c64 1941 }
1da177e4
LT
1942
1943 if (b - buf >= minimum)
1944 break;
1945 if (time)
1946 timeout = time;
1947 }
70522e12 1948 mutex_unlock(&tty->atomic_read_lock);
1da177e4
LT
1949 remove_wait_queue(&tty->read_wait, &wait);
1950
1951 if (!waitqueue_active(&tty->read_wait))
1952 tty->minimum_to_wake = minimum;
1953
1954 __set_current_state(TASK_RUNNING);
1955 size = b - buf;
1956 if (size) {
1957 retval = size;
1958 if (nr)
4edf1827 1959 clear_bit(TTY_PUSH, &tty->flags);
1da177e4 1960 } else if (test_and_clear_bit(TTY_PUSH, &tty->flags))
bbd20759 1961 goto do_it_again;
1da177e4 1962
55db4c64 1963 n_tty_set_room(tty);
1da177e4
LT
1964 return retval;
1965}
1966
1967/**
11a96d18 1968 * n_tty_write - write function for tty
1da177e4
LT
1969 * @tty: tty device
1970 * @file: file object
1971 * @buf: userspace buffer pointer
1972 * @nr: size of I/O
1973 *
a88a69c9 1974 * Write function of the terminal device. This is serialized with
1da177e4 1975 * respect to other write callers but not to termios changes, reads
a88a69c9
JP
1976 * and other such events. Since the receive code will echo characters,
1977 * thus calling driver write methods, the output_lock is used in
1978 * the output processing functions called here as well as in the
1979 * echo processing function to protect the column state and space
1980 * left in the buffer.
1da177e4
LT
1981 *
1982 * This code must be sure never to sleep through a hangup.
a88a69c9
JP
1983 *
1984 * Locking: output_lock to protect column state and space left
1985 * (note that the process_output*() functions take this
1986 * lock themselves)
1da177e4 1987 */
4edf1827 1988
11a96d18 1989static ssize_t n_tty_write(struct tty_struct *tty, struct file *file,
a88a69c9 1990 const unsigned char *buf, size_t nr)
1da177e4
LT
1991{
1992 const unsigned char *b = buf;
1993 DECLARE_WAITQUEUE(wait, current);
1994 int c;
1995 ssize_t retval = 0;
1996
1997 /* Job control check -- must be done at start (POSIX.1 7.1.1.4). */
1998 if (L_TOSTOP(tty) && file->f_op->write != redirected_tty_write) {
1999 retval = tty_check_change(tty);
2000 if (retval)
2001 return retval;
2002 }
2003
a88a69c9
JP
2004 /* Write out any echoed characters that are still pending */
2005 process_echoes(tty);
300a6204 2006
1da177e4
LT
2007 add_wait_queue(&tty->write_wait, &wait);
2008 while (1) {
2009 set_current_state(TASK_INTERRUPTIBLE);
2010 if (signal_pending(current)) {
2011 retval = -ERESTARTSYS;
2012 break;
2013 }
2014 if (tty_hung_up_p(file) || (tty->link && !tty->link->count)) {
2015 retval = -EIO;
2016 break;
2017 }
2018 if (O_OPOST(tty) && !(test_bit(TTY_HW_COOK_OUT, &tty->flags))) {
2019 while (nr > 0) {
a88a69c9 2020 ssize_t num = process_output_block(tty, b, nr);
1da177e4
LT
2021 if (num < 0) {
2022 if (num == -EAGAIN)
2023 break;
2024 retval = num;
2025 goto break_out;
2026 }
2027 b += num;
2028 nr -= num;
2029 if (nr == 0)
2030 break;
2031 c = *b;
a88a69c9 2032 if (process_output(c, tty) < 0)
1da177e4
LT
2033 break;
2034 b++; nr--;
2035 }
f34d7a5b
AC
2036 if (tty->ops->flush_chars)
2037 tty->ops->flush_chars(tty);
1da177e4 2038 } else {
d6afe27b 2039 while (nr > 0) {
f34d7a5b 2040 c = tty->ops->write(tty, b, nr);
d6afe27b
RZ
2041 if (c < 0) {
2042 retval = c;
2043 goto break_out;
2044 }
2045 if (!c)
2046 break;
2047 b += c;
2048 nr -= c;
1da177e4 2049 }
1da177e4
LT
2050 }
2051 if (!nr)
2052 break;
2053 if (file->f_flags & O_NONBLOCK) {
2054 retval = -EAGAIN;
2055 break;
2056 }
2057 schedule();
2058 }
2059break_out:
2060 __set_current_state(TASK_RUNNING);
2061 remove_wait_queue(&tty->write_wait, &wait);
ff8cb0fd
TP
2062 if (b - buf != nr && tty->fasync)
2063 set_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
1da177e4
LT
2064 return (b - buf) ? b - buf : retval;
2065}
2066
2067/**
11a96d18 2068 * n_tty_poll - poll method for N_TTY
1da177e4
LT
2069 * @tty: terminal device
2070 * @file: file accessing it
2071 * @wait: poll table
2072 *
2073 * Called when the line discipline is asked to poll() for data or
2074 * for special events. This code is not serialized with respect to
2075 * other events save open/close.
2076 *
2077 * This code must be sure never to sleep through a hangup.
2078 * Called without the kernel lock held - fine
1da177e4 2079 */
4edf1827 2080
11a96d18 2081static unsigned int n_tty_poll(struct tty_struct *tty, struct file *file,
4edf1827 2082 poll_table *wait)
1da177e4
LT
2083{
2084 unsigned int mask = 0;
2085
2086 poll_wait(file, &tty->read_wait, wait);
2087 poll_wait(file, &tty->write_wait, wait);
2088 if (input_available_p(tty, TIME_CHAR(tty) ? 0 : MIN_CHAR(tty)))
2089 mask |= POLLIN | POLLRDNORM;
2090 if (tty->packet && tty->link->ctrl_status)
2091 mask |= POLLPRI | POLLIN | POLLRDNORM;
2092 if (test_bit(TTY_OTHER_CLOSED, &tty->flags))
2093 mask |= POLLHUP;
2094 if (tty_hung_up_p(file))
2095 mask |= POLLHUP;
2096 if (!(mask & (POLLHUP | POLLIN | POLLRDNORM))) {
2097 if (MIN_CHAR(tty) && !TIME_CHAR(tty))
2098 tty->minimum_to_wake = MIN_CHAR(tty);
2099 else
2100 tty->minimum_to_wake = 1;
2101 }
f34d7a5b
AC
2102 if (tty->ops->write && !tty_is_writelocked(tty) &&
2103 tty_chars_in_buffer(tty) < WAKEUP_CHARS &&
2104 tty_write_room(tty) > 0)
1da177e4
LT
2105 mask |= POLLOUT | POLLWRNORM;
2106 return mask;
2107}
2108
47afa7a5
AC
2109static unsigned long inq_canon(struct tty_struct *tty)
2110{
3fe780b3 2111 struct n_tty_data *ldata = tty->disc_data;
47afa7a5
AC
2112 int nr, head, tail;
2113
17b82060 2114 if (!tty->canon_data)
47afa7a5
AC
2115 return 0;
2116 head = tty->canon_head;
2117 tail = tty->read_tail;
2118 nr = (head - tail) & (N_TTY_BUF_SIZE-1);
2119 /* Skip EOF-chars.. */
2120 while (head != tail) {
3fe780b3 2121 if (test_bit(tail, ldata->read_flags) &&
47afa7a5
AC
2122 tty->read_buf[tail] == __DISABLED_CHAR)
2123 nr--;
2124 tail = (tail+1) & (N_TTY_BUF_SIZE-1);
2125 }
2126 return nr;
2127}
2128
2129static int n_tty_ioctl(struct tty_struct *tty, struct file *file,
2130 unsigned int cmd, unsigned long arg)
2131{
2132 int retval;
2133
2134 switch (cmd) {
2135 case TIOCOUTQ:
2136 return put_user(tty_chars_in_buffer(tty), (int __user *) arg);
2137 case TIOCINQ:
17b82060 2138 /* FIXME: Locking */
47afa7a5
AC
2139 retval = tty->read_cnt;
2140 if (L_ICANON(tty))
2141 retval = inq_canon(tty);
2142 return put_user(retval, (unsigned int __user *) arg);
2143 default:
2144 return n_tty_ioctl_helper(tty, file, cmd, arg);
2145 }
2146}
2147
a352def2 2148struct tty_ldisc_ops tty_ldisc_N_TTY = {
e10cc1df
PF
2149 .magic = TTY_LDISC_MAGIC,
2150 .name = "n_tty",
2151 .open = n_tty_open,
2152 .close = n_tty_close,
2153 .flush_buffer = n_tty_flush_buffer,
2154 .chars_in_buffer = n_tty_chars_in_buffer,
11a96d18
AC
2155 .read = n_tty_read,
2156 .write = n_tty_write,
e10cc1df
PF
2157 .ioctl = n_tty_ioctl,
2158 .set_termios = n_tty_set_termios,
11a96d18 2159 .poll = n_tty_poll,
e10cc1df
PF
2160 .receive_buf = n_tty_receive_buf,
2161 .write_wakeup = n_tty_write_wakeup
1da177e4 2162};
572b9adb
RG
2163
2164/**
2165 * n_tty_inherit_ops - inherit N_TTY methods
2166 * @ops: struct tty_ldisc_ops where to save N_TTY methods
2167 *
2168 * Used by a generic struct tty_ldisc_ops to easily inherit N_TTY
2169 * methods.
2170 */
2171
2172void n_tty_inherit_ops(struct tty_ldisc_ops *ops)
2173{
2174 *ops = tty_ldisc_N_TTY;
2175 ops->owner = NULL;
2176 ops->refcount = ops->flags = 0;
2177}
2178EXPORT_SYMBOL_GPL(n_tty_inherit_ops);
This page took 0.833124 seconds and 5 git commands to generate.