MAKEDEV.tmpl revision 1.57
178527Sassar#!/bin/sh -
2233294Sstas#	$NetBSD: MAKEDEV.tmpl,v 1.57 2006/07/26 10:31:00 tron Exp $
3233294Sstas#
4233294Sstas# Copyright (c) 2003 The NetBSD Foundation, Inc.
578527Sassar# All rights reserved.
6233294Sstas#
7233294Sstas# Redistribution and use in source and binary forms, with or without
8233294Sstas# modification, are permitted provided that the following conditions
978527Sassar# are met:
10233294Sstas# 1. Redistributions of source code must retain the above copyright
11233294Sstas#    notice, this list of conditions and the following disclaimer.
1278527Sassar# 2. Redistributions in binary form must reproduce the above copyright
13233294Sstas#    notice, this list of conditions and the following disclaimer in the
14233294Sstas#    documentation and/or other materials provided with the distribution.
15233294Sstas# 3. All advertising materials mentioning features or use of this software
1678527Sassar#    must display the following acknowledgement:
1778527Sassar#        This product includes software developed by the NetBSD
1878527Sassar#        Foundation, Inc. and its contributors.
1978527Sassar# 4. Neither the name of The NetBSD Foundation nor the names of its
2078527Sassar#    contributors may be used to endorse or promote products derived
2178527Sassar#    from this software without specific prior written permission.
2278527Sassar#
2378527Sassar# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
2478527Sassar# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
2578527Sassar# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
2678527Sassar# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
2778527Sassar# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2878527Sassar# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2978527Sassar# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
3078527Sassar# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
3178527Sassar# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
3278527Sassar# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
3378527Sassar# POSSIBILITY OF SUCH DAMAGE.
34178825Sdfr#
3578527Sassar#
3678527Sassar###########################################################################
3778527Sassar#
3878527Sassar#   PLEASE RUN "cd ../share/man/man8 ; make makedevs"
3978527Sassar#   AFTER CHANGING THIS FILE, AND COMMIT THE UPDATED MANPAGE!
4078527Sassar#
4178527Sassar###########################################################################
4278527Sassar#
4378527Sassar# Device "make" file.  Valid special arguments:
4478527Sassar#	all	makes all known devices, including local devices.
4578527Sassar#		Tries to make the 'standard' number of each type.
4678527Sassar#	init	A set of devices that is used for MFS /dev by init.
4778527Sassar#		May be equal to "all".
4878527Sassar#	floppy	devices to be put on install floppies
4978527Sassar#	ramdisk	devices to be put into INSTALL kernel ramdisks.
5078527Sassar#	std	standard devices
5178527Sassar#	local	configuration specific devices
5278527Sassar#	wscons	make wscons devices
5378527Sassar#	usbs	make USB devices
5478527Sassar#	isdns	make ISDN devices
5578527Sassar#
5678527Sassar# Tapes:
5778527Sassar#	st*	SCSI tapes
5878527Sassar#	wt*	QIC-interfaced (e.g. not SCSI) 3M cartridge tape
5978527Sassar#	ht*	MASSBUS TM03 and TU??
6078527Sassar#	mt*	MSCP tapes (e.g. TU81, TK50)
6178527Sassar#	tm*	UNIBUS TM11 and TE10 emulations (e.g. Emulex TC-11)
6278527Sassar#	ts*	UNIBUS TS11
6378527Sassar#	ut*	UNIBUS TU45 emulations (e.g. si 9700)
6478527Sassar#	uu*	TU58 cassettes on DL11 controller
6578527Sassar#
6678527Sassar# Disks:
6778527Sassar#	ccd*	concatenated disk devices
6878527Sassar#	cd*	SCSI or ATAPI CD-ROM
6978527Sassar#	cgd*	cryptographic disk devices
7078527Sassar#	raid*	RAIDframe disk devices
7178527Sassar#	sd*	SCSI disks
7278527Sassar#	wd*	"winchester" disk drives (ST506,IDE,ESDI,RLL,...)
7378527Sassar#	bmd*	Nereid bank memory disks
7478527Sassar#	ed*	IBM PS/2 ESDI disk devices
7578527Sassar#	fd*	"floppy" disk drives (3 1/2", 5 1/4")
7678527Sassar#	fss*	Files system snapshot devices
7778527Sassar#	gdrom*	Dreamcast "gigadisc" CD-ROM drive
78233294Sstas#	hk*	UNIBUS RK06 and RK07
7978527Sassar#	hp*	MASSBUS RM??
8078527Sassar#	ld*	Logical disk devices (e.g., hardware RAID)
8178527Sassar#	mcd*	Mitsumi CD-ROM
8278527Sassar#	md*	memory pseudo-disk devices
8378527Sassar#	ofdisk*	OpenFirmware disk devices
8478527Sassar#	ra*	MSCP disks (RA??, RD??)
8578527Sassar#	rb*	730 IDC w/ RB80 and/or RB02
8678527Sassar#	rd*	HDC9224 RD disks on VS2000
8778527Sassar#	rl*	UNIBUS RL02
8878527Sassar#	rx*	MSCP floppy disk (RX33/50/...)
8978527Sassar#	up*	other UNIBUS devices (e.g. on Emulex SC-21V controller)
9078527Sassar#	vnd*	"file" pseudo-disks
9178527Sassar#	xbd*	Xen virtual disks
9278527Sassar#	xd*	Xylogic 753/7053 disks
9378527Sassar#	xy*	Xylogic 450/451 disks
9478527Sassar#
9578527Sassar# Pointing devices:
9678527Sassar#	wsmouse* wscons mouse events
9778527Sassar#	lms*	Logitech bus mouse
9878527Sassar#	mms*	Microsoft bus mouse
9978527Sassar#	qms*	"quadrature mouse"
10078527Sassar#	pms*	PS/2 mouse
10178527Sassar#	mouse	mouse (provides events, for X11)
10278527Sassar#
10378527Sassar# Keyboard devices:
10478527Sassar#	wskbd*	wscons keyboard events
10578527Sassar#	kbd	raw keyboard (provides events, for X11)
10678527Sassar#	kbdctl	keyboard control
10778527Sassar#
10878527Sassar# Terminals/Console ports:
10978527Sassar#	tty[01]*	standard serial ports
11078527Sassar#	tty0*	SB1250 ("sbscn") serial ports (sbmips)
11178527Sassar#	ttyE*	wscons - Workstation console ("wscons") glass-tty emulators
11278527Sassar#	ttyCZ?	Cyclades-Z multiport serial boards.  Each "unit"
11378527Sassar#		makes 64 ports.
11478527Sassar#	ttyCY?	Cyclom-Y multiport serial boards. Each "unit" makes
11578527Sassar#		32 ports.
116178825Sdfr#	ttye*	ITE bitmapped consoles
11778527Sassar#	ttyv0	pccons
118178825Sdfr#	ttyC?	NS16550 ("com") serial ports
119178825Sdfr#	ttyS*	SA1110 serial port (hpcarm)
12078527Sassar#	ttyTX?	TX39 internal serial ports (hpcmips)
12178527Sassar#	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#	btdev*	Bluetooth Device 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 btdev0 btdev1 btdev2 btdev3
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
943btdev*)
944	unit=${i#btdev}
945	mkdev btdev$unit c %btdev_chr% $unit
946	;;
947
948tun*)
949	unit=${i#tun}
950	mkdev tun$unit c %tun_chr% $unit
951	;;
952
953joy*)
954	unit=${i#joy}
955	mkdev joy$unit c %joy_chr% $unit
956	;;
957
958ipl)
959	mkdev ipl	c %ipl_chr% 0
960	mkdev ipnat	c %ipl_chr% 1
961	mkdev ipstate	c %ipl_chr% 2
962	mkdev ipauth	c %ipl_chr% 3
963	;;
964
965pf)
966	mkdev pf c %pf_chr% 0
967	;;
968
969crypto)
970	mkdev crypto c %crypto_chr% 0 666
971	;;
972
973speaker)
974	mkdev speaker c %spkr_chr% 0
975	;;
976
977lkm)
978	mkdev lkm c %lkm_chr% 0 640 $g_kmem
979	;;
980
981audio*)
982	unit=${i#audio}
983	audio=audio$unit
984	sound=sound$unit
985	mixer=mixer$unit
986	audioctl=audioctl$unit
987	: ${unit:-0}
988	mkdev $sound    c %audio_chr% $(($unit + 0))	666
989	mkdev $audio    c %audio_chr% $(($unit + 128))	666
990	mkdev $mixer    c %audio_chr% $(($unit + 16))	666
991	mkdev $audioctl c %audio_chr% $(($unit + 192))	666
992	;;
993
994gpio*)
995	unit=${i#gpio}
996	mkdev gpio$unit c %gpio_chr% $unit 644
997	;;
998
999rmidi*)
1000	unit=${i#rmidi}
1001	mkdev rmidi$unit c %midi_chr% $unit 666
1002	;;
1003
1004music*)
1005	unit=${i#music}
1006	: ${unit:-0}
1007	mkdev music$unit     c %sequencer_chr% $(($unit + 0))	666
1008	mkdev sequencer$unit c %sequencer_chr% $(($unit + 128))	666
1009	;;
1010
1011radio*)
1012	unit=${i#radio}
1013	: ${unit:-0}
1014	mkdev radio$unit c %radio_chr% $unit 666
1015	;;
1016
1017amr*)
1018	unit=${i#amr}
1019	mkdev amr$unit c %amr_chr% $unit
1020	;;
1021
1022apm)
1023	mkdev apm	c %apm_chr% 0 644
1024	mkdev apmctl	c %apm_chr% 8 644
1025	;;
1026
1027apm)
1028		# hpcmips uses `apmdev_chr' instead of `apm_chr'
1029	mkdev apm	c %apmdev_chr% 0 644
1030	mkdev apmctl	c %apmdev_chr% 8 644
1031	;;
1032
1033satlink*)
1034	unit=${i#satlink}
1035	mkdev satlink$unit c %satlink_chr% $unit 444
1036	;;
1037
1038random)
1039	mkdev random	c %rnd_chr% 0 444
1040	mkdev urandom	c %rnd_chr% 1 644
1041	;;
1042
1043cfs*)
1044	unit=${i#cfs}
1045	mkdev cfs$unit c %vcoda_chr% $unit
1046	;;
1047
1048sysmon)
1049	mkdev sysmon	c %sysmon_chr% 0 644
1050	mkdev watchdog	c %sysmon_chr% 1 644
1051	mkdev power	c %sysmon_chr% 2 640
1052	;;
1053
1054scsibus*)
1055	unit=${i#scsibus}
1056	mkdev scsibus$unit c %scsibus_chr% $unit 644
1057	;;
1058
1059bktr)
1060	makedev bktr0 bktr1
1061	lndev	bktr0	bktr
1062	lndev	tuner0	tuner
1063	lndev	vbi0	vbi
1064	;;
1065
1066bktr*)
1067	unit=${i#bktr}
1068	mkdev bktr$unit		c %bktr_chr% $(($unit + 0))	444
1069	mkdev tuner$unit	c %bktr_chr% $(($unit + 16))	444
1070	mkdev vbi$unit		c %bktr_chr% $(($unit + 32))	444
1071	;;
1072
1073iop*)
1074	unit=${i#iop}
1075	mkdev iop$unit c %iop_chr% $unit
1076	;;
1077
1078mlx*)
1079	unit=${i#mlx}
1080	mkdev mlx$unit c %mlx_chr% $unit
1081	;;
1082
1083mly*)
1084	unit=${i#mly}
1085	mkdev mly$unit c %mly_chr% $unit
1086	;;
1087
1088twe*)
1089	unit=${i#twe}
1090	mkdev twe$unit c %twe_chr% $unit
1091	;;
1092
1093icp*)
1094	unit=${i#icp}
1095	mkdev icp$unit c %icp_chr% $unit
1096	;;
1097
1098agp*)
1099	unit=${i#agp}
1100	mkdev agp$unit c %agp_chr% $unit 644
1101	if [ "$unit" = "0" ]; then
1102		lndev agp$unit agpgart
1103	fi
1104	;;
1105
1106pci*)
1107	unit=${i#pci}
1108	mkdev pci$unit c %pci_chr% $unit 644
1109	;;
1110
1111dpti*)
1112	unit=${i#dpti}
1113	mkdev dpti$unit c %dpti_chr% $unit
1114	;;
1115
1116dpt*)
1117	unit=${i#dpt}
1118	mkdev dpt$unit c %dpt_chr% $unit
1119	;;
1120
1121altq)
1122	makedir altq 755
1123	unit=0
1124	for dev in altq cbq wfq afm fifoq red rio localq hfsc cdnr blue priq
1125	do
1126		mkdev altq/$dev c %altq_chr% $unit 644
1127		unit=$(($unit + 1))
1128	done
1129	;;
1130
1131isdn)
1132	mkdev isdn c %isdn_chr% 0
1133	;;
1134
1135isdnctl)
1136	mkdev isdnctl c %isdnctl_chr% 0
1137	;;
1138
1139isdnbchan*)
1140	unit=${i#isdnbchan}
1141	mkdev isdnbchan$unit c %isdnbchan_chr% $unit
1142	;;
1143
1144isdnteld*)
1145	unit=${i#isdnteld}
1146	mkdev isdnteld$unit c %isdntel_chr% $(($unit + 64))
1147	;;
1148
1149isdntel*)
1150	unit=${i#isdntel}
1151	mkdev isdntel$unit c %isdntel_chr% $unit
1152	;;
1153
1154isdntrc*)
1155	unit=${i#isdntrc}
1156	mkdev isdntrc$unit c %isdntrc_chr% $unit
1157	;;
1158
1159vmegen)
1160	makedev vmegen0 vmegen1 vmegen2 vmegen3
1161	;;
1162
1163vmegen*)
1164	unit=${i#vmegen}
1165	mkdev vmegen$unit c %vmegeneric_chr% $(($unit * 16 + 0))
1166	;;
1167
1168wsfont)
1169	mkdev wsfont c %wsfont_chr% 0
1170	;;
1171
1172cir*)
1173	unit=${i#cir}
1174	mkdev cir$unit c %cir_chr% $unit 666
1175	;;
1176
1177irframe*)
1178	unit=${i#irframe}
1179	mkdev irframe$unit c %irframe_chr% $unit
1180	;;
1181
1182fcom*)
1183	unit=${i#fcom}
1184	mkdev fcom$unit c %fcom_chr% $unit "" "" $u_uucp
1185	;;
1186
1187openfirm)
1188	mkdev openfirm c %openfirm_chr% 0 444
1189	;;
1190
1191nvram)
1192	mkdev nvram c %nvram_chr% 0 644
1193	;;
1194
1195rtc)
1196	mkdev rtc c %rtc_chr% 0 644
1197	;;
1198
1199clockctl)
1200	mkdev clockctl c %clockctl_chr% 0 660 $g_ntpd
1201	;;
1202
1203nsmb)
1204	makedev nsmb0 nsmb1 nsmb2 nsmb3
1205	;;
1206
1207nsmb*)
1208	unit=${i#nsmb}
1209	mkdev nsmb$unit c %nsmb_chr% $unit 644
1210	;;
1211
1212systrace)
1213	mkdev systrace c %systrace_chr% 0 644
1214	;;
1215
1216kttcp)
1217	mkdev kttcp c %kttcp_chr% 0
1218	;;
1219
1220dmoverio)
1221	mkdev dmoverio c %dmoverio_chr% 0 644
1222	;;
1223
1224veriexec)
1225	mkdev veriexec c %veriexec_chr% 0 600
1226	;;
1227
1228ttyv*)
1229	unit=${i#ttyv}
1230	mkdev ttyv$unit c %pc_chr% $unit
1231	;;
1232
1233# arm, acorn32
1234ttyv*)
1235	unit=${i#ttyv}
1236	mkdev ttyv$unit c %physcon_chr% $unit
1237	;;
1238
1239arcpp*)
1240	unit=${i#arcpp}
1241	mkdev arcpp$unit c %arcpp_chr% $unit
1242	;;
1243
1244par*)
1245	unit=${i#par}
1246	case $unit in
1247	0)
1248		mkdev par$unit c %par_chr% $unit
1249		;;
1250	*)
1251		warn "bad unit for par in: $i"
1252		;;
1253	esac
1254	;;
1255
1256ite*|ttye*)
1257	case $i in
1258	ite*)	unit=${i#ite};;
1259	ttye*)	unit=${i#ttye};;
1260	esac
1261	mkdev ttye$unit	c %ite_chr% $unit
1262	;;
1263
1264pms*)
1265	unit=${i#pms}
1266	mkdev pms$unit c %opms_chr% $unit
1267	;;
1268
1269qms*)
1270	unit=${i#qms}
1271	mkdev qms$unit c %qms_chr% $unit
1272	;;
1273
1274lms*)
1275	unit=${i#lms}
1276	mkdev lms$unit c %lms_chr% $unit
1277	;;
1278
1279mms*)
1280	unit=${i#mms}
1281	mkdev mms$unit c %mms_chr% $unit
1282	;;
1283
1284mouse-*)
1285	case $i in
1286	mouse-pms*) name=pms ;;
1287	mouse-qms*) name=qms ;;
1288	esac
1289	unit=${i#mouse-${name}}
1290	lndev $name$unit mouse
1291	;;
1292
1293kbd)
1294	mkdev kbd c %kbd_chr% 0
1295	;;
1296
1297kbdctl)
1298	mkdev kbdctl c %kbd_chr% 1
1299	;;
1300
1301vidcconsole0)
1302	mkdev vidcconsole0 c %vidcconsole_chr% 0 640
1303	;;
1304
1305view*)
1306	unit=${i#view}
1307	mkdev view$unit	c %view_chr% $unit 666
1308	;;
1309
1310mouse*)
1311	unit=${i#mouse}
1312	case $unit in
1313	0|1)
1314		mkdev mouse$unit c %ms_chr% $unit 666
1315		if [ $unit = 0 ]; then
1316			lndev mouse$unit mouse
1317		fi
1318		;;
1319	*)
1320		warn "bad unit for mouse in: $i"
1321		;;
1322	esac
1323	;;
1324
1325panel)
1326	mkdev panel0 c %panel_chr% 0 660
1327	;;
1328
1329tslcd)
1330	mkdev tslcd0 c %tslcd_chr% 0 660
1331	;;
1332
1333ipty)
1334	mkdev ttyp0 c %pts_chr% 0 666
1335	mkdev ttyp1 c %pts_chr% 1 666
1336	mkdev ptyp0 c %ptc_chr% 0 666
1337	mkdev ptyp1 c %ptc_chr% 1 666
1338	;;
1339
1340ptm)
1341	mkdev ptmx c %ptm_chr% 0 666
1342	mkdev ptm c %ptm_chr% 1 666
1343	;;
1344
1345grf*)
1346	unit=${i#grf}
1347	mkdev grf$unit c %grf_chr% $unit 666
1348	;;
1349
1350etvme)
1351	mkdev etvme c %et_chr% 0
1352	;;
1353
1354leo*)
1355	unit=${i#leo}
1356	mkdev leo$unit c %leo_chr% $unit
1357	;;
1358
1359scif*)
1360	unit=${i#scif}
1361	mkdev scif$unit c %scif_chr% $unit "" "" $u_uucp
1362	;;
1363
1364sci*)
1365	unit=${i#sci}
1366	mkdev sci$unit c %sci_chr% $unit "" "" $u_uucp
1367	;;
1368
1369maple*)
1370	case $i in
1371	mapleA*) name="mapleA"; unit=0;;
1372	mapleB*) name="mapleB"; unit=1;;
1373	mapleC*) name="mapleC"; unit=2;;
1374	mapleD*) name="mapleD"; unit=3;;
1375	esac
1376	subunit=${i#$name}
1377	mkdev $name$subunit c %maple_chr% $(($unit * 8 + 0$subunit))
1378	;;
1379
1380mmem*)
1381	unit=${i#mmem}
1382	for pt in 0	# 1 2 3 4 ... 255
1383	do
1384#		mkdev mmem${unit}.${pt}a  b %mmem_blk% $(($unit * 4096 + $pt * 16 + 0)) 640 $g_operator
1385		mkdev mmem${unit}.${pt}c  b %mmem_blk% $(($unit * 4096 + $pt * 16 + 2)) 640 $g_operator
1386#		mkdev rmmem${unit}.${pt}a c %mmem_chr% $(($unit * 4096 + $pt * 16 + 0)) 640 $g_operator
1387		mkdev rmmem${unit}.${pt}c c %mmem_chr% $(($unit * 4096 + $pt * 16 + 2)) 640 $g_operator
1388	done
1389	;;
1390
1391mlcd*)
1392	unit=${i#mlcd}
1393	for pt in 0	# 1 2 3 4 ... 255
1394	do
1395		mkdev mlcd${unit}.${pt} c %mlcd_chr% $(($unit * 256 + $pt)) 640 $g_operator
1396	done
1397	;;
1398
1399ixpcom*)
1400	unit=${i#ixpcom}
1401	mkdev ixpcom$unit c %ixpcom_chr% $unit "" "" $u_uucp
1402	;;
1403
1404epcom*)
1405	unit=${i#epcom}
1406	mkdev epcom$unit c %epcom_chr% $unit "" "" $u_uucp
1407	;;
1408
1409ucbsnd)
1410	mkdev ucbsnd c %ucbsnd_chr% 0 666
1411	;;
1412
1413adb)
1414	mkdev adb c %aed_chr% 0 666
1415	;;
1416
1417asc*)
1418	unit=${i#asc}
1419	mkdev asc$unit c %asc_chr% $unit 666
1420	;;
1421
1422bwtwo*)
1423	unit=${i#bwtwo}
1424	mkdev bwtwo$unit c %bwtwo_chr% $unit 666
1425	;;
1426
1427cgtwo*)
1428	unit=${i#cgtwo}
1429	mkdev cgtwo$unit c %cgtwo_chr% $unit 666
1430	;;
1431
1432cgthree*)
1433	unit=${i#cgthree}
1434	mkdev cgthree$unit c %cgthree_chr% $unit 666
1435	;;
1436
1437cgfour*)
1438	unit=${i#cgfour}
1439	mkdev cgfour$unit c %cgfour_chr% $unit 666
1440	;;
1441
1442cgsix*)
1443	unit=${i#cgsix}
1444	mkdev cgsix$unit c %cgsix_chr% $unit 666
1445	;;
1446
1447cgeight*)
1448	unit=${i#cgeight}
1449	mkdev cgeight$unit c %cgeight_chr% $unit 666
1450	;;
1451
1452tcx*)
1453	unit=${i#tcx}
1454	mkdev tcx$unit c %tcx_chr% $unit 666
1455	;;
1456
1457xd*|xy*)
1458	case $i in
1459	xd*)	name=xd; unit=${i#xd}; blk=%xd_blk%;	chr=%xd_chr%;;
1460	xy*)	name=xy; unit=${i#xy}; blk=%xy_blk%;	chr=%xy_chr%;;
1461	esac
1462	%MKDISK% $name $unit $blk $chr
1463	;;
1464
1465magma*)
1466	unit=${i#magma}
1467	if [ 0$unit -gt 3 ]; then
1468		warn "bad unit for $i: $unit"
1469		break
1470	fi
1471	for j in 0 1 2 3 4 5 6 7 8 9 a b c d e f
1472	do
1473		case $j in
1474		[0-9])	jn=$j ;;
1475		a)	jn=10 ;;
1476		b)	jn=11 ;;
1477		c)	jn=12 ;;
1478		d)	jn=13 ;;
1479		e)	jn=14 ;;
1480		f)	jn=15 ;;
1481		esac
1482		mkdev tty$unit$j c %mtty_chr% $(($unit * 64 + $jn))
1483	done
1484	mkdev bpp${unit}0 c %mbpp_chr% $(($unit * 64 + 0))
1485	mkdev bpp${unit}1 c %mbpp_chr% $(($unit * 64 + 1))
1486	;;
1487
1488clcd*)
1489	unit=${i#clcd}
1490	if [ 0$unit -gt 7 ]; then
1491		warn "bad unit for $i: $unit"
1492		break
1493	fi
1494	for j in 0 1 2 3 4 5 6 7
1495	do
1496		mkdev ttyA$unit$j c %clcd_chr% $(($unit * 8 + $j + $dialin)) "" "" $u_uucp
1497		mkdev dtyA$unit$j c %clcd_chr% $(($unit * 8 + $j + $dialout)) "" "" $u_uucp
1498	done
1499	;;
1500
1501spif*)
1502	unit=${i#spif}
1503	if [ 0$unit -gt 3 ]; then
1504		warn "bad unit for $i: $unit"
1505		break
1506	fi
1507	for j in 0 1 2 3 4 5 6 7; do
1508		mkdev ttyS$unit$j c 102 $(($unit * 64 + $j)) "" "" $u_uucp
1509	done
1510	mkdev bppS${unit}0 c 103 $(($unit * 64 + 0))
1511	mkdev bppS${unit}1 c 103 $(($unit * 64 + 1))
1512	;;
1513
1514bpp*)
1515	unit=${i#bpp}
1516	mkdev bpp$unit c %bpp_chr% $(($unit + 0))
1517	;;
1518
1519tctrl*)
1520	unit=${i#tctrl}
1521	mkdev tctrl$unit c %tctrl_chr% $unit 666
1522	;;
1523
1524bmd*)
1525	unit=${i#bmd}
1526	mkdev bmd${unit}a  b %bmd_blk% $(($unit * 8 + 0)) 640 $g_operator
1527	mkdev bmd${unit}c  b %bmd_blk% $(($unit * 8 + 2)) 640 $g_operator
1528	mkdev rbmd${unit}a c %bmd_chr% $(($unit * 8 + 0)) 640 $g_operator
1529	mkdev rbmd${unit}c c %bmd_chr% $(($unit * 8 + 2)) 640 $g_operator
1530	;;
1531
1532sram)
1533	mkdev sram c %sram_chr% 0 644
1534	;;
1535
1536pow*)
1537	unit=${i#pow}
1538	case $unit in
1539	0|1)
1540		mkdev pow${unit} c %pow_chr% ${unit} 644
1541		if [ $unit = 0 ]; then
1542			lndev pow${unit} pow
1543		fi
1544		;;
1545	*)
1546		warn "bad unit for pow in: $i"
1547		;;
1548	esac
1549	;;
1550
1551ttyS*)
1552	unit=${i#ttyS}
1553	mkdev ttyS$unit c %sacom_chr% $(($unit + $dialin )) "" "" $u_uucp
1554	mkdev dtyS$unit c %sacom_chr% $(($unit + $dialout)) "" "" $u_uucp
1555	;;
1556
1557atabus*)
1558	unit=${i#atabus}
1559	mkdev atabus$unit c %atabus_chr% $unit 644
1560	;;
1561
1562drvctl)
1563	mkdev drvctl c %drvctl_chr% 0 644
1564	;;
1565
1566tap*)
1567	unit=${i#tap}
1568	case "$unit" in
1569	[0-9]*)
1570		mkdev tap${unit} c %tap_chr% ${unit} 600
1571		;;
1572	*)
1573		mkdev tap c %tap_chr% 0xfffff 600
1574		;;
1575	esac
1576	;;
1577
1578fw*)
1579	unit=${i#fw}
1580	for j in 0 1 2 3
1581	do
1582		mkdev fw${unit}.${j} c %fw_chr% $((${unit} * 256 + ${j})) 660 ${g_operator}
1583		mkdev fwmem${unit}.${j} c %fw_chr% $((65536 + ${unit} * 256 + ${j})) 660 ${g_operator}
1584	done
1585	;;
1586
1587midevend)
1588%MI_DEVICES_END%
1589local)
1590	if [ -f "$0.local" ]; then
1591		umask 0
1592		sh $0.local all
1593		umask 077
1594	fi
1595	;;
1596
1597*)
1598	warn "$i: unknown device"
1599	;;
1600
1601esac
1602done
1603
1604}
1605
1606
1607# three variants of disk partitions - max 8, max 16, max 16 with highpartoffset
1608# hack; only the one used by port is retained in final MAKEDEV script
1609# routine is called as:
1610# makedisk name unit blk chr
1611makedisk_p8()
1612{
1613	name="$1"; unit="$2"; blk="$3"; chr="$4"
1614
1615	mkdev ${name}${unit}a	b $blk $(($unit * 8 + 0))	640 $g_operator
1616	mkdev ${name}${unit}b	b $blk $(($unit * 8 + 1))	640 $g_operator
1617	mkdev ${name}${unit}c	b $blk $(($unit * 8 + 2))	640 $g_operator
1618	mkdev ${name}${unit}d	b $blk $(($unit * 8 + 3))	640 $g_operator
1619	mkdev ${name}${unit}e	b $blk $(($unit * 8 + 4))	640 $g_operator
1620	mkdev ${name}${unit}f	b $blk $(($unit * 8 + 5))	640 $g_operator
1621	mkdev ${name}${unit}g	b $blk $(($unit * 8 + 6))	640 $g_operator
1622	mkdev ${name}${unit}h	b $blk $(($unit * 8 + 7))	640 $g_operator
1623	mkdev r${name}${unit}a	c $chr $(($unit * 8 + 0))	640 $g_operator
1624	mkdev r${name}${unit}b	c $chr $(($unit * 8 + 1))	640 $g_operator
1625	mkdev r${name}${unit}c	c $chr $(($unit * 8 + 2))	640 $g_operator
1626	mkdev r${name}${unit}d	c $chr $(($unit * 8 + 3))	640 $g_operator
1627	mkdev r${name}${unit}e	c $chr $(($unit * 8 + 4))	640 $g_operator
1628	mkdev r${name}${unit}f	c $chr $(($unit * 8 + 5))	640 $g_operator
1629	mkdev r${name}${unit}g	c $chr $(($unit * 8 + 6))	640 $g_operator
1630	mkdev r${name}${unit}h	c $chr $(($unit * 8 + 7))	640 $g_operator
1631}
1632
1633makedisk_p16()
1634{
1635	name="$1"; unit="$2"; blk="$3"; chr="$4"
1636
1637	mkdev ${name}${unit}a	b $blk $(($unit * 16 + 0))	640 $g_operator
1638	mkdev ${name}${unit}b	b $blk $(($unit * 16 + 1))	640 $g_operator
1639	mkdev ${name}${unit}c	b $blk $(($unit * 16 + 2))	640 $g_operator
1640	mkdev ${name}${unit}d	b $blk $(($unit * 16 + 3))	640 $g_operator
1641	mkdev ${name}${unit}e	b $blk $(($unit * 16 + 4))	640 $g_operator
1642	mkdev ${name}${unit}f	b $blk $(($unit * 16 + 5))	640 $g_operator
1643	mkdev ${name}${unit}g	b $blk $(($unit * 16 + 6))	640 $g_operator
1644	mkdev ${name}${unit}h	b $blk $(($unit * 16 + 7))	640 $g_operator
1645	mkdev ${name}${unit}i	b $blk $(($unit * 16 + 8))	640 $g_operator
1646	mkdev ${name}${unit}j	b $blk $(($unit * 16 + 9))	640 $g_operator
1647	mkdev ${name}${unit}k	b $blk $(($unit * 16 + 10))	640 $g_operator
1648	mkdev ${name}${unit}l	b $blk $(($unit * 16 + 11))	640 $g_operator
1649	mkdev ${name}${unit}m	b $blk $(($unit * 16 + 12))	640 $g_operator
1650	mkdev ${name}${unit}n	b $blk $(($unit * 16 + 13))	640 $g_operator
1651	mkdev ${name}${unit}o	b $blk $(($unit * 16 + 14))	640 $g_operator
1652	mkdev ${name}${unit}p	b $blk $(($unit * 16 + 15))	640 $g_operator
1653	mkdev r${name}${unit}a	c $chr $(($unit * 16 + 0))	640 $g_operator
1654	mkdev r${name}${unit}b	c $chr $(($unit * 16 + 1))	640 $g_operator
1655	mkdev r${name}${unit}c	c $chr $(($unit * 16 + 2))	640 $g_operator
1656	mkdev r${name}${unit}d	c $chr $(($unit * 16 + 3))	640 $g_operator
1657	mkdev r${name}${unit}e	c $chr $(($unit * 16 + 4))	640 $g_operator
1658	mkdev r${name}${unit}f	c $chr $(($unit * 16 + 5))	640 $g_operator
1659	mkdev r${name}${unit}g	c $chr $(($unit * 16 + 6))	640 $g_operator
1660	mkdev r${name}${unit}h	c $chr $(($unit * 16 + 7))	640 $g_operator
1661	mkdev r${name}${unit}i	c $chr $(($unit * 16 + 8))	640 $g_operator
1662	mkdev r${name}${unit}j	c $chr $(($unit * 16 + 9))	640 $g_operator
1663	mkdev r${name}${unit}k	c $chr $(($unit * 16 + 10))	640 $g_operator
1664	mkdev r${name}${unit}l	c $chr $(($unit * 16 + 11))	640 $g_operator
1665	mkdev r${name}${unit}m	c $chr $(($unit * 16 + 12))	640 $g_operator
1666	mkdev r${name}${unit}n	c $chr $(($unit * 16 + 13))	640 $g_operator
1667	mkdev r${name}${unit}o	c $chr $(($unit * 16 + 14))	640 $g_operator
1668	mkdev r${name}${unit}p	c $chr $(($unit * 16 + 15))	640 $g_operator
1669}
1670
1671makedisk_p16high()
1672{
1673	ho=524280	# offset for partition 9 to 16
1674	name="$1"; unit="$2"; blk="$3"; chr="$4"
1675
1676	mkdev ${name}${unit}a	b $blk $(($unit * 8 + 0))	640 $g_operator
1677	mkdev ${name}${unit}b	b $blk $(($unit * 8 + 1))	640 $g_operator
1678	mkdev ${name}${unit}c	b $blk $(($unit * 8 + 2))	640 $g_operator
1679	mkdev ${name}${unit}d	b $blk $(($unit * 8 + 3))	640 $g_operator
1680	mkdev ${name}${unit}e	b $blk $(($unit * 8 + 4))	640 $g_operator
1681	mkdev ${name}${unit}f	b $blk $(($unit * 8 + 5))	640 $g_operator
1682	mkdev ${name}${unit}g	b $blk $(($unit * 8 + 6))	640 $g_operator
1683	mkdev ${name}${unit}h	b $blk $(($unit * 8 + 7))	640 $g_operator
1684	mkdev ${name}${unit}i	b $blk $(($unit * 8 + $ho + 8))	640 $g_operator
1685	mkdev ${name}${unit}j	b $blk $(($unit * 8 + $ho + 9))	640 $g_operator
1686	mkdev ${name}${unit}k	b $blk $(($unit * 8 + $ho + 10)) 640 $g_operator
1687	mkdev ${name}${unit}l	b $blk $(($unit * 8 + $ho + 11)) 640 $g_operator
1688	mkdev ${name}${unit}m	b $blk $(($unit * 8 + $ho + 12)) 640 $g_operator
1689	mkdev ${name}${unit}n	b $blk $(($unit * 8 + $ho + 13)) 640 $g_operator
1690	mkdev ${name}${unit}o	b $blk $(($unit * 8 + $ho + 14)) 640 $g_operator
1691	mkdev ${name}${unit}p	b $blk $(($unit * 8 + $ho + 15)) 640 $g_operator
1692	mkdev r${name}${unit}a	c $chr $(($unit * 8 + 0))	640 $g_operator
1693	mkdev r${name}${unit}b	c $chr $(($unit * 8 + 1))	640 $g_operator
1694	mkdev r${name}${unit}c	c $chr $(($unit * 8 + 2))	640 $g_operator
1695	mkdev r${name}${unit}d	c $chr $(($unit * 8 + 3))	640 $g_operator
1696	mkdev r${name}${unit}e	c $chr $(($unit * 8 + 4))	640 $g_operator
1697	mkdev r${name}${unit}f	c $chr $(($unit * 8 + 5))	640 $g_operator
1698	mkdev r${name}${unit}g	c $chr $(($unit * 8 + 6))	640 $g_operator
1699	mkdev r${name}${unit}h	c $chr $(($unit * 8 + 7))	640 $g_operator
1700	mkdev r${name}${unit}i	c $chr $(($unit * 8 + $ho + 8))	640 $g_operator
1701	mkdev r${name}${unit}j	c $chr $(($unit * 8 + $ho + 9))	640 $g_operator
1702	mkdev r${name}${unit}k	c $chr $(($unit * 8 + $ho + 10)) 640 $g_operator
1703	mkdev r${name}${unit}l	c $chr $(($unit * 8 + $ho + 11)) 640 $g_operator
1704	mkdev r${name}${unit}m	c $chr $(($unit * 8 + $ho + 12)) 640 $g_operator
1705	mkdev r${name}${unit}n	c $chr $(($unit * 8 + $ho + 13)) 640 $g_operator
1706	mkdev r${name}${unit}o	c $chr $(($unit * 8 + $ho + 14)) 640 $g_operator
1707	mkdev r${name}${unit}p	c $chr $(($unit * 8 + $ho + 15)) 640 $g_operator
1708}
1709
1710# make only the very few basic disk device nodes - 'a' partition
1711# and raw partition
1712makedisk_minimal()
1713{
1714	name=$1; unit=$2; blk=$3; chr=$4
1715	doff=%DISKMINOROFFSET%
1716	ro=%RAWDISK_OFF%
1717	rn=%RAWDISK_NAME%
1718
1719	mkdev ${name}${unit}a	b $blk $(($unit * $doff + 0))	640 $g_operator
1720	mkdev ${name}${unit}$rn	b $blk $(($unit * $doff + $ro))	640 $g_operator
1721	mkdev r${name}${unit}a	c $chr $(($unit * $doff + 0))	640 $g_operator
1722	mkdev r${name}${unit}$rn c $chr $(($unit * $doff + $ro)) 640 $g_operator
1723}
1724
1725makedev $*
1726