param.h revision 1.21 1 1.21 briggs /* $NetBSD: param.h,v 1.21 1995/08/13 01:52:16 briggs Exp $ */
2 1.13 cgd
3 1.1 briggs /*
4 1.1 briggs * Copyright (c) 1988 University of Utah.
5 1.1 briggs * Copyright (c) 1982, 1990 The Regents of the University of California.
6 1.1 briggs * All rights reserved.
7 1.1 briggs *
8 1.1 briggs * This code is derived from software contributed to Berkeley by
9 1.1 briggs * the Systems Programming Group of the University of Utah Computer
10 1.1 briggs * Science Department.
11 1.1 briggs *
12 1.1 briggs * Redistribution and use in source and binary forms, with or without
13 1.1 briggs * modification, are permitted provided that the following conditions
14 1.1 briggs * are met:
15 1.1 briggs * 1. Redistributions of source code must retain the above copyright
16 1.1 briggs * notice, this list of conditions and the following disclaimer.
17 1.1 briggs * 2. Redistributions in binary form must reproduce the above copyright
18 1.1 briggs * notice, this list of conditions and the following disclaimer in the
19 1.1 briggs * documentation and/or other materials provided with the distribution.
20 1.1 briggs * 3. All advertising materials mentioning features or use of this software
21 1.1 briggs * must display the following acknowledgement:
22 1.1 briggs * This product includes software developed by the University of
23 1.1 briggs * California, Berkeley and its contributors.
24 1.1 briggs * 4. Neither the name of the University nor the names of its contributors
25 1.1 briggs * may be used to endorse or promote products derived from this software
26 1.1 briggs * without specific prior written permission.
27 1.1 briggs *
28 1.1 briggs * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
29 1.1 briggs * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
30 1.1 briggs * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31 1.1 briggs * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
32 1.1 briggs * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
33 1.1 briggs * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
34 1.1 briggs * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
35 1.1 briggs * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
36 1.1 briggs * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
37 1.1 briggs * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
38 1.1 briggs * SUCH DAMAGE.
39 1.1 briggs */
40 1.1 briggs /*-
41 1.1 briggs * Copyright (C) 1993 Allen K. Briggs, Chris P. Caputo,
42 1.1 briggs * Michael L. Finch, Bradley A. Grantham, and
43 1.1 briggs * Lawrence A. Kesteloot
44 1.1 briggs * All rights reserved.
45 1.1 briggs *
46 1.1 briggs * Redistribution and use in source and binary forms, with or without
47 1.1 briggs * modification, are permitted provided that the following conditions
48 1.1 briggs * are met:
49 1.1 briggs * 1. Redistributions of source code must retain the above copyright
50 1.1 briggs * notice, this list of conditions and the following disclaimer.
51 1.1 briggs * 2. Redistributions in binary form must reproduce the above copyright
52 1.1 briggs * notice, this list of conditions and the following disclaimer in the
53 1.1 briggs * documentation and/or other materials provided with the distribution.
54 1.1 briggs * 3. All advertising materials mentioning features or use of this software
55 1.1 briggs * must display the following acknowledgement:
56 1.1 briggs * This product includes software developed by the Alice Group.
57 1.1 briggs * 4. The names of the Alice Group or any of its members may not be used
58 1.1 briggs * to endorse or promote products derived from this software without
59 1.1 briggs * specific prior written permission.
60 1.1 briggs *
61 1.1 briggs * THIS SOFTWARE IS PROVIDED BY THE ALICE GROUP ``AS IS'' AND ANY EXPRESS OR
62 1.1 briggs * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
63 1.1 briggs * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
64 1.1 briggs * IN NO EVENT SHALL THE ALICE GROUP BE LIABLE FOR ANY DIRECT, INDIRECT,
65 1.1 briggs * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
66 1.1 briggs * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
67 1.1 briggs * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
68 1.1 briggs * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
69 1.1 briggs * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
70 1.1 briggs * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
71 1.1 briggs *
72 1.1 briggs */
73 1.1 briggs /*
74 1.1 briggs * from: Utah $Hdr: machparam.h 1.11 89/08/14$
75 1.1 briggs *
76 1.13 cgd * @(#)param.h 7.8 (Berkeley) 6/28/91
77 1.1 briggs */
78 1.1 briggs
79 1.9 briggs #ifndef _MACHINE_PARAM_H_
80 1.9 briggs #define _MACHINE_PARAM_H_ 1
81 1.9 briggs
82 1.1 briggs #ifndef PSL_IPL
83 1.1 briggs #include "machine/psl.h"
84 1.1 briggs #endif /* PSL_IPL */
85 1.1 briggs
86 1.1 briggs /*
87 1.7 briggs * Machine dependent constants for Macintosh II-and-similar series.
88 1.1 briggs */
89 1.4 briggs #define MACHINE "mac68k"
90 1.4 briggs #define MACHINE_ARCH "m68k"
91 1.6 briggs #define MID_MACHINE MID_M68K
92 1.1 briggs
93 1.1 briggs /*
94 1.1 briggs * Round p (pointer or byte index) up to a correctly-aligned value
95 1.1 briggs * for all data types (int, long, ...). The result is u_int and
96 1.1 briggs * must be cast to any desired pointer type.
97 1.1 briggs */
98 1.1 briggs #define ALIGNBYTES (sizeof(int) - 1)
99 1.1 briggs #define ALIGN(p) (((u_int)(p) + ALIGNBYTES) &~ ALIGNBYTES)
100 1.1 briggs
101 1.18 briggs #define PGSHIFT 12 /* LOG2(NBPG) */
102 1.18 briggs #define NBPG (1 << PGSHIFT) /* bytes/page */
103 1.1 briggs #define PGOFSET (NBPG-1) /* byte offset into page */
104 1.18 briggs #define NPTEPG (NBPG/(sizeof (pt_entry_t)))
105 1.1 briggs
106 1.18 briggs #define SEGSHIFT 22 /* LOG2(NBSEG) */
107 1.18 briggs #define NBSEG (1 << SEGSHIFT) /* bytes/segment */
108 1.18 briggs #define SEGOFSET (NBSEG-1) /* byte offset into segment */
109 1.1 briggs
110 1.1 briggs #define KERNBASE 0x00000000 /* start of kernel virtual */
111 1.1 briggs #define BTOPKERNBASE ((u_long)KERNBASE >> PGSHIFT)
112 1.1 briggs
113 1.1 briggs #define DEV_BSHIFT 9 /* log2(DEV_BSIZE) */
114 1.18 briggs #define DEV_BSIZE (1 << DEV_BSHIFT)
115 1.1 briggs #define BLKDEV_IOSIZE 2048
116 1.1 briggs #define MAXPHYS (64 * 1024) /* max raw I/O transfer size */
117 1.1 briggs
118 1.1 briggs #define CLSIZELOG2 0
119 1.18 briggs #define CLSIZE (1 << CLSIZELOG2)
120 1.1 briggs
121 1.1 briggs /* NOTE: SSIZE, SINCR and UPAGES must be multiples of CLSIZE */
122 1.1 briggs #define SSIZE 1 /* initial stack size/NBPG */
123 1.1 briggs #define SINCR 1 /* increment of stack/NBPG */
124 1.1 briggs #define UPAGES 3 /* pages of u-area */
125 1.18 briggs #define USPACE (UPAGES * NBPG) /* total size of u-area */
126 1.1 briggs
127 1.1 briggs /*
128 1.1 briggs * Constants related to network buffer management.
129 1.1 briggs * MCLBYTES must be no larger than CLBYTES (the software page size), and,
130 1.1 briggs * on machines that exchange pages of input or output buffers with mbuf
131 1.1 briggs * clusters (MAPPED_MBUFS), MCLBYTES must also be an integral multiple
132 1.1 briggs * of the hardware page size.
133 1.1 briggs */
134 1.1 briggs #define MSIZE 128 /* size of an mbuf */
135 1.14 briggs #define MCLSHIFT 11 /* convert bytes to m_buf clusters */
136 1.14 briggs #define MCLBYTES (1 << MCLSHIFT) /* size of an m_buf cluster */
137 1.14 briggs #define MCLOFSET (MCLBYTES - 1) /* offset within an m_buf cluster */
138 1.14 briggs
139 1.1 briggs #ifndef NMBCLUSTERS
140 1.1 briggs #ifdef GATEWAY
141 1.1 briggs #define NMBCLUSTERS 512 /* map size, max cluster allocation */
142 1.1 briggs #else
143 1.1 briggs #define NMBCLUSTERS 256 /* map size, max cluster allocation */
144 1.1 briggs #endif
145 1.1 briggs #endif
146 1.1 briggs
147 1.1 briggs /*
148 1.1 briggs * Size of kernel malloc arena in CLBYTES-sized logical pages
149 1.1 briggs */
150 1.1 briggs #ifndef NKMEMCLUSTERS
151 1.18 briggs #define NKMEMCLUSTERS (2048 * 1024 / CLBYTES)
152 1.1 briggs #endif
153 1.1 briggs
154 1.19 cgd /* pages ("clicks") to disk blocks */
155 1.19 cgd #define ctod(x) ((x) << (PGSHIFT - DEV_BSHIFT))
156 1.19 cgd #define dtoc(x) ((x) >> (PGSHIFT - DEV_BSHIFT))
157 1.1 briggs
158 1.1 briggs /* pages to bytes */
159 1.19 cgd #define ctob(x) ((x) << PGSHIFT)
160 1.19 cgd #define btoc(x) (((x) + PGOFSET) >> PGSHIFT)
161 1.1 briggs
162 1.18 briggs /* bytes to disk blocks */
163 1.18 briggs #define btodb(x) ((x) >> DEV_BSHIFT)
164 1.18 briggs #define dbtob(x) ((x) << DEV_BSHIFT)
165 1.1 briggs
166 1.1 briggs /*
167 1.1 briggs * Map a ``block device block'' to a file system block.
168 1.1 briggs * This should be device dependent, and should use the bsize
169 1.1 briggs * field from the disk label.
170 1.1 briggs * For now though just use DEV_BSIZE.
171 1.1 briggs */
172 1.18 briggs #define bdbtofsb(bn) ((bn) / (BLKDEV_IOSIZE / DEV_BSIZE))
173 1.1 briggs
174 1.1 briggs /*
175 1.1 briggs * Mach derived conversion macros
176 1.1 briggs */
177 1.18 briggs #define mac68k_round_page(x) ((((unsigned)(x)) + PGOFSET) & ~PGOFSET)
178 1.18 briggs #define mac68k_trunc_page(x) ((unsigned)(x) & ~PGOFSET)
179 1.7 briggs #define mac68k_btop(x) ((unsigned)(x) >> PGSHIFT)
180 1.7 briggs #define mac68k_ptob(x) ((unsigned)(x) << PGSHIFT)
181 1.1 briggs
182 1.1 briggs /*
183 1.1 briggs * spl functions; all but spl0 are done in-line
184 1.1 briggs */
185 1.1 briggs
186 1.1 briggs #define _spl(s) \
187 1.1 briggs ({ \
188 1.1 briggs register int _spl_r; \
189 1.1 briggs \
190 1.12 jtc __asm __volatile ("clrl %0; movew sr,%0; movew %1,sr" : \
191 1.1 briggs "&=d" (_spl_r) : "di" (s)); \
192 1.1 briggs _spl_r; \
193 1.1 briggs })
194 1.1 briggs
195 1.1 briggs /* spl0 requires checking for software interrupts */
196 1.1 briggs #define spl1() _spl(PSL_S|PSL_IPL1)
197 1.1 briggs #define spl2() _spl(PSL_S|PSL_IPL2)
198 1.1 briggs #define spl3() _spl(PSL_S|PSL_IPL3)
199 1.1 briggs #define spl4() _spl(PSL_S|PSL_IPL4)
200 1.1 briggs #define spl5() _spl(PSL_S|PSL_IPL5)
201 1.1 briggs #define spl6() _spl(PSL_S|PSL_IPL6)
202 1.1 briggs #define spl7() _spl(PSL_S|PSL_IPL7)
203 1.16 briggs
204 1.16 briggs /* These should be used for:
205 1.1 briggs 1) ensuring mutual exclusion (why use processor level?)
206 1.1 briggs 2) allowing faster devices to take priority
207 1.21 briggs
208 1.21 briggs Note that on the mac, most things are masked at spl1, almost
209 1.21 briggs everything at spl2, and everything but the panic switch and
210 1.21 briggs power at spl4.
211 1.1 briggs */
212 1.1 briggs #define splsoftclock() spl1() /* disallow softclock */
213 1.20 mycroft #define splsoftnet() spl1() /* disallow network */
214 1.21 briggs #define splclock() spl1() /* disallow clock interrupt */
215 1.20 mycroft #define splbio() spl2() /* disallow block I/O */
216 1.16 briggs #define splnet() spl2() /* disallow network */
217 1.21 briggs #define spltty() spl4() /* disallow tty interrupts (serial) */
218 1.20 mycroft #define splimp() spl4() /* disallow imput */
219 1.1 briggs #define splhigh() spl7() /* disallow everything */
220 1.1 briggs #define splsched() spl7() /* disallow scheduling */
221 1.10 briggs
222 1.16 briggs #define splstatclock() spl2() /* This should be splclock... */
223 1.1 briggs
224 1.1 briggs /* watch out for side effects */
225 1.1 briggs #define splx(s) ((s) & PSL_IPL ? _spl(s) : spl0())
226 1.17 briggs
227 1.17 briggs #define DELAY(ms) delay(ms)
228 1.9 briggs
229 1.9 briggs #endif /* _MACHINE_PARAM_H_ */
230