1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License").  You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22/*
23 * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
24 * Use is subject to license terms.
25 */
26
27/*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
28/*	  All Rights Reserved  	*/
29
30/*
31 * University Copyright- Copyright (c) 1982, 1986, 1988
32 * The Regents of the University of California
33 * All Rights Reserved
34 *
35 * University Acknowledgment- Portions of this document are derived from
36 * software developed by the University of California, Berkeley, and its
37 * contributors.
38 */
39
40#ifndef	_SYS_PARAM_H
41#define	_SYS_PARAM_H
42
43
44/*
45 * Fundamental variables; don't change too often.
46 *
47 * This file is included here for compatibility with
48 * SunOS, but it does *not* include all the values
49 * define in the SunOS version of this file.
50 */
51
52#include <sys/isa_defs.h>
53#include <limits.h>
54#include <unistd.h>
55
56#ifdef __cplusplus
57extern "C" {
58#endif
59
60#ifndef	MAX_INPUT
61#define	MAX_INPUT	512	/* Maximum bytes stored in the input queue */
62#endif
63
64#ifndef	MAX_CANON
65#define	MAX_CANON	256	/* Maximum bytes for canoical processing */
66#endif
67
68#define	UID_NOBODY	60001
69#define	GID_NOBODY	60001
70
71#define	UID_NOACCESS	60002	/* user ID no access */
72
73#define	MAXPID	((pid_t)sysconf(_SC_MAXPID))	/* max process id */
74#define	MAXUID	2147483647	/* max user id */
75#define	MAXLINK	32767		/* max links */
76
77#define	NMOUNT		40	/* est. of # mountable fs for quota calc */
78
79/* The values below are defined in limits.h */
80#define	NOFILE	OPEN_MAX	/* max open files per process */
81
82#define	CANBSIZ	256		/* max size of typewriter line	*/
83#define	HZ	((int)sysconf(_SC_CLK_TCK))  /* ticks/second of the clock */
84#define	TICK	(1000000000/((int)sysconf(_SC_CLK_TCK)))
85
86#define	NCARGS	0x100000	/* # characters in exec arglist */
87				/*   must be multiple of NBPW.  */
88/*
89 * These define the maximum and minimum allowable values of the
90 * configurable parameter NGROUPS_MAX.
91 */
92#define	NGROUPS_UMAX	32
93#define	NGROUPS_UMIN	8
94
95#define	NGROUPS		NGROUPS_MAX	/* max number groups, from limits.h */
96#define	NOGROUP		-1	/* marker for empty group set member */
97
98/*
99 * Priorities.  Should not be altered too much.
100 */
101
102#define	PMASK	0177
103#define	PCATCH	0400
104#define	PNOSTOP	01000
105#define	PSWP	0
106#define	PINOD	10
107#define	PSNDD	PINOD
108#define	PAMAP	PINOD
109#define	PPMAP	PINOD
110#define	PRIBIO	20
111#define	PZERO	25
112#define	PMEM	0
113#define	NZERO	20
114#define	PPIPE	26
115#define	PVFS	27
116#define	PWAIT	30
117#define	PLOCK	35
118#define	PSLEP	39
119#define	PUSER	60
120#define	PIDLE	127
121
122/*
123 * Fundamental constants of the implementation--cannot be changed easily.
124 */
125
126#define	NBPS	0x20000		/* Number of bytes per segment */
127#define	NBPW	sizeof (int)	/* number of bytes in an integer */
128
129#define	CMASK	0		/* default mask for file creation */
130#define	CDLIMIT	(1L<<11)	/* default max write address */
131#define	NODEV	(dev_t)(-1)
132#define	NBPSCTR		512	/* Bytes per disk sector.	*/
133#define	UBSIZE		512	/* unix block size.		*/
134#define	SCTRSHFT	9	/* Shift for BPSECT.		*/
135
136#define	lobyte(X)	(((unsigned char *)&(X))[1])
137#define	hibyte(X)	(((unsigned char *)&(X))[0])
138#define	loword(X)	(((ushort_t *)&(X))[1])
139#define	hiword(X)	(((ushort_t *)&(X))[0])
140
141/* REMOTE -- whether machine is primary, secondary, or regular */
142#define	SYSNAME 9		/* # chars in system name */
143#define	PREMOTE 39
144
145/*
146 * MAXPATHLEN defines the longest permissible path length,
147 * including the terminating null, after expanding symbolic links.
148 * MAXSYMLINKS defines the maximum number of symbolic links
149 * that may be expanded in a path name. It should be set high
150 * enough to allow all legitimate uses, but halt infinite loops
151 * reasonably quickly.
152 * MAXNAMELEN is the length (including the terminating null) of
153 * the longest permissible file (component) name.
154 */
155#define	MAXPATHLEN	1024
156#define	MAXSYMLINKS	20
157#define	MAXNAMELEN	256
158
159#ifndef	NADDR
160#define	NADDR 13
161#endif
162
163/*
164 * The following are defined to be the same as
165 * defined in /usr/include/limits.h.  They are
166 * needed for pipe and FIFO compatibility.
167 */
168#ifndef	PIPE_BUF	/* max # bytes atomic in write to a pipe */
169#define	PIPE_BUF	5120
170#endif	/* PIPE_BUF */
171
172#ifndef	PIPE_MAX	/* max # bytes written to a pipe in a write */
173#define	PIPE_MAX	5120
174#endif	/* PIPE_MAX */
175
176#define	PIPEBUF PIPE_BUF	/* pipe buffer size */
177
178#ifndef	NBBY
179#define	NBBY	8			/* number of bits per byte */
180#endif
181
182/* macros replacing interleaving functions */
183#define	dkblock(bp)	((bp)->b_blkno)
184#define	dkunit(bp)	(minor((bp)->b_dev) >> 3)
185
186/*
187 * File system parameters and macros.
188 *
189 * The file system is made out of blocks of at most MAXBSIZE units,
190 * with smaller units (fragments) only in the last direct block.
191 * MAXBSIZE primarily determines the size of buffers in the buffer
192 * pool. It may be made larger without any effect on existing
193 * file systems; however making it smaller make make some file
194 * systems unmountable.
195 *
196 * Note that the blocked devices are assumed to have DEV_BSIZE
197 * "sectors" and that fragments must be some multiple of this size.
198 */
199#define	MAXBSIZE	8192
200#define	DEV_BSIZE	512
201#define	DEV_BSHIFT	9		/* log2(DEV_BSIZE) */
202#define	MAXFRAG 	8
203
204#ifdef  _LP64
205#define	MAXOFF_T	0x7fffffffffffffffl
206#define	MAXOFFSET_T	0x7fffffffffffffffll
207#else
208#define	MAXOFF_T	0x7fffffff
209#ifndef _LONGLONG_TYPE
210#define	MAXOFFSET_T	0x7fffffff
211#else
212#define	MAXOFFSET_T	0x7fffffffffffffffLL
213#endif
214#endif  /* _LP64 */
215
216#define	btodb(bytes)			/* calculates (bytes / DEV_BSIZE) */ \
217	((unsigned)(bytes) >> DEV_BSHIFT)
218#define	dbtob(db)			/* calculates (db * DEV_BSIZE) */ \
219	((unsigned)(db) << DEV_BSHIFT)
220
221/*
222 * PAGES* describes the logical page size used by the system.
223 */
224
225#define	PAGESIZE	(sysconf(_SC_PAGESIZE))	/* All the above, for logical */
226#define	PAGEOFFSET	(PAGESIZE - 1)
227#define	PAGEMASK	(~PAGEOFFSET)
228
229/*
230 * Some random macros for units conversion.
231 */
232
233/*
234 * pages to bytes, and back (with and without rounding)
235 */
236#define	ptob(x)		((x) * PAGESIZE)
237#define	btop(x)		(((unsigned)(x)) / PAGESIZE)
238#define	btopr(x)	((((unsigned)(x) + PAGEOFFSET) / PAGESIZE))
239
240/*
241 * Signals
242 */
243
244#include <sys/signal.h>
245#include <sys/types.h>
246
247/*
248 * bit map related macros
249 */
250#define	setbit(a, i)	((a)[(i)/NBBY] |= 1<<((i)%NBBY))
251#define	clrbit(a, i)	((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
252#define	isset(a, i)	((a)[(i)/NBBY] & (1<<((i)%NBBY)))
253#define	isclr(a, i)	(((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
254
255/*
256 * Macros for fast min/max.
257 */
258#ifndef	MIN
259#define	MIN(a, b)	(((a) < (b))?(a):(b))
260#endif
261#ifndef	MAX
262#define	MAX(a, b)	(((a) > (b))?(a):(b))
263#endif
264
265#define	howmany(x, y)	(((x)+((y)-1))/(y))
266#define	roundup(x, y)	((((x)+((y)-1))/(y))*(y))
267
268/*
269 * Scale factor for scaled integers used to count
270 * %cpu time and load averages.
271 */
272#define	FSHIFT	8		/* bits to right of fixed binary point */
273#define	FSCALE	(1<<FSHIFT)
274
275/*
276 * Maximum size of hostname recognized and stored in the kernel.
277 * Same as in /usr/include/netdb.h
278 */
279#ifndef	MAXHOSTNAMELEN
280#define	MAXHOSTNAMELEN	256
281#endif
282
283#ifdef __cplusplus
284}
285#endif
286
287#endif	/* _SYS_PARAM_H */
288