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