#!/bin/bash
# Copyright 2009        Luis R. Rodriguez <mcgrof@gmail.com>
#
# This script allows you to select your compat-wireless driver and
# reduce compilation time.

DRIVERS_MAKEFILE="drivers/net/wireless/Makefile"
ATH_MAKEFILE="drivers/net/wireless/ath/Makefile"
ATH9K_MAKEFILE="drivers/net/wireless/ath/ath9k/Makefile"
BRCM80211_MAKEFILE="drivers/net/wireless/brcm80211/Makefile"
RT2X00_MAKEFILE="drivers/net/wireless/rt2x00/Makefile"
NET_WIRELESS_MAKEFILE="net/wireless/Makefile"
EEPROM_MAKEFILE="drivers/misc/eeprom/Makefile"
DRIVERS_NET_ATHEROS="drivers/net/ethernet/atheros/Makefile"
DRIVERS_NET_BROADCOM="drivers/net/ethernet/broadcom/Makefile"
DRIVERS_NET_USB_MAKEFILE="drivers/net/usb/Makefile"
SSB_MAKEFILE="drivers/ssb/Makefile"
BCMA_MAKEFILE="drivers/bcma/Makefile"

# used to backup files from foo to foo.${BACKUP_EXT}
# If you change this also modify restore_compat() and
# restore_file() below I couldn't find a way to use
# the $BACKUP_EXT there.
BACKUP_EXT="bk"

# Pretty colors
GREEN="\033[01;32m"
YELLOW="\033[01;33m"
NORMAL="\033[00m"
BLUE="\033[34m"
RED="\033[31m"
PURPLE="\033[35m"
CYAN="\033[36m"
UNDERLINE="\033[02m"

SUPPORTED_80211_DRIVERS="ath5k ath9k ath9k_htc carl9170 ath6kl b43 zd1211rw rt2x00 wl1251 wl12xx brcmsmac brcmfmac"

# b43 needs some more work for driver-select, the SSB stuff, plus
# what if you update b44 but not b43? It will bust.
SUPPORTED_ETH_DRIVERS="atl1 atl2 atl1e alx"

function usage {
	echo -e "${GREEN}Usage${NORMAL}: ${BOLD}$0${NORMAL} [ ${PURPLE}<driver-name>${NORMAL} | ${CYAN}<driver-group-name>${NORMAL} | ${GREEN}restore${NORMAL} ]"

	# These should match the switch below.
	echo -e "Supported 802.11 drivers:"
	for i in $SUPPORTED_80211_DRIVERS; do
		echo -e "\t${PURPLE}${i}${NORMAL}"
	done

	# These should match the switch below.
	echo -e "\nSupported group drivers:"
	echo -e "\t${CYAN}atheros${NORMAL} < ${PURPLE} ath5k ath9k carl9170 zd1211rw ath6kl ${NORMAL}>"
	echo -e "\t${CYAN}ath${NORMAL} < ${PURPLE} ath5k ath9k carl9170 ath6kl ${NORMAL}>"
	echo -e "\t${CYAN}brcm80211${NORMAL} < ${PURPLE} brcmsmac brcmfmac ${NORMAL}>"
	echo -e "\t${CYAN}intel${NORMAL} < ${PURPLE} iwlwifi, iwlegacy ${NORMAL}>"
	echo -e "\t${CYAN}rtl818x${NORMAL} < ${PURPLE} rtl8180 rtl8187 ${NORMAL}>"
	echo -e "\t${CYAN}rtlwifi${NORMAL} < ${PURPLE} rtl8192ce ${NORMAL}>"
	echo -e "\t${CYAN}wl12xx${NORMAL} < ${PURPLE} wl1251 wl12xx (SPI and SDIO)${NORMAL}>"
	
	echo -e "\nSupported group drivers: Bluetooth & Ethernet:"
	echo -e "\t${CYAN}atlxx${NORMAL} < ${PURPLE} atl1 atl2 atl1e alx ${NORMAL}>"
	echo -e "\t${CYAN}bt${NORMAL} < ${PURPLE} Linux bluetooth drivers ${NORMAL}>"

	echo -e "Restoring compat-wireless:"
	echo -e "\t${GREEN}restore${NORMAL}: you can use this option to restore compat-wireless to the original state"
}

function backup_file {
	if [ -f $1.${BACKUP_EXT} ]; then
		echo -e "Backup exists: ${CYAN}${1}.${BACKUP_EXT}${NORMAL}"
		return
	fi
	echo -e "Backing up makefile: ${CYAN}${1}.${BACKUP_EXT}${NORMAL}"
	cp $1 $1.bk
}

function disable_makefile
{
	backup_file $1
	echo > $1
}

function select_driver 
{
	backup_file $DRIVERS_MAKEFILE
	perl -i -ne 'print if /'$1'\)/ ' $DRIVERS_MAKEFILE
}

function select_drivers
{
	backup_file $DRIVERS_MAKEFILE
	CONFIGS=""
	COUNT=0
	for i in $@; do
		if [[ "$CONFIGS" = "" ]]; then
			CONFIGS="$i"
		else
			CONFIGS="${CONFIGS}|$i"
		fi
	done
	egrep "$CONFIGS" $DRIVERS_MAKEFILE > ${DRIVERS_MAKEFILE}.tmp
	mv ${DRIVERS_MAKEFILE}.tmp ${DRIVERS_MAKEFILE}
}

function disable_lib80211
{
	backup_file $NET_WIRELESS_MAKEFILE
	perl -i -ne 'print if ! /LIB80211/ ' $NET_WIRELESS_MAKEFILE
}

function disable_b44 {
	backup_file $DRIVERS_NET_BROADCOM
	perl -i -ne 'print if ! /CONFIG_B44/ ' $DRIVERS_NET_BROADCOM
}

function disable_ssb
{
	disable_makefile ${SSB_MAKEFILE}
	perl -i -ne 'print if ! /drivers\/ssb\//' Makefile
}

function disable_bcma
{
	disable_makefile ${BCMA_MAKEFILE}
	perl -i -ne 'print if ! /drivers\/bcma\//' Makefile
}

function disable_rfkill
{
	backup_file Makefile
	perl -i -ne 'print if ! /CONFIG_COMPAT_RFKILL/' Makefile
}

function disable_eeprom
{
	disable_makefile ${EEPROM_MAKEFILE}
	perl -i -ne 'print if ! /drivers\/misc\/eeprom\//' Makefile
}

function disable_usbnet
{
	disable_makefile ${DRIVERS_NET_USB_MAKEFILE}
	perl -i -ne 'print if ! /drivers\/net\/usb\//' Makefile
}

function disable_usbnet {
	perl -i -ne 'print if ! /CONFIG_COMPAT_NET_USB_MODULES/' Makefile
} 

function disable_ethernet {
	perl -i -ne 'print if ! /CONFIG_COMPAT_NETWORK_MODULES/' Makefile
} 

function disable_var_03 {
	perl -i -ne 'print if ! /CONFIG_COMPAT_VAR_MODULES/' Makefile
} 

function disable_bt {
	perl -i -ne 'print if ! /CONFIG_COMPAT_BLUETOOTH/' Makefile
} 

function disable_80211 {
	perl -i -ne 'print if ! /CONFIG_COMPAT_WIRELESS/' Makefile
}

function disable_bt_usb_ethernet {
	backup_file Makefile
	disable_usbnet
	disable_ethernet
	disable_bt
	disable_update-initramfs
}

function disable_bt_usb_ethernet_var {
	backup_file Makefile
	disable_bt_usb_ethernet
	disable_var_03
}

function enable_only_ethernet {
	backup_file Makefile
	backup_file $DRIVERS_NET_BROADCOM
	backup_file $DRIVERS_NET_ATHEROS
	disable_staging
	disable_usbnet
	disable_var_03
	disable_bt
	# rfkill may be needed if you enable b44 as you may have b43
	disable_rfkill
	disable_80211
}

function disable_var {
	disable_ssb
	disable_bcma
	disable_usbnet
	disable_eeprom
	disable_update-initramfs
} 

function disable_var_01 {
	disable_lib80211
	disable_var
}

function disable_var_02 {
	#var_01 with eeprom not disabled
	disable_lib80211
	disable_ssb
	disable_bcma
	disable_usbnet
	disable_update-initramfs
}

function disable_staging {
	backup_file Makefile
	perl -i -ne 'print if ! /CONFIG_COMPAT_STAGING/ ' Makefile
}

function disable_update-initramfs
{
	backup_file Makefile
	perl -i -ne 'print if ! /update-initramfs/' Makefile
}

function select_ath_driver 
{
	backup_file $ATH_MAKEFILE
	perl -i -ne 'print if /'$1'/ || /CONFIG_ATH_/ || /ath-objs/ || /regd.o/ || /hw.o/ || /key.o/' $ATH_MAKEFILE
	disable_var_01
}

function select_ath9k_driver
{
	select_ath_driver CONFIG_ATH9K_HW
	# In the future here we'll add stuff to disable ath9k_htc
}

function select_brcm80211_driver 
{
	backup_file $BRCM80211_MAKEFILE
	perl -i -ne 'print if /'$1'/ || /CONFIG_BRCMUTIL/ ' $BRCM80211_MAKEFILE
}

function restore_file {
	#ORIG=$(shell ${1%%.${BACKUP_EXT}})
	ORIG=${1%%.bk}
	cp $1 $ORIG
	rm -f $1
	echo -e "Restored makefile: ${CYAN}${ORIG}${NORMAL} (and removed backup)"
}

function restore_compat {
	#FILES=$(find ./ -type f -name *.$BACKUP_EXT)
	FILES=$(find ./ -type f -name *.bk)
	for i in $FILES; do
		restore_file $i
	done
}

if [ $# -ne 1 ]; then
	usage
	exit
fi

if [ ! -f compat_version ]; then
	echo "Must run $0 from the compat-wireless top level directory"
	exit
fi

if [[ ! -f built-in.o ]]; then
	if [[ "$1" != "restore" ]]; then
		echo -e "${PURPLE}Processing new driver-select request...${NORMAL}"
	fi
fi

# Always backup the top level Makefile, unless restoring
if [[ "$1" != "restore" ]]; then
	backup_file Makefile
fi

# If a user selects a new driver make sure we clean up for them
# first and also restore the backup makefiles then. Otherwise
# we'll be trying to leave drivers on Makefiles which are not
# already there from a previous run.
if [ -f built-in.o ]; then
	echo -e "${PURPLE}Old build found, going to clean this up first...${NORMAL}"
	make clean
	echo -e "${PURPLE}Restoring Makefiles...${NORMAL}"
	./$0 restore
fi

case $1 in
	restore)
		restore_compat
		;;
# Group drivers
	atheros)
		select_drivers		CONFIG_ATH_COMMON \
					CONFIG_COMPAT_ZD1211RW
		disable_staging
		disable_bt_usb_ethernet_var
		disable_var_01
		;;
	ath)
		disable_bt_usb_ethernet_var
		select_drivers		CONFIG_ATH_COMMON
		disable_var_01
		;;
	intel)
		select_drivers		CONFIG_IWLWIFI \
					CONFIG_IWLEGACY \
					CONFIG_IPW
		disable_staging
		disable_var
		disable_bt
		disable_ethernet
		disable_usbnet
		;;
	iwlwifi)
		select_driver		CONFIG_IWLWIFI
		disable_staging
		disable_var_01
		disable_bt
		disable_ethernet
		disable_usbnet
		;;
	iwlegacy)
		select_driver		CONFIG_IWLEGACY
		disable_staging
		disable_var_01
		disable_bt
		disable_ethernet
		disable_usbnet
		;;
	rtl818x)
		select_drivers		CONFIG_RTL8180 CONFIG_RTL8187
		disable_staging
		disable_bt_usb_ethernet
		disable_ssb
		disable_bcma
		disable_lib80211
		;;
	rtlwifi)
		select_drivers		CONFIG_RTL8192CE CONFIG_RTLWIFI
		disable_staging
		disable_bt_usb_ethernet_var
		disable_lib80211
		;;
	wl12xx)
		select_drivers		CONFIG_WL1251 \
					CONFIG_WL12XX
		disable_staging
		disable_var_01
		;;
	brcm80211)
		disable_staging
		disable_bt_usb_ethernet_var
		select_drivers		CONFIG_BRCMUTIL \
					CONFIG_BRCMFMAC \
					CONFIG_BRCMSMAC
		;;
# Singular modules
	ath5k)
		disable_staging
		disable_bt_usb_ethernet_var
		select_driver		CONFIG_ATH_COMMON
		select_ath_driver	CONFIG_ATH5K
		#patch -p1 < enable-older-kernels/enable-2.6.23.patch
		;;
	ath9k)
		disable_staging
		disable_bt_usb_ethernet_var
		select_driver		CONFIG_ATH_COMMON
		select_ath9k_driver
		;;
	carl9170)
		disable_staging
		disable_bt_usb_ethernet_var
		select_driver		CONFIG_ATH_COMMON
		select_ath_driver	CONFIG_CARL9170
		;;
	ath9k_htc)
		disable_staging
		disable_bt_usb_ethernet_var
		select_driver		CONFIG_ATH_COMMON
		select_ath9k_driver
		;;
	ath6kl)
		disable_staging
		disable_bt_usb_ethernet_var
		select_driver		CONFIG_ATH_COMMON
		select_ath_driver	CONFIG_ATH6KL
		;;
	brcmsmac)
		disable_staging
		disable_bt_usb_ethernet_var
		select_drivers		CONFIG_BRCMSMAC
		select_brcm80211_driver	CONFIG_BRCMSMAC CONFIG_BRCMUTIL
		;;
	brcmfmac)
		disable_staging
		disable_bt_usb_ethernet_var
		select_drivers		CONFIG_BRCMFMAC
		select_brcm80211_driver	CONFIG_BRCMFMAC CONFIG_BRCMUTIL
		;;
	zd1211rw)
		select_driver		CONFIG_COMPAT_ZD1211RW
		disable_staging
		disable_var_01
		;;
	b43)
		disable_staging
		disable_bt_usb_ethernet
		disable_eeprom
		disable_lib80211
		select_driver		CONFIG_B43
		;;
	rt2x00)
		select_driver		CONFIG_RT2X00
		disable_staging
		disable_bt_usb_ethernet
		disable_var_02
		;;
	wl1251)
		select_drivers		CONFIG_WL1251
		disable_staging
		disable_var_01
		;;
	wl12xx)
		select_drivers		CONFIG_WL12XX
		disable_staging
		disable_var_01
		;;
# Ethernet and Bluetooth drivers
	atl1)
		enable_only_ethernet
		disable_b44
		echo -e "obj-\$(CONFIG_ATL1) += atlx/" > $DRIVERS_NET_ATHEROS
		;;
	atl2)
		enable_only_ethernet
		disable_b44
		echo -e "obj-\$(CONFIG_ATL2) += atlx/" > $DRIVERS_NET_ATHEROS
		;;
	atl1e)
		enable_only_ethernet
		disable_b44
		echo -e "obj-\$(CONFIG_ATL1E) += atl1e/" > $DRIVERS_NET_ATHEROS
		;;
	atl1c)
		enable_only_ethernet
		disable_b44
		echo -e "obj-\$(CONFIG_ATL1C) += atl1c/" > $DRIVERS_NET_ATHEROS
		;;
	alx)
		enable_only_ethernet
		disable_b44
		echo -e "obj-\$(CONFIG_ALX) += alx/" > $DRIVERS_NET_ATHEROS
		;;
	atlxx)
		select_drivers		CONFIG_ATL1 CONFIG_ATL2 CONFIG_ATL1E CONFIG_ALX
		enable_only_ethernet
		disable_b44
		disable_update-initramfs
		;;
	bt)
		select_driver 		CONFIG_BT
		disable_var
		disable_ethernet
		disable_staging
		disable_80211
		;;
	*)
		echo "Unsupported driver"
		exit
		;;
esac
