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