]> git.kernelconcepts.de Git - karo-tx-redboot.git/blobdiff - packages/redboot/v2_0/src/dump.c
TX53 Release 2011-12-20
[karo-tx-redboot.git] / packages / redboot / v2_0 / src / dump.c
index 6c6fca1aa31520df6f15b5c8314d8c689c843aa5..3dee574bba21eaf5a23a2fd12f65317f8dba7f81 100644 (file)
@@ -44,9 +44,9 @@
 // Author(s):    gthomas
 // Contributors: gthomas
 // Date:         2002-08-06
-// Purpose:      
-// Description:  
-//              
+// Purpose:
+// Description:
+//
 // This code is part of RedBoot (tm).
 //
 //####DESCRIPTIONEND####
 
 #include <redboot.h>
 
-RedBoot_cmd("dump", 
-            "Display (hex dump) a range of memory", 
-            "-b <location> [-l <length>] [-s] [-1|-2|-4]",
-            do_dump 
-    );
-RedBoot_cmd("x", 
-            "Display (hex dump) a range of memory", 
-            "-b <location> [-l <length>] [-s] [-1|-2|-4]",
-            do_x
-    );
+RedBoot_cmd("dump",
+                       "Display (hex dump) a range of memory",
+                       "-b <location> [-l <length>] [-s] [-1|-2|-4]",
+                       do_dump
+       );
+RedBoot_cmd("x",
+                       "Display (hex dump) a range of memory",
+                       "-b <location> [-l <length>] [-s] [-1|-2|-4]",
+                       do_x
+       );
 
 void
 do_dump(int argc, char *argv[])
 {
-    struct option_info opts[6];
-    unsigned long base, len;
-    bool base_set, len_set;
-    static unsigned long _base, _len;
-    static char _size = 1;
-    bool srec_dump, set_32bit, set_16bit, set_8bit;
-    int i, n, off, cksum;
-    cyg_uint8 ch;
+       struct option_info opts[6];
+       unsigned long base, len;
+       bool base_set, len_set;
+       static unsigned long _base, _len;
+       static char _size = 1;
+       bool srec_dump, set_32bit, set_16bit, set_8bit;
+       int i, n, off, cksum;
+       cyg_uint8 ch;
 
-    init_opts(&opts[0], 'b', true, OPTION_ARG_TYPE_NUM, 
-              (void *)&base, (bool *)&base_set, "base address");
-    init_opts(&opts[1], 'l', true, OPTION_ARG_TYPE_NUM, 
-              (void *)&len, (bool *)&len_set, "length");
-    init_opts(&opts[2], 's', false, OPTION_ARG_TYPE_FLG, 
-              (void *)&srec_dump, 0, "dump data using Morotola S-records");
-    init_opts(&opts[3], '4', false, OPTION_ARG_TYPE_FLG,
-              (void *)&set_32bit, (bool *)0, "dump 32 bit units");
-    init_opts(&opts[4], '2', false, OPTION_ARG_TYPE_FLG,
-              (void *)&set_16bit, (bool *)0, "dump 16 bit units");
-    init_opts(&opts[5], '1', false, OPTION_ARG_TYPE_FLG,
-              (void *)&set_8bit, (bool *)0, "dump 8 bit units");
-    if (!scan_opts(argc, argv, 1, opts, 6, 0, 0, "")) {
-        return;
-    }
-    if (!base_set) {
-        if (_base == 0) {
-            diag_printf("Dump what [location]?\n");
-            return;
-        }
-        base = _base;
-        if (!len_set) {
-            len = _len;
-            len_set = true;
-        }
-    }
+       init_opts(&opts[0], 'b', true, OPTION_ARG_TYPE_NUM,
+                       &base, &base_set, "base address");
+       init_opts(&opts[1], 'l', true, OPTION_ARG_TYPE_NUM,
+                       &len, &len_set, "length");
+       init_opts(&opts[2], 's', false, OPTION_ARG_TYPE_FLG,
+                       &srec_dump, NULL, "dump data using Morotola S-records");
+       init_opts(&opts[3], '4', false, OPTION_ARG_TYPE_FLG,
+                       &set_32bit, NULL, "dump 32 bit units");
+       init_opts(&opts[4], '2', false, OPTION_ARG_TYPE_FLG,
+                       &set_16bit, NULL, "dump 16 bit units");
+       init_opts(&opts[5], '1', false, OPTION_ARG_TYPE_FLG,
+                       &set_8bit, NULL, "dump 8 bit units");
+       if (!scan_opts(argc, argv, 1, opts, 6, 0, 0, "")) {
+               return;
+       }
+       if (!base_set) {
+               if (_base == 0) {
+                       diag_printf("Dump what [location]?\n");
+                       return;
+               }
+               base = _base;
+               if (!len_set) {
+                       len = _len;
+                       len_set = true;
+               }
+       }
 
-    if (set_32bit) {
-      _size = 4;
-    } else if (set_16bit) {
-      _size = 2;
-    } else if (set_8bit) {
-      _size = 1;
-    }
+       if (set_32bit) {
+               _size = 4;
+       } else if (set_16bit) {
+               _size = 2;
+       } else if (set_8bit) {
+               _size = 1;
+       }
 
-    if (!len_set) {
-        len = 32;
-    }
-    if (srec_dump) {
-        off = 0;
-        while (off < len) {
-            n = (len > 16) ? 16 : len;
-            cksum = n+5;
-            diag_printf("S3%02X%08lX", n+5, off+base);
-            for (i = 0;  i < 4;  i++) {
-                cksum += (((base+off)>>(i*8)) & 0xFF);
-            }
-            for (i = 0;  i < n;  i++) {
-                ch = *(cyg_uint8 *)(base+off+i);
-                diag_printf("%02X", ch);
-                cksum += ch;
-            }
-            diag_printf("%02X\n", ~cksum & 0xFF);
-            off += n;
-        }
-    } else {
-        switch( _size ) {
-        case 1:
-            diag_dump_buf((void *)base, len);
-            break;
-        case 2:
-            diag_dump_buf_16bit((void *)base, len);
-            break;
-        case 4:
-            diag_dump_buf_32bit((void *)base, len);
-            break;
-        }
-    }
-    _base = base + len;
-    _len = len;
+       if (!len_set) {
+               len = 32;
+       }
+       if (srec_dump) {
+               off = 0;
+               while (off < len) {
+                       n = (len > 16) ? 16 : len;
+                       cksum = n + 5;
+                       diag_printf("S3%02X%08lX", n + 5, off + base);
+                       for (i = 0;  i < 4;  i++) {
+                               cksum += (((base + off) >> (i * 8)) & 0xFF);
+                       }
+                       for (i = 0;  i < n;  i++) {
+                               ch = *(cyg_uint8 *)(base + off + i);
+                               diag_printf("%02X", ch);
+                               cksum += ch;
+                       }
+                       diag_printf("%02X\n", ~cksum & 0xFF);
+                       off += n;
+               }
+       } else {
+               switch( _size ) {
+               case 1:
+                       diag_dump_buf((void *)base, len);
+                       break;
+               case 2:
+                       diag_dump_buf_16bit((void *)base, len);
+                       break;
+               case 4:
+                       diag_dump_buf_32bit((void *)base, len);
+                       break;
+               }
+       }
+       _base = base + len;
+       _len = len;
 }
 
 // Simple alias for the dump command
 void
 do_x(int argc, char *argv[])
 {
-    do_dump(argc, argv);
+       do_dump(argc, argv);
 }