1384740dcSRalf Baechle /* 2384740dcSRalf Baechle * This file is subject to the terms and conditions of the GNU General Public 3384740dcSRalf Baechle * License. See the file "COPYING" in the main directory of this archive 4384740dcSRalf Baechle * for more details. 5384740dcSRalf Baechle * 6*165533c3SRalf Baechle * Derived from IRIX <sys/SN/nmi.h>, Revision 1.5. 7*165533c3SRalf Baechle * 8384740dcSRalf Baechle * Copyright (C) 1992 - 1997 Silicon Graphics, Inc. 9384740dcSRalf Baechle */ 10384740dcSRalf Baechle #ifndef __ASM_SN_NMI_H 11384740dcSRalf Baechle #define __ASM_SN_NMI_H 12384740dcSRalf Baechle 13384740dcSRalf Baechle #include <asm/sn/addrs.h> 14384740dcSRalf Baechle 15384740dcSRalf Baechle /* 16384740dcSRalf Baechle * The launch data structure resides at a fixed place in each node's memory 17384740dcSRalf Baechle * and is used to communicate between the master processor and the slave 18384740dcSRalf Baechle * processors. 19384740dcSRalf Baechle * 20384740dcSRalf Baechle * The master stores launch parameters in the launch structure 21384740dcSRalf Baechle * corresponding to a target processor that is in a slave loop, then sends 22384740dcSRalf Baechle * an interrupt to the slave processor. The slave calls the desired 23384740dcSRalf Baechle * function, followed by an optional rendezvous function, then returns to 24384740dcSRalf Baechle * the slave loop. The master does not wait for the slaves before 25384740dcSRalf Baechle * returning. 26384740dcSRalf Baechle * 27384740dcSRalf Baechle * There is an array of launch structures, one per CPU on the node. One 28384740dcSRalf Baechle * interrupt level is used per CPU. 29384740dcSRalf Baechle */ 30384740dcSRalf Baechle 31384740dcSRalf Baechle #define NMI_MAGIC 0x48414d4d455201 32384740dcSRalf Baechle #define NMI_SIZEOF 0x40 33384740dcSRalf Baechle 34384740dcSRalf Baechle #define NMI_OFF_MAGIC 0x00 /* Struct offsets for assembly */ 35384740dcSRalf Baechle #define NMI_OFF_FLAGS 0x08 36384740dcSRalf Baechle #define NMI_OFF_CALL 0x10 37384740dcSRalf Baechle #define NMI_OFF_CALLC 0x18 38384740dcSRalf Baechle #define NMI_OFF_CALLPARM 0x20 39384740dcSRalf Baechle #define NMI_OFF_GMASTER 0x28 40384740dcSRalf Baechle 41384740dcSRalf Baechle /* 42384740dcSRalf Baechle * The NMI routine is called only if the complement address is 43384740dcSRalf Baechle * correct. 44384740dcSRalf Baechle * 45384740dcSRalf Baechle * Before control is transferred to a routine, the complement address 46384740dcSRalf Baechle * is zeroed (invalidated) to prevent an accidental call from a spurious 47384740dcSRalf Baechle * interrupt. 48384740dcSRalf Baechle * 49384740dcSRalf Baechle */ 50384740dcSRalf Baechle 51384740dcSRalf Baechle #ifndef __ASSEMBLY__ 52384740dcSRalf Baechle 53384740dcSRalf Baechle typedef struct nmi_s { 54384740dcSRalf Baechle volatile unsigned long magic; /* Magic number */ 55384740dcSRalf Baechle volatile unsigned long flags; /* Combination of flags above */ 56384740dcSRalf Baechle volatile void *call_addr; /* Routine for slave to call */ 57384740dcSRalf Baechle volatile void *call_addr_c; /* 1's complement of address */ 58384740dcSRalf Baechle volatile void *call_parm; /* Single parm passed to call */ 59384740dcSRalf Baechle volatile unsigned long gmaster; /* Flag true only on global master*/ 60384740dcSRalf Baechle } nmi_t; 61384740dcSRalf Baechle 62384740dcSRalf Baechle #endif /* !__ASSEMBLY__ */ 63384740dcSRalf Baechle 64384740dcSRalf Baechle /* Following definitions are needed both in the prom & the kernel 65384740dcSRalf Baechle * to identify the format of the nmi cpu register save area in the 66384740dcSRalf Baechle * low memory on each node. 67384740dcSRalf Baechle */ 68384740dcSRalf Baechle #ifndef __ASSEMBLY__ 69384740dcSRalf Baechle 70384740dcSRalf Baechle struct reg_struct { 71384740dcSRalf Baechle unsigned long gpr[32]; 72384740dcSRalf Baechle unsigned long sr; 73384740dcSRalf Baechle unsigned long cause; 74384740dcSRalf Baechle unsigned long epc; 75384740dcSRalf Baechle unsigned long badva; 76384740dcSRalf Baechle unsigned long error_epc; 77384740dcSRalf Baechle unsigned long cache_err; 78384740dcSRalf Baechle unsigned long nmi_sr; 79384740dcSRalf Baechle }; 80384740dcSRalf Baechle 81384740dcSRalf Baechle #endif /* !__ASSEMBLY__ */ 82384740dcSRalf Baechle 83384740dcSRalf Baechle /* These are the assembly language offsets into the reg_struct structure */ 84384740dcSRalf Baechle 85384740dcSRalf Baechle #define R0_OFF 0x0 86384740dcSRalf Baechle #define R1_OFF 0x8 87384740dcSRalf Baechle #define R2_OFF 0x10 88384740dcSRalf Baechle #define R3_OFF 0x18 89384740dcSRalf Baechle #define R4_OFF 0x20 90384740dcSRalf Baechle #define R5_OFF 0x28 91384740dcSRalf Baechle #define R6_OFF 0x30 92384740dcSRalf Baechle #define R7_OFF 0x38 93384740dcSRalf Baechle #define R8_OFF 0x40 94384740dcSRalf Baechle #define R9_OFF 0x48 95384740dcSRalf Baechle #define R10_OFF 0x50 96384740dcSRalf Baechle #define R11_OFF 0x58 97384740dcSRalf Baechle #define R12_OFF 0x60 98384740dcSRalf Baechle #define R13_OFF 0x68 99384740dcSRalf Baechle #define R14_OFF 0x70 100384740dcSRalf Baechle #define R15_OFF 0x78 101384740dcSRalf Baechle #define R16_OFF 0x80 102384740dcSRalf Baechle #define R17_OFF 0x88 103384740dcSRalf Baechle #define R18_OFF 0x90 104384740dcSRalf Baechle #define R19_OFF 0x98 105384740dcSRalf Baechle #define R20_OFF 0xa0 106384740dcSRalf Baechle #define R21_OFF 0xa8 107384740dcSRalf Baechle #define R22_OFF 0xb0 108384740dcSRalf Baechle #define R23_OFF 0xb8 109384740dcSRalf Baechle #define R24_OFF 0xc0 110384740dcSRalf Baechle #define R25_OFF 0xc8 111384740dcSRalf Baechle #define R26_OFF 0xd0 112384740dcSRalf Baechle #define R27_OFF 0xd8 113384740dcSRalf Baechle #define R28_OFF 0xe0 114384740dcSRalf Baechle #define R29_OFF 0xe8 115384740dcSRalf Baechle #define R30_OFF 0xf0 116384740dcSRalf Baechle #define R31_OFF 0xf8 117384740dcSRalf Baechle #define SR_OFF 0x100 118384740dcSRalf Baechle #define CAUSE_OFF 0x108 119384740dcSRalf Baechle #define EPC_OFF 0x110 120384740dcSRalf Baechle #define BADVA_OFF 0x118 121384740dcSRalf Baechle #define ERROR_EPC_OFF 0x120 122384740dcSRalf Baechle #define CACHE_ERR_OFF 0x128 123384740dcSRalf Baechle #define NMISR_OFF 0x130 124384740dcSRalf Baechle 125384740dcSRalf Baechle #endif /* __ASM_SN_NMI_H */ 126