1efde9c4dba0169c7651fd295802272e3729f240
[dragonfly.git] / sys / platform / pc32 / boot / dosboot / sysparam.h
1 /*-\r
2  * Copyright (c) 1982, 1986, 1989, 1993\r
3  *      The Regents of the University of California.  All rights reserved.\r
4  * (c) UNIX System Laboratories, Inc.\r
5  * All or some portions of this file are derived from material licensed\r
6  * to the University of California by American Telephone and Telegraph\r
7  * Co. or Unix System Laboratories, Inc. and are reproduced herein with\r
8  * the permission of UNIX System Laboratories, Inc.\r
9  *\r
10  * Redistribution and use in source and binary forms, with or without\r
11  * modification, are permitted provided that the following conditions\r
12  * are met:\r
13  * 1. Redistributions of source code must retain the above copyright\r
14  *    notice, this list of conditions and the following disclaimer.\r
15  * 2. Redistributions in binary form must reproduce the above copyright\r
16  *    notice, this list of conditions and the following disclaimer in the\r
17  *    documentation and/or other materials provided with the distribution.\r
18  * 3. All advertising materials mentioning features or use of this software\r
19  *    must display the following acknowledgement:\r
20  *      This product includes software developed by the University of\r
21  *      California, Berkeley and its contributors.\r
22  * 4. Neither the name of the University nor the names of its contributors\r
23  *    may be used to endorse or promote products derived from this software\r
24  *    without specific prior written permission.\r
25  *\r
26  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\r
27  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
28  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
29  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\r
30  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
31  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
32  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
33  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
34  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
35  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
36  * SUCH DAMAGE.\r
37  *\r
38  *      @(#)param.h     8.2 (Berkeley) 1/21/94\r
39  * $FreeBSD: src/sys/i386/boot/dosboot/sysparam.h,v 1.5 1999/08/28 00:43:25 peter Exp $\r
40  * $DragonFly: src/sys/platform/pc32/boot/dosboot/Attic/sysparam.h,v 1.4 2003/07/19 21:14:33 dillon Exp $\r
41  */\r
42 \r
43 #ifndef _DOSBOOT_SYS_PARAM_H_\r
44 #define _DOSBOOT_SYS_PARAM_H_\r
45 \r
46 #define BSD     199306          /* System version (year & month). */\r
47 #define BSD4_3  1\r
48 #define BSD4_4  1\r
49 \r
50 #ifndef NULL\r
51 #define NULL    0\r
52 #endif\r
53 \r
54 #ifndef LOCORE\r
55 #include "types.h"\r
56 #endif\r
57 \r
58 /*\r
59  * Machine-independent constants (some used in following include files).\r
60  * Redefined constants are from POSIX 1003.1 limits file.\r
61  *\r
62  * MAXCOMLEN should be >= sizeof(ac_comm) (see <acct.h>)\r
63  * MAXLOGNAME should be >= UT_NAMESIZE (see <utmp.h>)\r
64  */\r
65 #include "syslimits.h"\r
66 \r
67 #define MAXCOMLEN       16              /* max command name remembered */\r
68 #define MAXINTERP       32              /* max interpreter file name length */\r
69 #define MAXLOGNAME      12              /* max login name length */\r
70 #define MAXUPRC         CHILD_MAX       /* max simultaneous processes */\r
71 #define NCARGS          ARG_MAX         /* max bytes for an exec function */\r
72 #define NGROUPS         NGROUPS_MAX     /* max number groups */\r
73 #define NOFILE          OPEN_MAX        /* max open files per process */\r
74 #define NOGROUP         65535           /* marker for empty group set member */\r
75 #define MAXHOSTNAMELEN  256             /* max hostname size */\r
76 \r
77 /* More types and definitions used throughout the kernel. */\r
78 #ifdef KERNEL\r
79 /*\r
80 include <sys/cdefs.h>\r
81 include <sys/errno.h>\r
82 include <sys/time.h>\r
83 include <sys/resource.h>\r
84 include <sys/ucred.h>\r
85 include <sys/uio.h>\r
86 include <sys/rtprio.h>\r
87 */\r
88 #endif\r
89 \r
90 /* Signals. */\r
91 /*#include <sys/signal.h>*/\r
92 \r
93 /* Machine type dependent parameters. */\r
94 #include "param.h"\r
95 #include "limits.h"\r
96 \r
97 /*\r
98  * Priorities.  Note that with 32 run queues, differences less than 4 are\r
99  * insignificant.\r
100  */\r
101 #if 0
102 #define PSWP    0\r
103 #define PVM     4\r
104 #define PINOD   8\r
105 #define PRIBIO  16\r
106 #define PVFS    20\r
107 #define PZERO   22              /* No longer magic, shouldn't be here.  XXX */\r
108 #define PSOCK   24\r
109 #define PWAIT   32\r
110 #define PLOCK   36\r
111 #define PPAUSE  40\r
112 #define PUSER   50\r
113 #endif
114 #define MAXPRI  127             /* Priorities range from 0 through MAXPRI. */\r
115 \r
116 #define PRIMASK 0x0ff\r
117 #define PCATCH  0x100           /* OR'd with pri for tsleep to check signals */\r
118 \r
119 #define NZERO   0               /* default "nice" */\r
120 \r
121 #define NBPW    sizeof(long)    /* number of bytes per word (integer) */\r
122 \r
123 #define CMASK   022             /* default file mask: S_IWGRP|S_IWOTH */\r
124 #define NODEV   (dev_t)(-1)     /* non-existent device */\r
125 \r
126 /*\r
127  * Clustering of hardware pages on machines with ridiculously small\r
128  * page sizes is done here.  The paging subsystem deals with units of\r
129  * CLSIZE pte's describing NBPG (from machine/machparam.h) pages each.\r
130  */\r
131 #define CLBYTES         (CLSIZE*NBPG)\r
132 #define CLOFSET         (CLSIZE*NBPG-1) /* for clusters, like PGOFSET */\r
133 #define claligned(x)    ((((long)(x))&CLOFSET)==0)\r
134 #define CLOFF           CLOFSET\r
135 #define CLSHIFT         (PGSHIFT+CLSIZELOG2)\r
136 \r
137 #if CLSIZE==1\r
138 #define clbase(i)       (i)\r
139 #define clrnd(i)        (i)\r
140 #else\r
141 /* Give the base virtual address (first of CLSIZE). */\r
142 #define clbase(i)       ((i) &~ (CLSIZE-1))\r
143 /* Round a number of clicks up to a whole cluster. */\r
144 #define clrnd(i)        (((i) + (CLSIZE-1)) &~ (CLSIZE-1))\r
145 #endif\r
146 \r
147 #define CBLOCK  128             /* Clist block size, must be a power of 2. */\r
148 #define CBQSIZE (CBLOCK/NBBY)   /* Quote bytes/cblock - can do better. */\r
149                                 /* Data chars/clist. */\r
150 #define CBSIZE  (CBLOCK - sizeof(struct cblock *) - CBQSIZE)\r
151 #define CROUND  (CBLOCK - 1)    /* Clist rounding. */\r
152 \r
153 /*\r
154  * File system parameters and macros.\r
155  *\r
156  * The file system is made out of blocks of at most MAXBSIZE units, with\r
157  * smaller units (fragments) only in the last direct block.  MAXBSIZE\r
158  * primarily determines the size of buffers in the buffer pool.  It may be\r
159  * made larger without any effect on existing file systems; however making\r
160  * it smaller make make some file systems unmountable.\r
161  */\r
162 #define MAXBSIZE        MAXPHYS\r
163 #define MAXFRAG         8\r
164 \r
165 /*\r
166  * MAXPATHLEN defines the longest permissable path length after expanding\r
167  * symbolic links. It is used to allocate a temporary buffer from the buffer\r
168  * pool in which to do the name expansion, hence should be a power of two,\r
169  * and must be less than or equal to MAXBSIZE.  MAXSYMLINKS defines the\r
170  * maximum number of symbolic links that may be expanded in a path name.\r
171  * It should be set high enough to allow all legitimate uses, but halt\r
172  * infinite loops reasonably quickly.\r
173  */\r
174 #define MAXPATHLEN      PATH_MAX\r
175 #define MAXSYMLINKS     8\r
176 \r
177 /* Bit map related macros. */\r
178 #define setbit(a,i)     ((a)[(i)/NBBY] |= 1<<((i)%NBBY))\r
179 #define clrbit(a,i)     ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))\r
180 #define isset(a,i)      ((a)[(i)/NBBY] & (1<<((i)%NBBY)))\r
181 #define isclr(a,i)      (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)\r
182 \r
183 /* Macros for counting and rounding. */\r
184 #ifndef howmany\r
185 #define howmany(x, y)   (((x)+((y)-1))/(y))\r
186 #endif\r
187 #define roundup(x, y)   ((((x)+((y)-1))/(y))*(y))\r
188 #define powerof2(x)     ((((x)-1)&(x))==0)\r
189 \r
190 /* Macros for min/max. */\r
191 #ifndef KERNEL\r
192 #define MIN(a,b) (((a)<(b))?(a):(b))\r
193 #define MAX(a,b) (((a)>(b))?(a):(b))\r
194 #endif\r
195 \r
196 /*\r
197  * Constants for setting the parameters of the kernel memory allocator.\r
198  *\r
199  * 2 ** MINBUCKET is the smallest unit of memory that will be\r
200  * allocated. It must be at least large enough to hold a pointer.\r
201  *\r
202  * Units of memory less or equal to MAXALLOCSAVE will permanently\r
203  * allocate physical memory; requests for these size pieces of\r
204  * memory are quite fast. Allocations greater than MAXALLOCSAVE must\r
205  * always allocate and free physical memory; requests for these\r
206  * size allocations should be done infrequently as they will be slow.\r
207  *\r
208  * Constraints: CLBYTES <= MAXALLOCSAVE <= 2 ** (MINBUCKET + 14), and\r
209  * MAXALLOCSIZE must be a power of two.\r
210  */\r
211 #define MINBUCKET       4               /* 4 => min allocation of 16 bytes */\r
212 #define MAXALLOCSAVE    (2 * CLBYTES)\r
213 \r
214 /*\r
215  * Scale factor for scaled integers used to count %cpu time and load avgs.\r
216  *\r
217  * The number of CPU `tick's that map to a unique `%age' can be expressed\r
218  * by the formula (1 / (2 ^ (FSHIFT - 11))).  The maximum load average that\r
219  * can be calculated (assuming 32 bits) can be closely approximated using\r
220  * the formula (2 ^ (2 * (16 - FSHIFT))) for (FSHIFT < 15).\r
221  *\r
222  * For the scheduler to maintain a 1:1 mapping of CPU `tick' to `%age',\r
223  * FSHIFT must be at least 11; this gives us a maximum load avg of ~1024.\r
224  */\r
225 #define FSHIFT  11              /* bits to right of fixed binary point */\r
226 #define FSCALE  (1<<FSHIFT)\r
227 \r
228 #endif\r