#!/bin/bash # Copyright 2009 Luis R. Rodriguez # # This this 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" RT2X00_MAKEFILE="drivers/net/wireless/rt2x00/Makefile" NET_WIRELESS_MAKEFILE="net/wireless/Makefile" EEPROM_MAKEFILE="drivers/misc/eeprom/Makefile" DRIVERS_NET="drivers/net/Makefile" DRIVERS_NET_USB_MAKEFILE="drivers/net/usb/Makefile" SSB_MAKEFILE="drivers/ssb/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 ar9170 b43 zd1211rw rt2x00" # 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 atl1c" function usage { echo -e "${GREEN}Usage${NORMAL}: ${CYAN}$0${NORMAL} [ ${PURPLE}${NORMAL} | ${PURPLE}${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 echo -e "\nSupported Ethernet drivers:" for i in $SUPPORTED_ETH_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 ar9170 zd1211rw ${NORMAL}>" echo -e "\t${CYAN}ath${NORMAL} < ${PURPLE} ath5k ath9k ar9170 ${NORMAL}>" echo -e "\t${CYAN}intel${NORMAL} < ${PURPLE} iwl3945 iwlagn ipw2100 ipw2200 ${NORMAL}>" echo -e "\t${CYAN}iwlwifi${NORMAL} < ${PURPLE} iwl3945 iwlagn ${NORMAL}>" echo -e "\t${CYAN}rtl818x${NORMAL} < ${PURPLE} rtl8180 rtl8187 ${NORMAL}>" echo -e "\t${CYAN}wl12xx${NORMAL} < ${PURPLE} wl1251 (SPI and SDIO) wl1271 ${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 perl -i -ne 'print if ! /CONFIG_B44/ ' $DRIVERS_NET } function disable_ssb { disable_b44 disable_makefile ${SSB_MAKEFILE} perl -i -ne 'print if ! /drivers\/ssb\/ \\/ ' 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_BLUETOOTH/' Makefile } function disable_bt { perl -i -ne 'print if ! /CONFIG_COMPAT_VAR_MODULES/' Makefile } function disable_80211 { perl -i -ne 'print if ! /CONFIG_COMPAT_WIRELESS/' Makefile } function disable_bt_usb_ethernet_var { backup_file Makefile disable_usbnet disable_ethernet disable_var_03 disable_bt } function enable_only_ethernet { backup_file Makefile backup_file $DRIVERS_NET 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_usbnet disable_eeprom } function disable_var_01 { disable_lib80211 disable_var } function disable_var_02 { #var_01 with eeprom not disabled disable_lib80211 disable_ssb disable_usbnet } function select_ath_driver { backup_file $ATH_MAKEFILE perl -i -ne 'print if /'$1'/ || /CONFIG_ATH_/ || /ath-objs/ || /regd.o/ || /hw.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 } # iwlwifi stuff needs more work function select_iwl_driver { perl -i -ne 'print if /'$1'/ || /CONFIG_BLEH/ ' drivers/net/wireless/iwlwifi/Makefile disable_var_01 } 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 "${YELLOW}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 "${YELLOW}Old build found, going to clean this up first...${NORMAL}" make clean echo -e "${YELLOW}Restoring Makefiles...${NORMAL}" ./$0 restore fi case $1 in restore) restore_compat ;; atheros) select_drivers CONFIG_ATH_COMMON \ CONFIG_ZD1211RW disable_var_01 ;; ath) disable_bt_usb_ethernet_var select_drivers CONFIG_ATH_COMMON disable_var_01 ;; intel) select_drivers CONFIG_IWLWIFI \ CONFIG_IPW disable_var ;; iwlwifi) select_driver CONFIG_IWLWIFI disable_var_01 ;; wl12xx) select_drivers CONFIG_WL12XX disable_var_01 ;; ath5k) 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_bt_usb_ethernet_var select_driver CONFIG_ATH_COMMON select_ath9k_driver patch -p1 < enable-older-kernels/enable-2.6.23.patch ;; ar9170) disable_bt_usb_ethernet_var select_driver CONFIG_ATH_COMMON select_ath_driver CONFIG_AR9170_USB ;; ath9k_htc) disable_bt_usb_ethernet_var select_driver CONFIG_ATH_COMMON select_ath9k_driver ;; rtl818x) select_drivers CONFIG_RTL8180 CONFIG_RTL8187 disable_var_02 ;; zd1211rw) select_driver CONFIG_ZD1211RW disable_var_01 ;; b43) disable_usbnet disable_ethernet disable_var_03 select_driver CONFIG_B43 ;; rt2x00) select_driver CONFIG_RT2X00 disable_var_02 ;; atl1) enable_only_ethernet echo -e "obj-\$(CONFIG_ATL1) += atlx/" > $DRIVERS_NET ;; atl2) enable_only_ethernet echo -e "obj-\$(CONFIG_ATL2) += atlx/" > $DRIVERS_NET ;; atl1e) enable_only_ethernet echo -e "obj-\$(CONFIG_ATL1E) += atl1e/" > $DRIVERS_NET ;; atl1c) enable_only_ethernet echo -e "obj-\$(CONFIG_ATL1C) += atl1c/" > $DRIVERS_NET ;; *) echo "Unsupported driver" exit ;; esac