MAKEDEV.common revision 1.19
1vers(a, {-$OpenBSD: MAKEDEV.common,v 1.19 2005/06/29 18:23:26 todd Exp $-})dnl
2divert(1)dnl
3dnl
4dnl Common device definitions.
5dnl
6dnl This file contains the MI device definitions (as well as some MD
7dnl definitions not cleaned up yet...)
8dnl
9dnl Diversions:  (upon termination, concatenated output queues)
10dnl
11dnl 0 - very top
12dnl 1 - descriptions of devices
13dnl 2 - init of script, function definitions, etc
14dnl 3 - beginning of global recursive R() function
15dnl 7 - body of MAKEDEV, device creations, etc
16dnl 9 - end
17dnl
18dnl Diversions 2, 3 and 7 are not filled when generating the manual page.
19dnl
20dnl HOW TO ADD A DEVICE:
21dnl
22dnl In this file, you must use at least two macros:
23dnl
24dnl  Use '__devitem(uniqueid, name-pattern, description)' to create an entry
25dnl  in the description at the top of the generated MAKEDEV file:
26dnl
27dnl    __devitem(sca, sca*, Sugar Generic device)dnl
28dnl    __devitem(cry, crypto, hardware crypto access driver)dnl
29dnl
30dnl  This is ultimately shown as:
31dnl
32dnl    #  sca*   Sugar Generic device
33dnl    #  crypto hardware crypto access driver
34dnl
35dnl  Use '_mkdev(uniqueid, shell-pattern, {-shell-script-})dnl' to create
36dnl  a shell script fragment used to 'create' the device (be sure to match
37dnl  the uniqueid from above):
38dnl
39dnl    _mkdev(sca, sca*, {-M sca$U c major_sca_c $U
40dnl           M rsca$U b major_sca_b Add($U, 128)-})dnl
41dnl    _mkdev(cry, crypto, {-M crypto c major_cry_c 0-})dnl
42dnl
43dnl  This is ultimately expanded into:
44dnl
45dnl    sca*)
46dnl           M sca$U c 24 $U
47dnl           M sca$U b 42 $(($U+128))
48dnl           ;;
49dnl
50dnl    crypto)
51dnl           M crypto c 47 0
52dnl           ;;
53dnl
54dnl In the MAKEDEV.md file, add a '_DEV(uniqueid, charmajor, blockmajor)'
55dnl entry:
56dnl
57dnl   _DEV(sca, 24, 42)
58dnl   _DEV(cry, 47)
59dnl
60dnl Final step is to use the 'target/twrget' macros to have the 'all)' target
61dnl generate one or more device(s).  Usage of 'target/twrget' is:
62dnl      target(target_name, device_name [, append_string ] .. )
63dnl      twrget(target_name, uniqueid, device_name, [, append_string ] .. )
64dnl
65dnl        target_name   a unique name that later is used as an argument to
66dnl                      'show_target()' (which expands all devices for a
67dnl                      given 'target_name').
68dnl        uniqueid      same as 'uniqueid' above
69dnl        device_name   string representing the device to be mknod'ed
70dnl        append_string for each append_string, `device_name' is prepended
71dnl
72dnl Note: 'target(a,b,c)' is equivalent to 'twrget(a,b,b,c)'
73dnl
74dnl
75dnl For a short example:
76dnl
77dnl   target(all, std)dnl
78dnl   target(all, sca, 0, 1, 2, 3)dnl
79dnl   twrget(all, cry, crypto)dnl
80dnl
81dnl would expand to:
82dnl
83dnl   all)
84dnl        R std sca0 sca1 sca2 sca3 crypto
85dnl        ;;
86dnl
87dnl presuming '_DEV(sca, ?, ?)' and '_DEV(std)' were in the MAKEDEV.md file.
88dnl
89dnl
90dnl Everything is 'automatically' added to 'MAKEDEV' based on whether or
91dnl not the '_DEV()' entry has a corresponding _mkdev() and __devitem()
92dnl entry in MAKEDEV.mi (this file).
93dnl
94dnl Note: be very wary of adding whitespace, carriage returns, or not
95dnl finishing a macro with ')dnl' .. otherwise, extra blank lines show up
96dnl in the output.
97dnl
98dnl TODO:
99dnl
100dnl make a 'disktgt' macro that automatically does:
101dnl disktgt(rd, {-rd-})
102dnl
103dnl	target(all,rd,0)
104dnl	target(ramd,rd,0)
105dnl	disk_q(rd)
106dnl	__devitem(rd, {-rd*-}, {-rd-})dnl
107dnl
108dnl  Note: not all disks are generated in 'all)'. (e.g. vax has a lot of
109dnl        disks that are not generated by 'all)')
110dnl
111target(all, mcd, 0)dnl
112twrget(all, fdesc, fd)dnl
113target(all, st, 0, 1)dnl
114target(all, std)dnl
115target(all, raid, 0, 1, 2, 3)dnl
116target(all, rz, 0, 1, 2, 3, 4)dnl
117target(all, hp, 0, 1, 2, 3)dnl
118target(all, ra, 0, 1, 2, 3)dnl
119target(all, rx, 0, 1)dnl
120target(all, wd, 0, 1, 2, 3)dnl
121target(all, xd, 0, 1, 2, 3)dnl
122target(all, systrace)dnl
123target(all, pctr)dnl
124target(all, pctr0)dnl
125target(all, pf)dnl
126twrget(all, cry, crypto)dnl
127target(all, apm)dnl
128target(all, acpi)dnl
129twrget(all, tth, ttyh, 0, 1)dnl
130target(all, ttyA, 0, 1)dnl
131target(all, ttyB, 0, 1, 2, 3, 4, 5)dnl
132twrget(all, attyB, ttyB, 0, 1, 2, 3, 4)dnl
133target(all, tty0, 0, 1, 2, 3)dnl
134twrget(all, mac_tty0, tty0, 0, 1)dnl
135twrget(all, tzs, tty, a, b, c, d)dnl
136twrget(all, czs, cua, a, b, c, d)dnl
137target(all, ttyc, 0, 1, 2, 3, 4, 5, 6, 7)dnl
138twrget(all, com, tty0, 0, 1, 2, 3)dnl
139target(all, lkm)dnl
140twrget(all, mmcl, mmclock)dnl
141target(all, lpt, 0, 1, 2)dnl
142twrget(all, lpt, lpa, 0, 1, 2)dnl
143target(all, joy, 0, 1)dnl
144twrget(all, rnd, random)dnl
145target(all, uk, 0)dnl
146target(all, wt, 0)dnl
147target(all, wdt, 0)dnl
148twrget(all, au, audio, 0)dnl
149twrget(all, speak, speaker)dnl
150target(all, asc, 0)dnl
151target(all, music, 0)dnl
152target(all, radio, 0)dnl
153target(all, tuner, 0)dnl
154target(all, rmidi, 0, 1, 2, 3, 4, 5, 6, 7)dnl
155target(all, uall)dnl
156target(all, adb)dnl
157target(all, iop, 0, 1)dnl
158target(all, pci)dnl
159twrget(all, wsmouse, wscons)dnl
160twrget(all, grf_mac, grf, 0, 1, 2, 3)dnl
161target(all, par, 0)dnl
162twrget(all, amouse, mouse, 0, 1)dnl
163twrget(all, akbd, kbd)dnl
164target(all, apci, 0)dnl
165target(all, ppi, 0)dnl
166target(all, view0, 0, 1, 2, 3, 4, 5)dnl
167target(all, local)dnl
168target(all, gpr, 0)dnl
169target(all, ptm)dnl
170target(all, hotplug)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)dnl
180target(usb, urio, 0)dnl
181twrget(usb, uscan, uscanner, 0)dnl
182target(usb, uhid, 0, 1, 2, 3)dnl
183target(usb, ulpt, 0, 1)dnl
184target(usb, ugen, 0, 1)dnl
185target(usb, ttyU, 0, 1)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(wt, {-wt*-}, Archive/Wangtek QIC-cartridge tape drives)dnl
193_mkdev(wt, wt*,
194{-name=wt
195	n=Mult($U, 8) m=Add($n, 4)
196	M $name$U	b major_wt_b $n 640 operator
197	M r$name$U	c major_wt_c $n 640 operator
198	M n$name$U	b major_wt_b $m 640 operator
199	M nr$name$U	c major_wt_c $m 640 operator-})dnl
200__devitem(tz, tz*, {-DEC TK50 cartridge tape drives-})dnl
201__devitem(st, {-st*-}, SCSI tape drives)dnl
202_mkdev(st, st*, {-n=Mult($U, 16)
203	for pre in " " n e en
204	do
205		M ${pre}st$U	b major_st_b $n 660 operator
206		M ${pre}rst$U	c major_st_c $n 660 operator
207		n=Add($n, 1)
208	done-})dnl
209__devitem(mt, mt*, (Magnetic) 9-track reel tape drives)dnl
210__devitem(ht, ht*, MASSBUS TM03 and TU?? devices)dnl
211__devitem(tm, tm*, UNIBUS TM11 and TE10 emulations (e.g. Emulex TC-11))dnl
212__devitem(ts, ts*, UNIBUS TS11)dnl
213__devitem(ut, ut*, UNIBUS TU45 emulations (e.g. 9700))dnl
214__devtitle(dis, Disks)dnl
215__devitem(sd, {-sd*-}, {-SCSI disks{-,-} including flopticals-})dnl
216__devitem(cd, {-cd*-}, ATAPI and SCSI CD-ROM drives)dnl
217_mkdev(cd, cd*, {-dodisk2 cd $U major_cd_b major_cd_c $U 0{--}ifstep(cd)-})dnl
218__devitem(mcd, mcd*, Mitsumi CD-ROM drives)dnl
219_mkdev(mcd, mcd*, {-dodisk2 mcd $U major_mcd_b major_mcd_c $U 0{--}ifstep(mcd)dnl
220-})dnl
221__devitem(ch, {-ch*-}, SCSI media changers)dnl
222_mcdev(ch, ch*, ch, {-major_ch_c-}, 660, operator)dnl
223__devitem(uk, uk*, Unknown SCSI devices)dnl
224_mcdev(uk, uk*, uk, {-major_uk_c-}, 640, operator)dnl
225__devitem(ss, ss*, SCSI scanners)dnl
226_mkdev(ss, ss*, {-M ss$U c major_ss_c Mult($U,16) 640 operator
227	M nss$U c major_ss_c Add(Mult($U,16),1) 640 operator
228	M enss$U c major_ss_c Add(Mult($U,16),3) 640 operator
229	RMlist="$RMlist scan$U"
230	MKlist="$MKlist;umask 77;ln -s ss$U scan$U"-})dnl
231__devitem(ses, ses*, SES/SAF-TE SCSI devices)dnl
232_mkdev(ses, ses*, {-M ses$U c major_ses_c $U 640 operator-})dnl
233dnl XXX see ramdisk above
234__devitem(ramd, ramdisk, Ramdisk kernel devices,nothing)dnl
235_mkdev(ramd, ramdisk, {-dnl
236show_target(ramd)dnl
237-})dnl
238target(ramd, std)dnl
239target(ramd, random)dnl
240target(ramd, bpf, 0)dnl
241__devitem(rd, {-rd*-}, quote(rd)pseudo-disks)dnl
242_mkdev(rd, rd*, {-dodisk2 rd $U major_rd_b major_rd_c $U 0{--}ifstep(rd)-})dnl
243__devitem(xd, xd*, Xylogic 753/7053 disks)dnl
244__devitem(xy, xy*, {-	Xylogic 450/451 disks-})dnl
245__devitem(flo, {-fd*-}, {-Floppy disk drives (3 1/2"{-,-} 5 1/4")-},fd)dnl
246_mkdev(flo, fd*,
247{-typnam=$U${i#fd[01]*}
248	case $typnam in
249	0|1)	typnum=0;; # no type specified, assume A
250	*A)	typnum=0; typnam=0;;
251	*B)	typnum=1;;
252	*C)	typnum=2;;
253	*D)	typnum=3;;
254	*E)	typnum=4;;
255	*F)	typnum=5;;
256	*G)	typnum=6;;
257	*H)	typnum=7;;
258	*)	echo bad type $typnam for $i; exit 1;;
259	esac
260	case $U in
261	0|1)	blk=major_flo_b; chr=major_flo_c;;
262	*)	echo bad unit $U for $i; exit 1;;
263	esac
264	nam=fd${typnam}
265	n=Add(Mult($U, 128), Mult($typnum, 16))
266	M ${nam}a	b $blk $n 640 operator
267	M ${nam}b	b $blk Add($n, 1) 640 operator
268	M ${nam}c	b $blk Add($n, 2) 640 operator
269	M r${nam}a	c $chr $n 640 operator
270	M r${nam}b	c $chr Add($n, 1) 640 operator
271	M r${nam}c	c $chr Add($n, 2) 640 operator-}, 664)dnl
272__devitem(iop, iop*, I2O controller devices)dnl
273_mcdev(iop, iop*, iop, {-major_iop_c-}, 660)dnl
274__devitem(wdt, wdt0, Watchdog timer)dnl
275_mcdev(wdt, wdt0, wdt, {-major_wdt_c-}, 440, operator)dnl
276__devitem(wd, {-wd*-}, {-quote(winchester)disk drives (ST506{-,-} IDE{-,-} ESDI{-,-} RLL{-,-} ...)-})dnl
277__devitem(ccd, ccd*, Concatenated disk devices)dnl
278__devitem(raid, raid*, RAIDframe disk devices)dnl
279__devitem(vnd, vnd*, quote(file)pseudo-disk devices)dnl
280_mkdev(vnd, vnd*, {-dodisk vnd $U major_vnd_b major_vnd_c $U 0{--}ifstep(vnd)
281	dodisk svnd $U major_vnd_b major_vnd_c $U 2048{--}ifstep(vnd)-})dnl
282__devitem(ra, ra*, {-MSCP disks-})dnl
283__devitem(hp, hp*, {-MASSBUSS disks-})dnl
284__devitem(hk, hk*, {-UNIBUS RK06 and RK07 disks-})dnl
285__devitem(up, up*, {-Other UNIBUS devices-})dnl
286__devitem(rb, rb*, {-730 IDC w/ RB80 and/or RB02-})dnl
287__devitem(rx, rx*, {-RX02 floppy disks-})dnl
288__devitem(rl, rl*, {-UNIBUS RL02-})dnl
289dnl
290dnl For normal disk devices, add a disk_q entry; anything else define like
291dnl the rest (such as vnd above).
292dnl
293disk_q({-ccd-})dnl
294disk_q({-hd-})dnl
295disk_q({-hk-})dnl
296disk_q({-hp-})dnl
297disk_q({-ra-})dnl
298disk_q({-raid-})dnl
299disk_q({-rb-})dnl
300disk_q({-rl-})dnl
301disk_q({-rx-})dnl
302disk_q({-sd-})dnl
303disk_q({-xy-})dnl
304disk_q({-xd-})dnl
305disk_q({-up-})dnl
306disk_q({-wd-})dnl
307disk_q({-rz-})dnl
308_mkdev({-disks-}, {-undefine({-C_ase-})show_disks()undefine({-C_ase-})-},
309{-case $i in
310show_disks2()dnl
311	esac-})dnl
312__mkdev({-disks-}){--}dnl
313dnl
314__devtitle(cons, Console ports)dnl
315__devitem(wscons, ttyC0, Minimal wscons devices)dnl
316twrget(wscons, wscons, ttyC, cfg, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b)dnl
317target(wscons, wsmux)dnl
318target(wscons, wskbd, 0, 1, 2, 3)dnl
319target(wscons, wsmouse, 0, 1, 2, 3)dnl
320_mkdev({-wscons-}, {-wscons-}, {-dnl
321show_target(wscons)dnl
322-})dnl
323__devitem(wsdisp, ttyC-F*, wscons display devices,wsdisplay)dnl
324_mkdev({-wsdisp-}, tty[C-F]*, {-U=${i##tty[C-F]}
325	case $i in
326	ttyC*) n=C m=expr(0*256);;
327	ttyD*) n=D m=expr(1*256);;
328	ttyE*) n=E m=expr(2*256);;
329	ttyF*) n=F m=expr(3*256);;
330	esac
331	case $U in
332	[0-9a-f]) M tty$n$U c major_wsdisp_c Add(16#$U, $m) 600;;
333	cfg) M tty${n}cfg c major_wsdisp_c Add(255,$m) 600;;
334	*) echo bad unit $U for $i; exit 1;;
335	esac-})dnl
336__devitem(wskbd, wskbd*, wscons keyboards)dnl
337_mkdev(wskbd, wskbd*, {-M wskbd$U c major_wskbd_c $U 600-})dnl
338__devitem(wsmux, wsmux, wscons keyboard/mouse mux devices)dnl
339_mkdev(wsmux, wsmux|wsmouse|wskbd, {-M wsmouse c major_wsmux_c 0 600
340	M wskbd c major_wsmux_c 1 600-})dnl
341__devitem(pcons, console, PROM console)dnl
342__devtitle(point, Pointing devices)dnl
343__devitem(wsmouse, wsmouse*, wscons mice)dnl
344_mkdev(wsmouse, wsmouse*, {-M wsmouse$U c major_wsmouse_c $U 600-})dnl
345__devtitle(pty, Pseudo terminals)dnl
346__devitem(ptm, ptm, pty master device)dnl
347_mkdev(ptm, ptm, {-M ptm c major_ptm_c 0 666-})dnl
348__devitem(tty, tty*, Set of 62 slave pseudo terminals)dnl
349__devitem(pty, pty*, Set of 62 master pseudo terminals)dnl
350_mkdev(pty, pty*, {-if [ $U -gt 15 ]; then
351		echo bad unit for pty in: $i
352		continue
353	fi
354	set -A letters p q r s t u v w x y z P Q R S T
355	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 \
356	    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 \
357	    Y Z
358
359	name=${letters[$U]}
360	n=0
361	while [ $n -lt 62 ]
362	do
363		nam=$name${suffixes[$n]}
364		off=Mult($U, 62)
365		M tty$nam c major_tty_c Add($off, $n)
366		M pty$nam c major_pty_c Add($off, $n)
367		n=Add($n, 1)
368	done-})dnl
369__devitem(dc, dc*, {-4 channel serial interface (keyboard{-,-} mouse{-,-}modem{-,-} printer)-})dnl
370__devtitle(prn, Printers)dnl
371__devitem(lpt, lpt*, IEEE 1284 centronics printer)dnl
372_mkdev(lpt, lpt*|lpa*,
373{-case $i in
374	lpt*) n=lpt f=0;;
375	lpa*) n=lpa f=128;;
376	esac
377	M $n$U c major_lpt_c Add($U, $f) 600-})dnl
378__devitem(lpa, lpa*, Polled printer port,lpt)dnl
379__devitem(ppi, ppi*, HP-IB plotters)dnl
380__devtitle({-usb-}, USB devices)dnl
381__devitem({-usb-}, usb*, Bus control devices used by usbd for attach/detach)dnl
382_mkdev({-usb-}, usb*, {-[ "$i" = "usb" ] && u= || u=$U
383	M usb$u c major_usb_c $U 660-})dnl
384__devitem(uhid, uhid*, Generic HID devices)dnl
385_mcdev({-uhid-}, uhid*, {-uhid-}, {-major_uhid_c-}, 660)dnl
386__devitem(ulpt, ulpt*, Printer devices)dnl
387_mcdev({-ulpt-}, ulpt*, {-ulpt-}, {-major_ulpt_c-}, 660)dnl
388__devitem(ttyU, ttyU*, USB serial ports,ucom)dnl
389_mkdev({-ttyU-}, {-ttyU[0-9a-zA-Z]-}, {-U=${i#ttyU*}
390	o=$(alph2d $U)
391	M ttyU$U c major_ttyU_c $o 660 dialer uucp
392	M cuaU$U c major_ttyU_c Add($o, 128) 660 dialer uucp-})dnl
393__devitem(urio, urio*, Diamond Multimedia Rio 500)dnl
394_mcdev({-urio-}, urio*, {-urio-}, {-major_urio_c-}, 660)dnl
395__devitem(uscan, uscanner*, Scanners,uscanner)dnl
396_mcdev({-uscan-}, uscanner*, {-uscanner-}, {-major_uscan_c-}, 660)dnl
397__devitem(ugen, ugen*, Generic USB devices)dnl
398_mkdev(ugen, ugen*, {-n=Mult($U, 16)
399	for j in 0{0,1,2,3,4,5,6,7,8,9} 1{0,1,2,3,4,5}
400	do
401		M ugen$U.$j c major_ugen_c Add($n, 10#$j) 660
402	done-})dnl
403__devtitle(call, Call units)dnl
404__devtitle(term, Terminal ports)dnl
405__devitem(dca, dca*, HP200/300 single port serial interface)dnl
406__devitem(dcm, dcm*, HP200/300 4 port serial mux interface)dnl
407__devitem(apci, apci*, HP400 4 port serial mux interface)dnl
408__devitem({-com-}, {-tty[0-7][0-9a-f]-}, NS16x50 serial ports)dnl
409_mkdev(com, {-tty[0-7][0-9a-f]-}, {-U=${i#tty*}
410	o=$(h2d $U)
411	M tty$U c major_com_c $o 660 dialer uucp
412	M cua$U c major_com_c Add($o, 128) 660 dialer uucp-})dnl
413__devitem(ttyc, ttyc*, Cyclades serial ports,cy)dnl
414__devitem(tzs, tty[a-z]*, Zilog 8530 Serial Port,zs)dnl
415_mkdev(tzs, {-tty[a-z]-}, {-u=${i#tty*}
416	case $u in
417	a) n=0 ;;
418	b) n=1 ;;
419	c) n=4 ;;
420	d) n=5 ;;
421	*) echo unknown tty device $i ;;
422	esac
423	M tty$u c major_tzs_c $n 660 dialer uucp-})dnl
424__devitem(tth, ttyh*, Sab82532 serial devices,sab)dnl
425_mkdev(tth, ttyh*, {-M ttyh$U c major_tth_c $U 660 dialer uucp-})dnl
426__devitem(czs, cua[a-z]*, Zilog 8530 Serial Port,zs)dnl
427_mkdev(czs, cua[a-z], {-u=${i#cua*}
428	case $u in
429	a) n=0 ;;
430	b) n=1 ;;
431	c) n=4 ;;
432	d) n=5 ;;
433	*) echo unknown cua device $i ;;
434	esac
435	M cua$u c major_czs_c Add($n, 128) 660 dialer uucp-})dnl
436__devitem(tty0, tty00, Standard serial port,com)dnl
437__devitem(mac_tty0, tty00, Standard serial port,zsc)dnl
438__devitem(ttyz, tty[a-d], On-board zs serial ports,zs)dnl
439__devitem(cuaz, cua[a-d], On-board zs serial ports,zs)dnl
440__devitem(ttyB, ttyB?, DEC 3000 ZS8530 ("scc") serial ports,scc)dnl
441__devitem(scc, scc*, 82530 serial interface,scc)dnl
442__devtitle(spec, Special purpose devices)dnl
443_mkdev(apm, apm*, {-M apm	c major_apm_c 0 644
444	M apmctl	c major_apm_c 8 644-})dnl
445_mkdev(acpi, acpi*, {-M acpi	c major_acpi_c 0 644-})dnl
446__devitem(pctr, pctr*, PC Performance Tuning Register access device)dnl
447_mkdev(pctr, pctr, {-M pctr c major_pctr_c 0 644-})dnl
448__devitem(systrace, systrace*, System call tracing device)dnl
449_mkdev(systrace, systrace, {-M systrace c major_systrace_c 0 644-})dnl
450__devitem(au, audio*, Audio devices,audio)dnl
451_mkdev(au, audio*, {-M sound$U	c major_au_c $U
452	M mixer$U	c major_au_c Add($U, 16)
453	M audio$U	c major_au_c Add($U, 128)
454	M audioctl$U	c major_au_c Add($U, 192)
455	MKlist="$MKlist;[ -e audio ] || ln -s audio$U audio"
456	MKlist="$MKlist;[ -e mixer ] || ln -s mixer$U mixer"
457	MKlist="$MKlist;[ -e sound ] || ln -s sound$U sound"
458	MKlist="$MKlist;[ -e audioctl ] || ln -s audioctl$U audioctl"-})dnl
459__devitem(asc, asc*, ASC Audio device)dnl
460_mkdev(asc, asc*, {-M asc$U major_asc_c 0-})dnl
461__devitem(bio, bio, {-ioctl tunnel pseudo-device-})dnl
462_mkdev(bio, bio, {-M bio c major_bio_c 0 600-})dnl
463__devitem(music, music*, MIDI devices,midi)dnl
464_mkdev(music, music*, {-M music$U     c major_music_c $U
465	M sequencer$U c major_music_c Add($U, 128)
466	MKlist="$MKlist;[ -e music ] || ln -s music$U music"
467	MKlist="$MKlist;[ -e sequencer ] || ln -s sequencer$U sequencer"-})dnl
468__devitem(radio, radio*, FM tuner devices)dnl
469_mkdev(radio, radio*, {-M radio$U     c major_radio_c $U
470	MKlist="$MKlist;[ -e radio ] || ln -s radio$U radio"-})dnl
471__devitem(fdesc, fd, fd/* nodes for fdescfs,mount_fdesc 8)dnl
472_mkdev(fdesc, fd, {-RMlist="mkdir -p fd;$RMlist" n=0
473	while [ $n -lt 64 ];do M fd/$n c major_fdesc_c $n;n=Add($n, 1);done
474	MKlist="$MKlist;chmod 555 fd"-})dnl
475__devitem(grf_mac, grf*, Raw interface to the mac68k graphics devices,grf)dnl
476__devitem(oppr, openprom,PROM settings,openprom)dnl
477_cdev(oppr, openprom, 70, 0)dnl
478__devitem(cry, crypto, Hardware crypto access driver,crypto)dnl
479_mkdev(cry, crypto, {-M crypto c major_cry_c-} 0)dnl
480__devitem(pf, pf*, Packet Filter)dnl
481_mkdev(pf, {-pf*-}, {-M pf c major_pf_c 0 600-})dnl
482__devitem(bpf, bpf*, Berkeley Packet Filter)dnl
483_mkdev(bpf, {-bpf*-}, {-M bpf$U c major_bpf_c $U 600-}, 600)dnl
484_mkdev(tun, {-tun*-}, {-M tun$U c major_tun_c $U 600-}, 600)dnl
485__devitem(speak, speaker, PC speaker,spkr)dnl
486_mkdev(speak, speaker, {-M speaker c major_speak_c 0 600-})dnl
487__devitem(lkm, lkm, Loadable kernel modules interface)dnl
488_cdev(lkm, lkm, {-major_lkm_c-}, 0, 640, _lkm)dnl
489__devitem(tun, tun*, Network tunnel driver)dnl
490__devitem(rnd, *random, In-kernel random data source,random)dnl
491_mkdev(rnd, *random, {-n=0
492	for pre in " " s u p a
493	do
494		M ${pre}random c major_rnd_c $n 644
495		n=Add($n, 1)
496	done-}, 644)dnl
497__devitem(joy, joy*, Joystick driver)dnl
498_mcdev(joy, joy*, joy, {-major_joy_c-}, 666)dnl
499__devitem(mag, magma*, Magma multiport cards,magma)dnl
500__devitem(bppmag, bppmag[mno], Magma parallel port,magma)dnl
501__devitem(spif, spif*, quote(spif)multiport cards)dnl
502__devitem(bppsp, bpp[jkl], quote(spif)parallel port,spif)dnl
503_mkdev(mag, magma*, {-case $U in
504	0)	offset=0  nam=m;;
505	1)	offset=16 nam=n;;
506	2)	offset=32 nam=o;;
507	*)	echo "bad unit for $i: $U"; exit 127;;
508	esac
509	offset=Mult($U, 64)
510	n=0
511	while [ $n -lt 16 ]
512	do
513		name=${nam}`hex $n`
514		M tty$name c major_mag_c Add($offset, $n) 660 dialer uucp
515		n=Add($n, 1)
516	done
517	M bpp${nam}0 c major_bppmag_c Add($offset, 0) 600
518	M bpp${nam}1 c major_bppmag_c Add($offset, 1) 600-})dnl
519_mkdev(spif, spif*, {-case $U in
520	0)	offset=0  nam=j;;
521	1)	offset=16 nam=k;;
522	2)	offset=32 nam=l;;
523	*)	echo "bad unit for $i: $U"; exit 127;;
524	esac
525	offset=Mult($U, 64)
526	n=0
527	while [ $n -lt 8 ]
528	do
529		name=${nam}`hex $n`
530		M tty$name c major_spif_c Add($offset, $n) 660 dialer uucp
531		n=Add($n, 1)
532	done
533	M bpp${nam}0 c major_bppsp_c Add($offset, 0) 600-})dnl
534__devitem(bpp, bpp*, Parallel port)dnl
535_mkdev(bpp, {-bpp*-}, {-M bpp$U c major_bpp_c $U 600-}, 600)dnl
536__devitem(xfs, xfs*, XFS filesystem node, mount_xfs 8)dnl
537_mcdev(xfs, xfs*, xfs, {-major_xfs_c-}, 600)dnl
538__devitem(rmidi, rmidi*, Raw MIDI devices,midi)dnl
539_mcdev(rmidi, rmidi*, rmidi, {-major_rmidi_c-}, 666)dnl
540__devtitle(plat, Platform-specific devices)dnl
541__devitem(bktr, bktr*, Video frame grabbers)dnl
542_mcdev(bktr, bktr*, bktr, {-major_bktr_c-}, 644)dnl
543__devitem(tuner, tuner*, Tuner devices)dnl
544_mkdev(tuner, tuner*, {-M tuner$U c major_bktr_c Add(Mult($U, 2), 16) 644-}, 644)dnl
545__devitem(pci, pci, PCI bus device)dnl
546_mkdev(pci, pci, {-M pci c major_pci_c 0 600-}, 600)dnl
547__devitem(adb, adb, Apple Desktop bus event interface)dnl
548_mkdev(adb, adb, {-M adb c major_adb_c 0-})dnl
549__devitem(pdc, pdc, PDC device)dnl
550__devitem(gpr, gpr*, GPR400 smartcard reader)dnl
551_mcdev(gpr, gpr*, gpr, {-major_gpr_c-})dnl
552__devitem(hotplug, hotplug, devices hot plugging)dnl
553_mkdev(hotplug, hotplug, {-M hotplug c major_hotplug_c $U 400-})dnl
554__devitem(gpio, gpio*, General Purpose Input/Output)dnl
555_mcdev(gpio, gpio*, gpio, {-major_gpio_c-}, 600)dnl
556_mkdev(local, local, {-test -s $T.local && sh $T.local-})dnl
557