diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/cmd_mem.c | 65 |
1 files changed, 14 insertions, 51 deletions
diff --git a/common/cmd_mem.c b/common/cmd_mem.c index d0fae6b24c2..fcbb0236d25 100644 --- a/common/cmd_mem.c +++ b/common/cmd_mem.c @@ -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; |