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