PKG_NAME:=mac80211
-PKG_VERSION:=2010-12-16
-PKG_RELEASE:=2
+PKG_VERSION:=2011-01-05
+PKG_RELEASE:=1
PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
-PKG_MD5SUM:=39196307aa67c1f19f498b570b994112
+PKG_MD5SUM:=2b87fdd08d95fa5def39f56f49c4906d
PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION)
CONFIG_PACKAGE_ATH_DEBUG \
CONFIG_ATH_USER_REGD \
-CARL9170_FW_VERSION:=1.8.8.2
+CARL9170_FW_VERSION:=1.9.2
include $(INCLUDE_DIR)/package.mk
$(eval $(call Download,p54spi))
define Download/carl9170
- FILE:=$(CARL9170_FW)
- URL:=http://www.kernel.org/pub/linux/kernel/people/chr/carl9170/fw/$(CARL9170_FW_VERSION)
- MD5SUM:=114c43846ed1d2f89cc92bd0e2ec0589
+ FILE:=$(CARL9170_FW)-$(CARL9170_FW_VERSION)
+ URL:=http://downloads.openwrt.org/sources/
+ MD5SUM:=9e33ac39dcd610aa1ad80bbf4f1abccf
endef
$(eval $(call Download,carl9170))
$(call KernelPackage/rtl818x/Default)
DEPENDS+= @PCI_SUPPORT
TITLE+= (RTL8180 PCI)
- FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/rtl818x/rtl8180.ko
+ FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/rtl818x/rtl8180/rtl8180.ko
AUTOLOAD:=$(call AutoLoad,27,rtl8180)
endef
$(call KernelPackage/rtl818x/Default)
DEPENDS+= @USB_SUPPORT
TITLE+= (RTL8187 USB)
- FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/rtl818x/rtl8187.ko
+ FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/rtl818x/rtl8187/rtl8187.ko
AUTOLOAD:=$(call AutoLoad,27,rtl8187)
endef
define KernelPackage/ath
$(call KernelPackage/mac80211/Default)
TITLE:=Atheros common driver part
- DEPENDS+= @PCI_SUPPORT +kmod-mac80211
+ DEPENDS+= @PCI_SUPPORT||@USB_SUPPORT +kmod-mac80211
FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/ath/ath.ko
AUTOLOAD:=$(call AutoLoad,26,ath)
MENU:=1
$(call KernelPackage/mac80211/Default)
TITLE:=Atheros 5xxx wireless cards support
URL:=http://linuxwireless.org/en/users/Drivers/ath5k
- DEPENDS+= +kmod-ath
+ DEPENDS+= @PCI_SUPPORT||@TARGET_atheros +kmod-ath
FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/ath/ath5k/ath5k.ko
AUTOLOAD:=$(call AutoLoad,27,ath5k)
endef
$(call KernelPackage/mac80211/Default)
TITLE:=Atheros 802.11n wireless cards support
URL:=http://linuxwireless.org/en/users/Drivers/ath9k
- DEPENDS+= +kmod-ath
+ DEPENDS+= @PCI_SUPPORT +kmod-ath
FILES:= \
$(PKG_BUILD_DIR)/drivers/net/wireless/ath/ath9k/ath9k_common.ko \
$(PKG_BUILD_DIR)/drivers/net/wireless/ath/ath9k/ath9k_hw.ko \
define KernelPackage/carl9170/install
$(INSTALL_DIR) $(1)/lib/firmware
- $(INSTALL_DATA) $(DL_DIR)/$(CARL9170_FW) $(1)/lib/firmware/
+ $(INSTALL_DATA) $(DL_DIR)/$(CARL9170_FW)-$(CARL9170_FW_VERSION) $(1)/lib/firmware/$(CARL9170_FW)
endef
CONFIG_RT2800USB=$(if $(CONFIG_PACKAGE_kmod-rt2800-usb),m) \
CONFIG_RTL8180=$(if $(CONFIG_PACKAGE_kmod-rtl8180),m) \
CONFIG_RTL8187=$(if $(CONFIG_PACKAGE_kmod-rtl8187),m) \
+ CONFIG_RTL8192CE= \
CONFIG_MAC80211_HWSIM=$(if $(CONFIG_PACKAGE_kmod-mac80211-hwsim),m) \
CONFIG_PCMCIA= \
CONFIG_LIBIPW=$(if $(CONFIG_PACKAGE_kmod-net-libipw),m) \
--- a/config.mk
+++ b/config.mk
-@@ -301,8 +301,8 @@ endif #CONFIG_SSB
+@@ -311,8 +311,8 @@ endif #CONFIG_SSB
CONFIG_P54_PCI=m
ifeq ($(CONFIG_MAC80211),y)
$(error "ERROR: you have MAC80211 compiled into the kernel, CONFIG_MAC80211=y, as such you cannot replace its mac80211 driver. You need this set to CONFIG_MAC80211=m. If you are using Fedora upgrade your kernel as later version should this set as modular. For further information on Fedora see https://bugzilla.redhat.com/show_bug.cgi?id=470143. If you are using your own kernel recompile it and make mac80211 modular")
-@@ -590,8 +590,8 @@ endif #CONFIG_COMPAT_KERNEL_27
+@@ -613,10 +613,10 @@ endif #CONFIG_COMPAT_KERNEL_27
# We need the backported rfkill module on kernel < 2.6.31.
# In more recent kernel versions use the in kernel rfkill module.
ifdef CONFIG_COMPAT_KERNEL_31
-CONFIG_RFKILL_BACKPORT=m
--CONFIG_RFKILL_BACKPORT_LEDS=y
--CONFIG_RFKILL_BACKPORT_INPUT=y
+# CONFIG_RFKILL_BACKPORT=m
+ ifdef CONFIG_LEDS_TRIGGERS
+-CONFIG_RFKILL_BACKPORT_LEDS=y
+# CONFIG_RFKILL_BACKPORT_LEDS=y
+ endif #CONFIG_LEDS_TRIGGERS
+-CONFIG_RFKILL_BACKPORT_INPUT=y
+# CONFIG_RFKILL_BACKPORT_INPUT=y
endif #CONFIG_COMPAT_KERNEL_31
else
include $(KLIB_BUILD)/.config
endif
-@@ -285,19 +284,18 @@ CONFIG_IPW2200_QOS=y
+@@ -295,19 +294,18 @@ CONFIG_IPW2200_QOS=y
# % echo 1 > /sys/bus/pci/drivers/ipw2200/*/rtap_iface
endif #CONFIG_WIRELESS_EXT
CONFIG_P54_PCI=m
-@@ -486,7 +484,6 @@ endif #CONFIG_SPI_MASTER end of SPI driv
+@@ -505,7 +503,6 @@ endif #CONFIG_SPI_MASTER end of SPI driv
ifdef CONFIG_MMC
--- a/config.mk
+++ b/config.mk
-@@ -196,7 +196,7 @@ $(warning "WARNING: CONFIG_CFG80211_WEXT
+@@ -202,7 +202,7 @@ $(warning "WARNING: CONFIG_CFG80211_WEXT
endif #CONFIG_WIRELESS_EXT
ifneq ($(CONFIG_STAGING),)
endif
# mac80211 test driver
-@@ -326,13 +326,13 @@ endif #CONFIG_CRC_ITU_T
+@@ -336,13 +336,13 @@ endif #CONFIG_CRC_ITU_T
CONFIG_MWL8K=m
# Ethernet drivers go here
endif #CONFIG_COMPAT_KERNEL_27
ifdef CONFIG_WIRELESS_EXT
-@@ -383,21 +383,21 @@ CONFIG_ZD1211RW=m
+@@ -396,21 +396,21 @@ CONFIG_ZD1211RW=m
# Note: this depends on CONFIG_USB_NET_RNDIS_HOST and CONFIG_USB_NET_CDCETHER
# it also requires new RNDIS_HOST and CDC_ETHER modules which we add
ifdef CONFIG_COMPAT_KERNEL_29
+++ /dev/null
---- a/config.mk
-+++ b/config.mk
-@@ -132,7 +132,7 @@ CONFIG_COMPAT_MAC80211_RC_DEFAULT=minstr
- CONFIG_MAC80211_RC_PID=y
- CONFIG_MAC80211_RC_MINSTREL=y
- CONFIG_MAC80211_RC_MINSTREL_HT=y
--CONFIG_MAC80211_LEDS=y
-+# CONFIG_MAC80211_LEDS=y
-
- # enable mesh networking too
- CONFIG_MAC80211_MESH=y
-@@ -242,7 +242,7 @@ CONFIG_B43_PCI_AUTOSELECT=y
- ifdef CONFIG_PCMCIA
- CONFIG_B43_PCMCIA=y
- endif #CONFIG_PCMCIA
--CONFIG_B43_LEDS=y
-+# CONFIG_B43_LEDS=y
- CONFIG_B43_PHY_LP=y
- CONFIG_B43_PHY_N=y
- # CONFIG_B43_FORCE_PIO=y
-@@ -251,7 +251,7 @@ CONFIG_B43_PHY_N=y
- CONFIG_B43LEGACY=m
- CONFIG_B43LEGACY_HWRNG=y
- CONFIG_B43LEGACY_PCI_AUTOSELECT=y
--CONFIG_B43LEGACY_LEDS=y
-+# CONFIG_B43LEGACY_LEDS=y
- # CONFIG_B43LEGACY_DEBUG=y
- CONFIG_B43LEGACY_DMA=y
- CONFIG_B43LEGACY_PIO=y
-@@ -561,7 +561,7 @@ endif
-
- # p54
- CONFIG_P54_COMMON=m
--CONFIG_P54_LEDS=y
-+# CONFIG_P54_LEDS=y
-
- # Atheros
- CONFIG_ATH_COMMON=m
---- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c
-+++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
-@@ -864,6 +864,7 @@ static void ath9k_led_brightness_work(st
- }
- }
-
-+#ifdef CONFIG_LEDS_CLASS
- static void ath9k_led_brightness(struct led_classdev *led_cdev,
- enum led_brightness brightness)
- {
-@@ -875,6 +876,7 @@ static void ath9k_led_brightness(struct
- ieee80211_queue_delayed_work(priv->hw,
- &led->brightness_work, 0);
- }
-+#endif
-
- static void ath9k_led_stop_brightness(struct ath9k_htc_priv *priv)
- {
-@@ -887,6 +889,7 @@ static void ath9k_led_stop_brightness(st
- static int ath9k_register_led(struct ath9k_htc_priv *priv, struct ath_led *led,
- char *trigger)
- {
-+#ifdef CONFIG_LEDS_CLASS
- int ret;
-
- led->priv = priv;
-@@ -904,14 +907,19 @@ static int ath9k_register_led(struct ath
- INIT_DELAYED_WORK(&led->brightness_work, ath9k_led_brightness_work);
-
- return ret;
-+#else
-+ return 0;
-+#endif
- }
-
- static void ath9k_unregister_led(struct ath_led *led)
- {
-+#ifdef CONFIG_LEDS_CLASS
- if (led->registered) {
- led_classdev_unregister(&led->led_cdev);
- led->registered = 0;
- }
-+#endif
- }
-
- void ath9k_deinit_leds(struct ath9k_htc_priv *priv)
else
include $(KLIB_BUILD)/.config
endif
-@@ -223,7 +223,7 @@ CONFIG_B43=m
+@@ -229,7 +229,7 @@ CONFIG_B43=m
CONFIG_B43_HWRNG=y
CONFIG_B43_PCI_AUTOSELECT=y
ifdef CONFIG_PCMCIA
-CONFIG_B43_PCMCIA=y
+# CONFIG_B43_PCMCIA=y
endif #CONFIG_PCMCIA
- # CONFIG_B43_LEDS=y
- CONFIG_B43_PHY_LP=y
+ ifdef CONFIG_MAC80211_LEDS
+ CONFIG_B43_LEDS=y
--- a/config.mk
+++ b/config.mk
-@@ -467,7 +467,7 @@ endif #CONFIG_SPI_MASTER end of SPI driv
+@@ -486,7 +486,7 @@ endif #CONFIG_SPI_MASTER end of SPI driv
ifdef CONFIG_MMC
--- a/config.mk
+++ b/config.mk
-@@ -227,7 +227,7 @@ ifdef CONFIG_PCMCIA
- endif #CONFIG_PCMCIA
- # CONFIG_B43_LEDS=y
+@@ -235,7 +235,7 @@ ifdef CONFIG_MAC80211_LEDS
+ CONFIG_B43_LEDS=y
+ endif #CONFIG_MAC80211_LEDS
CONFIG_B43_PHY_LP=y
-CONFIG_B43_PHY_N=y
+# CONFIG_B43_PHY_N=y
--- a/config.mk
+++ b/config.mk
-@@ -289,7 +289,7 @@ CONFIG_RTL8180=m
+@@ -299,7 +299,7 @@ CONFIG_RTL8180=m
CONFIG_ADM8211=m
CONFIG_RT2400PCI=m
CONFIG_RT2500PCI=m
ifdef CONFIG_CRC_CCITT
-@@ -418,7 +418,7 @@ CONFIG_RT2800USB=m
+@@ -437,7 +437,7 @@ CONFIG_RT2800USB=m
# CONFIG_RT2800USB_RT35XX=y
CONFIG_RT2800USB_UNKNOWN=y
endif #CONFIG_CRC_CCITT
--- a/config.mk
+++ b/config.mk
-@@ -112,7 +112,7 @@ CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
+@@ -116,7 +116,7 @@ CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
# This is the one used by our compat-wireless net/mac80211/rate.c
# in case you have and old kernel which is overriding this to pid.
CONFIG_COMPAT_MAC80211_RC_DEFAULT=minstrel_ht
+# CONFIG_MAC80211_RC_PID=y
CONFIG_MAC80211_RC_MINSTREL=y
CONFIG_MAC80211_RC_MINSTREL_HT=y
- # CONFIG_MAC80211_LEDS=y
+ ifdef CONFIG_LEDS_TRIGGERS
--- a/config.mk
+++ b/config.mk
-@@ -206,7 +206,7 @@ CONFIG_ATH9K_COMMON=m
+@@ -212,7 +212,7 @@ CONFIG_ATH9K_COMMON=m
# as default once we get minstrel properly tested and blessed by
# our systems engineering team. CCK rates also need to be used
# for long range considerations.
--- a/config.mk
+++ b/config.mk
-@@ -189,7 +189,7 @@ CONFIG_MAC80211_HWSIM=m
+@@ -195,7 +195,7 @@ CONFIG_MAC80211_HWSIM=m
ifdef CONFIG_PCI
CONFIG_ATH5K=m
--- a/include/linux/compat-2.6.36.h
+++ b/include/linux/compat-2.6.36.h
-@@ -90,6 +90,8 @@ struct pm_qos_request_list {
-
+@@ -101,6 +101,8 @@ int no_printk(const char *s, ...) { retu
+ #define alloc_workqueue(name, flags, max_active) __create_workqueue(name, flags, max_active, 0)
#endif
+#define PCI_EEPROM_WIDTH_93C86 8
#include <pcmcia/cs.h>
--- a/include/linux/compat-2.6.33.h
+++ b/include/linux/compat-2.6.33.h
-@@ -6,7 +6,7 @@
- #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33))
+@@ -7,7 +7,7 @@
#include <linux/skbuff.h>
+ #include <linux/pci.h>
-#if defined(CONFIG_PCCARD) || defined(CONFIG_PCCARD_MODULE)
+#if 0
#include <pcmcia/cs_types.h>
#endif
--- a/config.mk
+++ b/config.mk
-@@ -405,7 +405,7 @@ endif #CONFIG_COMPAT_KERNEL_29
+@@ -424,7 +424,7 @@ endif #CONFIG_COMPAT_KERNEL_29
# This activates a threading fix for usb urb.
# this is mainline commit: b3e670443b7fb8a2d29831b62b44a039c283e351
# This fix will be included in some stable releases.
err:
--- a/drivers/net/wireless/ath/ath9k/hw.h
+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -788,6 +788,8 @@ struct ath_hw {
+@@ -791,6 +791,8 @@ struct ath_hw {
int initPDADC;
int PDADCdelta;
u8 led_pin;
+++ /dev/null
-From: Luciano Coelho <luciano.coelho@xxxxxxxxx>
-
-If CONFIG_MAC80211_LEDS is not set, ieee80211_i.h was failing to compile,
-because struct led_trigger is only declared when CONFIG_LEDS_TRIGGERS is
-set.
-
-This patch adds ifdefs around the tpt_led_trigger declaration in
-ieee80211_i.h to avoid the problem.
-
-Cc: Johannes Berg <johannes@xxxxxxxxxxxxxxxx>
-Signed-off-by: Luciano Coelho <luciano.coelho@xxxxxxxxx>
----
- net/mac80211/ieee80211_i.h | 2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
-
-diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
-index 0817ec6..7541d42 100644
---- a/net/mac80211/ieee80211_i.h
-+++ b/net/mac80211/ieee80211_i.h
-@@ -631,6 +631,7 @@ enum queue_stop_reason {
- IEEE80211_QUEUE_STOP_REASON_SKB_ADD,
- };
-
-+#ifdef CONFIG_MAC80211_LEDS
- struct tpt_led_trigger {
- struct led_trigger trig;
- char name[32];
-@@ -642,6 +643,7 @@ struct tpt_led_trigger {
- unsigned int active, want;
- bool running;
- };
-+#endif
-
- /**
- * mac80211 scan flags - currently active scan mode
+++ /dev/null
---- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
-+++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
-@@ -961,18 +961,6 @@ static void ar5008_hw_rfbus_done(struct
- REG_WRITE(ah, AR_PHY_RFBUS_REQ, 0);
- }
-
--static void ar5008_hw_enable_rfkill(struct ath_hw *ah)
--{
-- REG_SET_BIT(ah, AR_GPIO_INPUT_EN_VAL,
-- AR_GPIO_INPUT_EN_VAL_RFSILENT_BB);
--
-- REG_CLR_BIT(ah, AR_GPIO_INPUT_MUX2,
-- AR_GPIO_INPUT_MUX2_RFSILENT);
--
-- ath9k_hw_cfg_gpio_input(ah, ah->rfkill_gpio);
-- REG_SET_BIT(ah, AR_PHY_TEST, RFSILENT_BB);
--}
--
- static void ar5008_restore_chainmask(struct ath_hw *ah)
- {
- int rx_chainmask = ah->rxchainmask;
-@@ -1629,7 +1617,6 @@ void ar5008_hw_attach_phy_ops(struct ath
- priv_ops->set_delta_slope = ar5008_hw_set_delta_slope;
- priv_ops->rfbus_req = ar5008_hw_rfbus_req;
- priv_ops->rfbus_done = ar5008_hw_rfbus_done;
-- priv_ops->enable_rfkill = ar5008_hw_enable_rfkill;
- priv_ops->restore_chainmask = ar5008_restore_chainmask;
- priv_ops->set_diversity = ar5008_set_diversity;
- priv_ops->do_getnf = ar5008_hw_do_getnf;
---- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-@@ -745,28 +745,6 @@ static void ar9003_hw_rfbus_done(struct
- REG_WRITE(ah, AR_PHY_RFBUS_REQ, 0);
- }
-
--/*
-- * Set the interrupt and GPIO values so the ISR can disable RF
-- * on a switch signal. Assumes GPIO port and interrupt polarity
-- * are set prior to call.
-- */
--static void ar9003_hw_enable_rfkill(struct ath_hw *ah)
--{
-- /* Connect rfsilent_bb_l to baseband */
-- REG_SET_BIT(ah, AR_GPIO_INPUT_EN_VAL,
-- AR_GPIO_INPUT_EN_VAL_RFSILENT_BB);
-- /* Set input mux for rfsilent_bb_l to GPIO #0 */
-- REG_CLR_BIT(ah, AR_GPIO_INPUT_MUX2,
-- AR_GPIO_INPUT_MUX2_RFSILENT);
--
-- /*
-- * Configure the desired GPIO port for input and
-- * enable baseband rf silence.
-- */
-- ath9k_hw_cfg_gpio_input(ah, ah->rfkill_gpio);
-- REG_SET_BIT(ah, AR_PHY_TEST, RFSILENT_BB);
--}
--
- static void ar9003_hw_set_diversity(struct ath_hw *ah, bool value)
- {
- u32 v = REG_READ(ah, AR_PHY_CCK_DETECT);
-@@ -1203,7 +1181,6 @@ void ar9003_hw_attach_phy_ops(struct ath
- priv_ops->set_delta_slope = ar9003_hw_set_delta_slope;
- priv_ops->rfbus_req = ar9003_hw_rfbus_req;
- priv_ops->rfbus_done = ar9003_hw_rfbus_done;
-- priv_ops->enable_rfkill = ar9003_hw_enable_rfkill;
- priv_ops->set_diversity = ar9003_hw_set_diversity;
- priv_ops->ani_control = ar9003_hw_ani_control;
- priv_ops->do_getnf = ar9003_hw_do_getnf;
---- a/drivers/net/wireless/ath/ath9k/ath9k.h
-+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
-@@ -189,6 +189,7 @@ struct ath_txq {
- struct list_head axq_q;
- spinlock_t axq_lock;
- u32 axq_depth;
-+ u32 axq_ampdu_depth;
- bool stopped;
- bool axq_tx_inprogress;
- struct list_head axq_acq;
---- a/drivers/net/wireless/ath/ath9k/hw-ops.h
-+++ b/drivers/net/wireless/ath/ath9k/hw-ops.h
-@@ -223,11 +223,6 @@ static inline void ath9k_hw_rfbus_done(s
- return ath9k_hw_private_ops(ah)->rfbus_done(ah);
- }
-
--static inline void ath9k_enable_rfkill(struct ath_hw *ah)
--{
-- return ath9k_hw_private_ops(ah)->enable_rfkill(ah);
--}
--
- static inline void ath9k_hw_restore_chainmask(struct ath_hw *ah)
- {
- if (!ath9k_hw_private_ops(ah)->restore_chainmask)
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -491,6 +491,17 @@ static int __ath9k_hw_init(struct ath_hw
- if (ah->hw_version.devid == AR5416_AR9100_DEVID)
- ah->hw_version.macVersion = AR_SREV_VERSION_9100;
-
-+ ath9k_hw_read_revisions(ah);
-+
-+ /*
-+ * Read back AR_WA into a permanent copy and set bits 14 and 17.
-+ * We need to do this to avoid RMW of this register. We cannot
-+ * read the reg when chip is asleep.
-+ */
-+ ah->WARegVal = REG_READ(ah, AR_WA);
-+ ah->WARegVal |= (AR_WA_D3_L1_DISABLE |
-+ AR_WA_ASPM_TIMER_BASED_DISABLE);
-+
- if (!ath9k_hw_set_reset_reg(ah, ATH9K_RESET_POWER_ON)) {
- ath_err(common, "Couldn't reset chip\n");
- return -EIO;
-@@ -559,14 +570,6 @@ static int __ath9k_hw_init(struct ath_hw
-
- ath9k_hw_init_mode_regs(ah);
-
-- /*
-- * Read back AR_WA into a permanent copy and set bits 14 and 17.
-- * We need to do this to avoid RMW of this register. We cannot
-- * read the reg when chip is asleep.
-- */
-- ah->WARegVal = REG_READ(ah, AR_WA);
-- ah->WARegVal |= (AR_WA_D3_L1_DISABLE |
-- AR_WA_ASPM_TIMER_BASED_DISABLE);
-
- if (ah->is_pciexpress)
- ath9k_hw_configpcipowersave(ah, 0, 0);
-@@ -1078,8 +1081,6 @@ static bool ath9k_hw_set_reset_power_on(
- return false;
- }
-
-- ath9k_hw_read_revisions(ah);
--
- return ath9k_hw_set_reset(ah, ATH9K_RESET_WARM);
- }
-
-@@ -1399,7 +1400,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
- ath9k_hw_init_qos(ah);
-
- if (ah->caps.hw_caps & ATH9K_HW_CAP_RFSILENT)
-- ath9k_enable_rfkill(ah);
-+ ath9k_hw_cfg_gpio_input(ah, ah->rfkill_gpio);
-
- ath9k_hw_init_global_settings(ah);
-
---- a/drivers/net/wireless/ath/ath9k/hw.h
-+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -576,7 +576,6 @@ struct ath_hw_private_ops {
- void (*set_delta_slope)(struct ath_hw *ah, struct ath9k_channel *chan);
- bool (*rfbus_req)(struct ath_hw *ah);
- void (*rfbus_done)(struct ath_hw *ah);
-- void (*enable_rfkill)(struct ath_hw *ah);
- void (*restore_chainmask)(struct ath_hw *ah);
- void (*set_diversity)(struct ath_hw *ah, bool value);
- u32 (*compute_pll_control)(struct ath_hw *ah,
---- a/drivers/net/wireless/ath/ath9k/xmit.c
-+++ b/drivers/net/wireless/ath/ath9k/xmit.c
-@@ -838,7 +838,7 @@ static void ath_tx_sched_aggr(struct ath
- ath_tx_txqaddbuf(sc, txq, &bf_q);
- TX_STAT_INC(txq->axq_qnum, a_aggr);
-
-- } while (txq->axq_depth < ATH_AGGR_MIN_QDEPTH &&
-+ } while (txq->axq_ampdu_depth < ATH_AGGR_MIN_QDEPTH &&
- status != ATH_AGGR_BAW_CLOSED);
- }
-
-@@ -999,6 +999,7 @@ struct ath_txq *ath_txq_setup(struct ath
- INIT_LIST_HEAD(&txq->axq_acq);
- spin_lock_init(&txq->axq_lock);
- txq->axq_depth = 0;
-+ txq->axq_ampdu_depth = 0;
- txq->axq_tx_inprogress = false;
- sc->tx.txqsetup |= 1<<qnum;
-
-@@ -1068,6 +1069,12 @@ int ath_cabq_update(struct ath_softc *sc
- return 0;
- }
-
-+static bool bf_is_ampdu_not_probing(struct ath_buf *bf)
-+{
-+ struct ieee80211_tx_info *info = IEEE80211_SKB_CB(bf->bf_mpdu);
-+ return bf_isampdu(bf) && !(info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE);
-+}
-+
- /*
- * Drain a given TX queue (could be Beacon or Data)
- *
-@@ -1126,7 +1133,8 @@ void ath_draintxq(struct ath_softc *sc,
- }
-
- txq->axq_depth--;
--
-+ if (bf_is_ampdu_not_probing(bf))
-+ txq->axq_ampdu_depth--;
- spin_unlock_bh(&txq->axq_lock);
-
- if (bf_isampdu(bf))
-@@ -1316,6 +1324,8 @@ static void ath_tx_txqaddbuf(struct ath_
- ath9k_hw_txstart(ah, txq->axq_qnum);
- }
- txq->axq_depth++;
-+ if (bf_is_ampdu_not_probing(bf))
-+ txq->axq_ampdu_depth++;
- }
-
- static void ath_tx_send_ampdu(struct ath_softc *sc, struct ath_atx_tid *tid,
-@@ -1336,7 +1346,7 @@ static void ath_tx_send_ampdu(struct ath
- */
- if (!list_empty(&tid->buf_q) || tid->paused ||
- !BAW_WITHIN(tid->seq_start, tid->baw_size, fi->seqno) ||
-- txctl->txq->axq_depth >= ATH_AGGR_MIN_QDEPTH) {
-+ txctl->txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH) {
- /*
- * Add this frame to software queue for scheduling later
- * for aggregation.
-@@ -2040,6 +2050,9 @@ static void ath_tx_processq(struct ath_s
- txq->axq_tx_inprogress = false;
- if (bf_held)
- list_del(&bf_held->list);
-+
-+ if (bf_is_ampdu_not_probing(bf))
-+ txq->axq_ampdu_depth--;
- spin_unlock_bh(&txq->axq_lock);
-
- if (bf_held)
-@@ -2168,6 +2181,8 @@ void ath_tx_edma_tasklet(struct ath_soft
- INCR(txq->txq_tailidx, ATH_TXFIFO_DEPTH);
- txq->axq_depth--;
- txq->axq_tx_inprogress = false;
-+ if (bf_is_ampdu_not_probing(bf))
-+ txq->axq_ampdu_depth--;
- spin_unlock_bh(&txq->axq_lock);
-
- txok = !(txs.ts_status & ATH9K_TXERR_MASK);
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -33,7 +33,7 @@ int modparam_nohwcrypt;
- module_param_named(nohwcrypt, modparam_nohwcrypt, int, 0444);
+@@ -33,7 +33,7 @@ int ath9k_modparam_nohwcrypt;
+ module_param_named(nohwcrypt, ath9k_modparam_nohwcrypt, int, 0444);
MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption");
-int led_blink;
#include "ath9k.h"
-@@ -526,6 +527,7 @@ static void ath9k_init_misc(struct ath_s
+@@ -528,6 +529,7 @@ static void ath9k_init_misc(struct ath_s
static int ath9k_init_softc(u16 devid, struct ath_softc *sc, u16 subsysid,
const struct ath_bus_ops *bus_ops)
{
struct ath_hw *ah = NULL;
struct ath_common *common;
int ret = 0, i;
-@@ -539,7 +541,7 @@ static int ath9k_init_softc(u16 devid, s
+@@ -541,7 +543,7 @@ static int ath9k_init_softc(u16 devid, s
ah->hw_version.subsysid = subsysid;
sc->sc_ah = ah;
ah->ah_flags |= AH_USE_EEPROM;
common = ath9k_hw_common(ah);
-@@ -572,6 +574,9 @@ static int ath9k_init_softc(u16 devid, s
+@@ -574,6 +576,9 @@ static int ath9k_init_softc(u16 devid, s
if (ret)
goto err_hw;
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -541,8 +541,14 @@ static int ath9k_init_softc(u16 devid, s
+@@ -543,8 +543,14 @@ static int ath9k_init_softc(u16 devid, s
ah->hw_version.subsysid = subsysid;
sc->sc_ah = ah;
common->ops = &ath9k_common_ops;
--- a/drivers/net/wireless/ath/ath9k/hw.h
+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -786,7 +786,7 @@ struct ath_hw {
+@@ -790,7 +790,7 @@ struct ath_hw {
u32 originalGain[22];
int initPDADC;
int PDADCdelta;
/* Rfkill */
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -1295,9 +1295,6 @@ static void ath9k_stop(struct ieee80211_
+@@ -1270,9 +1270,6 @@ static void ath9k_stop(struct ieee80211_
aphy->state = ATH_WIPHY_INACTIVE;
cancel_work_sync(&sc->hw_check_work);
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -143,6 +143,21 @@ static struct ieee80211_rate ath9k_legac
+@@ -145,6 +145,21 @@ static struct ieee80211_rate ath9k_legac
RATE(540, 0x0c, 0),
};
static void ath9k_deinit_softc(struct ath_softc *sc);
/*
-@@ -746,6 +761,13 @@ int ath9k_init_device(u16 devid, struct
+@@ -747,6 +762,13 @@ int ath9k_init_device(u16 devid, struct
ath9k_init_txpower_limits(sc);
--- /dev/null
+--- a/drivers/net/wireless/ath/ath9k/hw.c
++++ b/drivers/net/wireless/ath/ath9k/hw.c
+@@ -1425,8 +1425,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
+ REG_WRITE(ah, AR_OBS, 8);
+
+ if (ah->config.rx_intr_mitigation) {
+- REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_LAST, 500);
+- REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_FIRST, 2000);
++ REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_LAST, 250);
++ REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_FIRST, 500);
+ }
+
+ if (ah->config.tx_intr_mitigation) {
+++ /dev/null
---- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
-@@ -4762,6 +4762,7 @@ static void ath9k_hw_ar9300_set_txpower(
- struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah);
- struct ath_common *common = ath9k_hw_common(ah);
- struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
-+ struct ar9300_modal_eep_header *modal_hdr;
- u8 targetPowerValT2[ar9300RateSize];
- u8 target_power_val_t2_eep[ar9300RateSize];
- unsigned int i = 0, paprd_scale_factor = 0;
-@@ -4771,15 +4772,17 @@ static void ath9k_hw_ar9300_set_txpower(
-
- if (ah->eep_ops->get_eeprom(ah, EEP_PAPRD)) {
- if (IS_CHAN_2GHZ(chan))
-- ah->paprd_ratemask = (IS_CHAN_HT40(chan) ?
-- le32_to_cpu(eep->modalHeader2G.papdRateMaskHt40) :
-- le32_to_cpu(eep->modalHeader2G.papdRateMaskHt20))
-- & AR9300_PAPRD_RATE_MASK;
-+ modal_hdr = &eep->modalHeader2G;
- else
-- ah->paprd_ratemask = (IS_CHAN_HT40(chan) ?
-- le32_to_cpu(eep->modalHeader5G.papdRateMaskHt40) :
-- le32_to_cpu(eep->modalHeader5G.papdRateMaskHt20))
-- & AR9300_PAPRD_RATE_MASK;
-+ modal_hdr = &eep->modalHeader5G;
-+
-+ ah->paprd_ratemask =
-+ le32_to_cpu(modal_hdr->papdRateMaskHt20) &
-+ AR9300_PAPRD_RATE_MASK;
-+
-+ ah->paprd_ratemask_ht40 =
-+ le32_to_cpu(modal_hdr->papdRateMaskHt40) &
-+ AR9300_PAPRD_RATE_MASK;
-
- paprd_scale_factor = ar9003_get_paprd_scale_factor(ah, chan);
- min_pwridx = IS_CHAN_HT40(chan) ? ALL_TARGET_HT40_0_8_16 :
---- a/drivers/net/wireless/ath/ath9k/ar9003_paprd.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_paprd.c
-@@ -134,7 +134,7 @@ static int ar9003_paprd_setup_single_tab
- REG_RMW_FIELD(ah, AR_PHY_PAPRD_AM2PM, AR_PHY_PAPRD_AM2PM_MASK,
- ah->paprd_ratemask);
- REG_RMW_FIELD(ah, AR_PHY_PAPRD_HT40, AR_PHY_PAPRD_HT40_MASK,
-- AR_PHY_PAPRD_HT40_MASK);
-+ ah->paprd_ratemask_ht40);
-
- for (i = 0; i < ah->caps.max_txchains; i++) {
- REG_RMW_FIELD(ah, ctrl0[i],
---- a/drivers/net/wireless/ath/ath9k/hw.h
-+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -837,6 +837,7 @@ struct ath_hw {
- unsigned int paprd_target_power;
- unsigned int paprd_training_power;
- unsigned int paprd_ratemask;
-+ unsigned int paprd_ratemask_ht40;
- bool paprd_table_write_done;
- u32 paprd_gain_table_entries[PAPRD_GAIN_TABLE_ENTRIES];
- u8 paprd_gain_table_index[PAPRD_GAIN_TABLE_ENTRIES];
--- /dev/null
+--- a/drivers/net/wireless/ath/ath9k/xmit.c
++++ b/drivers/net/wireless/ath/ath9k/xmit.c
+@@ -169,7 +169,7 @@ static void ath_tx_flush_tid(struct ath_
+ ath_tx_update_baw(sc, tid, fi->seqno);
+ ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0, 0);
+ } else {
+- ath_tx_send_normal(sc, txq, tid, &bf_head);
++ ath_tx_send_normal(sc, txq, NULL, &bf_head);
+ }
+ spin_lock_bh(&txq->axq_lock);
+ }
+++ /dev/null
---- a/drivers/net/wireless/ath/ath9k/debug.c
-+++ b/drivers/net/wireless/ath/ath9k/debug.c
-@@ -81,11 +81,10 @@ static ssize_t read_file_tx_chainmask(st
- size_t count, loff_t *ppos)
- {
- struct ath_softc *sc = file->private_data;
-- struct ath_common *common = ath9k_hw_common(sc->sc_ah);
- char buf[32];
- unsigned int len;
-
-- len = sprintf(buf, "0x%08x\n", common->tx_chainmask);
-+ len = sprintf(buf, "0x%08x\n", sc->sc_ah->caps.tx_chainmask);
- return simple_read_from_buffer(user_buf, count, ppos, buf, len);
- }
-
-@@ -124,11 +123,10 @@ static ssize_t read_file_rx_chainmask(st
- size_t count, loff_t *ppos)
- {
- struct ath_softc *sc = file->private_data;
-- struct ath_common *common = ath9k_hw_common(sc->sc_ah);
- char buf[32];
- unsigned int len;
-
-- len = sprintf(buf, "0x%08x\n", common->rx_chainmask);
-+ len = sprintf(buf, "0x%08x\n", sc->sc_ah->caps.rx_chainmask);
- return simple_read_from_buffer(user_buf, count, ppos, buf, len);
- }
-
--- /dev/null
+--- a/drivers/net/wireless/ath/ath9k/xmit.c
++++ b/drivers/net/wireless/ath/ath9k/xmit.c
+@@ -856,7 +856,7 @@ int ath_tx_aggr_start(struct ath_softc *
+
+ txtid->state |= AGGR_ADDBA_PROGRESS;
+ txtid->paused = true;
+- *ssn = txtid->seq_start;
++ *ssn = txtid->seq_start = txtid->seq_next;
+
+ return 0;
+ }
+++ /dev/null
---- a/drivers/net/wireless/ath/ath9k/ath9k.h
-+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
-@@ -665,7 +665,6 @@ void ath9k_deinit_device(struct ath_soft
- void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw);
- void ath9k_update_ichannel(struct ath_softc *sc, struct ieee80211_hw *hw,
- struct ath9k_channel *ichan);
--void ath_update_chainmask(struct ath_softc *sc, int is_ht);
- int ath_set_channel(struct ath_softc *sc, struct ieee80211_hw *hw,
- struct ath9k_channel *hchan);
-
---- a/drivers/net/wireless/ath/ath9k/main.c
-+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -538,32 +538,6 @@ set_timer:
- }
- }
-
--/*
-- * Update tx/rx chainmask. For legacy association,
-- * hard code chainmask to 1x1, for 11n association, use
-- * the chainmask configuration, for bt coexistence, use
-- * the chainmask configuration even in legacy mode.
-- */
--void ath_update_chainmask(struct ath_softc *sc, int is_ht)
--{
-- struct ath_hw *ah = sc->sc_ah;
-- struct ath_common *common = ath9k_hw_common(ah);
--
-- if ((sc->sc_flags & SC_OP_OFFCHANNEL) || is_ht ||
-- (ah->btcoex_hw.scheme != ATH_BTCOEX_CFG_NONE)) {
-- common->tx_chainmask = ah->caps.tx_chainmask;
-- common->rx_chainmask = ah->caps.rx_chainmask;
-- } else {
-- common->tx_chainmask = 1;
-- common->rx_chainmask = 1;
-- }
--
-- ath_dbg(common, ATH_DBG_CONFIG,
-- "tx chmask: %d, rx chmask: %d\n",
-- common->tx_chainmask,
-- common->rx_chainmask);
--}
--
- static void ath_node_attach(struct ath_softc *sc, struct ieee80211_sta *sta)
- {
- struct ath_node *an;
-@@ -1676,8 +1650,6 @@ static int ath9k_config(struct ieee80211
- /* XXX: remove me eventualy */
- ath9k_update_ichannel(sc, hw, &sc->sc_ah->channels[pos]);
-
-- ath_update_chainmask(sc, conf_is_ht(conf));
--
- /* update survey stats for the old channel before switching */
- spin_lock_irqsave(&common->cc_lock, flags);
- ath_update_survey_stats(sc);
-@@ -1909,10 +1881,6 @@ static void ath9k_bss_info_changed(struc
- /* Set aggregation protection mode parameters */
- sc->config.ath_aggr_prot = 0;
-
-- /* Only legacy IBSS for now */
-- if (vif->type == NL80211_IFTYPE_ADHOC)
-- ath_update_chainmask(sc, 0);
--
- ath_dbg(common, ATH_DBG_CONFIG, "BSSID: %pM aid: 0x%x\n",
- common->curbssid, common->curaid);
-
---- a/drivers/net/wireless/ath/ath9k/virtual.c
-+++ b/drivers/net/wireless/ath/ath9k/virtual.c
-@@ -288,7 +288,6 @@ void ath9k_wiphy_chan_work(struct work_s
- /* sync hw configuration for hw code */
- common->hw = aphy->hw;
-
-- ath_update_chainmask(sc, sc->chan_is_ht);
- if (ath_set_channel(sc, aphy->hw,
- &sc->sc_ah->channels[sc->chan_idx]) < 0) {
- printk(KERN_DEBUG "ath9k: Failed to set channel for new "
--- /dev/null
+--- a/drivers/net/wireless/ath/ath9k/xmit.c
++++ b/drivers/net/wireless/ath/ath9k/xmit.c
+@@ -858,6 +858,9 @@ int ath_tx_aggr_start(struct ath_softc *
+ txtid->paused = true;
+ *ssn = txtid->seq_start = txtid->seq_next;
+
++ memset(txtid->tx_buf, 0, sizeof(txtid->tx_buf));
++ txtid->baw_head = txtid->baw_tail = 0;
++
+ return 0;
+ }
+
--- /dev/null
+
+--- a/drivers/net/wireless/ath/ath9k/main.c
++++ b/drivers/net/wireless/ath/ath9k/main.c
+@@ -251,6 +251,9 @@ int ath_set_channel(struct ath_softc *sc
+ if (!ath_stoprecv(sc))
+ stopped = false;
+
++ if (!ath9k_hw_check_alive(ah))
++ stopped = false;
++
+ /* XXX: do not flush receive queue here. We don't want
+ * to flush data frames already in queue because of
+ * changing channel. */
+@@ -602,7 +605,15 @@ void ath9k_tasklet(unsigned long data)
+
+ spin_lock(&sc->sc_pcu_lock);
+
+- if (!ath9k_hw_check_alive(ah))
++ /*
++ * Only run the baseband hang check if beacons stop working in AP or
++ * IBSS mode, because it has a high false positive rate. For station
++ * mode it should not be necessary, since the upper layers will detect
++ * this through a beacon miss automatically and the following channel
++ * change will trigger a hardware reset anyway
++ */
++ if (ath9k_hw_numtxpending(ah, sc->beacon.beaconq) != 0 &&
++ !ath9k_hw_check_alive(ah))
+ ieee80211_queue_work(sc->hw, &sc->hw_check_work);
+
+ if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
+++ /dev/null
---- a/net/mac80211/tx.c
-+++ b/net/mac80211/tx.c
-@@ -1549,8 +1549,10 @@ static int ieee80211_skb_resize(struct i
-
- if (skb_header_cloned(skb))
- I802_DEBUG_INC(local->tx_expand_skb_head_cloned);
-- else
-+ else if (head_need || tail_need)
- I802_DEBUG_INC(local->tx_expand_skb_head);
-+ else
-+ return 0;
-
- if (pskb_expand_head(skb, head_need, tail_need, GFP_ATOMIC)) {
- wiphy_debug(local->hw.wiphy,
+++ /dev/null
---- a/net/mac80211/tx.c
-+++ b/net/mac80211/tx.c
-@@ -1748,7 +1748,7 @@ netdev_tx_t ieee80211_subif_start_xmit(s
- {
- struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
- struct ieee80211_local *local = sdata->local;
-- struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-+ struct ieee80211_tx_info *info;
- int ret = NETDEV_TX_BUSY, head_need;
- u16 ethertype, hdrlen, meshhdrlen = 0;
- __le16 fc;
-@@ -2039,6 +2039,7 @@ netdev_tx_t ieee80211_subif_start_xmit(s
- skb_set_network_header(skb, nh_pos);
- skb_set_transport_header(skb, h_pos);
-
-+ info = IEEE80211_SKB_CB(skb);
- memset(info, 0, sizeof(*info));
-
- dev->trans_start = jiffies;
+++ /dev/null
---- a/net/mac80211/tx.c
-+++ b/net/mac80211/tx.c
-@@ -1943,7 +1943,7 @@ netdev_tx_t ieee80211_subif_start_xmit(s
- */
- if (skb_shared(skb)) {
- tmp_skb = skb;
-- skb = skb_copy(skb, GFP_ATOMIC);
-+ skb = skb_clone(skb, GFP_ATOMIC);
- kfree_skb(tmp_skb);
-
- if (!skb) {
+++ /dev/null
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1426,8 +1426,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
- REG_WRITE(ah, AR_OBS, 8);
-
- if (ah->config.rx_intr_mitigation) {
-- REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_LAST, 500);
-- REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_FIRST, 2000);
-+ REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_LAST, 250);
-+ REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_FIRST, 500);
- }
-
- if (ah->config.tx_intr_mitigation) {
static int modparam_bad_frames_preempt;
module_param_named(bad_frames_preempt, modparam_bad_frames_preempt, int, 0444);
MODULE_PARM_DESC(bad_frames_preempt,
-@@ -2536,10 +2541,10 @@ static int b43_gpio_init(struct b43_wlde
+@@ -2542,10 +2547,10 @@ static int b43_gpio_init(struct b43_wlde
& ~B43_MACCTL_GPOUTSMSK);
b43_write16(dev, B43_MMIO_GPIO_MASK, b43_read16(dev, B43_MMIO_GPIO_MASK)
if (dev->dev->bus->chip_id == 0x4301) {
mask |= 0x0060;
set |= 0x0060;
-@@ -5096,10 +5101,10 @@ static void b43_print_driverinfo(void)
+@@ -5102,10 +5107,10 @@ static void b43_print_driverinfo(void)
feat_sdio = "S";
#endif
printk(KERN_INFO "Broadcom 43xx driver loaded "