root/arch/m68k/tools/amiga/dmesg.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. main

   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 }

/* [<][>][^][v][top][bottom][index][help] */