Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / sys / conf.h @ 13

History | View | Annotate | Download (9.03 KB)

1 13 up20180614
/*        $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_ */