vserver 1.9.3
[linux-2.6.git] / arch / um / drivers / stdio_console.c
index 3ae795e..54e6a57 100644 (file)
@@ -17,8 +17,8 @@
 #include "linux/init.h"
 #include "linux/interrupt.h"
 #include "linux/slab.h"
+#include "linux/hardirq.h"
 #include "asm/current.h"
-#include "asm/hardirq.h"
 #include "asm/irq.h"
 #include "stdio_console.h"
 #include "line.h"
@@ -83,7 +83,8 @@ static int con_remove(char *str);
 
 static struct line_driver driver = {
        .name                   = "UML console",
-       .devfs_name             = "vc/%d",
+       .device_name            = "tty",
+       .devfs_name             = "vc/",
        .major                  = TTY_MAJOR,
        .minor_start            = 0,
        .type                   = TTY_DRIVER_TYPE_CONSOLE,
@@ -159,6 +160,15 @@ static int chars_in_buffer(struct tty_struct *tty)
 
 static int con_init_done = 0;
 
+static struct tty_operations console_ops = {
+       .open                   = con_open,
+       .close                  = con_close,
+       .write                  = con_write,
+       .chars_in_buffer        = chars_in_buffer,
+       .set_termios            = set_termios,
+       .write_room             = line_write_room,
+};
+
 int stdio_init(void)
 {
        char *new_title;
@@ -166,7 +176,8 @@ int stdio_init(void)
        printk(KERN_INFO "Initializing stdio console driver\n");
 
        console_driver = line_register_devfs(&console_lines, &driver,
-                               &console_ops, vts, sizeof(vts)/sizeof(vts[0]));
+                                            &console_ops, vts,
+                                            sizeof(vts)/sizeof(vts[0]));
 
        lines_init(vts, sizeof(vts)/sizeof(vts[0]));
 
@@ -178,52 +189,53 @@ int stdio_init(void)
        return(0);
 }
 
-__initcall(stdio_init);
+late_initcall(stdio_init);
 
-static void console_write(struct console *console, const char *string, 
+static void uml_console_write(struct console *console, const char *string,
                          unsigned len)
 {
-       if(con_init_done) down(&vts[console->index].sem);
-       console_write_chan(&vts[console->index].chan_list, string, len);
-       if(con_init_done) up(&vts[console->index].sem);
-}
+       struct line *line = &vts[console->index];
 
-static struct tty_operations console_ops = {
-       .open                   = con_open,
-       .close                  = con_close,
-       .write                  = con_write,
-       .chars_in_buffer        = chars_in_buffer,
-       .set_termios            = set_termios,
-       .write_room             = line_write_room,
-};
+       if(con_init_done)
+               down(&line->sem);
+       console_write_chan(&line->chan_list, string, len);
+       if(con_init_done)
+               up(&line->sem);
+}
 
-static struct tty_driver *console_device(struct console *c, int *index)
+static struct tty_driver *uml_console_device(struct console *c, int *index)
 {
        *index = c->index;
        return console_driver;
 }
 
-static int console_setup(struct console *co, char *options)
+static int uml_console_setup(struct console *co, char *options)
 {
        return(0);
 }
 
-static struct console stdiocons = INIT_CONSOLE("tty", console_write, 
-                                              console_device, console_setup,
-                                              CON_PRINTBUFFER);
+static struct console stdiocons = {
+       name:           "tty",
+       write:          uml_console_write,
+       device:         uml_console_device,
+       setup:          uml_console_setup,
+       flags:          CON_PRINTBUFFER,
+       index:          -1,
+};
 
-static void __init stdio_console_init(void)
+static int __init stdio_console_init(void)
 {
        INIT_LIST_HEAD(&vts[0].chan_list);
        list_add(&init_console_chan.list, &vts[0].chan_list);
        register_console(&stdiocons);
+       return(0);
 }
+
 console_initcall(stdio_console_init);
 
 static int console_chan_setup(char *str)
 {
-       line_setup(vts, sizeof(vts)/sizeof(vts[0]), str, 1);
-       return(1);
+       return(line_setup(vts, sizeof(vts)/sizeof(vts[0]), str, 1));
 }
 
 __setup("con", console_chan_setup);