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