diff options
Diffstat (limited to 'arch/m68k/tools/amiga/dmesg.c')
-rw-r--r-- | arch/m68k/tools/amiga/dmesg.c | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/arch/m68k/tools/amiga/dmesg.c b/arch/m68k/tools/amiga/dmesg.c new file mode 100644 index 000000000000..e892748e7386 --- /dev/null +++ b/arch/m68k/tools/amiga/dmesg.c | |||
@@ -0,0 +1,69 @@ | |||
1 | /* | ||
2 | * linux/arch/m68k/tools/amiga/dmesg.c -- Retrieve the kernel messages stored | ||
3 | * in Chip RAM with the kernel command | ||
4 | * line option `debug=mem'. | ||
5 | * | ||
6 | * © Copyright 1996 by Geert Uytterhoeven <geert@linux-m68k.org> | ||
7 | * | ||
8 | * | ||
9 | * Usage: | ||
10 | * | ||
11 | * dmesg | ||
12 | * dmesg <CHIPMEM_END> | ||
13 | * | ||
14 | * | ||
15 | * This file is subject to the terms and conditions of the GNU General Public | ||
16 | * License. See the file COPYING in the main directory of the Linux | ||
17 | * distribution for more details. | ||
18 | */ | ||
19 | |||
20 | |||
21 | #include <stdio.h> | ||
22 | #include <stdlib.h> | ||
23 | #include <unistd.h> | ||
24 | |||
25 | |||
26 | #define CHIPMEM_START 0x00000000 | ||
27 | #define CHIPMEM_END 0x00200000 /* overridden by argv[1] */ | ||
28 | |||
29 | #define SAVEKMSG_MAGIC1 0x53415645 /* 'SAVE' */ | ||
30 | #define SAVEKMSG_MAGIC2 0x4B4D5347 /* 'KMSG' */ | ||
31 | |||
32 | struct savekmsg { | ||
33 | u_long magic1; /* SAVEKMSG_MAGIC1 */ | ||
34 | u_long magic2; /* SAVEKMSG_MAGIC2 */ | ||
35 | u_long magicptr; /* address of magic1 */ | ||
36 | u_long size; | ||
37 | char data[0]; | ||
38 | }; | ||
39 | |||
40 | |||
41 | int main(int argc, char *argv[]) | ||
42 | { | ||
43 | u_long start = CHIPMEM_START, end = CHIPMEM_END, p; | ||
44 | int found = 0; | ||
45 | struct savekmsg *m = NULL; | ||
46 | |||
47 | if (argc >= 2) | ||
48 | end = strtoul(argv[1], NULL, 0); | ||
49 | printf("Searching for SAVEKMSG magic...\n"); | ||
50 | for (p = start; p <= end-sizeof(struct savekmsg); p += 4) { | ||
51 | m = (struct savekmsg *)p; | ||
52 | if ((m->magic1 == SAVEKMSG_MAGIC1) && (m->magic2 == SAVEKMSG_MAGIC2) && | ||
53 | (m->magicptr == p)) { | ||
54 | found = 1; | ||
55 | break; | ||
56 | } | ||
57 | } | ||
58 | if (!found) | ||
59 | printf("Not found\n"); | ||
60 | else { | ||
61 | printf("Found %ld bytes at 0x%08lx\n", m->size, (u_long)&m->data); | ||
62 | puts(">>>>>>>>>>>>>>>>>>>>"); | ||
63 | fflush(stdout); | ||
64 | write(1, &m->data, m->size); | ||
65 | fflush(stdout); | ||
66 | puts("<<<<<<<<<<<<<<<<<<<<"); | ||
67 | } | ||
68 | return(0); | ||
69 | } | ||