/[base]/head/sys/sys/param.h
ViewVC logotype

Contents of /head/sys/sys/param.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 368659 - (show annotations) (download)
Tue Dec 15 12:05:07 2020 UTC (3 years, 8 months ago) by hselasky
File MIME type: text/plain
File size: 12523 byte(s)
Improve handling of alternate settings in the USB stack.

Allow setting the alternate interface number to fail when there is only
one alternate setting present, to comply with the USB specification.

Refactor how iface->num_altsetting is computed.

Bump the __FreeBSD_version due to change of core USB structure.

PR:		251856
MFC after:	1 week
Submitted by:	Ma, Horse <Shichun.Ma@dell.com>
Sponsored by:	Mellanox Technologies // NVIDIA Networking

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 * @(#)param.h 8.3 (Berkeley) 4/4/95
37 * $FreeBSD$
38 */
39
40 #ifndef _SYS_PARAM_H_
41 #define _SYS_PARAM_H_
42
43 #include <sys/_null.h>
44
45 #define BSD 199506 /* System version (year & month). */
46 #define BSD4_3 1
47 #define BSD4_4 1
48
49 /*
50 * __FreeBSD_version numbers are documented in the Porter's Handbook.
51 * If you bump the version for any reason, you should update the documentation
52 * there.
53 * Currently this lives here in the doc/ repository:
54 *
55 * head/en_US.ISO8859-1/books/porters-handbook/versions/chapter.xml
56 *
57 * scheme is: <major><two digit minor>Rxx
58 * 'R' is in the range 0 to 4 if this is a release branch or
59 * X.0-CURRENT before releng/X.0 is created, otherwise 'R' is
60 * in the range 5 to 9.
61 */
62 #undef __FreeBSD_version
63 #define __FreeBSD_version 1300132 /* Master, propagated to newvers */
64
65 /*
66 * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,
67 * which by definition is always true on FreeBSD. This macro is also defined
68 * on other systems that use the kernel of FreeBSD, such as GNU/kFreeBSD.
69 *
70 * It is tempting to use this macro in userland code when we want to enable
71 * kernel-specific routines, and in fact it's fine to do this in code that
72 * is part of FreeBSD itself. However, be aware that as presence of this
73 * macro is still not widespread (e.g. older FreeBSD versions, 3rd party
74 * compilers, etc), it is STRONGLY DISCOURAGED to check for this macro in
75 * external applications without also checking for __FreeBSD__ as an
76 * alternative.
77 */
78 #undef __FreeBSD_kernel__
79 #define __FreeBSD_kernel__
80
81 #if defined(_KERNEL) || defined(IN_RTLD)
82 #define P_OSREL_SIGWAIT 700000
83 #define P_OSREL_SIGSEGV 700004
84 #define P_OSREL_MAP_ANON 800104
85 #define P_OSREL_MAP_FSTRICT 1100036
86 #define P_OSREL_SHUTDOWN_ENOTCONN 1100077
87 #define P_OSREL_MAP_GUARD 1200035
88 #define P_OSREL_WRFSBASE 1200041
89 #define P_OSREL_CK_CYLGRP 1200046
90 #define P_OSREL_VMTOTAL64 1200054
91 #define P_OSREL_CK_SUPERBLOCK 1300000
92 #define P_OSREL_CK_INODE 1300005
93 #define P_OSREL_POWERPC_NEW_AUX_ARGS 1300070
94
95 #define P_OSREL_MAJOR(x) ((x) / 100000)
96 #endif
97
98 #ifndef LOCORE
99 #include <sys/types.h>
100 #endif
101
102 /*
103 * Machine-independent constants (some used in following include files).
104 * Redefined constants are from POSIX 1003.1 limits file.
105 *
106 * MAXCOMLEN should be >= sizeof(ac_comm) (see <acct.h>)
107 */
108 #include <sys/syslimits.h>
109
110 #define MAXCOMLEN 19 /* max command name remembered */
111 #define MAXINTERP PATH_MAX /* max interpreter file name length */
112 #define MAXLOGNAME 33 /* max login name length (incl. NUL) */
113 #define MAXUPRC CHILD_MAX /* max simultaneous processes */
114 #define NCARGS ARG_MAX /* max bytes for an exec function */
115 #define NGROUPS (NGROUPS_MAX+1) /* max number groups */
116 #define NOFILE OPEN_MAX /* max open files per process */
117 #define NOGROUP 65535 /* marker for empty group set member */
118 #define MAXHOSTNAMELEN 256 /* max hostname size */
119 #define SPECNAMELEN 255 /* max length of devicename */
120
121 /* More types and definitions used throughout the kernel. */
122 #ifdef _KERNEL
123 #include <sys/cdefs.h>
124 #include <sys/errno.h>
125 #ifndef LOCORE
126 #include <sys/time.h>
127 #include <sys/priority.h>
128 #endif
129
130 #ifndef FALSE
131 #define FALSE 0
132 #endif
133 #ifndef TRUE
134 #define TRUE 1
135 #endif
136 #endif
137
138 #ifndef _KERNEL
139 #ifndef LOCORE
140 /* Signals. */
141 #include <sys/signal.h>
142 #endif
143 #endif
144
145 /* Machine type dependent parameters. */
146 #include <machine/param.h>
147 #ifndef _KERNEL
148 #include <sys/limits.h>
149 #endif
150
151 #ifndef DEV_BSHIFT
152 #define DEV_BSHIFT 9 /* log2(DEV_BSIZE) */
153 #endif
154 #define DEV_BSIZE (1<<DEV_BSHIFT)
155
156 #ifndef BLKDEV_IOSIZE
157 #define BLKDEV_IOSIZE PAGE_SIZE /* default block device I/O size */
158 #endif
159 #ifndef DFLTPHYS
160 #define DFLTPHYS (64 * 1024) /* default max raw I/O transfer size */
161 #endif
162 #ifndef MAXPHYS /* max raw I/O transfer size */
163 #ifdef __ILP32__
164 #define MAXPHYS (128 * 1024)
165 #else
166 #define MAXPHYS (1024 * 1024)
167 #endif
168 #endif
169 #ifndef MAXDUMPPGS
170 #define MAXDUMPPGS (DFLTPHYS/PAGE_SIZE)
171 #endif
172
173 /*
174 * Constants related to network buffer management.
175 * MCLBYTES must be no larger than PAGE_SIZE.
176 */
177 #ifndef MSIZE
178 #define MSIZE 256 /* size of an mbuf */
179 #endif
180
181 #ifndef MCLSHIFT
182 #define MCLSHIFT 11 /* convert bytes to mbuf clusters */
183 #endif /* MCLSHIFT */
184
185 #define MCLBYTES (1 << MCLSHIFT) /* size of an mbuf cluster */
186
187 #if PAGE_SIZE < 2048
188 #define MJUMPAGESIZE MCLBYTES
189 #elif PAGE_SIZE <= 8192
190 #define MJUMPAGESIZE PAGE_SIZE
191 #else
192 #define MJUMPAGESIZE (8 * 1024)
193 #endif
194
195 #define MJUM9BYTES (9 * 1024) /* jumbo cluster 9k */
196 #define MJUM16BYTES (16 * 1024) /* jumbo cluster 16k */
197
198 /*
199 * Some macros for units conversion
200 */
201
202 /* clicks to bytes */
203 #ifndef ctob
204 #define ctob(x) ((x)<<PAGE_SHIFT)
205 #endif
206
207 /* bytes to clicks */
208 #ifndef btoc
209 #define btoc(x) (((vm_offset_t)(x)+PAGE_MASK)>>PAGE_SHIFT)
210 #endif
211
212 /*
213 * btodb() is messy and perhaps slow because `bytes' may be an off_t. We
214 * want to shift an unsigned type to avoid sign extension and we don't
215 * want to widen `bytes' unnecessarily. Assume that the result fits in
216 * a daddr_t.
217 */
218 #ifndef btodb
219 #define btodb(bytes) /* calculates (bytes / DEV_BSIZE) */ \
220 (sizeof (bytes) > sizeof(long) \
221 ? (daddr_t)((unsigned long long)(bytes) >> DEV_BSHIFT) \
222 : (daddr_t)((unsigned long)(bytes) >> DEV_BSHIFT))
223 #endif
224
225 #ifndef dbtob
226 #define dbtob(db) /* calculates (db * DEV_BSIZE) */ \
227 ((off_t)(db) << DEV_BSHIFT)
228 #endif
229
230 #define PRIMASK 0x0ff
231 #define PCATCH 0x100 /* OR'd with pri for tsleep to check signals */
232 #define PDROP 0x200 /* OR'd with pri to stop re-entry of interlock mutex */
233
234 #define NZERO 0 /* default "nice" */
235
236 #define NBBY 8 /* number of bits in a byte */
237 #define NBPW sizeof(int) /* number of bytes per word (integer) */
238
239 #define CMASK 022 /* default file mask: S_IWGRP|S_IWOTH */
240
241 #define NODEV (dev_t)(-1) /* non-existent device */
242
243 /*
244 * File system parameters and macros.
245 *
246 * MAXBSIZE - Filesystems are made out of blocks of at most MAXBSIZE bytes
247 * per block. MAXBSIZE may be made larger without effecting
248 * any existing filesystems as long as it does not exceed MAXPHYS,
249 * and may be made smaller at the risk of not being able to use
250 * filesystems which require a block size exceeding MAXBSIZE.
251 *
252 * MAXBCACHEBUF - Maximum size of a buffer in the buffer cache. This must
253 * be >= MAXBSIZE and can be set differently for different
254 * architectures by defining it in <machine/param.h>.
255 * Making this larger allows NFS to do larger reads/writes.
256 *
257 * BKVASIZE - Nominal buffer space per buffer, in bytes. BKVASIZE is the
258 * minimum KVM memory reservation the kernel is willing to make.
259 * Filesystems can of course request smaller chunks. Actual
260 * backing memory uses a chunk size of a page (PAGE_SIZE).
261 * The default value here can be overridden on a per-architecture
262 * basis by defining it in <machine/param.h>.
263 *
264 * If you make BKVASIZE too small you risk seriously fragmenting
265 * the buffer KVM map which may slow things down a bit. If you
266 * make it too big the kernel will not be able to optimally use
267 * the KVM memory reserved for the buffer cache and will wind
268 * up with too-few buffers.
269 *
270 * The default is 16384, roughly 2x the block size used by a
271 * normal UFS filesystem.
272 */
273 #define MAXBSIZE 65536 /* must be power of 2 */
274 #ifndef MAXBCACHEBUF
275 #define MAXBCACHEBUF MAXBSIZE /* must be a power of 2 >= MAXBSIZE */
276 #endif
277 #ifndef BKVASIZE
278 #define BKVASIZE 16384 /* must be power of 2 */
279 #endif
280 #define BKVAMASK (BKVASIZE-1)
281
282 /*
283 * MAXPATHLEN defines the longest permissible path length after expanding
284 * symbolic links. It is used to allocate a temporary buffer from the buffer
285 * pool in which to do the name expansion, hence should be a power of two,
286 * and must be less than or equal to MAXBSIZE. MAXSYMLINKS defines the
287 * maximum number of symbolic links that may be expanded in a path name.
288 * It should be set high enough to allow all legitimate uses, but halt
289 * infinite loops reasonably quickly.
290 */
291 #define MAXPATHLEN PATH_MAX
292 #define MAXSYMLINKS 32
293
294 /* Bit map related macros. */
295 #define setbit(a,i) (((unsigned char *)(a))[(i)/NBBY] |= 1<<((i)%NBBY))
296 #define clrbit(a,i) (((unsigned char *)(a))[(i)/NBBY] &= ~(1<<((i)%NBBY)))
297 #define isset(a,i) \
298 (((const unsigned char *)(a))[(i)/NBBY] & (1<<((i)%NBBY)))
299 #define isclr(a,i) \
300 ((((const unsigned char *)(a))[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
301
302 /* Macros for counting and rounding. */
303 #ifndef howmany
304 #define howmany(x, y) (((x)+((y)-1))/(y))
305 #endif
306 #define nitems(x) (sizeof((x)) / sizeof((x)[0]))
307 #define rounddown(x, y) (((x)/(y))*(y))
308 #define rounddown2(x, y) ((x)&(~((y)-1))) /* if y is power of two */
309 #define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) /* to any y */
310 #define roundup2(x, y) (((x)+((y)-1))&(~((y)-1))) /* if y is powers of two */
311 #define powerof2(x) ((((x)-1)&(x))==0)
312
313 /* Macros for min/max. */
314 #define MIN(a,b) (((a)<(b))?(a):(b))
315 #define MAX(a,b) (((a)>(b))?(a):(b))
316
317 #ifdef _KERNEL
318 /*
319 * Basic byte order function prototypes for non-inline functions.
320 */
321 #ifndef LOCORE
322 #ifndef _BYTEORDER_PROTOTYPED
323 #define _BYTEORDER_PROTOTYPED
324 __BEGIN_DECLS
325 __uint32_t htonl(__uint32_t);
326 __uint16_t htons(__uint16_t);
327 __uint32_t ntohl(__uint32_t);
328 __uint16_t ntohs(__uint16_t);
329 __END_DECLS
330 #endif
331 #endif
332
333 #ifndef _BYTEORDER_FUNC_DEFINED
334 #define _BYTEORDER_FUNC_DEFINED
335 #define htonl(x) __htonl(x)
336 #define htons(x) __htons(x)
337 #define ntohl(x) __ntohl(x)
338 #define ntohs(x) __ntohs(x)
339 #endif /* !_BYTEORDER_FUNC_DEFINED */
340 #endif /* _KERNEL */
341
342 /*
343 * Scale factor for scaled integers used to count %cpu time and load avgs.
344 *
345 * The number of CPU `tick's that map to a unique `%age' can be expressed
346 * by the formula (1 / (2 ^ (FSHIFT - 11))). The maximum load average that
347 * can be calculated (assuming 32 bits) can be closely approximated using
348 * the formula (2 ^ (2 * (16 - FSHIFT))) for (FSHIFT < 15).
349 *
350 * For the scheduler to maintain a 1:1 mapping of CPU `tick' to `%age',
351 * FSHIFT must be at least 11; this gives us a maximum load avg of ~1024.
352 */
353 #define FSHIFT 11 /* bits to right of fixed binary point */
354 #define FSCALE (1<<FSHIFT)
355
356 #define dbtoc(db) /* calculates devblks to pages */ \
357 ((db + (ctodb(1) - 1)) >> (PAGE_SHIFT - DEV_BSHIFT))
358
359 #define ctodb(db) /* calculates pages to devblks */ \
360 ((db) << (PAGE_SHIFT - DEV_BSHIFT))
361
362 /*
363 * Old spelling of __containerof().
364 */
365 #define member2struct(s, m, x) \
366 ((struct s *)(void *)((char *)(x) - offsetof(struct s, m)))
367
368 /*
369 * Access a variable length array that has been declared as a fixed
370 * length array.
371 */
372 #define __PAST_END(array, offset) (((__typeof__(*(array)) *)(array))[offset])
373
374 #endif /* _SYS_PARAM_H_ */

Properties

Name Value
svn:keywords FreeBSD=%H

  ViewVC Help
Powered by ViewVC 1.1.27