#!/bin/sh
#===============================================================================
#
#  10-redpine_pre-up
#
#  Copyright (C) 2010 by Digi International Inc.
#  All rights reserved.
#
#  This program is free software; you can redistribute it and/or modify it
#  under the terms of the GNU General Public License version 2 as published by
#  the Free Software Foundation.
#
#
#  !Description: Load Redpine's wireless driver
#
#===============================================================================

set -e
# Driver Mode
#  (1) WiFi mode
#  (2) RF Eval mode
#DRIVER_MODE="1"

# BT Coexistence
#  (0) disable
#  (1) enable
#BT_COEXISTENCE="0"

# SDIO Clock frequency (MHz)
#SDIO_CLK="20"

# High speed mode
#  (0) disable
#  (1) enable
#ENABLE_HIGH_SPEED="0"

# TCP/UDP checksum offload
#  (0) disable
#  (1) enable
#TCP_CSUM_OFFLD="1"

# Debug Level
#  (0) quiet
#  (debug mask)
#DEBUG="0"
DEBUG=0xffff
## == Nothing to customize below this line == ##

[ "${IFACE}" != "wlan0" ] && exit 0

MODULES_DIR="/lib/modules/redpine"
FIRMWARE_DIR="/lib/firmware/redpine/"
FIRMWARE_DIR="/lib/firmware/redpine/v2.1.9c/"
MAC_ADDR="$(nvram print module ethaddr3 | sed 's,ethaddr3=,,g')"

# Driver mode"${kernel_params} dbg_level=${DEBUG}""${kernel_params} dbg_level=${DEBUG}" variable in u-boot takes precedence (for test purposes)
wdmode="$(ubootenv -p wdmode | sed 's,^wdmode=,,g')"
[ "${wdmode}" = "1" -o "${wdmode}" = "2" ] && DRIVER_MODE="${wdmode}"

[ -n "${DRIVER_MODE}" ] && \
	kernel_params="${kernel_params} driver_mode=${DRIVER_MODE}"
#kernel_params="${kernel_params} driver_mode=2"
[ -n "${BT_COEXISTENCE}" ] && \
	kernel_params="${kernel_params} BT_Coexistence=${BT_COEXISTENCE}"
[ -n "${SDIO_CLK}" ] && \
	kernel_params="${kernel_params} sdio_clock=${SDIO_CLK}"
[ -n "${ENABLE_HIGH_SPEED}" ] && \
	kernel_params="${kernel_params} enable_high_speed=${ENABLE_HIGH_SPEED}"
[ -n "${TCP_CSUM_OFFLD}" ] && \
	kernel_params="${kernel_params} tcp_csumoffld_enable=${TCP_CSUM_OFFLD}"
[ -n "${FIRMWARE_DIR}" ] && \
	kernel_params="${kernel_params} firmware_path=${FIRMWARE_DIR}"
[ -n "${MAC_ADDR}" ] && \
	kernel_params="${kernel_params} macaddr=${MAC_ADDR}"
[ -n "${DEBUG}" ] && \
	kernel_params="${kernel_params} dbg_level=${DEBUG}"

kernel_params="${kernel_params} dbg_level=0xffff"
#kernel_params="${kernel_params} crystal_freq=40000000"

kernel_params="${kernel_params} crystal_freq=20000000"

echo "kernel params: " ${kernel_params}
# Load the modules
_level="$(sysctl -e -n kernel.printk | cut -f1)"
#dmesg -n 4
grep -qs rwlpsdio /proc/modules || \
	modprobe.modutils -q --set-version redpine rwlpsdio ${kernel_params} 2>/dev/null || \
		modprobe.modutils -q -f --set-version redpine rwlpsdio ${kernel_params} || \
			echo "Loading rwlpsdio module: [FAILED]"
grep -qs ccwmx51_rwsdio /proc/modules || \
	modprobe.modutils -q --set-version redpine ccwmx51_rwsdio 2>/dev/null || \
		modprobe.modutils -q -f --set-version redpine ccwmx51_rwsdio || \
			echo "Loading ccwmx51_rwsdio module: [FAILED]"
dmesg -n "${_level}"

# Delay required so the interface 'wlan0' is settled down before trying to configure it.
sleep 1
