#!/sbin/ksh

mk_ctlrnumber()
{
	# construct scsi controller number part of minor number from hinv info
	number=$(( ($1 / 10) * 8 + $1 % 10)) 
}

# A function for clarity.  install is used because it will not
# remake devices if they are already correct (saving time)
# and will preserve local modifications to ownership and modes.
mknod() 
{
	if [ $2 = c ]; then typ=-chr; else typ=-blk; fi
	install -root "" -rawidb "" -f . -m 600 $typ $3,$4 $1
}

/sbin/hinv | \
sed -n -e '/^Integral SCSI controller /'p -e '/^GIO SCSI controller /'p | \
sed 's/://g' | \
while read a b c ctlr d ; do
    mk_ctlrnumber $ctlr
    for targ in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do
	for i in 0 1 6 7 15; do
	    minor=$(( $i + $targ * 16 + $number * 256));
	    mknod dsk/dks${ctlr}d${targ}s$i b ${B_DKS} $minor &
	    mknod rdsk/dks${ctlr}d${targ}s$i c ${C_DKS} $minor &
	done;
	minor=$(( 8 + $targ * 16 + $number * 256));
	mknod rdsk/dks${ctlr}d${targ}vh c ${C_DKS} $minor &
	minor=$(( 10 + $targ * 16 + $number * 256));
	mknod rdsk/dks${ctlr}d${targ}vol c ${C_DKS} $minor &
	wait;
    done;
done

/sbin/hinv -c disk | grep lun | egrep 'Disk|PC Card' | sed 's/[:,]//g' | \
while read a b c targ l lun d e f ctlr g; do
   mk_ctlrnumber $ctlr
   for i in 0 1 6 7 15; do
	minor=$(( $i + $targ * 16 + $number * 256));
	minor=$(( $minor + $lun * 32768));
	mknod dsk/dks${ctlr}d${targ}l${lun}s$i b ${B_DKS} $minor &
	mknod rdsk/dks${ctlr}d${targ}l${lun}s$i c ${C_DKS} $minor &
   done;
   minor=$(( 8 + $targ * 16 + $number * 256));
   minor=$(( $minor + $lun * 32768));
   mknod rdsk/dks${ctlr}d${targ}l${lun}vh c ${C_DKS} $minor &
   minor=$(( 10 + $targ * 16 + $number * 256));
   minor=$(( $minor + $lun * 32768));
   mknod rdsk/dks${ctlr}d${targ}l${lun}vol c ${C_DKS} $minor &
   wait;
done

/sbin/hinv -c scsi | grep "RAID controller" | sed 's/://g' | \
while read a b c targ d e f ctlr g; do
   mk_ctlrnumber $ctlr
   for lun in 0 1 2 3 4 5; do
       for i in 0 1 6 7 15; do
	    minor=$(( $i + $targ * 16 + $number * 256));
	    minor=$(( $minor + $lun * 32768));
	    mknod dsk/dks${ctlr}d${targ}l${lun}s$i b ${B_DKS} $minor &
	    mknod rdsk/dks${ctlr}d${targ}l${lun}s$i c ${C_DKS} $minor &
       done;
       minor=$(( 8 + $targ * 16 + $number * 256));
       minor=$(( $minor + $lun * 32768));
       mknod rdsk/dks${ctlr}d${targ}l${lun}vh c ${C_DKS} $minor &
       minor=$(( 10 + $targ * 16 + $number * 256));
       minor=$(( $minor + $lun * 32768));
       mknod rdsk/dks${ctlr}d${targ}l${lun}vol c ${C_DKS} $minor &
       wait;
   done;
done

# Only make RAID nodes for those devices that are attached and turned on.
/sbin/hinv -c disk | grep '^Disk drive: .* on SCSI controller .*: RAID$' | \
sed 's/://g' | \
while read a b c targ d e f ctlr g ; do
    mk_ctlrnumber $ctlr
    mid=dks${ctlr}d${targ};
    for i in 0 1 2 6 7 15; do
	minor=$(( $targ * 16 + $number * 256 + $i));
	mknod rad${ctlr}d${targ}s$i b ${B_RAD} $minor &
	mknod rad${ctlr}d${targ}s$i c ${C_RAD} $minor &
    done;
    minor=$(( $targ * 16 + $number * 256 + 8));
    mknod rad${ctlr}d${targ}vh c ${C_RAD} $minor &
    minor=$(( $targ * 16 + $number * 256 + 10));
    mknod rad${ctlr}d${targ}vol c ${C_RAD} $minor &
    wait;
done
