summaryrefslogtreecommitdiffstats
path: root/drivers/char/hvc_console.c
diff options
context:
space:
mode:
authorMilton Miller <miltonm@bga.com>2005-07-07 17:56:24 -0700
committerLinus Torvalds <torvalds@g5.osdl.org>2005-07-07 18:23:39 -0700
commitd5ee257c3342185ba8ab642d125d192eb99ea8f2 (patch)
treeda6d95fc65a48c36032cdfbb768385f50f7fb5ba /drivers/char/hvc_console.c
parent7805b1b29ffdd252dfef36aa28d7bda70cd586d3 (diff)
[PATCH] hvc_console: Separate hvc_console and vio code
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>
Diffstat (limited to 'drivers/char/hvc_console.c')
-rw-r--r--drivers/char/hvc_console.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/drivers/char/hvc_console.c b/drivers/char/hvc_console.c
index 7bc65a76dfc..d59c642f965 100644
--- a/drivers/char/hvc_console.c
+++ b/drivers/char/hvc_console.c
@@ -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;
}