OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [ecos-2.0/] [packages/] [redboot/] [v2_0/] [src/] [dump.c] - Blame information for rev 1773

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1254 phoenix
//==========================================================================
2
//
3
//      dump.c
4
//
5
//      RedBoot dump support
6
//
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
13
//
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.
17
//
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
21
// for more details.
22
//
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.
26
//
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.
33
//
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.
36
//
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####
43
//
44
// Author(s):    gthomas
45
// Contributors: gthomas
46
// Date:         2002-08-06
47
// Purpose:      
48
// Description:  
49
//              
50
// This code is part of RedBoot (tm).
51
//
52
//####DESCRIPTIONEND####
53
//
54
//==========================================================================
55
 
56
#include <redboot.h>
57
 
58
RedBoot_cmd("dump",
59
            "Display (hex dump) a range of memory",
60
            "-b <location> [-l <length>] [-s] [-1|2|4]",
61
            do_dump
62
    );
63
RedBoot_cmd("x",
64
            "Display (hex dump) a range of memory",
65
            "-b <location> [-l <length>] [-s] [-1|2|4]",
66
            do_x
67
    );
68
 
69
void
70
do_dump(int argc, char *argv[])
71
{
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;
78
    int i, n, off, cksum;
79
    cyg_uint8 ch;
80
 
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, "")) {
94
        return;
95
    }
96
    if (!base_set) {
97
        if (_base == 0) {
98
            diag_printf("Dump what [location]?\n");
99
            return;
100
        }
101
        base = _base;
102
        if (!len_set) {
103
            len = _len;
104
            len_set = true;
105
        }
106
    }
107
 
108
    if (set_32bit) {
109
      _size = 4;
110
    } else if (set_16bit) {
111
      _size = 2;
112
    } else if (set_8bit) {
113
      _size = 1;
114
    }
115
 
116
    if (!len_set) {
117
        len = 32;
118
    }
119
    if (srec_dump) {
120
        off = 0;
121
        while (off < len) {
122
            n = (len > 16) ? 16 : len;
123
            cksum = n+5;
124
            diag_printf("S3%02X%08X", n+5, off+base);
125
            for (i = 0;  i < 4;  i++) {
126
                cksum += (((base+off)>>(i*8)) & 0xFF);
127
            }
128
            for (i = 0;  i < n;  i++) {
129
                ch = *(cyg_uint8 *)(base+off+i);
130
                diag_printf("%02X", ch);
131
                cksum += ch;
132
            }
133
            diag_printf("%02X\n", ~cksum & 0xFF);
134
            off += n;
135
        }
136
    } else {
137
        switch( _size ) {
138
        case 1:
139
            diag_dump_buf((void *)base, len);
140
            break;
141
        case 2:
142
            diag_dump_buf_16bit((void *)base, len);
143
            break;
144
        case 4:
145
            diag_dump_buf_32bit((void *)base, len);
146
            break;
147
        }
148
    }
149
    _base = base + len;
150
    _len = len;
151
}
152
 
153
// Simple alias for the dump command
154
void
155
do_x(int argc, char *argv[])
156
{
157
    do_dump(argc, argv);
158
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.