1 /* 2 * Copyright (C) 1991, 1992 Linus Torvalds 3 * 4 * Added support for a Unix98-style ptmx device. 5 * -- C. Scott Ananian <cananian@alumni.princeton.edu>, 14-Jan-1998 6 * 7 */ 8 9 #include <linux/module.h> 10 11 #include <linux/errno.h> 12 #include <linux/interrupt.h> 13 #include <linux/tty.h> 14 #include <linux/tty_flip.h> 15 #include <linux/fcntl.h> 16 #include <linux/sched.h> 17 #include <linux/string.h> 18 #include <linux/major.h> 19 #include <linux/mm.h> 20 #include <linux/init.h> 21 #include <linux/device.h> 22 #include <linux/uaccess.h> 23 #include <linux/bitops.h> 24 #include <linux/devpts_fs.h> 25 #include <linux/slab.h> 26 #include <linux/mutex.h> 27 28 29 #ifdef CONFIG_UNIX98_PTYS 30 static struct tty_driver *ptm_driver; 31 static struct tty_driver *pts_driver; 32 static DEFINE_MUTEX(devpts_mutex); 33 #endif 34 35 static void pty_close(struct tty_struct *tty, struct file *filp) 36 { 37 BUG_ON(!tty); 38 if (tty->driver->subtype == PTY_TYPE_MASTER) 39 WARN_ON(tty->count > 1); 40 else { 41 if (test_bit(TTY_IO_ERROR, &tty->flags)) 42 return; 43 if (tty->count > 2) 44 return; 45 } 46 set_bit(TTY_IO_ERROR, &tty->flags); 47 wake_up_interruptible(&tty->read_wait); 48 wake_up_interruptible(&tty->write_wait); 49 tty->packet = 0; 50 /* Review - krefs on tty_link ?? */ 51 if (!tty->link) 52 return; 53 set_bit(TTY_OTHER_CLOSED, &tty->link->flags); 54 wake_up_interruptible(&tty->link->read_wait); 55 wake_up_interruptible(&tty->link->write_wait); 56 if (tty->driver->subtype == PTY_TYPE_MASTER) { 57 set_bit(TTY_OTHER_CLOSED, &tty->flags); 58 #ifdef CONFIG_UNIX98_PTYS 59 if (tty->driver == ptm_driver) { 60 mutex_lock(&devpts_mutex); 61 if (tty->link->driver_data) 62 devpts_pty_kill(tty->link->driver_data); 63 mutex_unlock(&devpts_mutex); 64 } 65 #endif 66 tty_unlock(tty); 67 tty_vhangup(tty->link); 68 tty_lock(tty); 69 } 70 } 71 72 /* 73 * The unthrottle routine is called by the line discipline to signal 74 * that it can receive more characters. For PTY's, the TTY_THROTTLED 75 * flag is always set, to force the line discipline to always call the 76 * unthrottle routine when there are fewer than TTY_THRESHOLD_UNTHROTTLE 77 * characters in the queue. This is necessary since each time this 78 * happens, we need to wake up any sleeping processes that could be 79 * (1) trying to send data to the pty, or (2) waiting in wait_until_sent() 80 * for the pty buffer to be drained. 81 */ 82 static void pty_unthrottle(struct tty_struct *tty) 83 { 84 tty_wakeup(tty->link); 85 set_bit(TTY_THROTTLED, &tty->flags); 86 } 87 88 /** 89 * pty_space - report space left for writing 90 * @to: tty we are writing into 91 * 92 * Limit the buffer space used by ptys to 8k. 93 */ 94 95 static int pty_space(struct tty_struct *to) 96 { 97 int n = tty_buffer_space_avail(to->port); 98 return min(n, 8192); 99 } 100 101 /** 102 * pty_write - write to a pty 103 * @tty: the tty we write from 104 * @buf: kernel buffer of data 105 * @count: bytes to write 106 * 107 * Our "hardware" write method. Data is coming from the ldisc which 108 * may be in a non sleeping state. We simply throw this at the other 109 * end of the link as if we were an IRQ handler receiving stuff for 110 * the other side of the pty/tty pair. 111 */ 112 113 static int pty_write(struct tty_struct *tty, const unsigned char *buf, int c) 114 { 115 struct tty_struct *to = tty->link; 116 117 if (tty->stopped) 118 return 0; 119 120 if (c > 0) { 121 /* Stuff the data into the input queue of the other end */ 122 c = tty_insert_flip_string(to->port, buf, c); 123 /* And shovel */ 124 if (c) 125 tty_flip_buffer_push(to->port); 126 } 127 return c; 128 } 129 130 /** 131 * pty_write_room - write space 132 * @tty: tty we are writing from 133 * 134 * Report how many bytes the ldisc can send into the queue for 135 * the other device. 136 */ 137 138 static int pty_write_room(struct tty_struct *tty) 139 { 140 if (tty->stopped) 141 return 0; 142 return pty_space(tty->link); 143 } 144 145 /** 146 * pty_chars_in_buffer - characters currently in our tx queue 147 * @tty: our tty 148 * 149 * Report how much we have in the transmit queue. As everything is 150 * instantly at the other end this is easy to implement. 151 */ 152 153 static int pty_chars_in_buffer(struct tty_struct *tty) 154 { 155 return 0; 156 } 157 158 /* Set the lock flag on a pty */ 159 static int pty_set_lock(struct tty_struct *tty, int __user *arg) 160 { 161 int val; 162 if (get_user(val, arg)) 163 return -EFAULT; 164 if (val) 165 set_bit(TTY_PTY_LOCK, &tty->flags); 166 else 167 clear_bit(TTY_PTY_LOCK, &tty->flags); 168 return 0; 169 } 170 171 static int pty_get_lock(struct tty_struct *tty, int __user *arg) 172 { 173 int locked = test_bit(TTY_PTY_LOCK, &tty->flags); 174 return put_user(locked, arg); 175 } 176 177 /* Set the packet mode on a pty */ 178 static int pty_set_pktmode(struct tty_struct *tty, int __user *arg) 179 { 180 unsigned long flags; 181 int pktmode; 182 183 if (get_user(pktmode, arg)) 184 return -EFAULT; 185 186 spin_lock_irqsave(&tty->ctrl_lock, flags); 187 if (pktmode) { 188 if (!tty->packet) { 189 tty->packet = 1; 190 tty->link->ctrl_status = 0; 191 } 192 } else 193 tty->packet = 0; 194 spin_unlock_irqrestore(&tty->ctrl_lock, flags); 195 196 return 0; 197 } 198 199 /* Get the packet mode of a pty */ 200 static int pty_get_pktmode(struct tty_struct *tty, int __user *arg) 201 { 202 int pktmode = tty->packet; 203 return put_user(pktmode, arg); 204 } 205 206 /* Send a signal to the slave */ 207 static int pty_signal(struct tty_struct *tty, int sig) 208 { 209 unsigned long flags; 210 struct pid *pgrp; 211 212 if (tty->link) { 213 spin_lock_irqsave(&tty->link->ctrl_lock, flags); 214 pgrp = get_pid(tty->link->pgrp); 215 spin_unlock_irqrestore(&tty->link->ctrl_lock, flags); 216 217 kill_pgrp(pgrp, sig, 1); 218 put_pid(pgrp); 219 } 220 return 0; 221 } 222 223 static void pty_flush_buffer(struct tty_struct *tty) 224 { 225 struct tty_struct *to = tty->link; 226 unsigned long flags; 227 228 if (!to) 229 return; 230 /* tty_buffer_flush(to); FIXME */ 231 if (to->packet) { 232 spin_lock_irqsave(&tty->ctrl_lock, flags); 233 tty->ctrl_status |= TIOCPKT_FLUSHWRITE; 234 wake_up_interruptible(&to->read_wait); 235 spin_unlock_irqrestore(&tty->ctrl_lock, flags); 236 } 237 } 238 239 static int pty_open(struct tty_struct *tty, struct file *filp) 240 { 241 if (!tty || !tty->link) 242 return -ENODEV; 243 244 if (test_bit(TTY_OTHER_CLOSED, &tty->flags)) 245 goto out; 246 if (test_bit(TTY_PTY_LOCK, &tty->link->flags)) 247 goto out; 248 if (tty->driver->subtype == PTY_TYPE_SLAVE && tty->link->count != 1) 249 goto out; 250 251 clear_bit(TTY_IO_ERROR, &tty->flags); 252 clear_bit(TTY_OTHER_CLOSED, &tty->link->flags); 253 set_bit(TTY_THROTTLED, &tty->flags); 254 return 0; 255 256 out: 257 set_bit(TTY_IO_ERROR, &tty->flags); 258 return -EIO; 259 } 260 261 static void pty_set_termios(struct tty_struct *tty, 262 struct ktermios *old_termios) 263 { 264 tty->termios.c_cflag &= ~(CSIZE | PARENB); 265 tty->termios.c_cflag |= (CS8 | CREAD); 266 } 267 268 /** 269 * pty_do_resize - resize event 270 * @tty: tty being resized 271 * @ws: window size being set. 272 * 273 * Update the termios variables and send the necessary signals to 274 * peform a terminal resize correctly 275 */ 276 277 static int pty_resize(struct tty_struct *tty, struct winsize *ws) 278 { 279 struct pid *pgrp, *rpgrp; 280 unsigned long flags; 281 struct tty_struct *pty = tty->link; 282 283 /* For a PTY we need to lock the tty side */ 284 mutex_lock(&tty->winsize_mutex); 285 if (!memcmp(ws, &tty->winsize, sizeof(*ws))) 286 goto done; 287 288 /* Get the PID values and reference them so we can 289 avoid holding the tty ctrl lock while sending signals. 290 We need to lock these individually however. */ 291 292 spin_lock_irqsave(&tty->ctrl_lock, flags); 293 pgrp = get_pid(tty->pgrp); 294 spin_unlock_irqrestore(&tty->ctrl_lock, flags); 295 296 spin_lock_irqsave(&pty->ctrl_lock, flags); 297 rpgrp = get_pid(pty->pgrp); 298 spin_unlock_irqrestore(&pty->ctrl_lock, flags); 299 300 if (pgrp) 301 kill_pgrp(pgrp, SIGWINCH, 1); 302 if (rpgrp != pgrp && rpgrp) 303 kill_pgrp(rpgrp, SIGWINCH, 1); 304 305 put_pid(pgrp); 306 put_pid(rpgrp); 307 308 tty->winsize = *ws; 309 pty->winsize = *ws; /* Never used so will go away soon */ 310 done: 311 mutex_unlock(&tty->winsize_mutex); 312 return 0; 313 } 314 315 /** 316 * pty_common_install - set up the pty pair 317 * @driver: the pty driver 318 * @tty: the tty being instantiated 319 * @legacy: true if this is BSD style 320 * 321 * Perform the initial set up for the tty/pty pair. Called from the 322 * tty layer when the port is first opened. 323 * 324 * Locking: the caller must hold the tty_mutex 325 */ 326 static int pty_common_install(struct tty_driver *driver, struct tty_struct *tty, 327 bool legacy) 328 { 329 struct tty_struct *o_tty; 330 struct tty_port *ports[2]; 331 int idx = tty->index; 332 int retval = -ENOMEM; 333 334 ports[0] = kmalloc(sizeof **ports, GFP_KERNEL); 335 ports[1] = kmalloc(sizeof **ports, GFP_KERNEL); 336 if (!ports[0] || !ports[1]) 337 goto err; 338 if (!try_module_get(driver->other->owner)) { 339 /* This cannot in fact currently happen */ 340 goto err; 341 } 342 o_tty = alloc_tty_struct(driver->other, idx); 343 if (!o_tty) 344 goto err_put_module; 345 346 if (legacy) { 347 /* We always use new tty termios data so we can do this 348 the easy way .. */ 349 retval = tty_init_termios(tty); 350 if (retval) 351 goto err_deinit_tty; 352 353 retval = tty_init_termios(o_tty); 354 if (retval) 355 goto err_free_termios; 356 357 driver->other->ttys[idx] = o_tty; 358 driver->ttys[idx] = tty; 359 } else { 360 memset(&tty->termios_locked, 0, sizeof(tty->termios_locked)); 361 tty->termios = driver->init_termios; 362 memset(&o_tty->termios_locked, 0, sizeof(tty->termios_locked)); 363 o_tty->termios = driver->other->init_termios; 364 } 365 366 /* 367 * Everything allocated ... set up the o_tty structure. 368 */ 369 tty_driver_kref_get(driver->other); 370 if (driver->subtype == PTY_TYPE_MASTER) 371 o_tty->count++; 372 /* Establish the links in both directions */ 373 tty->link = o_tty; 374 o_tty->link = tty; 375 tty_port_init(ports[0]); 376 tty_port_init(ports[1]); 377 o_tty->port = ports[0]; 378 tty->port = ports[1]; 379 o_tty->port->itty = o_tty; 380 381 tty_driver_kref_get(driver); 382 tty->count++; 383 return 0; 384 err_free_termios: 385 if (legacy) 386 tty_free_termios(tty); 387 err_deinit_tty: 388 deinitialize_tty_struct(o_tty); 389 free_tty_struct(o_tty); 390 err_put_module: 391 module_put(driver->other->owner); 392 err: 393 kfree(ports[0]); 394 kfree(ports[1]); 395 return retval; 396 } 397 398 static void pty_cleanup(struct tty_struct *tty) 399 { 400 tty_port_put(tty->port); 401 } 402 403 /* Traditional BSD devices */ 404 #ifdef CONFIG_LEGACY_PTYS 405 406 static int pty_install(struct tty_driver *driver, struct tty_struct *tty) 407 { 408 return pty_common_install(driver, tty, true); 409 } 410 411 static void pty_remove(struct tty_driver *driver, struct tty_struct *tty) 412 { 413 struct tty_struct *pair = tty->link; 414 driver->ttys[tty->index] = NULL; 415 if (pair) 416 pair->driver->ttys[pair->index] = NULL; 417 } 418 419 static int pty_bsd_ioctl(struct tty_struct *tty, 420 unsigned int cmd, unsigned long arg) 421 { 422 switch (cmd) { 423 case TIOCSPTLCK: /* Set PT Lock (disallow slave open) */ 424 return pty_set_lock(tty, (int __user *) arg); 425 case TIOCGPTLCK: /* Get PT Lock status */ 426 return pty_get_lock(tty, (int __user *)arg); 427 case TIOCPKT: /* Set PT packet mode */ 428 return pty_set_pktmode(tty, (int __user *)arg); 429 case TIOCGPKT: /* Get PT packet mode */ 430 return pty_get_pktmode(tty, (int __user *)arg); 431 case TIOCSIG: /* Send signal to other side of pty */ 432 return pty_signal(tty, (int) arg); 433 case TIOCGPTN: /* TTY returns ENOTTY, but glibc expects EINVAL here */ 434 return -EINVAL; 435 } 436 return -ENOIOCTLCMD; 437 } 438 439 static int legacy_count = CONFIG_LEGACY_PTY_COUNT; 440 module_param(legacy_count, int, 0); 441 442 /* 443 * The master side of a pty can do TIOCSPTLCK and thus 444 * has pty_bsd_ioctl. 445 */ 446 static const struct tty_operations master_pty_ops_bsd = { 447 .install = pty_install, 448 .open = pty_open, 449 .close = pty_close, 450 .write = pty_write, 451 .write_room = pty_write_room, 452 .flush_buffer = pty_flush_buffer, 453 .chars_in_buffer = pty_chars_in_buffer, 454 .unthrottle = pty_unthrottle, 455 .set_termios = pty_set_termios, 456 .ioctl = pty_bsd_ioctl, 457 .cleanup = pty_cleanup, 458 .resize = pty_resize, 459 .remove = pty_remove 460 }; 461 462 static const struct tty_operations slave_pty_ops_bsd = { 463 .install = pty_install, 464 .open = pty_open, 465 .close = pty_close, 466 .write = pty_write, 467 .write_room = pty_write_room, 468 .flush_buffer = pty_flush_buffer, 469 .chars_in_buffer = pty_chars_in_buffer, 470 .unthrottle = pty_unthrottle, 471 .set_termios = pty_set_termios, 472 .cleanup = pty_cleanup, 473 .resize = pty_resize, 474 .remove = pty_remove 475 }; 476 477 static void __init legacy_pty_init(void) 478 { 479 struct tty_driver *pty_driver, *pty_slave_driver; 480 481 if (legacy_count <= 0) 482 return; 483 484 pty_driver = tty_alloc_driver(legacy_count, 485 TTY_DRIVER_RESET_TERMIOS | 486 TTY_DRIVER_REAL_RAW | 487 TTY_DRIVER_DYNAMIC_ALLOC); 488 if (IS_ERR(pty_driver)) 489 panic("Couldn't allocate pty driver"); 490 491 pty_slave_driver = tty_alloc_driver(legacy_count, 492 TTY_DRIVER_RESET_TERMIOS | 493 TTY_DRIVER_REAL_RAW | 494 TTY_DRIVER_DYNAMIC_ALLOC); 495 if (IS_ERR(pty_slave_driver)) 496 panic("Couldn't allocate pty slave driver"); 497 498 pty_driver->driver_name = "pty_master"; 499 pty_driver->name = "pty"; 500 pty_driver->major = PTY_MASTER_MAJOR; 501 pty_driver->minor_start = 0; 502 pty_driver->type = TTY_DRIVER_TYPE_PTY; 503 pty_driver->subtype = PTY_TYPE_MASTER; 504 pty_driver->init_termios = tty_std_termios; 505 pty_driver->init_termios.c_iflag = 0; 506 pty_driver->init_termios.c_oflag = 0; 507 pty_driver->init_termios.c_cflag = B38400 | CS8 | CREAD; 508 pty_driver->init_termios.c_lflag = 0; 509 pty_driver->init_termios.c_ispeed = 38400; 510 pty_driver->init_termios.c_ospeed = 38400; 511 pty_driver->other = pty_slave_driver; 512 tty_set_operations(pty_driver, &master_pty_ops_bsd); 513 514 pty_slave_driver->driver_name = "pty_slave"; 515 pty_slave_driver->name = "ttyp"; 516 pty_slave_driver->major = PTY_SLAVE_MAJOR; 517 pty_slave_driver->minor_start = 0; 518 pty_slave_driver->type = TTY_DRIVER_TYPE_PTY; 519 pty_slave_driver->subtype = PTY_TYPE_SLAVE; 520 pty_slave_driver->init_termios = tty_std_termios; 521 pty_slave_driver->init_termios.c_cflag = B38400 | CS8 | CREAD; 522 pty_slave_driver->init_termios.c_ispeed = 38400; 523 pty_slave_driver->init_termios.c_ospeed = 38400; 524 pty_slave_driver->other = pty_driver; 525 tty_set_operations(pty_slave_driver, &slave_pty_ops_bsd); 526 527 if (tty_register_driver(pty_driver)) 528 panic("Couldn't register pty driver"); 529 if (tty_register_driver(pty_slave_driver)) 530 panic("Couldn't register pty slave driver"); 531 } 532 #else 533 static inline void legacy_pty_init(void) { } 534 #endif 535 536 /* Unix98 devices */ 537 #ifdef CONFIG_UNIX98_PTYS 538 539 static struct cdev ptmx_cdev; 540 541 static int pty_unix98_ioctl(struct tty_struct *tty, 542 unsigned int cmd, unsigned long arg) 543 { 544 switch (cmd) { 545 case TIOCSPTLCK: /* Set PT Lock (disallow slave open) */ 546 return pty_set_lock(tty, (int __user *)arg); 547 case TIOCGPTLCK: /* Get PT Lock status */ 548 return pty_get_lock(tty, (int __user *)arg); 549 case TIOCPKT: /* Set PT packet mode */ 550 return pty_set_pktmode(tty, (int __user *)arg); 551 case TIOCGPKT: /* Get PT packet mode */ 552 return pty_get_pktmode(tty, (int __user *)arg); 553 case TIOCGPTN: /* Get PT Number */ 554 return put_user(tty->index, (unsigned int __user *)arg); 555 case TIOCSIG: /* Send signal to other side of pty */ 556 return pty_signal(tty, (int) arg); 557 } 558 559 return -ENOIOCTLCMD; 560 } 561 562 /** 563 * ptm_unix98_lookup - find a pty master 564 * @driver: ptm driver 565 * @idx: tty index 566 * 567 * Look up a pty master device. Called under the tty_mutex for now. 568 * This provides our locking. 569 */ 570 571 static struct tty_struct *ptm_unix98_lookup(struct tty_driver *driver, 572 struct inode *ptm_inode, int idx) 573 { 574 /* Master must be open via /dev/ptmx */ 575 return ERR_PTR(-EIO); 576 } 577 578 /** 579 * pts_unix98_lookup - find a pty slave 580 * @driver: pts driver 581 * @idx: tty index 582 * 583 * Look up a pty master device. Called under the tty_mutex for now. 584 * This provides our locking for the tty pointer. 585 */ 586 587 static struct tty_struct *pts_unix98_lookup(struct tty_driver *driver, 588 struct inode *pts_inode, int idx) 589 { 590 struct tty_struct *tty; 591 592 mutex_lock(&devpts_mutex); 593 tty = devpts_get_priv(pts_inode); 594 mutex_unlock(&devpts_mutex); 595 /* Master must be open before slave */ 596 if (!tty) 597 return ERR_PTR(-EIO); 598 return tty; 599 } 600 601 /* We have no need to install and remove our tty objects as devpts does all 602 the work for us */ 603 604 static int pty_unix98_install(struct tty_driver *driver, struct tty_struct *tty) 605 { 606 return pty_common_install(driver, tty, false); 607 } 608 609 static void pty_unix98_remove(struct tty_driver *driver, struct tty_struct *tty) 610 { 611 } 612 613 /* this is called once with whichever end is closed last */ 614 static void pty_unix98_shutdown(struct tty_struct *tty) 615 { 616 devpts_kill_index(tty->driver_data, tty->index); 617 } 618 619 static const struct tty_operations ptm_unix98_ops = { 620 .lookup = ptm_unix98_lookup, 621 .install = pty_unix98_install, 622 .remove = pty_unix98_remove, 623 .open = pty_open, 624 .close = pty_close, 625 .write = pty_write, 626 .write_room = pty_write_room, 627 .flush_buffer = pty_flush_buffer, 628 .chars_in_buffer = pty_chars_in_buffer, 629 .unthrottle = pty_unthrottle, 630 .set_termios = pty_set_termios, 631 .ioctl = pty_unix98_ioctl, 632 .resize = pty_resize, 633 .shutdown = pty_unix98_shutdown, 634 .cleanup = pty_cleanup 635 }; 636 637 static const struct tty_operations pty_unix98_ops = { 638 .lookup = pts_unix98_lookup, 639 .install = pty_unix98_install, 640 .remove = pty_unix98_remove, 641 .open = pty_open, 642 .close = pty_close, 643 .write = pty_write, 644 .write_room = pty_write_room, 645 .flush_buffer = pty_flush_buffer, 646 .chars_in_buffer = pty_chars_in_buffer, 647 .unthrottle = pty_unthrottle, 648 .set_termios = pty_set_termios, 649 .shutdown = pty_unix98_shutdown, 650 .cleanup = pty_cleanup, 651 }; 652 653 /** 654 * ptmx_open - open a unix 98 pty master 655 * @inode: inode of device file 656 * @filp: file pointer to tty 657 * 658 * Allocate a unix98 pty master device from the ptmx driver. 659 * 660 * Locking: tty_mutex protects the init_dev work. tty->count should 661 * protect the rest. 662 * allocated_ptys_lock handles the list of free pty numbers 663 */ 664 665 static int ptmx_open(struct inode *inode, struct file *filp) 666 { 667 struct tty_struct *tty; 668 struct inode *slave_inode; 669 int retval; 670 int index; 671 672 nonseekable_open(inode, filp); 673 674 /* We refuse fsnotify events on ptmx, since it's a shared resource */ 675 filp->f_mode |= FMODE_NONOTIFY; 676 677 retval = tty_alloc_file(filp); 678 if (retval) 679 return retval; 680 681 /* find a device that is not in use. */ 682 mutex_lock(&devpts_mutex); 683 index = devpts_new_index(inode); 684 if (index < 0) { 685 retval = index; 686 mutex_unlock(&devpts_mutex); 687 goto err_file; 688 } 689 690 mutex_unlock(&devpts_mutex); 691 692 mutex_lock(&tty_mutex); 693 tty = tty_init_dev(ptm_driver, index); 694 695 if (IS_ERR(tty)) { 696 retval = PTR_ERR(tty); 697 goto out; 698 } 699 700 /* The tty returned here is locked so we can safely 701 drop the mutex */ 702 mutex_unlock(&tty_mutex); 703 704 set_bit(TTY_PTY_LOCK, &tty->flags); /* LOCK THE SLAVE */ 705 tty->driver_data = inode; 706 707 tty_add_file(tty, filp); 708 709 slave_inode = devpts_pty_new(inode, 710 MKDEV(UNIX98_PTY_SLAVE_MAJOR, index), index, 711 tty->link); 712 if (IS_ERR(slave_inode)) { 713 retval = PTR_ERR(slave_inode); 714 goto err_release; 715 } 716 tty->link->driver_data = slave_inode; 717 718 retval = ptm_driver->ops->open(tty, filp); 719 if (retval) 720 goto err_release; 721 722 tty_unlock(tty); 723 return 0; 724 err_release: 725 tty_unlock(tty); 726 tty_release(inode, filp); 727 return retval; 728 out: 729 mutex_unlock(&tty_mutex); 730 devpts_kill_index(inode, index); 731 err_file: 732 tty_free_file(filp); 733 return retval; 734 } 735 736 static struct file_operations ptmx_fops; 737 738 static void __init unix98_pty_init(void) 739 { 740 ptm_driver = tty_alloc_driver(NR_UNIX98_PTY_MAX, 741 TTY_DRIVER_RESET_TERMIOS | 742 TTY_DRIVER_REAL_RAW | 743 TTY_DRIVER_DYNAMIC_DEV | 744 TTY_DRIVER_DEVPTS_MEM | 745 TTY_DRIVER_DYNAMIC_ALLOC); 746 if (IS_ERR(ptm_driver)) 747 panic("Couldn't allocate Unix98 ptm driver"); 748 pts_driver = tty_alloc_driver(NR_UNIX98_PTY_MAX, 749 TTY_DRIVER_RESET_TERMIOS | 750 TTY_DRIVER_REAL_RAW | 751 TTY_DRIVER_DYNAMIC_DEV | 752 TTY_DRIVER_DEVPTS_MEM | 753 TTY_DRIVER_DYNAMIC_ALLOC); 754 if (IS_ERR(pts_driver)) 755 panic("Couldn't allocate Unix98 pts driver"); 756 757 ptm_driver->driver_name = "pty_master"; 758 ptm_driver->name = "ptm"; 759 ptm_driver->major = UNIX98_PTY_MASTER_MAJOR; 760 ptm_driver->minor_start = 0; 761 ptm_driver->type = TTY_DRIVER_TYPE_PTY; 762 ptm_driver->subtype = PTY_TYPE_MASTER; 763 ptm_driver->init_termios = tty_std_termios; 764 ptm_driver->init_termios.c_iflag = 0; 765 ptm_driver->init_termios.c_oflag = 0; 766 ptm_driver->init_termios.c_cflag = B38400 | CS8 | CREAD; 767 ptm_driver->init_termios.c_lflag = 0; 768 ptm_driver->init_termios.c_ispeed = 38400; 769 ptm_driver->init_termios.c_ospeed = 38400; 770 ptm_driver->other = pts_driver; 771 tty_set_operations(ptm_driver, &ptm_unix98_ops); 772 773 pts_driver->driver_name = "pty_slave"; 774 pts_driver->name = "pts"; 775 pts_driver->major = UNIX98_PTY_SLAVE_MAJOR; 776 pts_driver->minor_start = 0; 777 pts_driver->type = TTY_DRIVER_TYPE_PTY; 778 pts_driver->subtype = PTY_TYPE_SLAVE; 779 pts_driver->init_termios = tty_std_termios; 780 pts_driver->init_termios.c_cflag = B38400 | CS8 | CREAD; 781 pts_driver->init_termios.c_ispeed = 38400; 782 pts_driver->init_termios.c_ospeed = 38400; 783 pts_driver->other = ptm_driver; 784 tty_set_operations(pts_driver, &pty_unix98_ops); 785 786 if (tty_register_driver(ptm_driver)) 787 panic("Couldn't register Unix98 ptm driver"); 788 if (tty_register_driver(pts_driver)) 789 panic("Couldn't register Unix98 pts driver"); 790 791 /* Now create the /dev/ptmx special device */ 792 tty_default_fops(&ptmx_fops); 793 ptmx_fops.open = ptmx_open; 794 795 cdev_init(&ptmx_cdev, &ptmx_fops); 796 if (cdev_add(&ptmx_cdev, MKDEV(TTYAUX_MAJOR, 2), 1) || 797 register_chrdev_region(MKDEV(TTYAUX_MAJOR, 2), 1, "/dev/ptmx") < 0) 798 panic("Couldn't register /dev/ptmx driver"); 799 device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 2), NULL, "ptmx"); 800 } 801 802 #else 803 static inline void unix98_pty_init(void) { } 804 #endif 805 806 static int __init pty_init(void) 807 { 808 legacy_pty_init(); 809 unix98_pty_init(); 810 return 0; 811 } 812 module_init(pty_init); 813