|
|
1.1 root 1: /*
2: * Copyright (c) 1982, 1986 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.4 (Berkeley) 5/26/88
7: */
8:
9: #include "dz.h"
10: #include "mba.h"
11: #include "uba.h"
12:
13: #include "pte.h"
14:
15: #include "param.h"
16: #include "systm.h"
17: #include "dir.h"
18: #include "user.h"
19: #include "vm.h"
20: #include "ioctl.h"
21: #include "tty.h"
22: #include "proc.h"
23: #include "buf.h"
24: #include "msgbuf.h"
25: #include "mbuf.h"
26: #include "protosw.h"
27: #include "domain.h"
28: #include "map.h"
29: #include "dkbad.h"
30:
31: #include "scb.h"
32: #include "nexus.h"
33: #include "ioa.h"
34: #include "../vaxuba/ubavar.h"
35: #include "../vaxuba/ubareg.h"
36:
37: /*
38: * Pseudo file for lint to show what is used/defined in locore.s.
39: */
40:
41: struct scb scb[1];
42: int (*UNIvec[NUBA][128])(); /* unibus vec for ubas */
43: int (*eUNIvec)(); /* end of unibus vec */
44: struct rpb rpb;
45: int dumpflag;
46: int intstack[3*NBPG];
47: int masterpaddr; /* p_addr of current process on master cpu */
48: struct user u;
49: int icode[8];
50: int szicode = sizeof (icode);
51: /*
52: * Variables declared for savecore, or
53: * implicitly, such as by config or the loader.
54: */
55: char version[] = "4.3 BSD UNIX ....";
56: int etext;
57:
58: doadump() { dumpsys(); }
59:
60: #if NMBA > 0
61: Xmba3int() { }
62: Xmba2int() { }
63: Xmba1int() { }
64: Xmba0int() { }
65: #endif
66:
67: lowinit()
68: {
69: #if !defined(GPROF)
70: caddr_t cp;
71: #endif
72: extern int dumpmag;
73: extern int rthashsize;
74: extern int arptab_size;
75: extern int dk_ndrive;
76: extern struct domain unixdomain;
77: #ifdef INET
78: extern struct domain inetdomain;
79: #endif
80: #include "imp.h"
81: #if NIMP > 0
82: extern struct domain impdomain;
83: #endif
84: #ifdef NS
85: extern struct domain nsdomain;
86: #endif
87:
88: /* cpp messes these up for lint so put them here */
89: unixdomain.dom_next = domains;
90: domains = &unixdomain;
91: #ifdef INET
92: inetdomain.dom_next = domains;
93: domains = &inetdomain;
94: #endif
95: #if NIMP > 0
96: impdomain.dom_next = domains;
97: domains = &impdomain;
98: #endif
99: #ifdef NS
100: nsdomain.dom_next = domains;
101: domains = &nsdomain;
102: #endif
103: dumpmag = 0; /* used only by savecore */
104: rthashsize = rthashsize; /* used by netstat, etc. */
105: arptab_size = arptab_size; /* used by arp command */
106: dk_ndrive = dk_ndrive; /* used by vmstat, iostat, etc. */
107:
108: /*
109: * Pseudo-uses of globals.
110: */
111: lowinit();
112: intstack[0] = intstack[1];
113: rpb = rpb;
114: scb[0] = scb[0];
115: maxmem = physmem = freemem = 0;
116: u = u;
117: fixctlrmask();
118: main(0);
119: Xustray();
120:
121: /*
122: * Routines called from interrupt vectors.
123: */
124: panic("Machine check");
125: printf("Write timeout");
126: (*UNIvec[0][0])();
127: ubaerror(0, (struct uba_hd *)0, 0, 0, (struct uba_regs *)0);
128: cnrint(0);
129: cnxint(0);
130: consdin();
131: consdout();
132: #if NDZ > 0
133: dzdma();
134: #endif
135: #if NMBA > 0
136: mbintr(0);
137: #endif
138: #if VAX8200 /* XXX wrong conditional */
139: bi_buserr(0);
140: #endif
141: #if VAX8200
142: rxcdintr();
143: rx50intr();
144: #endif
145: hardclock((caddr_t)0, 0);
146: softclock((caddr_t)0, 0);
147: trap(0, 0, (unsigned)0, 0, 0);
148: syscall(0, 0, (unsigned)0, 0, 0);
149: rawintr();
150: #ifdef INET
151: ipintr();
152: #endif
153: #ifdef NS
154: nsintr();
155: #endif
156: machinecheck((caddr_t)0);
157: memerr();
158:
159: /*
160: * Miscellaneous routines called from configurable
161: * drivers.
162: */
163: ubapurge((struct uba_ctlr *)0);
164: ubattydma(0);
165: (void) ubamem(0, 0, 16, 1);
166: (void) isbad((struct dkbad *)0, 0, 0, 0);
167: disksort((struct buf *)0, (struct buf *)0);
168: (void) uwritec((struct uio *)0);
169: (void) todr();
170: if (vmemall((struct pte *)0, 0, (struct proc *)0, 0))
171: return; /* use value */
172: boothowto = 0;
173: dumpflag = 0; dumpflag = dumpflag;
174: #ifdef KADB
175: bootesym = 0; bootesym = bootesym;
176: #endif
177: #if !defined(GPROF)
178: cp = (caddr_t)&etext;
179: cp = cp;
180: #endif
181: }
182:
183: consdin() { }
184: consdout() { }
185: #if NDZ > 0
186: dzdma() { dzxint((struct tty *)0); }
187: #endif
188:
189: quad catcher[128];
190: int cold = 1;
191:
192: Xustray() { }
193:
194: struct pte Sysmap[6*NPTEPG];
195: #ifdef KADB
196: char Sysbase[6*NPTEPG*NBPG];
197: #endif
198: int umbabeg;
199: struct pte Nexmap[16][16];
200: struct nexus nexus[MAXNNEXUS];
201: #if VAX8600
202: struct pte Ioamap[MAXNIOA][IOAMAPSIZ/NBPG];
203: #endif
204: struct pte UMEMmap[NUBA][512];
205: char umem[NUBA][512*NBPG];
206: int umbaend;
207: struct pte Usrptmap[USRPTSIZE];
208: struct pte usrpt[USRPTSIZE*NPTEPG];
209: struct pte Forkmap[UPAGES];
210: struct user forkutl;
211: struct pte Xswapmap[UPAGES];
212: struct user xswaputl;
213: struct pte Xswap2map[UPAGES];
214: struct user xswap2utl;
215: struct pte Swapmap[UPAGES];
216: struct user swaputl;
217: struct pte Pushmap[UPAGES];
218: struct user pushutl;
219: struct pte Vfmap[UPAGES];
220: struct user vfutl;
221: struct pte CMAP1;
222: char CADDR1[NBPG];
223: struct pte CMAP2;
224: char CADDR2[NBPG];
225: struct pte mmap[1];
226: char vmmap[NBPG];
227: struct pte Mbmap[NMBCLUSTERS/CLSIZE];
228: struct mbuf mbutl[NMBCLUSTERS*CLBYTES/sizeof (struct mbuf)];
229: struct pte msgbufmap[CLSIZE];
230: struct msgbuf msgbuf;
231: struct pte kmempt[200], ekmempt[1];
232: #if VAX8200
233: struct pte RX50map[1];
234: struct pte Ka820map[1];
235: #endif
236: #if VAX630
237: struct pte Ka630map[1];
238: #endif
239: char kmembase[100*NBPG];
240: #if VAX8200 || VAX630
241: struct pte Clockmap[1];
242: #endif
243:
244: /*ARGSUSED*/
245: badaddr(addr, len) caddr_t addr; int len; { return (0); }
246:
247: /*ARGSUSED*/
248: ovbcopy(from, to, len) caddr_t from, to; unsigned len; { }
249: copyinstr(udaddr, kaddr, maxlength, lencopied)
250: caddr_t udaddr, kaddr; u_int maxlength, *lencopied;
251: { *kaddr = *udaddr; *lencopied = maxlength; return (0); }
252: copyoutstr(kaddr, udaddr, maxlength, lencopied)
253: caddr_t kaddr, udaddr; u_int maxlength, *lencopied;
254: { *udaddr = *kaddr; *lencopied = maxlength; return (0); }
255: copystr(kfaddr, kdaddr, maxlength, lencopied)
256: caddr_t kfaddr, kdaddr; u_int maxlength, *lencopied;
257: { *kdaddr = *kfaddr; *lencopied = maxlength; return (0); }
258:
259: /*ARGSUSED*/
260: copyin(udaddr, kaddr, n) caddr_t udaddr, kaddr; u_int n; { return (0); }
261: /*ARGSUSED*/
262: copyout(kaddr, udaddr, n) caddr_t kaddr, udaddr; u_int n; { return (0); }
263:
264: /*ARGSUSED*/
265: longjmp(lp) label_t *lp; { /*NOTREACHED*/ }
266:
267: /*ARGSUSED*/
268: savectx(lp) label_t *lp; { return (0); }
269:
270: /*ARGSUSED*/
271: setrq(p) struct proc *p; { }
272:
273: /*ARGSUSED*/
274: remrq(p) struct proc *p; { }
275:
276: swtch() { if (whichqs) whichqs = 0; if (masterpaddr) masterpaddr = 0; }
277:
278: /*ARGSUSED*/
279: resume(pcbpf) unsigned pcbpf; { }
280:
281: /*ARGSUSED*/
282: fubyte(base) caddr_t base; { return (0); }
283: #ifdef notdef
284: /*ARGSUSED*/
285: fuibyte(base) caddr_t base; { return (0); }
286: #endif
287: /*ARGSUSED*/
288: subyte(base, i) caddr_t base; { return (0); }
289: /*ARGSUSED*/
290: suibyte(base, i) caddr_t base; { return (0); }
291: /*ARGSUSED*/
292: fuword(base) caddr_t base; { return (0); }
293: /*ARGSUSED*/
294: fuiword(base) caddr_t base; { return (0); }
295: /*ARGSUSED*/
296: suword(base, i) caddr_t base; { return (0); }
297: /*ARGSUSED*/
298: suiword(base, i) caddr_t base; { return (0); }
299:
300: /*ARGSUSED*/
301: copyseg(udaddr, pf)
302: caddr_t udaddr; unsigned pf;
303: { CMAP1 = CMAP1; CADDR1[0] = CADDR1[0]; }
304:
305: /*ARGSUSED*/
306: clearseg(pf) unsigned pf; { CMAP2 = CMAP2; CADDR2[0] = CADDR2[0]; }
307:
308: /*ARGSUSED*/
309: useracc(udaddr, bcnt, rw) caddr_t udaddr; unsigned bcnt; { return (0); }
310:
311: /*ARGSUSED*/
312: kernacc(addr, bcnt, rw) caddr_t addr; unsigned bcnt; { return (0); }
313:
314: /*ARGSUSED*/
315: addupc(pc, prof, counts) int pc; struct uprof *prof; int counts; { }
316:
317: /*
318: * Routines expanded by inline.
319: */
320: spl0() { }
321: splsoftclock() { return (0); }
322: splnet() { return (0); }
323: spl4() { return (0); }
324: spl5() { return (0); }
325: splbio() { return (0); }
326: spltty() { return (0); }
327: #ifdef notdef
328: spl6() { return (0); } /* not currently used */
329: #endif
330: splclock() { return (0); }
331: spl7() { return (0); }
332: splhigh() { return (0); }
333:
334: /*ARGSUSED*/
335: splx(s) int s; { }
336:
337: /*ARGSUSED*/
338: bcopy(from, to, len) caddr_t from, to; unsigned len; { }
339: /*ARGSUSED*/
340: bzero(base, count) caddr_t base; unsigned count; { }
341: /*ARGSUSED*/
342: blkclr(base, count) caddr_t base; unsigned count; { }
343:
344: /*ARGSUSED*/
345: /*VARARGS1*/
346: mtpr(reg, v) int reg; { }
347: /*ARGSUSED*/
348: mfpr(reg) int reg; { return (0); }
349:
350: /*ARGSUSED*/
351: setjmp(lp) label_t *lp; { return (0); }
352:
353: #ifndef VAX630
354: /*ARGSUSED*/
355: scanc(size, cp, table, mask)
356: unsigned size; char *cp, table[]; int mask;
357: { return (0); }
358: #endif
359:
360: /*ARGSUSED*/
361: skpc(mask, size, cp) int mask; int size; char *cp; { return (0); }
362:
363: #ifdef notdef
364: /*ARGSUSED*/
365: locc(mask, size, cp) int mask; char *cp; unsigned size; { return (0); }
366: #endif
367:
368: /*ARGSUSED*/
369: _insque(p, q) caddr_t p, q; { }
370: /*ARGSUSED*/
371: _remque(p) caddr_t p; { }
372:
373: /*ARGSUSED*/
374: ffs(v) long v; { return (0); }
375:
376: #ifdef notdef
377: imin(a, b) int a, b; { return (a < b ? a : b); }
378: imax(a, b) int a, b; { return (a > b ? a : b); }
379: unsigned min(a, b) u_int a, b; { return (a < b ? a : b); }
380: unsigned max(a, b) u_int a, b; { return (a > b ? a : b); }
381: #endif
382: u_short ntohs(s) u_short s; { return ((u_short)s); }
383: u_short htons(s) u_short s; { return ((u_short)s); }
384: u_long ntohl(l) u_long l; { return ((u_long)l); }
385: u_long htonl(l) u_long l; { return ((u_long)l); }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.