# /bin/sh

# Copyright (c) 2009 The Chromium OS Authors. All rights reserved.
# Distributed under the terms of the GNU General Public License v2

#
# Helper script to setup compat-wireless configuration.
#

S=${1:?No kernel source directory specified}

COMPAT_WIRELESS="${S}"/chromeos/compat-wireless
COMPAT_VERSION=`cat ${COMPAT_WIRELESS}/compat_version`
COMPAT_RELEASE=`cat ${COMPAT_WIRELESS}/compat_version`
COMPAT_BASE_TREE=`cat ${COMPAT_WIRELESS}/compat_base_tree`
COMPAT_BASE_TREE_VERSION=`cat ${COMPAT_WIRELESS}/compat_base_tree_version`
# TODO(sleffler) calculate CONFIG_COMPAT_KERNEL version

COMPAT_CONFIG='
	CONFIG_COMPAT_KERNEL_33=y
	CONFIG_COMPAT_FIRMWARE_CLASS=m

	CONFIG_COMPAT_RFKILL=y
	CONFIG_RFKILL_BACKPORT=y
	CONFIG_RFKILL_BACKPORT_INPUT=y

	CONFIG_COMPAT_WIRELESS=m
	CONFIG_COMPAT_WIRELESS_MODULES=m

	CONFIG_MAC80211=m
	CONFIG_MAC80211_LEDS=y
	CONFIG_MAC80211_DEBUGFS=y
	CONFIG_MAC80211_RC_MINSTREL=y
	CONFIG_MAC80211_RC_DEFAULT="minstrel"
	CONFIG_COMPAT_MAC80211_RC_DEFAULT="minstrel"

	CONFIG_CFG80211=m
	CONFIG_CFG80211_DEBUGFS=y
	CONFIG_CFG80211_DEFAULT_PS=y
	CONFIG_CFG80211_WEXT=y

	CONFIG_ATH=y
	CONFIG_ATH_COMMON=m
	CONFIG_ATH_DEBUG=y
	CONFIG_ATH5K=m
	CONFIG_ATH9K=m
	CONFIG_ATH9K_HW=m
	CONFIG_ATH9K_COMMON=m
	CONFIG_ATH9K_DEBUGFS=y

	CONFIG_IWLWIFI=m
	CONFIG_IWLWIFI_SPECTRUM_MANAGEMENT=y
	CONFIG_IWLAGN=m
	CONFIG_COMPAT_IWL4965=y
	CONFIG_IWL5000=y
	CONFIG_IWL3945=m
	CONFIG_IWL3945_SPECTRUM_MANAGEMENT=y
	CONFIG_IWLWIFI_DEBUG=y
	CONFIG_IWLWIFI_DEBUGFS=y

	CONFIG_USB_NET_COMPAT_CDCETHER=m
	CONFIG_USB_NET_COMPAT_RNDIS_HOST=m
	CONFIG_USB_COMPAT_USBNET=m
'
echo "Configure compat-wireless: ${COMPAT_CONFIG}"

#
# Edit Makefiles to reflect configuration knobs
#
SED_ARGS=
for c in $COMPAT_CONFIG; do
	a=`echo $c | sed s/=.*//`
	b=`echo $c | sed s/.*=//`
	SED_ARGS="$SED_ARGS -e s/[\$]("$a")/"$b"/"
done

Makefiles=`find -L "${COMPAT_WIRELESS}" -name Makefile`
for m in $Makefiles; do
	sed $SED_ARGS -i $m
done

# Construct include/linux/compat_autoconf.h
(cat<<EOF
#ifndef COMPAT_AUTOCONF_INCLUDED
#define COMPAT_AUTOCONF_INCLUDED
/*
* Automatically generated by chromeos-base/kernel/kernel-*.ebuild
* compat-wireless-2.6: $COMPAT_VERSION
* linux-2.6: v2.6.32
*/
#define COMPAT_BASE_TREE "$COMPAT_BASE_TREE"
#define COMPAT_BASE_TREE_VERSION "$COMPAT_BASE_TREE_VERSION"
#define COMPAT_PROJECT "Compat-wireless"
#define COMPAT_VERSION "$COMPAT_VERSION"

#ifndef CONFIG_WIRELESS_EXT
#error Compat-wireless requirement: CONFIG_WIRELESS_EXT must be enabled in your kernel
#endif /* CONFIG_WIRELESS_EXT */
EOF
 for c in $COMPAT_CONFIG; do
	a=`echo $c | sed s/=.*//`
	b=`echo $c | sed s/.*=//`
	case $b in
	m|y)
	    echo "#define $a 1";;
	*)
	    echo "#define $a $b";;
	esac
 done
 cat<<'EOF'
#ifdef CONFIG_NET_SCHED
#ifdef CONFIG_NETDEVICES_MULTIQUEUE
#ifndef CONFIG_MAC80211_QOS
#define CONFIG_MAC80211_QOS 1
#endif /* CONFIG_MAC80211_QOS */
#endif
#endif
#endif /* COMPAT_AUTOCONF_INCLUDED */
EOF
)>"${COMPAT_WIRELESS}"/include/linux/compat_autoconf.h
