@ -732,6 +732,7 @@ static void print_usage(const char *name)
" -x | --extract: extract intel fd modules \n "
" -i | --inject <region>:<module> inject file <module> into region <region> \n "
" -w | --write <addr>:<file> write file to appear at memory address <addr> \n "
" multiple files can be written simultaneously \n "
" -s | --spifreq <20|33|50> set the SPI frequency \n "
" -e | --em100 set SPI frequency to 20MHz and disable \n "
" Dual Output Fast Read Support \n "
@ -782,7 +783,9 @@ int main(int argc, char *argv[])
char * addr_str = NULL ;
int region_type = - 1 , inputfreq = 0 ;
enum spi_frequency spifreq = SPI_FREQUENCY_20MHZ ;
unsigned int addr = 0 ;
unsigned int addr [ WRITE_MAX ] ;
char * wr_fname [ WRITE_MAX ] ;
unsigned char wr_idx , wr_num = 0 ;
int rom_size = - 1 ;
bool write_it ;
char * filename ;
@ -886,11 +889,19 @@ int main(int argc, char *argv[])
break ;
case ' w ' :
mode_write = 1 ;
if ( get_two_words ( optarg , & addr_str , & src_fname ) ) {
if ( wr_num < WRITE_MAX ) {
if ( get_two_words ( optarg , & addr_str ,
& wr_fname [ wr_num ] ) ) {
print_usage ( argv [ 0 ] ) ;
exit ( EXIT_FAILURE ) ;
}
addr = strtol ( optarg , NULL , 0 ) ;
addr [ wr_num ] = strtol ( optarg , NULL , 0 ) ;
wr_num + + ;
} else {
fprintf ( stderr ,
" The number of files to write simultaneously exceeds the limitation (%d) \n " ,
WRITE_MAX ) ;
}
break ;
case ' x ' :
mode_extract = 1 ;
@ -1002,8 +1013,14 @@ int main(int argc, char *argv[])
if ( mode_inject )
ret = inject_region ( image , size , region_type , src_fname ) ;
if ( mode_write )
ret = write_data ( image , size , addr , src_fname ) ;
if ( mode_write ) {
for ( wr_idx = 0 ; wr_idx < wr_num ; wr_idx + + ) {
ret = write_data ( image , size ,
addr [ wr_idx ] , wr_fname [ wr_idx ] ) ;
if ( ret )
break ;
}
}
if ( mode_spifreq )
set_spi_frequency ( image , size , spifreq ) ;