summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/char/tty_io.c75
-rw-r--r--fs/proc/proc_tty.c20
2 files changed, 40 insertions, 55 deletions
diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c
index 225c3989bae7..e0f6d4627caa 100644
--- a/drivers/char/tty_io.c
+++ b/drivers/char/tty_io.c
@@ -2116,9 +2116,6 @@ static void tty_register_devfs(struct tty_driver *driver, unsigned minor)
return;
}
- if (IS_TTY_DEV(dev) || IS_PTMX_DEV(dev))
- mode |= S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
-
sprintf(buf, driver->name, idx + driver->name_base);
devfs_register(NULL, buf, 0, driver->major, minor, mode,
&tty_fops, NULL);
@@ -2255,12 +2252,7 @@ void __init console_init(void)
}
}
-static struct tty_driver dev_tty_driver, dev_syscons_driver;
-#ifdef CONFIG_UNIX98_PTYS
-static struct tty_driver dev_ptmx_driver;
-#endif
#ifdef CONFIG_VT
-static struct tty_driver dev_console_driver;
extern int vty_init(void);
#endif
@@ -2282,64 +2274,37 @@ postcore_initcall(tty_devclass_init);
*/
void __init tty_init(void)
{
- /*
- * dev_tty_driver and dev_console_driver are actually magic
- * devices which get redirected at open time. Nevertheless,
- * we register them so that register_chrdev is called
- * appropriately.
- */
- memset(&dev_tty_driver, 0, sizeof(struct tty_driver));
- dev_tty_driver.magic = TTY_DRIVER_MAGIC;
- dev_tty_driver.owner = THIS_MODULE;
- dev_tty_driver.driver_name = "/dev/tty";
- dev_tty_driver.name = dev_tty_driver.driver_name + 5;
- dev_tty_driver.name_base = 0;
- dev_tty_driver.major = TTYAUX_MAJOR;
- dev_tty_driver.minor_start = 0;
- dev_tty_driver.num = 1;
- dev_tty_driver.type = TTY_DRIVER_TYPE_SYSTEM;
- dev_tty_driver.subtype = SYSTEM_TYPE_TTY;
-
- if (tty_register_driver(&dev_tty_driver))
+ if (register_chrdev_region(TTYAUX_MAJOR, 0, 1,
+ "/dev/tty", &tty_fops) < 0)
panic("Couldn't register /dev/tty driver\n");
- dev_syscons_driver = dev_tty_driver;
- dev_syscons_driver.owner = THIS_MODULE;
- dev_syscons_driver.driver_name = "/dev/console";
- dev_syscons_driver.name = dev_syscons_driver.driver_name + 5;
- dev_syscons_driver.major = TTYAUX_MAJOR;
- dev_syscons_driver.minor_start = 1;
- dev_syscons_driver.type = TTY_DRIVER_TYPE_SYSTEM;
- dev_syscons_driver.subtype = SYSTEM_TYPE_SYSCONS;
+ devfs_register (NULL, "tty", 0, TTYAUX_MAJOR, 0,
+ S_IFCHR | S_IRUGO | S_IWUGO, &tty_fops, NULL);
- if (tty_register_driver(&dev_syscons_driver))
+ if (register_chrdev_region(TTYAUX_MAJOR, 1, 1,
+ "/dev/console", &tty_fops) < 0)
panic("Couldn't register /dev/console driver\n");
+ devfs_register (NULL, "console", 0, TTYAUX_MAJOR, 1,
+ S_IFCHR | S_IRUSR | S_IWUSR, &tty_fops, NULL);
+
#ifdef CONFIG_UNIX98_PTYS
- dev_ptmx_driver = dev_tty_driver;
- dev_ptmx_driver.owner = THIS_MODULE;
- dev_ptmx_driver.driver_name = "/dev/ptmx";
- dev_ptmx_driver.name = dev_ptmx_driver.driver_name + 5;
- dev_ptmx_driver.major= TTYAUX_MAJOR;
- dev_ptmx_driver.minor_start = 2;
- dev_ptmx_driver.type = TTY_DRIVER_TYPE_SYSTEM;
- dev_ptmx_driver.subtype = SYSTEM_TYPE_SYSPTMX;
-
- if (tty_register_driver(&dev_ptmx_driver))
+ if (register_chrdev_region(TTYAUX_MAJOR, 2, 1,
+ "/dev/ptmx", &tty_fops) < 0)
panic("Couldn't register /dev/ptmx driver\n");
+
+ devfs_register (NULL, "ptmx", 0, TTYAUX_MAJOR, 2,
+ S_IFCHR | S_IRUGO | S_IWUGO, &tty_fops, NULL);
#endif
#ifdef CONFIG_VT
- dev_console_driver = dev_tty_driver;
- dev_console_driver.owner = THIS_MODULE;
- dev_console_driver.driver_name = "/dev/vc/0";
- dev_console_driver.name = dev_console_driver.driver_name + 5;
- dev_console_driver.major = TTY_MAJOR;
- dev_console_driver.type = TTY_DRIVER_TYPE_SYSTEM;
- dev_console_driver.subtype = SYSTEM_TYPE_CONSOLE;
-
- if (tty_register_driver(&dev_console_driver))
+ if (register_chrdev_region(TTY_MAJOR, 0, 1,
+ "/dev/vc/0", &tty_fops) < 0)
panic("Couldn't register /dev/tty0 driver\n");
+
+ devfs_register (NULL, "vc/0", 0, TTY_MAJOR, 0,
+ S_IFCHR | S_IRUSR | S_IWUSR, &tty_fops, NULL);
+
vty_init();
#endif
diff --git a/fs/proc/proc_tty.c b/fs/proc/proc_tty.c
index da46c06a8a0f..6ecda65c652e 100644
--- a/fs/proc/proc_tty.c
+++ b/fs/proc/proc_tty.c
@@ -32,6 +32,26 @@ static struct proc_dir_entry *proc_tty_ldisc, *proc_tty_driver;
static int show_tty_driver(struct seq_file *m, void *v)
{
struct tty_driver *p = v;
+
+ if (&p->tty_drivers == tty_drivers.next) {
+ /* pseudo-drivers first */
+ seq_printf(m, "%-20s /dev/%-8s ", "/dev/tty", "tty");
+ seq_printf(m, "%3d %7d ", TTYAUX_MAJOR, 0);
+ seq_printf(m, "system:/dev/tty\n");
+ seq_printf(m, "%-20s /dev/%-8s ", "/dev/console", "console");
+ seq_printf(m, "%3d %7d ", TTYAUX_MAJOR, 1);
+ seq_printf(m, "system:console\n");
+#ifdef CONFIG_UNIX98_PTYS
+ seq_printf(m, "%-20s /dev/%-8s ", "/dev/ptmx", "ptmx");
+ seq_printf(m, "%3d %7d ", TTYAUX_MAJOR, 2);
+ seq_printf(m, "system\n");
+#endif
+#ifdef CONFIG_VT
+ seq_printf(m, "%-20s /dev/%-8s ", "/dev/vc/0", "vc/0");
+ seq_printf(m, "%3d %7d ", TTY_MAJOR, 0);
+ seq_printf(m, "system:vtmaster\n");
+#endif
+ }
seq_printf(m, "%-20s ", p->driver_name ? p->driver_name : "unknown");
seq_printf(m, "/dev/%-8s ", p->name);