bootm: Move to using a function pointer table for the boot os function
PATCH v2 1/1 bootm: Move to using a function pointer table for the boot os function
This removes a bit of code and makes it easier for the upcoming sub bootm command support to call into the proper OS specific handler.
---
Fix a bug that showed up in sub command testing in that we didn't sent the relocated flag.
common/cmd_bootm.c | 68 +++++++++++++++++++++++---------------------------- 1 files changed, 31 insertions(+), 37 deletions(-)
common/cmd_bootm.c +31 -37
@@ -119,6 +119,22 @@ int do_bootelf (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);static boot_os_fn do_bootm_integrity;#endif +boot_os_fn * boot_os[] = { + [IH_OS_LINUX ] = do_bootm_linux, + [IH_OS_NETBSD ] = do_bootm_netbsd, +#ifdef CONFIG_LYNXKDI + [IH_OS_LYNXOS ] = do_bootm_lynxkdi, +#endif + [IH_OS_RTEMS ] = do_bootm_rtems, +#if defined(CONFIG_CMD_ELF) + [IH_OS_VXWORKS ] = do_bootm_vxworks, + [IH_OS_QNX ] = do_bootm_qnxelf, +#endif +#ifdef CONFIG_INTEGRITY + [IH_OS_INTEGRITY ] = do_bootm_integrity, +#endif +}; +ulong load_addr =CONFIG_SYS_LOAD_ADDR ;/* Default Load Address */ static bootm_headers_t images;/* pointers to os/initrd/fdt images */
@@ -386,12 +402,22 @@ static int bootm_load_os(image_info_t os, ulong *load_end, int boot_progress)/*******************************************************************/ /* bootm - boot application image from image in memory */ /*******************************************************************/ +static int relocated =0 ; +int do_bootm (cmd_tbl_t *cmdtp,int flag,int argc,char *argv[]) { -ulong iflag;ulong load_end =0 ;int ret; +boot_os_fn *boot_fn; + +/* relocate boot function table */ +if (0 == relocated) { +int i; +for (i =0 ; i <ARRAY_SIZE (boot_os); i++) + boot_os[i] += gd->reloc_off; + relocated =1 ; + }if (bootm_start (cmdtp, flag, argc, argv))return 1 ;
@@ -454,45 +480,13 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])show_boot_progress (8 ); -switch (images.os.os) { -default :/* handled by (original) Linux case */ -case IH_OS_LINUX :#ifdef CONFIG_SILENT_CONSOLE -fixup_silent_linux (); -#endif -do_bootm_linux (0 , argc, argv, &images); -break ; - -case IH_OS_NETBSD : -do_bootm_netbsd (0 , argc, argv, &images); -break ; - -#ifdef CONFIG_LYNXKDI -case IH_OS_LYNXOS : -do_bootm_lynxkdi (0 , argc, argv, &images); -break ; +if (images.os.os ==IH_OS_LINUX ) +fixup_silent_linux ();#endif -case IH_OS_RTEMS : -do_bootm_rtems (0 , argc, argv, &images); -break ; - -#if defined(CONFIG_CMD_ELF ) -case IH_OS_VXWORKS : -do_bootm_vxworks (0 , argc, argv, &images); -break ; - -case IH_OS_QNX : -do_bootm_qnxelf (0 , argc, argv, &images); -break ; -#endif - -#ifdef CONFIG_INTEGRITY -case IH_OS_INTEGRITY : -do_bootm_integrity (0 , argc, argv, &images); -break ; -#endif - } + boot_fn = boot_os[images.os.os]; +boot_fn (0 , argc, argv, &images);show_boot_progress (-9 );#ifdef DEBUG
Signature · 1 line
1.5.5.1
PATCH v2 1/1 bootm: Move to using a function pointer table for the boot os function
Quoted 17 lines · Kumar Gala
This removes a bit of code and makes it easier for the upcoming sub bootm command support to call into the proper OS specific handler.
Signed-off-by Kumar Gala <[email protected]>---
Fix a bug that showed up in sub command testing in that we didn't sent the relocated flag.
common/cmd_bootm.c | 68 +++++++++++++++++++++++---------------------------- 1 files changed, 31 insertions(+), 37 deletions(-)common/cmd_bootm.c +0
-0
common/cmd_bootm.c int do_bootelf (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]); · line 124
Quoted 6 lines
common/cmd_bootm.c +3
-0@@ -119,6 +119,22 @@ int do_bootelf (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);static boot_os_fn do_bootm_integrity;#endif +boot_os_fn * boot_os[] = { + [IH_OS_LINUX ] = do_bootm_linux, + [IH_OS_NETBSD ] = do_bootm_netbsd,
why not add config to ative or not netbsd, linux and rterms to reduce U-Boot size?
Best Regards,
J.
PATCH v2 1/1 bootm: Move to using a function pointer table for the boot os function
Quoted 25 lines · Jean-Christophe PLAGNIOL-VILLARD
Quoted 24 lines · Kumar Gala
This removes a bit of code and makes it easier for the upcoming sub bootm
command support to call into the proper OS specific handler.Signed-off-by Kumar Gala <[email protected]>---
Fix a bug that showed up in sub command testing in that we didn't sent the relocated
flag.
common/cmd_bootm.c| 68 ++++++++++++++++++++++
+----------------------------1 files changed, 31 insertions(+), 37 deletions(-)common/cmd_bootm.c +0
-0@@ -119,6 +119,22 @@ int do_bootelf (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);static boot_os_fn do_bootm_integrity;#endif
Quoted 6 lines
common/cmd_bootm.c int do_bootelf (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]); · line 124
Quoted 3 lines
common/cmd_bootm.c +3
-0+boot_os_fn * boot_os[] = { + [IH_OS_LINUX ] = do_bootm_linux, + [IH_OS_NETBSD ] = do_bootm_netbsd,why not add config to ative or not netbsd, linux and rterms to reduce U-Boot
size?
ative?
that would be an orthogonal change.
- k
PATCH v2 1/1 bootm: Move to using a function pointer table for the boot os function
Dear Kumar Gala,
Quoted 7 lines · In message <[email protected]> you wrote:
Quoted 7 lines
Quoted 7 lines
This removes a bit of code and makes it easier for the upcoming sub bootm
command support to call into the proper OS specific handler.Signed-off-by Kumar Gala <[email protected]>---
...
Quoted 12 lines
Quoted 11 lines
common/cmd_bootm.c int do_bootelf (cmd_tbl_t *cmdtp, int flag, · line 125
Quoted 8 lines
common/cmd_bootm.c +3
-0@@ -119,6 +119,22 @@ int do_bootelf (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);static boot_os_fn do_bootm_integrity;#endif +boot_os_fn * boot_os[] = { + [IH_OS_LINUX ] = do_bootm_linux, + [IH_OS_NETBSD ] = do_bootm_netbsd,why not add config to ative or not netbsd, linux and rterms to reduce U-Boot
size?
Quoted 3 lines
ative?
that would be an orthogonal change.
One that we should implement, I think.
Best regards,
Wolfgang Denk
Signature · 4 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de Drawing on my fine command of language, I said nothing.
PATCH v2 1/1 bootm: Move to using a function pointer table for the boot os function
Quoted 24 lines · Wolfgang Denk
Dear Kumar Gala,
In message <6FA5D356-5762-4185-
Quoted 7 lines · BD0C-1CE3BDEDE2D9 at kernel.crashing.org> you wrote:
Quoted 7 lines
Quoted 7 lines
This removes a bit of code and makes it easier for the upcoming sub bootm
command support to call into the proper OS specific handler.Signed-off-by Kumar Gala <[email protected]>---
...
Quoted 12 lines
Quoted 11 lines
common/cmd_bootm.c int do_bootelf (cmd_tbl_t *cmdtp, int flag, · line 125
Quoted 8 lines
common/cmd_bootm.c +3
-0@@ -119,6 +119,22 @@ int do_bootelf (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);static boot_os_fn do_bootm_integrity;#endif +boot_os_fn * boot_os[] = { + [IH_OS_LINUX ] = do_bootm_linux, + [IH_OS_NETBSD ] = do_bootm_netbsd,why not add config to ative or not netbsd, linux and rterms to reduce U-Boot
size?
Quoted 5 lines
Quoted 3 lines
ative?
that would be an orthogonal change.
One that we should implement, I think.
So this means introducing CONFIG_BOOT_RTEMS, CONFIG_BOOT_NETBSD, and CONFIG_BOOT_LINUX.
Should these be enabled in all board configs by default?
- k
PATCH v2 1/1 bootm: Move to using a function pointer table for the boot os function
Dear Kumar Gala,
Quoted 5 lines · In message <[email protected]> you wrote:
Quoted 2 lines
One that we should implement, I think.
So this means introducing
CONFIG_BOOT_RTEMS,CONFIG_BOOT_NETBSD, andCONFIG_BOOT_LINUX.
ACK.
Quoted 1 line
Should these be enabled in all board configs by default?
I recommend to enable only CONFIG_BOOT_LINUX by default.
Board maintainers, please register now if you have different needs :-)
Best regards,
Wolfgang Denk
Signature · 6 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de If a man had a child who'd gone anti-social, killed perhaps, he'd still tend to protect that child. -- McCoy, "The Ultimate Computer", stardate 4731.3