MAKEDEV.tmpl revision 1.23.2.3.2.1
1#!/bin/sh -
2#	$NetBSD: MAKEDEV.tmpl,v 1.23.2.3.2.1 2006/08/01 14:37:51 ghen 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	0)	echo $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 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	mkdev ipsync	c %ipl_chr% 4
880	mkdev ipscan	c %ipl_chr% 5
881	mkdev iplookup	c %ipl_chr% 6
882	;;
883
884pf)
885	mkdev pf c %pf_chr% 0
886	;;
887
888crypto)
889	mkdev crypto c %crypto_chr% 0 666
890	;;
891
892speaker)
893	mkdev speaker c %spkr_chr% 0
894	;;
895
896lkm)
897	mkdev lkm c %lkm_chr% 0 640 $g_kmem
898	;;
899
900audio*)
901	unit=${i#audio}
902	audio=audio$unit
903	sound=sound$unit
904	mixer=mixer$unit
905	audioctl=audioctl$unit
906	: ${unit:-0}
907	mkdev $sound    c %audio_chr% $(($unit + 0))	666
908	mkdev $audio    c %audio_chr% $(($unit + 128))	666
909	mkdev $mixer    c %audio_chr% $(($unit + 16))	666
910	mkdev $audioctl c %audio_chr% $(($unit + 192))	666
911	;;
912
913rmidi*)
914	unit=${i#rmidi}
915	mkdev rmidi$unit c %midi_chr% $unit 666
916	;;
917
918music*)
919	unit=${i#music}
920	: ${unit:-0}
921	mkdev music$unit     c %sequencer_chr% $(($unit + 0))	666
922	mkdev sequencer$unit c %sequencer_chr% $(($unit + 128))	666
923	;;
924
925radio*)
926	unit=${i#radio}
927	: ${unit:-0}
928	mkdev radio$unit c %radio_chr% $unit 666
929	;;
930
931apm)
932	mkdev apm	c %apm_chr% 0 644
933	mkdev apmctl	c %apm_chr% 8 644
934	;;
935
936apm)
937		# hpcmips uses `apmdev_chr' instead of `apm_chr'
938	mkdev apm	c %apmdev_chr% 0 644
939	mkdev apmctl	c %apmdev_chr% 8 644
940	;;
941
942satlink*)
943	unit=${i#satlink}
944	mkdev satlink$unit c %satlink_chr% $unit 444
945	;;
946
947random)
948	mkdev random	c %rnd_chr% 0 444
949	mkdev urandom	c %rnd_chr% 1 644
950	;;
951
952cfs*)
953	unit=${i#cfs}
954	mkdev cfs$unit c %vcoda_chr% $unit
955	;;
956
957sysmon)
958	mkdev sysmon	c %sysmon_chr% 0 644
959	mkdev watchdog	c %sysmon_chr% 1 644
960	mkdev power	c %sysmon_chr% 2 640
961	;;
962
963scsibus*)
964	unit=${i#scsibus}
965	mkdev scsibus$unit c %scsibus_chr% $unit 644
966	;;
967
968bktr)
969	makedev bktr0 bktr1
970	lndev	bktr0	bktr
971	lndev	tuner0	tuner
972	lndev	vbi0	vbi
973	;;
974
975bktr*)
976	unit=${i#bktr}
977	mkdev bktr$unit		c %bktr_chr% $(($unit + 0))	444
978	mkdev tuner$unit	c %bktr_chr% $(($unit + 16))	444
979	mkdev vbi$unit		c %bktr_chr% $(($unit + 32))	444
980	;;
981
982iop*)
983	unit=${i#iop}
984	mkdev iop$unit c %iop_chr% $unit
985	;;
986
987mlx*)
988	unit=${i#mlx}
989	mkdev mlx$unit c %mlx_chr% $unit
990	;;
991
992mly*)
993	unit=${i#mly}
994	mkdev mly$unit c %mly_chr% $unit
995	;;
996
997twe*)
998	unit=${i#twe}
999	mkdev twe$unit c %twe_chr% $unit
1000	;;
1001
1002icp*)
1003	unit=${i#icp}
1004	mkdev icp$unit c %icp_chr% $unit
1005	;;
1006
1007agp*)
1008	unit=${i#agp}
1009	mkdev agp$unit c %agp_chr% $unit 644
1010	if [ "$unit" = "0" ]; then
1011		lndev agp$unit agpgart
1012	fi
1013	;;
1014
1015pci*)
1016	unit=${i#pci}
1017	mkdev pci$unit c %pci_chr% $unit 644
1018	;;
1019
1020dpti*)
1021	unit=${i#dpti}
1022	mkdev dpti$unit c %dpti_chr% $unit
1023	;;
1024
1025dpt*)
1026	unit=${i#dpt}
1027	mkdev dpt$unit c %dpt_chr% $unit
1028	;;
1029
1030altq)
1031	makedir altq 755
1032	unit=0
1033	for dev in altq cbq wfq afm fifoq red rio localq hfsc cdnr blue priq
1034	do
1035		mkdev altq/$dev c %altq_chr% $unit 644
1036		unit=$(($unit + 1))
1037	done
1038	;;
1039
1040isdn)
1041	mkdev isdn c %isdn_chr% 0
1042	;;
1043
1044isdnctl)
1045	mkdev isdnctl c %isdnctl_chr% 0
1046	;;
1047
1048isdnbchan*)
1049	unit=${i#isdnbchan}
1050	mkdev isdnbchan$unit c %isdnbchan_chr% $unit
1051	;;
1052
1053isdnteld*)
1054	unit=${i#isdnteld}
1055	mkdev isdnteld$unit c %isdntel_chr% $(($unit + 64))
1056	;;
1057
1058isdntel*)
1059	unit=${i#isdntel}
1060	mkdev isdntel$unit c %isdntel_chr% $unit
1061	;;
1062
1063isdntrc*)
1064	unit=${i#isdntrc}
1065	mkdev isdntrc$unit c %isdntrc_chr% $unit
1066	;;
1067
1068vmegen)
1069	makedev vmegen0 vmegen1 vmegen2 vmegen3
1070	;;
1071
1072vmegen*)
1073	unit=${i#vmegen}
1074	mkdev vmegen$unit c %vmegeneric_chr% $(($unit * 16 + 0))
1075	;;
1076
1077wsfont)
1078	mkdev wsfont c %wsfont_chr% 0
1079	;;
1080
1081cir*)
1082	unit=${i#cir}
1083	mkdev cir$unit c %cir_chr% $unit 666
1084	;;
1085
1086irframe*)
1087	unit=${i#irframe}
1088	mkdev irframe$unit c %irframe_chr% $unit
1089	;;
1090
1091fcom*)
1092	unit=${i#fcom}
1093	mkdev fcom$unit c %fcom_chr% $unit "" "" $u_uucp
1094	;;
1095
1096openfirm)
1097	mkdev openfirm c %openfirm_chr% 0 444
1098	;;
1099
1100nvram)
1101	mkdev nvram c %nvram_chr% 0 644
1102	;;
1103
1104rtc)
1105	mkdev rtc c %rtc_chr% 0 644
1106	;;
1107
1108clockctl)
1109	mkdev clockctl c %clockctl_chr% 0 660 $g_ntpd
1110	;;
1111
1112nsmb)
1113	makedev nsmb0 nsmb1 nsmb2 nsmb3
1114	;;
1115
1116nsmb*)
1117	unit=${i#nsmb}
1118	mkdev nsmb$unit c %nsmb_chr% $unit 644
1119	;;
1120
1121systrace)
1122	mkdev systrace c %systrace_chr% 0 644
1123	;;
1124
1125kttcp)
1126	mkdev kttcp c %kttcp_chr% 0
1127	;;
1128
1129dmoverio)
1130	mkdev dmoverio c %dmoverio_chr% 0 644
1131	;;
1132
1133veriexec)
1134	mkdev veriexec c %verifiedexec_chr% 0 644
1135	;;
1136
1137ttyv*)
1138	unit=${i#ttyv}
1139	mkdev ttyv$unit c %pc_chr% $unit
1140	;;
1141
1142# arm, acorn32
1143ttyv*)
1144	unit=${i#ttyv}
1145	mkdev ttyv$unit c %physcon_chr% $unit
1146	;;
1147
1148arcpp*)
1149	unit=${i#arcpp}
1150	mkdev arcpp$unit c %arcpp_chr% $unit
1151	;;
1152
1153par*)
1154	unit=${i#par}
1155	case $unit in
1156	0)
1157		mkdev par$unit c %par_chr% $unit
1158		;;
1159	*)
1160		warn "bad unit for par in: $i"
1161		;;
1162	esac
1163	;;
1164
1165ite*|ttye*)
1166	case $i in
1167	ite*)	unit=${i#ite};;
1168	ttye*)	unit=${i#ttye};;
1169	esac
1170	mkdev ttye$unit	c %ite_chr% $unit
1171	;;
1172
1173pms*)
1174	unit=${i#pms}
1175	mkdev pms$unit c %opms_chr% $unit
1176	;;
1177
1178qms*)
1179	unit=${i#qms}
1180	mkdev qms$unit c %qms_chr% $unit
1181	;;
1182
1183lms*)
1184	unit=${i#lms}
1185	mkdev lms$unit c %lms_chr% $unit
1186	;;
1187
1188mms*)
1189	unit=${i#mms}
1190	mkdev mms$unit c %mms_chr% $unit
1191	;;
1192
1193mouse-*)
1194	case $i in
1195	mouse-pms*) name=pms ;;
1196	mouse-qms*) name=qms ;;
1197	esac
1198	unit=${i#mouse-${name}}
1199	lndev $name$unit mouse
1200	;;
1201
1202kbd)
1203	mkdev kbd c %kbd_chr% 0
1204	;;
1205
1206kbdctl)
1207	mkdev kbdctl c %kbd_chr% 1
1208	;;
1209
1210vidcconsole0)
1211	mkdev vidcconsole0 c %vidcconsole_chr% 0 640
1212	;;
1213
1214view*)
1215	unit=${i#view}
1216	mkdev view$unit	c %view_chr% $unit 666
1217	;;
1218
1219mouse*)
1220	unit=${i#mouse}
1221	case $unit in
1222	0|1)
1223		mkdev mouse$unit c %ms_chr% $unit 666
1224		if [ $unit = 0 ]; then
1225			lndev mouse$unit mouse
1226		fi
1227		;;
1228	*)
1229		warn "bad unit for mouse in: $i"
1230		;;
1231	esac
1232	;;
1233
1234panel)
1235	mkdev panel0 c %panel_chr% 0 660
1236	;;
1237
1238ipty)
1239	mkdev ttyp0 c %pts_chr% 0 666
1240	mkdev ttyp1 c %pts_chr% 1 666
1241	mkdev ptyp0 c %ptc_chr% 0 666
1242	mkdev ptyp1 c %ptc_chr% 1 666
1243	;;
1244
1245grf*)
1246	unit=${i#grf}
1247	mkdev grf$unit c %grf_chr% $unit 666
1248	;;
1249
1250etvme)
1251	mkdev etvme c %et_chr% 0
1252	;;
1253
1254leo*)
1255	unit=${i#leo}
1256	mkdev leo$unit c %leo_chr% $unit
1257	;;
1258
1259scif*)
1260	unit=${i#scif}
1261	mkdev scif$unit c %scif_chr% $unit "" "" $u_uucp
1262	;;
1263
1264sci*)
1265	unit=${i#sci}
1266	mkdev sci$unit c %sci_chr% $unit "" "" $u_uucp
1267	;;
1268
1269maple*)
1270	case $i in
1271	mapleA*) name="mapleA"; unit=0;;
1272	mapleB*) name="mapleB"; unit=1;;
1273	mapleC*) name="mapleC"; unit=2;;
1274	mapleD*) name="mapleD"; unit=3;;
1275	esac
1276	subunit=${i#$name}
1277	mkdev $name$subunit c %maple_chr% $(($unit * 8 + 0$subunit))
1278	;;
1279
1280mmem*)
1281	unit=${i#mmem}
1282	for pt in 0	# 1 2 3 4 ... 255
1283	do
1284#		mkdev mmem${unit}.${pt}a  b %mmem_blk% $(($unit * 4096 + $pt * 16 + 0)) 640 $g_operator
1285		mkdev mmem${unit}.${pt}c  b %mmem_blk% $(($unit * 4096 + $pt * 16 + 2)) 640 $g_operator
1286#		mkdev rmmem${unit}.${pt}a c %mmem_chr% $(($unit * 4096 + $pt * 16 + 0)) 640 $g_operator
1287		mkdev rmmem${unit}.${pt}c c %mmem_chr% $(($unit * 4096 + $pt * 16 + 2)) 640 $g_operator
1288	done
1289	;;
1290
1291mlcd*)
1292	unit=${i#mlcd}
1293	for pt in 0	# 1 2 3 4 ... 255
1294	do
1295		mkdev mlcd${unit}.${pt} c %mlcd_chr% $(($unit * 256 + $pt)) 640 $g_operator
1296	done
1297	;;
1298
1299ixpcom*)
1300	unit=${i#ixpcom}
1301	mkdev ixpcom$unit c %ixpcom_chr% $unit "" "" $u_uucp
1302	;;
1303
1304ucbsnd)
1305	mkdev ucbsnd c %ucbsnd_chr% 0 666
1306	;;
1307
1308adb)
1309	mkdev adb c %aed_chr% 0 666
1310	;;
1311
1312asc*)
1313	unit=${i#asc}
1314	mkdev asc$unit c %asc_chr% $unit 666
1315	;;
1316
1317bwtwo*)
1318	unit=${i#bwtwo}
1319	mkdev bwtwo$unit c %bwtwo_chr% $unit 666
1320	;;
1321
1322cgtwo*)
1323	unit=${i#cgtwo}
1324	mkdev cgtwo$unit c %cgtwo_chr% $unit 666
1325	;;
1326
1327cgthree*)
1328	unit=${i#cgthree}
1329	mkdev cgthree$unit c %cgthree_chr% $unit 666
1330	;;
1331
1332cgfour*)
1333	unit=${i#cgfour}
1334	mkdev cgfour$unit c %cgfour_chr% $unit 666
1335	;;
1336
1337cgsix*)
1338	unit=${i#cgsix}
1339	mkdev cgsix$unit c %cgsix_chr% $unit 666
1340	;;
1341
1342cgeight*)
1343	unit=${i#cgeight}
1344	mkdev cgeight$unit c %cgeight_chr% $unit 666
1345	;;
1346
1347tcx*)
1348	unit=${i#tcx}
1349	mkdev tcx$unit c %tcx_chr% $unit 666
1350	;;
1351
1352xd*|xy*)
1353	case $i in
1354	xd*)	name=xd; unit=${i#xd}; blk=%xd_blk%;	chr=%xd_chr%;;
1355	xy*)	name=xy; unit=${i#xy}; blk=%xy_blk%;	chr=%xy_chr%;;
1356	esac
1357	%MKDISK% $name $unit $blk $chr
1358	;;
1359
1360magma*)
1361	unit=${i#magma}
1362	if [ 0$unit -gt 3 ]; then
1363		warn "bad unit for $i: $unit"
1364		break
1365	fi
1366	for j in 0 1 2 3 4 5 6 7 8 9 a b c d e f
1367	do
1368		case $j in
1369		[0-9])	jn=$j ;;
1370		a)	jn=10 ;;
1371		b)	jn=11 ;;
1372		c)	jn=12 ;;
1373		d)	jn=13 ;;
1374		e)	jn=14 ;;
1375		f)	jn=15 ;;
1376		esac
1377		mkdev tty$unit$j c %mtty_chr% $(($unit * 64 + $jn))
1378	done
1379	mkdev bpp${unit}0 c %mbpp_chr% $(($unit * 64 + 0))
1380	mkdev bpp${unit}1 c %mbpp_chr% $(($unit * 64 + 1))
1381	;;
1382
1383clcd*)
1384	unit=${i#clcd}
1385	if [ 0$unit -gt 7 ]; then
1386		warn "bad unit for $i: $unit"
1387		break
1388	fi
1389	for j in 0 1 2 3 4 5 6 7
1390	do
1391		mkdev ttyA$unit$j c %clcd_chr% $(($unit * 8 + $j + $dialin)) "" "" $u_uucp
1392		mkdev dtyA$unit$j c %clcd_chr% $(($unit * 8 + $j + $dialout)) "" "" $u_uucp
1393	done
1394	;;
1395
1396bpp*)
1397	unit=${i#bpp}
1398	mkdev bpp$unit c %bpp_chr% $(($unit + 0))
1399	;;
1400
1401tctrl*)
1402	unit=${i#tctrl}
1403	mkdev tctrl$unit c %tctrl_chr% $unit 666
1404	;;
1405
1406bmd*)
1407	unit=${i#bmd}
1408	mkdev bmd${unit}a  b %bmd_blk% $(($unit * 8 + 0)) 640 $g_operator
1409	mkdev bmd${unit}c  b %bmd_blk% $(($unit * 8 + 2)) 640 $g_operator
1410	mkdev rbmd${unit}a c %bmd_chr% $(($unit * 8 + 0)) 640 $g_operator
1411	mkdev rbmd${unit}c c %bmd_chr% $(($unit * 8 + 2)) 640 $g_operator
1412	;;
1413
1414sram)
1415	mkdev sram c %sram_chr% 0 644
1416	;;
1417
1418pow*)
1419	unit=${i#pow}
1420	case $unit in
1421	0|1)
1422		mkdev pow${unit} c %pow_chr% ${unit} 644
1423		if [ $unit = 0 ]; then
1424			lndev pow${unit} pow
1425		fi
1426		;;
1427	*)
1428		warn "bad unit for pow in: $i"
1429		;;
1430	esac
1431	;;
1432
1433ttyS*)
1434	unit=${i#ttyS}
1435	mkdev ttyS$unit c %sacom_chr% $(($unit + $dialin )) "" "" $u_uucp
1436	mkdev dtyS$unit c %sacom_chr% $(($unit + $dialout)) "" "" $u_uucp
1437	;;
1438
1439midevend)
1440%MI_DEVICES_END%
1441local)
1442	if [ -f "$0.local" ]; then
1443		umask 0
1444		sh $0.local all
1445		umask 077
1446	fi
1447	;;
1448
1449*)
1450	warn "$i: unknown device"
1451	;;
1452
1453esac
1454done
1455
1456}
1457
1458
1459# three variants of disk partitions - max 8, max 16, max 16 with highpartoffset
1460# hack; only the one used by port is retained in final MAKEDEV script
1461# routine is called as:
1462# makedisk name unit blk chr
1463makedisk_p8()
1464{
1465	name="$1"; unit="$2"; blk="$3"; chr="$4"
1466
1467	mkdev ${name}${unit}a	b $blk $(($unit * 8 + 0))	640 $g_operator
1468	mkdev ${name}${unit}b	b $blk $(($unit * 8 + 1))	640 $g_operator
1469	mkdev ${name}${unit}c	b $blk $(($unit * 8 + 2))	640 $g_operator
1470	mkdev ${name}${unit}d	b $blk $(($unit * 8 + 3))	640 $g_operator
1471	mkdev ${name}${unit}e	b $blk $(($unit * 8 + 4))	640 $g_operator
1472	mkdev ${name}${unit}f	b $blk $(($unit * 8 + 5))	640 $g_operator
1473	mkdev ${name}${unit}g	b $blk $(($unit * 8 + 6))	640 $g_operator
1474	mkdev ${name}${unit}h	b $blk $(($unit * 8 + 7))	640 $g_operator
1475	mkdev r${name}${unit}a	c $chr $(($unit * 8 + 0))	640 $g_operator
1476	mkdev r${name}${unit}b	c $chr $(($unit * 8 + 1))	640 $g_operator
1477	mkdev r${name}${unit}c	c $chr $(($unit * 8 + 2))	640 $g_operator
1478	mkdev r${name}${unit}d	c $chr $(($unit * 8 + 3))	640 $g_operator
1479	mkdev r${name}${unit}e	c $chr $(($unit * 8 + 4))	640 $g_operator
1480	mkdev r${name}${unit}f	c $chr $(($unit * 8 + 5))	640 $g_operator
1481	mkdev r${name}${unit}g	c $chr $(($unit * 8 + 6))	640 $g_operator
1482	mkdev r${name}${unit}h	c $chr $(($unit * 8 + 7))	640 $g_operator
1483}
1484
1485makedisk_p16()
1486{
1487	name="$1"; unit="$2"; blk="$3"; chr="$4"
1488
1489	mkdev ${name}${unit}a	b $blk $(($unit * 16 + 0))	640 $g_operator
1490	mkdev ${name}${unit}b	b $blk $(($unit * 16 + 1))	640 $g_operator
1491	mkdev ${name}${unit}c	b $blk $(($unit * 16 + 2))	640 $g_operator
1492	mkdev ${name}${unit}d	b $blk $(($unit * 16 + 3))	640 $g_operator
1493	mkdev ${name}${unit}e	b $blk $(($unit * 16 + 4))	640 $g_operator
1494	mkdev ${name}${unit}f	b $blk $(($unit * 16 + 5))	640 $g_operator
1495	mkdev ${name}${unit}g	b $blk $(($unit * 16 + 6))	640 $g_operator
1496	mkdev ${name}${unit}h	b $blk $(($unit * 16 + 7))	640 $g_operator
1497	mkdev ${name}${unit}i	b $blk $(($unit * 16 + 8))	640 $g_operator
1498	mkdev ${name}${unit}j	b $blk $(($unit * 16 + 9))	640 $g_operator
1499	mkdev ${name}${unit}k	b $blk $(($unit * 16 + 10))	640 $g_operator
1500	mkdev ${name}${unit}l	b $blk $(($unit * 16 + 11))	640 $g_operator
1501	mkdev ${name}${unit}m	b $blk $(($unit * 16 + 12))	640 $g_operator
1502	mkdev ${name}${unit}n	b $blk $(($unit * 16 + 13))	640 $g_operator
1503	mkdev ${name}${unit}o	b $blk $(($unit * 16 + 14))	640 $g_operator
1504	mkdev ${name}${unit}p	b $blk $(($unit * 16 + 15))	640 $g_operator
1505	mkdev r${name}${unit}a	c $chr $(($unit * 16 + 0))	640 $g_operator
1506	mkdev r${name}${unit}b	c $chr $(($unit * 16 + 1))	640 $g_operator
1507	mkdev r${name}${unit}c	c $chr $(($unit * 16 + 2))	640 $g_operator
1508	mkdev r${name}${unit}d	c $chr $(($unit * 16 + 3))	640 $g_operator
1509	mkdev r${name}${unit}e	c $chr $(($unit * 16 + 4))	640 $g_operator
1510	mkdev r${name}${unit}f	c $chr $(($unit * 16 + 5))	640 $g_operator
1511	mkdev r${name}${unit}g	c $chr $(($unit * 16 + 6))	640 $g_operator
1512	mkdev r${name}${unit}h	c $chr $(($unit * 16 + 7))	640 $g_operator
1513	mkdev r${name}${unit}i	c $chr $(($unit * 16 + 8))	640 $g_operator
1514	mkdev r${name}${unit}j	c $chr $(($unit * 16 + 9))	640 $g_operator
1515	mkdev r${name}${unit}k	c $chr $(($unit * 16 + 10))	640 $g_operator
1516	mkdev r${name}${unit}l	c $chr $(($unit * 16 + 11))	640 $g_operator
1517	mkdev r${name}${unit}m	c $chr $(($unit * 16 + 12))	640 $g_operator
1518	mkdev r${name}${unit}n	c $chr $(($unit * 16 + 13))	640 $g_operator
1519	mkdev r${name}${unit}o	c $chr $(($unit * 16 + 14))	640 $g_operator
1520	mkdev r${name}${unit}p	c $chr $(($unit * 16 + 15))	640 $g_operator
1521}
1522
1523makedisk_p16high()
1524{
1525	ho=524280	# offset for partition 9 to 16
1526	name="$1"; unit="$2"; blk="$3"; chr="$4"
1527
1528	mkdev ${name}${unit}a	b $blk $(($unit * 8 + 0))	640 $g_operator
1529	mkdev ${name}${unit}b	b $blk $(($unit * 8 + 1))	640 $g_operator
1530	mkdev ${name}${unit}c	b $blk $(($unit * 8 + 2))	640 $g_operator
1531	mkdev ${name}${unit}d	b $blk $(($unit * 8 + 3))	640 $g_operator
1532	mkdev ${name}${unit}e	b $blk $(($unit * 8 + 4))	640 $g_operator
1533	mkdev ${name}${unit}f	b $blk $(($unit * 8 + 5))	640 $g_operator
1534	mkdev ${name}${unit}g	b $blk $(($unit * 8 + 6))	640 $g_operator
1535	mkdev ${name}${unit}h	b $blk $(($unit * 8 + 7))	640 $g_operator
1536	mkdev ${name}${unit}i	b $blk $(($unit * 8 + $ho + 8))	640 $g_operator
1537	mkdev ${name}${unit}j	b $blk $(($unit * 8 + $ho + 9))	640 $g_operator
1538	mkdev ${name}${unit}k	b $blk $(($unit * 8 + $ho + 10)) 640 $g_operator
1539	mkdev ${name}${unit}l	b $blk $(($unit * 8 + $ho + 11)) 640 $g_operator
1540	mkdev ${name}${unit}m	b $blk $(($unit * 8 + $ho + 12)) 640 $g_operator
1541	mkdev ${name}${unit}n	b $blk $(($unit * 8 + $ho + 13)) 640 $g_operator
1542	mkdev ${name}${unit}o	b $blk $(($unit * 8 + $ho + 14)) 640 $g_operator
1543	mkdev ${name}${unit}p	b $blk $(($unit * 8 + $ho + 15)) 640 $g_operator
1544	mkdev r${name}${unit}a	c $chr $(($unit * 8 + 0))	640 $g_operator
1545	mkdev r${name}${unit}b	c $chr $(($unit * 8 + 1))	640 $g_operator
1546	mkdev r${name}${unit}c	c $chr $(($unit * 8 + 2))	640 $g_operator
1547	mkdev r${name}${unit}d	c $chr $(($unit * 8 + 3))	640 $g_operator
1548	mkdev r${name}${unit}e	c $chr $(($unit * 8 + 4))	640 $g_operator
1549	mkdev r${name}${unit}f	c $chr $(($unit * 8 + 5))	640 $g_operator
1550	mkdev r${name}${unit}g	c $chr $(($unit * 8 + 6))	640 $g_operator
1551	mkdev r${name}${unit}h	c $chr $(($unit * 8 + 7))	640 $g_operator
1552	mkdev r${name}${unit}i	c $chr $(($unit * 8 + $ho + 8))	640 $g_operator
1553	mkdev r${name}${unit}j	c $chr $(($unit * 8 + $ho + 9))	640 $g_operator
1554	mkdev r${name}${unit}k	c $chr $(($unit * 8 + $ho + 10)) 640 $g_operator
1555	mkdev r${name}${unit}l	c $chr $(($unit * 8 + $ho + 11)) 640 $g_operator
1556	mkdev r${name}${unit}m	c $chr $(($unit * 8 + $ho + 12)) 640 $g_operator
1557	mkdev r${name}${unit}n	c $chr $(($unit * 8 + $ho + 13)) 640 $g_operator
1558	mkdev r${name}${unit}o	c $chr $(($unit * 8 + $ho + 14)) 640 $g_operator
1559	mkdev r${name}${unit}p	c $chr $(($unit * 8 + $ho + 15)) 640 $g_operator
1560}
1561
1562# make only the very few basic disk device nodes - 'a' partition
1563# and raw partition
1564makedisk_minimal()
1565{
1566	name=$1; unit=$2; blk=$3; chr=$4
1567	doff=%DISKMINOROFFSET%
1568	ro=%RAWDISK_OFF%
1569	rn=%RAWDISK_NAME%
1570
1571	mkdev ${name}${unit}a	b $blk $(($unit * $doff + 0))	640 $g_operator
1572	mkdev ${name}${unit}$rn	b $blk $(($unit * $doff + $ro))	640 $g_operator
1573	mkdev r${name}${unit}a	c $chr $(($unit * $doff + 0))	640 $g_operator
1574	mkdev r${name}${unit}$rn c $chr $(($unit * $doff + $ro)) 640 $g_operator
1575}
1576
1577makedev $*
1578