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