diff options
author | Paul Mundt <lethal@linux-sh.org> | 2010-01-12 01:31:20 -0500 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2010-01-12 01:31:20 -0500 |
commit | 776258df925acd0563f471ee4b3f19bbffb3c04f (patch) | |
tree | f9cdcd171e91871fe26167e7e11a38547c4002ad /arch | |
parent | b9303a79567d4a45b015dff7e71dd24923332d8d (diff) |
sh: Consolidate the sh_bios earlyprintk code.
Now that the sh-sci earlyprintk is taken care of by the sh-sci driver
directly, there's no longer any reason for having a split-out
early_printk framework. sh_bios is the only other thing that uses it, so
we just migrate the leftovers in to there. As it's possible to have
multiple early_param()'s for the same string, there's not much point in
having this split out anymore anyways, particularly since the sh_bios
dependencies are still special-cased within sh-sci itself.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/sh/include/asm/setup.h | 1 | ||||
-rw-r--r-- | arch/sh/kernel/Makefile | 2 | ||||
-rw-r--r-- | arch/sh/kernel/early_printk.c | 85 | ||||
-rw-r--r-- | arch/sh/kernel/sh_bios.c | 80 |
4 files changed, 79 insertions, 89 deletions
diff --git a/arch/sh/include/asm/setup.h b/arch/sh/include/asm/setup.h index ce3743599b27..4758325bb24a 100644 --- a/arch/sh/include/asm/setup.h +++ b/arch/sh/include/asm/setup.h | |||
@@ -18,7 +18,6 @@ | |||
18 | /* ... */ | 18 | /* ... */ |
19 | #define COMMAND_LINE ((char *) (PARAM+0x100)) | 19 | #define COMMAND_LINE ((char *) (PARAM+0x100)) |
20 | 20 | ||
21 | int setup_early_printk(char *); | ||
22 | void sh_mv_setup(void); | 21 | void sh_mv_setup(void); |
23 | 22 | ||
24 | #endif /* __KERNEL__ */ | 23 | #endif /* __KERNEL__ */ |
diff --git a/arch/sh/kernel/Makefile b/arch/sh/kernel/Makefile index 0d587da1ef12..5bec10c8bd74 100644 --- a/arch/sh/kernel/Makefile +++ b/arch/sh/kernel/Makefile | |||
@@ -22,7 +22,7 @@ obj-y := debugtraps.o dma-nommu.o dumpstack.o \ | |||
22 | obj-y += cpu/ | 22 | obj-y += cpu/ |
23 | obj-$(CONFIG_VSYSCALL) += vsyscall/ | 23 | obj-$(CONFIG_VSYSCALL) += vsyscall/ |
24 | obj-$(CONFIG_SMP) += smp.o | 24 | obj-$(CONFIG_SMP) += smp.o |
25 | obj-$(CONFIG_SH_STANDARD_BIOS) += sh_bios.o early_printk.o | 25 | obj-$(CONFIG_SH_STANDARD_BIOS) += sh_bios.o |
26 | obj-$(CONFIG_KGDB) += kgdb.o | 26 | obj-$(CONFIG_KGDB) += kgdb.o |
27 | obj-$(CONFIG_SH_CPU_FREQ) += cpufreq.o | 27 | obj-$(CONFIG_SH_CPU_FREQ) += cpufreq.o |
28 | obj-$(CONFIG_MODULES) += sh_ksyms_$(BITS).o module.o | 28 | obj-$(CONFIG_MODULES) += sh_ksyms_$(BITS).o module.o |
diff --git a/arch/sh/kernel/early_printk.c b/arch/sh/kernel/early_printk.c deleted file mode 100644 index f8bb50c6e050..000000000000 --- a/arch/sh/kernel/early_printk.c +++ /dev/null | |||
@@ -1,85 +0,0 @@ | |||
1 | /* | ||
2 | * arch/sh/kernel/early_printk.c | ||
3 | * | ||
4 | * Copyright (C) 1999, 2000 Niibe Yutaka | ||
5 | * Copyright (C) 2002 M. R. Brown | ||
6 | * Copyright (C) 2004 - 2007 Paul Mundt | ||
7 | * | ||
8 | * This file is subject to the terms and conditions of the GNU General Public | ||
9 | * License. See the file "COPYING" in the main directory of this archive | ||
10 | * for more details. | ||
11 | */ | ||
12 | #include <linux/console.h> | ||
13 | #include <linux/tty.h> | ||
14 | #include <linux/init.h> | ||
15 | #include <linux/io.h> | ||
16 | #include <linux/delay.h> | ||
17 | |||
18 | #include <asm/sh_bios.h> | ||
19 | |||
20 | /* | ||
21 | * Print a string through the BIOS | ||
22 | */ | ||
23 | static void sh_console_write(struct console *co, const char *s, | ||
24 | unsigned count) | ||
25 | { | ||
26 | sh_bios_console_write(s, count); | ||
27 | } | ||
28 | |||
29 | /* | ||
30 | * Setup initial baud/bits/parity. We do two things here: | ||
31 | * - construct a cflag setting for the first rs_open() | ||
32 | * - initialize the serial port | ||
33 | * Return non-zero if we didn't find a serial port. | ||
34 | */ | ||
35 | static int __init sh_console_setup(struct console *co, char *options) | ||
36 | { | ||
37 | int cflag = CREAD | HUPCL | CLOCAL; | ||
38 | |||
39 | /* | ||
40 | * Now construct a cflag setting. | ||
41 | * TODO: this is a totally bogus cflag, as we have | ||
42 | * no idea what serial settings the BIOS is using, or | ||
43 | * even if its using the serial port at all. | ||
44 | */ | ||
45 | cflag |= B115200 | CS8 | /*no parity*/0; | ||
46 | |||
47 | co->cflag = cflag; | ||
48 | |||
49 | return 0; | ||
50 | } | ||
51 | |||
52 | static struct console bios_console = { | ||
53 | .name = "bios", | ||
54 | .write = sh_console_write, | ||
55 | .setup = sh_console_setup, | ||
56 | .flags = CON_PRINTBUFFER, | ||
57 | .index = -1, | ||
58 | }; | ||
59 | |||
60 | static struct console *early_console; | ||
61 | |||
62 | static int __init setup_early_printk(char *buf) | ||
63 | { | ||
64 | int keep_early = 0; | ||
65 | |||
66 | if (!buf) | ||
67 | return 0; | ||
68 | |||
69 | if (strstr(buf, "keep")) | ||
70 | keep_early = 1; | ||
71 | |||
72 | if (!strncmp(buf, "bios", 4)) | ||
73 | early_console = &bios_console; | ||
74 | |||
75 | if (likely(early_console)) { | ||
76 | if (keep_early) | ||
77 | early_console->flags &= ~CON_BOOT; | ||
78 | else | ||
79 | early_console->flags |= CON_BOOT; | ||
80 | register_console(early_console); | ||
81 | } | ||
82 | |||
83 | return 0; | ||
84 | } | ||
85 | early_param("earlyprintk", setup_early_printk); | ||
diff --git a/arch/sh/kernel/sh_bios.c b/arch/sh/kernel/sh_bios.c index 2a9c6d50d2c0..29cd2526e5c4 100644 --- a/arch/sh/kernel/sh_bios.c +++ b/arch/sh/kernel/sh_bios.c | |||
@@ -1,17 +1,26 @@ | |||
1 | /* | 1 | /* |
2 | * linux/arch/sh/kernel/sh_bios.c | ||
3 | * C interface for trapping into the standard LinuxSH BIOS. | 2 | * C interface for trapping into the standard LinuxSH BIOS. |
4 | * | 3 | * |
5 | * Copyright (C) 2000 Greg Banks, Mitch Davis | 4 | * Copyright (C) 2000 Greg Banks, Mitch Davis |
5 | * Copyright (C) 1999, 2000 Niibe Yutaka | ||
6 | * Copyright (C) 2002 M. R. Brown | ||
7 | * Copyright (C) 2004 - 2010 Paul Mundt | ||
6 | * | 8 | * |
9 | * This file is subject to the terms and conditions of the GNU General Public | ||
10 | * License. See the file "COPYING" in the main directory of this archive | ||
11 | * for more details. | ||
7 | */ | 12 | */ |
8 | #include <linux/module.h> | 13 | #include <linux/module.h> |
14 | #include <linux/console.h> | ||
15 | #include <linux/tty.h> | ||
16 | #include <linux/init.h> | ||
17 | #include <linux/io.h> | ||
18 | #include <linux/delay.h> | ||
9 | #include <asm/sh_bios.h> | 19 | #include <asm/sh_bios.h> |
10 | 20 | ||
11 | #define BIOS_CALL_CONSOLE_WRITE 0 | 21 | #define BIOS_CALL_CONSOLE_WRITE 0 |
12 | #define BIOS_CALL_ETH_NODE_ADDR 10 | 22 | #define BIOS_CALL_ETH_NODE_ADDR 10 |
13 | #define BIOS_CALL_SHUTDOWN 11 | 23 | #define BIOS_CALL_SHUTDOWN 11 |
14 | #define BIOS_CALL_CHAR_OUT 0x1f /* TODO: hack */ | ||
15 | #define BIOS_CALL_GDB_DETACH 0xff | 24 | #define BIOS_CALL_GDB_DETACH 0xff |
16 | 25 | ||
17 | static inline long sh_bios_call(long func, long arg0, long arg1, long arg2, | 26 | static inline long sh_bios_call(long func, long arg0, long arg1, long arg2, |
@@ -87,3 +96,70 @@ void sh_bios_vbr_reload(void) | |||
87 | : "memory" | 96 | : "memory" |
88 | ); | 97 | ); |
89 | } | 98 | } |
99 | |||
100 | /* | ||
101 | * Print a string through the BIOS | ||
102 | */ | ||
103 | static void sh_console_write(struct console *co, const char *s, | ||
104 | unsigned count) | ||
105 | { | ||
106 | sh_bios_console_write(s, count); | ||
107 | } | ||
108 | |||
109 | /* | ||
110 | * Setup initial baud/bits/parity. We do two things here: | ||
111 | * - construct a cflag setting for the first rs_open() | ||
112 | * - initialize the serial port | ||
113 | * Return non-zero if we didn't find a serial port. | ||
114 | */ | ||
115 | static int __init sh_console_setup(struct console *co, char *options) | ||
116 | { | ||
117 | int cflag = CREAD | HUPCL | CLOCAL; | ||
118 | |||
119 | /* | ||
120 | * Now construct a cflag setting. | ||
121 | * TODO: this is a totally bogus cflag, as we have | ||
122 | * no idea what serial settings the BIOS is using, or | ||
123 | * even if its using the serial port at all. | ||
124 | */ | ||
125 | cflag |= B115200 | CS8 | /*no parity*/0; | ||
126 | |||
127 | co->cflag = cflag; | ||
128 | |||
129 | return 0; | ||
130 | } | ||
131 | |||
132 | static struct console bios_console = { | ||
133 | .name = "bios", | ||
134 | .write = sh_console_write, | ||
135 | .setup = sh_console_setup, | ||
136 | .flags = CON_PRINTBUFFER, | ||
137 | .index = -1, | ||
138 | }; | ||
139 | |||
140 | static struct console *early_console; | ||
141 | |||
142 | static int __init setup_early_printk(char *buf) | ||
143 | { | ||
144 | int keep_early = 0; | ||
145 | |||
146 | if (!buf) | ||
147 | return 0; | ||
148 | |||
149 | if (strstr(buf, "keep")) | ||
150 | keep_early = 1; | ||
151 | |||
152 | if (!strncmp(buf, "bios", 4)) | ||
153 | early_console = &bios_console; | ||
154 | |||
155 | if (likely(early_console)) { | ||
156 | if (keep_early) | ||
157 | early_console->flags &= ~CON_BOOT; | ||
158 | else | ||
159 | early_console->flags |= CON_BOOT; | ||
160 | register_console(early_console); | ||
161 | } | ||
162 | |||
163 | return 0; | ||
164 | } | ||
165 | early_param("earlyprintk", setup_early_printk); | ||