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