MAKEDEV.tmpl revision 1.43
1#!/bin/sh -
2#	$NetBSD: MAKEDEV.tmpl,v 1.43 2005/05/02 00:46:46 lukem Exp $
3#
4# Copyright (c) 2003 The NetBSD Foundation, Inc.
5# All rights reserved.
6#
7# Redistribution and use in source and binary forms, with or without
8# modification, are permitted provided that the following conditions
9# are met:
10# 1. Redistributions of source code must retain the above copyright
11#    notice, this list of conditions and the following disclaimer.
12# 2. Redistributions in binary form must reproduce the above copyright
13#    notice, this list of conditions and the following disclaimer in the
14#    documentation and/or other materials provided with the distribution.
15# 3. All advertising materials mentioning features or use of this software
16#    must display the following acknowledgement:
17#        This product includes software developed by the NetBSD
18#        Foundation, Inc. and its contributors.
19# 4. Neither the name of The NetBSD Foundation nor the names of its
20#    contributors may be used to endorse or promote products derived
21#    from this software without specific prior written permission.
22#
23# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
24# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
25# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
26# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
27# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33# POSSIBILITY OF SUCH DAMAGE.
34#
35#
36###########################################################################
37#
38#   PLEASE RUN "cd ../share/man/man8 ; make makedevs"
39#   AFTER CHANGING THIS FILE, AND COMMIT THE UPDATED MANPAGE!
40#
41###########################################################################
42#
43# Device "make" file.  Valid special arguments:
44#	all	makes all known devices, including local devices.
45#		Tries to make the 'standard' number of each type.
46#	init	A set of devices that is used for MFS /dev by init.
47#		May be equal to "all".
48#	floppy	devices to be put on install floppies
49#	ramdisk	devices to be put into INSTALL kernel ramdisks.
50#	std	standard devices
51#	local	configuration specific devices
52#	wscons	make wscons devices
53#	usbs	make USB devices
54#	isdns	make ISDN devices
55#
56# Tapes:
57#	st*	SCSI tapes
58#	wt*	QIC-interfaced (e.g. not SCSI) 3M cartridge tape
59#	ht*	MASSBUS TM03 and TU??
60#	mt*	MSCP tapes (e.g. TU81, TK50)
61#	tm*	UNIBUS TM11 and TE10 emulations (e.g. Emulex TC-11)
62#	ts*	UNIBUS TS11
63#	ut*	UNIBUS TU45 emulations (e.g. si 9700)
64#	uu*	TU58 cassettes on DL11 controller
65#
66# Disks:
67#	ccd*	concatenated disk devices
68#	cd*	SCSI or ATAPI CD-ROM
69#	cgd*	cryptographic disk devices
70#	raid*	RAIDframe disk devices
71#	sd*	SCSI disks
72#	wd*	"winchester" disk drives (ST506,IDE,ESDI,RLL,...)
73#	bmd*	Nereid bank memory disks
74#	ed*	IBM PS/2 ESDI disk devices
75#	fd*	"floppy" disk drives (3 1/2", 5 1/4")
76#	fss*	Files system snapshot devices
77#	gdrom*	Dreamcast "gigadisc" CD-ROM drive
78#	hk*	UNIBUS RK06 and RK07
79#	hp*	MASSBUS RM??
80#	ld*	Logical disk devices (e.g., hardware RAID)
81#	mcd*	Mitsumi CD-ROM
82#	md*	memory pseudo-disk devices
83#	ofdisk*	OpenFirmware disk devices
84#	ra*	MSCP disks (RA??, RD??)
85#	rb*	730 IDC w/ RB80 and/or RB02
86#	rd*	HDC9224 RD disks on VS2000
87#	rl*	UNIBUS RL02
88#	rx*	MSCP floppy disk (RX33/50/...)
89#	up*	other UNIBUS devices (e.g. on Emulex SC-21V controller)
90#	vnd*	"file" pseudo-disks
91#	xbd*	Xen virtual disks
92#	xd*	Xylogic 753/7053 disks
93#	xy*	Xylogic 450/451 disks
94#
95# Pointing devices:
96#	wsmouse* wscons mouse events
97#	lms*	Logitech bus mouse
98#	mms*	Microsoft bus mouse
99#	qms*	"quadrature mouse"
100#	pms*	PS/2 mouse
101#	mouse	mouse (provides events, for X11)
102#
103# Keyboard devices:
104#	wskbd*	wscons keyboard events
105#	kbd	raw keyboard (provides events, for X11)
106#	kbdctl	keyboard control
107#
108# Terminals/Console ports:
109#	tty[01]*	standard serial ports
110#	tty0*	SB1250 ("sbscn") serial ports (sbmips)
111#	ttyE*	wscons - Workstation console ("wscons") glass-tty emulators
112#	ttyCZ?	Cyclades-Z multiport serial boards.  Each "unit"
113#		makes 64 ports.
114#	ttyCY?	Cyclom-Y multiport serial boards. Each "unit" makes
115#		32 ports.
116#	ttye*	ITE bitmapped consoles
117#	ttyv0	pccons
118#	ttyC?	NS16550 ("com") serial ports
119#	ttyS*	SA1110 serial port (hpcarm)
120#	ttyTX?	TX39 internal serial ports (hpcmips)
121#	ttyB?	DEC 3000 ZS8530 ("scc") serial ports (alpha)
122#	ttyA*	mfc serial ports (amiga)
123#	ttyB*	msc serial ports (amiga)
124#	ttyC*	com style serial ports (DraCo, HyperCom) (amiga)
125#		On the DraCo, units 0 and 1 are the built-in "modem" and
126#		"mouse" ports, if configured.
127#	ttyA0   8530 Channel A (formerly ser02) (atari)
128#	ttyA1	8530 Channel B (formerly mdm02) (atari)
129#	ttyB0	UART on first 68901 (formerly mdm01) (atari)
130#	ixpcom	IXP12x0 COM ports
131#	epcom	EP93xx COM ports
132#	ttyM?	HP200/300 4 port serial mux interface (hp300)
133#	ttya	"ttya" system console (luna68k)
134#	ttyb	second system serial port (luna68k)
135#	tty*	Onboard serial ports (mvme68k)
136#		On the mvme147 these are: ttyZ1, ttyZ2 and ttyZ3.
137#		On the mvme167, and '177: ttyC1, ttyC2 and ttyC3.
138#		Note that tty[CZ]0 is grabbed by the console device
139#		so is not created by default
140#	dc*	PMAX 4 channel serial interface (kbd, mouse, modem, printer)
141#	scc*	82530 serial interface (pmax)
142#	ttyZ*	Zilog 8530 ("zstty") serial ports
143#	tty[abcd]	Built-in serial ports (sparc)
144#	tty*	Z88530 serial controllers (sparc64)
145#	ttyh*	SAB82532 serial controllers (sparc64)
146#	tty[a-j]	Built-in serial ports (sun2, sun3)
147#	ttyC?	pccons (arc)
148#	dz*	UNIBUS DZ11 and DZ32 (vax)
149#	dh*	UNIBUS DH11 and emulations (e.g. Able DMAX, Emulex CS-11) (vax)
150#	dmf*	UNIBUS DMF32 (vax)
151#	dhu*    UNIBUS DHU11 (vax)
152#	dmz*    UNIBUS DMZ32 (vax)
153#	dl*	UNIBUS DL11 (vax)
154#	xencons	Xen virtual console
155#
156# Terminal multiplexors:
157#	dc*	4 channel serial interface (keyboard, mouse, modem, printer)
158#	dh*	UNIBUS DH11 and emulations (e.g. Able DMAX, Emulex CS-11)
159#	dhu*	UNIBUS DHU11
160#	dl*	UNIBUS DL11
161#	dmf*	UNIBUS DMF32
162#	dmz*	UNIBUS DMZ32
163#	dz*	UNIBUS DZ11 and DZ32
164#	scc*	82530 serial interface
165#
166# Call units:
167#	dn*	UNIBUS DN11 and emulations (e.g. Able Quadracall)
168#
169# Pseudo terminals:
170#	ptm	pty multiplexor device.
171#	pty*	set of 16 master and slave pseudo terminals
172#	opty	first 16 ptys, to save inodes on install media
173#	ipty	first 2 ptys, for install media use only
174#
175# Printers:
176#	arcpp*	Archimedes parallel port
177#	lpt*	stock lp
178#	lpa*	interruptless lp
179#	par*	Amiga motherboard parallel port
180#
181# USB devices:
182#	usb*	USB control devices
183#	uhid*	USB generic HID devices
184#	ulpt*	USB printer devices
185#	ugen*	USB generic devices
186#	urio*	USB Diamond Rio 500 devices
187#	uscanner*	USB scanners
188#	ttyU*	USB modems
189#
190# ISDN devices:
191#	isdn	communication between userland isdnd and kernel
192#	isdnctl	control device
193#	isdnbchan* raw b-channel access
194#	isdntel*	telephony device
195#	isdnteld*	telephony dialout device
196#	isdntrc*	trace device
197#
198# Video devices:
199#	bwtwo*	monochromatic frame buffer
200#	cgtwo*	8-bit color frame buffer
201#	cgthree*	8-bit color frame buffer
202#	cgfour*	8-bit color frame buffer
203#	cgsix*	accelerated 8-bit color frame buffer
204#	cgeight*	24-bit color frame buffer
205#	etvme	Tseng et-compatible cards on VME (atari)
206#	ik*	UNIBUS interface to Ikonas frame buffer
207#	leo	Circad Leonardo VME-bus true color (atari)
208#	ps*	UNIBUS interface to Picture System 2
209#	qv*	QVSS (MicroVAX) display
210#	tcx*	accelerated 8/24-bit color frame buffer
211#
212# Maple bus devices:
213#	maple	Maple bus control devices
214#	mlcd*	Maple bus LCD devices
215#	mmem*	Maple bus storage devices
216#
217# Special purpose devices:
218#	ad*	UNIBUS interface to Data Translation A/D converter
219#	agp*	AGP GART devices
220#	altq	ALTQ control interface
221#	apm	power management device
222#	audio*	audio devices
223#	bell*	OPM bell device (x68k)
224#	bktr	Brooktree 848/849/878/879 based TV cards
225#	bpf	packet filter
226#	cfs*	Coda file system device
227#	ch*	SCSI media changer
228#	cir*	Consumer IR
229#	clockctl clock control for non root users
230#	crypto	hardware crypto access driver
231#	dmoverio hardware-assisted data movers
232#	dpt*	DPT/Adaptec EATA RAID management interface
233#	dpti*	DPT/Adaptec I2O RAID management interface
234#	fb*	PMAX generic framebuffer pseudo-device
235#	fd	file descriptors
236#	grf*	graphics frame buffer device
237#	hil	HP300 HIL input devices
238#	icp	ICP-Vortex/Intel RAID control interface
239#	iic*	IIC bus device
240#	iop*	I2O IOP control interface
241#	ipl	IP Filter
242#	irframe* IrDA physical frame
243#	ite*	terminal emulator interface to HP300 graphics devices
244#	joy*	joystick device
245#	kttcp	kernel ttcp helper device
246#	lkm	loadable kernel modules interface
247#	magma*	Magma multiport serial/parallel cards
248#	midi*	MIDI
249#	mlx*	Mylex DAC960 control interface
250#	mly*	Mylex AcceleRAID/eXtremeRAID control interface
251#	np*	UNIBUS Ethernet co-processor interface, for downloading.
252#	nsmb*	SMB requester
253#	openfirm OpenFirmware accessor
254#	pci*	PCI bus access devices
255#	pf	PF packet filter
256#	pow*	power management device (x68k)
257#	px*	PixelStamp Xserver access
258#	radio*	radio devices
259#	random	Random number generator
260#	rtc*	RealTimeClock
261#	satlink* PlanetConnect satellite receiver driver
262#	scsibus* SCSI busses
263#	se*	SCSI Ethernet
264#	ses*	SES/SAF-TE SCSI Devices
265#	speaker	PC speaker		(XXX - installed)
266#	sram	battery backuped memory (x68k)
267#	ss*	SCSI scanner
268#	stic*	PixelStamp interface chip
269#	sysmon	System Monitoring hardware
270#	systrace syscall tracer
271#	tap*	virtual Ethernet device
272#	tun*	network tunnel driver
273#	twe	3ware Escalade control interface
274#	uk*	unknown SCSI device
275#	veriexec verified executable fingerprint loader
276#	vmegen*	generic VME access
277#	view*	generic interface to graphic displays (Amiga)
278#	wsfont*	console font control
279#	wsmux*	wscons event multiplexor
280#	xenevt	Xen event interface
281
282
283PATH=/sbin:/usr/sbin:/bin:/usr/bin:/rescue
284
285
286usage()
287{
288	cat 1>&2 << _USAGE_
289Usage: ${0##*/} [-f] [-m mknod] [-s]  special [...]
290	Create listed special devices.  Options:
291	-f		Force permissions to be updated on existing devices.
292	-m mknod	Name of mknod(8) program.  [\$TOOL_MKNOD or mknod]
293	-s		Generate mtree(8) specfile instead of creating devices.
294
295_USAGE_
296	exit 1
297}
298
299# zeropad width number
300#	display number with a zero (`0') padding of width digits.
301#
302zeropad()
303{
304	case $(($1 - ${#2})) in
305	5)	echo 00000$2;;
306	4)	echo 0000$2;;
307	3)	echo 000$2;;
308	2)	echo 00$2;;
309	1)	echo 0$2;;
310	0)	echo $2;;
311	*)	echo "$0: bad padding" 1>&2; exit 1;;
312	esac
313}
314
315# hexprint number
316#	display (base10) number as hexadecimal
317#
318hexprint()
319{
320	case $1 in
321	[0-9])	echo $1 ;;
322	10)	echo a ;;
323	11)	echo b ;;
324	12)	echo c ;;
325	13)	echo d ;;
326	14)	echo e ;;
327	15)	echo f ;;
328	*)	echo $(hexprint $(($1 / 16)))$(hexprint $(($1 % 16))) ;;
329	esac
330}
331
332do_force=false
333do_specfile=false
334while getopts fm:s ch; do
335	case ${ch} in
336	f)	do_force=true ;;
337	m)	TOOL_MKNOD=${OPTARG} ;;
338	s)	do_specfile=true ;;
339	*)	usage ;;
340	esac
341done
342shift $((${OPTIND} - 1))
343[ $# -gt 0 ] || usage
344
345
346MKNOD="${TOOL_MKNOD:-mknod} -F netbsd"
347if $do_force; then
348	MKNOD="${MKNOD} -R"
349else
350	MKNOD="${MKNOD} -r"
351fi
352
353u_root="%uid_root%"
354u_uucp="%uid_uucp%"
355g_kmem="%gid_kmem%"
356g_ntpd="%gid_ntpd%"
357g_operator="%gid_operator%"
358g_wheel="%gid_wheel%"
359dialin=0
360dialout=524288
361callunit=262144
362
363# only allow read&write for owner by default
364umask 077
365
366# Check if we have fdesc mounted
367if [ -d fd ]; then
368        case "`df fd`" in
369        *fdesc*)	nofdesc=false;;
370        *)		nofdesc=true;;
371        esac
372else
373        nofdesc=true
374fi
375
376
377if $do_specfile; then
378	echo ". type=dir"
379fi
380
381
382#
383# functions available to create nodes:
384#
385# mkdev name [b|c] major minor [mode{=600} [gid{=0} [uid{=0}]]]
386#	create device node `name' with the appropriate permissions
387#
388# lndev src target
389#	create a symlink from src to target
390#
391# makedir dir mode
392#	create directory with appropriate mode
393#
394
395mkdev()
396{
397	if $do_specfile; then
398		case $2 in
399		b)	type=block ;;
400		c)	type=char ;;
401		esac
402		echo "./$1 type=${type} device=netbsd,$3,$4 mode=${5:-600} gid=${6:-$g_wheel} uid=${7:-$u_root}"
403	else
404		${MKNOD} -m ${5:-600} -g \#${6:-$g_wheel} -u \#${7:-$u_root} $1 $2 $3 $4
405	fi
406}
407
408lndev()
409{
410	if $do_specfile; then
411		echo "./$2 type=link link=$1 mode=0700 gid=$g_wheel uid=$u_root"
412	else
413		ln -f -s $1 $2
414	fi
415}
416
417makedir()
418{
419	if $do_specfile; then
420		echo "./$1 type=dir mode=$2 gid=$g_wheel uid=$u_root"
421	else
422		mkdir $1 2>/dev/null
423		chmod $2 $1
424	fi
425}
426
427warn()
428{
429	echo 1>&2 "$0: $*"
430}
431
432
433
434# makedev special [...]
435#	the main loop
436#
437
438makedev()
439{
440
441for i
442do
443
444case $i in
445
446%MD_DEVICES%
447
448all)
449	makedev all_md
450	makedev std fd ptm pty0 pty1 pty2 pty3
451	makedev ccd0 ccd1 ccd2 ccd3
452	makedev cgd0 cgd1 cgd2 cgd3
453	makedev fss0 fss1 fss2 fss3
454	makedev md0 md1
455	makedev raid0 raid1 raid2 raid3 raid4 raid5 raid6 raid7
456	makedev vnd0 vnd1 vnd2 vnd3
457	makedev bpf
458	makedev tun0 tun1 tun2 tun3
459	makedev ipl pf crypto random systrace
460	makedev lkm clockctl
461	makedev local
462	makedev atabus0 atabus1 atabus2 atabus3
463	makedev tap tap0 tap1 tap2 tap3
464	;;
465
466init)
467	# unless overridden by MD entry, this is equal to 'all'
468	makedev all
469	;;
470
471%MI_DEVICES_BEGIN%
472audio)
473	makedev audio0 audio1 audio2 audio3
474	lndev sound0 sound
475	lndev audio0 audio
476	lndev mixer0 mixer
477	lndev audioctl0 audioctl
478	;;
479
480radio)
481	makedev radio0 radio1
482	lndev radio0 radio
483	;;
484
485ramdisk)
486	makedev floppy md0
487	;;
488
489usbs)
490	makedev usb usb0 usb1 usb2 usb3 usb4 usb5 usb6 usb7
491	makedev uhid0 uhid1 uhid2 uhid3
492	makedev ulpt0 ulpt1
493	makedev ttyU0 ttyU1
494	makedev urio0
495	makedev uscanner0 uscanner1
496	makedev ugen0
497	;;
498
499isdns)
500	makedev isdn isdnctl isdnbchan0 isdnbchan1 isdntel0 isdntel1 isdnteld0 isdnteld1 isdntrc0 isdntrc1
501	;;
502
503std)
504	mkdev		console	c %cons_chr% 0	600
505	mkdev		constty	c %cons_chr% 1	600
506	mkdev		drum	c %swap_chr% 0	640 $g_kmem
507	mkdev		kmem	c %mem_chr% 1	640 $g_kmem
508	mkdev		mem	c %mem_chr% 0	640 $g_kmem
509	mkdev		null	c %mem_chr% 2	666
510	mkdev		zero	c %mem_chr% 12	666
511	mkdev		klog	c %log_chr% 0	600
512	mkdev		ksyms	c %ksyms_chr% 0	444
513	if $nofdesc; then
514		mkdev	tty	c %ctty_chr% 0		666
515		mkdev	stdin	c %filedesc_chr% 0	666
516		mkdev	stdout	c %filedesc_chr% 1	666
517		mkdev	stderr	c %filedesc_chr% 2	666
518	fi
519	;;
520
521usb)
522	mkdev usb c %usb_chr% 255 444
523	;;
524
525usb*)
526	unit=${i#usb}
527	usb=usb$unit
528	mkdev usb$unit c %usb_chr% $unit
529	;;
530
531uhid*)
532	unit=${i#uhid}
533	mkdev uhid$unit c %uhid_chr% $unit 666
534	;;
535
536ulpt*)
537	unit=${i#ulpt}
538	mkdev ulpt$unit c %ulpt_chr% $unit
539	mkdev ulpn$unit c %ulpt_chr% $(($unit + 64))
540	;;
541
542urio*)
543	unit=${i#urio}
544	mkdev urio$unit c %urio_chr% $unit 666
545	;;
546
547uscanner*)
548	unit=${i#uscanner}
549	mkdev uscanner$unit c %uscanner_chr% $unit
550	;;
551
552ttyU*)
553	unit=${i#ttyU}
554	mkdev ttyU$unit c %ucom_chr% $(($unit + $dialin  )) "" "" $u_uucp
555	mkdev dtyU$unit c %ucom_chr% $(($unit + $dialout )) "" "" $u_uucp
556	mkdev ctyU$unit c %ucom_chr% $(($unit + $callunit)) "" "" $u_uucp
557	;;
558
559ugen*)
560	unit=${i#ugen}
561	for j in 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
562	do
563		mkdev ugen$unit.$j c %ugen_chr% $(($unit * 16 + ${j#0}))
564	done
565	;;
566
567wscons)
568	makedev ttyE0 ttyE1 ttyE2 ttyE3 ttyE4 ttyE5 ttyE6 ttyE7
569	makedev wsmouse0 wsmouse1 wsmouse2 wsmouse3
570	makedev wskbd0 wskbd1 wskbd2 wskbd3
571	makedev wsmux0 wsmux1 wsmux2 wsmux3
572	makedev wsmouse wskbd
573	makedev ttyEcfg ttyEstat
574	makedev wsfont
575	;;
576
577wsmouse)
578	mkdev wsmouse c %wsmux_chr% 0
579	;;
580
581wskbd)
582	mkdev wskbd c %wsmux_chr% 1
583	;;
584
585wsmux*)
586	unit=${i#wsmux}
587	mkdev wsmux$unit    c %wsmux_chr% $unit
588	mkdev wsmuxctl$unit c %wsmux_chr% $(($unit + 128)) 200
589	;;
590
591xenevt)
592	mkdev xenevt c %xenevt_chr% 0
593	;;
594
595xencons)
596	mkdev xencons c %xencons_chr% 0
597	;;
598
599ttyEstat)
600	mkdev ttyEstat c %wsdisplay_chr% 254
601	;;
602
603ttyEcfg)
604	mkdev ttyEcfg c %wsdisplay_chr% 255
605	;;
606
607ttyE*)
608	unit=${i#ttyE}
609	mkdev ttyE$unit c %wsdisplay_chr% $unit
610	;;
611
612wsmouse*)
613	unit=${i#wsmouse}
614	mkdev wsmouse$unit c %wsmouse_chr% $unit
615	;;
616
617wskbd*)
618	unit=${i#wskbd}
619	mkdev wskbd$unit c %wskbd_chr% $unit
620	;;
621
622fd)
623	if $nofdesc; then
624		makedir fd 755
625		n=0
626		while [ $n -lt 64 ]
627		do
628			mkdev fd/$n c %filedesc_chr% $n 666
629			n=$(($n + 1))
630		done
631	fi
632	;;
633
634wt*)
635	case $i in
636	wt*) name=wt;  unit=${i#wt};	chr=%wt_chr%;	blk=%wt_blk%;;
637	esac
638	for sub in $unit $(($unit+8)) $(($unit+16))
639	do
640		mkdev $name$sub		b $blk $(($sub + 0)) 660 $g_operator
641		mkdev n$name$sub	b $blk $(($sub + 4)) 660 $g_operator
642		mkdev r$name$sub	c $chr $(($sub + 0)) 660 $g_operator
643		mkdev nr$name$sub	c $chr $(($sub + 4)) 660 $g_operator
644	done
645	;;
646
647md*)
648	makedisk_minimal md ${i#md} %md_blk% %md_chr%
649	;;
650
651fss*)
652	case $i in
653	fss*) name=fss; unit=${i#fss};	blk=%fss_blk%;	chr=%fss_chr%
654	esac
655	mkdev $name$unit	b $blk $unit 660 $g_operator
656	mkdev r$name$unit	c $chr $unit 660 $g_operator
657	;;
658
659ss*)
660	case $i in
661	ss*) name=ss;	unit=${i#ss};	chr=%ss_chr%;;
662	esac
663	mkdev $name$unit	c $chr $(($unit * 16 + 0)) 640 $g_operator
664	mkdev n$name$unit	c $chr $(($unit * 16 + 1)) 640 $g_operator
665	mkdev en$name$unit	c $chr $(($unit * 16 + 3)) 640 $g_operator
666	;;
667
668ccd*|cgd*|raid*|vnd*)
669	case $i in
670	ccd*)	name=ccd;	unit=${i#ccd};	blk=%ccd_blk%;	chr=%ccd_chr%;;
671	cgd*)	name=cgd;	unit=${i#cgd};	blk=%cgd_blk%;	chr=%cgd_chr%;;
672	raid*)	name=raid;	unit=${i#raid}; blk=%raid_blk%; chr=%raid_chr%;;
673	vnd*)	name=vnd;	unit=${i#vnd};	blk=%vnd_blk%;	chr=%vnd_chr%;;
674	esac
675	%MKDISK% $name $unit $blk $chr
676	;;
677
678sd*)
679	name=sd; unit=${i#sd};	blk=%sd_blk%;	chr=%sd_chr%
680	%MKDISK% $name $unit $blk $chr
681	;;
682
683wd*)
684	name=wd; unit=${i#wd}; blk=%wd_blk%; chr=%wd_chr%
685	%MKDISK% $name $unit $blk $chr
686	;;
687
688fd*)
689	name=fd; unit=${i#fd}; blk=%fd_blk%; chr=%fd_chr%
690	%MKDISK% $name $unit $blk $chr
691	;;
692
693ld*)
694	name=ld; unit=${i#ld}; blk=%ld_blk%; chr=%ld_chr%
695	%MKDISK% $name $unit $blk $chr
696	;;
697
698ed*)
699	name=ed; unit=${i#ed}; blk=%ed_blk%; chr=%ed_chr%
700	%MKDISK% $name $unit $blk $chr
701	;;
702
703ofdisk*)
704	name=ofdisk; unit=${i#ofdisk}; blk=%ofdisk_blk%; chr=%ofdisk_chr%
705	%MKDISK% $name $unit $blk $chr
706	;;
707
708xbd*)
709	name=xbd; unit=${i#xbd}; blk=%xbd_blk%; chr=%xbd_chr%
710	%MKDISK% $name $unit $blk $chr
711	;;
712
713ttyCY*)
714	name=tyCY; chr=%cy_chr%; off=32
715	unit=${i#t${name}}
716	minor=$(($unit * $off))
717	eminor=$(($minor + $off))
718	while [ $minor -lt $eminor ]
719	do
720		nminor=$(zeropad 3 $minor)
721		mkdev t$name$nminor c $chr $(($minor + $dialin )) "" "" $u_uucp
722		mkdev d$name$nminor c $chr $(($minor + $dialout)) "" "" $u_uucp
723		minor=$(($minor + 1))
724	done
725	;;
726
727ttyCZ*)
728	name=tyCZ; chr=%cz_chr%; off=64
729	unit=${i#t${name}}
730	minor=$(($unit * $off))
731	eminor=$(($minor + $off))
732	while [ $minor -lt $eminor ]
733	do
734		nminor=$(zeropad 4 $minor)
735		mkdev t$name$nminor c $chr $(($minor + $dialin )) "" "" $u_uucp
736		mkdev d$name$nminor c $chr $(($minor + $dialout)) "" "" $u_uucp
737		minor=$(($minor + 1))
738	done
739	;;
740
741
742tty[0-9]|tty0[0-9])
743	# some archs have built-in zstty (major %zstty_chr%) instead
744	# of NS16550; create ttyZ* and hardlink as [dt]ty0*; this
745	# needs to be before com entry, for archs which have both
746	unit=${i#tty}
747	unit=$(($unit + 0))
748	makedev ttyZ${unit}
749	lndev ttyZ$unit tty0${unit}
750	lndev dtyZ$unit dty0${unit}
751	;;
752
753tty0*|tty1*|tty[0-9])
754	unit=${i#tty}
755	ounit=$(zeropad 2 $unit)
756	mkdev tty$ounit c %com_chr% $(($unit + $dialin )) "" "" $u_uucp
757	mkdev dty$ounit c %com_chr% $(($unit + $dialout)) "" "" $u_uucp
758	;;
759
760ttyC*)
761		# some archs call com_chr ttyC traditionally
762	unit=${i#ttyC}; name=ttyC; dname=dtyC; chr=%com_chr%
763	mkdev  $name$unit c $chr $(($unit + $dialin )) "" "" $u_uucp
764	mkdev $dname$unit c $chr $(($unit + $dialout)) "" "" $u_uucp
765	;;
766
767ttyh*)
768	unit=${i#ttyh}; name=ttyh; dname=dtyh; chr=%sabtty_chr%
769	mkdev  $name$unit c $chr $(($unit + $dialin )) "" "" $u_uucp
770	mkdev $dname$unit c $chr $(($unit + $dialout)) "" "" $u_uucp
771	;;
772
773ttyTX*)
774	unit=${i#ttyTX}; name=ttyTX0; dname=dtyTX0; chr=%txcom_chr%
775	mkdev  $name$unit c $chr $(($unit + $dialin )) "" "" $u_uucp
776	mkdev $dname$unit c $chr $(($unit + $dialout)) "" "" $u_uucp
777	;;
778
779ttyZ*)
780	unit=${i#ttyZ}; name=ttyZ; dname=dtyZ; chr=%zstty_chr%
781	mkdev  $name$unit c $chr $(($unit + $dialin )) "" "" $u_uucp
782	mkdev $dname$unit c $chr $(($unit + $dialout)) "" "" $u_uucp
783	;;
784
785opty)
786	for j in 0 1 2 3 4 5 6 7 8 9 a b c d e f
787	do
788		case $j in
789		[0-9])	jn=$j ;;
790		a)	jn=10 ;;
791		b)	jn=11 ;;
792		c)	jn=12 ;;
793		d)	jn=13 ;;
794		e)	jn=14 ;;
795		f)	jn=15 ;;
796		esac
797		mkdev ttyp$j c %pts_chr% $jn 666
798		mkdev ptyp$j c %ptc_chr% $jn 666
799	done
800	;;
801
802pty*)
803	class=${i#pty}
804	d1="p q r s t u v w x y z P Q R S T"
805	if [ "$class" -ge 64 ]
806	then
807		warn "$i: pty unit must be between 0 and 63"
808		continue
809	elif [ "$class" -lt 16 ]
810	then
811		offset=0
812		mult=0
813		d2="0 1 2 3 4 5 6 7 8 9 a b c d e f"
814	else
815		class=$(($class - 16))
816		offset=256
817		mult=2
818		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"
819	fi
820	start=$(($class * 16))
821	set -- $d2
822	nt=$#
823	s1=$(($start / $nt))
824	set -- $d1
825	shift $s1
826	t1=$1
827	if [ "$t1" = v ]; then
828		warn "$i: pty unit conflicts with console ttyv0 device"
829		continue
830	fi
831	s2=$(($start % $nt - $s1 * $mult))
832	set -- $d2
833	shift $s2
834	t2=$1
835	unit=$(($start + $offset - $s1 * $mult))
836	end=$(($unit + 16))
837	while [ "$unit" -lt "$end" ]
838	do
839		mkdev tty$t1$t2 c %pts_chr% $unit 666
840		mkdev pty$t1$t2 c %ptc_chr% $unit 666
841		shift
842		t2=$1
843		if [ -z "$t2" ]
844		then
845			break
846		fi
847		unit=$(($unit + 1))
848	done
849	;;
850
851stic*)
852	unit=${i#stic}
853	mkdev stic$unit c %stic_chr% $unit
854	;;
855
856st*)
857	case $i in
858	st*) name=st;	unit=${i#st};	chr=%st_chr%;	blk=%st_blk%;;
859	esac
860	mkdev $name$unit	b $blk $(($unit * 16 + 0)) 660 $g_operator
861	mkdev n$name$unit	b $blk $(($unit * 16 + 1)) 660 $g_operator
862	mkdev e$name$unit	b $blk $(($unit * 16 + 2)) 660 $g_operator
863	mkdev en$name$unit	b $blk $(($unit * 16 + 3)) 660 $g_operator
864	mkdev r$name$unit	c $chr $(($unit * 16 + 0)) 660 $g_operator
865	mkdev nr$name$unit	c $chr $(($unit * 16 + 1)) 660 $g_operator
866	mkdev er$name$unit	c $chr $(($unit * 16 + 2)) 660 $g_operator
867	mkdev enr$name$unit	c $chr $(($unit * 16 + 3)) 660 $g_operator
868	;;
869
870ses*|ch*|uk*)
871	case $i in
872	ch*)	name=ch;	unit=${i#ch};	chr=%ch_chr%;;
873	uk*)	name=uk;	unit=${i#uk};	chr=%uk_chr%;;
874	ses*)	name=ses;	unit=${i#ses};	chr=%ses_chr%;;
875	esac
876	mkdev $name$unit c $chr $unit 640 $g_operator
877	;;
878
879cd*)
880	makedisk_minimal cd ${i#cd} %cd_blk% %cd_chr% %
881	;;
882
883mcd*)
884	makedisk_minimal mcd ${i#mcd} %mcd_blk% %mcd_chr%
885	;;
886
887gdrom*)
888	makedisk_minimal gdrom ${i#gdrom} %gdrom_blk% %gdrom_chr%
889	;;
890
891lpt*|lpa*)
892	case $i in
893	lpt*) name=lpt;	unit=${i#lpt};	chr=%lpt_chr%;	flags=0;;
894	lpa*) name=lpa;	unit=${i#lpa};	chr=%lpt_chr%;	flags=128;;
895	esac
896	mkdev $name$unit c $chr $(($unit + $flags))
897	mkdev lpt${unit}ctl c $chr $(($unit + 256))
898	;;
899
900bpf)
901	mkdev bpf	c %bpf_chr% 0
902	lndev bpf bpf0
903	;;
904
905tun*)
906	unit=${i#tun}
907	mkdev tun$unit c %tun_chr% $unit
908	;;
909
910joy*)
911	unit=${i#joy}
912	mkdev joy$unit c %joy_chr% $unit
913	;;
914
915ipl)
916	mkdev ipl	c %ipl_chr% 0
917	mkdev ipnat	c %ipl_chr% 1
918	mkdev ipstate	c %ipl_chr% 2
919	mkdev ipauth	c %ipl_chr% 3
920	;;
921
922pf)
923	mkdev pf c %pf_chr% 0
924	;;
925
926crypto)
927	mkdev crypto c %crypto_chr% 0 666
928	;;
929
930speaker)
931	mkdev speaker c %spkr_chr% 0
932	;;
933
934lkm)
935	mkdev lkm c %lkm_chr% 0 640 $g_kmem
936	;;
937
938audio*)
939	unit=${i#audio}
940	audio=audio$unit
941	sound=sound$unit
942	mixer=mixer$unit
943	audioctl=audioctl$unit
944	: ${unit:-0}
945	mkdev $sound    c %audio_chr% $(($unit + 0))	666
946	mkdev $audio    c %audio_chr% $(($unit + 128))	666
947	mkdev $mixer    c %audio_chr% $(($unit + 16))	666
948	mkdev $audioctl c %audio_chr% $(($unit + 192))	666
949	;;
950
951rmidi*)
952	unit=${i#rmidi}
953	mkdev rmidi$unit c %midi_chr% $unit 666
954	;;
955
956music*)
957	unit=${i#music}
958	: ${unit:-0}
959	mkdev music$unit     c %sequencer_chr% $(($unit + 0))	666
960	mkdev sequencer$unit c %sequencer_chr% $(($unit + 128))	666
961	;;
962
963radio*)
964	unit=${i#radio}
965	: ${unit:-0}
966	mkdev radio$unit c %radio_chr% $unit 666
967	;;
968
969apm)
970	mkdev apm	c %apm_chr% 0 644
971	mkdev apmctl	c %apm_chr% 8 644
972	;;
973
974apm)
975		# hpcmips uses `apmdev_chr' instead of `apm_chr'
976	mkdev apm	c %apmdev_chr% 0 644
977	mkdev apmctl	c %apmdev_chr% 8 644
978	;;
979
980satlink*)
981	unit=${i#satlink}
982	mkdev satlink$unit c %satlink_chr% $unit 444
983	;;
984
985random)
986	mkdev random	c %rnd_chr% 0 444
987	mkdev urandom	c %rnd_chr% 1 644
988	;;
989
990cfs*)
991	unit=${i#cfs}
992	mkdev cfs$unit c %vcoda_chr% $unit
993	;;
994
995sysmon)
996	mkdev sysmon	c %sysmon_chr% 0 644
997	mkdev watchdog	c %sysmon_chr% 1 644
998	mkdev power	c %sysmon_chr% 2 640
999	;;
1000
1001scsibus*)
1002	unit=${i#scsibus}
1003	mkdev scsibus$unit c %scsibus_chr% $unit 644
1004	;;
1005
1006bktr)
1007	makedev bktr0 bktr1
1008	lndev	bktr0	bktr
1009	lndev	tuner0	tuner
1010	lndev	vbi0	vbi
1011	;;
1012
1013bktr*)
1014	unit=${i#bktr}
1015	mkdev bktr$unit		c %bktr_chr% $(($unit + 0))	444
1016	mkdev tuner$unit	c %bktr_chr% $(($unit + 16))	444
1017	mkdev vbi$unit		c %bktr_chr% $(($unit + 32))	444
1018	;;
1019
1020iop*)
1021	unit=${i#iop}
1022	mkdev iop$unit c %iop_chr% $unit
1023	;;
1024
1025mlx*)
1026	unit=${i#mlx}
1027	mkdev mlx$unit c %mlx_chr% $unit
1028	;;
1029
1030mly*)
1031	unit=${i#mly}
1032	mkdev mly$unit c %mly_chr% $unit
1033	;;
1034
1035twe*)
1036	unit=${i#twe}
1037	mkdev twe$unit c %twe_chr% $unit
1038	;;
1039
1040icp*)
1041	unit=${i#icp}
1042	mkdev icp$unit c %icp_chr% $unit
1043	;;
1044
1045agp*)
1046	unit=${i#agp}
1047	mkdev agp$unit c %agp_chr% $unit 644
1048	if [ "$unit" = "0" ]; then
1049		lndev agp$unit agpgart
1050	fi
1051	;;
1052
1053pci*)
1054	unit=${i#pci}
1055	mkdev pci$unit c %pci_chr% $unit 644
1056	;;
1057
1058dpti*)
1059	unit=${i#dpti}
1060	mkdev dpti$unit c %dpti_chr% $unit
1061	;;
1062
1063dpt*)
1064	unit=${i#dpt}
1065	mkdev dpt$unit c %dpt_chr% $unit
1066	;;
1067
1068altq)
1069	makedir altq 755
1070	unit=0
1071	for dev in altq cbq wfq afm fifoq red rio localq hfsc cdnr blue priq
1072	do
1073		mkdev altq/$dev c %altq_chr% $unit 644
1074		unit=$(($unit + 1))
1075	done
1076	;;
1077
1078isdn)
1079	mkdev isdn c %isdn_chr% 0
1080	;;
1081
1082isdnctl)
1083	mkdev isdnctl c %isdnctl_chr% 0
1084	;;
1085
1086isdnbchan*)
1087	unit=${i#isdnbchan}
1088	mkdev isdnbchan$unit c %isdnbchan_chr% $unit
1089	;;
1090
1091isdnteld*)
1092	unit=${i#isdnteld}
1093	mkdev isdnteld$unit c %isdntel_chr% $(($unit + 64))
1094	;;
1095
1096isdntel*)
1097	unit=${i#isdntel}
1098	mkdev isdntel$unit c %isdntel_chr% $unit
1099	;;
1100
1101isdntrc*)
1102	unit=${i#isdntrc}
1103	mkdev isdntrc$unit c %isdntrc_chr% $unit
1104	;;
1105
1106vmegen)
1107	makedev vmegen0 vmegen1 vmegen2 vmegen3
1108	;;
1109
1110vmegen*)
1111	unit=${i#vmegen}
1112	mkdev vmegen$unit c %vmegeneric_chr% $(($unit * 16 + 0))
1113	;;
1114
1115wsfont)
1116	mkdev wsfont c %wsfont_chr% 0
1117	;;
1118
1119cir*)
1120	unit=${i#cir}
1121	mkdev cir$unit c %cir_chr% $unit 666
1122	;;
1123
1124irframe*)
1125	unit=${i#irframe}
1126	mkdev irframe$unit c %irframe_chr% $unit
1127	;;
1128
1129fcom*)
1130	unit=${i#fcom}
1131	mkdev fcom$unit c %fcom_chr% $unit "" "" $u_uucp
1132	;;
1133
1134openfirm)
1135	mkdev openfirm c %openfirm_chr% 0 444
1136	;;
1137
1138nvram)
1139	mkdev nvram c %nvram_chr% 0 644
1140	;;
1141
1142rtc)
1143	mkdev rtc c %rtc_chr% 0 644
1144	;;
1145
1146clockctl)
1147	mkdev clockctl c %clockctl_chr% 0 660 $g_ntpd
1148	;;
1149
1150nsmb)
1151	makedev nsmb0 nsmb1 nsmb2 nsmb3
1152	;;
1153
1154nsmb*)
1155	unit=${i#nsmb}
1156	mkdev nsmb$unit c %nsmb_chr% $unit 644
1157	;;
1158
1159systrace)
1160	mkdev systrace c %systrace_chr% 0 644
1161	;;
1162
1163kttcp)
1164	mkdev kttcp c %kttcp_chr% 0
1165	;;
1166
1167dmoverio)
1168	mkdev dmoverio c %dmoverio_chr% 0 644
1169	;;
1170
1171veriexec)
1172	mkdev veriexec c %verifiedexec_chr% 0 644
1173	;;
1174
1175ttyv*)
1176	unit=${i#ttyv}
1177	mkdev ttyv$unit c %pc_chr% $unit
1178	;;
1179
1180# arm, acorn32
1181ttyv*)
1182	unit=${i#ttyv}
1183	mkdev ttyv$unit c %physcon_chr% $unit
1184	;;
1185
1186arcpp*)
1187	unit=${i#arcpp}
1188	mkdev arcpp$unit c %arcpp_chr% $unit
1189	;;
1190
1191par*)
1192	unit=${i#par}
1193	case $unit in
1194	0)
1195		mkdev par$unit c %par_chr% $unit
1196		;;
1197	*)
1198		warn "bad unit for par in: $i"
1199		;;
1200	esac
1201	;;
1202
1203ite*|ttye*)
1204	case $i in
1205	ite*)	unit=${i#ite};;
1206	ttye*)	unit=${i#ttye};;
1207	esac
1208	mkdev ttye$unit	c %ite_chr% $unit
1209	;;
1210
1211pms*)
1212	unit=${i#pms}
1213	mkdev pms$unit c %opms_chr% $unit
1214	;;
1215
1216qms*)
1217	unit=${i#qms}
1218	mkdev qms$unit c %qms_chr% $unit
1219	;;
1220
1221lms*)
1222	unit=${i#lms}
1223	mkdev lms$unit c %lms_chr% $unit
1224	;;
1225
1226mms*)
1227	unit=${i#mms}
1228	mkdev mms$unit c %mms_chr% $unit
1229	;;
1230
1231mouse-*)
1232	case $i in
1233	mouse-pms*) name=pms ;;
1234	mouse-qms*) name=qms ;;
1235	esac
1236	unit=${i#mouse-${name}}
1237	lndev $name$unit mouse
1238	;;
1239
1240kbd)
1241	mkdev kbd c %kbd_chr% 0
1242	;;
1243
1244kbdctl)
1245	mkdev kbdctl c %kbd_chr% 1
1246	;;
1247
1248vidcconsole0)
1249	mkdev vidcconsole0 c %vidcconsole_chr% 0 640
1250	;;
1251
1252view*)
1253	unit=${i#view}
1254	mkdev view$unit	c %view_chr% $unit 666
1255	;;
1256
1257mouse*)
1258	unit=${i#mouse}
1259	case $unit in
1260	0|1)
1261		mkdev mouse$unit c %ms_chr% $unit 666
1262		if [ $unit = 0 ]; then
1263			lndev mouse$unit mouse
1264		fi
1265		;;
1266	*)
1267		warn "bad unit for mouse in: $i"
1268		;;
1269	esac
1270	;;
1271
1272panel)
1273	mkdev panel0 c %panel_chr% 0 660
1274	;;
1275
1276tslcd)
1277	mkdev tslcd0 c %tslcd_chr% 0 660
1278	;;
1279
1280ipty)
1281	mkdev ttyp0 c %pts_chr% 0 666
1282	mkdev ttyp1 c %pts_chr% 1 666
1283	mkdev ptyp0 c %ptc_chr% 0 666
1284	mkdev ptyp1 c %ptc_chr% 1 666
1285	;;
1286
1287ptm)
1288	mkdev ptmx c %ptm_chr% 0 666
1289	mkdev ptm c %ptm_chr% 1 666
1290	;;
1291
1292grf*)
1293	unit=${i#grf}
1294	mkdev grf$unit c %grf_chr% $unit 666
1295	;;
1296
1297etvme)
1298	mkdev etvme c %et_chr% 0
1299	;;
1300
1301leo*)
1302	unit=${i#leo}
1303	mkdev leo$unit c %leo_chr% $unit
1304	;;
1305
1306scif*)
1307	unit=${i#scif}
1308	mkdev scif$unit c %scif_chr% $unit "" "" $u_uucp
1309	;;
1310
1311sci*)
1312	unit=${i#sci}
1313	mkdev sci$unit c %sci_chr% $unit "" "" $u_uucp
1314	;;
1315
1316maple*)
1317	case $i in
1318	mapleA*) name="mapleA"; unit=0;;
1319	mapleB*) name="mapleB"; unit=1;;
1320	mapleC*) name="mapleC"; unit=2;;
1321	mapleD*) name="mapleD"; unit=3;;
1322	esac
1323	subunit=${i#$name}
1324	mkdev $name$subunit c %maple_chr% $(($unit * 8 + 0$subunit))
1325	;;
1326
1327mmem*)
1328	unit=${i#mmem}
1329	for pt in 0	# 1 2 3 4 ... 255
1330	do
1331#		mkdev mmem${unit}.${pt}a  b %mmem_blk% $(($unit * 4096 + $pt * 16 + 0)) 640 $g_operator
1332		mkdev mmem${unit}.${pt}c  b %mmem_blk% $(($unit * 4096 + $pt * 16 + 2)) 640 $g_operator
1333#		mkdev rmmem${unit}.${pt}a c %mmem_chr% $(($unit * 4096 + $pt * 16 + 0)) 640 $g_operator
1334		mkdev rmmem${unit}.${pt}c c %mmem_chr% $(($unit * 4096 + $pt * 16 + 2)) 640 $g_operator
1335	done
1336	;;
1337
1338mlcd*)
1339	unit=${i#mlcd}
1340	for pt in 0	# 1 2 3 4 ... 255
1341	do
1342		mkdev mlcd${unit}.${pt} c %mlcd_chr% $(($unit * 256 + $pt)) 640 $g_operator
1343	done
1344	;;
1345
1346ixpcom*)
1347	unit=${i#ixpcom}
1348	mkdev ixpcom$unit c %ixpcom_chr% $unit "" "" $u_uucp
1349	;;
1350
1351epcom*)
1352	unit=${i#epcom}
1353	mkdev epcom$unit c %epcom_chr% $unit "" "" $u_uucp
1354	;;
1355
1356ucbsnd)
1357	mkdev ucbsnd c %ucbsnd_chr% 0 666
1358	;;
1359
1360adb)
1361	mkdev adb c %aed_chr% 0 666
1362	;;
1363
1364asc*)
1365	unit=${i#asc}
1366	mkdev asc$unit c %asc_chr% $unit 666
1367	;;
1368
1369bwtwo*)
1370	unit=${i#bwtwo}
1371	mkdev bwtwo$unit c %bwtwo_chr% $unit 666
1372	;;
1373
1374cgtwo*)
1375	unit=${i#cgtwo}
1376	mkdev cgtwo$unit c %cgtwo_chr% $unit 666
1377	;;
1378
1379cgthree*)
1380	unit=${i#cgthree}
1381	mkdev cgthree$unit c %cgthree_chr% $unit 666
1382	;;
1383
1384cgfour*)
1385	unit=${i#cgfour}
1386	mkdev cgfour$unit c %cgfour_chr% $unit 666
1387	;;
1388
1389cgsix*)
1390	unit=${i#cgsix}
1391	mkdev cgsix$unit c %cgsix_chr% $unit 666
1392	;;
1393
1394cgeight*)
1395	unit=${i#cgeight}
1396	mkdev cgeight$unit c %cgeight_chr% $unit 666
1397	;;
1398
1399tcx*)
1400	unit=${i#tcx}
1401	mkdev tcx$unit c %tcx_chr% $unit 666
1402	;;
1403
1404xd*|xy*)
1405	case $i in
1406	xd*)	name=xd; unit=${i#xd}; blk=%xd_blk%;	chr=%xd_chr%;;
1407	xy*)	name=xy; unit=${i#xy}; blk=%xy_blk%;	chr=%xy_chr%;;
1408	esac
1409	%MKDISK% $name $unit $blk $chr
1410	;;
1411
1412magma*)
1413	unit=${i#magma}
1414	if [ 0$unit -gt 3 ]; then
1415		warn "bad unit for $i: $unit"
1416		break
1417	fi
1418	for j in 0 1 2 3 4 5 6 7 8 9 a b c d e f
1419	do
1420		case $j in
1421		[0-9])	jn=$j ;;
1422		a)	jn=10 ;;
1423		b)	jn=11 ;;
1424		c)	jn=12 ;;
1425		d)	jn=13 ;;
1426		e)	jn=14 ;;
1427		f)	jn=15 ;;
1428		esac
1429		mkdev tty$unit$j c %mtty_chr% $(($unit * 64 + $jn))
1430	done
1431	mkdev bpp${unit}0 c %mbpp_chr% $(($unit * 64 + 0))
1432	mkdev bpp${unit}1 c %mbpp_chr% $(($unit * 64 + 1))
1433	;;
1434
1435clcd*)
1436	unit=${i#clcd}
1437	if [ 0$unit -gt 7 ]; then
1438		warn "bad unit for $i: $unit"
1439		break
1440	fi
1441	for j in 0 1 2 3 4 5 6 7
1442	do
1443		mkdev ttyA$unit$j c %clcd_chr% $(($unit * 8 + $j + $dialin)) "" "" $u_uucp
1444		mkdev dtyA$unit$j c %clcd_chr% $(($unit * 8 + $j + $dialout)) "" "" $u_uucp
1445	done
1446	;;
1447
1448spif*)
1449	unit=${i#spif}
1450	if [ 0$unit -gt 3 ]; then
1451		warn "bad unit for $i: $unit"
1452		break
1453	fi
1454	for j in 0 1 2 3 4 5 6 7; do
1455		mkdev ttyS$unit$j c 102 $(($unit * 64 + $j)) "" "" $u_uucp
1456	done
1457	mkdev bppS${unit}0 c 103 $(($unit * 64 + 0))
1458	mkdev bppS${unit}1 c 103 $(($unit * 64 + 1))
1459	;;
1460
1461bpp*)
1462	unit=${i#bpp}
1463	mkdev bpp$unit c %bpp_chr% $(($unit + 0))
1464	;;
1465
1466tctrl*)
1467	unit=${i#tctrl}
1468	mkdev tctrl$unit c %tctrl_chr% $unit 666
1469	;;
1470
1471bmd*)
1472	unit=${i#bmd}
1473	mkdev bmd${unit}a  b %bmd_blk% $(($unit * 8 + 0)) 640 $g_operator
1474	mkdev bmd${unit}c  b %bmd_blk% $(($unit * 8 + 2)) 640 $g_operator
1475	mkdev rbmd${unit}a c %bmd_chr% $(($unit * 8 + 0)) 640 $g_operator
1476	mkdev rbmd${unit}c c %bmd_chr% $(($unit * 8 + 2)) 640 $g_operator
1477	;;
1478
1479sram)
1480	mkdev sram c %sram_chr% 0 644
1481	;;
1482
1483pow*)
1484	unit=${i#pow}
1485	case $unit in
1486	0|1)
1487		mkdev pow${unit} c %pow_chr% ${unit} 644
1488		if [ $unit = 0 ]; then
1489			lndev pow${unit} pow
1490		fi
1491		;;
1492	*)
1493		warn "bad unit for pow in: $i"
1494		;;
1495	esac
1496	;;
1497
1498ttyS*)
1499	unit=${i#ttyS}
1500	mkdev ttyS$unit c %sacom_chr% $(($unit + $dialin )) "" "" $u_uucp
1501	mkdev dtyS$unit c %sacom_chr% $(($unit + $dialout)) "" "" $u_uucp
1502	;;
1503
1504atabus*)
1505	unit=${i#atabus}
1506	mkdev atabus$unit c %atabus_chr% $unit 644
1507	;;
1508
1509drvctl)
1510	mkdev drvctl c %drvctl_chr% 0 644
1511	;;
1512
1513tap*)
1514	unit=${i#tap}
1515	case "$unit" in
1516	[0-9]*)
1517		mkdev tap${unit} c %tap_chr% ${unit} 600
1518		;;
1519	*)
1520		mkdev tap c %tap_chr% 0xfffff 600
1521		;;
1522	esac
1523	;;
1524
1525midevend)
1526%MI_DEVICES_END%
1527local)
1528	if [ -f "$0.local" ]; then
1529		umask 0
1530		sh $0.local all
1531		umask 077
1532	fi
1533	;;
1534
1535*)
1536	warn "$i: unknown device"
1537	;;
1538
1539esac
1540done
1541
1542}
1543
1544
1545# three variants of disk partitions - max 8, max 16, max 16 with highpartoffset
1546# hack; only the one used by port is retained in final MAKEDEV script
1547# routine is called as:
1548# makedisk name unit blk chr
1549makedisk_p8()
1550{
1551	name="$1"; unit="$2"; blk="$3"; chr="$4"
1552
1553	mkdev ${name}${unit}a	b $blk $(($unit * 8 + 0))	640 $g_operator
1554	mkdev ${name}${unit}b	b $blk $(($unit * 8 + 1))	640 $g_operator
1555	mkdev ${name}${unit}c	b $blk $(($unit * 8 + 2))	640 $g_operator
1556	mkdev ${name}${unit}d	b $blk $(($unit * 8 + 3))	640 $g_operator
1557	mkdev ${name}${unit}e	b $blk $(($unit * 8 + 4))	640 $g_operator
1558	mkdev ${name}${unit}f	b $blk $(($unit * 8 + 5))	640 $g_operator
1559	mkdev ${name}${unit}g	b $blk $(($unit * 8 + 6))	640 $g_operator
1560	mkdev ${name}${unit}h	b $blk $(($unit * 8 + 7))	640 $g_operator
1561	mkdev r${name}${unit}a	c $chr $(($unit * 8 + 0))	640 $g_operator
1562	mkdev r${name}${unit}b	c $chr $(($unit * 8 + 1))	640 $g_operator
1563	mkdev r${name}${unit}c	c $chr $(($unit * 8 + 2))	640 $g_operator
1564	mkdev r${name}${unit}d	c $chr $(($unit * 8 + 3))	640 $g_operator
1565	mkdev r${name}${unit}e	c $chr $(($unit * 8 + 4))	640 $g_operator
1566	mkdev r${name}${unit}f	c $chr $(($unit * 8 + 5))	640 $g_operator
1567	mkdev r${name}${unit}g	c $chr $(($unit * 8 + 6))	640 $g_operator
1568	mkdev r${name}${unit}h	c $chr $(($unit * 8 + 7))	640 $g_operator
1569}
1570
1571makedisk_p16()
1572{
1573	name="$1"; unit="$2"; blk="$3"; chr="$4"
1574
1575	mkdev ${name}${unit}a	b $blk $(($unit * 16 + 0))	640 $g_operator
1576	mkdev ${name}${unit}b	b $blk $(($unit * 16 + 1))	640 $g_operator
1577	mkdev ${name}${unit}c	b $blk $(($unit * 16 + 2))	640 $g_operator
1578	mkdev ${name}${unit}d	b $blk $(($unit * 16 + 3))	640 $g_operator
1579	mkdev ${name}${unit}e	b $blk $(($unit * 16 + 4))	640 $g_operator
1580	mkdev ${name}${unit}f	b $blk $(($unit * 16 + 5))	640 $g_operator
1581	mkdev ${name}${unit}g	b $blk $(($unit * 16 + 6))	640 $g_operator
1582	mkdev ${name}${unit}h	b $blk $(($unit * 16 + 7))	640 $g_operator
1583	mkdev ${name}${unit}i	b $blk $(($unit * 16 + 8))	640 $g_operator
1584	mkdev ${name}${unit}j	b $blk $(($unit * 16 + 9))	640 $g_operator
1585	mkdev ${name}${unit}k	b $blk $(($unit * 16 + 10))	640 $g_operator
1586	mkdev ${name}${unit}l	b $blk $(($unit * 16 + 11))	640 $g_operator
1587	mkdev ${name}${unit}m	b $blk $(($unit * 16 + 12))	640 $g_operator
1588	mkdev ${name}${unit}n	b $blk $(($unit * 16 + 13))	640 $g_operator
1589	mkdev ${name}${unit}o	b $blk $(($unit * 16 + 14))	640 $g_operator
1590	mkdev ${name}${unit}p	b $blk $(($unit * 16 + 15))	640 $g_operator
1591	mkdev r${name}${unit}a	c $chr $(($unit * 16 + 0))	640 $g_operator
1592	mkdev r${name}${unit}b	c $chr $(($unit * 16 + 1))	640 $g_operator
1593	mkdev r${name}${unit}c	c $chr $(($unit * 16 + 2))	640 $g_operator
1594	mkdev r${name}${unit}d	c $chr $(($unit * 16 + 3))	640 $g_operator
1595	mkdev r${name}${unit}e	c $chr $(($unit * 16 + 4))	640 $g_operator
1596	mkdev r${name}${unit}f	c $chr $(($unit * 16 + 5))	640 $g_operator
1597	mkdev r${name}${unit}g	c $chr $(($unit * 16 + 6))	640 $g_operator
1598	mkdev r${name}${unit}h	c $chr $(($unit * 16 + 7))	640 $g_operator
1599	mkdev r${name}${unit}i	c $chr $(($unit * 16 + 8))	640 $g_operator
1600	mkdev r${name}${unit}j	c $chr $(($unit * 16 + 9))	640 $g_operator
1601	mkdev r${name}${unit}k	c $chr $(($unit * 16 + 10))	640 $g_operator
1602	mkdev r${name}${unit}l	c $chr $(($unit * 16 + 11))	640 $g_operator
1603	mkdev r${name}${unit}m	c $chr $(($unit * 16 + 12))	640 $g_operator
1604	mkdev r${name}${unit}n	c $chr $(($unit * 16 + 13))	640 $g_operator
1605	mkdev r${name}${unit}o	c $chr $(($unit * 16 + 14))	640 $g_operator
1606	mkdev r${name}${unit}p	c $chr $(($unit * 16 + 15))	640 $g_operator
1607}
1608
1609makedisk_p16high()
1610{
1611	ho=524280	# offset for partition 9 to 16
1612	name="$1"; unit="$2"; blk="$3"; chr="$4"
1613
1614	mkdev ${name}${unit}a	b $blk $(($unit * 8 + 0))	640 $g_operator
1615	mkdev ${name}${unit}b	b $blk $(($unit * 8 + 1))	640 $g_operator
1616	mkdev ${name}${unit}c	b $blk $(($unit * 8 + 2))	640 $g_operator
1617	mkdev ${name}${unit}d	b $blk $(($unit * 8 + 3))	640 $g_operator
1618	mkdev ${name}${unit}e	b $blk $(($unit * 8 + 4))	640 $g_operator
1619	mkdev ${name}${unit}f	b $blk $(($unit * 8 + 5))	640 $g_operator
1620	mkdev ${name}${unit}g	b $blk $(($unit * 8 + 6))	640 $g_operator
1621	mkdev ${name}${unit}h	b $blk $(($unit * 8 + 7))	640 $g_operator
1622	mkdev ${name}${unit}i	b $blk $(($unit * 8 + $ho + 8))	640 $g_operator
1623	mkdev ${name}${unit}j	b $blk $(($unit * 8 + $ho + 9))	640 $g_operator
1624	mkdev ${name}${unit}k	b $blk $(($unit * 8 + $ho + 10)) 640 $g_operator
1625	mkdev ${name}${unit}l	b $blk $(($unit * 8 + $ho + 11)) 640 $g_operator
1626	mkdev ${name}${unit}m	b $blk $(($unit * 8 + $ho + 12)) 640 $g_operator
1627	mkdev ${name}${unit}n	b $blk $(($unit * 8 + $ho + 13)) 640 $g_operator
1628	mkdev ${name}${unit}o	b $blk $(($unit * 8 + $ho + 14)) 640 $g_operator
1629	mkdev ${name}${unit}p	b $blk $(($unit * 8 + $ho + 15)) 640 $g_operator
1630	mkdev r${name}${unit}a	c $chr $(($unit * 8 + 0))	640 $g_operator
1631	mkdev r${name}${unit}b	c $chr $(($unit * 8 + 1))	640 $g_operator
1632	mkdev r${name}${unit}c	c $chr $(($unit * 8 + 2))	640 $g_operator
1633	mkdev r${name}${unit}d	c $chr $(($unit * 8 + 3))	640 $g_operator
1634	mkdev r${name}${unit}e	c $chr $(($unit * 8 + 4))	640 $g_operator
1635	mkdev r${name}${unit}f	c $chr $(($unit * 8 + 5))	640 $g_operator
1636	mkdev r${name}${unit}g	c $chr $(($unit * 8 + 6))	640 $g_operator
1637	mkdev r${name}${unit}h	c $chr $(($unit * 8 + 7))	640 $g_operator
1638	mkdev r${name}${unit}i	c $chr $(($unit * 8 + $ho + 8))	640 $g_operator
1639	mkdev r${name}${unit}j	c $chr $(($unit * 8 + $ho + 9))	640 $g_operator
1640	mkdev r${name}${unit}k	c $chr $(($unit * 8 + $ho + 10)) 640 $g_operator
1641	mkdev r${name}${unit}l	c $chr $(($unit * 8 + $ho + 11)) 640 $g_operator
1642	mkdev r${name}${unit}m	c $chr $(($unit * 8 + $ho + 12)) 640 $g_operator
1643	mkdev r${name}${unit}n	c $chr $(($unit * 8 + $ho + 13)) 640 $g_operator
1644	mkdev r${name}${unit}o	c $chr $(($unit * 8 + $ho + 14)) 640 $g_operator
1645	mkdev r${name}${unit}p	c $chr $(($unit * 8 + $ho + 15)) 640 $g_operator
1646}
1647
1648# make only the very few basic disk device nodes - 'a' partition
1649# and raw partition
1650makedisk_minimal()
1651{
1652	name=$1; unit=$2; blk=$3; chr=$4
1653	doff=%DISKMINOROFFSET%
1654	ro=%RAWDISK_OFF%
1655	rn=%RAWDISK_NAME%
1656
1657	mkdev ${name}${unit}a	b $blk $(($unit * $doff + 0))	640 $g_operator
1658	mkdev ${name}${unit}$rn	b $blk $(($unit * $doff + $ro))	640 $g_operator
1659	mkdev r${name}${unit}a	c $chr $(($unit * $doff + 0))	640 $g_operator
1660	mkdev r${name}${unit}$rn c $chr $(($unit * $doff + $ro)) 640 $g_operator
1661}
1662
1663makedev $*
1664