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

. /usr/cisco/bin/ciscosetup.sh

if [ "$MERAKI_BOARD" == "barbados" -o "$MERAKI_BOARD" == "axel-bcm" -o "$MERAKI_BOARD" == "ax-bcm32" ]; then
  modload /lib/modules/mtdoops.ko mtddev=oops record_size=65536
  modrm /lib/modules/mtdoops.ko
fi

[ -f /lib/modules/ipv6.ko ] && modload /lib/modules/ipv6.ko && modrm /lib/modules/ipv6.ko
[ -f /lib/modules/llc.ko ] && modload /lib/modules/llc.ko && modrm /lib/modules/llc.ko
[ -f /lib/modules/stp.ko ] && modload /lib/modules/stp.ko && modrm /lib/modules/stp.ko

# Check for platform specific modload manipulation before we
# hit the next block that loads all modules
if [ -f /usr/bin/modload_post.sh ]; then
  . /usr/bin/modload_post.sh
fi

for mod in /lib/modules/*.ko; do
    modname=`basename $mod .ko | sed -e 'y/-/_/'`
    if [ "$modname" != "dummy" -a "$modname" != "ramoops" \
        -a "$modname" != "phram" -a "$modname" != "nandsim" \
        -a "$modname" != "pppol2tp" -a "$modname" != "bcm_click" \
        -a "$modname" != "ag7100_mod" -a "$modname" != "ag7240_mod" \
        -a "$modname" != "jffs2" -a "$modname" != "gpio_pca953x" \
        -a "$modname" != "i2c_core" -a "$modname" != "i2c_algo_bit" \
        -a "$modname" != "i2c_gpio" -a "$modname" != "i2c_dev" \
        -a "$modname" != "mv_nss_api"  -a "$modname" != "tcrypt" \
        -a "$modname" != "led_module" \
        -a "$modname" != "at24" -a "$modname" != "nolan_driver" \
        -a "$modname" != "nolan_xm_driver" -a "$modname" != "nolan_xm_device" \
        -a "$modname" != "nolan_usb_driver" -a "$modname" != "nolan_usb_device" \
        -a "$modname" != "nolan_rlan_capability" -a "$modname" != "cdc_ether" \
        -a "$modname" != "cp210x" -a "$modname" != "rndis_host" \
        -a "$modname" != "exar" -a "$modname" != "wl" \
        -a "$modname" != "usb_storage" -a "$modname" != "usbserial" \
        -a "$modname" != "rhl" -a "$modname" != "rhlcmddisp" \
        -a "$modname" != "marlin_driver" -a "$modname" != "marlin_device" \
        -a "$modname" != "dualdfs" -a "$modname" != "tps2388" \
        -a ! -e /sys/module/$modname ]; then
        echo $mod | grep -l "test\.ko" > /dev/null ||
            (modload $mod && modrm $mod)
    fi
done

if [ "$MERAKI_BOARD" == "axel-bcm" -o "$MERAKI_BOARD" == "ax-bcm32" ]; then
  board_id=`cat /var/platform/board_id`
  if [ -f /lib/modules/wl.ko ]; then
    modload /lib/modules/wl.ko board_id=$board_id && modrm /lib/modules/wl.ko
  fi
fi


#load pse kernel module
ap_type=`cat /AP_TYPE_NAME_STR`
if [ $ap_type == "IW_6300HD" ] || [ $ap_type == "IW_6300HA" ] ||
   [ $ap_type == "IW_6300HW" ] || [ $ap_type == "ESW_6300" ]; then
    modload /lib/modules/tps2388.ko && modrm /lib/modules/tps2388.ko
    echo tps2388 0x24 > /sys/bus/i2c/devices/i2c-3/new_device
    setup_gpio "46" "out" "pse_enable"
elif [ $ap_type == "AP_9105AXW" ]; then
    setup_gpio "405" "out" "pse_enable"
fi

if [ $ap_type == "AP_9120AXI" ] || [ $ap_type == "AP_9120AXE" ] ||
   [ $ap_type == "AP_9115AXI" ] || [ $ap_type == "AP_9115AXE" ]; then
    ifconfig wired0 mtu 1600
fi

echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6

if [ "$(cat /proc/sys/vm/min_free_kbytes)" -lt 1024 ]; then
        echo 1024 > /proc/sys/vm/min_free_kbytes
fi

# turn on sfp detect
#TODO remove duplo later
if [ "$BOARD_NAME"  == "milos" ] || [ "$BOARD_NAME"  == "duplo" ]; then
  setup_gpio "43" "in" "sfp_monitor"
fi


# Generate module load log file for FIQ/NMI decode
boot_count=`board_data_config -b -a /storage/BOOT_COUNT`
cat /proc/modules > /storage/syslogs/$boot_count.modlog

exit 0
