|
@@ -3,7 +3,7 @@
|
|
|
*
|
|
|
* DECstation PROM-based early console support.
|
|
|
*
|
|
|
- * Copyright (C) 2004 Maciej W. Rozycki
|
|
|
+ * Copyright (C) 2004, 2007 Maciej W. Rozycki
|
|
|
*
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
* modify it under the terms of the GNU General Public License
|
|
@@ -13,15 +13,35 @@
|
|
|
#include <linux/console.h>
|
|
|
#include <linux/init.h>
|
|
|
#include <linux/kernel.h>
|
|
|
+#include <linux/string.h>
|
|
|
|
|
|
#include <asm/dec/prom.h>
|
|
|
|
|
|
-void prom_putchar(char c)
|
|
|
+static void __init prom_console_write(struct console *con, const char *s,
|
|
|
+ unsigned int c)
|
|
|
{
|
|
|
- char s[2];
|
|
|
+ char buf[81];
|
|
|
+ unsigned int chunk = sizeof(buf) - 1;
|
|
|
|
|
|
- s[0] = c;
|
|
|
- s[1] = '\0';
|
|
|
+ while (c > 0) {
|
|
|
+ if (chunk > c)
|
|
|
+ chunk = c;
|
|
|
+ memcpy(buf, s, chunk);
|
|
|
+ buf[chunk] = '\0';
|
|
|
+ prom_printf("%s", buf);
|
|
|
+ s += chunk;
|
|
|
+ c -= chunk;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static struct console promcons __initdata = {
|
|
|
+ .name = "prom",
|
|
|
+ .write = prom_console_write,
|
|
|
+ .flags = CON_BOOT | CON_PRINTBUFFER,
|
|
|
+ .index = -1,
|
|
|
+};
|
|
|
|
|
|
- prom_printf( s);
|
|
|
+void __init register_prom_console(void)
|
|
|
+{
|
|
|
+ register_console(&promcons);
|
|
|
}
|