1 /* $OpenBSD: conf.c,v 1.14 2022/09/02 20:06:56 miod Exp $ */
2
3 /*-
4 * Copyright (c) 1991 The Regents of the University of California.
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. Neither the name of the University nor the names of its contributors
16 * may be used to endorse or promote products derived from this software
17 * without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29 * SUCH DAMAGE.
30 *
31 * @(#)conf.c 7.9 (Berkeley) 5/28/91
32 */
33
34 #include <sys/param.h>
35 #include <sys/systm.h>
36 #include <sys/device.h>
37 #include <sys/tty.h>
38 #include <sys/vnode.h>
39
40 #include <machine/conf.h>
41
42 #include "wd.h"
43 bdev_decl(wd);
44 #include "cd.h"
45 #include "rd.h"
46 #include "sd.h"
47 #include "vnd.h"
48
49 struct bdevsw bdevsw[] =
50 {
51 bdev_swap_init(1,sw), /* 0: swap pseudo-device */
52 bdev_disk_init(NVND,vnd), /* 1: vnode disk driver */
53 bdev_disk_init(NRD,rd), /* 2: ram disk driver */
54 bdev_disk_init(NSD,sd), /* 3: SCSI disk */
55 bdev_disk_init(NCD,cd), /* 4: SCSI CD-ROM */
56 bdev_disk_init(NWD,wd), /* 5: ST506/ESDI/IDE disk */
57 bdev_notdef(),
58 };
59 int nblkdev = nitems(bdevsw);
60
61 #include "audio.h"
62 cdev_decl(wd);
63 #include "bio.h"
64 #include "bpfilter.h"
65 #include "ch.h"
66 #include "com.h"
67 cdev_decl(com);
68 #include "drm.h"
69 #include "dt.h"
70 #include "fido.h"
71 #include "ujoy.h"
72 #include "fuse.h"
73 #include "hotplug.h"
74 #include "ipmi.h"
75 #include "kcov.h"
76 #include "kexec.h"
77 #include "kstat.h"
78 #include "ksyms.h"
79 #include "lpt.h"
80 cdev_decl(lpt);
81 #include "midi.h"
82 #include "opalcons.h"
83 #include "openprom.h"
84 #include "pf.h"
85 #include "pppx.h"
86 #include "pty.h"
87 #include "radio.h"
88 #include "st.h"
89 #include "tun.h"
90 #include "ucom.h"
91 #include "ugen.h"
92 #include "uhid.h"
93 #include "uk.h"
94 #include "ulpt.h"
95 #include "usb.h"
96 #include "video.h"
97 #include "vscsi.h"
98 #include "wsdisplay.h"
99 #include "wskbd.h"
100 #include "wsmouse.h"
101 #include "wsmux.h"
102
103 #ifdef USER_PCICONF
104 #include "pci.h"
105 cdev_decl(pci);
106 #endif
107
108 struct cdevsw cdevsw[] =
109 {
110 cdev_cn_init(1,cn), /* 0: virtual console */
111 cdev_ctty_init(1,ctty), /* 1: controlling terminal */
112 cdev_mm_init(1,mm), /* 2: /dev/{null,mem,kmem,...} */
113 cdev_ksyms_init(NKSYMS,ksyms), /* 3: kernel symbols device */
114 cdev_log_init(1,log), /* 4: /dev/klog */
115 cdev_ptm_init(NPTY,ptm), /* 5: pseudo-tty ptm device */
116 cdev_ptc_init(NPTY,ptc), /* 6: pseudo-tty master */
117 cdev_tty_init(NPTY,pts), /* 7: pseudo-tty slave */
118 cdev_fd_init(1,filedesc), /* 8: file descriptor pseudo-device */
119 cdev_bpf_init(NBPFILTER,bpf), /* 9: packet filter */
120 cdev_disk_init(1,diskmap), /* 10: disk mapper */
121 cdev_pf_init(NPF,pf), /* 11: packet filter */
122 cdev_random_init(1,random), /* 12: random data source */
123 cdev_dt_init(NDT,dt), /* 13: dynamic tracer */
124 cdev_kcov_init(NKCOV,kcov), /* 14: kcov */
125 cdev_kstat_init(NKSTAT,kstat), /* 15: kernel statistics */
126 cdev_kexec_init(NKEXEC,kexec), /* 16: kexec */
127 cdev_disk_init(NWD,wd), /* 17: ST506/ESDI/IDE disk */
128 cdev_notdef(), /* 18 */
129 cdev_notdef(), /* 19 */
130 cdev_notdef(), /* 20 */
131 cdev_notdef(), /* 21 */
132 cdev_notdef(), /* 22 */
133 cdev_notdef(), /* 23 */
134 cdev_disk_init(NVND,vnd), /* 24: vnode disk driver */
135 cdev_disk_init(NRD,rd), /* 25: ram disk driver */
136 cdev_disk_init(NSD,sd), /* 26: SCSI disk */
137 cdev_disk_init(NCD,cd), /* 27: SCSI CD-ROM */
138 cdev_notdef(), /* 28 */
139 cdev_notdef(), /* 29 */
140 cdev_notdef(), /* 30 */
141 cdev_notdef(), /* 31 */
142 cdev_audio_init(NAUDIO,audio), /* 32: generic audio I/O */
143 cdev_midi_init(NMIDI,midi), /* 33: MIDI I/O */
144 cdev_radio_init(NRADIO, radio), /* 34: generic radio I/O */
145 cdev_video_init(NVIDEO,video), /* 35: generic video I/O */
146 cdev_notdef(), /* 36 */
147 cdev_notdef(), /* 37 */
148 cdev_notdef(), /* 38 */
149 cdev_notdef(), /* 39 */
150 cdev_wsdisplay_init(NWSDISPLAY, /* 40: frame buffers, etc. */
151 wsdisplay),
152 cdev_mouse_init(NWSKBD, wskbd), /* 41: keyboards */
153 cdev_mouse_init(NWSMOUSE, /* 42: mice */
154 wsmouse),
155 cdev_mouse_init(NWSMUX, wsmux), /* 43: ws multiplexor */
156 cdev_notdef(), /* 44 */
157 cdev_notdef(), /* 45 */
158 cdev_notdef(), /* 46 */
159 cdev_notdef(), /* 47 */
160 cdev_usb_init(NUSB,usb), /* 48: USB controller */
161 cdev_usbdev_init(NUGEN,ugen), /* 49: USB generic driver */
162 cdev_usbdev_init(NUHID,uhid), /* 50: USB generic HID */
163 cdev_fido_init(NFIDO,fido), /* 51: FIDO/U2F security key */
164 cdev_notdef(), /* 52 */
165 cdev_notdef(), /* 53 */
166 cdev_notdef(), /* 54 */
167 cdev_notdef(), /* 55 */
168 cdev_tty_init(NOPALCONS,opalcons), /* 56: OPAL console */
169 cdev_tty_init(NCOM,com), /* 57: serial port */
170 cdev_tty_init(NUCOM,ucom), /* 58: USB tty */
171 cdev_notdef(), /* 59 */
172 cdev_notdef(), /* 60 */
173 cdev_notdef(), /* 61 */
174 cdev_notdef(), /* 62 */
175 cdev_notdef(), /* 63 */
176 cdev_lpt_init(NLPT,lpt), /* 64: parallel printer */
177 cdev_ulpt_init(NULPT,ulpt), /* 65: USB printers */
178 cdev_notdef(), /* 66 */
179 cdev_notdef(), /* 67 */
180 cdev_ch_init(NCH,ch), /* 68: SCSI autochanger */
181 cdev_tape_init(NST,st), /* 69: SCSI tape */
182 cdev_uk_init(NUK,uk), /* 70: unknown SCSI */
183 cdev_notdef(), /* 71 */
184 cdev_pppx_init(NPPPX,pppx), /* 72: pppx */
185 cdev_pppx_init(NPPPX,pppac), /* 73: PPP Access Concentrator */
186 cdev_notdef(), /* 74: was switch(4) */
187 cdev_tun_init(NTUN,tap), /* 75: Ethernet network tunnel */
188 cdev_tun_init(NTUN,tun), /* 76: network tunnel */
189 cdev_notdef(), /* 77 */
190 cdev_notdef(), /* 78 */
191 cdev_notdef(), /* 79 */
192 cdev_bio_init(NBIO,bio), /* 80: ioctl tunnel */
193 cdev_fuse_init(NFUSE,fuse), /* 81: fuse */
194 cdev_hotplug_init(NHOTPLUG,hotplug), /* 82: devices hot plugging */
195 cdev_vscsi_init(NVSCSI,vscsi), /* 83: vscsi */
196 cdev_notdef(), /* 84 */
197 cdev_notdef(), /* 85 */
198 cdev_notdef(), /* 86 */
199 cdev_drm_init(NDRM,drm), /* 87: drm */
200 cdev_ipmi_init(NIPMI,ipmi), /* 88: ipmi */
201 cdev_notdef(), /* 89 */
202 cdev_notdef(), /* 90 */
203 cdev_notdef(), /* 91 */
204 cdev_openprom_init(NOPENPROM,openprom), /* 92: /dev/openprom */
205 #ifdef USER_PCICONF
206 cdev_pci_init(NPCI,pci), /* 93: PCI user */
207 #else
208 cdev_notdef(), /* 93 */
209 #endif
210 cdev_ujoy_init(NUJOY,ujoy), /* 94: USB joystick/gamecontroller */
211 };
212 int nchrdev = nitems(cdevsw);
213
214 int mem_no = 2; /* major device number of memory special file */
215
216 dev_t swapdev = makedev(0, 0);
217
218 int
iskmemdev(dev_t dev)219 iskmemdev(dev_t dev)
220 {
221 return (major(dev) == mem_no && minor(dev) < 2);
222 }
223
224 int
iszerodev(dev_t dev)225 iszerodev(dev_t dev)
226 {
227 return (major(dev) == mem_no && minor(dev) == 12);
228 }
229
230 dev_t
getnulldev(void)231 getnulldev(void)
232 {
233 return makedev(mem_no, 2);
234 }
235
236 const int chrtoblktbl[] = {
237 /*VCHR*/ /*VBLK*/
238 /* 0 */ NODEV,
239 /* 1 */ NODEV,
240 /* 2 */ NODEV,
241 /* 3 */ NODEV,
242 /* 4 */ NODEV,
243 /* 5 */ NODEV,
244 /* 6 */ NODEV,
245 /* 7 */ NODEV,
246 /* 8 */ NODEV,
247 /* 9 */ NODEV,
248 /* 10 */ NODEV,
249 /* 11 */ NODEV,
250 /* 12 */ NODEV,
251 /* 13 */ NODEV,
252 /* 14 */ NODEV,
253 /* 15 */ NODEV,
254 /* 16 */ NODEV,
255 /* 17 */ 5, /* wd */
256 /* 18 */ NODEV,
257 /* 19 */ NODEV,
258 /* 20 */ NODEV,
259 /* 21 */ NODEV,
260 /* 22 */ NODEV,
261 /* 23 */ NODEV,
262 /* 24 */ 1, /* vnd */
263 /* 25 */ 2, /* rd */
264 /* 26 */ 3, /* sd */
265 /* 27 */ 4, /* cd */
266 };
267 const int nchrtoblktbl = nitems(chrtoblktbl);
268