#! /bin/sh
#
# Copyright (c) 2022-2022 Huawei Technologies Co., Ltd.
# All rights reserved.

#ɹ״̬
STATUS_DONE="[OK]"
#ʧ״̬
STATUS_FAILED="[FAILED]"
#״̬
STATUS_RUNNING="[RUNNING]"
#δ״̬
STAUS_UNUSED="[UNUSED]"

export LD_LIBRARY_PATH=$INSTALL_DIR:$LD_LIBRARY_PATH
export PCIEEP_DRIVER_DIR="/usr/lib/modules/pangea_pcieepdriver/target"

cd ${PCIEEP_DRIVER_DIR}
echo "cur dir:`pwd`, start pcie ep driver..."

insmod_ko() 
{
    #ȼļǷ
    modeName=$1
    if [ ! -f ${modeName} ];then
        echo -e "Can not find ${modeName} ...                           ${STATUS_FAILED}"
        return 1
    fi

    echo "insmod ${modeName}"
    insmod ${modeName}
    if [ $? -ne 0 ];then
        echo "insmod ${modeName} fail ...                           ${STATUS_FAILED}"
        return 1
    else
        echo "insmod ${modeName} succ ...                           ${STATUS_DONE}"
        return 0
    fi
}

rmmod_ko() 
{
    modeName=$1

    ret=`lsmod | cut -f1 -d' ' | grep -w "${modeName}" -c`
    if [ ${ret} -le 0 ]; then
        echo "${modeName} isn't exist before rmmoding ${modeName}"
        return 0
    fi

    echo "rmmod ${modeName}"
    rmmod ${modeName}
    if [ $? -ne 0 ];then
        echo "rmmod ${modeName} fail ...                           ${STATUS_FAILED}"
        return 1
    else
        echo "rmmod ${modeName} succ ...                           ${STATUS_DONE}"
        return 0
    fi
}

remove_all_kernel() 
{
    # ںжں̬,û̬ں̬,жػᵼϲҵʧ
    echo "remove all pangea pcie_ep kernel ...                           ${STATUS_RUNNING}"
    echo "remove all pangea pcie_ep kernel ...                           ${STATUS_DONE}"
    return 0
}

insmod_all_kernel() 
{
    echo "insmod all pangea pcie_ep kernel ...                           ${STATUS_RUNNING}"
    insmod_ko pcie_ep.ko
    echo "insmod all pangea pcie_ep kernel ...                           ${STATUS_DONE}"
    return 0
}

pcie_ep_service_start()
{
    echo -e "start pcieepservice ...                           ${STATUS_RUNNING}"

    remove_all_kernel
    if [ $? -ne 0 ];then
        echo -e "Notice: remove all kernel ...                           ${STATUS_FAILED}"
        exit 1
    fi
    
    insmod_all_kernel
    if [ $? -ne 0 ];then
        echo -e "Notice: insmod all kernel ...                           ${STATUS_FAILED}"
        exit 1
    fi
}

pcie_ep_service_stop()
{
    echo -e "stop pcieepservice ...                           ${STATUS_DONE}"
    remove_all_kernel
    if [ $? -ne 0 ];then
        echo -e "Notice: remove all kernel ...                           ${STATUS_FAILED}"
        exit 1
    fi
}

pcie_ep_service_status()
{
    echo -e "pcieepservice status ...                           ${STATUS_RUNNING}"
}

case "$1" in
    start)
        pcie_ep_service_start
        ;;
    stop)
        pcie_ep_service_stop
        ;;
    status)
        pcie_ep_service_status
        ;;
    *)
        echo "Usage: $0 {start|stop|status}"
        exit 1
        ;;
esac
