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