xref: /original-bsd/sys/vax/vax/Locore.c (revision 23c6a147)
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.5 (Berkeley) 05/09/89
7  */
8 
9 #include "dz.h"
10 #include "mba.h"
11 #include "uba.h"
12 
13 #include "pte.h"
14 
15 #include "param.h"
16 #include "systm.h"
17 #include "user.h"
18 #include "vm.h"
19 #include "ioctl.h"
20 #include "tty.h"
21 #include "proc.h"
22 #include "buf.h"
23 #include "msgbuf.h"
24 #include "mbuf.h"
25 #include "protosw.h"
26 #include "domain.h"
27 #include "map.h"
28 #include "dkbad.h"
29 
30 #include "scb.h"
31 #include "nexus.h"
32 #include "ioa.h"
33 #include "../vaxuba/ubavar.h"
34 #include "../vaxuba/ubareg.h"
35 
36 /*
37  * Pseudo file for lint to show what is used/defined in locore.s.
38  */
39 
40 struct	scb scb[1];
41 int	(*UNIvec[NUBA][128])();		/* unibus vec for ubas */
42 int	(*eUNIvec)();			/* end of unibus vec */
43 struct	rpb rpb;
44 int	dumpflag;
45 int	intstack[3*NBPG];
46 int	masterpaddr;		/* p_addr of current process on master cpu */
47 struct	user u;
48 int	icode[8];
49 int	szicode = sizeof (icode);
50 /*
51  * Variables declared for savecore, or
52  * implicitly, such as by config or the loader.
53  */
54 char	version[] = "4.3 BSD UNIX ....";
55 int	etext;
56 
57 doadump() { dumpsys(); }
58 
59 #if NMBA > 0
60 Xmba3int() { }
61 Xmba2int() { }
62 Xmba1int() { }
63 Xmba0int() { }
64 #endif
65 
66 lowinit()
67 {
68 #if !defined(GPROF)
69 	caddr_t cp;
70 #endif
71 	extern int dumpmag;
72 	extern int rthashsize;
73 	extern int arptab_size;
74 	extern int dk_ndrive;
75 	extern struct domain unixdomain;
76 #ifdef INET
77 	extern struct domain inetdomain;
78 #endif
79 #include "imp.h"
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 
182 consdin() { }
183 consdout() { }
184 #if NDZ > 0
185 dzdma() { dzxint((struct tty *)0); }
186 #endif
187 
188 quad	catcher[128];
189 int	cold = 1;
190 
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*/
248 badaddr(addr, len) caddr_t addr; int len; { return (0); }
249 
250 /*ARGSUSED*/
251 ovbcopy(from, to, len) caddr_t from, to; unsigned len; { }
252 copyinstr(udaddr, kaddr, maxlength, lencopied)
253     caddr_t udaddr, kaddr; u_int maxlength, *lencopied;
254 { *kaddr = *udaddr; *lencopied = maxlength; return (0); }
255 copyoutstr(kaddr, udaddr, maxlength, lencopied)
256     caddr_t kaddr, udaddr; u_int maxlength, *lencopied;
257 { *udaddr = *kaddr; *lencopied = maxlength; return (0); }
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*/
263 copyin(udaddr, kaddr, n) caddr_t udaddr, kaddr; u_int n; { return (0); }
264 /*ARGSUSED*/
265 copyout(kaddr, udaddr, n) caddr_t kaddr, udaddr; u_int n; { return (0); }
266 
267 /*ARGSUSED*/
268 longjmp(lp) label_t *lp; { /*NOTREACHED*/ }
269 
270 /*ARGSUSED*/
271 savectx(lp) label_t *lp; { return (0); }
272 
273 /*ARGSUSED*/
274 setrq(p) struct proc *p; { }
275 
276 /*ARGSUSED*/
277 remrq(p) struct proc *p; { }
278 
279 swtch() { if (whichqs) whichqs = 0; if (masterpaddr) masterpaddr = 0; }
280 
281 /*ARGSUSED*/
282 resume(pcbpf) unsigned pcbpf; { }
283 
284 /*ARGSUSED*/
285 fubyte(base) caddr_t base; { return (0); }
286 #ifdef notdef
287 /*ARGSUSED*/
288 fuibyte(base) caddr_t base; { return (0); }
289 #endif
290 /*ARGSUSED*/
291 subyte(base, i) caddr_t base; { return (0); }
292 /*ARGSUSED*/
293 suibyte(base, i) caddr_t base; { return (0); }
294 /*ARGSUSED*/
295 fuword(base) caddr_t base; { return (0); }
296 /*ARGSUSED*/
297 fuiword(base) caddr_t base; { return (0); }
298 /*ARGSUSED*/
299 suword(base, i) caddr_t base; { return (0); }
300 /*ARGSUSED*/
301 suiword(base, i) caddr_t base; { return (0); }
302 
303 /*ARGSUSED*/
304 copyseg(udaddr, pf)
305     caddr_t udaddr; unsigned pf;
306 { CMAP1 = CMAP1; CADDR1[0] = CADDR1[0]; }
307 
308 /*ARGSUSED*/
309 clearseg(pf) unsigned pf; { CMAP2 = CMAP2; CADDR2[0] = CADDR2[0]; }
310 
311 /*ARGSUSED*/
312 useracc(udaddr, bcnt, rw) caddr_t udaddr; unsigned bcnt; { return (0); }
313 
314 /*ARGSUSED*/
315 kernacc(addr, bcnt, rw) caddr_t addr; unsigned bcnt; { return (0); }
316 
317 /*ARGSUSED*/
318 addupc(pc, prof, counts) int pc; struct uprof *prof; int counts; { }
319 
320 /*
321  * Routines expanded by inline.
322  */
323 spl0() { }
324 splsoftclock() { return (0); }
325 splnet() { return (0); }
326 spl4() { return (0); }
327 spl5() { return (0); }
328 splbio() { return (0); }
329 spltty() { return (0); }
330 #ifdef notdef
331 spl6() { return (0); }		/* not currently used */
332 #endif
333 splclock() { return (0); }
334 spl7() { return (0); }
335 splhigh() { return (0); }
336 
337 /*ARGSUSED*/
338 splx(s) int s; { }
339 
340 /*ARGSUSED*/
341 bcopy(from, to, len) caddr_t from, to; unsigned len; { }
342 /*ARGSUSED*/
343 bzero(base, count) caddr_t base; unsigned count; { }
344 /*ARGSUSED*/
345 blkclr(base, count) caddr_t base; unsigned count; { }
346 
347 /*ARGSUSED*/
348 /*VARARGS1*/
349 mtpr(reg, v) int reg; { }
350 /*ARGSUSED*/
351 mfpr(reg) int reg; { return (0); }
352 
353 /*ARGSUSED*/
354 setjmp(lp) label_t *lp; { return (0); }
355 
356 #ifndef VAX630
357 /*ARGSUSED*/
358 scanc(size, cp, table, mask)
359     unsigned size; char *cp, table[]; int mask;
360 { return (0); }
361 #endif
362 
363 /*ARGSUSED*/
364 skpc(mask, size, cp) int mask; int size; char *cp; { return (0); }
365 
366 #ifdef notdef
367 /*ARGSUSED*/
368 locc(mask, size, cp) int mask; char *cp; unsigned size; { return (0); }
369 #endif
370 
371 /*ARGSUSED*/
372 _insque(p, q) caddr_t p, q; { }
373 /*ARGSUSED*/
374 _remque(p) caddr_t p; { }
375 
376 /*ARGSUSED*/
377 ffs(v) long v; { return (0); }
378 
379 #ifdef notdef
380 imin(a, b) int a, b; { return (a < b ? a : b); }
381 imax(a, b) int a, b; { return (a > b ? a : b); }
382 unsigned min(a, b) u_int a, b; { return (a < b ? a : b); }
383 unsigned max(a, b) u_int a, b; { return (a > b ? a : b); }
384 #endif
385 u_short ntohs(s) u_short s; { return ((u_short)s); }
386 u_short htons(s) u_short s; { return ((u_short)s); }
387 u_long ntohl(l) u_long l; { return ((u_long)l); }
388 u_long htonl(l) u_long l; { return ((u_long)l); }
389