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