[PATCH] hvc_console: Separate hvc_console and vio code
authorMilton Miller <miltonm@bga.com>
Fri, 8 Jul 2005 00:56:24 +0000 (17:56 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Fri, 8 Jul 2005 01:23:39 +0000 (18:23 -0700)
Separate the console setup routines of the hvc_console and the vio layer.

Remove the call to find_init_vty from hvc_console.c.

Fail the setup routine if the console doesn't exist, but register the console
again when the specified channel is instantiated.  This scheme maintains the
print buffer semantics while eliminating callout and call back for the console
code.

Signed-off-by: Milton Miller <miltonm@bga.com>
Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/ppc64/kernel/hvconsole.c
drivers/char/hvc_console.c
include/asm-ppc64/hvconsole.h

index c72fb8ffe974a3d42bd6865eeba8fcfacfda6f19..94fb06198ea2d3ca10a278ef6d9ad3f3bead5319 100644 (file)
@@ -93,7 +93,7 @@ EXPORT_SYMBOL(hvc_put_chars);
  * We hope/assume that the first vty found corresponds to the first console
  * device.
  */
-int hvc_find_vtys(void)
+static int hvc_find_vtys(void)
 {
        struct device_node *vty;
        int num_found = 0;
@@ -119,3 +119,4 @@ int hvc_find_vtys(void)
 
        return num_found;
 }
+console_initcall(hvc_find_vtys);
index 7bc65a76dfc44d5c00883be4dcbda6324cf6959c..d59c642f9654c5a189ce62634f1368c859e2702c 100644 (file)
@@ -219,10 +219,23 @@ struct console hvc_con_driver = {
        .index          = -1,
 };
 
-/* Early console initialization.  Preceeds driver initialization. */
+/*
+ * Early console initialization.  Preceeds driver initialization.
+ *
+ * (1) we are first, and the user specified another driver
+ * -- index will remain -1
+ * (2) we are first and the user specified no driver
+ * -- index will be set to 0, then we will fail setup.
+ * (3)  we are first and the user specified our driver
+ * -- index will be set to user specified driver, and we will fail
+ * (4) we are after driver, and this initcall will register us
+ * -- if the user didn't specify a driver then the console will match
+ *
+ * Note that for cases 2 and 3, we will match later when the io driver
+ * calls hvc_instantiate() and call register again.
+ */
 static int __init hvc_console_init(void)
 {
-       hvc_find_vtys();
        register_console(&hvc_con_driver);
        return 0;
 }
@@ -257,6 +270,13 @@ int hvc_instantiate(uint32_t vtermno, int index)
        if (last_hvc < index)
                last_hvc = index;
 
+       /* if this index is what the user requested, then register
+        * now (setup won't fail at this point).  It's ok to just
+        * call register again if previously .setup failed.
+        */
+       if (index == hvc_con_driver.index)
+               register_console(&hvc_con_driver);
+
        return 0;
 }
 
index d89d94c918158095e8e98bfb685ca0e995257072..91c2414ac00b69a4658416949c71deebc5e46326 100644 (file)
@@ -32,9 +32,6 @@
 extern int hvc_get_chars(uint32_t vtermno, char *buf, int count);
 extern int hvc_put_chars(uint32_t vtermno, const char *buf, int count);
 
-/* Early discovery of console adapters. */
-extern int hvc_find_vtys(void);
-
-/* Implemented by a console driver */
+/* Register a vterm and a slot index for use as a console */
 extern int hvc_instantiate(uint32_t vtermno, int index);
 #endif /* _PPC64_HVCONSOLE_H */