linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / drivers / char / vc_screen.c
index a9247b5..3c1dafa 100644 (file)
  *      - making it shorter - scr_readw are macros which expand in PRETTY long code
  */
 
+#include <linux/config.h>
 #include <linux/kernel.h>
 #include <linux/major.h>
 #include <linux/errno.h>
 #include <linux/tty.h>
+#include <linux/devfs_fs_kernel.h>
 #include <linux/sched.h>
 #include <linux/interrupt.h>
 #include <linux/mm.h>
@@ -465,7 +467,7 @@ vcs_open(struct inode *inode, struct file *filp)
        return 0;
 }
 
-static const struct file_operations vcs_fops = {
+static struct file_operations vcs_fops = {
        .llseek         = vcs_lseek,
        .read           = vcs_read,
        .write          = vcs_write,
@@ -476,6 +478,12 @@ static struct class *vc_class;
 
 void vcs_make_devfs(struct tty_struct *tty)
 {
+       devfs_mk_cdev(MKDEV(VCS_MAJOR, tty->index + 1),
+                       S_IFCHR|S_IRUSR|S_IWUSR,
+                       "vcc/%u", tty->index + 1);
+       devfs_mk_cdev(MKDEV(VCS_MAJOR, tty->index + 129),
+                       S_IFCHR|S_IRUSR|S_IWUSR,
+                       "vcc/a%u", tty->index + 1);
        class_device_create(vc_class, NULL, MKDEV(VCS_MAJOR, tty->index + 1),
                        NULL, "vcs%u", tty->index + 1);
        class_device_create(vc_class, NULL, MKDEV(VCS_MAJOR, tty->index + 129),
@@ -483,6 +491,8 @@ void vcs_make_devfs(struct tty_struct *tty)
 }
 void vcs_remove_devfs(struct tty_struct *tty)
 {
+       devfs_remove("vcc/%u", tty->index + 1);
+       devfs_remove("vcc/a%u", tty->index + 1);
        class_device_destroy(vc_class, MKDEV(VCS_MAJOR, tty->index + 1));
        class_device_destroy(vc_class, MKDEV(VCS_MAJOR, tty->index + 129));
 }
@@ -493,6 +503,8 @@ int __init vcs_init(void)
                panic("unable to get major %d for vcs device", VCS_MAJOR);
        vc_class = class_create(THIS_MODULE, "vc");
 
+       devfs_mk_cdev(MKDEV(VCS_MAJOR, 0), S_IFCHR|S_IRUSR|S_IWUSR, "vcc/0");
+       devfs_mk_cdev(MKDEV(VCS_MAJOR, 128), S_IFCHR|S_IRUSR|S_IWUSR, "vcc/a0");
        class_device_create(vc_class, NULL, MKDEV(VCS_MAJOR, 0), NULL, "vcs");
        class_device_create(vc_class, NULL, MKDEV(VCS_MAJOR, 128), NULL, "vcsa");
        return 0;