#! /bin/bash
cd /opt/bcm68620

# These files are mounted using tmpfs, so they will be deleted upon reboot
LOCK_DIR_INIT=/tmp/bcm68620_svk_init
FILE_INIT_DONE="$LOCK_DIR_INIT/done"
LOCK_DIR_KERNEL_LOG_OWNED=/tmp/bcm68620_kernel_log_owned

USER_APPL_ARGS=""
KT2_PORT=""
SWKT2_PORT=""
KERNEL_LOG="y"
COOP_DBA="n"

while (($#)); do
    case "$1" in
    --kt2)
        shift
        KT2_PORT="$1"
        ;;
    --swkt2)
        shift
        SWKT2_PORT="$1"
        ;;
    --proxy) # for backward compatibility (could just use '-proxy')
        shift
        USER_APPL_ARGS="$USER_APPL_ARGS -proxy $1"
        ;;
    -nl)
        KERNEL_LOG="n"
        USER_APPL_ARGS="$USER_APPL_ARGS $1"
        ;;
    -coop_dba)
        COOP_DBA="y"
        ;;
    *)
        USER_APPL_ARGS="$USER_APPL_ARGS $1"
        ;;
    esac
    shift
done

# Check if the initialization steps (installing kernel modules, etc) have already been done.
# If not, start the initialization process.
if mkdir "$LOCK_DIR_INIT" 2>/dev/null; then
    trap "rmdir \"$LOCK_DIR_INIT\"" EXIT
    echo "Initializing BCM68620 SVK..."

    insmod ll_pcie.ko
    sleep 1

    insmod os_linux.ko
    sleep 1

    source ./i2c_addrs.sh
    insmod i2c_devs.ko
    sleep 1

    function probe_dev
    {
        2>/dev/null echo maple_i2c 0x$1 > /sys/bus/i2c/devices/i2c-0/new_device
    }

    # Suppress error warnings in case device cannot be probed because it is inexistent.
    dmesg -n 1
    probe_dev $I2C_SW0_I2C_ADDR
    probe_dev $I2C_SW1_I2C_ADDR
    probe_dev $I2C_SW2_I2C_ADDR
    probe_dev $I2C_SW3_I2C_ADDR
    probe_dev $I2C_SW4_I2C_ADDR
    probe_dev $SFP_I2C_ADDR1
    probe_dev $SFP_I2C_ADDR2
    probe_dev $FPGA_I2C_ADDR
    probe_dev $PON_DPLL_I2C_ADDR
    probe_dev $PM_DPLL_I2C_ADDR
    probe_dev $CXP_T_I2C_ADDR
    probe_dev $CXP_R_I2C_ADDR
    probe_dev $PCIE_SW_I2C_ADDR
    dmesg -n 8

    rm -f /dev/maple_i2c
    mknod /dev/maple_i2c c `cat /sys/module/i2c_devs/parameters/maple_i2c_chrdev_major` 0

    if [ "$KT2_PORT" != "" ]; then
        echo k 1 > /proc/maple_i2c/i2c
        insmod linux-kernel-bde.ko
        sleep 1
        cat /proc/linux-kernel-bde
        sleep 1
        insmod linux-uk-proxy.ko
        sleep 1
        mknod /dev/linux-uk-proxy c 125 0
        sleep 1
        insmod linux-bcm-diag-full.ko
        sleep 1
        echo "KT2 will wait on port $KT2_PORT"
        ./bcm.user.proxy -d $KT2_PORT &
    fi

    if [ "$SWKT2_PORT" != "" ]; then
        echo "SW KT2 init"
        insmod linux-kernel-bde.ko
        sleep 1
        cat /proc/linux-kernel-bde
        sleep 1
        insmod linux-uk-proxy.ko
        sleep 1
        mknod /dev/linux-uk-proxy c 125 0
        sleep 1
        insmod linux-bcm-diag-full.ko
        sleep 1
        echo "KT2 will wait on port $SWKT2_PORT"
        ./bcm.user.proxy -d $SWKT2_PORT &
    fi

    insmod bcm_dev_ctrl_linux.ko
    sleep 1
    
    if [ "$COOP_DBA" != "n" ]; then
        insmod coop_dba_linux.ko
        sleep 1
    fi
    
    rm -f /dev/bcm_log
    mknod /dev/bcm_log c `cat /sys/module/bcm_dev_ctrl_linux/parameters/dev_log_chrdev_major` 0
    mknod /dev/maple_dev_ctrl c `cat /sys/module/bcm_dev_ctrl_linux/parameters/maple_dev_ctrl_chrdev_major` 0

    touch "$FILE_INIT_DONE"
    trap - EXIT
else
    if [ -f "$FILE_INIT_DONE" ]; then
        echo "Skipped BCM68620 SVK initialization since it has already been done"
    else
        echo "Waiting for SVK initialization to complete..."
        while [ ! -f "$FILE_INIT_DONE" ]; do
            sleep 1
        done
    fi
fi

# Only one application can have the kernel logger enabled at once.
# If someone else already owns the kernel logger, run without it.
if [ "$KERNEL_LOG" == "y" ]; then
    if mkdir "$LOCK_DIR_KERNEL_LOG_OWNED" 2>/dev/null; then
        trap "rmdir \"$LOCK_DIR_KERNEL_LOG_OWNED\"" EXIT
    else
        USER_APPL_ARGS="$USER_APPL_ARGS -nl"
        echo "Running without kernel logger since someone else owns it"
    fi
fi

#echo "In Band: Launching BCM68620 user space device control application "
#./bcm_dev_ctrl_user > /dev/null 2>&1 &

echo "Launching BCM68620 user application with options \"$USER_APPL_ARGS\""
./bcm_user_appl $USER_APPL_ARGS
