Annotation of sys/arch/mvmeppc/dev/ravenvar.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: ravenvar.h,v 1.3 2004/01/29 10:58:06 miod Exp $ */
2:
3: /*
4: * Copyright (c) 2001 Steve Murphree, Jr.
5: *
6: * Redistribution and use in source and binary forms, with or without
7: * modification, are permitted provided that the following conditions
8: * are met:
9: * 1. Redistributions of source code must retain the above copyright
10: * notice, this list of conditions and the following disclaimer.
11: * 2. Redistributions in binary form must reproduce the above copyright
12: * notice, this list of conditions and the following disclaimer in the
13: * documentation and/or other materials provided with the distribution.
14: * 3. All advertising materials mentioning features or use of this software
15: * must display the following acknowledgement:
16: * This product includes software developed under OpenBSD for RTMX Inc
17: * by Per Fogelstrom, Opsycon AB.
18: * 4. The name of the author may not be used to endorse or promote products
19: * derived from this software without specific prior written permission.
20: *
21: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
22: * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24: * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
25: * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31: * SUCH DAMAGE.
32: *
33: *
34: * Motorola 'Raven' PowerPC to PCI bridge controller
35: */
36:
37: #ifndef _DEV_RAVENVAR_H_
38: #define _DEV_RAVENVAR_H_
39:
40: #define MPCIC_BASE 0xFC000000
41: #define MPCIC_SIZE 0x00022000
42:
43: #define MPCIC_FEATURE 0x01000
44: #define MPCIC_GCR 0x01020
45: #define MPCIC_VID 0x01080
46: #define MPCIC_PINIT 0x01090
47: #define MPCIC_IPI0 0x010A0
48: #define MPCIC_IPI1 0x010B0
49: #define MPCIC_IPI2 0x010C0
50: #define MPCIC_IPI3 0x010D0
51: #define MPCIC_SP 0x010E0
52: #define MPCIC_TFR 0x010F0
53: #define MPCIC_T0CC 0x01100
54: #define MPCIC_T0BC 0x01110
55: #define MPCIC_T0VP 0x01120
56: #define MPCIC_T0D 0x01130
57: #define MPCIC_T1CC 0x01140
58: #define MPCIC_T1BC 0x01150
59: #define MPCIC_T1VP 0x01160
60: #define MPCIC_T1D 0x01170
61: #define MPCIC_T2CC 0x01180
62: #define MPCIC_T2BC 0x01190
63: #define MPCIC_T2VP 0x011A0
64: #define MPCIC_T2D 0x011B0
65: #define MPCIC_T3CC 0x011C0
66: #define MPCIC_T3BC 0x011D0
67: #define MPCIC_T3VP 0x011E0
68: #define MPCIC_T3D 0x011F0
69: #define MPCIC_INT0VP 0x10000
70: #define MPCIC_INT0D 0x10010
71: #define MPCIC_INT1VP 0x10020
72: #define MPCIC_INT1D 0x10030
73: #define MPCIC_INT2VP 0x10040
74: #define MPCIC_INT2D 0x10050
75: #define MPCIC_INT3VP 0x10060
76: #define MPCIC_INT3D 0x10070
77: #define MPCIC_INT4VP 0x10080
78: #define MPCIC_INT4D 0x10090
79: #define MPCIC_INT5VP 0x100A0
80: #define MPCIC_INT5D 0x100B0
81: #define MPCIC_INT6VP 0x100C0
82: #define MPCIC_INT6D 0x100D0
83: #define MPCIC_INT7VP 0x100E0
84: #define MPCIC_INT7D 0x100F0
85: #define MPCIC_INT8VP 0x10100
86: #define MPCIC_INT8D 0x10110
87: #define MPCIC_INT9VP 0x10120
88: #define MPCIC_INT9D 0x10130
89: #define MPCIC_INT10VP 0x10140
90: #define MPCIC_INT10D 0x10150
91: #define MPCIC_INT11VP 0x10160
92: #define MPCIC_INT11D 0x10170
93: #define MPCIC_INT12VP 0x10180
94: #define MPCIC_INT12D 0x10190
95: #define MPCIC_INT13VP 0x101A0
96: #define MPCIC_INT13D 0x101B0
97: #define MPCIC_INT14VP 0x101C0
98: #define MPCIC_INT14D 0x101D0
99: #define MPCIC_INT15VP 0x101E0
100: #define MPCIC_INT15D 0x101F0
101: #define MPCIC_EVP 0x10200
102: #define MPCIC_ED 0x10210
103: #define MPCIC_P0_IPI0_D 0x20040
104: #define MPCIC_P0_IPI1_D 0x20050
105: #define MPCIC_P0_IPI2_D 0x20060
106: #define MPCIC_P0_IPI3_D 0x20070
107: #define MPCIC_P0_TP 0x20080
108: #define MPCIC_P0_IACK 0x200A0
109: #define MPCIC_P0_EOI 0x200B0
110: #define MPCIC_P1_IPI0_D 0x21040
111: #define MPCIC_P1_IPI1_D 0x21050
112: #define MPCIC_P1_IPI2_D 0x21060
113: #define MPCIC_P1_IPI3_D 0x21070
114: #define MPCIC_P1_TP 0x21080
115: #define MPCIC_P1_IACK 0x210A0
116: #define MPCIC_P1_EOI 0x210B0
117:
118: #define PROC0 0x01
119: #define PROC1 0x02
120:
121: #define GCR_M 0x04
122: #define VP_MASKED 0x00000080
123: #define VP_LEVEL 0x00004000
124: #define VP_POL 0x00008000
125: #define VP_VEC(x) ((x) << 24)
126: #define VP_PRI(x) ((x) << 8)
127:
128: struct mpic_feature {
129: unsigned int res1 : 4,
130: nirq : 12,
131: res2 : 3,
132: ncpu : 5,
133: vid : 8;
134: };
135:
136: struct mpic_gcr {
137: unsigned int reset : 1,
138: res1 : 1,
139: cmode : 1,
140: res2 : 29;
141: };
142:
143: struct mpic_vid {
144: unsigned int res1 : 8,
145: stp : 8,
146: res2 : 16;
147: };
148:
149:
150: struct mpic_ipivp {
151: unsigned int masked : 1,
152: act : 1,
153: res1 : 10,
154: pri : 4,
155: res2 : 8,
156: vec : 8;
157: };
158:
159: struct mpic_timer_count {
160: unsigned int toggle : 1,
161: count : 31;
162: };
163:
164: struct mpic_timer_bcount {
165: unsigned int inhib : 1,
166: count : 31;
167: };
168:
169: struct mpic_timer_vp {
170: unsigned int masked : 1,
171: act : 1,
172: res1 : 10,
173: pri : 4,
174: res2 : 8,
175: vec : 8;
176: };
177:
178: struct mpic_timer {
179: struct mpic_timer_count *cr;
180: struct mpic_timer_bcount *bcr;
181: struct mpic_timer_vp *vp;
182: unsigned char *dest;
183: };
184:
185: struct mpic_ext_vp {
186: unsigned int masked : 1,
187: act : 1,
188: res1 : 6,
189: polarity : 1,
190: sense : 1,
191: res2 : 2,
192: pri : 4,
193: res3 : 8,
194: vec : 8;
195: };
196:
197: struct mpic_ext_intr {
198: volatile unsigned int *vp;
199: volatile unsigned char *dest;
200: };
201:
202: struct mpic_err_vp {
203: unsigned int masked : 1,
204: act : 1,
205: res3 : 7,
206: sense : 1,
207: res2 : 2,
208: pri : 4,
209: res1 : 8,
210: vec : 8;
211: };
212:
213: #if 1
214: struct raven_reg {
215: struct mpic_feature *feature;
216: unsigned int *gcr;
217: struct mpic_vid *vid;
218: char *p_init;
219: struct mpic_ipivp *ipi[4];
220: char *sp;
221: unsigned int *timer_freq;
222: struct mpic_timer timer[4];
223: /* external interrupt configuration registers */
224: struct mpic_ext_intr extint[16];
225: unsigned int *p0_ipi0d;
226: unsigned int *p0_ipi1d;
227: unsigned int *p0_ipi2d;
228: unsigned int *p0_ipi3d;
229: unsigned int *p1_ipi0d;
230: unsigned int *p1_ipi1d;
231: unsigned int *p1_ipi2d;
232: unsigned int *p1_ipi3d;
233: /* task priority registers (IPL) */
234: unsigned char *tp[2];
235: /* interrupt acknowledge registers */
236: volatile unsigned char *iack[2];
237: /* end of interrupt registers */
238: volatile unsigned char *eio[2];
239: };
240:
241: #else
242: struct raven_reg {
243: struct mpic_feature *feature = (struct mpic_feature *)MPCIC_FEATURE;
244: struct mpic_gcr *gcr = (struct mpic_gcr *)MPCIC_GCR;
245: struct mpic_vid *vid = (struct mpic_vid *)MPCIC_VID;
246: char *p_init = (char *)MPCIC_PINIT;
247: #if 0
248: struct mpic_ipivp *ipi0 = (struct mpic_ipivp *)MPCIC_IPI0;
249: struct mpic_ipivp *ipi1 = (struct mpic_ipivp *)MPCIC_IPI1;
250: struct mpic_ipivp *ipi2 = (struct mpic_ipivp *)MPCIC_IPI2;
251: struct mpic_ipivp *ipi3 = (struct mpic_ipivp *)MPCIC_IPI3;
252: #else
253: struct mpic_ipivp *ipi[4] = {
254: (struct mpic_ipivp *)MPCIC_IPI0,
255: (struct mpic_ipivp *)MPCIC_IPI1,
256: (struct mpic_ipivp *)MPCIC_IPI2,
257: (struct mpic_ipivp *)MPCIC_IPI3,
258: };
259: #endif
260: char *sp = (char *)MPCIC_SP;
261: unsigned int *timer_freq = (unsigned int *)MPCIC_TFR;
262: #if 1
263: struct mpic_timer timer[4] = {
264: {(struct mpic_timer_count *)MPCIC_T0CC,
265: (struct mpic_timer_bcount *)MPCIC_T0BC,
266: (struct mpic_timer_vp *)MPCIC_T0VP,
267: (unsigned char *)MPCIC_T0D},
268: {(struct mpic_timer_count *)MPCIC_T1CC,
269: (struct mpic_timer_bcount *)MPCIC_T1BC,
270: (struct mpic_timer_vp *)MPCIC_T1VP,
271: (unsigned char *)MPCIC_T1D},
272: {(struct mpic_timer_count *)MPCIC_T2CC,
273: (struct mpic_timer_bcount *)MPCIC_T2BC,
274: (struct mpic_timer_vp *)MPCIC_T2VP,
275: (unsigned char *)MPCIC_T2D},
276: {(struct mpic_timer_count *)MPCIC_T3CC,
277: (struct mpic_timer_bcount *)MPCIC_T3BC,
278: (struct mpic_timer_vp *)MPCIC_T3VP,
279: (unsigned char *)MPCIC_T3D}
280: };
281: #else
282: struct mpic_timer_count *t0c = (struct mpic_timer_count *)MPCIC_T0CC;
283: struct mpic_timer_bcount *t0bc = (struct mpic_timer_bcount *)MPCIC_T0BC;
284: struct mpic_timer_vp *t0vp = (struct mpic_timer_vp *)MPCIC_T0VP;
285: unsigned int *t0d = (unsigned int *)MPCIC_T0D;
286: struct mpic_timer_count *t1c = (struct mpic_timer_count *)MPCIC_T1CC;
287: struct mpic_timer_bcount *t1bc = (struct mpic_timer_bcount *)MPCIC_T1BC;
288: struct mpic_timer_vp *t1vp = (struct mpic_timer_vp *)MPCIC_T1VP;
289: unsigned int *t1d = (unsigned int *)MPCIC_T1D;
290: struct mpic_timer_count *t2c = (struct mpic_timer_count *)MPCIC_T2CC;
291: struct mpic_timer_bcount *t2bc = (struct mpic_timer_bcount *)MPCIC_T2BC;
292: struct mpic_timer_vp *t2vp = (struct mpic_timer_vp *)MPCIC_T2VP;
293: unsigned int *t2d = (unsigned int *)MPCIC_T2D;
294: struct mpic_timer_count *t3c = (struct mpic_timer_count *)MPCIC_T3CC;
295: struct mpic_timer_bcount *t3bc = (struct mpic_timer_bcount *)MPCIC_T3BC;
296: struct mpic_timer_vp *t3vp = (struct mpic_timer_vp *)MPCIC_T3VP;
297: unsigned int *t3d = (unsigned int *)MPCIC_T3D;
298: #endif
299:
300: #if 1
301: /* external interrupt configuration registers */
302: struct mpic_ext_intr extint[16] = {
303: {(struct mpic_ext_vp *)MPCIC_INT0VP, (unsigned char *)MPCIC_INT0D},
304: {(struct mpic_ext_vp *)MPCIC_INT1VP, (unsigned char *)MPCIC_INT1D},
305: {(struct mpic_ext_vp *)MPCIC_INT2VP, (unsigned char *)MPCIC_INT2D},
306: {(struct mpic_ext_vp *)MPCIC_INT3VP, (unsigned char *)MPCIC_INT3D},
307: {(struct mpic_ext_vp *)MPCIC_INT4VP, (unsigned char *)MPCIC_INT4D},
308: {(struct mpic_ext_vp *)MPCIC_INT5VP, (unsigned char *)MPCIC_INT5D},
309: {(struct mpic_ext_vp *)MPCIC_INT6VP, (unsigned char *)MPCIC_INT6D},
310: {(struct mpic_ext_vp *)MPCIC_INT7VP, (unsigned char *)MPCIC_INT7D},
311: {(struct mpic_ext_vp *)MPCIC_INT8VP, (unsigned char *)MPCIC_INT8D},
312: {(struct mpic_ext_vp *)MPCIC_INT9VP, (unsigned char *)MPCIC_INT9D},
313: {(struct mpic_ext_vp *)MPCIC_INT1VP, (unsigned char *)MPCIC_INT10D},
314: {(struct mpic_ext_vp *)MPCIC_INT11VP, (unsigned char *)MPCIC_INT11D},
315: {(struct mpic_ext_vp *)MPCIC_INT12VP, (unsigned char *)MPCIC_INT12D},
316: {(struct mpic_ext_vp *)MPCIC_INT13VP, (unsigned char *)MPCIC_INT13D},
317: {(struct mpic_ext_vp *)MPCIC_INT14VP, (unsigned char *)MPCIC_INT14D},
318: {(struct mpic_ext_vp *)MPCIC_INT16VP, (unsigned char *)MPCIC_INT15D}
319: };
320: #else
321: struct mpic_ext_vp *ext0vp = (struct mpic_ext_vp *)MPCIC_INT0VP;
322: unsigned int *ext0d = (unsigned int *)MPCIC_INT0D;
323: struct mpic_ext_vp *ext1vp = (struct mpic_ext_vp *)MPCIC_INT1VP;
324: unsigned int *ext1d = (unsigned int *)MPCIC_INT1D;
325: struct mpic_ext_vp *ext2vp = (struct mpic_ext_vp *)MPCIC_INT2VP;
326: unsigned int *ext2d = (unsigned int *)MPCIC_INT2D;
327: struct mpic_ext_vp *ext3vp = (struct mpic_ext_vp *)MPCIC_INT3VP;
328: unsigned int *ext3d = (unsigned int *)MPCIC_INT3D;
329: struct mpic_ext_vp *ext4vp = (struct mpic_ext_vp *)MPCIC_INT4VP;
330: unsigned int *ext4d = (unsigned int *)MPCIC_INT4D;
331: struct mpic_ext_vp *ext5vp = (struct mpic_ext_vp *)MPCIC_INT5VP;
332: unsigned int *ext5d = (unsigned int *)MPCIC_INT5D;
333: struct mpic_ext_vp *ext6vp = (struct mpic_ext_vp *)MPCIC_INT6VP;
334: unsigned int *ext6d = (unsigned int *)MPCIC_INT6D;
335: struct mpic_ext_vp *ext7vp = (struct mpic_ext_vp *)MPCIC_INT7VP;
336: unsigned int *ext7d = (unsigned int *)MPCIC_INT7D;
337: struct mpic_ext_vp *ext8vp = (struct mpic_ext_vp *)MPCIC_INT8VP;
338: unsigned int *ext8d = (unsigned int *)MPCIC_INT8D;
339: struct mpic_ext_vp *ext9vp = (struct mpic_ext_vp *)MPCIC_INT9VP;
340: unsigned int *ext9d = (unsigned int *)MPCIC_INT9D;
341: struct mpic_ext_vp *ext10vp = (struct mpic_ext_vp *)MPCIC_INT10VP;
342: unsigned int *ext10d = (unsigned int *)MPCIC_INT10D;
343: struct mpic_ext_vp *ext11vp = (struct mpic_ext_vp *)MPCIC_INT11VP;
344: unsigned int *ext11d = (unsigned int *)MPCIC_INT11D;
345: struct mpic_ext_vp *ext12vp = (struct mpic_ext_vp *)MPCIC_INT12VP;
346: unsigned int *ext12d = (unsigned int *)MPCIC_INT12D;
347: struct mpic_ext_vp *ext13vp = (struct mpic_ext_vp *)MPCIC_INT13VP;
348: unsigned int *ext13d = (unsigned int *)MPCIC_INT13D;
349: struct mpic_ext_vp *ext14vp = (struct mpic_ext_vp *)MPCIC_INT14VP;
350: unsigned int *ext14d = (unsigned int *)MPCIC_INT14D;
351: struct mpic_ext_vp *ext15vp = (struct mpic_ext_vp *)MPCIC_INT15VP;
352: unsigned int *ext15d = (unsigned int *)MPCIC_INT15D;
353: struct mpic_err_vp *errvp = (struct mpic_err_vp *)MPCIC_EVP;
354: unsigned int *errd = (unsigned int *)MPCIC_ED;
355: #endif
356: unsigned int *p0_ipi0d = (unsigned int *)MPCIC_P0_IPI0_D;
357: unsigned int *p0_ipi1d = (unsigned int *)MPCIC_P0_IPI1_D;
358: unsigned int *p0_ipi2d = (unsigned int *)MPCIC_P0_IPI2_D;
359: unsigned int *p0_ipi3d = (unsigned int *)MPCIC_P0_IPI3_D;
360: unsigned int *p1_ipi0d = (unsigned int *)MPCIC_P1_IPI0_D;
361: unsigned int *p1_ipi1d = (unsigned int *)MPCIC_P1_IPI1_D;
362: unsigned int *p1_ipi2d = (unsigned int *)MPCIC_P1_IPI2_D;
363: unsigned int *p1_ipi3d = (unsigned int *)MPCIC_P1_IPI3_D;
364:
365: /* task priority registers (IPL) */
366: unsigned char *tp[2] = {
367: (unsigned char *)MPCIC_P0_TP,
368: (unsigned char *)MPCIC_P1_TP
369: };
370: /* interrupt acknowledge registers */
371: volatile unsigned char *iack[2] = {
372: (volatile unsigned char *)MPCIC_P0_IACK,
373: (volatile unsigned char *)MPCIC_P1_IACK
374: };
375: /* end of interrupt registers */
376: volatile unsigned char *eio[2] = {
377: (volatile unsigned char *)MPCIC_P0_EOI,
378: (volatile unsigned char *)MPCIC_P1_EOI,
379: };
380: }
381: #endif
382:
383: struct raven_softc {
384: struct device sc_dev;
385: u_int8_t *sc_regs;
386: };
387:
388: #endif /* _DEV_RAVENVAR_H_ */
CVSweb