Blame view

kernel/linux-rt-4.4.41/arch/mips/include/asm/sn/nmi.h 3.31 KB
5113f6f70   김현기   kernel add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
  /*
   * 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 */