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