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