diff options
Diffstat (limited to 'common/cmd_mem.c')
| -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 d0fae6b24..fcbb0236d 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; |