|
|
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.