mac80211: update to wireless-testing 2010-04-09, add work-in-progress ar9300 patches
SVN-Revision: 20777
This commit is contained in:
parent
8f25fb6086
commit
f98e55faf0
27 changed files with 38248 additions and 137 deletions
|
@ -10,12 +10,12 @@ include $(INCLUDE_DIR)/kernel.mk
|
|||
|
||||
PKG_NAME:=mac80211
|
||||
|
||||
PKG_VERSION:=2010-03-24
|
||||
PKG_RELEASE:=6
|
||||
PKG_VERSION:=2010-04-09
|
||||
PKG_RELEASE:=1
|
||||
PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
|
||||
# http://www.orbit-lab.org/kernel/compat-wireless-2.6/2010/11 \
|
||||
# http://wireless.kernel.org/download/compat-wireless-2.6
|
||||
PKG_MD5SUM:=73357c52b5d6888ea3228b2ca8aa5eca
|
||||
PKG_MD5SUM:=4ae40fcb5552cd8d45e0b4368c548363
|
||||
|
||||
PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2
|
||||
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- a/config.mk
|
||||
+++ b/config.mk
|
||||
@@ -269,8 +269,8 @@ endif
|
||||
@@ -256,8 +256,8 @@ endif
|
||||
|
||||
CONFIG_P54_PCI=m
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
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")
|
||||
@@ -492,8 +492,8 @@ endif
|
||||
@@ -481,8 +481,8 @@ endif
|
||||
# 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
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- a/config.mk
|
||||
+++ b/config.mk
|
||||
@@ -299,10 +299,10 @@ endif
|
||||
@@ -286,10 +286,10 @@ endif
|
||||
CONFIG_MWL8K=m
|
||||
|
||||
# Ethernet drivers go here
|
||||
|
@ -15,7 +15,7 @@
|
|||
|
||||
CONFIG_HERMES=m
|
||||
CONFIG_HERMES_CACHE_FW_ON_INIT=y
|
||||
@@ -355,10 +355,10 @@ CONFIG_USB_NET_COMPAT_RNDIS_HOST=n
|
||||
@@ -342,10 +342,10 @@ CONFIG_USB_NET_COMPAT_RNDIS_HOST=n
|
||||
CONFIG_USB_NET_COMPAT_RNDIS_WLAN=n
|
||||
CONFIG_USB_NET_COMPAT_CDCETHER=n
|
||||
else
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
CONFIG_SSB=m
|
||||
else
|
||||
include $(KLIB_BUILD)/.config
|
||||
@@ -194,7 +194,7 @@ CONFIG_B43=m
|
||||
@@ -181,7 +181,7 @@ CONFIG_B43=m
|
||||
CONFIG_B43_HWRNG=y
|
||||
CONFIG_B43_PCI_AUTOSELECT=y
|
||||
ifneq ($(CONFIG_PCMCIA),)
|
||||
|
@ -18,7 +18,7 @@
|
|||
endif
|
||||
CONFIG_B43_LEDS=y
|
||||
CONFIG_B43_PHY_LP=y
|
||||
@@ -246,7 +246,7 @@ CONFIG_SSB_BLOCKIO=y
|
||||
@@ -233,7 +233,7 @@ CONFIG_SSB_BLOCKIO=y
|
||||
CONFIG_SSB_PCIHOST=y
|
||||
CONFIG_SSB_B43_PCI_BRIDGE=y
|
||||
ifneq ($(CONFIG_PCMCIA),)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- a/config.mk
|
||||
+++ b/config.mk
|
||||
@@ -407,8 +407,8 @@ endif # end of SPI driver list
|
||||
@@ -396,8 +396,8 @@ endif # end of SPI driver list
|
||||
|
||||
ifneq ($(CONFIG_MMC),)
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- a/config.mk
|
||||
+++ b/config.mk
|
||||
@@ -198,7 +198,7 @@ ifneq ($(CONFIG_PCMCIA),)
|
||||
@@ -185,7 +185,7 @@ ifneq ($(CONFIG_PCMCIA),)
|
||||
endif
|
||||
CONFIG_B43_LEDS=y
|
||||
CONFIG_B43_PHY_LP=y
|
||||
|
|
|
@ -1,33 +0,0 @@
|
|||
commit b7d48ccc687c44213121b1b565dccdc4488f5d9a
|
||||
Author: Pavel Roskin <proski@gnu.org>
|
||||
Date: Wed Mar 24 17:23:37 2010 -0400
|
||||
|
||||
compat: add compat-2.6.35.h and IW_HANDLER
|
||||
|
||||
Signed-off-by: Pavel Roskin <proski@gnu.org>
|
||||
|
||||
--- /dev/null
|
||||
+++ b/include/linux/compat-2.6.35.h
|
||||
@@ -0,0 +1,13 @@
|
||||
+#ifndef LINUX_26_35_COMPAT_H
|
||||
+#define LINUX_26_35_COMPAT_H
|
||||
+
|
||||
+#include <linux/version.h>
|
||||
+
|
||||
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35))
|
||||
+
|
||||
+#define IW_HANDLER(id, func) \
|
||||
+ [IW_IOCTL_IDX(id)] = func
|
||||
+
|
||||
+#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35)) */
|
||||
+
|
||||
+#endif /* LINUX_26_35_COMPAT_H */
|
||||
--- a/include/linux/compat-2.6.h
|
||||
+++ b/include/linux/compat-2.6.h
|
||||
@@ -27,5 +27,6 @@
|
||||
#include <linux/compat-2.6.32.h>
|
||||
#include <linux/compat-2.6.33.h>
|
||||
#include <linux/compat-2.6.34.h>
|
||||
+#include <linux/compat-2.6.35.h>
|
||||
|
||||
#endif /* LINUX_26_COMPAT_H */
|
|
@ -1,6 +1,6 @@
|
|||
--- a/config.mk
|
||||
+++ b/config.mk
|
||||
@@ -276,12 +276,12 @@ CONFIG_RTL8180=m
|
||||
@@ -248,12 +248,12 @@ CONFIG_RTL8180=m
|
||||
|
||||
CONFIG_ADM8211=m
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
|||
# CONFIG_RT2800PCI_RT30XX=y
|
||||
# CONFIG_RT2800PCI_RT35XX=y
|
||||
# CONFIG_RT2800PCI_SOC=y
|
||||
@@ -381,7 +381,7 @@ CONFIG_RT2800USB=m
|
||||
@@ -355,7 +355,7 @@ CONFIG_RT2800USB=m
|
||||
# CONFIG_RT2800USB_RT35XX=y
|
||||
# CONFIG_RT2800USB_UNKNOWN=y
|
||||
endif
|
||||
|
|
11
package/mac80211/patches/120-compat_rcu_dereference.patch
Normal file
11
package/mac80211/patches/120-compat_rcu_dereference.patch
Normal file
|
@ -0,0 +1,11 @@
|
|||
--- a/include/linux/compat-2.6.34.h
|
||||
+++ b/include/linux/compat-2.6.34.h
|
||||
@@ -162,6 +162,8 @@ static inline void device_unlock(struct
|
||||
.prod_id_hash = { 0, 0, (vh3), 0 }, }
|
||||
#endif
|
||||
|
||||
+#define rcu_dereference_check(p, c) rcu_dereference(p)
|
||||
+
|
||||
#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,34)) */
|
||||
|
||||
#endif /* LINUX_26_34_COMPAT_H */
|
38068
package/mac80211/patches/300-ar9300_support.patch
Normal file
38068
package/mac80211/patches/300-ar9300_support.patch
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1,45 +0,0 @@
|
|||
From 181ce6f71d907f42ab73376ce154015a835a6d8a Mon Sep 17 00:00:00 2001
|
||||
From: Javier Cardona <javier@cozybit.com>
|
||||
Date: Mon, 29 Mar 2010 11:00:20 -0700
|
||||
Subject: [PATCH] mac80211: Handle mesh action frames in ieee80211_rx_h_action
|
||||
|
||||
This fixes the problem introduced in commit
|
||||
8404080568613d93ad7cf0a16dfb68 which broke mesh peer link establishment.
|
||||
|
||||
changes:
|
||||
v2 Added missing break (Johannes)
|
||||
v3 Broke original patch into two (Johannes)
|
||||
|
||||
Signed-off-by: Javier Cardona <javier@cozybit.com>
|
||||
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
---
|
||||
net/mac80211/mesh.c | 3 ---
|
||||
net/mac80211/rx.c | 5 +++++
|
||||
2 files changed, 5 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/net/mac80211/mesh.c
|
||||
+++ b/net/mac80211/mesh.c
|
||||
@@ -749,9 +749,6 @@ ieee80211_mesh_rx_mgmt(struct ieee80211_
|
||||
|
||||
switch (fc & IEEE80211_FCTL_STYPE) {
|
||||
case IEEE80211_STYPE_ACTION:
|
||||
- if (skb->len < IEEE80211_MIN_ACTION_SIZE)
|
||||
- return RX_DROP_MONITOR;
|
||||
- /* fall through */
|
||||
case IEEE80211_STYPE_PROBE_RESP:
|
||||
case IEEE80211_STYPE_BEACON:
|
||||
skb_queue_tail(&ifmsh->skb_queue, skb);
|
||||
--- a/net/mac80211/rx.c
|
||||
+++ b/net/mac80211/rx.c
|
||||
@@ -1964,6 +1964,11 @@ ieee80211_rx_h_action(struct ieee80211_r
|
||||
goto handled;
|
||||
}
|
||||
break;
|
||||
+ case MESH_PLINK_CATEGORY:
|
||||
+ case MESH_PATH_SEL_CATEGORY:
|
||||
+ if (ieee80211_vif_is_mesh(&sdata->vif))
|
||||
+ return ieee80211_mesh_rx_mgmt(sdata, rx->skb);
|
||||
+ break;
|
||||
}
|
||||
|
||||
/*
|
|
@ -1,14 +1,14 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||
@@ -15,6 +15,7 @@
|
||||
@@ -14,6 +14,7 @@
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <linux/io.h>
|
||||
+#include <linux/etherdevice.h>
|
||||
#include <asm/unaligned.h>
|
||||
|
||||
#include "hw.h"
|
||||
@@ -441,8 +442,16 @@ static int ath9k_hw_init_macaddr(struct
|
||||
@@ -434,8 +435,16 @@ static int ath9k_hw_init_macaddr(struct
|
||||
common->macaddr[2 * i] = eeval >> 8;
|
||||
common->macaddr[2 * i + 1] = eeval & 0xff;
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#include "regd_common.h"
|
||||
|
||||
/*
|
||||
@@ -588,3 +591,5 @@ u32 ath_regd_get_band_ctl(struct ath_reg
|
||||
@@ -589,3 +592,5 @@ u32 ath_regd_get_band_ctl(struct ath_reg
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(ath_regd_get_band_ctl);
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#include "ath9k.h"
|
||||
|
||||
static DEFINE_PCI_DEVICE_TABLE(ath_pci_id_table) = {
|
||||
@@ -52,21 +53,36 @@ static void ath_pci_read_cachesize(struc
|
||||
@@ -53,21 +54,36 @@ static void ath_pci_read_cachesize(struc
|
||||
|
||||
static bool ath_pci_eeprom_read(struct ath_common *common, u32 off, u16 *data)
|
||||
{
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||
@@ -385,11 +385,8 @@ static void ath9k_hw_init_defaults(struc
|
||||
@@ -405,11 +405,8 @@ static void ath9k_hw_init_defaults(struc
|
||||
ah->hw_version.magic = AR5416_MAGIC;
|
||||
ah->hw_version.subvendorid = 0;
|
||||
|
||||
|
@ -24,7 +24,7 @@
|
|||
|
||||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
@@ -531,6 +531,7 @@ static int ath9k_init_softc(u16 devid, s
|
||||
@@ -540,6 +540,7 @@ static int ath9k_init_softc(u16 devid, s
|
||||
{
|
||||
struct ath_hw *ah = NULL;
|
||||
struct ath_common *common;
|
||||
|
@ -32,7 +32,7 @@
|
|||
int ret = 0, i;
|
||||
int csz = 0;
|
||||
|
||||
@@ -542,6 +543,10 @@ static int ath9k_init_softc(u16 devid, s
|
||||
@@ -551,6 +552,10 @@ static int ath9k_init_softc(u16 devid, s
|
||||
ah->hw_version.subsysid = subsysid;
|
||||
sc->sc_ah = ah;
|
||||
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||
@@ -16,8 +16,10 @@
|
||||
@@ -15,8 +15,10 @@
|
||||
*/
|
||||
|
||||
#include <linux/io.h>
|
||||
#include <linux/etherdevice.h>
|
||||
+#include <linux/ath9k_platform.h>
|
||||
#include <asm/unaligned.h>
|
||||
|
||||
+#include "ath9k.h"
|
||||
#include "hw.h"
|
||||
#include "hw-ops.h"
|
||||
#include "rc.h"
|
||||
#include "initvals.h"
|
||||
@@ -428,17 +430,23 @@ static int ath9k_hw_rf_claim(struct ath_
|
||||
@@ -420,18 +422,23 @@ static void ath9k_hw_init_defaults(struc
|
||||
static int ath9k_hw_init_macaddr(struct ath_hw *ah)
|
||||
{
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
|
@ -20,10 +20,11 @@
|
|||
u32 sum;
|
||||
int i;
|
||||
u16 eeval;
|
||||
u32 EEP_MAC[] = { EEP_MAC_LSW, EEP_MAC_MID, EEP_MAC_MSW };
|
||||
|
||||
sum = 0;
|
||||
- for (i = 0; i < 3; i++) {
|
||||
- eeval = ah->eep_ops->get_eeprom(ah, AR_EEPROM_MAC(i));
|
||||
- eeval = ah->eep_ops->get_eeprom(ah, EEP_MAC[i]);
|
||||
- sum += eeval;
|
||||
- common->macaddr[2 * i] = eeval >> 8;
|
||||
- common->macaddr[2 * i + 1] = eeval & 0xff;
|
||||
|
@ -32,12 +33,11 @@
|
|||
+ memcpy(common->macaddr, pdata->macaddr, ETH_ALEN);
|
||||
+ else
|
||||
+ for (i = 0; i < 3; i++) {
|
||||
+ eeval = ah->eep_ops->get_eeprom(ah, AR_EEPROM_MAC(i));
|
||||
+ eeval = ah->eep_ops->get_eeprom(ah, EEP_MAC[i]);
|
||||
+ sum += eeval;
|
||||
+ common->macaddr[2 * i] = eeval >> 8;
|
||||
+ common->macaddr[2 * i + 1] = eeval & 0xff;
|
||||
+ }
|
||||
+
|
||||
if (!is_valid_ether_addr(common->macaddr)) {
|
||||
ath_print(common, ATH_DBG_EEPROM,
|
||||
"eeprom contains invalid mac address: %pM\n",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||
@@ -2097,7 +2097,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
||||
@@ -1306,7 +1306,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
||||
|
||||
if (ah->config.rx_intr_mitigation) {
|
||||
REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_LAST, 500);
|
||||
|
@ -8,4 +8,4 @@
|
|||
+ REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_FIRST, 500);
|
||||
}
|
||||
|
||||
ath9k_hw_init_bb(ah, chan);
|
||||
if (ah->config.tx_intr_mitigation) {
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#include "ath9k.h"
|
||||
|
||||
static char *dev_info = "ath9k";
|
||||
@@ -546,6 +547,8 @@ static int ath9k_init_softc(u16 devid, s
|
||||
@@ -555,6 +556,8 @@ static int ath9k_init_softc(u16 devid, s
|
||||
pdata = (struct ath9k_platform_data *) sc->dev->platform_data;
|
||||
if (!pdata)
|
||||
ah->ah_flags |= AH_USE_EEPROM;
|
||||
|
@ -17,7 +17,7 @@
|
|||
|
||||
common = ath9k_hw_common(ah);
|
||||
common->ops = &ath9k_common_ops;
|
||||
@@ -671,6 +674,24 @@ void ath9k_set_hw_capab(struct ath_softc
|
||||
@@ -677,6 +680,24 @@ void ath9k_set_hw_capab(struct ath_softc
|
||||
SET_IEEE80211_PERM_ADDR(hw, common->macaddr);
|
||||
}
|
||||
|
||||
|
@ -42,7 +42,7 @@
|
|||
int ath9k_init_device(u16 devid, struct ath_softc *sc, u16 subsysid,
|
||||
const struct ath_bus_ops *bus_ops)
|
||||
{
|
||||
@@ -689,6 +710,9 @@ int ath9k_init_device(u16 devid, struct
|
||||
@@ -695,6 +716,9 @@ int ath9k_init_device(u16 devid, struct
|
||||
common = ath9k_hw_common(ah);
|
||||
ath9k_set_hw_capab(sc, hw);
|
||||
|
||||
|
@ -54,15 +54,15 @@
|
|||
ath9k_reg_notifier);
|
||||
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
@@ -511,6 +511,8 @@ struct ath_softc {
|
||||
struct ath_beacon_config cur_beacon_conf;
|
||||
struct delayed_work tx_complete_work;
|
||||
struct ath_btcoex btcoex;
|
||||
+
|
||||
+ unsigned long quirk_wndr3700:1;
|
||||
};
|
||||
@@ -516,6 +516,8 @@ struct ath_softc {
|
||||
|
||||
struct ath_wiphy {
|
||||
int beacon_interval;
|
||||
|
||||
+ bool quirk_wndr3700;
|
||||
+
|
||||
#ifdef CONFIG_ATH9K_DEBUGFS
|
||||
struct ath9k_debug debug;
|
||||
#endif
|
||||
--- a/include/linux/ath9k_platform.h
|
||||
+++ b/include/linux/ath9k_platform.h
|
||||
@@ -24,6 +24,8 @@
|
||||
|
@ -70,7 +70,7 @@
|
|||
u16 eeprom_data[ATH9K_PLAT_EEP_MAX_WORDS];
|
||||
u8 *macaddr;
|
||||
+
|
||||
+ unsigned long quirk_wndr3700:1;
|
||||
+ bool quirk_wndr3700;
|
||||
};
|
||||
|
||||
#endif /* _LINUX_ATH9K_PLATFORM_H */
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
sc->sc_ah->led_pin = ATH_LED_PIN_DEF;
|
||||
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
@@ -379,6 +379,7 @@ void ath9k_btcoex_timer_pause(struct ath
|
||||
@@ -391,6 +391,7 @@ void ath9k_btcoex_timer_pause(struct ath
|
||||
|
||||
#define ATH_LED_PIN_DEF 1
|
||||
#define ATH_LED_PIN_9287 8
|
||||
|
|
|
@ -91,7 +91,7 @@
|
|||
static ssize_t read_file_dma(struct file *file, char __user *user_buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
@@ -719,6 +803,16 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
@@ -724,6 +808,16 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
goto err;
|
||||
#endif
|
||||
|
||||
|
@ -108,7 +108,7 @@
|
|||
sc->debug.debugfs_dma = debugfs_create_file("dma", S_IRUSR,
|
||||
sc->debug.debugfs_phy, sc, &fops_dma);
|
||||
if (!sc->debug.debugfs_dma)
|
||||
@@ -769,6 +863,8 @@ void ath9k_exit_debug(struct ath_hw *ah)
|
||||
@@ -774,6 +868,8 @@ void ath9k_exit_debug(struct ath_hw *ah)
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
struct ath_softc *sc = (struct ath_softc *) common->priv;
|
||||
|
||||
|
@ -119,7 +119,7 @@
|
|||
debugfs_remove(sc->debug.debugfs_wiphy);
|
||||
--- a/drivers/net/wireless/ath/ath9k/debug.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/debug.h
|
||||
@@ -148,6 +148,8 @@ struct ath_stats {
|
||||
@@ -152,6 +152,8 @@ struct ath_stats {
|
||||
};
|
||||
|
||||
struct ath9k_debug {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/debug.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/debug.c
|
||||
@@ -783,6 +783,86 @@ static const struct file_operations fops
|
||||
@@ -788,6 +788,86 @@ static const struct file_operations fops
|
||||
.owner = THIS_MODULE
|
||||
};
|
||||
|
||||
|
@ -87,7 +87,7 @@
|
|||
int ath9k_init_debug(struct ath_hw *ah)
|
||||
{
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
@@ -852,6 +932,17 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
@@ -857,6 +937,17 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
if (!sc->debug.debugfs_recv)
|
||||
goto err;
|
||||
|
||||
|
@ -105,7 +105,7 @@
|
|||
return 0;
|
||||
err:
|
||||
ath9k_exit_debug(ah);
|
||||
@@ -865,6 +956,8 @@ void ath9k_exit_debug(struct ath_hw *ah)
|
||||
@@ -870,6 +961,8 @@ void ath9k_exit_debug(struct ath_hw *ah)
|
||||
|
||||
debugfs_remove(sc->debug.debugfs_tx_chainmask);
|
||||
debugfs_remove(sc->debug.debugfs_rx_chainmask);
|
||||
|
@ -116,7 +116,7 @@
|
|||
debugfs_remove(sc->debug.debugfs_wiphy);
|
||||
--- a/drivers/net/wireless/ath/ath9k/debug.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/debug.h
|
||||
@@ -158,6 +158,9 @@ struct ath9k_debug {
|
||||
@@ -162,6 +162,9 @@ struct ath9k_debug {
|
||||
struct dentry *debugfs_wiphy;
|
||||
struct dentry *debugfs_xmit;
|
||||
struct dentry *debugfs_recv;
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
}
|
||||
--- a/net/wireless/nl80211.c
|
||||
+++ b/net/wireless/nl80211.c
|
||||
@@ -886,6 +886,11 @@ static int nl80211_send_iface(struct sk_
|
||||
@@ -885,6 +885,11 @@ static int nl80211_send_iface(struct sk_
|
||||
NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx);
|
||||
NLA_PUT_STRING(msg, NL80211_ATTR_IFNAME, dev->name);
|
||||
NLA_PUT_U32(msg, NL80211_ATTR_IFTYPE, dev->ieee80211_ptr->iftype);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
@@ -655,7 +655,11 @@ void ath9k_set_hw_capab(struct ath_softc
|
||||
@@ -661,7 +661,11 @@ void ath9k_set_hw_capab(struct ath_softc
|
||||
hw->sta_data_size = sizeof(struct ath_node);
|
||||
hw->vif_data_size = sizeof(struct ath_vif);
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||
@@ -1911,6 +1911,34 @@ static void ath9k_enable_rfkill(struct a
|
||||
REG_SET_BIT(ah, AR_PHY_TEST, RFSILENT_BB);
|
||||
@@ -1134,6 +1134,34 @@ static bool ath9k_hw_channel_change(stru
|
||||
return true;
|
||||
}
|
||||
|
||||
+bool ath9k_hw_check_alive(struct ath_hw *ah)
|
||||
|
@ -37,7 +37,7 @@
|
|||
{
|
||||
--- a/drivers/net/wireless/ath/ath9k/hw.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.h
|
||||
@@ -679,6 +679,7 @@ void ath9k_hw_set11nmac2040(struct ath_h
|
||||
@@ -848,6 +848,7 @@ void ath9k_hw_set11nmac2040(struct ath_h
|
||||
void ath9k_hw_beaconinit(struct ath_hw *ah, u32 next_beacon, u32 beacon_period);
|
||||
void ath9k_hw_set_sta_beacon_timers(struct ath_hw *ah,
|
||||
const struct ath9k_beacon_state *bs);
|
||||
|
@ -47,7 +47,7 @@
|
|||
|
||||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
||||
@@ -405,7 +405,8 @@ void ath9k_tasklet(unsigned long data)
|
||||
@@ -406,7 +406,8 @@ void ath9k_tasklet(unsigned long data)
|
||||
|
||||
ath9k_ps_wakeup(sc);
|
||||
|
||||
|
|
110
package/mac80211/patches/560-ath9k_tx_buf_return_cleanup.patch
Normal file
110
package/mac80211/patches/560-ath9k_tx_buf_return_cleanup.patch
Normal file
|
@ -0,0 +1,110 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/xmit.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
|
||||
@@ -260,19 +260,40 @@ static void ath_tx_set_retry(struct ath_
|
||||
hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_RETRY);
|
||||
}
|
||||
|
||||
-static struct ath_buf* ath_clone_txbuf(struct ath_softc *sc, struct ath_buf *bf)
|
||||
+static struct ath_buf *ath_tx_get_buffer(struct ath_softc *sc)
|
||||
{
|
||||
- struct ath_buf *tbf;
|
||||
+ struct ath_buf *bf = NULL;
|
||||
|
||||
spin_lock_bh(&sc->tx.txbuflock);
|
||||
- if (WARN_ON(list_empty(&sc->tx.txbuf))) {
|
||||
+
|
||||
+ if (unlikely(list_empty(&sc->tx.txbuf))) {
|
||||
spin_unlock_bh(&sc->tx.txbuflock);
|
||||
return NULL;
|
||||
}
|
||||
- tbf = list_first_entry(&sc->tx.txbuf, struct ath_buf, list);
|
||||
- list_del(&tbf->list);
|
||||
+
|
||||
+ bf = list_first_entry(&sc->tx.txbuf, struct ath_buf, list);
|
||||
+ list_del(&bf->list);
|
||||
+
|
||||
spin_unlock_bh(&sc->tx.txbuflock);
|
||||
|
||||
+ return bf;
|
||||
+}
|
||||
+
|
||||
+static void ath_tx_return_buffer(struct ath_softc *sc, struct ath_buf *bf)
|
||||
+{
|
||||
+ spin_lock_bh(&sc->tx.txbuflock);
|
||||
+ list_add_tail(&bf->list, &sc->tx.txbuf);
|
||||
+ spin_unlock_bh(&sc->tx.txbuflock);
|
||||
+}
|
||||
+
|
||||
+static struct ath_buf* ath_clone_txbuf(struct ath_softc *sc, struct ath_buf *bf)
|
||||
+{
|
||||
+ struct ath_buf *tbf;
|
||||
+
|
||||
+ tbf = ath_tx_get_buffer(sc);
|
||||
+ if (WARN_ON(!tbf))
|
||||
+ return NULL;
|
||||
+
|
||||
ATH_TXBUF_RESET(tbf);
|
||||
|
||||
tbf->aphy = bf->aphy;
|
||||
@@ -1083,9 +1104,7 @@ void ath_draintxq(struct ath_softc *sc,
|
||||
list_del(&bf->list);
|
||||
spin_unlock_bh(&txq->axq_lock);
|
||||
|
||||
- spin_lock_bh(&sc->tx.txbuflock);
|
||||
- list_add_tail(&bf->list, &sc->tx.txbuf);
|
||||
- spin_unlock_bh(&sc->tx.txbuflock);
|
||||
+ ath_tx_return_buffer(sc, bf);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -1305,25 +1324,6 @@ static void ath_tx_txqaddbuf(struct ath_
|
||||
txq->axq_depth++;
|
||||
}
|
||||
|
||||
-static struct ath_buf *ath_tx_get_buffer(struct ath_softc *sc)
|
||||
-{
|
||||
- struct ath_buf *bf = NULL;
|
||||
-
|
||||
- spin_lock_bh(&sc->tx.txbuflock);
|
||||
-
|
||||
- if (unlikely(list_empty(&sc->tx.txbuf))) {
|
||||
- spin_unlock_bh(&sc->tx.txbuflock);
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
- bf = list_first_entry(&sc->tx.txbuf, struct ath_buf, list);
|
||||
- list_del(&bf->list);
|
||||
-
|
||||
- spin_unlock_bh(&sc->tx.txbuflock);
|
||||
-
|
||||
- return bf;
|
||||
-}
|
||||
-
|
||||
static void ath_tx_send_ampdu(struct ath_softc *sc, struct ath_atx_tid *tid,
|
||||
struct list_head *bf_head,
|
||||
struct ath_tx_control *txctl)
|
||||
@@ -1805,9 +1805,7 @@ int ath_tx_start(struct ieee80211_hw *hw
|
||||
}
|
||||
spin_unlock_bh(&txq->axq_lock);
|
||||
|
||||
- spin_lock_bh(&sc->tx.txbuflock);
|
||||
- list_add_tail(&bf->list, &sc->tx.txbuf);
|
||||
- spin_unlock_bh(&sc->tx.txbuflock);
|
||||
+ ath_tx_return_buffer(sc, bf);
|
||||
|
||||
return r;
|
||||
}
|
||||
@@ -2123,11 +2121,8 @@ static void ath_tx_processq(struct ath_s
|
||||
txq->axq_tx_inprogress = false;
|
||||
spin_unlock_bh(&txq->axq_lock);
|
||||
|
||||
- if (bf_held) {
|
||||
- spin_lock_bh(&sc->tx.txbuflock);
|
||||
- list_move_tail(&bf_held->list, &sc->tx.txbuf);
|
||||
- spin_unlock_bh(&sc->tx.txbuflock);
|
||||
- }
|
||||
+ if (bf_held)
|
||||
+ ath_tx_return_buffer(sc, bf_held);
|
||||
|
||||
if (!bf_isampdu(bf)) {
|
||||
/*
|
|
@ -14,9 +14,9 @@ Signed-off-by: Gertjan van Wingerde <gwingerde@gmail.com>
|
|||
|
||||
--- a/drivers/net/wireless/rt2x00/rt2800pci.c
|
||||
+++ b/drivers/net/wireless/rt2x00/rt2800pci.c
|
||||
@@ -60,6 +60,12 @@ static void rt2800pci_mcu_status(struct
|
||||
unsigned int i;
|
||||
u32 reg;
|
||||
@@ -66,6 +66,12 @@ static void rt2800pci_mcu_status(struct
|
||||
if (rt2x00_is_soc(rt2x00dev))
|
||||
return;
|
||||
|
||||
+ /*
|
||||
+ * SOC devices don't support MCU requests.
|
||||
|
|
Loading…
Reference in a new issue