Annotation of sys/arch/alpha/alpha/conf.c, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: conf.c,v 1.55 2007/06/20 18:28:56 miod Exp $ */
2: /* $NetBSD: conf.c,v 1.16 1996/10/18 21:26:57 cgd Exp $ */
3:
4: /*-
5: * Copyright (c) 1991 The Regents of the University of California.
6: * All rights reserved.
7: *
8: * Redistribution and use in source and binary forms, with or without
9: * modification, are permitted provided that the following conditions
10: * are met:
11: * 1. Redistributions of source code must retain the above copyright
12: * notice, this list of conditions and the following disclaimer.
13: * 2. Redistributions in binary form must reproduce the above copyright
14: * notice, this list of conditions and the following disclaimer in the
15: * documentation and/or other materials provided with the distribution.
16: * 3. Neither the name of the University nor the names of its contributors
17: * may be used to endorse or promote products derived from this software
18: * without specific prior written permission.
19: *
20: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30: * SUCH DAMAGE.
31: *
32: * @(#)conf.c 7.9 (Berkeley) 5/28/91
33: */
34:
35: #include <sys/param.h>
36: #include <sys/systm.h>
37: #include <sys/buf.h>
38: #include <sys/ioctl.h>
39: #include <sys/tty.h>
40: #include <sys/conf.h>
41: #include <sys/vnode.h>
42:
43: #include "inet.h"
44:
45: #include "wd.h"
46: bdev_decl(wd);
47: #include "fd.h"
48: bdev_decl(fd);
49: #include "st.h"
50: #include "cd.h"
51: #include "sd.h"
52: #include "ss.h"
53: #include "uk.h"
54: #include "vnd.h"
55: #include "raid.h"
56: #include "ccd.h"
57: #include "rd.h"
58: #include "bktr.h"
59: #include "radio.h"
60:
61: struct bdevsw bdevsw[] =
62: {
63: bdev_disk_init(NWD,wd), /* 0: ST506/ESDI/IDE disk */
64: bdev_swap_init(1,sw), /* 1: swap pseudo-device */
65: bdev_tape_init(NST,st), /* 2: SCSI tape */
66: bdev_disk_init(NCD,cd), /* 3: SCSI CD-ROM */
67: bdev_disk_init(NFD,fd), /* 4: Floppy disk */
68: bdev_notdef(), /* 5 */
69: bdev_disk_init(NRD,rd), /* 6: ram disk driver */
70: bdev_disk_init(NCCD,ccd), /* 7: concatenated disk driver */
71: bdev_disk_init(NSD,sd), /* 8: SCSI disk */
72: bdev_disk_init(NVND,vnd), /* 9: vnode disk driver */
73: bdev_lkm_dummy(), /* 10 */
74: bdev_lkm_dummy(), /* 11 */
75: bdev_lkm_dummy(), /* 12 */
76: bdev_lkm_dummy(), /* 13 */
77: bdev_lkm_dummy(), /* 14 */
78: bdev_lkm_dummy(), /* 15 */
79: bdev_disk_init(NRAID,raid), /* 16 */
80: };
81: int nblkdev = sizeof (bdevsw) / sizeof (bdevsw[0]);
82:
83: #define mmread mmrw
84: #define mmwrite mmrw
85: cdev_decl(mm);
86: #include "pty.h"
87: #include "tun.h"
88: #include "bpfilter.h"
89: #include "iop.h"
90: #include "ch.h"
91: #include "scc.h"
92: cdev_decl(scc);
93: #include "audio.h"
94: #include "com.h"
95: cdev_decl(com);
96: #include "wsdisplay.h"
97: #include "wskbd.h"
98: #include "wsmouse.h"
99: #include "wsmux.h"
100: #include "midi.h"
101: cdev_decl(midi);
102: #include "sequencer.h"
103: cdev_decl(music);
104:
105: #include "spkr.h"
106: cdev_decl(spkr);
107:
108: #include "bio.h"
109: #include "lpt.h"
110: cdev_decl(lpt);
111: cdev_decl(prom); /* XXX XXX XXX */
112: cdev_decl(wd);
113: cdev_decl(fd);
114: #include "cy.h"
115: cdev_decl(cy);
116: #ifdef XFS
117: #include <xfs/nxfs.h>
118: cdev_decl(xfs_dev);
119: #endif
120: #include "ksyms.h"
121:
122: /* USB Devices */
123: #include "usb.h"
124: #include "uhid.h"
125: #include "ugen.h"
126: #include "ulpt.h"
127: #include "ucom.h"
128: #include "pf.h"
129: #ifdef USER_PCICONF
130: #include "pci.h"
131: cdev_decl(pci);
132: #endif
133:
134: #include "systrace.h"
135: #include "hotplug.h"
136:
137: struct cdevsw cdevsw[] =
138: {
139: cdev_cn_init(1,cn), /* 0: virtual console */
140: cdev_ctty_init(1,ctty), /* 1: controlling terminal */
141: cdev_mm_init(1,mm), /* 2: /dev/{null,mem,kmem,...} */
142: cdev_swap_init(1,sw), /* 3: /dev/drum (swap pseudo-device) */
143: cdev_tty_init(NPTY,pts), /* 4: pseudo-tty slave */
144: cdev_ptc_init(NPTY,ptc), /* 5: pseudo-tty master */
145: cdev_log_init(1,log), /* 6: /dev/klog */
146: cdev_bpftun_init(NTUN,tun), /* 7: network tunnel */
147: cdev_disk_init(NSD,sd), /* 8: SCSI disk */
148: cdev_disk_init(NVND,vnd), /* 9: vnode disk driver */
149: cdev_fd_init(1,filedesc), /* 10: file descriptor pseudo-dev */
150: cdev_bpftun_init(NBPFILTER,bpf),/* 11: Berkeley packet filter */
151: cdev_tape_init(NST,st), /* 12: SCSI tape */
152: cdev_disk_init(NCD,cd), /* 13: SCSI CD-ROM */
153: cdev_ch_init(NCH,ch), /* 14: SCSI autochanger */
154: cdev_tty_init(NSCC,scc), /* 15: scc 8530 serial interface */
155: cdev_lkm_init(NLKM,lkm), /* 16: loadable module driver */
156: cdev_lkm_dummy(), /* 17 */
157: cdev_lkm_dummy(), /* 18 */
158: cdev_lkm_dummy(), /* 19 */
159: cdev_lkm_dummy(), /* 20 */
160: cdev_lkm_dummy(), /* 21 */
161: cdev_lkm_dummy(), /* 22 */
162: cdev_tty_init(1,prom), /* 23: XXX prom console */
163: cdev_audio_init(NAUDIO,audio), /* 24: generic audio I/O */
164: cdev_wsdisplay_init(NWSDISPLAY,wsdisplay), /* 25: workstation console */
165: cdev_tty_init(NCOM,com), /* 26: ns16550 UART */
166: cdev_disk_init(NCCD,ccd), /* 27: concatenated disk driver */
167: cdev_disk_init(NRD,rd), /* 28: ram disk driver */
168: cdev_mouse_init(NWSKBD,wskbd), /* 29: /dev/kbd XXX */
169: cdev_mouse_init(NWSMOUSE,wsmouse), /* 30: /dev/mouse XXX */
170: cdev_lpt_init(NLPT,lpt), /* 31: parallel printer */
171: cdev_scanner_init(NSS,ss), /* 32: SCSI scanner */
172: cdev_uk_init(NUK,uk), /* 33: SCSI unknown */
173: cdev_random_init(1,random), /* 34: random data source */
174: cdev_pf_init(NPF, pf), /* 35: packet filter */
175: cdev_disk_init(NWD,wd), /* 36: ST506/ESDI/IDE disk */
176: cdev_disk_init(NFD,fd), /* 37: Floppy disk */
177: cdev_tty_init(NCY,cy), /* 38: Cyclom serial port */
178: cdev_ksyms_init(NKSYMS,ksyms), /* 39: Kernel symbols device */
179: cdev_spkr_init(NSPKR,spkr), /* 40: PC speaker */
180: cdev_midi_init(NMIDI,midi), /* 41: MIDI I/O */
181: cdev_midi_init(NSEQUENCER,sequencer), /* 42: sequencer I/O */
182: cdev_disk_init(NRAID,raid), /* 43: RAIDframe disk driver */
183: cdev_notdef(), /* 44 */
184: cdev_usb_init(NUSB,usb), /* 45: USB controller */
185: cdev_usbdev_init(NUHID,uhid), /* 46: USB generic HID */
186: cdev_ulpt_init(NULPT,ulpt), /* 47: USB printer */
187: cdev_usbdev_init(NUGEN,ugen), /* 48: USB generic driver */
188: cdev_tty_init(NUCOM, ucom), /* 49: USB tty */
189: cdev_systrace_init(NSYSTRACE,systrace), /* 50 system call tracing */
190: #ifdef XFS
191: cdev_xfs_init(NXFS,xfs_dev), /* 51: xfs communication device */
192: #else
193: cdev_notdef(), /* 51 */
194: #endif
195: #ifdef USER_PCICONF
196: cdev_pci_init(NPCI,pci), /* 52: PCI user */
197: #else
198: cdev_notdef(),
199: #endif
200: cdev_bio_init(NBIO,bio), /* 53: ioctl tunnel */
201: cdev_iop_init(NIOP, iop), /* 54: I2O IOP control interface */
202: cdev_ptm_init(NPTY,ptm), /* 55: pseudo-tty ptm device */
203: cdev_hotplug_init(NHOTPLUG,hotplug), /* 56: devices hot plugging */
204: cdev_crypto_init(NCRYPTO,crypto), /* 57: /dev/crypto */
205: cdev_bktr_init(NBKTR,bktr), /* 58: Bt848 video capture device */
206: cdev_radio_init(NRADIO,radio), /* 59: generic radio I/O */
207: cdev_mouse_init(NWSMUX, wsmux), /* 60: ws multiplexor */
208: };
209: int nchrdev = sizeof (cdevsw) / sizeof (cdevsw[0]);
210:
211: int mem_no = 2; /* major device number of memory special file */
212:
213: /*
214: * Swapdev is a fake device implemented
215: * in sw.c used only internally to get to swstrategy.
216: * It cannot be provided to the users, because the
217: * swstrategy routine munches the b_dev and b_blkno entries
218: * before calling the appropriate driver. This would horribly
219: * confuse, e.g. the hashing routines. Instead, /dev/drum is
220: * provided as a character (raw) device.
221: */
222: dev_t swapdev = makedev(1, 0);
223:
224: /*
225: * Returns true if dev is /dev/mem or /dev/kmem.
226: */
227: int
228: iskmemdev(dev)
229: dev_t dev;
230: {
231:
232: return (major(dev) == mem_no && minor(dev) < 2);
233: }
234:
235: /*
236: * Returns true if dev is /dev/zero.
237: */
238: int
239: iszerodev(dev)
240: dev_t dev;
241: {
242:
243: return (major(dev) == mem_no && minor(dev) == 12);
244: }
245:
246: dev_t
247: getnulldev()
248: {
249: return makedev(mem_no, 2);
250: }
251:
252: int chrtoblktbl[] = {
253: /* XXXX This needs to be dynamic for LKMs. */
254: /*VCHR*/ /*VBLK*/
255: /* 0 */ NODEV,
256: /* 1 */ NODEV,
257: /* 2 */ NODEV,
258: /* 3 */ NODEV,
259: /* 4 */ NODEV,
260: /* 5 */ NODEV,
261: /* 6 */ NODEV,
262: /* 7 */ NODEV,
263: /* 8 */ 8, /* sd */
264: /* 9 */ 9, /* vnd */
265: /* 10 */ NODEV,
266: /* 11 */ NODEV,
267: /* 12 */ 2, /* st */
268: /* 13 */ 3, /* cd */
269: /* 14 */ NODEV,
270: /* 15 */ NODEV,
271: /* 16 */ NODEV,
272: /* 17 */ NODEV,
273: /* 18 */ NODEV,
274: /* 19 */ NODEV,
275: /* 20 */ NODEV,
276: /* 21 */ NODEV,
277: /* 22 */ NODEV,
278: /* 23 */ NODEV,
279: /* 24 */ NODEV,
280: /* 25 */ NODEV,
281: /* 26 */ NODEV,
282: /* 27 */ 7, /* ccd */
283: /* 28 */ 6, /* rd */
284: /* 29 */ NODEV,
285: /* 30 */ NODEV,
286: /* 31 */ NODEV,
287: /* 32 */ NODEV,
288: /* 33 */ NODEV,
289: /* 34 */ NODEV,
290: /* 35 */ NODEV,
291: /* 36 */ 0,
292: /* 37 */ 4, /* fd */
293: /* 38 */ NODEV,
294: /* 39 */ NODEV,
295: /* 40 */ NODEV,
296: /* 41 */ NODEV,
297: /* 42 */ NODEV,
298: /* 43 */ 16, /* raid */
299: /* 44 */ NODEV,
300: /* 45 */ NODEV,
301: /* 46 */ NODEV,
302: /* 47 */ NODEV,
303: /* 48 */ NODEV,
304: /* 49 */ NODEV,
305: /* 50 */ NODEV,
306: /* 51 */ NODEV,
307: };
308: int nchrtoblktbl = sizeof(chrtoblktbl) / sizeof(chrtoblktbl[0]);
CVSweb