diff options
Diffstat (limited to 'arch/mips/dec')
-rw-r--r-- | arch/mips/dec/prom/console.c | 32 | ||||
-rw-r--r-- | arch/mips/dec/prom/init.c | 3 |
2 files changed, 29 insertions, 6 deletions
diff --git a/arch/mips/dec/prom/console.c b/arch/mips/dec/prom/console.c index 65419bf3244..078e1a12421 100644 --- a/arch/mips/dec/prom/console.c +++ b/arch/mips/dec/prom/console.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * | 3 | * |
4 | * DECstation PROM-based early console support. | 4 | * DECstation PROM-based early console support. |
5 | * | 5 | * |
6 | * Copyright (C) 2004 Maciej W. Rozycki | 6 | * Copyright (C) 2004, 2007 Maciej W. Rozycki |
7 | * | 7 | * |
8 | * This program is free software; you can redistribute it and/or | 8 | * This program is free software; you can redistribute it and/or |
9 | * modify it under the terms of the GNU General Public License | 9 | * modify it under the terms of the GNU General Public License |
@@ -13,15 +13,35 @@ | |||
13 | #include <linux/console.h> | 13 | #include <linux/console.h> |
14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
15 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
16 | #include <linux/string.h> | ||
16 | 17 | ||
17 | #include <asm/dec/prom.h> | 18 | #include <asm/dec/prom.h> |
18 | 19 | ||
19 | void prom_putchar(char c) | 20 | static void __init prom_console_write(struct console *con, const char *s, |
21 | unsigned int c) | ||
20 | { | 22 | { |
21 | char s[2]; | 23 | char buf[81]; |
24 | unsigned int chunk = sizeof(buf) - 1; | ||
22 | 25 | ||
23 | s[0] = c; | 26 | while (c > 0) { |
24 | s[1] = '\0'; | 27 | if (chunk > c) |
28 | chunk = c; | ||
29 | memcpy(buf, s, chunk); | ||
30 | buf[chunk] = '\0'; | ||
31 | prom_printf("%s", buf); | ||
32 | s += chunk; | ||
33 | c -= chunk; | ||
34 | } | ||
35 | } | ||
36 | |||
37 | static struct console promcons __initdata = { | ||
38 | .name = "prom", | ||
39 | .write = prom_console_write, | ||
40 | .flags = CON_BOOT | CON_PRINTBUFFER, | ||
41 | .index = -1, | ||
42 | }; | ||
25 | 43 | ||
26 | prom_printf( s); | 44 | void __init register_prom_console(void) |
45 | { | ||
46 | register_console(&promcons); | ||
27 | } | 47 | } |
diff --git a/arch/mips/dec/prom/init.c b/arch/mips/dec/prom/init.c index 4828cac4748..808c182fd3f 100644 --- a/arch/mips/dec/prom/init.c +++ b/arch/mips/dec/prom/init.c | |||
@@ -103,6 +103,9 @@ void __init prom_init(void) | |||
103 | if (prom_is_rex(magic)) | 103 | if (prom_is_rex(magic)) |
104 | rex_clear_cache(); | 104 | rex_clear_cache(); |
105 | 105 | ||
106 | /* Register the early console. */ | ||
107 | register_prom_console(); | ||
108 | |||
106 | /* Were we compiled with the right CPU option? */ | 109 | /* Were we compiled with the right CPU option? */ |
107 | #if defined(CONFIG_CPU_R3000) | 110 | #if defined(CONFIG_CPU_R3000) |
108 | if ((current_cpu_data.cputype == CPU_R4000SC) || | 111 | if ((current_cpu_data.cputype == CPU_R4000SC) || |