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