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