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 <[email protected]>
---
 commands/mem.c          | 68 -------------------------------------------------
 common/Makefile         |  1 +
 common/memory_display.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++
 include/common.h        |  2 +-
 4 files changed, 66 insertions(+), 69 deletions(-)
 create mode 100644 common/memory_display.c

diff --git a/commands/mem.c b/commands/mem.c
index f25c6b6..a4a1658 100644
--- a/commands/mem.c
+++ b/commands/mem.c
@@ -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;
diff --git a/common/Makefile b/common/Makefile
index dcb07c2..9460172 100644
--- a/common/Makefile
+++ b/common/Makefile
@@ -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
diff --git a/common/memory_display.c b/common/memory_display.c
new file mode 100644
index 0000000..eb188e1
--- /dev/null
+++ b/common/memory_display.c
@@ -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;
+}
diff --git a/include/common.h b/include/common.h
index 2263c00..11904ab 100644
--- a/include/common.h
+++ b/include/common.h
@@ -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);
-- 
1.8.2.rc2


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox

Reply via email to