*
  *     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
 #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);
 }
 
        if (prom_is_rex(magic))
                rex_clear_cache();
 
+       /* Register the early console.  */
+       register_prom_console();
+
        /* Were we compiled with the right CPU option? */
 #if defined(CONFIG_CPU_R3000)
        if ((current_cpu_data.cputype == CPU_R4000SC) ||