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

#
#
#
### BEGIN INIT INFO
# Provides:          pangea-sas-driver
# Description:       start stop sas service
### END INIT INFO

#ɹ״̬
STATUS_DONE="[\033[32m"OK"\033[0m]"
#ʧ״̬
STATUS_FAILED="[\033[32m"FAILED"\033[0m]"
#״̬
STATUS_RUNNING="[\033[32m"RUNNING"\033[0m]"
#δ״̬
STAUS_UNUSED="[\033[37m"UNUSED"\033[0m]"

sasservice_start()
{
	ARCH=`uname -i`
	local L_Int_Index=0
	#ȷ·
	DRV_PATH=/usr/lib/modules/pangea_sas
	SCSI_PATH=/lib/modules/$(uname -r)/kernel/drivers/scsi/
    LBC_PATH=/lib/modules/$(uname -r)/kernel/drivers/soc/hisilicon/lbc/
	if [ $(lsmod | grep scsi_transport_sas | wc -l) -eq 0 ];then
        ls ${SCSI_PATH}/scsi_transport_sas.ko* | xargs insmod
	fi

    if [ `lsmod | grep scsi_transport_sas | wc -l` -eq 0 ];then
        echo -e "Start sas service scsi_transport_sas driver...         "${STATUS_FAILED}
        exit -1
    fi

    if [ ${ARCH} == "aarch64" ]; then
        if [ `lsmod | grep lbc | wc -l` -eq 0 ];then
            if [ -e ${LBC_PATH}/lbc.ko ];then
                insmod ${LBC_PATH}/lbc.ko > /dev/null 2>&1
            elif [ -e ${DRV_PATH}/lbc.ko ];then
                insmod ${DRV_PATH}/lbc.ko > /dev/null 2>&1
            else
                echo -e "Start sas service not find lbc driver...         "${STATUS_FAILED}
                exit -1
            fi
        fi

        if [ `lsmod | grep lbc | wc -l` -eq 0 ];then
            echo -e "Start sas service lbc driver...         "${STATUS_FAILED}
            exit -1
        fi
    fi

    #x86bspCPLD
    if [ ${ARCH} != "aarch64" ]; then
        for((L_Int_Index=1; L_Int_Index<5; L_Int_Index++))
        do
            if [ `lsmod | grep bsp | wc -l` -ne 0 ];then
                break
            fi
            sleep 2
        done
    fi

    if [ -f "${DRV_PATH}/fast_reg_disk.ko" ]; then
        if [ $(lsmod | grep fast_reg_disk | wc -l) -eq 0 ];then
            insmod ${DRV_PATH}/fast_reg_disk.ko
        fi

        if [ $(lsmod | grep fast_reg_disk | wc -l) -eq 0 ];then
            echo -e "Start sas service fast_reg_disk not insmod"
            # debug info
            if [ $(cat kallsyms | grep scsi_mgmt_handler_register | wc -l) -eq 0 ];then
                echo -e "Euler kernel scsi_mgmt_handler_register not fount"
            fi
        fi
    fi

    if [ `lsmod | grep dam | wc -l` -eq 0 ];then
        insmod ${DRV_PATH}/dam.ko
    fi

    if [ `lsmod | grep dam | wc -l` -eq 0 ];then
        echo -e "Start sas service dam  driver...                 "${STATUS_FAILED}
        exit -1
    fi

    if [ `lsmod | grep sal | wc -l` -eq 0 ];then
        if [ `cat /etc/issue | grep -i "SUSE Linux" | wc -l` -eq 0 ]; then
            insmod ${DRV_PATH}/sal.ko
        else
            echo "Start sas service sal driver in SUSE..."
            insmod ${DRV_PATH}/sal.ko product_name=0
        fi
    fi

    if [ `lsmod | grep sal | wc -l` -eq 0 ];then
        echo -e "Start sas service sal  driver...                 "${STATUS_FAILED}
        exit -1
    fi

    if [ ${ARCH} == "aarch64" ]; then
        if [ -f "${DRV_PATH}/higgsv2.ko" ]; then
            if [ `lsmod | grep higgsv2 | wc -l` -eq 0 ];then
                insmod ${DRV_PATH}/higgsv2.ko
            fi

            if [ `lsmod | grep higgsv2 | wc -l` -eq 0 ];then
                echo -e "Start sas service higgsv2 driver...                 "${STATUS_FAILED}
                exit -1
            fi
        fi

        if [ -f "${DRV_PATH}/gluon.ko" ]; then
            if [ `lsmod | grep gluon | wc -l` -eq 0 ];then
                insmod ${DRV_PATH}/gluon.ko
            fi

            if [ `lsmod | grep gluon | wc -l` -eq 0 ];then
                echo -e "Start sas service gluon driver...                 "${STATUS_FAILED}
                exit -1
            fi
        fi
    else
        if [ -f "${DRV_PATH}/quark.ko" ]; then
            if [ `lsmod | grep quark | wc -l` -eq 0 ];then
                insmod ${DRV_PATH}/quark.ko
            fi
            if [ `lsmod | grep quark | wc -l` -eq 0 ];then
                echo -e "Start sas service quark driver...                 "${STATUS_FAILED}
                exit -1
            fi
        fi

        if [ -f "${DRV_PATH}/gluon.ko" ]; then
            if [ `lsmod | grep gluon | wc -l` -eq 0 ];then
                insmod ${DRV_PATH}/gluon.ko
            fi

            if [ `lsmod | grep gluon | wc -l` -eq 0 ];then
                echo -e "Start sas service gluon driver...                 "${STATUS_FAILED}
                exit -1
            fi
        fi
    fi

    # SES־ռű
    SES_SCRIPT_PATH=/usr/local/pangea_ses
    if [ -d ${SES_SCRIPT_PATH} ] && [ ! -L ${SES_SCRIPT_PATH} ];then
        if [ -f ${SES_SCRIPT_PATH}/ses_log_collect.sh ];then
        if [ `pgrep -fa ses_log_collect.sh | grep -v pgrep | wc -l` -eq 0 ];then
                setsid sh ${SES_SCRIPT_PATH}/ses_log_collect.sh 1>/dev/null 2>&1 &
            else
                echo "ses_log_collect.sh is already running, skip"
            fi
            if [ `pgrep -fa ses_log_collect.sh | grep -v pgrep | wc -l` -eq 0 ];then
                echo -e "Start ses log collect script...                 "${STATUS_FAILED}
            fi
        else
            echo "ses_log_collect.sh does not exist, skip"
        fi
    else
        echo "${SES_SCRIPT_PATH} is soft link file or does not exist, skip"
    fi

    echo -e "start sasservice ...                          "${STATUS_DONE}
}

sasservice_stop()
{
    echo -e "stop sasservice is not permitted...                           "${STATUS_DONE}
}

sasservice_status()
{

    echo -e "sasservice status ...                         "${STATUS_RUNNING}
}


case "$1" in
    start)
        sasservice_start
        ;;
    stop)
        sasservice_stop
        ;;
    status)
        sasservice_status
        ;;

    *)
        echo "Usage: $0 {start|stop|status}"
        exit 1
        ;;
esac
