| Viewing file:  nmi.h (3.31 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
/** This file is subject to the terms and conditions of the GNU General Public
 * License.  See the file "COPYING" in the main directory of this archive
 * for more details.
 *
 * Derived from IRIX <sys/SN/nmi.h>, Revision 1.5.
 *
 * Copyright (C) 1992 - 1997 Silicon Graphics, Inc.
 */
 #ifndef __ASM_SN_NMI_H
 #define __ASM_SN_NMI_H
 
 #include <asm/sn/addrs.h>
 
 /*
 * The launch data structure resides at a fixed place in each node's memory
 * and is used to communicate between the master processor and the slave
 * processors.
 *
 * The master stores launch parameters in the launch structure
 * corresponding to a target processor that is in a slave loop, then sends
 * an interrupt to the slave processor.     The slave calls the desired
 * function, followed by an optional rendezvous function, then returns to
 * the slave loop.  The master does not wait for the slaves before
 * returning.
 *
 * There is an array of launch structures, one per CPU on the node.  One
 * interrupt level is used per CPU.
 */
 
 #define NMI_MAGIC        0x48414d4d455201
 #define NMI_SIZEOF        0x40
 
 #define NMI_OFF_MAGIC        0x00    /* Struct offsets for assembly        */
 #define NMI_OFF_FLAGS        0x08
 #define NMI_OFF_CALL        0x10
 #define NMI_OFF_CALLC        0x18
 #define NMI_OFF_CALLPARM    0x20
 #define NMI_OFF_GMASTER        0x28
 
 /*
 * The NMI routine is called only if the complement address is
 * correct.
 *
 * Before control is transferred to a routine, the complement address
 * is zeroed (invalidated) to prevent an accidental call from a spurious
 * interrupt.
 *
 */
 
 #ifndef __ASSEMBLY__
 
 typedef struct nmi_s {
 volatile unsigned long     magic;        /* Magic number */
 volatile unsigned long     flags;        /* Combination of flags above */
 volatile void *call_addr;    /* Routine for slave to call        */
 volatile void *call_addr_c;    /* 1's complement of address        */
 volatile void *call_parm;    /* Single parm passed to call        */
 volatile unsigned long     gmaster;    /* Flag true only on global master*/
 } nmi_t;
 
 #endif /* !__ASSEMBLY__ */
 
 /* Following definitions are needed both in the prom & the kernel
 * to identify the format of the nmi cpu register save area in the
 * low memory on each node.
 */
 #ifndef __ASSEMBLY__
 
 struct reg_struct {
 unsigned long    gpr[32];
 unsigned long    sr;
 unsigned long    cause;
 unsigned long    epc;
 unsigned long    badva;
 unsigned long    error_epc;
 unsigned long    cache_err;
 unsigned long    nmi_sr;
 };
 
 #endif /* !__ASSEMBLY__ */
 
 /* These are the assembly language offsets into the reg_struct structure */
 
 #define R0_OFF        0x0
 #define R1_OFF        0x8
 #define R2_OFF        0x10
 #define R3_OFF        0x18
 #define R4_OFF        0x20
 #define R5_OFF        0x28
 #define R6_OFF        0x30
 #define R7_OFF        0x38
 #define R8_OFF        0x40
 #define R9_OFF        0x48
 #define R10_OFF        0x50
 #define R11_OFF        0x58
 #define R12_OFF        0x60
 #define R13_OFF        0x68
 #define R14_OFF        0x70
 #define R15_OFF        0x78
 #define R16_OFF        0x80
 #define R17_OFF        0x88
 #define R18_OFF        0x90
 #define R19_OFF        0x98
 #define R20_OFF        0xa0
 #define R21_OFF        0xa8
 #define R22_OFF        0xb0
 #define R23_OFF        0xb8
 #define R24_OFF        0xc0
 #define R25_OFF        0xc8
 #define R26_OFF        0xd0
 #define R27_OFF        0xd8
 #define R28_OFF        0xe0
 #define R29_OFF        0xe8
 #define R30_OFF        0xf0
 #define R31_OFF        0xf8
 #define SR_OFF        0x100
 #define CAUSE_OFF    0x108
 #define EPC_OFF        0x110
 #define BADVA_OFF    0x118
 #define ERROR_EPC_OFF    0x120
 #define CACHE_ERR_OFF    0x128
 #define NMISR_OFF    0x130
 
 #endif /* __ASM_SN_NMI_H */
 
 |