|
@@ -33,22 +33,23 @@ DECLARE_GLOBAL_DATA_PTR;
|
|
#define LINUX_MAX_ENVS 256
|
|
#define LINUX_MAX_ENVS 256
|
|
#define LINUX_MAX_ARGS 256
|
|
#define LINUX_MAX_ARGS 256
|
|
|
|
|
|
-static int linux_argc;
|
|
|
|
-static char ** linux_argv;
|
|
|
|
|
|
+static int linux_argc;
|
|
|
|
+static char **linux_argv;
|
|
|
|
|
|
-static char ** linux_env;
|
|
|
|
-static char * linux_env_p;
|
|
|
|
-static int linux_env_idx;
|
|
|
|
|
|
+static char **linux_env;
|
|
|
|
+static char *linux_env_p;
|
|
|
|
+static int linux_env_idx;
|
|
|
|
|
|
-static void linux_params_init (ulong start, char * commandline);
|
|
|
|
-static void linux_env_set (char * env_name, char * env_val);
|
|
|
|
|
|
+static void linux_params_init(ulong start, char *commandline);
|
|
|
|
+static void linux_env_set(char *env_name, char *env_val);
|
|
|
|
|
|
-int do_bootm_linux(int flag, int argc, char * const argv[], bootm_headers_t *images)
|
|
|
|
|
|
+int do_bootm_linux(int flag, int argc, char * const argv[],
|
|
|
|
+ bootm_headers_t *images)
|
|
{
|
|
{
|
|
- void (*theKernel) (int, char **, char **, int *);
|
|
|
|
- char *commandline = getenv ("bootargs");
|
|
|
|
- char env_buf[12];
|
|
|
|
- char *cp;
|
|
|
|
|
|
+ void (*theKernel) (int, char **, char **, int *);
|
|
|
|
+ char *commandline = getenv("bootargs");
|
|
|
|
+ char env_buf[12];
|
|
|
|
+ char *cp;
|
|
|
|
|
|
if ((flag != 0) && (flag != BOOTM_STATE_OS_GO))
|
|
if ((flag != 0) && (flag != BOOTM_STATE_OS_GO))
|
|
return 1;
|
|
return 1;
|
|
@@ -59,53 +60,53 @@ int do_bootm_linux(int flag, int argc, char * const argv[], bootm_headers_t *ima
|
|
bootstage_mark(BOOTSTAGE_ID_RUN_OS);
|
|
bootstage_mark(BOOTSTAGE_ID_RUN_OS);
|
|
|
|
|
|
#ifdef DEBUG
|
|
#ifdef DEBUG
|
|
- printf ("## Transferring control to Linux (at address %08lx) ...\n",
|
|
|
|
|
|
+ printf("## Transferring control to Linux (at address %08lx) ...\n",
|
|
(ulong) theKernel);
|
|
(ulong) theKernel);
|
|
#endif
|
|
#endif
|
|
|
|
|
|
- linux_params_init (UNCACHED_SDRAM (gd->bd->bi_boot_params), commandline);
|
|
|
|
|
|
+ linux_params_init(UNCACHED_SDRAM(gd->bd->bi_boot_params), commandline);
|
|
|
|
|
|
#ifdef CONFIG_MEMSIZE_IN_BYTES
|
|
#ifdef CONFIG_MEMSIZE_IN_BYTES
|
|
- sprintf (env_buf, "%lu", (ulong)gd->ram_size);
|
|
|
|
- debug ("## Giving linux memsize in bytes, %lu\n", (ulong)gd->ram_size);
|
|
|
|
|
|
+ sprintf(env_buf, "%lu", (ulong)gd->ram_size);
|
|
|
|
+ debug("## Giving linux memsize in bytes, %lu\n", (ulong)gd->ram_size);
|
|
#else
|
|
#else
|
|
- sprintf (env_buf, "%lu", (ulong)(gd->ram_size >> 20));
|
|
|
|
- debug ("## Giving linux memsize in MB, %lu\n", (ulong)(gd->ram_size >> 20));
|
|
|
|
|
|
+ sprintf(env_buf, "%lu", (ulong)(gd->ram_size >> 20));
|
|
|
|
+ debug("## Giving linux memsize in MB, %lu\n",
|
|
|
|
+ (ulong)(gd->ram_size >> 20));
|
|
#endif /* CONFIG_MEMSIZE_IN_BYTES */
|
|
#endif /* CONFIG_MEMSIZE_IN_BYTES */
|
|
|
|
|
|
- linux_env_set ("memsize", env_buf);
|
|
|
|
|
|
+ linux_env_set("memsize", env_buf);
|
|
|
|
|
|
- sprintf (env_buf, "0x%08X", (uint) UNCACHED_SDRAM (images->rd_start));
|
|
|
|
- linux_env_set ("initrd_start", env_buf);
|
|
|
|
|
|
+ sprintf(env_buf, "0x%08X", (uint) UNCACHED_SDRAM(images->rd_start));
|
|
|
|
+ linux_env_set("initrd_start", env_buf);
|
|
|
|
|
|
- sprintf (env_buf, "0x%X", (uint) (images->rd_end - images->rd_start));
|
|
|
|
- linux_env_set ("initrd_size", env_buf);
|
|
|
|
|
|
+ sprintf(env_buf, "0x%X", (uint) (images->rd_end - images->rd_start));
|
|
|
|
+ linux_env_set("initrd_size", env_buf);
|
|
|
|
|
|
- sprintf (env_buf, "0x%08X", (uint) (gd->bd->bi_flashstart));
|
|
|
|
- linux_env_set ("flash_start", env_buf);
|
|
|
|
|
|
+ sprintf(env_buf, "0x%08X", (uint) (gd->bd->bi_flashstart));
|
|
|
|
+ linux_env_set("flash_start", env_buf);
|
|
|
|
|
|
- sprintf (env_buf, "0x%X", (uint) (gd->bd->bi_flashsize));
|
|
|
|
- linux_env_set ("flash_size", env_buf);
|
|
|
|
|
|
+ sprintf(env_buf, "0x%X", (uint) (gd->bd->bi_flashsize));
|
|
|
|
+ linux_env_set("flash_size", env_buf);
|
|
|
|
|
|
cp = getenv("ethaddr");
|
|
cp = getenv("ethaddr");
|
|
- if (cp != NULL) {
|
|
|
|
|
|
+ if (cp)
|
|
linux_env_set("ethaddr", cp);
|
|
linux_env_set("ethaddr", cp);
|
|
- }
|
|
|
|
|
|
|
|
cp = getenv("eth1addr");
|
|
cp = getenv("eth1addr");
|
|
- if (cp != NULL) {
|
|
|
|
|
|
+ if (cp)
|
|
linux_env_set("eth1addr", cp);
|
|
linux_env_set("eth1addr", cp);
|
|
- }
|
|
|
|
|
|
|
|
/* we assume that the kernel is in place */
|
|
/* we assume that the kernel is in place */
|
|
- printf ("\nStarting kernel ...\n\n");
|
|
|
|
|
|
+ printf("\nStarting kernel ...\n\n");
|
|
|
|
+
|
|
|
|
+ theKernel(linux_argc, linux_argv, linux_env, 0);
|
|
|
|
|
|
- theKernel (linux_argc, linux_argv, linux_env, 0);
|
|
|
|
/* does not return */
|
|
/* does not return */
|
|
return 1;
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
|
|
-static void linux_params_init (ulong start, char *line)
|
|
|
|
|
|
+static void linux_params_init(ulong start, char *line)
|
|
{
|
|
{
|
|
char *next, *quote, *argp;
|
|
char *next, *quote, *argp;
|
|
|
|
|
|
@@ -117,26 +118,25 @@ static void linux_params_init (ulong start, char *line)
|
|
next = line;
|
|
next = line;
|
|
|
|
|
|
while (line && *line && linux_argc < LINUX_MAX_ARGS) {
|
|
while (line && *line && linux_argc < LINUX_MAX_ARGS) {
|
|
- quote = strchr (line, '"');
|
|
|
|
- next = strchr (line, ' ');
|
|
|
|
|
|
+ quote = strchr(line, '"');
|
|
|
|
+ next = strchr(line, ' ');
|
|
|
|
|
|
- while (next != NULL && quote != NULL && quote < next) {
|
|
|
|
|
|
+ while (next && quote && quote < next) {
|
|
/* we found a left quote before the next blank
|
|
/* we found a left quote before the next blank
|
|
* now we have to find the matching right quote
|
|
* now we have to find the matching right quote
|
|
*/
|
|
*/
|
|
- next = strchr (quote + 1, '"');
|
|
|
|
- if (next != NULL) {
|
|
|
|
- quote = strchr (next + 1, '"');
|
|
|
|
- next = strchr (next + 1, ' ');
|
|
|
|
|
|
+ next = strchr(quote + 1, '"');
|
|
|
|
+ if (next) {
|
|
|
|
+ quote = strchr(next + 1, '"');
|
|
|
|
+ next = strchr(next + 1, ' ');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- if (next == NULL) {
|
|
|
|
- next = line + strlen (line);
|
|
|
|
- }
|
|
|
|
|
|
+ if (!next)
|
|
|
|
+ next = line + strlen(line);
|
|
|
|
|
|
linux_argv[linux_argc] = argp;
|
|
linux_argv[linux_argc] = argp;
|
|
- memcpy (argp, line, next - line);
|
|
|
|
|
|
+ memcpy(argp, line, next - line);
|
|
argp[next - line] = 0;
|
|
argp[next - line] = 0;
|
|
|
|
|
|
argp += next - line + 1;
|
|
argp += next - line + 1;
|
|
@@ -154,19 +154,19 @@ static void linux_params_init (ulong start, char *line)
|
|
linux_env_idx = 0;
|
|
linux_env_idx = 0;
|
|
}
|
|
}
|
|
|
|
|
|
-static void linux_env_set (char *env_name, char *env_val)
|
|
|
|
|
|
+static void linux_env_set(char *env_name, char *env_val)
|
|
{
|
|
{
|
|
if (linux_env_idx < LINUX_MAX_ENVS - 1) {
|
|
if (linux_env_idx < LINUX_MAX_ENVS - 1) {
|
|
linux_env[linux_env_idx] = linux_env_p;
|
|
linux_env[linux_env_idx] = linux_env_p;
|
|
|
|
|
|
- strcpy (linux_env_p, env_name);
|
|
|
|
- linux_env_p += strlen (env_name);
|
|
|
|
|
|
+ strcpy(linux_env_p, env_name);
|
|
|
|
+ linux_env_p += strlen(env_name);
|
|
|
|
|
|
- strcpy (linux_env_p, "=");
|
|
|
|
|
|
+ strcpy(linux_env_p, "=");
|
|
linux_env_p += 1;
|
|
linux_env_p += 1;
|
|
|
|
|
|
- strcpy (linux_env_p, env_val);
|
|
|
|
- linux_env_p += strlen (env_val);
|
|
|
|
|
|
+ strcpy(linux_env_p, env_val);
|
|
|
|
+ linux_env_p += strlen(env_val);
|
|
|
|
|
|
linux_env_p++;
|
|
linux_env_p++;
|
|
linux_env[++linux_env_idx] = 0;
|
|
linux_env[++linux_env_idx] = 0;
|