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