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