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