@ -92,8 +92,9 @@ static ulong base_address = 0;
int do_mem_md ( cmd_tbl_t * cmdtp , int flag , int argc , char * argv [ ] )
{
ulong addr , length ;
ulong i , nbytes , linebytes ;
u_char * cp ;
# if defined(CONFIG_HAS_DATAFLASH)
ulong nbytes , linebytes ;
# endif
int size ;
int rc = 0 ;
@ -128,6 +129,7 @@ int do_mem_md ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
length = simple_strtoul ( argv [ 2 ] , NULL , 16 ) ;
}
# if defined(CONFIG_HAS_DATAFLASH)
/* Print the lines.
*
* We buffer all read data , so we can make sure data is read only
@ -136,64 +138,25 @@ int do_mem_md ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
nbytes = length * size ;
do {
char linebuf [ DISP_LINE_LEN ] ;
uint * uip = ( uint * ) linebuf ;
ushort * usp = ( ushort * ) linebuf ;
u_char * ucp = ( u_char * ) linebuf ;
# ifdef CONFIG_HAS_DATAFLASH
int rc ;
# endif
printf ( " %08lx: " , addr ) ;
void * p ;
linebytes = ( nbytes > DISP_LINE_LEN ) ? DISP_LINE_LEN : nbytes ;
# ifdef CONFIG_HAS_DATAFLASH
if ( ( rc = read_dataflash ( addr , ( linebytes / size ) * size , linebuf ) ) = = DATAFLASH_OK ) {
/* if outside dataflash */
/*if (rc != 1) {
dataflash_perror ( rc ) ;
return ( 1 ) ;
} */
for ( i = 0 ; i < linebytes ; i + = size ) {
if ( size = = 4 ) {
printf ( " %08x " , * uip + + ) ;
} else if ( size = = 2 ) {
printf ( " %04x " , * usp + + ) ;
} else {
printf ( " %02x " , * ucp + + ) ;
}
addr + = size ;
}
rc = read_dataflash ( addr , ( linebytes / size ) * size , linebuf ) ;
p = ( rc = = DATAFLASH_OK ) ? linebuf : ( void * ) addr ;
print_buffer ( addr , p , size , linebytes / size , DISP_LINE_LEN / size ) ;
} else { /* addr does not correspond to DataFlash */
# endif
for ( i = 0 ; i < linebytes ; i + = size ) {
if ( size = = 4 ) {
printf ( " %08x " , ( * uip + + = * ( ( uint * ) addr ) ) ) ;
} else if ( size = = 2 ) {
printf ( " %04x " , ( * usp + + = * ( ( ushort * ) addr ) ) ) ;
} else {
printf ( " %02x " , ( * ucp + + = * ( ( u_char * ) addr ) ) ) ;
}
addr + = size ;
}
# ifdef CONFIG_HAS_DATAFLASH
}
# endif
puts ( " " ) ;
cp = ( u_char * ) linebuf ;
for ( i = 0 ; i < linebytes ; i + + ) {
if ( ( * cp < 0x20 ) | | ( * cp > 0x7e ) )
putc ( ' . ' ) ;
else
printf ( " %c " , * cp ) ;
cp + + ;
}
putc ( ' \n ' ) ;
nbytes - = linebytes ;
addr + = linebytes ;
if ( ctrlc ( ) ) {
rc = 1 ;
break ;
}
} while ( nbytes > 0 ) ;
# else
/* Print the lines. */
print_buffer ( addr , ( void * ) addr , size , length , DISP_LINE_LEN / size ) ;
addr + = size * length ;
# endif
dp_last_addr = addr ;
dp_last_length = length ;