#!/bin/sh
# 
# Install CCTRL Driver
#

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

# user_card_type
# = 1 for sc card
# = 2 for fc card
# = 3 for sup card	
# = 4 for lc card	
# = 5 for tor	
card_type=$(get_cctrl_card_type)

# FRETTA_BRINGUP_HACK
function on_sim {
local qemu_440chk=`lspci |grep -i 440FX |wc -l`
local qemu_cpuchk=`cat /proc/cpuinfo |grep QEMU | wc -l`
    [ "$qemu_440chk" != "0" -a "$qemu_cpuchk" != "0" ]
}

if [ "$card_type" == "Unknown" ]; then
    cat /proc/cmdline
    echo "UNKNOWN CARD TYPE PASSED BY THE LOADER."
    echo "Make sure the firmware is upto date."
    echo "Rebooting..."
    reboot -f
fi

throttle_cctrl_interrupts() {

    #Interrupt throttling for cctrl irq lines
    cat /proc/interrupts | grep "cctrl" | grep -i "msi" >> /dev/null
    ret=$?
    a=`cat /proc/interrupts | grep cctrl | grep msi | awk '{print $1}'` 

    if [ $ret -eq 1 ] ; then
        boot_debug "Interrupt throttling disabled. No cctrl irq detected."
    else
        for token in $a
        do
            token=`echo "${token%?}"`
            echo "5000" > /proc/irq/$token/interrupts_per_sec_limit
        done
    fi
}

set_redun_state() {
  # only do this for sup
  if [ "$card_type" == "3" ] || [ "$card_type" == "73" ]; then
    iorw w e8000334 1 w
  fi
}

case "$1" in

    start)

        if [ -n "$IS_N3K" ]; then

            boot_debug "Loading I2C driver ..."
            insmod -f /lib/modules/klm_i2c.o module_card_index=$(get_cmdline_card_index)
        else
            boot_debug "Loading I2C driver ..."
            insmod -f /lib/modules/klm_i2c_stub.o
        fi

        boot_debug "Installing CCTRL driver for Fretta card_type $card_type ..."

        boardtype=$(get_cctrl_board_type)
        if [ "$boardtype" = "FC" ] || [ "$boardtype" == "XC" ]; then
	    on_sim || \
            insmod -f /lib/modules/klm_cctrli.o user_card_type=$card_type user_card_index=$(get_cmdline_card_index)
        elif [ -z "$NEED_GEM" ]; then
            on_sim || \
            insmod -f /lib/modules/klm_cctrli.o user_card_type=$card_type user_card_index=$(get_cmdline_card_index) platform_type=FRETTA
        else
            mpa_card_type=$(proc_cmdline_get mpa_index)
            if [ -z "$mpa_card_type" ]; then
                mpa_card_type=0
                # Lets not boot up if no GEM card is present 
                echo ">>>>>> NO GEM CARD FOUND !! <<<<<<<"
                echo ">>>>>>      Rebooting       <<<<<<<"
                echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
                sleep 5
                /sbin/telinit 6
            else
                boot_debug "Installing CCTRL driver for mpa_card_type $mpa_card_type ..."
		on_sim || \
                insmod -f /lib/modules/klm_cctrli.o user_card_type=$card_type mpa_card_type=$mpa_card_type
            fi
        fi
        
        # cctrl_bg needs isan_kthread
        insmod -f /lib/modules/klm_isan_kthread.o
        on_sim || \
        insmod -f /lib/modules/klm_cctrli_bg.o

        throttle_cctrl_interrupts
        set_redun_state

        ;;

    stop)
        boot_debug "Uninstalling CCTRL driver for card_type $card_type ..."
        if [ -f /vmachine ]; then
            /sbin/rmmod klm_cctrl2
        else
            /sbin/rmmod klm_cctrli platform_type=FRETTA
        fi
        ;;
    
esac

