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