|
|
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.2 (Berkeley) 5/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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.