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