]> Pileus Git - ~andy/linux/blob - drivers/tty/n_tty.c
TTY: n_tty, remove bogus checks
[~andy/linux] / 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->real_raw) {
1379                 spin_lock_irqsave(&tty->read_lock, cpuflags);
1380                 i = min(N_TTY_BUF_SIZE - tty->read_cnt,
1381                         N_TTY_BUF_SIZE - tty->read_head);
1382                 i = min(count, i);
1383                 memcpy(tty->read_buf + tty->read_head, cp, i);
1384                 tty->read_head = (tty->read_head + i) & (N_TTY_BUF_SIZE-1);
1385                 tty->read_cnt += i;
1386                 cp += i;
1387                 count -= i;
1388
1389                 i = min(N_TTY_BUF_SIZE - tty->read_cnt,
1390                         N_TTY_BUF_SIZE - tty->read_head);
1391                 i = min(count, i);
1392                 memcpy(tty->read_buf + tty->read_head, cp, i);
1393                 tty->read_head = (tty->read_head + i) & (N_TTY_BUF_SIZE-1);
1394                 tty->read_cnt += i;
1395                 spin_unlock_irqrestore(&tty->read_lock, cpuflags);
1396         } else {
1397                 for (i = count, p = cp, f = fp; i; i--, p++) {
1398                         if (f)
1399                                 flags = *f++;
1400                         switch (flags) {
1401                         case TTY_NORMAL:
1402                                 n_tty_receive_char(tty, *p);
1403                                 break;
1404                         case TTY_BREAK:
1405                                 n_tty_receive_break(tty);
1406                                 break;
1407                         case TTY_PARITY:
1408                         case TTY_FRAME:
1409                                 n_tty_receive_parity_error(tty, *p);
1410                                 break;
1411                         case TTY_OVERRUN:
1412                                 n_tty_receive_overrun(tty);
1413                                 break;
1414                         default:
1415                                 printk(KERN_ERR "%s: unknown flag %d\n",
1416                                        tty_name(tty, buf), flags);
1417                                 break;
1418                         }
1419                 }
1420                 if (tty->ops->flush_chars)
1421                         tty->ops->flush_chars(tty);
1422         }
1423
1424         n_tty_set_room(tty);
1425
1426         if ((!tty->icanon && (tty->read_cnt >= tty->minimum_to_wake)) ||
1427                 L_EXTPROC(tty)) {
1428                 kill_fasync(&tty->fasync, SIGIO, POLL_IN);
1429                 if (waitqueue_active(&tty->read_wait))
1430                         wake_up_interruptible(&tty->read_wait);
1431         }
1432
1433         /*
1434          * Check the remaining room for the input canonicalization
1435          * mode.  We don't want to throttle the driver if we're in
1436          * canonical mode and don't have a newline yet!
1437          */
1438         if (tty->receive_room < TTY_THRESHOLD_THROTTLE)
1439                 tty_throttle(tty);
1440
1441         /* FIXME: there is a tiny race here if the receive room check runs
1442            before the other work executes and empties the buffer (upping
1443            the receiving room and unthrottling. We then throttle and get
1444            stuck. This has been observed and traced down by Vincent Pillet/
1445            We need to address this when we sort out out the rx path locking */
1446 }
1447
1448 int is_ignored(int sig)
1449 {
1450         return (sigismember(&current->blocked, sig) ||
1451                 current->sighand->action[sig-1].sa.sa_handler == SIG_IGN);
1452 }
1453
1454 /**
1455  *      n_tty_set_termios       -       termios data changed
1456  *      @tty: terminal
1457  *      @old: previous data
1458  *
1459  *      Called by the tty layer when the user changes termios flags so
1460  *      that the line discipline can plan ahead. This function cannot sleep
1461  *      and is protected from re-entry by the tty layer. The user is
1462  *      guaranteed that this function will not be re-entered or in progress
1463  *      when the ldisc is closed.
1464  *
1465  *      Locking: Caller holds tty->termios_mutex
1466  */
1467
1468 static void n_tty_set_termios(struct tty_struct *tty, struct ktermios *old)
1469 {
1470         int canon_change = 1;
1471
1472         if (old)
1473                 canon_change = (old->c_lflag ^ tty->termios.c_lflag) & ICANON;
1474         if (canon_change) {
1475                 memset(&tty->read_flags, 0, sizeof tty->read_flags);
1476                 tty->canon_head = tty->read_tail;
1477                 tty->canon_data = 0;
1478                 tty->erasing = 0;
1479         }
1480
1481         if (canon_change && !L_ICANON(tty) && tty->read_cnt)
1482                 wake_up_interruptible(&tty->read_wait);
1483
1484         tty->icanon = (L_ICANON(tty) != 0);
1485         if (test_bit(TTY_HW_COOK_IN, &tty->flags)) {
1486                 tty->raw = 1;
1487                 tty->real_raw = 1;
1488                 n_tty_set_room(tty);
1489                 return;
1490         }
1491         if (I_ISTRIP(tty) || I_IUCLC(tty) || I_IGNCR(tty) ||
1492             I_ICRNL(tty) || I_INLCR(tty) || L_ICANON(tty) ||
1493             I_IXON(tty) || L_ISIG(tty) || L_ECHO(tty) ||
1494             I_PARMRK(tty)) {
1495                 memset(tty->process_char_map, 0, 256/8);
1496
1497                 if (I_IGNCR(tty) || I_ICRNL(tty))
1498                         set_bit('\r', tty->process_char_map);
1499                 if (I_INLCR(tty))
1500                         set_bit('\n', tty->process_char_map);
1501
1502                 if (L_ICANON(tty)) {
1503                         set_bit(ERASE_CHAR(tty), tty->process_char_map);
1504                         set_bit(KILL_CHAR(tty), tty->process_char_map);
1505                         set_bit(EOF_CHAR(tty), tty->process_char_map);
1506                         set_bit('\n', tty->process_char_map);
1507                         set_bit(EOL_CHAR(tty), tty->process_char_map);
1508                         if (L_IEXTEN(tty)) {
1509                                 set_bit(WERASE_CHAR(tty),
1510                                         tty->process_char_map);
1511                                 set_bit(LNEXT_CHAR(tty),
1512                                         tty->process_char_map);
1513                                 set_bit(EOL2_CHAR(tty),
1514                                         tty->process_char_map);
1515                                 if (L_ECHO(tty))
1516                                         set_bit(REPRINT_CHAR(tty),
1517                                                 tty->process_char_map);
1518                         }
1519                 }
1520                 if (I_IXON(tty)) {
1521                         set_bit(START_CHAR(tty), tty->process_char_map);
1522                         set_bit(STOP_CHAR(tty), tty->process_char_map);
1523                 }
1524                 if (L_ISIG(tty)) {
1525                         set_bit(INTR_CHAR(tty), tty->process_char_map);
1526                         set_bit(QUIT_CHAR(tty), tty->process_char_map);
1527                         set_bit(SUSP_CHAR(tty), tty->process_char_map);
1528                 }
1529                 clear_bit(__DISABLED_CHAR, tty->process_char_map);
1530                 tty->raw = 0;
1531                 tty->real_raw = 0;
1532         } else {
1533                 tty->raw = 1;
1534                 if ((I_IGNBRK(tty) || (!I_BRKINT(tty) && !I_PARMRK(tty))) &&
1535                     (I_IGNPAR(tty) || !I_INPCK(tty)) &&
1536                     (tty->driver->flags & TTY_DRIVER_REAL_RAW))
1537                         tty->real_raw = 1;
1538                 else
1539                         tty->real_raw = 0;
1540         }
1541         n_tty_set_room(tty);
1542         /* The termios change make the tty ready for I/O */
1543         wake_up_interruptible(&tty->write_wait);
1544         wake_up_interruptible(&tty->read_wait);
1545 }
1546
1547 /**
1548  *      n_tty_close             -       close the ldisc for this tty
1549  *      @tty: device
1550  *
1551  *      Called from the terminal layer when this line discipline is
1552  *      being shut down, either because of a close or becsuse of a
1553  *      discipline change. The function will not be called while other
1554  *      ldisc methods are in progress.
1555  */
1556
1557 static void n_tty_close(struct tty_struct *tty)
1558 {
1559         n_tty_flush_buffer(tty);
1560         kfree(tty->read_buf);
1561         kfree(tty->echo_buf);
1562         tty->read_buf = NULL;
1563         tty->echo_buf = NULL;
1564 }
1565
1566 /**
1567  *      n_tty_open              -       open an ldisc
1568  *      @tty: terminal to open
1569  *
1570  *      Called when this line discipline is being attached to the
1571  *      terminal device. Can sleep. Called serialized so that no
1572  *      other events will occur in parallel. No further open will occur
1573  *      until a close.
1574  */
1575
1576 static int n_tty_open(struct tty_struct *tty)
1577 {
1578         /* These are ugly. Currently a malloc failure here can panic */
1579         tty->read_buf = kzalloc(N_TTY_BUF_SIZE, GFP_KERNEL);
1580         tty->echo_buf = kzalloc(N_TTY_BUF_SIZE, GFP_KERNEL);
1581         if (!tty->read_buf || !tty->echo_buf)
1582                 goto err_free_bufs;
1583
1584         reset_buffer_flags(tty);
1585         tty_unthrottle(tty);
1586         tty->column = 0;
1587         n_tty_set_termios(tty, NULL);
1588         tty->minimum_to_wake = 1;
1589         tty->closing = 0;
1590         return 0;
1591 err_free_bufs:
1592         kfree(tty->read_buf);
1593         kfree(tty->echo_buf);
1594
1595         return -ENOMEM;
1596 }
1597
1598 static inline int input_available_p(struct tty_struct *tty, int amt)
1599 {
1600         tty_flush_to_ldisc(tty);
1601         if (tty->icanon && !L_EXTPROC(tty)) {
1602                 if (tty->canon_data)
1603                         return 1;
1604         } else if (tty->read_cnt >= (amt ? amt : 1))
1605                 return 1;
1606
1607         return 0;
1608 }
1609
1610 /**
1611  *      copy_from_read_buf      -       copy read data directly
1612  *      @tty: terminal device
1613  *      @b: user data
1614  *      @nr: size of data
1615  *
1616  *      Helper function to speed up n_tty_read.  It is only called when
1617  *      ICANON is off; it copies characters straight from the tty queue to
1618  *      user space directly.  It can be profitably called twice; once to
1619  *      drain the space from the tail pointer to the (physical) end of the
1620  *      buffer, and once to drain the space from the (physical) beginning of
1621  *      the buffer to head pointer.
1622  *
1623  *      Called under the tty->atomic_read_lock sem
1624  *
1625  */
1626
1627 static int copy_from_read_buf(struct tty_struct *tty,
1628                                       unsigned char __user **b,
1629                                       size_t *nr)
1630
1631 {
1632         int retval;
1633         size_t n;
1634         unsigned long flags;
1635         bool is_eof;
1636
1637         retval = 0;
1638         spin_lock_irqsave(&tty->read_lock, flags);
1639         n = min(tty->read_cnt, N_TTY_BUF_SIZE - tty->read_tail);
1640         n = min(*nr, n);
1641         spin_unlock_irqrestore(&tty->read_lock, flags);
1642         if (n) {
1643                 retval = copy_to_user(*b, &tty->read_buf[tty->read_tail], n);
1644                 n -= retval;
1645                 is_eof = n == 1 &&
1646                         tty->read_buf[tty->read_tail] == EOF_CHAR(tty);
1647                 tty_audit_add_data(tty, &tty->read_buf[tty->read_tail], n);
1648                 spin_lock_irqsave(&tty->read_lock, flags);
1649                 tty->read_tail = (tty->read_tail + n) & (N_TTY_BUF_SIZE-1);
1650                 tty->read_cnt -= n;
1651                 /* Turn single EOF into zero-length read */
1652                 if (L_EXTPROC(tty) && tty->icanon && is_eof && !tty->read_cnt)
1653                         n = 0;
1654                 spin_unlock_irqrestore(&tty->read_lock, flags);
1655                 *b += n;
1656                 *nr -= n;
1657         }
1658         return retval;
1659 }
1660
1661 extern ssize_t redirected_tty_write(struct file *, const char __user *,
1662                                                         size_t, loff_t *);
1663
1664 /**
1665  *      job_control             -       check job control
1666  *      @tty: tty
1667  *      @file: file handle
1668  *
1669  *      Perform job control management checks on this file/tty descriptor
1670  *      and if appropriate send any needed signals and return a negative
1671  *      error code if action should be taken.
1672  *
1673  *      FIXME:
1674  *      Locking: None - redirected write test is safe, testing
1675  *      current->signal should possibly lock current->sighand
1676  *      pgrp locking ?
1677  */
1678
1679 static int job_control(struct tty_struct *tty, struct file *file)
1680 {
1681         /* Job control check -- must be done at start and after
1682            every sleep (POSIX.1 7.1.1.4). */
1683         /* NOTE: not yet done after every sleep pending a thorough
1684            check of the logic of this change. -- jlc */
1685         /* don't stop on /dev/console */
1686         if (file->f_op->write != redirected_tty_write &&
1687             current->signal->tty == tty) {
1688                 if (!tty->pgrp)
1689                         printk(KERN_ERR "n_tty_read: no tty->pgrp!\n");
1690                 else if (task_pgrp(current) != tty->pgrp) {
1691                         if (is_ignored(SIGTTIN) ||
1692                             is_current_pgrp_orphaned())
1693                                 return -EIO;
1694                         kill_pgrp(task_pgrp(current), SIGTTIN, 1);
1695                         set_thread_flag(TIF_SIGPENDING);
1696                         return -ERESTARTSYS;
1697                 }
1698         }
1699         return 0;
1700 }
1701
1702
1703 /**
1704  *      n_tty_read              -       read function for tty
1705  *      @tty: tty device
1706  *      @file: file object
1707  *      @buf: userspace buffer pointer
1708  *      @nr: size of I/O
1709  *
1710  *      Perform reads for the line discipline. We are guaranteed that the
1711  *      line discipline will not be closed under us but we may get multiple
1712  *      parallel readers and must handle this ourselves. We may also get
1713  *      a hangup. Always called in user context, may sleep.
1714  *
1715  *      This code must be sure never to sleep through a hangup.
1716  */
1717
1718 static ssize_t n_tty_read(struct tty_struct *tty, struct file *file,
1719                          unsigned char __user *buf, size_t nr)
1720 {
1721         unsigned char __user *b = buf;
1722         DECLARE_WAITQUEUE(wait, current);
1723         int c;
1724         int minimum, time;
1725         ssize_t retval = 0;
1726         ssize_t size;
1727         long timeout;
1728         unsigned long flags;
1729         int packet;
1730
1731 do_it_again:
1732         c = job_control(tty, file);
1733         if (c < 0)
1734                 return c;
1735
1736         minimum = time = 0;
1737         timeout = MAX_SCHEDULE_TIMEOUT;
1738         if (!tty->icanon) {
1739                 time = (HZ / 10) * TIME_CHAR(tty);
1740                 minimum = MIN_CHAR(tty);
1741                 if (minimum) {
1742                         if (time)
1743                                 tty->minimum_to_wake = 1;
1744                         else if (!waitqueue_active(&tty->read_wait) ||
1745                                  (tty->minimum_to_wake > minimum))
1746                                 tty->minimum_to_wake = minimum;
1747                 } else {
1748                         timeout = 0;
1749                         if (time) {
1750                                 timeout = time;
1751                                 time = 0;
1752                         }
1753                         tty->minimum_to_wake = minimum = 1;
1754                 }
1755         }
1756
1757         /*
1758          *      Internal serialization of reads.
1759          */
1760         if (file->f_flags & O_NONBLOCK) {
1761                 if (!mutex_trylock(&tty->atomic_read_lock))
1762                         return -EAGAIN;
1763         } else {
1764                 if (mutex_lock_interruptible(&tty->atomic_read_lock))
1765                         return -ERESTARTSYS;
1766         }
1767         packet = tty->packet;
1768
1769         add_wait_queue(&tty->read_wait, &wait);
1770         while (nr) {
1771                 /* First test for status change. */
1772                 if (packet && tty->link->ctrl_status) {
1773                         unsigned char cs;
1774                         if (b != buf)
1775                                 break;
1776                         spin_lock_irqsave(&tty->link->ctrl_lock, flags);
1777                         cs = tty->link->ctrl_status;
1778                         tty->link->ctrl_status = 0;
1779                         spin_unlock_irqrestore(&tty->link->ctrl_lock, flags);
1780                         if (tty_put_user(tty, cs, b++)) {
1781                                 retval = -EFAULT;
1782                                 b--;
1783                                 break;
1784                         }
1785                         nr--;
1786                         break;
1787                 }
1788                 /* This statement must be first before checking for input
1789                    so that any interrupt will set the state back to
1790                    TASK_RUNNING. */
1791                 set_current_state(TASK_INTERRUPTIBLE);
1792
1793                 if (((minimum - (b - buf)) < tty->minimum_to_wake) &&
1794                     ((minimum - (b - buf)) >= 1))
1795                         tty->minimum_to_wake = (minimum - (b - buf));
1796
1797                 if (!input_available_p(tty, 0)) {
1798                         if (test_bit(TTY_OTHER_CLOSED, &tty->flags)) {
1799                                 retval = -EIO;
1800                                 break;
1801                         }
1802                         if (tty_hung_up_p(file))
1803                                 break;
1804                         if (!timeout)
1805                                 break;
1806                         if (file->f_flags & O_NONBLOCK) {
1807                                 retval = -EAGAIN;
1808                                 break;
1809                         }
1810                         if (signal_pending(current)) {
1811                                 retval = -ERESTARTSYS;
1812                                 break;
1813                         }
1814                         /* FIXME: does n_tty_set_room need locking ? */
1815                         n_tty_set_room(tty);
1816                         timeout = schedule_timeout(timeout);
1817                         continue;
1818                 }
1819                 __set_current_state(TASK_RUNNING);
1820
1821                 /* Deal with packet mode. */
1822                 if (packet && b == buf) {
1823                         if (tty_put_user(tty, TIOCPKT_DATA, b++)) {
1824                                 retval = -EFAULT;
1825                                 b--;
1826                                 break;
1827                         }
1828                         nr--;
1829                 }
1830
1831                 if (tty->icanon && !L_EXTPROC(tty)) {
1832                         /* N.B. avoid overrun if nr == 0 */
1833                         spin_lock_irqsave(&tty->read_lock, flags);
1834                         while (nr && tty->read_cnt) {
1835                                 int eol;
1836
1837                                 eol = test_and_clear_bit(tty->read_tail,
1838                                                 tty->read_flags);
1839                                 c = tty->read_buf[tty->read_tail];
1840                                 tty->read_tail = ((tty->read_tail+1) &
1841                                                   (N_TTY_BUF_SIZE-1));
1842                                 tty->read_cnt--;
1843                                 if (eol) {
1844                                         /* this test should be redundant:
1845                                          * we shouldn't be reading data if
1846                                          * canon_data is 0
1847                                          */
1848                                         if (--tty->canon_data < 0)
1849                                                 tty->canon_data = 0;
1850                                 }
1851                                 spin_unlock_irqrestore(&tty->read_lock, flags);
1852
1853                                 if (!eol || (c != __DISABLED_CHAR)) {
1854                                         if (tty_put_user(tty, c, b++)) {
1855                                                 retval = -EFAULT;
1856                                                 b--;
1857                                                 spin_lock_irqsave(&tty->read_lock, flags);
1858                                                 break;
1859                                         }
1860                                         nr--;
1861                                 }
1862                                 if (eol) {
1863                                         tty_audit_push(tty);
1864                                         spin_lock_irqsave(&tty->read_lock, flags);
1865                                         break;
1866                                 }
1867                                 spin_lock_irqsave(&tty->read_lock, flags);
1868                         }
1869                         spin_unlock_irqrestore(&tty->read_lock, flags);
1870                         if (retval)
1871                                 break;
1872                 } else {
1873                         int uncopied;
1874                         /* The copy function takes the read lock and handles
1875                            locking internally for this case */
1876                         uncopied = copy_from_read_buf(tty, &b, &nr);
1877                         uncopied += copy_from_read_buf(tty, &b, &nr);
1878                         if (uncopied) {
1879                                 retval = -EFAULT;
1880                                 break;
1881                         }
1882                 }
1883
1884                 /* If there is enough space in the read buffer now, let the
1885                  * low-level driver know. We use n_tty_chars_in_buffer() to
1886                  * check the buffer, as it now knows about canonical mode.
1887                  * Otherwise, if the driver is throttled and the line is
1888                  * longer than TTY_THRESHOLD_UNTHROTTLE in canonical mode,
1889                  * we won't get any more characters.
1890                  */
1891                 if (n_tty_chars_in_buffer(tty) <= TTY_THRESHOLD_UNTHROTTLE) {
1892                         n_tty_set_room(tty);
1893                         check_unthrottle(tty);
1894                 }
1895
1896                 if (b - buf >= minimum)
1897                         break;
1898                 if (time)
1899                         timeout = time;
1900         }
1901         mutex_unlock(&tty->atomic_read_lock);
1902         remove_wait_queue(&tty->read_wait, &wait);
1903
1904         if (!waitqueue_active(&tty->read_wait))
1905                 tty->minimum_to_wake = minimum;
1906
1907         __set_current_state(TASK_RUNNING);
1908         size = b - buf;
1909         if (size) {
1910                 retval = size;
1911                 if (nr)
1912                         clear_bit(TTY_PUSH, &tty->flags);
1913         } else if (test_and_clear_bit(TTY_PUSH, &tty->flags))
1914                 goto do_it_again;
1915
1916         n_tty_set_room(tty);
1917         return retval;
1918 }
1919
1920 /**
1921  *      n_tty_write             -       write function for tty
1922  *      @tty: tty device
1923  *      @file: file object
1924  *      @buf: userspace buffer pointer
1925  *      @nr: size of I/O
1926  *
1927  *      Write function of the terminal device.  This is serialized with
1928  *      respect to other write callers but not to termios changes, reads
1929  *      and other such events.  Since the receive code will echo characters,
1930  *      thus calling driver write methods, the output_lock is used in
1931  *      the output processing functions called here as well as in the
1932  *      echo processing function to protect the column state and space
1933  *      left in the buffer.
1934  *
1935  *      This code must be sure never to sleep through a hangup.
1936  *
1937  *      Locking: output_lock to protect column state and space left
1938  *               (note that the process_output*() functions take this
1939  *                lock themselves)
1940  */
1941
1942 static ssize_t n_tty_write(struct tty_struct *tty, struct file *file,
1943                            const unsigned char *buf, size_t nr)
1944 {
1945         const unsigned char *b = buf;
1946         DECLARE_WAITQUEUE(wait, current);
1947         int c;
1948         ssize_t retval = 0;
1949
1950         /* Job control check -- must be done at start (POSIX.1 7.1.1.4). */
1951         if (L_TOSTOP(tty) && file->f_op->write != redirected_tty_write) {
1952                 retval = tty_check_change(tty);
1953                 if (retval)
1954                         return retval;
1955         }
1956
1957         /* Write out any echoed characters that are still pending */
1958         process_echoes(tty);
1959
1960         add_wait_queue(&tty->write_wait, &wait);
1961         while (1) {
1962                 set_current_state(TASK_INTERRUPTIBLE);
1963                 if (signal_pending(current)) {
1964                         retval = -ERESTARTSYS;
1965                         break;
1966                 }
1967                 if (tty_hung_up_p(file) || (tty->link && !tty->link->count)) {
1968                         retval = -EIO;
1969                         break;
1970                 }
1971                 if (O_OPOST(tty) && !(test_bit(TTY_HW_COOK_OUT, &tty->flags))) {
1972                         while (nr > 0) {
1973                                 ssize_t num = process_output_block(tty, b, nr);
1974                                 if (num < 0) {
1975                                         if (num == -EAGAIN)
1976                                                 break;
1977                                         retval = num;
1978                                         goto break_out;
1979                                 }
1980                                 b += num;
1981                                 nr -= num;
1982                                 if (nr == 0)
1983                                         break;
1984                                 c = *b;
1985                                 if (process_output(c, tty) < 0)
1986                                         break;
1987                                 b++; nr--;
1988                         }
1989                         if (tty->ops->flush_chars)
1990                                 tty->ops->flush_chars(tty);
1991                 } else {
1992                         while (nr > 0) {
1993                                 c = tty->ops->write(tty, b, nr);
1994                                 if (c < 0) {
1995                                         retval = c;
1996                                         goto break_out;
1997                                 }
1998                                 if (!c)
1999                                         break;
2000                                 b += c;
2001                                 nr -= c;
2002                         }
2003                 }
2004                 if (!nr)
2005                         break;
2006                 if (file->f_flags & O_NONBLOCK) {
2007                         retval = -EAGAIN;
2008                         break;
2009                 }
2010                 schedule();
2011         }
2012 break_out:
2013         __set_current_state(TASK_RUNNING);
2014         remove_wait_queue(&tty->write_wait, &wait);
2015         if (b - buf != nr && tty->fasync)
2016                 set_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
2017         return (b - buf) ? b - buf : retval;
2018 }
2019
2020 /**
2021  *      n_tty_poll              -       poll method for N_TTY
2022  *      @tty: terminal device
2023  *      @file: file accessing it
2024  *      @wait: poll table
2025  *
2026  *      Called when the line discipline is asked to poll() for data or
2027  *      for special events. This code is not serialized with respect to
2028  *      other events save open/close.
2029  *
2030  *      This code must be sure never to sleep through a hangup.
2031  *      Called without the kernel lock held - fine
2032  */
2033
2034 static unsigned int n_tty_poll(struct tty_struct *tty, struct file *file,
2035                                                         poll_table *wait)
2036 {
2037         unsigned int mask = 0;
2038
2039         poll_wait(file, &tty->read_wait, wait);
2040         poll_wait(file, &tty->write_wait, wait);
2041         if (input_available_p(tty, TIME_CHAR(tty) ? 0 : MIN_CHAR(tty)))
2042                 mask |= POLLIN | POLLRDNORM;
2043         if (tty->packet && tty->link->ctrl_status)
2044                 mask |= POLLPRI | POLLIN | POLLRDNORM;
2045         if (test_bit(TTY_OTHER_CLOSED, &tty->flags))
2046                 mask |= POLLHUP;
2047         if (tty_hung_up_p(file))
2048                 mask |= POLLHUP;
2049         if (!(mask & (POLLHUP | POLLIN | POLLRDNORM))) {
2050                 if (MIN_CHAR(tty) && !TIME_CHAR(tty))
2051                         tty->minimum_to_wake = MIN_CHAR(tty);
2052                 else
2053                         tty->minimum_to_wake = 1;
2054         }
2055         if (tty->ops->write && !tty_is_writelocked(tty) &&
2056                         tty_chars_in_buffer(tty) < WAKEUP_CHARS &&
2057                         tty_write_room(tty) > 0)
2058                 mask |= POLLOUT | POLLWRNORM;
2059         return mask;
2060 }
2061
2062 static unsigned long inq_canon(struct tty_struct *tty)
2063 {
2064         int nr, head, tail;
2065
2066         if (!tty->canon_data)
2067                 return 0;
2068         head = tty->canon_head;
2069         tail = tty->read_tail;
2070         nr = (head - tail) & (N_TTY_BUF_SIZE-1);
2071         /* Skip EOF-chars.. */
2072         while (head != tail) {
2073                 if (test_bit(tail, tty->read_flags) &&
2074                     tty->read_buf[tail] == __DISABLED_CHAR)
2075                         nr--;
2076                 tail = (tail+1) & (N_TTY_BUF_SIZE-1);
2077         }
2078         return nr;
2079 }
2080
2081 static int n_tty_ioctl(struct tty_struct *tty, struct file *file,
2082                        unsigned int cmd, unsigned long arg)
2083 {
2084         int retval;
2085
2086         switch (cmd) {
2087         case TIOCOUTQ:
2088                 return put_user(tty_chars_in_buffer(tty), (int __user *) arg);
2089         case TIOCINQ:
2090                 /* FIXME: Locking */
2091                 retval = tty->read_cnt;
2092                 if (L_ICANON(tty))
2093                         retval = inq_canon(tty);
2094                 return put_user(retval, (unsigned int __user *) arg);
2095         default:
2096                 return n_tty_ioctl_helper(tty, file, cmd, arg);
2097         }
2098 }
2099
2100 struct tty_ldisc_ops tty_ldisc_N_TTY = {
2101         .magic           = TTY_LDISC_MAGIC,
2102         .name            = "n_tty",
2103         .open            = n_tty_open,
2104         .close           = n_tty_close,
2105         .flush_buffer    = n_tty_flush_buffer,
2106         .chars_in_buffer = n_tty_chars_in_buffer,
2107         .read            = n_tty_read,
2108         .write           = n_tty_write,
2109         .ioctl           = n_tty_ioctl,
2110         .set_termios     = n_tty_set_termios,
2111         .poll            = n_tty_poll,
2112         .receive_buf     = n_tty_receive_buf,
2113         .write_wakeup    = n_tty_write_wakeup
2114 };
2115
2116 /**
2117  *      n_tty_inherit_ops       -       inherit N_TTY methods
2118  *      @ops: struct tty_ldisc_ops where to save N_TTY methods
2119  *
2120  *      Used by a generic struct tty_ldisc_ops to easily inherit N_TTY
2121  *      methods.
2122  */
2123
2124 void n_tty_inherit_ops(struct tty_ldisc_ops *ops)
2125 {
2126         *ops = tty_ldisc_N_TTY;
2127         ops->owner = NULL;
2128         ops->refcount = ops->flags = 0;
2129 }
2130 EXPORT_SYMBOL_GPL(n_tty_inherit_ops);