|
|
1.1 root 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.3 (Berkeley) 5/9/89
7: */
8:
9: #include "param.h"
10: #include "systm.h"
11: #include "user.h"
12: #include "vm.h"
13: #include "ioctl.h"
14: #include "tty.h"
15: #include "proc.h"
16: #include "buf.h"
17: #include "msgbuf.h"
18: #include "mbuf.h"
19: #include "protosw.h"
20: #include "domain.h"
21: #include "map.h"
22:
23: #include "cpu.h"
24: #include "mtpr.h"
25: #include "trap.h"
26: #include "psl.h"
27: #include "pte.h"
28: #include "scb.h"
29: #include "cp.h"
30: #include "mem.h"
31:
32: #include "../tahoemath/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: setrq(p) struct proc *p; { }
208:
209: /*ARGSUSED*/
210: remrq(p) struct proc *p; { }
211:
212: swtch() { 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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.