diff options
author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
commit | 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch) | |
tree | 0bba044c4ce775e45a88a51686b5d9f90697ea9d /arch/ppc/syslib/open_pic_defs.h |
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.
Let it rip!
Diffstat (limited to 'arch/ppc/syslib/open_pic_defs.h')
-rw-r--r-- | arch/ppc/syslib/open_pic_defs.h | 292 |
1 files changed, 292 insertions, 0 deletions
diff --git a/arch/ppc/syslib/open_pic_defs.h b/arch/ppc/syslib/open_pic_defs.h new file mode 100644 index 000000000000..4f05624b249e --- /dev/null +++ b/arch/ppc/syslib/open_pic_defs.h | |||
@@ -0,0 +1,292 @@ | |||
1 | /* | ||
2 | * arch/ppc/kernel/open_pic_defs.h -- OpenPIC definitions | ||
3 | * | ||
4 | * Copyright (C) 1997 Geert Uytterhoeven | ||
5 | * | ||
6 | * This file is based on the following documentation: | ||
7 | * | ||
8 | * The Open Programmable Interrupt Controller (PIC) | ||
9 | * Register Interface Specification Revision 1.2 | ||
10 | * | ||
11 | * Issue Date: October 1995 | ||
12 | * | ||
13 | * Issued jointly by Advanced Micro Devices and Cyrix Corporation | ||
14 | * | ||
15 | * AMD is a registered trademark of Advanced Micro Devices, Inc. | ||
16 | * Copyright (C) 1995, Advanced Micro Devices, Inc. and Cyrix, Inc. | ||
17 | * All Rights Reserved. | ||
18 | * | ||
19 | * To receive a copy of this documentation, send an email to openpic@amd.com. | ||
20 | * | ||
21 | * This file is subject to the terms and conditions of the GNU General Public | ||
22 | * License. See the file COPYING in the main directory of this archive | ||
23 | * for more details. | ||
24 | */ | ||
25 | |||
26 | #ifndef _LINUX_OPENPIC_H | ||
27 | #define _LINUX_OPENPIC_H | ||
28 | |||
29 | #ifdef __KERNEL__ | ||
30 | |||
31 | /* | ||
32 | * OpenPIC supports up to 2048 interrupt sources and up to 32 processors | ||
33 | */ | ||
34 | |||
35 | #define OPENPIC_MAX_SOURCES 2048 | ||
36 | #define OPENPIC_MAX_PROCESSORS 32 | ||
37 | #define OPENPIC_MAX_ISU 16 | ||
38 | |||
39 | #define OPENPIC_NUM_TIMERS 4 | ||
40 | #define OPENPIC_NUM_IPI 4 | ||
41 | #define OPENPIC_NUM_PRI 16 | ||
42 | #define OPENPIC_NUM_VECTORS 256 | ||
43 | |||
44 | |||
45 | |||
46 | /* | ||
47 | * OpenPIC Registers are 32 bits and aligned on 128 bit boundaries | ||
48 | */ | ||
49 | |||
50 | typedef struct _OpenPIC_Reg { | ||
51 | u_int Reg; /* Little endian! */ | ||
52 | char Pad[0xc]; | ||
53 | } OpenPIC_Reg; | ||
54 | |||
55 | |||
56 | /* | ||
57 | * Per Processor Registers | ||
58 | */ | ||
59 | |||
60 | typedef struct _OpenPIC_Processor { | ||
61 | /* | ||
62 | * Private Shadow Registers (for SLiC backwards compatibility) | ||
63 | */ | ||
64 | u_int IPI0_Dispatch_Shadow; /* Write Only */ | ||
65 | char Pad1[0x4]; | ||
66 | u_int IPI0_Vector_Priority_Shadow; /* Read/Write */ | ||
67 | char Pad2[0x34]; | ||
68 | /* | ||
69 | * Interprocessor Interrupt Command Ports | ||
70 | */ | ||
71 | OpenPIC_Reg _IPI_Dispatch[OPENPIC_NUM_IPI]; /* Write Only */ | ||
72 | /* | ||
73 | * Current Task Priority Register | ||
74 | */ | ||
75 | OpenPIC_Reg _Current_Task_Priority; /* Read/Write */ | ||
76 | char Pad3[0x10]; | ||
77 | /* | ||
78 | * Interrupt Acknowledge Register | ||
79 | */ | ||
80 | OpenPIC_Reg _Interrupt_Acknowledge; /* Read Only */ | ||
81 | /* | ||
82 | * End of Interrupt (EOI) Register | ||
83 | */ | ||
84 | OpenPIC_Reg _EOI; /* Read/Write */ | ||
85 | char Pad5[0xf40]; | ||
86 | } OpenPIC_Processor; | ||
87 | |||
88 | |||
89 | /* | ||
90 | * Timer Registers | ||
91 | */ | ||
92 | |||
93 | typedef struct _OpenPIC_Timer { | ||
94 | OpenPIC_Reg _Current_Count; /* Read Only */ | ||
95 | OpenPIC_Reg _Base_Count; /* Read/Write */ | ||
96 | OpenPIC_Reg _Vector_Priority; /* Read/Write */ | ||
97 | OpenPIC_Reg _Destination; /* Read/Write */ | ||
98 | } OpenPIC_Timer; | ||
99 | |||
100 | |||
101 | /* | ||
102 | * Global Registers | ||
103 | */ | ||
104 | |||
105 | typedef struct _OpenPIC_Global { | ||
106 | /* | ||
107 | * Feature Reporting Registers | ||
108 | */ | ||
109 | OpenPIC_Reg _Feature_Reporting0; /* Read Only */ | ||
110 | OpenPIC_Reg _Feature_Reporting1; /* Future Expansion */ | ||
111 | /* | ||
112 | * Global Configuration Registers | ||
113 | */ | ||
114 | OpenPIC_Reg _Global_Configuration0; /* Read/Write */ | ||
115 | OpenPIC_Reg _Global_Configuration1; /* Future Expansion */ | ||
116 | /* | ||
117 | * Vendor Specific Registers | ||
118 | */ | ||
119 | OpenPIC_Reg _Vendor_Specific[4]; | ||
120 | /* | ||
121 | * Vendor Identification Register | ||
122 | */ | ||
123 | OpenPIC_Reg _Vendor_Identification; /* Read Only */ | ||
124 | /* | ||
125 | * Processor Initialization Register | ||
126 | */ | ||
127 | OpenPIC_Reg _Processor_Initialization; /* Read/Write */ | ||
128 | /* | ||
129 | * IPI Vector/Priority Registers | ||
130 | */ | ||
131 | OpenPIC_Reg _IPI_Vector_Priority[OPENPIC_NUM_IPI]; /* Read/Write */ | ||
132 | /* | ||
133 | * Spurious Vector Register | ||
134 | */ | ||
135 | OpenPIC_Reg _Spurious_Vector; /* Read/Write */ | ||
136 | /* | ||
137 | * Global Timer Registers | ||
138 | */ | ||
139 | OpenPIC_Reg _Timer_Frequency; /* Read/Write */ | ||
140 | OpenPIC_Timer Timer[OPENPIC_NUM_TIMERS]; | ||
141 | char Pad1[0xee00]; | ||
142 | } OpenPIC_Global; | ||
143 | |||
144 | |||
145 | /* | ||
146 | * Interrupt Source Registers | ||
147 | */ | ||
148 | |||
149 | typedef struct _OpenPIC_Source { | ||
150 | OpenPIC_Reg _Vector_Priority; /* Read/Write */ | ||
151 | OpenPIC_Reg _Destination; /* Read/Write */ | ||
152 | } OpenPIC_Source, *OpenPIC_SourcePtr; | ||
153 | |||
154 | |||
155 | /* | ||
156 | * OpenPIC Register Map | ||
157 | */ | ||
158 | |||
159 | struct OpenPIC { | ||
160 | char Pad1[0x1000]; | ||
161 | /* | ||
162 | * Global Registers | ||
163 | */ | ||
164 | OpenPIC_Global Global; | ||
165 | /* | ||
166 | * Interrupt Source Configuration Registers | ||
167 | */ | ||
168 | OpenPIC_Source Source[OPENPIC_MAX_SOURCES]; | ||
169 | /* | ||
170 | * Per Processor Registers | ||
171 | */ | ||
172 | OpenPIC_Processor Processor[OPENPIC_MAX_PROCESSORS]; | ||
173 | }; | ||
174 | |||
175 | extern volatile struct OpenPIC __iomem *OpenPIC; | ||
176 | |||
177 | |||
178 | /* | ||
179 | * Current Task Priority Register | ||
180 | */ | ||
181 | |||
182 | #define OPENPIC_CURRENT_TASK_PRIORITY_MASK 0x0000000f | ||
183 | |||
184 | /* | ||
185 | * Who Am I Register | ||
186 | */ | ||
187 | |||
188 | #define OPENPIC_WHO_AM_I_ID_MASK 0x0000001f | ||
189 | |||
190 | /* | ||
191 | * Feature Reporting Register 0 | ||
192 | */ | ||
193 | |||
194 | #define OPENPIC_FEATURE_LAST_SOURCE_MASK 0x07ff0000 | ||
195 | #define OPENPIC_FEATURE_LAST_SOURCE_SHIFT 16 | ||
196 | #define OPENPIC_FEATURE_LAST_PROCESSOR_MASK 0x00001f00 | ||
197 | #define OPENPIC_FEATURE_LAST_PROCESSOR_SHIFT 8 | ||
198 | #define OPENPIC_FEATURE_VERSION_MASK 0x000000ff | ||
199 | |||
200 | /* | ||
201 | * Global Configuration Register 0 | ||
202 | */ | ||
203 | |||
204 | #define OPENPIC_CONFIG_RESET 0x80000000 | ||
205 | #define OPENPIC_CONFIG_8259_PASSTHROUGH_DISABLE 0x20000000 | ||
206 | #define OPENPIC_CONFIG_BASE_MASK 0x000fffff | ||
207 | |||
208 | /* | ||
209 | * Global Configuration Register 1 | ||
210 | * This is the EICR on EPICs. | ||
211 | */ | ||
212 | |||
213 | #define OPENPIC_EICR_S_CLK_MASK 0x70000000 | ||
214 | #define OPENPIC_EICR_SIE 0x08000000 | ||
215 | |||
216 | /* | ||
217 | * Vendor Identification Register | ||
218 | */ | ||
219 | |||
220 | #define OPENPIC_VENDOR_ID_STEPPING_MASK 0x00ff0000 | ||
221 | #define OPENPIC_VENDOR_ID_STEPPING_SHIFT 16 | ||
222 | #define OPENPIC_VENDOR_ID_DEVICE_ID_MASK 0x0000ff00 | ||
223 | #define OPENPIC_VENDOR_ID_DEVICE_ID_SHIFT 8 | ||
224 | #define OPENPIC_VENDOR_ID_VENDOR_ID_MASK 0x000000ff | ||
225 | |||
226 | /* | ||
227 | * Vector/Priority Registers | ||
228 | */ | ||
229 | |||
230 | #define OPENPIC_MASK 0x80000000 | ||
231 | #define OPENPIC_ACTIVITY 0x40000000 /* Read Only */ | ||
232 | #define OPENPIC_PRIORITY_MASK 0x000f0000 | ||
233 | #define OPENPIC_PRIORITY_SHIFT 16 | ||
234 | #define OPENPIC_VECTOR_MASK 0x000000ff | ||
235 | |||
236 | |||
237 | /* | ||
238 | * Interrupt Source Registers | ||
239 | */ | ||
240 | |||
241 | #define OPENPIC_POLARITY_POSITIVE 0x00800000 | ||
242 | #define OPENPIC_POLARITY_NEGATIVE 0x00000000 | ||
243 | #define OPENPIC_POLARITY_MASK 0x00800000 | ||
244 | #define OPENPIC_SENSE_LEVEL 0x00400000 | ||
245 | #define OPENPIC_SENSE_EDGE 0x00000000 | ||
246 | #define OPENPIC_SENSE_MASK 0x00400000 | ||
247 | |||
248 | |||
249 | /* | ||
250 | * Timer Registers | ||
251 | */ | ||
252 | |||
253 | #define OPENPIC_COUNT_MASK 0x7fffffff | ||
254 | #define OPENPIC_TIMER_TOGGLE 0x80000000 | ||
255 | #define OPENPIC_TIMER_COUNT_INHIBIT 0x80000000 | ||
256 | |||
257 | |||
258 | /* | ||
259 | * Aliases to make life simpler | ||
260 | */ | ||
261 | |||
262 | /* Per Processor Registers */ | ||
263 | #define IPI_Dispatch(i) _IPI_Dispatch[i].Reg | ||
264 | #define Current_Task_Priority _Current_Task_Priority.Reg | ||
265 | #define Interrupt_Acknowledge _Interrupt_Acknowledge.Reg | ||
266 | #define EOI _EOI.Reg | ||
267 | |||
268 | /* Global Registers */ | ||
269 | #define Feature_Reporting0 _Feature_Reporting0.Reg | ||
270 | #define Feature_Reporting1 _Feature_Reporting1.Reg | ||
271 | #define Global_Configuration0 _Global_Configuration0.Reg | ||
272 | #define Global_Configuration1 _Global_Configuration1.Reg | ||
273 | #define Vendor_Specific(i) _Vendor_Specific[i].Reg | ||
274 | #define Vendor_Identification _Vendor_Identification.Reg | ||
275 | #define Processor_Initialization _Processor_Initialization.Reg | ||
276 | #define IPI_Vector_Priority(i) _IPI_Vector_Priority[i].Reg | ||
277 | #define Spurious_Vector _Spurious_Vector.Reg | ||
278 | #define Timer_Frequency _Timer_Frequency.Reg | ||
279 | |||
280 | /* Timer Registers */ | ||
281 | #define Current_Count _Current_Count.Reg | ||
282 | #define Base_Count _Base_Count.Reg | ||
283 | #define Vector_Priority _Vector_Priority.Reg | ||
284 | #define Destination _Destination.Reg | ||
285 | |||
286 | /* Interrupt Source Registers */ | ||
287 | #define Vector_Priority _Vector_Priority.Reg | ||
288 | #define Destination _Destination.Reg | ||
289 | |||
290 | #endif /* __KERNEL__ */ | ||
291 | |||
292 | #endif /* _LINUX_OPENPIC_H */ | ||