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