#!/bin/bash
#
# khompdrv     Startup script for the KHOMP drivers
#
# chkconfig: - 87 07
# description: KHOMP telephony card drivers

### BEGIN INIT INFO
# Provides:          khompdrv
# Required-Start:    
# Required-Stop:     $kserver
# Default-Start:     
# Default-Stop:      
# Short-Description: Start/stop Khomp boards driver
### END INIT INFO


export KHOMP_DRV_PATH="/dev/khomp"

export KHOMP_PCI_KMOD="kpci9030"
export KHOMP_PEX_KMOD="kpex8311"

export KHOMP_MAX_DEVS=20

do_start ()
{
    echo "+ Loading Khomp PCI and PCI Express device driver... "

    /sbin/modprobe ${KHOMP_PEX_KMOD}
    /sbin/modprobe ${KHOMP_PCI_KMOD}

    pci_major=`awk "\\$2==\"${KHOMP_PCI_KMOD}\" {print \\$1}" < /proc/devices 2>/dev/null`
    pex_major=`awk "\\$2==\"${KHOMP_PEX_KMOD}\" {print \\$1}" < /proc/devices 2>/dev/null`

    if [ "${pci_major}" = "" ]
    then
        rmmod ${KHOMP_PCI_KMOD} &> /dev/null
        rmmod ${KHOMP_PEX_KMOD} &> /dev/null

        echo "+ Khomp PCI device driver NOT loaded!"
        exit 1
    fi

    if [ "${pex_major}" = "" ]
    then
        rmmod ${KHOMP_PCI_KMOD} &> /dev/null
        rmmod ${KHOMP_PEX_KMOD} &> /dev/null

        echo "+ Khomp PCI Express device driver NOT loaded!"
        exit 1
    fi

    if [ "w${KHOMP_DRV_PATH}" != "w" ]
    then
        # cleanup
        rm -rf ${KHOMP_DRV_PATH}

        # make again
        mkdir ${KHOMP_DRV_PATH}     && \
        chmod 777 ${KHOMP_DRV_PATH}
    fi

    for ((i=0;i<=KHOMP_MAX_DEVS;i++))
    do
        mknod -m777 ${KHOMP_DRV_PATH}/${KHOMP_PCI_KMOD}_${i} c ${pci_major} ${i} || exit 1
        mknod -m777 ${KHOMP_DRV_PATH}/${KHOMP_PEX_KMOD}_${i} c ${pex_major} ${i} || exit 1
    done

    echo "+ Khomp device drivers loaded!"
}

do_stop ()
{
    echo "+ Unloading Khomp PCI and PCI Express device driver... "

    if [ "w${KHOMP_DRV_PATH}" != "w" ]
    then
        # cleanup
        rm -rf ${KHOMP_DRV_PATH}
    fi

    rmmod ${KHOMP_PCI_KMOD}
    rmmod ${KHOMP_PEX_KMOD}

    echo "+ Khomp device drivers unloaded!"
}

case "$1"
in
    "start")
        do_start
    ;;
    "stop")
        do_stop
    ;;
    "restart")
        do_stop
        sleep 1
        do_start
    ;;
    "")
        do_start # compatibility
    ;;
esac
