@ -18,6 +18,7 @@
# include <linux/ctype.h>
# include <net.h>
# include <elf.h>
# include <vxworks.h>
# if defined(CONFIG_WALNUT) || defined(CONFIG_SYS_VXWORKS_MAC_PTR)
DECLARE_GLOBAL_DATA_PTR ;
@ -98,13 +99,10 @@ int do_bootvx (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
unsigned long bootaddr ; /* Address to put the bootline */
char * bootline ; /* Text of the bootline */
char * tmp ; /* Temporary char pointer */
char build_buf [ 128 ] ; /* Buffer for building the bootline */
# if defined(CONFIG_4xx) || defined(CONFIG_IOP480)
char build_buf [ 80 ] ; /* Buffer for building the bootline */
# endif
/* -------------------------------------------------- */
/*
/* ---------------------------------------------------
*
* Check the loadaddr variable .
* If we don ' t know where the image is then we ' re done .
*/
@ -120,7 +118,8 @@ int do_bootvx (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
if ( ( argc = = 2 ) & & ( strcmp ( argv [ 1 ] , " tftp " ) = = 0 ) ) {
if ( NetLoop ( TFTP ) < = 0 )
return 1 ;
printf ( " Automatic boot of VxWorks image at address 0x%08lx ... \n " , addr ) ;
printf ( " Automatic boot of VxWorks image at address 0x%08lx ... \n " ,
addr ) ;
}
# endif
@ -148,7 +147,7 @@ int do_bootvx (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
*/
if ( ( tmp = getenv ( " bootaddr " ) ) = = NULL )
bootaddr = 0x4200 ;
bootaddr = CONFIG_SYS_VXWORKS_BOOT_ADDR ;
else
bootaddr = simple_strtoul ( tmp , NULL , 16 ) ;
@ -159,54 +158,40 @@ int do_bootvx (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
*/
if ( ( bootline = getenv ( " bootargs " ) ) ! = NULL ) {
memcpy ( ( void * ) bootaddr , bootline , MAX ( strlen ( bootline ) , 255 ) ) ;
flush_cache ( bootaddr , MAX ( strlen ( bootline ) , 255 ) ) ;
memcpy ( ( void * ) bootaddr , bootline ,
max ( strlen ( bootline ) , 255 ) ) ;
flush_cache ( bootaddr , max ( strlen ( bootline ) , 255 ) ) ;
} else {
# if defined(CONFIG_4xx)
sprintf ( build_buf , " ibmEmac(0,0) " ) ;
if ( ( tmp = getenv ( " hostname " ) ) ! = NULL ) {
sprintf ( & build_buf [ strlen ( build_buf - 1 ) ] ,
" host:%s " , tmp ) ;
sprintf ( build_buf , CONFIG_SYS_VXWORKS_BOOT_DEVICE ) ;
if ( ( tmp = getenv ( " bootfile " ) ) ! = NULL ) {
sprintf ( & build_buf [ strlen ( build_buf ) ] ,
" %s:%s " , CONFIG_SYS_VXWORKS_SERVERNAME , tmp ) ;
} else {
sprintf ( & build_buf [ strlen ( build_buf - 1 ) ] ,
" : " ) ;
sprintf ( & build_buf [ strlen ( build_buf ) ] ,
" %s :file " , CONFIG_SYS_VXWORKS_SERVERNAME ) ;
}
if ( ( tmp = getenv ( " ipaddr " ) ) ! = NULL ) {
sprintf ( & build_buf [ strlen ( build_buf - 1 ) ] ,
" e=%s " , tmp ) ;
sprintf ( & build_buf [ strlen ( build_buf ) ] , " e=%s " , tmp ) ;
}
memcpy ( ( void * ) bootaddr , build_buf , MAX ( strlen ( build_buf ) , 255 ) ) ;
flush_cache ( bootaddr , MAX ( strlen ( build_buf ) , 255 ) ) ;
# elif defined(CONFIG_IOP480)
sprintf ( build_buf , " dc(0,0) " ) ;
if ( ( tmp = getenv ( " hostname " ) ) ! = NULL ) {
sprintf ( & build_buf [ strlen ( build_buf - 1 ) ] ,
" host:%s " , tmp ) ;
} else {
sprintf ( & build_buf [ strlen ( build_buf - 1 ) ] ,
" : " ) ;
if ( ( tmp = getenv ( " serverip " ) ) ! = NULL ) {
sprintf ( & build_buf [ strlen ( build_buf ) ] , " h=%s " , tmp ) ;
}
if ( ( tmp = getenv ( " ipaddr " ) ) ! = NULL ) {
sprintf ( & build_buf [ strlen ( build_buf - 1 ) ] ,
" e=%s " , tmp ) ;
if ( ( tmp = getenv ( " hostname " ) ) ! = NULL ) {
sprintf ( & build_buf [ strlen ( build_buf ) ] , " tn=%s " , tmp ) ;
}
memcpy ( ( void * ) bootaddr , build_buf , MAX ( strlen ( build_buf ) , 255 ) ) ;
flush_cache ( bootaddr , MAX ( strlen ( build_buf ) , 255 ) ) ;
# else
/*
* I ' m not sure what the device should be for other
* PPC flavors , the hostname and ipaddr should be ok
* to just copy
*/
puts ( " No bootargs defined \n " ) ;
return 1 ;
# ifdef CONFIG_SYS_VXWORKS_ADD_PARAMS
sprintf ( & build_buf [ strlen ( build_buf ) ] ,
CONFIG_SYS_VXWORKS_ADD_PARAMS ) ;
# endif
memcpy ( ( void * ) bootaddr , build_buf ,
max ( strlen ( build_buf ) , 255 ) ) ;
flush_cache ( bootaddr , max ( strlen ( build_buf ) , 255 ) ) ;
}
/*
@ -251,8 +236,7 @@ int valid_elf_image (unsigned long addr)
}
if ( ehdr - > e_type ! = ET_EXEC ) {
printf ( " ## Not a 32-bit elf image at address 0x%08lx \n " ,
addr ) ;
printf ( " ## Not a 32-bit elf image at address 0x%08lx \n " , addr ) ;
return 0 ;
}
@ -267,7 +251,6 @@ int valid_elf_image (unsigned long addr)
return 1 ;
}
/* ======================================================================
* A very simple elf loader , assumes the image is valid , returns the
* entry point address .