MAKEDEV.mi revision 1.60
1include(MAKEDEV.sub)dnl
2dnl
3vers(a, {-$OpenBSD: MAKEDEV.mi,v 1.60 2003/06/18 18:08:59 todd Exp $-})dnl
4dnl
5divert(1)dnl
6{-#-}
7{-#-} Copyright (c) 2001,2002,2003 Todd T. Fries <todd@OpenBSD.org>
8{-#-}
9{-#-} Permission to use, copy, modify, and distribute this software for any
10{-#-} purpose with or without fee is hereby granted, provided that the above
11{-#-} copyright notice and this permission notice appear in all copies.
12{-#-}
13{-#-} THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
14{-#-} WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
15{-#-} MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
16{-#-} ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
17{-#-} WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
18{-#-} ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
19{-#-} OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20{-#-}
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 HOW TO ADD A DEVICE:
32dnl
33dnl In this file, you must use at least two macros:
34dnl
35dnl  Use '__devitem(uniqueid, name-pattern, description)' to create an entry
36dnl  in the description at the top of the generated MAKEDEV file:
37dnl
38dnl    __devitem(sca, sca*, Sugar Generic device)dnl
39dnl    __devitem(cry, crypto, hardware crypto access driver)dnl
40dnl
41dnl  This is ultimately shown as:
42dnl
43dnl    #  sca*   Sugar Generic device
44dnl    #  crypto hardware crypto access driver
45dnl
46dnl  Use '_mkdev(uniqueid, shell-pattern, {-shell-script-})dnl' to create
47dnl  a shell script fragment used to 'create' the device (be sure to match
48dnl  the uniqueid from above):
49dnl
50dnl    _mkdev(sca, sca*, {-M sca$U c major_sca_c $U
51dnl           M rsca$U b major_sca_b Add($U, 128)-})dnl
52dnl    _mkdev(cry, crypto, {-M crypto c major_cry_c 0-})dnl
53dnl
54dnl  This is ultimately expanded into:
55dnl
56dnl    sca*)
57dnl           M sca$U c 24 $U
58dnl           M sca$U b 42 $(($U+128))
59dnl           ;;
60dnl
61dnl    crypto)
62dnl           M crypto c 47 0
63dnl           ;;
64dnl
65dnl In the MAKEDEV.md file, add a '_DEV(uniqueid, charmajor, blockmajor)'
66dnl entry:
67dnl
68dnl   _DEV(sca, 24, 42)
69dnl   _DEV(cry, 47)
70dnl
71dnl Final step is to use the 'target/twrget' macros to have the 'all)' target
72dnl generate one or more device(s).  Usage of 'target/twrget' is:
73dnl      target(target_name, device_name [, append_string ] .. )
74dnl      twrget(target_name, uniqueid, device_name, [, append_string ] .. )
75dnl
76dnl        target_name   a unique name that later is used as an argument to
77dnl                      'show_target()' (which expands all devices for a
78dnl                      given 'target_name').
79dnl        uniqueid      same as 'uniqueid' above
80dnl        device_name   string representing the device to be mknod'ed
81dnl        append_string for each append_string, `device_name' is prepended
82dnl
83dnl Note: 'target(a,b,c)' is equivalent to 'twrget(a,b,b,c)'
84dnl
85dnl
86dnl For a short example:
87dnl
88dnl   target(all, std)dnl
89dnl   target(all, sca, 0, 1, 2, 3)dnl
90dnl   twrget(all, cry, crypto)dnl
91dnl
92dnl would expand to:
93dnl
94dnl   all)
95dnl        R std sca0 sca1 sca2 sca3 crypto
96dnl        ;;
97dnl
98dnl presuming '_DEV(sca, ?, ?)' and '_DEV(std)' were in the MAKEDEV.md file.
99dnl
100dnl
101dnl Everything is 'automatically' added to 'MAKEDEV' based on whether or
102dnl not the '_DEV()' entry has a corresponding _mkdev() and __devitem()
103dnl entry in MAKEDEV.mi (this file).
104dnl
105dnl Note: be very wary of adding whitespace, carriage returns, or not
106dnl finishing a macro with ')dnl' .. otherwise, extra blank lines show up
107dnl in the output.
108dnl
109dnl TODO:
110dnl
111dnl make a 'disktgt' macro that automatically does:
112dnl disktgt(rd, {-rd-})
113dnl
114dnl	target(all,rd,0)
115dnl	target(ramd,rd,0)
116dnl	disk_q(rd)
117dnl	__devitem(rd, {-rd*-}, {-rd-})dnl
118dnl
119dnl  Note: not all disks are generated in 'all)'. (e.g. vax has a lot of
120dnl        disks that are not generated by 'all)')
121dnl
122dnl
123_mkdev(loc, local, {-test -s $T.local && sh $T.local-})dnl
124dnl
125__devtitle(make, Device "make" file.  Valid arguments)dnl
126__devitem({-all-}, {-all-},
127{-makes all known devices{-,-} including local devices.
128{-#-}		Tries to make the ``standard'' number of each type.-})dnl
129dnl
130dnl
131target(all, mcd, 0)dnl
132twrget(all, fdesc, fd)dnl
133target(all, st, 0, 1)dnl
134target(all, std)dnl
135target(all, raid, 0, 1, 2, 3)dnl
136target(all, rz, 0, 1, 2, 3, 4)dnl
137target(all, hp, 0, 1, 2, 3)dnl
138target(all, ra, 0, 1, 2, 3)dnl
139target(all, rx, 0, 1)dnl
140target(all, wd, 0, 1, 2, 3)dnl
141target(all, xd, 0, 1, 2, 3)dnl
142twrget(all, aflo, fd, 0, 1, 2, 3)dnl
143target(all, systrace)dnl
144target(all, pctr)dnl
145target(all, pctr0)dnl
146target(all, pf)dnl
147twrget(all, cry, crypto)dnl
148target(all, apm)dnl
149twrget(all, tth, ttyh, 0, 1)dnl
150target(all, ttyA, 0, 1)dnl
151target(all, ttyB, 0, 1, 2, 3, 4, 5)dnl
152twrget(all, attyB, ttyB, 0, 1, 2, 3, 4)dnl
153target(all, tty0, 0, 1, 2, 3)dnl
154twrget(all, mac_tty0, tty0, 0, 1)dnl
155twrget(all, tzs, tty, a, b, c, d)dnl
156twrget(all, czs, cua, a, b, c, d)dnl
157target(all, ttyc, 0, 1, 2, 3, 4, 5, 6, 7)dnl
158twrget(all, com, tty0, 0, 1, 2, 3)dnl
159twrget(all, mac_ttye, ttye, 0)dnl
160target(all, ttye, 0, 1, 2, 3, 4, 5, 6)dnl
161target(all, lkm)dnl
162twrget(all, mmcl, mmclock)dnl
163target(all, lpt, 0, 1, 2)dnl
164twrget(all, lpt, lpa, 0, 1, 2)dnl
165target(all, joy, 0, 1)dnl
166twrget(all, rnd, random)dnl
167target(all, uk, 0)dnl
168target(all, wt, 0)dnl
169target(all, wdt, 0)dnl
170twrget(all, au, audio, 0)dnl
171twrget(all, speak, speaker)dnl
172target(all, asc, 0)dnl
173target(all, music, 0)dnl
174target(all, radio, 0)dnl
175target(all, tuner, 0)dnl
176target(all, rmidi, 0, 1, 2, 3, 4, 5, 6, 7)dnl
177target(all, usbs)dnl
178target(all, adb)dnl
179target(all, iop, 0, 1)dnl
180target(all, pci)dnl
181twrget(all, wsmouse, wscons)dnl
182twrget(all, grf_mac, grf, 0, 1, 2, 3)dnl
183target(all, par, 0)dnl
184twrget(all, amouse, mouse, 0, 1)dnl
185twrget(all, akbd, kbd)dnl
186target(all, apci, 0)dnl
187target(all, ppi, 0)dnl
188target(all, view0, 0, 1, 2, 3, 4, 5)dnl
189target(all, local)dnl
190target(all, gpr, 0)dnl
191dnl
192_mkdev(all, {-all-}, {-dnl
193show_target(all)dnl
194-})dnl
195dnl
196__devitem(ramdisk, ramdisk, devices to be put on ramdisk-based media)dnl
197__devitem(std, {-std-}, standard devices)dnl
198dnl
199dnl
200dnl
201dnl _std
202dnl
203dnl $1: tty
204dnl $2: memstuff
205dnl $3: ksyms
206dnl $4: drum
207dnl $5: klog
208dnl
209define({-_std-}, {-dnl
210std)
211	M console	c 0 0 600
212	M tty		c $1 0
213	M mem		c $2 0 640 kmem
214	M kmem		c $2 1 640 kmem
215	M null		c $2 2
216	M zero		c $2 12
217	M stdin		c major_fdesc_c 0
218	M stdout	c major_fdesc_c 1
219	M stderr	c major_fdesc_c 2
220	M ksyms		c $3 0 640 kmem
221	M drum		c $4 0 640 kmem
222	M klog		c $5 0 600-})dnl
223dnl
224target(usb, usb, 0, 1)dnl
225target(usb, urio, 0)dnl
226twrget(usb, uscan, uscanner, 0)dnl
227target(usb, uhid, 0, 1, 2, 3)dnl
228target(usb, ulpt, 0, 1)dnl
229target(usb, ugen, 0, 1)dnl
230target(usb, utty, 0, 1)dnl
231dnl
232__devitem({-usbs-}, usbs, make USB devices)dnl
233_mkdev(usbs, usbs, {-dnl
234show_target({-usb-})dnl
235-})dnl
236__devtitle(tap, Tapes)dnl
237__devitem(wt, {-wt*	-}, QIC-interface (e.g. not SCSI) 3M cartridge tape)dnl
238_mkdev(wt, wt*,
239{-name=wt
240	n=Mult($U, 8) m=Add($n, 4)
241	M $name$U	b major_wt_b $n 640 operator
242	M r$name$U	c major_wt_c $n 640 operator
243	M n$name$U	b major_wt_b $m 640 operator
244	M nr$name$U	c major_wt_c $m 640 operator-})dnl
245__devitem(tz, tz*, {-SCSI tapes{-,-} DEC TK50 cartridge tape-})dnl
246__devitem(st, {-st*-}, SCSI tapes)dnl
247_mkdev(st, st*, {-n=Mult($U, 16)
248	for pre in " " n e en
249	do
250		M ${pre}st$U	b major_st_b $n 660 operator
251		M ${pre}rst$U	c major_st_c $n 660 operator
252		n=Add($n, 1)
253	done-})dnl
254__devitem(ct, ct*, HP300 HP-IB cartridge tape)dnl
255__devitem(mt, mt*, (Magnetic) 9-track reel tape)dnl
256__devitem(ht, ht*, massbus tm03 & tu??)dnl
257__devitem(tm, tm*, unibus tm11 & te10 emulations (e.g. Emulex tc-11))dnl
258__devitem(ts, ts*, unibus ts11)dnl
259__devitem(ut, ut*, unibus tu45 emulations (e.g.si 9700))dnl
260__devtitle(dis, Disks)dnl
261__devitem(rz, rz*, SCSI disks)dnl
262__devitem(sd, {-sd*-}, {-SCSI disks, includes flopticals-})dnl
263__devitem(hd, {-hd*-}, HP300 HP-IB disks)dnl
264__devitem(cd, {-cd*-}, SCSI cdrom drives)dnl
265__devitem(acd, acd*, ATAPI cdrom drives)dnl
266_mkdev(cd, cd*, {-dodisk2 cd $U major_cd_b major_cd_c $U 0{--}ifstep(cd)-})dnl
267__devitem(mcd, mcd*, Mitsumi cdrom drives)dnl
268_mkdev(mcd, mcd*, {-dodisk2 mcd $U major_mcd_b major_mcd_c $U 0{--}ifstep(mcd)dnl
269-})dnl
270__devitem(ch, {-ch*-}, SCSI media changer)dnl
271_mcdev(ch, ch*, ch, {-major_ch_c-}, 660, operator)dnl
272__devitem(uk, uk*, SCSI Unknown device)dnl
273_mcdev(uk, uk*, uk, {-major_uk_c-}, 640, operator)dnl
274__devitem(ss, ss*, SCSI scanners)dnl
275_mkdev(ss, ss*, {-M ss$U c major_ss_c Mult($U,16) 640 operator
276	M nss$U c major_ss_c Add(Mult($U,16),1) 640 operator
277	M enss$U c major_ss_c Add(Mult($U,16),3) 640 operator
278	RMlist="$RMlist scan$U"
279	MKlist="$MKlist;umask 77;ln -s ss$U scan$U"-})dnl
280__devitem(ses, ses*, SES/SAF-TE SCSI devices)dnl
281_mkdev(ses, ses*, {-M ses$U c major_ses_c $U 640 operator-})dnl
282__devitem(ramd, ramdisk, makes all devices for a ramdisk kernel)dnl arc
283_mkdev(ramd, ramdisk, {-dnl
284show_target(ramd)dnl
285-})dnl
286target(ramd, std)dnl
287target(ramd, random)dnl
288target(ramd, bpf, 0)dnl
289__devitem(rd, {-rd*-}, "rd" pseudo-disks)dnl
290_mkdev(rd, rd*, {-dodisk2 rd $U major_rd_b major_rd_c $U 0{--}ifstep(rd)-})dnl
291__devitem(xd, xd*, Xylogic 753/7053 disks)dnl
292__devitem(xy, xy*, {-	Xylogic 450/451 disks-})dnl
293__devitem(flo, {-fd*-}, {-Floppy disk drives (3 1/2"{-,-} 5 1/4")-})dnl
294_mkdev(flo, fd*,
295{-typnam=$U${i#fd[01]*}
296	case $typnam in
297	0|1)	typnum=0;; # no type specified, assume A
298	*A)	typnum=0; typnam=0;;
299	*B)	typnum=1;;
300	*C)	typnum=2;;
301	*D)	typnum=3;;
302	*E)	typnum=4;;
303	*F)	typnum=5;;
304	*G)	typnum=6;;
305	*H)	typnum=7;;
306	*)	echo bad type $typnam for $i; exit 1;;
307	esac
308	case $U in
309	0|1)	blk=major_flo_b; chr=major_flo_c;;
310	*)	echo bad unit $U for $i; exit 1;;
311	esac
312	nam=fd${typnam}
313	n=Add(Mult($U, 128), Mult($typnum, 16))
314	M ${nam}a	b $blk $n 640 operator
315	M ${nam}b	b $blk Add($n, 1) 640 operator
316	M ${nam}c	b $blk Add($n, 2) 640 operator
317	M r${nam}a	c $chr $n 640 operator
318	M r${nam}b	c $chr Add($n, 1) 640 operator
319	M r${nam}c	c $chr Add($n, 2) 640 operator-}, 664)dnl
320__devitem(aflo, ramdisk, devices needed for install floppies)dnl
321_mkdev(aflo, fd*, {-case $U in 0|1|2|3)
322	M fd${U}a b major_aflo_b Mult($U, 16) 640 operator
323	M fd${U}b b major_aflo_b Add(Mult($U, 16), 1) 640 operator
324	M rfd${U}a c major_aflo_c Mult($U, 16) 640 operator
325	M rfd${U}b c major_aflo_c Add(Mult($U, 16), 1) 640 operator;;
326	*) echo bad unit for floppy disk in: $i;;
327	esac-})dnl
328__devitem(iop, iop*, I2O controller device)dnl
329_mcdev(iop, iop*, iop, {-major_iop_c-}, 660)dnl
330__devitem(wdt, wdt0, watchdog timer)dnl
331_mcdev(wdt, wdt0, wdt, {-major_wdt_c-}, 440, operator)dnl
332__devitem(local, local, configuration specific devices)dnl
333__devitem(wd, {-wd*-}, {-"winchester" disk drives (ST506, IDE, ESDI, RLL, ...)-})dnl
334__devitem(ccd, ccd*, concatenated disk devices)dnl
335__devitem(raid, raid*, RAIDframe disk devices)dnl
336__devitem(vnd, vnd*, "file" pseudo-disks)dnl
337_mkdev(vnd, vnd*, {-dodisk vnd $U major_vnd_b major_vnd_c $U 0{--}ifstep(vnd)
338	dodisk svnd $U major_vnd_b major_vnd_c $U 128{--}ifstep(vnd)-})dnl
339__devitem(ra, ra*, {-MSCP disks (ra??, hd??)-})dnl
340__devitem(hp, hp*, {-massbuss rm??-})dnl
341__devitem(hk, hk*, {-unibus rk06 and rk07-})dnl
342__devitem(up, up*, {-other unibus devices (e.g. on Emulex sc-21v controller)-})dnl
343__devitem(rb, rb*, {-730 idc w/ rb80 and/or rb02-})dnl
344__devitem(rx, rx*, {-MSCP floppy disk (rx33/50/...)-})dnl
345__devitem(rl, rl*, {-unibus r102-})dnl
346__devitem(hd, hd*, {-HDC9224 hd disks on VS2000-})dnl
347dnl
348dnl For normal disk devices, add a disk_q entry; anything else define like
349dnl the rest (such as vnd above).
350dnl
351disk_q({-ccd-})dnl
352disk_q({-hd-})dnl
353disk_q({-hk-})dnl
354disk_q({-hp-})dnl
355disk_q({-ra-})dnl
356disk_q({-raid-})dnl
357disk_q({-rb-})dnl
358disk_q({-rl-})dnl
359disk_q({-rx-})dnl
360disk_q({-sd-})dnl
361disk_q({-xy-})dnl
362disk_q({-xd-})dnl
363disk_q({-up-})dnl
364disk_q({-wd-})dnl
365disk_q({-rz-})dnl
366dnl
367__devitem(loc, local, configuration specific devices)dnl
368_mkdev(loc, local, {-test -s $T.local && sh $T.local-})dnl
369_mkdev({-disks-}, {-undefine({-C_ase-})show_disks()undefine({-C_ase-})-},
370{-case $i in
371show_disks2()dnl
372	esac-})dnl
373__mkdev({-disks-}){--}dnl
374dnl
375__devtitle(cons, Console ports)dnl
376__devitem(ttyv0, ttyv0, pccons or pcvt screen 0)dnl
377__devitem(ttyv, ttyv*, pcvt)dnl
378__devitem(ttye, ttye*, ite bitmapped consoles)dnl
379__devitem(mac_ttye, ttye*, ite bitmapped consoles)dnl
380__devitem(wscons, ttyC0, wscons screen 0)dnl
381twrget(wscons, wscons, ttyC, cfg, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b)dnl
382target(wscons, wsmux)dnl
383target(wscons, wskbd, 0, 1, 2, 3)dnl
384target(wscons, wsmouse, 0, 1, 2, 3)dnl
385_mkdev({-wscons-}, {-wscons-}, {-dnl
386show_target(wscons)dnl
387-})dnl
388__devitem(wsdisp, ttyC-F*, wscons virtual consoles)dnl
389_mkdev({-wsdisp-}, tty[C-F]*, {-U=${i##tty[C-F]}
390	case $i in
391	ttyC*) n=C m=expr(0*256);;
392	ttyD*) n=D m=expr(1*256);;
393	ttyE*) n=E m=expr(2*256);;
394	ttyF*) n=F m=expr(3*256);;
395	esac
396	case $U in
397	[0-9a-f]) M tty$n$U c major_wsdisp_c {-$(( 16#$U + $m ))-} 600;;
398	cfg) M tty${n}cfg c major_wsdisp_c Add(255,$m) 600;;
399	*) echo bad unit $U for $i; exit 1;;
400	esac-})dnl
401__devitem(wskbd, wskbd*, wscons keyboards)dnl
402_mkdev(wskbd, wskbd*, {-M wskbd$U c major_wskbd_c $U 600-})dnl
403__devitem(wsmux, wsmux, wscons keyboard/mouse mux devices)dnl
404_mkdev(wsmux, wsmux|wsmouse|wskbd, {-M wsmouse c major_wsmux_c 0 600
405	M wskbd c major_wsmux_c 1 600-})dnl
406__devitem(pcons, console, PROM console)dnl
407__devtitle(point, Pointing devices)dnl
408__devitem(wsmouse, wsmouse*, wscons mice)dnl
409_mkdev(wsmouse, wsmouse*, {-M wsmouse$U c major_wsmouse_c $U 600-})dnl
410__devitem(quad, quadmouse, "quadrature mouse")dnl
411__devtitle(pty, Pseudo terminals)dnl
412__devitem(tty, tty*, set of 16 slave psuedo terminals)dnl
413__devitem(pty, pty*, set of 16 master pseudo terminals)dnl
414_mkdev(pty, pty*, {-if [ $U -gt 15 ]; then
415		echo bad unit for pty in: $i
416		continue
417	fi
418	set -A tbl p q r s t u v w x y z P Q R S T
419	name=${tbl[$U]}
420	n=0
421	while [ $n -lt 16 ]
422	do
423		nam=$name$(hex $n)
424		off=Mult($U, 16)
425		M tty$nam c major_tty_c Add($off, $n)
426		M pty$nam c major_pty_c Add($off, $n)
427		n=Add($n, 1)
428	done-})dnl
429__devitem(dc, dc*, {-4 channel serial interface (keyboard{-,-} mouse{-,-}modem{-,-} printer)-})dnl
430__devtitle(prn, Printers)dnl
431__devitem(par, par*, motherboard parallel port)dnl
432__devitem(lpt, lpt*, IEEE 1284 centronics printer)dnl
433_mkdev(lpt, lpt*|lpa*,
434{-case $i in
435	lpt*) n=lpt f=0;;
436	lpa*) n=lpa f=128;;
437	esac
438	M $n$U c major_lpt_c Add($U, $f) 600-})dnl
439__devitem(lpa, lpa*, interruptless lp)dnl
440__devitem(ppi, ppi*, HP-IB plotters)dnl
441__devtitle({-usb-}, USB devices)dnl
442__devitem({-usb-}, usb*, Bus control devices used by usbd for attach/detach)dnl
443_mkdev({-usb-}, usb*, {-[ "$i" = "usb" ] && u= || u=$U
444	M usb$u c major_usb_c $U 660-})dnl
445__devitem(uhid, uhid*, Generic HID devices)dnl
446_mcdev({-uhid-}, uhid*, {-uhid-}, {-major_uhid_c-}, 660)dnl
447__devitem(ulpt, ulpt*, Printer devices)dnl
448_mcdev({-ulpt-}, ulpt*, {-ulpt-}, {-major_ulpt_c-}, 660)dnl
449__devitem(utty, utty*, Serial ports)dnl
450_mcdev({-utty-}, utty*, {-utty-}, {-major_utty_c-}, 660)dnl
451__devitem(urio, urio*, Diamond Multimedia Rio 500)dnl
452_mcdev({-urio-}, urio*, {-urio-}, {-major_urio_c-}, 660)dnl
453__devitem(uscan, uscanner*, Scanners)dnl
454_mcdev({-uscan-}, uscanner*, {-uscanner-}, {-major_uscan_c-}, 660)dnl
455__devitem(ugen, ugen*, Generic device)dnl
456_mkdev(ugen, ugen*, {-n=Mult($U, 16)
457	for j in 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
458	do
459		M ugen$U.$j c major_ugen_c Add($n, $j) 660
460	done-})dnl
461__devtitle(cpu, Cpus)dnl
462__devitem(cpu, cpu*, cpus)dnl
463__devtitle(call, Call units)dnl
464__devtitle(term, Terminal ports)dnl
465__devtitle(termp, Terminal multiplexers)dnl
466__devitem(dca, dca*, HP200/300 single port serial interface)dnl
467__devitem(dcm, dcm*, HP200/300 4 port serial mux interface)dnl
468__devitem(apci, apci*, HP400 4 port serial mux interface)dnl
469__devitem({-com-}, {-tty0*-}, NS16x50 serial ports)dnl
470_mkdev(com, {-tty0*-}, {-M tty$U c major_com_c $U 660 dialer uucp
471	M cua$U c major_com_c Add($U, 128) 660 dialer uucp-})dnl
472__devitem(ttyc, ttyc*, Cyclades serial ports)dnl
473__devitem(tzs, tty[a-z]*, Zilog 8530 Serial Port)dnl
474_mkdev(tzs, {-tty[a-z]-}, {-u=${i#tty*}
475	case $u in
476	a) n=0 ;;
477	b) n=1 ;;
478	c) n=4 ;;
479	d) n=5 ;;
480	*) echo unknown tty device $i ;;
481	esac
482	M tty$u c major_tzs_c $n 660 dialer uucp-})dnl
483__devitem(tth, ttyh*, Sab82532 serial devices)dnl
484_mkdev(tth, ttyh*, {-M ttyh$U c major_tth_c $U 660 dialer uucp-})dnl
485__devitem(czs, cua[a-z]*, Zilog 8530 Serial Port)dnl
486_mkdev(czs, cua[a-z], {-u=${i#cua*}
487	case $u in
488	a) n=0 ;;
489	b) n=1 ;;
490	c) n=4 ;;
491	d) n=5 ;;
492	*) echo unknown cua device $i ;;
493	esac
494	M cua$u c major_czs_c Add($n, 128) 660 dialer uucp-})dnl
495__devitem(arm_tty, tty*, {-alias for PC COM ports{-,-} this is what the system really wants-})dnl
496__devitem(tty0, tty00, standard serial port)dnl
497__devitem(mac_tty0, tty00, standard serial port)dnl
498__devitem(ttyA, ttyA*, mfc serial ports)dnl
499__devitem(ttyz, tty[a-d], onboard zs serial ports)dnl
500__devitem(cuaz, cua[a-d], onboard zs serial ports)dnl
501__devitem(ttyB, ttyB?, DEC 3000 ZS8530 ("scc") serial ports)dnl
502__devitem(scc, scc*, 82530 serial interface)dnl
503__devitem(arc_ttyC, ttyC0, pccons)dnl
504__devitem(i386_ttyC, ttyC*, pcvt)dnl
505__devitem(ttyC, ttyC?, {-AlphaStation NS16550 ("com serial ports")-})dnl
506__devitem(ttyE, ttyE?, Workstation console (framebuffer & keyboard) tty emulators)dnl
507__devitem(ser02, ser02, {-serial2 port (channel A on 8530)-})dnl
508__devitem(mdm02, mdm02, {-modem2 port (channel B on 8530)-})dnl
509__devtitle(spec, Special purpose devices)dnl
510__devitem(apm, apm	, power management device)dnl
511_mkdev(apm, apm*, {-M apm	c major_apm_c 0 644
512	M apmctl	c major_apm_c 8 644-})dnl
513__devitem(pcmcia, pcmcia*, PCMCIA card drivers)dnl
514__devitem(pctr, pctr*, PC Performance Tuning Register access device)dnl
515_mkdev(pctr, pctr, {-M pctr c major_pctr_c 0 644-})dnl
516__devitem(systrace, systrace*, system call tracing device)dnl
517_mkdev(systrace, systrace, {-M systrace c major_systrace_c 0 644-})dnl
518__devitem(au, audio*, audio device)dnl
519_mkdev(au, audio*, {-M sound$U	c major_au_c $U
520	M mixer$U	c major_au_c Add($U, 16)
521	M audio$U	c major_au_c Add($U, 128)
522	M audioctl$U	c major_au_c Add($U, 192)
523	MKlist="$MKlist;[ -e audio ] || ln -s audio$U audio"
524	MKlist="$MKlist;[ -e mixer ] || ln -s mixer$U mixer"
525	MKlist="$MKlist;[ -e sound ] || ln -s sound$U sound"
526	MKlist="$MKlist;[ -e audioctl ] || ln -s audioctl$U audioctl"-})dnl
527__devitem(asc, asc*, ASC Audio device)dnl
528_mkdev(asc, asc*, {-M asc$U major_asc_c 0-})dnl
529__devitem(music, music*, midi devices)dnl
530_mkdev(music, music*, {-M music$U     c major_music_c $U
531	M sequencer$U c major_music_c Add($U, 128)
532	MKlist="$MKlist;[ -e music ] || ln -s music$U music"
533	MKlist="$MKlist;[ -e sequencer ] || ln -s sequencer$U sequencer"-})dnl
534__devitem(radio, radio*, FM tuner device)dnl
535_mkdev(radio, radio*, {-M radio$U     c major_radio_c $U
536	MKlist="$MKlist;[ -e radio ] || ln -s radio$U radio"-})dnl
537__devitem(fdesc, fd, makes fd/* for the fdescfs)dnl
538_mkdev(fdesc, fd, {-RMlist="mkdir -p fd;$RMlist" n=0
539	while [ $n -lt 64 ];do M fd/$n c major_fdesc_c $n;n=Add($n, 1);done
540	MKlist="$MKlist;chmod 555 fd"-})dnl
541__devtitle(graph, Graphics devices)dnl
542__devitem(grf_mac, grf*, {-custom chip (grf0){-,-} Retina Z2/Z3 (grf1/grf2){-,-}
543{-#-}		Cirrus boards (grf3){-,-} A2410 (grf4) video or
544{-#-}		CyberVision 64 (grf5)-})dnl
545__devitem(ite, ite*, terminal emulator interface to HP300 graphics devices)dnl
546__devitem({-hil-}, {-hil-}, HP300 HIL input devices)dnl
547__devitem(oppr, openprom)dnl
548_cdev(oppr, openprom, 70, 0)dnl
549__devitem(cry, crypto, hardware crypto access driver)dnl
550_mkdev(cry, crypto, {-M crypto c major_cry_c-} 0)dnl
551__devitem(pf, pf*, Packet Filter)dnl
552_mkdev(pf, {-pf*-}, {-M pf c major_pf_c 0 600-})dnl
553__devitem(bpf, bpf*, Berkeley Packet Filter)dnl
554_mkdev(bpf, {-bpf*-}, {-M bpf$U c major_bpf_c $U 600-}, 600)dnl
555_mkdev(tun, {-tun*-}, {-M tun$U c major_tun_c $U 600-}, 600)dnl
556__devitem(speak, speaker, pc speaker)dnl
557_mkdev(speak, speaker, {-M speaker c major_speak_c 0 600-})dnl
558__devitem(kbd, kbd, keyboard (provides events, for X11))dnl
559_cdev(kbd, kbd, {-major_kbd_c-}, 0, 600)dnl
560__devitem(kbd_atari, kbd, Atari keyboard)dnl
561__devitem(akbd, kbd, Amiga keyboard)dnl
562__devitem(rkbd, kbd, raw keyboard)dnl
563__devitem(kbdctl, kbdctl, keyboard control)dnl
564__devitem(beep, beep, riscpc speaker)dnl
565__devitem(iic, iic*, IIC bus device)dnl
566__devitem(rtc, rtc*, RTC device)dnl
567__devitem(view, view*, generic interface to graphic displays)dnl
568__devitem(aconf, aconf, {-autoconfig information (not yet)-})dnl
569__devitem(mouse-, mouse-*, "mouse link")dnl
570__devitem(mouse, mouse, mouse (provides events, for X11))dnl
571__devitem(amouse, mouse*, Amiga mice)dnl
572__devitem(lkm, lkm, loadable kernel modules interface)dnl
573_cdev(lkm, lkm, {-major_lkm_c-}, 0, 640, _lkm)dnl
574__devitem(mmcl, mmclock, memory mapped clock)dnl
575__devitem(tun, tun*, network tunnel driver)dnl
576__devitem(rnd, *random, inkernel random data source)dnl
577_mkdev(rnd, *random, {-n=0
578	for pre in " " s u p a
579	do
580		M ${pre}random c major_rnd_c $n 644
581		n=Add($n, 1)
582	done-}, 644)dnl
583__devitem(joy, joy*, joystick driver)dnl
584_mcdev(joy, joy*, joy, {-major_joy_c-}, 666)dnl
585__devitem(mag, magma*, magma card (makes 16 tty and 2 bpp))dnl
586__devitem(bppmag, bppmag[mno], magma parallel port device)dnl
587__devitem(spif, spif*, spif card (makes 8 tty and 1 bpp))dnl
588__devitem(bppsp, bpp[jkl], spif parallel port device)dnl
589_mkdev(mag, magma*, {-case $U in
590	0)	offset=0  nam=m;;
591	1)	offset=16 nam=n;;
592	2)	offset=32 nam=o;;
593	*)	echo "bad unit for $i: $U"; exit 127;;
594	esac
595	offset=Mult($U, 64)
596	n=0
597	while [ $n -lt 16 ]
598	do
599		name=${nam}`hex $n`
600		M tty$name c major_mag_c Add($offset, $n) 660 dialer uucp
601		n=Add($n, 1)
602	done
603	M bpp${nam}0 c major_bppmag_c Add($offset, 0) 600
604	M bpp${nam}1 c major_bppmag_c Add($offset, 1) 600-})dnl
605_mkdev(spif, spif*, {-case $U in
606	0)	offset=0  nam=j;;
607	1)	offset=16 nam=k;;
608	2)	offset=32 nam=l;;
609	*)	echo "bad unit for $i: $U"; exit 127;;
610	esac
611	offset=Mult($U, 64)
612	n=0
613	while [ $n -lt 8 ]
614	do
615		name=${nam}`hex $n`
616		M tty$name c major_spif_c Add($offset, $n) 660 dialer uucp
617		n=Add($n, 1)
618	done
619	M bpp${nam}0 c major_bppsp_c Add($offset, 0) 600-})dnl
620__devitem(bpp, bpp*, parallel port devices)dnl
621_mkdev(bpp, {-bpp*-}, {-M bpp$U c major_bpp_c $U 600-}, 600)dnl
622__devitem(xfs, xfs*, XFS filesystem devices)dnl
623_mcdev(xfs, xfs*, xfs, {-major_xfs_c-}, 600)dnl
624__devitem(hil, hil, HIL input devices)dnl
625__devitem(rmidi, rmidi*, raw midi devices)dnl
626_mcdev(rmidi, rmidi*, rmidi, {-major_rmidi_c-}, 666)dnl
627__devtitle(plat, Platform-specific devices)dnl
628__devitem(fb, fb*, framebuffer device)dnl
629__devitem(bktr, bktr*, video capturing)dnl
630_mcdev(bktr, bktr*, bktr, {-major_bktr_c-}, 644)dnl
631__devitem(tuner, tuner*, tuner device)dnl
632_mkdev(tuner, tuner*, {-M tuner$U c major_bktr_c Add(Mult($U, 2), 16) 644-}, 644)dnl
633__devitem(pci, pci, PCI bus device)dnl
634_mkdev(pci, pci, {-M pci c major_pci_c 0 600-}, 600)dnl
635__devitem(adb, adb, Apple Desktop bus event interface)dnl
636_mkdev(adb, adb, {-M adb c major_adb_c 0-})dnl
637__devitem(pdc, pdc, PDC device)dnl
638_mkdev(local, local, {-test -s $T.local && sh $T.local-}, 666)dnl
639__devitem(gpr, gpr*, gpr400 pcmcia device)dnl
640_mcdev(gpr, gpr*, gpr, {-major_gpr_c-})dnl
641dnl
642divert(1)dnl
643include(etc.MACHINE/MAKEDEV.md)dnl
644dnl
645dnl
646divert(0)dnl
647#!/bin/sh -
648#
649# THIS FILE AUTOMATICALLY GENERATED.  DO NOT EDIT.
650# generated from:
651#
652show_vers()dnl <-- now that all files are included, show versions
653#
654dnl
655divert(2)dnl
656PATH=/sbin:/usr/sbin:/bin:/usr/bin
657T=$0
658
659# set this to echo for Echo-Only debugging
660[ "$eo" ] || eo=
661
662hex()
663{
664	case ${--}1 in
665	[0-9]) echo -n {-$-}1;;
666	10) echo -n a;;
667	11) echo -n b;;
668	12) echo -n c;;
669	13) echo -n d;;
670	14) echo -n e;;
671	15) echo -n f;;
672	esac
673}
674
675trunc()
676{
677	# XXX pdksh can't seem to deal with locally scoped variables
678	# in ${foo#$bar} expansions
679	arg1="{-$-}1"
680	arg2="{-$-}2"
681	case {-$-}3 in
682	l)   echo ${arg2#$arg1} ;;
683	r|*) echo ${arg1#$arg2} ;;
684	esac
685}
686
687unt()
688{
689	# XXX pdksh can't seem to deal with locally scoped variables
690	# in ${foo#$bar} expansions
691	arg="{-$-}1"
692	tmp="${arg#[a-zA-Z]*}"
693	tmp="${tmp%*[a-zA-Z]}"
694	while [ "$tmp" != "$arg" ]
695	do
696		arg=$tmp
697		tmp="${arg#[a-zA-Z]*}"
698		tmp="${tmp%*[a-zA-Z]}"
699	done
700	echo $arg
701}
702dnl
703dnl dodisk(name, unit, blkmaj, chrmaj, unit, off[, stepping])
704dnl   arg: 1    2    3      4      5    6    7
705dnl
706
707dodisk()
708{
709	[ "$DEBUG" ] && set -x
710	n=Add(Mult(${5}, ${7:-16}), ${6}) count=0
711	RMlist="$RMlist {-$-}1{-$-}2? r{-$-}1{-$-}2?"
712	[ 0$7 -ne 8 ] && l="i j k l m n o p"
713	for d in a b c d e f g h $l
714	do
715		M {-$-}1{-$-}2$d	b {-$-}3 Add($n, $count) 640
716		M r{-$-}1{-$-}2$d	c {-$-}4 Add($n, $count) 640
717		let count=count+1
718	done
719	MKlist="$MKlist;chown root:operator {-$-}1{-$-}2? r{-$-}1{-$-}2?"
720}
721dnl
722dnl dodisk2(name, unit, blkmaj, chrmaj, unit, off[, stepping])
723dnl
724dnl 1. name    - prefix name of the device
725dnl 2. unit    - beginning unit number for block devices
726dnl 3. blkmaj  - block device major number
727dnl 4. chrmaj  - character device major number
728dnl 5. unit    - beginning unit number for character devices
729dnl 6. off     - offset from 0 for all minor numbers (see svnd for an example)
730dnl 7. step    - optional, defaults to 16, number of partitions per device
731dnl
732
733dodisk2()
734{
735	n=Add(Mult({-$-}5, ${7:-16}), {-$-}6)
736	M {-$-}1{-$-}2a b {-$-}3 $n 640 operator
737	M r{-$-}1{-$-}2a c {-$-}4 $n 640 operator
738	n=Add($n, 2)
739	M {-$-}1{-$-}2c b {-$-}3 $n 640 operator
740	M r{-$-}1{-$-}2c c {-$-}4 $n 640 operator
741}
742
743# M name b/c major minor [mode] [group]
744RMlist="rm -f"
745MKlist=":"
746
747mkl() {
748dnl
749dnl uncomment if multi mknod happens
750dnl
751ifelse(1, 0,
752[ "${mklist[{-$-}1]}" ] && mklist[{-$-}1]="${mklist[{-$-}1]} {-$-}2 {-$-}3 {-$-}4 {-$-}5" || {
753	  mklist[{-$-}1]="mknod -m {-$-}1 {-$-}2 {-$-}3 {-$-}4 {-$-}5"
754	  modes="$modes {-$-}1"
755     },
756dnl
757dnl non multi mknod
758dnl
759	[ "${mklist[{-$-}1]}" ] && {
760		mklist[{-$-}1]="${mklist[{-$-}1]};mknod -m {-$-}1 {-$-}2 {-$-}3 {-$-}4 {-$-}5"
761	} || {
762		mklist[{-$-}1]="mknod -m {-$-}1 {-$-}2 {-$-}3 {-$-}4 {-$-}5"
763		modes="$modes {-$-}1"
764	})
765}
766
767M() {
768	RMlist="$RMlist {-$-}1"
769	mkl ${5-666} {-$-}1 {-$-}2 {-$-}3 {-$-}4
770	mklist="$mklist {-$-}1"
771	G={-$-}{6:-wheel}
772	[ "{-$-}7" ] && {
773		MKlist="$MKlist;chown {-$-}7:{-$-}G {-$-}1"
774	} || {
775		case $G in
776		wheel)g=0;;kmem)g=2;;operator)g=5;;tty)g=4;;dialer)g=117;;_lkm)g=61;;
777		esac
778		[ "${grplist[$g]}" ] && {
779			grplist[$g]="${grplist[$g]} {-$-}1"
780		} || {
781			groups="$groups $g"
782			grplist[$g]="chgrp $G {-$-}1"
783		}
784	}
785	return 0
786}
787divert(7)dnl
788dnl
789dnl there is no blank line at the end of etc.arch/MAKEDEV.md files, so add one
790dnl on the following line:
791
792show_devs()dnl
793dnl
794divert(9)dnl
795*)
796	echo $i: unknown device
797	;;
798esac
799done
800}
801_recurse "$@"
802if [ "$os" = "SunOS" ]; then
803	eo=transform
804	transform() {
805		case $mode in
806		600) mask=077;;
807		640) mask=027;;
808		660) mask=007;;
809		644) mask=022;;
810		666) mask=0;;
811		440) mask=227;;
812		esac
813		echo `echo "$@"|sed \
814		    's/mknod -m \([0-9]*\) /umask '$mask';mknod /;s/-m [0-9]* //g;\
815		    s/operator/5/g;s/root.kmem/root.2/g;s/root\./root:/g'`
816	}
817fi
818list="$RMlist"
819for mode in $modes; do
820	list="$list;${mklist[$mode]}"
821done
822for group in $groups; do
823	list="$list;${grplist[$group]}"
824done
825list="$list;$MKlist"
826if [ "$eo" = "echo" -o "$eo" = "transform" ]; then
827	$eo "$list"
828else
829	echo "$list" | sh
830fi
831divert(3)dnl
832dnl
833
834R() {
835[ "$DEBUG" ] && set -x
836for i in "$@"
837do
838U=`unt $i`
839[ "$U" ] || U=0
840
841case $i in
842dnl
843