#ident	"@(#)kit:em727/pkg/postinstall	1.00"
#ident  "$Header: $"
#
#       Cogent eMASTER+ Unix Streams Driver Install Script
#               for Univel UnixWare System V release 4.2 
#
#       ver. 1.00
#
ERR=/tmp/em727.err
TMPDIR=/tmp/em727
ERROR1="Errors have written to the file $ERR."
ERROR2="The eMASTER+ ATS stream driver was not installed due to an error."
ROOT=
ETC=${ROOT}/etc
NETINFO=/usr/sbin/netinfo
CONFDIR=/etc/conf
CONFBIN=${CONFDIR}/bin
MENU=/usr/sbin/menu

# Define return values
: ${OK=0} ${FAIL=1} ${STOP=10} ${HALT=11}
set -h

param_err () {
	menu_colors warn
	menu -r -f ${MENUDIR}/menu.err -o /tmp/$$.parmerr </dev/tty > /dev/tty 2>>${ERR}
	. /tmp/$$.parmerr
	rm -f /tmp/$$.parmerr
	[ "$REPLY" = "Y" -o "$REPLY" = "y" ] && {
		menu -c > /dev/tty
		exit 1
	}
}


set_boardinfo () {
unset NO_IRQ NO_SIOA NO_DMA
unset AVAIL_IRQ IRQ_AVAIL AVAIL_SIOA SIOA_AVAIL AVAIL_DMA DMA_AVAIL

# get unused interrupt vectors
NO_IRQ=0
AVAIL_IRQ="//"
for j in 10 11 12 14 15 3 4 5 7 9
do
		${CONFBIN}/idcheck -v $j 
		rc=$?
		# $rc > 0 and < 100 means this intv is in use
		if [ $rc -le 0 -o $rc -ge 100  ]
		then
		NO_IRQ=`expr $NO_IRQ + 1`
		AVAIL_IRQ="${AVAIL_IRQ}${j}::${j}//"
		IRQ_AVAIL="${IRQ_AVAIL} ${j}"
		fi	
done
[ ${NO_IRQ} -eq 0 ] && {
NO_IRQ=1
AVAIL_IRQ="//*::*//"
}

# get unused I/O base addresses
NO_SIOA=0
AVAIL_SIOA="//"
for j in 300 320 340 360
do
                case "$j" in
		   300) Eioa=30f;;
		   320) Eioa=32f;;
		   340) Eioa=34f;;
		   360) Eioa=36f;;
                esac
		${CONFBIN}/idcheck -a -l$j -u$Eioa 
		rc=$?
		# $rc > 0 and < 100 means this intv is in use
		if [ $rc -le 0 -o $rc -ge 100  ]
		then
		NO_SIOA=`expr $NO_SIOA + 1`
		AVAIL_SIOA="${AVAIL_SIOA}${j}::${j}//"
		SIOA_AVAIL="${SIOA_AVAIL} ${j}"
		fi	
done
[ ${NO_SIOA} -eq 0 ] && {
NO_SIOA=1
AVAIL_SIOA="//*::*//"
}

# get unused DMA channel 
NO_DMA=0
AVAIL_DMA="//"
for j in 5 6 7 3 0
do
		${CONFBIN}/idcheck -d $j 
		rc=$?
		# $rc > 0 and < 100 means this intv is in use
		if [ $rc -le 0 -o $rc -ge 100  ]
		then
		NO_DMA=`expr $NO_DMA + 1`
		AVAIL_DMA="${AVAIL_DMA}${j}::${j}//"
		DMA_AVAIL="${DMA_AVAIL} ${j}"
		fi	
done
[ ${NO_DMA} -eq 0 ] && {
NO_DMA=1
AVAIL_DMA="//*::*//"
}

export NO_IRQ NO_SIOA NO_DMA
export AVAIL_IRQ IRQ_AVAIL AVAIL_SIOA SIOA_AVAIL AVAIL_DMA DMA_AVAIL
cnt=0
export cnt board_count
while [ $cnt -lt $board_count ]
do
	unset IRQ Sioa DMA
	menu_colors regular
	menu -r -f ${MENUDIR}/menu.param -o /tmp/$$.param </dev/tty >/dev/tty 2>$ERR
	. /tmp/$$.param
	rm -f /tmp/$$.param

	case "$Sioa" in
		300) Eioa=30f;;
		320) Eioa=32f;;
		340) Eioa=34f;;
		360) Eioa=36f;;
	esac

	if [ "$IRQ" = "*" -o "$Sioa" = "*" -o "$DMA" = "*" ]
	then
		UsedIRQ=`cat ${TMPDIR}/irqused.$$ 2> /dev/null`
		UsedSIOA=`cat ${TMPDIR}/sioaused.$$ 2> /dev/null`
		UsedDMA=`cat ${TMPDIR}/dmaused.$$ 2> /dev/null`
		export UsedIRQ UsedSIOA UsedDMA
		param_err
	else
		echo "$IRQ " >> ${TMPDIR}/irqused.$$
		NO_IRQ=0
		AVAIL_IRQ="//"
		I=`echo $IRQ_AVAIL`
		IRQ_AVAIL=""
		for j in `echo $I`
		do
			grep $j ${TMPDIR}/irqused.$$ >/dev/null 2>&1
			[ $? -ne 0 ] && {
			NO_IRQ=`expr $NO_IRQ + 1`
			AVAIL_IRQ="${AVAIL_IRQ}${j}::${j}//"
			IRQ_AVAIL="${IRQ_AVAIL} ${j}"
			}
		done
		[ ${NO_IRQ} -eq 0 ] && {
		NO_IRQ=1
		AVAIL_IRQ="//*::*//"
		}

		echo "$Sioa " >> ${TMPDIR}/sioaused.$$
		NO_SIOA=0
		AVAIL_SIOA="//"
		I=`echo $SIOA_AVAIL`
		SIOA_AVAIL=""
		for j in `echo $I`
		do
			grep $j ${TMPDIR}/sioaused.$$ >/dev/null 2>&1
			[ $? -ne 0 ] && {
			NO_SIOA=`expr $NO_SIOA + 1`
			AVAIL_SIOA="${AVAIL_SIOA}${j}::${j}//"
			SIOA_AVAIL="${SIOA_AVAIL} ${j}"
			}
		done
		[ ${NO_SIOA} -eq 0 ] && {
		NO_SIOA=1
		AVAIL_SIOA="//*::*//"
		}

		echo "$DMA " >> ${TMPDIR}/dmaused.$$
		NO_DMA=0
		AVAIL_DMA="//"
		I=`echo $DMA_AVAIL`
		DMA_AVAIL=""
		for j in `echo $I`
		do
			grep $j ${TMPDIR}/dmaused.$$ >/dev/null 2>&1
			[ $? -ne 0 ] && {
			NO_DMA=`expr $NO_DMA + 1`
			AVAIL_DMA="${AVAIL_DMA}${j}::${j}//"
			DMA_AVAIL="${DMA_AVAIL} ${j}"
			}
		done
		[ ${NO_DMA} -eq 0 ] && {
		NO_DMA=1
		AVAIL_DMA="//*::*//"
		}
echo "emB\tY\t4\t6\t1\t$IRQ\t$Sioa\t$Eioa\t0\t0\t$DMA">>${CONFDIR}/sdevice.d/emB
echo "clone\temB_$cnt\tc:$cnt\temB" >>${CONFDIR}/node.d/emB
$NETINFO -a -d emB_$cnt
	fi

cnt=`expr $cnt + 1`
done

# clean up temp files
rm -f ${TMPDIR}/irqused.$$ ${TMPDIR}/sioaused.$$ 2>/dev/null
rm -f ${TMPDIR}/dmaused.$$ 2>/dev/null
menu -c > /dev/tty
return 0
}

# main routine 
#
#
#  Make sure LANG environment variable is set.  If it's not set
#  coming in to this request script, then default to the C-locale.
#
[ ${LANG} ] || LANG="C"
export LANG

#
#  Set up to use menu_colors; default to C-locale if ${LANG}'s dir has
#  no menu_colors.sh
#
if [ -f /etc/inst/locale/${LANG}/menus/menu_colors.sh ]
then
        . /etc/inst/locale/${LANG}/menus/menu_colors.sh
else
        . /etc/inst/locale/C/menus/menu_colors.sh
fi

MENUDIR=${TMPDIR}/menu
DIRSAV=`pwd`

cd $TMPDIR
${CONFBIN}/idcheck -p emB 2>$ERR
if [ $? -ne 0 ]
then
	${CONFBIN}/idinstall -d emB > ${ERR} 2>&1
fi

${CONFBIN}/idinstall -a emB > $ERR 2>&1
rc=$?
if [ ${rc} -ne 0 ]
then
	${CONFBIN}/idinstall -u emB > ${ERR} 2>&1
	rc=$?
fi

cd ${DIRSAV}
[ $? -ne 0 ] && {
        echo "There was an error during package installation.
	$ERROR1 $ERROR2" > /dev/tty
        exit 1
}

# configure driver
trap 'rm -f ${TMPDIR}/irqused.$$ ${TMPDIR}/sioaused.$$ ${TMPDIR}/dmaused.$$ $ERR 2> /dev/null; menu -c >/dev/tty; exit 3' 1 2 3 15
menu_colors regular
menu -r -f ${MENUDIR}/menu.eth -o ${TMPDIR}/boards </dev/tty >/dev/tty  2>${ERR}
. ${TMPDIR}/boards
	rm -f ${TMPDIR}/boards
	set_boardinfo
	rc=$?
	rm -rf ${TMPDIR}/menu
	if [ ${rc} -ne 0 ]
	then
		exit $rc
	fi

#configure tcp/ip
#cnt=0
#while [ $cnt -lt $board_count ]
#do
#	echo "\nConfigure TCP/IP ... emB_${cnt}\n"
#	/etc/confnet.d/configure -i -p inet -d emB_${cnt}
#cnt=`expr $cnt + 1`
#done
# only configure first board on tcp/ip. For additional board, user has to
# run /etc/confnet.d/configure -i manually.
/etc/confnet.d/configure > /dev/null

# rebuild the kernel.
echo "\nBuilding a new kernel now ..." > /dev/tty
${CONFBIN}/idbuild </dev/tty 2>>$ERR
[ $? -ne 0 ] && {
	echo "The installation cannot be completed due to an error" > /dev/tty
	echo "in the kernel reconfiguration" > /dev/tty
	echo "$ERROR1 $ERROR2" > /dev/tty
	exit 1
}

echo "Installation of <em727> was successful." > /dev/tty
exit 10

