1 /* $NetBSD: monitor.c,v 1.8 2008/04/28 20:23:15 martin Exp $ */
4 * Copyright (c) 1996, 1997 The NetBSD Foundation, Inc.
7 * This code is derived from software contributed to The NetBSD Foundation
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
32 #include <lib/libsa/stand.h>
33 #include <lib/libkern/libkern.h>
40 void db_cmd_dump(int, char **);
41 void db_cmd_get(int, char **);
42 void db_cmd_mf(int, char **);
43 void db_cmd_mt(int, char **);
44 void db_cmd_put(int, char **);
45 void db_cmd_help(int, char **);
51 void (*fcn
)(int, char **);
53 { "dump", db_cmd_dump
},
54 { "get", db_cmd_get
},
57 { "put", db_cmd_put
},
58 { "help", db_cmd_help
},
75 for (p
= line
, argc
= 0; *p
!= '\0'; p
++) {
76 if (*p
!= ' ' && *p
!= '\t') {
93 while (db_cmd
[tmp
].name
!= NULL
) {
94 if (!strcmp("continue", argv
[0]))
96 if (!strcmp(db_cmd
[tmp
].name
, argv
[0])) {
97 (db_cmd
[tmp
].fcn
)(argc
, argv
);
102 if (db_cmd
[tmp
].name
== NULL
)
103 db_cmd_help(argc
, argv
);
111 int b
= 0, width
, tmp
, exp
, x
= 0;
120 for (tmp
= 1; tmp
<= width
; tmp
++)
121 exp
*= (x
? 16 : 10);
122 if (*p
>= '0' && *p
<= '9') {
134 db_cmd_dump(int argc
, char **argv
)
137 int mode
, add
, size
, i
;
172 printf("\n0x%x:", add
);
175 printf(" %x", *(unsigned char *)add
);
182 printf(" %x", *(unsigned short *)add
);
189 printf(" %x", *(unsigned int *)add
);
201 printf("dump [-b][-h][-w] address size\n");
206 db_cmd_get(int argc
, char **argv
)
238 printf("0x%x: ", add
);
241 printf("0x%x", *(char *)add
);
244 printf("0x%x", *(short *)add
);
247 printf("0x%x", *(int *)add
);
254 printf("get [-b][-h][-w] address\n");
259 db_cmd_put(int argc
, char **argv
)
294 printf("0x%x: 0x%x", add
, data
);
300 *(short *)add
= data
;
310 printf("put [-b][-h][-w] address data\n");
317 unsigned int mf ## x(void); \
318 void mt ## x(unsigned int); \
319 unsigned int mf ## x() { \
321 __asm volatile (STR(mf ## x %0) : STR(=r)(tmp)); \
324 void mt ## x(unsigned int data) \
326 __asm volatile (STR(mt ## x %0) :: STR(r)(data)); \
330 { #x, mf ## x, mt ## x }
336 unsigned int (*mf
)(void);
337 void (*mt
)(unsigned int);
340 { NULL
, NULL
, NULL
},
344 db_cmd_mf(int argc
, char **argv
)
349 printf("mf register\nregister:");
350 while (mreg
[i
].op
!= NULL
)
351 printf(" %s", mreg
[i
++].op
);
356 while (mreg
[i
].op
!= NULL
) {
357 if (!strcmp(mreg
[i
].op
, argv
[1])) {
358 printf(" 0x%x\n", (mreg
[i
].mf
)());
366 db_cmd_mt(int argc
, char **argv
)
371 printf("mt register data\nregister:");
372 while (mreg
[i
].op
!= NULL
)
373 printf(" %s", mreg
[i
++].op
);
378 while (mreg
[i
].op
!= NULL
) {
379 if (!strcmp(mreg
[i
].op
, argv
[1])) {
380 (mreg
[i
].mt
)((unsigned int)db_atob(argv
[2]));
381 printf(" 0x%x\n", db_atob(argv
[2]));
389 db_cmd_help(int argc
, char **argv
)
393 while (db_cmd
[i
].name
!= NULL
)
394 printf("%s, ", db_cmd
[i
++].name
);