xref: /original-bsd/sys/tahoe/tahoe/Locore.c (revision 9f374885)
1 /*	Locore.c	1.5	87/06/06	*/
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 #include "../tahoe/cpu.h"
27 
28 /*
29  * Pseudo file for lint to show what is used/defined in locore.s.
30  */
31 
32 struct	scb scb;
33 struct	rpb rpb;
34 int	dumpflag;
35 int	intstack[3*NBPG];
36 int	masterpaddr;		/* p_addr of current process on master cpu */
37 struct	user u;
38 int	icode[8];
39 int	szicode = sizeof (icode);
40 long	catcher[191];
41 /*
42  * Variables declared for savecore, or
43  * implicitly, such as by config or the loader.
44  */
45 char	version[] = "4.2 BSD UNIX ....";
46 int	etext;
47 int	end;
48 
49 doadump() { dumpsys(); }
50 
51 lowinit()
52 {
53 	caddr_t cp;
54 	extern int dumpmag;
55 	extern int rthashsize;
56 	extern int arptab_size;
57 	extern int dk_ndrive;
58 	extern struct domain unixdomain;
59 #ifdef PUP
60 	extern struct domain pupdomain;
61 #endif
62 #ifdef INET
63 	extern struct domain inetdomain;
64 #endif
65 #include "imp.h"
66 #if NIMP > 0
67 	extern struct domain impdomain;
68 #endif
69 #ifdef NS
70 	extern struct domain nsdomain;
71 #endif
72 
73 	/* cpp messes these up for lint so put them here */
74 	unixdomain.dom_next = domains;
75 	domains = &unixdomain;
76 #ifdef PUP
77 	pupdomain.dom_next = domains;
78 	domains = &pupdomain;
79 #endif
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 #if !defined(GPROF)
137 	cp = (caddr_t)&etext;
138 #endif
139 }
140 
141 struct	pte Sysmap[6*NPTEPG];
142 caddr_t	Sysbase;
143 struct	pte VMEMmap[1];
144 caddr_t	vmem, vmembeg, vmemend;
145 struct	pte VMEMmap1[1];
146 caddr_t	vmem1;
147 struct	pte VBmap[1];
148 caddr_t	vbbase, vbend;
149 struct	pte Usrptmap[USRPTSIZE];
150 struct	pte usrpt[USRPTSIZE*NPTEPG];
151 struct	pte Forkmap[UPAGES];
152 struct	user forkutl;
153 struct	pte Xswapmap[UPAGES];
154 struct	user xswaputl;
155 struct	pte Xswap2map[UPAGES];
156 struct	user xswap2utl;
157 struct	pte Swapmap[UPAGES];
158 struct	user swaputl;
159 struct	pte Pushmap[UPAGES];
160 struct	user pushutl;
161 struct	pte Vfmap[UPAGES];
162 struct	user vfutl;
163 struct	pte CMAP1[1], CMAP2[1];
164 caddr_t	CADDR1, CADDR2;
165 struct	pte mmap[1];
166 char	vmmap[1];
167 struct	pte msgbufmap[3*NBPG];
168 struct	msgbuf msgbuf;
169 struct	pte kmempt[100];
170 int	kmembase, kmemlimit;
171 struct	pte Mbmap[NMBCLUSTERS/CLSIZE];
172 struct	mbuf mbutl[NMBCLUSTERS*CLBYTES/sizeof (struct mbuf)];
173 
174 /*ARGSUSED*/
175 badaddr(addr, len) caddr_t addr; int len; { return (0); }
176 /*ARGSUSED*/
177 ovbcopy(from, to, len) caddr_t from, to; unsigned len; { }
178 copyinstr(udaddr, kaddr, maxlength, lencopied)
179     caddr_t udaddr, kaddr; u_int maxlength, *lencopied;
180 { *kaddr = *udaddr; *lencopied = maxlength; return (0); }
181 copyoutstr(kaddr, udaddr, maxlength, lencopied)
182     caddr_t kaddr, udaddr; u_int maxlength, *lencopied;
183 { *kaddr = *udaddr; *lencopied = maxlength; return (0); }
184 copystr(kfaddr, kdaddr, maxlength, lencopied)
185     caddr_t kfaddr, kdaddr; u_int maxlength, *lencopied;
186 { *kdaddr = *kfaddr; *lencopied = maxlength; return (0); }
187 /*ARGSUSED*/
188 copyin(udaddr, kaddr, n) caddr_t udaddr, kaddr; u_int n; { return (0); }
189 /*ARGSUSED*/
190 copyout(kaddr, udaddr, n) caddr_t kaddr, udaddr; u_int n; { return (0); }
191 
192 /*ARGSUSED*/
193 longjmp(lp) label_t *lp; { /*NOTREACHED*/ }
194 
195 /*ARGSUSED*/
196 savectx(lp) label_t *lp; { return (0); }
197 
198 /*ARGSUSED*/
199 setrq(p) struct proc *p; { }
200 
201 /*ARGSUSED*/
202 remrq(p) struct proc *p; { }
203 
204 swtch() { if (whichqs) whichqs = 0; if (masterpaddr) masterpaddr = 0; }
205 
206 /*ARGSUSED*/
207 resume(pcbpf) unsigned pcbpf; { }
208 
209 /*ARGSUSED*/
210 fubyte(base) caddr_t base; { return (0); }
211 /*ARGSUSED*/
212 subyte(base, i) caddr_t base; { return (0); }
213 /*ARGSUSED*/
214 fuword(base) caddr_t base; { return (0); }
215 /*ARGSUSED*/
216 suword(base, i) caddr_t base; { return (0); }
217 
218 /*ARGSUSED*/
219 copyseg(udaddr, pf)
220     caddr_t udaddr; unsigned pf;
221 { CMAP1[0] = CMAP1[0]; CADDR1[0] = CADDR1[0]; }
222 
223 /*ARGSUSED*/
224 clearseg(pf) unsigned pf; { CMAP2[0] = CMAP2[0]; CADDR2[0] = CADDR2[0]; }
225 
226 /*ARGSUSED*/
227 useracc(udaddr, bcnt, rw) caddr_t udaddr; unsigned bcnt; { return (0); }
228 
229 /*ARGSUSED*/
230 kernacc(addr, bcnt, rw) caddr_t addr; unsigned bcnt; { return (0); }
231 
232 /*ARGSUSED*/
233 addupc(pc, prof, counts) int pc; struct uprof *prof; int counts; { }
234 
235 /*ARGSUSED*/
236 scanc(size, cp, table, mask)
237     unsigned size; char *cp, table[]; int mask;
238 { return (0); }
239 
240 /*ARGSUSED*/
241 skpc(mask, size, cp) int mask; int size; char *cp; { return (0); }
242 
243 #ifdef notdef
244 /*ARGSUSED*/
245 locc(mask, size, cp) int mask; int size; char *cp; { return (0); }
246 #endif
247 
248 /*
249  * Routines expanded by inline.
250  */
251 #ifdef notdef
252 fuibyte(base) caddr_t base; { return (fubyte(base)); }
253 #endif
254 fuiword(base) caddr_t base; { return (fuword(base)); }
255 suibyte(base, i) caddr_t base; { return (subyte(base, i)); }
256 suiword(base, i) caddr_t base; { return (suword(base, i)); }
257 
258 /*ARGSUSED*/
259 setjmp(lp) label_t *lp; { return (0); }
260 
261 /*ARGSUSED*/
262 _insque(p, q) caddr_t p, q; { }
263 /*ARGSUSED*/
264 _remque(p) caddr_t p; { }
265 
266 /*ARGSUSED*/
267 bcopy(from, to, len) caddr_t from, to; unsigned len; { }
268 /*ARGSUSED*/
269 bzero(base, count) caddr_t base; unsigned count; { }
270 /*ARGSUSED*/
271 blkclr(base, count) caddr_t base; unsigned count; { }
272 
273 /*ARGSUSED*/
274 /*VARARGS1*/
275 mtpr(reg, v) int reg; { }
276 /*ARGSUSED*/
277 mfpr(reg) int reg; { return (0); }
278 
279 /*ARGSUSED*/
280 _movow(dst, v) u_short *dst, v; { }
281 /*ARGSUSED*/
282 _movob(dst, v) u_char *dst, v; { }
283 
284 /*ARGSUSED*/
285 ffs(v) long v; { return (0); }
286 
287 imin(a, b) int a, b; { return (a < b ? a : b); }
288 imax(a, b) int a, b; { return (a > b ? a : b); }
289 #ifdef notdef
290 unsigned min(a, b) u_int a, b; { return (a < b ? a : b); }
291 unsigned max(a, b) u_int a, b; { return (a > b ? a : b); }
292 #endif
293