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