1 |
/*- |
2 |
* Copyright (c) 1982, 1986, 1989, 1993 |
3 |
* The Regents of the University of California. All rights reserved. |
4 |
* (c) UNIX System Laboratories, Inc. |
5 |
* All or some portions of this file are derived from material licensed |
6 |
* to the University of California by American Telephone and Telegraph |
7 |
* Co. or Unix System Laboratories, Inc. and are reproduced herein with |
8 |
* the permission of UNIX System Laboratories, Inc. |
9 |
* |
10 |
* Redistribution and use in source and binary forms, with or without |
11 |
* modification, are permitted provided that the following conditions |
12 |
* are met: |
13 |
* 1. Redistributions of source code must retain the above copyright |
14 |
* notice, this list of conditions and the following disclaimer. |
15 |
* 2. Redistributions in binary form must reproduce the above copyright |
16 |
* notice, this list of conditions and the following disclaimer in the |
17 |
* documentation and/or other materials provided with the distribution. |
18 |
* 4. Neither the name of the University nor the names of its contributors |
19 |
* may be used to endorse or promote products derived from this software |
20 |
* without specific prior written permission. |
21 |
* |
22 |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
23 |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
24 |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
25 |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
26 |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
27 |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
28 |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
29 |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
30 |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
31 |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
32 |
* SUCH DAMAGE. |
33 |
* |
34 |
* @(#)param.h 8.3 (Berkeley) 4/4/95 |
35 |
* $MidnightBSD$ |
36 |
*/ |
37 |
|
38 |
#ifndef _SYS_PARAM_H_ |
39 |
#define _SYS_PARAM_H_ |
40 |
|
41 |
#include <sys/_null.h> |
42 |
|
43 |
#define BSD 199506 /* System version (year & month). */ |
44 |
#define BSD4_3 1 |
45 |
#define BSD4_4 1 |
46 |
|
47 |
/* |
48 |
* scheme is: <major><two digit minor>Rxx |
49 |
* For 0.x no major, 0.4 = 4RXX |
50 |
* 'R' is in the range 0 to 4 if this is a release branch |
51 |
* or r is 5-9 in stable after 1.0 is released. |
52 |
*/ |
53 |
#undef __MidnightBSD_version |
54 |
#define __MidnightBSD_version 9006 /* Master, propagated to newvers */ |
55 |
|
56 |
/* Version of FreeBSD we're compatible with */ |
57 |
#undef __FreeBSD_version |
58 |
#define __FreeBSD_version 901504 |
59 |
|
60 |
/* |
61 |
* It is tempting to use this macro in userland code when we want to enable |
62 |
* kernel-specific routines, and in fact it's fine to do this in code that |
63 |
* is part of MidnightBSD itself. However, be aware that as presence of this |
64 |
* macro is still not widespread (e.g. older BSD versions, 3rd party |
65 |
* compilers, etc), it is STRONGLY DISCOURAGED to check for this macro in |
66 |
* external applications without also checking for __MidnightBSD__ as an |
67 |
* alternative. |
68 |
*/ |
69 |
#undef __MidnightBSD_kernel__ |
70 |
#define __MidnightBSD_kernel__ |
71 |
|
72 |
#ifdef _KERNEL |
73 |
#define P_OSREL_SIGWAIT 700000 |
74 |
#define P_OSREL_SIGSEGV 700004 |
75 |
#define P_OSREL_MAP_ANON 800104 |
76 |
#endif |
77 |
|
78 |
#ifndef LOCORE |
79 |
#include <sys/types.h> |
80 |
#endif |
81 |
|
82 |
/* |
83 |
* Machine-independent constants (some used in following include files). |
84 |
* Redefined constants are from POSIX 1003.1 limits file. |
85 |
* |
86 |
* MAXCOMLEN should be >= sizeof(ac_comm) (see <acct.h>) |
87 |
*/ |
88 |
#include <sys/syslimits.h> |
89 |
|
90 |
#define MAXCOMLEN 19 /* max command name remembered */ |
91 |
#define MAXINTERP PATH_MAX /* max interpreter file name length */ |
92 |
#define MAXLOGNAME 33 /* max login name length (incl. NUL) */ |
93 |
#define MAXUPRC CHILD_MAX /* max simultaneous processes */ |
94 |
#define NCARGS ARG_MAX /* max bytes for an exec function */ |
95 |
#define NGROUPS (NGROUPS_MAX+1) /* max number groups */ |
96 |
#define NOFILE OPEN_MAX /* max open files per process */ |
97 |
#define NOGROUP 65535 /* marker for empty group set member */ |
98 |
#define MAXHOSTNAMELEN 256 /* max hostname size */ |
99 |
#define SPECNAMELEN 63 /* max length of devicename */ |
100 |
|
101 |
/* More types and definitions used throughout the kernel. */ |
102 |
#ifdef _KERNEL |
103 |
#include <sys/cdefs.h> |
104 |
#include <sys/errno.h> |
105 |
#ifndef LOCORE |
106 |
#include <sys/time.h> |
107 |
#include <sys/priority.h> |
108 |
#endif |
109 |
|
110 |
#ifndef FALSE |
111 |
#define FALSE 0 |
112 |
#endif |
113 |
#ifndef TRUE |
114 |
#define TRUE 1 |
115 |
#endif |
116 |
#endif |
117 |
|
118 |
#ifndef _KERNEL |
119 |
/* Signals. */ |
120 |
#include <sys/signal.h> |
121 |
#endif |
122 |
|
123 |
/* Machine type dependent parameters. */ |
124 |
#include <machine/param.h> |
125 |
#ifndef _KERNEL |
126 |
#include <sys/limits.h> |
127 |
#endif |
128 |
|
129 |
#ifndef DEV_BSHIFT |
130 |
#define DEV_BSHIFT 9 /* log2(DEV_BSIZE) */ |
131 |
#endif |
132 |
#define DEV_BSIZE (1<<DEV_BSHIFT) |
133 |
|
134 |
#ifndef BLKDEV_IOSIZE |
135 |
#define BLKDEV_IOSIZE PAGE_SIZE /* default block device I/O size */ |
136 |
#endif |
137 |
#ifndef DFLTPHYS |
138 |
#define DFLTPHYS (64 * 1024) /* default max raw I/O transfer size */ |
139 |
#endif |
140 |
#ifndef MAXPHYS |
141 |
#define MAXPHYS (128 * 1024) /* max raw I/O transfer size */ |
142 |
#endif |
143 |
#ifndef MAXDUMPPGS |
144 |
#define MAXDUMPPGS (DFLTPHYS/PAGE_SIZE) |
145 |
#endif |
146 |
|
147 |
/* |
148 |
* Constants related to network buffer management. |
149 |
* MCLBYTES must be no larger than PAGE_SIZE. |
150 |
*/ |
151 |
#ifndef MSIZE |
152 |
#define MSIZE 256 /* size of an mbuf */ |
153 |
#endif /* MSIZE */ |
154 |
|
155 |
#ifndef MCLSHIFT |
156 |
#define MCLSHIFT 11 /* convert bytes to mbuf clusters */ |
157 |
#endif /* MCLSHIFT */ |
158 |
|
159 |
#define MCLBYTES (1 << MCLSHIFT) /* size of an mbuf cluster */ |
160 |
|
161 |
#if PAGE_SIZE < 2048 |
162 |
#define MJUMPAGESIZE MCLBYTES |
163 |
#elif PAGE_SIZE <= 8192 |
164 |
#define MJUMPAGESIZE PAGE_SIZE |
165 |
#else |
166 |
#define MJUMPAGESIZE (8 * 1024) |
167 |
#endif |
168 |
|
169 |
#define MJUM9BYTES (9 * 1024) /* jumbo cluster 9k */ |
170 |
#define MJUM16BYTES (16 * 1024) /* jumbo cluster 16k */ |
171 |
|
172 |
/* |
173 |
* Some macros for units conversion |
174 |
*/ |
175 |
|
176 |
/* clicks to bytes */ |
177 |
#ifndef ctob |
178 |
#define ctob(x) ((x)<<PAGE_SHIFT) |
179 |
#endif |
180 |
|
181 |
/* bytes to clicks */ |
182 |
#ifndef btoc |
183 |
#define btoc(x) (((vm_offset_t)(x)+PAGE_MASK)>>PAGE_SHIFT) |
184 |
#endif |
185 |
|
186 |
/* |
187 |
* btodb() is messy and perhaps slow because `bytes' may be an off_t. We |
188 |
* want to shift an unsigned type to avoid sign extension and we don't |
189 |
* want to widen `bytes' unnecessarily. Assume that the result fits in |
190 |
* a daddr_t. |
191 |
*/ |
192 |
#ifndef btodb |
193 |
#define btodb(bytes) /* calculates (bytes / DEV_BSIZE) */ \ |
194 |
(sizeof (bytes) > sizeof(long) \ |
195 |
? (daddr_t)((unsigned long long)(bytes) >> DEV_BSHIFT) \ |
196 |
: (daddr_t)((unsigned long)(bytes) >> DEV_BSHIFT)) |
197 |
#endif |
198 |
|
199 |
#ifndef dbtob |
200 |
#define dbtob(db) /* calculates (db * DEV_BSIZE) */ \ |
201 |
((off_t)(db) << DEV_BSHIFT) |
202 |
#endif |
203 |
|
204 |
#define PRIMASK 0x0ff |
205 |
#define PCATCH 0x100 /* OR'd with pri for tsleep to check signals */ |
206 |
#define PDROP 0x200 /* OR'd with pri to stop re-entry of interlock mutex */ |
207 |
#define PBDRY 0x400 /* for PCATCH stop is done on the user boundary */ |
208 |
|
209 |
#define NZERO 0 /* default "nice" */ |
210 |
|
211 |
#define NBBY 8 /* number of bits in a byte */ |
212 |
#define NBPW sizeof(int) /* number of bytes per word (integer) */ |
213 |
|
214 |
#define CMASK 022 /* default file mask: S_IWGRP|S_IWOTH */ |
215 |
|
216 |
#define NODEV (dev_t)(-1) /* non-existent device */ |
217 |
|
218 |
/* |
219 |
* File system parameters and macros. |
220 |
* |
221 |
* MAXBSIZE - Filesystems are made out of blocks of at most MAXBSIZE bytes |
222 |
* per block. MAXBSIZE may be made larger without effecting |
223 |
* any existing filesystems as long as it does not exceed MAXPHYS, |
224 |
* and may be made smaller at the risk of not being able to use |
225 |
* filesystems which require a block size exceeding MAXBSIZE. |
226 |
* |
227 |
* BKVASIZE - Nominal buffer space per buffer, in bytes. BKVASIZE is the |
228 |
* minimum KVM memory reservation the kernel is willing to make. |
229 |
* Filesystems can of course request smaller chunks. Actual |
230 |
* backing memory uses a chunk size of a page (PAGE_SIZE). |
231 |
* |
232 |
* If you make BKVASIZE too small you risk seriously fragmenting |
233 |
* the buffer KVM map which may slow things down a bit. If you |
234 |
* make it too big the kernel will not be able to optimally use |
235 |
* the KVM memory reserved for the buffer cache and will wind |
236 |
* up with too-few buffers. |
237 |
* |
238 |
* The default is 16384, roughly 2x the block size used by a |
239 |
* normal UFS filesystem. |
240 |
*/ |
241 |
#define MAXBSIZE 65536 /* must be power of 2 */ |
242 |
#define BKVASIZE 16384 /* must be power of 2 */ |
243 |
#define BKVAMASK (BKVASIZE-1) |
244 |
|
245 |
/* |
246 |
* MAXPATHLEN defines the longest permissible path length after expanding |
247 |
* symbolic links. It is used to allocate a temporary buffer from the buffer |
248 |
* pool in which to do the name expansion, hence should be a power of two, |
249 |
* and must be less than or equal to MAXBSIZE. MAXSYMLINKS defines the |
250 |
* maximum number of symbolic links that may be expanded in a path name. |
251 |
* It should be set high enough to allow all legitimate uses, but halt |
252 |
* infinite loops reasonably quickly. |
253 |
*/ |
254 |
#define MAXPATHLEN PATH_MAX |
255 |
#define MAXSYMLINKS 32 |
256 |
|
257 |
/* Bit map related macros. */ |
258 |
#define setbit(a,i) (((unsigned char *)(a))[(i)/NBBY] |= 1<<((i)%NBBY)) |
259 |
#define clrbit(a,i) (((unsigned char *)(a))[(i)/NBBY] &= ~(1<<((i)%NBBY))) |
260 |
#define isset(a,i) \ |
261 |
(((const unsigned char *)(a))[(i)/NBBY] & (1<<((i)%NBBY))) |
262 |
#define isclr(a,i) \ |
263 |
((((const unsigned char *)(a))[(i)/NBBY] & (1<<((i)%NBBY))) == 0) |
264 |
|
265 |
/* Macros for counting and rounding. */ |
266 |
#ifndef howmany |
267 |
#define howmany(x, y) (((x)+((y)-1))/(y)) |
268 |
#endif |
269 |
#define nitems(x) (sizeof((x)) / sizeof((x)[0])) |
270 |
#define rounddown(x, y) (((x)/(y))*(y)) |
271 |
#define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) /* to any y */ |
272 |
#define roundup2(x, y) (((x)+((y)-1))&(~((y)-1))) /* if y is powers of two */ |
273 |
#define powerof2(x) ((((x)-1)&(x))==0) |
274 |
|
275 |
/* Macros for min/max. */ |
276 |
#define MIN(a,b) (((a)<(b))?(a):(b)) |
277 |
#define MAX(a,b) (((a)>(b))?(a):(b)) |
278 |
|
279 |
#ifdef _KERNEL |
280 |
/* |
281 |
* Basic byte order function prototypes for non-inline functions. |
282 |
*/ |
283 |
#ifndef LOCORE |
284 |
#ifndef _BYTEORDER_PROTOTYPED |
285 |
#define _BYTEORDER_PROTOTYPED |
286 |
__BEGIN_DECLS |
287 |
__uint32_t htonl(__uint32_t); |
288 |
__uint16_t htons(__uint16_t); |
289 |
__uint32_t ntohl(__uint32_t); |
290 |
__uint16_t ntohs(__uint16_t); |
291 |
__END_DECLS |
292 |
#endif |
293 |
#endif |
294 |
|
295 |
#ifndef lint |
296 |
#ifndef _BYTEORDER_FUNC_DEFINED |
297 |
#define _BYTEORDER_FUNC_DEFINED |
298 |
#define htonl(x) __htonl(x) |
299 |
#define htons(x) __htons(x) |
300 |
#define ntohl(x) __ntohl(x) |
301 |
#define ntohs(x) __ntohs(x) |
302 |
#endif /* !_BYTEORDER_FUNC_DEFINED */ |
303 |
#endif /* lint */ |
304 |
#endif /* _KERNEL */ |
305 |
|
306 |
/* |
307 |
* Scale factor for scaled integers used to count %cpu time and load avgs. |
308 |
* |
309 |
* The number of CPU `tick's that map to a unique `%age' can be expressed |
310 |
* by the formula (1 / (2 ^ (FSHIFT - 11))). The maximum load average that |
311 |
* can be calculated (assuming 32 bits) can be closely approximated using |
312 |
* the formula (2 ^ (2 * (16 - FSHIFT))) for (FSHIFT < 15). |
313 |
* |
314 |
* For the scheduler to maintain a 1:1 mapping of CPU `tick' to `%age', |
315 |
* FSHIFT must be at least 11; this gives us a maximum load avg of ~1024. |
316 |
*/ |
317 |
#define FSHIFT 11 /* bits to right of fixed binary point */ |
318 |
#define FSCALE (1<<FSHIFT) |
319 |
|
320 |
#define dbtoc(db) /* calculates devblks to pages */ \ |
321 |
((db + (ctodb(1) - 1)) >> (PAGE_SHIFT - DEV_BSHIFT)) |
322 |
|
323 |
#define ctodb(db) /* calculates pages to devblks */ \ |
324 |
((db) << (PAGE_SHIFT - DEV_BSHIFT)) |
325 |
|
326 |
/* |
327 |
* Old spelling of __containerof(). |
328 |
*/ |
329 |
#define member2struct(s, m, x) \ |
330 |
((struct s *)(void *)((char *)(x) - offsetof(struct s, m))) |
331 |
|
332 |
/* |
333 |
* Access a variable length array that has been declared as a fixed |
334 |
* length array. |
335 |
*/ |
336 |
#define __PAST_END(array, offset) (((__typeof__(*(array)) *)(array))[offset]) |
337 |
|
338 |
#endif /* _SYS_PARAM_H_ */ |