Merge from vendor branch FILE:
[dragonfly.git] / etc / MAKEDEV
1 #!/bin/sh -
2 #
3 # Copyright (c) 1990 The Regents of the University of California.
4 # All rights reserved.
5 #
6 # Written and contributed by W. Jolitz 12/90
7 #
8 # Redistribution and use in source and binary forms are permitted provided
9 # that: (1) source distributions retain this entire copyright notice and
10 # comment, and (2) distributions including binaries display the following
11 # acknowledgement:  ``This product includes software developed by the
12 # University of California, Berkeley and its contributors'' in the
13 # documentation or other materials provided with the distribution and in
14 # all advertising materials mentioning features or use of this software.
15 # Neither the name of the University nor the names of its contributors may
16 # be used to endorse or promote products derived from this software without
17 # specific prior written permission.
18 # THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
19 # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
20 # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
21 #
22 #       @(#)MAKEDEV     5.2 (Berkeley) 6/22/90
23 # $FreeBSD: src/etc/MAKEDEV,v 1.243.2.57 2003/02/10 11:35:53 simokawa Exp $
24 # $DragonFly: src/etc/MAKEDEV,v 1.32 2007/05/25 02:21:09 dillon Exp $
25 #
26 # Device "make" file.  Valid arguments:
27 #       all     makes all known devices, standard number of units (or close)
28 #       std     standard devices
29 #       jail    suitable for a jail(8)
30 #       local   configuration specific devices
31 #       mach-4  mach4&lites+devices for Mach's XFree86 distribution
32 #       (see http://www.cs.hut.fi/lites.html for more info on LITES)
33 #
34 # Tapes:
35 #       ast*    ATAPI tape drives
36 #       wt*     QIC-interfaced (e.g. not SCSI) 3M cartridge tape
37 #       sa*     SCSI Sequential Access Devices
38 #
39 # Disks:
40 #       aac*    Adaptec FSA RAID controllers
41 #       aacd*   Adaptec FSA RAID
42 #       acd*    ATAPI CD-ROM disks
43 #       ad*     ATA disks
44 #       afd*    ATAPI floppy disks
45 #       amrd*   AMI MegaRAID
46 #       ccd*    CCD disks
47 #       cd*     SCSI CD-ROM disks
48 #       da*     SCSI Direct Access Devices
49 #       fd*     floppy disk drives (3 1/2", 5 1/4")
50 #       fla*    M-Systems DiskOnChip
51 #       idad*   Compaq Smart-2 RAID arrays
52 #       ips*    IBM ServeRAID controller
53 #       ipsd*   IBM ServeRAID
54 #       md*     Memory (or malloc) disk
55 #       mlx*    Mylex DAC960 RAID controllers
56 #       mlxd*   Mylex DAC960 RAID disk volumes
57 #       pst*    Promise SuperTrak RAID disks
58 #       vn*     vnode disks
59 #       vkd*    virtual kernel disk
60 #
61 # Console ports:
62 #       vty*    virtual console devices for syscons
63 #
64 # Pointing devices:
65 #       mse*    Logitech and ATI Inport bus mouse
66 #       psm*    PS/2 mouse
67 #       jogdial Sony VAIO Jogdial
68 #       sysmouse Mousesystems mouse emulator for syscons
69 #
70 # Time devices:
71 #       refclock-* serial ports used by xntpd parse refclocks
72 #
73 # Terminal ports:
74 #       tty*    general purpose serial ports
75 #       cua*    dialout serial ports
76 #       ttyA*   Specialix SI/XIO dialin ports ('*' = number of devices)
77 #       cuaA*   Specialix SI/XIO dialout ports
78 #       ttyD*   Digiboard - 16 dialin ports
79 #       cuaD*   Digiboard - 16 dialout ports
80 #       ttyE*   Stallion EasyIO (stl) dialin ports
81 #       cuaE*   Stallion EasyIO (stl) dialout ports
82 #       ttyF*   Stallion Brumby (stli) dialin ports
83 #       cuaF*   Stallion Brumby (stli) dialout ports
84 #       ttyR*   Rocketport dialin ports
85 #       cuaR*   Rocketport dialout ports
86 #
87 #       stlN    Stallion EasyIO board N dialin and dialout
88 #       stliN   Stallion Brumby board N dialin and dialout
89 #
90 # Pseudo terminals:
91 #       pty*    set of 32 master and slave pseudo terminals
92 #       vty*    virtual terminals using syscons console
93 #
94 # Parallel port:
95 #       lpt*    Printer
96 #       ppi*    Parallel port i/o
97 #       pps*    Pulse per second timing interface
98 #       pcfclock* Parallel time sync interface
99 #
100 # I2C and SMBus:
101 #       iic*    I2C devices
102 #       smb*    SMBUS devices
103 #
104 # USB devices:
105 #       usb*    USB bus control device
106 #       ucom*   USB serial devices
107 #       ugen*   generic USB device
108 #       uhid*   Human Interface Device (HID)
109 #       ulpt*   printer
110 #       umodem* modems
111 #       ums*    mouse
112 #       urio*   Diamond Rio 500
113 #       uscanner* USB scanners
114 #
115 # SCSI devices (other than CD-ROM, tape and disk):
116 #       ch*     SCSI Media-Changer (juke box) driver
117 #       pt*     Processor Type (HP scanner, as one example)
118 #       pass*   CAM Passthrough device
119 #       ses*    SES (SCSI Environmental Services) and
120 #               SAF-TE (Scsi Accessable Fault-Tolerant Enclosures) device
121 #
122 # PC-CARD (previously called PCMCIA) support
123 #       card*   PC-CARD slots
124 #
125 # ISDN devices:
126 #       i4b     isdnd call control device
127 #       i4bctl  debugging control device
128 #       i4btrc* trace data interface(s), one per passive card
129 #       i4btel* telephony interface(s)
130 #       i4bteld* telephony dialout interface(s)
131 #       i4brbch* raw b channel access device(s)
132 #
133 # Special purpose devices:
134 #       acpi    ACPI control device
135 #       apm     Advanced Power Management BIOS
136 #       apmctl  APM BIOS control device
137 #       bpf*    packet filter
138 #       crypto  crypto interface
139 #       speaker pc speaker
140 #       tw*     xten power controller
141 #       snd*    various sound cards
142 #       pcaudio PCM audio driver
143 #       socksys iBCS2 socket system driver
144 #       vat     VAT compatibility audio driver (requires snd*)
145 #       gsc     Genius GS-4500 hand scanner
146 #       joy     pc joystick
147 #       tun*    Tunneling IP device
148 #       tap*    Ethernet Tunneling device
149 #       snp*    tty snoop devices
150 #       spigot  Video Spigot video acquisition card
151 #       ctx*    Cortex-I video acquisition card
152 #       meteor* Matrox Meteor video acquisition card (pci)
153 #       bktr*   Bt848 based video acquisition card (pci)
154 #       labpc*  National Instrument's Lab-PC and LAB-PC+
155 #       perfmon CPU performance-monitoring counters
156 #       pci     PCI configuration-space access from user mode
157 #       ipl     ipfilter control devices (ipl, ipnat, ipstate, ipauth)
158 #       kbd     keyboard devices
159 #       elan-mmcr       AMD Elan support (e.g. mmap MMCR)
160 #       agpgart AGP interface
161 #       nsmb*   SMB/CIFS protocol interface
162 #       pf      PF packet filter
163 #
164 ##############################################################################
165 #
166 # To override the default ownership and/or permissions, you now have the
167 # /etc/devices.conf file (create it if it's not there). Entries in this file
168 # should look like:
169 #
170 # ad0s1c        root:staff      666     # Override ad0s1c
171 # ad0*          root:wheel      641     # Override the entire ad0 family
172 # sa0.ctl       heinz:ketchup   444     # Override device control node
173 # sa*.ctl       heinz:ketchup   666     # Override all sa* control nodes
174 # fd/4          ihate:floppies  000     # Override /dev/fd/4
175 #
176 # See the devices.conf(5) man page for further information.
177 #
178 # J.Anslik (joerg@anslik.de)
179 #
180 ##############################################################################
181
182
183
184 #-----------------------------------------------------------------------------
185 # Where all device special files are built.
186 #-----------------------------------------------------------------------------
187
188 DEVDIR=dev
189
190
191 #-----------------------------------------------------------------------------
192 # File containing local ownership and permissions override entries.
193 #-----------------------------------------------------------------------------
194
195 DEVPERMS_LOCAL="/etc/devices.conf"
196
197
198 #-----------------------------------------------------------------------------
199 # Some useful programs.
200 #-----------------------------------------------------------------------------
201
202 cut=/usr/bin/cut
203 grep=/usr/bin/grep
204 mknod=/sbin/mknod
205 sed=/usr/bin/sed
206 tr=/usr/bin/tr
207
208
209 #-----------------------------------------------------------------------------
210 # Set up a default search path.
211 #-----------------------------------------------------------------------------
212
213 if [ -n "$MAKEDEVPATH" ]
214 then
215         PATH="$MAKEDEVPATH"
216 else
217         PATH=/sbin:/bin
218 fi
219
220
221 #-----------------------------------------------------------------------------
222 # Print error message $2 and exit this script, returning $1.
223 #-----------------------------------------------------------------------------
224
225 die()
226 {
227         echo $2
228
229         exit $1
230 }
231
232
233 #-----------------------------------------------------------------------------
234 # Convert integer to partition name.
235 #-----------------------------------------------------------------------------
236
237 dkitop()
238 {
239         local p
240
241         case $1 in
242          0) p=a;;  1) p=b;;  2) p=c;;  3) p=d;;
243          4) p=e;;  5) p=f;;  6) p=g;;  7) p=h;;
244          8) p=i;; 9) p=j;;  10) p=k;; 11) p=l;;
245         12) p=m;; 13) p=n;; 14) p=o;; 15) p=p;;
246          *) p="?";;
247         esac
248
249         echo $p
250 }
251
252
253 #-----------------------------------------------------------------------------
254 # Convert integer to slice name.
255 #-----------------------------------------------------------------------------
256
257 dkitos()
258 {
259         local s
260
261         case $1 in
262         0) s="s0" ;;
263         1) s="" ;;
264         *) s=s$(($1-1)) ;;
265         esac
266
267         echo $s
268 }
269
270 #-----------------------------------------------------------------------------
271 # Convert unit, slice, partition to minor number.
272 #-----------------------------------------------------------------------------
273 #
274 # ndkminor(unit, slice, partition)
275
276 ndkminor()
277 {
278         echo $(( (($1 & 31) << 3) | (($1 & 480) << 16) | \
279                 (($2 & 15) << 16) | (($2 & 112) << 25) | \
280                 ($3 & 7) | (($3 & 8) << 17) | (($3 & 240) << 21) ))
281 }
282
283
284 #-----------------------------------------------------------------------------
285 # Create the device node.
286 #-----------------------------------------------------------------------------
287
288 mknod() {
289
290         local dev=$1
291         local unit=$2
292
293         #---------------------------------------------------------------------
294         # Remove old device node, if any.
295         #---------------------------------------------------------------------
296
297         rm -f "$dev$unit" || exit 1
298
299
300         #---------------------------------------------------------------------
301         # Supply default ownership and/or permissions according to the
302         # number of parameters passed to this function.
303         #---------------------------------------------------------------------
304
305         case $# in
306         5) owner=root:wheel; perms=600;;
307         6) owner=$6;         perms=600;;
308         7) owner=$6;         perms=$7;;
309         *) die 2 "Bad call: mknod $@";;
310         esac
311
312
313         #---------------------------------------------------------------------
314         # Get rid of first two parameters (no longer needed)
315         #---------------------------------------------------------------------
316
317         shift; shift
318
319
320         #---------------------------------------------------------------------
321         # If there's a /etc/devices.conf file, check for local overrides.
322         #---------------------------------------------------------------------
323
324         if [ -s $DEVPERMS_LOCAL ]
325         then
326                 #-------------------------------------------------------------
327                 # Temporarily prepend the device portion with a subdir name
328                 # if we're not in $DEVDIR. We need to do this to distinguish
329                 # between device nodes that live in /dev, and device nodes
330                 # that live in /dev/subdir, like /dev/fd. This way, we can
331                 # have "fd*" entries in the permission files, as well as
332                 # "fd/*" stuff.
333                 #-------------------------------------------------------------
334
335                 tmpdev=$dev
336                 pwd=`/usr/bin/basename $PWD`
337
338                 [ "$pwd" = "$DEVDIR" ] || dev="${pwd}/$dev"
339
340
341                 #-------------------------------------------------------------
342                 # Check /etc/devices.conf for local overrides
343                 #-------------------------------------------------------------
344
345                 match=`$grep ^$dev$unit[[:space:]] $DEVPERMS_LOCAL | \
346                         $sed 's/\*/\\\*/'`
347
348                 [ "$match" ] ||
349                 if [ `expr "$unit" : '\(.*\)\.ctl$'` ]
350                 then
351                         match=`$grep ^$dev\\\*\\\.ctl[[:space:]] \
352                         $DEVPERMS_LOCAL | $sed 's/\*/\\\*/'`
353                 else
354                         match=`$grep ^$dev\\\*[[:space:]] $DEVPERMS_LOCAL | \
355                                 $sed 's/\*/\\\*/'`
356                 fi
357
358                 if [ "$match" ]
359                 then
360                         # Separate each field by one space character...
361                         match=`echo $match | $tr -s "[:space:]" " "`
362
363                         # ...and extract owenership and permissions.
364                         owner=`echo $match | $cut -d' ' -f2`
365                         perms=`echo $match | $cut -d' ' -f3`
366                 fi
367
368                 #-------------------------------------------------------------
369                 # Restore "plain" device name (no prepending subdir name).
370                 #-------------------------------------------------------------
371
372                 dev=$tmpdev
373         fi
374
375         #---------------------------------------------------------------------
376         # Finally, set ownership and permissions.
377         #---------------------------------------------------------------------
378
379         $mknod $dev$unit $1 $2 $3 $owner
380         chmod $perms $dev$unit
381 }
382
383
384 #-----------------------------------------------------------------------------
385 # Convert tape (ctrl, unit, mode, access) to device minor number.
386 #-----------------------------------------------------------------------------
387
388 saminor()
389 {
390         echo $(($1 << 29 | ($2 / 16) << 16 | ($2 % 16) << 4 | $3 << 2 | $4))
391 }
392
393
394 #-----------------------------------------------------------------------------
395 # Convert the last character of a tty name to a device minor number.
396 #-----------------------------------------------------------------------------
397
398 ttyminor()
399 {
400         case $1 in
401         [0-9]) m=$1;;
402         a) m=10;; b) m=11;; c) m=12;; d) m=13;;
403         e) m=14;; f) m=15;; g) m=16;; h) m=17;;
404         i) m=18;; j) m=19;; k) m=20;; l) m=21;;
405         m) m=22;; n) m=23;; o) m=24;; p) m=25;;
406         q) m=26;; r) m=27;; s) m=28;; t) m=29;;
407         u) m=30;; v) m=31;;
408         *) m="?";;
409         esac
410
411         echo $m
412 }
413
414
415 #-----------------------------------------------------------------------------
416 # Convert a unit number to a device minor number.
417 #-----------------------------------------------------------------------------
418
419 unit2minor()
420 {
421         echo $(((($1 >> 8) << 16) | ($1 % 256)))
422 }
423
424
425 #-----------------------------------------------------------------------------
426 # Stallion devices need some (weird) special treatment.
427 #-----------------------------------------------------------------------------
428
429 stallion()
430 {
431         major=$1
432         letter=$2
433         card=$3
434         iscallout=$4
435
436         port=0
437         maxport=8
438         pref=tty
439         owner=
440         minorbase=0
441
442         if [ $iscallout -gt 0 ]
443         then
444                 pref=cua
445                 owner=uucp:dialer
446                 minorbase=128
447         fi
448
449         case "$card" in 
450         [0-7]);;
451             *) die 1 "Invalid stl card number $card";;
452         esac
453
454         # Make the mem interface for extracting stats & loading microcode.
455         # 0x1000000 + card number
456         mknod staliomem $card c $major 0x0100000$card
457
458         while [ $port -lt $maxport ]
459         do
460                 minor=$(($minorbase + $card * 1048576 + $port))
461
462                 [ $port -lt 32 ] || minor=$(($minor + 65504))
463
464                 unit=$(($card * 64 + $port))
465
466                 mknod ${pref}${letter}  $unit c $major $minor $owner
467                 mknod ${pref}i${letter} $unit c $major $(($minor + 32)) $owner
468                 mknod ${pref}l${letter} $unit c $major $(($minor + 64)) $owner
469
470                 port=$(($port + 1))
471         done
472 }
473
474
475 #-----------------------------------------------------------------------------
476 # Do it.
477 #-----------------------------------------------------------------------------
478
479 for i in $*; do
480 case $i in
481
482 all)
483         rm -f *.compat
484         sh MAKEDEV std                                  # standard
485         sh MAKEDEV fd0 fd1                              # bdev, floppy disk
486         sh MAKEDEV da0 da1 da2 da3 da4 da5 da6 da7      # bdev, SCSI disk
487         sh MAKEDEV da8 da9 da10 da11 da12 da13 da14     # bdev, SCSI disk
488         sh MAKEDEV da15                                 # bdev, SCSI disk
489         sh MAKEDEV ccd0 ccd1 ccd2 ccd3                  # ccd disk
490         sh MAKEDEV ata                                  # cdev, ATA control
491         sh MAKEDEV ad0 ad1 ad2 ad3 ad4 ad5 ad6 ad7      # bdev, ATA disk
492         sh MAKEDEV ar0 ar1                              # bdev, ATA RAID disk
493         sh MAKEDEV acd0 afd0 ast0                       # bdev, ATAPI devices
494         sh MAKEDEV vn0                                  # bdev, virtual disk
495         sh MAKEDEV vkd0                                 # bdev, virtual disk
496         sh MAKEDEV cd0                                  # bdev, cdrom
497         sh MAKEDEV sa0 wt0                              # bdev, tape
498         sh MAKEDEV vty12                                # cdev, virtual tty
499         sh MAKEDEV cuaa0 cuaa1 cuaa2 cuaa3              # cdev, serial tty
500         sh MAKEDEV pty0                                 # cdev, pseudo tty
501         sh MAKEDEV ttyd0 ttyd1 ttyd2 ttyd3              # cdev, serial tty
502         sh MAKEDEV kbd0 kbd1                            # cdev, keyboard
503         sh MAKEDEV mse0 psm0 jogdial sysmouse           # cdev, mouse
504         sh MAKEDEV pcaudio speaker snd0                 # cdev, noise
505         sh MAKEDEV ipsd0                                # cdev, ServeRAID disk
506         sh MAKEDEV lpt0 lpt1 lpt2                       # cdev, printer
507         sh MAKEDEV ppi0 ppi1 ppi2                       # cdev, parallel port
508         sh MAKEDEV iic0 iic1                            # cdev, I2C device
509         sh MAKEDEV smb0 smb1                            # cdev, SMBus device
510         sh MAKEDEV usb usb0 uhid0 ums0 ulpt0 ugen0      # cdev, USB devices
511         sh MAKEDEV usb1 uhid1 ums1 ulpt1 ugen1          # cdev, USB devices
512         sh MAKEDEV usb2 usb3 usb4 usb5                  # cdev, USB devices
513         sh MAKEDEV urio0 uscanner0 umodem0              # cdev, USB devices too
514         sh MAKEDEV bpf0 bpf1 bpf2 bpf3                  # cdev, network
515         sh MAKEDEV ipl tun0 tun1 tun2 tun3              # cdev, network
516         sh MAKEDEV tap0 tap1 tap2 tap3                  # cdev, network
517         sh MAKEDEV ch0 perfmon tw0                      # cdev, miscellaneous
518         sh MAKEDEV acpi                                 # cdev, laptop
519         sh MAKEDEV apm apmctl card0 card1 card2 card3   # cdev, laptop
520         sh MAKEDEV pass4 xpt2                           # cdev, CAM
521         sh MAKEDEV i4b i4bctl i4btrc0 i4btrc1           # cdev, ISDN
522         sh MAKEDEV i4btel0 i4btel1 i4bteld0 i4bteld1    # cdev, ISDN
523         sh MAKEDEV i4brbch0 i4brbch1                    # cdev, ISDN
524         sh MAKEDEV agpgart                              # cdev, AGP
525         sh MAKEDEV nsmb0                                # cdev, SMB/CIFS
526         sh MAKEDEV twed0                                # 3ware
527         sh MAKEDEV crypto                               # cdev, crypto
528         sh MAKEDEV fw0                                  # cdev, firewire
529         sh MAKEDEV dcons                                # cdev, dcons
530         sh MAKEDEV pf                                   # pf
531         ;;
532
533
534 #-----------------------------------------------------------------------------
535 # A much restricted set of the above, to save precious i-nodes on the
536 # fixit floppy
537 #-----------------------------------------------------------------------------
538
539 fixit)
540         sh MAKEDEV std                                  # standard
541         sh MAKEDEV fd0                                  # bdev, floppy disk
542         sh MAKEDEV da0                                  # bdev, SCSI disk
543         sh MAKEDEV ad0                                  # bdev, ATA disk
544         sh MAKEDEV acd0 afd0 ast0                       # bdev, ATAPI devices
545         sh MAKEDEV vn0                                  # bdev, virtual disk
546         sh MAKEDEV vkd0                                 # bdev, virtual disk
547         sh MAKEDEV cd0                                  # bdev, cdrom
548         sh MAKEDEV sa0                                  # bdev, tape
549         sh MAKEDEV vty2                                 # cdev, virtual tty
550         sh MAKEDEV cuaa0                                # cdev, serial tty
551         sh MAKEDEV pty0                                 # cdev, pseudo tty
552         sh MAKEDEV ttyd0                                # cdev, serial tty
553         sh MAKEDEV kbd0                                 # cdev, keyboard
554         sh MAKEDEV mse0 psm0 sysmouse                   # cdev, mouse
555         sh MAKEDEV lpt0                                 # cdev, printer
556         sh MAKEDEV ppi0                                 # cdev, parallel port
557         sh MAKEDEV iic0                                 # cdev, I2C device
558         sh MAKEDEV smb0                                 # cdev, SMBus device
559         sh MAKEDEV ums0                                 # cdev, USB devices
560         sh MAKEDEV tun0                                 # cdev, network
561         sh MAKEDEV tap0                                 # cdev, network
562         sh MAKEDEV ch0                                  # cdev, miscellaneous
563         sh MAKEDEV apm apmctl card0                     # cdev, laptop
564         sh MAKEDEV pass1 xpt1                           # cdev, CAM
565         sh MAKEDEV i4b i4bctl i4btrc0 i4btrc1           # cdev, ISDN
566         sh MAKEDEV i4btel0 i4bteld0                     # cdev, ISDN
567         sh MAKEDEV i4brbch0                             # cdev, ISDN
568         rm -f fd/[1-9]?
569         ;;
570
571 #-----------------------------------------------------------------------------
572 # Basic device node set.
573 #-----------------------------------------------------------------------------
574
575 std)
576         mknod console "" c 0 0
577         mknod kmem    "" c 2 1 root:kmem 640
578         mknod mem     "" c 2 0 root:kmem 640
579         mknod null    "" c 2 2 root:wheel 666
580         mknod random  "" c 2 3 root:wheel 644
581         mknod urandom "" c 2 4 root:wheel 644
582         mknod zero    "" c 2 12 root:wheel 666
583         mknod io      "" c 2 14
584         mknod tty     "" c 1 0 root:wheel 666
585         mknod klog    "" c 7 0
586         mknod stdin   "" c 22 0 root:wheel 666
587         mknod stdout  "" c 22 1 root:wheel 666
588         mknod stderr  "" c 22 2 root:wheel 666
589         mknod pci     "" c 78 0 root:wheel 644
590
591
592         #---------------------------------------------------------------------  
593         # Create floppy disk nodes in /dev/fd
594         #---------------------------------------------------------------------  
595
596         mkdir -p fd
597
598         (cd fd &&
599          i=0   &&
600          while [ $i -lt 64 ]
601          do
602                 mknod $i "" c 22 $i root:wheel 666
603
604                 i=$(($i + 1))
605          done)
606
607         chmod 555 fd
608         ;;
609
610 #-----------------------------------------------------------------------------
611
612 jail)
613         sh MAKEDEV std pty0
614
615         rm mem kmem pci io klog console
616
617         ln -sf null mem
618         ln -sf null kmem
619         ln -sf null console
620         ;;
621
622 #-----------------------------------------------------------------------------
623
624 mach-4)
625         mknod iopl     "" c 22 0
626         mknod kbd      "" c 23 0
627         mknod mouse    "" c 24 0
628         mknod time     "" c 25 0
629         mknod timezone "" c 26 0
630         ;;
631
632 #-----------------------------------------------------------------------------
633
634 wt*)
635         u=`expr $i : '..\(.*\)'`
636
637         [ "$u" ] || u=0
638
639         # Default density, 512b blocks
640         mknod rwt  $u  c 10 $((0 + $u))  root:operator 660
641         mknod nrwt $u  c 10 $((4 + $u))  root:operator 660
642
643         # Default density, 1024b blocks
644 #       mknod rWt  $u    c 10 $((64 + $u)) root:operator 660
645 #       mknod nrWt $u    c 10 $((68 + $u)) root:operator 660
646         mknod rwt  ${u}b c 10 $((16 + $u)) root:operator 660    # 60 MB
647         mknod nrwt ${u}b c 10 $((20 + $u)) root:operator 660
648         mknod rwt  ${u}c c 10 $((24 + $u)) root:operator 660    # 120 MB
649         mknod nrwt ${u}c c 10 $((28 + $u)) root:operator 660
650         mknod rwt  ${u}d c 10 $((32 + $u)) root:operator 660    # 150 MB
651         mknod nrwt ${u}d c 10 $((36 + $u)) root:operator 660
652 #       mknod rwt  ${u}e c 10 $((40 + $u)) root:operator 660    # 300 MB?
653 #       mknod nrwt ${u}e c 10 $((44 + $u)) root:operator 660
654 #       mknod rwt  ${u}f c 10 $((48 + $u)) root:operator 660    # 600 MB?
655 #       mknod nrwt ${u}f c 10 $((52 + $u)) root:operator 660
656         ;;
657
658 #-----------------------------------------------------------------------------
659
660 aacd*s*|acd*s*|ad*s*|ar*s*|afd*s*|amrd*s*|ccd*s*|da*s*|fd*s*|fla*s*|idad*s*|ipsd*s*|md*s*|mlxd*s*|pst*s*|twed*s*|vn*s*|vkd*s*)
661         case $i in
662         aacd*s*) name=aacd; chr=151;;
663         acd*s*)  name=acd;  chr=117;;
664         ad*s*)   name=ad;   chr=116;;
665         ar*s*)   name=ar;   chr=157;;
666         afd*s*)  name=afd;  chr=118;;
667         amrd*s*) name=amrd; chr=133;;
668         ccd*s*)  name=ccd;  chr=74;;
669         da*s*)   name=da;   chr=13;;
670         fd*s*)   name=fd;   chr=9;;
671         fla*s*)  name=fla;  chr=102;;
672         idad*s*) name=idad; chr=109;;
673         ipsd*s*) name=ipsd; chr=176;;
674         md*s*)   name=md;   chr=95;;
675         mlxd*s*) name=mlxd; chr=131;;
676         pst*s*)  name=pst;  chr=168;;
677         twed*s*) name=twed; chr=147;;
678         vn*s*)   name=vn;   chr=43;;
679         vkd*s*)  name=vkd;  chr=97;;
680         esac
681
682         case $i in
683         aacd*s*|amrd*s*|idad*s*|ipsd*s*|mlxd*s*|twed*s*)
684                 unit=`expr $i  : '....\([0-9]*\)s'`
685                 slice=`expr $i : '....[0-9]*s\([0-9]*\)'`
686                 part=`expr $i  : '....[0-9]*s[0-9]*\(.*\)'`
687                 ;;
688
689         acd*s*|afd*s*|ccd*s*|fla*s*|pst*s*|wfd*s*|vkd*s*)
690                 unit=`expr $i  : '...\([0-9]*\)s'`
691                 slice=`expr $i : '...[0-9]*s\([0-9]*\)'`
692                 part=`expr $i  : '...[0-9]*s[0-9]*\(.*\)'`
693                 ;;
694         *)
695                 unit=`expr $i  : '..\([0-9]*\)s'`
696                 slice=`expr $i : '..[0-9]*s\([0-9]*\)'`
697                 part=`expr $i  : '..[0-9]*s[0-9]*\(.*\)'`
698                 ;;
699         esac
700
701         case $unit in
702         [0-9]|[0-9][0-9]|[0-4][0-9][0-9]|50[0-9]|51[0-1])
703                 case $slice in
704                 [0-9]|[1-2][0-9]|30)
705                         # [no s*] == whole-disk slice (slice #1 in minor)
706                         # s0 == slice #0 in minor (compatibility slice)
707                         # s1 == slice #2 in minor
708                         # s2 == slice #3 in minor
709                         # etc..
710                         #
711                         # set slice to slice-in-minor-number
712                         oldslice=$slice
713                         if [ $oldslice -eq 0 ]; then
714                             slice=$(($oldslice))
715                         else
716                             slice=$(($slice+1))
717                         fi
718                         slicename=`dkitos $slice`
719                         minor=`ndkminor $unit $slice 255`
720                         mknod  ${name} $unit$slicename c $chr $minor \
721                                 root:operator 640
722
723                         # raw device names are extinct
724                         rm -f r$name$unit$slicename
725
726                         # get rid of old compatibility devices, the new
727                         # ones use 's0', e.g. da0s0a
728                         for i in a b c d e f g h i j k l m n o p
729                         do
730                             rm -f $name$unit$i
731                         done
732
733                         case $part in [a-p])
734
735                         for part in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
736                         do
737                                 minor=`ndkminor $unit $slice $part`
738                                 partname=`dkitop $part`
739                                 mknod $name $unit$slicename$partname \
740                                       c $chr $minor root:operator 640
741                                 rm -f r$name$unit$slicename$partname
742                         done
743                         ;;
744
745                         "") ;;
746                         *) echo bad partition for disk in: $i
747                         ;;
748                         esac
749                         ;;
750                 *)
751                         echo bad slice for disk in: $i
752                         ;;
753                 esac
754                 ;;
755         *)
756                 echo bad unit for disk in: $i "(unit=$unit, slice=$slice, part=$part)"
757                 ;;
758         esac
759         ;;
760
761 #-----------------------------------------------------------------------------
762
763 control-fd*)
764         unit=`expr $i : '..........\(.*\)'`
765         name=fd; chr=9
766
767         case $unit in
768         0|1|2|3)
769                 minor=`ndkminor $unit 1 129`
770                 mknod $name ${unit}.1720 c $chr $minor
771                 rm -f r${name}${unit}.1720
772
773                 minor=`ndkminor $unit 1 130`
774                 mknod $name ${unit}.1480 c $chr $minor
775                 rm -f r${name}${unit}.1480
776
777                 minor=`ndkminor $unit 1 131`
778                 mknod $name ${unit}.1440 c $chr $minor
779                 rm -f r${name}${unit}.1440
780
781                 minor=`ndkminor $unit 1 132`
782                 mknod $name ${unit}.1200 c $chr $minor
783                 rm -f r${name}${unit}.1200
784
785                 minor=`ndkminor $unit 1 133`
786                 mknod $name ${unit}.820 c $chr $minor
787                 rm -f r${name}${unit}.820
788
789                 minor=`ndkminor $unit 1 134`
790                 mknod $name ${unit}.800 c $chr $minor
791                 rm -f r${name}${unit}.800
792
793                 minor=`ndkminor $unit 1 135`
794                 mknod $name ${unit}.720 c $chr $minor
795                 rm -f r${name}${unit}.720
796
797                 minor=`ndkminor $unit 1 136`
798                 mknod $name ${unit}.360 c $chr $minor
799                 rm -f r${name}${unit}.360
800
801                 minor=`ndkminor $unit 1 137`
802                 mknod $name ${unit}.640 c $chr $minor
803                 rm -f r${name}${unit}.640
804
805                 minor=`ndkminor $unit 1 138`
806                 mknod $name ${unit}.1232 c $chr $minor
807                 rm -f r${name}${unit}.1232
808                 ;;
809         *)
810                 echo bad unit for disk in: $i
811                 ;;
812         esac
813         ;;
814
815 #-----------------------------------------------------------------------------
816
817 acd*t*)
818         units=`expr $i : '...\(.*\)t'`;
819         tracks=`expr $i : '.*t\(.*\)'`;
820         name=acd;
821         chr=117;
822
823         [ "$units"  ] || units=0
824         [ "$tracks" ] || tracks=100
825
826         if [ "$units" -le 31 -a "$tracks" -le 169 ]
827         then
828                 i=0
829                 while [ $i -le $units ]
830                 do
831                         dname=$name$i
832                         rm -rf ${dname}t*
833
834                         j=1
835                         while [ $j -le $tracks ]
836                         do
837                                 # cd unit tracks use the compatibility slice
838                                 # and partition numbers 129+ for tracks 1+.
839                                 #
840                                 minor=`ndkminor $i 1 $(($j + 128))`
841                                 mknod ${dname}t $j c $chr $minor \
842                                         root:operator 640
843                                 j=$(($j + 1))
844                         done
845
846                         i=$(($i + 1))
847                 done
848         else
849                 echo "$i is invalid -- can't have more than 32 cd devices or 169 tracks"
850         fi
851         ;;
852
853 #-----------------------------------------------------------------------------
854
855 aacd*|acd*|ad*|ar*|afd*|amrd*|ccd*|da*|fd*|fla*|idad*|ipsd*|md*|mlxd*|pst*|twed*|vn*|vkd*)
856         doslices=1
857         case $i in
858         aacd*) name=aacd; chr=151;;
859         acd*)  name=acd;  chr=117; doslices=0;;
860         ad*)   name=ad;   chr=116;;
861         ar*)   name=ar;   chr=157;;
862         afd*)  name=afd;  chr=118;;
863         amrd*) name=amrd; chr=133;;
864         da*)   name=da;   chr=13;;
865         fd*)   name=fd;   chr=9;;
866         ccd*)  name=ccd;  chr=74;;
867         fla*)  name=fla;  chr=102;;
868         idad*) name=idad; chr=109;;
869         ipsd*) name=ipsd; chr=176;;
870         md*)   name=md;   chr=95;;
871         mlxd*) name=mlxd; chr=131;;
872         pst*)  name=pst;  chr=168;;
873         twed*) name=twed; chr=147;;
874         vn*)   name=vn;   chr=43;;
875         vkd*)  name=vkd;  chr=97;;
876         esac
877
878         case $i in
879         aacd*|amrd*|idad*|ipsd*|mlxd*|twed*)
880                 unit=`expr $i : '....\(.*\)'`
881                 ;;
882         acd*|afd*|ccd*|fla*|pst*|wfd*|vkd*)
883                 unit=`expr $i : '...\(.*\)'`
884                 ;;
885         *)
886                 unit=`expr $i : '..\(.*\)'`
887                 ;;
888         esac
889
890         case $i in
891         fd*)
892                 sh MAKEDEV control-$name$unit
893                 ;;
894         esac
895
896         case $unit in
897         [0-9]|[0-9][0-9]|[0-4][0-9][0-9]|50[0-9]|51[0-1])
898                 if [ "$doslices" -gt 0 ]; then
899                         minor=`ndkminor $unit 1 255`
900                         mknod  ${name} ${unit} c $chr $minor \
901                                 root:operator 640
902                         for slicepartname in s0h s1h s2 s3 s4
903                         do
904                                 sh MAKEDEV $name$unit$slicepartname
905                         done
906                 else
907                         minor=`ndkminor $unit 1 255`
908                         mknod  ${name} ${unit} c $chr $minor \
909                                 root:operator 640
910                         minor=`ndkminor $unit 0 0`
911                         mknod  ${name} ${unit}a c $chr $minor \
912                                 root:operator 640
913                         minor=`ndkminor $unit 0 2`
914                         mknod  ${name} ${unit}c c $chr $minor \
915                                 root:operator 640
916                 fi
917                 ;;
918         *)
919                 echo bad unit for disk in: $i
920                 ;;
921         esac
922         ;;
923
924 #-----------------------------------------------------------------------------
925
926 pt[0-9]*)
927         chr=61
928         name=pt
929         unit=`expr $i : 'pt\([0-9][0-9]*\)'`
930
931         [ "$unit" ] || unit=0
932
933         unit=$(($unit + 1 - 1))
934         mknod $name $unit c $chr `unit2minor $unit`
935         ;;
936
937 #-----------------------------------------------------------------------------
938
939 ses[0-9]*)
940         chr=110
941         name=ses
942         unit=`expr $i : 'ses\([0-9][0-9]*\)'`
943
944         [ "$unit" ] || unit=0
945
946         unit=$(($unit + 1 - 1))
947         mknod $name $unit c $chr `unit2minor $unit`
948         ;;
949
950 #-----------------------------------------------------------------------------
951
952 targ[0-9]*)
953         chr=65
954         name=targ
955         unit=`expr $i : 'targ\([0-9][0-9]*\)'`
956
957         [ "$unit" ] || unit=0
958
959         unit=$(($unit + 1 - 1))
960
961         mknod $name $unit c $chr `unit2minor $unit`
962         mknod ${name}.ctl "" c $chr 0xffff00ff
963         ;;
964
965 #-----------------------------------------------------------------------------
966
967 # CAM transport layer device
968 xpt*)
969         # This major number is temporary
970         chr=104
971         name=xpt
972         units=`expr $i : 'xpt\(.*\)'`
973
974         [ "$units" ] || units=1
975
976         i=0
977         while [ $i -lt $units ]
978         do
979                 rm -rf $name$i
980
981                 mknod $name $i c $chr `unit2minor $i` root:operator
982
983                 i=$(($i + 1))
984         done
985         ;;
986
987 #-----------------------------------------------------------------------------
988
989 pass*)
990         # This major number is temporary
991         chr=31
992         name=pass
993         units=`expr $i : 'pass\(.*\)'`
994
995         [ "$units" ] || units=1
996
997         i=0
998         while [ $i -lt $units ]
999         do
1000                 rm -rf $name$i
1001
1002                 mknod $name $i c $chr `unit2minor $i` root:operator
1003
1004                 i=$(($i + 1))
1005         done
1006         ;;
1007
1008 #-----------------------------------------------------------------------------
1009
1010 pty*)
1011         class=`expr $i : 'pty\(.*\)'`
1012         case $class in
1013         0) offset=0   name=p;;
1014         1) offset=32  name=q;;
1015         2) offset=64  name=r;;
1016         3) offset=96  name=s;;
1017         4) offset=128 name=P;;  # Note that xterm (at least) only look at p-s.
1018         5) offset=160 name=Q;;
1019         6) offset=192 name=R;;
1020         7) offset=224 name=S;;
1021         *) echo bad unit for pty in: $i;;
1022         esac
1023
1024         case $class in
1025         0|1|2|3|4|5|6|7)
1026                 i=0
1027                 while [ $i -lt 32 ]
1028                 do
1029                         c=$(echo 0123456789abcdefghijklmnopqrstuv |
1030                             dd bs=1 skip=$i count=1 2>/dev/null)
1031
1032                         mknod tty$name $c c 5 $(($offset + $i)) root:wheel 666
1033                         mknod pty$name $c c 6 $(($offset + $i)) root:wheel 666
1034
1035                         i=$(($i + 1))
1036                 done
1037                 ;;
1038         esac
1039         ;;
1040
1041 #-----------------------------------------------------------------------------
1042
1043 sa*)
1044         unit=`expr $i : '..\(.*\)'`
1045         chr=14
1046
1047         case $unit in
1048         [0-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9])
1049                 mknod sa ${unit}.ctl c $chr `saminor 1 ${unit} 0 0` \
1050                         root:wheel 660
1051                 ln -f sa${unit}.ctl rsa${unit}.ctl
1052
1053                 for m in 0 1 2 3
1054                 do
1055                         mknod sa ${unit}.$m c $chr \
1056                             `saminor 0 $unit $m 0` root:operator 660
1057                         ln -f sa${unit}.$m rsa${unit}.$m
1058
1059                         mknod nsa ${unit}.$m c $chr \
1060                             `saminor 0 $unit $m 1` root:operator 660
1061                         ln -f nsa${unit}.$m nrsa${unit}.$m
1062
1063                         mknod esa ${unit}.$m c $chr \
1064                             `saminor 0 $unit $m 2` root:operator 660
1065                         ln -f esa${unit}.$m ersa${unit}.$m
1066                 done
1067
1068                 ln -f sa${unit}.0  sa$unit
1069                 ln -f sa${unit}.0  rsa${unit}.0
1070                 ln -f sa${unit}.0  rsa$unit
1071                 ln -f nsa${unit}.0 nsa$unit
1072                 ln -f nsa${unit}.0 nrsa${unit}.0
1073                 ln -f nsa${unit}.0 nrsa$unit
1074                 ln -f esa${unit}.0 esa$unit
1075                 ln -f esa${unit}.0 ersa${unit}.0
1076                 ln -f esa${unit}.0 ersa$unit
1077                 ;;
1078         *)
1079                 echo bad unit for tape in: $i
1080                 ;;
1081         esac
1082         ;;
1083
1084 #-----------------------------------------------------------------------------
1085
1086 ch*)
1087         unit=`expr $i : '..\(.*\)'`
1088
1089         case $i in
1090         ch*) name=ch;  chr=17;;
1091         esac
1092
1093         case $unit in
1094         0|1|2|3|4|5|6)
1095                 mknod $name $unit c $chr $unit root:operator 640
1096                 ;;
1097         *)
1098                 echo bad unit for media changer in: $i
1099                 ;;
1100         esac
1101         ;;
1102
1103 #-----------------------------------------------------------------------------
1104
1105 ata)
1106         mknod ata "" c 159 0 root:operator
1107         ;;
1108
1109 #-----------------------------------------------------------------------------
1110
1111 ast*)
1112         unit=`expr $i : '...\(.*\)'`
1113         chr=119
1114
1115         case $unit in
1116         0|1|2|3)
1117                 mknod ast  $unit c $chr $(($unit * 8 + 0)) root:operator 640
1118                 mknod nast $unit c $chr $(($unit * 8 + 1)) root:operator 640
1119                 ;;
1120         *)
1121                 echo bad unit for tape in: $i
1122                 ;;
1123         esac
1124         ;;
1125
1126 #-----------------------------------------------------------------------------
1127
1128 cd*|vcd*)
1129         case $i in
1130         cd*)  units=`expr $i : '..\(.*\)'` ; name=cd;  chr=15;;
1131         vcd*)  units=`expr $i : '...\(.*\)'` ; name=vcd;  chr=98;;
1132         esac
1133
1134         [ "$units" ] || units=0
1135
1136         if [ "$units" -le 31 ]
1137         then
1138                 i=0
1139                 while [ $i -le $units ]
1140                 do
1141                         dname=$name$i
1142                         rm -rf ${dname}*
1143
1144                         case $name in 
1145                         acd)
1146                                 mknod $name ${i} c $chr $(($i * 8 )) \
1147                                         root:operator 640
1148                                 ln -f ${dname} ${dname}a
1149                                 ln -f ${dname} ${dname}c
1150                                 ;;
1151                         *)
1152                                 mknod $name ${i}a c $chr $(($i * 8)) \
1153                                         root:operator 640
1154                                 mknod $name ${i}c c $chr $(($i * 8 + 2)) \
1155                                         root:operator 640
1156                                 ;;
1157                         esac
1158
1159                         rm -f r${dname}a
1160                         rm -f r${dname}c
1161
1162                         i=$(($i + 1))
1163                 done
1164         else
1165                 echo "$i is invalid -- can't have more than 32 cd devices"
1166         fi
1167         ;;
1168
1169 #-----------------------------------------------------------------------------
1170
1171 iic*)
1172         unit=`expr $i : 'iic\(.*\)'`
1173
1174         mknod iic $unit c 105 `unit2minor $unit`
1175         ;;
1176
1177 #-----------------------------------------------------------------------------
1178
1179 smb*)
1180         unit=`expr $i : 'smb\(.*\)'`
1181
1182         mknod smb $unit c 106 `unit2minor $unit`
1183         ;;
1184
1185 #-----------------------------------------------------------------------------
1186
1187 pcfclock*)
1188         unit=`expr $i : 'pcfclock\(.*\)'`
1189
1190         mknod pcfclock $unit c 140 `unit2minor $unit`
1191         ;;
1192
1193 #-----------------------------------------------------------------------------
1194
1195 ppi*)
1196         unit=`expr $i : 'ppi\(.*\)'`
1197
1198         mknod ppi $unit c 82 `unit2minor $unit`
1199         ;;
1200
1201 #-----------------------------------------------------------------------------
1202
1203 pps*)
1204         unit=`expr $i : 'pps\(.*\)'`
1205
1206         mknod pps $unit c 89 `unit2minor $unit`
1207         ;;
1208
1209 #-----------------------------------------------------------------------------
1210
1211 usb)
1212         mknod usb "" c 108 255 root:operator 0660
1213         ;;
1214
1215 #-----------------------------------------------------------------------------
1216
1217 usb*)
1218         unit=`expr $i : 'usb\(.*\)'`
1219
1220         mknod usb $unit c 108 `unit2minor $unit` root:operator 660
1221         ;;
1222
1223 #-----------------------------------------------------------------------------
1224
1225 ucom*)
1226         unit=`expr $i : 'ucom\(.*\)'`
1227
1228         minor=$(($unit + 128))
1229         minor=`unit2minor $(($unit + 128))`
1230
1231         mknod ucom $unit c 138 $minor uucp:dialer 660
1232         ;;
1233
1234 #-----------------------------------------------------------------------------
1235
1236 uhid*)
1237         unit=`expr $i : 'uhid\(.*\)'`
1238
1239         mknod uhid $unit c 122 `unit2minor $unit` root:operator 660
1240         ;;
1241
1242 #-----------------------------------------------------------------------------
1243
1244 ums*)
1245         unit=`expr $i : 'ums\(.*\)'`
1246
1247         mknod ums $unit c 111 `unit2minor $unit` root:operator 660
1248         ;;
1249
1250 #-----------------------------------------------------------------------------
1251
1252 ulpt*)
1253         unit=`expr $i : 'ulpt\(.*\)'`
1254
1255         minor=`unit2minor $unit`
1256         mknod ulpt $unit c 113 $minor
1257
1258         minor=`unit2minor $(($unit + 64))`
1259         mknod unlpt $unit c 113 $minor          # and the 'no prime' version
1260         ;;
1261
1262 #-----------------------------------------------------------------------------
1263
1264 ugen*)
1265         unit=`expr $i : 'ugen\([0-9][0-9]*\)'`
1266         endpoint=`expr $i : 'ugen.*\.\([0-9][0-9]*\)'`
1267
1268         [ "$unit" ] || echo $i - Invalid unit number
1269
1270         if [ -z "${endpoint}" ]         # ugen0 & ugen0.1 - ugen0.15
1271         then
1272                 mknod ugen $unit c 114 `unit2minor $(($unit * 16))` \
1273                         root:operator 660
1274                 i=1
1275                 while [ $i -lt 16 ]
1276                 do
1277                         mknod ugen $unit.$i c 114 `unit2minor \
1278                                 $(($unit * 16 + $i))` root:operator 660
1279
1280                         i=$(($i + 1))
1281                 done
1282         else
1283                 minor=`unit2minor $(($unit * 16 + $endpoint))`
1284                 mknod ugen $unit.$endpoint c 114 $minor root:operator 660
1285         fi
1286         ;;
1287
1288 #-----------------------------------------------------------------------------
1289
1290 urio*)
1291         unit=`expr $i : 'urio\(.*\)'`
1292
1293         mknod urio $unit c 143 `unit2minor $unit` root:operator 660
1294         ;;
1295
1296 #-----------------------------------------------------------------------------
1297
1298 uscanner*)
1299         unit=`expr $i : 'uscanner\(.*\)'`
1300
1301         mknod uscanner $unit c 156 `unit2minor $unit` root:operator 660
1302         ;;
1303
1304 #-----------------------------------------------------------------------------
1305
1306 umodem*)
1307         unit=`expr $i : 'umodem\(.*\)'`
1308
1309         mknod umodem $unit c 124 `unit2minor $unit` uucp:dialer 660
1310         ;;
1311
1312 #-----------------------------------------------------------------------------
1313
1314 lpt*)
1315         unit=`expr $i : 'lpt\(.*\)'`
1316
1317         mknod lpt $unit   c 16 `unit2minor $unit`
1318         mknod lpctl $unit c 16 `unit2minor $(($unit + 128))`
1319         ;;
1320
1321 #-----------------------------------------------------------------------------
1322
1323 vty*)
1324         chr=12
1325         units=`expr $i : 'vty\(.*\)'`
1326
1327         i=0
1328         while [ $i -lt $units ]
1329         do
1330                 mknod ttyv $(printf %01x $i) c $chr `unit2minor $i`
1331
1332                 i=$(($i + 1))
1333         done
1334
1335         ln -fs ttyv0 vga
1336         ;;
1337
1338 #-----------------------------------------------------------------------------
1339
1340 nmdm*)
1341         units=`expr $i : 'nmdm\(.*\)'`
1342         chr=18
1343
1344         i=0
1345         while [ $i -lt $units ]
1346         do
1347                 minor=`unit2minor $i`
1348                 minor=$(($minor + $minor))
1349                 mknod nmdm ${i}A c $chr $minor
1350                 mknod nmdm ${i}B c $chr $(($minor + 1))
1351
1352                 i=$(($i + 1))
1353         done
1354         ;;
1355
1356 #-----------------------------------------------------------------------------
1357
1358 bpf*)
1359         nbpf=`expr $i : 'bpf\(.*\)$'`
1360
1361         unit=0
1362         while [ $unit -le $nbpf ]
1363         do
1364                 mknod bpf $unit c 23 `unit2minor $unit`
1365
1366                 unit=$(($unit + 1))
1367         done
1368         ;;
1369
1370 #-----------------------------------------------------------------------------
1371
1372 speaker)
1373         mknod speaker "" c 26 0
1374         ;;
1375
1376 #-----------------------------------------------------------------------------
1377
1378 cua?|cuaa?|cuaa??)
1379         unit_low=`expr $i : 'cua.*\(.\)$'`
1380
1381         case $i in
1382         cua?|cuaa?)
1383                 unit_high=""
1384                 m_high=0
1385                 ;;
1386         cuaa??)
1387                 unit_high=`expr $i : 'cuaa\(.\).$'`
1388                 m_high=`ttyminor $unit_high`
1389                 ;;
1390         esac
1391
1392         unit=$unit_high$unit_low
1393         m=$(($m_high << 16 | `ttyminor $unit_low`))
1394
1395         mknod cuaa  $unit c 28 $(($m | 128)) uucp:dialer 660
1396         mknod cuaia $unit c 28 $(($m | 32 | 128)) uucp:dialer 660
1397         mknod cuala $unit c 28 $(($m | 64 | 128)) uucp:dialer 660
1398         ;;
1399
1400 #-----------------------------------------------------------------------------
1401
1402 crypto)
1403         mknod crypto "" c 70 0 root:operator 666
1404         ;;
1405
1406 #-----------------------------------------------------------------------------
1407
1408 pf)
1409         mknod pf "" c 73 0 root:operator 600
1410         ;;
1411
1412 #-----------------------------------------------------------------------------
1413
1414 fw?)
1415         unit=`expr $i : 'fw\(.\)$'`
1416
1417         for sub in 0 1 2 3
1418         do
1419                 minor=$(($unit << 16 | $sub))
1420                 mknod fw $unit.$sub c 127 $minor root:operator 660
1421                 mknod fwmem $unit.$sub c 127 $((1<<24 | $minor)) \
1422                         root:operator 660
1423         done
1424
1425         ln -sf fw$unit.0 fw$unit
1426         ln -sf fwmem$unit.0 fwmem$unit
1427         ;;
1428
1429 #-----------------------------------------------------------------------------
1430
1431 dcons)
1432         mknod dcons "" c 184 0 root:wheel 600
1433         ;;
1434
1435 #-----------------------------------------------------------------------------
1436
1437 tty?|tty0?|ttyd?|ttyd??)
1438         unit_low=`expr $i : 'tty.*\(.\)$'`
1439
1440         case $i in
1441         tty?|tty0?|ttyd?)
1442                 unit_high=""
1443                 m_high=0
1444                 ;;
1445         ttyd??)
1446                 unit_high=`expr $i : 'ttyd\(.\).$'`
1447                 m_high=`ttyminor $unit_high`
1448                 ;;
1449         esac
1450
1451         unit=$unit_high$unit_low
1452         m=$(($m_high << 16 | `ttyminor $unit_low`))
1453
1454         mknod ttyd $unit  c 28 $m
1455         mknod ttyid $unit c 28 $(($m | 32))
1456         mknod ttyld $unit c 28 $(($m | 64))
1457         ;;
1458
1459 #-----------------------------------------------------------------------------
1460
1461 cuac?)
1462         portlist="0 1 2 3 4 5 6 7 8 9 a b c d e f
1463                   g h i j k l m n o p q r s t u v"
1464         major=48
1465         card=`expr $i : 'cua.*\(.\)$'`
1466
1467         for unit in $portlist
1468         do
1469                 minor=`ttyminor $unit`
1470                 minor=$(($card * 65536 + $minor))
1471                 name=$card$unit
1472
1473                 mknod cuac $name  c $major $(($minor + 128)) uucp:dialer 660
1474                 mknod cuaic $name c $major $(($minor + 32 + 128)) \
1475                         uucp:dialer 660
1476                 mknod cualc $name c $major $(($minor + 64 + 128)) \
1477                         uucp:dialer 660
1478         done
1479         ;;
1480
1481 #-----------------------------------------------------------------------------
1482
1483 ttyc?)
1484         portlist="0 1 2 3 4 5 6 7 8 9 a b c d e f
1485                   g h i j k l m n o p q r s t u v"
1486         major=48
1487         card=`expr $i : 'tty.*\(.\)$'`
1488
1489         for unit in $portlist
1490         do
1491                 minor=`ttyminor $unit`
1492                 minor=$(($card * 65536 + $minor))
1493                 name=$card$unit
1494
1495                 mknod ttyc $name  c $major $minor
1496                 mknod ttyic $name c $major $(($minor + 32))
1497                 mknod ttylc $name c $major $(($minor + 64))
1498         done
1499         ;;
1500
1501 #-----------------------------------------------------------------------------
1502
1503 cuam?)
1504         unit=`expr $i : 'cua.*\(.\)$'`
1505
1506         m=`ttyminor $unit`
1507
1508         mknod cuam $unit c 63 $(($m + 128)) uucp:dialer 660
1509         ;;
1510
1511 #-----------------------------------------------------------------------------
1512
1513 ttym?)
1514         unit=`expr $i : 'tty.*\(.\)$'`
1515
1516         m=`ttyminor $unit`
1517
1518         mknod ttym $unit c 63 $m
1519         ;;
1520
1521 #-----------------------------------------------------------------------------
1522
1523 ttyA*)
1524         major=68
1525         nports=`expr $i : 'ttyA\(.*\)$'`
1526         port=1
1527
1528         while [ $port -le $nports ]
1529         do
1530                 minor=$(($port - 1))
1531                 name=$(printf %02d $port)
1532
1533                 mknod ttyA $name  c $major $minor
1534                 mknod ttyiA $name c $major $(($minor + 65536))
1535                 mknod ttylA $name c $major $(($minor + 131072))
1536
1537                 port=$(($port + 1))
1538         done
1539
1540         # For the user-mode control program, 'sicontrol'
1541         mknod si_control "" c 68 262144
1542         ;;
1543
1544 #-----------------------------------------------------------------------------
1545
1546 cuaA*)
1547         major=68
1548         nports=`expr $i : 'cuaA\(.*\)$'`
1549         port=1
1550
1551         while [ $port -le $nports ]
1552         do
1553                 minor=$(($port - 1))
1554                 name=$(printf %02d $port)
1555
1556                 mknod cuaA $name  c $major $(($minor + 128)) uucp:dialer 660
1557                 mknod cuaiA $name c $major $(($minor + 128 + 65536)) \
1558                     uucp:dialer 660
1559                 mknod cualA $name c $major $(($minor + 128 + 131072)) \
1560                     uucp:dialer 660
1561
1562                 port=$(($port + 1))
1563         done
1564         ;;
1565
1566 #-----------------------------------------------------------------------------
1567
1568 ttyD?)
1569         portlist="0 1 2 3 4 5 6 7 8 9 a b c d e f"
1570         major=58
1571         card=`expr $i : 'tty.*\(.\)$'`
1572
1573         for unit in $portlist
1574         do
1575                 minor=`ttyminor $unit`
1576                 minor=$(($card * 65536 + $minor))
1577                 name=$card$unit
1578
1579                 mknod ttyD  $name c $major $minor
1580                 mknod ttyiD $name c $major $(($minor + 32))
1581                 mknod ttylD $name c $major $(($minor + 64))
1582         done
1583         ;;
1584
1585 #-----------------------------------------------------------------------------
1586
1587 cuaD?)
1588         portlist="0 1 2 3 4 5 6 7 8 9 a b c d e f"
1589         major=58
1590         card=`expr $i : 'cua.*\(.\)$'`
1591
1592         for unit in $portlist
1593         do
1594                 minor=`ttyminor $unit`
1595                 minor=$(($card * 65536 + $minor))
1596                 name=$card$unit
1597
1598                 mknod cuaD $name c $major $(($minor + 128)) uucp:dialer 660
1599                 mknod cuaiD $name c $major $(($minor + 32 + 128)) \
1600                         uucp:dialer 660
1601                 mknod cualD $name c $major $(($minor + 64 + 128)) \
1602                         uucp:dialer 660
1603         done
1604         ;;
1605
1606 #-----------------------------------------------------------------------------
1607
1608 ttyE*)
1609         stallion 72 E `expr $i : 'tty.*\(.\)$'` 0
1610         ;;
1611 cuaE*)
1612         stallion 72 E `expr $i : 'cua.*\(.\)$'` 1
1613         ;;
1614 stl*)
1615         card=`expr $i : 'stl\(.\)$'`
1616         stallion 72 E $card 0
1617         stallion 72 E $card 1
1618         ;;
1619
1620 ttyF*)
1621         stallion 75 F `expr $i : 'tty.*\(.\)$'` 0
1622         ;;
1623 cuaF*)
1624         stallion 75 F `expr $i : 'cua.*\(.\)$'` 1
1625         ;;
1626 stli*)
1627         card=`expr $i : 'stl\(.\)$'`
1628         stallion 75 F $card 0
1629         stallion 75 F $card 1
1630         ;;
1631
1632 ttyM*)
1633         portlist="0 1 2 3 4 5 6 7 8 9 a b c d e f"
1634         modulelist="a b c d"
1635         major=101
1636         card=`expr $i : 'tty.*\(.\)$'`
1637
1638         for unit in $modulelist
1639         do
1640                 moduleminor=`ttyminor $unit`
1641                 moduleminor=$(($moduleminor % 10 * 16))
1642                 modulename=$unit
1643
1644                 for unit in $portlist
1645                 do
1646                         minor=`ttyminor $unit`
1647                         minor=$(($card * 65536 + $minor + $moduleminor))
1648                         name=$card$modulename$unit
1649
1650                         rm -f tty*M$name
1651
1652                         mknod ttyM $name  c $major $minor
1653                         mknod ttyiM $name c $major $(($minor + 64))
1654                         mknod ttylM $name c $major $(($minor + 128))
1655                 done
1656         done
1657         ;;
1658
1659 cuaM?)
1660         portlist="0 1 2 3 4 5 6 7 8 9 a b c d e f"
1661         modulelist="a b c d"
1662         major=101
1663         card=`expr $i : 'cua.*\(.\)$'`
1664
1665         for unit in $modulelist
1666         do
1667                 moduleminor=`ttyminor $unit`
1668                 moduleminor=$(($moduleminor % 10 * 16))
1669                 modulename=$unit
1670
1671                 for unit in $portlist
1672                 do
1673                         minor=`ttyminor $unit`
1674                         minor=$(($card * 65536 + $minor + $moduleminor))
1675                         name=$card$modulename$unit
1676
1677                         rm -f cua*M$name
1678
1679                         mknod cuaM $name c $major $(($minor + 262144)) \
1680                             uucp:dialer 660
1681                         mknod cuaiM $name c $major $(($minor + 64 + 262144)) \
1682                             uucp:dialer 660
1683                         mknod cualM $name c $major $(($minor + 128 + 262144)) \
1684                             uucp:dialer 660
1685                 done
1686         done
1687         ;;
1688
1689 ttyR?)
1690         major=81
1691         BOARD=1; Rnum=0
1692         MINOR=$(($BOARD * 65536))
1693         controllers=$(
1694         dmesg | while read first rest
1695         do
1696                 case "$first" in
1697                 RocketPort[0-4]) echo "$first"
1698                 ;;
1699                 esac
1700         done)
1701
1702         rm -f ttyR* ttyiR* ttylR*
1703
1704         for i in $controllers
1705         do
1706                 ndevices=$(
1707                 dmesg | while read first bar ports rest
1708                         do
1709                                 case "$first" in
1710                                 $i*) echo "$ports"
1711                                 ;;
1712                                 esac
1713                         done)
1714
1715                 echo -n "Creating $ndevices devices for $i: "
1716                 dev=0
1717
1718                 while [ $dev -lt $ndevices ]
1719                 do
1720                         mknod ttyR $Rnum c $major $MINOR
1721                         mknod ttyiR $Rnum c $major $(($MINOR + 32))
1722                         mknod ttylR $Rnum c $major $(($MINOR + 64))
1723
1724                         Rnum=$(($Rnum + 1))
1725                         MINOR=$(($MINOR + 1))
1726
1727                         dev=$(($dev + 1))
1728                 done
1729
1730                 BOARD=$(($BOARD + 1))
1731                 MINOR=$(($BOARD * 65536))
1732                 echo " "
1733         done
1734         ;;
1735
1736 cuaR?)
1737         major=81
1738         BOARD=1; Rnum=0
1739         MINOR=$(($BOARD * 65536))
1740         controllers=$(
1741                 dmesg | while read first rest
1742                         do
1743                                 case "$first" in
1744                                 RocketPort[0-4]) echo "$first"
1745                                 ;;
1746                                 esac
1747                         done)
1748
1749         rm -f cuaR* cuaiR* cualR*
1750
1751         for i in $controllers
1752         do
1753                 ndevices=$(
1754                 dmesg | while read first bar ports rest
1755                         do
1756                                 case "$first" in
1757                                 $i*) echo "$ports"
1758                                 ;;
1759                                 esac
1760                         done)
1761
1762                 echo -n "Creating $ndevices devices for $i: "
1763                 dev=0
1764
1765                 while [ $dev -lt $ndevices ]
1766                 do
1767                         mknod cuaR $Rnum c  $major $(($MINOR + 128)) \
1768                                 uucp:dialer 660
1769                         mknod cuaiR $Rnum c $major $(($MINOR + 128 + 32)) \
1770                                 uucp:dialer 660
1771                         mknod cualR $Rnum c $major $(($MINOR + 128 + 64)) \
1772                                 uucp:dialer 660
1773
1774                         Rnum=$(($Rnum + 1))
1775                         MINOR=$(($MINOR + 1))
1776
1777                         dev=$(($dev + 1))
1778                 done
1779
1780                 BOARD=$(($BOARD + 1))
1781                 MINOR=$(($BOARD * 65536))
1782                 echo " "
1783         done
1784         ;;
1785
1786 #-----------------------------------------------------------------------------
1787
1788 mse*)
1789         unit=`expr $i : 'mse\(.*\)'`
1790         chr=27
1791
1792         # Non-blocking for X11
1793         mknod mse $unit c $chr `unit2minor $(($unit * 2 + 1))`
1794         ;;
1795
1796 #-----------------------------------------------------------------------------
1797
1798 psm*)
1799         unit=`expr $i : 'psm\(.*\)'`
1800         chr=21
1801
1802         # Non-blocking for X11
1803         mknod psm $unit c $chr `unit2minor $(($unit * 2 + 1))`
1804         ;;
1805
1806 #-----------------------------------------------------------------------------
1807
1808 mouse*)
1809         name=`expr $i : 'mouse\(.*\)'`
1810
1811         [ -c $name ] || $0 $name        # Make the appropriate device
1812
1813         ln -fs $name mouse
1814         ;;
1815
1816 #-----------------------------------------------------------------------------
1817
1818 pcaudio)
1819         mknod pcaudio    "" c 24 0
1820         mknod pcaudioctl "" c 24 128
1821         ;;
1822
1823 #-----------------------------------------------------------------------------
1824
1825 socksys)
1826         mknod socksys "" c 41 0 root:wheel 666
1827         mknod spx     "" c 41 1 root:wheel 666
1828
1829         ln -fs socksys nfsd
1830         ;;
1831
1832 #-----------------------------------------------------------------------------
1833
1834 snd*)
1835
1836         unit=`expr $i : 'snd\(.*\)'`
1837         chr=30
1838
1839         ln -fs mixer$unit mixer
1840         ln -fs sequencer$unit sequencer
1841         ln -fs dsp$unit dsp
1842         ln -fs audio$unit audio
1843         ln -fs dspW$unit dspW
1844         ln -fs music$unit music
1845         ln -fs pss$unit pss
1846         ln -fs dsp$unit.0 dsp$unit
1847         ln -fs audio$unit.0 audio$unit
1848         ln -fs dspW$unit.0 dspW$unit
1849
1850         mknod mixer $unit c $chr `unit2minor $(($unit * 16 + 0))` \
1851                 root:wheel 666
1852         mknod sequencer $unit c $chr `unit2minor $(($unit * 16 + 1))` \
1853                 root:wheel 666
1854         mknod midi $unit c $chr `unit2minor $(($unit * 16 + 2))` \
1855                 root:wheel 666
1856
1857         for chn in 0 1 2 3
1858         do
1859                 minor=$(($chn * 65536 + $unit * 16))
1860
1861                 mknod dsp $unit.$chn   c $chr $(($minor + 3)) root:wheel 666
1862                 mknod audio $unit.$chn c $chr $(($minor + 4)) root:wheel 666
1863                 mknod dspW $unit.$chn  c $chr $(($minor + 5)) root:wheel 666
1864         done
1865
1866         mknod sndstat "" c $chr 6 root:wheel 666
1867         mknod music $unit c $chr `unit2minor $(($unit * 16 + 8))` root:wheel 666
1868         mknod pss $unit c $chr `unit2minor $(($unit * 16 + 9))` root:wheel 666
1869         ;;
1870
1871 #-----------------------------------------------------------------------------
1872
1873 vat)
1874         mknod vatio "" c 25 128 root:wheel 660
1875         ;;
1876
1877 #-----------------------------------------------------------------------------
1878
1879 gsc*)
1880         unit=`expr $i : 'gsc\(.*\)'`
1881
1882         mknod gsc $unit c 47 `unit2minor $unit` root:wheel 666
1883         mknod gsc ${unit}p c 47 `unit2minor $(($unit + 8))` root:wheel 666
1884         mknod gsc ${unit}d c 47 `unit2minor $(($unit + 32))` root:wheel 666
1885         mknod gsc ${unit}pd c 47 `unit2minor $(($unit + 40))` root:wheel 666
1886         ;;
1887
1888 #-----------------------------------------------------------------------------
1889
1890 acpi)
1891         mknod acpi "" c 152 0 root:operator 664
1892         ;;
1893
1894 #-----------------------------------------------------------------------------
1895
1896 apm)
1897         mknod apm "" c 39 0 root:operator 664
1898         ;;
1899
1900 #-----------------------------------------------------------------------------
1901
1902 apmctl)
1903         mknod apmctl "" c 39 8 root:operator 660
1904         ;;
1905
1906 #-----------------------------------------------------------------------------
1907
1908 card*)
1909         unit=`expr $i : 'card\(.*\)'`
1910         chr=50
1911
1912         mknod card $unit c $chr `unit2minor $unit` root:wheel 644
1913         ;;
1914
1915 #-----------------------------------------------------------------------------
1916
1917 ttyx?|ttyy?|ttyz?)
1918         case $i in
1919         *0) unit=0;;  *1) unit=1;;  *2) unit=2;;  *3) unit=3;;
1920         *4) unit=4;;  *5) unit=5;;  *6) unit=6;;  *7) unit=7;;
1921         *8) unit=8;;  *9) unit=9;;  *a) unit=10;; *b) unit=11;;
1922         *c) unit=12;; *d) unit=13;; *e) unit=14;; *f) unit=15;;
1923         esac
1924
1925         case $i in
1926         ttyy?) unit=$(($unit + 16));;
1927         ttyz?) unit=$(($unit + 32));;
1928         esac
1929
1930         mknod $i "" c 42 $unit
1931         ;;
1932
1933 #-----------------------------------------------------------------------------
1934
1935 cronyx)
1936         mknod cronyx "" c 42 63
1937         ;;
1938
1939 #-----------------------------------------------------------------------------
1940
1941 joy)
1942         mknod joy 0 c 51 0 root:operator 640
1943         mknod joy 1 c 51 1 root:operator 640
1944         ;;
1945
1946 #-----------------------------------------------------------------------------
1947
1948 spigot)
1949         mknod spigot "" c 11 0 root:wheel 444
1950         ;;
1951
1952 #-----------------------------------------------------------------------------
1953
1954 ctx?)
1955         unit=`expr $i : 'ctx\(.*\)'`
1956
1957         mknod ctx $unit c 40 `unit2minor $unit` root:wheel 444
1958         ;;
1959
1960 #-----------------------------------------------------------------------------
1961
1962 meteor?)
1963         unit=`expr $i : 'meteor\(.*\)'`
1964
1965         mknod meteor $unit c 67 `unit2minor $unit` root:wheel 444
1966         ;;
1967
1968 #-----------------------------------------------------------------------------
1969
1970 bktr?)
1971         unit=`expr $i : 'bktr\(.*\)'`
1972
1973         mknod bktr  $unit c 92 `unit2minor $unit` root:wheel 444
1974         mknod tuner $unit c 92 `unit2minor $((16 + $unit))` root:wheel 444
1975         mknod vbi   $unit c 92 `unit2minor $((32 + $unit))` root:wheel 444
1976         ;;
1977
1978 #-----------------------------------------------------------------------------
1979
1980 tun*)
1981         ntun=`expr $i : 'tun\(.*\)$'`
1982         unit=0
1983
1984         while [ $unit -le $ntun ]
1985         do
1986                 mknod tun $unit c 52 `unit2minor $unit`
1987
1988                 unit=$(($unit + 1))
1989         done
1990         ;;
1991
1992 #-----------------------------------------------------------------------------
1993
1994 tap*)
1995         ntap=`expr $i : 'tap\(.*\)$'`
1996         unit=0
1997
1998         while [ $unit -le $ntap ]
1999         do
2000                 mknod tap $unit c 149 `unit2minor $unit` root:network
2001
2002                 unit=$(($unit + 1))
2003         done
2004         ;;
2005
2006 #-----------------------------------------------------------------------------
2007
2008 sysmouse)
2009         mknod sysmouse "" c 12 128
2010         mknod consolectl "" c 12 255
2011         ;;
2012
2013 #-----------------------------------------------------------------------------
2014
2015 jogdial)
2016         mknod jogdial "" c 160 0
2017         ;;
2018
2019 #-----------------------------------------------------------------------------
2020
2021 snp?)
2022         unit=`expr $i : 'snp\(.*\)'`
2023
2024         mknod snp $unit c 53 `unit2minor $unit`
2025         ;;
2026
2027 #-----------------------------------------------------------------------------
2028
2029 labpc*)
2030         case $i in
2031         labpcaio*)
2032                 name=labpcaio
2033                 unit=`expr $i : 'labpcaio\(.*\)'`
2034                 all="0 1 2 3 4 5 6 7"
2035                 offset=0
2036                 ;;
2037
2038         labpcdio*)
2039                 name=labpcdio
2040                 unit=`expr $i : 'labpcdio\(.*\)'`
2041                 all="0 1 2 3"
2042                 offset=8
2043                 ;;
2044
2045         *)
2046                 die 3 "Don't know LabPC type $i"
2047                 ;;
2048         esac
2049
2050         [ "${unit}" ] || unit=all
2051
2052         case $unit in
2053                 0|1|2|3|4|5|6|7)
2054                         mknod $name $unit c 66 $(($offset + $unit)) \
2055                                 root:wheel 660
2056                 ;;
2057
2058                 all)
2059                         for i in $all
2060                         do
2061                                 mknod $name $i c 66 $(($offset + $i)) \
2062                                         root:wheel 660
2063                         done
2064                         ;;
2065
2066                 *)
2067                         echo "No such LabPC unit: $unit"
2068                         ;;
2069         esac
2070         ;;
2071
2072 #-----------------------------------------------------------------------------
2073
2074 perfmon)
2075         mknod perfmon "" c 2 32 root:kmem 640
2076         ;;
2077
2078 #-----------------------------------------------------------------------------
2079
2080 ipl)
2081         mknod ipl     "" c 79 0
2082         mknod ipnat   "" c 79 1
2083         mknod ipstate "" c 79 2
2084         mknod ipauth  "" c 79 3
2085         ;;
2086
2087 #-----------------------------------------------------------------------------
2088
2089 elan*)
2090         mknod elan-mmcr "" c 100 0 root:wheel 600
2091         ;;
2092
2093 #-----------------------------------------------------------------------------
2094
2095 kbd*)
2096         unit=`expr $i : 'kbd\(.*\)'`
2097         chr=112
2098
2099         mknod kbd $unit c $chr `unit2minor $unit`
2100         ;;
2101
2102 #-----------------------------------------------------------------------------
2103
2104 i4b)
2105         mknod i4b "" c 60 0
2106         ;;
2107
2108 i4bctl)
2109         mknod i4bctl "" c 55 0
2110         ;;
2111
2112 i4brbch*)
2113         unit=`expr $i : 'i4brbch\(.*\)'`
2114
2115         mknod i4brbch $unit c 57 `unit2minor $unit`
2116         ;;
2117
2118 i4bteld*)
2119         offset=64
2120         unit=`expr $i : 'i4bteld\(.*\)'`
2121
2122         mknod i4bteld $unit c 56 `unit2minor $(($offset + $unit))`
2123         ;;
2124
2125 i4btel*)
2126         unit=`expr $i : 'i4btel\(.*\)'`
2127
2128         mknod i4btel $unit c 56 `unit2minor $unit`
2129         ;;
2130
2131 i4btrc*)
2132         unit=`expr $i : 'i4btrc\(.*\)'`
2133
2134         mknod i4btrc $unit c 59 `unit2minor $unit`
2135         ;;
2136
2137 #-----------------------------------------------------------------------------
2138
2139 aac*)
2140         unit=`expr $i : 'aac\(.*\)'`
2141
2142         mknod aac $unit c 150 `unit2minor $unit`
2143
2144         ln -fs aac$unit afa$unit
2145         ln -fs aac$unit hpn$unit
2146         ;;
2147
2148 #-----------------------------------------------------------------------------
2149
2150 mlx*)
2151         unit=`expr $i : 'mlx\(.*\)'`
2152
2153         mknod mlx $unit c 130 `unit2minor $unit`
2154         ;;
2155
2156 #-----------------------------------------------------------------------------
2157
2158 amr*)
2159         unit=`expr $i : 'amr\(.*\)'`
2160
2161         mknod amr $unit c 132 `unit2minor $unit`
2162         ;;
2163
2164 #-----------------------------------------------------------------------------
2165
2166 ips*)
2167         unit=`expr $i : 'ips\(.*\)'`
2168
2169         mknod mlx $unit c 175 `unit2minor $unit`
2170         ;;
2171
2172 #-----------------------------------------------------------------------------
2173
2174 ciss*)
2175         unit=`expr $i : 'ciss\(.*\)'`
2176
2177         mknod ciss $unit c 166 `unit2minor $unit`
2178         ;;
2179
2180 #-----------------------------------------------------------------------------
2181
2182 agpgart)
2183         mknod agpgart "" c 148 0
2184         ;;
2185
2186 #-----------------------------------------------------------------------------
2187
2188 twe*)
2189         unit=`expr $i : 'twe\(.*\)'`
2190
2191         mknod twe $unit c 146 `unit2minor $unit`
2192         ;;
2193
2194 #-----------------------------------------------------------------------------
2195
2196 tw*)
2197         unit=`expr $i : 'tw\(.*\)'`
2198
2199         mknod tw $unit c 19 `unit2minor $unit` root:operator
2200         ;;
2201
2202 #-----------------------------------------------------------------------------
2203
2204 nsmb*)
2205         unit=`expr $i : 'nsmb\(.*\)'`
2206
2207         mknod nsmb $unit c 144 $unit
2208         ;;
2209
2210 #-----------------------------------------------------------------------------
2211
2212 local)
2213         umask 0
2214         sh MAKEDEV.local
2215         umask 77
2216         ;;
2217
2218 #-----------------------------------------------------------------------------
2219
2220 *)
2221         echo $i - no such device name
2222         ;;
2223
2224 esac
2225 done