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