1 //==========================================================================
5 // RedBoot dump support
7 //==========================================================================
8 //####ECOSGPLCOPYRIGHTBEGIN####
9 // -------------------------------------------
10 // This file is part of eCos, the Embedded Configurable Operating System.
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
12 // Copyright (C) 2002 Gary Thomas
14 // eCos is free software; you can redistribute it and/or modify it under
15 // the terms of the GNU General Public License as published by the Free
16 // Software Foundation; either version 2 or (at your option) any later version.
18 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
19 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
20 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
23 // You should have received a copy of the GNU General Public License along
24 // with eCos; if not, write to the Free Software Foundation, Inc.,
25 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
27 // As a special exception, if other files instantiate templates or use macros
28 // or inline functions from this file, or you compile this file and link it
29 // with other works to produce a work based on this file, this file does not
30 // by itself cause the resulting work to be covered by the GNU General Public
31 // License. However the source code for this file must still be made available
32 // in accordance with section (3) of the GNU General Public License.
34 // This exception does not invalidate any other reasons why a work based on
35 // this file might be covered by the GNU General Public License.
37 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
38 // at http://sources.redhat.com/ecos/ecos-license/
39 // -------------------------------------------
40 //####ECOSGPLCOPYRIGHTEND####
41 //==========================================================================
42 //#####DESCRIPTIONBEGIN####
45 // Contributors: gthomas
50 // This code is part of RedBoot (tm).
52 //####DESCRIPTIONEND####
54 //==========================================================================
59 "Display (hex dump) a range of memory",
60 "-b <location> [-l <length>] [-s] [-1|-2|-4]",
64 "Display (hex dump) a range of memory",
65 "-b <location> [-l <length>] [-s] [-1|-2|-4]",
70 do_dump(int argc, char *argv[])
72 struct option_info opts[6];
73 unsigned long base, len;
74 bool base_set, len_set;
75 static unsigned long _base, _len;
76 static char _size = 1;
77 bool srec_dump, set_32bit, set_16bit, set_8bit;
81 init_opts(&opts[0], 'b', true, OPTION_ARG_TYPE_NUM,
82 (void *)&base, (bool *)&base_set, "base address");
83 init_opts(&opts[1], 'l', true, OPTION_ARG_TYPE_NUM,
84 (void *)&len, (bool *)&len_set, "length");
85 init_opts(&opts[2], 's', false, OPTION_ARG_TYPE_FLG,
86 (void *)&srec_dump, 0, "dump data using Morotola S-records");
87 init_opts(&opts[3], '4', false, OPTION_ARG_TYPE_FLG,
88 (void *)&set_32bit, (bool *)0, "dump 32 bit units");
89 init_opts(&opts[4], '2', false, OPTION_ARG_TYPE_FLG,
90 (void *)&set_16bit, (bool *)0, "dump 16 bit units");
91 init_opts(&opts[5], '1', false, OPTION_ARG_TYPE_FLG,
92 (void *)&set_8bit, (bool *)0, "dump 8 bit units");
93 if (!scan_opts(argc, argv, 1, opts, 6, 0, 0, "")) {
98 diag_printf("Dump what [location]?\n");
110 } else if (set_16bit) {
112 } else if (set_8bit) {
122 n = (len > 16) ? 16 : len;
124 diag_printf("S3%02X%08lX", n+5, off+base);
125 for (i = 0; i < 4; i++) {
126 cksum += (((base+off)>>(i*8)) & 0xFF);
128 for (i = 0; i < n; i++) {
129 ch = *(cyg_uint8 *)(base+off+i);
130 diag_printf("%02X", ch);
133 diag_printf("%02X\n", ~cksum & 0xFF);
139 diag_dump_buf((void *)base, len);
142 diag_dump_buf_16bit((void *)base, len);
145 diag_dump_buf_32bit((void *)base, len);
153 // Simple alias for the dump command
155 do_x(int argc, char *argv[])