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