|
@@ -92,8 +92,9 @@ static ulong base_address = 0;
|
|
int do_mem_md ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|
int do_mem_md ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|
{
|
|
{
|
|
ulong addr, length;
|
|
ulong addr, length;
|
|
- ulong i, nbytes, linebytes;
|
|
|
|
- u_char *cp;
|
|
|
|
|
|
+#if defined(CONFIG_HAS_DATAFLASH)
|
|
|
|
+ ulong nbytes, linebytes;
|
|
|
|
+#endif
|
|
int size;
|
|
int size;
|
|
int rc = 0;
|
|
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);
|
|
length = simple_strtoul(argv[2], NULL, 16);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+#if defined(CONFIG_HAS_DATAFLASH)
|
|
/* Print the lines.
|
|
/* Print the lines.
|
|
*
|
|
*
|
|
* We buffer all read data, so we can make sure data is read only
|
|
* 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;
|
|
nbytes = length * size;
|
|
do {
|
|
do {
|
|
char linebuf[DISP_LINE_LEN];
|
|
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;
|
|
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;
|
|
nbytes -= linebytes;
|
|
|
|
+ addr += linebytes;
|
|
if (ctrlc()) {
|
|
if (ctrlc()) {
|
|
rc = 1;
|
|
rc = 1;
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
} while (nbytes > 0);
|
|
} 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_addr = addr;
|
|
dp_last_length = length;
|
|
dp_last_length = length;
|