xref: /original-bsd/sys/tahoe/tahoe/Locore.c (revision 2301fdfb)
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  *	@(#)Locore.c	7.2 (Berkeley) 05/27/88
7  */
8 
9 #include "param.h"
10 #include "systm.h"
11 #include "dir.h"
12 #include "user.h"
13 #include "vm.h"
14 #include "ioctl.h"
15 #include "tty.h"
16 #include "proc.h"
17 #include "buf.h"
18 #include "msgbuf.h"
19 #include "mbuf.h"
20 #include "protosw.h"
21 #include "domain.h"
22 #include "map.h"
23 
24 #include "cpu.h"
25 #include "mtpr.h"
26 #include "trap.h"
27 #include "psl.h"
28 #include "pte.h"
29 #include "scb.h"
30 #include "cp.h"
31 #include "mem.h"
32 
33 #include "../tahoemath/fp.h"
34 
35 /*
36  * Pseudo file for lint to show what is used/defined in locore.s.
37  */
38 
39 struct	scb scb;
40 struct	rpb rpb;
41 int	dumpflag;
42 int	intstack[3*NBPG];
43 int	masterpaddr;		/* p_addr of current process on master cpu */
44 struct	user u;
45 int	icode[8];
46 int	szicode = sizeof (icode);
47 quad	catcher[SCB_LASTIV];
48 /*
49  * Variables declared for savecore, or
50  * implicitly, such as by config or the loader.
51  */
52 char	version[] = "4.3 BSD UNIX ....";
53 int	etext;
54 
55 doadump() { dumpsys(); }
56 
57 lowinit()
58 {
59 #if !defined(GPROF)
60 	caddr_t cp;
61 #endif
62 	extern int dumpmag;
63 	extern int rthashsize;
64 	extern int arptab_size;
65 	extern int dk_ndrive;
66 	extern struct domain unixdomain;
67 #ifdef INET
68 	extern struct domain inetdomain;
69 #endif
70 #include "imp.h"
71 #if NIMP > 0
72 	extern struct domain impdomain;
73 #endif
74 #ifdef NS
75 	extern struct domain nsdomain;
76 #endif
77 
78 	/* cpp messes these up for lint so put them here */
79 	unixdomain.dom_next = domains;
80 	domains = &unixdomain;
81 #ifdef INET
82 	inetdomain.dom_next = domains;
83 	domains = &inetdomain;
84 #endif
85 #if NIMP > 0
86 	impdomain.dom_next = domains;
87 	domains = &impdomain;
88 #endif
89 #ifdef NS
90 	nsdomain.dom_next = domains;
91 	domains = &nsdomain;
92 #endif
93 	dumpmag = 0;			/* used only by savecore */
94 	rthashsize = rthashsize;	/* used by netstat, etc. */
95 	arptab_size = arptab_size;	/* used by arp command */
96 	dk_ndrive = dk_ndrive;		/* used by vmstat, iostat, etc. */
97 
98 	/*
99 	 * Pseudo-uses of globals.
100 	 */
101 	lowinit();
102 	intstack[0] = intstack[1];
103 	rpb = rpb;
104 	scb = scb;
105 	maxmem = physmem = freemem = 0;
106 	u = u;
107 	fixctlrmask();
108 	main(0);
109 
110 	/*
111 	 * Routines called from interrupt vectors.
112 	 */
113 	buserror((caddr_t)0);
114 	panic("Machine check");
115 	printf("Write timeout");
116 	rawintr();
117 #ifdef INET
118 	ipintr();
119 #endif
120 #ifdef NS
121 	nsintr();
122 #endif
123 	cnrint(0);
124 	cnxint(0);
125 	hardclock((caddr_t)0, 0);
126 	softclock((caddr_t)0, 0);
127 	fpemulate(0, 0, 0, 0, 0, 0, 0, 0, 0);
128 	trap(0, 0, 0, 0, 0, 0, (unsigned)0, 0, 0);
129 	syscall(0, 0, 0, 0, 0, 0, (unsigned)0, 0, 0);
130 
131 	if (vmemall((struct pte *)0, 0, (struct proc *)0, 0))
132 		return;		/* use value */
133 	boothowto = 0;
134 	if (rmget((struct map *)0, 0, 0) == 0)
135 		return;
136 	dumpflag = 0; dumpflag = dumpflag;
137 #ifdef KADB
138 	bootesym = 0; bootesym = bootesym;
139 #endif
140 #if !defined(GPROF)
141 	cp = (caddr_t)&etext;
142 	cp = cp;
143 #endif
144 }
145 
146 struct	pte Sysmap[6*NPTEPG];
147 caddr_t	Sysbase;
148 struct	pte VMEMmap[1];
149 caddr_t	vmem, vmembeg, vmemend;
150 struct	pte VMEMmap1[1];
151 caddr_t	vmem1;
152 struct	pte VBmap[1];
153 caddr_t	vbbase, vbend;
154 struct	pte Usrptmap[USRPTSIZE];
155 struct	pte usrpt[USRPTSIZE*NPTEPG];
156 struct	pte Forkmap[UPAGES];
157 struct	user forkutl;
158 struct	pte Xswapmap[UPAGES];
159 struct	user xswaputl;
160 struct	pte Xswap2map[UPAGES];
161 struct	user xswap2utl;
162 struct	pte Swapmap[UPAGES];
163 struct	user swaputl;
164 struct	pte Pushmap[UPAGES];
165 struct	user pushutl;
166 struct	pte Vfmap[UPAGES];
167 struct	user vfutl;
168 struct	pte CMAP1[1], CMAP2[1];
169 caddr_t	CADDR1, CADDR2;
170 struct	pte mmap[1];
171 char	vmmap[1];
172 struct	pte msgbufmap[3*NBPG];
173 struct	msgbuf msgbuf;
174 struct	pte kmempt[100], ekmempt[1];
175 char	kmembase[100*NBPG];
176 struct	pte Mbmap[NMBCLUSTERS/CLSIZE];
177 struct	mbuf mbutl[NMBCLUSTERS*CLBYTES/sizeof (struct mbuf)];
178 
179 /*ARGSUSED*/
180 badaddr(addr, len) caddr_t addr; int len; { return (0); }
181 /*ARGSUSED*/
182 ovbcopy(from, to, len) caddr_t from, to; unsigned len; { }
183 copyinstr(udaddr, kaddr, maxlength, lencopied)
184     caddr_t udaddr, kaddr; u_int maxlength, *lencopied;
185 { *kaddr = *udaddr; *lencopied = maxlength; return (0); }
186 copyoutstr(kaddr, udaddr, maxlength, lencopied)
187     caddr_t kaddr, udaddr; u_int maxlength, *lencopied;
188 { *kaddr = *udaddr; *lencopied = maxlength; return (0); }
189 copystr(kfaddr, kdaddr, maxlength, lencopied)
190     caddr_t kfaddr, kdaddr; u_int maxlength, *lencopied;
191 { *kdaddr = *kfaddr; *lencopied = maxlength; return (0); }
192 /*ARGSUSED*/
193 copyin(udaddr, kaddr, n) caddr_t udaddr, kaddr; u_int n; { return (0); }
194 /*ARGSUSED*/
195 copyout(kaddr, udaddr, n) caddr_t kaddr, udaddr; u_int n; { return (0); }
196 
197 /*ARGSUSED*/
198 longjmp(lp) label_t *lp; { /*NOTREACHED*/ }
199 
200 /*ARGSUSED*/
201 savectx(lp) label_t *lp; { return (0); }
202 
203 /*ARGSUSED*/
204 setrq(p) struct proc *p; { }
205 
206 /*ARGSUSED*/
207 remrq(p) struct proc *p; { }
208 
209 swtch() { if (whichqs) whichqs = 0; if (masterpaddr) masterpaddr = 0; }
210 
211 /*ARGSUSED*/
212 resume(pcbpf) unsigned pcbpf; { }
213 
214 /*ARGSUSED*/
215 fubyte(base) caddr_t base; { return (0); }
216 /*ARGSUSED*/
217 subyte(base, i) caddr_t base; { return (0); }
218 /*ARGSUSED*/
219 fuword(base) caddr_t base; { return (0); }
220 /*ARGSUSED*/
221 suword(base, i) caddr_t base; { return (0); }
222 
223 /*ARGSUSED*/
224 copyseg(udaddr, pf)
225     caddr_t udaddr; unsigned pf;
226 { CMAP1[0] = CMAP1[0]; CADDR1[0] = CADDR1[0]; }
227 
228 /*ARGSUSED*/
229 clearseg(pf) unsigned pf; { CMAP2[0] = CMAP2[0]; CADDR2[0] = CADDR2[0]; }
230 
231 /*ARGSUSED*/
232 useracc(udaddr, bcnt, rw) caddr_t udaddr; unsigned bcnt; { return (0); }
233 
234 /*ARGSUSED*/
235 kernacc(addr, bcnt, rw) caddr_t addr; unsigned bcnt; { return (0); }
236 
237 /*ARGSUSED*/
238 addupc(pc, prof, counts) int pc; struct uprof *prof; int counts; { }
239 
240 /*ARGSUSED*/
241 scanc(size, cp, table, mask)
242     unsigned size; u_char *cp, table[]; u_char mask;
243 { return (0); }
244 
245 /*ARGSUSED*/
246 skpc(mask, size, cp) int mask; int size; char *cp; { return (0); }
247 
248 #ifdef notdef
249 /*ARGSUSED*/
250 locc(mask, size, cp) int mask; int size; char *cp; { return (0); }
251 #endif
252 
253 /*
254  * Routines expanded by inline.
255  */
256 #ifdef notdef
257 fuibyte(base) caddr_t base; { return (fubyte(base)); }
258 #endif
259 fuiword(base) caddr_t base; { return (fuword(base)); }
260 suibyte(base, i) caddr_t base; { return (subyte(base, i)); }
261 suiword(base, i) caddr_t base; { return (suword(base, i)); }
262 
263 /*ARGSUSED*/
264 setjmp(lp) label_t *lp; { return (0); }
265 
266 /*ARGSUSED*/
267 _insque(p, q) caddr_t p, q; { }
268 /*ARGSUSED*/
269 _remque(p) caddr_t p; { }
270 
271 /*ARGSUSED*/
272 bcopy(from, to, len) caddr_t from, to; unsigned len; { }
273 /*ARGSUSED*/
274 bzero(base, count) caddr_t base; unsigned count; { }
275 /*ARGSUSED*/
276 blkclr(base, count) caddr_t base; unsigned count; { }
277 
278 /*ARGSUSED*/
279 /*VARARGS1*/
280 mtpr(reg, v) int reg; { }
281 /*ARGSUSED*/
282 mfpr(reg) int reg; { return (0); }
283 
284 /*ARGSUSED*/
285 _movow(dst, v) u_short *dst, v; { }
286 /*ARGSUSED*/
287 _movob(dst, v) u_char *dst, v; { }
288 
289 /*ARGSUSED*/
290 ffs(v) long v; { return (0); }
291 
292 imin(a, b) int a, b; { return (a < b ? a : b); }
293 imax(a, b) int a, b; { return (a > b ? a : b); }
294 #ifdef notdef
295 unsigned min(a, b) u_int a, b; { return (a < b ? a : b); }
296 unsigned max(a, b) u_int a, b; { return (a > b ? a : b); }
297 #endif
298