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