root / lab4 / .minix-src / include / sys / conf.h @ 14
History | View | Annotate | Download (9.03 KB)
1 |
/* $NetBSD: conf.h,v 1.145 2014/07/25 07:56:14 dholland Exp $ */
|
---|---|
2 |
|
3 |
/*-
|
4 |
* Copyright (c) 1990, 1993
|
5 |
* The Regents of the University of California. All rights reserved.
|
6 |
* (c) UNIX System Laboratories, Inc.
|
7 |
* All or some portions of this file are derived from material licensed
|
8 |
* to the University of California by American Telephone and Telegraph
|
9 |
* Co. or Unix System Laboratories, Inc. and are reproduced herein with
|
10 |
* the permission of UNIX System Laboratories, Inc.
|
11 |
*
|
12 |
* Redistribution and use in source and binary forms, with or without
|
13 |
* modification, are permitted provided that the following conditions
|
14 |
* are met:
|
15 |
* 1. Redistributions of source code must retain the above copyright
|
16 |
* notice, this list of conditions and the following disclaimer.
|
17 |
* 2. Redistributions in binary form must reproduce the above copyright
|
18 |
* notice, this list of conditions and the following disclaimer in the
|
19 |
* documentation and/or other materials provided with the distribution.
|
20 |
* 3. Neither the name of the University nor the names of its contributors
|
21 |
* may be used to endorse or promote products derived from this software
|
22 |
* without specific prior written permission.
|
23 |
*
|
24 |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
25 |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
26 |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
27 |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
28 |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
29 |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
30 |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
31 |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
32 |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
33 |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
34 |
* SUCH DAMAGE.
|
35 |
*
|
36 |
* @(#)conf.h 8.5 (Berkeley) 1/9/95
|
37 |
*/
|
38 |
|
39 |
#ifndef _SYS_CONF_H_
|
40 |
#define _SYS_CONF_H_
|
41 |
|
42 |
/*
|
43 |
* Definitions of device driver entry switches
|
44 |
*/
|
45 |
|
46 |
#include <sys/queue.h> |
47 |
#include <sys/device_if.h> |
48 |
|
49 |
struct buf;
|
50 |
struct knote;
|
51 |
struct lwp;
|
52 |
struct tty;
|
53 |
struct uio;
|
54 |
struct vnode;
|
55 |
|
56 |
/*
|
57 |
* Types for d_flag
|
58 |
*/
|
59 |
#define D_OTHER 0x0000 |
60 |
#define D_TAPE 0x0001 |
61 |
#define D_DISK 0x0002 |
62 |
#define D_TTY 0x0003 |
63 |
#define D_TYPEMASK 0x00ff |
64 |
#define D_MPSAFE 0x0100 |
65 |
#define D_NEGOFFSAFE 0x0200 |
66 |
|
67 |
/*
|
68 |
* Block device switch table
|
69 |
*/
|
70 |
struct bdevsw {
|
71 |
int (*d_open)(dev_t, int, int, struct lwp *); |
72 |
int (*d_close)(dev_t, int, int, struct lwp *); |
73 |
void (*d_strategy)(struct buf *); |
74 |
int (*d_ioctl)(dev_t, u_long, void *, int, struct lwp *); |
75 |
int (*d_dump)(dev_t, daddr_t, void *, size_t); |
76 |
int (*d_psize)(dev_t);
|
77 |
int (*d_discard)(dev_t, off_t, off_t);
|
78 |
int d_flag;
|
79 |
}; |
80 |
|
81 |
/*
|
82 |
* Character device switch table
|
83 |
*/
|
84 |
struct cdevsw {
|
85 |
int (*d_open)(dev_t, int, int, struct lwp *); |
86 |
int (*d_close)(dev_t, int, int, struct lwp *); |
87 |
int (*d_read)(dev_t, struct uio *, int); |
88 |
int (*d_write)(dev_t, struct uio *, int); |
89 |
int (*d_ioctl)(dev_t, u_long, void *, int, struct lwp *); |
90 |
void (*d_stop)(struct tty *, int); |
91 |
struct tty * (*d_tty)(dev_t);
|
92 |
int (*d_poll)(dev_t, int, struct lwp *); |
93 |
paddr_t (*d_mmap)(dev_t, off_t, int);
|
94 |
int (*d_kqfilter)(dev_t, struct knote *); |
95 |
int (*d_discard)(dev_t, off_t, off_t);
|
96 |
int d_flag;
|
97 |
}; |
98 |
|
99 |
#ifdef _KERNEL
|
100 |
|
101 |
#include <sys/mutex.h> |
102 |
extern kmutex_t device_lock;
|
103 |
|
104 |
int devsw_attach(const char *, const struct bdevsw *, devmajor_t *, |
105 |
const struct cdevsw *, devmajor_t *); |
106 |
int devsw_detach(const struct bdevsw *, const struct cdevsw *); |
107 |
const struct bdevsw *bdevsw_lookup(dev_t); |
108 |
const struct cdevsw *cdevsw_lookup(dev_t); |
109 |
devmajor_t bdevsw_lookup_major(const struct bdevsw *); |
110 |
devmajor_t cdevsw_lookup_major(const struct cdevsw *); |
111 |
|
112 |
#define dev_type_open(n) int n (dev_t, int, int, struct lwp *) |
113 |
#define dev_type_close(n) int n (dev_t, int, int, struct lwp *) |
114 |
#define dev_type_read(n) int n (dev_t, struct uio *, int) |
115 |
#define dev_type_write(n) int n (dev_t, struct uio *, int) |
116 |
#define dev_type_ioctl(n) \
|
117 |
int n (dev_t, u_long, void *, int, struct lwp *) |
118 |
#define dev_type_stop(n) void n (struct tty *, int) |
119 |
#define dev_type_tty(n) struct tty * n (dev_t) |
120 |
#define dev_type_poll(n) int n (dev_t, int, struct lwp *) |
121 |
#define dev_type_mmap(n) paddr_t n (dev_t, off_t, int) |
122 |
#define dev_type_strategy(n) void n (struct buf *) |
123 |
#define dev_type_dump(n) int n (dev_t, daddr_t, void *, size_t) |
124 |
#define dev_type_size(n) int n (dev_t) |
125 |
#define dev_type_kqfilter(n) int n (dev_t, struct knote *) |
126 |
#define dev_type_discard(n) int n (dev_t, off_t, off_t) |
127 |
|
128 |
#define noopen ((dev_type_open((*)))enodev)
|
129 |
#define noclose ((dev_type_close((*)))enodev)
|
130 |
#define noread ((dev_type_read((*)))enodev)
|
131 |
#define nowrite ((dev_type_write((*)))enodev)
|
132 |
#define noioctl ((dev_type_ioctl((*)))enodev)
|
133 |
#define nostop ((dev_type_stop((*)))enodev)
|
134 |
#define notty NULL |
135 |
#define nopoll seltrue
|
136 |
#define nommap ((dev_type_mmap((*)))enodev)
|
137 |
#define nodump ((dev_type_dump((*)))enodev)
|
138 |
#define nosize NULL |
139 |
#define nokqfilter seltrue_kqfilter
|
140 |
#define nodiscard ((dev_type_discard((*)))enodev)
|
141 |
|
142 |
#define nullopen ((dev_type_open((*)))nullop)
|
143 |
#define nullclose ((dev_type_close((*)))nullop)
|
144 |
#define nullread ((dev_type_read((*)))nullop)
|
145 |
#define nullwrite ((dev_type_write((*)))nullop)
|
146 |
#define nullioctl ((dev_type_ioctl((*)))nullop)
|
147 |
#define nullstop ((dev_type_stop((*)))nullop)
|
148 |
#define nullpoll ((dev_type_poll((*)))nullop)
|
149 |
#define nullmmap ((dev_type_mmap((*)))nullop)
|
150 |
#define nulldump ((dev_type_dump((*)))nullop)
|
151 |
#define nullkqfilter ((dev_type_kqfilter((*)))eopnotsupp)
|
152 |
#define nulldiscard ((dev_type_discard((*)))nullop)
|
153 |
|
154 |
/* device access wrappers. */
|
155 |
|
156 |
dev_type_open(bdev_open); |
157 |
dev_type_close(bdev_close); |
158 |
dev_type_strategy(bdev_strategy); |
159 |
dev_type_ioctl(bdev_ioctl); |
160 |
dev_type_dump(bdev_dump); |
161 |
dev_type_size(bdev_size); |
162 |
dev_type_discard(bdev_discard); |
163 |
|
164 |
dev_type_open(cdev_open); |
165 |
dev_type_close(cdev_close); |
166 |
dev_type_read(cdev_read); |
167 |
dev_type_write(cdev_write); |
168 |
dev_type_ioctl(cdev_ioctl); |
169 |
dev_type_stop(cdev_stop); |
170 |
dev_type_tty(cdev_tty); |
171 |
dev_type_poll(cdev_poll); |
172 |
dev_type_mmap(cdev_mmap); |
173 |
dev_type_kqfilter(cdev_kqfilter); |
174 |
dev_type_discard(cdev_discard); |
175 |
|
176 |
int cdev_type(dev_t);
|
177 |
int bdev_type(dev_t);
|
178 |
|
179 |
/* symbolic sleep message strings */
|
180 |
extern const char devopn[], devio[], devwait[], devin[], devout[]; |
181 |
extern const char devioc[], devcls[]; |
182 |
|
183 |
#endif /* _KERNEL */ |
184 |
|
185 |
/*
|
186 |
* Line discipline switch table
|
187 |
*/
|
188 |
struct linesw {
|
189 |
const char *l_name; /* Linesw name */ |
190 |
|
191 |
LIST_ENTRY(linesw) l_list; |
192 |
u_int l_refcnt; /* locked by ttyldisc_list_slock */
|
193 |
int l_no; /* legacy discipline number (for TIOCGETD) */ |
194 |
|
195 |
int (*l_open) (dev_t, struct tty *); |
196 |
int (*l_close) (struct tty *, int); |
197 |
int (*l_read) (struct tty *, struct uio *, int); |
198 |
int (*l_write) (struct tty *, struct uio *, int); |
199 |
int (*l_ioctl) (struct tty *, u_long, void *, int, |
200 |
struct lwp *);
|
201 |
int (*l_rint) (int, struct tty *); |
202 |
int (*l_start) (struct tty *); |
203 |
int (*l_modem) (struct tty *, int); |
204 |
int (*l_poll) (struct tty *, int, struct lwp *); |
205 |
}; |
206 |
|
207 |
#ifdef _KERNEL
|
208 |
void ttyldisc_init(void); |
209 |
int ttyldisc_attach(struct linesw *); |
210 |
int ttyldisc_detach(struct linesw *); |
211 |
struct linesw *ttyldisc_lookup(const char *); |
212 |
struct linesw *ttyldisc_lookup_bynum(int); |
213 |
struct linesw *ttyldisc_default(void); |
214 |
void ttyldisc_release(struct linesw *); |
215 |
|
216 |
/* For those defining their own line disciplines: */
|
217 |
#define ttynodisc ((int (*)(dev_t, struct tty *))enodev) |
218 |
#define ttyerrclose ((int (*)(struct tty *, int))enodev) |
219 |
#define ttyerrio ((int (*)(struct tty *, struct uio *, int))enodev) |
220 |
#define ttyerrinput ((int (*)(int, struct tty *))enodev) |
221 |
#define ttyerrstart ((int (*)(struct tty *))enodev) |
222 |
|
223 |
int ttyerrpoll (struct tty *, int, struct lwp *); |
224 |
int ttynullioctl(struct tty *, u_long, void *, int, struct lwp *); |
225 |
|
226 |
int iskmemdev(dev_t);
|
227 |
int seltrue_kqfilter(dev_t, struct knote *); |
228 |
#endif
|
229 |
|
230 |
#ifdef _KERNEL
|
231 |
|
232 |
#define DEV_MEM 0 /* minor device 0 is physical memory */ |
233 |
#define DEV_KMEM 1 /* minor device 1 is kernel memory */ |
234 |
#define DEV_NULL 2 /* minor device 2 is EOF/rathole */ |
235 |
#ifdef COMPAT_16
|
236 |
#define _DEV_ZERO_oARM 3 /* reserved: old ARM /dev/zero minor */ |
237 |
#endif
|
238 |
#define DEV_ZERO 12 /* minor device 12 is '\0'/rathole */ |
239 |
|
240 |
enum devnode_class {
|
241 |
DEVNODE_DONTBOTHER, |
242 |
DEVNODE_SINGLE, |
243 |
DEVNODE_VECTOR, |
244 |
}; |
245 |
#define DEVNODE_FLAG_LINKZERO 0x01 /* create name -> name0 link */ |
246 |
#define DEVNODE_FLAG_ISMINOR0 0x02 /* vector[0] specifies minor */ |
247 |
#ifdef notyet
|
248 |
#define DEVNODE_FLAG_ISMINOR1 0x04 /* vector[1] specifies starting minor */ |
249 |
#endif
|
250 |
|
251 |
struct devsw_conv {
|
252 |
const char *d_name; |
253 |
devmajor_t d_bmajor; |
254 |
devmajor_t d_cmajor; |
255 |
|
256 |
/* information about /dev nodes related to the device */
|
257 |
enum devnode_class d_class;
|
258 |
int d_flags;
|
259 |
int d_vectdim[2]; |
260 |
}; |
261 |
|
262 |
void devsw_init(void); |
263 |
const char *devsw_blk2name(devmajor_t); |
264 |
const char *cdevsw_getname(devmajor_t); |
265 |
const char *bdevsw_getname(devmajor_t); |
266 |
devmajor_t devsw_name2blk(const char *, char *, size_t); |
267 |
devmajor_t devsw_name2chr(const char *, char *, size_t); |
268 |
dev_t devsw_chr2blk(dev_t); |
269 |
dev_t devsw_blk2chr(dev_t); |
270 |
|
271 |
void mm_init(void); |
272 |
#endif /* _KERNEL */ |
273 |
|
274 |
#ifdef _KERNEL
|
275 |
void setroot(device_t, int); |
276 |
void rootconf(void); |
277 |
void swapconf(void); |
278 |
#endif /* _KERNEL */ |
279 |
|
280 |
#endif /* !_SYS_CONF_H_ */ |