#!/bin/sh
#
# Install IGB driver
#

#import common helpers
. /etc/init.d/mod_ins/module-load-functions

function modprobe_mknod () {
    lsmod | grep -q $1 || modprobe "$@"
    rm -f /dev/$1
    mknod /dev/$1 c $(grep " $1$" /proc/devices | cut -f1 -d\ ) 0
}

. /etc/init.d/spirit_pd.sh

function psinb_on_bcm_knet () {
    local plat_type=$(iofpga_reg_read 0 4)
    local result=$(echo ${plat_type} | cut -c3-3)
    case ${result} in
        3) return 0 ;;  # Taihu
        *) platform_log_console "non-Taihu platform"
           return 1 ;;
    esac
}

function enable_dnx_controller ()
{
    JERICHO_CNTRL_REG_0=0x000003A0
    iofpga_reg_write 1 JERICHO_CNTRL_REG_0 0x10
    sleep 5
    while [ $(lspci -nn | grep 14e4:83 | wc -l) -eq 0 ]; do
        sleep 0.5
        echo 1 > /sys/class/pci_bus/0000:04/rescan
    done
}

function create_psinb ()
{
    if psinb_on_bcm_knet; then
        enable_dnx_controller
	boot_debug "Loading linux-bcm-knet driver on RP ..."
	modprobe_mknod linux-bcm-knet use_napi=1 use_rx_skb=1 rx_rate=400000,400000,400000,400000 default_mtu=9400 rx_buffer_size=9728
	boot_debug "Bringing up bcm0 interface ..."
	ifconfig bcm0 mtu 9728 up
	boot_debug "Creating ps-inb interface ..."
	python /usr/sbin/bcm-knet-init.py
    else
	# Default case
	boot_debug "Loading IXGBE driver on RP ..."
	lsmod | grep -q ixgbe || modprobe ixgbe
    fi
}

case "$1" in

    start)
        boardtype=$(get_cctrl_board_type)
        if [ "$boardtype" = "LC" ]; then
            boot_debug "Loading IGB driver on LC ..."
            insmod -f /lib/modules/klm_ins_igb.o card_index=$(get_cmdline_card_index) dis_vlan_filter=Y
        else
            boot_debug "Loading IGB driver on RP ..."
            lsmod | grep -q klm_ins_igb || insmod -f /lib/modules/klm_ins_igb.o card_index=$(get_cmdline_card_index)

            create_psinb
        fi
        ;;
    stop)
        boot_debug "Unloading IGB driver ..."
        /sbin/rmmod klm_ins_igb
        boot_debug "Unloading IXGBE driver ..."
        /sbin/rmmod ixgbe
        ;;
esac
