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