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