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