diff options
author | Kumar Gala <galak@kernel.crashing.org> | 2008-08-15 08:24:45 -0500 |
---|---|---|
committer | Wolfgang Denk <wd@denx.de> | 2008-08-26 23:48:01 +0200 |
commit | 40d7e99d374ba0a0a29cd1a8ba40d3b7c2c175c7 (patch) | |
tree | aedac5a8fffc541a91f1948428c242291f9c7053 /common | |
parent | 40afac22a9c602e55c501c800f1c064324711b56 (diff) | |
download | bootable_bootloader_goldelico_gta04-40d7e99d374ba0a0a29cd1a8ba40d3b7c2c175c7.zip bootable_bootloader_goldelico_gta04-40d7e99d374ba0a0a29cd1a8ba40d3b7c2c175c7.tar.gz bootable_bootloader_goldelico_gta04-40d7e99d374ba0a0a29cd1a8ba40d3b7c2c175c7.tar.bz2 |
bootm: refactor do_reset and os boot function args
There is no need for each OS specific function to call do_reset() we
can just do it once in bootm. This means its feasible on an error for
the OS boot function to return.
Also, remove passing in cmd_tbl_t as its not needed by the OS boot
functions. flag isn't currently used but might be in the future so
we left it alone.
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Diffstat (limited to 'common')
-rw-r--r-- | common/cmd_bootm.c | 67 |
1 files changed, 35 insertions, 32 deletions
diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c index 5f7458b..0db7b75 100644 --- a/common/cmd_bootm.c +++ b/common/cmd_bootm.c @@ -92,8 +92,7 @@ extern int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]); * - loaded (first part of) image to header load address, * - disabled interrupts. */ -typedef void boot_os_fn (cmd_tbl_t *cmdtp, int flag, - int argc, char *argv[], +typedef int boot_os_fn (int flag, int argc, char *argv[], bootm_headers_t *images); /* pointers to os/initrd/fdt */ extern boot_os_fn do_bootm_linux; @@ -428,36 +427,36 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) #ifdef CONFIG_SILENT_CONSOLE fixup_silent_linux(); #endif - do_bootm_linux (cmdtp, flag, argc, argv, &images); + do_bootm_linux (0, argc, argv, &images); break; case IH_OS_NETBSD: - do_bootm_netbsd (cmdtp, flag, argc, argv, &images); + do_bootm_netbsd (0, argc, argv, &images); break; #ifdef CONFIG_LYNXKDI case IH_OS_LYNXOS: - do_bootm_lynxkdi (cmdtp, flag, argc, argv, &images); + do_bootm_lynxkdi (0, argc, argv, &images); break; #endif case IH_OS_RTEMS: - do_bootm_rtems (cmdtp, flag, argc, argv, &images); + do_bootm_rtems (0, argc, argv, &images); break; #if defined(CONFIG_CMD_ELF) case IH_OS_VXWORKS: - do_bootm_vxworks (cmdtp, flag, argc, argv, &images); + do_bootm_vxworks (0, argc, argv, &images); break; case IH_OS_QNX: - do_bootm_qnxelf (cmdtp, flag, argc, argv, &images); + do_bootm_qnxelf (0, argc, argv, &images); break; #endif #ifdef CONFIG_ARTOS case IH_OS_ARTOS: - do_bootm_artos (cmdtp, flag, argc, argv, &images); + do_bootm_artos (0, argc, argv, &images); break; #endif } @@ -465,10 +464,8 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) show_boot_progress (-9); #ifdef DEBUG puts ("\n## Control returned to monitor - resetting...\n"); - do_reset (cmdtp, flag, argc, argv); #endif - if (iflag) - enable_interrupts(); + do_reset (cmdtp, flag, argc, argv); return 1; } @@ -983,8 +980,7 @@ static void fixup_silent_linux () /* OS booting routines */ /*******************************************************************/ -static void do_bootm_netbsd (cmd_tbl_t *cmdtp, int flag, - int argc, char *argv[], +static int do_bootm_netbsd (int flag, int argc, char *argv[], bootm_headers_t *images) { void (*loader)(bd_t *, image_header_t *, char *, char *); @@ -996,7 +992,7 @@ static void do_bootm_netbsd (cmd_tbl_t *cmdtp, int flag, #if defined(CONFIG_FIT) if (!images->legacy_hdr_valid) { fit_unsupported_reset ("NetBSD"); - do_reset (cmdtp, flag, argc, argv); + return 1; } #endif hdr = images->legacy_hdr_os; @@ -1063,11 +1059,12 @@ static void do_bootm_netbsd (cmd_tbl_t *cmdtp, int flag, * r6: boot args string */ (*loader) (gd->bd, os_hdr, consdev, cmdline); + + return 1; } #ifdef CONFIG_LYNXKDI -static void do_bootm_lynxkdi (cmd_tbl_t *cmdtp, int flag, - int argc, char *argv[], +static int do_bootm_lynxkdi (int flag, int argc, char *argv[], bootm_headers_t *images) { image_header_t *hdr = &images->legacy_hdr_os_copy; @@ -1075,16 +1072,17 @@ static void do_bootm_lynxkdi (cmd_tbl_t *cmdtp, int flag, #if defined(CONFIG_FIT) if (!images->legacy_hdr_valid) { fit_unsupported_reset ("Lynx"); - do_reset (cmdtp, flag, argc, argv); + return 1; } #endif lynxkdi_boot ((image_header_t *)hdr); + + return 1; } #endif /* CONFIG_LYNXKDI */ -static void do_bootm_rtems (cmd_tbl_t *cmdtp, int flag, - int argc, char *argv[], +static int do_bootm_rtems (int flag, int argc, char *argv[], bootm_headers_t *images) { void (*entry_point)(bd_t *); @@ -1092,7 +1090,7 @@ static void do_bootm_rtems (cmd_tbl_t *cmdtp, int flag, #if defined(CONFIG_FIT) if (!images->legacy_hdr_valid) { fit_unsupported_reset ("RTEMS"); - do_reset (cmdtp, flag, argc, argv); + return 1; } #endif @@ -1108,11 +1106,12 @@ static void do_bootm_rtems (cmd_tbl_t *cmdtp, int flag, * r3: ptr to board info data */ (*entry_point)(gd->bd); + + return 1; } #if defined(CONFIG_CMD_ELF) -static void do_bootm_vxworks (cmd_tbl_t *cmdtp, int flag, - int argc, char *argv[], +static int do_bootm_vxworks (int flag, int argc, char *argv[], bootm_headers_t *images) { char str[80]; @@ -1120,17 +1119,18 @@ static void do_bootm_vxworks (cmd_tbl_t *cmdtp, int flag, #if defined(CONFIG_FIT) if (!images->legacy_hdr_valid) { fit_unsupported_reset ("VxWorks"); - do_reset (cmdtp, flag, argc, argv); + return 1; } #endif sprintf(str, "%lx", images->ep); /* write entry-point into string */ setenv("loadaddr", str); - do_bootvx(cmdtp, 0, 0, NULL); + do_bootvx(NULL, 0, 0, NULL); + + return 1; } -static void do_bootm_qnxelf(cmd_tbl_t *cmdtp, int flag, - int argc, char *argv[], +static int do_bootm_qnxelf(int flag, int argc, char *argv[], bootm_headers_t *images) { char *local_args[2]; @@ -1139,20 +1139,21 @@ static void do_bootm_qnxelf(cmd_tbl_t *cmdtp, int flag, #if defined(CONFIG_FIT) if (!images->legacy_hdr_valid) { fit_unsupported_reset ("QNX"); - do_reset (cmdtp, flag, argc, argv); + return 1; } #endif sprintf(str, "%lx", images->ep); /* write entry-point into string */ local_args[0] = argv[0]; local_args[1] = str; /* and provide it via the arguments */ - do_bootelf(cmdtp, 0, 2, local_args); + do_bootelf(NULL, 0, 2, local_args); + + return 1; } #endif #if defined(CONFIG_ARTOS) && defined(CONFIG_PPC) -static void do_bootm_artos (cmd_tbl_t *cmdtp, int flag, - int argc, char *argv[], +static int do_bootm_artos (int flag, int argc, char *argv[], bootm_headers_t *images) { ulong top; @@ -1165,7 +1166,7 @@ static void do_bootm_artos (cmd_tbl_t *cmdtp, int flag, #if defined(CONFIG_FIT) if (!images->legacy_hdr_valid) { fit_unsupported_reset ("ARTOS"); - do_reset (cmdtp, flag, argc, argv); + return 1; } #endif @@ -1237,5 +1238,7 @@ static void do_bootm_artos (cmd_tbl_t *cmdtp, int flag, entry = (void (*)(bd_t *, char *, char **, ulong))images->ep; (*entry) (kbd, cmdline, fwenv, top); + + return 1; } #endif |