1 /*
2 * Copyright (c) 1982, 1986 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 * @(#)Locore.c 7.8 (Berkeley) 09/23/93
7 */
8
9 #include "dz.h"
10 #include "mba.h"
11 #include "uba.h"
12 #include "imp.h"
13
14 #include "../include/pte.h"
15
16 #include "sys/param.h"
17 #include "sys/systm.h"
18 #include "sys/user.h"
19 #include "sys/vm.h"
20 #include "sys/ioctl.h"
21 #include "sys/tty.h"
22 #include "sys/proc.h"
23 #include "sys/buf.h"
24 #include "sys/msgbuf.h"
25 #include "sys/mbuf.h"
26 #include "sys/protosw.h"
27 #include "sys/domain.h"
28 #include "sys/map.h"
29 #include "sys/dkbad.h"
30
31 #include "scb.h"
32 #include "nexus.h"
33 #include "ioa.h"
34 #include "../uba/ubavar.h"
35 #include "../uba/ubareg.h"
36
37 /*
38 * Pseudo file for lint to show what is used/defined in locore.s.
39 */
40
41 struct scb scb[1];
42 int (*UNIvec[NUBA][128])(); /* unibus vec for ubas */
43 int (*eUNIvec)(); /* end of unibus vec */
44 struct rpb rpb;
45 int dumpflag;
46 int intstack[3*NBPG];
47 int masterpaddr; /* p_addr of current process on master cpu */
48 struct user u;
49 int icode[8];
50 int szicode = sizeof (icode);
51 /*
52 * Variables declared for savecore, or
53 * implicitly, such as by config or the loader.
54 */
55 char version[] = "4.3 BSD UNIX ....";
56 int etext;
57
doadump()58 doadump() { dumpsys(); }
59
60 #if NMBA > 0
Xmba3int()61 Xmba3int() { }
Xmba2int()62 Xmba2int() { }
Xmba1int()63 Xmba1int() { }
Xmba0int()64 Xmba0int() { }
65 #endif
66
lowinit()67 lowinit()
68 {
69 #if !defined(GPROF)
70 caddr_t cp;
71 #endif
72 extern int dumpmag;
73 extern int rthashsize;
74 extern int arptab_size;
75 extern int dk_ndrive;
76 extern struct domain unixdomain;
77 #ifdef INET
78 extern struct domain inetdomain;
79 #endif
80 #if NIMP > 0
81 extern struct domain impdomain;
82 #endif
83 #ifdef NS
84 extern struct domain nsdomain;
85 #endif
86
87 /* cpp messes these up for lint so put them here */
88 unixdomain.dom_next = domains;
89 domains = &unixdomain;
90 #ifdef INET
91 inetdomain.dom_next = domains;
92 domains = &inetdomain;
93 #endif
94 #if NIMP > 0
95 impdomain.dom_next = domains;
96 domains = &impdomain;
97 #endif
98 #ifdef NS
99 nsdomain.dom_next = domains;
100 domains = &nsdomain;
101 #endif
102 dumpmag = 0; /* used only by savecore */
103 rthashsize = rthashsize; /* used by netstat, etc. */
104 arptab_size = arptab_size; /* used by arp command */
105 dk_ndrive = dk_ndrive; /* used by vmstat, iostat, etc. */
106
107 /*
108 * Pseudo-uses of globals.
109 */
110 lowinit();
111 intstack[0] = intstack[1];
112 rpb = rpb;
113 scb[0] = scb[0];
114 maxmem = physmem = freemem = 0;
115 u = u;
116 fixctlrmask();
117 main(0);
118 Xustray();
119
120 /*
121 * Routines called from interrupt vectors.
122 */
123 panic("Machine check");
124 printf("Write timeout");
125 (*UNIvec[0][0])();
126 ubaerror(0, (struct uba_hd *)0, 0, 0, (struct uba_regs *)0);
127 cnrint(0);
128 cnxint(0);
129 consdin();
130 consdout();
131 #if NDZ > 0
132 dzdma();
133 #endif
134 #if NMBA > 0
135 mbintr(0);
136 #endif
137 #if VAX8200 /* XXX wrong conditional */
138 bi_buserr(0);
139 #endif
140 #if VAX8200
141 rxcdintr();
142 rx50intr();
143 #endif
144 hardclock((caddr_t)0, 0);
145 softclock((caddr_t)0, 0);
146 trap(0, 0, (unsigned)0, 0, 0);
147 syscall(0, 0, (unsigned)0, 0, 0);
148 rawintr();
149 #ifdef INET
150 ipintr();
151 #endif
152 #ifdef NS
153 nsintr();
154 #endif
155 machinecheck((caddr_t)0);
156 memerr();
157
158 /*
159 * Miscellaneous routines called from configurable
160 * drivers.
161 */
162 ubapurge((struct uba_ctlr *)0);
163 ubattydma(0);
164 (void) ubamem(0, 0, 16, 1);
165 (void) isbad((struct dkbad *)0, 0, 0, 0);
166 disksort((struct buf *)0, (struct buf *)0);
167 (void) uwritec((struct uio *)0);
168 (void) todr();
169 if (vmemall((struct pte *)0, 0, (struct proc *)0, 0))
170 return; /* use value */
171 boothowto = 0;
172 dumpflag = 0; dumpflag = dumpflag;
173 #ifdef KADB
174 bootesym = 0; bootesym = bootesym;
175 #endif
176 #if !defined(GPROF)
177 cp = (caddr_t)&etext;
178 cp = cp;
179 #endif
180 }
181
consdin()182 consdin() { }
consdout()183 consdout() { }
184 #if NDZ > 0
dzdma()185 dzdma() { dzxint((struct tty *)0); }
186 #endif
187
188 quad catcher[128];
189 int cold = 1;
190
Xustray()191 Xustray() { }
192
193 struct pte Sysmap[6*NPTEPG];
194 #ifdef KADB
195 char Sysbase[6*NPTEPG*NBPG];
196 #endif
197 int umbabeg;
198 struct pte Nexmap[16][16];
199 struct nexus nexus[MAXNNEXUS];
200 #if VAX8600
201 struct pte Ioamap[MAXNIOA][IOAMAPSIZ/NBPG];
202 #endif
203 struct pte UMEMmap[NUBA][512];
204 char umem[NUBA][512*NBPG];
205 int umbaend;
206 struct pte Usrptmap[USRPTSIZE];
207 struct pte usrpt[USRPTSIZE*NPTEPG];
208 struct pte Forkmap[UPAGES];
209 struct user forkutl;
210 struct pte Xswapmap[UPAGES];
211 struct user xswaputl;
212 struct pte Xswap2map[UPAGES];
213 struct user xswap2utl;
214 struct pte Swapmap[UPAGES];
215 struct user swaputl;
216 struct pte Pushmap[UPAGES];
217 struct user pushutl;
218 struct pte Vfmap[UPAGES];
219 struct user vfutl;
220 struct pte CMAP1;
221 char CADDR1[NBPG];
222 struct pte CMAP2;
223 char CADDR2[NBPG];
224 struct pte mmap[1];
225 char vmmap[NBPG];
226 struct pte Mbmap[NMBCLUSTERS/CLSIZE];
227 struct mbuf mbutl[NMBCLUSTERS*CLBYTES/sizeof (struct mbuf)];
228 struct pte msgbufmap[CLSIZE];
229 struct msgbuf msgbuf;
230 struct pte kmempt[200], ekmempt[1];
231 #if VAX8200
232 struct pte RX50map[1];
233 struct pte Ka820map[1];
234 #endif
235 #if VAX630
236 struct pte Ka630map[1];
237 #endif
238 char kmembase[100*NBPG];
239 #if VAX8200 || VAX630
240 struct pte Clockmap[1];
241 #endif
242 #ifdef NFS
243 struct pte Nfsiomap[MAXPHYS/NBPG+1];
244 char nfsiobuf[MAXPHYS+NBPG];
245 #endif
246
247 /*ARGSUSED*/
badaddr(addr,len)248 badaddr(addr, len) caddr_t addr; int len; { return (0); }
249
250 /*ARGSUSED*/
ovbcopy(from,to,len)251 ovbcopy(from, to, len) caddr_t from, to; unsigned len; { }
copyinstr(udaddr,kaddr,maxlength,lencopied)252 copyinstr(udaddr, kaddr, maxlength, lencopied)
253 caddr_t udaddr, kaddr; u_int maxlength, *lencopied;
254 { *kaddr = *udaddr; *lencopied = maxlength; return (0); }
copyoutstr(kaddr,udaddr,maxlength,lencopied)255 copyoutstr(kaddr, udaddr, maxlength, lencopied)
256 caddr_t kaddr, udaddr; u_int maxlength, *lencopied;
257 { *udaddr = *kaddr; *lencopied = maxlength; return (0); }
copystr(kfaddr,kdaddr,maxlength,lencopied)258 copystr(kfaddr, kdaddr, maxlength, lencopied)
259 caddr_t kfaddr, kdaddr; u_int maxlength, *lencopied;
260 { *kdaddr = *kfaddr; *lencopied = maxlength; return (0); }
261
262 /*ARGSUSED*/
copyin(udaddr,kaddr,n)263 copyin(udaddr, kaddr, n) caddr_t udaddr, kaddr; u_int n; { return (0); }
264 /*ARGSUSED*/
copyout(kaddr,udaddr,n)265 copyout(kaddr, udaddr, n) caddr_t kaddr, udaddr; u_int n; { return (0); }
266
267 /*ARGSUSED*/
longjmp(lp)268 longjmp(lp) label_t *lp; { /*NOTREACHED*/ }
269
270 /*ARGSUSED*/
savectx(lp)271 savectx(lp) label_t *lp; { return (0); }
272
273 /*ARGSUSED*/
274 setrunqueue(p) struct proc *p; { }
275
276 /*ARGSUSED*/
277 remrq(p) struct proc *p; { }
278
Xswitch()279 Xswitch() { if (whichqs) whichqs = 0; if (masterpaddr) masterpaddr = 0; }
280
281 /*ARGSUSED*/
resume(pcbpf)282 resume(pcbpf) unsigned pcbpf; { }
283
284 /*ARGSUSED*/
fubyte(base)285 fubyte(base) caddr_t base; { return (0); }
286 #ifdef notdef
287 /*ARGSUSED*/
fuibyte(base)288 fuibyte(base) caddr_t base; { return (0); }
289 #endif
290 /*ARGSUSED*/
subyte(base,i)291 subyte(base, i) caddr_t base; { return (0); }
292 /*ARGSUSED*/
suibyte(base,i)293 suibyte(base, i) caddr_t base; { return (0); }
294 /*ARGSUSED*/
fuword(base)295 fuword(base) caddr_t base; { return (0); }
296 /*ARGSUSED*/
fuiword(base)297 fuiword(base) caddr_t base; { return (0); }
298 /*ARGSUSED*/
suword(base,i)299 suword(base, i) caddr_t base; { return (0); }
300 /*ARGSUSED*/
suiword(base,i)301 suiword(base, i) caddr_t base; { return (0); }
302
303 /*ARGSUSED*/
copyseg(udaddr,pf)304 copyseg(udaddr, pf)
305 caddr_t udaddr; unsigned pf;
306 { CMAP1 = CMAP1; CADDR1[0] = CADDR1[0]; }
307
308 /*ARGSUSED*/
clearseg(pf)309 clearseg(pf) unsigned pf; { CMAP2 = CMAP2; CADDR2[0] = CADDR2[0]; }
310
311 /*ARGSUSED*/
useracc(udaddr,bcnt,rw)312 useracc(udaddr, bcnt, rw) caddr_t udaddr; unsigned bcnt; { return (0); }
313
314 /*ARGSUSED*/
kernacc(addr,bcnt,rw)315 kernacc(addr, bcnt, rw) caddr_t addr; unsigned bcnt; { return (0); }
316
317 /*ARGSUSED*/
addupc(pc,prof,counts)318 addupc(pc, prof, counts) int pc; struct uprof *prof; int counts; { }
319
320 /*
321 * Routines expanded by inline.
322 */
spl0()323 spl0() { }
splsoftclock()324 splsoftclock() { return (0); }
splnet()325 splnet() { return (0); }
spl4()326 spl4() { return (0); }
spl5()327 spl5() { return (0); }
splbio()328 splbio() { return (0); }
spltty()329 spltty() { return (0); }
330 #ifdef notdef
spl6()331 spl6() { return (0); } /* not currently used */
332 #endif
splclock()333 splclock() { return (0); }
spl7()334 spl7() { return (0); }
splhigh()335 splhigh() { return (0); }
336
337 /*ARGSUSED*/
splx(s)338 splx(s) int s; { }
339
340 /*ARGSUSED*/
bcopy(from,to,len)341 bcopy(from, to, len) caddr_t from, to; unsigned len; { }
342 /*ARGSUSED*/
bzero(base,count)343 bzero(base, count) caddr_t base; unsigned count; { }
344 /*ARGSUSED*/
blkclr(base,count)345 blkclr(base, count) caddr_t base; unsigned count; { }
346
347 /*ARGSUSED*/
348 /*VARARGS1*/
mtpr(reg,v)349 mtpr(reg, v) int reg; { }
350 /*ARGSUSED*/
mfpr(reg)351 mfpr(reg) int reg; { return (0); }
352
353 /*ARGSUSED*/
setjmp(lp)354 setjmp(lp) label_t *lp; { return (0); }
355
356 #ifndef VAX630
357 /*ARGSUSED*/
scanc(size,cp,table,mask)358 scanc(size, cp, table, mask)
359 unsigned size; char *cp, table[]; int mask;
360 { return (0); }
361 #endif
362
363 /*ARGSUSED*/
skpc(mask,size,cp)364 skpc(mask, size, cp) int mask; int size; char *cp; { return (0); }
365
366 #ifdef notdef
367 /*ARGSUSED*/
locc(mask,size,cp)368 locc(mask, size, cp) int mask; char *cp; unsigned size; { return (0); }
369 #endif
370
371 /*ARGSUSED*/
_insque(p,q)372 _insque(p, q) caddr_t p, q; { }
373 /*ARGSUSED*/
_remque(p)374 _remque(p) caddr_t p; { }
375
376 /*ARGSUSED*/
ffs(v)377 ffs(v) long v; { return (0); }
378
379 #ifdef notdef
imin(a,b)380 imin(a, b) int a, b; { return (a < b ? a : b); }
imax(a,b)381 imax(a, b) int a, b; { return (a > b ? a : b); }
min(a,b)382 unsigned min(a, b) u_int a, b; { return (a < b ? a : b); }
max(a,b)383 unsigned max(a, b) u_int a, b; { return (a > b ? a : b); }
384 #endif
ntohs(s)385 u_short ntohs(s) u_short s; { return ((u_short)s); }
htons(s)386 u_short htons(s) u_short s; { return ((u_short)s); }
ntohl(l)387 u_long ntohl(l) u_long l; { return ((u_long)l); }
htonl(l)388 u_long htonl(l) u_long l; { return ((u_long)l); }
389