#!/bin/sh
#set -x
#dmesg -n 7

. /usr/cisco/bin/ciscosetup.sh
. /usr/bin/platformfunc.sh

# Create file /storage/rxtx_mode if it does not exist.
# This file is not used when CAPWAP=1.
if [ ! -e /storage/rxtx_mode ] ; then
    echo rx >  /storage/rxtx_mode
fi

if [ ! -e /storage/boot_debug ]; then
    echo 0 > /storage/boot_debug
fi

ap_type=`cat /AP_TYPE_NAME_STR`
#echo "ap_type=$ap_type"
if [ $ap_type == "AP_9115AXI" ] || [ $ap_type == "AP_9115AXE" ] ||
     [ $ap_type == "AP_1900I" ] || [ $ap_type == "AP_1900E" ]; then
    # remove Vancouver power tables not used on SaltSpring to free memory
    rm -f /radio_fw/VI_R2.csv
    rm -f /radio_fw/VI_R5.csv
    rm -f /radio_fw/VI_X5.csv
    rm -f /radio_fw/VE_R2.csv
    rm -f /radio_fw/VE_R5.csv
    rm -f /radio_fw/VE_X5.csv
    rm -f /radio_fw/VP_R2.csv
    rm -f /radio_fw/VP_R5.csv
    rm -f /radio_fw/VP_X5.csv
    rm -f /radio_fw/VI_EVM_2.csv
    rm -f /radio_fw/VI_EVM_5.csv
    rm -f /radio_fw/VI_EVM_X5.csv
    rm -f /radio_fw/VE_EVM_2.csv
    rm -f /radio_fw/VE_EVM_5.csv
    rm -f /radio_fw/VE_EVM_X5.csv
    rm -f /radio_fw/EVM_X5.csv
    rm -f /radio_fw/RHL_R2.csv
    rm -f /radio_fw/RHL_R5.csv
    rm -f /radio_fw/RHL_E2.csv
    rm -f /radio_fw/RHL_E5.csv
    rm -f /radio_fw/RHL_EVM_2.csv
    rm -f /radio_fw/RHL_EVM_5.csv
fi

if [ $ap_type == "AP_9120AXI" ] || [ $ap_type == "AP_9120AXE" ] || [ $ap_type == "AP_9120AXP" ]; then
    # remove SaltSpring power tables not used on Vancouer to free memory
    rm -f /radio_fw/SS_I_R2.csv
    rm -f /radio_fw/SS_I_R5.csv
    rm -f /radio_fw/SS_E_R2.csv
    rm -f /radio_fw/SS_E_R5.csv
    rm -f /radio_fw/SS_I_EVM_2.csv
    rm -f /radio_fw/SS_I_EVM_5.csv
    rm -f /radio_fw/SS_E_EVM_2.csv
    rm -f /radio_fw/SS_E_EVM_5.csv
fi

if [ "$MERAKI_BOARD" == "axel-bcm" ]; then
    wmac=`cat /MERAKI_MAC`
    rmac0=`cat /COOKIE_R0_MAC`

    irq_affinity_num=`grep -E -m1 'apr1v0' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
    [ -n "$irq_affinity_num" ] && echo 1 > /proc/irq/$irq_affinity_num/smp_affinity

    irq_affinity_num=`grep -E -m1 'apr0v0' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
    [ -n "$irq_affinity_num" ] && echo 2 > /proc/irq/$irq_affinity_num/smp_affinity

    crypto_mods="crypto_netdev.ko"
    for mod in $crypto_mods; do
      [ -f /lib/modules/${mod} ] && modload /lib/modules/${mod} && modrm /lib/modules/${mod}
    done
    ifconfig dtls_encrypt up
    ifconfig dtls_decrypt up
    for pid in $(pidof cryptoworker) ; do
      taskset -p 0xe ${pid}
    done

    ifconfig apr0v0 down
    ifconfig apr0v0 hw ether $rmac0
    wl -i apr0v0 ap 1
    wl -i apr0v0 mpc 0
    wl -i apr0v0 mbss 1
    # enable radar detection if radio0 is XOR
    xor=$(cat /var/platform/radio0)
    if [ "$xor" == "XOR" ]; then
        wl -i apr0v0 radar 1
    fi
    wl -i apr0v0 spect 1
    wl -i apr0v0 amsdu_aggsf 3
    ifconfig apr0v0 up

    ifconfig apr1v0 down
    rmac0=$(echo -n $rmac0 | sed 's/.\{1\}$//')
       temp1=15
    mac_last_char=$( printf "%X" $temp1)
    vap_mac=$(echo $rmac0$mac_last_char)
    ifconfig apr1v0 hw ether $vap_mac
    wl -i apr1v0 ap 1
    wl -i apr1v0 mpc 0
    wl -i apr1v0 mbss 1
    wl -i apr1v0 spect 1
    wl -i apr1v0 radar 1
    wl -i apr1v0 amsdu_aggsf 3
    ifconfig apr1v0 up

    wl -i apr1v0 pspretend_retry_limit 50
    wl -i apr0v0 pspretend_retry_limit 50
    wl -i apr1v0 prslimit 1
    wl -i apr0v0 prslimit 1
    wl -i apr0v0 fcache 0
    wl -i apr1v0 fcache 0
    wl -i apr0v0 ssid apr0v0
    wl -i apr1v0 ssid apr1v0
    wl -i apr0v0 bss 0
    wl -i apr1v0 bss 0
    wl -i apr1v0 band a
    wl -i apr0v0 band b
    wl -i apr1v0 scb_timeout 10
    wl -i apr0v0 scb_timeout 10
#    wl -i apr1v0 scan_force_tx 1
#    wl -i apr0v0 scan_force_tx 1
    ethswctl -c hw-switching -o disable
    # This is to make sure keepalive messages are not blocked.
    ethswctl -c dosctrl -v 0


    for radio_num in  0 1
    do
        constV="v"
        const0="0"
        for vap_num in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
        do
          vap_name=$(echo apr$radio_num$constV$vap_num)
          radio_name=$(echo apr$radio_num$constV$const0)
          temp1=`expr 15 - $vap_num`
          mac_last_char=$( printf "%X" $temp1)
          if [ $radio_num -lt 1 ]; then
               mac_last_char=$( printf "%X" $vap_num)
          fi
          vap_mac=$(echo $rmac0$mac_last_char)
          wl -i $radio_name ssid -C $vap_num $vap_name
          wl -i $vap_name down
          wl -i $vap_name bss 0
          wl -i $vap_name cur_etheraddr $vap_mac
          wl -i $vap_name pspretend_retry_limit 50
          ifconfig $vap_name down
          ifconfig $vap_name hw ether $vap_mac
          ifconfig $vap_name up
        done
        mon_name=$(echo "mon"$radio_num)
        wl -i $radio_name monitor 1
        ifconfig $mon_name up
    done

    # disable Phy EEE by default
    ethctl wired0 eee off

elif [ "$MERAKI_BOARD" == "ax-bcm32" ]; then
    wmac=`cat /MERAKI_MAC`
    rmac0=`cat /COOKIE_R0_MAC`

    irq_affinity_num=`grep -E -m1 'apr1v0' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
    [ -n "$irq_affinity_num" ] && echo 1 > /proc/irq/$irq_affinity_num/smp_affinity

    irq_affinity_num=`grep -E -m1 'apr0v0' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
    [ -n "$irq_affinity_num" ] && echo 2 > /proc/irq/$irq_affinity_num/smp_affinity

    crypto_mods="crypto_netdev.ko"
    for mod in $crypto_mods; do
      [ -f /lib/modules/${mod} ] && modload /lib/modules/${mod} && modrm /lib/modules/${mod}
    done
    ifconfig dtls_encrypt up
    ifconfig dtls_decrypt up
    for pid in $(pidof cryptoworker) ; do
      taskset -p 0xe ${pid}
      renice -n -20 -p ${pid}
    done
    echo 1 > /proc/cryptonet/enc_threshold
    echo 1 > /proc/cryptonet/dec_threshold
    echo 25 > /proc/cryptonet/dec_budget

    ifconfig apr0v0 down
    ifconfig apr0v0 hw ether $rmac0
    wl -i apr0v0 ap 1
    wl -i apr0v0 mpc 0
    wl -i apr0v0 mbss 1
    # enable radar detection if radio0 is XOR
#    xor=$(cat /var/platform/radio0)
#    if [ "$xor" == "XOR" ]; then
#        wl -i apr0v0 radar 1
#    fi
    wl -i apr0v0 spect 1
    wl -i apr0v0 amsdu_aggsf 3
    ifconfig apr0v0 up

    ifconfig apr1v0 down
    rmac0=$(echo -n $rmac0 | sed 's/.\{1\}$//')
    temp1=15
    mac_last_char=$( printf "%X" $temp1)
    vap_mac=$(echo $rmac0$mac_last_char)
    ifconfig apr1v0 hw ether $vap_mac
    wl -i apr1v0 ap 1
    wl -i apr1v0 mpc 0
    wl -i apr1v0 mbss 1
    wl -i apr1v0 spect 1
    wl -i apr1v0 radar 1
    wl -i apr1v0 amsdu_aggsf 3
    ifconfig apr1v0 up

    wl -i apr1v0 pspretend_retry_limit 50
    wl -i apr0v0 pspretend_retry_limit 50
    wl -i apr1v0 prslimit 1
    wl -i apr0v0 prslimit 1
    wl -i apr0v0 fcache 0
    wl -i apr1v0 fcache 0
    wl -i apr0v0 ssid apr0v0
    wl -i apr1v0 ssid apr1v0
    wl -i apr0v0 bss 0
    wl -i apr1v0 bss 0
    wl -i apr1v0 scb_timeout 10
    wl -i apr0v0 scb_timeout 10
#    wl -i apr1v0 scan_force_tx 1
#    wl -i apr0v0 scan_force_tx 1
    ethswctl -c hw-switching -o disable
    # This is to make sure keepalive messages are not blocked.
    ethswctl -c dosctrl -v 0

    archerctl yield_budget --set 128
    for radio_num in  0 1
    do
        constV="v"
        const0="0"
        for vap_num in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
        do
          vap_name=$(echo apr$radio_num$constV$vap_num)
          radio_name=$(echo apr$radio_num$constV$const0)
          temp1=`expr 15 - $vap_num`
          mac_last_char=$( printf "%X" $temp1)
          if [ $radio_num -lt 1 ]; then
               mac_last_char=$( printf "%X" $vap_num)
          fi
          vap_mac=$(echo $rmac0$mac_last_char)
          wl -i $radio_name ssid -C $vap_num $vap_name
          wl -i $vap_name down
          wl -i $vap_name bss 0
          wl -i $vap_name cur_etheraddr $vap_mac
          wl -i $vap_name pspretend_retry_limit 50
          ifconfig $vap_name down
          ifconfig $vap_name hw ether $vap_mac
          ifconfig $vap_name up
        done
        mon_name=$(echo "mon"$radio_num)
        wl -i $radio_name monitor 1
        ifconfig $mon_name up
    done

    if [ $ap_type == "AP_9105AXW" ]; then
        ifrename eth1 wired1
        ifrename eth2 wired2
        ifrename eth3 wired3
        ifconfig wired1 txqueuelen 80
        ifconfig wired2 txqueuelen 80
        ifconfig wired3 txqueuelen 80
        ifconfig wired1 up
        ifconfig wired2 up
        ifconfig wired3 up
        echo 0 > /proc/switch/lan1_phy
        echo 0 > /proc/switch/lan2_phy
        echo 0 > /proc/switch/lan3_phy

        ifconfig eth4 up
        ifconfig eth5 up
    fi

    # Force init WAN port PHY for packet loss issue in speed 2.5Gbps
    board_name="`plat_get_board_name`"
    if [ "$board_name" == "Somerset-WP" ]; then
        # BCM54991EL reset phy, 28 is WAN phy address. 0x1e4191 is reset register
        ethctl phy ext 28 0x1e4191 0x0001
        # reset mode PMA/PMD,default speed 1G
        ethctl phy ext 28 0x010000 0xA000
        sleep 1

        # set data2_reg pair swap,because of layout,change mdi 4 pin ABCD to DCBA .so set it DCBA.
        ethctl phy ext 28 0x1e4039 0x1b
        # set mdio command handler process,0x1e4005 is CMD register,0x8001 is command CMD_SET_PAIR_SWAP.
        ethctl phy ext 28 0x1e4005 0x8001

    elif [ "$board_name" == "Ellesmere-I" -o "$board_name" == "Ellesmere-E" ]; then
        # Restt phy. 30 is WAN phy addr
        ethctl phy ext 30 0x1e4191 0x0001
        ethctl phy ext 30 0x010000 0xA000
        sleep 1
    fi

    # disable Phy EEE by default
    ethctl wired0 eee off
fi

# check kernel cmdline for hardware watchdog reset flag
if grep -q wdgtriggered=1 /proc/cmdline; then
    echo 1 > /tmp/hw_watchdog_reboot
fi

exit 0
