memory commands: move memory_display to separate file
memory_display is a function which should generally be available. Currently it depends on memory command support being compiled in, so move the function to a separate file. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
d91b7772c4
commit
255e5b4c42
|
@ -44,74 +44,6 @@ static char *rw_buf;
|
|||
|
||||
static char *DEVMEM = "/dev/mem";
|
||||
|
||||
/* Memory Display
|
||||
*
|
||||
* Syntax:
|
||||
* md{.b, .w, .l} {addr} {len}
|
||||
*/
|
||||
#define DISP_LINE_LEN 16
|
||||
|
||||
int memory_display(char *addr, loff_t offs, ulong nbytes, int size, int swab)
|
||||
{
|
||||
ulong linebytes, i;
|
||||
u_char *cp;
|
||||
|
||||
/* Print the lines.
|
||||
*
|
||||
* We buffer all read data, so we can make sure data is read only
|
||||
* once, and all accesses are with the specified bus width.
|
||||
*/
|
||||
do {
|
||||
char linebuf[DISP_LINE_LEN];
|
||||
uint *uip = (uint *)linebuf;
|
||||
ushort *usp = (ushort *)linebuf;
|
||||
u_char *ucp = (u_char *)linebuf;
|
||||
uint count = 52;
|
||||
|
||||
printf("%08llx:", offs);
|
||||
linebytes = (nbytes > DISP_LINE_LEN) ? DISP_LINE_LEN : nbytes;
|
||||
|
||||
for (i = 0; i < linebytes; i += size) {
|
||||
if (size == 4) {
|
||||
u32 res;
|
||||
res = (*uip++ = *((uint *)addr));
|
||||
if (swab)
|
||||
res = __swab32(res);
|
||||
count -= printf(" %08x", res);
|
||||
} else if (size == 2) {
|
||||
u16 res;
|
||||
res = (*usp++ = *((ushort *)addr));
|
||||
if (swab)
|
||||
res = __swab16(res);
|
||||
count -= printf(" %04x", res);
|
||||
} else {
|
||||
count -= printf(" %02x", (*ucp++ = *((u_char *)addr)));
|
||||
}
|
||||
addr += size;
|
||||
offs += size;
|
||||
}
|
||||
|
||||
while(count--)
|
||||
putchar(' ');
|
||||
|
||||
cp = (u_char *)linebuf;
|
||||
for (i=0; i<linebytes; i++) {
|
||||
if ((*cp < 0x20) || (*cp > 0x7e))
|
||||
putchar('.');
|
||||
else
|
||||
printf("%c", *cp);
|
||||
cp++;
|
||||
}
|
||||
putchar('\n');
|
||||
nbytes -= linebytes;
|
||||
if (ctrlc()) {
|
||||
return -EINTR;
|
||||
}
|
||||
} while (nbytes > 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int open_and_lseek(const char *filename, int mode, loff_t pos)
|
||||
{
|
||||
int fd, ret;
|
||||
|
|
|
@ -13,6 +13,7 @@ obj-$(CONFIG_CMD_LOADS) += s_record.o
|
|||
obj-$(CONFIG_OFTREE) += oftree.o
|
||||
|
||||
obj-y += memory.o
|
||||
obj-y += memory_display.o
|
||||
obj-$(CONFIG_MALLOC_DLMALLOC) += dlmalloc.o
|
||||
obj-$(CONFIG_MALLOC_TLSF) += tlsf_malloc.o
|
||||
obj-$(CONFIG_MALLOC_TLSF) += tlsf.o
|
||||
|
|
|
@ -0,0 +1,64 @@
|
|||
#include <common.h>
|
||||
|
||||
#define DISP_LINE_LEN 16
|
||||
|
||||
int memory_display(char *addr, loff_t offs, unsigned nbytes, int size, int swab)
|
||||
{
|
||||
ulong linebytes, i;
|
||||
u_char *cp;
|
||||
|
||||
/* Print the lines.
|
||||
*
|
||||
* We buffer all read data, so we can make sure data is read only
|
||||
* once, and all accesses are with the specified bus width.
|
||||
*/
|
||||
do {
|
||||
char linebuf[DISP_LINE_LEN];
|
||||
uint32_t *uip = (uint *)linebuf;
|
||||
uint16_t *usp = (ushort *)linebuf;
|
||||
uint8_t *ucp = (u_char *)linebuf;
|
||||
unsigned count = 52;
|
||||
|
||||
printf("%08llx:", offs);
|
||||
linebytes = (nbytes > DISP_LINE_LEN) ? DISP_LINE_LEN : nbytes;
|
||||
|
||||
for (i = 0; i < linebytes; i += size) {
|
||||
if (size == 4) {
|
||||
u32 res;
|
||||
res = (*uip++ = *((uint *)addr));
|
||||
if (swab)
|
||||
res = __swab32(res);
|
||||
count -= printf(" %08x", res);
|
||||
} else if (size == 2) {
|
||||
u16 res;
|
||||
res = (*usp++ = *((ushort *)addr));
|
||||
if (swab)
|
||||
res = __swab16(res);
|
||||
count -= printf(" %04x", res);
|
||||
} else {
|
||||
count -= printf(" %02x", (*ucp++ = *((u_char *)addr)));
|
||||
}
|
||||
addr += size;
|
||||
offs += size;
|
||||
}
|
||||
|
||||
while (count--)
|
||||
putchar(' ');
|
||||
|
||||
cp = (uint8_t *)linebuf;
|
||||
for (i = 0; i < linebytes; i++) {
|
||||
if ((*cp < 0x20) || (*cp > 0x7e))
|
||||
putchar('.');
|
||||
else
|
||||
printf("%c", *cp);
|
||||
cp++;
|
||||
}
|
||||
|
||||
putchar('\n');
|
||||
nbytes -= linebytes;
|
||||
if (ctrlc())
|
||||
return -EINTR;
|
||||
} while (nbytes > 0);
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -219,7 +219,7 @@ int run_shell(void);
|
|||
#define PAGE_ALIGN(s) (((s) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))
|
||||
#define PAGE_ALIGN_DOWN(x) ((x) & ~(PAGE_SIZE - 1))
|
||||
|
||||
int memory_display(char *addr, loff_t offs, ulong nbytes, int size, int swab);
|
||||
int memory_display(char *addr, loff_t offs, unsigned nbytes, int size, int swab);
|
||||
|
||||
int mem_parse_options(int argc, char *argv[], char *optstr, int *mode,
|
||||
char **sourcefile, char **destfile, int *swab);
|
||||
|
|
Loading…
Reference in New Issue