1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36#include <sys/param.h>
37#include <sys/systm.h>
38#include <sys/ioctl.h>
39#include <sys/tty.h>
40#include <sys/conf.h>
41
42
43extern int nulldev();
44
45struct bdevsw bdevsw[] =
46{
47
48
49
50
51
52
53
54
55
56
57
58 NO_BDEVICE,
59 NO_BDEVICE,
60 NO_BDEVICE,
61 NO_BDEVICE,
62 NO_BDEVICE,
63 NO_BDEVICE,
64 NO_BDEVICE,
65 NO_BDEVICE,
66
67
68 NO_BDEVICE,
69 NO_BDEVICE,
70 NO_BDEVICE,
71 NO_BDEVICE,
72 NO_BDEVICE,
73 NO_BDEVICE,
74 NO_BDEVICE,
75 NO_BDEVICE,
76
77
78 NO_BDEVICE,
79 NO_BDEVICE,
80 NO_BDEVICE,
81 NO_BDEVICE,
82 NO_BDEVICE,
83 NO_BDEVICE,
84 NO_BDEVICE,
85 NO_BDEVICE,
86};
87
88int nblkdev = sizeof (bdevsw) / sizeof (bdevsw[0]);
89
90extern struct tty *km_tty[];
91extern int consopen(), consclose(), consread(), conswrite(), consioctl(),
92 consselect(), cons_getc(), cons_putc();
93extern int kmopen(),kmclose(),kmread(),kmwrite(),kmioctl(),
94 kmgetc(), kmputc(dev_t dev, char c);
95
96extern int cttyopen(), cttyread(), cttywrite(), cttyioctl(), cttyselect();
97
98extern int mmread(),mmwrite(),mmioctl();
99#define mmselect seltrue
100
101#if 1
102#ifdef NPTY
103#undef NPTY
104#endif
105#define NPTY 32
106#else
107#include <pty.h>
108#endif
109#if NPTY > 0
110extern struct tty *pt_tty[];
111extern int ptsopen(),ptsclose(),ptsread(),ptswrite(),ptsstop(),ptsputc();
112extern int ptcopen(),ptcclose(),ptcread(),ptcwrite(),ptcselect(),
113 ptyioctl();
114#else
115#define ptsopen eno_opcl
116#define ptsclose eno_opcl
117#define ptsread eno_rdwrt
118#define ptswrite eno_rdwrt
119#define ptsstop nulldev
120#define ptsputc nulldev
121
122#define ptcopen eno_opcl
123#define ptcclose eno_opcl
124#define ptcread eno_rdwrt
125#define ptcwrite eno_rdwrt
126#define ptcselect eno_select
127#define ptyioctl eno_ioctl
128#endif
129
130extern int logopen(),logclose(),logread(),logioctl(),logselect();
131extern int seltrue();
132
133struct cdevsw cdevsw[] =
134{
135
136
137
138
139
140
141
142
143
144
145
146 {
147 consopen, consclose, consread, conswrite,
148 consioctl, nulldev, nulldev, 0, consselect,
149 eno_mmap, eno_strat, (getc_fcn_t *)cons_getc, (putc_fcn_t *)cons_putc, D_TTY
150 },
151 NO_CDEVICE,
152 {
153 cttyopen, nulldev, cttyread, cttywrite,
154 cttyioctl, nulldev, nulldev, 0, cttyselect,
155 eno_mmap, eno_strat, eno_getc, eno_putc, D_TTY
156 },
157 {
158 nulldev, nulldev, mmread, mmwrite,
159 mmioctl, nulldev, nulldev, 0, (select_fcn_t *)mmselect,
160 eno_mmap, eno_strat, eno_getc, eno_putc, D_DISK
161 },
162 {
163 ptsopen, ptsclose, ptsread, ptswrite,
164 ptyioctl, ptsstop, nulldev, pt_tty, ttselect,
165 eno_mmap, eno_strat, eno_getc, eno_putc, D_TTY
166 },
167 {
168 ptcopen, ptcclose, ptcread, ptcwrite,
169 ptyioctl, nulldev, nulldev, 0, ptcselect,
170 eno_mmap, eno_strat, eno_getc, eno_putc, D_TTY
171 },
172 {
173 logopen, logclose, logread, eno_rdwrt,
174 logioctl, eno_stop, nulldev, 0, logselect,
175 eno_mmap, eno_strat, eno_getc, eno_putc, 0
176 },
177 NO_CDEVICE,
178 NO_CDEVICE,
179 NO_CDEVICE,
180 NO_CDEVICE,
181 NO_CDEVICE,
182 {
183 kmopen, kmclose, kmread, kmwrite,
184 kmioctl, nulldev, nulldev, km_tty, ttselect,
185 eno_mmap, eno_strat, kmgetc, kmputc, 0
186 },
187 NO_CDEVICE,
188 NO_CDEVICE,
189 NO_CDEVICE,
190
191
192 NO_CDEVICE,
193 NO_CDEVICE,
194 NO_CDEVICE,
195 NO_CDEVICE,
196 NO_CDEVICE,
197 NO_CDEVICE,
198 NO_CDEVICE,
199 NO_CDEVICE,
200 NO_CDEVICE,
201 NO_CDEVICE,
202 NO_CDEVICE,
203 NO_CDEVICE,
204 NO_CDEVICE,
205 NO_CDEVICE,
206 NO_CDEVICE,
207 NO_CDEVICE,
208
209
210 NO_CDEVICE,
211 NO_CDEVICE,
212 NO_CDEVICE,
213 NO_CDEVICE,
214 NO_CDEVICE,
215
216 NO_CDEVICE,
217 NO_CDEVICE,
218 NO_CDEVICE,
219 NO_CDEVICE,
220
221 NO_CDEVICE,
222 NO_CDEVICE,
223};
224int nchrdev = sizeof (cdevsw) / sizeof (cdevsw[0]);
225
226
227#include <sys/vnode.h>
228
229
230
231int
232isdisk(dev, type)
233 dev_t dev;
234 int type;
235{
236 dev_t maj = major(dev);
237
238 switch (type) {
239 case VCHR:
240 maj = chrtoblk(maj);
241 if (maj == NODEV) {
242 break;
243 }
244
245 case VBLK:
246 if (bdevsw[maj].d_type == D_DISK) {
247 return (1);
248 }
249 break;
250 }
251 return(0);
252}
253
254static int chrtoblktab[] = {
255
256 NODEV, NODEV,
257 NODEV, NODEV,
258 NODEV, NODEV,
259 NODEV, NODEV,
260 NODEV, NODEV,
261 NODEV, NODEV,
262 NODEV, NODEV,
263 6, NODEV,
264 NODEV, NODEV,
265 NODEV, NODEV,
266 NODEV, NODEV,
267 NODEV, NODEV,
268 NODEV, NODEV,
269 NODEV, NODEV,
270 NODEV, NODEV,
271 NODEV, NODEV,
272 NODEV, NODEV,
273 NODEV, NODEV,
274 NODEV, NODEV,
275 NODEV, NODEV,
276 NODEV, 1,
277 NODEV, NODEV,
278 NODEV,
279};
280
281
282
283
284dev_t
285chrtoblk(dev)
286 dev_t dev;
287{
288 int blkmaj;
289
290 if (major(dev) >= nchrdev)
291 return(NODEV);
292 blkmaj = chrtoblktab[major(dev)];
293 if (blkmaj == NODEV)
294 return(NODEV);
295 return(makedev(blkmaj, minor(dev)));
296}
297
298int
299chrtoblk_set(int cdev, int bdev)
300{
301 if (cdev >= nchrdev)
302 return (NODEV);
303 if (bdev != NODEV && bdev >= nblkdev)
304 return (NODEV);
305 chrtoblktab[cdev] = bdev;
306 return 0;
307}
308
309
310
311
312int iskmemdev(dev)
313 dev_t dev;
314{
315
316 return (major(dev) == 3 && minor(dev) < 2);
317}
318