#!/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 enable_dnx_controller ()
{
    JERICHO_CNTRL_REG_0=0x000003A0
    iofpga_reg_write 1 JERICHO_CNTRL_REG_0 0x10
    sleep 5
    while [ $(lspci -nn | grep 14e4:8[3-4] | wc -l) -eq 0 ]; do
        sleep 0.5
        echo 1 > /sys/class/pci_bus/0000:04/rescan
    done
}

function create_psinb ()
{
    num_psinb_on_bcm_knet
    local num_knet_psinb=$?

    case ${num_knet_psinb} in
        0)
            boot_debug "Loading IXGBE driver on RP ..."
            lsmod | grep -q ixgbe || modprobe ixgbe
            ;;

        1)
            local plat_type=$(iofpga_reg_read 0 4)
            local num=$( printf "0x%x" $plat_type )
            local result=$(($(( num >> 23 & 0x1 )) << 4 | $(( num >> 28 & 0xF ))))
            case ${result} in
                10)  ;&  #Peyto 1j+ with one psinb knet 
                11)  ;&  #Peyto CR 1J+ for one psinb
                15)  ;&  #Peyto TCAM CC HD 1J+ for one psinb
                14)  ;&  # TURIN CR and BIFROST 
                13)      #Peyto CR HD 1J+ for one psinb
                    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 debug=4096
		 ;;
	        *)
                   #Taihu is using this section to insert bcm-knet module
                    enable_dnx_controller
                    boot_debug "Loading linux-bcm-knet driver on RP ..."
                   #enabling all debugs so that we can see bcm-knet log in kern.log
                   #1048575=0xFFFFF
                   #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 debug=1048575
                   #4096=0x1000, turn on DBG_WARN in bcm-knet.c
                    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 debug=4096
                    boot_debug "Bringing up bcm-04 interface ..."
                    ifconfig bcm-04 mtu 9728 up
                    boot_debug "Creating ps-inb interface ..."
                    python /usr/sbin/bcm-knet-init.py start 0x04 ps-inb
                 ;;
            esac
	    ;;
        *)
            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 debug=4096
        esac
}

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
