Annotation of sys/sys/conf.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: conf.h,v 1.83 2007/07/23 13:30:21 mk Exp $ */
2: /* $NetBSD: conf.h,v 1.33 1996/05/03 20:03:32 christos Exp $ */
3:
4: /*-
5: * Copyright (c) 1990, 1993
6: * The Regents of the University of California. All rights reserved.
7: * (c) UNIX System Laboratories, Inc.
8: * All or some portions of this file are derived from material licensed
9: * to the University of California by American Telephone and Telegraph
10: * Co. or Unix System Laboratories, Inc. and are reproduced herein with
11: * the permission of UNIX System Laboratories, Inc.
12: *
13: * Redistribution and use in source and binary forms, with or without
14: * modification, are permitted provided that the following conditions
15: * are met:
16: * 1. Redistributions of source code must retain the above copyright
17: * notice, this list of conditions and the following disclaimer.
18: * 2. Redistributions in binary form must reproduce the above copyright
19: * notice, this list of conditions and the following disclaimer in the
20: * documentation and/or other materials provided with the distribution.
21: * 3. Neither the name of the University nor the names of its contributors
22: * may be used to endorse or promote products derived from this software
23: * without specific prior written permission.
24: *
25: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
26: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
29: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
30: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
31: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
34: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35: * SUCH DAMAGE.
36: *
37: * @(#)conf.h 8.3 (Berkeley) 1/21/94
38: */
39:
40:
41: #ifndef _SYS_CONF_H_
42: #define _SYS_CONF_H_
43:
44: /*
45: * Definitions of device driver entry switches
46: */
47:
48: struct buf;
49: struct proc;
50: struct tty;
51: struct uio;
52: struct vnode;
53: struct knote;
54:
55: /*
56: * Types for d_type
57: */
58: #define D_TAPE 1
59: #define D_DISK 2
60: #define D_TTY 3
61:
62: /*
63: * Flags for d_flags
64: */
65: #define D_KQFILTER 0x0001 /* has kqfilter entry */
66: #define D_CLONE 0x0002 /* clone upon open */
67:
68: #ifdef _KERNEL
69:
70: #define dev_type_open(n) int n(dev_t, int, int, struct proc *)
71: #define dev_type_close(n) int n(dev_t, int, int, struct proc *)
72: #define dev_type_strategy(n) void n(struct buf *)
73: #define dev_type_ioctl(n) \
74: int n(dev_t, u_long, caddr_t, int, struct proc *)
75:
76: #define dev_decl(n,t) __CONCAT(dev_type_,t)(__CONCAT(n,t))
77: #define dev_init(c,n,t) \
78: ((c) > 0 ? __CONCAT(n,t) : (__CONCAT(dev_type_,t)((*))) enxio)
79:
80: #endif /* _KERNEL */
81:
82: /*
83: * Block device switch table
84: */
85: struct bdevsw {
86: int (*d_open)(dev_t dev, int oflags, int devtype,
87: struct proc *p);
88: int (*d_close)(dev_t dev, int fflag, int devtype,
89: struct proc *p);
90: void (*d_strategy)(struct buf *bp);
91: int (*d_ioctl)(dev_t dev, u_long cmd, caddr_t data,
92: int fflag, struct proc *p);
93: int (*d_dump)(dev_t dev, daddr64_t blkno, caddr_t va,
94: size_t size);
95: daddr64_t (*d_psize)(dev_t dev);
96: u_int d_type;
97: /* u_int d_flags; */
98: };
99:
100: #ifdef _KERNEL
101:
102: extern struct bdevsw bdevsw[];
103:
104: /* bdevsw-specific types */
105: #define dev_type_dump(n) int n(dev_t, daddr64_t, caddr_t, size_t)
106: #define dev_type_size(n) daddr64_t n(dev_t)
107:
108: /* bdevsw-specific initializations */
109: #define dev_size_init(c,n) (c > 0 ? __CONCAT(n,size) : 0)
110:
111: #define bdev_decl(n) \
112: dev_decl(n,open); dev_decl(n,close); dev_decl(n,strategy); \
113: dev_decl(n,ioctl); dev_decl(n,dump); dev_decl(n,size)
114:
115: #define bdev_disk_init(c,n) { \
116: dev_init(c,n,open), dev_init(c,n,close), \
117: dev_init(c,n,strategy), dev_init(c,n,ioctl), \
118: dev_init(c,n,dump), dev_size_init(c,n), D_DISK }
119:
120: #define bdev_tape_init(c,n) { \
121: dev_init(c,n,open), dev_init(c,n,close), \
122: dev_init(c,n,strategy), dev_init(c,n,ioctl), \
123: dev_init(c,n,dump), 0, D_TAPE }
124:
125: #define bdev_swap_init(c,n) { \
126: (dev_type_open((*))) enodev, (dev_type_close((*))) enodev, \
127: dev_init(c,n,strategy), (dev_type_ioctl((*))) enodev, \
128: (dev_type_dump((*))) enodev, 0 }
129:
130: #define bdev_lkm_dummy() { \
131: (dev_type_open((*))) lkmenodev, (dev_type_close((*))) enodev, \
132: (dev_type_strategy((*))) enodev, (dev_type_ioctl((*))) enodev, \
133: (dev_type_dump((*))) enodev, 0 }
134:
135: #define bdev_notdef() { \
136: (dev_type_open((*))) enodev, (dev_type_close((*))) enodev, \
137: (dev_type_strategy((*))) enodev, (dev_type_ioctl((*))) enodev, \
138: (dev_type_dump((*))) enodev, 0 }
139:
140: #endif
141:
142: /*
143: * Character device switch table
144: */
145: struct cdevsw {
146: int (*d_open)(dev_t dev, int oflags, int devtype,
147: struct proc *p);
148: int (*d_close)(dev_t dev, int fflag, int devtype,
149: struct proc *);
150: int (*d_read)(dev_t dev, struct uio *uio, int ioflag);
151: int (*d_write)(dev_t dev, struct uio *uio, int ioflag);
152: int (*d_ioctl)(dev_t dev, u_long cmd, caddr_t data,
153: int fflag, struct proc *p);
154: int (*d_stop)(struct tty *tp, int rw);
155: struct tty *
156: (*d_tty)(dev_t dev);
157: int (*d_poll)(dev_t dev, int events, struct proc *p);
158: paddr_t (*d_mmap)(dev_t, off_t, int);
159: u_int d_type;
160: u_int d_flags;
161: int (*d_kqfilter)(dev_t dev, struct knote *kn);
162: };
163:
164: #ifdef _KERNEL
165:
166: extern struct cdevsw cdevsw[];
167:
168: /* cdevsw-specific types */
169: #define dev_type_read(n) int n(dev_t, struct uio *, int)
170: #define dev_type_write(n) int n(dev_t, struct uio *, int)
171: #define dev_type_stop(n) int n(struct tty *, int)
172: #define dev_type_tty(n) struct tty *n(dev_t)
173: #define dev_type_poll(n) int n(dev_t, int, struct proc *)
174: #define dev_type_mmap(n) paddr_t n(dev_t, off_t, int)
175: #define dev_type_kqfilter(n) int n(dev_t, struct knote *)
176:
177: #define cdev_decl(n) \
178: dev_decl(n,open); dev_decl(n,close); dev_decl(n,read); \
179: dev_decl(n,write); dev_decl(n,ioctl); dev_decl(n,stop); \
180: dev_decl(n,tty); dev_decl(n,poll); dev_decl(n,mmap); \
181: dev_decl(n,kqfilter)
182:
183: /* open, close, read, write, ioctl */
184: #define cdev_disk_init(c,n) { \
185: dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
186: dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
187: 0, seltrue, (dev_type_mmap((*))) enodev, D_DISK, 0 }
188:
189: /* open, close, read, write, ioctl */
190: #define cdev_tape_init(c,n) { \
191: dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
192: dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
193: 0, seltrue, (dev_type_mmap((*))) enodev, D_TAPE }
194:
195: /* open, close, read, ioctl */
196: #define cdev_scanner_init(c,n) { \
197: dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
198: (dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
199: (dev_type_stop((*))) nullop, \
200: 0, seltrue, (dev_type_mmap((*))) enodev }
201:
202: /* open, close, read, write, ioctl, stop, tty */
203: #define cdev_tty_init(c,n) { \
204: dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
205: dev_init(c,n,write), dev_init(c,n,ioctl), dev_init(c,n,stop), \
206: dev_init(c,n,tty), ttpoll, (dev_type_mmap((*))) enodev, \
207: D_TTY, D_KQFILTER, ttkqfilter }
208:
209: /* open, close, read, ioctl, poll, nokqfilter */
210: #define cdev_mouse_init(c,n) { \
211: dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
212: (dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
213: (dev_type_stop((*))) enodev, 0, dev_init(c,n,poll), \
214: (dev_type_mmap((*))) enodev }
215:
216: /* open, close, read, write, ioctl, poll, nokqfilter */
217: #define cdev_mousewr_init(c,n) { \
218: dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
219: dev_init(c,n,write), dev_init(c,n,ioctl), \
220: (dev_type_stop((*))) enodev, 0, dev_init(c,n,poll), \
221: (dev_type_mmap((*))) enodev }
222:
223: #define cdev_lkm_dummy() { \
224: (dev_type_open((*))) lkmenodev, (dev_type_close((*))) enodev, \
225: (dev_type_read((*))) enodev, (dev_type_write((*))) enodev, \
226: (dev_type_ioctl((*))) enodev, (dev_type_stop((*))) enodev, \
227: 0, seltrue, (dev_type_mmap((*))) enodev }
228:
229: #define cdev_notdef() { \
230: (dev_type_open((*))) enodev, (dev_type_close((*))) enodev, \
231: (dev_type_read((*))) enodev, (dev_type_write((*))) enodev, \
232: (dev_type_ioctl((*))) enodev, (dev_type_stop((*))) enodev, \
233: 0, seltrue, (dev_type_mmap((*))) enodev }
234:
235: /* open, close, read, write, ioctl, poll, kqfilter -- XXX should be a tty */
236: #define cdev_cn_init(c,n) { \
237: dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
238: dev_init(c,n,write), dev_init(c,n,ioctl), dev_init(c,n,stop), \
239: 0, dev_init(c,n,poll), (dev_type_mmap((*))) enodev, \
240: D_TTY, D_KQFILTER, dev_init(c,n,kqfilter) }
241:
242: /* open, read, write, ioctl, poll, kqfilter -- XXX should be a tty */
243: #define cdev_ctty_init(c,n) { \
244: dev_init(c,n,open), (dev_type_close((*))) nullop, dev_init(c,n,read), \
245: dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) nullop, \
246: 0, dev_init(c,n,poll), (dev_type_mmap((*))) enodev, \
247: D_TTY, D_KQFILTER, ttkqfilter }
248:
249: /* open, close, read, write, ioctl, mmap */
250: #define cdev_mm_init(c,n) { \
251: dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
252: dev_init(c,n,write), dev_init(c,n,ioctl), \
253: (dev_type_stop((*))) enodev, 0, seltrue, dev_init(c,n,mmap) }
254:
255: /* open, close, read, write, ioctl, mmap */
256: #define cdev_crypto_init(c,n) { \
257: dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
258: dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
259: 0, (dev_type_poll((*))) enodev, (dev_type_mmap((*))) enodev }
260:
261: /* open, close, read, write, ioctl */
262: #define cdev_systrace_init(c,n) { \
263: dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
264: dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
265: 0, (dev_type_poll((*))) enodev, (dev_type_mmap((*))) enodev }
266:
267: /* read, write */
268: #define cdev_swap_init(c,n) { \
269: (dev_type_open((*))) nullop, (dev_type_close((*))) nullop, \
270: dev_init(c,n,read), dev_init(c,n,write), (dev_type_ioctl((*))) enodev, \
271: (dev_type_stop((*))) enodev, 0, (dev_type_poll((*))) enodev, \
272: (dev_type_mmap((*))) enodev }
273:
274: /* open, close, read, write, ioctl, tty, poll, kqfilter */
275: #define cdev_ptc_init(c,n) { \
276: dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
277: dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) nullop, \
278: dev_init(c,n,tty), dev_init(c,n,poll), (dev_type_mmap((*))) enodev, \
279: D_TTY, D_KQFILTER, dev_init(c,n,kqfilter) }
280:
281: /* open, close, read, write, ioctl, mmap */
282: #define cdev_ptm_init(c,n) { \
283: dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
284: dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
285: 0, (dev_type_poll((*))) enodev, (dev_type_mmap((*))) enodev }
286:
287: /* open, close, read, ioctl, poll, kqfilter XXX should be a generic device */
288: #define cdev_log_init(c,n) { \
289: dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
290: (dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
291: (dev_type_stop((*))) enodev, 0, dev_init(c,n,poll), \
292: (dev_type_mmap((*))) enodev, 0, D_KQFILTER, dev_init(c,n,kqfilter) }
293:
294: /* open */
295: #define cdev_fd_init(c,n) { \
296: dev_init(c,n,open), (dev_type_close((*))) enodev, \
297: (dev_type_read((*))) enodev, (dev_type_write((*))) enodev, \
298: (dev_type_ioctl((*))) enodev, (dev_type_stop((*))) enodev, \
299: 0, (dev_type_poll((*))) enodev, (dev_type_mmap((*))) enodev }
300:
301: /* open, close, read, write, ioctl, poll, kqfilter -- XXX should be generic device */
302: #define cdev_bpftun_init(c,n) { \
303: dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
304: dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
305: 0, dev_init(c,n,poll), (dev_type_mmap((*))) enodev, \
306: 0, D_KQFILTER, dev_init(c,n,kqfilter) }
307:
308: /* open, close, ioctl */
309: #define cdev_lkm_init(c,n) { \
310: dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
311: (dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
312: (dev_type_stop((*))) enodev, 0, (dev_type_poll((*))) enodev, \
313: (dev_type_mmap((*))) enodev }
314:
315: /* open, close, ioctl */
316: #define cdev_ch_init(c,n) { \
317: dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
318: (dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
319: (dev_type_stop((*))) enodev, 0, (dev_type_poll((*))) enodev, \
320: (dev_type_mmap((*))) enodev }
321:
322: /* open, close, ioctl */
323: #define cdev_uk_init(c,n) { \
324: dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
325: (dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
326: (dev_type_stop((*))) enodev, 0, (dev_type_poll((*))) enodev, \
327: (dev_type_mmap((*))) enodev }
328:
329: /* open, close, read, ioctl */
330: #define cdev_ss_init(c,n) { \
331: dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
332: (dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
333: (dev_type_stop((*))) enodev, 0, seltrue, \
334: (dev_type_mmap((*))) enodev }
335:
336: /* open, close, ioctl, mmap */
337: #define cdev_fb_init(c,n) { \
338: dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
339: (dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
340: (dev_type_stop((*))) enodev, 0, (dev_type_poll((*))) enodev, \
341: dev_init(c,n,mmap) }
342:
343: /* open, close, read, write, ioctl, poll, kqfilter */
344: #define cdev_audio_init(c,n) { \
345: dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
346: dev_init(c,n,write), dev_init(c,n,ioctl), \
347: (dev_type_stop((*))) enodev, 0, dev_init(c,n,poll), \
348: dev_init(c,n,mmap), 0, D_KQFILTER, dev_init(c,n,kqfilter) }
349:
350: /* open, close, read, write, ioctl, poll, nokqfilter */
351: #define cdev_midi_init(c,n) { \
352: dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
353: dev_init(c,n,write), dev_init(c,n,ioctl), \
354: (dev_type_stop((*))) enodev, 0, dev_init(c,n,poll), \
355: (dev_type_mmap((*))) enodev }
356:
357: #define cdev_svr4_net_init(c,n) { \
358: dev_init(c,n,open), (dev_type_close((*))) enodev, \
359: (dev_type_read((*))) enodev, (dev_type_write((*))) enodev, \
360: (dev_type_ioctl((*))) enodev, (dev_type_stop((*))) nullop, \
361: 0, (dev_type_poll((*))) enodev, (dev_type_mmap((*))) enodev }
362:
363: /* open, close, read, write, ioctl, poll, nokqfilter */
364: #define cdev_xfs_init(c, n) { \
365: dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
366: dev_init(c,n,write), dev_init(c,n,ioctl), \
367: (dev_type_stop((*))) enodev, 0, dev_init(c,n,poll), \
368: (dev_type_mmap((*))) enodev }
369:
370: /* open, close, read */
371: #define cdev_ksyms_init(c,n) { \
372: dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
373: (dev_type_write((*))) enodev, (dev_type_ioctl((*))) enodev, \
374: (dev_type_stop((*))) enodev, 0, seltrue, \
375: (dev_type_mmap((*))) enodev, 0 }
376:
377: /* open, close, read, write, ioctl, stop, tty, poll, mmap, kqfilter */
378: #define cdev_wsdisplay_init(c,n) { \
379: dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
380: dev_init(c,n,write), dev_init(c,n,ioctl), dev_init(c,n,stop), \
381: dev_init(c,n,tty), ttpoll, dev_init(c,n,mmap), \
382: 0, D_KQFILTER, dev_init(c,n,kqfilter) }
383:
384: /* open, close, read, write, ioctl, poll, kqfilter */
385: #define cdev_random_init(c,n) { \
386: dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
387: dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
388: 0, dev_init(c,n,poll), (dev_type_mmap((*))) enodev, \
389: 0, D_KQFILTER, dev_init(c,n,kqfilter) }
390: void randomattach(void);
391:
392: /* open, close, ioctl, poll, nokqfilter */
393: #define cdev_usb_init(c,n) { \
394: dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
395: (dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
396: (dev_type_stop((*))) enodev, 0, dev_init(c,n,poll), \
397: (dev_type_mmap((*))) enodev }
398:
399: /* open, close, write, ioctl */
400: #define cdev_ulpt_init(c,n) { \
401: dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
402: dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
403: 0, (dev_type_poll((*))) enodev, (dev_type_mmap((*))) enodev }
404:
405: /* open, close, ioctl */
406: #define cdev_pf_init(c,n) { \
407: dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
408: (dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
409: (dev_type_stop((*))) enodev, 0, (dev_type_poll((*))) enodev, \
410: (dev_type_mmap((*))) enodev }
411:
412: /* open, close, read, write, ioctl, poll, nokqfilter */
413: #define cdev_urio_init(c,n) { \
414: dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
415: dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
416: 0, dev_init(c,n,poll), (dev_type_mmap((*))) enodev }
417:
418: /* open, close, read, write, ioctl, poll, kqfilter */
419: #define cdev_usbdev_init(c,n) { \
420: dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
421: dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
422: 0, dev_init(c,n,poll), (dev_type_mmap((*))) enodev, 0, D_KQFILTER, \
423: dev_init(c,n,kqfilter) }
424:
425: /* open, close, init */
426: #define cdev_pci_init(c,n) { \
427: dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
428: (dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
429: (dev_type_stop((*))) enodev, 0, (dev_type_poll((*))) enodev, \
430: (dev_type_mmap((*))) enodev }
431:
432: /* open, close, init */
433: #define cdev_iop_init(c,n) { \
434: dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
435: (dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
436: (dev_type_stop((*))) enodev, 0, (dev_type_poll((*))) enodev, \
437: (dev_type_mmap((*))) enodev }
438:
439: /* open, close, ioctl */
440: #define cdev_radio_init(c,n) { \
441: dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
442: (dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
443: (dev_type_stop((*))) enodev, 0, (dev_type_poll((*))) enodev, \
444: (dev_type_mmap((*))) enodev }
445:
446: /* open, close, write, ioctl */
447: #define cdev_spkr_init(c,n) { \
448: dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
449: dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
450: 0, seltrue, (dev_type_mmap((*))) enodev }
451:
452: /* open, close, write, ioctl */
453: #define cdev_lpt_init(c,n) { \
454: dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
455: dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
456: 0, seltrue, (dev_type_mmap((*))) enodev }
457:
458: /* open, close, read, ioctl, mmap */
459: #define cdev_bktr_init(c, n) { \
460: dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
461: (dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
462: (dev_type_stop((*))) enodev, 0, seltrue, \
463: dev_init(c,n,mmap) }
464:
465: /* open, close, read, ioctl, poll, kqfilter */
466: #define cdev_hotplug_init(c,n) { \
467: dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
468: (dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
469: (dev_type_stop((*))) enodev, 0, dev_init(c,n,poll), \
470: (dev_type_mmap((*))) enodev, 0, D_KQFILTER, dev_init(c,n,kqfilter) }
471:
472: /* open, close, ioctl */
473: #define cdev_gpio_init(c,n) { \
474: dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
475: (dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
476: (dev_type_stop((*))) enodev, 0, (dev_type_poll((*))) enodev, \
477: (dev_type_mmap((*))) enodev }
478:
479: /* open, close, ioctl */
480: #define cdev_bio_init(c,n) { \
481: dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
482: (dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
483: (dev_type_stop((*))) enodev, 0, (dev_type_poll((*))) enodev, \
484: (dev_type_mmap((*))) enodev }
485:
486: /* open, close, ioctl */
487: #define cdev_bthub_init(c,n) { \
488: dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
489: (dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
490: (dev_type_stop((*))) enodev, 0, (dev_type_poll((*))) enodev, \
491: (dev_type_mmap((*))) enodev }
492:
493: #endif
494:
495: /*
496: * Line discipline switch table
497: */
498: struct linesw {
499: int (*l_open)(dev_t dev, struct tty *tp);
500: int (*l_close)(struct tty *tp, int flags);
501: int (*l_read)(struct tty *tp, struct uio *uio,
502: int flag);
503: int (*l_write)(struct tty *tp, struct uio *uio,
504: int flag);
505: int (*l_ioctl)(struct tty *tp, u_long cmd, caddr_t data,
506: int flag, struct proc *p);
507: int (*l_rint)(int c, struct tty *tp);
508: int (*l_start)(struct tty *tp);
509: int (*l_modem)(struct tty *tp, int flag);
510: };
511:
512: #ifdef _KERNEL
513: extern struct linesw linesw[];
514: #endif
515:
516: /*
517: * Swap device table
518: */
519: struct swdevt {
520: dev_t sw_dev;
521: int sw_flags;
522: struct vnode *sw_vp;
523: };
524: #define SW_FREED 0x01
525: #define SW_SEQUENTIAL 0x02
526: #define sw_freed sw_flags /* XXX compat */
527:
528: #ifdef _KERNEL
529: extern struct swdevt swdevt[];
530: extern int chrtoblktbl[];
531: extern int nchrtoblktbl;
532:
533: struct bdevsw *bdevsw_lookup(dev_t);
534: struct cdevsw *cdevsw_lookup(dev_t);
535: int chrtoblk(dev_t);
536: int blktochr(dev_t);
537: int iskmemdev(dev_t);
538: int iszerodev(dev_t);
539: dev_t getnulldev(void);
540:
541: cdev_decl(filedesc);
542:
543: cdev_decl(log);
544:
545: #ifndef LKM
546: # define NLKM 0
547: # define lkmenodev enodev
548: #else
549: # define NLKM 1
550: #endif
551: cdev_decl(lkm);
552:
553: #define ptstty ptytty
554: #define ptsioctl ptyioctl
555: cdev_decl(pts);
556:
557: #define ptctty ptytty
558: #define ptcioctl ptyioctl
559: cdev_decl(ptc);
560:
561: cdev_decl(ptm);
562:
563: cdev_decl(ctty);
564:
565: cdev_decl(audio);
566: cdev_decl(midi);
567: cdev_decl(sequencer);
568: cdev_decl(radio);
569: cdev_decl(cn);
570:
571: bdev_decl(sw);
572: cdev_decl(sw);
573:
574: bdev_decl(vnd);
575: cdev_decl(vnd);
576:
577: bdev_decl(ccd);
578: cdev_decl(ccd);
579:
580: bdev_decl(raid);
581: cdev_decl(raid);
582:
583: cdev_decl(iop);
584:
585: cdev_decl(ch);
586:
587: cdev_decl(ss);
588:
589: bdev_decl(sd);
590: cdev_decl(sd);
591:
592: cdev_decl(ses);
593:
594: bdev_decl(st);
595: cdev_decl(st);
596:
597: bdev_decl(cd);
598: cdev_decl(cd);
599:
600: bdev_decl(rd);
601: cdev_decl(rd);
602:
603: bdev_decl(uk);
604: cdev_decl(uk);
605:
606: cdev_decl(bpf);
607:
608: cdev_decl(pf);
609:
610: cdev_decl(tun);
611:
612: cdev_decl(random);
613:
614: cdev_decl(wsdisplay);
615: cdev_decl(wskbd);
616: cdev_decl(wsmouse);
617: cdev_decl(wsmux);
618:
619: #ifdef COMPAT_SVR4
620: # define NSVR4_NET 1
621: #else
622: # define NSVR4_NET 0
623: #endif
624: cdev_decl(svr4_net);
625:
626: cdev_decl(ksyms);
627:
628: cdev_decl(crypto);
629:
630: cdev_decl(systrace);
631:
632: cdev_decl(bio);
633: cdev_decl(bthub);
634:
635: cdev_decl(gpr);
636: cdev_decl(bktr);
637:
638: cdev_decl(usb);
639: cdev_decl(ugen);
640: cdev_decl(uhid);
641: cdev_decl(ucom);
642: cdev_decl(ulpt);
643: cdev_decl(uscanner);
644: cdev_decl(urio);
645:
646: cdev_decl(hotplug);
647: cdev_decl(gpio);
648:
649: #endif
650:
651: #endif /* _SYS_CONF_H_ */
CVSweb