126 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * 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 */
 |