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
37
38
39
40
41 #ifndef _SYS_CONF_H_
42 #define _SYS_CONF_H_
43
44
45
46
47
48 struct buf;
49 struct proc;
50 struct tty;
51 struct uio;
52 struct vnode;
53 struct knote;
54
55
56
57
58 #define D_TAPE 1
59 #define D_DISK 2
60 #define D_TTY 3
61
62
63
64
65 #define D_KQFILTER 0x0001
66 #define D_CLONE 0x0002
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
81
82
83
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
98 };
99
100 #ifdef _KERNEL
101
102 extern struct bdevsw bdevsw[];
103
104
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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