1 /* Locore.c 1.2 86/01/05 */ 2 3 #include "../tahoe/mtpr.h" 4 #include "../tahoe/trap.h" 5 #include "../tahoe/psl.h" 6 #include "../tahoe/pte.h" 7 #include "../tahoe/cp.h" 8 #include "../tahoe/mem.h" 9 #include "../tahoemath/fp.h" 10 11 #include "param.h" 12 #include "systm.h" 13 #include "dir.h" 14 #include "user.h" 15 #include "vm.h" 16 #include "ioctl.h" 17 #include "tty.h" 18 #include "proc.h" 19 #include "buf.h" 20 #include "msgbuf.h" 21 #include "mbuf.h" 22 #include "protosw.h" 23 #include "domain.h" 24 #include "map.h" 25 26 /* 27 * Pseudo file for lint to show what is used/defined in locore.s. 28 */ 29 30 struct scb scb; 31 struct rpb rpb; 32 int dumpflag; 33 int intstack[3*NBPG]; 34 int masterpaddr; /* p_addr of current process on master cpu */ 35 struct user u; 36 int icode[8]; 37 int szicode = sizeof (icode); 38 /* 39 * Variables declared for savecore, or 40 * implicitly, such as by config or the loader. 41 */ 42 char version[] = "4.2 BSD UNIX ...."; 43 int etext; 44 45 doadump() { dumpsys(); } 46 47 lowinit() 48 { 49 caddr_t cp; 50 extern int dumpmag; 51 extern int rthashsize; 52 extern int arptab_size; 53 extern int dk_ndrive; 54 extern struct domain unixdomain; 55 #ifdef PUP 56 extern struct domain pupdomain; 57 #endif 58 #ifdef INET 59 extern struct domain inetdomain; 60 #endif 61 #include "imp.h" 62 #if NIMP > 0 63 extern struct domain impdomain; 64 #endif 65 #ifdef NS 66 extern struct domain nsdomain; 67 #endif 68 extern int nport; 69 extern short *swsize; 70 extern int *swpf; 71 72 /* cpp messes these up for lint so put them here */ 73 unixdomain.dom_next = domains; 74 domains = &unixdomain; 75 #ifdef PUP 76 pupdomain.dom_next = domains; 77 domains = &pupdomain; 78 #endif 79 #ifdef INET 80 inetdomain.dom_next = domains; 81 domains = &inetdomain; 82 #endif 83 #if NIMP > 0 84 impdomain.dom_next = domains; 85 domains = &impdomain; 86 #endif 87 #ifdef NS 88 nsdomain.dom_next = domains; 89 domains = &nsdomain; 90 #endif 91 dumpmag = 0; /* used only by savecore */ 92 rthashsize = rthashsize; /* used by netstat, etc. */ 93 arptab_size = arptab_size; /* used by arp command */ 94 dk_ndrive = dk_ndrive; /* used by vmstat, iostat, etc. */ 95 96 /* 97 * Pseudo-uses of globals. 98 */ 99 lowinit(); 100 intstack[0] = intstack[1]; 101 rpb = rpb; 102 scb = scb; 103 maxmem = physmem = freemem = 0; 104 u = u; 105 main(0); 106 swsize = swsize; /* XXX */ 107 swpf = swpf; /* XXX */ 108 nport = nport; /* XXX */ 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 if (zmemall((int (*)())0, 0) == (caddr_t)0) 134 return; /* use value */ 135 boothowto = 0; 136 /* the following are not currently used but will soon */ 137 if (rmget((struct map *)0, 0, 0) == 0) 138 return; 139 cp = calloc(0); cfreemem(cp, 0); 140 /* end not currently used */ 141 dumpflag = 0; dumpflag = dumpflag; 142 #if !defined(GPROF) 143 cp = (caddr_t)&etext; 144 #endif 145 } 146 147 struct pte Sysmap[6*NPTEPG]; 148 caddr_t Sysbase; 149 struct pte VMEMmap[1]; 150 int vmembeg, vmemend; 151 struct pte Usrptmap[USRPTSIZE]; 152 struct pte usrpt[USRPTSIZE*NPTEPG]; 153 struct pte Forkmap[UPAGES]; 154 struct user forkutl; 155 struct pte Xswapmap[UPAGES]; 156 struct user xswaputl; 157 struct pte Xswap2map[UPAGES]; 158 struct user xswap2utl; 159 struct pte Swapmap[UPAGES]; 160 struct user swaputl; 161 struct pte Pushmap[UPAGES]; 162 struct user pushutl; 163 struct pte Vfmap[UPAGES]; 164 struct user vfutl; 165 #include "fsd.h" 166 #if NVD > 0 167 struct pte VD0map[MAXBPTE+1]; 168 char vd0utl[1]; 169 #endif 170 #if NVD > 1 171 struct pte VD1map[MAXBPTE+1]; 172 char vd1utl[1]; 173 #endif 174 #if NVD > 2 175 struct pte VD2map[MAXBPTE+1]; 176 char vd2utl[1]; 177 #endif 178 #if NVD > 3 179 struct pte VD3map[MAXBPTE+1]; 180 char vd3utl[1]; 181 #endif 182 #include "cy.h" 183 #if NCY > 0 184 struct pte CY0map[TBUFSIZ+1]; 185 char cy0utl[1]; 186 #endif 187 #if NCY > 1 188 struct pte CY1map[TBUFSIZ+1]; 189 char cy1utl[1]; 190 #endif 191 #include "ace.h" 192 #if NACE > 0 193 struct pte ACE0map[1], ACE1map[1]; 194 char ace0utl[1], ace1utl[1]; 195 #endif 196 struct pte CMAP1[1], CMAP2[1]; 197 caddr_t CADDR1, CADDR2; 198 struct pte mmap[1]; 199 char vmmap[1]; 200 struct pte msgbufmap[3*NBPG]; 201 struct msgbuf msgbuf; 202 struct pte camap[16]; 203 int cabase, calimit; 204 struct pte Mbmap[NMBCLUSTERS/CLSIZE]; 205 struct mbuf mbutl[NMBCLUSTERS*CLBYTES/sizeof (struct mbuf)]; 206 207 /*ARGSUSED*/ 208 badaddr(addr, len) caddr_t addr; int len; { return (0); } 209 #if NCY > 0 210 /*ARGSUSED*/ 211 badcyaddr(addr) caddr_t addr; { return (0); } 212 #endif 213 /*ARGSUSED*/ 214 ovbcopy(from, to, len) caddr_t from, to; unsigned len; { } 215 copyinstr(udaddr, kaddr, maxlength, lencopied) 216 caddr_t udaddr, kaddr; u_int maxlength, *lencopied; 217 { *kaddr = *udaddr; *lencopied = maxlength; return (0); } 218 copyoutstr(kaddr, udaddr, maxlength, lencopied) 219 caddr_t kaddr, udaddr; u_int maxlength, *lencopied; 220 { *kaddr = *udaddr; *lencopied = maxlength; return (0); } 221 copystr(kfaddr, kdaddr, maxlength, lencopied) 222 caddr_t kfaddr, kdaddr; u_int maxlength, *lencopied; 223 { *kdaddr = *kfaddr; *lencopied = maxlength; return (0); } 224 /*ARGSUSED*/ 225 copyin(udaddr, kaddr, n) caddr_t udaddr, kaddr; u_int n; { return (0); } 226 /*ARGSUSED*/ 227 copyout(kaddr, udaddr, n) caddr_t kaddr, udaddr; u_int n; { return (0); } 228 229 /*ARGSUSED*/ 230 longjmp(lp) label_t *lp; { /*NOTREACHED*/ } 231 232 /*ARGSUSED*/ 233 savectx(lp) label_t *lp; { return (0); } 234 235 /*ARGSUSED*/ 236 setrq(p) struct proc *p; { } 237 238 /*ARGSUSED*/ 239 remrq(p) struct proc *p; { } 240 241 swtch() { if (whichqs) whichqs = 0; if (masterpaddr) masterpaddr = 0; } 242 243 /*ARGSUSED*/ 244 resume(pcbpf) unsigned pcbpf; { } 245 246 /*ARGSUSED*/ 247 fubyte(base) caddr_t base; { return (0); } 248 /*ARGSUSED*/ 249 subyte(base, i) caddr_t base; { return (0); } 250 /*ARGSUSED*/ 251 fuword(base) caddr_t base; { return (0); } 252 /*ARGSUSED*/ 253 suword(base, i) caddr_t base; { return (0); } 254 255 /*ARGSUSED*/ 256 copyseg(udaddr, pf) 257 caddr_t udaddr; unsigned pf; 258 { CMAP1[0] = CMAP1[0]; CADDR1[0] = CADDR1[0]; } 259 260 /*ARGSUSED*/ 261 clearseg(pf) unsigned pf; { CMAP2[0] = CMAP2[0]; CADDR2[0] = CADDR2[0]; } 262 263 /*ARGSUSED*/ 264 useracc(udaddr, bcnt, rw) caddr_t udaddr; unsigned bcnt; { return (0); } 265 266 /*ARGSUSED*/ 267 kernacc(addr, bcnt, rw) caddr_t addr; unsigned bcnt; { return (0); } 268 269 /*ARGSUSED*/ 270 addupc(pc, prof, counts) int pc; struct uprof *prof; int counts; { } 271 272 /*ARGSUSED*/ 273 scanc(size, cp, table, mask) 274 unsigned size; char *cp, table[]; int mask; 275 { return (0); } 276 277 /*ARGSUSED*/ 278 skpc(mask, size, cp) int mask; char *cp; unsigned size; { return (0); } 279 280 #ifdef notdef 281 /*ARGSUSED*/ 282 locc(mask, size, cp) int mask; char *cp; unsigned size; { return (0); } 283 #endif 284 285 /* 286 * Routines expanded by inline. 287 */ 288 #ifdef notdef 289 fuibyte(base) caddr_t base; { return (fubyte(base)); } 290 #endif 291 fuiword(base) caddr_t base; { return (fuword(base)); } 292 suibyte(base, i) caddr_t base; { return (subyte(base, i)); } 293 suiword(base, i) caddr_t base; { return (suword(base, i)); } 294 295 /*ARGSUSED*/ 296 setjmp(lp) label_t *lp; { return (0); } 297 298 /*ARGSUSED*/ 299 _insque(p, q) caddr_t p, q; { } 300 /*ARGSUSED*/ 301 _remque(p) caddr_t p; { } 302 303 /*ARGSUSED*/ 304 bcopy(from, to, len) caddr_t from, to; unsigned len; { } 305 /*ARGSUSED*/ 306 bzero(base, count) caddr_t base; unsigned count; { } 307 /*ARGSUSED*/ 308 blkclr(base, count) caddr_t base; unsigned count; { } 309 310 /*ARGSUSED*/ 311 /*VARARGS1*/ 312 mtpr(reg, v) int reg; { } 313 /*ARGSUSED*/ 314 mfpr(reg) int reg; { return (0); } 315 316 /*ARGSUSED*/ 317 _movow(dst, v) u_short *dst, v; { } 318 /*ARGSUSED*/ 319 _movob(dst, v) u_char *dst, v; { } 320 321 /*ARGSUSED*/ 322 ffs(v) long v; { return (0); } 323 324 imin(a, b) int a, b; { return (a < b ? a : b); } 325 imax(a, b) int a, b; { return (a > b ? a : b); } 326 unsigned min(a, b) u_int a, b; { return (a < b ? a : b); } 327 unsigned max(a, b) u_int a, b; { return (a > b ? a : b); } 328