xref: /original-bsd/sys/tahoe/tahoe/Locore.c (revision 0fc6f013)
1 /*	Locore.c	1.2	86/01/05	*/
2 
3 #include "../tahoe/mtpr.h"
4 #include "../tahoe/trap.h"
5 #include "../tahoe/psl.h"
6 #include "../tahoe/pte.h"
7 #include "../tahoe/cp.h"
8 #include "../tahoe/mem.h"
9 #include "../tahoemath/fp.h"
10 
11 #include "param.h"
12 #include "systm.h"
13 #include "dir.h"
14 #include "user.h"
15 #include "vm.h"
16 #include "ioctl.h"
17 #include "tty.h"
18 #include "proc.h"
19 #include "buf.h"
20 #include "msgbuf.h"
21 #include "mbuf.h"
22 #include "protosw.h"
23 #include "domain.h"
24 #include "map.h"
25 
26 /*
27  * Pseudo file for lint to show what is used/defined in locore.s.
28  */
29 
30 struct	scb scb;
31 struct	rpb rpb;
32 int	dumpflag;
33 int	intstack[3*NBPG];
34 int	masterpaddr;		/* p_addr of current process on master cpu */
35 struct	user u;
36 int	icode[8];
37 int	szicode = sizeof (icode);
38 /*
39  * Variables declared for savecore, or
40  * implicitly, such as by config or the loader.
41  */
42 char	version[] = "4.2 BSD UNIX ....";
43 int	etext;
44 
45 doadump() { dumpsys(); }
46 
47 lowinit()
48 {
49 	caddr_t cp;
50 	extern int dumpmag;
51 	extern int rthashsize;
52 	extern int arptab_size;
53 	extern int dk_ndrive;
54 	extern struct domain unixdomain;
55 #ifdef PUP
56 	extern struct domain pupdomain;
57 #endif
58 #ifdef INET
59 	extern struct domain inetdomain;
60 #endif
61 #include "imp.h"
62 #if NIMP > 0
63 	extern struct domain impdomain;
64 #endif
65 #ifdef NS
66 	extern struct domain nsdomain;
67 #endif
68 	extern int nport;
69 	extern short *swsize;
70 	extern int *swpf;
71 
72 	/* cpp messes these up for lint so put them here */
73 	unixdomain.dom_next = domains;
74 	domains = &unixdomain;
75 #ifdef PUP
76 	pupdomain.dom_next = domains;
77 	domains = &pupdomain;
78 #endif
79 #ifdef INET
80 	inetdomain.dom_next = domains;
81 	domains = &inetdomain;
82 #endif
83 #if NIMP > 0
84 	impdomain.dom_next = domains;
85 	domains = &impdomain;
86 #endif
87 #ifdef NS
88 	nsdomain.dom_next = domains;
89 	domains = &nsdomain;
90 #endif
91 	dumpmag = 0;			/* used only by savecore */
92 	rthashsize = rthashsize;	/* used by netstat, etc. */
93 	arptab_size = arptab_size;	/* used by arp command */
94 	dk_ndrive = dk_ndrive;		/* used by vmstat, iostat, etc. */
95 
96 	/*
97 	 * Pseudo-uses of globals.
98 	 */
99 	lowinit();
100 	intstack[0] = intstack[1];
101 	rpb = rpb;
102 	scb = scb;
103 	maxmem = physmem = freemem = 0;
104 	u = u;
105 	main(0);
106 	swsize = swsize;		/* XXX */
107 	swpf = swpf;			/* XXX */
108 	nport = nport;			/* XXX */
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 	if (zmemall((int (*)())0, 0) == (caddr_t)0)
134 		return;		/* use value */
135 	boothowto = 0;
136 /* the following are not currently used but will soon */
137 	if (rmget((struct map *)0, 0, 0) == 0)
138 		return;
139 	cp = calloc(0); cfreemem(cp, 0);
140 /* end not currently used */
141 	dumpflag = 0; dumpflag = dumpflag;
142 #if !defined(GPROF)
143 	cp = (caddr_t)&etext;
144 #endif
145 }
146 
147 struct	pte Sysmap[6*NPTEPG];
148 caddr_t	Sysbase;
149 struct	pte VMEMmap[1];
150 int	vmembeg, vmemend;
151 struct	pte Usrptmap[USRPTSIZE];
152 struct	pte usrpt[USRPTSIZE*NPTEPG];
153 struct	pte Forkmap[UPAGES];
154 struct	user forkutl;
155 struct	pte Xswapmap[UPAGES];
156 struct	user xswaputl;
157 struct	pte Xswap2map[UPAGES];
158 struct	user xswap2utl;
159 struct	pte Swapmap[UPAGES];
160 struct	user swaputl;
161 struct	pte Pushmap[UPAGES];
162 struct	user pushutl;
163 struct	pte Vfmap[UPAGES];
164 struct	user vfutl;
165 #include "fsd.h"
166 #if NVD > 0
167 struct	pte VD0map[MAXBPTE+1];
168 char	vd0utl[1];
169 #endif
170 #if NVD > 1
171 struct	pte VD1map[MAXBPTE+1];
172 char	vd1utl[1];
173 #endif
174 #if NVD > 2
175 struct	pte VD2map[MAXBPTE+1];
176 char	vd2utl[1];
177 #endif
178 #if NVD > 3
179 struct	pte VD3map[MAXBPTE+1];
180 char	vd3utl[1];
181 #endif
182 #include "cy.h"
183 #if NCY > 0
184 struct	pte CY0map[TBUFSIZ+1];
185 char	cy0utl[1];
186 #endif
187 #if NCY > 1
188 struct	pte CY1map[TBUFSIZ+1];
189 char	cy1utl[1];
190 #endif
191 #include "ace.h"
192 #if NACE > 0
193 struct	pte ACE0map[1], ACE1map[1];
194 char	ace0utl[1], ace1utl[1];
195 #endif
196 struct	pte CMAP1[1], CMAP2[1];
197 caddr_t	CADDR1, CADDR2;
198 struct	pte mmap[1];
199 char	vmmap[1];
200 struct	pte msgbufmap[3*NBPG];
201 struct	msgbuf msgbuf;
202 struct	pte camap[16];
203 int	cabase, calimit;
204 struct	pte Mbmap[NMBCLUSTERS/CLSIZE];
205 struct	mbuf mbutl[NMBCLUSTERS*CLBYTES/sizeof (struct mbuf)];
206 
207 /*ARGSUSED*/
208 badaddr(addr, len) caddr_t addr; int len; { return (0); }
209 #if NCY > 0
210 /*ARGSUSED*/
211 badcyaddr(addr) caddr_t addr; { return (0); }
212 #endif
213 /*ARGSUSED*/
214 ovbcopy(from, to, len) caddr_t from, to; unsigned len; { }
215 copyinstr(udaddr, kaddr, maxlength, lencopied)
216     caddr_t udaddr, kaddr; u_int maxlength, *lencopied;
217 { *kaddr = *udaddr; *lencopied = maxlength; return (0); }
218 copyoutstr(kaddr, udaddr, maxlength, lencopied)
219     caddr_t kaddr, udaddr; u_int maxlength, *lencopied;
220 { *kaddr = *udaddr; *lencopied = maxlength; return (0); }
221 copystr(kfaddr, kdaddr, maxlength, lencopied)
222     caddr_t kfaddr, kdaddr; u_int maxlength, *lencopied;
223 { *kdaddr = *kfaddr; *lencopied = maxlength; return (0); }
224 /*ARGSUSED*/
225 copyin(udaddr, kaddr, n) caddr_t udaddr, kaddr; u_int n; { return (0); }
226 /*ARGSUSED*/
227 copyout(kaddr, udaddr, n) caddr_t kaddr, udaddr; u_int n; { return (0); }
228 
229 /*ARGSUSED*/
230 longjmp(lp) label_t *lp; { /*NOTREACHED*/ }
231 
232 /*ARGSUSED*/
233 savectx(lp) label_t *lp; { return (0); }
234 
235 /*ARGSUSED*/
236 setrq(p) struct proc *p; { }
237 
238 /*ARGSUSED*/
239 remrq(p) struct proc *p; { }
240 
241 swtch() { if (whichqs) whichqs = 0; if (masterpaddr) masterpaddr = 0; }
242 
243 /*ARGSUSED*/
244 resume(pcbpf) unsigned pcbpf; { }
245 
246 /*ARGSUSED*/
247 fubyte(base) caddr_t base; { return (0); }
248 /*ARGSUSED*/
249 subyte(base, i) caddr_t base; { return (0); }
250 /*ARGSUSED*/
251 fuword(base) caddr_t base; { return (0); }
252 /*ARGSUSED*/
253 suword(base, i) caddr_t base; { return (0); }
254 
255 /*ARGSUSED*/
256 copyseg(udaddr, pf)
257     caddr_t udaddr; unsigned pf;
258 { CMAP1[0] = CMAP1[0]; CADDR1[0] = CADDR1[0]; }
259 
260 /*ARGSUSED*/
261 clearseg(pf) unsigned pf; { CMAP2[0] = CMAP2[0]; CADDR2[0] = CADDR2[0]; }
262 
263 /*ARGSUSED*/
264 useracc(udaddr, bcnt, rw) caddr_t udaddr; unsigned bcnt; { return (0); }
265 
266 /*ARGSUSED*/
267 kernacc(addr, bcnt, rw) caddr_t addr; unsigned bcnt; { return (0); }
268 
269 /*ARGSUSED*/
270 addupc(pc, prof, counts) int pc; struct uprof *prof; int counts; { }
271 
272 /*ARGSUSED*/
273 scanc(size, cp, table, mask)
274     unsigned size; char *cp, table[]; int mask;
275 { return (0); }
276 
277 /*ARGSUSED*/
278 skpc(mask, size, cp) int mask; char *cp; unsigned size; { return (0); }
279 
280 #ifdef notdef
281 /*ARGSUSED*/
282 locc(mask, size, cp) int mask; char *cp; unsigned size; { return (0); }
283 #endif
284 
285 /*
286  * Routines expanded by inline.
287  */
288 #ifdef notdef
289 fuibyte(base) caddr_t base; { return (fubyte(base)); }
290 #endif
291 fuiword(base) caddr_t base; { return (fuword(base)); }
292 suibyte(base, i) caddr_t base; { return (subyte(base, i)); }
293 suiword(base, i) caddr_t base; { return (suword(base, i)); }
294 
295 /*ARGSUSED*/
296 setjmp(lp) label_t *lp; { return (0); }
297 
298 /*ARGSUSED*/
299 _insque(p, q) caddr_t p, q; { }
300 /*ARGSUSED*/
301 _remque(p) caddr_t p; { }
302 
303 /*ARGSUSED*/
304 bcopy(from, to, len) caddr_t from, to; unsigned len; { }
305 /*ARGSUSED*/
306 bzero(base, count) caddr_t base; unsigned count; { }
307 /*ARGSUSED*/
308 blkclr(base, count) caddr_t base; unsigned count; { }
309 
310 /*ARGSUSED*/
311 /*VARARGS1*/
312 mtpr(reg, v) int reg; { }
313 /*ARGSUSED*/
314 mfpr(reg) int reg; { return (0); }
315 
316 /*ARGSUSED*/
317 _movow(dst, v) u_short *dst, v; { }
318 /*ARGSUSED*/
319 _movob(dst, v) u_char *dst, v; { }
320 
321 /*ARGSUSED*/
322 ffs(v) long v; { return (0); }
323 
324 imin(a, b) int a, b; { return (a < b ? a : b); }
325 imax(a, b) int a, b; { return (a > b ? a : b); }
326 unsigned min(a, b) u_int a, b; { return (a < b ? a : b); }
327 unsigned max(a, b) u_int a, b; { return (a > b ? a : b); }
328