MAKEDEV.tmpl revision 1.26
1#!/bin/sh -
2#	$NetBSD: MAKEDEV.tmpl,v 1.26 2004/06/19 05:31:50 christos Exp $
3#
4# Copyright (c) 2003 The NetBSD Foundation, Inc.
5# All rights reserved.
6#
7# Redistribution and use in source and binary forms, with or without
8# modification, are permitted provided that the following conditions
9# are met:
10# 1. Redistributions of source code must retain the above copyright
11#    notice, this list of conditions and the following disclaimer.
12# 2. Redistributions in binary form must reproduce the above copyright
13#    notice, this list of conditions and the following disclaimer in the
14#    documentation and/or other materials provided with the distribution.
15# 3. All advertising materials mentioning features or use of this software
16#    must display the following acknowledgement:
17#        This product includes software developed by the NetBSD
18#        Foundation, Inc. and its contributors.
19# 4. Neither the name of The NetBSD Foundation nor the names of its
20#    contributors may be used to endorse or promote products derived
21#    from this software without specific prior written permission.
22#
23# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
24# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
25# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
26# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
27# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33# POSSIBILITY OF SUCH DAMAGE.
34#
35#
36###########################################################################
37#
38#   PLEASE RUN "cd ../share/man/man8 ; make makedevs"
39#   AFTER CHANGING THIS FILE, AND COMMIT THE UPDATED MANPAGE!
40#
41###########################################################################
42#
43# Device "make" file.  Valid special arguments:
44#	all	makes all known devices, including local devices.
45#		Tries to make the 'standard' number of each type.
46#	init	A set of devices that is used for MFS /dev by init.
47#		May be equal to "all".
48#	floppy	devices to be put on install floppies
49#	ramdisk	devices to be put into INSTALL kernel ramdisks.
50#	std	standard devices
51#	local	configuration specific devices
52#	wscons	make wscons devices
53#	usbs	make USB devices
54#	isdns	make ISDN devices
55#
56# Tapes:
57#	st*	SCSI tapes
58#	wt*	QIC-interfaced (e.g. not SCSI) 3M cartridge tape
59#	ht*	MASSBUS TM03 and TU??
60#	mt*	MSCP tapes (e.g. TU81, TK50)
61#	tm*	UNIBUS TM11 and TE10 emulations (e.g. Emulex TC-11)
62#	ts*	UNIBUS TS11
63#	ut*	UNIBUS TU45 emulations (e.g. si 9700)
64#	uu*	TU58 cassettes on DL11 controller
65#
66# Disks:
67#	ccd*	concatenated disk devices
68#	cd*	SCSI or ATAPI CD-ROM
69#	cgd*	cryptographic disk devices
70#	raid*	RAIDframe disk devices
71#	sd*	SCSI disks
72#	wd*	"winchester" disk drives (ST506,IDE,ESDI,RLL,...)
73#	bmd*	Nereid bank memory disks
74#	ed*	IBM PS/2 ESDI disk devices
75#	fd*	"floppy" disk drives (3 1/2", 5 1/4")
76#	fss*	Files system snapshot devices
77#	gdrom*	Dreamcast "gigadisc" CD-ROM drive
78#	hk*	UNIBUS RK06 and RK07
79#	hp*	MASSBUS RM??
80#	ld*	Logical disk devices (e.g., hardware RAID)
81#	mcd*	Mitsumi CD-ROM
82#	md*	memory pseudo-disk devices
83#	ofdisk*	OpenFirmware disk devices
84#	ra*	MSCP disks (RA??, RD??)
85#	rb*	730 IDC w/ RB80 and/or RB02
86#	rd*	HDC9224 RD disks on VS2000
87#	rl*	UNIBUS RL02
88#	rx*	MSCP floppy disk (RX33/50/...)
89#	up*	other UNIBUS devices (e.g. on Emulex SC-21V controller)
90#	vnd*	"file" pseudo-disks
91#	xd*	Xylogic 753/7053 disks
92#	xy*	Xylogic 450/451 disks
93#
94# Pointing devices:
95#	wsmouse* wscons mouse events
96#	lms*	Logitech bus mouse
97#	mms*	Microsoft bus mouse
98#	qms*	"quadrature mouse"
99#	pms*	PS/2 mouse
100#	mouse	mouse (provides events, for X11)
101#
102# Keyboard devices:
103#	wskbd*	wscons keyboard events
104#	kbd	raw keyboard (provides events, for X11)
105#	kbdctl	keyboard control
106#
107# Terminals/Console ports:
108#	tty[01]*	standard serial ports
109#	tty0*	SB1250 ("sbscn") serial ports (sbmips)
110#	ttyE*	wscons - Workstation console ("wscons") glass-tty emulators
111#	ttyCZ?	Cyclades-Z multiport serial boards.  Each "unit"
112#		makes 64 ports.
113#	ttyCY?	Cyclom-Y multiport serial boards. Each "unit" makes
114#		32 ports.
115#	ttye*	ITE bitmapped consoles
116#	ttyv0	pccons
117#	ttyC?	NS16550 ("com") serial ports
118#	ttyS*	SA1110 serial port (hpcarm)
119#	ttyTX?	TX39 internal serial ports (hpcmips)
120#	ttyB?	DEC 3000 ZS8530 ("scc") serial ports (alpha)
121#	ttyA*	mfc serial ports (amiga)
122#	ttyB*	msc serial ports (amiga)
123#	ttyC*	com style serial ports (DraCo, HyperCom) (amiga)
124#		On the DraCo, units 0 and 1 are the built-in "modem" and
125#		"mouse" ports, if configured.
126#	ttyA0   8530 Channel A (formerly ser02) (atari)
127#	ttyA1	8530 Channel B (formerly mdm02) (atari)
128#	ttyB0	UART on first 68901 (formerly mdm01) (atari)
129#	ixpcom	IXP12x0 COM ports
130#	ttyM?	HP200/300 4 port serial mux interface (hp300)
131#	ttya	"ttya" system console (luna68k)
132#	ttyb	second system serial port (luna68k)
133#	tty*	Onboard serial ports (mvme68k)
134#		On the mvme147 these are: ttyZ1, ttyZ2 and ttyZ3.
135#		On the mvme167, and '177: ttyC1, ttyC2 and ttyC3.
136#		Note that tty[CZ]0 is grabbed by the console device
137#		so is not created by default
138#	dc*	PMAX 4 channel serial interface (kbd, mouse, modem, printer)
139#	scc*	82530 serial interface (pmax)
140#	ttyZ*	Zilog 8530 ("zstty") serial ports
141#	tty[abcd]	Built-in serial ports (sparc)
142#	tty*	Z88530 serial controllers (sparc64)
143#	ttyh*	SAB82532 serial controllers (sparc64)
144#	tty[a-j]	Built-in serial ports (sun2, sun3)
145#	ttyC?	pccons (arc)
146#	dz*	UNIBUS DZ11 and DZ32 (vax)
147#	dh*	UNIBUS DH11 and emulations (e.g. Able DMAX, Emulex CS-11) (vax)
148#	dmf*	UNIBUS DMF32 (vax)
149#	dhu*    UNIBUS DHU11 (vax)
150#	dmz*    UNIBUS DMZ32 (vax)
151#	dl*	UNIBUS DL11 (vax)
152#
153# Terminal multiplexors:
154#	dc*	4 channel serial interface (keyboard, mouse, modem, printer)
155#	dh*	UNIBUS DH11 and emulations (e.g. Able DMAX, Emulex CS-11)
156#	dhu*	UNIBUS DHU11
157#	dl*	UNIBUS DL11
158#	dmf*	UNIBUS DMF32
159#	dmz*	UNIBUS DMZ32
160#	dz*	UNIBUS DZ11 and DZ32
161#	scc*	82530 serial interface
162#
163# Call units:
164#	dn*	UNIBUS DN11 and emulations (e.g. Able Quadracall)
165#
166# Pseudo terminals:
167#	ptm	pty multiplexor device.
168#	pty*	set of 16 master and slave pseudo terminals
169#	opty	first 16 ptys, to save inodes on install media
170#	ipty	first 2 ptys, for install media use only
171#
172# Printers:
173#	arcpp*	Archimedes parallel port
174#	lpt*	stock lp
175#	lpa*	interruptless lp
176#	par*	Amiga motherboard parallel port
177#
178# USB devices:
179#	usb*	USB control devices
180#	uhid*	USB generic HID devices
181#	ulpt*	USB printer devices
182#	ugen*	USB generic devices
183#	urio*	USB Diamond Rio 500 devices
184#	uscanner*	USB scanners
185#	ttyU*	USB modems
186#
187# ISDN devices:
188#	isdn	communication between userland isdnd and kernel
189#	isdnctl	control device
190#	isdnbchan* raw b-channel access
191#	isdntel*	telephony device
192#	isdnteld*	telephony dialout device
193#	isdntrc*	trace device
194#
195# Video devices:
196#	bwtwo*	monochromatic frame buffer
197#	cgtwo*	8-bit color frame buffer
198#	cgthree*	8-bit color frame buffer
199#	cgfour*	8-bit color frame buffer
200#	cgsix*	accelerated 8-bit color frame buffer
201#	cgeight*	24-bit color frame buffer
202#	etvme	Tseng et-compatible cards on VME (atari)
203#	ik*	UNIBUS interface to Ikonas frame buffer
204#	leo	Circad Leonardo VME-bus true color (atari)
205#	ps*	UNIBUS interface to Picture System 2
206#	qv*	QVSS (MicroVAX) display
207#	tcx*	accelerated 8/24-bit color frame buffer
208#
209# Maple bus devices:
210#	maple	Maple bus control devices
211#	mlcd*	Maple bus LCD devices
212#	mmem*	Maple bus storage devices
213#
214# Special purpose devices:
215#	ad*	UNIBUS interface to Data Translation A/D converter
216#	agp*	AGP GART devices
217#	altq	ALTQ control interface
218#	apm	power management device
219#	audio*	audio devices
220#	bell*	OPM bell device (x68k)
221#	bktr	Brooktree 848/849/878/879 based TV cards
222#	bpf*	packet filter
223#	cfs*	Coda file system device
224#	ch*	SCSI media changer
225#	cir*	Consumer IR
226#	clockctl clock control for non root users
227#	crypto	hardware crypto access driver
228#	dmoverio hardware-assisted data movers
229#	dpt*	DPT/Adaptec EATA RAID management interface
230#	dpti*	DPT/Adaptec I2O RAID management interface
231#	fb*	PMAX generic framebuffer pseudo-device
232#	fd	file descriptors
233#	grf*	graphics frame buffer device
234#	hil	HP300 HIL input devices
235#	icp	ICP-Vortex/Intel RAID control interface
236#	iic*	IIC bus device
237#	iop*	I2O IOP control interface
238#	ipl	IP Filter
239#	irframe* IrDA physical frame
240#	ite*	terminal emulator interface to HP300 graphics devices
241#	joy*	joystick device
242#	kttcp	kernel ttcp helper device
243#	lkm	loadable kernel modules interface
244#	magma*	Magma multiport serial/parallel cards
245#	midi*	MIDI
246#	mlx*	Mylex DAC960 control interface
247#	mly*	Mylex AcceleRAID/eXtremeRAID control interface
248#	np*	UNIBUS Ethernet co-processor interface, for downloading.
249#	nsmb*	SMB requester
250#	openfirm OpenFirmware accessor
251#	pci*	PCI bus access devices
252#	pf	PF packet filter (not in tree)
253#	pow*	power management device (x68k)
254#	px*	PixelStamp Xserver access
255#	radio*	radio devices
256#	random	Random number generator
257#	rtc*	RealTimeClock
258#	satlink* PlanetConnect satellite receiver driver
259#	scsibus* SCSI busses
260#	se*	SCSI Ethernet
261#	ses*	SES/SAF-TE SCSI Devices
262#	speaker	PC speaker		(XXX - installed)
263#	sram	battery backuped memory (x68k)
264#	ss*	SCSI scanner
265#	stic*	PixelStamp interface chip
266#	sysmon	System Monitoring hardware
267#	systrace syscall tracer
268#	tun*	network tunnel driver
269#	twe	3ware Escalade control interface
270#	uk*	unknown SCSI device
271#	veriexec verified executable fingerprint loader
272#	vmegen*	generic VME access
273#	view*	generic interface to graphic displays (Amiga)
274#	wsfont*	console font control
275#	wsmux*	wscons event multiplexor
276
277
278PATH=/sbin:/usr/sbin:/bin:/usr/bin:/rescue
279
280
281usage()
282{
283	cat 1>&2 << _USAGE_
284Usage: ${0##*/} [-f] [-m mknod] [-s]  special [...]
285	Create listed special devices.  Options:
286	-f		Force permissions to be updated on existing devices.
287	-m mknod	Name of mknod(8) program.  [\$TOOL_MKNOD or mknod]
288	-s		Generate mtree(8) specfile instead of creating devices.
289
290_USAGE_
291	exit 1
292}
293
294zeropad() {
295	case $(($1 - ${#2})) in
296	5)	echo 00000$2;;
297	4)	echo 0000$2;;
298	3)	echo 000$2;;
299	2)	echo 00$2;;
300	1)	echo 0$2;;
301	*)	echo "$0: bad padding" 1>&2; exit 1;;
302	esac
303}
304
305do_force=false
306do_specfile=false
307while getopts fm:s ch; do
308	case ${ch} in
309	f)	do_force=true ;;
310	m)	TOOL_MKNOD=${OPTARG} ;;
311	s)	do_specfile=true ;;
312	*)	usage ;;
313	esac
314done
315shift $((${OPTIND} - 1))
316[ $# -gt 0 ] || usage
317
318
319MKNOD="${TOOL_MKNOD:-mknod} -F netbsd"
320if $do_force; then
321	MKNOD="${MKNOD} -R"
322else
323	MKNOD="${MKNOD} -r"
324fi
325
326u_root="%uid_root%"
327u_uucp="%uid_uucp%"
328g_kmem="%gid_kmem%"
329g_ntpd="%gid_ntpd%"
330g_operator="%gid_operator%"
331g_wheel="%gid_wheel%"
332dialin=0
333dialout=524288
334callunit=262144
335
336# only allow read&write for owner by default
337umask 077
338
339# Check if we have fdesc mounted
340if [ -d fd ]; then
341        case "`df fd`" in
342        *fdesc*)	nofdesc=false;;
343        *)		nofdesc=true;;
344        esac
345else
346        nofdesc=true
347fi
348
349
350if $do_specfile; then
351	echo ". type=dir"
352fi
353
354
355#
356# functions available to create nodes:
357#
358# mkdev name [b|c] major minor [mode{=600} [gid{=0} [uid{=0}]]]
359#	create device node `name' with the appropriate permissions
360#
361# lndev src target
362#	create a symlink from src to target
363#
364# makedir dir mode
365#	create directory with appropriate mode
366#
367
368mkdev()
369{
370	if $do_specfile; then
371		case $2 in
372		b)	type=block ;;
373		c)	type=char ;;
374		esac
375		echo "./$1 type=${type} device=netbsd,$3,$4 mode=${5:-600} gid=${6:-$g_wheel} uid=${7:-$u_root}"
376	else
377		${MKNOD} -m ${5:-600} -g \#${6:-$g_wheel} -u \#${7:-$u_root} $1 $2 $3 $4
378	fi
379}
380
381lndev()
382{
383	if $do_specfile; then
384		echo "./$2 type=link link=$1 mode=0700 gid=$g_wheel uid=$u_root"
385	else
386		ln -f -s $1 $2
387	fi
388}
389
390makedir()
391{
392	if $do_specfile; then
393		echo "./$1 type=dir mode=$2 gid=$g_wheel uid=$u_root"
394	else
395		mkdir $1 2>/dev/null
396		chmod $2 $1
397	fi
398}
399
400warn()
401{
402	echo 1>&2 "$0: $*"
403}
404
405
406
407# makedev special [...]
408#	the main loop
409#
410
411makedev()
412{
413
414for i
415do
416
417case $i in
418
419%MD_DEVICES%
420
421all)
422	makedev all_md
423	makedev std fd ptm pty0 pty1 pty2 pty3
424	makedev ccd0 ccd1 ccd2 ccd3
425	makedev cgd0 cgd1 cgd2 cgd3
426	makedev fss0 fss1 fss2 fss3
427	makedev md0 md1
428	makedev raid0 raid1 raid2 raid3 raid4 raid5 raid6 raid7
429	makedev vnd0 vnd1 vnd2 vnd3
430	makedev bpf0 bpf1 bpf2 bpf3 bpf4 bpf5 bpf6 bpf7
431	makedev tun0 tun1 tun2 tun3
432	makedev ipl crypto random systrace
433	makedev lkm clockctl
434	makedev local
435	;;
436
437init)
438	# unless overridden by MD entry, this is equal to 'all'
439	makedev all
440	;;
441
442%MI_DEVICES_BEGIN%
443audio)
444	makedev audio0 audio1 audio2 audio3
445	lndev sound0 sound
446	lndev audio0 audio
447	lndev mixer0 mixer
448	lndev audioctl0 audioctl
449	;;
450
451radio)
452	makedev radio0 radio1
453	lndev radio0 radio
454	;;
455
456ramdisk)
457	makedev floppy md0
458	;;
459
460usbs)
461	makedev usb usb0 usb1 usb2 usb3 usb4 usb5 usb6 usb7
462	makedev uhid0 uhid1 uhid2 uhid3
463	makedev ulpt0 ulpt1
464	makedev ttyU0 ttyU1
465	makedev urio0
466	makedev uscanner0 uscanner1
467	makedev ugen0
468	;;
469
470isdns)
471	makedev isdn isdnctl isdnbchan0 isdnbchan1 isdntel0 isdntel1 isdnteld0 isdnteld1 isdntrc0 isdntrc1
472	;;
473
474std)
475	mkdev		console	c %cons_chr% 0	600
476	mkdev		constty	c %cons_chr% 1	600
477	mkdev		drum	c %swap_chr% 0	640 $g_kmem
478	mkdev		kmem	c %mem_chr% 1	640 $g_kmem
479	mkdev		mem	c %mem_chr% 0	640 $g_kmem
480	mkdev		null	c %mem_chr% 2	666
481	mkdev		zero	c %mem_chr% 12	666
482	mkdev		klog	c %log_chr% 0	600
483	mkdev		ksyms	c %ksyms_chr% 0	444
484	if $nofdesc; then
485		mkdev	tty	c %ctty_chr% 0		666
486		mkdev	stdin	c %filedesc_chr% 0	666
487		mkdev	stdout	c %filedesc_chr% 1	666
488		mkdev	stderr	c %filedesc_chr% 2	666
489	fi
490	;;
491
492usb*)
493	unit=${i#usb}
494	if [ "$unit" = "" ]; then
495		unit=255
496		usb=usb
497	else
498		usb=usb$unit
499	fi
500	mkdev $usb c %usb_chr% $unit
501	;;
502
503uhid*)
504	unit=${i#uhid}
505	mkdev uhid$unit c %uhid_chr% $unit 666
506	;;
507
508ulpt*)
509	unit=${i#ulpt}
510	mkdev ulpt$unit c %ulpt_chr% $unit
511	mkdev ulpn$unit c %ulpt_chr% $(($unit + 64))
512	;;
513
514urio*)
515	unit=${i#urio}
516	mkdev urio$unit c %urio_chr% $unit 666
517	;;
518
519uscanner*)
520	unit=${i#uscanner}
521	mkdev uscanner$unit c %uscanner_chr% $unit
522	;;
523
524ttyU*)
525	unit=${i#ttyU}
526	mkdev ttyU$unit c %ucom_chr% $(($unit + $dialin  )) "" "" $u_uucp
527	mkdev dtyU$unit c %ucom_chr% $(($unit + $dialout )) "" "" $u_uucp
528	mkdev ctyU$unit c %ucom_chr% $(($unit + $callunit)) "" "" $u_uucp
529	;;
530
531ugen*)
532	unit=${i#ugen}
533	for j in 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
534	do
535		mkdev ugen$unit.$j c %ugen_chr% $(($unit * 16 + ${j#0}))
536	done
537	;;
538
539wscons)
540	makedev ttyE0 ttyE1 ttyE2 ttyE3 ttyE4 ttyE5 ttyE6 ttyE7
541	makedev wsmouse0 wsmouse1 wsmouse2 wsmouse3
542	makedev wskbd0 wskbd1 wskbd2 wskbd3
543	makedev wsmux0 wsmux1 wsmux2 wsmux3
544	makedev wsmouse wskbd
545	makedev ttyEcfg ttyEstat
546	makedev wsfont
547	;;
548
549wsmouse)
550	mkdev wsmouse c %wsmux_chr% 0
551	;;
552
553wskbd)
554	mkdev wskbd c %wsmux_chr% 1
555	;;
556
557wsmux*)
558	unit=${i#wsmux}
559	mkdev wsmux$unit    c %wsmux_chr% $unit
560	mkdev wsmuxctl$unit c %wsmux_chr% $(($unit + 128)) 200
561	;;
562
563ttyEstat)
564	mkdev ttyEstat c %wsdisplay_chr% 254
565	;;
566
567ttyEcfg)
568	mkdev ttyEcfg c %wsdisplay_chr% 255
569	;;
570
571ttyE*)
572	unit=${i#ttyE}
573	mkdev ttyE$unit c %wsdisplay_chr% $unit
574	;;
575
576wsmouse*)
577	unit=${i#wsmouse}
578	mkdev wsmouse$unit c %wsmouse_chr% $unit
579	;;
580
581wskbd*)
582	unit=${i#wskbd}
583	mkdev wskbd$unit c %wskbd_chr% $unit
584	;;
585
586fd)
587	if $nofdesc; then
588		makedir fd 755
589		n=0
590		while [ $n -lt 64 ]
591		do
592			mkdev fd/$n c %filedesc_chr% $n 666
593			n=$(($n + 1))
594		done
595	fi
596	;;
597
598wt*)
599	case $i in
600	wt*) name=wt;  unit=${i#wt};	chr=%wt_chr%;	blk=%wt_blk%;;
601	esac
602	for sub in $unit $(($unit+8)) $(($unit+16))
603	do
604		mkdev $name$sub		b $blk $(($sub + 0)) 660 $g_operator
605		mkdev n$name$sub	b $blk $(($sub + 4)) 660 $g_operator
606		mkdev r$name$sub	c $chr $(($sub + 0)) 660 $g_operator
607		mkdev nr$name$sub	c $chr $(($sub + 4)) 660 $g_operator
608	done
609	;;
610
611md*)
612	makedisk_minimal md ${i#md} %md_blk% %md_chr%
613	;;
614
615fss*)
616	case $i in
617	fss*) name=fss; unit=${i#fss};	blk=%fss_blk%;	chr=%fss_chr%
618	esac
619	mkdev $name$unit	b $blk $unit 660 $g_operator
620	mkdev r$name$unit	c $chr $unit 660 $g_operator
621	;;
622
623ss*)
624	case $i in
625	ss*) name=ss;	unit=${i#ss};	chr=%ss_chr%;;
626	esac
627	mkdev $name$unit	c $chr $(($unit * 16 + 0)) 640 $g_operator
628	mkdev n$name$unit	c $chr $(($unit * 16 + 1)) 640 $g_operator
629	mkdev en$name$unit	c $chr $(($unit * 16 + 3)) 640 $g_operator
630	;;
631
632ccd*|cgd*|raid*|vnd*)
633	case $i in
634	ccd*)	name=ccd;	unit=${i#ccd};	blk=%ccd_blk%;	chr=%ccd_chr%;;
635	cgd*)	name=cgd;	unit=${i#cgd};	blk=%cgd_blk%;	chr=%cgd_chr%;;
636	raid*)	name=raid;	unit=${i#raid}; blk=%raid_blk%; chr=%raid_chr%;;
637	vnd*)	name=vnd;	unit=${i#vnd};	blk=%vnd_blk%;	chr=%vnd_chr%;;
638	esac
639	%MKDISK% $name $unit $blk $chr
640	;;
641
642sd*)
643	name=sd; unit=${i#sd};	blk=%sd_blk%;	chr=%sd_chr%
644	%MKDISK% $name $unit $blk $chr
645	;;
646
647wd*)
648	name=wd; unit=${i#wd}; blk=%wd_blk%; chr=%wd_chr%
649	%MKDISK% $name $unit $blk $chr
650	;;
651
652fd*)
653	name=fd; unit=${i#fd}; blk=%fd_blk%; chr=%fd_chr%
654	%MKDISK% $name $unit $blk $chr
655	;;
656
657ld*)
658	name=ld; unit=${i#ld}; blk=%ld_blk%; chr=%ld_chr%
659	%MKDISK% $name $unit $blk $chr
660	;;
661
662ed*)
663	name=ed; unit=${i#ed}; blk=%ed_blk%; chr=%ed_chr%
664	%MKDISK% $name $unit $blk $chr
665	;;
666
667ofdisk*)
668	name=ofdisk; unit=${i#ofdisk}; blk=%ofdisk_blk%; chr=%ofdisk_chr%
669	%MKDISK% $name $unit $blk $chr
670	;;
671
672ttyCY*)
673	name=tyCY; chr=%cy_chr%; off=32
674	unit=${i#t${name}}
675	minor=$(($unit * $off))
676	eminor=$(($minor + $off))
677	while [ $minor -lt $eminor ]
678	do
679		nminor=$(zeropad 3 $minor)
680		mkdev t$name$nminor c $chr $(($minor + $dialin )) "" "" $u_uucp
681		mkdev d$name$nminor c $chr $(($minor + $dialout)) "" "" $u_uucp
682		minor=$(($minor + 1))
683	done
684	;;
685
686ttyCZ*)
687	name=tyCZ; chr=%cz_chr%; off=64
688	unit=${i#t${name}}
689	minor=$(($unit * $off))
690	eminor=$(($minor + $off))
691	while [ $minor -lt $eminor ]
692	do
693		nminor=$(zeropad 4 $minor)
694		mkdev t$name$nminor c $chr $(($minor + $dialin )) "" "" $u_uucp
695		mkdev d$name$nminor c $chr $(($minor + $dialout)) "" "" $u_uucp
696		minor=$(($minor + 1))
697	done
698	;;
699
700
701tty[0-9]|tty0[0-9])
702	# some archs have built-in zstty (major %zstty_chr%) instead
703	# of NS16550; create ttyZ* and hardlink as [dt]ty0*; this
704	# needs to be before com entry, for archs which have both
705	unit=${i#tty}
706	unit=$(($unit + 0))
707	makedev ttyZ${unit}
708	lndev ttyZ$unit tty0${unit}
709	lndev dtyZ$unit dty0${unit}
710	;;
711
712tty0*|tty1*|tty[0-9])
713	unit=${i#tty}
714	ounit=$(zeropad 2 $unit)
715	mkdev tty$ounit c %com_chr% $(($unit + $dialin )) "" "" $u_uucp
716	mkdev dty$ounit c %com_chr% $(($unit + $dialout)) "" "" $u_uucp
717	;;
718
719ttyC*)
720		# some archs call com_chr ttyC traditionally
721	unit=${i#ttyC}; name=ttyC; dname=dtyC; chr=%com_chr%
722	mkdev  $name$unit c $chr $(($unit + $dialin )) "" "" $u_uucp
723	mkdev $dname$unit c $chr $(($unit + $dialout)) "" "" $u_uucp
724	;;
725
726ttyh*)
727	unit=${i#ttyh}; name=ttyh; dname=dtyh; chr=%sabtty_chr%
728	mkdev  $name$unit c $chr $(($unit + $dialin )) "" "" $u_uucp
729	mkdev $dname$unit c $chr $(($unit + $dialout)) "" "" $u_uucp
730	;;
731
732ttyTX*)
733	unit=${i#ttyTX}; name=ttyTX0; dname=dtyTX0; chr=%txcom_chr%
734	mkdev  $name$unit c $chr $(($unit + $dialin )) "" "" $u_uucp
735	mkdev $dname$unit c $chr $(($unit + $dialout)) "" "" $u_uucp
736	;;
737
738ttyZ*)
739	unit=${i#ttyZ}; name=ttyZ; dname=dtyZ; chr=%zstty_chr%
740	mkdev  $name$unit c $chr $(($unit + $dialin )) "" "" $u_uucp
741	mkdev $dname$unit c $chr $(($unit + $dialout)) "" "" $u_uucp
742	;;
743
744opty)
745	for j in 0 1 2 3 4 5 6 7 8 9 a b c d e f
746	do
747		case $j in
748		[0-9])	jn=$j ;;
749		a)	jn=10 ;;
750		b)	jn=11 ;;
751		c)	jn=12 ;;
752		d)	jn=13 ;;
753		e)	jn=14 ;;
754		f)	jn=15 ;;
755		esac
756		mkdev ttyp$j c %pts_chr% $jn 666
757		mkdev ptyp$j c %ptc_chr% $jn 666
758	done
759	;;
760
761pty*)
762	class=${i#pty}
763	d1="p q r s t u v w x y z P Q R S T"
764	if [ "$class" -ge 64 ]
765	then
766		warn "$i: pty unit must be between 0 and 63"
767		continue
768	elif [ "$class" -lt 16 ]
769	then
770		offset=0
771		mult=0
772		d2="0 1 2 3 4 5 6 7 8 9 a b c d e f"
773	else
774		class=$(($class - 16))
775		offset=256
776		mult=2
777		d2="g h i j k l m n o p q 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 Y Z"
778	fi
779	start=$(($class * 16))
780	set -- $d2
781	nt=$#
782	s1=$(($start / $nt))
783	set -- $d1
784	shift $s1
785	t1=$1
786	if [ "$t1" = v ]; then
787		warn "$i: pty unit conflicts with console ttyv0 device"
788		continue
789	fi
790	s2=$(($start % $nt - $s1 * $mult))
791	set -- $d2
792	shift $s2
793	t2=$1
794	unit=$(($start + $offset - $s1 * $mult))
795	end=$(($unit + 16))
796	while [ "$unit" -lt "$end" ]
797	do
798		mkdev tty$t1$t2 c %pts_chr% $unit 666
799		mkdev pty$t1$t2 c %ptc_chr% $unit 666
800		shift
801		t2=$1
802		if [ -z "$t2" ]
803		then
804			break
805		fi
806		unit=$(($unit + 1))
807	done
808	;;
809
810stic*)
811	unit=${i#stic}
812	mkdev stic$unit c %stic_chr% $unit
813	;;
814
815st*)
816	case $i in
817	st*) name=st;	unit=${i#st};	chr=%st_chr%;	blk=%st_blk%;;
818	esac
819	mkdev $name$unit	b $blk $(($unit * 16 + 0)) 660 $g_operator
820	mkdev n$name$unit	b $blk $(($unit * 16 + 1)) 660 $g_operator
821	mkdev e$name$unit	b $blk $(($unit * 16 + 2)) 660 $g_operator
822	mkdev en$name$unit	b $blk $(($unit * 16 + 3)) 660 $g_operator
823	mkdev r$name$unit	c $chr $(($unit * 16 + 0)) 660 $g_operator
824	mkdev nr$name$unit	c $chr $(($unit * 16 + 1)) 660 $g_operator
825	mkdev er$name$unit	c $chr $(($unit * 16 + 2)) 660 $g_operator
826	mkdev enr$name$unit	c $chr $(($unit * 16 + 3)) 660 $g_operator
827	;;
828
829ses*|ch*|uk*)
830	case $i in
831	ch*)	name=ch;	unit=${i#ch};	chr=%ch_chr%;;
832	uk*)	name=uk;	unit=${i#uk};	chr=%uk_chr%;;
833	ses*)	name=ses;	unit=${i#ses};	chr=%ses_chr%;;
834	esac
835	mkdev $name$unit c $chr $unit 640 $g_operator
836	;;
837
838cd*)
839	makedisk_minimal cd ${i#cd} %cd_blk% %cd_chr% %
840	;;
841
842mcd*)
843	makedisk_minimal mcd ${i#mcd} %mcd_blk% %mcd_chr%
844	;;
845
846gdrom*)
847	makedisk_minimal gdrom ${i#gdrom} %gdrom_blk% %gdrom_chr%
848	;;
849
850lpt*|lpa*)
851	case $i in
852	lpt*) name=lpt;	unit=${i#lpt};	chr=%lpt_chr%;	flags=0;;
853	lpa*) name=lpa;	unit=${i#lpa};	chr=%lpt_chr%;	flags=128;;
854	esac
855	mkdev $name$unit c $chr $(($unit + $flags))
856	mkdev lpt${unit}ctl c $chr $(($unit + 256))
857	;;
858
859bpf*|tun*)
860	case $i in
861	bpf*) name=bpf;	unit=${i#bpf};	chr=%bpf_chr%;;
862	tun*) name=tun;	unit=${i#tun};	chr=%tun_chr%;;
863	esac
864	mkdev $name$unit c $chr $unit
865	;;
866
867joy*)
868	case $i in
869	joy*) name=joy;	unit=${i#joy};	chr=%joy_chr%;;
870	esac
871	mkdev $name$unit c $chr $unit
872	;;
873
874ipl)
875	mkdev ipl	c %ipl_chr% 0
876	mkdev ipnat	c %ipl_chr% 1
877	mkdev ipstate	c %ipl_chr% 2
878	mkdev ipauth	c %ipl_chr% 3
879	;;
880
881pf)
882	mkdev pf c %pf_chr% 0
883	;;
884
885crypto)
886	mkdev crypto c %crypto_chr% 0 666
887	;;
888
889speaker)
890	mkdev speaker c %spkr_chr% 0
891	;;
892
893lkm)
894	mkdev lkm c %lkm_chr% 0 640 $g_kmem
895	;;
896
897audio*)
898	unit=${i#audio}
899	audio=audio$unit
900	sound=sound$unit
901	mixer=mixer$unit
902	audioctl=audioctl$unit
903	: ${unit:-0}
904	mkdev $sound    c %audio_chr% $(($unit + 0))	666
905	mkdev $audio    c %audio_chr% $(($unit + 128))	666
906	mkdev $mixer    c %audio_chr% $(($unit + 16))	666
907	mkdev $audioctl c %audio_chr% $(($unit + 192))	666
908	;;
909
910rmidi*)
911	unit=${i#rmidi}
912	mkdev rmidi$unit c %midi_chr% $unit 666
913	;;
914
915music*)
916	unit=${i#music}
917	: ${unit:-0}
918	mkdev music$unit     c %sequencer_chr% $(($unit + 0))	666
919	mkdev sequencer$unit c %sequencer_chr% $(($unit + 128))	666
920	;;
921
922radio*)
923	unit=${i#radio}
924	: ${unit:-0}
925	mkdev radio$unit c %radio_chr% $unit 666
926	;;
927
928apm)
929	mkdev apm	c %apm_chr% 0 644
930	mkdev apmctl	c %apm_chr% 8 644
931	;;
932
933apm)
934		# hpcmips uses `apmdev_chr' instead of `apm_chr'
935	mkdev apm	c %apmdev_chr% 0 644
936	mkdev apmctl	c %apmdev_chr% 8 644
937	;;
938
939satlink*)
940	unit=${i#satlink}
941	mkdev satlink$unit c %satlink_chr% $unit 444
942	;;
943
944random)
945	mkdev random	c %rnd_chr% 0 444
946	mkdev urandom	c %rnd_chr% 1 644
947	;;
948
949cfs*)
950	unit=${i#cfs}
951	mkdev cfs$unit c %vcoda_chr% $unit
952	;;
953
954sysmon)
955	mkdev sysmon	c %sysmon_chr% 0 644
956	mkdev watchdog	c %sysmon_chr% 1 644
957	mkdev power	c %sysmon_chr% 2 640
958	;;
959
960scsibus*)
961	unit=${i#scsibus}
962	mkdev scsibus$unit c %scsibus_chr% $unit 644
963	;;
964
965bktr)
966	makedev bktr0 bktr1
967	lndev	bktr0	bktr
968	lndev	tuner0	tuner
969	lndev	vbi0	vbi
970	;;
971
972bktr*)
973	unit=${i#bktr}
974	mkdev bktr$unit		c %bktr_chr% $(($unit + 0))	444
975	mkdev tuner$unit	c %bktr_chr% $(($unit + 16))	444
976	mkdev vbi$unit		c %bktr_chr% $(($unit + 32))	444
977	;;
978
979iop*)
980	unit=${i#iop}
981	mkdev iop$unit c %iop_chr% $unit
982	;;
983
984mlx*)
985	unit=${i#mlx}
986	mkdev mlx$unit c %mlx_chr% $unit
987	;;
988
989mly*)
990	unit=${i#mly}
991	mkdev mly$unit c %mly_chr% $unit
992	;;
993
994twe*)
995	unit=${i#twe}
996	mkdev twe$unit c %twe_chr% $unit
997	;;
998
999icp*)
1000	unit=${i#icp}
1001	mkdev icp$unit c %icp_chr% $unit
1002	;;
1003
1004agp*)
1005	unit=${i#agp}
1006	mkdev agp$unit c %agp_chr% $unit 644
1007	if [ "$unit" = "0" ]; then
1008		lndev agp$unit agpgart
1009	fi
1010	;;
1011
1012pci*)
1013	unit=${i#pci}
1014	mkdev pci$unit c %pci_chr% $unit 644
1015	;;
1016
1017dpti*)
1018	unit=${i#dpti}
1019	mkdev dpti$unit c %dpti_chr% $unit
1020	;;
1021
1022dpt*)
1023	unit=${i#dpt}
1024	mkdev dpt$unit c %dpt_chr% $unit
1025	;;
1026
1027altq)
1028	makedir altq 755
1029	unit=0
1030	for dev in altq cbq wfq afm fifoq red rio localq hfsc cdnr blue priq
1031	do
1032		mkdev altq/$dev c %altq_chr% $unit 644
1033		unit=$(($unit + 1))
1034	done
1035	;;
1036
1037isdn)
1038	mkdev isdn c %isdn_chr% 0
1039	;;
1040
1041isdnctl)
1042	mkdev isdnctl c %isdnctl_chr% 0
1043	;;
1044
1045isdnbchan*)
1046	unit=${i#isdnbchan}
1047	mkdev isdnbchan$unit c %isdnbchan_chr% $unit
1048	;;
1049
1050isdnteld*)
1051	unit=${i#isdnteld}
1052	mkdev isdnteld$unit c %isdntel_chr% $(($unit + 64))
1053	;;
1054
1055isdntel*)
1056	unit=${i#isdntel}
1057	mkdev isdntel$unit c %isdntel_chr% $unit
1058	;;
1059
1060isdntrc*)
1061	unit=${i#isdntrc}
1062	mkdev isdntrc$unit c %isdntrc_chr% $unit
1063	;;
1064
1065vmegen)
1066	makedev vmegen0 vmegen1 vmegen2 vmegen3
1067	;;
1068
1069vmegen*)
1070	unit=${i#vmegen}
1071	mkdev vmegen$unit c %vmegeneric_chr% $(($unit * 16 + 0))
1072	;;
1073
1074wsfont)
1075	mkdev wsfont c %wsfont_chr% 0
1076	;;
1077
1078cir*)
1079	unit=${i#cir}
1080	mkdev cir$unit c %cir_chr% $unit 666
1081	;;
1082
1083irframe*)
1084	unit=${i#irframe}
1085	mkdev irframe$unit c %irframe_chr% $unit
1086	;;
1087
1088fcom*)
1089	unit=${i#fcom}
1090	mkdev fcom$unit c %fcom_chr% $unit "" "" $u_uucp
1091	;;
1092
1093openfirm)
1094	mkdev openfirm c %openfirm_chr% 0 444
1095	;;
1096
1097nvram)
1098	mkdev nvram c %nvram_chr% 0 644
1099	;;
1100
1101rtc)
1102	mkdev rtc c %rtc_chr% 0 644
1103	;;
1104
1105clockctl)
1106	mkdev clockctl c %clockctl_chr% 0 660 $g_ntpd
1107	;;
1108
1109nsmb)
1110	makedev nsmb0 nsmb1 nsmb2 nsmb3
1111	;;
1112
1113nsmb*)
1114	unit=${i#nsmb}
1115	mkdev nsmb$unit c %nsmb_chr% $unit 644
1116	;;
1117
1118systrace)
1119	mkdev systrace c %systrace_chr% 0 644
1120	;;
1121
1122kttcp)
1123	mkdev kttcp c %kttcp_chr% 0
1124	;;
1125
1126dmoverio)
1127	mkdev dmoverio c %dmoverio_chr% 0 644
1128	;;
1129
1130veriexec)
1131	mkdev veriexec c %verifiedexec_chr% 0 644
1132	;;
1133
1134ttyv*)
1135	unit=${i#ttyv}
1136	mkdev ttyv$unit c %pc_chr% $unit
1137	;;
1138
1139# arm, acorn32
1140ttyv*)
1141	unit=${i#ttyv}
1142	mkdev ttyv$unit c %physcon_chr% $unit
1143	;;
1144
1145arcpp*)
1146	unit=${i#arcpp}
1147	mkdev arcpp$unit c %arcpp_chr% $unit
1148	;;
1149
1150par*)
1151	unit=${i#par}
1152	case $unit in
1153	0)
1154		mkdev par$unit c %par_chr% $unit
1155		;;
1156	*)
1157		warn "bad unit for par in: $i"
1158		;;
1159	esac
1160	;;
1161
1162ite*|ttye*)
1163	case $i in
1164	ite*)	unit=${i#ite};;
1165	ttye*)	unit=${i#ttye};;
1166	esac
1167	mkdev ttye$unit	c %ite_chr% $unit
1168	;;
1169
1170pms*)
1171	unit=${i#pms}
1172	mkdev pms$unit c %opms_chr% $unit
1173	;;
1174
1175qms*)
1176	unit=${i#qms}
1177	mkdev qms$unit c %qms_chr% $unit
1178	;;
1179
1180lms*)
1181	unit=${i#lms}
1182	mkdev lms$unit c %lms_chr% $unit
1183	;;
1184
1185mms*)
1186	unit=${i#mms}
1187	mkdev mms$unit c %mms_chr% $unit
1188	;;
1189
1190mouse-*)
1191	case $i in
1192	mouse-pms*) name=pms ;;
1193	mouse-qms*) name=qms ;;
1194	esac
1195	unit=${i#mouse-${name}}
1196	lndev $name$unit mouse
1197	;;
1198
1199kbd)
1200	mkdev kbd c %kbd_chr% 0
1201	;;
1202
1203kbdctl)
1204	mkdev kbdctl c %kbd_chr% 1
1205	;;
1206
1207vidcconsole0)
1208	mkdev vidcconsole0 c %vidcconsole_chr% 0 640
1209	;;
1210
1211view*)
1212	unit=${i#view}
1213	mkdev view$unit	c %view_chr% $unit 666
1214	;;
1215
1216mouse*)
1217	unit=${i#mouse}
1218	case $unit in
1219	0|1)
1220		mkdev mouse$unit c %ms_chr% $unit 666
1221		if [ $unit = 0 ]; then
1222			lndev mouse$unit mouse
1223		fi
1224		;;
1225	*)
1226		warn "bad unit for mouse in: $i"
1227		;;
1228	esac
1229	;;
1230
1231panel)
1232	mkdev panel0 c %panel_chr% 0 660
1233	;;
1234
1235ipty)
1236	mkdev ttyp0 c %pts_chr% 0 666
1237	mkdev ttyp1 c %pts_chr% 1 666
1238	mkdev ptyp0 c %ptc_chr% 0 666
1239	mkdev ptyp1 c %ptc_chr% 1 666
1240	;;
1241
1242ptm)
1243	mkdev ptmx c %ptm_chr% 0 666
1244	mkdev ptm c %ptm_chr% 1 666
1245	;;
1246
1247grf*)
1248	unit=${i#grf}
1249	mkdev grf$unit c %grf_chr% $unit 666
1250	;;
1251
1252etvme)
1253	mkdev etvme c %et_chr% 0
1254	;;
1255
1256leo*)
1257	unit=${i#leo}
1258	mkdev leo$unit c %leo_chr% $unit
1259	;;
1260
1261scif*)
1262	unit=${i#scif}
1263	mkdev scif$unit c %scif_chr% $unit "" "" $u_uucp
1264	;;
1265
1266sci*)
1267	unit=${i#sci}
1268	mkdev sci$unit c %sci_chr% $unit "" "" $u_uucp
1269	;;
1270
1271maple*)
1272	case $i in
1273	mapleA*) name="mapleA"; unit=0;;
1274	mapleB*) name="mapleB"; unit=1;;
1275	mapleC*) name="mapleC"; unit=2;;
1276	mapleD*) name="mapleD"; unit=3;;
1277	esac
1278	subunit=${i#$name}
1279	mkdev $name$subunit c %maple_chr% $(($unit * 8 + 0$subunit))
1280	;;
1281
1282mmem*)
1283	unit=${i#mmem}
1284	for pt in 0	# 1 2 3 4 ... 255
1285	do
1286#		mkdev mmem${unit}.${pt}a  b %mmem_blk% $(($unit * 4096 + $pt * 16 + 0)) 640 $g_operator
1287		mkdev mmem${unit}.${pt}c  b %mmem_blk% $(($unit * 4096 + $pt * 16 + 2)) 640 $g_operator
1288#		mkdev rmmem${unit}.${pt}a c %mmem_chr% $(($unit * 4096 + $pt * 16 + 0)) 640 $g_operator
1289		mkdev rmmem${unit}.${pt}c c %mmem_chr% $(($unit * 4096 + $pt * 16 + 2)) 640 $g_operator
1290	done
1291	;;
1292
1293mlcd*)
1294	unit=${i#mlcd}
1295	for pt in 0	# 1 2 3 4 ... 255
1296	do
1297		mkdev mlcd${unit}.${pt} c %mlcd_chr% $(($unit * 256 + $pt)) 640 $g_operator
1298	done
1299	;;
1300
1301ixpcom*)
1302	unit=${i#ixpcom}
1303	mkdev ixpcom$unit c %ixpcom_chr% $unit "" "" $u_uucp
1304	;;
1305
1306ucbsnd)
1307	mkdev ucbsnd c %ucbsnd_chr% 0 666
1308	;;
1309
1310adb)
1311	mkdev adb c %aed_chr% 0 666
1312	;;
1313
1314asc*)
1315	unit=${i#asc}
1316	mkdev asc$unit c %asc_chr% $unit 666
1317	;;
1318
1319bwtwo*)
1320	unit=${i#bwtwo}
1321	mkdev bwtwo$unit c %bwtwo_chr% $unit 666
1322	;;
1323
1324cgtwo*)
1325	unit=${i#cgtwo}
1326	mkdev cgtwo$unit c %cgtwo_chr% $unit 666
1327	;;
1328
1329cgthree*)
1330	unit=${i#cgthree}
1331	mkdev cgthree$unit c %cgthree_chr% $unit 666
1332	;;
1333
1334cgfour*)
1335	unit=${i#cgfour}
1336	mkdev cgfour$unit c %cgfour_chr% $unit 666
1337	;;
1338
1339cgsix*)
1340	unit=${i#cgsix}
1341	mkdev cgsix$unit c %cgsix_chr% $unit 666
1342	;;
1343
1344cgeight*)
1345	unit=${i#cgeight}
1346	mkdev cgeight$unit c %cgeight_chr% $unit 666
1347	;;
1348
1349tcx*)
1350	unit=${i#tcx}
1351	mkdev tcx$unit c %tcx_chr% $unit 666
1352	;;
1353
1354xd*|xy*)
1355	case $i in
1356	xd*)	name=xd; unit=${i#xd}; blk=%xd_blk%;	chr=%xd_chr%;;
1357	xy*)	name=xy; unit=${i#xy}; blk=%xy_blk%;	chr=%xy_chr%;;
1358	esac
1359	%MKDISK% $name $unit $blk $chr
1360	;;
1361
1362magma*)
1363	unit=${i#magma}
1364	if [ 0$unit -gt 3 ]; then
1365		warn "bad unit for $i: $unit"
1366		break
1367	fi
1368	for j in 0 1 2 3 4 5 6 7 8 9 a b c d e f
1369	do
1370		case $j in
1371		[0-9])	jn=$j ;;
1372		a)	jn=10 ;;
1373		b)	jn=11 ;;
1374		c)	jn=12 ;;
1375		d)	jn=13 ;;
1376		e)	jn=14 ;;
1377		f)	jn=15 ;;
1378		esac
1379		mkdev tty$unit$j c %mtty_chr% $(($unit * 64 + $jn))
1380	done
1381	mkdev bpp${unit}0 c %mbpp_chr% $(($unit * 64 + 0))
1382	mkdev bpp${unit}1 c %mbpp_chr% $(($unit * 64 + 1))
1383	;;
1384
1385clcd*)
1386	unit=${i#clcd}
1387	if [ 0$unit -gt 7 ]; then
1388		warn "bad unit for $i: $unit"
1389		break
1390	fi
1391	for j in 0 1 2 3 4 5 6 7
1392	do
1393		mkdev ttyA$unit$j c %clcd_chr% $(($unit * 8 + $j + $dialin)) "" "" $u_uucp
1394		mkdev dtyA$unit$j c %clcd_chr% $(($unit * 8 + $j + $dialout)) "" "" $u_uucp
1395	done
1396	;;
1397
1398bpp*)
1399	unit=${i#bpp}
1400	mkdev bpp$unit c %bpp_chr% $(($unit + 0))
1401	;;
1402
1403tctrl*)
1404	unit=${i#tctrl}
1405	mkdev tctrl$unit c %tctrl_chr% $unit 666
1406	;;
1407
1408bmd*)
1409	unit=${i#bmd}
1410	mkdev bmd${unit}a  b %bmd_blk% $(($unit * 8 + 0)) 640 $g_operator
1411	mkdev bmd${unit}c  b %bmd_blk% $(($unit * 8 + 2)) 640 $g_operator
1412	mkdev rbmd${unit}a c %bmd_chr% $(($unit * 8 + 0)) 640 $g_operator
1413	mkdev rbmd${unit}c c %bmd_chr% $(($unit * 8 + 2)) 640 $g_operator
1414	;;
1415
1416sram)
1417	mkdev sram c %sram_chr% 0 644
1418	;;
1419
1420pow*)
1421	unit=${i#pow}
1422	case $unit in
1423	0|1)
1424		mkdev pow${unit} c %pow_chr% ${unit} 644
1425		if [ $unit = 0 ]; then
1426			lndev pow${unit} pow
1427		fi
1428		;;
1429	*)
1430		warn "bad unit for pow in: $i"
1431		;;
1432	esac
1433	;;
1434
1435ttyS*)
1436	unit=${i#ttyS}
1437	mkdev ttyS$unit c %sacom_chr% $(($unit + $dialin )) "" "" $u_uucp
1438	mkdev dtyS$unit c %sacom_chr% $(($unit + $dialout)) "" "" $u_uucp
1439	;;
1440
1441midevend)
1442%MI_DEVICES_END%
1443local)
1444	if [ -f "$0.local" ]; then
1445		umask 0
1446		sh $0.local all
1447		umask 077
1448	fi
1449	;;
1450
1451*)
1452	warn "$i: unknown device"
1453	;;
1454
1455esac
1456done
1457
1458}
1459
1460
1461# three variants of disk partitions - max 8, max 16, max 16 with highpartoffset
1462# hack; only the one used by port is retained in final MAKEDEV script
1463# routine is called as:
1464# makedisk name unit blk chr
1465makedisk_p8()
1466{
1467	name="$1"; unit="$2"; blk="$3"; chr="$4"
1468
1469	mkdev ${name}${unit}a	b $blk $(($unit * 8 + 0))	640 $g_operator
1470	mkdev ${name}${unit}b	b $blk $(($unit * 8 + 1))	640 $g_operator
1471	mkdev ${name}${unit}c	b $blk $(($unit * 8 + 2))	640 $g_operator
1472	mkdev ${name}${unit}d	b $blk $(($unit * 8 + 3))	640 $g_operator
1473	mkdev ${name}${unit}e	b $blk $(($unit * 8 + 4))	640 $g_operator
1474	mkdev ${name}${unit}f	b $blk $(($unit * 8 + 5))	640 $g_operator
1475	mkdev ${name}${unit}g	b $blk $(($unit * 8 + 6))	640 $g_operator
1476	mkdev ${name}${unit}h	b $blk $(($unit * 8 + 7))	640 $g_operator
1477	mkdev r${name}${unit}a	c $chr $(($unit * 8 + 0))	640 $g_operator
1478	mkdev r${name}${unit}b	c $chr $(($unit * 8 + 1))	640 $g_operator
1479	mkdev r${name}${unit}c	c $chr $(($unit * 8 + 2))	640 $g_operator
1480	mkdev r${name}${unit}d	c $chr $(($unit * 8 + 3))	640 $g_operator
1481	mkdev r${name}${unit}e	c $chr $(($unit * 8 + 4))	640 $g_operator
1482	mkdev r${name}${unit}f	c $chr $(($unit * 8 + 5))	640 $g_operator
1483	mkdev r${name}${unit}g	c $chr $(($unit * 8 + 6))	640 $g_operator
1484	mkdev r${name}${unit}h	c $chr $(($unit * 8 + 7))	640 $g_operator
1485}
1486
1487makedisk_p16()
1488{
1489	name="$1"; unit="$2"; blk="$3"; chr="$4"
1490
1491	mkdev ${name}${unit}a	b $blk $(($unit * 16 + 0))	640 $g_operator
1492	mkdev ${name}${unit}b	b $blk $(($unit * 16 + 1))	640 $g_operator
1493	mkdev ${name}${unit}c	b $blk $(($unit * 16 + 2))	640 $g_operator
1494	mkdev ${name}${unit}d	b $blk $(($unit * 16 + 3))	640 $g_operator
1495	mkdev ${name}${unit}e	b $blk $(($unit * 16 + 4))	640 $g_operator
1496	mkdev ${name}${unit}f	b $blk $(($unit * 16 + 5))	640 $g_operator
1497	mkdev ${name}${unit}g	b $blk $(($unit * 16 + 6))	640 $g_operator
1498	mkdev ${name}${unit}h	b $blk $(($unit * 16 + 7))	640 $g_operator
1499	mkdev ${name}${unit}i	b $blk $(($unit * 16 + 8))	640 $g_operator
1500	mkdev ${name}${unit}j	b $blk $(($unit * 16 + 9))	640 $g_operator
1501	mkdev ${name}${unit}k	b $blk $(($unit * 16 + 10))	640 $g_operator
1502	mkdev ${name}${unit}l	b $blk $(($unit * 16 + 11))	640 $g_operator
1503	mkdev ${name}${unit}m	b $blk $(($unit * 16 + 12))	640 $g_operator
1504	mkdev ${name}${unit}n	b $blk $(($unit * 16 + 13))	640 $g_operator
1505	mkdev ${name}${unit}o	b $blk $(($unit * 16 + 14))	640 $g_operator
1506	mkdev ${name}${unit}p	b $blk $(($unit * 16 + 15))	640 $g_operator
1507	mkdev r${name}${unit}a	c $chr $(($unit * 16 + 0))	640 $g_operator
1508	mkdev r${name}${unit}b	c $chr $(($unit * 16 + 1))	640 $g_operator
1509	mkdev r${name}${unit}c	c $chr $(($unit * 16 + 2))	640 $g_operator
1510	mkdev r${name}${unit}d	c $chr $(($unit * 16 + 3))	640 $g_operator
1511	mkdev r${name}${unit}e	c $chr $(($unit * 16 + 4))	640 $g_operator
1512	mkdev r${name}${unit}f	c $chr $(($unit * 16 + 5))	640 $g_operator
1513	mkdev r${name}${unit}g	c $chr $(($unit * 16 + 6))	640 $g_operator
1514	mkdev r${name}${unit}h	c $chr $(($unit * 16 + 7))	640 $g_operator
1515	mkdev r${name}${unit}i	c $chr $(($unit * 16 + 8))	640 $g_operator
1516	mkdev r${name}${unit}j	c $chr $(($unit * 16 + 9))	640 $g_operator
1517	mkdev r${name}${unit}k	c $chr $(($unit * 16 + 10))	640 $g_operator
1518	mkdev r${name}${unit}l	c $chr $(($unit * 16 + 11))	640 $g_operator
1519	mkdev r${name}${unit}m	c $chr $(($unit * 16 + 12))	640 $g_operator
1520	mkdev r${name}${unit}n	c $chr $(($unit * 16 + 13))	640 $g_operator
1521	mkdev r${name}${unit}o	c $chr $(($unit * 16 + 14))	640 $g_operator
1522	mkdev r${name}${unit}p	c $chr $(($unit * 16 + 15))	640 $g_operator
1523}
1524
1525makedisk_p16high()
1526{
1527	ho=524280	# offset for partition 9 to 16
1528	name="$1"; unit="$2"; blk="$3"; chr="$4"
1529
1530	mkdev ${name}${unit}a	b $blk $(($unit * 8 + 0))	640 $g_operator
1531	mkdev ${name}${unit}b	b $blk $(($unit * 8 + 1))	640 $g_operator
1532	mkdev ${name}${unit}c	b $blk $(($unit * 8 + 2))	640 $g_operator
1533	mkdev ${name}${unit}d	b $blk $(($unit * 8 + 3))	640 $g_operator
1534	mkdev ${name}${unit}e	b $blk $(($unit * 8 + 4))	640 $g_operator
1535	mkdev ${name}${unit}f	b $blk $(($unit * 8 + 5))	640 $g_operator
1536	mkdev ${name}${unit}g	b $blk $(($unit * 8 + 6))	640 $g_operator
1537	mkdev ${name}${unit}h	b $blk $(($unit * 8 + 7))	640 $g_operator
1538	mkdev ${name}${unit}i	b $blk $(($unit * 8 + $ho + 8))	640 $g_operator
1539	mkdev ${name}${unit}j	b $blk $(($unit * 8 + $ho + 9))	640 $g_operator
1540	mkdev ${name}${unit}k	b $blk $(($unit * 8 + $ho + 10)) 640 $g_operator
1541	mkdev ${name}${unit}l	b $blk $(($unit * 8 + $ho + 11)) 640 $g_operator
1542	mkdev ${name}${unit}m	b $blk $(($unit * 8 + $ho + 12)) 640 $g_operator
1543	mkdev ${name}${unit}n	b $blk $(($unit * 8 + $ho + 13)) 640 $g_operator
1544	mkdev ${name}${unit}o	b $blk $(($unit * 8 + $ho + 14)) 640 $g_operator
1545	mkdev ${name}${unit}p	b $blk $(($unit * 8 + $ho + 15)) 640 $g_operator
1546	mkdev r${name}${unit}a	c $chr $(($unit * 8 + 0))	640 $g_operator
1547	mkdev r${name}${unit}b	c $chr $(($unit * 8 + 1))	640 $g_operator
1548	mkdev r${name}${unit}c	c $chr $(($unit * 8 + 2))	640 $g_operator
1549	mkdev r${name}${unit}d	c $chr $(($unit * 8 + 3))	640 $g_operator
1550	mkdev r${name}${unit}e	c $chr $(($unit * 8 + 4))	640 $g_operator
1551	mkdev r${name}${unit}f	c $chr $(($unit * 8 + 5))	640 $g_operator
1552	mkdev r${name}${unit}g	c $chr $(($unit * 8 + 6))	640 $g_operator
1553	mkdev r${name}${unit}h	c $chr $(($unit * 8 + 7))	640 $g_operator
1554	mkdev r${name}${unit}i	c $chr $(($unit * 8 + $ho + 8))	640 $g_operator
1555	mkdev r${name}${unit}j	c $chr $(($unit * 8 + $ho + 9))	640 $g_operator
1556	mkdev r${name}${unit}k	c $chr $(($unit * 8 + $ho + 10)) 640 $g_operator
1557	mkdev r${name}${unit}l	c $chr $(($unit * 8 + $ho + 11)) 640 $g_operator
1558	mkdev r${name}${unit}m	c $chr $(($unit * 8 + $ho + 12)) 640 $g_operator
1559	mkdev r${name}${unit}n	c $chr $(($unit * 8 + $ho + 13)) 640 $g_operator
1560	mkdev r${name}${unit}o	c $chr $(($unit * 8 + $ho + 14)) 640 $g_operator
1561	mkdev r${name}${unit}p	c $chr $(($unit * 8 + $ho + 15)) 640 $g_operator
1562}
1563
1564# make only the very few basic disk device nodes - 'a' partition
1565# and raw partition
1566makedisk_minimal()
1567{
1568	name=$1; unit=$2; blk=$3; chr=$4
1569	doff=%DISKMINOROFFSET%
1570	ro=%RAWDISK_OFF%
1571	rn=%RAWDISK_NAME%
1572
1573	mkdev ${name}${unit}a	b $blk $(($unit * $doff + 0))	640 $g_operator
1574	mkdev ${name}${unit}$rn	b $blk $(($unit * $doff + $ro))	640 $g_operator
1575	mkdev r${name}${unit}a	c $chr $(($unit * $doff + 0))	640 $g_operator
1576	mkdev r${name}${unit}$rn c $chr $(($unit * $doff + $ro)) 640 $g_operator
1577}
1578
1579makedev $*
1580