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