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