|
|
1.1 root 1: /*
2: * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
3: * All rights reserved. The Berkeley software License Agreement
4: * specifies the terms and conditions for redistribution.
5: *
6: * @(#)cpudata.c 7.4 (Berkeley) 7/9/88
7: */
8:
9: #include "pte.h"
10:
11: #include "param.h"
12:
13: #include "cpu.h"
14: #include "nexus.h"
15: #include "ioa.h"
16: #include "../vaxbi/bireg.h"
17: #include "../vaxuba/ubareg.h"
18:
19: /*
20: * Initialization of per-cpu data structures.
21: */
22:
23: /*
24: * These are the (fixed) physical addresses of the
25: * unibus memory for each of the possible unibus adapters.
26: * Note that on some machines the unibus memory addresses
27: * are actually indexed by the unibus adapter type code.
28: */
29: #if VAX8600
30: caddr_t umaddr8600a[4] = {
31: (caddr_t) UMEMA8600(0), (caddr_t) UMEMA8600(1),
32: (caddr_t) UMEMA8600(2), (caddr_t) UMEMA8600(3),
33: };
34: caddr_t umaddr8600b[4] = {
35: (caddr_t) UMEMB8600(0), (caddr_t) UMEMB8600(1),
36: (caddr_t) UMEMB8600(2), (caddr_t) UMEMB8600(3),
37: };
38: #endif
39: #if VAX780
40: caddr_t umaddr780[4] = {
41: (caddr_t) UMEM780(0), (caddr_t) UMEM780(1),
42: (caddr_t) UMEM780(2), (caddr_t) UMEM780(3)
43: };
44: #endif
45: #if VAX750
46: caddr_t umaddr750[2] = {
47: (caddr_t) UMEM750(0), (caddr_t) UMEM750(1),
48: };
49: #endif
50: #if VAX730
51: caddr_t umaddr730[1] = {
52: (caddr_t) UMEM730
53: };
54: #endif
55:
56: /*
57: * Information to patch around the stupidity of configuration
58: * registers not returning types on some of the processors.
59: */
60: #if VAX750
61: short nexty750[NNEX750] = {
62: NEX_MEM16, NEX_MEM16, NEX_MEM16, NEX_MEM16,
63: NEX_MBA, NEX_MBA, NEX_MBA, NEX_MBA,
64: NEX_UBA0, NEX_UBA1, NEX_ANY, NEX_ANY,
65: NEX_ANY, NEX_ANY, NEX_ANY, NEX_ANY
66: };
67: #endif
68: #if VAX730
69: short nexty730[NNEX730] = {
70: NEX_MEM16, NEX_ANY, NEX_ANY, NEX_ANY,
71: NEX_ANY, NEX_ANY, NEX_ANY, NEX_ANY,
72: };
73: #endif
74:
75: #if VAX8800
76: /* I think this is how the thing is shaped: */
77: struct bibus bi8800[] = {
78: { BI_BASE(0) },
79: { BI_BASE(1) },
80: };
81: struct iobus io8800 = {
82: { IO_BIA, somewhere, somesize, (caddr_t)&bi8800[0] },
83: { IO_BIA, somewhere, somesize, (caddr_t)&bi8800[1] },
84: };
85: /* but you will have to make it work yourself (sorry) */
86: #endif
87:
88: #if VAX8600
89: struct nexusconnect sbi8600[] = {
90: { NNEX8600, NEXA8600, DW780, NBDP8600, umaddr8600a, 0 },
91: { NNEX8600, NEXB8600, DW780, NBDP8600, umaddr8600b, 0 },
92: };
93: struct iobus io8600[] = {
94: { IO_ABUS, IOA8600(0), IOAMAPSIZ, (caddr_t)&sbi8600[0] },
95: { IO_ABUS, IOA8600(1), IOAMAPSIZ, (caddr_t)&sbi8600[1] },
96: };
97: #endif
98:
99: #if VAX8200
100: /* BEWARE, this is all limited to one BI for now */
101: struct bibus bi8200[] = {
102: { BI_BASE(0) },
103: };
104: struct iobus io8200[] = {
105: { IO_BI, 0, 0, (caddr_t)&bi8200[0] },
106: };
107: #endif
108:
109: #if VAX780
110: struct nexusconnect sbi780 = {
111: NNEX780, NEX780, DW780, NBDP780, umaddr780, 0,
112: };
113: struct iobus io780[] = { IO_SBI780, 0, 0, (caddr_t)&sbi780 };
114: #endif
115:
116: #if VAX750
117: struct nexusconnect cmi750 = {
118: NNEX750, NEX750, DW750, NBDP750, umaddr750, nexty750,
119: };
120: struct iobus io750[] = { IO_CMI750, 0, 0, (caddr_t)&cmi750 };
121: #endif
122:
123: #if VAX730
124: struct nexusconnect xxx730 = {
125: NNEX730, NEX730, DW730, NBDP730, umaddr730, nexty730,
126: };
127: struct iobus io730[] = { IO_XXX730, 0, 0, (caddr_t)&xxx730 };
128: #endif
129: #if VAX630
130: struct qbus qbus630 = {
131: QBA, QBAPAGES, QBAMAP630, (caddr_t)QMEM630, (caddr_t)QIOPAGE630
132: };
133: struct iobus io630[] = { IO_QBUS, 0, 0, (caddr_t)&qbus630 };
134: #endif
135:
136: /*
137: * Clock info
138: */
139: #if VAX8600 || VAX780 || VAX750 || VAX730
140: int vaxstd_clkstartrt(), vaxstd_clkread(), vaxstd_clkwrite();
141: struct clockops vaxstd_clockops = {
142: vaxstd_clkstartrt, vaxstd_clkread, vaxstd_clkwrite
143: };
144: #endif
145:
146: #if VAX8200
147: int vaxstd_clkstartrt(), ka820_clkread(), ka820_clkwrite();
148: struct clockops ka820_clockops = {
149: vaxstd_clkstartrt, ka820_clkread, ka820_clkwrite
150: };
151: #endif
152:
153: #if VAX630
154: int ka630_clkstartrt(), ka630_clkread(), ka630_clkwrite();
155: struct clockops ka630_clockops = {
156: ka630_clkstartrt, ka630_clkread, ka630_clkwrite
157: };
158: #endif
159:
160: /*
161: * CPU dependent routines.
162: */
163: #if VAX8600
164: int ka860_memenable(), ka860_memerr(), ka860_mchk();
165: struct cpuops ka860_ops = {
166: &vaxstd_clockops, ka860_memenable, ka860_memerr, ka860_mchk, NULL
167: };
168: #endif
169:
170: #if VAX8200
171: int ka820_memenable(), ka820_memerr(), ka820_mchk(), ka820_init();
172: struct cpuops ka820_ops = {
173: &ka820_clockops, ka820_memenable, ka820_memerr, ka820_mchk, ka820_init
174: };
175: #endif
176:
177: #if VAX780
178: int ka780_memenable(), ka780_memerr(), ka780_mchk();
179: struct cpuops ka780_ops = {
180: &vaxstd_clockops, ka780_memenable, ka780_memerr, ka780_mchk, NULL
181: };
182: #endif
183:
184: #if VAX750
185: int ka750_memenable(), ka750_memerr(), ka750_mchk();
186: struct cpuops ka750_ops = {
187: &vaxstd_clockops, ka750_memenable, ka750_memerr, ka750_mchk, NULL
188: };
189: #endif
190:
191: #if VAX730
192: int ka730_memenable(), ka730_memerr(), ka730_mchk();
193: struct cpuops ka730_ops = {
194: &vaxstd_clockops, ka730_memenable, ka730_memerr, ka730_mchk, NULL
195: };
196: #endif
197:
198: #if VAX630
199: int ka630_memnop(), ka630_mchk(), ka630_init();
200: struct cpuops ka630_ops = {
201: &ka630_clockops, ka630_memnop, ka630_memnop, ka630_mchk, ka630_init
202: };
203: #endif
204:
205: struct percpu percpu[] = {
206: #if VAX8600
207: { VAX_8600, 6, 2, io8600, &ka860_ops },
208: #endif
209: #if VAX8200
210: { VAX_8200, 2, 1, io8200, &ka820_ops },
211: #endif
212: #if VAX780
213: { VAX_780, 2, 1, io780, &ka780_ops },
214: #endif
215: #if VAX750
216: { VAX_750, 1, 1, io750, &ka750_ops },
217: #endif
218: #if VAX730
219: { VAX_730, 1, 1, io730, &ka730_ops },
220: #endif
221: #if VAX630
222: { VAX_630, 2, 1, io630, &ka630_ops },
223: #endif
224: 0,
225: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.