mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-21 06:33:41 +00:00
mac80211: update to 2010-12-09
SVN-Revision: 24471
This commit is contained in:
parent
700589cd9b
commit
9337c97584
@ -10,12 +10,12 @@ include $(INCLUDE_DIR)/kernel.mk
|
|||||||
|
|
||||||
PKG_NAME:=mac80211
|
PKG_NAME:=mac80211
|
||||||
|
|
||||||
PKG_VERSION:=2010-11-30
|
PKG_VERSION:=2010-12-09
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
|
PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
|
||||||
# http://www.orbit-lab.org/kernel/compat-wireless-2.6/2010/11 \
|
# http://www.orbit-lab.org/kernel/compat-wireless-2.6/2010/11 \
|
||||||
# http://wireless.kernel.org/download/compat-wireless-2.6
|
# http://wireless.kernel.org/download/compat-wireless-2.6
|
||||||
PKG_MD5SUM:=09148efb8ba838bb409bc9e20775d530
|
PKG_MD5SUM:=94b6eaaa2c8245d1b5d6b6f16b75a701
|
||||||
|
|
||||||
PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2
|
PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2
|
||||||
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION)
|
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/config.mk
|
--- a/config.mk
|
||||||
+++ b/config.mk
|
+++ b/config.mk
|
||||||
@@ -299,8 +299,8 @@ endif #CONFIG_SSB
|
@@ -301,8 +301,8 @@ endif #CONFIG_SSB
|
||||||
|
|
||||||
CONFIG_P54_PCI=m
|
CONFIG_P54_PCI=m
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
ifeq ($(CONFIG_MAC80211),y)
|
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")
|
$(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")
|
||||||
@@ -588,8 +588,8 @@ endif #CONFIG_COMPAT_KERNEL_27
|
@@ -590,8 +590,8 @@ endif #CONFIG_COMPAT_KERNEL_27
|
||||||
# We need the backported rfkill module on kernel < 2.6.31.
|
# We need the backported rfkill module on kernel < 2.6.31.
|
||||||
# In more recent kernel versions use the in kernel rfkill module.
|
# In more recent kernel versions use the in kernel rfkill module.
|
||||||
ifdef CONFIG_COMPAT_KERNEL_31
|
ifdef CONFIG_COMPAT_KERNEL_31
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
else
|
else
|
||||||
include $(KLIB_BUILD)/.config
|
include $(KLIB_BUILD)/.config
|
||||||
endif
|
endif
|
||||||
@@ -283,19 +282,18 @@ CONFIG_IPW2200_QOS=y
|
@@ -285,19 +284,18 @@ CONFIG_IPW2200_QOS=y
|
||||||
# % echo 1 > /sys/bus/pci/drivers/ipw2200/*/rtap_iface
|
# % echo 1 > /sys/bus/pci/drivers/ipw2200/*/rtap_iface
|
||||||
endif #CONFIG_WIRELESS_EXT
|
endif #CONFIG_WIRELESS_EXT
|
||||||
|
|
||||||
@ -51,7 +51,7 @@
|
|||||||
|
|
||||||
CONFIG_P54_PCI=m
|
CONFIG_P54_PCI=m
|
||||||
|
|
||||||
@@ -484,7 +482,6 @@ endif #CONFIG_SPI_MASTER end of SPI driv
|
@@ -486,7 +484,6 @@ endif #CONFIG_SPI_MASTER end of SPI driv
|
||||||
|
|
||||||
ifdef CONFIG_MMC
|
ifdef CONFIG_MMC
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# mac80211 test driver
|
# mac80211 test driver
|
||||||
@@ -324,13 +324,13 @@ endif #CONFIG_CRC_ITU_T
|
@@ -326,13 +326,13 @@ endif #CONFIG_CRC_ITU_T
|
||||||
CONFIG_MWL8K=m
|
CONFIG_MWL8K=m
|
||||||
|
|
||||||
# Ethernet drivers go here
|
# Ethernet drivers go here
|
||||||
@ -28,7 +28,7 @@
|
|||||||
endif #CONFIG_COMPAT_KERNEL_27
|
endif #CONFIG_COMPAT_KERNEL_27
|
||||||
|
|
||||||
ifdef CONFIG_WIRELESS_EXT
|
ifdef CONFIG_WIRELESS_EXT
|
||||||
@@ -381,21 +381,21 @@ CONFIG_ZD1211RW=m
|
@@ -383,21 +383,21 @@ CONFIG_ZD1211RW=m
|
||||||
# Note: this depends on CONFIG_USB_NET_RNDIS_HOST and CONFIG_USB_NET_CDCETHER
|
# 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
|
# it also requires new RNDIS_HOST and CDC_ETHER modules which we add
|
||||||
ifdef CONFIG_COMPAT_KERNEL_29
|
ifdef CONFIG_COMPAT_KERNEL_29
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
# enable mesh networking too
|
# enable mesh networking too
|
||||||
CONFIG_MAC80211_MESH=y
|
CONFIG_MAC80211_MESH=y
|
||||||
@@ -240,7 +240,7 @@ CONFIG_B43_PCI_AUTOSELECT=y
|
@@ -242,7 +242,7 @@ CONFIG_B43_PCI_AUTOSELECT=y
|
||||||
ifdef CONFIG_PCMCIA
|
ifdef CONFIG_PCMCIA
|
||||||
CONFIG_B43_PCMCIA=y
|
CONFIG_B43_PCMCIA=y
|
||||||
endif #CONFIG_PCMCIA
|
endif #CONFIG_PCMCIA
|
||||||
@ -18,7 +18,7 @@
|
|||||||
CONFIG_B43_PHY_LP=y
|
CONFIG_B43_PHY_LP=y
|
||||||
CONFIG_B43_NPHY=y
|
CONFIG_B43_NPHY=y
|
||||||
# CONFIG_B43_FORCE_PIO=y
|
# CONFIG_B43_FORCE_PIO=y
|
||||||
@@ -249,7 +249,7 @@ CONFIG_B43_NPHY=y
|
@@ -251,7 +251,7 @@ CONFIG_B43_NPHY=y
|
||||||
CONFIG_B43LEGACY=m
|
CONFIG_B43LEGACY=m
|
||||||
CONFIG_B43LEGACY_HWRNG=y
|
CONFIG_B43LEGACY_HWRNG=y
|
||||||
CONFIG_B43LEGACY_PCI_AUTOSELECT=y
|
CONFIG_B43LEGACY_PCI_AUTOSELECT=y
|
||||||
@ -27,7 +27,7 @@
|
|||||||
# CONFIG_B43LEGACY_DEBUG=y
|
# CONFIG_B43LEGACY_DEBUG=y
|
||||||
CONFIG_B43LEGACY_DMA=y
|
CONFIG_B43LEGACY_DMA=y
|
||||||
CONFIG_B43LEGACY_PIO=y
|
CONFIG_B43LEGACY_PIO=y
|
||||||
@@ -559,7 +559,7 @@ endif
|
@@ -561,7 +561,7 @@ endif
|
||||||
|
|
||||||
# p54
|
# p54
|
||||||
CONFIG_P54_COMMON=m
|
CONFIG_P54_COMMON=m
|
||||||
@ -38,7 +38,7 @@
|
|||||||
CONFIG_ATH_COMMON=m
|
CONFIG_ATH_COMMON=m
|
||||||
--- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c
|
--- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
|
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
|
||||||
@@ -863,6 +863,7 @@ static void ath9k_led_brightness_work(st
|
@@ -864,6 +864,7 @@ static void ath9k_led_brightness_work(st
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,7 +46,7 @@
|
|||||||
static void ath9k_led_brightness(struct led_classdev *led_cdev,
|
static void ath9k_led_brightness(struct led_classdev *led_cdev,
|
||||||
enum led_brightness brightness)
|
enum led_brightness brightness)
|
||||||
{
|
{
|
||||||
@@ -874,6 +875,7 @@ static void ath9k_led_brightness(struct
|
@@ -875,6 +876,7 @@ static void ath9k_led_brightness(struct
|
||||||
ieee80211_queue_delayed_work(priv->hw,
|
ieee80211_queue_delayed_work(priv->hw,
|
||||||
&led->brightness_work, 0);
|
&led->brightness_work, 0);
|
||||||
}
|
}
|
||||||
@ -54,7 +54,7 @@
|
|||||||
|
|
||||||
static void ath9k_led_stop_brightness(struct ath9k_htc_priv *priv)
|
static void ath9k_led_stop_brightness(struct ath9k_htc_priv *priv)
|
||||||
{
|
{
|
||||||
@@ -886,6 +888,7 @@ static void ath9k_led_stop_brightness(st
|
@@ -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,
|
static int ath9k_register_led(struct ath9k_htc_priv *priv, struct ath_led *led,
|
||||||
char *trigger)
|
char *trigger)
|
||||||
{
|
{
|
||||||
@ -62,7 +62,7 @@
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
led->priv = priv;
|
led->priv = priv;
|
||||||
@@ -903,14 +906,19 @@ static int ath9k_register_led(struct ath
|
@@ -904,14 +907,19 @@ static int ath9k_register_led(struct ath
|
||||||
INIT_DELAYED_WORK(&led->brightness_work, ath9k_led_brightness_work);
|
INIT_DELAYED_WORK(&led->brightness_work, ath9k_led_brightness_work);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
else
|
else
|
||||||
include $(KLIB_BUILD)/.config
|
include $(KLIB_BUILD)/.config
|
||||||
endif
|
endif
|
||||||
@@ -221,7 +221,7 @@ CONFIG_B43=m
|
@@ -223,7 +223,7 @@ CONFIG_B43=m
|
||||||
CONFIG_B43_HWRNG=y
|
CONFIG_B43_HWRNG=y
|
||||||
CONFIG_B43_PCI_AUTOSELECT=y
|
CONFIG_B43_PCI_AUTOSELECT=y
|
||||||
ifdef CONFIG_PCMCIA
|
ifdef CONFIG_PCMCIA
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/config.mk
|
--- a/config.mk
|
||||||
+++ b/config.mk
|
+++ b/config.mk
|
||||||
@@ -465,7 +465,7 @@ endif #CONFIG_SPI_MASTER end of SPI driv
|
@@ -467,7 +467,7 @@ endif #CONFIG_SPI_MASTER end of SPI driv
|
||||||
|
|
||||||
ifdef CONFIG_MMC
|
ifdef CONFIG_MMC
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/config.mk
|
--- a/config.mk
|
||||||
+++ b/config.mk
|
+++ b/config.mk
|
||||||
@@ -225,7 +225,7 @@ ifdef CONFIG_PCMCIA
|
@@ -227,7 +227,7 @@ ifdef CONFIG_PCMCIA
|
||||||
endif #CONFIG_PCMCIA
|
endif #CONFIG_PCMCIA
|
||||||
# CONFIG_B43_LEDS=y
|
# CONFIG_B43_LEDS=y
|
||||||
CONFIG_B43_PHY_LP=y
|
CONFIG_B43_PHY_LP=y
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/config.mk
|
--- a/config.mk
|
||||||
+++ b/config.mk
|
+++ b/config.mk
|
||||||
@@ -287,7 +287,7 @@ CONFIG_RTL8180=m
|
@@ -289,7 +289,7 @@ CONFIG_RTL8180=m
|
||||||
|
|
||||||
CONFIG_ADM8211=m
|
CONFIG_ADM8211=m
|
||||||
|
|
||||||
@ -9,7 +9,7 @@
|
|||||||
CONFIG_RT2400PCI=m
|
CONFIG_RT2400PCI=m
|
||||||
CONFIG_RT2500PCI=m
|
CONFIG_RT2500PCI=m
|
||||||
ifdef CONFIG_CRC_CCITT
|
ifdef CONFIG_CRC_CCITT
|
||||||
@@ -416,7 +416,7 @@ CONFIG_RT2800USB=m
|
@@ -418,7 +418,7 @@ CONFIG_RT2800USB=m
|
||||||
# CONFIG_RT2800USB_RT35XX=y
|
# CONFIG_RT2800USB_RT35XX=y
|
||||||
CONFIG_RT2800USB_UNKNOWN=y
|
CONFIG_RT2800USB_UNKNOWN=y
|
||||||
endif #CONFIG_CRC_CCITT
|
endif #CONFIG_CRC_CCITT
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/config.mk
|
--- a/config.mk
|
||||||
+++ b/config.mk
|
+++ b/config.mk
|
||||||
@@ -204,7 +204,7 @@ CONFIG_ATH9K_COMMON=m
|
@@ -206,7 +206,7 @@ CONFIG_ATH9K_COMMON=m
|
||||||
# as default once we get minstrel properly tested and blessed by
|
# as default once we get minstrel properly tested and blessed by
|
||||||
# our systems engineering team. CCK rates also need to be used
|
# our systems engineering team. CCK rates also need to be used
|
||||||
# for long range considerations.
|
# for long range considerations.
|
||||||
|
@ -1,27 +1,3 @@
|
|||||||
--- a/drivers/net/wireless/ath/debug.c
|
|
||||||
+++ b/drivers/net/wireless/ath/debug.c
|
|
||||||
@@ -19,19 +19,14 @@
|
|
||||||
|
|
||||||
void ath_print(struct ath_common *common, int dbg_mask, const char *fmt, ...)
|
|
||||||
{
|
|
||||||
- struct va_format vaf;
|
|
||||||
va_list args;
|
|
||||||
|
|
||||||
if (likely(!(common->debug_mask & dbg_mask)))
|
|
||||||
return;
|
|
||||||
|
|
||||||
va_start(args, fmt);
|
|
||||||
-
|
|
||||||
- vaf.fmt = fmt;
|
|
||||||
- vaf.va = &args;
|
|
||||||
-
|
|
||||||
- printk(KERN_DEBUG "ath: %pV", &vaf);
|
|
||||||
-
|
|
||||||
+ printk(KERN_DEBUG "ath: ");
|
|
||||||
+ vprintk(fmt, args);
|
|
||||||
va_end(args);
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(ath_print);
|
|
||||||
--- a/drivers/net/wireless/b43/main.c
|
--- a/drivers/net/wireless/b43/main.c
|
||||||
+++ b/drivers/net/wireless/b43/main.c
|
+++ b/drivers/net/wireless/b43/main.c
|
||||||
@@ -322,83 +322,59 @@ static int b43_ratelimit(struct b43_wl *
|
@@ -322,83 +322,59 @@ static int b43_ratelimit(struct b43_wl *
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
#endif
|
#endif
|
||||||
--- a/config.mk
|
--- a/config.mk
|
||||||
+++ b/config.mk
|
+++ b/config.mk
|
||||||
@@ -403,7 +403,7 @@ endif #CONFIG_COMPAT_KERNEL_29
|
@@ -405,7 +405,7 @@ endif #CONFIG_COMPAT_KERNEL_29
|
||||||
# This activates a threading fix for usb urb.
|
# This activates a threading fix for usb urb.
|
||||||
# this is mainline commit: b3e670443b7fb8a2d29831b62b44a039c283e351
|
# this is mainline commit: b3e670443b7fb8a2d29831b62b44a039c283e351
|
||||||
# This fix will be included in some stable releases.
|
# This fix will be included in some stable releases.
|
||||||
|
@ -54,16 +54,6 @@
|
|||||||
* Copyright 2006-2010 Johannes Berg <johannes@sipsolutions.net>
|
* Copyright 2006-2010 Johannes Berg <johannes@sipsolutions.net>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+#undef pr_fmt
|
|
||||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
|
||||||
|
|
||||||
#include <linux/if.h>
|
|
||||||
--- a/net/wireless/core.c.orig
|
|
||||||
+++ b/net/wireless/core.c.orig
|
|
||||||
@@ -4,6 +4,7 @@
|
|
||||||
* Copyright 2006-2010 Johannes Berg <johannes@sipsolutions.net>
|
|
||||||
*/
|
|
||||||
|
|
||||||
+#undef pr_fmt
|
+#undef pr_fmt
|
||||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/drivers/net/wireless/ath/ath9k/debug.c
|
--- a/drivers/net/wireless/ath/ath9k/debug.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/debug.c
|
+++ b/drivers/net/wireless/ath/ath9k/debug.c
|
||||||
@@ -932,6 +932,12 @@ int ath9k_init_debug(struct ath_hw *ah)
|
@@ -927,6 +927,12 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||||
sc->debug.debugfs_phy, &ah->config.cwm_ignore_extcca))
|
sc->debug.debugfs_phy, &ah->config.cwm_ignore_extcca))
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
@ -15,7 +15,7 @@
|
|||||||
err:
|
err:
|
||||||
--- a/drivers/net/wireless/ath/ath9k/hw.h
|
--- a/drivers/net/wireless/ath/ath9k/hw.h
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/hw.h
|
+++ b/drivers/net/wireless/ath/ath9k/hw.h
|
||||||
@@ -790,6 +790,8 @@ struct ath_hw {
|
@@ -795,6 +795,8 @@ struct ath_hw {
|
||||||
int initPDADC;
|
int initPDADC;
|
||||||
int PDADCdelta;
|
int PDADCdelta;
|
||||||
u8 led_pin;
|
u8 led_pin;
|
||||||
@ -26,7 +26,7 @@
|
|||||||
struct ar5416IniArray iniCommon;
|
struct ar5416IniArray iniCommon;
|
||||||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||||
@@ -1177,6 +1177,20 @@ static bool ath9k_hw_channel_change(stru
|
@@ -1171,6 +1171,20 @@ static bool ath9k_hw_channel_change(stru
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,7 +47,7 @@
|
|||||||
bool ath9k_hw_check_alive(struct ath_hw *ah)
|
bool ath9k_hw_check_alive(struct ath_hw *ah)
|
||||||
{
|
{
|
||||||
int count = 50;
|
int count = 50;
|
||||||
@@ -1463,6 +1477,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
@@ -1457,6 +1471,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
||||||
if (AR_SREV_9300_20_OR_LATER(ah))
|
if (AR_SREV_9300_20_OR_LATER(ah))
|
||||||
ar9003_hw_bb_watchdog_config(ah);
|
ar9003_hw_bb_watchdog_config(ah);
|
||||||
|
|
||||||
|
470
package/mac80211/patches/310-mac80211_tpt_led.patch
Normal file
470
package/mac80211/patches/310-mac80211_tpt_led.patch
Normal file
@ -0,0 +1,470 @@
|
|||||||
|
--- a/net/mac80211/led.c
|
||||||
|
+++ b/net/mac80211/led.c
|
||||||
|
@@ -54,12 +54,22 @@ void ieee80211_led_radio(struct ieee8021
|
||||||
|
led_trigger_event(local->radio_led, LED_OFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
+void ieee80211_led_names(struct ieee80211_local *local)
|
||||||
|
+{
|
||||||
|
+ snprintf(local->rx_led_name, sizeof(local->rx_led_name),
|
||||||
|
+ "%srx", wiphy_name(local->hw.wiphy));
|
||||||
|
+ snprintf(local->tx_led_name, sizeof(local->tx_led_name),
|
||||||
|
+ "%stx", wiphy_name(local->hw.wiphy));
|
||||||
|
+ snprintf(local->assoc_led_name, sizeof(local->assoc_led_name),
|
||||||
|
+ "%sassoc", wiphy_name(local->hw.wiphy));
|
||||||
|
+ snprintf(local->radio_led_name, sizeof(local->radio_led_name),
|
||||||
|
+ "%sradio", wiphy_name(local->hw.wiphy));
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void ieee80211_led_init(struct ieee80211_local *local)
|
||||||
|
{
|
||||||
|
local->rx_led = kzalloc(sizeof(struct led_trigger), GFP_KERNEL);
|
||||||
|
if (local->rx_led) {
|
||||||
|
- snprintf(local->rx_led_name, sizeof(local->rx_led_name),
|
||||||
|
- "%srx", wiphy_name(local->hw.wiphy));
|
||||||
|
local->rx_led->name = local->rx_led_name;
|
||||||
|
if (led_trigger_register(local->rx_led)) {
|
||||||
|
kfree(local->rx_led);
|
||||||
|
@@ -69,8 +79,6 @@ void ieee80211_led_init(struct ieee80211
|
||||||
|
|
||||||
|
local->tx_led = kzalloc(sizeof(struct led_trigger), GFP_KERNEL);
|
||||||
|
if (local->tx_led) {
|
||||||
|
- snprintf(local->tx_led_name, sizeof(local->tx_led_name),
|
||||||
|
- "%stx", wiphy_name(local->hw.wiphy));
|
||||||
|
local->tx_led->name = local->tx_led_name;
|
||||||
|
if (led_trigger_register(local->tx_led)) {
|
||||||
|
kfree(local->tx_led);
|
||||||
|
@@ -80,8 +88,6 @@ void ieee80211_led_init(struct ieee80211
|
||||||
|
|
||||||
|
local->assoc_led = kzalloc(sizeof(struct led_trigger), GFP_KERNEL);
|
||||||
|
if (local->assoc_led) {
|
||||||
|
- snprintf(local->assoc_led_name, sizeof(local->assoc_led_name),
|
||||||
|
- "%sassoc", wiphy_name(local->hw.wiphy));
|
||||||
|
local->assoc_led->name = local->assoc_led_name;
|
||||||
|
if (led_trigger_register(local->assoc_led)) {
|
||||||
|
kfree(local->assoc_led);
|
||||||
|
@@ -91,14 +97,19 @@ void ieee80211_led_init(struct ieee80211
|
||||||
|
|
||||||
|
local->radio_led = kzalloc(sizeof(struct led_trigger), GFP_KERNEL);
|
||||||
|
if (local->radio_led) {
|
||||||
|
- snprintf(local->radio_led_name, sizeof(local->radio_led_name),
|
||||||
|
- "%sradio", wiphy_name(local->hw.wiphy));
|
||||||
|
local->radio_led->name = local->radio_led_name;
|
||||||
|
if (led_trigger_register(local->radio_led)) {
|
||||||
|
kfree(local->radio_led);
|
||||||
|
local->radio_led = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ if (local->tpt_led_trigger) {
|
||||||
|
+ if (led_trigger_register(&local->tpt_led_trigger->trig)) {
|
||||||
|
+ kfree(local->tpt_led_trigger);
|
||||||
|
+ local->tpt_led_trigger = NULL;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
void ieee80211_led_exit(struct ieee80211_local *local)
|
||||||
|
@@ -119,15 +130,18 @@ void ieee80211_led_exit(struct ieee80211
|
||||||
|
led_trigger_unregister(local->rx_led);
|
||||||
|
kfree(local->rx_led);
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ if (local->tpt_led_trigger) {
|
||||||
|
+ led_trigger_unregister(&local->tpt_led_trigger->trig);
|
||||||
|
+ kfree(local->tpt_led_trigger);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
char *__ieee80211_get_radio_led_name(struct ieee80211_hw *hw)
|
||||||
|
{
|
||||||
|
struct ieee80211_local *local = hw_to_local(hw);
|
||||||
|
|
||||||
|
- if (local->radio_led)
|
||||||
|
- return local->radio_led_name;
|
||||||
|
- return NULL;
|
||||||
|
+ return local->radio_led_name;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(__ieee80211_get_radio_led_name);
|
||||||
|
|
||||||
|
@@ -135,9 +149,7 @@ char *__ieee80211_get_assoc_led_name(str
|
||||||
|
{
|
||||||
|
struct ieee80211_local *local = hw_to_local(hw);
|
||||||
|
|
||||||
|
- if (local->assoc_led)
|
||||||
|
- return local->assoc_led_name;
|
||||||
|
- return NULL;
|
||||||
|
+ return local->assoc_led_name;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(__ieee80211_get_assoc_led_name);
|
||||||
|
|
||||||
|
@@ -145,9 +157,7 @@ char *__ieee80211_get_tx_led_name(struct
|
||||||
|
{
|
||||||
|
struct ieee80211_local *local = hw_to_local(hw);
|
||||||
|
|
||||||
|
- if (local->tx_led)
|
||||||
|
- return local->tx_led_name;
|
||||||
|
- return NULL;
|
||||||
|
+ return local->tx_led_name;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(__ieee80211_get_tx_led_name);
|
||||||
|
|
||||||
|
@@ -155,8 +165,115 @@ char *__ieee80211_get_rx_led_name(struct
|
||||||
|
{
|
||||||
|
struct ieee80211_local *local = hw_to_local(hw);
|
||||||
|
|
||||||
|
- if (local->rx_led)
|
||||||
|
- return local->rx_led_name;
|
||||||
|
- return NULL;
|
||||||
|
+ return local->rx_led_name;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(__ieee80211_get_rx_led_name);
|
||||||
|
+
|
||||||
|
+static unsigned long tpt_trig_traffic(struct ieee80211_local *local,
|
||||||
|
+ struct tpt_led_trigger *tpt_trig)
|
||||||
|
+{
|
||||||
|
+ unsigned long traffic, delta;
|
||||||
|
+
|
||||||
|
+ traffic = tpt_trig->tx_bytes + tpt_trig->rx_bytes;
|
||||||
|
+
|
||||||
|
+ delta = traffic - tpt_trig->prev_traffic;
|
||||||
|
+ tpt_trig->prev_traffic = traffic;
|
||||||
|
+ return DIV_ROUND_UP(delta, 1024 / 8);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void tpt_trig_timer(unsigned long data)
|
||||||
|
+{
|
||||||
|
+ struct ieee80211_local *local = (void *)data;
|
||||||
|
+ struct tpt_led_trigger *tpt_trig = local->tpt_led_trigger;
|
||||||
|
+ struct led_classdev *led_cdev;
|
||||||
|
+ unsigned long on, off, tpt;
|
||||||
|
+ int i;
|
||||||
|
+
|
||||||
|
+ if (!tpt_trig->running)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ mod_timer(&tpt_trig->timer, round_jiffies(jiffies + HZ));
|
||||||
|
+
|
||||||
|
+ tpt = tpt_trig_traffic(local, tpt_trig);
|
||||||
|
+
|
||||||
|
+ /* default to just solid on */
|
||||||
|
+ on = 1;
|
||||||
|
+ off = 0;
|
||||||
|
+
|
||||||
|
+ for (i = tpt_trig->blink_table_len - 1; i >= 0; i--) {
|
||||||
|
+ if (tpt_trig->blink_table[i].throughput < 0 ||
|
||||||
|
+ tpt > tpt_trig->blink_table[i].throughput) {
|
||||||
|
+ off = tpt_trig->blink_table[i].blink_time / 2;
|
||||||
|
+ on = tpt_trig->blink_table[i].blink_time - off;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ read_lock(&tpt_trig->trig.leddev_list_lock);
|
||||||
|
+ list_for_each_entry(led_cdev, &tpt_trig->trig.led_cdevs, trig_list)
|
||||||
|
+ led_blink_set(led_cdev, &on, &off);
|
||||||
|
+ read_unlock(&tpt_trig->trig.leddev_list_lock);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+extern char *__ieee80211_create_tpt_led_trigger(
|
||||||
|
+ struct ieee80211_hw *hw,
|
||||||
|
+ const struct ieee80211_tpt_blink *blink_table,
|
||||||
|
+ unsigned int blink_table_len)
|
||||||
|
+{
|
||||||
|
+ struct ieee80211_local *local = hw_to_local(hw);
|
||||||
|
+ struct tpt_led_trigger *tpt_trig;
|
||||||
|
+
|
||||||
|
+ if (WARN_ON(local->tpt_led_trigger))
|
||||||
|
+ return NULL;
|
||||||
|
+
|
||||||
|
+ tpt_trig = kzalloc(sizeof(struct tpt_led_trigger), GFP_KERNEL);
|
||||||
|
+ if (!tpt_trig)
|
||||||
|
+ return NULL;
|
||||||
|
+
|
||||||
|
+ snprintf(tpt_trig->name, sizeof(tpt_trig->name),
|
||||||
|
+ "%stpt", wiphy_name(local->hw.wiphy));
|
||||||
|
+
|
||||||
|
+ tpt_trig->trig.name = tpt_trig->name;
|
||||||
|
+
|
||||||
|
+ tpt_trig->blink_table = blink_table;
|
||||||
|
+ tpt_trig->blink_table_len = blink_table_len;
|
||||||
|
+
|
||||||
|
+ setup_timer(&tpt_trig->timer, tpt_trig_timer, (unsigned long)local);
|
||||||
|
+
|
||||||
|
+ local->tpt_led_trigger = tpt_trig;
|
||||||
|
+
|
||||||
|
+ return tpt_trig->name;
|
||||||
|
+}
|
||||||
|
+EXPORT_SYMBOL(__ieee80211_create_tpt_led_trigger);
|
||||||
|
+
|
||||||
|
+void ieee80211_start_tpt_led_trig(struct ieee80211_local *local)
|
||||||
|
+{
|
||||||
|
+ struct tpt_led_trigger *tpt_trig = local->tpt_led_trigger;
|
||||||
|
+
|
||||||
|
+ if (!tpt_trig)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ /* reset traffic */
|
||||||
|
+ tpt_trig_traffic(local, tpt_trig);
|
||||||
|
+ tpt_trig->running = true;
|
||||||
|
+
|
||||||
|
+ tpt_trig_timer((unsigned long)local);
|
||||||
|
+ mod_timer(&tpt_trig->timer, round_jiffies(jiffies + HZ));
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void ieee80211_stop_tpt_led_trig(struct ieee80211_local *local)
|
||||||
|
+{
|
||||||
|
+ struct tpt_led_trigger *tpt_trig = local->tpt_led_trigger;
|
||||||
|
+ struct led_classdev *led_cdev;
|
||||||
|
+
|
||||||
|
+ if (!tpt_trig)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ tpt_trig->running = false;
|
||||||
|
+ del_timer_sync(&tpt_trig->timer);
|
||||||
|
+
|
||||||
|
+ read_lock(&tpt_trig->trig.leddev_list_lock);
|
||||||
|
+ list_for_each_entry(led_cdev, &tpt_trig->trig.led_cdevs, trig_list)
|
||||||
|
+ led_brightness_set(led_cdev, LED_OFF);
|
||||||
|
+ read_unlock(&tpt_trig->trig.leddev_list_lock);
|
||||||
|
+}
|
||||||
|
--- a/net/mac80211/led.h
|
||||||
|
+++ b/net/mac80211/led.h
|
||||||
|
@@ -12,14 +12,17 @@
|
||||||
|
#include "ieee80211_i.h"
|
||||||
|
|
||||||
|
#ifdef CONFIG_MAC80211_LEDS
|
||||||
|
-extern void ieee80211_led_rx(struct ieee80211_local *local);
|
||||||
|
-extern void ieee80211_led_tx(struct ieee80211_local *local, int q);
|
||||||
|
-extern void ieee80211_led_assoc(struct ieee80211_local *local,
|
||||||
|
- bool associated);
|
||||||
|
-extern void ieee80211_led_radio(struct ieee80211_local *local,
|
||||||
|
- bool enabled);
|
||||||
|
-extern void ieee80211_led_init(struct ieee80211_local *local);
|
||||||
|
-extern void ieee80211_led_exit(struct ieee80211_local *local);
|
||||||
|
+void ieee80211_led_rx(struct ieee80211_local *local);
|
||||||
|
+void ieee80211_led_tx(struct ieee80211_local *local, int q);
|
||||||
|
+void ieee80211_led_assoc(struct ieee80211_local *local,
|
||||||
|
+ bool associated);
|
||||||
|
+void ieee80211_led_radio(struct ieee80211_local *local,
|
||||||
|
+ bool enabled);
|
||||||
|
+void ieee80211_led_names(struct ieee80211_local *local);
|
||||||
|
+void ieee80211_led_init(struct ieee80211_local *local);
|
||||||
|
+void ieee80211_led_exit(struct ieee80211_local *local);
|
||||||
|
+void ieee80211_start_tpt_led_trig(struct ieee80211_local *local);
|
||||||
|
+void ieee80211_stop_tpt_led_trig(struct ieee80211_local *local);
|
||||||
|
#else
|
||||||
|
static inline void ieee80211_led_rx(struct ieee80211_local *local)
|
||||||
|
{
|
||||||
|
@@ -35,10 +38,37 @@ static inline void ieee80211_led_radio(s
|
||||||
|
bool enabled)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
+static inline void ieee80211_led_names(struct ieee80211_local *local)
|
||||||
|
+{
|
||||||
|
+}
|
||||||
|
static inline void ieee80211_led_init(struct ieee80211_local *local)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
static inline void ieee80211_led_exit(struct ieee80211_local *local)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
+static inline void ieee80211_start_tpt_led_trig(struct ieee80211_local *local)
|
||||||
|
+{
|
||||||
|
+}
|
||||||
|
+static inline void ieee80211_stop_tpt_led_trig(struct ieee80211_local *local)
|
||||||
|
+{
|
||||||
|
+}
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+static inline void
|
||||||
|
+ieee80211_tpt_led_trig_tx(struct ieee80211_local *local, __le16 fc, int bytes)
|
||||||
|
+{
|
||||||
|
+#ifdef CONFIG_MAC80211_LEDS
|
||||||
|
+ if (local->tpt_led_trigger && ieee80211_is_data(fc))
|
||||||
|
+ local->tpt_led_trigger->tx_bytes += bytes;
|
||||||
|
+#endif
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static inline void
|
||||||
|
+ieee80211_tpt_led_trig_rx(struct ieee80211_local *local, __le16 fc, int bytes)
|
||||||
|
+{
|
||||||
|
+#ifdef CONFIG_MAC80211_LEDS
|
||||||
|
+ if (local->tpt_led_trigger && ieee80211_is_data(fc))
|
||||||
|
+ local->tpt_led_trigger->rx_bytes += bytes;
|
||||||
|
#endif
|
||||||
|
+}
|
||||||
|
--- a/net/mac80211/main.c
|
||||||
|
+++ b/net/mac80211/main.c
|
||||||
|
@@ -602,6 +602,8 @@ struct ieee80211_hw *ieee80211_alloc_hw(
|
||||||
|
/* init dummy netdev for use w/ NAPI */
|
||||||
|
init_dummy_netdev(&local->napi_dev);
|
||||||
|
|
||||||
|
+ ieee80211_led_names(local);
|
||||||
|
+
|
||||||
|
return local_to_hw(local);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(ieee80211_alloc_hw);
|
||||||
|
--- a/include/net/mac80211.h
|
||||||
|
+++ b/include/net/mac80211.h
|
||||||
|
@@ -1856,11 +1856,26 @@ struct ieee80211_hw *ieee80211_alloc_hw(
|
||||||
|
*/
|
||||||
|
int ieee80211_register_hw(struct ieee80211_hw *hw);
|
||||||
|
|
||||||
|
+/**
|
||||||
|
+ * struct ieee80211_tpt_blink - throughput blink description
|
||||||
|
+ * @throughput: throughput in Kbit/sec
|
||||||
|
+ * @blink_time: blink time in milliseconds
|
||||||
|
+ * (full cycle, ie. one off + one on period)
|
||||||
|
+ */
|
||||||
|
+struct ieee80211_tpt_blink {
|
||||||
|
+ int throughput;
|
||||||
|
+ int blink_time;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
#ifdef CONFIG_MAC80211_LEDS
|
||||||
|
extern char *__ieee80211_get_tx_led_name(struct ieee80211_hw *hw);
|
||||||
|
extern char *__ieee80211_get_rx_led_name(struct ieee80211_hw *hw);
|
||||||
|
extern char *__ieee80211_get_assoc_led_name(struct ieee80211_hw *hw);
|
||||||
|
extern char *__ieee80211_get_radio_led_name(struct ieee80211_hw *hw);
|
||||||
|
+extern char *__ieee80211_create_tpt_led_trigger(
|
||||||
|
+ struct ieee80211_hw *hw,
|
||||||
|
+ const struct ieee80211_tpt_blink *blink_table,
|
||||||
|
+ unsigned int blink_table_len);
|
||||||
|
#endif
|
||||||
|
/**
|
||||||
|
* ieee80211_get_tx_led_name - get name of TX LED
|
||||||
|
@@ -1939,6 +1954,29 @@ static inline char *ieee80211_get_radio_
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
+ * ieee80211_create_tpt_led_trigger - create throughput LED trigger
|
||||||
|
+ * @hw: the hardware to create the trigger for
|
||||||
|
+ * @blink_table: the blink table -- needs to be ordered by throughput
|
||||||
|
+ * @blink_table_len: size of the blink table
|
||||||
|
+ *
|
||||||
|
+ * This function returns %NULL (in case of error, or if no LED
|
||||||
|
+ * triggers are configured) or the name of the new trigger.
|
||||||
|
+ * This function must be called before ieee80211_register_hw().
|
||||||
|
+ */
|
||||||
|
+static inline char *
|
||||||
|
+ieee80211_create_tpt_led_trigger(struct ieee80211_hw *hw,
|
||||||
|
+ const struct ieee80211_tpt_blink *blink_table,
|
||||||
|
+ unsigned int blink_table_len)
|
||||||
|
+{
|
||||||
|
+#ifdef CONFIG_MAC80211_LEDS
|
||||||
|
+ return __ieee80211_create_tpt_led_trigger(hw, blink_table,
|
||||||
|
+ blink_table_len);
|
||||||
|
+#else
|
||||||
|
+ return NULL;
|
||||||
|
+#endif
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
* ieee80211_unregister_hw - Unregister a hardware device
|
||||||
|
*
|
||||||
|
* This function instructs mac80211 to free allocated resources
|
||||||
|
--- a/net/mac80211/ieee80211_i.h
|
||||||
|
+++ b/net/mac80211/ieee80211_i.h
|
||||||
|
@@ -23,6 +23,7 @@
|
||||||
|
#include <linux/types.h>
|
||||||
|
#include <linux/spinlock.h>
|
||||||
|
#include <linux/etherdevice.h>
|
||||||
|
+#include <linux/leds.h>
|
||||||
|
#include <net/ieee80211_radiotap.h>
|
||||||
|
#include <net/cfg80211.h>
|
||||||
|
#include <net/mac80211.h>
|
||||||
|
@@ -629,6 +630,19 @@ 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];
|
||||||
|
+ const struct ieee80211_tpt_blink *blink_table;
|
||||||
|
+ unsigned int blink_table_len;
|
||||||
|
+ struct timer_list timer;
|
||||||
|
+ bool running;
|
||||||
|
+ unsigned long prev_traffic;
|
||||||
|
+ unsigned long tx_bytes, rx_bytes;
|
||||||
|
+};
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* mac80211 scan flags - currently active scan mode
|
||||||
|
*
|
||||||
|
@@ -842,6 +856,7 @@ struct ieee80211_local {
|
||||||
|
#ifdef CONFIG_MAC80211_LEDS
|
||||||
|
int tx_led_counter, rx_led_counter;
|
||||||
|
struct led_trigger *tx_led, *rx_led, *assoc_led, *radio_led;
|
||||||
|
+ struct tpt_led_trigger *tpt_led_trigger;
|
||||||
|
char tx_led_name[32], rx_led_name[32],
|
||||||
|
assoc_led_name[32], radio_led_name[32];
|
||||||
|
#endif
|
||||||
|
--- a/net/mac80211/iface.c
|
||||||
|
+++ b/net/mac80211/iface.c
|
||||||
|
@@ -220,6 +220,7 @@ static int ieee80211_do_open(struct net_
|
||||||
|
/* we're brought up, everything changes */
|
||||||
|
hw_reconf_flags = ~0;
|
||||||
|
ieee80211_led_radio(local, true);
|
||||||
|
+ ieee80211_start_tpt_led_trig(local);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
--- a/net/mac80211/rx.c
|
||||||
|
+++ b/net/mac80211/rx.c
|
||||||
|
@@ -2888,6 +2888,9 @@ void ieee80211_rx(struct ieee80211_hw *h
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ ieee80211_tpt_led_trig_rx(local,
|
||||||
|
+ ((struct ieee80211_hdr *)skb->data)->frame_control,
|
||||||
|
+ skb->len);
|
||||||
|
__ieee80211_rx_handle_packet(hw, skb);
|
||||||
|
|
||||||
|
rcu_read_unlock();
|
||||||
|
--- a/net/mac80211/tx.c
|
||||||
|
+++ b/net/mac80211/tx.c
|
||||||
|
@@ -1293,6 +1293,7 @@ static int __ieee80211_tx(struct ieee802
|
||||||
|
|
||||||
|
while (skb) {
|
||||||
|
int q = skb_get_queue_mapping(skb);
|
||||||
|
+ __le16 fc;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
|
||||||
|
ret = IEEE80211_TX_OK;
|
||||||
|
@@ -1335,6 +1336,7 @@ static int __ieee80211_tx(struct ieee802
|
||||||
|
else
|
||||||
|
info->control.sta = NULL;
|
||||||
|
|
||||||
|
+ fc = ((struct ieee80211_hdr *)skb->data)->frame_control;
|
||||||
|
ret = drv_tx(local, skb);
|
||||||
|
if (WARN_ON(ret != NETDEV_TX_OK && skb->len != len)) {
|
||||||
|
dev_kfree_skb(skb);
|
||||||
|
@@ -1345,6 +1347,7 @@ static int __ieee80211_tx(struct ieee802
|
||||||
|
return IEEE80211_TX_AGAIN;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ ieee80211_tpt_led_trig_tx(local, fc, len);
|
||||||
|
*skbp = skb = next;
|
||||||
|
ieee80211_led_tx(local, 1);
|
||||||
|
fragm = true;
|
||||||
|
--- a/net/mac80211/util.c
|
||||||
|
+++ b/net/mac80211/util.c
|
||||||
|
@@ -1141,6 +1141,7 @@ u32 ieee80211_sta_get_rates(struct ieee8
|
||||||
|
void ieee80211_stop_device(struct ieee80211_local *local)
|
||||||
|
{
|
||||||
|
ieee80211_led_radio(local, false);
|
||||||
|
+ ieee80211_stop_tpt_led_trig(local);
|
||||||
|
|
||||||
|
cancel_work_sync(&local->reconfig_filter);
|
||||||
|
|
||||||
|
@@ -1175,6 +1176,7 @@ int ieee80211_reconfig(struct ieee80211_
|
||||||
|
}
|
||||||
|
|
||||||
|
ieee80211_led_radio(local, true);
|
||||||
|
+ ieee80211_start_tpt_led_trig(local);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add interfaces */
|
@ -1,725 +0,0 @@
|
|||||||
--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
|
|
||||||
@@ -57,6 +57,8 @@
|
|
||||||
#define SUB_NUM_CTL_MODES_AT_5G_40 2 /* excluding HT40, EXT-OFDM */
|
|
||||||
#define SUB_NUM_CTL_MODES_AT_2G_40 3 /* excluding HT40, EXT-OFDM, EXT-CCK */
|
|
||||||
|
|
||||||
+#define CTL(_tpower, _flag) ((_tpower) | ((_flag) << 6))
|
|
||||||
+
|
|
||||||
static int ar9003_hw_power_interpolate(int32_t x,
|
|
||||||
int32_t *px, int32_t *py, u_int16_t np);
|
|
||||||
static const struct ar9300_eeprom ar9300_default = {
|
|
||||||
@@ -296,21 +298,21 @@ static const struct ar9300_eeprom ar9300
|
|
||||||
}
|
|
||||||
},
|
|
||||||
.ctlPowerData_2G = {
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
- { { {60, 1}, {60, 0}, {60, 0}, {60, 1} } },
|
|
||||||
-
|
|
||||||
- { { {60, 1}, {60, 0}, {0, 0}, {0, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
-
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 1}, {60, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
-
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 1}, {60, 1} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 1}, {60, 1} } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 1) } },
|
|
||||||
+
|
|
||||||
+ { { CTL(60, 1), CTL(60, 0), CTL(0, 0), CTL(0, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 1), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 1), CTL(60, 1) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 1), CTL(60, 1) } },
|
|
||||||
},
|
|
||||||
.modalHeader5G = {
|
|
||||||
/* 4 idle,t1,t2,b (4 bits per setting) */
|
|
||||||
@@ -582,56 +584,56 @@ static const struct ar9300_eeprom ar9300
|
|
||||||
.ctlPowerData_5G = {
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 0},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 0},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 0}, {60, 1}, {60, 0}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
+ CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 0}, {60, 1}, {60, 1}, {60, 0},
|
|
||||||
- {60, 1}, {60, 0}, {60, 0}, {60, 0},
|
|
||||||
+ CTL(60, 0), CTL(60, 1), CTL(60, 1), CTL(60, 0),
|
|
||||||
+ CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 0},
|
|
||||||
- {60, 0}, {60, 0}, {60, 0}, {60, 0},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 0),
|
|
||||||
+ CTL(60, 0), CTL(60, 0), CTL(60, 0), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
- {60, 1}, {60, 0}, {60, 0}, {60, 0},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 0}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 0},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 0), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 0}, {60, 1}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 0}, {60, 1},
|
|
||||||
+ CTL(60, 1), CTL(60, 0), CTL(60, 1), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 0), CTL(60, 1),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -873,21 +875,21 @@ static const struct ar9300_eeprom ar9300
|
|
||||||
}
|
|
||||||
},
|
|
||||||
.ctlPowerData_2G = {
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
- { { {60, 1}, {60, 0}, {60, 0}, {60, 1} } },
|
|
||||||
-
|
|
||||||
- { { {60, 1}, {60, 0}, {0, 0}, {0, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
-
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 1}, {60, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
-
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 1}, {60, 1} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 1}, {60, 1} } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 1) } },
|
|
||||||
+
|
|
||||||
+ { { CTL(60, 1), CTL(60, 0), CTL(0, 0), CTL(0, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 1), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 1), CTL(60, 1) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 1), CTL(60, 1) } },
|
|
||||||
},
|
|
||||||
.modalHeader5G = {
|
|
||||||
/* 4 idle,t1,t2,b (4 bits per setting) */
|
|
||||||
@@ -1159,56 +1161,56 @@ static const struct ar9300_eeprom ar9300
|
|
||||||
.ctlPowerData_5G = {
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 0},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 0},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 0}, {60, 1}, {60, 0}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
+ CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 0}, {60, 1}, {60, 1}, {60, 0},
|
|
||||||
- {60, 1}, {60, 0}, {60, 0}, {60, 0},
|
|
||||||
+ CTL(60, 0), CTL(60, 1), CTL(60, 1), CTL(60, 0),
|
|
||||||
+ CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 0},
|
|
||||||
- {60, 0}, {60, 0}, {60, 0}, {60, 0},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 0),
|
|
||||||
+ CTL(60, 0), CTL(60, 0), CTL(60, 0), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
- {60, 1}, {60, 0}, {60, 0}, {60, 0},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 0}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 0},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 0), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 0}, {60, 1}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 0}, {60, 1},
|
|
||||||
+ CTL(60, 1), CTL(60, 0), CTL(60, 1), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 0), CTL(60, 1),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1451,21 +1453,21 @@ static const struct ar9300_eeprom ar9300
|
|
||||||
}
|
|
||||||
},
|
|
||||||
.ctlPowerData_2G = {
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
- { { {60, 1}, {60, 0}, {60, 0}, {60, 1} } },
|
|
||||||
-
|
|
||||||
- { { {60, 1}, {60, 0}, {0, 0}, {0, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
-
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 1}, {60, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
-
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 1}, {60, 1} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 1}, {60, 1} } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 1) } },
|
|
||||||
+
|
|
||||||
+ { { CTL(60, 1), CTL(60, 0), CTL(0, 0), CTL(0, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 1), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 1), CTL(60, 1) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 1), CTL(60, 1) } },
|
|
||||||
},
|
|
||||||
.modalHeader5G = {
|
|
||||||
/* 4 idle,t1,t2,b (4 bits per setting) */
|
|
||||||
@@ -1737,56 +1739,56 @@ static const struct ar9300_eeprom ar9300
|
|
||||||
.ctlPowerData_5G = {
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 0},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 0},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 0}, {60, 1}, {60, 0}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
+ CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 0}, {60, 1}, {60, 1}, {60, 0},
|
|
||||||
- {60, 1}, {60, 0}, {60, 0}, {60, 0},
|
|
||||||
+ CTL(60, 0), CTL(60, 1), CTL(60, 1), CTL(60, 0),
|
|
||||||
+ CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 0},
|
|
||||||
- {60, 0}, {60, 0}, {60, 0}, {60, 0},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 0),
|
|
||||||
+ CTL(60, 0), CTL(60, 0), CTL(60, 0), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
- {60, 1}, {60, 0}, {60, 0}, {60, 0},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 0}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 0},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 0), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 0}, {60, 1}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 0}, {60, 1},
|
|
||||||
+ CTL(60, 1), CTL(60, 0), CTL(60, 1), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 0), CTL(60, 1),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -2029,21 +2031,21 @@ static const struct ar9300_eeprom ar9300
|
|
||||||
}
|
|
||||||
},
|
|
||||||
.ctlPowerData_2G = {
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
- { { {60, 1}, {60, 0}, {60, 0}, {60, 1} } },
|
|
||||||
-
|
|
||||||
- { { {60, 1}, {60, 0}, {0, 0}, {0, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
-
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 1}, {60, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
-
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 1}, {60, 1} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 1}, {60, 1} } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 1) } },
|
|
||||||
+
|
|
||||||
+ { { CTL(60, 1), CTL(60, 0), CTL(0, 0), CTL(0, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 1), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 1), CTL(60, 1) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 1), CTL(60, 1) } },
|
|
||||||
},
|
|
||||||
.modalHeader5G = {
|
|
||||||
/* 4 idle,t1,t2,b (4 bits per setting) */
|
|
||||||
@@ -2315,56 +2317,56 @@ static const struct ar9300_eeprom ar9300
|
|
||||||
.ctlPowerData_5G = {
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 0},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 0},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 0}, {60, 1}, {60, 0}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
+ CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 0}, {60, 1}, {60, 1}, {60, 0},
|
|
||||||
- {60, 1}, {60, 0}, {60, 0}, {60, 0},
|
|
||||||
+ CTL(60, 0), CTL(60, 1), CTL(60, 1), CTL(60, 0),
|
|
||||||
+ CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 0},
|
|
||||||
- {60, 0}, {60, 0}, {60, 0}, {60, 0},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 0),
|
|
||||||
+ CTL(60, 0), CTL(60, 0), CTL(60, 0), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
- {60, 1}, {60, 0}, {60, 0}, {60, 0},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 0}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 0},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 0), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 0}, {60, 1}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 0}, {60, 1},
|
|
||||||
+ CTL(60, 1), CTL(60, 0), CTL(60, 1), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 0), CTL(60, 1),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -2606,21 +2608,21 @@ static const struct ar9300_eeprom ar9300
|
|
||||||
}
|
|
||||||
},
|
|
||||||
.ctlPowerData_2G = {
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
- { { {60, 1}, {60, 0}, {60, 0}, {60, 1} } },
|
|
||||||
-
|
|
||||||
- { { {60, 1}, {60, 0}, {0, 0}, {0, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
-
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 1}, {60, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
-
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 0}, {60, 0} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 1}, {60, 1} } },
|
|
||||||
- { { {60, 0}, {60, 1}, {60, 1}, {60, 1} } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 1) } },
|
|
||||||
+
|
|
||||||
+ { { CTL(60, 1), CTL(60, 0), CTL(0, 0), CTL(0, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 1), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 1), CTL(60, 1) } },
|
|
||||||
+ { { CTL(60, 0), CTL(60, 1), CTL(60, 1), CTL(60, 1) } },
|
|
||||||
},
|
|
||||||
.modalHeader5G = {
|
|
||||||
/* 4 idle,t1,t2,b (4 bits per setting) */
|
|
||||||
@@ -2892,56 +2894,56 @@ static const struct ar9300_eeprom ar9300
|
|
||||||
.ctlPowerData_5G = {
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 0},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 0},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 0}, {60, 1}, {60, 0}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
+ CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 0}, {60, 1}, {60, 1}, {60, 0},
|
|
||||||
- {60, 1}, {60, 0}, {60, 0}, {60, 0},
|
|
||||||
+ CTL(60, 0), CTL(60, 1), CTL(60, 1), CTL(60, 0),
|
|
||||||
+ CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 0},
|
|
||||||
- {60, 0}, {60, 0}, {60, 0}, {60, 0},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 0),
|
|
||||||
+ CTL(60, 0), CTL(60, 0), CTL(60, 0), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
- {60, 1}, {60, 0}, {60, 0}, {60, 0},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 1},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 1}, {60, 0}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 1}, {60, 0},
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 0), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 0),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
- {60, 1}, {60, 0}, {60, 1}, {60, 1},
|
|
||||||
- {60, 1}, {60, 1}, {60, 0}, {60, 1},
|
|
||||||
+ CTL(60, 1), CTL(60, 0), CTL(60, 1), CTL(60, 1),
|
|
||||||
+ CTL(60, 1), CTL(60, 1), CTL(60, 0), CTL(60, 1),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -4365,9 +4367,9 @@ static u16 ar9003_hw_get_direct_edge_pow
|
|
||||||
struct cal_ctl_data_5g *ctl_5g = eep->ctlPowerData_5G;
|
|
||||||
|
|
||||||
if (is2GHz)
|
|
||||||
- return ctl_2g[idx].ctlEdges[edge].tPower;
|
|
||||||
+ return CTL_EDGE_TPOWER(ctl_2g[idx].ctlEdges[edge]);
|
|
||||||
else
|
|
||||||
- return ctl_5g[idx].ctlEdges[edge].tPower;
|
|
||||||
+ return CTL_EDGE_TPOWER(ctl_5g[idx].ctlEdges[edge]);
|
|
||||||
}
|
|
||||||
|
|
||||||
static u16 ar9003_hw_get_indirect_edge_power(struct ar9300_eeprom *eep,
|
|
||||||
@@ -4385,12 +4387,12 @@ static u16 ar9003_hw_get_indirect_edge_p
|
|
||||||
|
|
||||||
if (is2GHz) {
|
|
||||||
if (ath9k_hw_fbin2freq(ctl_freqbin[edge - 1], 1) < freq &&
|
|
||||||
- ctl_2g[idx].ctlEdges[edge - 1].flag)
|
|
||||||
- return ctl_2g[idx].ctlEdges[edge - 1].tPower;
|
|
||||||
+ CTL_EDGE_FLAGS(ctl_2g[idx].ctlEdges[edge - 1]))
|
|
||||||
+ return CTL_EDGE_TPOWER(ctl_2g[idx].ctlEdges[edge - 1]);
|
|
||||||
} else {
|
|
||||||
if (ath9k_hw_fbin2freq(ctl_freqbin[edge - 1], 0) < freq &&
|
|
||||||
- ctl_5g[idx].ctlEdges[edge - 1].flag)
|
|
||||||
- return ctl_5g[idx].ctlEdges[edge - 1].tPower;
|
|
||||||
+ CTL_EDGE_FLAGS(ctl_5g[idx].ctlEdges[edge - 1]))
|
|
||||||
+ return CTL_EDGE_TPOWER(ctl_5g[idx].ctlEdges[edge - 1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return AR9300_MAX_RATE_POWER;
|
|
||||||
--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h
|
|
||||||
@@ -270,17 +270,12 @@ struct cal_tgt_pow_ht {
|
|
||||||
u8 tPow2x[14];
|
|
||||||
} __packed;
|
|
||||||
|
|
||||||
-struct cal_ctl_edge_pwr {
|
|
||||||
- u8 tPower:6,
|
|
||||||
- flag:2;
|
|
||||||
-} __packed;
|
|
||||||
-
|
|
||||||
struct cal_ctl_data_2g {
|
|
||||||
- struct cal_ctl_edge_pwr ctlEdges[AR9300_NUM_BAND_EDGES_2G];
|
|
||||||
+ u8 ctlEdges[AR9300_NUM_BAND_EDGES_2G];
|
|
||||||
} __packed;
|
|
||||||
|
|
||||||
struct cal_ctl_data_5g {
|
|
||||||
- struct cal_ctl_edge_pwr ctlEdges[AR9300_NUM_BAND_EDGES_5G];
|
|
||||||
+ u8 ctlEdges[AR9300_NUM_BAND_EDGES_5G];
|
|
||||||
} __packed;
|
|
||||||
|
|
||||||
struct ar9300_BaseExtension_1 {
|
|
||||||
--- a/drivers/net/wireless/ath/ath9k/eeprom.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/eeprom.c
|
|
||||||
@@ -240,16 +240,16 @@ u16 ath9k_hw_get_max_edge_power(u16 freq
|
|
||||||
for (i = 0; (i < num_band_edges) &&
|
|
||||||
(pRdEdgesPower[i].bChannel != AR5416_BCHAN_UNUSED); i++) {
|
|
||||||
if (freq == ath9k_hw_fbin2freq(pRdEdgesPower[i].bChannel, is2GHz)) {
|
|
||||||
- twiceMaxEdgePower = pRdEdgesPower[i].tPower;
|
|
||||||
+ twiceMaxEdgePower = CTL_EDGE_TPOWER(pRdEdgesPower[i].ctl);
|
|
||||||
break;
|
|
||||||
} else if ((i > 0) &&
|
|
||||||
(freq < ath9k_hw_fbin2freq(pRdEdgesPower[i].bChannel,
|
|
||||||
is2GHz))) {
|
|
||||||
if (ath9k_hw_fbin2freq(pRdEdgesPower[i - 1].bChannel,
|
|
||||||
is2GHz) < freq &&
|
|
||||||
- pRdEdgesPower[i - 1].flag) {
|
|
||||||
+ CTL_EDGE_FLAGS(pRdEdgesPower[i - 1].ctl)) {
|
|
||||||
twiceMaxEdgePower =
|
|
||||||
- pRdEdgesPower[i - 1].tPower;
|
|
||||||
+ CTL_EDGE_TPOWER(pRdEdgesPower[i - 1].ctl);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
--- a/drivers/net/wireless/ath/ath9k/eeprom.h
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/eeprom.h
|
|
||||||
@@ -233,6 +233,18 @@
|
|
||||||
|
|
||||||
#define AR9287_CHECKSUM_LOCATION (AR9287_EEP_START_LOC + 1)
|
|
||||||
|
|
||||||
+#define CTL_EDGE_TPOWER(_ctl) ((_ctl) & 0x3f)
|
|
||||||
+#define CTL_EDGE_FLAGS(_ctl) (((_ctl) >> 6) & 0x03)
|
|
||||||
+
|
|
||||||
+#define LNA_CTL_BUF_MODE BIT(0)
|
|
||||||
+#define LNA_CTL_ISEL_LO BIT(1)
|
|
||||||
+#define LNA_CTL_ISEL_HI BIT(2)
|
|
||||||
+#define LNA_CTL_BUF_IN BIT(3)
|
|
||||||
+#define LNA_CTL_FEM_BAND BIT(4)
|
|
||||||
+#define LNA_CTL_LOCAL_BIAS BIT(5)
|
|
||||||
+#define LNA_CTL_FORCE_XPA BIT(6)
|
|
||||||
+#define LNA_CTL_USE_ANT1 BIT(7)
|
|
||||||
+
|
|
||||||
enum eeprom_param {
|
|
||||||
EEP_NFTHRESH_5,
|
|
||||||
EEP_NFTHRESH_2,
|
|
||||||
@@ -379,10 +391,7 @@ struct modal_eep_header {
|
|
||||||
u8 xatten2Margin[AR5416_MAX_CHAINS];
|
|
||||||
u8 ob_ch1;
|
|
||||||
u8 db_ch1;
|
|
||||||
- u8 useAnt1:1,
|
|
||||||
- force_xpaon:1,
|
|
||||||
- local_bias:1,
|
|
||||||
- femBandSelectUsed:1, xlnabufin:1, xlnaisel:2, xlnabufmode:1;
|
|
||||||
+ u8 lna_ctl;
|
|
||||||
u8 miscBits;
|
|
||||||
u16 xpaBiasLvlFreq[3];
|
|
||||||
u8 futureModal[6];
|
|
||||||
@@ -536,18 +545,10 @@ struct cal_target_power_ht {
|
|
||||||
u8 tPow2x[8];
|
|
||||||
} __packed;
|
|
||||||
|
|
||||||
-
|
|
||||||
-#ifdef __BIG_ENDIAN_BITFIELD
|
|
||||||
struct cal_ctl_edges {
|
|
||||||
u8 bChannel;
|
|
||||||
- u8 flag:2, tPower:6;
|
|
||||||
+ u8 ctl;
|
|
||||||
} __packed;
|
|
||||||
-#else
|
|
||||||
-struct cal_ctl_edges {
|
|
||||||
- u8 bChannel;
|
|
||||||
- u8 tPower:6, flag:2;
|
|
||||||
-} __packed;
|
|
||||||
-#endif
|
|
||||||
|
|
||||||
struct cal_data_op_loop_ar9287 {
|
|
||||||
u8 pwrPdg[2][5];
|
|
||||||
--- a/drivers/net/wireless/ath/ath9k/eeprom_def.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/eeprom_def.c
|
|
||||||
@@ -451,9 +451,10 @@ static void ath9k_hw_def_set_board_value
|
|
||||||
ath9k_hw_analog_shift_rmw(ah, AR_AN_TOP2,
|
|
||||||
AR_AN_TOP2_LOCALBIAS,
|
|
||||||
AR_AN_TOP2_LOCALBIAS_S,
|
|
||||||
- pModal->local_bias);
|
|
||||||
+ !!(pModal->lna_ctl &
|
|
||||||
+ LNA_CTL_LOCAL_BIAS));
|
|
||||||
REG_RMW_FIELD(ah, AR_PHY_XPA_CFG, AR_PHY_FORCE_XPA_CFG,
|
|
||||||
- pModal->force_xpaon);
|
|
||||||
+ !!(pModal->lna_ctl & LNA_CTL_FORCE_XPA));
|
|
||||||
}
|
|
||||||
|
|
||||||
REG_RMW_FIELD(ah, AR_PHY_SETTLING, AR_PHY_SETTLING_SWITCH,
|
|
||||||
@@ -1435,9 +1436,9 @@ static u8 ath9k_hw_def_get_num_ant_confi
|
|
||||||
|
|
||||||
num_ant_config = 1;
|
|
||||||
|
|
||||||
- if (pBase->version >= 0x0E0D)
|
|
||||||
- if (pModal->useAnt1)
|
|
||||||
- num_ant_config += 1;
|
|
||||||
+ if (pBase->version >= 0x0E0D &&
|
|
||||||
+ (pModal->lna_ctl & LNA_CTL_USE_ANT1))
|
|
||||||
+ num_ant_config += 1;
|
|
||||||
|
|
||||||
return num_ant_config;
|
|
||||||
}
|
|
@ -1,6 +1,6 @@
|
|||||||
--- a/drivers/net/wireless/ath/ath9k/xmit.c
|
--- a/drivers/net/wireless/ath/ath9k/xmit.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
|
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
|
||||||
@@ -1689,17 +1689,20 @@ static void ath_tx_start_dma(struct ath_
|
@@ -1685,17 +1685,20 @@ static void ath_tx_start_dma(struct ath_
|
||||||
struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
|
struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
|
||||||
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
|
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
|
||||||
struct list_head bf_head;
|
struct list_head bf_head;
|
||||||
@ -23,7 +23,7 @@
|
|||||||
/*
|
/*
|
||||||
* Try aggregation if it's a unicast data frame
|
* Try aggregation if it's a unicast data frame
|
||||||
* and the destination is HT capable.
|
* and the destination is HT capable.
|
||||||
@@ -1716,7 +1719,7 @@ static void ath_tx_start_dma(struct ath_
|
@@ -1712,7 +1715,7 @@ static void ath_tx_start_dma(struct ath_
|
||||||
ar9003_hw_set_paprd_txdesc(sc->sc_ah, bf->bf_desc,
|
ar9003_hw_set_paprd_txdesc(sc->sc_ah, bf->bf_desc,
|
||||||
bf->bf_state.bfs_paprd);
|
bf->bf_state.bfs_paprd);
|
||||||
|
|
||||||
@ -32,3 +32,27 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
spin_unlock_bh(&txctl->txq->axq_lock);
|
spin_unlock_bh(&txctl->txq->axq_lock);
|
||||||
|
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||||
|
@@ -284,11 +284,9 @@ static void ath9k_hw_read_revisions(stru
|
||||||
|
|
||||||
|
static void ath9k_hw_disablepcie(struct ath_hw *ah)
|
||||||
|
{
|
||||||
|
- if (AR_SREV_9100(ah))
|
||||||
|
+ if (!AR_SREV_5416(ah))
|
||||||
|
return;
|
||||||
|
|
||||||
|
- ENABLE_REGWRITE_BUFFER(ah);
|
||||||
|
-
|
||||||
|
REG_WRITE(ah, AR_PCIE_SERDES, 0x9248fc00);
|
||||||
|
REG_WRITE(ah, AR_PCIE_SERDES, 0x24924924);
|
||||||
|
REG_WRITE(ah, AR_PCIE_SERDES, 0x28000029);
|
||||||
|
@@ -300,8 +298,6 @@ static void ath9k_hw_disablepcie(struct
|
||||||
|
REG_WRITE(ah, AR_PCIE_SERDES, 0x000e1007);
|
||||||
|
|
||||||
|
REG_WRITE(ah, AR_PCIE_SERDES2, 0x00000000);
|
||||||
|
-
|
||||||
|
- REGWRITE_BUFFER_FLUSH(ah);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This should work for all families including legacy */
|
File diff suppressed because it is too large
Load Diff
@ -8,19 +8,19 @@
|
|||||||
#include <asm/unaligned.h>
|
#include <asm/unaligned.h>
|
||||||
|
|
||||||
#include "hw.h"
|
#include "hw.h"
|
||||||
@@ -432,8 +433,16 @@ static int ath9k_hw_init_macaddr(struct
|
@@ -436,8 +437,16 @@ static int ath9k_hw_init_macaddr(struct
|
||||||
common->macaddr[2 * i] = eeval >> 8;
|
common->macaddr[2 * i] = eeval >> 8;
|
||||||
common->macaddr[2 * i + 1] = eeval & 0xff;
|
common->macaddr[2 * i + 1] = eeval & 0xff;
|
||||||
}
|
}
|
||||||
- if (sum == 0 || sum == 0xffff * 3)
|
- if (sum == 0 || sum == 0xffff * 3)
|
||||||
- return -EADDRNOTAVAIL;
|
- return -EADDRNOTAVAIL;
|
||||||
+ if (!is_valid_ether_addr(common->macaddr)) {
|
+ if (!is_valid_ether_addr(common->macaddr)) {
|
||||||
+ ath_print(common, ATH_DBG_EEPROM,
|
+ ath_err(common,
|
||||||
+ "eeprom contains invalid mac address: %pM\n",
|
+ "eeprom contains invalid mac address: %pM\n",
|
||||||
+ common->macaddr);
|
+ common->macaddr);
|
||||||
+
|
+
|
||||||
+ random_ether_addr(common->macaddr);
|
+ random_ether_addr(common->macaddr);
|
||||||
+ ath_print(common, ATH_DBG_EEPROM,
|
+ ath_err(common,
|
||||||
+ "random mac address will be used: %pM\n",
|
+ "random mac address will be used: %pM\n",
|
||||||
+ common->macaddr);
|
+ common->macaddr);
|
||||||
+ }
|
+ }
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
#include "ath9k.h"
|
#include "ath9k.h"
|
||||||
|
|
||||||
@@ -521,6 +522,7 @@ static void ath9k_init_misc(struct ath_s
|
@@ -522,6 +523,7 @@ static void ath9k_init_misc(struct ath_s
|
||||||
static int ath9k_init_softc(u16 devid, struct ath_softc *sc, u16 subsysid,
|
static int ath9k_init_softc(u16 devid, struct ath_softc *sc, u16 subsysid,
|
||||||
const struct ath_bus_ops *bus_ops)
|
const struct ath_bus_ops *bus_ops)
|
||||||
{
|
{
|
||||||
@ -26,13 +26,22 @@
|
|||||||
struct ath_hw *ah = NULL;
|
struct ath_hw *ah = NULL;
|
||||||
struct ath_common *common;
|
struct ath_common *common;
|
||||||
int ret = 0, i;
|
int ret = 0, i;
|
||||||
@@ -567,6 +569,9 @@ static int ath9k_init_softc(u16 devid, s
|
@@ -535,7 +537,7 @@ static int ath9k_init_softc(u16 devid, s
|
||||||
|
ah->hw_version.subsysid = subsysid;
|
||||||
|
sc->sc_ah = ah;
|
||||||
|
|
||||||
|
- if (!sc->dev->platform_data)
|
||||||
|
+ if (!pdata)
|
||||||
|
ah->ah_flags |= AH_USE_EEPROM;
|
||||||
|
|
||||||
|
common = ath9k_hw_common(ah);
|
||||||
|
@@ -568,6 +570,9 @@ static int ath9k_init_softc(u16 devid, s
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_hw;
|
goto err_hw;
|
||||||
|
|
||||||
+ if (pdata && pdata->macaddr)
|
+ if (pdata && pdata->macaddr)
|
||||||
+ memcpy(common->macaddr, pdata->macaddr, ETH_ALEN);
|
+ memcpy(common->macaddr, pdata->macaddr, ETH_ALEN);
|
||||||
+
|
+
|
||||||
ret = ath9k_init_debug(ah);
|
ret = ath9k_init_queues(sc);
|
||||||
if (ret) {
|
if (ret)
|
||||||
ath_print(common, ATH_DBG_FATAL,
|
goto err_queues;
|
||||||
|
@ -1,15 +1,14 @@
|
|||||||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||||
@@ -536,8 +536,15 @@ static int ath9k_init_softc(u16 devid, s
|
@@ -537,8 +537,14 @@ static int ath9k_init_softc(u16 devid, s
|
||||||
ah->hw_version.subsysid = subsysid;
|
ah->hw_version.subsysid = subsysid;
|
||||||
sc->sc_ah = ah;
|
sc->sc_ah = ah;
|
||||||
|
|
||||||
- if (!sc->dev->platform_data)
|
- if (!pdata)
|
||||||
+ if (!sc->dev->platform_data) {
|
+ if (!pdata) {
|
||||||
ah->ah_flags |= AH_USE_EEPROM;
|
ah->ah_flags |= AH_USE_EEPROM;
|
||||||
+ sc->sc_ah->led_pin = -1;
|
+ sc->sc_ah->led_pin = -1;
|
||||||
+ } else {
|
+ } else {
|
||||||
+ pdata = (struct ath9k_platform_data *) sc->dev->platform_data;
|
|
||||||
+ sc->sc_ah->gpio_mask = pdata->gpio_mask;
|
+ sc->sc_ah->gpio_mask = pdata->gpio_mask;
|
||||||
+ sc->sc_ah->gpio_val = pdata->gpio_val;
|
+ sc->sc_ah->gpio_val = pdata->gpio_val;
|
||||||
+ sc->sc_ah->led_pin = pdata->led_pin;
|
+ sc->sc_ah->led_pin = pdata->led_pin;
|
||||||
@ -19,7 +18,7 @@
|
|||||||
common->ops = &ath9k_common_ops;
|
common->ops = &ath9k_common_ops;
|
||||||
--- a/drivers/net/wireless/ath/ath9k/hw.h
|
--- a/drivers/net/wireless/ath/ath9k/hw.h
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/hw.h
|
+++ b/drivers/net/wireless/ath/ath9k/hw.h
|
||||||
@@ -782,7 +782,7 @@ struct ath_hw {
|
@@ -794,7 +794,7 @@ struct ath_hw {
|
||||||
u32 originalGain[22];
|
u32 originalGain[22];
|
||||||
int initPDADC;
|
int initPDADC;
|
||||||
int PDADCdelta;
|
int PDADCdelta;
|
||||||
|
@ -9,26 +9,7 @@
|
|||||||
|
|
||||||
#include "ath5k.h"
|
#include "ath5k.h"
|
||||||
#include "reg.h"
|
#include "reg.h"
|
||||||
@@ -71,6 +73,18 @@ static u16 ath5k_eeprom_bin2freq(struct
|
@@ -1726,7 +1728,7 @@ ath5k_eeprom_read_spur_chans(struct ath5
|
||||||
static int ath5k_hw_eeprom_read(struct ath5k_hw *ah, u32 offset, u16 *data)
|
|
||||||
{
|
|
||||||
u32 status, timeout;
|
|
||||||
+ struct ath5k_platform_data *pdata = NULL;
|
|
||||||
+
|
|
||||||
+ if (ah->ah_sc->pdev)
|
|
||||||
+ pdata = ah->ah_sc->pdev->dev.platform_data;
|
|
||||||
+
|
|
||||||
+ if (pdata && pdata->eeprom_data && pdata->eeprom_data[0] == AR5K_EEPROM_MAGIC_VALUE)
|
|
||||||
+ {
|
|
||||||
+ ATH5K_INFO(ah->ah_sc, "using eeprom-content from platform_data\n");
|
|
||||||
+ if (offset >= ATH5K_PLAT_EEP_MAX_WORDS) return -EIO;
|
|
||||||
+ *data = pdata->eeprom_data[offset];
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Initialize EEPROM access
|
|
||||||
@@ -1760,7 +1774,7 @@ ath5k_eeprom_read_spur_chans(struct ath5
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -37,7 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
int ath5k_eeprom_read_mac(struct ath5k_hw *ah, u8 *mac)
|
int ath5k_eeprom_read_mac(struct ath5k_hw *ah, u8 *mac)
|
||||||
{
|
{
|
||||||
@@ -1768,6 +1782,16 @@ int ath5k_eeprom_read_mac(struct ath5k_h
|
@@ -1734,6 +1736,16 @@ int ath5k_eeprom_read_mac(struct ath5k_h
|
||||||
u32 total, offset;
|
u32 total, offset;
|
||||||
u16 data;
|
u16 data;
|
||||||
int octet, ret;
|
int octet, ret;
|
||||||
@ -52,5 +33,35 @@
|
|||||||
+ return 0;
|
+ return 0;
|
||||||
+ }
|
+ }
|
||||||
|
|
||||||
ret = ath5k_hw_eeprom_read(ah, 0x20, &data);
|
ret = ath5k_hw_nvram_read(ah, 0x20, &data);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
--- a/drivers/net/wireless/ath/ath5k/pci.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath5k/pci.c
|
||||||
|
@@ -17,6 +17,7 @@
|
||||||
|
#include <linux/nl80211.h>
|
||||||
|
#include <linux/pci.h>
|
||||||
|
#include <linux/pci-aspm.h>
|
||||||
|
+#include <linux/ath5k_platform.h>
|
||||||
|
#include "../ath.h"
|
||||||
|
#include "ath5k.h"
|
||||||
|
#include "debug.h"
|
||||||
|
@@ -73,6 +74,19 @@ bool ath5k_pci_eeprom_read(struct ath_co
|
||||||
|
{
|
||||||
|
struct ath5k_hw *ah = (struct ath5k_hw *) common->ah;
|
||||||
|
u32 status, timeout;
|
||||||
|
+ struct ath5k_platform_data *pdata = NULL;
|
||||||
|
+
|
||||||
|
+ if (ah->ah_sc->pdev)
|
||||||
|
+ pdata = ah->ah_sc->pdev->dev.platform_data;
|
||||||
|
+
|
||||||
|
+ if (pdata && pdata->eeprom_data && pdata->eeprom_data[0] == AR5K_EEPROM_MAGIC_VALUE)
|
||||||
|
+ {
|
||||||
|
+ if (offset >= ATH5K_PLAT_EEP_MAX_WORDS)
|
||||||
|
+ return -EIO;
|
||||||
|
+
|
||||||
|
+ *data = pdata->eeprom_data[offset];
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize EEPROM access
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/drivers/net/wireless/ath/ath9k/debug.c
|
--- a/drivers/net/wireless/ath/ath9k/debug.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/debug.c
|
+++ b/drivers/net/wireless/ath/ath9k/debug.c
|
||||||
@@ -873,6 +873,53 @@ static const struct file_operations fops
|
@@ -871,6 +871,53 @@ static const struct file_operations fops
|
||||||
.llseek = default_llseek,
|
.llseek = default_llseek,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -54,7 +54,7 @@
|
|||||||
int ath9k_init_debug(struct ath_hw *ah)
|
int ath9k_init_debug(struct ath_hw *ah)
|
||||||
{
|
{
|
||||||
struct ath_common *common = ath9k_hw_common(ah);
|
struct ath_common *common = ath9k_hw_common(ah);
|
||||||
@@ -938,6 +985,10 @@ int ath9k_init_debug(struct ath_hw *ah)
|
@@ -933,6 +980,10 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||||
debugfs_create_u32("gpio_val", S_IRUSR | S_IWUSR,
|
debugfs_create_u32("gpio_val", S_IRUSR | S_IWUSR,
|
||||||
sc->debug.debugfs_phy, &sc->sc_ah->gpio_val);
|
sc->debug.debugfs_phy, &sc->sc_ah->gpio_val);
|
||||||
|
|
||||||
|
@ -149,7 +149,7 @@
|
|||||||
-
|
-
|
||||||
- ret = led_classdev_register(wiphy_dev(sc->hw->wiphy), &led->led_cdev);
|
- ret = led_classdev_register(wiphy_dev(sc->hw->wiphy), &led->led_cdev);
|
||||||
- if (ret)
|
- if (ret)
|
||||||
- ath_print(ath9k_hw_common(sc->sc_ah), ATH_DBG_FATAL,
|
- ath_err(ath9k_hw_common(sc->sc_ah),
|
||||||
- "Failed to register led:%s", led->name);
|
- "Failed to register led:%s", led->name);
|
||||||
- else
|
- else
|
||||||
- led->registered = 1;
|
- led->registered = 1;
|
||||||
@ -253,7 +253,7 @@
|
|||||||
/* Rfkill */
|
/* Rfkill */
|
||||||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
--- a/drivers/net/wireless/ath/ath9k/main.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
||||||
@@ -1278,9 +1278,6 @@ static void ath9k_stop(struct ieee80211_
|
@@ -1275,9 +1275,6 @@ static void ath9k_stop(struct ieee80211_
|
||||||
|
|
||||||
aphy->state = ATH_WIPHY_INACTIVE;
|
aphy->state = ATH_WIPHY_INACTIVE;
|
||||||
|
|
||||||
@ -265,10 +265,11 @@
|
|||||||
cancel_work_sync(&sc->hw_check_work);
|
cancel_work_sync(&sc->hw_check_work);
|
||||||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||||
@@ -139,6 +139,20 @@ static struct ieee80211_rate ath9k_legac
|
@@ -139,6 +139,21 @@ static struct ieee80211_rate ath9k_legac
|
||||||
RATE(540, 0x0c, 0),
|
RATE(540, 0x0c, 0),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
+#ifdef CONFIG_MAC80211_LEDS
|
||||||
+static const struct ieee80211_tpt_blink ath9k_tpt_blink[] = {
|
+static const struct ieee80211_tpt_blink ath9k_tpt_blink[] = {
|
||||||
+ { .throughput = 0 * 1024, .blink_time = 334 },
|
+ { .throughput = 0 * 1024, .blink_time = 334 },
|
||||||
+ { .throughput = 1 * 1024, .blink_time = 260 },
|
+ { .throughput = 1 * 1024, .blink_time = 260 },
|
||||||
@ -281,12 +282,12 @@
|
|||||||
+ { .throughput = 200 * 1024, .blink_time = 80 },
|
+ { .throughput = 200 * 1024, .blink_time = 80 },
|
||||||
+ { .throughput = 300 * 1024, .blink_time = 50 },
|
+ { .throughput = 300 * 1024, .blink_time = 50 },
|
||||||
+};
|
+};
|
||||||
+
|
+#endif
|
||||||
+
|
+
|
||||||
static void ath9k_deinit_softc(struct ath_softc *sc);
|
static void ath9k_deinit_softc(struct ath_softc *sc);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -750,6 +764,12 @@ int ath9k_init_device(u16 devid, struct
|
@@ -742,6 +757,12 @@ int ath9k_init_device(u16 devid, struct
|
||||||
|
|
||||||
ath9k_init_txpower_limits(sc);
|
ath9k_init_txpower_limits(sc);
|
||||||
|
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
--- a/net/mac80211/ieee80211_i.h
|
|
||||||
+++ b/net/mac80211/ieee80211_i.h
|
|
||||||
@@ -642,6 +642,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];
|
|
||||||
@@ -652,6 +653,7 @@ struct tpt_led_trigger {
|
|
||||||
unsigned long prev_traffic;
|
|
||||||
unsigned long tx_bytes, rx_bytes;
|
|
||||||
};
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* mac80211 scan flags - currently active scan mode
|
|
@ -1,74 +0,0 @@
|
|||||||
--- a/drivers/net/wireless/ath/ath9k/xmit.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
|
|
||||||
@@ -1172,7 +1172,7 @@ void ath_draintxq(struct ath_softc *sc,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
-void ath_drain_all_txq(struct ath_softc *sc, bool retry_tx)
|
|
||||||
+bool ath_drain_all_txq(struct ath_softc *sc, bool retry_tx)
|
|
||||||
{
|
|
||||||
struct ath_hw *ah = sc->sc_ah;
|
|
||||||
struct ath_common *common = ath9k_hw_common(sc->sc_ah);
|
|
||||||
@@ -1180,7 +1180,7 @@ void ath_drain_all_txq(struct ath_softc
|
|
||||||
int i, npend = 0;
|
|
||||||
|
|
||||||
if (sc->sc_flags & SC_OP_INVALID)
|
|
||||||
- return;
|
|
||||||
+ return true;
|
|
||||||
|
|
||||||
/* Stop beacon queue */
|
|
||||||
ath9k_hw_stoptxdma(sc->sc_ah, sc->beacon.beaconq);
|
|
||||||
@@ -1194,23 +1194,15 @@ void ath_drain_all_txq(struct ath_softc
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (npend) {
|
|
||||||
- int r;
|
|
||||||
-
|
|
||||||
- ath_print(common, ATH_DBG_FATAL,
|
|
||||||
- "Failed to stop TX DMA. Resetting hardware!\n");
|
|
||||||
-
|
|
||||||
- r = ath9k_hw_reset(ah, sc->sc_ah->curchan, ah->caldata, false);
|
|
||||||
- if (r)
|
|
||||||
- ath_print(common, ATH_DBG_FATAL,
|
|
||||||
- "Unable to reset hardware; reset status %d\n",
|
|
||||||
- r);
|
|
||||||
- }
|
|
||||||
+ if (npend)
|
|
||||||
+ ath_print(common, ATH_DBG_FATAL, "Failed to stop TX DMA!\n");
|
|
||||||
|
|
||||||
for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
|
|
||||||
if (ATH_TXQ_SETUP(sc, i))
|
|
||||||
ath_draintxq(sc, &sc->tx.txq[i], retry_tx);
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ return !npend;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ath_tx_cleanupq(struct ath_softc *sc, struct ath_txq *txq)
|
|
||||||
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
|
|
||||||
@@ -311,7 +311,7 @@ void ath_rx_cleanup(struct ath_softc *sc
|
|
||||||
int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp);
|
|
||||||
struct ath_txq *ath_txq_setup(struct ath_softc *sc, int qtype, int subtype);
|
|
||||||
void ath_tx_cleanupq(struct ath_softc *sc, struct ath_txq *txq);
|
|
||||||
-void ath_drain_all_txq(struct ath_softc *sc, bool retry_tx);
|
|
||||||
+bool ath_drain_all_txq(struct ath_softc *sc, bool retry_tx);
|
|
||||||
void ath_draintxq(struct ath_softc *sc,
|
|
||||||
struct ath_txq *txq, bool retry_tx);
|
|
||||||
void ath_tx_node_init(struct ath_softc *sc, struct ath_node *an);
|
|
||||||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
|
||||||
@@ -246,9 +246,10 @@ int ath_set_channel(struct ath_softc *sc
|
|
||||||
* the relevant bits of the h/w.
|
|
||||||
*/
|
|
||||||
ath9k_hw_disable_interrupts(ah);
|
|
||||||
- ath_drain_all_txq(sc, false);
|
|
||||||
+ stopped = ath_drain_all_txq(sc, false);
|
|
||||||
|
|
||||||
- stopped = ath_stoprecv(sc);
|
|
||||||
+ if (!ath_stoprecv(sc))
|
|
||||||
+ stopped = false;
|
|
||||||
|
|
||||||
/* XXX: do not flush receive queue here. We don't want
|
|
||||||
* to flush data frames already in queue because of
|
|
@ -22,7 +22,7 @@
|
|||||||
static int modparam_bad_frames_preempt;
|
static int modparam_bad_frames_preempt;
|
||||||
module_param_named(bad_frames_preempt, modparam_bad_frames_preempt, int, 0444);
|
module_param_named(bad_frames_preempt, modparam_bad_frames_preempt, int, 0444);
|
||||||
MODULE_PARM_DESC(bad_frames_preempt,
|
MODULE_PARM_DESC(bad_frames_preempt,
|
||||||
@@ -2534,10 +2539,10 @@ static int b43_gpio_init(struct b43_wlde
|
@@ -2540,10 +2545,10 @@ static int b43_gpio_init(struct b43_wlde
|
||||||
& ~B43_MACCTL_GPOUTSMSK);
|
& ~B43_MACCTL_GPOUTSMSK);
|
||||||
|
|
||||||
b43_write16(dev, B43_MMIO_GPIO_MASK, b43_read16(dev, B43_MMIO_GPIO_MASK)
|
b43_write16(dev, B43_MMIO_GPIO_MASK, b43_read16(dev, B43_MMIO_GPIO_MASK)
|
||||||
@ -35,7 +35,7 @@
|
|||||||
if (dev->dev->bus->chip_id == 0x4301) {
|
if (dev->dev->bus->chip_id == 0x4301) {
|
||||||
mask |= 0x0060;
|
mask |= 0x0060;
|
||||||
set |= 0x0060;
|
set |= 0x0060;
|
||||||
@@ -5094,10 +5099,10 @@ static void b43_print_driverinfo(void)
|
@@ -5100,10 +5105,10 @@ static void b43_print_driverinfo(void)
|
||||||
feat_sdio = "S";
|
feat_sdio = "S";
|
||||||
#endif
|
#endif
|
||||||
printk(KERN_INFO "Broadcom 43xx driver loaded "
|
printk(KERN_INFO "Broadcom 43xx driver loaded "
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
b43-$(CONFIG_B43_PCMCIA) += pcmcia.o
|
b43-$(CONFIG_B43_PCMCIA) += pcmcia.o
|
||||||
--- a/drivers/net/wireless/b43/main.c
|
--- a/drivers/net/wireless/b43/main.c
|
||||||
+++ b/drivers/net/wireless/b43/main.c
|
+++ b/drivers/net/wireless/b43/main.c
|
||||||
@@ -1810,9 +1810,11 @@ static void b43_do_interrupt_thread(stru
|
@@ -1816,9 +1816,11 @@ static void b43_do_interrupt_thread(stru
|
||||||
dma_reason[4], dma_reason[5]);
|
dma_reason[4], dma_reason[5]);
|
||||||
b43err(dev->wl, "This device does not support DMA "
|
b43err(dev->wl, "This device does not support DMA "
|
||||||
"on your system. It will now be switched to PIO.\n");
|
"on your system. It will now be switched to PIO.\n");
|
||||||
|
Loading…
Reference in New Issue
Block a user