MAKEDEV.common revision 1.113
1vers(a, {-$OpenBSD: MAKEDEV.common,v 1.113 2021/02/12 10:26:33 jsg 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, ra, 0, 1, 2, 3)dnl
129target(all, rx, 0, 1)dnl
130target(all, wd, 0, 1, 2, 3)dnl
131target(all, xd, 0, 1, 2, 3)dnl
132target(all, pctr)dnl
133target(all, pctr0)dnl
134target(all, pf)dnl
135target(all, apm)dnl
136target(all, acpi)dnl
137twrget(all, tth, ttyh, 0, 1)dnl
138target(all, ttyA, 0, 1)dnl
139twrget(all, mac_tty0, tty0, 0, 1)dnl
140twrget(all, tzs, tty, a, b, c, d)dnl
141twrget(all, czs, cua, a, b, c, d)dnl
142target(all, ttyc, 0, 1, 2, 3, 4, 5, 6, 7)dnl
143twrget(all, com, tty0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b)dnl
144twrget(all, mmcl, mmclock)dnl
145target(all, lpt, 0, 1, 2)dnl
146twrget(all, lpt, lpa, 0, 1, 2)dnl
147target(all, joy, 0, 1)dnl
148twrget(all, rnd, random)dnl
149target(all, uk, 0)dnl
150twrget(all, vi, video, 0, 1)dnl
151twrget(all, speak, speaker)dnl
152target(all, asc, 0)dnl
153target(all, radio, 0)dnl
154target(all, tuner, 0)dnl
155target(all, rmidi, 0, 1, 2, 3, 4, 5, 6, 7)dnl
156target(all, uall)dnl
157target(all, pci, 0, 1, 2, 3)dnl
158twrget(all, wsmouse, wscons)dnl
159target(all, par, 0)dnl
160target(all, apci, 0)dnl
161target(all, local)dnl
162target(all, ptm)dnl
163target(all, hotplug)dnl
164target(all, pppx)dnl
165target(all, pppac)dnl
166target(all, fuse)dnl
167target(all, vmm)dnl
168target(all, pvbus, 0, 1)dnl
169target(all, bpf)dnl
170target(all, kcov)dnl
171target(all, dt)dnl
172target(all, kstat)dnl
173dnl
174_mkdev(all, {-all-}, {-dnl
175show_target(all)dnl
176-})dnl
177dnl
178dnl XXX some arches use ramd, others ramdisk - needs to be fixed eventually
179__devitem(ramdisk, ramdisk, Ramdisk kernel devices,nothing)dnl
180dnl
181target(usb, usb, 0, 1, 2, 3, 4, 5, 6, 7)dnl
182target(usb, uhid, 0, 1, 2, 3, 4, 5, 6, 7)dnl
183twrget(usb, fido, fido)dnl
184twrget(usb, ujoy, ujoy)dnl
185target(usb, ulpt, 0, 1)dnl
186target(usb, ugen, 0, 1, 2, 3, 4, 5, 6, 7)dnl
187target(usb, ttyU, 0, 1, 2, 3)dnl
188dnl
189__devitem({-uall-}, uall, All USB devices,usb)dnl
190_mkdev(uall, uall, {-dnl
191show_target({-usb-})dnl
192-})dnl
193__devtitle(tap, Tapes)dnl
194__devitem(st, {-st*-}, SCSI tape drives)dnl
195_mkdev(st, st*, {-n=Mult($U, 16)
196	for pre in " " n e en
197	do
198		M ${pre}rst$U	c major_st_c $n 660 operator
199		n=Add($n, 1)
200	done-})dnl
201__devtitle(dis, Disks)dnl
202__devitem(sd, {-sd*-}, {-SCSI disks{-,-} including flopticals-})dnl
203__devitem(cd, {-cd*-}, ATAPI and SCSI CD-ROM drives)dnl
204_mkdev(cd, cd*, {-dodisk2 cd $U major_cd_b major_cd_c $U 0{--}ifstep(cd)-})dnl
205__devitem(fuse, fuse, Userland Filesystem, fuse 4)dnl
206_mcdev(fuse, fuse, fuse, {-major_fuse_c-}, 600)dnl
207__devitem(ch, {-ch*-}, SCSI media changers)dnl
208_mcdev(ch, ch*, ch, {-major_ch_c-}, 660, operator)dnl
209__devitem(uk, uk*, Unknown SCSI devices)dnl
210_mcdev(uk, uk*, uk, {-major_uk_c-}, 640, operator)dnl
211dnl XXX see ramdisk above
212__devitem(ramd, ramdisk, Ramdisk kernel devices,nothing)dnl
213dnl
214_mkdev(ramd, ramdisk, {-dnl
215show_target(ramd)dnl
216-})dnl
217dnl
218target(ramd, std)dnl
219target(ramd, bpf)dnl
220twrget(ramd, com, tty0, 0, 1)dnl
221target(ramd, sd, 0, 1, 2, 3, 4)dnl
222target(ramd, wd, 0, 1, 2, 3, 4)dnl
223target(ramd, st, 0, 1)dnl
224target(ramd, cd, 0, 1)dnl
225target(ramd, rd, 0)dnl
226dnl
227__devitem(rd, {-rd*-}, quote(rd)pseudo-disks)dnl
228_mkdev(rd, rd*, {-dodisk2 rd $U major_rd_b major_rd_c $U 0{--}ifstep(rd)-})dnl
229__devitem(xd, xd*, Xylogic 753/7053 disks)dnl
230__devitem(xy, xy*, {-	Xylogic 450/451 disks-})dnl
231__devitem(flo, {-fd*-}, {-Floppy disk drives (3 1/2"{-,-} 5 1/4")-},fd)dnl
232_mkdev(flo, fd*,
233{-typnam=$U${i#fd[01]*}
234	case $typnam in
235	0|1)	typnum=0;; # no type specified, assume A
236	*A)	typnum=0; typnam=0;;
237	*B)	typnum=1;;
238	*C)	typnum=2;;
239	*D)	typnum=3;;
240	*E)	typnum=4;;
241	*F)	typnum=5;;
242	*G)	typnum=6;;
243	*H)	typnum=7;;
244	*)	echo bad type $typnam for $i; exit 1;;
245	esac
246	case $U in
247	0|1)	blk=major_flo_b; chr=major_flo_c;;
248	*)	echo bad unit $U for $i; exit 1;;
249	esac
250	nam=fd${typnam}
251	n=Add(Mult($U, 128), Mult($typnum, 16))
252	M ${nam}a	b $blk $n 640 operator
253	M ${nam}b	b $blk Add($n, 1) 640 operator
254	M ${nam}c	b $blk Add($n, 2) 640 operator
255	M ${nam}i	b $blk Add($n, 8) 640 operator
256	M r${nam}a	c $chr $n 640 operator
257	M r${nam}b	c $chr Add($n, 1) 640 operator
258	M r${nam}c	c $chr Add($n, 2) 640 operator
259	M r${nam}i	c $chr Add($n, 8) 640 operator-}, 664)dnl
260__devitem(wd, {-wd*-}, {-quote(winchester)disk drives (ST506{-,-} IDE{-,-} ESDI{-,-} RLL{-,-} ...)-})dnl
261__devitem(vnd, vnd*, quote(file)pseudo-disk devices)dnl
262_mkdev(vnd, vnd*, {-dodisk vnd $U major_vnd_b major_vnd_c $U 0{--}ifstep(vnd)-})dnl
263__devitem(ra, ra*, {-MSCP disks-})dnl
264__devitem(rx, rx*, {-RX02 floppy disks-})dnl
265dnl
266dnl For normal disk devices, add a disk_q entry; anything else define like
267dnl the rest (such as vnd above).
268dnl
269disk_q({-hd-})dnl
270disk_q({-ra-})dnl
271disk_q({-rx-})dnl
272disk_q({-sd-})dnl
273disk_q({-xy-})dnl
274disk_q({-xd-})dnl
275disk_q({-wd-})dnl
276_mkdev({-disks-}, {-undefine({-C_ase-})show_disks()undefine({-C_ase-})-},
277{-case $i in
278show_disks2()dnl
279	esac-})dnl
280__mkdev({-disks-}){--}dnl
281dnl
282__devtitle(cons, Console ports)dnl
283__devitem(wscons, wscons, Minimal wscons devices)dnl
284twrget(wscons, wscons, ttyC, cfg, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b)dnl
285target(wscons, wsmux)dnl
286target(wscons, wskbd, 0, 1, 2, 3)dnl
287target(wscons, wsmouse, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9)dnl
288_mkdev({-wscons-}, {-wscons-}, {-dnl
289show_target(wscons)dnl
290-})dnl
291__devitem(wsdisp, ttyC-J*, wscons display devices,wsdisplay)dnl
292_mkdev({-wsdisp-}, tty[C-J]*, {-U=${i##tty[C-J]}
293	case $i in
294	ttyC*) n=C m=expr(0*256);;
295	ttyD*) n=D m=expr(1*256);;
296	ttyE*) n=E m=expr(2*256);;
297	ttyF*) n=F m=expr(3*256);;
298	ttyG*) n=G m=expr(4*256);;
299	ttyH*) n=H m=expr(5*256);;
300	ttyI*) n=I m=expr(6*256);;
301	ttyJ*) n=J m=expr(7*256);;
302	esac
303	case $U in
304	[0-9a-f]) M tty$n$U c major_wsdisp_c Add(16#$U, $m) 600;;
305	cfg) M tty${n}cfg c major_wsdisp_c Add(255,$m) 600;;
306	*) echo bad unit $U for $i; exit 1;;
307	esac-})dnl
308__devitem(wskbd, wskbd*, wscons keyboards)dnl
309dnl XXX wskbd[0-9]* instead of wskbd* in case this appears before
310dnl XXX ``wsmux|wsmouse|wskbd'' in the final MAKEDEV.
311_mkdev(wskbd, wskbd[0-9]*, {-M wskbd$U c major_wskbd_c $U 600-})dnl
312__devitem(wsmux, wsmux, wscons keyboard/mouse mux devices)dnl
313_mkdev(wsmux, wsmux|wsmouse|wskbd, {-M wsmouse c major_wsmux_c 0 600
314	M wskbd c major_wsmux_c 1 600-})dnl
315__devitem(pcons, console, PROM console)dnl
316__devtitle(point, Pointing devices)dnl
317__devitem(wsmouse, wsmouse*, wscons mice)dnl
318dnl XXX wsmouse[0-9]* instead of wsmouse* in case this appears before
319dnl XXX ``wsmux|wsmouse|wskbd'' in the final MAKEDEV.
320_mkdev(wsmouse, wsmouse[0-9]*, {-M wsmouse$U c major_wsmouse_c $U 600-})dnl
321__devtitle(pty, Pseudo terminals)dnl
322__devitem(ptm, ptm, pty master device)dnl
323_mkdev(ptm, ptm, {-M ptm c major_ptm_c 0 666-})dnl
324__devitem(tty, tty*, Set of 62 slave pseudo terminals)dnl
325__devitem(pty, pty*, Set of 62 master pseudo terminals)dnl
326_mkdev(pty, pty*, {-if [ $U -gt 15 ]; then
327		echo bad unit for pty in: $i
328		continue
329	fi
330	set -A letters p q r s t u v w x y z P Q R S T
331	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 \
332	    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 \
333	    Y Z
334
335	name=${letters[$U]}
336	n=0
337	while [ $n -lt 62 ]
338	do
339		nam=$name${suffixes[$n]}
340		off=Mult($U, 62)
341		M tty$nam c major_tty_c Add($off, $n)
342		M pty$nam c major_pty_c Add($off, $n)
343		n=Add($n, 1)
344	done-})dnl
345__devitem(dc, dc*, {-4 channel serial interface (keyboard{-,-} mouse{-,-}modem{-,-} printer)-})dnl
346__devitem(dri, dri, Direct Rendering Infrastructure, drm)dnl
347_mkdev(dri, dri, {-RMlist[${#RMlist[*]}]=";mkdir -p dri;rm -f"
348	n=0
349	while [ $n -lt 4 ]
350	do
351		M dri/card$n c major_dri_c $n 600
352		r=Add($n, 128)
353		M dri/renderD$r c major_dri_c $r 600
354		n=Add($n, 1)
355	done
356	MKlist[${#MKlist[*]}]=";chmod 555 dri"-})dnl
357__devitem(drm, drm*, {-Direct Rendering Manager-})dnl
358_mkdev(drm, drm*, {-M drm$U c major_drm_c $U 600
359	r=Add($U, 128)
360	M drmR$r c major_drm_c $r 600-})dnl
361__devtitle(prn, Printers)dnl
362__devitem(lpt, lpt*, IEEE 1284 centronics printer)dnl
363_mkdev(lpt, lpt*|lpa*,
364{-case $i in
365	lpt*) n=lpt f=0;;
366	lpa*) n=lpa f=128;;
367	esac
368	M $n$U c major_lpt_c Add($U, $f) 600-})dnl
369__devitem(lpa, lpa*, Polled printer port,lpt)dnl
370__devtitle({-usb-}, USB devices)dnl
371__devitem({-usb-}, usb*, Bus control devices used by usbd for attach/detach)dnl
372_mkdev({-usb-}, usb*, {-[ "$i" = "usb" ] && u= || u=$U
373	M usb$u c major_usb_c $U 640-})dnl
374__devitem(uhid, uhid*, Generic HID devices)dnl
375_mcdev({-uhid-}, uhid*, {-uhid-}, {-major_uhid_c-}, 600)dnl
376__devitem(fido, fido, fido/* nodes, fido)dnl
377_mkdev(fido, fido, {-RMlist[${#RMlist[*]}]=";mkdir -p fido;rm -f" n=0
378	while [ $n -lt 4 ];do M fido/$n c major_fido_c $n 666;n=Add($n, 1);done
379	MKlist[${#MKlist[*]}]=";chmod 555 fido"-})dnl
380__devitem(ujoy, ujoy, ujoy/* nodes, ujoy)dnl
381_mkdev(ujoy, ujoy, {-RMlist[${#RMlist[*]}]=";mkdir -p ujoy;rm -f" n=0
382	while [ $n -lt 4 ];do M ujoy/$n c major_ujoy_c $n 444;n=Add($n, 1);done
383	MKlist[${#MKlist[*]}]=";chmod 555 ujoy"-})dnl
384__devitem(ulpt, ulpt*, Printer devices)dnl
385_mcdev({-ulpt-}, ulpt*, {-ulpt-}, {-major_ulpt_c-}, 600)dnl
386__devitem(ttyU, ttyU*, USB serial ports,ucom)dnl
387_mkdev({-ttyU-}, {-ttyU[0-9a-zA-Z]-}, {-U=${i#ttyU*}
388	o=$(alph2d $U)
389	M ttyU$U c major_ttyU_c $o 660 dialer root
390	M cuaU$U c major_ttyU_c Add($o, 128) 660 dialer root-})dnl
391__devitem(ugen, ugen*, Generic USB devices)dnl
392_mkdev(ugen, ugen*, {-n=Mult($U, 16)
393	for j in 0{0,1,2,3,4,5,6,7,8,9} 1{0,1,2,3,4,5}
394	do
395		M ugen$U.$j c major_ugen_c Add($n, 10#$j) 600
396	done-})dnl
397__devtitle(call, Call units)dnl
398__devtitle(term, Terminal ports)dnl
399__devitem(dca, dca*, HP200/300 single port serial interface)dnl
400__devitem(dcm, dcm*, HP200/300 4 port serial mux interface)dnl
401__devitem(apci, apci*, HP400 4 port serial mux interface)dnl
402__devitem({-com-}, {-tty[0-7][0-9a-f]-}, NS16x50 serial ports)dnl
403_mkdev(com, {-tty[0-7][0-9a-f]-}, {-U=${i#tty*}
404	o=$(h2d $U)
405	M tty$U c major_com_c $o 660 dialer root
406	M cua$U c major_com_c Add($o, 128) 660 dialer root-})dnl
407__devitem(ttyc, ttyc*, Cyclades serial ports,cy)dnl
408__devitem(ttyVI, ttyVI*, Virtio serial ports,viocon)dnl
409_mkdev(ttyVI, ttyVI*, {-M ttyVI$U c major_ttyVI_c $U 660 dialer root-})dnl
410__devitem(tzs, tty[a-z]*, Zilog 8530 Serial Port,zs)dnl
411_mkdev(tzs, {-tty[a-z]-}, {-u=${i#tty*}
412	case $u in
413	a) n=0 ;;
414	b) n=1 ;;
415	c) n=4 ;;
416	d) n=5 ;;
417	*) echo unknown tty device $i ;;
418	esac
419	M tty$u c major_tzs_c $n 660 dialer root-})dnl
420__devitem(tth, ttyh*, Sab82532 serial devices,sab)dnl
421_mkdev(tth, ttyh*, {-M ttyh$U c major_tth_c $U 660 dialer root-})dnl
422__devitem(czs, cua[a-z]*, Zilog 8530 Serial Port,zs)dnl
423_mkdev(czs, cua[a-z], {-u=${i#cua*}
424	case $u in
425	a) n=0 ;;
426	b) n=1 ;;
427	c) n=4 ;;
428	d) n=5 ;;
429	*) echo unknown cua device $i ;;
430	esac
431	M cua$u c major_czs_c Add($n, 128) 660 dialer root-})dnl
432__devitem(tty0, tty00, Standard serial port,com)dnl
433__devitem(mac_tty0, tty00, Standard serial port,zsc)dnl
434__devitem(ttyz, tty[a-d], On-board zs serial ports,zs)dnl
435__devitem(cuaz, cua[a-d], On-board zs serial ports,zs)dnl
436__devitem(ttyB, ttyB*, DEC 3000 serial ports,zs)dnl
437__devtitle(spec, Special purpose devices)dnl
438_mkdev(apm, apm*, {-M apm	c major_apm_c 0 644
439	M apmctl	c major_apm_c 8 644-})dnl
440_mkdev(acpi, acpi*, {-M acpi	c major_acpi_c 0 644-})dnl
441__devitem(pctr, pctr*, PC Performance Tuning Register access device)dnl
442_mkdev(pctr, pctr, {-M pctr c major_pctr_c 0 644-})dnl
443__devitem(au, audio*, Audio devices,audio)dnl
444_mkdev(au, audio*, {-M audio$U	c major_au_c $U 660 _sndiop
445	M audioctl$U	c major_au_c Add($U, 192) 660 _sndiop-})dnl
446__devitem(vi, video*, Video V4L2 devices,video)dnl
447_mkdev(vi, video*, {-M video$U  c major_vi_c $U 600
448	MKlist[${#MKlist[*]}]=";[ -e video ] || ln -s video$U video"-})dnl
449__devitem(asc, asc*, ASC Audio device)dnl
450_mkdev(asc, asc*, {-M asc$U major_asc_c 0-})dnl
451__devitem(bio, bio, {-ioctl tunnel pseudo-device-})dnl
452_mkdev(bio, bio, {-M bio c major_bio_c 0 600-})dnl
453__devitem(radio, radio*, FM tuner devices)dnl
454_mkdev(radio, radio*, {-M radio$U	c major_radio_c $U
455	MKlist[${#MKlist[*]}]=";[ -e radio ] || ln -s radio$U radio"-})dnl
456__devitem(fdesc, fd, fd/* nodes, fd)dnl
457_mkdev(fdesc, fd, {-RMlist[${#RMlist[*]}]=";mkdir -p fd;rm -f" n=0
458	while [ $n -lt 64 ];do M fd/$n c major_fdesc_c $n;n=Add($n, 1);done
459	MKlist[${#MKlist[*]}]=";chmod 555 fd"-})dnl
460__devitem(oppr, openprom,PROM settings,openprom)dnl
461_cdev(oppr, openprom, 70, 0)dnl
462__devitem(pf, pf*, Packet Filter)dnl
463_mkdev(pf, {-pf*-}, {-M pf c major_pf_c 0 600-})dnl
464__devitem(bpf, bpf, Berkeley Packet Filter)dnl
465_mkdev(bpf, bpf, {-M bpf c major_bpf_c 0 600
466	M bpf0 c major_bpf_c 0 600-})dnl
467_mkdev(tun, {-tun*-}, {-M tun$U c major_tun_c $U 600-}, 600)dnl
468_mkdev(tap, {-tap*-}, {-M tap$U c major_tap_c $U 600-}, 600)dnl
469_mkdev(switch, {-switch*-}, {-M switch$U c major_switch_c $U 600-}, 600)dnl
470__devitem(speak, speaker, PC speaker,spkr)dnl
471_mkdev(speak, speaker, {-M speaker c major_speak_c 0 600-})dnl
472__devitem(tun, tun*, Network tunnel driver)dnl
473__devitem(tap, tap*, Ethernet tunnel driver)dnl
474__devitem(switch, switch*, Switch driver)dnl
475__devitem(rnd, *random, In-kernel random data source,random)dnl
476_mkdev(rnd, *random, {-M urandom c major_rnd_c 0 644
477	RMlist[${#RMlist[*]}]=random
478	MKlist[${#MKlist[*]}]=";ln -s urandom random"-})dnl
479__devitem(joy, joy*, Joystick driver)dnl
480_mcdev(joy, joy*, joy, {-major_joy_c-}, 666)dnl
481__devitem(mag, magma*, Magma multiport cards,magma)dnl
482__devitem(bppmag, bppmag[mno], Magma parallel port,magma)dnl
483__devitem(spif, spif*, quote(spif)multiport cards)dnl
484__devitem(bppsp, bpp[jkl], quote(spif)parallel port,spif)dnl
485_mkdev(mag, magma*, {-case $U in
486	0)	offset=0  nam=m;;
487	1)	offset=16 nam=n;;
488	2)	offset=32 nam=o;;
489	*)	echo "bad unit for $i: $U"; exit 127;;
490	esac
491	offset=Mult($U, 64)
492	n=0
493	while [ $n -lt 16 ]
494	do
495		name=${nam}`hex $n`
496		M tty$name c major_mag_c Add($offset, $n) 660 dialer root
497		n=Add($n, 1)
498	done
499	M bpp${nam}0 c major_bppmag_c Add($offset, 0) 600
500	M bpp${nam}1 c major_bppmag_c Add($offset, 1) 600-})dnl
501_mkdev(spif, spif*, {-case $U in
502	0)	offset=0  nam=j;;
503	1)	offset=16 nam=k;;
504	2)	offset=32 nam=l;;
505	*)	echo "bad unit for $i: $U"; exit 127;;
506	esac
507	offset=Mult($U, 64)
508	n=0
509	while [ $n -lt 8 ]
510	do
511		name=${nam}`hex $n`
512		M tty$name c major_spif_c Add($offset, $n) 660 dialer root
513		n=Add($n, 1)
514	done
515	M bpp${nam}0 c major_bppsp_c Add($offset, 0) 600-})dnl
516__devitem(bpp, bpp*, Parallel port)dnl
517_mkdev(bpp, {-bpp*-}, {-M bpp$U c major_bpp_c $U 600-}, 600)dnl
518__devitem(vscsi, vscsi*, Virtual SCSI controller, vscsi 4)dnl
519_mcdev(vscsi, vscsi*, vscsi, {-major_vscsi_c-}, 600)dnl
520__devitem(rmidi, rmidi*, Raw MIDI devices,midi)dnl
521_mcdev(rmidi, rmidi*, rmidi, {-major_rmidi_c-}, 660 _sndiop)dnl
522__devitem(diskmap, diskmap, Disk mapper, diskmap)dnl
523_mkdev(diskmap, diskmap, {-M diskmap c major_diskmap_c 0 640 operator-})dnl
524__devitem(pppx, pppx*, PPP Multiplexer, pppx 4)dnl
525_mcdev(pppx, pppx*, pppx, {-major_pppx_c-}, 600)dnl
526__devitem(pppac, pppac*, PPP Access Concentrator, pppac 4)dnl
527_mcdev(pppac, pppac*, pppac, {-major_pppac_c-}, 600)dnl
528__devtitle(plat, Platform-specific devices)dnl
529__devitem(bktr, bktr*, Video frame grabbers)dnl
530_mcdev(bktr, bktr*, bktr, {-major_bktr_c-}, 644)dnl
531__devitem(tuner, tuner*, Tuner devices, bktr)dnl
532_mkdev(tuner, tuner*, {-M tuner$U c major_bktr_c Add(Mult($U, 2), 16) 644-}, 644)dnl
533__devitem(pci, pci*, PCI bus devices)dnl
534_mkdev(pci, pci*, {-M pci$U	c major_pci_c $U 600
535	MKlist[${#MKlist[*]}]=";[ -h pci ] || ln -sf pci0 pci"-})dnl
536__devitem(pdc, pdc, PDC device)dnl
537__devitem(hotplug, hotplug, devices hot plugging)dnl
538_mkdev(hotplug, hotplug, {-M hotplug c major_hotplug_c $U 400-})dnl
539__devitem(ipmi, ipmi*, IPMI BMC access)dnl
540_mkdev(ipmi, ipmi*, {-M ipmi$U c major_ipmi_c $U 600-})dnl
541__devitem(gpio, gpio*, General Purpose Input/Output)dnl
542_mcdev(gpio, gpio*, gpio, {-major_gpio_c-}, 600)dnl
543__devitem(vmm, vmm, Virtual Machine Monitor)dnl
544_mkdev(vmm, vmm, {-M vmm c major_vmm_c 0 600-})dnl
545__devitem(pvbus, pvbus*, paravirtual device tree root)dnl
546_mkdev(pvbus, {-pvbus*-}, {-M pvbus$U c major_pvbus_c $U 640-}, 640)dnl
547_mkdev(local, local, {-test -s $T.local && sh $T.local-})dnl
548__devitem(kcov, kcov, Kernel code coverage tracing)dnl
549_mkdev(kcov, kcov, {-M kcov c major_kcov_c 0 600-})dnl
550__devitem(dt, dt, Dynamic Tracer)dnl
551_mkdev(dt, dt, {-M dt c major_dt_c 0 600-})dnl
552__devitem(kstat, kstat, Kernel Statistics)dnl
553_mkdev(kstat, kstat, {-M kstat c major_kstat_c 0 640-})dnl
554