2 * linux/drivers/char/tty_io.c
4 * Copyright (C) 1991, 1992 Linus Torvalds
8 * 'tty_io.c' gives an orthogonal feeling to tty's, be they consoles
9 * or rs-channels. It also implements echoing, cooked mode etc.
11 * Kill-line thanks to John T Kohl, who also corrected VMIN = VTIME = 0.
13 * Modified by Theodore Ts'o, 9/14/92, to dynamically allocate the
14 * tty_struct and tty_queue structures. Previously there was an array
15 * of 256 tty_struct's which was statically allocated, and the
16 * tty_queue structures were allocated at boot time. Both are now
17 * dynamically allocated only when the tty is open.
19 * Also restructured routines so that there is more of a separation
20 * between the high-level tty routines (tty_io.c and tty_ioctl.c) and
21 * the low-level tty routines (serial.c, pty.c, console.c). This
22 * makes for cleaner and more compact code. -TYT, 9/17/92
24 * Modified by Fred N. van Kempen, 01/29/93, to add line disciplines
25 * which can be dynamically activated and de-activated by the line
26 * discipline handling modules (like SLIP).
28 * NOTE: pay no attention to the line discipline code (yet); its
29 * interface is still subject to change in this version...
32 * Added functionality to the OPOST tty handling. No delays, but all
33 * other bits should be there.
34 * -- Nick Holloway <alfie@dcs.warwick.ac.uk>, 27th May 1993.
36 * Rewrote canonical mode and added more termios flags.
37 * -- julian@uhunix.uhcc.hawaii.edu (J. Cowley), 13Jan94
39 * Reorganized FASYNC support so mouse code can share it.
40 * -- ctm@ardi.com, 9Sep95
42 * New TIOCLINUX variants added.
43 * -- mj@k332.feld.cvut.cz, 19-Nov-95
45 * Restrict vt switching via ioctl()
46 * -- grif@cs.ucr.edu, 5-Dec-95
48 * Move console and virtual terminal code to more appropriate files,
49 * implement CONFIG_VT and generalize console device interface.
50 * -- Marko Kohtala <Marko.Kohtala@hut.fi>, March 97
52 * Rewrote init_dev and release_dev to eliminate races.
53 * -- Bill Hawes <whawes@star.net>, June 97
55 * Added devfs support.
56 * -- C. Scott Ananian <cananian@alumni.princeton.edu>, 13-Jan-1998
58 * Added support for a Unix98-style ptmx device.
59 * -- C. Scott Ananian <cananian@alumni.princeton.edu>, 14-Jan-1998
61 * Reduced memory usage for older ARM systems
62 * -- Russell King <rmk@arm.linux.org.uk>
64 * Move do_SAK() into process context. Less stack use in devfs functions.
65 * alloc_tty_struct() always uses kmalloc() -- Andrew Morton <andrewm@uow.edu.eu> 17Mar01
68 #include <linux/config.h>
69 #include <linux/types.h>
70 #include <linux/major.h>
71 #include <linux/errno.h>
72 #include <linux/signal.h>
73 #include <linux/fcntl.h>
74 #include <linux/sched.h>
75 #include <linux/interrupt.h>
76 #include <linux/tty.h>
77 #include <linux/tty_driver.h>
78 #include <linux/tty_flip.h>
79 #include <linux/devpts_fs.h>
80 #include <linux/file.h>
81 #include <linux/console.h>
82 #include <linux/timer.h>
83 #include <linux/ctype.h>
86 #include <linux/string.h>
87 #include <linux/slab.h>
88 #include <linux/poll.h>
89 #include <linux/proc_fs.h>
90 #include <linux/init.h>
91 #include <linux/module.h>
92 #include <linux/smp_lock.h>
93 #include <linux/device.h>
94 #include <linux/idr.h>
95 #include <linux/wait.h>
96 #include <linux/bitops.h>
97 #include <linux/delay.h>
99 #include <asm/uaccess.h>
100 #include <asm/system.h>
102 #include <linux/kbd_kern.h>
103 #include <linux/vt_kern.h>
104 #include <linux/selection.h>
105 #include <linux/devfs_fs_kernel.h>
107 #include <linux/kmod.h>
109 #undef TTY_DEBUG_HANGUP
111 #define TTY_PARANOIA_CHECK 1
112 #define CHECK_TTY_COUNT 1
114 struct termios tty_std_termios = { /* for the benefit of tty drivers */
115 .c_iflag = ICRNL | IXON,
116 .c_oflag = OPOST | ONLCR,
117 .c_cflag = B38400 | CS8 | CREAD | HUPCL,
118 .c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK |
119 ECHOCTL | ECHOKE | IEXTEN,
123 EXPORT_SYMBOL(tty_std_termios);
125 /* This list gets poked at by procfs and various bits of boot up code. This
126 could do with some rationalisation such as pulling the tty proc function
129 LIST_HEAD(tty_drivers); /* linked list of tty drivers */
131 /* Semaphore to protect creating and releasing a tty. This is shared with
132 vt.c for deeply disgusting hack reasons */
133 DECLARE_MUTEX(tty_sem);
135 #ifdef CONFIG_UNIX98_PTYS
136 extern struct tty_driver *ptm_driver; /* Unix98 pty masters; for /dev/ptmx */
137 extern int pty_limit; /* Config limit on Unix98 ptys */
138 static DEFINE_IDR(allocated_ptys);
139 static DECLARE_MUTEX(allocated_ptys_lock);
140 static int ptmx_open(struct inode *, struct file *);
143 extern void disable_early_printk(void);
145 static void initialize_tty_struct(struct tty_struct *tty);
147 static ssize_t tty_read(struct file *, char __user *, size_t, loff_t *);
148 static ssize_t tty_write(struct file *, const char __user *, size_t, loff_t *);
149 ssize_t redirected_tty_write(struct file *, const char __user *, size_t, loff_t *);
150 static unsigned int tty_poll(struct file *, poll_table *);
151 static int tty_open(struct inode *, struct file *);
152 static int tty_release(struct inode *, struct file *);
153 int tty_ioctl(struct inode * inode, struct file * file,
154 unsigned int cmd, unsigned long arg);
155 static int tty_fasync(int fd, struct file * filp, int on);
156 extern void rs_360_init(void);
157 static void release_mem(struct tty_struct *tty, int idx);
160 static struct tty_struct *alloc_tty_struct(void)
162 struct tty_struct *tty;
164 tty = kmalloc(sizeof(struct tty_struct), GFP_KERNEL);
166 memset(tty, 0, sizeof(struct tty_struct));
170 static inline void free_tty_struct(struct tty_struct *tty)
172 kfree(tty->write_buf);
176 #define TTY_NUMBER(tty) ((tty)->index + (tty)->driver->name_base)
178 char *tty_name(struct tty_struct *tty, char *buf)
180 if (!tty) /* Hmm. NULL pointer. That's fun. */
181 strcpy(buf, "NULL tty");
183 strcpy(buf, tty->name);
187 EXPORT_SYMBOL(tty_name);
189 int tty_paranoia_check(struct tty_struct *tty, struct inode *inode,
192 #ifdef TTY_PARANOIA_CHECK
195 "null TTY for (%d:%d) in %s\n",
196 imajor(inode), iminor(inode), routine);
199 if (tty->magic != TTY_MAGIC) {
201 "bad magic number for tty struct (%d:%d) in %s\n",
202 imajor(inode), iminor(inode), routine);
209 static int check_tty_count(struct tty_struct *tty, const char *routine)
211 #ifdef CHECK_TTY_COUNT
216 list_for_each(p, &tty->tty_files) {
220 if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
221 tty->driver->subtype == PTY_TYPE_SLAVE &&
222 tty->link && tty->link->count)
224 if (tty->count != count) {
225 printk(KERN_WARNING "Warning: dev (%s) tty->count(%d) "
226 "!= #fd's(%d) in %s\n",
227 tty->name, tty->count, count, routine);
235 * This is probably overkill for real world processors but
236 * they are not on hot paths so a little discipline won't do
240 static void tty_set_termios_ldisc(struct tty_struct *tty, int num)
242 down(&tty->termios_sem);
243 tty->termios->c_line = num;
244 up(&tty->termios_sem);
248 * This guards the refcounted line discipline lists. The lock
249 * must be taken with irqs off because there are hangup path
250 * callers who will do ldisc lookups and cannot sleep.
253 static DEFINE_SPINLOCK(tty_ldisc_lock);
254 static DECLARE_WAIT_QUEUE_HEAD(tty_ldisc_wait);
255 static struct tty_ldisc tty_ldiscs[NR_LDISCS]; /* line disc dispatch table */
257 int tty_register_ldisc(int disc, struct tty_ldisc *new_ldisc)
262 if (disc < N_TTY || disc >= NR_LDISCS)
265 spin_lock_irqsave(&tty_ldisc_lock, flags);
266 tty_ldiscs[disc] = *new_ldisc;
267 tty_ldiscs[disc].num = disc;
268 tty_ldiscs[disc].flags |= LDISC_FLAG_DEFINED;
269 tty_ldiscs[disc].refcount = 0;
270 spin_unlock_irqrestore(&tty_ldisc_lock, flags);
274 EXPORT_SYMBOL(tty_register_ldisc);
276 int tty_unregister_ldisc(int disc)
281 if (disc < N_TTY || disc >= NR_LDISCS)
284 spin_lock_irqsave(&tty_ldisc_lock, flags);
285 if (tty_ldiscs[disc].refcount)
288 tty_ldiscs[disc].flags &= ~LDISC_FLAG_DEFINED;
289 spin_unlock_irqrestore(&tty_ldisc_lock, flags);
293 EXPORT_SYMBOL(tty_unregister_ldisc);
295 struct tty_ldisc *tty_ldisc_get(int disc)
298 struct tty_ldisc *ld;
300 if (disc < N_TTY || disc >= NR_LDISCS)
303 spin_lock_irqsave(&tty_ldisc_lock, flags);
305 ld = &tty_ldiscs[disc];
306 /* Check the entry is defined */
307 if(ld->flags & LDISC_FLAG_DEFINED)
309 /* If the module is being unloaded we can't use it */
310 if (!try_module_get(ld->owner))
317 spin_unlock_irqrestore(&tty_ldisc_lock, flags);
321 EXPORT_SYMBOL_GPL(tty_ldisc_get);
323 void tty_ldisc_put(int disc)
325 struct tty_ldisc *ld;
328 if (disc < N_TTY || disc >= NR_LDISCS)
331 spin_lock_irqsave(&tty_ldisc_lock, flags);
332 ld = &tty_ldiscs[disc];
333 if(ld->refcount == 0)
336 module_put(ld->owner);
337 spin_unlock_irqrestore(&tty_ldisc_lock, flags);
340 EXPORT_SYMBOL_GPL(tty_ldisc_put);
342 static void tty_ldisc_assign(struct tty_struct *tty, struct tty_ldisc *ld)
345 tty->ldisc.refcount = 0;
349 * tty_ldisc_try - internal helper
352 * Make a single attempt to grab and bump the refcount on
353 * the tty ldisc. Return 0 on failure or 1 on success. This is
354 * used to implement both the waiting and non waiting versions
358 static int tty_ldisc_try(struct tty_struct *tty)
361 struct tty_ldisc *ld;
364 spin_lock_irqsave(&tty_ldisc_lock, flags);
366 if(test_bit(TTY_LDISC, &tty->flags))
371 spin_unlock_irqrestore(&tty_ldisc_lock, flags);
376 * tty_ldisc_ref_wait - wait for the tty ldisc
379 * Dereference the line discipline for the terminal and take a
380 * reference to it. If the line discipline is in flux then
381 * wait patiently until it changes.
383 * Note: Must not be called from an IRQ/timer context. The caller
384 * must also be careful not to hold other locks that will deadlock
385 * against a discipline change, such as an existing ldisc reference
386 * (which we check for)
389 struct tty_ldisc *tty_ldisc_ref_wait(struct tty_struct *tty)
391 /* wait_event is a macro */
392 wait_event(tty_ldisc_wait, tty_ldisc_try(tty));
393 if(tty->ldisc.refcount == 0)
394 printk(KERN_ERR "tty_ldisc_ref_wait\n");
398 EXPORT_SYMBOL_GPL(tty_ldisc_ref_wait);
401 * tty_ldisc_ref - get the tty ldisc
404 * Dereference the line discipline for the terminal and take a
405 * reference to it. If the line discipline is in flux then
406 * return NULL. Can be called from IRQ and timer functions.
409 struct tty_ldisc *tty_ldisc_ref(struct tty_struct *tty)
411 if(tty_ldisc_try(tty))
416 EXPORT_SYMBOL_GPL(tty_ldisc_ref);
419 * tty_ldisc_deref - free a tty ldisc reference
420 * @ld: reference to free up
422 * Undoes the effect of tty_ldisc_ref or tty_ldisc_ref_wait. May
423 * be called in IRQ context.
426 void tty_ldisc_deref(struct tty_ldisc *ld)
433 spin_lock_irqsave(&tty_ldisc_lock, flags);
434 if(ld->refcount == 0)
435 printk(KERN_ERR "tty_ldisc_deref: no references.\n");
438 if(ld->refcount == 0)
439 wake_up(&tty_ldisc_wait);
440 spin_unlock_irqrestore(&tty_ldisc_lock, flags);
443 EXPORT_SYMBOL_GPL(tty_ldisc_deref);
446 * tty_ldisc_enable - allow ldisc use
447 * @tty: terminal to activate ldisc on
449 * Set the TTY_LDISC flag when the line discipline can be called
450 * again. Do neccessary wakeups for existing sleepers.
452 * Note: nobody should set this bit except via this function. Clearing
453 * directly is allowed.
456 static void tty_ldisc_enable(struct tty_struct *tty)
458 set_bit(TTY_LDISC, &tty->flags);
459 wake_up(&tty_ldisc_wait);
463 * tty_set_ldisc - set line discipline
464 * @tty: the terminal to set
465 * @ldisc: the line discipline
467 * Set the discipline of a tty line. Must be called from a process
471 static int tty_set_ldisc(struct tty_struct *tty, int ldisc)
474 struct tty_ldisc o_ldisc;
478 struct tty_ldisc *ld;
480 if ((ldisc < N_TTY) || (ldisc >= NR_LDISCS))
485 if (tty->ldisc.num == ldisc)
486 return 0; /* We are already in the desired discipline */
488 ld = tty_ldisc_get(ldisc);
489 /* Eduardo Blanco <ejbs@cs.cs.com.uy> */
490 /* Cyrus Durgin <cider@speakeasy.org> */
492 request_module("tty-ldisc-%d", ldisc);
493 ld = tty_ldisc_get(ldisc);
498 o_ldisc = tty->ldisc;
500 tty_wait_until_sent(tty, 0);
503 * Make sure we don't change while someone holds a
504 * reference to the line discipline. The TTY_LDISC bit
505 * prevents anyone taking a reference once it is clear.
506 * We need the lock to avoid racing reference takers.
509 spin_lock_irqsave(&tty_ldisc_lock, flags);
510 if(tty->ldisc.refcount)
512 /* Free the new ldisc we grabbed. Must drop the lock
514 spin_unlock_irqrestore(&tty_ldisc_lock, flags);
515 tty_ldisc_put(ldisc);
517 * There are several reasons we may be busy, including
518 * random momentary I/O traffic. We must therefore
519 * retry. We could distinguish between blocking ops
520 * and retries if we made tty_ldisc_wait() smarter. That
521 * is up for discussion.
523 if(wait_event_interruptible(tty_ldisc_wait, tty->ldisc.refcount == 0) < 0)
527 clear_bit(TTY_LDISC, &tty->flags);
528 clear_bit(TTY_DONT_FLIP, &tty->flags);
529 spin_unlock_irqrestore(&tty_ldisc_lock, flags);
532 * From this point on we know nobody has an ldisc
533 * usage reference, nor can they obtain one until
534 * we say so later on.
537 work = cancel_delayed_work(&tty->flip.work);
539 * Wait for ->hangup_work and ->flip.work handlers to terminate
542 flush_scheduled_work();
543 /* Shutdown the current discipline. */
544 if (tty->ldisc.close)
545 (tty->ldisc.close)(tty);
547 /* Now set up the new line discipline. */
548 tty_ldisc_assign(tty, ld);
549 tty_set_termios_ldisc(tty, ldisc);
551 retval = (tty->ldisc.open)(tty);
553 tty_ldisc_put(ldisc);
554 /* There is an outstanding reference here so this is safe */
555 tty_ldisc_assign(tty, tty_ldisc_get(o_ldisc.num));
556 tty_set_termios_ldisc(tty, tty->ldisc.num);
557 if (tty->ldisc.open && (tty->ldisc.open(tty) < 0)) {
558 tty_ldisc_put(o_ldisc.num);
559 /* This driver is always present */
560 tty_ldisc_assign(tty, tty_ldisc_get(N_TTY));
561 tty_set_termios_ldisc(tty, N_TTY);
562 if (tty->ldisc.open) {
563 int r = tty->ldisc.open(tty);
566 panic("Couldn't open N_TTY ldisc for "
568 tty_name(tty, buf), r);
572 /* At this point we hold a reference to the new ldisc and a
573 a reference to the old ldisc. If we ended up flipping back
574 to the existing ldisc we have two references to it */
576 if (tty->ldisc.num != o_ldisc.num && tty->driver->set_ldisc)
577 tty->driver->set_ldisc(tty);
579 tty_ldisc_put(o_ldisc.num);
582 * Allow ldisc referencing to occur as soon as the driver
583 * ldisc callback completes.
586 tty_ldisc_enable(tty);
588 /* Restart it in case no characters kick it off. Safe if
591 schedule_delayed_work(&tty->flip.work, 1);
596 * This routine returns a tty driver structure, given a device number
598 static struct tty_driver *get_tty_driver(dev_t device, int *index)
600 struct tty_driver *p;
602 list_for_each_entry(p, &tty_drivers, tty_drivers) {
603 dev_t base = MKDEV(p->major, p->minor_start);
604 if (device < base || device >= base + p->num)
606 *index = device - base;
613 * If we try to write to, or set the state of, a terminal and we're
614 * not in the foreground, send a SIGTTOU. If the signal is blocked or
615 * ignored, go ahead and perform the operation. (POSIX 7.2)
617 int tty_check_change(struct tty_struct * tty)
619 if (current->signal->tty != tty)
621 if (tty->pgrp <= 0) {
622 printk(KERN_WARNING "tty_check_change: tty->pgrp <= 0!\n");
625 if (process_group(current) == tty->pgrp)
627 if (is_ignored(SIGTTOU))
629 if (is_orphaned_pgrp(process_group(current)))
631 (void) kill_pg(process_group(current), SIGTTOU, 1);
635 EXPORT_SYMBOL(tty_check_change);
637 static ssize_t hung_up_tty_read(struct file * file, char __user * buf,
638 size_t count, loff_t *ppos)
643 static ssize_t hung_up_tty_write(struct file * file, const char __user * buf,
644 size_t count, loff_t *ppos)
649 /* No kernel lock held - none needed ;) */
650 static unsigned int hung_up_tty_poll(struct file * filp, poll_table * wait)
652 return POLLIN | POLLOUT | POLLERR | POLLHUP | POLLRDNORM | POLLWRNORM;
655 static int hung_up_tty_ioctl(struct inode * inode, struct file * file,
656 unsigned int cmd, unsigned long arg)
658 return cmd == TIOCSPGRP ? -ENOTTY : -EIO;
661 static struct file_operations tty_fops = {
668 .release = tty_release,
669 .fasync = tty_fasync,
672 #ifdef CONFIG_UNIX98_PTYS
673 static struct file_operations ptmx_fops = {
680 .release = tty_release,
681 .fasync = tty_fasync,
685 static struct file_operations console_fops = {
688 .write = redirected_tty_write,
692 .release = tty_release,
693 .fasync = tty_fasync,
696 static struct file_operations hung_up_tty_fops = {
698 .read = hung_up_tty_read,
699 .write = hung_up_tty_write,
700 .poll = hung_up_tty_poll,
701 .ioctl = hung_up_tty_ioctl,
702 .release = tty_release,
705 static DEFINE_SPINLOCK(redirect_lock);
706 static struct file *redirect;
709 * tty_wakeup - request more data
712 * Internal and external helper for wakeups of tty. This function
713 * informs the line discipline if present that the driver is ready
714 * to receive more output data.
717 void tty_wakeup(struct tty_struct *tty)
719 struct tty_ldisc *ld;
721 if (test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) {
722 ld = tty_ldisc_ref(tty);
725 ld->write_wakeup(tty);
729 wake_up_interruptible(&tty->write_wait);
732 EXPORT_SYMBOL_GPL(tty_wakeup);
735 * tty_ldisc_flush - flush line discipline queue
738 * Flush the line discipline queue (if any) for this tty. If there
739 * is no line discipline active this is a no-op.
742 void tty_ldisc_flush(struct tty_struct *tty)
744 struct tty_ldisc *ld = tty_ldisc_ref(tty);
747 ld->flush_buffer(tty);
752 EXPORT_SYMBOL_GPL(tty_ldisc_flush);
755 * This can be called by the "eventd" kernel thread. That is process synchronous,
756 * but doesn't hold any locks, so we need to make sure we have the appropriate
757 * locks for what we're doing..
759 static void do_tty_hangup(void *data)
761 struct tty_struct *tty = (struct tty_struct *) data;
762 struct file * cons_filp = NULL;
763 struct file *filp, *f = NULL;
764 struct task_struct *p;
765 struct tty_ldisc *ld;
766 int closecount = 0, n;
771 /* inuse_filps is protected by the single kernel lock */
774 spin_lock(&redirect_lock);
775 if (redirect && redirect->private_data == tty) {
779 spin_unlock(&redirect_lock);
781 check_tty_count(tty, "do_tty_hangup");
783 /* This breaks for file handles being sent over AF_UNIX sockets ? */
784 list_for_each_entry(filp, &tty->tty_files, f_list) {
785 if (filp->f_op->write == redirected_tty_write)
787 if (filp->f_op->write != tty_write)
790 tty_fasync(-1, filp, 0); /* can't block */
791 filp->f_op = &hung_up_tty_fops;
795 /* FIXME! What are the locking issues here? This may me overdoing things..
796 * this question is especially important now that we've removed the irqlock. */
798 ld = tty_ldisc_ref(tty);
799 if(ld != NULL) /* We may have no line discipline at this point */
801 if (ld->flush_buffer)
802 ld->flush_buffer(tty);
803 if (tty->driver->flush_buffer)
804 tty->driver->flush_buffer(tty);
805 if ((test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) &&
807 ld->write_wakeup(tty);
812 /* FIXME: Once we trust the LDISC code better we can wait here for
813 ldisc completion and fix the driver call race */
815 wake_up_interruptible(&tty->write_wait);
816 wake_up_interruptible(&tty->read_wait);
819 * Shutdown the current line discipline, and reset it to
822 if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS)
824 down(&tty->termios_sem);
825 *tty->termios = tty->driver->init_termios;
826 up(&tty->termios_sem);
829 /* Defer ldisc switch */
830 /* tty_deferred_ldisc_switch(N_TTY);
832 This should get done automatically when the port closes and
833 tty_release is called */
835 read_lock(&tasklist_lock);
836 if (tty->session > 0) {
837 do_each_task_pid(tty->session, PIDTYPE_SID, p) {
838 if (p->signal->tty == tty)
839 p->signal->tty = NULL;
840 if (!p->signal->leader)
842 send_group_sig_info(SIGHUP, SEND_SIG_PRIV, p);
843 send_group_sig_info(SIGCONT, SEND_SIG_PRIV, p);
845 p->signal->tty_old_pgrp = tty->pgrp;
846 } while_each_task_pid(tty->session, PIDTYPE_SID, p);
848 read_unlock(&tasklist_lock);
853 tty->ctrl_status = 0;
855 * If one of the devices matches a console pointer, we
856 * cannot just call hangup() because that will cause
857 * tty->count and state->count to go out of sync.
858 * So we just call close() the right number of times.
861 if (tty->driver->close)
862 for (n = 0; n < closecount; n++)
863 tty->driver->close(tty, cons_filp);
864 } else if (tty->driver->hangup)
865 (tty->driver->hangup)(tty);
867 /* We don't want to have driver/ldisc interactions beyond
868 the ones we did here. The driver layer expects no
869 calls after ->hangup() from the ldisc side. However we
870 can't yet guarantee all that */
872 set_bit(TTY_HUPPED, &tty->flags);
874 tty_ldisc_enable(tty);
882 void tty_hangup(struct tty_struct * tty)
884 #ifdef TTY_DEBUG_HANGUP
887 printk(KERN_DEBUG "%s hangup...\n", tty_name(tty, buf));
889 schedule_work(&tty->hangup_work);
892 EXPORT_SYMBOL(tty_hangup);
894 void tty_vhangup(struct tty_struct * tty)
896 #ifdef TTY_DEBUG_HANGUP
899 printk(KERN_DEBUG "%s vhangup...\n", tty_name(tty, buf));
901 do_tty_hangup((void *) tty);
903 EXPORT_SYMBOL(tty_vhangup);
905 int tty_hung_up_p(struct file * filp)
907 return (filp->f_op == &hung_up_tty_fops);
910 EXPORT_SYMBOL(tty_hung_up_p);
913 * This function is typically called only by the session leader, when
914 * it wants to disassociate itself from its controlling tty.
916 * It performs the following functions:
917 * (1) Sends a SIGHUP and SIGCONT to the foreground process group
918 * (2) Clears the tty from being controlling the session
919 * (3) Clears the controlling tty for all processes in the
922 * The argument on_exit is set to 1 if called when a process is
923 * exiting; it is 0 if called by the ioctl TIOCNOTTY.
925 void disassociate_ctty(int on_exit)
927 struct tty_struct *tty;
928 struct task_struct *p;
934 tty = current->signal->tty;
936 tty_pgrp = tty->pgrp;
938 if (on_exit && tty->driver->type != TTY_DRIVER_TYPE_PTY)
941 if (current->signal->tty_old_pgrp) {
942 kill_pg(current->signal->tty_old_pgrp, SIGHUP, on_exit);
943 kill_pg(current->signal->tty_old_pgrp, SIGCONT, on_exit);
950 kill_pg(tty_pgrp, SIGHUP, on_exit);
952 kill_pg(tty_pgrp, SIGCONT, on_exit);
955 /* Must lock changes to tty_old_pgrp */
957 current->signal->tty_old_pgrp = 0;
961 /* Now clear signal->tty under the lock */
962 read_lock(&tasklist_lock);
963 do_each_task_pid(current->signal->session, PIDTYPE_SID, p) {
964 p->signal->tty = NULL;
965 } while_each_task_pid(current->signal->session, PIDTYPE_SID, p);
966 read_unlock(&tasklist_lock);
971 void stop_tty(struct tty_struct *tty)
976 if (tty->link && tty->link->packet) {
977 tty->ctrl_status &= ~TIOCPKT_START;
978 tty->ctrl_status |= TIOCPKT_STOP;
979 wake_up_interruptible(&tty->link->read_wait);
981 if (tty->driver->stop)
982 (tty->driver->stop)(tty);
985 EXPORT_SYMBOL(stop_tty);
987 void start_tty(struct tty_struct *tty)
989 if (!tty->stopped || tty->flow_stopped)
992 if (tty->link && tty->link->packet) {
993 tty->ctrl_status &= ~TIOCPKT_STOP;
994 tty->ctrl_status |= TIOCPKT_START;
995 wake_up_interruptible(&tty->link->read_wait);
997 if (tty->driver->start)
998 (tty->driver->start)(tty);
1000 /* If we have a running line discipline it may need kicking */
1002 wake_up_interruptible(&tty->write_wait);
1005 EXPORT_SYMBOL(start_tty);
1007 static ssize_t tty_read(struct file * file, char __user * buf, size_t count,
1011 struct tty_struct * tty;
1012 struct inode *inode;
1013 struct tty_ldisc *ld;
1015 tty = (struct tty_struct *)file->private_data;
1016 inode = file->f_dentry->d_inode;
1017 if (tty_paranoia_check(tty, inode, "tty_read"))
1019 if (!tty || (test_bit(TTY_IO_ERROR, &tty->flags)))
1022 /* We want to wait for the line discipline to sort out in this
1024 ld = tty_ldisc_ref_wait(tty);
1027 i = (ld->read)(tty,file,buf,count);
1030 tty_ldisc_deref(ld);
1033 inode->i_atime = current_fs_time(inode->i_sb);
1038 * Split writes up in sane blocksizes to avoid
1039 * denial-of-service type attacks
1041 static inline ssize_t do_tty_write(
1042 ssize_t (*write)(struct tty_struct *, struct file *, const unsigned char *, size_t),
1043 struct tty_struct *tty,
1045 const char __user *buf,
1048 ssize_t ret = 0, written = 0;
1051 if (down_interruptible(&tty->atomic_write)) {
1052 return -ERESTARTSYS;
1056 * We chunk up writes into a temporary buffer. This
1057 * simplifies low-level drivers immensely, since they
1058 * don't have locking issues and user mode accesses.
1060 * But if TTY_NO_WRITE_SPLIT is set, we should use a
1063 * The default chunk-size is 2kB, because the NTTY
1064 * layer has problems with bigger chunks. It will
1065 * claim to be able to handle more characters than
1069 if (test_bit(TTY_NO_WRITE_SPLIT, &tty->flags))
1074 /* write_buf/write_cnt is protected by the atomic_write semaphore */
1075 if (tty->write_cnt < chunk) {
1081 buf = kmalloc(chunk, GFP_KERNEL);
1083 up(&tty->atomic_write);
1086 kfree(tty->write_buf);
1087 tty->write_cnt = chunk;
1088 tty->write_buf = buf;
1091 /* Do the write .. */
1093 size_t size = count;
1097 if (copy_from_user(tty->write_buf, buf, size))
1100 ret = write(tty, file, tty->write_buf, size);
1110 if (signal_pending(current))
1115 struct inode *inode = file->f_dentry->d_inode;
1116 inode->i_mtime = current_fs_time(inode->i_sb);
1119 up(&tty->atomic_write);
1124 static ssize_t tty_write(struct file * file, const char __user * buf, size_t count,
1127 struct tty_struct * tty;
1128 struct inode *inode = file->f_dentry->d_inode;
1130 struct tty_ldisc *ld;
1132 tty = (struct tty_struct *)file->private_data;
1133 if (tty_paranoia_check(tty, inode, "tty_write"))
1135 if (!tty || !tty->driver->write || (test_bit(TTY_IO_ERROR, &tty->flags)))
1138 ld = tty_ldisc_ref_wait(tty);
1142 ret = do_tty_write(ld->write, tty, file, buf, count);
1143 tty_ldisc_deref(ld);
1147 ssize_t redirected_tty_write(struct file * file, const char __user * buf, size_t count,
1150 struct file *p = NULL;
1152 spin_lock(&redirect_lock);
1157 spin_unlock(&redirect_lock);
1161 res = vfs_write(p, buf, count, &p->f_pos);
1166 return tty_write(file, buf, count, ppos);
1169 static char ptychar[] = "pqrstuvwxyzabcde";
1171 static inline void pty_line_name(struct tty_driver *driver, int index, char *p)
1173 int i = index + driver->name_base;
1174 /* ->name is initialized to "ttyp", but "tty" is expected */
1175 sprintf(p, "%s%c%x",
1176 driver->subtype == PTY_TYPE_SLAVE ? "tty" : driver->name,
1177 ptychar[i >> 4 & 0xf], i & 0xf);
1180 static inline void tty_line_name(struct tty_driver *driver, int index, char *p)
1182 sprintf(p, "%s%d", driver->name, index + driver->name_base);
1186 * WSH 06/09/97: Rewritten to remove races and properly clean up after a
1187 * failed open. The new code protects the open with a semaphore, so it's
1188 * really quite straightforward. The semaphore locking can probably be
1189 * relaxed for the (most common) case of reopening a tty.
1191 static int init_dev(struct tty_driver *driver, int idx,
1192 struct tty_struct **ret_tty)
1194 struct tty_struct *tty, *o_tty;
1195 struct termios *tp, **tp_loc, *o_tp, **o_tp_loc;
1196 struct termios *ltp, **ltp_loc, *o_ltp, **o_ltp_loc;
1199 /* check whether we're reopening an existing tty */
1200 if (driver->flags & TTY_DRIVER_DEVPTS_MEM) {
1201 tty = devpts_get_tty(idx);
1202 if (tty && driver->subtype == PTY_TYPE_MASTER)
1205 tty = driver->ttys[idx];
1207 if (tty) goto fast_track;
1210 * First time open is complex, especially for PTY devices.
1211 * This code guarantees that either everything succeeds and the
1212 * TTY is ready for operation, or else the table slots are vacated
1213 * and the allocated memory released. (Except that the termios
1214 * and locked termios may be retained.)
1217 if (!try_module_get(driver->owner)) {
1226 tty = alloc_tty_struct();
1229 initialize_tty_struct(tty);
1230 tty->driver = driver;
1232 tty_line_name(driver, idx, tty->name);
1234 if (driver->flags & TTY_DRIVER_DEVPTS_MEM) {
1235 tp_loc = &tty->termios;
1236 ltp_loc = &tty->termios_locked;
1238 tp_loc = &driver->termios[idx];
1239 ltp_loc = &driver->termios_locked[idx];
1243 tp = (struct termios *) kmalloc(sizeof(struct termios),
1247 *tp = driver->init_termios;
1251 ltp = (struct termios *) kmalloc(sizeof(struct termios),
1255 memset(ltp, 0, sizeof(struct termios));
1258 if (driver->type == TTY_DRIVER_TYPE_PTY) {
1259 o_tty = alloc_tty_struct();
1262 initialize_tty_struct(o_tty);
1263 o_tty->driver = driver->other;
1265 tty_line_name(driver->other, idx, o_tty->name);
1267 if (driver->flags & TTY_DRIVER_DEVPTS_MEM) {
1268 o_tp_loc = &o_tty->termios;
1269 o_ltp_loc = &o_tty->termios_locked;
1271 o_tp_loc = &driver->other->termios[idx];
1272 o_ltp_loc = &driver->other->termios_locked[idx];
1276 o_tp = (struct termios *)
1277 kmalloc(sizeof(struct termios), GFP_KERNEL);
1280 *o_tp = driver->other->init_termios;
1284 o_ltp = (struct termios *)
1285 kmalloc(sizeof(struct termios), GFP_KERNEL);
1288 memset(o_ltp, 0, sizeof(struct termios));
1292 * Everything allocated ... set up the o_tty structure.
1294 if (!(driver->other->flags & TTY_DRIVER_DEVPTS_MEM)) {
1295 driver->other->ttys[idx] = o_tty;
1301 o_tty->termios = *o_tp_loc;
1302 o_tty->termios_locked = *o_ltp_loc;
1303 driver->other->refcount++;
1304 if (driver->subtype == PTY_TYPE_MASTER)
1307 /* Establish the links in both directions */
1313 * All structures have been allocated, so now we install them.
1314 * Failures after this point use release_mem to clean up, so
1315 * there's no need to null out the local pointers.
1317 if (!(driver->flags & TTY_DRIVER_DEVPTS_MEM)) {
1318 driver->ttys[idx] = tty;
1325 tty->termios = *tp_loc;
1326 tty->termios_locked = *ltp_loc;
1331 * Structures all installed ... call the ldisc open routines.
1332 * If we fail here just call release_mem to clean up. No need
1333 * to decrement the use counts, as release_mem doesn't care.
1336 if (tty->ldisc.open) {
1337 retval = (tty->ldisc.open)(tty);
1339 goto release_mem_out;
1341 if (o_tty && o_tty->ldisc.open) {
1342 retval = (o_tty->ldisc.open)(o_tty);
1344 if (tty->ldisc.close)
1345 (tty->ldisc.close)(tty);
1346 goto release_mem_out;
1348 tty_ldisc_enable(o_tty);
1350 tty_ldisc_enable(tty);
1354 * This fast open can be used if the tty is already open.
1355 * No memory is allocated, and the only failures are from
1356 * attempting to open a closing tty or attempting multiple
1357 * opens on a pty master.
1360 if (test_bit(TTY_CLOSING, &tty->flags)) {
1364 if (driver->type == TTY_DRIVER_TYPE_PTY &&
1365 driver->subtype == PTY_TYPE_MASTER) {
1367 * special case for PTY masters: only one open permitted,
1368 * and the slave side open count is incremented as well.
1377 tty->driver = driver; /* N.B. why do this every time?? */
1380 if(!test_bit(TTY_LDISC, &tty->flags))
1381 printk(KERN_ERR "init_dev but no ldisc\n");
1385 /* All paths come through here to release the semaphore */
1389 /* Release locally allocated memory ... nothing placed in slots */
1394 free_tty_struct(o_tty);
1399 free_tty_struct(tty);
1402 module_put(driver->owner);
1406 /* call the tty release_mem routine to clean out this slot */
1408 printk(KERN_INFO "init_dev: ldisc open failed, "
1409 "clearing slot %d\n", idx);
1410 release_mem(tty, idx);
1415 * Releases memory associated with a tty structure, and clears out the
1416 * driver table slots.
1418 static void release_mem(struct tty_struct *tty, int idx)
1420 struct tty_struct *o_tty;
1422 int devpts = tty->driver->flags & TTY_DRIVER_DEVPTS_MEM;
1424 if ((o_tty = tty->link) != NULL) {
1426 o_tty->driver->ttys[idx] = NULL;
1427 if (o_tty->driver->flags & TTY_DRIVER_RESET_TERMIOS) {
1428 tp = o_tty->termios;
1430 o_tty->driver->termios[idx] = NULL;
1433 tp = o_tty->termios_locked;
1435 o_tty->driver->termios_locked[idx] = NULL;
1439 o_tty->driver->refcount--;
1441 list_del_init(&o_tty->tty_files);
1443 free_tty_struct(o_tty);
1447 tty->driver->ttys[idx] = NULL;
1448 if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS) {
1451 tty->driver->termios[idx] = NULL;
1454 tp = tty->termios_locked;
1456 tty->driver->termios_locked[idx] = NULL;
1461 tty->driver->refcount--;
1463 list_del_init(&tty->tty_files);
1465 module_put(tty->driver->owner);
1466 free_tty_struct(tty);
1470 * Even releasing the tty structures is a tricky business.. We have
1471 * to be very careful that the structures are all released at the
1472 * same time, as interrupts might otherwise get the wrong pointers.
1474 * WSH 09/09/97: rewritten to avoid some nasty race conditions that could
1475 * lead to double frees or releasing memory still in use.
1477 static void release_dev(struct file * filp)
1479 struct tty_struct *tty, *o_tty;
1480 int pty_master, tty_closing, o_tty_closing, do_sleep;
1481 int devpts_master, devpts;
1484 unsigned long flags;
1486 tty = (struct tty_struct *)filp->private_data;
1487 if (tty_paranoia_check(tty, filp->f_dentry->d_inode, "release_dev"))
1490 check_tty_count(tty, "release_dev");
1492 tty_fasync(-1, filp, 0);
1495 pty_master = (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
1496 tty->driver->subtype == PTY_TYPE_MASTER);
1497 devpts = (tty->driver->flags & TTY_DRIVER_DEVPTS_MEM) != 0;
1498 devpts_master = pty_master && devpts;
1501 #ifdef TTY_PARANOIA_CHECK
1502 if (idx < 0 || idx >= tty->driver->num) {
1503 printk(KERN_DEBUG "release_dev: bad idx when trying to "
1504 "free (%s)\n", tty->name);
1507 if (!(tty->driver->flags & TTY_DRIVER_DEVPTS_MEM)) {
1508 if (tty != tty->driver->ttys[idx]) {
1509 printk(KERN_DEBUG "release_dev: driver.table[%d] not tty "
1510 "for (%s)\n", idx, tty->name);
1513 if (tty->termios != tty->driver->termios[idx]) {
1514 printk(KERN_DEBUG "release_dev: driver.termios[%d] not termios "
1519 if (tty->termios_locked != tty->driver->termios_locked[idx]) {
1520 printk(KERN_DEBUG "release_dev: driver.termios_locked[%d] not "
1521 "termios_locked for (%s)\n",
1528 #ifdef TTY_DEBUG_HANGUP
1529 printk(KERN_DEBUG "release_dev of %s (tty count=%d)...",
1530 tty_name(tty, buf), tty->count);
1533 #ifdef TTY_PARANOIA_CHECK
1534 if (tty->driver->other &&
1535 !(tty->driver->flags & TTY_DRIVER_DEVPTS_MEM)) {
1536 if (o_tty != tty->driver->other->ttys[idx]) {
1537 printk(KERN_DEBUG "release_dev: other->table[%d] "
1538 "not o_tty for (%s)\n",
1542 if (o_tty->termios != tty->driver->other->termios[idx]) {
1543 printk(KERN_DEBUG "release_dev: other->termios[%d] "
1544 "not o_termios for (%s)\n",
1548 if (o_tty->termios_locked !=
1549 tty->driver->other->termios_locked[idx]) {
1550 printk(KERN_DEBUG "release_dev: other->termios_locked["
1551 "%d] not o_termios_locked for (%s)\n",
1555 if (o_tty->link != tty) {
1556 printk(KERN_DEBUG "release_dev: bad pty pointers\n");
1561 if (tty->driver->close)
1562 tty->driver->close(tty, filp);
1565 * Sanity check: if tty->count is going to zero, there shouldn't be
1566 * any waiters on tty->read_wait or tty->write_wait. We test the
1567 * wait queues and kick everyone out _before_ actually starting to
1568 * close. This ensures that we won't block while releasing the tty
1571 * The test for the o_tty closing is necessary, since the master and
1572 * slave sides may close in any order. If the slave side closes out
1573 * first, its count will be one, since the master side holds an open.
1574 * Thus this test wouldn't be triggered at the time the slave closes,
1577 * Note that it's possible for the tty to be opened again while we're
1578 * flushing out waiters. By recalculating the closing flags before
1579 * each iteration we avoid any problems.
1582 /* Guard against races with tty->count changes elsewhere and
1583 opens on /dev/tty */
1586 tty_closing = tty->count <= 1;
1587 o_tty_closing = o_tty &&
1588 (o_tty->count <= (pty_master ? 1 : 0));
1593 if (waitqueue_active(&tty->read_wait)) {
1594 wake_up(&tty->read_wait);
1597 if (waitqueue_active(&tty->write_wait)) {
1598 wake_up(&tty->write_wait);
1602 if (o_tty_closing) {
1603 if (waitqueue_active(&o_tty->read_wait)) {
1604 wake_up(&o_tty->read_wait);
1607 if (waitqueue_active(&o_tty->write_wait)) {
1608 wake_up(&o_tty->write_wait);
1615 printk(KERN_WARNING "release_dev: %s: read/write wait queue "
1616 "active!\n", tty_name(tty, buf));
1621 * The closing flags are now consistent with the open counts on
1622 * both sides, and we've completed the last operation that could
1623 * block, so it's safe to proceed with closing.
1628 if (--o_tty->count < 0) {
1629 printk(KERN_WARNING "release_dev: bad pty slave count "
1631 o_tty->count, tty_name(o_tty, buf));
1635 if (--tty->count < 0) {
1636 printk(KERN_WARNING "release_dev: bad tty->count (%d) for %s\n",
1637 tty->count, tty_name(tty, buf));
1643 * We've decremented tty->count, so we need to remove this file
1644 * descriptor off the tty->tty_files list; this serves two
1646 * - check_tty_count sees the correct number of file descriptors
1647 * associated with this tty.
1648 * - do_tty_hangup no longer sees this file descriptor as
1649 * something that needs to be handled for hangups.
1652 filp->private_data = NULL;
1655 * Perform some housekeeping before deciding whether to return.
1657 * Set the TTY_CLOSING flag if this was the last open. In the
1658 * case of a pty we may have to wait around for the other side
1659 * to close, and TTY_CLOSING makes sure we can't be reopened.
1662 set_bit(TTY_CLOSING, &tty->flags);
1664 set_bit(TTY_CLOSING, &o_tty->flags);
1667 * If _either_ side is closing, make sure there aren't any
1668 * processes that still think tty or o_tty is their controlling
1671 if (tty_closing || o_tty_closing) {
1672 struct task_struct *p;
1674 read_lock(&tasklist_lock);
1675 do_each_task_pid(tty->session, PIDTYPE_SID, p) {
1676 p->signal->tty = NULL;
1677 } while_each_task_pid(tty->session, PIDTYPE_SID, p);
1679 do_each_task_pid(o_tty->session, PIDTYPE_SID, p) {
1680 p->signal->tty = NULL;
1681 } while_each_task_pid(o_tty->session, PIDTYPE_SID, p);
1682 read_unlock(&tasklist_lock);
1685 /* check whether both sides are closing ... */
1686 if (!tty_closing || (o_tty && !o_tty_closing))
1689 #ifdef TTY_DEBUG_HANGUP
1690 printk(KERN_DEBUG "freeing tty structure...");
1693 * Prevent flush_to_ldisc() from rescheduling the work for later. Then
1694 * kill any delayed work. As this is the final close it does not
1695 * race with the set_ldisc code path.
1697 clear_bit(TTY_LDISC, &tty->flags);
1698 clear_bit(TTY_DONT_FLIP, &tty->flags);
1699 cancel_delayed_work(&tty->flip.work);
1702 * Wait for ->hangup_work and ->flip.work handlers to terminate
1705 flush_scheduled_work();
1708 * Wait for any short term users (we know they are just driver
1709 * side waiters as the file is closing so user count on the file
1712 spin_lock_irqsave(&tty_ldisc_lock, flags);
1713 while(tty->ldisc.refcount)
1715 spin_unlock_irqrestore(&tty_ldisc_lock, flags);
1716 wait_event(tty_ldisc_wait, tty->ldisc.refcount == 0);
1717 spin_lock_irqsave(&tty_ldisc_lock, flags);
1719 spin_unlock_irqrestore(&tty_ldisc_lock, flags);
1721 * Shutdown the current line discipline, and reset it to N_TTY.
1722 * N.B. why reset ldisc when we're releasing the memory??
1724 * FIXME: this MUST get fixed for the new reflocking
1726 if (tty->ldisc.close)
1727 (tty->ldisc.close)(tty);
1728 tty_ldisc_put(tty->ldisc.num);
1731 * Switch the line discipline back
1733 tty_ldisc_assign(tty, tty_ldisc_get(N_TTY));
1734 tty_set_termios_ldisc(tty,N_TTY);
1736 /* FIXME: could o_tty be in setldisc here ? */
1737 clear_bit(TTY_LDISC, &o_tty->flags);
1738 if (o_tty->ldisc.close)
1739 (o_tty->ldisc.close)(o_tty);
1740 tty_ldisc_put(o_tty->ldisc.num);
1741 tty_ldisc_assign(o_tty, tty_ldisc_get(N_TTY));
1742 tty_set_termios_ldisc(o_tty,N_TTY);
1745 * The release_mem function takes care of the details of clearing
1746 * the slots and preserving the termios structure.
1748 release_mem(tty, idx);
1750 #ifdef CONFIG_UNIX98_PTYS
1751 /* Make this pty number available for reallocation */
1753 down(&allocated_ptys_lock);
1754 idr_remove(&allocated_ptys, idx);
1755 up(&allocated_ptys_lock);
1762 * tty_open and tty_release keep up the tty count that contains the
1763 * number of opens done on a tty. We cannot use the inode-count, as
1764 * different inodes might point to the same tty.
1766 * Open-counting is needed for pty masters, as well as for keeping
1767 * track of serial lines: DTR is dropped when the last close happens.
1768 * (This is not done solely through tty->count, now. - Ted 1/27/92)
1770 * The termios state of a pty is reset on first open so that
1771 * settings don't persist across reuse.
1773 static int tty_open(struct inode * inode, struct file * filp)
1775 struct tty_struct *tty;
1777 struct tty_driver *driver;
1779 dev_t device = inode->i_rdev;
1780 unsigned short saved_flags = filp->f_flags;
1782 nonseekable_open(inode, filp);
1785 noctty = filp->f_flags & O_NOCTTY;
1791 if (device == MKDEV(TTYAUX_MAJOR,0)) {
1792 if (!current->signal->tty) {
1796 driver = current->signal->tty->driver;
1797 index = current->signal->tty->index;
1798 filp->f_flags |= O_NONBLOCK; /* Don't let /dev/tty block */
1803 if (device == MKDEV(TTY_MAJOR,0)) {
1804 extern struct tty_driver *console_driver;
1805 driver = console_driver;
1811 if (device == MKDEV(TTYAUX_MAJOR,1)) {
1812 driver = console_device(&index);
1814 /* Don't let /dev/console block */
1815 filp->f_flags |= O_NONBLOCK;
1823 driver = get_tty_driver(device, &index);
1829 retval = init_dev(driver, index, &tty);
1834 filp->private_data = tty;
1835 file_move(filp, &tty->tty_files);
1836 check_tty_count(tty, "tty_open");
1837 if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
1838 tty->driver->subtype == PTY_TYPE_MASTER)
1840 #ifdef TTY_DEBUG_HANGUP
1841 printk(KERN_DEBUG "opening %s...", tty->name);
1844 if (tty->driver->open)
1845 retval = tty->driver->open(tty, filp);
1849 filp->f_flags = saved_flags;
1851 if (!retval && test_bit(TTY_EXCLUSIVE, &tty->flags) && !capable(CAP_SYS_ADMIN))
1855 #ifdef TTY_DEBUG_HANGUP
1856 printk(KERN_DEBUG "error %d in opening %s...", retval,
1860 if (retval != -ERESTARTSYS)
1862 if (signal_pending(current))
1866 * Need to reset f_op in case a hangup happened.
1868 if (filp->f_op == &hung_up_tty_fops)
1869 filp->f_op = &tty_fops;
1873 current->signal->leader &&
1874 !current->signal->tty &&
1875 tty->session == 0) {
1877 current->signal->tty = tty;
1878 task_unlock(current);
1879 current->signal->tty_old_pgrp = 0;
1880 tty->session = current->signal->session;
1881 tty->pgrp = process_group(current);
1886 #ifdef CONFIG_UNIX98_PTYS
1887 static int ptmx_open(struct inode * inode, struct file * filp)
1889 struct tty_struct *tty;
1894 nonseekable_open(inode, filp);
1896 /* find a device that is not in use. */
1897 down(&allocated_ptys_lock);
1898 if (!idr_pre_get(&allocated_ptys, GFP_KERNEL)) {
1899 up(&allocated_ptys_lock);
1902 idr_ret = idr_get_new(&allocated_ptys, NULL, &index);
1904 up(&allocated_ptys_lock);
1905 if (idr_ret == -EAGAIN)
1909 if (index >= pty_limit) {
1910 idr_remove(&allocated_ptys, index);
1911 up(&allocated_ptys_lock);
1914 up(&allocated_ptys_lock);
1917 retval = init_dev(ptm_driver, index, &tty);
1923 set_bit(TTY_PTY_LOCK, &tty->flags); /* LOCK THE SLAVE */
1924 filp->private_data = tty;
1925 file_move(filp, &tty->tty_files);
1928 if (devpts_pty_new(tty->link))
1931 check_tty_count(tty, "tty_open");
1932 retval = ptm_driver->open(tty, filp);
1938 down(&allocated_ptys_lock);
1939 idr_remove(&allocated_ptys, index);
1940 up(&allocated_ptys_lock);
1945 static int tty_release(struct inode * inode, struct file * filp)
1953 /* No kernel lock held - fine */
1954 static unsigned int tty_poll(struct file * filp, poll_table * wait)
1956 struct tty_struct * tty;
1957 struct tty_ldisc *ld;
1960 tty = (struct tty_struct *)filp->private_data;
1961 if (tty_paranoia_check(tty, filp->f_dentry->d_inode, "tty_poll"))
1964 ld = tty_ldisc_ref_wait(tty);
1966 ret = (ld->poll)(tty, filp, wait);
1967 tty_ldisc_deref(ld);
1971 static int tty_fasync(int fd, struct file * filp, int on)
1973 struct tty_struct * tty;
1976 tty = (struct tty_struct *)filp->private_data;
1977 if (tty_paranoia_check(tty, filp->f_dentry->d_inode, "tty_fasync"))
1980 retval = fasync_helper(fd, filp, on, &tty->fasync);
1985 if (!waitqueue_active(&tty->read_wait))
1986 tty->minimum_to_wake = 1;
1987 retval = f_setown(filp, (-tty->pgrp) ? : current->pid, 0);
1991 if (!tty->fasync && !waitqueue_active(&tty->read_wait))
1992 tty->minimum_to_wake = N_TTY_BUF_SIZE;
1997 static int tiocsti(struct tty_struct *tty, char __user *p)
2000 struct tty_ldisc *ld;
2002 if ((current->signal->tty != tty) && !capable(CAP_SYS_ADMIN))
2004 if (get_user(ch, p))
2006 ld = tty_ldisc_ref_wait(tty);
2007 ld->receive_buf(tty, &ch, &mbz, 1);
2008 tty_ldisc_deref(ld);
2012 static int tiocgwinsz(struct tty_struct *tty, struct winsize __user * arg)
2014 if (copy_to_user(arg, &tty->winsize, sizeof(*arg)))
2019 static int tiocswinsz(struct tty_struct *tty, struct tty_struct *real_tty,
2020 struct winsize __user * arg)
2022 struct winsize tmp_ws;
2024 if (copy_from_user(&tmp_ws, arg, sizeof(*arg)))
2026 if (!memcmp(&tmp_ws, &tty->winsize, sizeof(*arg)))
2029 if (tty->driver->type == TTY_DRIVER_TYPE_CONSOLE) {
2032 acquire_console_sem();
2033 rc = vc_resize(tty->driver_data, tmp_ws.ws_col, tmp_ws.ws_row);
2034 release_console_sem();
2040 kill_pg(tty->pgrp, SIGWINCH, 1);
2041 if ((real_tty->pgrp != tty->pgrp) && (real_tty->pgrp > 0))
2042 kill_pg(real_tty->pgrp, SIGWINCH, 1);
2043 tty->winsize = tmp_ws;
2044 real_tty->winsize = tmp_ws;
2048 static int tioccons(struct file *file)
2050 if (!capable(CAP_SYS_ADMIN))
2052 if (file->f_op->write == redirected_tty_write) {
2054 spin_lock(&redirect_lock);
2057 spin_unlock(&redirect_lock);
2062 spin_lock(&redirect_lock);
2064 spin_unlock(&redirect_lock);
2069 spin_unlock(&redirect_lock);
2074 static int fionbio(struct file *file, int __user *p)
2078 if (get_user(nonblock, p))
2082 file->f_flags |= O_NONBLOCK;
2084 file->f_flags &= ~O_NONBLOCK;
2088 static int tiocsctty(struct tty_struct *tty, int arg)
2092 if (current->signal->leader &&
2093 (current->signal->session == tty->session))
2096 * The process must be a session leader and
2097 * not have a controlling tty already.
2099 if (!current->signal->leader || current->signal->tty)
2101 if (tty->session > 0) {
2103 * This tty is already the controlling
2104 * tty for another session group!
2106 if ((arg == 1) && capable(CAP_SYS_ADMIN)) {
2111 read_lock(&tasklist_lock);
2112 do_each_task_pid(tty->session, PIDTYPE_SID, p) {
2113 p->signal->tty = NULL;
2114 } while_each_task_pid(tty->session, PIDTYPE_SID, p);
2115 read_unlock(&tasklist_lock);
2120 current->signal->tty = tty;
2121 task_unlock(current);
2122 current->signal->tty_old_pgrp = 0;
2123 tty->session = current->signal->session;
2124 tty->pgrp = process_group(current);
2128 static int tiocgpgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t __user *p)
2131 * (tty == real_tty) is a cheap way of
2132 * testing if the tty is NOT a master pty.
2134 if (tty == real_tty && current->signal->tty != real_tty)
2136 return put_user(real_tty->pgrp, p);
2139 static int tiocspgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t __user *p)
2142 int retval = tty_check_change(real_tty);
2148 if (!current->signal->tty ||
2149 (current->signal->tty != real_tty) ||
2150 (real_tty->session != current->signal->session))
2152 if (get_user(pgrp, p))
2156 if (session_of_pgrp(pgrp) != current->signal->session)
2158 real_tty->pgrp = pgrp;
2162 static int tiocgsid(struct tty_struct *tty, struct tty_struct *real_tty, pid_t __user *p)
2165 * (tty == real_tty) is a cheap way of
2166 * testing if the tty is NOT a master pty.
2168 if (tty == real_tty && current->signal->tty != real_tty)
2170 if (real_tty->session <= 0)
2172 return put_user(real_tty->session, p);
2175 static int tiocsetd(struct tty_struct *tty, int __user *p)
2179 if (get_user(ldisc, p))
2181 return tty_set_ldisc(tty, ldisc);
2184 static int send_break(struct tty_struct *tty, unsigned int duration)
2186 tty->driver->break_ctl(tty, -1);
2187 if (!signal_pending(current)) {
2188 msleep_interruptible(duration);
2190 tty->driver->break_ctl(tty, 0);
2191 if (signal_pending(current))
2197 tty_tiocmget(struct tty_struct *tty, struct file *file, int __user *p)
2199 int retval = -EINVAL;
2201 if (tty->driver->tiocmget) {
2202 retval = tty->driver->tiocmget(tty, file);
2205 retval = put_user(retval, p);
2211 tty_tiocmset(struct tty_struct *tty, struct file *file, unsigned int cmd,
2214 int retval = -EINVAL;
2216 if (tty->driver->tiocmset) {
2217 unsigned int set, clear, val;
2219 retval = get_user(val, p);
2237 set &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP;
2238 clear &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP;
2240 retval = tty->driver->tiocmset(tty, file, set, clear);
2246 * Split this up, as gcc can choke on it otherwise..
2248 int tty_ioctl(struct inode * inode, struct file * file,
2249 unsigned int cmd, unsigned long arg)
2251 struct tty_struct *tty, *real_tty;
2252 void __user *p = (void __user *)arg;
2254 struct tty_ldisc *ld;
2256 tty = (struct tty_struct *)file->private_data;
2257 if (tty_paranoia_check(tty, inode, "tty_ioctl"))
2261 if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
2262 tty->driver->subtype == PTY_TYPE_MASTER)
2263 real_tty = tty->link;
2266 * Break handling by driver
2268 if (!tty->driver->break_ctl) {
2272 if (tty->driver->ioctl)
2273 return tty->driver->ioctl(tty, file, cmd, arg);
2276 /* These two ioctl's always return success; even if */
2277 /* the driver doesn't support them. */
2280 if (!tty->driver->ioctl)
2282 retval = tty->driver->ioctl(tty, file, cmd, arg);
2283 if (retval == -ENOIOCTLCMD)
2290 * Factor out some common prep work
2298 retval = tty_check_change(tty);
2301 if (cmd != TIOCCBRK) {
2302 tty_wait_until_sent(tty, 0);
2303 if (signal_pending(current))
2311 return tiocsti(tty, p);
2313 return tiocgwinsz(tty, p);
2315 return tiocswinsz(tty, real_tty, p);
2317 return real_tty!=tty ? -EINVAL : tioccons(file);
2319 return fionbio(file, p);
2321 set_bit(TTY_EXCLUSIVE, &tty->flags);
2324 clear_bit(TTY_EXCLUSIVE, &tty->flags);
2327 if (current->signal->tty != tty)
2329 if (current->signal->leader)
2330 disassociate_ctty(0);
2332 current->signal->tty = NULL;
2333 task_unlock(current);
2336 return tiocsctty(tty, arg);
2338 return tiocgpgrp(tty, real_tty, p);
2340 return tiocspgrp(tty, real_tty, p);
2342 return tiocgsid(tty, real_tty, p);
2344 /* FIXME: check this is ok */
2345 return put_user(tty->ldisc.num, (int __user *)p);
2347 return tiocsetd(tty, p);
2350 return tioclinux(tty, arg);
2355 case TIOCSBRK: /* Turn break on, unconditionally */
2356 tty->driver->break_ctl(tty, -1);
2359 case TIOCCBRK: /* Turn break off, unconditionally */
2360 tty->driver->break_ctl(tty, 0);
2362 case TCSBRK: /* SVID version: non-zero arg --> no break */
2364 * XXX is the above comment correct, or the
2365 * code below correct? Is this ioctl used at
2369 return send_break(tty, 250);
2371 case TCSBRKP: /* support for POSIX tcsendbreak() */
2372 return send_break(tty, arg ? arg*100 : 250);
2375 return tty_tiocmget(tty, file, p);
2380 return tty_tiocmset(tty, file, cmd, p);
2382 if (tty->driver->ioctl) {
2383 retval = (tty->driver->ioctl)(tty, file, cmd, arg);
2384 if (retval != -ENOIOCTLCMD)
2387 ld = tty_ldisc_ref_wait(tty);
2390 retval = ld->ioctl(tty, file, cmd, arg);
2391 if (retval == -ENOIOCTLCMD)
2394 tty_ldisc_deref(ld);
2400 * This implements the "Secure Attention Key" --- the idea is to
2401 * prevent trojan horses by killing all processes associated with this
2402 * tty when the user hits the "Secure Attention Key". Required for
2403 * super-paranoid applications --- see the Orange Book for more details.
2405 * This code could be nicer; ideally it should send a HUP, wait a few
2406 * seconds, then send a INT, and then a KILL signal. But you then
2407 * have to coordinate with the init process, since all processes associated
2408 * with the current tty must be dead before the new getty is allowed
2411 * Now, if it would be correct ;-/ The current code has a nasty hole -
2412 * it doesn't catch files in flight. We may send the descriptor to ourselves
2413 * via AF_UNIX socket, close it and later fetch from socket. FIXME.
2415 * Nasty bug: do_SAK is being called in interrupt context. This can
2416 * deadlock. We punt it up to process context. AKPM - 16Mar2001
2418 static void __do_SAK(void *arg)
2423 struct tty_struct *tty = arg;
2424 struct task_struct *p;
2428 struct tty_ldisc *disc;
2432 session = tty->session;
2434 /* We don't want an ldisc switch during this */
2435 disc = tty_ldisc_ref(tty);
2436 if (disc && disc->flush_buffer)
2437 disc->flush_buffer(tty);
2438 tty_ldisc_deref(disc);
2440 if (tty->driver->flush_buffer)
2441 tty->driver->flush_buffer(tty);
2443 read_lock(&tasklist_lock);
2444 do_each_task_pid(session, PIDTYPE_SID, p) {
2445 if (p->signal->tty == tty || session > 0) {
2446 printk(KERN_NOTICE "SAK: killed process %d"
2447 " (%s): p->signal->session==tty->session\n",
2449 send_sig(SIGKILL, p, 1);
2454 spin_lock(&p->files->file_lock);
2455 for (i=0; i < p->files->max_fds; i++) {
2456 filp = fcheck_files(p->files, i);
2459 if (filp->f_op->read == tty_read &&
2460 filp->private_data == tty) {
2461 printk(KERN_NOTICE "SAK: killed process %d"
2462 " (%s): fd#%d opened to the tty\n",
2463 p->pid, p->comm, i);
2464 send_sig(SIGKILL, p, 1);
2468 spin_unlock(&p->files->file_lock);
2471 } while_each_task_pid(session, PIDTYPE_SID, p);
2472 read_unlock(&tasklist_lock);
2477 * The tq handling here is a little racy - tty->SAK_work may already be queued.
2478 * Fortunately we don't need to worry, because if ->SAK_work is already queued,
2479 * the values which we write to it will be identical to the values which it
2480 * already has. --akpm
2482 void do_SAK(struct tty_struct *tty)
2486 PREPARE_WORK(&tty->SAK_work, __do_SAK, tty);
2487 schedule_work(&tty->SAK_work);
2490 EXPORT_SYMBOL(do_SAK);
2493 * This routine is called out of the software interrupt to flush data
2494 * from the flip buffer to the line discipline.
2497 static void flush_to_ldisc(void *private_)
2499 struct tty_struct *tty = (struct tty_struct *) private_;
2503 unsigned long flags;
2504 struct tty_ldisc *disc;
2506 disc = tty_ldisc_ref(tty);
2507 if (disc == NULL) /* !TTY_LDISC */
2510 if (test_bit(TTY_DONT_FLIP, &tty->flags)) {
2512 * Do it after the next timer tick:
2514 schedule_delayed_work(&tty->flip.work, 1);
2517 spin_lock_irqsave(&tty->read_lock, flags);
2518 if (tty->flip.buf_num) {
2519 cp = tty->flip.char_buf + TTY_FLIPBUF_SIZE;
2520 fp = tty->flip.flag_buf + TTY_FLIPBUF_SIZE;
2521 tty->flip.buf_num = 0;
2522 tty->flip.char_buf_ptr = tty->flip.char_buf;
2523 tty->flip.flag_buf_ptr = tty->flip.flag_buf;
2525 cp = tty->flip.char_buf;
2526 fp = tty->flip.flag_buf;
2527 tty->flip.buf_num = 1;
2528 tty->flip.char_buf_ptr = tty->flip.char_buf + TTY_FLIPBUF_SIZE;
2529 tty->flip.flag_buf_ptr = tty->flip.flag_buf + TTY_FLIPBUF_SIZE;
2531 count = tty->flip.count;
2532 tty->flip.count = 0;
2533 spin_unlock_irqrestore(&tty->read_lock, flags);
2535 disc->receive_buf(tty, cp, fp, count);
2537 tty_ldisc_deref(disc);
2541 * Routine which returns the baud rate of the tty
2543 * Note that the baud_table needs to be kept in sync with the
2544 * include/asm/termbits.h file.
2546 static int baud_table[] = {
2547 0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800,
2548 9600, 19200, 38400, 57600, 115200, 230400, 460800,
2550 76800, 153600, 307200, 614400, 921600
2552 500000, 576000, 921600, 1000000, 1152000, 1500000, 2000000,
2553 2500000, 3000000, 3500000, 4000000
2557 static int n_baud_table = ARRAY_SIZE(baud_table);
2560 * tty_termios_baud_rate
2561 * @termios: termios structure
2563 * Convert termios baud rate data into a speed. This should be called
2564 * with the termios lock held if this termios is a terminal termios
2565 * structure. May change the termios data.
2568 int tty_termios_baud_rate(struct termios *termios)
2572 cbaud = termios->c_cflag & CBAUD;
2574 if (cbaud & CBAUDEX) {
2577 if (cbaud < 1 || cbaud + 15 > n_baud_table)
2578 termios->c_cflag &= ~CBAUDEX;
2582 return baud_table[cbaud];
2585 EXPORT_SYMBOL(tty_termios_baud_rate);
2588 * tty_get_baud_rate - get tty bit rates
2589 * @tty: tty to query
2591 * Returns the baud rate as an integer for this terminal. The
2592 * termios lock must be held by the caller and the terminal bit
2593 * flags may be updated.
2596 int tty_get_baud_rate(struct tty_struct *tty)
2598 int baud = tty_termios_baud_rate(tty->termios);
2600 if (baud == 38400 && tty->alt_speed) {
2602 printk(KERN_WARNING "Use of setserial/setrocket to "
2603 "set SPD_* flags is deprecated\n");
2606 baud = tty->alt_speed;
2612 EXPORT_SYMBOL(tty_get_baud_rate);
2615 * tty_flip_buffer_push - terminal
2618 * Queue a push of the terminal flip buffers to the line discipline. This
2619 * function must not be called from IRQ context if tty->low_latency is set.
2621 * In the event of the queue being busy for flipping the work will be
2622 * held off and retried later.
2625 void tty_flip_buffer_push(struct tty_struct *tty)
2627 if (tty->low_latency)
2628 flush_to_ldisc((void *) tty);
2630 schedule_delayed_work(&tty->flip.work, 1);
2633 EXPORT_SYMBOL(tty_flip_buffer_push);
2636 * This subroutine initializes a tty structure.
2638 static void initialize_tty_struct(struct tty_struct *tty)
2640 memset(tty, 0, sizeof(struct tty_struct));
2641 tty->magic = TTY_MAGIC;
2642 tty_ldisc_assign(tty, tty_ldisc_get(N_TTY));
2644 tty->overrun_time = jiffies;
2645 tty->flip.char_buf_ptr = tty->flip.char_buf;
2646 tty->flip.flag_buf_ptr = tty->flip.flag_buf;
2647 INIT_WORK(&tty->flip.work, flush_to_ldisc, tty);
2648 init_MUTEX(&tty->flip.pty_sem);
2649 init_MUTEX(&tty->termios_sem);
2650 init_waitqueue_head(&tty->write_wait);
2651 init_waitqueue_head(&tty->read_wait);
2652 INIT_WORK(&tty->hangup_work, do_tty_hangup, tty);
2653 sema_init(&tty->atomic_read, 1);
2654 sema_init(&tty->atomic_write, 1);
2655 spin_lock_init(&tty->read_lock);
2656 INIT_LIST_HEAD(&tty->tty_files);
2657 INIT_WORK(&tty->SAK_work, NULL, NULL);
2661 * The default put_char routine if the driver did not define one.
2663 static void tty_default_put_char(struct tty_struct *tty, unsigned char ch)
2665 tty->driver->write(tty, &ch, 1);
2668 static struct class *tty_class;
2671 * tty_register_device - register a tty device
2672 * @driver: the tty driver that describes the tty device
2673 * @index: the index in the tty driver for this tty device
2674 * @device: a struct device that is associated with this tty device.
2675 * This field is optional, if there is no known struct device for this
2676 * tty device it can be set to NULL safely.
2678 * This call is required to be made to register an individual tty device if
2679 * the tty driver's flags have the TTY_DRIVER_NO_DEVFS bit set. If that
2680 * bit is not set, this function should not be called.
2682 void tty_register_device(struct tty_driver *driver, unsigned index,
2683 struct device *device)
2686 dev_t dev = MKDEV(driver->major, driver->minor_start) + index;
2688 if (index >= driver->num) {
2689 printk(KERN_ERR "Attempt to register invalid tty line number "
2694 devfs_mk_cdev(dev, S_IFCHR | S_IRUSR | S_IWUSR,
2695 "%s%d", driver->devfs_name, index + driver->name_base);
2697 if (driver->type == TTY_DRIVER_TYPE_PTY)
2698 pty_line_name(driver, index, name);
2700 tty_line_name(driver, index, name);
2701 class_device_create(tty_class, dev, device, name);
2705 * tty_unregister_device - unregister a tty device
2706 * @driver: the tty driver that describes the tty device
2707 * @index: the index in the tty driver for this tty device
2709 * If a tty device is registered with a call to tty_register_device() then
2710 * this function must be made when the tty device is gone.
2712 void tty_unregister_device(struct tty_driver *driver, unsigned index)
2714 devfs_remove("%s%d", driver->devfs_name, index + driver->name_base);
2715 class_device_destroy(tty_class, MKDEV(driver->major, driver->minor_start) + index);
2718 EXPORT_SYMBOL(tty_register_device);
2719 EXPORT_SYMBOL(tty_unregister_device);
2721 struct tty_driver *alloc_tty_driver(int lines)
2723 struct tty_driver *driver;
2725 driver = kmalloc(sizeof(struct tty_driver), GFP_KERNEL);
2727 memset(driver, 0, sizeof(struct tty_driver));
2728 driver->magic = TTY_DRIVER_MAGIC;
2729 driver->num = lines;
2730 /* later we'll move allocation of tables here */
2735 void put_tty_driver(struct tty_driver *driver)
2740 void tty_set_operations(struct tty_driver *driver, struct tty_operations *op)
2742 driver->open = op->open;
2743 driver->close = op->close;
2744 driver->write = op->write;
2745 driver->put_char = op->put_char;
2746 driver->flush_chars = op->flush_chars;
2747 driver->write_room = op->write_room;
2748 driver->chars_in_buffer = op->chars_in_buffer;
2749 driver->ioctl = op->ioctl;
2750 driver->set_termios = op->set_termios;
2751 driver->throttle = op->throttle;
2752 driver->unthrottle = op->unthrottle;
2753 driver->stop = op->stop;
2754 driver->start = op->start;
2755 driver->hangup = op->hangup;
2756 driver->break_ctl = op->break_ctl;
2757 driver->flush_buffer = op->flush_buffer;
2758 driver->set_ldisc = op->set_ldisc;
2759 driver->wait_until_sent = op->wait_until_sent;
2760 driver->send_xchar = op->send_xchar;
2761 driver->read_proc = op->read_proc;
2762 driver->write_proc = op->write_proc;
2763 driver->tiocmget = op->tiocmget;
2764 driver->tiocmset = op->tiocmset;
2768 EXPORT_SYMBOL(alloc_tty_driver);
2769 EXPORT_SYMBOL(put_tty_driver);
2770 EXPORT_SYMBOL(tty_set_operations);
2773 * Called by a tty driver to register itself.
2775 int tty_register_driver(struct tty_driver *driver)
2782 if (driver->flags & TTY_DRIVER_INSTALLED)
2785 if (!(driver->flags & TTY_DRIVER_DEVPTS_MEM)) {
2786 p = kmalloc(driver->num * 3 * sizeof(void *), GFP_KERNEL);
2789 memset(p, 0, driver->num * 3 * sizeof(void *));
2792 if (!driver->major) {
2793 error = alloc_chrdev_region(&dev, driver->minor_start, driver->num,
2794 (char*)driver->name);
2796 driver->major = MAJOR(dev);
2797 driver->minor_start = MINOR(dev);
2800 dev = MKDEV(driver->major, driver->minor_start);
2801 error = register_chrdev_region(dev, driver->num,
2802 (char*)driver->name);
2810 driver->ttys = (struct tty_struct **)p;
2811 driver->termios = (struct termios **)(p + driver->num);
2812 driver->termios_locked = (struct termios **)(p + driver->num * 2);
2814 driver->ttys = NULL;
2815 driver->termios = NULL;
2816 driver->termios_locked = NULL;
2819 cdev_init(&driver->cdev, &tty_fops);
2820 driver->cdev.owner = driver->owner;
2821 error = cdev_add(&driver->cdev, dev, driver->num);
2823 cdev_del(&driver->cdev);
2824 unregister_chrdev_region(dev, driver->num);
2825 driver->ttys = NULL;
2826 driver->termios = driver->termios_locked = NULL;
2831 if (!driver->put_char)
2832 driver->put_char = tty_default_put_char;
2834 list_add(&driver->tty_drivers, &tty_drivers);
2836 if ( !(driver->flags & TTY_DRIVER_NO_DEVFS) ) {
2837 for(i = 0; i < driver->num; i++)
2838 tty_register_device(driver, i, NULL);
2840 proc_tty_register_driver(driver);
2844 EXPORT_SYMBOL(tty_register_driver);
2847 * Called by a tty driver to unregister itself.
2849 int tty_unregister_driver(struct tty_driver *driver)
2855 if (driver->refcount)
2858 unregister_chrdev_region(MKDEV(driver->major, driver->minor_start),
2861 list_del(&driver->tty_drivers);
2864 * Free the termios and termios_locked structures because
2865 * we don't want to get memory leaks when modular tty
2866 * drivers are removed from the kernel.
2868 for (i = 0; i < driver->num; i++) {
2869 tp = driver->termios[i];
2871 driver->termios[i] = NULL;
2874 tp = driver->termios_locked[i];
2876 driver->termios_locked[i] = NULL;
2879 if (!(driver->flags & TTY_DRIVER_NO_DEVFS))
2880 tty_unregister_device(driver, i);
2883 proc_tty_unregister_driver(driver);
2884 driver->ttys = NULL;
2885 driver->termios = driver->termios_locked = NULL;
2887 cdev_del(&driver->cdev);
2891 EXPORT_SYMBOL(tty_unregister_driver);
2895 * Initialize the console device. This is called *early*, so
2896 * we can't necessarily depend on lots of kernel help here.
2897 * Just do some early initializations, and do the complex setup
2900 void __init console_init(void)
2904 /* Setup the default TTY line discipline. */
2905 (void) tty_register_ldisc(N_TTY, &tty_ldisc_N_TTY);
2908 * set up the console device so that later boot sequences can
2909 * inform about problems etc..
2911 #ifdef CONFIG_EARLY_PRINTK
2912 disable_early_printk();
2914 #ifdef CONFIG_SERIAL_68360
2915 /* This is not a console initcall. I know not what it's doing here.
2916 So I haven't moved it. dwmw2 */
2919 call = __con_initcall_start;
2920 while (call < __con_initcall_end) {
2927 extern int vty_init(void);
2930 static int __init tty_class_init(void)
2932 tty_class = class_create(THIS_MODULE, "tty");
2933 if (IS_ERR(tty_class))
2934 return PTR_ERR(tty_class);
2938 postcore_initcall(tty_class_init);
2940 /* 3/2004 jmc: why do these devices exist? */
2942 static struct cdev tty_cdev, console_cdev;
2943 #ifdef CONFIG_UNIX98_PTYS
2944 static struct cdev ptmx_cdev;
2947 static struct cdev vc0_cdev;
2951 * Ok, now we can initialize the rest of the tty devices and can count
2952 * on memory allocations, interrupts etc..
2954 static int __init tty_init(void)
2956 cdev_init(&tty_cdev, &tty_fops);
2957 if (cdev_add(&tty_cdev, MKDEV(TTYAUX_MAJOR, 0), 1) ||
2958 register_chrdev_region(MKDEV(TTYAUX_MAJOR, 0), 1, "/dev/tty") < 0)
2959 panic("Couldn't register /dev/tty driver\n");
2960 devfs_mk_cdev(MKDEV(TTYAUX_MAJOR, 0), S_IFCHR|S_IRUGO|S_IWUGO, "tty");
2961 class_device_create(tty_class, MKDEV(TTYAUX_MAJOR, 0), NULL, "tty");
2963 cdev_init(&console_cdev, &console_fops);
2964 if (cdev_add(&console_cdev, MKDEV(TTYAUX_MAJOR, 1), 1) ||
2965 register_chrdev_region(MKDEV(TTYAUX_MAJOR, 1), 1, "/dev/console") < 0)
2966 panic("Couldn't register /dev/console driver\n");
2967 devfs_mk_cdev(MKDEV(TTYAUX_MAJOR, 1), S_IFCHR|S_IRUSR|S_IWUSR, "console");
2968 class_device_create(tty_class, MKDEV(TTYAUX_MAJOR, 1), NULL, "console");
2970 #ifdef CONFIG_UNIX98_PTYS
2971 cdev_init(&ptmx_cdev, &ptmx_fops);
2972 if (cdev_add(&ptmx_cdev, MKDEV(TTYAUX_MAJOR, 2), 1) ||
2973 register_chrdev_region(MKDEV(TTYAUX_MAJOR, 2), 1, "/dev/ptmx") < 0)
2974 panic("Couldn't register /dev/ptmx driver\n");
2975 devfs_mk_cdev(MKDEV(TTYAUX_MAJOR, 2), S_IFCHR|S_IRUGO|S_IWUGO, "ptmx");
2976 class_device_create(tty_class, MKDEV(TTYAUX_MAJOR, 2), NULL, "ptmx");
2980 cdev_init(&vc0_cdev, &console_fops);
2981 if (cdev_add(&vc0_cdev, MKDEV(TTY_MAJOR, 0), 1) ||
2982 register_chrdev_region(MKDEV(TTY_MAJOR, 0), 1, "/dev/vc/0") < 0)
2983 panic("Couldn't register /dev/tty0 driver\n");
2984 devfs_mk_cdev(MKDEV(TTY_MAJOR, 0), S_IFCHR|S_IRUSR|S_IWUSR, "vc/0");
2985 class_device_create(tty_class, MKDEV(TTY_MAJOR, 0), NULL, "tty0");
2991 module_init(tty_init);