| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  *  linux/arch/m68k/tools/amiga/dmesg.c -- Retrieve the kernel messages stored | 
					
						
							|  |  |  |  *					   in Chip RAM with the kernel command | 
					
						
							|  |  |  |  *					   line option `debug=mem'. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2007-10-19 23:21:04 +02:00
										 |  |  |  *  © Copyright 1996 by Geert Uytterhoeven <geert@linux-m68k.org> | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |  * | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  Usage: | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *	dmesg | 
					
						
							|  |  |  |  *	dmesg <CHIPMEM_END> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  This file is subject to the terms and conditions of the GNU General Public | 
					
						
							|  |  |  |  *  License.  See the file COPYING in the main directory of the Linux | 
					
						
							|  |  |  |  *  distribution for more details. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <stdio.h>
 | 
					
						
							|  |  |  | #include <stdlib.h>
 | 
					
						
							|  |  |  | #include <unistd.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define CHIPMEM_START	0x00000000
 | 
					
						
							|  |  |  | #define CHIPMEM_END	0x00200000	/* overridden by argv[1] */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define SAVEKMSG_MAGIC1	0x53415645	/* 'SAVE' */
 | 
					
						
							|  |  |  | #define SAVEKMSG_MAGIC2	0x4B4D5347	/* 'KMSG' */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct savekmsg { | 
					
						
							|  |  |  |     u_long magic1;	/* SAVEKMSG_MAGIC1 */ | 
					
						
							|  |  |  |     u_long magic2;	/* SAVEKMSG_MAGIC2 */ | 
					
						
							|  |  |  |     u_long magicptr;	/* address of magic1 */ | 
					
						
							|  |  |  |     u_long size; | 
					
						
							|  |  |  |     char data[0]; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int main(int argc, char *argv[]) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     u_long start = CHIPMEM_START, end = CHIPMEM_END, p; | 
					
						
							|  |  |  |     int found = 0; | 
					
						
							|  |  |  |     struct savekmsg *m = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (argc >= 2) | 
					
						
							|  |  |  | 	end = strtoul(argv[1], NULL, 0); | 
					
						
							|  |  |  |     printf("Searching for SAVEKMSG magic...\n"); | 
					
						
							|  |  |  |     for (p = start; p <= end-sizeof(struct savekmsg); p += 4) { | 
					
						
							|  |  |  | 	m = (struct savekmsg *)p; | 
					
						
							|  |  |  | 	if ((m->magic1 == SAVEKMSG_MAGIC1) && (m->magic2 == SAVEKMSG_MAGIC2) && | 
					
						
							|  |  |  | 	    (m->magicptr == p)) { | 
					
						
							|  |  |  | 	    found = 1; | 
					
						
							|  |  |  | 	    break; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     if (!found) | 
					
						
							|  |  |  | 	printf("Not found\n"); | 
					
						
							|  |  |  |     else { | 
					
						
							|  |  |  | 	printf("Found %ld bytes at 0x%08lx\n", m->size, (u_long)&m->data); | 
					
						
							|  |  |  | 	puts(">>>>>>>>>>>>>>>>>>>>"); | 
					
						
							|  |  |  | 	fflush(stdout); | 
					
						
							|  |  |  | 	write(1, &m->data, m->size); | 
					
						
							|  |  |  | 	fflush(stdout); | 
					
						
							|  |  |  | 	puts("<<<<<<<<<<<<<<<<<<<<"); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return(0); | 
					
						
							|  |  |  | } |