| 1 | /*- |
| 2 | * SPDX-License-Identifier: BSD-3-Clause |
| 3 | * |
| 4 | * Copyright (c) 1982, 1986, 1989, 1993 |
| 5 | *	The Regents of the University of California. All rights reserved. |
| 6 | * (c) UNIX System Laboratories, Inc. |
| 7 | * All or some portions of this file are derived from material licensed |
| 8 | * to the University of California by American Telephone and Telegraph |
| 9 | * Co. or Unix System Laboratories, Inc. and are reproduced herein with |
| 10 | * the permission of UNIX System Laboratories, Inc. |
| 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without |
| 13 | * modification, are permitted provided that the following conditions |
| 14 | * are met: |
| 15 | * 1. Redistributions of source code must retain the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer. |
| 17 | * 2. Redistributions in binary form must reproduce the above copyright |
| 18 | * notice, this list of conditions and the following disclaimer in the |
| 19 | * documentation and/or other materials provided with the distribution. |
| 20 | * 3. Neither the name of the University nor the names of its contributors |
| 21 | * may be used to endorse or promote products derived from this software |
| 22 | * without specific prior written permission. |
| 23 | * |
| 24 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
| 25 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 26 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| 27 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
| 28 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| 29 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| 30 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| 31 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| 32 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| 33 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 34 | * SUCH DAMAGE. |
| 35 | */ |
| 36 | |
| 37 | #ifndef _SYS_PARAM_H_ |
| 38 | #define _SYS_PARAM_H_ |
| 39 | |
| 40 | #include <sys/_null.h> |
| 41 | #include <sys/_param.h> |
| 42 | |
| 43 | #define	BSD	199506		/* System version (year & month). */ |
| 44 | #define BSD4_3	1 |
| 45 | #define BSD4_4	1 |
| 46 | |
| 47 | /* |
| 48 | * __FreeBSD_version numbers are documented in the Porter's Handbook. |
| 49 | * If you bump the version for any reason, you should update the documentation |
| 50 | * there. |
| 51 | * Currently this lives here in the doc/ repository: |
| 52 | * |
| 53 | *	documentation/content/en/books/porters-handbook/versions/_index.adoc |
| 54 | * |
| 55 | * Encoding:	<major><two digit minor>Rxx |
| 56 | *		'R' is in the range 0 to 4 if this is a release branch or |
| 57 | *		X.0-CURRENT before releng/X.0 is created, otherwise 'R' is |
| 58 | *		in the range 5 to 9. |
| 59 | * Short hand: MMmmXXX |
| 60 | * |
| 61 | * __FreeBSD_version is bumped every time there's a change in the base system |
| 62 | * that's noteworthy. A noteworthy change is any change which changes the |
| 63 | * kernel's KBI in -CURRENT, one that changes some detail about the system that |
| 64 | * external software (or the ports system) would want to know about, one that |
| 65 | * adds a system call, one that adds or deletes a shipped library, a security |
| 66 | * fix, or similar change not specifically noted here. Bumps should be limited |
| 67 | * to one per day / a couple per week except for security fixes. |
| 68 | * |
| 69 | * The approved way to obtain this from a shell script is: |
| 70 | *	awk '/^\#define[[:space:]]*__FreeBSD_version/ {print $3}' |
| 71 | * Other methods to parse this file may work, but are not guaranteed against |
| 72 | * future changes. The above script works back to FreeBSD 3.x when this macro |
| 73 | * was introduced. This number is propagated to other places needing it that |
| 74 | * cannot include sys/param.h and should only be updated here. |
| 75 | */ |
| 76 | /* zig patch: __FreeBSD_version is defined by the compiler */ |
| 77 | |
| 78 | /* |
| 79 | * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD, |
| 80 | * which by definition is always true on FreeBSD. This macro is also defined |
| 81 | * on other systems that use the kernel of FreeBSD, such as GNU/kFreeBSD. |
| 82 | * |
| 83 | * It is tempting to use this macro in userland code when we want to enable |
| 84 | * kernel-specific routines, and in fact it's fine to do this in code that |
| 85 | * is part of FreeBSD itself. However, be aware that as presence of this |
| 86 | * macro is still not widespread (e.g. older FreeBSD versions, 3rd party |
| 87 | * compilers, etc), it is STRONGLY DISCOURAGED to check for this macro in |
| 88 | * external applications without also checking for __FreeBSD__ as an |
| 89 | * alternative. |
| 90 | */ |
| 91 | #undef __FreeBSD_kernel__ |
| 92 | #define __FreeBSD_kernel__ |
| 93 | |
| 94 | #if defined(_KERNEL) || defined(_WANT_P_OSREL) |
| 95 | #define	P_OSREL_SIGWAIT			700000 |
| 96 | #define	P_OSREL_SIGSEGV			700004 |
| 97 | #define	P_OSREL_MAP_ANON		800104 |
| 98 | #define	P_OSREL_MAP_FSTRICT		1100036 |
| 99 | #define	P_OSREL_SHUTDOWN_ENOTCONN	1100077 |
| 100 | #define	P_OSREL_MAP_GUARD		1200035 |
| 101 | #define	P_OSREL_WRFSBASE		1200041 |
| 102 | #define	P_OSREL_CK_CYLGRP		1200046 |
| 103 | #define	P_OSREL_VMTOTAL64		1200054 |
| 104 | #define	P_OSREL_CK_SUPERBLOCK		1300000 |
| 105 | #define	P_OSREL_CK_INODE		1300005 |
| 106 | #define	P_OSREL_POWERPC_NEW_AUX_ARGS	1300070 |
| 107 | #define	P_OSREL_TIDPID			1400079 |
| 108 | #define	P_OSREL_ARM64_SPSR		1400084 |
| 109 | #define	P_OSREL_TLSBASE			1500044 |
| 110 | #define	P_OSREL_EXTERRCTL		1500045 |
| 111 | |
| 112 | #define	P_OSREL_MAJOR(x)		((x) / 100000) |
| 113 | #endif |
| 114 | |
| 115 | #ifndef LOCORE |
| 116 | #include <sys/types.h> |
| 117 | #endif |
| 118 | |
| 119 | /* |
| 120 | * Machine-independent constants (some used in following include files). |
| 121 | * Redefined constants are from POSIX 1003.1 limits file. |
| 122 | * |
| 123 | * MAXCOMLEN should be >= sizeof(ac_comm) (see <acct.h>) |
| 124 | */ |
| 125 | #include <sys/syslimits.h> |
| 126 | |
| 127 | #define	MAXCOMLEN	19		/* max command name remembered */ |
| 128 | #define	MAXINTERP	PATH_MAX	/* max interpreter file name length */ |
| 129 | #define	MAXLOGNAME	33		/* max login name length (incl. NUL) */ |
| 130 | #define	MAXUPRC		CHILD_MAX	/* max simultaneous processes */ |
| 131 | #define	NCARGS		ARG_MAX		/* max bytes for an exec function */ |
| 132 | #define	NGROUPS		(NGROUPS_MAX+1)	/* max number groups */ |
| 133 | #define	NOFILE		OPEN_MAX	/* max open files per process */ |
| 134 | #define	NOGROUP		65535		/* marker for empty group set member */ |
| 135 | #define MAXHOSTNAMELEN	256		/* max hostname size */ |
| 136 | #define SPECNAMELEN	255		/* max length of devicename */ |
| 137 | |
| 138 | /* More types and definitions used throughout the kernel. */ |
| 139 | #ifdef _KERNEL |
| 140 | #include <sys/cdefs.h> |
| 141 | #include <sys/errno.h> |
| 142 | #ifndef LOCORE |
| 143 | #include <sys/time.h> |
| 144 | #include <sys/priority.h> |
| 145 | #endif |
| 146 | |
| 147 | #ifndef FALSE |
| 148 | #define	FALSE	0 |
| 149 | #endif |
| 150 | #ifndef TRUE |
| 151 | #define	TRUE	1 |
| 152 | #endif |
| 153 | #endif |
| 154 | |
| 155 | #if !defined(_KERNEL) && !defined(_STANDALONE) && !defined(LOCORE) |
| 156 | /* Signals. */ |
| 157 | #include <sys/signal.h> |
| 158 | #endif |
| 159 | |
| 160 | /* Machine type dependent parameters. */ |
| 161 | #include <machine/param.h> |
| 162 | #ifndef _KERNEL |
| 163 | #include <sys/limits.h> |
| 164 | #include <sys/_maxphys.h> |
| 165 | #endif |
| 166 | |
| 167 | #ifndef DEV_BSHIFT |
| 168 | #define	DEV_BSHIFT	9		/* log2(DEV_BSIZE) */ |
| 169 | #endif |
| 170 | #define	DEV_BSIZE	(1<<DEV_BSHIFT) |
| 171 | |
| 172 | #ifndef BLKDEV_IOSIZE |
| 173 | #define BLKDEV_IOSIZE PAGE_SIZE	/* default block device I/O size */ |
| 174 | #endif |
| 175 | #ifndef DFLTPHYS |
| 176 | #define DFLTPHYS	(64 * 1024)	/* default max raw I/O transfer size */ |
| 177 | #endif |
| 178 | #ifndef MAXDUMPPGS |
| 179 | #define MAXDUMPPGS	(DFLTPHYS/PAGE_SIZE) |
| 180 | #endif |
| 181 | |
| 182 | /* |
| 183 | * Constants related to network buffer management. |
| 184 | * MCLBYTES must be no larger than PAGE_SIZE. |
| 185 | */ |
| 186 | #ifndef	MSIZE |
| 187 | #define	MSIZE		256		/* size of an mbuf */ |
| 188 | #endif |
| 189 | |
| 190 | #ifndef	MCLSHIFT |
| 191 | #define MCLSHIFT	11		/* convert bytes to mbuf clusters */ |
| 192 | #endif	/* MCLSHIFT */ |
| 193 | |
| 194 | #define MCLBYTES	(1 << MCLSHIFT)	/* size of an mbuf cluster */ |
| 195 | |
| 196 | #if PAGE_SIZE <= 8192 |
| 197 | #define	MJUMPAGESIZE	PAGE_SIZE |
| 198 | #else |
| 199 | #define	MJUMPAGESIZE	(8 * 1024) |
| 200 | #endif |
| 201 | |
| 202 | #define	MJUM9BYTES	(9 * 1024)	/* jumbo cluster 9k */ |
| 203 | #define	MJUM16BYTES	(16 * 1024)	/* jumbo cluster 16k */ |
| 204 | |
| 205 | /* |
| 206 | * Mach derived conversion macros |
| 207 | */ |
| 208 | #define	round_page(x)	roundup2(x, PAGE_SIZE) |
| 209 | #define	trunc_page(x)	rounddown2(x, PAGE_SIZE) |
| 210 | |
| 211 | #define	atop(x)		((x) >> PAGE_SHIFT) |
| 212 | #define	ptoa(x)		((x) << PAGE_SHIFT) |
| 213 | |
| 214 | #define	pgtok(x)	((x) * (PAGE_SIZE / 1024)) |
| 215 | |
| 216 | /* |
| 217 | * Some macros for units conversion |
| 218 | */ |
| 219 | |
| 220 | /* clicks to bytes */ |
| 221 | #ifndef ctob |
| 222 | #define ctob(x)	((x)<<PAGE_SHIFT) |
| 223 | #endif |
| 224 | |
| 225 | /* bytes to clicks */ |
| 226 | #ifndef btoc |
| 227 | #define btoc(x)	(((vm_offset_t)(x)+PAGE_MASK)>>PAGE_SHIFT) |
| 228 | #endif |
| 229 | |
| 230 | /* |
| 231 | * btodb() is messy and perhaps slow because `bytes' may be an off_t. We |
| 232 | * want to shift an unsigned type to avoid sign extension and we don't |
| 233 | * want to widen `bytes' unnecessarily. Assume that the result fits in |
| 234 | * a daddr_t. |
| 235 | */ |
| 236 | #ifndef btodb |
| 237 | #define btodb(bytes)	 		/* calculates (bytes / DEV_BSIZE) */ \ |
| 238 | 	(sizeof (bytes) > sizeof(long) \ |
| 239 | 	 ? (daddr_t)((unsigned long long)(bytes) >> DEV_BSHIFT) \ |
| 240 | 	 : (daddr_t)((unsigned long)(bytes) >> DEV_BSHIFT)) |
| 241 | #endif |
| 242 | |
| 243 | #ifndef dbtob |
| 244 | #define dbtob(db)			/* calculates (db * DEV_BSIZE) */ \ |
| 245 | 	((off_t)(db) << DEV_BSHIFT) |
| 246 | #endif |
| 247 | |
| 248 | #define	PRIMASK		0x0ff |
| 249 | #define	PCATCH		0x100	/* OR'd with pri for tsleep to check signals */ |
| 250 | #define	PDROP		0x200	/* OR'd with pri to stop re-entry of interlock mutex */ |
| 251 | #define	PNOLOCK		0x400	/* OR'd with pri to allow sleeping w/o a lock */ |
| 252 | #define	PRILASTFLAG	0x400	/* Last flag defined above */ |
| 253 | |
| 254 | #define	NZERO	0		/* default "nice" */ |
| 255 | |
| 256 | #define	CMASK	022		/* default file mask: S_IWGRP|S_IWOTH */ |
| 257 | |
| 258 | #define	NODEV	(dev_t)(-1)	/* non-existent device */ |
| 259 | |
| 260 | /* |
| 261 | * File system parameters and macros. |
| 262 | * |
| 263 | * MAXBSIZE -	Filesystems are made out of blocks of at most MAXBSIZE bytes |
| 264 | *		per block. MAXBSIZE may be made larger without effecting |
| 265 | *		any existing filesystems as long as it does not exceed MAXPHYS, |
| 266 | *		and may be made smaller at the risk of not being able to use |
| 267 | *		filesystems which require a block size exceeding MAXBSIZE. |
| 268 | * |
| 269 | * MAXBCACHEBUF - Maximum size of a buffer in the buffer cache. This must |
| 270 | *		be >= MAXBSIZE and can be set differently for different |
| 271 | *		architectures by defining it in <machine/param.h>. |
| 272 | *		Making this larger allows NFS to do larger reads/writes. |
| 273 | * |
| 274 | * BKVASIZE -	Nominal buffer space per buffer, in bytes. BKVASIZE is the |
| 275 | *		minimum KVM memory reservation the kernel is willing to make. |
| 276 | *		Filesystems can of course request smaller chunks. Actual |
| 277 | *		backing memory uses a chunk size of a page (PAGE_SIZE). |
| 278 | *		The default value here can be overridden on a per-architecture |
| 279 | *		basis by defining it in <machine/param.h>. |
| 280 | * |
| 281 | *		If you make BKVASIZE too small you risk seriously fragmenting |
| 282 | *		the buffer KVM map which may slow things down a bit. If you |
| 283 | *		make it too big the kernel will not be able to optimally use |
| 284 | *		the KVM memory reserved for the buffer cache and will wind |
| 285 | *		up with too-few buffers. |
| 286 | * |
| 287 | *		The default is 16384, roughly 2x the block size used by a |
| 288 | *		normal UFS filesystem. |
| 289 | */ |
| 290 | #define MAXBSIZE	65536	/* must be power of 2 */ |
| 291 | #ifndef	MAXBCACHEBUF |
| 292 | #define	MAXBCACHEBUF	MAXBSIZE /* must be a power of 2 >= MAXBSIZE */ |
| 293 | #endif |
| 294 | #ifndef	BKVASIZE |
| 295 | #define BKVASIZE	16384	/* must be power of 2 */ |
| 296 | #endif |
| 297 | #define BKVAMASK	(BKVASIZE-1) |
| 298 | |
| 299 | /* |
| 300 | * MAXPATHLEN defines the longest permissible path length after expanding |
| 301 | * symbolic links. It is used to allocate a temporary buffer from the buffer |
| 302 | * pool in which to do the name expansion, hence should be a power of two, |
| 303 | * and must be less than or equal to MAXBSIZE. MAXSYMLINKS defines the |
| 304 | * maximum number of symbolic links that may be expanded in a path name. |
| 305 | * It should be set high enough to allow all legitimate uses, but halt |
| 306 | * infinite loops reasonably quickly. |
| 307 | */ |
| 308 | #define	MAXPATHLEN	PATH_MAX |
| 309 | #define MAXSYMLINKS	32 |
| 310 | |
| 311 | /* Bit map related macros. */ |
| 312 | #define	setbit(a,i)	(((unsigned char *)(a))[(i)/NBBY] |= 1<<((i)%NBBY)) |
| 313 | #define	clrbit(a,i)	(((unsigned char *)(a))[(i)/NBBY] &= ~(1<<((i)%NBBY))) |
| 314 | #define	isset(a,i)							\ |
| 315 | 	(((const unsigned char *)(a))[(i)/NBBY] & (1<<((i)%NBBY))) |
| 316 | #define	isclr(a,i)							\ |
| 317 | 	((((const unsigned char *)(a))[(i)/NBBY] & (1<<((i)%NBBY))) == 0) |
| 318 | |
| 319 | /* Macros for counting and rounding provided by <sys/_param.h>. */ |
| 320 | |
| 321 | /* Macros for min/max. */ |
| 322 | #define	MIN(a,b) (((a)<(b))?(a):(b)) |
| 323 | #define	MAX(a,b) (((a)>(b))?(a):(b)) |
| 324 | |
| 325 | #ifdef _KERNEL |
| 326 | /* |
| 327 | * Basic byte order function prototypes for non-inline functions. |
| 328 | */ |
| 329 | #ifndef LOCORE |
| 330 | #ifndef _BYTEORDER_PROTOTYPED |
| 331 | #define	_BYTEORDER_PROTOTYPED |
| 332 | __BEGIN_DECLS |
| 333 | __uint32_t	 htonl(__uint32_t); |
| 334 | __uint16_t	 htons(__uint16_t); |
| 335 | __uint32_t	 ntohl(__uint32_t); |
| 336 | __uint16_t	 ntohs(__uint16_t); |
| 337 | __END_DECLS |
| 338 | #endif |
| 339 | #endif |
| 340 | |
| 341 | #ifndef _BYTEORDER_FUNC_DEFINED |
| 342 | #define	_BYTEORDER_FUNC_DEFINED |
| 343 | #define	htonl(x)	__htonl(x) |
| 344 | #define	htons(x)	__htons(x) |
| 345 | #define	ntohl(x)	__ntohl(x) |
| 346 | #define	ntohs(x)	__ntohs(x) |
| 347 | #endif /* !_BYTEORDER_FUNC_DEFINED */ |
| 348 | #endif /* _KERNEL */ |
| 349 | |
| 350 | /* |
| 351 | * Scale factor for scaled integers used to count %cpu time and load avgs. |
| 352 | * |
| 353 | * The number of CPU `tick's that map to a unique `%age' can be expressed |
| 354 | * by the formula (1 / (2 ^ (FSHIFT - 11))). Since the intermediate |
| 355 | * calculation is done with 64-bit precision, the maximum load average that can |
| 356 | * be calculated is approximately 2^32 / FSCALE. |
| 357 | * |
| 358 | * For the scheduler to maintain a 1:1 mapping of CPU `tick' to `%age', |
| 359 | * FSHIFT must be at least 11. This gives a maximum load avg of 2 million. |
| 360 | */ |
| 361 | #define	FSHIFT	11		/* bits to right of fixed binary point */ |
| 362 | #define FSCALE	(1<<FSHIFT) |
| 363 | |
| 364 | #define dbtoc(db)			/* calculates devblks to pages */ \ |
| 365 | 	((db + (ctodb(1) - 1)) >> (PAGE_SHIFT - DEV_BSHIFT)) |
| 366 | |
| 367 | #define ctodb(db)			/* calculates pages to devblks */ \ |
| 368 | 	((db) << (PAGE_SHIFT - DEV_BSHIFT)) |
| 369 | |
| 370 | /* |
| 371 | * Old spelling of __containerof(). |
| 372 | */ |
| 373 | #define	member2struct(s, m, x)						\ |
| 374 | 	((struct s *)(void *)((char *)(x) - offsetof(struct s, m))) |
| 375 | |
| 376 | /* |
| 377 | * Access a variable length array that has been declared as a fixed |
| 378 | * length array. |
| 379 | */ |
| 380 | #define __PAST_END(array, offset) (((__typeof__(*(array)) *)(array))[offset]) |
| 381 | |
| 382 | #endif	/* _SYS_PARAM_H_ */ |