#-----------------------------------------------------------------------------
#
#      File         :  Plx_unload
#      Abstract     :  Unloads a PLX module
#
#-----------------------------------------------------------------------------


# Remove comment to display script commands as it runs
#set -x


# Store parameters
Param1=`echo $1 |awk '{print tolower($0)}'`

# Verify command-line
case "$Param1" in
    8000n) plx_drv_name=8000_NT  ;;
    8000d) plx_drv_name=8000_DMA ;;
    6000n) plx_drv_name=6000_NT  ;;
    9050)  plx_drv_name=9050     ;;
    9030)  plx_drv_name=9030     ;;
    9080)  plx_drv_name=9080     ;;
    9054)  plx_drv_name=9054     ;;
    9056)  plx_drv_name=9056     ;;
    9656)  plx_drv_name=9656     ;;
    8311)  plx_drv_name=8311     ;;
    svc)   plx_drv_name=Svc      ;;

    *)
    echo
    echo "PLX Linux module unload script"
    echo
    echo "  Usage: Plx_unload {Driver} [DebugOption]"
    echo
    echo "     Driver      = 8000n      : PLX 8000 NT-mode driver"
    echo "                   8000d      : PLX 8000 DMA Controller driver"
    echo "                   9050       : PLX 9050/9052 driver"
    echo "                   9030       : PLX 9030 driver"
    echo "                   9080       : PLX 9080 driver"
    echo "                   9054       : PLX 9054 driver"
    echo "                   9056       : PLX 9056 driver"
    echo "                   9656       : PLX 9656 driver"
    echo "                   8311       : PLX 8311 driver"
    echo "                   6000n      : PLX 6254/6540/6466 NT-mode driver"
    echo "                   Svc        : PLX PCI/PCIe Service driver"
    echo
    echo "     DebugOption = <none>     : Unload Release build of module"
    echo "                   'd'        : Unload Debug build of module"
    echo
    echo "  E.g.: Plx_unload 9054 d   - Unload 9054 module debug version"
    echo "        Plx_unload 8000n    - Unload 8000 NT module release version"
    echo
    exit
    ;;
esac


# Verify superuser access
if [ `id -u` != 0 ]; then
    echo
    echo "   ***************************************************"
    echo "   * NOTE: You must be superuser, logged in as root, *"
    echo "   *       or have sufficient rights to unload       *"
    echo "   *       modules or this script will not work.     *"
    echo "   ***************************************************"
    echo
    echo "  ---- ERROR: Admin rights not detected, halting ----"
    echo
    exit
fi


# Verify rmmod is found
if [ -f /sbin/rmmod ]; then
    RmMod=/sbin/rmmod
fi
if [ -f /usr/sbin/rmmod ]; then
    RmMod=/usr/sbin/rmmod
fi
if [ "$RmMod" = "" ]; then
    echo "ERROR: 'rmmod' not found in /sbin or /usr/sbin"
    echo
    exit
fi


# Check for debug version
if [ "$2" = "d" ]; then
    debug=_dbg
fi

# Registered name of driver
name=Plx$plx_drv_name

# Name of module
module=$name$debug


echo
echo Remove: $module

# Get module load status
drv_Name=`lsmod | awk "\\$1==\"$module\" {print \\$1}"`

echo -n "  Unload module....... "
if [ "$drv_Name" = "" ]; then
    echo ERROR: \'$module\' not loaded
    echo
    exit
fi

# Generate temp file name
TmpFile=/tmp/_Plx_Rmmod_$module.tmp

# Remove module & capture output
$RmMod $module 2> $TmpFile
Rm_mod=`cat $TmpFile | grep 'ERROR'`

# Check for error
if [ "$Rm_mod" != "" ]; then
    echo ERROR: Unable to remove module
    echo "      \-- Msg: `cat $TmpFile`"
    echo
    rm $TmpFile
    exit
else
    echo "Ok ($module)"
    rm $TmpFile
fi

echo -n "  Clear nodes......... "
path=/dev/plx
rm -f $path/$name*
echo "Ok ($path/$name)"

# Delete the directory only if empty
if [ -d $path ]; then
    echo -n "  Delete node path.... "
    rmdir --ignore-fail-on-non-empty ${path}
    echo "Ok ($path)"
fi
echo
