@ -313,9 +313,12 @@ au_do_update(int idx, long sz, int repeat)
/* execute a script */
/* execute a script */
if ( hdr - > ih_type = = IH_TYPE_SCRIPT ) {
if ( hdr - > ih_type = = IH_TYPE_SCRIPT ) {
addr = ( char * ) ( ( char * ) hdr + sizeof ( * hdr ) + 8 ) ;
addr = ( char * ) ( ( char * ) hdr + sizeof ( * hdr ) ) ;
parse_string_outer ( addr ,
/* stick a NULL at the end of the script, otherwise */
FLAG_PARSE_SEMICOLON | FLAG_EXIT_FROM_LOOP ) ;
/* parse_string_outer() runs off the end. */
addr [ ntohl ( hdr - > ih_size ) ] = 0 ;
addr + = 8 ;
parse_string_outer ( addr , FLAG_PARSE_SEMICOLON ) ;
return 0 ;
return 0 ;
}
}
@ -333,8 +336,7 @@ au_do_update(int idx, long sz, int repeat)
# endif
# endif
debug ( " protect off %lx %lx \n " , start , end ) ;
debug ( " protect off %lx %lx \n " , start , end ) ;
sprintf ( strbuf , " protect off %lx %lx \n " , start , end ) ;
sprintf ( strbuf , " protect off %lx %lx \n " , start , end ) ;
parse_string_outer ( strbuf ,
parse_string_outer ( strbuf , FLAG_PARSE_SEMICOLON ) ;
FLAG_PARSE_SEMICOLON | FLAG_EXIT_FROM_LOOP ) ;
}
}
/*
/*
@ -344,12 +346,11 @@ au_do_update(int idx, long sz, int repeat)
if ( repeat = = 0 ) {
if ( repeat = = 0 ) {
debug ( " erase %lx %lx \n " , start , end ) ;
debug ( " erase %lx %lx \n " , start , end ) ;
sprintf ( strbuf , " erase %lx %lx \n " , start , end ) ;
sprintf ( strbuf , " erase %lx %lx \n " , start , end ) ;
parse_string_outer ( strbuf ,
parse_string_outer ( strbuf , FLAG_PARSE_SEMICOLON ) ;
FLAG_PARSE_SEMICOLON | FLAG_EXIT_FROM_LOOP ) ;
}
}
wait_ms ( 100 ) ;
wait_ms ( 100 ) ;
/* strip the header - except for the kernel */
/* strip the header - except for the kernel and app */
if ( idx = = IDX_FIRMWARE | | idx = = IDX_DISK | | idx = = IDX_APP ) {
if ( idx = = IDX_FIRMWARE | | idx = = IDX_DISK ) {
addr = ( char * ) ( ( char * ) hdr + sizeof ( * hdr ) ) ;
addr = ( char * ) ( ( char * ) hdr + sizeof ( * hdr ) ) ;
# ifdef AU_UPDATE_TEST
# ifdef AU_UPDATE_TEST
/* copy it to where Linux goes */
/* copy it to where Linux goes */
@ -367,8 +368,7 @@ au_do_update(int idx, long sz, int repeat)
/* copy the data from RAM to FLASH */
/* copy the data from RAM to FLASH */
debug ( " cp.b %p %lx %x \n " , addr , start , nbytes ) ;
debug ( " cp.b %p %lx %x \n " , addr , start , nbytes ) ;
sprintf ( strbuf , " cp.b %p %lx %x \n " , addr , start , nbytes ) ;
sprintf ( strbuf , " cp.b %p %lx %x \n " , addr , start , nbytes ) ;
parse_string_outer ( strbuf ,
parse_string_outer ( strbuf , FLAG_PARSE_SEMICOLON ) ;
FLAG_PARSE_SEMICOLON | FLAG_EXIT_FROM_LOOP ) ;
/* check the dcrc of the copy */
/* check the dcrc of the copy */
if ( crc32 ( 0 , ( char * ) ( start + off ) , ntohl ( hdr - > ih_size ) ) ! = ntohl ( hdr - > ih_dcrc ) ) {
if ( crc32 ( 0 , ( char * ) ( start + off ) , ntohl ( hdr - > ih_size ) ) ! = ntohl ( hdr - > ih_dcrc ) ) {
@ -381,8 +381,7 @@ au_do_update(int idx, long sz, int repeat)
if ( idx = = IDX_FIRMWARE ) {
if ( idx = = IDX_FIRMWARE ) {
debug ( " protect on %lx %lx \n " , start , end ) ;
debug ( " protect on %lx %lx \n " , start , end ) ;
sprintf ( strbuf , " protect on %lx %lx \n " , start , end ) ;
sprintf ( strbuf , " protect on %lx %lx \n " , start , end ) ;
parse_string_outer ( strbuf ,
parse_string_outer ( strbuf , FLAG_PARSE_SEMICOLON ) ;
FLAG_PARSE_SEMICOLON | FLAG_EXIT_FROM_LOOP ) ;
}
}
return 0 ;
return 0 ;
}
}
@ -493,8 +492,11 @@ do_auto_update(void)
env = getenv ( " firmware_nd " ) ;
env = getenv ( " firmware_nd " ) ;
if ( env ! = NULL )
if ( env ! = NULL )
end = simple_strtoul ( env , NULL , 16 ) ;
end = simple_strtoul ( env , NULL , 16 ) ;
if ( start > = 0 & & end & & end > start )
if ( start > = 0 & & end & & end > start ) {
ausize [ IDX_FIRMWARE ] = ( end + 1 ) - start ;
ausize [ IDX_FIRMWARE ] = ( end + 1 ) - start ;
aufl_layout [ 0 ] . start = start ;
aufl_layout [ 0 ] . end = end ;
}
start = - 1 ;
start = - 1 ;
end = 0 ;
end = 0 ;
env = getenv ( " kernel_st " ) ;
env = getenv ( " kernel_st " ) ;
@ -503,8 +505,11 @@ do_auto_update(void)
env = getenv ( " kernel_nd " ) ;
env = getenv ( " kernel_nd " ) ;
if ( env ! = NULL )
if ( env ! = NULL )
end = simple_strtoul ( env , NULL , 16 ) ;
end = simple_strtoul ( env , NULL , 16 ) ;
if ( start > = 0 & & end & & end > start )
if ( start > = 0 & & end & & end > start ) {
ausize [ IDX_KERNEL ] = ( end + 1 ) - start ;
ausize [ IDX_KERNEL ] = ( end + 1 ) - start ;
aufl_layout [ 1 ] . start = start ;
aufl_layout [ 1 ] . end = end ;
}
start = - 1 ;
start = - 1 ;
end = 0 ;
end = 0 ;
env = getenv ( " app_st " ) ;
env = getenv ( " app_st " ) ;
@ -513,8 +518,11 @@ do_auto_update(void)
env = getenv ( " app_nd " ) ;
env = getenv ( " app_nd " ) ;
if ( env ! = NULL )
if ( env ! = NULL )
end = simple_strtoul ( env , NULL , 16 ) ;
end = simple_strtoul ( env , NULL , 16 ) ;
if ( start > = 0 & & end & & end > start )
if ( start > = 0 & & end & & end > start ) {
ausize [ IDX_APP ] = ( end + 1 ) - start ;
ausize [ IDX_APP ] = ( end + 1 ) - start ;
aufl_layout [ 2 ] . start = start ;
aufl_layout [ 2 ] . end = end ;
}
start = - 1 ;
start = - 1 ;
end = 0 ;
end = 0 ;
env = getenv ( " disk_st " ) ;
env = getenv ( " disk_st " ) ;
@ -523,8 +531,11 @@ do_auto_update(void)
env = getenv ( " disk_nd " ) ;
env = getenv ( " disk_nd " ) ;
if ( env ! = NULL )
if ( env ! = NULL )
end = simple_strtoul ( env , NULL , 16 ) ;
end = simple_strtoul ( env , NULL , 16 ) ;
if ( start > = 0 & & end & & end > start )
if ( start > = 0 & & end & & end > start ) {
ausize [ IDX_DISK ] = ( end + 1 ) - start ;
ausize [ IDX_DISK ] = ( end + 1 ) - start ;
aufl_layout [ 3 ] . start = start ;
aufl_layout [ 3 ] . end = end ;
}
/* make sure that we see CTRL-C and save the old state */
/* make sure that we see CTRL-C and save the old state */
old_ctrlc = disable_ctrlc ( 0 ) ;
old_ctrlc = disable_ctrlc ( 0 ) ;