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
lowinit()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*/
badaddr(addr,len)153 badaddr(addr, len) char *addr; int len; { return (0); }
154
155 /*ARGSUSED*/
copyinstr(udaddr,kaddr,maxlength,lencopied)156 copyinstr(udaddr, kaddr, maxlength, lencopied)
157 caddr_t udaddr, kaddr; u_int maxlength, *lencopied;
158 { *kaddr = *udaddr; *lencopied = maxlength; return (0); }
copyoutstr(kaddr,udaddr,maxlength,lencopied)159 copyoutstr(kaddr, udaddr, maxlength, lencopied)
160 caddr_t kaddr, udaddr; u_int maxlength, *lencopied;
161 { *udaddr = *kaddr; *lencopied = maxlength; return (0); }
copystr(kfaddr,kdaddr,maxlength,lencopied)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*/
copyin(udaddr,kaddr,n)167 copyin(udaddr, kaddr, n) caddr_t udaddr, kaddr; u_int n; { return (0); }
168 /*ARGSUSED*/
copyout(kaddr,udaddr,n)169 copyout(kaddr, udaddr, n) caddr_t kaddr, udaddr; u_int n; { return (0); }
170
171 /*ARGSUSED*/
bzero(to,n)172 bzero(to, n) caddr_t to; u_int n; { }
173 /*ARGSUSED*/
bcmp(from,to,n)174 bcmp(from, to, n) caddr_t from, to; u_int n; { }
175 /*ARGSUSED*/
bcopy(from,to,n)176 bcopy(from, to, n) caddr_t from, to; u_int n; { }
177
178 /*ARGSUSED*/
CopyToBuffer(src,dst,length)179 CopyToBuffer(src, dst, length)
180 u_short *src, *dst; int length;
181 { *dst = *src; }
182 /*ARGSUSED*/
CopyFromBuffer(src,dst,length)183 CopyFromBuffer(src, dst, length)
184 u_short *src; char *dst; int length;
185 { *dst = *src; }
186
187 /*ARGSUSED*/
savectx(lp)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
swtch()196 swtch() { if (whichqs) whichqs = 0; }
197
198 /*ARGSUSED*/
fubyte(base)199 fubyte(base) caddr_t base; { return (0); }
200 #ifdef notdef
201 /*ARGSUSED*/
fuibyte(base)202 fuibyte(base) caddr_t base; { return (0); }
203 #endif
204 /*ARGSUSED*/
subyte(base,i)205 subyte(base, i) caddr_t base; { return (0); }
206 /*ARGSUSED*/
suibyte(base,i)207 suibyte(base, i) caddr_t base; { return (0); }
208 /*ARGSUSED*/
fuword(base)209 fuword(base) caddr_t base; { return (0); }
210 /*ARGSUSED*/
fuiword(base)211 fuiword(base) caddr_t base; { return (0); }
212 /*ARGSUSED*/
suword(base,i)213 suword(base, i) caddr_t base; { return (0); }
214 /*ARGSUSED*/
suiword(base,i)215 suiword(base, i) caddr_t base; { return (0); }
216
217 /*ARGSUSED*/
copyseg(udaddr,pf)218 copyseg(udaddr, pf) caddr_t udaddr; unsigned pf; { }
219
220 /*ARGSUSED*/
clearseg(pf)221 clearseg(pf) unsigned pf; { }
222
223 /*ARGSUSED*/
addupc(pc,prof,ticks)224 addupc(pc, prof, ticks) unsigned pc; struct uprof *prof; int ticks; { }
225
MachEnableIntr()226 void MachEnableIntr() { }
setsoftnet()227 void setsoftnet() { }
clearsoftnet()228 void clearsoftnet() { }
setsoftclock()229 void setsoftclock() { }
clearsoftclock()230 void clearsoftclock() { }
spl0()231 spl0() { return (0); }
splsoftclock()232 splsoftclock() { return (0); }
splnet()233 splnet() { return (0); }
splimp()234 splimp() { return (0); } /* XXX */
splbio()235 splbio() { return (0); }
spltty()236 spltty() { return (0); }
splclock()237 splclock() { return (0); }
splhigh()238 splhigh() { return (0); }
239
240 /*ARGSUSED*/
splx(s)241 splx(s) int s; { }
242
243 #ifdef notdef
244 /*ARGSUSED*/
scanc(size,cp,table,mask)245 scanc(size, cp, table, mask)
246 unsigned size; char *cp, table[]; int mask;
247 { return (0); }
248
249 /*ARGSUSED*/
skpc(mask,size,cp)250 skpc(mask, size, cp) int mask; int size; char *cp; { return (0); }
251
252 /*ARGSUSED*/
locc(mask,size,cp)253 locc(mask, size, cp) int mask; char *cp; unsigned size; { return (0); }
254 #endif
255
256 /*ARGSUSED*/
_insque(p,q)257 _insque(p, q) caddr_t p, q; { }
258 /*ARGSUSED*/
_remque(p)259 _remque(p) caddr_t p; { }
260
261 /*ARGSUSED*/
ffs(v)262 ffs(v) long v; { return (0); }
263
264 /*ARGSUSED*/
strlen(str)265 strlen(str) char *str; { return (0); }
266
267 #ifdef notdef
imin(a,b)268 imin(a, b) int a, b; { return (a < b ? a : b); }
imax(a,b)269 imax(a, b) int a, b; { return (a > b ? a : b); }
min(a,b)270 unsigned min(a, b) u_int a, b; { return (a < b ? a : b); }
max(a,b)271 unsigned max(a, b) u_int a, b; { return (a > b ? a : b); }
272 #endif
273
ntohs(s)274 u_short ntohs(s) u_short s; { return ((u_short)s); }
htons(s)275 u_short htons(s) u_short s; { return ((u_short)s); }
ntohl(l)276 u_long ntohl(l) u_long l; { return ((u_long)l); }
htonl(l)277 u_long htonl(l) u_long l; { return ((u_long)l); }
278
MachKernGenException()279 void MachKernGenException() { }
MachUserGenException()280 void MachUserGenException() { }
MachTLBModException()281 void MachTLBModException() { }
MachTLBMissException()282 void MachTLBMissException() { }
MachEmptyWriteBuffer()283 void MachEmptyWriteBuffer() { }
284 /*ARGSUSED*/
MachTLBWriteIndexed(index,highEntry,lowEntry)285 void MachTLBWriteIndexed(index, highEntry, lowEntry)
286 int index, highEntry, lowEntry; { }
287 /*ARGSUSED*/
MachSetPID(pid)288 void MachSetPID(pid) int pid; { }
289 /*ARGSUSED*/
newptes(pte,v,size)290 void newptes(pte, v, size) struct pte *pte; u_int v; int size; { }
MachTLBFlush()291 void MachTLBFlush() { }
292 /*ARGSUSED*/
MachTLBFlushPID(pid)293 void MachTLBFlushPID(pid) int pid; { }
294 /*ARGSUSED*/
MachTLBFlushAddr(virt)295 void MachTLBFlushAddr(virt) caddr_t virt; { }
296 /*ARGSUSED*/
MachSwitchFPState(from,to)297 void MachSwitchFPState(from, to) struct proc *from; struct user *to; { }
298 /*ARGSUSED*/
MachGetCurFPState(p)299 void MachGetCurFPState(p) struct proc *p; { }
300 /*ARGSUSED*/
MachFPInterrupt(p)301 void MachFPInterrupt(p) struct proc *p; { }
302 /*ARGSUSED*/
MachFPInterrupt(statusReg,causeReg,pc)303 void MachFPInterrupt(statusReg, causeReg, pc)
304 unsigned statusReg, causeReg, pc; { }
MachConfigCache()305 void MachConfigCache() { }
MachFlushCache()306 void MachFlushCache() { }
307 /*ARGSUSED*/
MachFlushICache(vaddr,len)308 void MachFlushICache(vaddr, len) caddr_t vaddr, int len; { }
309