1 /* 2 * Copyright (c) 1992 Regents of the University of California. 3 * All rights reserved. 4 * 5 * %sccs.include.redist.c% 6 * 7 * @(#)Locore.c 7.2 (Berkeley) 10/11/92 8 */ 9 10 #include <sys/param.h> 11 #include <sys/systm.h> 12 #include <sys/user.h> 13 #include <sys/vm.h> 14 #include <sys/ioctl.h> 15 #include <sys/tty.h> 16 #include <sys/proc.h> 17 #include <sys/buf.h> 18 #include <sys/mbuf.h> 19 #include <sys/protosw.h> 20 #include <sys/domain.h> 21 #include <sys/map.h> 22 23 #include <machine/pte.h> 24 25 /* 26 * Pseudo file for lint to show what is used/defined in locore.s. 27 */ 28 29 int dumpflag; 30 int intstack[3*NBPG]; 31 int icode[8]; 32 int szicode = sizeof (icode); 33 char MachUTLBMiss[10], MachUTLBMissEnd[1]; 34 char MachException[10], MachException[1]; 35 36 /* 37 * Variables declared for savecore, or 38 * implicitly, such as by config or the loader. 39 */ 40 char version[] = "4.3 BSD UNIX ...."; 41 int etext; 42 43 lowinit() 44 { 45 #if !defined(GPROF) 46 caddr_t cp; 47 #endif 48 extern int dumpmag; 49 extern int rthashsize; 50 extern int arptab_size; 51 extern int dk_ndrive; 52 extern struct domain unixdomain; 53 #ifdef INET 54 extern struct domain inetdomain; 55 #endif 56 #include "imp.h" 57 #if NIMP > 0 58 extern struct domain impdomain; 59 #endif 60 #ifdef NS 61 extern struct domain nsdomain; 62 #endif 63 64 /* cpp messes these up for lint so put them here */ 65 unixdomain.dom_next = domains; 66 domains = &unixdomain; 67 #ifdef INET 68 inetdomain.dom_next = domains; 69 domains = &inetdomain; 70 #endif 71 #if NIMP > 0 72 impdomain.dom_next = domains; 73 domains = &impdomain; 74 #endif 75 #ifdef NS 76 nsdomain.dom_next = domains; 77 domains = &nsdomain; 78 #endif 79 dumpmag = 0; /* used only by savecore */ 80 rthashsize = rthashsize; /* used by netstat, etc. */ 81 arptab_size = arptab_size; /* used by arp command */ 82 dk_ndrive = dk_ndrive; /* used by vmstat, iostat, etc. */ 83 84 /* 85 * Pseudo-uses of globals. 86 */ 87 lowinit(); 88 intstack[0] = intstack[1]; 89 maxmem = physmem = freemem = 0; 90 u = u; 91 fixctlrmask(); 92 main(0); 93 Xustray(); 94 95 /* 96 * Routines called from interrupt vectors. 97 */ 98 panic("Machine check"); 99 printf("Write timeout"); 100 consdin(); 101 consdout(); 102 hardclock((caddr_t)0, 0); 103 softclock((caddr_t)0, 0); 104 trap((unsigned)0, (unsigned)0, (unsigned)0, (unsigned)0); 105 memerr(); 106 107 /* 108 * Miscellaneous routines called from configurable 109 * drivers. 110 */ 111 disksort((struct buf *)0, (struct buf *)0); 112 (void) uwritec((struct uio *)0); 113 (void) todr(); 114 if (vmemall((struct pte *)0, 0, (struct proc *)0, 0)) 115 return; /* use value */ 116 boothowto = 0; 117 dumpflag = 0; dumpflag = dumpflag; 118 #ifdef KADB 119 bootesym = 0; bootesym = bootesym; 120 #endif 121 #if !defined(GPROF) 122 cp = (caddr_t)&etext; 123 cp = cp; 124 #endif 125 } 126 127 struct pte Sysmap[6*NPTEPG]; 128 #ifdef KADB 129 char Sysbase[6*NPTEPG*NBPG]; 130 #endif 131 struct pte Usrptmap[USRPTSIZE]; 132 struct pte usrpt[USRPTSIZE*NPTEPG]; 133 struct pte Usriomap[USRIOSIZE]; 134 struct pte usrio[USRIOSIZE*NPTEPG]; 135 struct pte Forkmap[UPAGES]; 136 struct user forkutl; 137 struct pte Xswapmap[UPAGES]; 138 struct user xswaputl; 139 struct pte Xswap2map[UPAGES]; 140 struct user xswap2utl; 141 struct pte Swapmap[UPAGES]; 142 struct user swaputl; 143 struct pte Pushmap[UPAGES]; 144 struct user pushutl; 145 struct pte Vfmap[UPAGES]; 146 struct user vfutl; 147 struct pte Mbmap[NMBCLUSTERS/CLSIZE]; 148 struct mbuf mbutl[NMBCLUSTERS*CLBYTES/sizeof (struct mbuf)]; 149 struct pte kmempt[200]; 150 char kmembase[100*NBPG]; 151 152 /*ARGSUSED*/ 153 badaddr(addr, len) char *addr; int len; { return (0); } 154 155 /*ARGSUSED*/ 156 copyinstr(udaddr, kaddr, maxlength, lencopied) 157 caddr_t udaddr, kaddr; u_int maxlength, *lencopied; 158 { *kaddr = *udaddr; *lencopied = maxlength; return (0); } 159 copyoutstr(kaddr, udaddr, maxlength, lencopied) 160 caddr_t kaddr, udaddr; u_int maxlength, *lencopied; 161 { *udaddr = *kaddr; *lencopied = maxlength; return (0); } 162 copystr(kfaddr, kdaddr, maxlength, lencopied) 163 caddr_t kfaddr, kdaddr; u_int maxlength, *lencopied; 164 { *kdaddr = *kfaddr; *lencopied = maxlength; return (0); } 165 166 /*ARGSUSED*/ 167 copyin(udaddr, kaddr, n) caddr_t udaddr, kaddr; u_int n; { return (0); } 168 /*ARGSUSED*/ 169 copyout(kaddr, udaddr, n) caddr_t kaddr, udaddr; u_int n; { return (0); } 170 171 /*ARGSUSED*/ 172 bzero(to, n) caddr_t to; u_int n; { } 173 /*ARGSUSED*/ 174 bcmp(from, to, n) caddr_t from, to; u_int n; { } 175 /*ARGSUSED*/ 176 bcopy(from, to, n) caddr_t from, to; u_int n; { } 177 178 /*ARGSUSED*/ 179 CopyToBuffer(src, dst, length) 180 u_short *src, *dst; int length; 181 { *dst = *src; } 182 /*ARGSUSED*/ 183 CopyFromBuffer(src, dst, length) 184 u_short *src; char *dst; int length; 185 { *dst = *src; } 186 187 /*ARGSUSED*/ 188 savectx(lp) label_t *lp; { return (0); } 189 190 /*ARGSUSED*/ 191 setrq(p) struct proc *p; { } 192 193 /*ARGSUSED*/ 194 remrq(p) struct proc *p; { } 195 196 swtch() { if (whichqs) whichqs = 0; } 197 198 /*ARGSUSED*/ 199 fubyte(base) caddr_t base; { return (0); } 200 #ifdef notdef 201 /*ARGSUSED*/ 202 fuibyte(base) caddr_t base; { return (0); } 203 #endif 204 /*ARGSUSED*/ 205 subyte(base, i) caddr_t base; { return (0); } 206 /*ARGSUSED*/ 207 suibyte(base, i) caddr_t base; { return (0); } 208 /*ARGSUSED*/ 209 fuword(base) caddr_t base; { return (0); } 210 /*ARGSUSED*/ 211 fuiword(base) caddr_t base; { return (0); } 212 /*ARGSUSED*/ 213 suword(base, i) caddr_t base; { return (0); } 214 /*ARGSUSED*/ 215 suiword(base, i) caddr_t base; { return (0); } 216 217 /*ARGSUSED*/ 218 copyseg(udaddr, pf) caddr_t udaddr; unsigned pf; { } 219 220 /*ARGSUSED*/ 221 clearseg(pf) unsigned pf; { } 222 223 /*ARGSUSED*/ 224 addupc(pc, prof, ticks) unsigned pc; struct uprof *prof; int ticks; { } 225 226 void MachEnableIntr() { } 227 void setsoftnet() { } 228 void clearsoftnet() { } 229 void setsoftclock() { } 230 void clearsoftclock() { } 231 spl0() { return (0); } 232 splsoftclock() { return (0); } 233 splnet() { return (0); } 234 splimp() { return (0); } /* XXX */ 235 splbio() { return (0); } 236 spltty() { return (0); } 237 splclock() { return (0); } 238 splhigh() { return (0); } 239 240 /*ARGSUSED*/ 241 splx(s) int s; { } 242 243 #ifdef notdef 244 /*ARGSUSED*/ 245 scanc(size, cp, table, mask) 246 unsigned size; char *cp, table[]; int mask; 247 { return (0); } 248 249 /*ARGSUSED*/ 250 skpc(mask, size, cp) int mask; int size; char *cp; { return (0); } 251 252 /*ARGSUSED*/ 253 locc(mask, size, cp) int mask; char *cp; unsigned size; { return (0); } 254 #endif 255 256 /*ARGSUSED*/ 257 _insque(p, q) caddr_t p, q; { } 258 /*ARGSUSED*/ 259 _remque(p) caddr_t p; { } 260 261 /*ARGSUSED*/ 262 ffs(v) long v; { return (0); } 263 264 /*ARGSUSED*/ 265 strlen(str) char *str; { return (0); } 266 267 #ifdef notdef 268 imin(a, b) int a, b; { return (a < b ? a : b); } 269 imax(a, b) int a, b; { return (a > b ? a : b); } 270 unsigned min(a, b) u_int a, b; { return (a < b ? a : b); } 271 unsigned max(a, b) u_int a, b; { return (a > b ? a : b); } 272 #endif 273 274 u_short ntohs(s) u_short s; { return ((u_short)s); } 275 u_short htons(s) u_short s; { return ((u_short)s); } 276 u_long ntohl(l) u_long l; { return ((u_long)l); } 277 u_long htonl(l) u_long l; { return ((u_long)l); } 278 279 void MachKernGenException() { } 280 void MachUserGenException() { } 281 void MachTLBModException() { } 282 void MachTLBMissException() { } 283 void MachEmptyWriteBuffer() { } 284 /*ARGSUSED*/ 285 void MachTLBWriteIndexed(index, highEntry, lowEntry) 286 int index, highEntry, lowEntry; { } 287 /*ARGSUSED*/ 288 void MachSetPID(pid) int pid; { } 289 /*ARGSUSED*/ 290 void newptes(pte, v, size) struct pte *pte; u_int v; int size; { } 291 void MachTLBFlush() { } 292 /*ARGSUSED*/ 293 void MachTLBFlushPID(pid) int pid; { } 294 /*ARGSUSED*/ 295 void MachTLBFlushAddr(virt) caddr_t virt; { } 296 /*ARGSUSED*/ 297 void MachSwitchFPState(from, to) struct proc *from; struct user *to; { } 298 /*ARGSUSED*/ 299 void MachGetCurFPState(p) struct proc *p; { } 300 /*ARGSUSED*/ 301 void MachFPInterrupt(p) struct proc *p; { } 302 /*ARGSUSED*/ 303 void MachFPInterrupt(statusReg, causeReg, pc) 304 unsigned statusReg, causeReg, pc; { } 305 void MachConfigCache() { } 306 void MachFlushCache() { } 307 /*ARGSUSED*/ 308 void MachFlushICache(vaddr, len) caddr_t vaddr, int len; { } 309