#!/bin/sh
#
# rc.isdn4linux 1.0 1997/05/08 18:55:03 (J"org Lehrke)
#
# This is designed to work in BSD as well as SysV init setups.  See
# the HOWTO for customization instructions.
# 
# This script is loading the needed ISDN-modules

usage()
{
    echo "Usage: $0 {start|stop|restart}"
}

cleanup()
{
    echo ""
    echo "Initialization of ISDN failed!"
    echo "Check the values in '/etc/sysconfig/isdn'!"
    echo ""
    modprobe -r $I4L_MODULE
    break
}

# Source ISDN configuration, if available
if [ -f /etc/sysconfig/isdn ] ; then
    . /etc/sysconfig/isdn
else
    I4L_START=no
fi

EXITCODE=1
for x in "1" ; do

    # Check that ISDN is up
    [ ${I4L_START} = "no" ] && break

    if [ "$I4L_MODULE" = "" ] ; then
	echo "ISDN-Module not defined in rc.isdn4linux!"
	break
    fi

    if [ $# -lt 1 ] ; then usage ; break ; fi
    action=$1

    case "$action" in

    'start')
	case "$I4L_MODULE" in
	'teles')
	    echo "Loading (old) Teles driver ..."
	    /sbin/modprobe -v teles teles_id=${I4L_ID} \
            io=${I4L_MEMBASE},${I4L_IRQ},${I4L_PORT},${I4L_PROTOCOL} >/dev/null
	    if test $? -ne 0; then
		cleanup
	    fi
	;;

	'hisax')
	    echo "Loading HiSax driver ..."
	    HISAX_PAR1="id=$I4L_ID type=$I4L_TYPE protocol=$I4L_PROTOCOL"
            case "$I4L_TYPE" in
            1)
                # Teles 16.0
                HISAX_PAR2="irq=$I4L_IRQ mem=$I4L_MEMBASE io=$I4L_PORT"
                ;;

            2)
                # Teles 8.0
                HISAX_PAR2="irq=$I4L_IRQ mem=$I4L_MEMBASE"
                ;;

            3)
                # Teles 16.3
                HISAX_PAR2="irq=$I4L_IRQ io=$I4L_PORT"
                ;;

            4)
                # Creatix PNP
                HISAX_PAR2="irq=$I4L_IRQ io0=$I4L_IO0 io1=$I4L_IO1"
                ;;

            5)
                # AVM A1 (Fritz)
                HISAX_PAR2="irq=$I4L_IRQ io=$I4L_PORT"
                ;;

            6)
                # ELSA PCC16
                HISAX_PAR2="io=$I4L_PORT"
                ;;

            *)
                echo "$0: unknown I4L_TYPE: $I4L_TYPE"
                echo "$0: exiting!"
		break
                ;;

            esac

            HISAX_PAR="${HISAX_PAR1} ${HISAX_PAR2}"
	    /sbin/modprobe -v hisax $HISAX_PAR >/dev/null
	    if test $? -ne 0; then
		cleanup
	    fi
	;;

	'icn')
	    echo "Loading ICN driver ..."
	    ICN_PAR="portbase=$I4l_PORT membase=$I4l_MEMBASE icn_id=$I4l_ID"
	    test -z "$I4l_ID2" || ICN_PAR="$ICN_PAR icn_id2=$I4l_ID2"
	    /sbin/modprobe -v icn "$ICN_PAR"
	    if test $? -ne 0; then
		cleanup
	    fi
	;;

	*)
	    echo "Unknown ISDN driver $I4L_MODULE!"
	    break
	;;

	esac
    ;;

    stop)
	echo "Unloading ISDN drivers ..."
	# unload modules
        /sbin/modprobe -r $I4L_MODULE
    ;;

    'restart')
	$0 stop
	$0 start
	;;

    *)
	usage
	break
	;;

    esac
    EXITCODE=0

done

# Only exit if we're in our own subshell
if [ "${0##*/}" = "rc.isdn4linux" ] ; then
    exit $EXITCODE
fi
