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