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