File: /usr/src/linux/include/asm-mips64/sn/nmi.h

1     /* 
2      * This file is subject to the terms and conditions of the GNU General Public
3      * License.  See the file "COPYING" in the main directory of this archive
4      * for more details.
5      *
6      * Copyright (C) 1992 - 1997 Silicon Graphics, Inc.
7      */
8     #ifndef __ASM_SN_NMI_H
9     #define __ASM_SN_NMI_H
10     
11     #ident "$Revision: 1.2 $"
12     
13     #include <asm/sn/addrs.h>
14     
15     /*
16      * The launch data structure resides at a fixed place in each node's memory
17      * and is used to communicate between the master processor and the slave
18      * processors.
19      *
20      * The master stores launch parameters in the launch structure
21      * corresponding to a target processor that is in a slave loop, then sends
22      * an interrupt to the slave processor.  The slave calls the desired
23      * function, followed by an optional rendezvous function, then returns to
24      * the slave loop.  The master does not wait for the slaves before
25      * returning.
26      *
27      * There is an array of launch structures, one per CPU on the node.  One
28      * interrupt level is used per CPU.
29      */
30     
31     #define NMI_MAGIC		0x48414d4d455201
32     #define NMI_SIZEOF		0x40
33     
34     #define NMI_OFF_MAGIC		0x00	/* Struct offsets for assembly      */
35     #define NMI_OFF_FLAGS		0x08
36     #define NMI_OFF_CALL		0x10
37     #define NMI_OFF_CALLC		0x18
38     #define NMI_OFF_CALLPARM	0x20
39     #define NMI_OFF_GMASTER		0x28
40     
41     /*
42      * The NMI routine is called only if the complement address is
43      * correct.
44      *
45      * Before control is transferred to a routine, the compliment address
46      * is zeroed (invalidated) to prevent an accidental call from a spurious
47      * interrupt.
48      *
49      */
50     
51     #ifdef _LANGUAGE_C
52     
53     typedef struct nmi_s {
54     	volatile unsigned long	 magic;		/* Magic number */
55     	volatile unsigned long	 flags;		/* Combination of flags above */
56     	volatile void *call_addr;	/* Routine for slave to call        */
57     	volatile void *call_addr_c;	/* 1's complement of address        */
58     	volatile void *call_parm;	/* Single parm passed to call	    */
59     	volatile unsigned long	 gmaster;	/* Flag true only on global master*/
60     } nmi_t;
61     
62     #endif /* _LANGUAGE_C */
63     
64     /* Following definitions are needed both in the prom & the kernel
65      * to identify the format of the nmi cpu register save area in the
66      * low memory on each node.
67      */
68     #ifdef _LANGUAGE_C
69     
70     struct reg_struct {
71     	unsigned long	gpr[32];
72     	unsigned long	sr;
73     	unsigned long	cause;
74     	unsigned long	epc;
75     	unsigned long	badva;
76     	unsigned long	error_epc;
77     	unsigned long	cache_err;
78     	unsigned long	nmi_sr;
79     };
80     
81     #endif /* _LANGUAGE_C */
82     
83     /* These are the assembly language offsets into the reg_struct structure */
84     
85     #define R0_OFF		0x0
86     #define R1_OFF		0x8
87     #define R2_OFF		0x10
88     #define R3_OFF		0x18
89     #define R4_OFF		0x20
90     #define R5_OFF		0x28
91     #define R6_OFF		0x30
92     #define R7_OFF		0x38
93     #define R8_OFF		0x40
94     #define R9_OFF		0x48
95     #define R10_OFF		0x50
96     #define R11_OFF		0x58
97     #define R12_OFF		0x60
98     #define R13_OFF		0x68
99     #define R14_OFF		0x70
100     #define R15_OFF		0x78
101     #define R16_OFF		0x80
102     #define R17_OFF		0x88
103     #define R18_OFF		0x90
104     #define R19_OFF		0x98
105     #define R20_OFF		0xa0
106     #define R21_OFF		0xa8
107     #define R22_OFF		0xb0
108     #define R23_OFF		0xb8
109     #define R24_OFF		0xc0
110     #define R25_OFF		0xc8
111     #define R26_OFF		0xd0
112     #define R27_OFF		0xd8
113     #define R28_OFF		0xe0
114     #define R29_OFF		0xe8
115     #define R30_OFF		0xf0
116     #define R31_OFF		0xf8
117     #define SR_OFF		0x100
118     #define CAUSE_OFF	0x108
119     #define EPC_OFF		0x110
120     #define BADVA_OFF	0x118
121     #define ERROR_EPC_OFF	0x120
122     #define CACHE_ERR_OFF	0x128
123     #define NMISR_OFF	0x130
124     
125     #endif /* __ASM_SN_NMI_H */
126