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