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