1 /* Locore.c 1.5 87/06/06 */ 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 #include "../tahoe/cpu.h" 27 28 /* 29 * Pseudo file for lint to show what is used/defined in locore.s. 30 */ 31 32 struct scb scb; 33 struct rpb rpb; 34 int dumpflag; 35 int intstack[3*NBPG]; 36 int masterpaddr; /* p_addr of current process on master cpu */ 37 struct user u; 38 int icode[8]; 39 int szicode = sizeof (icode); 40 long catcher[191]; 41 /* 42 * Variables declared for savecore, or 43 * implicitly, such as by config or the loader. 44 */ 45 char version[] = "4.2 BSD UNIX ...."; 46 int etext; 47 int end; 48 49 doadump() { dumpsys(); } 50 51 lowinit() 52 { 53 caddr_t cp; 54 extern int dumpmag; 55 extern int rthashsize; 56 extern int arptab_size; 57 extern int dk_ndrive; 58 extern struct domain unixdomain; 59 #ifdef PUP 60 extern struct domain pupdomain; 61 #endif 62 #ifdef INET 63 extern struct domain inetdomain; 64 #endif 65 #include "imp.h" 66 #if NIMP > 0 67 extern struct domain impdomain; 68 #endif 69 #ifdef NS 70 extern struct domain nsdomain; 71 #endif 72 73 /* cpp messes these up for lint so put them here */ 74 unixdomain.dom_next = domains; 75 domains = &unixdomain; 76 #ifdef PUP 77 pupdomain.dom_next = domains; 78 domains = &pupdomain; 79 #endif 80 #ifdef INET 81 inetdomain.dom_next = domains; 82 domains = &inetdomain; 83 #endif 84 #if NIMP > 0 85 impdomain.dom_next = domains; 86 domains = &impdomain; 87 #endif 88 #ifdef NS 89 nsdomain.dom_next = domains; 90 domains = &nsdomain; 91 #endif 92 dumpmag = 0; /* used only by savecore */ 93 rthashsize = rthashsize; /* used by netstat, etc. */ 94 arptab_size = arptab_size; /* used by arp command */ 95 dk_ndrive = dk_ndrive; /* used by vmstat, iostat, etc. */ 96 97 /* 98 * Pseudo-uses of globals. 99 */ 100 lowinit(); 101 intstack[0] = intstack[1]; 102 rpb = rpb; 103 scb = scb; 104 maxmem = physmem = freemem = 0; 105 u = u; 106 fixctlrmask(); 107 main(0); 108 109 /* 110 * Routines called from interrupt vectors. 111 */ 112 buserror((caddr_t)0); 113 panic("Machine check"); 114 printf("Write timeout"); 115 rawintr(); 116 #ifdef INET 117 ipintr(); 118 #endif 119 #ifdef NS 120 nsintr(); 121 #endif 122 cnrint(0); 123 cnxint(0); 124 hardclock((caddr_t)0, 0); 125 softclock((caddr_t)0, 0); 126 fpemulate(0, 0, 0, 0, 0, 0, 0, 0, 0); 127 trap(0, 0, 0, 0, 0, 0, (unsigned)0, 0, 0); 128 syscall(0, 0, 0, 0, 0, 0, (unsigned)0, 0, 0); 129 130 if (vmemall((struct pte *)0, 0, (struct proc *)0, 0)) 131 return; /* use value */ 132 boothowto = 0; 133 if (rmget((struct map *)0, 0, 0) == 0) 134 return; 135 dumpflag = 0; dumpflag = dumpflag; 136 #if !defined(GPROF) 137 cp = (caddr_t)&etext; 138 #endif 139 } 140 141 struct pte Sysmap[6*NPTEPG]; 142 caddr_t Sysbase; 143 struct pte VMEMmap[1]; 144 caddr_t vmem, vmembeg, vmemend; 145 struct pte VMEMmap1[1]; 146 caddr_t vmem1; 147 struct pte VBmap[1]; 148 caddr_t vbbase, vbend; 149 struct pte Usrptmap[USRPTSIZE]; 150 struct pte usrpt[USRPTSIZE*NPTEPG]; 151 struct pte Forkmap[UPAGES]; 152 struct user forkutl; 153 struct pte Xswapmap[UPAGES]; 154 struct user xswaputl; 155 struct pte Xswap2map[UPAGES]; 156 struct user xswap2utl; 157 struct pte Swapmap[UPAGES]; 158 struct user swaputl; 159 struct pte Pushmap[UPAGES]; 160 struct user pushutl; 161 struct pte Vfmap[UPAGES]; 162 struct user vfutl; 163 struct pte CMAP1[1], CMAP2[1]; 164 caddr_t CADDR1, CADDR2; 165 struct pte mmap[1]; 166 char vmmap[1]; 167 struct pte msgbufmap[3*NBPG]; 168 struct msgbuf msgbuf; 169 struct pte kmempt[100]; 170 int kmembase, kmemlimit; 171 struct pte Mbmap[NMBCLUSTERS/CLSIZE]; 172 struct mbuf mbutl[NMBCLUSTERS*CLBYTES/sizeof (struct mbuf)]; 173 174 /*ARGSUSED*/ 175 badaddr(addr, len) caddr_t addr; int len; { return (0); } 176 /*ARGSUSED*/ 177 ovbcopy(from, to, len) caddr_t from, to; unsigned len; { } 178 copyinstr(udaddr, kaddr, maxlength, lencopied) 179 caddr_t udaddr, kaddr; u_int maxlength, *lencopied; 180 { *kaddr = *udaddr; *lencopied = maxlength; return (0); } 181 copyoutstr(kaddr, udaddr, maxlength, lencopied) 182 caddr_t kaddr, udaddr; u_int maxlength, *lencopied; 183 { *kaddr = *udaddr; *lencopied = maxlength; return (0); } 184 copystr(kfaddr, kdaddr, maxlength, lencopied) 185 caddr_t kfaddr, kdaddr; u_int maxlength, *lencopied; 186 { *kdaddr = *kfaddr; *lencopied = maxlength; return (0); } 187 /*ARGSUSED*/ 188 copyin(udaddr, kaddr, n) caddr_t udaddr, kaddr; u_int n; { return (0); } 189 /*ARGSUSED*/ 190 copyout(kaddr, udaddr, n) caddr_t kaddr, udaddr; u_int n; { return (0); } 191 192 /*ARGSUSED*/ 193 longjmp(lp) label_t *lp; { /*NOTREACHED*/ } 194 195 /*ARGSUSED*/ 196 savectx(lp) label_t *lp; { return (0); } 197 198 /*ARGSUSED*/ 199 setrq(p) struct proc *p; { } 200 201 /*ARGSUSED*/ 202 remrq(p) struct proc *p; { } 203 204 swtch() { if (whichqs) whichqs = 0; if (masterpaddr) masterpaddr = 0; } 205 206 /*ARGSUSED*/ 207 resume(pcbpf) unsigned pcbpf; { } 208 209 /*ARGSUSED*/ 210 fubyte(base) caddr_t base; { return (0); } 211 /*ARGSUSED*/ 212 subyte(base, i) caddr_t base; { return (0); } 213 /*ARGSUSED*/ 214 fuword(base) caddr_t base; { return (0); } 215 /*ARGSUSED*/ 216 suword(base, i) caddr_t base; { return (0); } 217 218 /*ARGSUSED*/ 219 copyseg(udaddr, pf) 220 caddr_t udaddr; unsigned pf; 221 { CMAP1[0] = CMAP1[0]; CADDR1[0] = CADDR1[0]; } 222 223 /*ARGSUSED*/ 224 clearseg(pf) unsigned pf; { CMAP2[0] = CMAP2[0]; CADDR2[0] = CADDR2[0]; } 225 226 /*ARGSUSED*/ 227 useracc(udaddr, bcnt, rw) caddr_t udaddr; unsigned bcnt; { return (0); } 228 229 /*ARGSUSED*/ 230 kernacc(addr, bcnt, rw) caddr_t addr; unsigned bcnt; { return (0); } 231 232 /*ARGSUSED*/ 233 addupc(pc, prof, counts) int pc; struct uprof *prof; int counts; { } 234 235 /*ARGSUSED*/ 236 scanc(size, cp, table, mask) 237 unsigned size; char *cp, table[]; int mask; 238 { return (0); } 239 240 /*ARGSUSED*/ 241 skpc(mask, size, cp) int mask; int size; char *cp; { return (0); } 242 243 #ifdef notdef 244 /*ARGSUSED*/ 245 locc(mask, size, cp) int mask; int size; char *cp; { return (0); } 246 #endif 247 248 /* 249 * Routines expanded by inline. 250 */ 251 #ifdef notdef 252 fuibyte(base) caddr_t base; { return (fubyte(base)); } 253 #endif 254 fuiword(base) caddr_t base; { return (fuword(base)); } 255 suibyte(base, i) caddr_t base; { return (subyte(base, i)); } 256 suiword(base, i) caddr_t base; { return (suword(base, i)); } 257 258 /*ARGSUSED*/ 259 setjmp(lp) label_t *lp; { return (0); } 260 261 /*ARGSUSED*/ 262 _insque(p, q) caddr_t p, q; { } 263 /*ARGSUSED*/ 264 _remque(p) caddr_t p; { } 265 266 /*ARGSUSED*/ 267 bcopy(from, to, len) caddr_t from, to; unsigned len; { } 268 /*ARGSUSED*/ 269 bzero(base, count) caddr_t base; unsigned count; { } 270 /*ARGSUSED*/ 271 blkclr(base, count) caddr_t base; unsigned count; { } 272 273 /*ARGSUSED*/ 274 /*VARARGS1*/ 275 mtpr(reg, v) int reg; { } 276 /*ARGSUSED*/ 277 mfpr(reg) int reg; { return (0); } 278 279 /*ARGSUSED*/ 280 _movow(dst, v) u_short *dst, v; { } 281 /*ARGSUSED*/ 282 _movob(dst, v) u_char *dst, v; { } 283 284 /*ARGSUSED*/ 285 ffs(v) long v; { return (0); } 286 287 imin(a, b) int a, b; { return (a < b ? a : b); } 288 imax(a, b) int a, b; { return (a > b ? a : b); } 289 #ifdef notdef 290 unsigned min(a, b) u_int a, b; { return (a < b ? a : b); } 291 unsigned max(a, b) u_int a, b; { return (a > b ? a : b); } 292 #endif 293