#!/bin/sh -
#
#       $NetBSD: MAKEDEV,v 1.5 2000/07/27 18:43:23 mason Exp $
#
# Device "make" file.  Valid arguments:
#       std     standard devices
#       local   configuration specific devices
# Disks:
#       ccd*    concatenated disk driver
#       cd*     SCSI CD-ROM
#       md*     "memory disk" pseudo-disks
#       sd*     SCSI disks
#       vnd*    "file" pseudo-disks
#       raid*   RAIDframe disk driver
# Terminals:
#       ttya    'ttya' system console
#       ttyE?   Workstation console ("wscons") glass-tty emulation
# Pseudo terminals:
#       pty*    set of 16 master and slave pseudo terminals
# Tapes:
#       st*     SCSI tape
# Special purpose devices:
#       bpf*    packet filter
#       ch*     SCSI media changer
#       fd      file descriptor device
#       ipl     IP filter
#       lkm     loadable kernel modules interface
#       random  Random number generator
#       scsibus* SCSI busses
#       ss*     SCSI scanner
#       tun*    network tunnel driver
#       uk*     SCSI unknown
#       wskbd0  Workstation console ("wscons") keyboard
#       wsmouse0  Workstation console ("wscons") mouse

PATH=/sbin:/usr/sbin:/bin:/usr/bin
umask 77
for i
do
case $i in

all)
       sh -$- $0 std ttya sd0 st0
       sh -$- $0 pty0 pty1 pty2 pty3 bpf0 bpf1 lkm ipl
       sh -$- $0 wskbd wsmouse ttyE0 ttyEcfg
       sh -$- $0 scsibus0
       ;;
std)
       rm -f console drum mem kmem null zero io tty klog stdin stdout stderr
       mknod console           c 0 0
       mknod drum              c 3 0   ; chmod 640 drum ; chgrp kmem drum
       mknod kmem              c 2 1   ; chmod 640 kmem ; chgrp kmem kmem
       mknod mem               c 2 0   ; chmod 640 mem ; chgrp kmem mem
       mknod null              c 2 2   ; chmod 666 null
       mknod zero              c 2 12  ; chmod 666 zero
       mknod tty               c 1 0   ; chmod 666 tty
       mknod klog              c 6 0   ; chmod 600 klog
       mknod stdin             c 21 0  ; chmod 666 stdin
       mknod stdout            c 21 1  ; chmod 666 stdout
       mknod stderr            c 21 2  ; chmod 666 stderr
       ;;

fd)
       rm -f fd/*
       mkdir fd > /dev/null 2>&1
       n=0
       while [ $n -lt 64 ]; do
               mknod fd/$n c 21 $n
               n=$(($n + 1))
       done
       chown -R bin.bin fd
       chmod 555 fd
       chmod 666 fd/*
       ;;

md*)
       unit=${i#md};   blk=7; chr=16;
       rm -rf md${unit}? rmd${unit}?
       mknod md${unit}a  b $blk $(($unit * 8 + 0))
       mknod md${unit}c  b $blk $(($unit * 8 + 2))
#       mknod rmd${unit}a c $blk $(($unit * 8 + 0))
#       mknod rmd${unit}c c $blk $(($unit * 8 + 2))
       chgrp operator md${unit}? #rmd${unit}?
       chmod 640 md${unit}? #rmd${unit}?
       ;;

ccd*|cd*|raid*|sd*|vnd*)
       case $i in
       ccd*)   name=ccd;       unit=${i#ccd};  blk=5; chr=14;;
       cd*)    name=cd;        unit=${i#cd};   blk=4; chr=10;;
       raid*)  name=raid;      unit=${i#raid}; blk=14; chr=32;;
       sd*)    name=sd;        unit=${i#sd};   blk=2; chr=8;;
       vnd*)   name=vnd;       unit=${i#vnd};  blk=6; chr=15;;
       esac
       rm -f $name$unit? r$name$unit?
       mknod ${name}${unit}a   b $blk $(($unit * 8 + 0))
       mknod ${name}${unit}b   b $blk $(($unit * 8 + 1))
       mknod ${name}${unit}c   b $blk $(($unit * 8 + 2))
       mknod ${name}${unit}d   b $blk $(($unit * 8 + 3))
       mknod ${name}${unit}e   b $blk $(($unit * 8 + 4))
       mknod ${name}${unit}f   b $blk $(($unit * 8 + 5))
       mknod ${name}${unit}g   b $blk $(($unit * 8 + 6))
       mknod ${name}${unit}h   b $blk $(($unit * 8 + 7))
       mknod r${name}${unit}a  c $chr $(($unit * 8 + 0))
       mknod r${name}${unit}b  c $chr $(($unit * 8 + 1))
       mknod r${name}${unit}c  c $chr $(($unit * 8 + 2))
       mknod r${name}${unit}d  c $chr $(($unit * 8 + 3))
       mknod r${name}${unit}e  c $chr $(($unit * 8 + 4))
       mknod r${name}${unit}f  c $chr $(($unit * 8 + 5))
       mknod r${name}${unit}g  c $chr $(($unit * 8 + 6))
       mknod r${name}${unit}h  c $chr $(($unit * 8 + 7))
       chgrp operator ${name}${unit}[a-h] r${name}${unit}[a-h]
       chmod 640 ${name}${unit}[a-h] r${name}${unit}[a-h]
       ;;

tty[ab])
       case $i in
       ttya)   major=7; minor=0 ;;
       ttyb)   major=7; minor=1 ;;
       esac
       rm -f $i
       mknod $i c $major $minor
       chown uucp.wheel $i
       ;;

pty*)
       class=${i#pty}
       case $class in
       0)      name=p;;
       1)      name=q;;
       2)      name=r;;
       3)      name=s;;
       4)      name=t;;
       5)      name=u;;
       6)      name=v;;
       7)      name=w;;
       8)      name=x;;
       9)      name=y;;
       10)     name=z;;
       11)     name=P;;
       12)     name=Q;;
       13)     name=R;;
       14)     name=S;;
       15)     name=T;;
       *)      echo "$0: $i: pty unit must be between 0 and 15"
               continue ;;
       esac
       rm -f tty$name[0-9a-f] pty$name[0-9a-f]
       for j in 0 1 2 3 4 5 6 7 8 9 a b c d e f
       do
               case $j in
               [0-9])  jn=$j ;;
               a)      jn=10 ;;
               b)      jn=11 ;;
               c)      jn=12 ;;
               d)      jn=13 ;;
               e)      jn=14 ;;
               f)      jn=15 ;;
               esac
               unit=$(($class * 16 + $jn))
               mknod tty$name$j c 4 $unit
               mknod pty$name$j c 5 $unit
       done
       chgrp wheel tty$name? pty$name?
       chmod 666 tty$name? pty$name?
       ;;

st*)
       case $i in
       st*) name=st;   unit=${i#st};   blk=3; chr=9;;
       esac
       rm -f $name$unit n$name$unit e$name$unit en$name$unit \
       r$name$unit nr$name$unit er$name$unit enr$name$unit
       mknod ${name}${unit}    b $blk $(($unit * 16+ 0))
       mknod n${name}${unit}   b $blk $(($unit * 16+ 1))
       mknod e${name}${unit}   b $blk $(($unit * 16+ 2))
       mknod en${name}${unit}  b $blk $(($unit * 16+ 3))
       mknod r${name}${unit}   c $chr $(($unit * 16+ 0))
       mknod nr${name}${unit}  c $chr $(($unit * 16+ 1))
       mknod er${name}${unit}  c $chr $(($unit * 16+ 2))
       mknod enr${name}${unit} c $chr $(($unit * 16+ 3))
       chgrp operator ${name}${unit} n${name}${unit} \
               e$name$unit en$name$unit \
               r${name}${unit} nr${name}${unit} \
               er${name}${unit} enr${name}${unit}
       chmod 660 ${name}${unit} n${name}${unit} \
               e$name$unit en$name$unit \
               r${name}${unit} nr${name}${unit} \
               er${name}${unit} enr${name}${unit}
       ;;

ch*|uk*)
       case $i in
       ch*) name=ch;   unit=${i#ch};   chr=11;;
       uk*) name=uk;   unit=${i#uk};   chr=13;;
       esac
       rm -f $name$unit
       mknod $name$unit        c $chr $unit
       chgrp operator $name$unit
       chmod 640 $name$unit
       ;;

ss*)
       case $i in
       ss*) name=ss;   unit=${i#ss};   chr=12;;
       esac
       rm -f $name$unit n$name$unit en$name$unit
       mknod $name$unit        c $chr $(($unit * 16 + 0))
       mknod n$name$unit       c $chr $(($unit * 16 + 1))
       mknod en$name$unit      c $chr $(($unit * 16 + 3))
       chgrp operator $name$unit n$name$unit en$name$unit
       chmod 640 $name$unit n$name$unit en$name$unit
       ;;

bpf*|tun*)
       case $i in
       bpf*) name=bpf; unit=${i#bpf};  chr=21;;
       tun*) name=tun; unit=${i#tun};  chr=22;;
       esac
       rm -f $name$unit
       mknod $name$unit        c $chr $unit
       chown root.wheel $name$unit
       ;;

lkm)
       rm -f lkm
       mknod lkm c 24 0
       chown root.kmem lkm
       chmod 640 lkm
       ;;

ipl)
       rm -f ipl ipnat ipstate ipauth
       mknod ipl c 23 0
       mknod ipnat c 23 1
       mknod ipstate c 23 2
       mknod ipauth c 23 3
       chown root.wheel ipl ipnat ipstate ipauth
       chmod 600 ipl ipnat ipstate ipauth
       ;;

#random)
#       rm -f random urandom
#       mknod random c 32 0
#       mknod urandom c 32 1
#       chown root.wheel random urandom
#       chmod 444 random
#       chmod 644 urandom
#       ;;

scsibus*)
       unit=${i#scsibus};
       rm -f scsibus$unit
       mknod scsibus$unit c 31 $unit
       chown root:wheel scsibus$unit
       chmod 644 scsibus$unit
       ;;

ttyEcfg)
       rm -f $i
       mknod $i c 19 255
       chown root:wheel $i
       ;;

ttyE*)
       case $i in
       ttyE*)  name=ttyE; unit=${i#ttyE};      major=19; minor=$unit;;
       esac
       rm -f $name$unit
       mknod $name$unit c $major $minor
       chown uucp.wheel $name$unit
       ;;

wsmouse*|wskbd*)
       rm -f wsmouse0 wskbd0
       mknod wsmouse0 c 18 0           ### mknod wsmouse c 33 0
       mknod wskbd0 c 17 0             ### mknod wskbd c 33 1
       chown root.wheel wsmouse0 wskbd0
       chmod 600 wsmouse0 wskbd0
       ;;


local)
       umask 0
       sh $0.local all
       umask 77
       ;;

*)
       echo $i: unknown device
       ;;

esac
done