MAKEDEV.common revision 1.58
1vers(a, {-$OpenBSD: MAKEDEV.common,v 1.58 2011/10/22 19:31:20 miod Exp $-})dnl
2dnl
3dnl Copyright (c) 2001-2006 Todd T. Fries <todd@OpenBSD.org>
4dnl
5dnl Permission to use, copy, modify, and distribute this software for any
6dnl purpose with or without fee is hereby granted, provided that the above
7dnl copyright notice and this permission notice appear in all copies.
8dnl
9dnl THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10dnl WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11dnl MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12dnl ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13dnl WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14dnl ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15dnl OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16dnl
17dnl Common device definitions.
18dnl
19dnl This file contains the MI device definitions (as well as some MD
20dnl definitions not cleaned up yet...)
21dnl
22dnl Diversions:  (upon termination, concatenated output queues)
23dnl
24dnl 0 - very top
25dnl 1 - descriptions of devices
26dnl 2 - init of script, function definitions, etc
27dnl 3 - beginning of global recursive R() function
28dnl 7 - body of MAKEDEV, device creations, etc
29dnl 9 - end
30dnl
31dnl Diversions 2, 3 and 7 are not filled when generating the manual page.
32dnl
33dnl HOW TO ADD A DEVICE:
34dnl
35dnl In this file, you must use at least two macros:
36dnl
37dnl  Use '__devitem(uniqueid, name-pattern, description)' to create an entry
38dnl  in the description at the top of the generated MAKEDEV file:
39dnl
40dnl    __devitem(sca, sca*, Sugar Generic device)dnl
41dnl    __devitem(cry, crypto, hardware crypto access driver)dnl
42dnl
43dnl  This is ultimately shown as:
44dnl
45dnl    #  sca*   Sugar Generic device
46dnl    #  crypto hardware crypto access driver
47dnl
48dnl  Use '_mkdev(uniqueid, shell-pattern, {-shell-script-})dnl' to create
49dnl  a shell script fragment used to 'create' the device (be sure to match
50dnl  the uniqueid from above):
51dnl
52dnl    _mkdev(sca, sca*, {-M sca$U c major_sca_c $U
53dnl           M rsca$U b major_sca_b Add($U, 128)-})dnl
54dnl    _mkdev(cry, crypto, {-M crypto c major_cry_c 0-})dnl
55dnl
56dnl  This is ultimately expanded into:
57dnl
58dnl    sca*)
59dnl           M sca$U c 24 $U
60dnl           M sca$U b 42 $(($U+128))
61dnl           ;;
62dnl
63dnl    crypto)
64dnl           M crypto c 47 0
65dnl           ;;
66dnl
67dnl In the MAKEDEV.md file, add a '_DEV(uniqueid, charmajor, blockmajor)'
68dnl entry:
69dnl
70dnl   _DEV(sca, 24, 42)
71dnl   _DEV(cry, 47)
72dnl
73dnl Final step is to use the 'target/twrget' macros to have the 'all)' target
74dnl generate one or more device(s).  Usage of 'target/twrget' is:
75dnl      target(target_name, device_name [, append_string ] .. )
76dnl      twrget(target_name, uniqueid, device_name, [, append_string ] .. )
77dnl
78dnl        target_name   a unique name that later is used as an argument to
79dnl                      'show_target()' (which expands all devices for a
80dnl                      given 'target_name').
81dnl        uniqueid      same as 'uniqueid' above
82dnl        device_name   string representing the device to be mknod'ed
83dnl        append_string for each append_string, `device_name' is prepended
84dnl
85dnl Note: 'target(a,b,c)' is equivalent to 'twrget(a,b,b,c)'
86dnl
87dnl
88dnl For a short example:
89dnl
90dnl   target(all, std)dnl
91dnl   target(all, sca, 0, 1, 2, 3)dnl
92dnl   twrget(all, cry, crypto)dnl
93dnl
94dnl would expand to:
95dnl
96dnl   all)
97dnl        R std sca0 sca1 sca2 sca3 crypto
98dnl        ;;
99dnl
100dnl presuming '_DEV(sca, ?, ?)' and '_DEV(std)' were in the MAKEDEV.md file.
101dnl
102dnl
103dnl Everything is 'automatically' added to 'MAKEDEV' based on whether or
104dnl not the '_DEV()' entry has a corresponding _mkdev() and __devitem()
105dnl entry in MAKEDEV.mi (this file).
106dnl
107dnl Note: be very wary of adding whitespace, carriage returns, or not
108dnl finishing a macro with ')dnl' .. otherwise, extra blank lines show up
109dnl in the output.
110dnl
111dnl TODO:
112dnl
113dnl make a 'disktgt' macro that automatically does:
114dnl disktgt(rd, {-rd-})
115dnl
116dnl	target(all,rd,0)
117dnl	target(ramd,rd,0)
118dnl	disk_q(rd)
119dnl	__devitem(rd, {-rd*-}, {-rd-})dnl
120dnl
121dnl  Note: not all devices are generated in 'all)' below. MAKEDEV.md contains
122dnl        its own extra list.
123dnl
124divert(1)dnl
125twrget(all, fdesc, fd)dnl
126target(all, st, 0, 1)dnl
127target(all, std)dnl
128target(all, raid, 0, 1, 2, 3)dnl
129target(all, ra, 0, 1, 2, 3)dnl
130target(all, rx, 0, 1)dnl
131target(all, wd, 0, 1, 2, 3)dnl
132target(all, xd, 0, 1, 2, 3)dnl
133target(all, systrace)dnl
134target(all, pctr)dnl
135target(all, pctr0)dnl
136target(all, pf)dnl
137twrget(all, cry, crypto)dnl
138target(all, apm)dnl
139target(all, acpi)dnl
140twrget(all, tth, ttyh, 0, 1)dnl
141target(all, ttyA, 0, 1)dnl
142target(all, ttyB, 0, 1, 2, 3, 4, 5)dnl
143twrget(all, attyB, ttyB, 0, 1, 2, 3, 4)dnl
144twrget(all, mac_tty0, tty0, 0, 1)dnl
145twrget(all, tzs, tty, a, b, c, d)dnl
146twrget(all, czs, cua, a, b, c, d)dnl
147target(all, ttyc, 0, 1, 2, 3, 4, 5, 6, 7)dnl
148twrget(all, com, tty0, 0, 1, 2, 3)dnl
149target(all, lkm)dnl
150twrget(all, mmcl, mmclock)dnl
151target(all, lpt, 0, 1, 2)dnl
152twrget(all, lpt, lpa, 0, 1, 2)dnl
153target(all, joy, 0, 1)dnl
154twrget(all, rnd, random)dnl
155target(all, uk, 0)dnl
156twrget(all, vi, video, 0, 1)dnl
157twrget(all, speak, speaker)dnl
158target(all, asc, 0)dnl
159target(all, music, 0)dnl
160target(all, radio, 0)dnl
161target(all, tuner, 0)dnl
162target(all, rmidi, 0, 1, 2, 3, 4, 5, 6, 7)dnl
163target(all, uall)dnl
164target(all, iop, 0, 1)dnl
165target(all, pci, 0, 1, 2, 3)dnl
166twrget(all, wsmouse, wscons)dnl
167target(all, par, 0)dnl
168target(all, apci, 0)dnl
169target(all, ppi, 0)dnl
170target(all, local)dnl
171target(all, gpr, 0)dnl
172target(all, ptm)dnl
173target(all, hotplug)dnl
174dnl
175_mkdev(all, {-all-}, {-dnl
176show_target(all)dnl
177-})dnl
178dnl
179dnl XXX some arches use ramd, others ramdisk - needs to be fixed eventually
180__devitem(ramdisk, ramdisk, Ramdisk kernel devices,nothing)dnl
181dnl
182target(usb, usb, 0, 1, 2, 3, 4, 5, 6, 7)dnl
183target(usb, urio, 0)dnl
184twrget(usb, uscan, uscanner, 0)dnl
185target(usb, uhid, 0, 1, 2, 3)dnl
186target(usb, ulpt, 0, 1)dnl
187target(usb, ugen, 0, 1)dnl
188target(usb, ttyU, 0, 1, 2, 3)dnl
189dnl
190__devitem({-uall-}, uall, All USB devices,usb)dnl
191_mkdev(uall, uall, {-dnl
192show_target({-usb-})dnl
193-})dnl
194__devtitle(tap, Tapes)dnl
195__devitem(tz, tz*, {-DEC TK50 cartridge tape drives-})dnl
196__devitem(st, {-st*-}, SCSI tape drives)dnl
197_mkdev(st, st*, {-n=Mult($U, 16)
198	for pre in " " n e en
199	do
200		M ${pre}st$U	b major_st_b $n 660 operator
201		M ${pre}rst$U	c major_st_c $n 660 operator
202		n=Add($n, 1)
203	done-})dnl
204__devitem(mt, mt*, (Magnetic) 9-track reel tape drives)dnl
205__devtitle(dis, Disks)dnl
206__devitem(sd, {-sd*-}, {-SCSI disks{-,-} including flopticals-})dnl
207__devitem(cd, {-cd*-}, ATAPI and SCSI CD-ROM drives)dnl
208_mkdev(cd, cd*, {-dodisk2 cd $U major_cd_b major_cd_c $U 0{--}ifstep(cd)-})dnl
209__devitem(bthub, {-bthub*-}, Bluetooth Hubs)dnl
210_mcdev(bthub, bthub*, bthub, {-major_bthub_c-})dnl
211__devitem(ch, {-ch*-}, SCSI media changers)dnl
212_mcdev(ch, ch*, ch, {-major_ch_c-}, 660, operator)dnl
213__devitem(uk, uk*, Unknown SCSI devices)dnl
214_mcdev(uk, uk*, uk, {-major_uk_c-}, 640, operator)dnl
215dnl XXX see ramdisk above
216__devitem(ramd, ramdisk, Ramdisk kernel devices,nothing)dnl
217dnl
218_mkdev(ramd, ramdisk, {-dnl
219show_target(ramd)dnl
220-})dnl
221dnl
222target(ramd, std)dnl
223target(ramd, bpf, 0)dnl
224twrget(ramd, com, tty0, 0, 1)dnl
225target(ramd, sd, 0, 1, 2, 3, 4)dnl
226target(ramd, wd, 0, 1, 2, 3, 4)dnl
227target(ramd, st, 0, 1)dnl
228target(ramd, cd, 0, 1)dnl
229target(ramd, rd, 0)dnl
230dnl
231__devitem(rd, {-rd*-}, quote(rd)pseudo-disks)dnl
232_mkdev(rd, rd*, {-dodisk2 rd $U major_rd_b major_rd_c $U 0{--}ifstep(rd)-})dnl
233__devitem(xd, xd*, Xylogic 753/7053 disks)dnl
234__devitem(xy, xy*, {-	Xylogic 450/451 disks-})dnl
235__devitem(flo, {-fd*-}, {-Floppy disk drives (3 1/2"{-,-} 5 1/4")-},fd)dnl
236_mkdev(flo, fd*,
237{-typnam=$U${i#fd[01]*}
238	case $typnam in
239	0|1)	typnum=0;; # no type specified, assume A
240	*A)	typnum=0; typnam=0;;
241	*B)	typnum=1;;
242	*C)	typnum=2;;
243	*D)	typnum=3;;
244	*E)	typnum=4;;
245	*F)	typnum=5;;
246	*G)	typnum=6;;
247	*H)	typnum=7;;
248	*)	echo bad type $typnam for $i; exit 1;;
249	esac
250	case $U in
251	0|1)	blk=major_flo_b; chr=major_flo_c;;
252	*)	echo bad unit $U for $i; exit 1;;
253	esac
254	nam=fd${typnam}
255	n=Add(Mult($U, 128), Mult($typnum, 16))
256	M ${nam}a	b $blk $n 640 operator
257	M ${nam}b	b $blk Add($n, 1) 640 operator
258	M ${nam}c	b $blk Add($n, 2) 640 operator
259	M ${nam}i	b $blk Add($n, 8) 640 operator
260	M r${nam}a	c $chr $n 640 operator
261	M r${nam}b	c $chr Add($n, 1) 640 operator
262	M r${nam}c	c $chr Add($n, 2) 640 operator
263	M r${nam}i	c $chr Add($n, 8) 640 operator-}, 664)dnl
264__devitem(iop, iop*, I2O controller devices)dnl
265_mcdev(iop, iop*, iop, {-major_iop_c-}, 660)dnl
266__devitem(wd, {-wd*-}, {-quote(winchester)disk drives (ST506{-,-} IDE{-,-} ESDI{-,-} RLL{-,-} ...)-})dnl
267__devitem(raid, raid*, RAIDframe disk devices)dnl
268__devitem(vnd, vnd*, quote(file)pseudo-disk devices)dnl
269_mkdev(vnd, vnd*, {-dodisk vnd $U major_vnd_b major_vnd_c $U 0{--}ifstep(vnd)-})dnl
270__devitem(ra, ra*, {-MSCP disks-})dnl
271__devitem(rx, rx*, {-RX02 floppy disks-})dnl
272dnl
273dnl For normal disk devices, add a disk_q entry; anything else define like
274dnl the rest (such as vnd above).
275dnl
276disk_q({-hd-})dnl
277disk_q({-ra-})dnl
278disk_q({-raid-})dnl
279disk_q({-rx-})dnl
280disk_q({-sd-})dnl
281disk_q({-xy-})dnl
282disk_q({-xd-})dnl
283disk_q({-wd-})dnl
284_mkdev({-disks-}, {-undefine({-C_ase-})show_disks()undefine({-C_ase-})-},
285{-case $i in
286show_disks2()dnl
287	esac-})dnl
288__mkdev({-disks-}){--}dnl
289dnl
290__devtitle(cons, Console ports)dnl
291__devitem(wscons, wscons, Minimal wscons devices)dnl
292twrget(wscons, wscons, ttyC, cfg, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b)dnl
293target(wscons, wsmux)dnl
294target(wscons, wskbd, 0, 1, 2, 3)dnl
295target(wscons, wsmouse, 0, 1, 2, 3)dnl
296_mkdev({-wscons-}, {-wscons-}, {-dnl
297show_target(wscons)dnl
298-})dnl
299__devitem(wsdisp, ttyC-J*, wscons display devices,wsdisplay)dnl
300_mkdev({-wsdisp-}, tty[C-J]*, {-U=${i##tty[C-J]}
301	case $i in
302	ttyC*) n=C m=expr(0*256);;
303	ttyD*) n=D m=expr(1*256);;
304	ttyE*) n=E m=expr(2*256);;
305	ttyF*) n=F m=expr(3*256);;
306	ttyG*) n=G m=expr(4*256);;
307	ttyH*) n=H m=expr(5*256);;
308	ttyI*) n=I m=expr(6*256);;
309	ttyJ*) n=J m=expr(7*256);;
310	esac
311	case $U in
312	[0-9a-f]) M tty$n$U c major_wsdisp_c Add(16#$U, $m) 600;;
313	cfg) M tty${n}cfg c major_wsdisp_c Add(255,$m) 600;;
314	*) echo bad unit $U for $i; exit 1;;
315	esac-})dnl
316__devitem(wskbd, wskbd*, wscons keyboards)dnl
317dnl XXX wskbd[0-9]* instead of wskbd* in case this appears before
318dnl XXX ``wsmux|wsmouse|wskbd'' in the final MAKEDEV.
319_mkdev(wskbd, wskbd[0-9]*, {-M wskbd$U c major_wskbd_c $U 600-})dnl
320__devitem(wsmux, wsmux, wscons keyboard/mouse mux devices)dnl
321_mkdev(wsmux, wsmux|wsmouse|wskbd, {-M wsmouse c major_wsmux_c 0 600
322	M wskbd c major_wsmux_c 1 600-})dnl
323__devitem(pcons, console, PROM console)dnl
324__devtitle(point, Pointing devices)dnl
325__devitem(wsmouse, wsmouse*, wscons mice)dnl
326dnl XXX wsmouse[0-9]* instead of wsmouse* in case this appears before
327dnl XXX ``wsmux|wsmouse|wskbd'' in the final MAKEDEV.
328_mkdev(wsmouse, wsmouse[0-9]*, {-M wsmouse$U c major_wsmouse_c $U 600-})dnl
329__devtitle(pty, Pseudo terminals)dnl
330__devitem(ptm, ptm, pty master device)dnl
331_mkdev(ptm, ptm, {-M ptm c major_ptm_c 0 666-})dnl
332__devitem(tty, tty*, Set of 62 slave pseudo terminals)dnl
333__devitem(pty, pty*, Set of 62 master pseudo terminals)dnl
334_mkdev(pty, pty*, {-if [ $U -gt 15 ]; then
335		echo bad unit for pty in: $i
336		continue
337	fi
338	set -A letters p q r s t u v w x y z P Q R S T
339	set -A suffixes 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q \
340	    r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X \
341	    Y Z
342
343	name=${letters[$U]}
344	n=0
345	while [ $n -lt 62 ]
346	do
347		nam=$name${suffixes[$n]}
348		off=Mult($U, 62)
349		M tty$nam c major_tty_c Add($off, $n)
350		M pty$nam c major_pty_c Add($off, $n)
351		n=Add($n, 1)
352	done-})dnl
353__devitem(dc, dc*, {-4 channel serial interface (keyboard{-,-} mouse{-,-}modem{-,-} printer)-})dnl
354__devitem(drm, drm*, {-Direct Rendering Manager-})dnl
355_mcdev({-drm-}, drm*, {-drm-}, {-major_drm_c-}, 660)dnl
356__devtitle(prn, Printers)dnl
357__devitem(lpt, lpt*, IEEE 1284 centronics printer)dnl
358_mkdev(lpt, lpt*|lpa*,
359{-case $i in
360	lpt*) n=lpt f=0;;
361	lpa*) n=lpa f=128;;
362	esac
363	M $n$U c major_lpt_c Add($U, $f) 600-})dnl
364__devitem(lpa, lpa*, Polled printer port,lpt)dnl
365__devitem(ppi, ppi*, HP-IB plotters)dnl
366__devtitle({-usb-}, USB devices)dnl
367__devitem({-usb-}, usb*, Bus control devices used by usbd for attach/detach)dnl
368_mkdev({-usb-}, usb*, {-[ "$i" = "usb" ] && u= || u=$U
369	M usb$u c major_usb_c $U 660-})dnl
370__devitem(uhid, uhid*, Generic HID devices)dnl
371_mcdev({-uhid-}, uhid*, {-uhid-}, {-major_uhid_c-}, 660)dnl
372__devitem(ulpt, ulpt*, Printer devices)dnl
373_mcdev({-ulpt-}, ulpt*, {-ulpt-}, {-major_ulpt_c-}, 660)dnl
374__devitem(ttyU, ttyU*, USB serial ports,ucom)dnl
375_mkdev({-ttyU-}, {-ttyU[0-9a-zA-Z]-}, {-U=${i#ttyU*}
376	o=$(alph2d $U)
377	M ttyU$U c major_ttyU_c $o 660 dialer uucp
378	M cuaU$U c major_ttyU_c Add($o, 128) 660 dialer uucp-})dnl
379__devitem(urio, urio*, Diamond Multimedia Rio 500)dnl
380_mcdev({-urio-}, urio*, {-urio-}, {-major_urio_c-}, 660)dnl
381__devitem(uscan, uscanner*, Scanners,uscanner)dnl
382_mcdev({-uscan-}, uscanner*, {-uscanner-}, {-major_uscan_c-}, 660)dnl
383__devitem(ugen, ugen*, Generic USB devices)dnl
384_mkdev(ugen, ugen*, {-n=Mult($U, 16)
385	for j in 0{0,1,2,3,4,5,6,7,8,9} 1{0,1,2,3,4,5}
386	do
387		M ugen$U.$j c major_ugen_c Add($n, 10#$j) 660
388	done-})dnl
389__devtitle(call, Call units)dnl
390__devtitle(term, Terminal ports)dnl
391__devitem(dca, dca*, HP200/300 single port serial interface)dnl
392__devitem(dcm, dcm*, HP200/300 4 port serial mux interface)dnl
393__devitem(apci, apci*, HP400 4 port serial mux interface)dnl
394__devitem({-com-}, {-tty[0-7][0-9a-f]-}, NS16x50 serial ports)dnl
395_mkdev(com, {-tty[0-7][0-9a-f]-}, {-U=${i#tty*}
396	o=$(h2d $U)
397	M tty$U c major_com_c $o 660 dialer uucp
398	M cua$U c major_com_c Add($o, 128) 660 dialer uucp-})dnl
399__devitem(ttyc, ttyc*, Cyclades serial ports,cy)dnl
400__devitem(tzs, tty[a-z]*, Zilog 8530 Serial Port,zs)dnl
401_mkdev(tzs, {-tty[a-z]-}, {-u=${i#tty*}
402	case $u in
403	a) n=0 ;;
404	b) n=1 ;;
405	c) n=4 ;;
406	d) n=5 ;;
407	*) echo unknown tty device $i ;;
408	esac
409	M tty$u c major_tzs_c $n 660 dialer uucp-})dnl
410__devitem(tth, ttyh*, Sab82532 serial devices,sab)dnl
411_mkdev(tth, ttyh*, {-M ttyh$U c major_tth_c $U 660 dialer uucp-})dnl
412__devitem(czs, cua[a-z]*, Zilog 8530 Serial Port,zs)dnl
413_mkdev(czs, cua[a-z], {-u=${i#cua*}
414	case $u in
415	a) n=0 ;;
416	b) n=1 ;;
417	c) n=4 ;;
418	d) n=5 ;;
419	*) echo unknown cua device $i ;;
420	esac
421	M cua$u c major_czs_c Add($n, 128) 660 dialer uucp-})dnl
422__devitem(tty0, tty00, Standard serial port,com)dnl
423__devitem(mac_tty0, tty00, Standard serial port,zsc)dnl
424__devitem(ttyz, tty[a-d], On-board zs serial ports,zs)dnl
425__devitem(cuaz, cua[a-d], On-board zs serial ports,zs)dnl
426__devitem(ttyB, ttyB?, DEC 3000 ZS8530 ("scc") serial ports,scc)dnl
427__devitem(scc, scc*, 82530 serial interface,scc)dnl
428__devtitle(spec, Special purpose devices)dnl
429_mkdev(apm, apm*, {-M apm	c major_apm_c 0 644
430	M apmctl	c major_apm_c 8 644-})dnl
431_mkdev(acpi, acpi*, {-M acpi	c major_acpi_c 0 644-})dnl
432__devitem(pctr, pctr*, PC Performance Tuning Register access device)dnl
433_mkdev(pctr, pctr, {-M pctr c major_pctr_c 0 644-})dnl
434__devitem(systrace, systrace*, System call tracing device)dnl
435_mkdev(systrace, systrace, {-M systrace c major_systrace_c 0 644-})dnl
436__devitem(au, audio*, Audio devices,audio)dnl
437_mkdev(au, audio*, {-M sound$U	c major_au_c $U
438	M mixer$U	c major_au_c Add($U, 16)
439	M audio$U	c major_au_c Add($U, 128)
440	M audioctl$U	c major_au_c Add($U, 192)
441	MKlist[${#MKlist[*]}]=";[ -e audio ] || ln -s audio$U audio"
442	MKlist[${#MKlist[*]}]=";[ -e mixer ] || ln -s mixer$U mixer"
443	MKlist[${#MKlist[*]}]=";[ -e sound ] || ln -s sound$U sound"
444	MKlist[${#MKlist[*]}]=";[ -e audioctl ] || ln -s audioctl$U audioctl"-})dnl
445__devitem(vi, video*, Video V4L2 devices,video)dnl
446_mkdev(vi, video*, {-M video$U  c major_vi_c $U
447	MKlist[${#MKlist[*]}]=";[ -e video ] || ln -s video$U video"-})dnl
448__devitem(asc, asc*, ASC Audio device)dnl
449_mkdev(asc, asc*, {-M asc$U major_asc_c 0-})dnl
450__devitem(bio, bio, {-ioctl tunnel pseudo-device-})dnl
451_mkdev(bio, bio, {-M bio c major_bio_c 0 600-})dnl
452__devitem(music, music*, MIDI sequencer,music)dnl
453_mkdev(music, music*, {-M music$U     c major_music_c $U
454	M sequencer$U c major_music_c Add($U, 128)
455	MKlist[${#MKlist[*]}]=";[ -e music ] || ln -s music$U music"
456	MKlist[${#MKlist[*]}]=";[ -e sequencer ] || ln -s sequencer$U sequencer"-})dnl
457__devitem(radio, radio*, FM tuner devices)dnl
458_mkdev(radio, radio*, {-M radio$U     c major_radio_c $U
459	MKlist[${#MKlist[*]}]=";[ -e radio ] || ln -s radio$U radio"-})dnl
460__devitem(fdesc, fd, fd/* nodes, fd)dnl
461_mkdev(fdesc, fd, {-RMlist[${#RMlist[*]}]=";mkdir -p fd;rm -f" n=0
462	while [ $n -lt 64 ];do M fd/$n c major_fdesc_c $n;n=Add($n, 1);done
463	MKlist[${#MKlist[*]}]=";chmod 555 fd"-})dnl
464__devitem(oppr, openprom,PROM settings,openprom)dnl
465_cdev(oppr, openprom, 70, 0)dnl
466__devitem(cry, crypto, Hardware crypto access driver,crypto)dnl
467_mkdev(cry, crypto, {-M crypto c major_cry_c-} 0)dnl
468__devitem(pf, pf*, Packet Filter)dnl
469_mkdev(pf, {-pf*-}, {-M pf c major_pf_c 0 600-})dnl
470__devitem(bpf, bpf*, Berkeley Packet Filter)dnl
471_mkdev(bpf, {-bpf*-}, {-M bpf$U c major_bpf_c $U 600-}, 600)dnl
472_mkdev(tun, {-tun*-}, {-M tun$U c major_tun_c $U 600-}, 600)dnl
473__devitem(speak, speaker, PC speaker,spkr)dnl
474_mkdev(speak, speaker, {-M speaker c major_speak_c 0 600-})dnl
475__devitem(lkm, lkm, Loadable kernel modules interface)dnl
476_cdev(lkm, lkm, {-major_lkm_c-}, 0, 640, _lkm)dnl
477__devitem(tun, tun*, Network tunnel driver)dnl
478__devitem(rnd, *random, In-kernel random data source,random)dnl
479_mkdev(rnd, *random, {-n=0
480	for pre in " " s u a
481	do
482		M ${pre}random c major_rnd_c $n 644
483		n=Add($n, 1)
484	done-}, 644)dnl
485__devitem(joy, joy*, Joystick driver)dnl
486_mcdev(joy, joy*, joy, {-major_joy_c-}, 666)dnl
487__devitem(mag, magma*, Magma multiport cards,magma)dnl
488__devitem(bppmag, bppmag[mno], Magma parallel port,magma)dnl
489__devitem(spif, spif*, quote(spif)multiport cards)dnl
490__devitem(bppsp, bpp[jkl], quote(spif)parallel port,spif)dnl
491_mkdev(mag, magma*, {-case $U in
492	0)	offset=0  nam=m;;
493	1)	offset=16 nam=n;;
494	2)	offset=32 nam=o;;
495	*)	echo "bad unit for $i: $U"; exit 127;;
496	esac
497	offset=Mult($U, 64)
498	n=0
499	while [ $n -lt 16 ]
500	do
501		name=${nam}`hex $n`
502		M tty$name c major_mag_c Add($offset, $n) 660 dialer uucp
503		n=Add($n, 1)
504	done
505	M bpp${nam}0 c major_bppmag_c Add($offset, 0) 600
506	M bpp${nam}1 c major_bppmag_c Add($offset, 1) 600-})dnl
507_mkdev(spif, spif*, {-case $U in
508	0)	offset=0  nam=j;;
509	1)	offset=16 nam=k;;
510	2)	offset=32 nam=l;;
511	*)	echo "bad unit for $i: $U"; exit 127;;
512	esac
513	offset=Mult($U, 64)
514	n=0
515	while [ $n -lt 8 ]
516	do
517		name=${nam}`hex $n`
518		M tty$name c major_spif_c Add($offset, $n) 660 dialer uucp
519		n=Add($n, 1)
520	done
521	M bpp${nam}0 c major_bppsp_c Add($offset, 0) 600-})dnl
522__devitem(bpp, bpp*, Parallel port)dnl
523_mkdev(bpp, {-bpp*-}, {-M bpp$U c major_bpp_c $U 600-}, 600)dnl
524__devitem(nnpfs, nnpfs*, NNPFS filesystem node, mount_nnpfs 8)dnl
525_mcdev(nnpfs, nnpfs*, nnpfs, {-major_nnpfs_c-}, 600)dnl
526__devitem(vscsi, vscsi*, Virtual SCSI controller, vscsi 8)dnl
527_mcdev(vscsi, vscsi*, vscsi, {-major_vscsi_c-}, 600)dnl
528__devitem(rmidi, rmidi*, Raw MIDI devices,midi)dnl
529_mcdev(rmidi, rmidi*, rmidi, {-major_rmidi_c-}, 666)dnl
530__devitem(diskmap, diskmap, Disk mapper, diskmap)dnl
531_mkdev(diskmap, diskmap, {-M diskmap c major_diskmap_c 0 640 operator-})dnl
532__devitem(pppx, pppx*, PPP Multiplexer, pppx 4)dnl
533_mcdev(pppx, pppx*, pppx, {-major_pppx_c-}, 600)dnl
534__devtitle(plat, Platform-specific devices)dnl
535__devitem(bktr, bktr*, Video frame grabbers)dnl
536_mcdev(bktr, bktr*, bktr, {-major_bktr_c-}, 644)dnl
537__devitem(tuner, tuner*, Tuner devices, bktr)dnl
538_mkdev(tuner, tuner*, {-M tuner$U c major_bktr_c Add(Mult($U, 2), 16) 644-}, 644)dnl
539__devitem(pci, pci*, PCI bus devices)dnl
540_mkdev(pci, pci*, {-M pci$U	c major_pci_c $U 600
541	MKlist[${#MKlist[*]}]=";[ -h pci ] || ln -sf pci0 pci"-})dnl
542__devitem(pdc, pdc, PDC device)dnl
543__devitem(gpr, gpr*, GPR400 smartcard reader)dnl
544_mcdev(gpr, gpr*, gpr, {-major_gpr_c-})dnl
545__devitem(hotplug, hotplug, devices hot plugging)dnl
546_mkdev(hotplug, hotplug, {-M hotplug c major_hotplug_c $U 400-})dnl
547__devitem(gpio, gpio*, General Purpose Input/Output)dnl
548_mcdev(gpio, gpio*, gpio, {-major_gpio_c-}, 600)dnl
549_mkdev(local, local, {-test -s $T.local && sh $T.local-})dnl
550