Fix "ls: not found" problem during buildworld. mdate.sh script
[dragonfly.git] / sys / sys / conf.h
blob50e3547081c4928e5f8176f21f65c29274fda887
1 /*-
2 * Copyright (c) 1990, 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.
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.
18 * 3. All advertising materials mentioning features or use of this software
19 * must display the following acknowledgement:
20 * This product includes software developed by the University of
21 * California, Berkeley and its contributors.
22 * 4. Neither the name of the University nor the names of its contributors
23 * may be used to endorse or promote products derived from this software
24 * without specific prior written permission.
26 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
27 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
30 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
31 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
32 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36 * SUCH DAMAGE.
38 * @(#)conf.h 8.5 (Berkeley) 1/9/95
39 * $FreeBSD: src/sys/sys/conf.h,v 1.103.2.6 2002/03/11 01:14:55 dd Exp $
40 * $DragonFly: src/sys/sys/conf.h,v 1.10 2006/02/17 19:18:07 dillon Exp $
43 #ifndef _SYS_CONF_H_
44 #define _SYS_CONF_H_
46 #include <sys/queue.h>
47 #include <sys/time.h>
48 #include <sys/biotrack.h>
50 #define SPECNAMELEN 15
52 struct tty;
53 struct disk;
54 struct vnode;
55 struct lwkt_port;
57 struct specinfo {
58 u_int si_flags;
59 udev_t si_udev;
60 LIST_ENTRY(specinfo) si_hash;
61 SLIST_HEAD(, vnode) si_hlist;
62 char si_name[SPECNAMELEN + 1];
63 void *si_drv1;
64 void *si_drv2;
65 struct cdevsw *si_devsw; /* direct device switch */
66 struct lwkt_port *si_port; /* direct port dispatch */
67 int si_iosize_max; /* maximum I/O size (for physio &al) */
68 int si_refs;
69 union {
70 struct {
71 struct tty *__sit_tty;
72 } __si_tty;
73 struct {
74 struct disk *__sid_disk;
75 struct mount *__sid_mountpoint;
76 int __sid_bsize_phys; /* min physical block size */
77 int __sid_bsize_best; /* optimal block size */
78 } __si_disk;
79 } __si_u;
80 struct bio_track si_track_read;
81 struct bio_track si_track_write;
82 time_t si_lastread; /* time_second */
83 time_t si_lastwrite; /* time_second */
86 #define SI_STASHED 0x0001 /* created in stashed storage */
87 #define SI_HASHED 0x0002 /* in (maj,min) hash table */
88 #define SI_ADHOC 0x0004 /* created via make_adhoc_dev() or udev2dev() */
90 #define si_tty __si_u.__si_tty.__sit_tty
91 #define si_disk __si_u.__si_disk.__sid_disk
92 #define si_mountpoint __si_u.__si_disk.__sid_mountpoint
93 #define si_bsize_phys __si_u.__si_disk.__sid_bsize_phys
94 #define si_bsize_best __si_u.__si_disk.__sid_bsize_best
96 #define CDEVSW_ALL_MINORS 0 /* mask of 0 always matches 0 */
99 * Special device management
101 #define SPECHSZ 64
102 #define SPECHASH(rdev) (((unsigned)(minor(rdev)))%SPECHSZ)
105 * Definitions of device driver entry switches
108 struct buf;
109 struct bio;
110 struct proc;
111 struct uio;
112 struct knote;
115 * Note: d_thread_t is provided as a transition aid for those drivers
116 * that treat struct proc/struct thread as an opaque data type and
117 * exist in substantially the same form in both 4.x and 5.x. Writers
118 * of drivers that dips into the d_thread_t structure should use
119 * struct thread or struct proc as appropriate for the version of the
120 * OS they are using. It is provided in lieu of each device driver
121 * inventing its own way of doing this. While it does violate style(9)
122 * in a number of ways, this violation is deemed to be less
123 * important than the benefits that a uniform API between releases
124 * gives.
126 * Users of struct thread/struct proc that aren't device drivers should
127 * not use d_thread_t.
130 struct thread;
131 struct lwkt_port;
133 typedef struct thread d_thread_t;
134 typedef int d_clone_t (dev_t dev);
135 typedef int d_open_t (dev_t dev, int oflags, int devtype, d_thread_t *td);
136 typedef int d_close_t (dev_t dev, int fflag, int devtype, d_thread_t *td);
137 typedef void d_strategy_t (dev_t dev, struct bio *bio);
138 typedef int d_ioctl_t (dev_t dev, u_long cmd, caddr_t data,
139 int fflag, d_thread_t *td);
140 typedef int d_dump_t (dev_t dev, u_int count, u_int blkno, u_int secsize);
141 typedef int d_psize_t (dev_t dev);
143 typedef int d_read_t (dev_t dev, struct uio *uio, int ioflag);
144 typedef int d_write_t (dev_t dev, struct uio *uio, int ioflag);
145 typedef int d_poll_t (dev_t dev, int events, d_thread_t *td);
146 typedef int d_kqfilter_t (dev_t dev, struct knote *kn);
147 typedef int d_mmap_t (dev_t dev, vm_offset_t offset, int nprot);
149 typedef int l_open_t (dev_t dev, struct tty *tp);
150 typedef int l_close_t (struct tty *tp, int flag);
151 typedef int l_read_t (struct tty *tp, struct uio *uio, int flag);
152 typedef int l_write_t (struct tty *tp, struct uio *uio, int flag);
153 typedef int l_ioctl_t (struct tty *tp, u_long cmd, caddr_t data,
154 int flag, d_thread_t *td);
155 typedef int l_rint_t (int c, struct tty *tp);
156 typedef int l_start_t (struct tty *tp);
157 typedef int l_modem_t (struct tty *tp, int flag);
160 * Types for d_flags.
162 #define D_TAPE 0x0001
163 #define D_DISK 0x0002
164 #define D_TTY 0x0004
165 #define D_MEM 0x0008
167 #define D_TYPEMASK 0xffff
170 * Flags for d_flags.
172 #define D_MEMDISK 0x00010000 /* memory type disk */
173 #define D_NAGGED 0x00020000 /* nagged about missing make_dev() */
174 #define D_CANFREE 0x00040000 /* can free blocks */
175 #define D_TRACKCLOSE 0x00080000 /* track all closes */
176 #define D_MASTER 0x00100000 /* used by pty/tty code */
177 #define D_KQFILTER 0x00200000 /* has kqfilter entry */
180 * Character device switch table.
182 * NOTE: positions are hard coded for static structure initialization.
184 struct cdevsw {
185 const char *d_name; /* base device name, e.g. 'vn' */
186 int d_maj; /* major (char) device number */
187 u_int d_flags; /* D_ flags */
188 struct lwkt_port *d_port; /* port (template only) */
189 d_clone_t *d_clone; /* clone from base cdevsw */
192 * Old style vectors are used only if d_port is NULL when the cdevsw
193 * is added to the system. They have been renamed to prevent misuse.
195 d_open_t *old_open;
196 d_close_t *old_close;
197 d_read_t *old_read;
198 d_write_t *old_write;
199 d_ioctl_t *old_ioctl;
200 d_poll_t *old_poll;
201 d_mmap_t *old_mmap;
202 d_strategy_t *old_strategy;
203 d_dump_t *old_dump;
204 d_psize_t *old_psize;
205 d_kqfilter_t *old_kqfilter;
206 void (*old_dummy1)(void); /* expansion space */
207 void (*old_dummy2)(void);
208 void (*old_dummy3)(void);
209 void (*old_dummy4)(void);
210 int d_refs; /* ref count */
211 void *d_data; /* custom driver data */
214 struct cdevlink {
215 struct cdevlink *next;
216 u_int mask;
217 u_int match;
218 struct cdevsw *devsw;
222 * Line discipline switch table
224 struct linesw {
225 l_open_t *l_open;
226 l_close_t *l_close;
227 l_read_t *l_read;
228 l_write_t *l_write;
229 l_ioctl_t *l_ioctl;
230 l_rint_t *l_rint;
231 l_start_t *l_start;
232 l_modem_t *l_modem;
233 u_char l_hotchar;
236 #ifdef _KERNEL
237 extern struct linesw linesw[];
238 extern int nlinesw;
240 int ldisc_register (int , struct linesw *);
241 void ldisc_deregister (int);
242 #define LDISC_LOAD -1 /* Loadable line discipline */
243 #endif
246 * Swap device table
248 struct swdevt {
249 udev_t sw_dev; /* For quasibogus swapdev reporting */
250 int sw_flags;
251 int sw_nblks;
252 struct vnode *sw_vp;
253 dev_t sw_device;
255 #define SW_FREED 0x01
256 #define SW_SEQUENTIAL 0x02
257 #define sw_freed sw_flags /* XXX compat */
259 #ifdef _KERNEL
260 d_open_t noopen;
261 d_close_t noclose;
262 d_read_t noread;
263 d_write_t nowrite;
264 d_ioctl_t noioctl;
265 d_clone_t noclone;
266 d_mmap_t nommap;
267 d_kqfilter_t nokqfilter;
268 d_strategy_t nostrategy;
269 d_poll_t nopoll;
270 d_psize_t nopsize;
271 d_dump_t nodump;
273 #define NUMCDEVSW 256
275 d_open_t nullopen;
276 d_close_t nullclose;
278 l_ioctl_t l_nullioctl;
279 l_read_t l_noread;
280 l_write_t l_nowrite;
282 struct module;
284 struct devsw_module_data {
285 int (*chainevh)(struct module *, int, void *); /* next handler */
286 void *chainarg; /* arg for next event handler */
287 /* Do not initialize fields hereafter */
290 #define DEV_MODULE(name, evh, arg) \
291 static moduledata_t name##_mod = { \
292 #name, \
293 evh, \
294 arg \
295 }; \
296 DECLARE_MODULE(name, name##_mod, SI_SUB_DRIVERS, SI_ORDER_MIDDLE)
298 extern struct cdevsw dead_cdevsw;
300 void compile_devsw(struct cdevsw *);
301 int cdevsw_add (struct cdevsw *, u_int mask, u_int match);
302 struct cdevsw *cdevsw_add_override (dev_t, u_int mask, u_int match);
303 struct lwkt_port *cdevsw_dev_override(dev_t dev, struct lwkt_port *port);
305 int cdevsw_remove (struct cdevsw *, u_int mask, u_int match);
306 struct cdevsw *cdevsw_get (int x, int y);
307 void cdevsw_release (struct cdevsw *);
308 int count_dev (dev_t dev);
309 int count_udev (udev_t dev);
310 void destroy_dev (dev_t dev);
311 void destroy_all_dev (struct cdevsw *, u_int mask, u_int match);
312 void release_dev (dev_t dev);
313 dev_t reference_dev (dev_t dev);
314 struct cdevsw *devsw (dev_t dev);
315 const char *devtoname (dev_t dev);
316 void freedev (dev_t dev);
317 int iszerodev (dev_t dev);
318 dev_t make_dev (struct cdevsw *devsw, int minor, uid_t uid, gid_t gid, int perms, const char *fmt, ...) __printflike(6, 7);
319 dev_t make_adhoc_dev (struct cdevsw *devsw, int minor);
320 dev_t make_sub_dev (dev_t dev, int minor);
321 int lminor (dev_t dev);
322 void setconf (void);
323 dev_t getdiskbyname(const char *name);
324 int dev_is_good(dev_t dev);
327 * XXX: This included for when DEVFS resurfaces
330 #define UID_ROOT 0
331 #define UID_BIN 3
332 #define UID_UUCP 66
334 #define GID_WHEEL 0
335 #define GID_KMEM 2
336 #define GID_OPERATOR 5
337 #define GID_BIN 7
338 #define GID_GAMES 13
339 #define GID_DIALER 68
341 #endif /* _KERNEL */
343 #endif /* !_SYS_CONF_H_ */