|
|
1.1 root 1: /*
2: * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * The contents of this file constitute Original Code as defined in and
7: * are subject to the Apple Public Source License Version 1.1 (the
8: * "License"). You may not use this file except in compliance with the
9: * License. Please obtain a copy of the License at
10: * http://www.apple.com/publicsource and read it before using this file.
11: *
12: * This Original Code and all software distributed under the License are
13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17: * License for the specific language governing rights and limitations
18: * under the License.
19: *
20: * @APPLE_LICENSE_HEADER_END@
21: */
22: /* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved */
23: /*-
24: * Copyright (c) 1990, 1993
25: * The Regents of the University of California. All rights reserved.
26: * (c) UNIX System Laboratories, Inc.
27: * All or some portions of this file are derived from material licensed
28: * to the University of California by American Telephone and Telegraph
29: * Co. or Unix System Laboratories, Inc. and are reproduced herein with
30: * the permission of UNIX System Laboratories, Inc.
31: *
32: * Redistribution and use in source and binary forms, with or without
33: * modification, are permitted provided that the following conditions
34: * are met:
35: * 1. Redistributions of source code must retain the above copyright
36: * notice, this list of conditions and the following disclaimer.
37: * 2. Redistributions in binary form must reproduce the above copyright
38: * notice, this list of conditions and the following disclaimer in the
39: * documentation and/or other materials provided with the distribution.
40: * 3. All advertising materials mentioning features or use of this software
41: * must display the following acknowledgement:
42: * This product includes software developed by the University of
43: * California, Berkeley and its contributors.
44: * 4. Neither the name of the University nor the names of its contributors
45: * may be used to endorse or promote products derived from this software
46: * without specific prior written permission.
47: *
48: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
49: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
50: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
51: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
52: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
53: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
54: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
55: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
56: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
57: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
58: * SUCH DAMAGE.
59: *
60: * @(#)conf.h 8.5 (Berkeley) 1/9/95
61: */
62:
63: #ifndef _SYS_CONF_H_
64: #define _SYS_CONF_H_ 1
65:
66: /*
67: * Definitions of device driver entry switches
68: */
69:
70: struct buf;
71: struct proc;
72: struct tty;
73: struct uio;
74: struct vnode;
75:
76: /*
77: * Device switch function types.
78: */
79: typedef int open_close_fcn_t __P((dev_t dev, int flags, int devtype,
80: struct proc *p));
81:
82: typedef struct tty *d_devtotty_t __P((dev_t dev));
83:
84: typedef void strategy_fcn_t __P((struct buf *bp));
85: typedef int ioctl_fcn_t __P((dev_t dev, u_long cmd, caddr_t data,
86: int fflag, struct proc *p));
87: typedef int dump_fcn_t (); /* parameters vary by architecture */
88: typedef int psize_fcn_t __P((dev_t dev));
89: typedef int read_write_fcn_t __P((dev_t dev, struct uio *uio, int ioflag));
90: typedef int stop_fcn_t __P((struct tty *tp, int rw));
91: typedef int reset_fcn_t __P((int uban));
92: typedef int select_fcn_t __P((dev_t dev, int which, struct proc *p));
93: typedef int mmap_fcn_t __P(());
94: typedef int getc_fcn_t __P((dev_t dev));
95: typedef int putc_fcn_t __P((dev_t dev, char c));
96: typedef int d_poll_t __P((dev_t dev, int events, struct proc *p));
97:
98: #define d_open_t open_close_fcn_t
99: #define d_close_t open_close_fcn_t
100: #define d_read_t read_write_fcn_t
101: #define d_write_t read_write_fcn_t
102: #define d_ioctl_t ioctl_fcn_t
103:
104: __BEGIN_DECLS
105: int enodev (); /* avoid actual prototype for multiple use */
106: void enodev_strat();
107: __END_DECLS
108:
109: /*
110: * Versions of enodev() pointer, cast to appropriate function type. For use
111: * in empty devsw slots.
112: */
113: #define eno_opcl ((open_close_fcn_t *)&enodev)
114: #define eno_strat ((strategy_fcn_t *)&enodev_strat)
115: #define eno_ioctl ((ioctl_fcn_t *)&enodev)
116: #define eno_dump ((dump_fcn_t *)&enodev)
117: #define eno_psize ((psize_fcn_t *)&enodev)
118: #define eno_rdwrt ((read_write_fcn_t *)&enodev)
119: #define eno_stop ((stop_fcn_t *)&enodev)
120: #define eno_reset ((reset_fcn_t *)&enodev)
121: #define eno_mmap ((mmap_fcn_t *)&enodev)
122: #define eno_getc ((getc_fcn_t *)&enodev)
123: #define eno_putc ((putc_fcn_t *)&enodev)
124: #define eno_select ((select_fcn_t *)&enodev)
125:
126: /*
127: * Types for d_type.
128: */
129: #define D_TAPE 1
130: #define D_DISK 2
131: #define D_TTY 3
132:
133: /*
134: * Block device switch table
135: */
136: struct bdevsw {
137: open_close_fcn_t *d_open;
138: open_close_fcn_t *d_close;
139: strategy_fcn_t *d_strategy;
140: ioctl_fcn_t *d_ioctl;
141: dump_fcn_t *d_dump;
142: psize_fcn_t *d_psize;
143: int d_type;
144: };
145:
146: #ifdef KERNEL
147:
148: d_devtotty_t nodevtotty;
149: d_write_t nowrite;
150:
151:
152: extern struct bdevsw bdevsw[];
153:
154: /*
155: * Contents of empty bdevsw slot.
156: */
157: #define NO_BDEVICE \
158: { eno_opcl, eno_opcl, eno_strat, eno_ioctl, \
159: eno_dump, eno_psize, 0 }
160:
161: #endif /* KERNEL */
162:
163: /*
164: * Character device switch table
165: */
166: struct cdevsw {
167: open_close_fcn_t *d_open;
168: open_close_fcn_t *d_close;
169: read_write_fcn_t *d_read;
170: read_write_fcn_t *d_write;
171: ioctl_fcn_t *d_ioctl;
172: stop_fcn_t *d_stop;
173: reset_fcn_t *d_reset;
174: struct tty **d_ttys;
175: select_fcn_t *d_select;
176: mmap_fcn_t *d_mmap;
177: strategy_fcn_t *d_strategy;
178: getc_fcn_t *d_getc;
179: putc_fcn_t *d_putc;
180: int d_type;
181: };
182:
183: #ifdef KERNEL
184:
185: extern struct cdevsw cdevsw[];
186:
187: /*
188: * Contents of empty cdevsw slot.
189: */
190:
191: #define NO_CDEVICE \
192: { \
193: eno_opcl, eno_opcl, eno_rdwrt, eno_rdwrt, \
194: eno_ioctl, eno_stop, eno_reset, 0, \
195: seltrue, eno_mmap, eno_strat, eno_getc, \
196: eno_putc, 0 \
197: }
198:
199: #endif /* KERNEL */
200:
201: /*
202: * Line discipline switch table
203: */
204: struct linesw {
205: int (*l_open) __P((dev_t dev, struct tty *tp));
206: int (*l_close) __P((struct tty *tp, int flags));
207: int (*l_read) __P((struct tty *tp, struct uio *uio,
208: int flag));
209: int (*l_write) __P((struct tty *tp, struct uio *uio,
210: int flag));
211: int (*l_ioctl) __P((struct tty *tp, u_long cmd, caddr_t data,
212: int flag, struct proc *p));
213: int (*l_rint) __P((int c, struct tty *tp));
214: int (*l_start) __P((struct tty *tp));
215: int (*l_modem) __P((struct tty *tp, int flag));
216: };
217:
218: #ifdef KERNEL
219: extern struct linesw linesw[];
220: extern int nlinesw;
221:
222: int ldisc_register __P((int , struct linesw *));
223: void ldisc_deregister __P((int));
224: #define LDISC_LOAD -1 /* Loadable line discipline */
225: #endif
226:
227: /*
228: * Swap device table
229: */
230: struct swdevt {
231: dev_t sw_dev;
232: int sw_flags;
233: int sw_nblks;
234: struct vnode *sw_vp;
235: };
236: #define SW_FREED 0x01
237: #define SW_SEQUENTIAL 0x02
238: #define sw_freed sw_flags /* XXX compat */
239:
240: #ifdef KERNEL
241: extern struct swdevt swdevt[];
242: #endif
243:
244: #ifdef KERNEL
245: /*
246: * ***_free finds free slot;
247: * ***_add adds entries to the devsw table
248: * If int arg is -1; finds a free slot
249: * Returns the major number if successful
250: * else -1
251: */
252: __BEGIN_DECLS
253: int bdevsw_isfree __P((int));
254: int bdevsw_add __P((int, struct bdevsw *));
255: int bdevsw_remove __P((int, struct bdevsw *));
256: int cdevsw_isfree __P((int));
257: int cdevsw_add __P((int, struct cdevsw *));
258: int cdevsw_remove __P((int, struct cdevsw *));
259: __END_DECLS
260: #endif
261:
262: #endif /* _SYS_CONF_H_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.