Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.15-rc3 1559 lines 39 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 write_chan 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 49#include <asm/uaccess.h> 50#include <asm/system.h> 51 52/* number of characters left in xmit buffer before select has we have room */ 53#define WAKEUP_CHARS 256 54 55/* 56 * This defines the low- and high-watermarks for throttling and 57 * unthrottling the TTY driver. These watermarks are used for 58 * controlling the space in the read buffer. 59 */ 60#define TTY_THRESHOLD_THROTTLE 128 /* now based on remaining room */ 61#define TTY_THRESHOLD_UNTHROTTLE 128 62 63static inline unsigned char *alloc_buf(void) 64{ 65 gfp_t prio = in_interrupt() ? GFP_ATOMIC : GFP_KERNEL; 66 67 if (PAGE_SIZE != N_TTY_BUF_SIZE) 68 return kmalloc(N_TTY_BUF_SIZE, prio); 69 else 70 return (unsigned char *)__get_free_page(prio); 71} 72 73static inline void free_buf(unsigned char *buf) 74{ 75 if (PAGE_SIZE != N_TTY_BUF_SIZE) 76 kfree(buf); 77 else 78 free_page((unsigned long) buf); 79} 80 81static inline void put_tty_queue_nolock(unsigned char c, struct tty_struct *tty) 82{ 83 if (tty->read_cnt < N_TTY_BUF_SIZE) { 84 tty->read_buf[tty->read_head] = c; 85 tty->read_head = (tty->read_head + 1) & (N_TTY_BUF_SIZE-1); 86 tty->read_cnt++; 87 } 88} 89 90static inline void put_tty_queue(unsigned char c, struct tty_struct *tty) 91{ 92 unsigned long flags; 93 /* 94 * The problem of stomping on the buffers ends here. 95 * Why didn't anyone see this one coming? --AJK 96 */ 97 spin_lock_irqsave(&tty->read_lock, flags); 98 put_tty_queue_nolock(c, tty); 99 spin_unlock_irqrestore(&tty->read_lock, flags); 100} 101 102/** 103 * check_unthrottle - allow new receive data 104 * @tty; tty device 105 * 106 * Check whether to call the driver.unthrottle function. 107 * We test the TTY_THROTTLED bit first so that it always 108 * indicates the current state. The decision about whether 109 * it is worth allowing more input has been taken by the caller. 110 * Can sleep, may be called under the atomic_read semaphore but 111 * this is not guaranteed. 112 */ 113 114static void check_unthrottle(struct tty_struct * tty) 115{ 116 if (tty->count && 117 test_and_clear_bit(TTY_THROTTLED, &tty->flags) && 118 tty->driver->unthrottle) 119 tty->driver->unthrottle(tty); 120} 121 122/** 123 * reset_buffer_flags - reset buffer state 124 * @tty: terminal to reset 125 * 126 * Reset the read buffer counters, clear the flags, 127 * and make sure the driver is unthrottled. Called 128 * from n_tty_open() and n_tty_flush_buffer(). 129 */ 130static void reset_buffer_flags(struct tty_struct *tty) 131{ 132 unsigned long flags; 133 134 spin_lock_irqsave(&tty->read_lock, flags); 135 tty->read_head = tty->read_tail = tty->read_cnt = 0; 136 spin_unlock_irqrestore(&tty->read_lock, flags); 137 tty->canon_head = tty->canon_data = tty->erasing = 0; 138 memset(&tty->read_flags, 0, sizeof tty->read_flags); 139 check_unthrottle(tty); 140} 141 142/** 143 * n_tty_flush_buffer - clean input queue 144 * @tty: terminal device 145 * 146 * Flush the input buffer. Called when the line discipline is 147 * being closed, when the tty layer wants the buffer flushed (eg 148 * at hangup) or when the N_TTY line discipline internally has to 149 * clean the pending queue (for example some signals). 150 * 151 * FIXME: tty->ctrl_status is not spinlocked and relies on 152 * lock_kernel() still. 153 */ 154 155static void n_tty_flush_buffer(struct tty_struct * tty) 156{ 157 /* clear everything and unthrottle the driver */ 158 reset_buffer_flags(tty); 159 160 if (!tty->link) 161 return; 162 163 if (tty->link->packet) { 164 tty->ctrl_status |= TIOCPKT_FLUSHREAD; 165 wake_up_interruptible(&tty->link->read_wait); 166 } 167} 168 169/** 170 * n_tty_chars_in_buffer - report available bytes 171 * @tty: tty device 172 * 173 * Report the number of characters buffered to be delivered to user 174 * at this instant in time. 175 */ 176 177static ssize_t n_tty_chars_in_buffer(struct tty_struct *tty) 178{ 179 unsigned long flags; 180 ssize_t n = 0; 181 182 spin_lock_irqsave(&tty->read_lock, flags); 183 if (!tty->icanon) { 184 n = tty->read_cnt; 185 } else if (tty->canon_data) { 186 n = (tty->canon_head > tty->read_tail) ? 187 tty->canon_head - tty->read_tail : 188 tty->canon_head + (N_TTY_BUF_SIZE - tty->read_tail); 189 } 190 spin_unlock_irqrestore(&tty->read_lock, flags); 191 return n; 192} 193 194/** 195 * is_utf8_continuation - utf8 multibyte check 196 * @c: byte to check 197 * 198 * Returns true if the utf8 character 'c' is a multibyte continuation 199 * character. We use this to correctly compute the on screen size 200 * of the character when printing 201 */ 202 203static inline int is_utf8_continuation(unsigned char c) 204{ 205 return (c & 0xc0) == 0x80; 206} 207 208/** 209 * is_continuation - multibyte check 210 * @c: byte to check 211 * 212 * Returns true if the utf8 character 'c' is a multibyte continuation 213 * character and the terminal is in unicode mode. 214 */ 215 216static inline int is_continuation(unsigned char c, struct tty_struct *tty) 217{ 218 return I_IUTF8(tty) && is_utf8_continuation(c); 219} 220 221/** 222 * opost - output post processor 223 * @c: character (or partial unicode symbol) 224 * @tty: terminal device 225 * 226 * Perform OPOST processing. Returns -1 when the output device is 227 * full and the character must be retried. Note that Linux currently 228 * ignores TABDLY, CRDLY, VTDLY, FFDLY and NLDLY. They simply aren't 229 * relevant in the world today. If you ever need them, add them here. 230 * 231 * Called from both the receive and transmit sides and can be called 232 * re-entrantly. Relies on lock_kernel() still. 233 */ 234 235static int opost(unsigned char c, struct tty_struct *tty) 236{ 237 int space, spaces; 238 239 space = tty->driver->write_room(tty); 240 if (!space) 241 return -1; 242 243 if (O_OPOST(tty)) { 244 switch (c) { 245 case '\n': 246 if (O_ONLRET(tty)) 247 tty->column = 0; 248 if (O_ONLCR(tty)) { 249 if (space < 2) 250 return -1; 251 tty->driver->put_char(tty, '\r'); 252 tty->column = 0; 253 } 254 tty->canon_column = tty->column; 255 break; 256 case '\r': 257 if (O_ONOCR(tty) && tty->column == 0) 258 return 0; 259 if (O_OCRNL(tty)) { 260 c = '\n'; 261 if (O_ONLRET(tty)) 262 tty->canon_column = tty->column = 0; 263 break; 264 } 265 tty->canon_column = tty->column = 0; 266 break; 267 case '\t': 268 spaces = 8 - (tty->column & 7); 269 if (O_TABDLY(tty) == XTABS) { 270 if (space < spaces) 271 return -1; 272 tty->column += spaces; 273 tty->driver->write(tty, " ", spaces); 274 return 0; 275 } 276 tty->column += spaces; 277 break; 278 case '\b': 279 if (tty->column > 0) 280 tty->column--; 281 break; 282 default: 283 if (O_OLCUC(tty)) 284 c = toupper(c); 285 if (!iscntrl(c) && !is_continuation(c, tty)) 286 tty->column++; 287 break; 288 } 289 } 290 tty->driver->put_char(tty, c); 291 return 0; 292} 293 294/** 295 * opost_block - block postprocess 296 * @tty: terminal device 297 * @inbuf: user buffer 298 * @nr: number of bytes 299 * 300 * This path is used to speed up block console writes, among other 301 * things when processing blocks of output data. It handles only 302 * the simple cases normally found and helps to generate blocks of 303 * symbols for the console driver and thus improve performance. 304 * 305 * Called from write_chan under the tty layer write lock. 306 */ 307 308static ssize_t opost_block(struct tty_struct * tty, 309 const unsigned char * buf, unsigned int nr) 310{ 311 int space; 312 int i; 313 const unsigned char *cp; 314 315 space = tty->driver->write_room(tty); 316 if (!space) 317 return 0; 318 if (nr > space) 319 nr = space; 320 321 for (i = 0, cp = buf; i < nr; i++, cp++) { 322 switch (*cp) { 323 case '\n': 324 if (O_ONLRET(tty)) 325 tty->column = 0; 326 if (O_ONLCR(tty)) 327 goto break_out; 328 tty->canon_column = tty->column; 329 break; 330 case '\r': 331 if (O_ONOCR(tty) && tty->column == 0) 332 goto break_out; 333 if (O_OCRNL(tty)) 334 goto break_out; 335 tty->canon_column = tty->column = 0; 336 break; 337 case '\t': 338 goto break_out; 339 case '\b': 340 if (tty->column > 0) 341 tty->column--; 342 break; 343 default: 344 if (O_OLCUC(tty)) 345 goto break_out; 346 if (!iscntrl(*cp)) 347 tty->column++; 348 break; 349 } 350 } 351break_out: 352 if (tty->driver->flush_chars) 353 tty->driver->flush_chars(tty); 354 i = tty->driver->write(tty, buf, i); 355 return i; 356} 357 358 359/** 360 * put_char - write character to driver 361 * @c: character (or part of unicode symbol) 362 * @tty: terminal device 363 * 364 * Queue a byte to the driver layer for output 365 */ 366 367static inline void put_char(unsigned char c, struct tty_struct *tty) 368{ 369 tty->driver->put_char(tty, c); 370} 371 372/** 373 * echo_char - echo characters 374 * @c: unicode byte to echo 375 * @tty: terminal device 376 * 377 * Echo user input back onto the screen. This must be called only when 378 * L_ECHO(tty) is true. Called from the driver receive_buf path. 379 */ 380 381static void echo_char(unsigned char c, struct tty_struct *tty) 382{ 383 if (L_ECHOCTL(tty) && iscntrl(c) && c != '\t') { 384 put_char('^', tty); 385 put_char(c ^ 0100, tty); 386 tty->column += 2; 387 } else 388 opost(c, tty); 389} 390 391static inline void finish_erasing(struct tty_struct *tty) 392{ 393 if (tty->erasing) { 394 put_char('/', tty); 395 tty->column++; 396 tty->erasing = 0; 397 } 398} 399 400/** 401 * eraser - handle erase function 402 * @c: character input 403 * @tty: terminal device 404 * 405 * Perform erase and neccessary output when an erase character is 406 * present in the stream from the driver layer. Handles the complexities 407 * of UTF-8 multibyte symbols. 408 */ 409 410static void eraser(unsigned char c, struct tty_struct *tty) 411{ 412 enum { ERASE, WERASE, KILL } kill_type; 413 int head, seen_alnums, cnt; 414 unsigned long flags; 415 416 if (tty->read_head == tty->canon_head) { 417 /* opost('\a', tty); */ /* what do you think? */ 418 return; 419 } 420 if (c == ERASE_CHAR(tty)) 421 kill_type = ERASE; 422 else if (c == WERASE_CHAR(tty)) 423 kill_type = WERASE; 424 else { 425 if (!L_ECHO(tty)) { 426 spin_lock_irqsave(&tty->read_lock, flags); 427 tty->read_cnt -= ((tty->read_head - tty->canon_head) & 428 (N_TTY_BUF_SIZE - 1)); 429 tty->read_head = tty->canon_head; 430 spin_unlock_irqrestore(&tty->read_lock, flags); 431 return; 432 } 433 if (!L_ECHOK(tty) || !L_ECHOKE(tty) || !L_ECHOE(tty)) { 434 spin_lock_irqsave(&tty->read_lock, flags); 435 tty->read_cnt -= ((tty->read_head - tty->canon_head) & 436 (N_TTY_BUF_SIZE - 1)); 437 tty->read_head = tty->canon_head; 438 spin_unlock_irqrestore(&tty->read_lock, flags); 439 finish_erasing(tty); 440 echo_char(KILL_CHAR(tty), tty); 441 /* Add a newline if ECHOK is on and ECHOKE is off. */ 442 if (L_ECHOK(tty)) 443 opost('\n', tty); 444 return; 445 } 446 kill_type = KILL; 447 } 448 449 seen_alnums = 0; 450 while (tty->read_head != tty->canon_head) { 451 head = tty->read_head; 452 453 /* erase a single possibly multibyte character */ 454 do { 455 head = (head - 1) & (N_TTY_BUF_SIZE-1); 456 c = tty->read_buf[head]; 457 } while (is_continuation(c, tty) && head != tty->canon_head); 458 459 /* do not partially erase */ 460 if (is_continuation(c, tty)) 461 break; 462 463 if (kill_type == WERASE) { 464 /* Equivalent to BSD's ALTWERASE. */ 465 if (isalnum(c) || c == '_') 466 seen_alnums++; 467 else if (seen_alnums) 468 break; 469 } 470 cnt = (tty->read_head - head) & (N_TTY_BUF_SIZE-1); 471 spin_lock_irqsave(&tty->read_lock, flags); 472 tty->read_head = head; 473 tty->read_cnt -= cnt; 474 spin_unlock_irqrestore(&tty->read_lock, flags); 475 if (L_ECHO(tty)) { 476 if (L_ECHOPRT(tty)) { 477 if (!tty->erasing) { 478 put_char('\\', tty); 479 tty->column++; 480 tty->erasing = 1; 481 } 482 /* if cnt > 1, output a multi-byte character */ 483 echo_char(c, tty); 484 while (--cnt > 0) { 485 head = (head+1) & (N_TTY_BUF_SIZE-1); 486 put_char(tty->read_buf[head], tty); 487 } 488 } else if (kill_type == ERASE && !L_ECHOE(tty)) { 489 echo_char(ERASE_CHAR(tty), tty); 490 } else if (c == '\t') { 491 unsigned int col = tty->canon_column; 492 unsigned long tail = tty->canon_head; 493 494 /* Find the column of the last char. */ 495 while (tail != tty->read_head) { 496 c = tty->read_buf[tail]; 497 if (c == '\t') 498 col = (col | 7) + 1; 499 else if (iscntrl(c)) { 500 if (L_ECHOCTL(tty)) 501 col += 2; 502 } else if (!is_continuation(c, tty)) 503 col++; 504 tail = (tail+1) & (N_TTY_BUF_SIZE-1); 505 } 506 507 /* should never happen */ 508 if (tty->column > 0x80000000) 509 tty->column = 0; 510 511 /* Now backup to that column. */ 512 while (tty->column > col) { 513 /* Can't use opost here. */ 514 put_char('\b', tty); 515 if (tty->column > 0) 516 tty->column--; 517 } 518 } else { 519 if (iscntrl(c) && L_ECHOCTL(tty)) { 520 put_char('\b', tty); 521 put_char(' ', tty); 522 put_char('\b', tty); 523 if (tty->column > 0) 524 tty->column--; 525 } 526 if (!iscntrl(c) || L_ECHOCTL(tty)) { 527 put_char('\b', tty); 528 put_char(' ', tty); 529 put_char('\b', tty); 530 if (tty->column > 0) 531 tty->column--; 532 } 533 } 534 } 535 if (kill_type == ERASE) 536 break; 537 } 538 if (tty->read_head == tty->canon_head) 539 finish_erasing(tty); 540} 541 542/** 543 * isig - handle the ISIG optio 544 * @sig: signal 545 * @tty: terminal 546 * @flush: force flush 547 * 548 * Called when a signal is being sent due to terminal input. This 549 * may caus terminal flushing to take place according to the termios 550 * settings and character used. Called from the driver receive_buf 551 * path so serialized. 552 */ 553 554static inline void isig(int sig, struct tty_struct *tty, int flush) 555{ 556 if (tty->pgrp > 0) 557 kill_pg(tty->pgrp, sig, 1); 558 if (flush || !L_NOFLSH(tty)) { 559 n_tty_flush_buffer(tty); 560 if (tty->driver->flush_buffer) 561 tty->driver->flush_buffer(tty); 562 } 563} 564 565/** 566 * n_tty_receive_break - handle break 567 * @tty: terminal 568 * 569 * An RS232 break event has been hit in the incoming bitstream. This 570 * can cause a variety of events depending upon the termios settings. 571 * 572 * Called from the receive_buf path so single threaded. 573 */ 574 575static inline void n_tty_receive_break(struct tty_struct *tty) 576{ 577 if (I_IGNBRK(tty)) 578 return; 579 if (I_BRKINT(tty)) { 580 isig(SIGINT, tty, 1); 581 return; 582 } 583 if (I_PARMRK(tty)) { 584 put_tty_queue('\377', tty); 585 put_tty_queue('\0', tty); 586 } 587 put_tty_queue('\0', tty); 588 wake_up_interruptible(&tty->read_wait); 589} 590 591/** 592 * n_tty_receive_overrun - handle overrun reporting 593 * @tty: terminal 594 * 595 * Data arrived faster than we could process it. While the tty 596 * driver has flagged this the bits that were missed are gone 597 * forever. 598 * 599 * Called from the receive_buf path so single threaded. Does not 600 * need locking as num_overrun and overrun_time are function 601 * private. 602 */ 603 604static inline void n_tty_receive_overrun(struct tty_struct *tty) 605{ 606 char buf[64]; 607 608 tty->num_overrun++; 609 if (time_before(tty->overrun_time, jiffies - HZ) || 610 time_after(tty->overrun_time, jiffies)) { 611 printk(KERN_WARNING "%s: %d input overrun(s)\n", 612 tty_name(tty, buf), 613 tty->num_overrun); 614 tty->overrun_time = jiffies; 615 tty->num_overrun = 0; 616 } 617} 618 619/** 620 * n_tty_receive_parity_error - error notifier 621 * @tty: terminal device 622 * @c: character 623 * 624 * Process a parity error and queue the right data to indicate 625 * the error case if neccessary. Locking as per n_tty_receive_buf. 626 */ 627static inline void n_tty_receive_parity_error(struct tty_struct *tty, 628 unsigned char c) 629{ 630 if (I_IGNPAR(tty)) { 631 return; 632 } 633 if (I_PARMRK(tty)) { 634 put_tty_queue('\377', tty); 635 put_tty_queue('\0', tty); 636 put_tty_queue(c, tty); 637 } else if (I_INPCK(tty)) 638 put_tty_queue('\0', tty); 639 else 640 put_tty_queue(c, tty); 641 wake_up_interruptible(&tty->read_wait); 642} 643 644/** 645 * n_tty_receive_char - perform processing 646 * @tty: terminal device 647 * @c: character 648 * 649 * Process an individual character of input received from the driver. 650 * This is serialized with respect to itself by the rules for the 651 * driver above. 652 */ 653 654static inline void n_tty_receive_char(struct tty_struct *tty, unsigned char c) 655{ 656 unsigned long flags; 657 658 if (tty->raw) { 659 put_tty_queue(c, tty); 660 return; 661 } 662 663 if (tty->stopped && !tty->flow_stopped && 664 I_IXON(tty) && I_IXANY(tty)) { 665 start_tty(tty); 666 return; 667 } 668 669 if (I_ISTRIP(tty)) 670 c &= 0x7f; 671 if (I_IUCLC(tty) && L_IEXTEN(tty)) 672 c=tolower(c); 673 674 if (tty->closing) { 675 if (I_IXON(tty)) { 676 if (c == START_CHAR(tty)) 677 start_tty(tty); 678 else if (c == STOP_CHAR(tty)) 679 stop_tty(tty); 680 } 681 return; 682 } 683 684 /* 685 * If the previous character was LNEXT, or we know that this 686 * character is not one of the characters that we'll have to 687 * handle specially, do shortcut processing to speed things 688 * up. 689 */ 690 if (!test_bit(c, tty->process_char_map) || tty->lnext) { 691 finish_erasing(tty); 692 tty->lnext = 0; 693 if (L_ECHO(tty)) { 694 if (tty->read_cnt >= N_TTY_BUF_SIZE-1) { 695 put_char('\a', tty); /* beep if no space */ 696 return; 697 } 698 /* Record the column of first canon char. */ 699 if (tty->canon_head == tty->read_head) 700 tty->canon_column = tty->column; 701 echo_char(c, tty); 702 } 703 if (I_PARMRK(tty) && c == (unsigned char) '\377') 704 put_tty_queue(c, tty); 705 put_tty_queue(c, tty); 706 return; 707 } 708 709 if (c == '\r') { 710 if (I_IGNCR(tty)) 711 return; 712 if (I_ICRNL(tty)) 713 c = '\n'; 714 } else if (c == '\n' && I_INLCR(tty)) 715 c = '\r'; 716 if (I_IXON(tty)) { 717 if (c == START_CHAR(tty)) { 718 start_tty(tty); 719 return; 720 } 721 if (c == STOP_CHAR(tty)) { 722 stop_tty(tty); 723 return; 724 } 725 } 726 if (L_ISIG(tty)) { 727 int signal; 728 signal = SIGINT; 729 if (c == INTR_CHAR(tty)) 730 goto send_signal; 731 signal = SIGQUIT; 732 if (c == QUIT_CHAR(tty)) 733 goto send_signal; 734 signal = SIGTSTP; 735 if (c == SUSP_CHAR(tty)) { 736send_signal: 737 isig(signal, tty, 0); 738 return; 739 } 740 } 741 if (tty->icanon) { 742 if (c == ERASE_CHAR(tty) || c == KILL_CHAR(tty) || 743 (c == WERASE_CHAR(tty) && L_IEXTEN(tty))) { 744 eraser(c, tty); 745 return; 746 } 747 if (c == LNEXT_CHAR(tty) && L_IEXTEN(tty)) { 748 tty->lnext = 1; 749 if (L_ECHO(tty)) { 750 finish_erasing(tty); 751 if (L_ECHOCTL(tty)) { 752 put_char('^', tty); 753 put_char('\b', tty); 754 } 755 } 756 return; 757 } 758 if (c == REPRINT_CHAR(tty) && L_ECHO(tty) && 759 L_IEXTEN(tty)) { 760 unsigned long tail = tty->canon_head; 761 762 finish_erasing(tty); 763 echo_char(c, tty); 764 opost('\n', tty); 765 while (tail != tty->read_head) { 766 echo_char(tty->read_buf[tail], tty); 767 tail = (tail+1) & (N_TTY_BUF_SIZE-1); 768 } 769 return; 770 } 771 if (c == '\n') { 772 if (L_ECHO(tty) || L_ECHONL(tty)) { 773 if (tty->read_cnt >= N_TTY_BUF_SIZE-1) 774 put_char('\a', tty); 775 opost('\n', tty); 776 } 777 goto handle_newline; 778 } 779 if (c == EOF_CHAR(tty)) { 780 if (tty->canon_head != tty->read_head) 781 set_bit(TTY_PUSH, &tty->flags); 782 c = __DISABLED_CHAR; 783 goto handle_newline; 784 } 785 if ((c == EOL_CHAR(tty)) || 786 (c == EOL2_CHAR(tty) && L_IEXTEN(tty))) { 787 /* 788 * XXX are EOL_CHAR and EOL2_CHAR echoed?!? 789 */ 790 if (L_ECHO(tty)) { 791 if (tty->read_cnt >= N_TTY_BUF_SIZE-1) 792 put_char('\a', tty); 793 /* Record the column of first canon char. */ 794 if (tty->canon_head == tty->read_head) 795 tty->canon_column = tty->column; 796 echo_char(c, tty); 797 } 798 /* 799 * XXX does PARMRK doubling happen for 800 * EOL_CHAR and EOL2_CHAR? 801 */ 802 if (I_PARMRK(tty) && c == (unsigned char) '\377') 803 put_tty_queue(c, tty); 804 805 handle_newline: 806 spin_lock_irqsave(&tty->read_lock, flags); 807 set_bit(tty->read_head, tty->read_flags); 808 put_tty_queue_nolock(c, tty); 809 tty->canon_head = tty->read_head; 810 tty->canon_data++; 811 spin_unlock_irqrestore(&tty->read_lock, flags); 812 kill_fasync(&tty->fasync, SIGIO, POLL_IN); 813 if (waitqueue_active(&tty->read_wait)) 814 wake_up_interruptible(&tty->read_wait); 815 return; 816 } 817 } 818 819 finish_erasing(tty); 820 if (L_ECHO(tty)) { 821 if (tty->read_cnt >= N_TTY_BUF_SIZE-1) { 822 put_char('\a', tty); /* beep if no space */ 823 return; 824 } 825 if (c == '\n') 826 opost('\n', tty); 827 else { 828 /* Record the column of first canon char. */ 829 if (tty->canon_head == tty->read_head) 830 tty->canon_column = tty->column; 831 echo_char(c, tty); 832 } 833 } 834 835 if (I_PARMRK(tty) && c == (unsigned char) '\377') 836 put_tty_queue(c, tty); 837 838 put_tty_queue(c, tty); 839} 840 841/** 842 * n_tty_receive_room - receive space 843 * @tty: terminal 844 * 845 * Called by the driver to find out how much data it is 846 * permitted to feed to the line discipline without any being lost 847 * and thus to manage flow control. Not serialized. Answers for the 848 * "instant". 849 */ 850 851static int n_tty_receive_room(struct tty_struct *tty) 852{ 853 int left = N_TTY_BUF_SIZE - tty->read_cnt - 1; 854 855 /* 856 * If we are doing input canonicalization, and there are no 857 * pending newlines, let characters through without limit, so 858 * that erase characters will be handled. Other excess 859 * characters will be beeped. 860 */ 861 if (left <= 0) 862 left = tty->icanon && !tty->canon_data; 863 return left; 864} 865 866/** 867 * n_tty_write_wakeup - asynchronous I/O notifier 868 * @tty: tty device 869 * 870 * Required for the ptys, serial driver etc. since processes 871 * that attach themselves to the master and rely on ASYNC 872 * IO must be woken up 873 */ 874 875static void n_tty_write_wakeup(struct tty_struct *tty) 876{ 877 if (tty->fasync) 878 { 879 set_bit(TTY_DO_WRITE_WAKEUP, &tty->flags); 880 kill_fasync(&tty->fasync, SIGIO, POLL_OUT); 881 } 882 return; 883} 884 885/** 886 * n_tty_receive_buf - data receive 887 * @tty: terminal device 888 * @cp: buffer 889 * @fp: flag buffer 890 * @count: characters 891 * 892 * Called by the terminal driver when a block of characters has 893 * been received. This function must be called from soft contexts 894 * not from interrupt context. The driver is responsible for making 895 * calls one at a time and in order (or using flush_to_ldisc) 896 */ 897 898static void n_tty_receive_buf(struct tty_struct *tty, const unsigned char *cp, 899 char *fp, int count) 900{ 901 const unsigned char *p; 902 char *f, flags = TTY_NORMAL; 903 int i; 904 char buf[64]; 905 unsigned long cpuflags; 906 907 if (!tty->read_buf) 908 return; 909 910 if (tty->real_raw) { 911 spin_lock_irqsave(&tty->read_lock, cpuflags); 912 i = min(N_TTY_BUF_SIZE - tty->read_cnt, 913 N_TTY_BUF_SIZE - tty->read_head); 914 i = min(count, i); 915 memcpy(tty->read_buf + tty->read_head, cp, i); 916 tty->read_head = (tty->read_head + i) & (N_TTY_BUF_SIZE-1); 917 tty->read_cnt += i; 918 cp += i; 919 count -= i; 920 921 i = min(N_TTY_BUF_SIZE - tty->read_cnt, 922 N_TTY_BUF_SIZE - tty->read_head); 923 i = min(count, i); 924 memcpy(tty->read_buf + tty->read_head, cp, i); 925 tty->read_head = (tty->read_head + i) & (N_TTY_BUF_SIZE-1); 926 tty->read_cnt += i; 927 spin_unlock_irqrestore(&tty->read_lock, cpuflags); 928 } else { 929 for (i=count, p = cp, f = fp; i; i--, p++) { 930 if (f) 931 flags = *f++; 932 switch (flags) { 933 case TTY_NORMAL: 934 n_tty_receive_char(tty, *p); 935 break; 936 case TTY_BREAK: 937 n_tty_receive_break(tty); 938 break; 939 case TTY_PARITY: 940 case TTY_FRAME: 941 n_tty_receive_parity_error(tty, *p); 942 break; 943 case TTY_OVERRUN: 944 n_tty_receive_overrun(tty); 945 break; 946 default: 947 printk("%s: unknown flag %d\n", 948 tty_name(tty, buf), flags); 949 break; 950 } 951 } 952 if (tty->driver->flush_chars) 953 tty->driver->flush_chars(tty); 954 } 955 956 if (!tty->icanon && (tty->read_cnt >= tty->minimum_to_wake)) { 957 kill_fasync(&tty->fasync, SIGIO, POLL_IN); 958 if (waitqueue_active(&tty->read_wait)) 959 wake_up_interruptible(&tty->read_wait); 960 } 961 962 /* 963 * Check the remaining room for the input canonicalization 964 * mode. We don't want to throttle the driver if we're in 965 * canonical mode and don't have a newline yet! 966 */ 967 if (n_tty_receive_room(tty) < TTY_THRESHOLD_THROTTLE) { 968 /* check TTY_THROTTLED first so it indicates our state */ 969 if (!test_and_set_bit(TTY_THROTTLED, &tty->flags) && 970 tty->driver->throttle) 971 tty->driver->throttle(tty); 972 } 973} 974 975int is_ignored(int sig) 976{ 977 return (sigismember(&current->blocked, sig) || 978 current->sighand->action[sig-1].sa.sa_handler == SIG_IGN); 979} 980 981/** 982 * n_tty_set_termios - termios data changed 983 * @tty: terminal 984 * @old: previous data 985 * 986 * Called by the tty layer when the user changes termios flags so 987 * that the line discipline can plan ahead. This function cannot sleep 988 * and is protected from re-entry by the tty layer. The user is 989 * guaranteed that this function will not be re-entered or in progress 990 * when the ldisc is closed. 991 */ 992 993static void n_tty_set_termios(struct tty_struct *tty, struct termios * old) 994{ 995 if (!tty) 996 return; 997 998 tty->icanon = (L_ICANON(tty) != 0); 999 if (test_bit(TTY_HW_COOK_IN, &tty->flags)) { 1000 tty->raw = 1; 1001 tty->real_raw = 1; 1002 return; 1003 } 1004 if (I_ISTRIP(tty) || I_IUCLC(tty) || I_IGNCR(tty) || 1005 I_ICRNL(tty) || I_INLCR(tty) || L_ICANON(tty) || 1006 I_IXON(tty) || L_ISIG(tty) || L_ECHO(tty) || 1007 I_PARMRK(tty)) { 1008 memset(tty->process_char_map, 0, 256/8); 1009 1010 if (I_IGNCR(tty) || I_ICRNL(tty)) 1011 set_bit('\r', tty->process_char_map); 1012 if (I_INLCR(tty)) 1013 set_bit('\n', tty->process_char_map); 1014 1015 if (L_ICANON(tty)) { 1016 set_bit(ERASE_CHAR(tty), tty->process_char_map); 1017 set_bit(KILL_CHAR(tty), tty->process_char_map); 1018 set_bit(EOF_CHAR(tty), tty->process_char_map); 1019 set_bit('\n', tty->process_char_map); 1020 set_bit(EOL_CHAR(tty), tty->process_char_map); 1021 if (L_IEXTEN(tty)) { 1022 set_bit(WERASE_CHAR(tty), 1023 tty->process_char_map); 1024 set_bit(LNEXT_CHAR(tty), 1025 tty->process_char_map); 1026 set_bit(EOL2_CHAR(tty), 1027 tty->process_char_map); 1028 if (L_ECHO(tty)) 1029 set_bit(REPRINT_CHAR(tty), 1030 tty->process_char_map); 1031 } 1032 } 1033 if (I_IXON(tty)) { 1034 set_bit(START_CHAR(tty), tty->process_char_map); 1035 set_bit(STOP_CHAR(tty), tty->process_char_map); 1036 } 1037 if (L_ISIG(tty)) { 1038 set_bit(INTR_CHAR(tty), tty->process_char_map); 1039 set_bit(QUIT_CHAR(tty), tty->process_char_map); 1040 set_bit(SUSP_CHAR(tty), tty->process_char_map); 1041 } 1042 clear_bit(__DISABLED_CHAR, tty->process_char_map); 1043 tty->raw = 0; 1044 tty->real_raw = 0; 1045 } else { 1046 tty->raw = 1; 1047 if ((I_IGNBRK(tty) || (!I_BRKINT(tty) && !I_PARMRK(tty))) && 1048 (I_IGNPAR(tty) || !I_INPCK(tty)) && 1049 (tty->driver->flags & TTY_DRIVER_REAL_RAW)) 1050 tty->real_raw = 1; 1051 else 1052 tty->real_raw = 0; 1053 } 1054} 1055 1056/** 1057 * n_tty_close - close the ldisc for this tty 1058 * @tty: device 1059 * 1060 * Called from the terminal layer when this line discipline is 1061 * being shut down, either because of a close or becsuse of a 1062 * discipline change. The function will not be called while other 1063 * ldisc methods are in progress. 1064 */ 1065 1066static void n_tty_close(struct tty_struct *tty) 1067{ 1068 n_tty_flush_buffer(tty); 1069 if (tty->read_buf) { 1070 free_buf(tty->read_buf); 1071 tty->read_buf = NULL; 1072 } 1073} 1074 1075/** 1076 * n_tty_open - open an ldisc 1077 * @tty: terminal to open 1078 * 1079 * Called when this line discipline is being attached to the 1080 * terminal device. Can sleep. Called serialized so that no 1081 * other events will occur in parallel. No further open will occur 1082 * until a close. 1083 */ 1084 1085static int n_tty_open(struct tty_struct *tty) 1086{ 1087 if (!tty) 1088 return -EINVAL; 1089 1090 /* This one is ugly. Currently a malloc failure here can panic */ 1091 if (!tty->read_buf) { 1092 tty->read_buf = alloc_buf(); 1093 if (!tty->read_buf) 1094 return -ENOMEM; 1095 } 1096 memset(tty->read_buf, 0, N_TTY_BUF_SIZE); 1097 reset_buffer_flags(tty); 1098 tty->column = 0; 1099 n_tty_set_termios(tty, NULL); 1100 tty->minimum_to_wake = 1; 1101 tty->closing = 0; 1102 return 0; 1103} 1104 1105static inline int input_available_p(struct tty_struct *tty, int amt) 1106{ 1107 if (tty->icanon) { 1108 if (tty->canon_data) 1109 return 1; 1110 } else if (tty->read_cnt >= (amt ? amt : 1)) 1111 return 1; 1112 1113 return 0; 1114} 1115 1116/** 1117 * copy_from_read_buf - copy read data directly 1118 * @tty: terminal device 1119 * @b: user data 1120 * @nr: size of data 1121 * 1122 * Helper function to speed up read_chan. It is only called when 1123 * ICANON is off; it copies characters straight from the tty queue to 1124 * user space directly. It can be profitably called twice; once to 1125 * drain the space from the tail pointer to the (physical) end of the 1126 * buffer, and once to drain the space from the (physical) beginning of 1127 * the buffer to head pointer. 1128 * 1129 * Called under the tty->atomic_read sem and with TTY_DONT_FLIP set 1130 * 1131 */ 1132 1133static inline int copy_from_read_buf(struct tty_struct *tty, 1134 unsigned char __user **b, 1135 size_t *nr) 1136 1137{ 1138 int retval; 1139 size_t n; 1140 unsigned long flags; 1141 1142 retval = 0; 1143 spin_lock_irqsave(&tty->read_lock, flags); 1144 n = min(tty->read_cnt, N_TTY_BUF_SIZE - tty->read_tail); 1145 n = min(*nr, n); 1146 spin_unlock_irqrestore(&tty->read_lock, flags); 1147 if (n) { 1148 mb(); 1149 retval = copy_to_user(*b, &tty->read_buf[tty->read_tail], n); 1150 n -= retval; 1151 spin_lock_irqsave(&tty->read_lock, flags); 1152 tty->read_tail = (tty->read_tail + n) & (N_TTY_BUF_SIZE-1); 1153 tty->read_cnt -= n; 1154 spin_unlock_irqrestore(&tty->read_lock, flags); 1155 *b += n; 1156 *nr -= n; 1157 } 1158 return retval; 1159} 1160 1161extern ssize_t redirected_tty_write(struct file *,const char *,size_t,loff_t *); 1162 1163/** 1164 * job_control - check job control 1165 * @tty: tty 1166 * @file: file handle 1167 * 1168 * Perform job control management checks on this file/tty descriptor 1169 * and if appropriate send any needed signals and return a negative 1170 * error code if action should be taken. 1171 */ 1172 1173static int job_control(struct tty_struct *tty, struct file *file) 1174{ 1175 /* Job control check -- must be done at start and after 1176 every sleep (POSIX.1 7.1.1.4). */ 1177 /* NOTE: not yet done after every sleep pending a thorough 1178 check of the logic of this change. -- jlc */ 1179 /* don't stop on /dev/console */ 1180 if (file->f_op->write != redirected_tty_write && 1181 current->signal->tty == tty) { 1182 if (tty->pgrp <= 0) 1183 printk("read_chan: tty->pgrp <= 0!\n"); 1184 else if (process_group(current) != tty->pgrp) { 1185 if (is_ignored(SIGTTIN) || 1186 is_orphaned_pgrp(process_group(current))) 1187 return -EIO; 1188 kill_pg(process_group(current), SIGTTIN, 1); 1189 return -ERESTARTSYS; 1190 } 1191 } 1192 return 0; 1193} 1194 1195 1196/** 1197 * read_chan - read function for tty 1198 * @tty: tty device 1199 * @file: file object 1200 * @buf: userspace buffer pointer 1201 * @nr: size of I/O 1202 * 1203 * Perform reads for the line discipline. We are guaranteed that the 1204 * line discipline will not be closed under us but we may get multiple 1205 * parallel readers and must handle this ourselves. We may also get 1206 * a hangup. Always called in user context, may sleep. 1207 * 1208 * This code must be sure never to sleep through a hangup. 1209 */ 1210 1211static ssize_t read_chan(struct tty_struct *tty, struct file *file, 1212 unsigned char __user *buf, size_t nr) 1213{ 1214 unsigned char __user *b = buf; 1215 DECLARE_WAITQUEUE(wait, current); 1216 int c; 1217 int minimum, time; 1218 ssize_t retval = 0; 1219 ssize_t size; 1220 long timeout; 1221 unsigned long flags; 1222 1223do_it_again: 1224 1225 if (!tty->read_buf) { 1226 printk("n_tty_read_chan: called with read_buf == NULL?!?\n"); 1227 return -EIO; 1228 } 1229 1230 c = job_control(tty, file); 1231 if(c < 0) 1232 return c; 1233 1234 minimum = time = 0; 1235 timeout = MAX_SCHEDULE_TIMEOUT; 1236 if (!tty->icanon) { 1237 time = (HZ / 10) * TIME_CHAR(tty); 1238 minimum = MIN_CHAR(tty); 1239 if (minimum) { 1240 if (time) 1241 tty->minimum_to_wake = 1; 1242 else if (!waitqueue_active(&tty->read_wait) || 1243 (tty->minimum_to_wake > minimum)) 1244 tty->minimum_to_wake = minimum; 1245 } else { 1246 timeout = 0; 1247 if (time) { 1248 timeout = time; 1249 time = 0; 1250 } 1251 tty->minimum_to_wake = minimum = 1; 1252 } 1253 } 1254 1255 /* 1256 * Internal serialization of reads. 1257 */ 1258 if (file->f_flags & O_NONBLOCK) { 1259 if (down_trylock(&tty->atomic_read)) 1260 return -EAGAIN; 1261 } 1262 else { 1263 if (down_interruptible(&tty->atomic_read)) 1264 return -ERESTARTSYS; 1265 } 1266 1267 add_wait_queue(&tty->read_wait, &wait); 1268 set_bit(TTY_DONT_FLIP, &tty->flags); 1269 while (nr) { 1270 /* First test for status change. */ 1271 if (tty->packet && tty->link->ctrl_status) { 1272 unsigned char cs; 1273 if (b != buf) 1274 break; 1275 cs = tty->link->ctrl_status; 1276 tty->link->ctrl_status = 0; 1277 if (put_user(cs, b++)) { 1278 retval = -EFAULT; 1279 b--; 1280 break; 1281 } 1282 nr--; 1283 break; 1284 } 1285 /* This statement must be first before checking for input 1286 so that any interrupt will set the state back to 1287 TASK_RUNNING. */ 1288 set_current_state(TASK_INTERRUPTIBLE); 1289 1290 if (((minimum - (b - buf)) < tty->minimum_to_wake) && 1291 ((minimum - (b - buf)) >= 1)) 1292 tty->minimum_to_wake = (minimum - (b - buf)); 1293 1294 if (!input_available_p(tty, 0)) { 1295 if (test_bit(TTY_OTHER_CLOSED, &tty->flags)) { 1296 retval = -EIO; 1297 break; 1298 } 1299 if (tty_hung_up_p(file)) 1300 break; 1301 if (!timeout) 1302 break; 1303 if (file->f_flags & O_NONBLOCK) { 1304 retval = -EAGAIN; 1305 break; 1306 } 1307 if (signal_pending(current)) { 1308 retval = -ERESTARTSYS; 1309 break; 1310 } 1311 clear_bit(TTY_DONT_FLIP, &tty->flags); 1312 timeout = schedule_timeout(timeout); 1313 set_bit(TTY_DONT_FLIP, &tty->flags); 1314 continue; 1315 } 1316 __set_current_state(TASK_RUNNING); 1317 1318 /* Deal with packet mode. */ 1319 if (tty->packet && b == buf) { 1320 if (put_user(TIOCPKT_DATA, b++)) { 1321 retval = -EFAULT; 1322 b--; 1323 break; 1324 } 1325 nr--; 1326 } 1327 1328 if (tty->icanon) { 1329 /* N.B. avoid overrun if nr == 0 */ 1330 while (nr && tty->read_cnt) { 1331 int eol; 1332 1333 eol = test_and_clear_bit(tty->read_tail, 1334 tty->read_flags); 1335 c = tty->read_buf[tty->read_tail]; 1336 spin_lock_irqsave(&tty->read_lock, flags); 1337 tty->read_tail = ((tty->read_tail+1) & 1338 (N_TTY_BUF_SIZE-1)); 1339 tty->read_cnt--; 1340 if (eol) { 1341 /* this test should be redundant: 1342 * we shouldn't be reading data if 1343 * canon_data is 0 1344 */ 1345 if (--tty->canon_data < 0) 1346 tty->canon_data = 0; 1347 } 1348 spin_unlock_irqrestore(&tty->read_lock, flags); 1349 1350 if (!eol || (c != __DISABLED_CHAR)) { 1351 if (put_user(c, b++)) { 1352 retval = -EFAULT; 1353 b--; 1354 break; 1355 } 1356 nr--; 1357 } 1358 if (eol) 1359 break; 1360 } 1361 if (retval) 1362 break; 1363 } else { 1364 int uncopied; 1365 uncopied = copy_from_read_buf(tty, &b, &nr); 1366 uncopied += copy_from_read_buf(tty, &b, &nr); 1367 if (uncopied) { 1368 retval = -EFAULT; 1369 break; 1370 } 1371 } 1372 1373 /* If there is enough space in the read buffer now, let the 1374 * low-level driver know. We use n_tty_chars_in_buffer() to 1375 * check the buffer, as it now knows about canonical mode. 1376 * Otherwise, if the driver is throttled and the line is 1377 * longer than TTY_THRESHOLD_UNTHROTTLE in canonical mode, 1378 * we won't get any more characters. 1379 */ 1380 if (n_tty_chars_in_buffer(tty) <= TTY_THRESHOLD_UNTHROTTLE) 1381 check_unthrottle(tty); 1382 1383 if (b - buf >= minimum) 1384 break; 1385 if (time) 1386 timeout = time; 1387 } 1388 clear_bit(TTY_DONT_FLIP, &tty->flags); 1389 up(&tty->atomic_read); 1390 remove_wait_queue(&tty->read_wait, &wait); 1391 1392 if (!waitqueue_active(&tty->read_wait)) 1393 tty->minimum_to_wake = minimum; 1394 1395 __set_current_state(TASK_RUNNING); 1396 size = b - buf; 1397 if (size) { 1398 retval = size; 1399 if (nr) 1400 clear_bit(TTY_PUSH, &tty->flags); 1401 } else if (test_and_clear_bit(TTY_PUSH, &tty->flags)) 1402 goto do_it_again; 1403 1404 return retval; 1405} 1406 1407/** 1408 * write_chan - write function for tty 1409 * @tty: tty device 1410 * @file: file object 1411 * @buf: userspace buffer pointer 1412 * @nr: size of I/O 1413 * 1414 * Write function of the terminal device. This is serialized with 1415 * respect to other write callers but not to termios changes, reads 1416 * and other such events. We must be careful with N_TTY as the receive 1417 * code will echo characters, thus calling driver write methods. 1418 * 1419 * This code must be sure never to sleep through a hangup. 1420 */ 1421 1422static ssize_t write_chan(struct tty_struct * tty, struct file * file, 1423 const unsigned char * buf, size_t nr) 1424{ 1425 const unsigned char *b = buf; 1426 DECLARE_WAITQUEUE(wait, current); 1427 int c; 1428 ssize_t retval = 0; 1429 1430 /* Job control check -- must be done at start (POSIX.1 7.1.1.4). */ 1431 if (L_TOSTOP(tty) && file->f_op->write != redirected_tty_write) { 1432 retval = tty_check_change(tty); 1433 if (retval) 1434 return retval; 1435 } 1436 1437 add_wait_queue(&tty->write_wait, &wait); 1438 while (1) { 1439 set_current_state(TASK_INTERRUPTIBLE); 1440 if (signal_pending(current)) { 1441 retval = -ERESTARTSYS; 1442 break; 1443 } 1444 if (tty_hung_up_p(file) || (tty->link && !tty->link->count)) { 1445 retval = -EIO; 1446 break; 1447 } 1448 if (O_OPOST(tty) && !(test_bit(TTY_HW_COOK_OUT, &tty->flags))) { 1449 while (nr > 0) { 1450 ssize_t num = opost_block(tty, b, nr); 1451 if (num < 0) { 1452 if (num == -EAGAIN) 1453 break; 1454 retval = num; 1455 goto break_out; 1456 } 1457 b += num; 1458 nr -= num; 1459 if (nr == 0) 1460 break; 1461 c = *b; 1462 if (opost(c, tty) < 0) 1463 break; 1464 b++; nr--; 1465 } 1466 if (tty->driver->flush_chars) 1467 tty->driver->flush_chars(tty); 1468 } else { 1469 while (nr > 0) { 1470 c = tty->driver->write(tty, b, nr); 1471 if (c < 0) { 1472 retval = c; 1473 goto break_out; 1474 } 1475 if (!c) 1476 break; 1477 b += c; 1478 nr -= c; 1479 } 1480 } 1481 if (!nr) 1482 break; 1483 if (file->f_flags & O_NONBLOCK) { 1484 retval = -EAGAIN; 1485 break; 1486 } 1487 schedule(); 1488 } 1489break_out: 1490 __set_current_state(TASK_RUNNING); 1491 remove_wait_queue(&tty->write_wait, &wait); 1492 return (b - buf) ? b - buf : retval; 1493} 1494 1495/** 1496 * normal_poll - poll method for N_TTY 1497 * @tty: terminal device 1498 * @file: file accessing it 1499 * @wait: poll table 1500 * 1501 * Called when the line discipline is asked to poll() for data or 1502 * for special events. This code is not serialized with respect to 1503 * other events save open/close. 1504 * 1505 * This code must be sure never to sleep through a hangup. 1506 * Called without the kernel lock held - fine 1507 * 1508 * FIXME: if someone changes the VMIN or discipline settings for the 1509 * terminal while another process is in poll() the poll does not 1510 * recompute the new limits. Possibly set_termios should issue 1511 * a read wakeup to fix this bug. 1512 */ 1513 1514static unsigned int normal_poll(struct tty_struct * tty, struct file * file, poll_table *wait) 1515{ 1516 unsigned int mask = 0; 1517 1518 poll_wait(file, &tty->read_wait, wait); 1519 poll_wait(file, &tty->write_wait, wait); 1520 if (input_available_p(tty, TIME_CHAR(tty) ? 0 : MIN_CHAR(tty))) 1521 mask |= POLLIN | POLLRDNORM; 1522 if (tty->packet && tty->link->ctrl_status) 1523 mask |= POLLPRI | POLLIN | POLLRDNORM; 1524 if (test_bit(TTY_OTHER_CLOSED, &tty->flags)) 1525 mask |= POLLHUP; 1526 if (tty_hung_up_p(file)) 1527 mask |= POLLHUP; 1528 if (!(mask & (POLLHUP | POLLIN | POLLRDNORM))) { 1529 if (MIN_CHAR(tty) && !TIME_CHAR(tty)) 1530 tty->minimum_to_wake = MIN_CHAR(tty); 1531 else 1532 tty->minimum_to_wake = 1; 1533 } 1534 if (tty->driver->chars_in_buffer(tty) < WAKEUP_CHARS && 1535 tty->driver->write_room(tty) > 0) 1536 mask |= POLLOUT | POLLWRNORM; 1537 return mask; 1538} 1539 1540struct tty_ldisc tty_ldisc_N_TTY = { 1541 TTY_LDISC_MAGIC, /* magic */ 1542 "n_tty", /* name */ 1543 0, /* num */ 1544 0, /* flags */ 1545 n_tty_open, /* open */ 1546 n_tty_close, /* close */ 1547 n_tty_flush_buffer, /* flush_buffer */ 1548 n_tty_chars_in_buffer, /* chars_in_buffer */ 1549 read_chan, /* read */ 1550 write_chan, /* write */ 1551 n_tty_ioctl, /* ioctl */ 1552 n_tty_set_termios, /* set_termios */ 1553 normal_poll, /* poll */ 1554 NULL, /* hangup */ 1555 n_tty_receive_buf, /* receive_buf */ 1556 n_tty_receive_room, /* receive_room */ 1557 n_tty_write_wakeup /* write_wakeup */ 1558}; 1559