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