MAKEDEV.common revision 1.1
1vers(a, {-$OpenBSD: MAKEDEV.common,v 1.1 2004/02/16 18:58:54 miod 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
128twrget(all, tth, ttyh, 0, 1)dnl
129target(all, ttyA, 0, 1)dnl
130target(all, ttyB, 0, 1, 2, 3, 4, 5)dnl
131twrget(all, attyB, ttyB, 0, 1, 2, 3, 4)dnl
132target(all, tty0, 0, 1, 2, 3)dnl
133twrget(all, mac_tty0, tty0, 0, 1)dnl
134twrget(all, tzs, tty, a, b, c, d)dnl
135twrget(all, czs, cua, a, b, c, d)dnl
136target(all, ttyc, 0, 1, 2, 3, 4, 5, 6, 7)dnl
137twrget(all, com, tty0, 0, 1, 2, 3)dnl
138target(all, lkm)dnl
139twrget(all, mmcl, mmclock)dnl
140target(all, lpt, 0, 1, 2)dnl
141twrget(all, lpt, lpa, 0, 1, 2)dnl
142target(all, joy, 0, 1)dnl
143twrget(all, rnd, random)dnl
144target(all, uk, 0)dnl
145target(all, wt, 0)dnl
146target(all, wdt, 0)dnl
147twrget(all, au, audio, 0)dnl
148twrget(all, speak, speaker)dnl
149target(all, asc, 0)dnl
150target(all, music, 0)dnl
151target(all, radio, 0)dnl
152target(all, tuner, 0)dnl
153target(all, rmidi, 0, 1, 2, 3, 4, 5, 6, 7)dnl
154target(all, usbs)dnl
155target(all, adb)dnl
156target(all, iop, 0, 1)dnl
157target(all, pci)dnl
158twrget(all, wsmouse, wscons)dnl
159twrget(all, grf_mac, grf, 0, 1, 2, 3)dnl
160target(all, par, 0)dnl
161twrget(all, amouse, mouse, 0, 1)dnl
162twrget(all, akbd, kbd)dnl
163target(all, apci, 0)dnl
164target(all, ppi, 0)dnl
165target(all, view0, 0, 1, 2, 3, 4, 5)dnl
166target(all, local)dnl
167target(all, gpr, 0)dnl
168target(all, ptm)dnl
169dnl
170_mkdev(all, {-all-}, {-dnl
171show_target(all)dnl
172-})dnl
173dnl
174dnl XXX some arches use ramd, others ramdisk - needs to be fixed eventually
175__devitem(ramdisk, ramdisk, Ramdisk kernel devices)dnl
176dnl
177target(usb, usb, 0, 1)dnl
178target(usb, urio, 0)dnl
179twrget(usb, uscan, uscanner, 0)dnl
180target(usb, uhid, 0, 1, 2, 3)dnl
181target(usb, ulpt, 0, 1)dnl
182target(usb, ugen, 0, 1)dnl
183target(usb, ttyU, 0, 1)dnl
184dnl
185__devitem({-usbs-}, usbs, All USB devices)dnl
186_mkdev(usbs, usbs, {-dnl
187show_target({-usb-})dnl
188-})dnl
189__devtitle(tap, Tapes)dnl
190__devitem(wt, {-wt*	-}, Archive/Wangtek QIC-cartridge tape drives)dnl
191_mkdev(wt, wt*,
192{-name=wt
193	n=Mult($U, 8) m=Add($n, 4)
194	M $name$U	b major_wt_b $n 640 operator
195	M r$name$U	c major_wt_c $n 640 operator
196	M n$name$U	b major_wt_b $m 640 operator
197	M nr$name$U	c major_wt_c $m 640 operator-})dnl
198__devitem(tz, tz*, {-DEC TK50 cartridge tape drives-})dnl
199__devitem(st, {-st*-}, SCSI tape drives)dnl
200_mkdev(st, st*, {-n=Mult($U, 16)
201	for pre in " " n e en
202	do
203		M ${pre}st$U	b major_st_b $n 660 operator
204		M ${pre}rst$U	c major_st_c $n 660 operator
205		n=Add($n, 1)
206	done-})dnl
207__devitem(ct, ct*, HP300 HP-IB cartridge tape drives)dnl
208__devitem(mt, mt*, (Magnetic) 9-track reel tape drives)dnl
209__devitem(ht, ht*, MASSBUS TM03 and TU?? devices)dnl
210__devitem(tm, tm*, UNIBUS TM11 and TE10 emulations (e.g. Emulex TC-11))dnl
211__devitem(ts, ts*, UNIBUS TS11)dnl
212__devitem(ut, ut*, UNIBUS TU45 emulations (e.g. 9700))dnl
213__devtitle(dis, Disks)dnl
214dnl REMOVE __devitem(rz, rz*, SCSI disks)dnl
215__devitem(sd, {-sd*-}, {-SCSI disks, includes flopticals-})dnl
216__devitem(hd, {-hd*-}, HP300 HP-IB disks)dnl
217__devitem(cd, {-cd*-}, SCSI cdrom drives)dnl
218__devitem(acd, acd*, ATAPI cdrom drives)dnl
219_mkdev(cd, cd*, {-dodisk2 cd $U major_cd_b major_cd_c $U 0{--}ifstep(cd)-})dnl
220__devitem(mcd, mcd*, Mitsumi cdrom drives)dnl
221_mkdev(mcd, mcd*, {-dodisk2 mcd $U major_mcd_b major_mcd_c $U 0{--}ifstep(mcd)dnl
222-})dnl
223__devitem(ch, {-ch*-}, SCSI media changers)dnl
224_mcdev(ch, ch*, ch, {-major_ch_c-}, 660, operator)dnl
225__devitem(uk, uk*, SCSI unknown devices)dnl
226_mcdev(uk, uk*, uk, {-major_uk_c-}, 640, operator)dnl
227__devitem(ss, ss*, SCSI scanners)dnl
228_mkdev(ss, ss*, {-M ss$U c major_ss_c Mult($U,16) 640 operator
229	M nss$U c major_ss_c Add(Mult($U,16),1) 640 operator
230	M enss$U c major_ss_c Add(Mult($U,16),3) 640 operator
231	RMlist="$RMlist scan$U"
232	MKlist="$MKlist;umask 77;ln -s ss$U scan$U"-})dnl
233__devitem(ses, ses*, SES/SAF-TE SCSI devices)dnl
234_mkdev(ses, ses*, {-M ses$U c major_ses_c $U 640 operator-})dnl
235dnl XXX see ramdisk above
236__devitem(ramd, ramdisk, Ramdisk kernel devices)dnl
237_mkdev(ramd, ramdisk, {-dnl
238show_target(ramd)dnl
239-})dnl
240target(ramd, std)dnl
241target(ramd, random)dnl
242target(ramd, bpf, 0)dnl
243__devitem(rd, {-rd*-}, quote(rd)pseudo-disks)dnl
244_mkdev(rd, rd*, {-dodisk2 rd $U major_rd_b major_rd_c $U 0{--}ifstep(rd)-})dnl
245__devitem(xd, xd*, Xylogic 753/7053 disks)dnl
246__devitem(xy, xy*, {-	Xylogic 450/451 disks-})dnl
247__devitem(flo, {-fd*-}, {-Floppy disk drives (3 1/2"{-,-} 5 1/4")-})dnl
248_mkdev(flo, fd*,
249{-typnam=$U${i#fd[01]*}
250	case $typnam in
251	0|1)	typnum=0;; # no type specified, assume A
252	*A)	typnum=0; typnam=0;;
253	*B)	typnum=1;;
254	*C)	typnum=2;;
255	*D)	typnum=3;;
256	*E)	typnum=4;;
257	*F)	typnum=5;;
258	*G)	typnum=6;;
259	*H)	typnum=7;;
260	*)	echo bad type $typnam for $i; exit 1;;
261	esac
262	case $U in
263	0|1)	blk=major_flo_b; chr=major_flo_c;;
264	*)	echo bad unit $U for $i; exit 1;;
265	esac
266	nam=fd${typnam}
267	n=Add(Mult($U, 128), Mult($typnum, 16))
268	M ${nam}a	b $blk $n 640 operator
269	M ${nam}b	b $blk Add($n, 1) 640 operator
270	M ${nam}c	b $blk Add($n, 2) 640 operator
271	M r${nam}a	c $chr $n 640 operator
272	M r${nam}b	c $chr Add($n, 1) 640 operator
273	M r${nam}c	c $chr Add($n, 2) 640 operator-}, 664)dnl
274__devitem(iop, iop*, I2O controller devices)dnl
275_mcdev(iop, iop*, iop, {-major_iop_c-}, 660)dnl
276__devitem(wdt, wdt0, Watchdog timer)dnl
277_mcdev(wdt, wdt0, wdt, {-major_wdt_c-}, 440, operator)dnl
278__devitem(wd, {-wd*-}, {-quote(winchester)disk drives (ST506, IDE, ESDI, RLL, ...)-})dnl
279__devitem(ccd, ccd*, Concatenated disk devices)dnl
280__devitem(raid, raid*, RAIDframe disk devices)dnl
281__devitem(vnd, vnd*, quote(file)pseudo-disk devices)dnl
282_mkdev(vnd, vnd*, {-dodisk vnd $U major_vnd_b major_vnd_c $U 0{--}ifstep(vnd)
283	dodisk svnd $U major_vnd_b major_vnd_c $U 2048{--}ifstep(vnd)-})dnl
284__devitem(ra, ra*, {-MSCP disks-})dnl
285__devitem(hp, hp*, {-MASSBUSS disks-})dnl
286__devitem(hk, hk*, {-UNIBUS RK06 and RK07 disks-})dnl
287__devitem(up, up*, {-Other UNIBUS devices-})dnl
288__devitem(rb, rb*, {-730 IDC w/ RB80 and/or RB02-})dnl
289__devitem(rx, rx*, {-RX02 floppy disks-})dnl
290__devitem(rl, rl*, {-UNIBUS RL02-})dnl
291__devitem(hd, hd*, {-HDC9224 disks-})dnl
292dnl
293dnl For normal disk devices, add a disk_q entry; anything else define like
294dnl the rest (such as vnd above).
295dnl
296disk_q({-ccd-})dnl
297disk_q({-hd-})dnl
298disk_q({-hk-})dnl
299disk_q({-hp-})dnl
300disk_q({-ra-})dnl
301disk_q({-raid-})dnl
302disk_q({-rb-})dnl
303disk_q({-rl-})dnl
304disk_q({-rx-})dnl
305disk_q({-sd-})dnl
306disk_q({-xy-})dnl
307disk_q({-xd-})dnl
308disk_q({-up-})dnl
309disk_q({-wd-})dnl
310disk_q({-rz-})dnl
311_mkdev({-disks-}, {-undefine({-C_ase-})show_disks()undefine({-C_ase-})-},
312{-case $i in
313show_disks2()dnl
314	esac-})dnl
315__mkdev({-disks-}){--}dnl
316dnl
317__devtitle(cons, Console ports)dnl
318__devitem(wscons, ttyC0, Minimal wscons devices)dnl
319twrget(wscons, wscons, ttyC, cfg, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b)dnl
320target(wscons, wsmux)dnl
321target(wscons, wskbd, 0, 1, 2, 3)dnl
322target(wscons, wsmouse, 0, 1, 2, 3)dnl
323_mkdev({-wscons-}, {-wscons-}, {-dnl
324show_target(wscons)dnl
325-})dnl
326__devitem(wsdisp, ttyC-F*, wscons display devices)dnl
327_mkdev({-wsdisp-}, tty[C-F]*, {-U=${i##tty[C-F]}
328	case $i in
329	ttyC*) n=C m=expr(0*256);;
330	ttyD*) n=D m=expr(1*256);;
331	ttyE*) n=E m=expr(2*256);;
332	ttyF*) n=F m=expr(3*256);;
333	esac
334	case $U in
335	[0-9a-f]) M tty$n$U c major_wsdisp_c {-$(( 16#$U + $m ))-} 600;;
336	cfg) M tty${n}cfg c major_wsdisp_c Add(255,$m) 600;;
337	*) echo bad unit $U for $i; exit 1;;
338	esac-})dnl
339__devitem(wskbd, wskbd*, wscons keyboards)dnl
340_mkdev(wskbd, wskbd*, {-M wskbd$U c major_wskbd_c $U 600-})dnl
341__devitem(wsmux, wsmux, wscons keyboard/mouse mux devices)dnl
342_mkdev(wsmux, wsmux|wsmouse|wskbd, {-M wsmouse c major_wsmux_c 0 600
343	M wskbd c major_wsmux_c 1 600-})dnl
344__devitem(pcons, console, PROM console)dnl
345__devtitle(point, Pointing devices)dnl
346__devitem(wsmouse, wsmouse*, wscons mice)dnl
347_mkdev(wsmouse, wsmouse*, {-M wsmouse$U c major_wsmouse_c $U 600-})dnl
348__devtitle(pty, Pseudo terminals)dnl
349__devitem(ptm, ptm, pty master device)dnl
350_mkdev(ptm, ptm, {-M ptm c major_ptm_c 0 666-})dnl
351__devitem(tty, tty*, Set of 16 slave pseudo terminals)dnl
352__devitem(pty, pty*, Set of 16 master pseudo terminals)dnl
353_mkdev(pty, pty*, {-if [ $U -gt 15 ]; then
354		echo bad unit for pty in: $i
355		continue
356	fi
357	set -A tbl p q r s t u v w x y z P Q R S T
358	name=${tbl[$U]}
359	n=0
360	while [ $n -lt 16 ]
361	do
362		nam=$name$(hex $n)
363		off=Mult($U, 16)
364		M tty$nam c major_tty_c Add($off, $n)
365		M pty$nam c major_pty_c Add($off, $n)
366		n=Add($n, 1)
367	done-})dnl
368__devitem(dc, dc*, {-4 channel serial interface (keyboard{-,-} mouse{-,-}modem{-,-} printer)-})dnl
369__devtitle(prn, Printers)dnl
370__devitem(par, par*, On-board parallel port)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)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)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-})dnl
392__devitem(urio, urio*, Diamond Multimedia Rio 500)dnl
393_mcdev({-urio-}, urio*, {-urio-}, {-major_urio_c-}, 660)dnl
394__devitem(uscan, uscanner*, Scanners)dnl
395_mcdev({-uscan-}, uscanner*, {-uscanner-}, {-major_uscan_c-}, 660)dnl
396__devitem(ugen, ugen*, Generic USB devices)dnl
397_mkdev(ugen, ugen*, {-n=Mult($U, 16)
398	for j in 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
399	do
400		M ugen$U.$j c major_ugen_c Add($n, $j) 660
401	done-})dnl
402__devtitle(call, Call units)dnl
403__devtitle(term, Terminal ports)dnl
404__devitem(dca, dca*, HP200/300 single port serial interface)dnl
405__devitem(dcm, dcm*, HP200/300 4 port serial mux interface)dnl
406__devitem(apci, apci*, HP400 4 port serial mux interface)dnl
407__devitem({-com-}, {-tty[0-7][0-9a-f]-}, NS16x50 serial ports)dnl
408_mkdev(com, {-tty[0-7][0-9a-f]-}, {-U=${i#tty*}
409	o=$(h2d $U)
410	M tty$U c major_com_c $o 660 dialer uucp
411	M cua$U c major_com_c Add($o, 128) 660 dialer uucp-})dnl
412__devitem(ttyc, ttyc*, Cyclades serial ports)dnl
413__devitem(tzs, tty[a-z]*, Zilog 8530 Serial Port)dnl
414_mkdev(tzs, {-tty[a-z]-}, {-u=${i#tty*}
415	case $u in
416	a) n=0 ;;
417	b) n=1 ;;
418	c) n=4 ;;
419	d) n=5 ;;
420	*) echo unknown tty device $i ;;
421	esac
422	M tty$u c major_tzs_c $n 660 dialer uucp-})dnl
423__devitem(tth, ttyh*, Sab82532 serial devices)dnl
424_mkdev(tth, ttyh*, {-M ttyh$U c major_tth_c $U 660 dialer uucp-})dnl
425__devitem(czs, cua[a-z]*, Zilog 8530 Serial Port)dnl
426_mkdev(czs, cua[a-z], {-u=${i#cua*}
427	case $u in
428	a) n=0 ;;
429	b) n=1 ;;
430	c) n=4 ;;
431	d) n=5 ;;
432	*) echo unknown cua device $i ;;
433	esac
434	M cua$u c major_czs_c Add($n, 128) 660 dialer uucp-})dnl
435__devitem(tty0, tty00, Standard serial port)dnl
436__devitem(mac_tty0, tty00, Standard serial port)dnl
437__devitem(ttyz, tty[a-d], On-board zs serial ports)dnl
438__devitem(cuaz, cua[a-d], On-board zs serial ports)dnl
439__devitem(ttyB, ttyB?, DEC 3000 ZS8530 ("scc") serial ports)dnl
440__devitem(scc, scc*, 82530 serial interface)dnl
441__devtitle(spec, Special purpose devices)dnl
442__devitem(apm, apm, Power management device)dnl
443_mkdev(apm, apm*, {-M apm	c major_apm_c 0 644
444	M apmctl	c major_apm_c 8 644-})dnl
445__devitem(pctr, pctr*, PC Performance Tuning Register access device)dnl
446_mkdev(pctr, pctr, {-M pctr c major_pctr_c 0 644-})dnl
447__devitem(systrace, systrace*, System call tracing device)dnl
448_mkdev(systrace, systrace, {-M systrace c major_systrace_c 0 644-})dnl
449__devitem(au, audio*, Audio devices)dnl
450_mkdev(au, audio*, {-M sound$U	c major_au_c $U
451	M mixer$U	c major_au_c Add($U, 16)
452	M audio$U	c major_au_c Add($U, 128)
453	M audioctl$U	c major_au_c Add($U, 192)
454	MKlist="$MKlist;[ -e audio ] || ln -s audio$U audio"
455	MKlist="$MKlist;[ -e mixer ] || ln -s mixer$U mixer"
456	MKlist="$MKlist;[ -e sound ] || ln -s sound$U sound"
457	MKlist="$MKlist;[ -e audioctl ] || ln -s audioctl$U audioctl"-})dnl
458__devitem(asc, asc*, ASC Audio device)dnl
459_mkdev(asc, asc*, {-M asc$U major_asc_c 0-})dnl
460__devitem(music, music*, MIDI devices)dnl
461_mkdev(music, music*, {-M music$U     c major_music_c $U
462	M sequencer$U c major_music_c Add($U, 128)
463	MKlist="$MKlist;[ -e music ] || ln -s music$U music"
464	MKlist="$MKlist;[ -e sequencer ] || ln -s sequencer$U sequencer"-})dnl
465__devitem(radio, radio*, FM tuner devices)dnl
466_mkdev(radio, radio*, {-M radio$U     c major_radio_c $U
467	MKlist="$MKlist;[ -e radio ] || ln -s radio$U radio"-})dnl
468__devitem(fdesc, fd, fd/* nodes for fdescfs)dnl
469_mkdev(fdesc, fd, {-RMlist="mkdir -p fd;$RMlist" n=0
470	while [ $n -lt 64 ];do M fd/$n c major_fdesc_c $n;n=Add($n, 1);done
471	MKlist="$MKlist;chmod 555 fd"-})dnl
472__devitem(grf_mac, grf*, Raw interface to the mac68k graphics devices)dnl
473__devitem(ite, ite*, Terminal emulator interface to HP300 graphics devices)dnl
474__devitem({-hil-}, {-hil-}, HP-HIL input devices)dnl
475__devitem(oppr, openprom)dnl
476_cdev(oppr, openprom, 70, 0)dnl
477__devitem(cry, crypto, Hardware crypto access driver)dnl
478_mkdev(cry, crypto, {-M crypto c major_cry_c-} 0)dnl
479__devitem(pf, pf*, Packet Filter)dnl
480_mkdev(pf, {-pf*-}, {-M pf c major_pf_c 0 600-})dnl
481__devitem(bpf, bpf*, Berkeley Packet Filter)dnl
482_mkdev(bpf, {-bpf*-}, {-M bpf$U c major_bpf_c $U 600-}, 600)dnl
483_mkdev(tun, {-tun*-}, {-M tun$U c major_tun_c $U 600-}, 600)dnl
484__devitem(speak, speaker, PC speaker)dnl
485_mkdev(speak, speaker, {-M speaker c major_speak_c 0 600-})dnl
486__devitem(lkm, lkm, Loadable kernel modules interface)dnl
487_cdev(lkm, lkm, {-major_lkm_c-}, 0, 640, _lkm)dnl
488__devitem(mmcl, mmclock, Memory mapped clock)dnl
489__devitem(tun, tun*, Network tunnel driver)dnl
490__devitem(rnd, *random, In-kernel random data source)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)dnl
500__devitem(bppmag, bppmag[mno], Magma parallel port)dnl
501__devitem(spif, spif*, quote(spif)multiport cards)dnl
502__devitem(bppsp, bpp[jkl], quote(spif)parallel port)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)dnl
537_mcdev(xfs, xfs*, xfs, {-major_xfs_c-}, 600)dnl
538__devitem(hil, hil, HP-HIL input devices)dnl
539__devitem(rmidi, rmidi*, Raw MIDI devices)dnl
540_mcdev(rmidi, rmidi*, rmidi, {-major_rmidi_c-}, 666)dnl
541__devtitle(plat, Platform-specific devices)dnl
542__devitem(bktr, bktr*, Video frame grabbers)dnl
543_mcdev(bktr, bktr*, bktr, {-major_bktr_c-}, 644)dnl
544__devitem(tuner, tuner*, Tuner devices)dnl
545_mkdev(tuner, tuner*, {-M tuner$U c major_bktr_c Add(Mult($U, 2), 16) 644-}, 644)dnl
546__devitem(pci, pci, PCI bus device)dnl
547_mkdev(pci, pci, {-M pci c major_pci_c 0 600-}, 600)dnl
548__devitem(adb, adb, Apple Desktop bus event interface)dnl
549_mkdev(adb, adb, {-M adb c major_adb_c 0-})dnl
550__devitem(pdc, pdc, PDC device)dnl
551__devitem(gpr, gpr*, GPR400 smartcard reader)dnl
552_mcdev(gpr, gpr*, gpr, {-major_gpr_c-})dnl
553_mkdev(local, local, {-test -s $T.local && sh $T.local-})dnl
554