Commit | Line | Data |
---|---|---|
984263bc MD |
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. | |
2c64e990 | 18 | * 3. Neither the name of the University nor the names of its contributors |
984263bc MD |
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 | * $FreeBSD: src/sys/sys/param.h,v 1.61.2.38 2003/05/22 17:12:01 fjoe Exp $ | |
36 | */ | |
37 | ||
38 | #ifndef _SYS_PARAM_H_ | |
39 | #define _SYS_PARAM_H_ | |
40 | ||
797a926b SW |
41 | /* |
42 | * Historic BSD #defines -- probably will remain untouched for all time. | |
43 | */ | |
44 | #define BSD 199506 /* System version (year & month). */ | |
45 | #define BSD4_3 1 | |
46 | #define BSD4_4 1 | |
984263bc | 47 | |
d77e8324 | 48 | /* |
eab38af1 MD |
49 | * __DragonFly_version number. The number doesn't really meaningfully |
50 | * translate to a version number. | |
9ba76b73 | 51 | * |
02d4667d | 52 | * 170000 - base development version after 1.6 branch |
aefcf6d5 | 53 | * 170001 - base development version before 1.8 branch |
677f984f | 54 | * 190000 - base development version after 1.8 branch |
3ae3ada0 | 55 | * 195000 - base development version after 1.10 branch |
eab38af1 | 56 | * 197500 - base development version before 1.12 branch |
0cf13ba1 MD |
57 | * 197600 - 1.12 branch |
58 | * 197700 - base development version after 1.12 branch | |
ce9d787d MD |
59 | * 199900 - base development version before 2.0 branch |
60 | * 200000 - 2.0 branch | |
3b7b6af7 | 61 | * 200100 - base development version after 2.0 branch |
91fdc001 | 62 | * 200101 - lchflags syscall |
d8e83bc2 MD |
63 | * 200200 - 2.2 branch |
64 | * 200201 - base development version after 2.2 branch | |
64cc0b46 | 65 | * 200202 - major changes to libc |
b8f055be | 66 | * 200203 - introduce PCI domain |
809dc6e6 | 67 | * 200204 - suser() & suser_cred() removal |
e12edcbc | 68 | * 200205 - devfs import |
f464e11c | 69 | * 200206 - *sleep() renames |
68dc98df | 70 | * 200400 - 2.4 release |
7317bb64 | 71 | * 200500 - 2.5 master |
68dc98df | 72 | * 200600 - 2.6 release |
40eb8ea1 | 73 | * 200700 - 2.7 master |
68dc98df MD |
74 | * 200800 - 2.8 release October 2010 |
75 | * 200900 - 2.9 master | |
55cc754d | 76 | * 200901 - prototype changes for alphasort(3) and scandir(3) |
62b5ec1d | 77 | * 200902 - Xerox NS protocol removal |
8b70659c MD |
78 | * 201000 - 2.10 release |
79 | * 201100 - 2.11 master | |
693b2d64 JS |
80 | * 201200 - 2.12 release |
81 | * 201300 - 2.13 master | |
b993bb87 | 82 | * 201301 - header rename: <vfs/gnu/ext2fs/...> -> <gnu/vfs/ext2fs/...> |
e96bff60 | 83 | * 201302 - header <crypt.h> is gone |
d22a69a4 | 84 | * 201303 - <netatalk/...> and <netproto/atalk/...> are gone |
7c426b5f | 85 | * 201304 - Added wcscasecmp, wcsncasecmp to libc |
373b1e4d | 86 | * 201305 - Sync libm with NetBSD-current libm (new functions added) |
ae23f131 | 87 | * 201306 - Sync libm with FreeBSD-current libm (~50 new functions) |
cf53a424 JS |
88 | * 300000 - 3.0 release |
89 | * 300100 - 3.1 master | |
85b2e95a | 90 | * 300101 - i4b (ISDN) removal |
d64e8ab7 | 91 | * 300102 - <sys/ata.h> is now just a link of <sys/nata.h> |
19af1870 | 92 | * 300103 - if SIG_IGN is set on SIGCHLD, do not keep zombie children |
8a844d35 JS |
93 | * 300200 - 3.2 release |
94 | * 300300 - 3.3 master | |
6eb83deb | 95 | * 300301 - Add eaccess syscall |
32fe9e81 | 96 | * 300302 - fpsave changes - ucontext_t, mcontext_t, sigcontext, sigframe |
51dc126e | 97 | * 300303 - Demarcation of old m4/flex with new m4/flex |
3f7f81b2 | 98 | * 300304 - Update to dialog-1.2-20121230 |
ce1db22b JS |
99 | * 300400 - 3.4 release |
100 | * 300500 - 3.5 master | |
6ff43c94 | 101 | * 300501 - Convert libm to FreeBSD's version |
29646bb3 | 102 | * 300502 - GEM and i915 KMS support in kernel |
0d5acd74 | 103 | * 300503 - Upgrade libiconv, locales, and associated libc functions |
b0eeb746 | 104 | * 300600 - 3.6 release |
f0dce136 | 105 | * 300700 - 3.7 master |
b40efcac | 106 | * 300701 - Relocate bus/smbus/smb.h to dev/smbus/smb/smb.h |
eecbc471 | 107 | * 300702 - drm/i915 update |
f0478b8b | 108 | * 300703 - Make usb4bsd default |
6f25d555 | 109 | * 300704 - Removal of IPX, NCP and NWFS support |
7c87aae6 | 110 | * 300705 - Removal of ATM support. |
a39dabc3 JS |
111 | * 300800 - 3.8 release |
112 | * 300900 - 3.9 master | |
c37490a2 | 113 | * 300901 - drm/i915 hardware context support added |
6c7d9e6a JS |
114 | * 400000 - 4.0 release |
115 | * 400100 - 4.1 development | |
60a260ad | 116 | * 400101 - Removal of SCTP support. |
aa7c3d6b | 117 | * 400102 - Sound system update from FreeBSD |
1382aea8 | 118 | * 400103 - Milestone - availability of gcc50 in base |
b44473af | 119 | * 400104 - struct lwp_params (a public struct) members renaming |
4e8e707f | 120 | * 400105 - Switch to gcc50 as the primary compiler |
ca1161c6 | 121 | * 400106 - Added pipe2() system call |
4249868f | 122 | * 400107 - Add futimens() and utimensat() syscalls |
4f10f449 JS |
123 | * 400200 - 4.2 release |
124 | * 400300 - 4.3 development | |
0db70a6a | 125 | * 400301 - posix compliant iconv (no const qualifier) |
9b14d589 | 126 | * 400302 - Replacement of libm with OpenBSD's libm |
856bdec9 | 127 | * 400303 - environ and __progname are no longer linkable symbols |
43a397d9 | 128 | * 400304 - Activate symbol versioning for libc.so (still on version 8) |
73610d44 | 129 | * 400305 - Add accept4() system call |
b0bad46d | 130 | * 400306 - Add libexecinfo to base |
0e9fd563 | 131 | * 400307 - drm/i915 kernel module renamed to i915.ko |
02b66c54 | 132 | * 400308 - <malloc.h> removal |
0ca59c34 | 133 | * 400309 - Add lwp_setname() system call |
89847ad3 JS |
134 | * 400400 - 4.4 release |
135 | * 400500 - 4.5 development | |
a18a1725 | 136 | * 400501 - unionfs removal |
139f027d | 137 | * 400502 - private libraries: ssh ldns edit ncurses |
f2c43266 | 138 | * 400503 - libarchive-3.0.2 import (add bsdcat) |
3466658c SW |
139 | * 400600 - 4.6 release |
140 | * 400700 - 4.7 development | |
33ed2f5d | 141 | * 400701 - getline() visibility changes |
60e8fc88 | 142 | * 400702 - private library: libressl |
ffa81124 | 143 | * 400703 - resolved conflicts of md, crypt and ressl libraries |
93c47c45 | 144 | * 400704 - binutils update to 2.27 |
8f95cc34 | 145 | * 400705 - lwp_{set,get}affinity() |
907281d1 | 146 | * 400706 - sched_{set,get}affinity() |
b2920380 | 147 | * 400707 - pthread_{set,get}affinity_np() |
1eb8c611 | 148 | * 400708 - lwp_create2() |
3ae362f2 | 149 | * 400709 - pthread_attr_{set,get}affinity_np() |
a7477187 | 150 | * 400710 - sched_getcpu(); |
992850f4 | 151 | * 400711 - move lwp syscalls to sys/lwp.h |
f8e25fa7 | 152 | * 400712 - restore lwp syscalls (except lwp_create*) declaration |
4276b194 | 153 | * 400713 - add sysctl kern.cp_times |
bfc783d0 JS |
154 | * 400800 - 4.8 release |
155 | * 400900 - 4.9 development | |
7a76de80 | 156 | * 400901 - moved sigtramp, NX protection, sigtramp sysctl |
10df642b | 157 | * 400902 - change CPU_SETSIZE to signed; allow proc to change self affinity |
fc7075bb | 158 | * 400903 - malloc_type cleanup |
12a7cdae | 159 | * 400904 - pad rtstatistics |
7a76de80 | 160 | * 400905 - PTHREAD_STACK_MIN increase: 1024 => 16384 |
526c5c2b | 161 | * 400906 - lwpid_t >=1, instead of >=0 |
c0f25c26 | 162 | * 400907 - pthread_getthreadid_np() |
725edadf | 163 | * 400908 - {clock,pthread}_getcpuclockid() |
ac6b17f6 | 164 | * 400909 - deleted ortentry, SIOC{ADD,DEL}RT, RTM_OLD{ADD,DEL} |
43dbcc2a | 165 | * 400910 - routing table is only available on netisr_ncpus |
2bf4b7d5 | 166 | * 500000 - 5.0 release |
b5e8ec10 | 167 | * 500100 - 5.1 development |
d9d67b59 | 168 | * 500101 - kernel ppp removal |
22b7a3db | 169 | * 500102 - <sys/sysref{,2}.h> inclusions removed from some public headers |
06937ef9 | 170 | * 500103 - faith removal |
81c399c9 | 171 | * 500104 - cfmakesane() |
32f8d3b4 | 172 | * 500105 - _SC_LEVEL1_DCACHE_LINESIZE sysconf() |
a0d0bd1f | 173 | * 500106 - %b and %r formats removal |
e4f76d8f | 174 | * 500107 - <machine/apm_bios.h> removal |
4908a521 JS |
175 | * 500200 - 5.2 release |
176 | * 500300 - 5.3 development | |
c309c6d4 | 177 | * 500301 - rename some public UFS constants |
32506cfa | 178 | * 500302 - move IOCTLTRIM to a better header and rename it to DAIOCTRIM |
dc06fcca | 179 | * 500303 - get rid of sgtty (superseded by termios) |
755d70b8 | 180 | * 500304 - remove IPSEC/FAST_IPSEC |
c4851e1d | 181 | * 500305 - remove <sys/ioctl_compat.h> for good |
e6975a4e | 182 | * 500306 - strsuftoll(), strsuftollx() |
37eb443d | 183 | * 500307 - tcsetsid() |
f401eab7 | 184 | * 500308 - xdr_uint16_t() |
e7ab884b | 185 | * 500309 - drop support for some ancient ioctls (OSIOCGIF*) |
6b5ed54a | 186 | * 500310 - remove more unimplemented ioctls |
9dbd27e2 | 187 | * 500311 - add VIS_ALL to vis(3) |
0cdea21a | 188 | * 500312 - OpenPAM Resedacea upgrade |
ad592396 | 189 | * 500313 - remove vmnet support from tap(4) (VMIO_* ioctls) |
96426785 | 190 | * 500314 - add TAPGIFNAME to tap(4) |
0df03f12 | 191 | * 500315 - add TUNGIFNAME to tun(4) |
233c8570 | 192 | * 500316 - add SIOC[ADG]IFGROUP, SIOCGIFGMEMB ioctl |
c229b0c5 | 193 | * 500317 - add wait6() and waitid() syscalls |
25fa2226 JS |
194 | * 500400 - 5.4 release |
195 | * 500500 - 5.5 development | |
66932323 | 196 | * 500501 - reallocarray() added to libc |
ee3ebee6 | 197 | * 500502 - puffs etc. removed |
4b566556 MD |
198 | * 500503 - Lowered DATA rlimit supported by mmap(), libc sbrk() emulation |
199 | * had to be rewritten. libc brk() removed entirely. These changes | |
200 | * are required to allow mmap hints to utilize lowered data rlimits. | |
94f03308 | 201 | * 500504 - removed <sys/semaphore.h>, only <semaphore.h> remains |
5c08cc45 | 202 | * 500505 - rename <sys/termios.h> to <termios.h> |
b0651b0c | 203 | * 500506 - LibreSSL, OpenSSH, XZ, libarchive update, libopie/libmd deprecation |
5fa26687 JS |
204 | * 500600 - 5.6 release |
205 | * 500700 - 5.7 development | |
c0af9a0d | 206 | * 500701 - libopie/libmd removal |
30be0dbc | 207 | * 500702 - TCP_KEEP* milliseconds -> seconds |
9731fb3d | 208 | * 500703 - Static TLS bindings support for late-loaded shared libraries |
76b765a3 | 209 | * 500704 - Announce IP6 address flag changes via route(4) |
e2e9821d | 210 | * 500705 - Move us to utmpx only, delete utmp |
944cd60c SW |
211 | * 500706 - Switch to the now common three argument versions of the |
212 | * timespecadd() and timespecsub() macros in <sys/time.h> | |
a0f1cde0 | 213 | * 500707 - libradius/libtacplus removal |
4bbbd8e0 | 214 | * 500708 - Handle SIOCSIFMTU directly in tap(4) to support MTU > 1500 |
2bebe3e9 | 215 | * 500709 - Implement lwp_getname() and signal safety |
fa0a7960 | 216 | * 500710 - Implement getrandom() and __realpath() system calls |
548802dd JS |
217 | * 500800 - 5.8 release |
218 | * 500900 - 5.9 development | |
d67f4a11 | 219 | * 500901 - fparseln() was moved from libutil to libc |
794d5643 | 220 | * 500902 - unlocked flavors of fflush(), fputc(), fputs(), fread(), fwrite() |
1e1c5fac | 221 | * 500903 - add SIOCGIFXMEDIA ioctl |
544d23f4 | 222 | * 500904 - add IPPROTO_IP/IP_RECVTOS. |
6ed8d422 | 223 | * 500905 - add IPPROTO_IP/IP_SENDSRCADDR and IP_TOS control message. |
1926f587 SZ |
224 | * 500906 - add struct ip_mreqn for IPPROTO_IP/IP_MULTICAST_IF, |
225 | * IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP. | |
86ccdacb | 226 | * 500907 - add clock_nanosleep() |
b97fef05 | 227 | * 500908 - add fexecve() (also byteswap.h exists as of this vers) |
91d9f448 | 228 | * 500909 - add AF_ARP |
11eafdf1 JS |
229 | * 600000 - 6.0 release |
230 | * 600100 - 6.1 development | |
f8c8705e AL |
231 | * 600101 - kernel_{map,pmap,object} and {buffer,clean,pager}_map globals |
232 | * become pointers | |
ec74c40d | 233 | * 600102 - add nvmm(4) and libnvmm(3) |
5229377c | 234 | * 600103 - remove the old vmm code |
09d96b9c | 235 | * 600104 - add posix_fallocate() |
74fa2560 | 236 | * 600105 - add fdatasync() |
0ff4ec45 | 237 | * 600106 - msdosfs support in makefs(8) |
fcfd9e22 | 238 | * 600107 - remove sys/gnu/vfs/ext2fs |
7be5ee01 JS |
239 | * 600200 - 6.2 release |
240 | * 600300 - 6.3 development | |
8ad5bb66 | 241 | * 600301 - add strerror_l() |
ec1c3f3a | 242 | * 600302 - change sysctl KERN_PROC behavior |
81dd9c61 AHJ |
243 | * 600400 - 6.4 release |
244 | * 600500 - 6.5 development | |
a765cedf | 245 | * 600501 - add fopencookie(3) |
fd806898 | 246 | * 600502 - WIFSIGNALED(x) excludes SIGCONT |
8d1e479a | 247 | * 600503 - kldstat(2) supports module's full path |
03c0424b | 248 | * 600504 - change m_copyback(9) to forbid mbuf expansion |
5c694678 | 249 | * 600505 - add SO_USER_COOKIE to setsockopt(2)/getsockopt(2) |
1d7290e5 | 250 | * 600506 - add mbuf m_pkthdr.loop_cnt for loop detection |
b44c913f AL |
251 | * 600507 - remove mbuf m_pkthdr.loop_cnt and replace with |
252 | * if_tunnel_check_nesting() | |
368e218a AL |
253 | * 600508 - add ND6_IFF_AUTO_LINKLOCAL and ND6_IFF_NO_DAD; |
254 | * change ip6.accept_rtadv and ip6.auto_linklocal behavior | |
e2061a17 | 255 | */ |
e9ddd87b | 256 | #undef __DragonFly_version |
368e218a | 257 | #define __DragonFly_version 600508 /* propagated to newvers */ |
d77e8324 | 258 | |
e4dcda4d | 259 | #include <sys/_null.h> |
984263bc MD |
260 | |
261 | #ifndef LOCORE | |
262 | #include <sys/types.h> | |
263 | #endif | |
264 | ||
265 | /* | |
266 | * Machine-independent constants (some used in following include files). | |
267 | * Redefined constants are from POSIX 1003.1 limits file. | |
268 | * | |
269 | * MAXCOMLEN should be >= sizeof(ac_comm) (see <acct.h>) | |
984263bc MD |
270 | */ |
271 | #include <sys/syslimits.h> | |
272 | ||
6bb39c45 DR |
273 | #define MAXCOMLEN 16 /* max command name remembered */ |
274 | #define MAXINTERP 32 /* max interpreter file name length */ | |
e2e9821d | 275 | #define MAXLOGNAME 33 /* max login name length (incl. NUL) */ |
6bb39c45 DR |
276 | #define MAXUPRC CHILD_MAX /* max simultaneous processes */ |
277 | #define NCARGS ARG_MAX /* max bytes for an exec function */ | |
278 | #define NGROUPS NGROUPS_MAX /* max number groups */ | |
279 | #define NOFILE OPEN_MAX /* max open files per process */ | |
280 | #define NOGROUP 65535 /* marker for empty group set member */ | |
984263bc | 281 | #define MAXHOSTNAMELEN 256 /* max hostname size */ |
0f3a2b94 | 282 | #define SPECNAMELEN 63 /* max length of devicename */ |
984263bc MD |
283 | |
284 | /* More types and definitions used throughout the kernel. */ | |
285 | #ifdef _KERNEL | |
286 | #include <sys/cdefs.h> | |
287 | #include <sys/errno.h> | |
288 | #include <sys/time.h> | |
289 | ||
6bb39c45 DR |
290 | #define FALSE 0 |
291 | #define TRUE 1 | |
984263bc MD |
292 | #endif |
293 | ||
294 | #ifndef _KERNEL | |
295 | /* Signals. */ | |
805f91d4 | 296 | #include <sys/select.h> |
984263bc MD |
297 | #include <sys/signal.h> |
298 | #endif | |
299 | ||
300 | /* Machine type dependent parameters. */ | |
f7aae1f1 | 301 | #include <machine/alignbytes.h> |
984263bc MD |
302 | #include <machine/param.h> |
303 | #ifndef _KERNEL | |
304 | #include <machine/limits.h> | |
305 | #endif | |
306 | ||
c07315c4 MD |
307 | /* |
308 | * WARNING! Max supported cpu's due to PWAKEUP_CPUMASK is 16384. | |
309 | */ | |
da5fb9ef MD |
310 | #define PCATCH 0x00000100 /* tsleep checks signals */ |
311 | #define PUSRFLAG1 0x00000200 /* Subsystem specific flag */ | |
d9345d3a | 312 | #define PINTERLOCKED 0x00000400 /* Interlocked tsleep */ |
b336a9b1 MD |
313 | #define PWAKEUP_CPUMASK 0x00003FFF /* start cpu for chained wakeups */ |
314 | #define PWAKEUP_MYCPU 0x00004000 /* wakeup on current cpu only */ | |
fc17ad60 | 315 | #define PWAKEUP_ONE 0x00008000 /* argument to wakeup: only one */ |
da5fb9ef MD |
316 | #define PDOMAIN_MASK 0xFFFF0000 /* address domains for wakeup */ |
317 | #define PDOMAIN_UMTX 0x00010000 /* independant domain for UMTX */ | |
b12defdc | 318 | #define PDOMAIN_XLOCK 0x00020000 /* independant domain for fifo_lock */ |
6d3dff5f MD |
319 | #define PDOMAIN_FBSD0 0x01000000 /* freebsd sleepq queues */ |
320 | #define PDOMAIN_FBSDINC 0x00010000 /* freebsd sleepq queue 1 */ | |
fc17ad60 MD |
321 | #define PWAKEUP_ENCODE(domain, cpu) ((domain) | (cpu)) |
322 | #define PWAKEUP_DECODE(domain) ((domain) & PWAKEUP_CPUMASK) | |
984263bc | 323 | |
6bb39c45 | 324 | #define NZERO 0 /* default "nice" */ |
984263bc | 325 | |
9eca0398 | 326 | #define NBBY 8 /* number of bits in a byte */ |
6bb39c45 | 327 | #define NBPW sizeof(int) /* number of bytes per word (integer) */ |
984263bc | 328 | |
6bb39c45 | 329 | #define CMASK 022 /* default file mask: S_IWGRP|S_IWOTH */ |
b13267a5 | 330 | #if defined(_KERNEL) || defined(_KERNEL_STRUCTURES) |
91ffdfc5 | 331 | #define NOUDEV (dev_t)(-1) /* non-existent device */ |
6bb39c45 | 332 | #define NOMAJ 256 /* non-existent device */ |
b13267a5 MD |
333 | #endif |
334 | ||
335 | #ifndef _KERNEL | |
6bb39c45 | 336 | #define NODEV (dev_t)(-1) /* non-existent device */ |
984263bc MD |
337 | #endif |
338 | ||
d87e79b9 MD |
339 | /* |
340 | * cpu_mi_feature bits | |
341 | */ | |
342 | #define CPU_MI_BZERONT 0x00000001 | |
2a06bc07 | 343 | #define CPU_MI_MONITOR 0x00000010 |
d87e79b9 | 344 | |
984263bc MD |
345 | /* |
346 | * File system parameters and macros. | |
347 | * | |
348 | * MAXBSIZE - Filesystems are made out of blocks of at most MAXBSIZE bytes | |
349 | * per block. MAXBSIZE may be made larger without effecting | |
350 | * any existing filesystems as long as it does not exceed MAXPHYS, | |
351 | * and may be made smaller at the risk of not being able to use | |
352 | * filesystems which require a block size exceeding MAXBSIZE. | |
353 | * | |
dc6a6bd2 MD |
354 | * NBUFCALCSIZE - Calculate sufficient buffer cache buffers for the memory |
355 | * desired as if each buffer were sized to this value (actual | |
356 | * real memory use). Hysteresis works both ways. | |
984263bc | 357 | */ |
80e89abc | 358 | #define MAXBSIZE 65536 /* must be power of 2 */ |
dc6a6bd2 | 359 | #define NBUFCALCSIZE 16384 /* for nbuf calculation only */ |
80e89abc | 360 | |
984263bc MD |
361 | #define MAXFRAG 8 |
362 | ||
363 | /* | |
364 | * MAXPATHLEN defines the longest permissible path length after expanding | |
365 | * symbolic links. It is used to allocate a temporary buffer from the buffer | |
366 | * pool in which to do the name expansion, hence should be a power of two, | |
367 | * and must be less than or equal to MAXBSIZE. MAXSYMLINKS defines the | |
368 | * maximum number of symbolic links that may be expanded in a path name. | |
369 | * It should be set high enough to allow all legitimate uses, but halt | |
370 | * infinite loops reasonably quickly. | |
371 | */ | |
6bb39c45 | 372 | #define MAXPATHLEN PATH_MAX |
984263bc MD |
373 | #define MAXSYMLINKS 32 |
374 | ||
375 | /* Bit map related macros. */ | |
6bb39c45 DR |
376 | #define setbit(a,i) ((a)[(i)/NBBY] |= 1<<((i)%NBBY)) |
377 | #define clrbit(a,i) ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY))) | |
378 | #define isset(a,i) ((a)[(i)/NBBY] & (1<<((i)%NBBY))) | |
379 | #define isclr(a,i) (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0) | |
984263bc MD |
380 | |
381 | /* Macros for counting and rounding. */ | |
382 | #ifndef howmany | |
6bb39c45 | 383 | #define howmany(x, y) (((x)+((y)-1))/(y)) |
984263bc | 384 | #endif |
70675b40 | 385 | #define nitems(x) NELEM(x) |
6bb39c45 | 386 | #define rounddown(x, y) (((x)/(y))*(y)) |
a8cf2878 | 387 | #define rounddown2(x, y) ((x) & ~((y) - 1)) /* y power of two */ |
6bb39c45 DR |
388 | #define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) /* to any y */ |
389 | #define roundup2(x, y) (((x)+((y)-1))&(~((y)-1))) /* if y is powers of two */ | |
984263bc MD |
390 | #define powerof2(x) ((((x)-1)&(x))==0) |
391 | ||
aecf2182 MD |
392 | /* |
393 | * VM objects can be larger than the virtual address space, make sure | |
394 | * we don't cut-off the mask. | |
395 | */ | |
396 | #define trunc_page64(x) ((x) & ~(int64_t)PAGE_MASK) | |
397 | #define round_page64(x) (((x) + PAGE_MASK) & ~(int64_t)PAGE_MASK) | |
398 | ||
f7aae1f1 | 399 | /* |
400 | * Round p (pointer or byte index) up to a correctly-aligned value | |
401 | * for all data types (int, long, ...). The result is unsigned int | |
402 | * and must be cast to any desired pointer type. Single underscore | |
403 | * versions are for FreeBSD/OpenBSD compat. | |
404 | */ | |
405 | #define _ALIGNBYTES __ALIGNBYTES | |
406 | #define _ALIGN(p) __ALIGNPTR(p) | |
407 | #ifndef ALIGNBYTES | |
408 | #define ALIGNBYTES __ALIGNBYTES | |
409 | #endif | |
410 | #ifndef ALIGN | |
411 | #define ALIGN(p) __ALIGNPTR(p) | |
412 | #endif | |
413 | ||
984263bc | 414 | /* Macros for min/max. */ |
6bb39c45 DR |
415 | #define MIN(a,b) (((a)<(b))?(a):(b)) |
416 | #define MAX(a,b) (((a)>(b))?(a):(b)) | |
984263bc | 417 | |
a3034532 | 418 | /* Macro for array size */ |
fa8f7852 | 419 | #define NELEM(ary) (sizeof(ary) / sizeof((ary)[0])) |
a3034532 | 420 | |
984263bc MD |
421 | /* |
422 | * Constants for setting the parameters of the kernel memory allocator. | |
423 | * | |
424 | * 2 ** MINBUCKET is the smallest unit of memory that will be | |
425 | * allocated. It must be at least large enough to hold a pointer. | |
426 | * | |
427 | * Units of memory less or equal to MAXALLOCSAVE will permanently | |
428 | * allocate physical memory; requests for these size pieces of | |
429 | * memory are quite fast. Allocations greater than MAXALLOCSAVE must | |
430 | * always allocate and free physical memory; requests for these | |
431 | * size allocations should be done infrequently as they will be slow. | |
432 | * | |
433 | * Constraints: PAGE_SIZE <= MAXALLOCSAVE <= 2 ** (MINBUCKET + 14), and | |
434 | * MAXALLOCSIZE must be a power of two. | |
435 | */ | |
984263bc | 436 | #define MINBUCKET 4 /* 4 => min allocation of 16 bytes */ |
984263bc MD |
437 | #define MAXALLOCSAVE (2 * PAGE_SIZE) |
438 | ||
439 | /* | |
440 | * Scale factor for scaled integers used to count %cpu time and load avgs. | |
441 | * | |
442 | * The number of CPU `tick's that map to a unique `%age' can be expressed | |
443 | * by the formula (1 / (2 ^ (FSHIFT - 11))). The maximum load average that | |
444 | * can be calculated (assuming 32 bits) can be closely approximated using | |
445 | * the formula (2 ^ (2 * (16 - FSHIFT))) for (FSHIFT < 15). | |
446 | * | |
447 | * For the scheduler to maintain a 1:1 mapping of CPU `tick' to `%age', | |
448 | * FSHIFT must be at least 11; this gives us a maximum load avg of ~1024. | |
449 | */ | |
6bb39c45 | 450 | #define FSHIFT 11 /* bits to right of fixed binary point */ |
984263bc MD |
451 | #define FSCALE (1<<FSHIFT) |
452 | ||
453 | #define dbtoc(db) /* calculates devblks to pages */ \ | |
454 | ((db + (ctodb(1) - 1)) >> (PAGE_SHIFT - DEV_BSHIFT)) | |
9eca0398 | 455 | |
984263bc MD |
456 | #define ctodb(db) /* calculates pages to devblks */ \ |
457 | ((db) << (PAGE_SHIFT - DEV_BSHIFT)) | |
458 | ||
26a135b9 AE |
459 | #define MJUMPAGESIZE PAGE_SIZE /* jumbo cluster 4k */ |
460 | #define MJUM9BYTES (9 * 1024) /* jumbo cluster 9k */ | |
461 | #define MJUM16BYTES (16 * 1024) /* jumbo cluster 16k */ | |
ff9e829d MD |
462 | |
463 | /* | |
464 | * MBUF Management. | |
465 | * | |
ee9d7228 MD |
466 | * Because many drivers can't deal with multiple DMA segments all mbufs |
467 | * must avoid crossing a page boundary. While we can accomodate mbufs | |
468 | * which are not a power-of-2 sized kmalloc() will only guarantee | |
469 | * non-crossing alignment if we use a power-of-2. 256 is no longer large | |
470 | * enough due to m_hdr and m_pkthdr bloat. | |
ff9e829d MD |
471 | * |
472 | * MCLBYTES must be a power of 2 and is typically significantly larger | |
473 | * than MSIZE, sufficient to hold a standard-mtu packet. 2K is considered | |
474 | * reasonable. | |
475 | */ | |
476 | #ifndef MSIZE | |
ee9d7228 | 477 | #define MSIZE 512 /* size of an mbuf */ |
ff9e829d MD |
478 | #endif |
479 | ||
480 | #ifndef MCLSHIFT | |
94eaee9a | 481 | #define MCLSHIFT 11 /* convert bytes to m_buf clusters */ |
ff9e829d MD |
482 | #endif |
483 | #define MCLBYTES (1 << MCLSHIFT) /* size of an m_buf cluster */ | |
484 | #define MCLOFSET (MCLBYTES - 1) /* offset within an m_buf cluster */ | |
485 | ||
984263bc MD |
486 | /* |
487 | * Make this available for most of the kernel. There were too many | |
488 | * things that included sys/systm.h just for panic(). | |
489 | */ | |
490 | #ifdef _KERNEL | |
b153f746 | 491 | void panic (const char *, ...) __dead2 __printflike(1, 2); |
984263bc MD |
492 | #endif |
493 | ||
d1168c91 SW |
494 | #ifndef _BYTEORDER_FUNC_DEFINED |
495 | #define _BYTEORDER_FUNC_DEFINED | |
465a99ae | 496 | #define htonl(x) __htonl(x) |
465a99ae | 497 | #define htons(x) __htons(x) |
465a99ae | 498 | #define ntohl(x) __ntohl(x) |
465a99ae JS |
499 | #define ntohs(x) __ntohs(x) |
500 | #endif | |
501 | ||
abd448c3 PA |
502 | /* |
503 | * Access a variable length array that has been declared as a fixed | |
504 | * length array. | |
505 | */ | |
506 | #define __PAST_END(array, offset) (((__typeof__(*(array)) *)(array))[offset]) | |
507 | ||
984263bc | 508 | #endif /* _SYS_PARAM_H_ */ |