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