]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
bootm: Adjust arguments of boot_os_fn
authorSimon Glass <sjg@chromium.org>
Sat, 16 Dec 2023 03:14:13 +0000 (20:14 -0700)
committerTom Rini <trini@konsulko.com>
Thu, 21 Dec 2023 21:07:52 +0000 (16:07 -0500)
Adjust boot_os_fn to use struct bootm_info instead of the separate
argc, argv and image parameters. Update the handlers accordingly. Few
of the functions make use of the arguments, so this improves code size
slightly.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Tom Rini <trini@konsulko.com>
15 files changed:
arch/arc/lib/bootm.c
arch/arm/lib/bootm.c
arch/m68k/lib/bootm.c
arch/microblaze/lib/bootm.c
arch/mips/lib/bootm.c
arch/nios2/lib/bootm.c
arch/powerpc/lib/bootm.c
arch/riscv/lib/bootm.c
arch/sandbox/lib/bootm.c
arch/sh/lib/bootm.c
arch/x86/lib/bootm.c
arch/xtensa/lib/bootm.c
boot/bootm.c
boot/bootm_os.c
include/bootm.h

index 44ec5864a1c6bbfdf342b1038523db2ec1836a38..b143392ee6c2c16a4da87dc375c45bcf969474c6 100644 (file)
@@ -3,6 +3,7 @@
  * Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
  */
 
+#include <bootm.h>
 #include <bootstage.h>
 #include <env.h>
 #include <image.h>
@@ -78,8 +79,10 @@ static void boot_jump_linux(struct bootm_headers *images, int flag)
                board_jump_and_run(kernel_entry, r0, 0, r2);
 }
 
-int do_bootm_linux(int flag, int argc, char *argv[], struct bootm_headers *images)
+int do_bootm_linux(int flag, struct bootm_info *bmi)
 {
+       struct bootm_headers *images = bmi->images;
+
        /* No need for those on ARC */
        if ((flag & BOOTM_STATE_OS_BD_T) || (flag & BOOTM_STATE_OS_CMDLINE))
                return -1;
index c56285738a265d157b57fd5f0527c1fceaf08573..f30a483ed8b47b62a4e987a9f05f31005bf08aaa 100644 (file)
@@ -12,6 +12,7 @@
  */
 
 #include <common.h>
+#include <bootm.h>
 #include <bootstage.h>
 #include <command.h>
 #include <cpu_func.h>
@@ -378,9 +379,10 @@ static void boot_jump_linux(struct bootm_headers *images, int flag)
  * DIFFERENCE: Instead of calling prep and go at the end
  * they are called if subcommand is equal 0.
  */
-int do_bootm_linux(int flag, int argc, char *const argv[],
-                  struct bootm_headers *images)
+int do_bootm_linux(int flag, struct bootm_info *bmi)
 {
+       struct bootm_headers *images = bmi->images;
+
        /* No need for those on ARM */
        if (flag & BOOTM_STATE_OS_BD_T || flag & BOOTM_STATE_OS_CMDLINE)
                return -1;
index 79d8b34c0d562cb5c11e384fbbdea59948cd80f3..f2d02e4376581483d731d941fd1ecc71b3cc5812 100644 (file)
@@ -4,6 +4,7 @@
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  */
 
+#include <bootm.h>
 #include <bootstage.h>
 #include <command.h>
 #include <env.h>
@@ -34,9 +35,9 @@ void arch_lmb_reserve(struct lmb *lmb)
        arch_lmb_reserve_generic(lmb, get_sp(), gd->ram_top, 1024);
 }
 
-int do_bootm_linux(int flag, int argc, char *const argv[],
-                  struct bootm_headers *images)
+int do_bootm_linux(int flag, struct bootm_info *bmi)
 {
+       struct bootm_headers *images = bmi->images;
        int ret;
        struct bd_info  *kbd;
        void  (*kernel) (struct bd_info *, ulong, ulong, ulong, ulong);
index f3ec4b741b8808e1d960062a72670b004b02673c..cbe9d85aa911bec6d3494e7f58b69248598f01b4 100644 (file)
@@ -7,6 +7,7 @@
  * Yasushi SHOJI <yashi@atmark-techno.com>
  */
 
+#include <bootm.h>
 #include <bootstage.h>
 #include <command.h>
 #include <cpu_func.h>
@@ -81,9 +82,10 @@ static void boot_prep_linux(struct bootm_headers *images)
        }
 }
 
-int do_bootm_linux(int flag, int argc, char *const argv[],
-                  struct bootm_headers *images)
+int do_bootm_linux(int flag, struct bootm_info *bmi)
 {
+       struct bootm_headers *images = bmi->images;
+
        images->cmdline_start = (ulong)env_get("bootargs");
 
        /* cmdline init is the part of 'prep' and nothing to do for 'bdt' */
index f1cff691f4fe363aeb59b66c0a74dcde6714fb60..286dbd5c45815e49987b8da7e340536ed290af38 100644 (file)
@@ -4,6 +4,7 @@
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  */
 
+#include <bootm.h>
 #include <bootstage.h>
 #include <env.h>
 #include <image.h>
@@ -300,9 +301,10 @@ static void boot_jump_linux(struct bootm_headers *images)
                        linux_extra);
 }
 
-int do_bootm_linux(int flag, int argc, char *const argv[],
-                  struct bootm_headers *images)
+int do_bootm_linux(int flag, struct bootm_info *bmi)
 {
+       struct bootm_headers *images = bmi->images;
+
        /* No need for those on MIPS */
        if (flag & BOOTM_STATE_OS_BD_T)
                return -1;
index 06c094d0f1c71a66e2c88da57525aa08c795c713..657a17c7204fa3863b5a4b3b3d4f8921465c97bd 100644 (file)
@@ -5,6 +5,7 @@
  */
 
 #include <common.h>
+#include <bootm.h>
 #include <cpu_func.h>
 #include <env.h>
 #include <image.h>
@@ -16,9 +17,9 @@ DECLARE_GLOBAL_DATA_PTR;
 
 #define NIOS_MAGIC 0x534f494e /* enable command line and initrd passing */
 
-int do_bootm_linux(int flag, int argc, char *const argv[],
-                  struct bootm_headers *images)
+int do_bootm_linux(int flag, struct bootm_info *bmi)
 {
+       struct bootm_headers *images = bmi->images;
        void (*kernel)(int, int, int, char *) = (void *)images->ep;
        char *commandline = env_get("bootargs");
        ulong initrd_start = images->rd_start;
@@ -29,8 +30,9 @@ int do_bootm_linux(int flag, int argc, char *const argv[],
        if (images->ft_len)
                of_flat_tree = images->ft_addr;
 #endif
-       if (!of_flat_tree && argc > 1)
-               of_flat_tree = (char *)hextoul(argv[1], NULL);
+       /* TODO: Clean this up - the DT should already be set up */
+       if (!of_flat_tree && bmi->argc > 1)
+               of_flat_tree = (char *)hextoul(bmi->argv[1], NULL);
        if (of_flat_tree)
                initrd_end = (ulong)of_flat_tree;
 
index 910121ec9c853a3639577a5e17bc1e4493d664d1..75c6bfd2bf8151306cbc3ad7a3560e84d7b358df 100644 (file)
@@ -8,6 +8,7 @@
 
 
 #include <common.h>
+#include <bootm.h>
 #include <bootstage.h>
 #include <cpu_func.h>
 #include <env.h>
@@ -223,9 +224,9 @@ static int boot_body_linux(struct bootm_headers *images)
        return 0;
 }
 
-noinline int do_bootm_linux(int flag, int argc, char *const argv[],
-                           struct bootm_headers *images)
+int do_bootm_linux(int flag, struct bootm_info *bmi)
 {
+       struct bootm_headers *images = bmi->images;
        int     ret;
 
        if (flag & BOOTM_STATE_OS_CMDLINE) {
index f9e1e18ae02648045dda571a8438e5b6b58d7a58..13cbaaba6820cc23fa4b6a76a41c6080175e165f 100644 (file)
@@ -7,6 +7,7 @@
  */
 
 #include <bootstage.h>
+#include <bootm.h>
 #include <command.h>
 #include <dm.h>
 #include <fdt_support.h>
@@ -105,9 +106,10 @@ static void boot_jump_linux(struct bootm_headers *images, int flag)
        }
 }
 
-int do_bootm_linux(int flag, int argc, char *const argv[],
-                  struct bootm_headers *images)
+int do_bootm_linux(int flag, struct bootm_info *bmi)
 {
+       struct bootm_headers *images = bmi->images;
+
        /* No need for those on RISC-V */
        if (flag & BOOTM_STATE_OS_BD_T || flag & BOOTM_STATE_OS_CMDLINE)
                return -1;
@@ -127,10 +129,9 @@ int do_bootm_linux(int flag, int argc, char *const argv[],
        return 0;
 }
 
-int do_bootm_vxworks(int flag, int argc, char *const argv[],
-                    struct bootm_headers *images)
+int do_bootm_vxworks(int flag, struct bootm_info *bmi)
 {
-       return do_bootm_linux(flag, argc, argv, images);
+       return do_bootm_linux(flag, bmi);
 }
 
 static ulong get_sp(void)
index a748ba650b128211fb8520c8ba1d0ff96543caa8..e56de90e75b81dc7fc0ed9d7e01654bf0100a94b 100644 (file)
@@ -5,6 +5,7 @@
  */
 
 #include <common.h>
+#include <bootm.h>
 #include <bootstage.h>
 #include <image.h>
 #include <asm/io.h>
@@ -64,8 +65,10 @@ static int boot_prep_linux(struct bootm_headers *images)
        return 0;
 }
 
-int do_bootm_linux(int flag, int argc, char *argv[], struct bootm_headers *images)
+int do_bootm_linux(int flag, struct bootm_info *bmi)
 {
+       struct bootm_headers *images = bmi->images;
+
        if (flag & BOOTM_STATE_OS_PREP)
                return boot_prep_linux(images);
 
index b205e5e3db1bf3e0099d4a62353f4289a6e433fb..05d586b1b6cecc2f2a68650f07a9dd224d877b4f 100644 (file)
@@ -8,6 +8,7 @@
  */
 
 #include <common.h>
+#include <bootm.h>
 #include <command.h>
 #include <env.h>
 #include <image.h>
@@ -39,9 +40,10 @@ static unsigned long sh_check_cmd_arg(char *cmdline, char *key, int base)
        return val;
 }
 
-int do_bootm_linux(int flag, int argc, char *const argv[],
-                  struct bootm_headers *images)
+int do_bootm_linux(int flag, struct bootm_info *bmi)
 {
+       struct bootm_headers *images = bmi->images;
+
        /* Linux kernel load address */
        void (*kernel) (void) = (void (*)(void))images->ep;
        /* empty_zero_page */
index 3196f9ddc2c80ded8b876ae74405d4201775279e..050c420e86b69d211750cd3fdbe2ef6b09827d6e 100644 (file)
@@ -8,6 +8,7 @@
  */
 
 #include <common.h>
+#include <bootm.h>
 #include <bootstage.h>
 #include <command.h>
 #include <efi.h>
@@ -237,9 +238,10 @@ static int boot_jump_linux(struct bootm_headers *images)
                                 images->os.arch == IH_ARCH_X86_64);
 }
 
-int do_bootm_linux(int flag, int argc, char *const argv[],
-                  struct bootm_headers *images)
+int do_bootm_linux(int flag, struct bootm_info *bmi)
 {
+       struct bootm_headers *images = bmi->images;
+
        /* No need for those on x86 */
        if (flag & BOOTM_STATE_OS_BD_T || flag & BOOTM_STATE_OS_CMDLINE)
                return -1;
index fee339281502324914d549e5a16a051646c1234c..9780d46e9b894268f79311872d79a058d9f72411 100644 (file)
@@ -5,6 +5,7 @@
  */
 
 #include <common.h>
+#include <bootm.h>
 #include <bootstage.h>
 #include <command.h>
 #include <cpu_func.h>
@@ -134,8 +135,9 @@ static struct bp_tag *setup_fdt_tag(struct bp_tag *params, void *fdt_start)
  * Boot Linux.
  */
 
-int do_bootm_linux(int flag, int argc, char *argv[], struct bootm_headers *images)
+int do_bootm_linux(int flag, struct bootm_info *bmi)
 {
+       struct bootm_headers *images = bmi->images;
        struct bp_tag *params, *params_start;
        ulong initrd_start, initrd_end;
        char *commandline = env_get("bootargs");
index 8a0dba5074e8bc79000ea54de268cf4cf28073cb..f1c45c38065940e068dd6fee8fb750163306087d 100644 (file)
@@ -6,6 +6,7 @@
 
 #ifndef USE_HOSTCC
 #include <common.h>
+#include <bootm.h>
 #include <bootstage.h>
 #include <cli.h>
 #include <command.h>
@@ -1018,6 +1019,7 @@ int do_bootm_states(struct cmd_tbl *cmdtp, int flag, int argc,
                    char *const argv[], int states, struct bootm_headers *images,
                    int boot_progress)
 {
+       struct bootm_info bmi;
        boot_os_fn *boot_fn;
        ulong iflag = 0;
        int ret = 0, need_boot_fn;
@@ -1096,12 +1098,15 @@ int do_bootm_states(struct cmd_tbl *cmdtp, int flag, int argc,
                return 1;
        }
 
+       bmi.images = images;
+       bmi.argc = argc;
+       bmi.argv = argv;
 
        /* Call various other states that are not generally used */
        if (!ret && (states & BOOTM_STATE_OS_CMDLINE))
-               ret = boot_fn(BOOTM_STATE_OS_CMDLINE, argc, argv, images);
+               ret = boot_fn(BOOTM_STATE_OS_CMDLINE, &bmi);
        if (!ret && (states & BOOTM_STATE_OS_BD_T))
-               ret = boot_fn(BOOTM_STATE_OS_BD_T, argc, argv, images);
+               ret = boot_fn(BOOTM_STATE_OS_BD_T, &bmi);
        if (!ret && (states & BOOTM_STATE_OS_PREP)) {
                ret = bootm_process_cmdline_env(images->os.os == IH_OS_LINUX);
                if (ret) {
@@ -1109,7 +1114,7 @@ int do_bootm_states(struct cmd_tbl *cmdtp, int flag, int argc,
                        ret = CMD_RET_FAILURE;
                        goto err;
                }
-               ret = boot_fn(BOOTM_STATE_OS_PREP, argc, argv, images);
+               ret = boot_fn(BOOTM_STATE_OS_PREP, &bmi);
        }
 
 #ifdef CONFIG_TRACE
index b92422171a8499cbc0c9e27bc4786e20f75da0a4..4f547b1b1148b2e464831ce05660902c1aea3617 100644 (file)
@@ -23,9 +23,9 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-static int do_bootm_standalone(int flag, int argc, char *const argv[],
-                              struct bootm_headers *images)
+static int do_bootm_standalone(int flag, struct bootm_info *bmi)
 {
+       struct bootm_headers *images = bmi->images;
        int (*appl)(int, char *const[]);
 
        if (!env_get_autostart()) {
@@ -33,7 +33,7 @@ static int do_bootm_standalone(int flag, int argc, char *const argv[],
                return 0;
        }
        appl = (int (*)(int, char * const []))images->ep;
-       appl(argc, argv);
+       appl(bmi->argc, bmi->argv);
        return 0;
 }
 
@@ -64,9 +64,9 @@ static void __maybe_unused fit_unsupported_reset(const char *msg)
 }
 
 #ifdef CONFIG_BOOTM_NETBSD
-static int do_bootm_netbsd(int flag, int argc, char *const argv[],
-                          struct bootm_headers *images)
+static int do_bootm_netbsd(int flag, struct bootm_info *bmi)
 {
+       struct bootm_headers *images = bmi->images;
        void (*loader)(struct bd_info *bd, struct legacy_img_hdr *hdr,
                       char *console, char *cmdline);
        struct legacy_img_hdr *os_hdr, *hdr;
@@ -102,14 +102,14 @@ static int do_bootm_netbsd(int flag, int argc, char *const argv[],
                        os_hdr = hdr;
        }
 
-       if (argc > 0) {
+       if (bmi->argc > 0) {
                ulong len;
                int   i;
 
-               for (i = 0, len = 0; i < argc; i += 1)
-                       len += strlen(argv[i]) + 1;
+               for (i = 0, len = 0; i < bmi->argc; i += 1)
+                       len += strlen(bmi->argv[i]) + 1;
                cmdline = malloc(len);
-               copy_args(cmdline, argc, argv, ' ');
+               copy_args(cmdline, bmi->argc, bmi->argv, ' ');
        } else {
                cmdline = env_get("bootargs");
                if (cmdline == NULL)
@@ -137,9 +137,9 @@ static int do_bootm_netbsd(int flag, int argc, char *const argv[],
 #endif /* CONFIG_BOOTM_NETBSD*/
 
 #ifdef CONFIG_BOOTM_RTEMS
-static int do_bootm_rtems(int flag, int argc, char *const argv[],
-                         struct bootm_headers *images)
+static int do_bootm_rtems(int flag, struct bootm_info *bmi)
 {
+       struct bootm_headers *images = bmi->images;
        void (*entry_point)(struct bd_info *);
 
        if (flag != BOOTM_STATE_OS_GO)
@@ -170,9 +170,9 @@ static int do_bootm_rtems(int flag, int argc, char *const argv[],
 #endif /* CONFIG_BOOTM_RTEMS */
 
 #if defined(CONFIG_BOOTM_OSE)
-static int do_bootm_ose(int flag, int argc, char *const argv[],
-                       struct bootm_headers *images)
+static int do_bootm_ose(int flag, struct bootm_info *bmi)
 {
+       struct bootm_headers *images = bmi->images;
        void (*entry_point)(void);
 
        if (flag != BOOTM_STATE_OS_GO)
@@ -203,9 +203,9 @@ static int do_bootm_ose(int flag, int argc, char *const argv[],
 #endif /* CONFIG_BOOTM_OSE */
 
 #if defined(CONFIG_BOOTM_PLAN9)
-static int do_bootm_plan9(int flag, int argc, char *const argv[],
-                         struct bootm_headers *images)
+static int do_bootm_plan9(int flag, struct bootm_info *bmi)
 {
+       struct bootm_headers *images = bmi->images;
        void (*entry_point)(void);
        char *s;
 
@@ -224,8 +224,8 @@ static int do_bootm_plan9(int flag, int argc, char *const argv[],
        if (s != NULL) {
                char *confaddr = (char *)hextoul(s, NULL);
 
-               if (argc > 0) {
-                       copy_args(confaddr, argc, argv, '\n');
+               if (bmi->argc) {
+                       copy_args(confaddr, bmi->argc, bmi->argv, '\n');
                } else {
                        s = env_get("bootargs");
                        if (s != NULL)
@@ -311,9 +311,10 @@ static void do_bootvx_fdt(struct bootm_headers *images)
        puts("## vxWorks terminated\n");
 }
 
-static int do_bootm_vxworks_legacy(int flag, int argc, char *const argv[],
-                                  struct bootm_headers *images)
+static int do_bootm_vxworks_legacy(int flag, struct bootm_info *bmi)
 {
+       struct bootm_headers *images = bmi->images;
+
        if (flag != BOOTM_STATE_OS_GO)
                return 0;
 
@@ -322,8 +323,7 @@ static int do_bootm_vxworks_legacy(int flag, int argc, char *const argv[],
        return 1;
 }
 
-int do_bootm_vxworks(int flag, int argc, char *const argv[],
-                    struct bootm_headers *images)
+int do_bootm_vxworks(int flag, struct bootm_info *bmi)
 {
        char *bootargs;
        int pos;
@@ -348,19 +348,19 @@ int do_bootm_vxworks(int flag, int argc, char *const argv[],
        if (std_dtb) {
                if (flag & BOOTM_STATE_OS_PREP)
                        printf("   Using standard DTB\n");
-               return do_bootm_linux(flag, argc, argv, images);
+               return do_bootm_linux(flag, bmi);
        } else {
                if (flag & BOOTM_STATE_OS_PREP)
                        printf("   !!! WARNING !!! Using legacy DTB\n");
-               return do_bootm_vxworks_legacy(flag, argc, argv, images);
+               return do_bootm_vxworks_legacy(flag, bmi);
        }
 }
 #endif
 
 #if defined(CONFIG_CMD_ELF)
-static int do_bootm_qnxelf(int flag, int argc, char *const argv[],
-                          struct bootm_headers *images)
+static int do_bootm_qnxelf(int flag, struct bootm_info *bmi)
 {
+       struct bootm_headers *images = bmi->images;
        char *local_args[2];
        char str[16];
        int dcache;
@@ -376,7 +376,7 @@ static int do_bootm_qnxelf(int flag, int argc, char *const argv[],
 #endif
 
        sprintf(str, "%lx", images->ep); /* write entry-point into string */
-       local_args[0] = argv[0];
+       local_args[0] = bmi->argv[0];
        local_args[1] = str;    /* and provide it via the arguments */
 
        /*
@@ -396,9 +396,9 @@ static int do_bootm_qnxelf(int flag, int argc, char *const argv[],
 #endif
 
 #ifdef CONFIG_INTEGRITY
-static int do_bootm_integrity(int flag, int argc, char *const argv[],
-                             struct bootm_headers *images)
+static int do_bootm_integrity(int flag, struct bootm_info *bmi)
 {
+       struct bootm_headers *images = bmi->images;
        void (*entry_point)(void);
 
        if (flag != BOOTM_STATE_OS_GO)
@@ -429,9 +429,9 @@ static int do_bootm_integrity(int flag, int argc, char *const argv[],
 #endif
 
 #ifdef CONFIG_BOOTM_OPENRTOS
-static int do_bootm_openrtos(int flag, int argc, char *const argv[],
-                            struct bootm_headers *images)
+static int do_bootm_openrtos(int flag, struct bootm_info *bmi)
 {
+       struct bootm_headers *images = bmi->images;
        void (*entry_point)(void);
 
        if (flag != BOOTM_STATE_OS_GO)
@@ -455,9 +455,9 @@ static int do_bootm_openrtos(int flag, int argc, char *const argv[],
 #endif
 
 #ifdef CONFIG_BOOTM_OPTEE
-static int do_bootm_tee(int flag, int argc, char *const argv[],
-                       struct bootm_headers *images)
+static int do_bootm_tee(int flag, struct bootm_info *bmi)
 {
+       struct bootm_headers *images = bmi->images;
        int ret;
 
        /* Validate OPTEE header */
@@ -468,14 +468,14 @@ static int do_bootm_tee(int flag, int argc, char *const argv[],
                return ret;
 
        /* From here we can run the regular linux boot path */
-       return do_bootm_linux(flag, argc, argv, images);
+       return do_bootm_linux(flag, bmi);
 }
 #endif
 
 #ifdef CONFIG_BOOTM_EFI
-static int do_bootm_efi(int flag, int argc, char *const argv[],
-                       struct bootm_headers *images)
+static int do_bootm_efi(int flag, struct bootm_info *bmi)
 {
+       struct bootm_headers *images = bmi->images;
        efi_status_t efi_ret;
        void *image_buf;
 
@@ -569,9 +569,14 @@ __weak void board_preboot_os(void)
 int boot_selected_os(int argc, char *const argv[], int state,
                     struct bootm_headers *images, boot_os_fn *boot_fn)
 {
+       struct bootm_info bmi;
        arch_preboot_os();
        board_preboot_os();
-       boot_fn(state, argc, argv, images);
+
+       bmi.argc = argc;
+       bmi.argv = argv;
+       bmi.images = images;
+       boot_fn(state, &bmi);
 
        /* Stand-alone may return when 'autostart' is 'no' */
        if (images->os.type == IH_TYPE_STANDALONE ||
index a6d5d5ceee8f43465563619d439d635fc467a739..85c560d5a0aebba549261f03a541149f2770dfa9 100644 (file)
@@ -39,16 +39,11 @@ struct bootm_info {
  *  - disabled interrupts.
  *
  * @flag: Flags indicating what to do (BOOTM_STATE_...)
- * @argc: Number of arguments. Note that the arguments are shifted down
- *      so that 0 is the first argument not processed by U-Boot, and
- *      argc is adjusted accordingly. This avoids confusion as to how
- *      many arguments are available for the OS.
- * @images: Pointers to os/initrd/fdt
+ * bmi: Bootm information
  * Return: 1 on error. On success the OS boots so this function does
  * not return.
  */
-typedef int boot_os_fn(int flag, int argc, char *const argv[],
-                       struct bootm_headers *images);
+typedef int boot_os_fn(int flag, struct bootm_info *bmi);
 
 extern boot_os_fn do_bootm_linux;
 extern boot_os_fn do_bootm_vxworks;