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

. /usr/cisco/bin/ciscosetup.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

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

    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 5
    wl -i apr0v0 pspretend_retry_limit 5
    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 msglevel 0
    wl -i apr0v0 msglevel 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

# For CFP - Disabling RX/TX CFP
    wl -i apr1v0 cfp_rcb 0
    wl -i apr0v0 cfp_rcb 0
    wl -i apr1v0 cfp_tcb 0
    wl -i apr0v0 cfp_tcb 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 cur_etheraddr
          wl -i $vap_name pspretend_retry_limit 5
          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
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

    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 5
    wl -i apr0v0 pspretend_retry_limit 5
    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 msglevel +error
    wl -i apr0v0 msglevel +error
    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 cur_etheraddr
          wl -i $vap_name pspretend_retry_limit 5
          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
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
