Skip to content
Snippets Groups Projects
Commit f97ec30b authored by Detlev Zundel's avatar Detlev Zundel Committed by Wolfgang Denk
Browse files

Re-add support for image type 'Standalone Program'


Support for this type was lost during the bootm refactoring.

Signed-off-by: default avatarDetlev Zundel <dzu@denx.de>
parent ca95c9df
No related branches found
No related tags found
No related merge requests found
...@@ -417,6 +417,24 @@ static int bootm_load_os(image_info_t os, ulong *load_end, int boot_progress) ...@@ -417,6 +417,24 @@ static int bootm_load_os(image_info_t os, ulong *load_end, int boot_progress)
return 0; return 0;
} }
static int bootm_start_standalone(ulong iflag, int argc, char *argv[])
{
char *s;
int (*appl)(int, char *[]);
/* Don't start if "autostart" is set to "no" */
if (((s = getenv("autostart")) != NULL) && (strcmp(s, "no") == 0)) {
char buf[32];
sprintf(buf, "%lX", images.os.image_len);
setenv("filesize", buf);
return 0;
}
appl = (int (*)(int, char *[]))ntohl(images.ep);
(*appl)(argc-1, &argv[1]);
return 0;
}
/* we overload the cmd field with our state machine info instead of a /* we overload the cmd field with our state machine info instead of a
* function pointer */ * function pointer */
cmd_tbl_t cmd_bootm_sub[] = { cmd_tbl_t cmd_bootm_sub[] = {
...@@ -629,6 +647,14 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) ...@@ -629,6 +647,14 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
lmb_reserve(&images.lmb, images.os.load, (load_end - images.os.load)); lmb_reserve(&images.lmb, images.os.load, (load_end - images.os.load));
if (images.os.type == IH_TYPE_STANDALONE) {
if (iflag)
enable_interrupts();
/* This may return when 'autostart' is 'no' */
bootm_start_standalone(iflag, argc, argv);
return 0;
}
show_boot_progress (8); show_boot_progress (8);
#ifdef CONFIG_SILENT_CONSOLE #ifdef CONFIG_SILENT_CONSOLE
...@@ -828,6 +854,13 @@ static void *boot_get_kernel (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[] ...@@ -828,6 +854,13 @@ static void *boot_get_kernel (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]
case IH_TYPE_MULTI: case IH_TYPE_MULTI:
image_multi_getimg (hdr, 0, os_data, os_len); image_multi_getimg (hdr, 0, os_data, os_len);
break; break;
case IH_TYPE_STANDALONE:
if (argc >2) {
hdr->ih_load = htonl(simple_strtoul(argv[2], NULL, 16));
}
*os_data = image_get_data (hdr);
*os_len = image_get_data_size (hdr);
break;
default: default:
printf ("Wrong Image Type for %s command\n", cmdtp->name); printf ("Wrong Image Type for %s command\n", cmdtp->name);
show_boot_progress (-5); show_boot_progress (-5);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment