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