diff options
Diffstat (limited to 'arch/mips/ar7/prom.c')
-rw-r--r-- | arch/mips/ar7/prom.c | 78 |
1 files changed, 32 insertions, 46 deletions
diff --git a/arch/mips/ar7/prom.c b/arch/mips/ar7/prom.c index c1fdd3682812..52385790e5c1 100644 --- a/arch/mips/ar7/prom.c +++ b/arch/mips/ar7/prom.c | |||
@@ -32,8 +32,8 @@ | |||
32 | #define MAX_ENTRY 80 | 32 | #define MAX_ENTRY 80 |
33 | 33 | ||
34 | struct env_var { | 34 | struct env_var { |
35 | char *name; | 35 | char *name; |
36 | char *value; | 36 | char *value; |
37 | }; | 37 | }; |
38 | 38 | ||
39 | static struct env_var adam2_env[MAX_ENTRY]; | 39 | static struct env_var adam2_env[MAX_ENTRY]; |
@@ -41,6 +41,7 @@ static struct env_var adam2_env[MAX_ENTRY]; | |||
41 | char *prom_getenv(const char *name) | 41 | char *prom_getenv(const char *name) |
42 | { | 42 | { |
43 | int i; | 43 | int i; |
44 | |||
44 | for (i = 0; (i < MAX_ENTRY) && adam2_env[i].name; i++) | 45 | for (i = 0; (i < MAX_ENTRY) && adam2_env[i].name; i++) |
45 | if (!strcmp(name, adam2_env[i].name)) | 46 | if (!strcmp(name, adam2_env[i].name)) |
46 | return adam2_env[i].value; | 47 | return adam2_env[i].value; |
@@ -49,65 +50,50 @@ char *prom_getenv(const char *name) | |||
49 | } | 50 | } |
50 | EXPORT_SYMBOL(prom_getenv); | 51 | EXPORT_SYMBOL(prom_getenv); |
51 | 52 | ||
52 | char * __init prom_getcmdline(void) | ||
53 | { | ||
54 | return &(arcs_cmdline[0]); | ||
55 | } | ||
56 | |||
57 | static void __init ar7_init_cmdline(int argc, char *argv[]) | 53 | static void __init ar7_init_cmdline(int argc, char *argv[]) |
58 | { | 54 | { |
59 | char *cp; | 55 | int i; |
60 | int actr; | ||
61 | |||
62 | actr = 1; /* Always ignore argv[0] */ | ||
63 | 56 | ||
64 | cp = &(arcs_cmdline[0]); | 57 | for (i = 1; i < argc; i++) { |
65 | while (actr < argc) { | 58 | strlcat(arcs_cmdline, argv[i], COMMAND_LINE_SIZE); |
66 | strcpy(cp, argv[actr]); | 59 | if (i < (argc - 1)) |
67 | cp += strlen(argv[actr]); | 60 | strlcat(arcs_cmdline, " ", COMMAND_LINE_SIZE); |
68 | *cp++ = ' '; | ||
69 | actr++; | ||
70 | } | ||
71 | if (cp != &(arcs_cmdline[0])) { | ||
72 | /* get rid of trailing space */ | ||
73 | --cp; | ||
74 | *cp = '\0'; | ||
75 | } | 61 | } |
76 | } | 62 | } |
77 | 63 | ||
78 | struct psbl_rec { | 64 | struct psbl_rec { |
79 | u32 psbl_size; | 65 | u32 psbl_size; |
80 | u32 env_base; | 66 | u32 env_base; |
81 | u32 env_size; | 67 | u32 env_size; |
82 | u32 ffs_base; | 68 | u32 ffs_base; |
83 | u32 ffs_size; | 69 | u32 ffs_size; |
84 | }; | 70 | }; |
85 | 71 | ||
86 | static __initdata char psp_env_version[] = "TIENV0.8"; | 72 | static __initdata char psp_env_version[] = "TIENV0.8"; |
87 | 73 | ||
88 | struct psp_env_chunk { | 74 | struct psp_env_chunk { |
89 | u8 num; | 75 | u8 num; |
90 | u8 ctrl; | 76 | u8 ctrl; |
91 | u16 csum; | 77 | u16 csum; |
92 | u8 len; | 78 | u8 len; |
93 | char data[11]; | 79 | char data[11]; |
94 | } __attribute__ ((packed)); | 80 | } __attribute__ ((packed)); |
95 | 81 | ||
96 | struct psp_var_map_entry { | 82 | struct psp_var_map_entry { |
97 | u8 num; | 83 | u8 num; |
98 | char *value; | 84 | char *value; |
99 | }; | 85 | }; |
100 | 86 | ||
101 | static struct psp_var_map_entry psp_var_map[] = { | 87 | static struct psp_var_map_entry psp_var_map[] = { |
102 | { 1, "cpufrequency" }, | 88 | { 1, "cpufrequency" }, |
103 | { 2, "memsize" }, | 89 | { 2, "memsize" }, |
104 | { 3, "flashsize" }, | 90 | { 3, "flashsize" }, |
105 | { 4, "modetty0" }, | 91 | { 4, "modetty0" }, |
106 | { 5, "modetty1" }, | 92 | { 5, "modetty1" }, |
107 | { 8, "maca" }, | 93 | { 8, "maca" }, |
108 | { 9, "macb" }, | 94 | { 9, "macb" }, |
109 | { 28, "sysfrequency" }, | 95 | { 28, "sysfrequency" }, |
110 | { 38, "mipsfrequency" }, | 96 | { 38, "mipsfrequency" }, |
111 | }; | 97 | }; |
112 | 98 | ||
113 | /* | 99 | /* |
@@ -154,6 +140,7 @@ static char * __init lookup_psp_var_map(u8 num) | |||
154 | static void __init add_adam2_var(char *name, char *value) | 140 | static void __init add_adam2_var(char *name, char *value) |
155 | { | 141 | { |
156 | int i; | 142 | int i; |
143 | |||
157 | for (i = 0; i < MAX_ENTRY; i++) { | 144 | for (i = 0; i < MAX_ENTRY; i++) { |
158 | if (!adam2_env[i].name) { | 145 | if (!adam2_env[i].name) { |
159 | adam2_env[i].name = name; | 146 | adam2_env[i].name = name; |
@@ -216,7 +203,7 @@ static void __init console_config(void) | |||
216 | char parity = '\0', bits = '\0', flow = '\0'; | 203 | char parity = '\0', bits = '\0', flow = '\0'; |
217 | char *s, *p; | 204 | char *s, *p; |
218 | 205 | ||
219 | if (strstr(prom_getcmdline(), "console=")) | 206 | if (strstr(arcs_cmdline, "console=")) |
220 | return; | 207 | return; |
221 | 208 | ||
222 | s = prom_getenv("modetty0"); | 209 | s = prom_getenv("modetty0"); |
@@ -250,7 +237,7 @@ static void __init console_config(void) | |||
250 | else | 237 | else |
251 | sprintf(console_string, " console=ttyS0,%d%c%c", baud, parity, | 238 | sprintf(console_string, " console=ttyS0,%d%c%c", baud, parity, |
252 | bits); | 239 | bits); |
253 | strcat(prom_getcmdline(), console_string); | 240 | strlcat(arcs_cmdline, console_string, COMMAND_LINE_SIZE); |
254 | #endif | 241 | #endif |
255 | } | 242 | } |
256 | 243 | ||
@@ -279,4 +266,3 @@ int prom_putchar(char c) | |||
279 | serial_out(UART_TX, c); | 266 | serial_out(UART_TX, c); |
280 | return 1; | 267 | return 1; |
281 | } | 268 | } |
282 | |||