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