Skip to content
Snippets Groups Projects
Commit 5df63b7f authored by Matthias Schiffer's avatar Matthias Schiffer
Browse files

Update mac80211 backport

parent 8194bc1d
Branches
Tags
No related merge requests found
...@@ -3881,10 +3881,10 @@ index 7b50154..3f749e9 100644 ...@@ -3881,10 +3881,10 @@ index 7b50154..3f749e9 100644
pm_qos_remove_notifier(PM_QOS_NETWORK_LATENCY, pm_qos_remove_notifier(PM_QOS_NETWORK_LATENCY,
&local->network_latency_notifier); &local->network_latency_notifier);
diff --git a/package/mac80211/patches/300-pending_work.patch b/package/mac80211/patches/300-pending_work.patch diff --git a/package/mac80211/patches/300-pending_work.patch b/package/mac80211/patches/300-pending_work.patch
index a1af6c2..90dd5e7 100644 index a1af6c2..1405cc3 100644
--- a/package/mac80211/patches/300-pending_work.patch --- a/package/mac80211/patches/300-pending_work.patch
+++ b/package/mac80211/patches/300-pending_work.patch +++ b/package/mac80211/patches/300-pending_work.patch
@@ -1,4153 +1,239 @@ @@ -1,4153 +1,378 @@
-commit 93f310a38a1d81a4bc8fcd9bf29628bd721cf2ef -commit 93f310a38a1d81a4bc8fcd9bf29628bd721cf2ef
-Author: Felix Fietkau <nbd@openwrt.org> -Author: Felix Fietkau <nbd@openwrt.org>
-Date: Sun Apr 6 23:35:28 2014 +0200 -Date: Sun Apr 6 23:35:28 2014 +0200
...@@ -3921,23 +3921,37 @@ index a1af6c2..90dd5e7 100644 ...@@ -3921,23 +3921,37 @@ index a1af6c2..90dd5e7 100644
-commit 3a0f984b1cdcd6a9f8c441635ef3b05d58547f4e -commit 3a0f984b1cdcd6a9f8c441635ef3b05d58547f4e
-Author: Felix Fietkau <nbd@openwrt.org> -Author: Felix Fietkau <nbd@openwrt.org>
-Date: Tue Mar 11 14:03:32 2014 +0100 -Date: Tue Mar 11 14:03:32 2014 +0100
- +commit 8c7ae357cc5b6bd037ad2d666e9f3789cf882925
+Author: Rajkumar Manoharan <rmanohar@qti.qualcomm.com>
+Date: Wed Apr 23 15:07:57 2014 +0530
- ath9k_hw: set ANI firstep as absolute values instead of relative - ath9k_hw: set ANI firstep as absolute values instead of relative
- -
- On older chips, the INI value differ in similar ways as cycpwr_thr1, so - On older chips, the INI value differ in similar ways as cycpwr_thr1, so
- convert it to absolute values as well. - convert it to absolute values as well.
- + ath9k: fix race in setting ATH_OP_INVALID
- Since the ANI algorithm is different here compared to the old - Since the ANI algorithm is different here compared to the old
- implementation (fewer steps, controlled at a different point in time), - implementation (fewer steps, controlled at a different point in time),
- it makes sense to use values similar to what would be applied for newer - it makes sense to use values similar to what would be applied for newer
- chips, just without relying on INI defaults. - chips, just without relying on INI defaults.
- + The commit "ath9k: move sc_flags to ath_common" moved setting
+ ATH_OP_INVALID flag below ieee80211_register_hw. This is causing
+ the flag never being cleared randomly as the drv_start is called
+ prior to setting flag. Fix this by setting the flag prior to
+ register_hw.
- Signed-off-by: Felix Fietkau <nbd@openwrt.org> - Signed-off-by: Felix Fietkau <nbd@openwrt.org>
- + Signed-off-by: Rajkumar Manoharan <rmanohar@qti.qualcomm.com>
+ Signed-off-by: John W. Linville <linville@tuxdriver.com>
-commit 91d70d40400c569b49605b78fd7c43e9405694f4 -commit 91d70d40400c569b49605b78fd7c43e9405694f4
-Author: Felix Fietkau <nbd@openwrt.org> -Author: Felix Fietkau <nbd@openwrt.org>
-Date: Tue Mar 11 14:00:37 2014 +0100 -Date: Tue Mar 11 14:00:37 2014 +0100
- +commit c82552c5b0cb1735dbcbad78b1ffc6d3c212dc56
+Author: Tim Harvey <tharvey@gateworks.com>
+Date: Mon Apr 21 16:14:57 2014 -0700
- ath9k_hw: set ANI cycpwr_thr1 as absolute values instead of relative - ath9k_hw: set ANI cycpwr_thr1 as absolute values instead of relative
- -
- The table was copied from the ANI implementation of AR9300. It assumes - The table was copied from the ANI implementation of AR9300. It assumes
...@@ -3946,11 +3960,14 @@ index a1af6c2..90dd5e7 100644 ...@@ -3946,11 +3960,14 @@ index a1af6c2..90dd5e7 100644
- -
- On older chips, the differences are bigger and especially AR5008/AR9001 - On older chips, the differences are bigger and especially AR5008/AR9001
- are configured to much more sensitive values than what is useful. - are configured to much more sensitive values than what is useful.
- + ath9k: add a recv budget
- Improve ANI behavior by reverting to the absolute values used in the - Improve ANI behavior by reverting to the absolute values used in the
- previous implementation (expressed as a simple formula instead of the - previous implementation (expressed as a simple formula instead of the
- old table). - old table).
- + Implement a recv budget so that in cases of high traffic we still allow other
+ taskets to get processed.
- Signed-off-by: Felix Fietkau <nbd@openwrt.org> - Signed-off-by: Felix Fietkau <nbd@openwrt.org>
- -
-commit c977493766310a825f406836636ffd66e1447783 -commit c977493766310a825f406836636ffd66e1447783
...@@ -3958,7 +3975,11 @@ index a1af6c2..90dd5e7 100644 ...@@ -3958,7 +3975,11 @@ index a1af6c2..90dd5e7 100644
-Date: Mon Mar 10 19:52:56 2014 +0100 -Date: Mon Mar 10 19:52:56 2014 +0100
- -
- ath9k_hw: remove ANI function restrictions for AP mode - ath9k_hw: remove ANI function restrictions for AP mode
- + Without this, we can encounter a host of issues during high wireless traffic
+ reception depending on system load including rcu stall's detected (ARM),
+ soft lockups, failure to service critical tasks such as watchdog resets,
+ and triggering of the tx stuck tasklet.
- The primary purpose of this piece of code was to selectively disable - The primary purpose of this piece of code was to selectively disable
- OFDM weak signal detection. The checks for this are elsewhere, and an - OFDM weak signal detection. The checks for this are elsewhere, and an
- earlier commit relaxed the restrictions for older chips, which are more - earlier commit relaxed the restrictions for older chips, which are more
...@@ -3971,28 +3992,46 @@ index a1af6c2..90dd5e7 100644 ...@@ -3971,28 +3992,46 @@ index a1af6c2..90dd5e7 100644
-Date: Sun Mar 9 11:25:43 2014 +0100 -Date: Sun Mar 9 11:25:43 2014 +0100
- -
- ath9k: clean up and enhance ANI debugfs file - ath9k: clean up and enhance ANI debugfs file
- + The same thing was proposed previously by Ben:
+ http://www.spinics.net/lists/linux-wireless/msg112891.html
- Unify scnprintf calls and include the current OFDM/CCK immunity level. - Unify scnprintf calls and include the current OFDM/CCK immunity level.
- + The only difference here is that I make sure only processed packets are counted
+ in the budget by checking at the end of the rx loop.
- Signed-off-by: Felix Fietkau <nbd@openwrt.org> - Signed-off-by: Felix Fietkau <nbd@openwrt.org>
- + Signed-off-by: Tim Harvey <tharvey@gateworks.com>
+ Acked-by: Felix Fietkau <nbd@openwrt.org>
+ Signed-off-by: John W. Linville <linville@tuxdriver.com>
-commit 22e298b5a3a8a49e33805d4e351965123dede35b -commit 22e298b5a3a8a49e33805d4e351965123dede35b
-Author: Felix Fietkau <nbd@openwrt.org> -Author: Felix Fietkau <nbd@openwrt.org>
-Date: Sun Mar 9 10:58:47 2014 +0100 -Date: Sun Mar 9 10:58:47 2014 +0100
- +commit 3a758134e66ca74a9df792616b5288b2fa2cfd7f
+Author: Tim Harvey <tharvey@gateworks.com>
+Date: Mon Apr 21 16:14:56 2014 -0700
- ath9k: fix ready time of the multicast buffer queue - ath9k: fix ready time of the multicast buffer queue
- + ath9k: fix possible hang on flush
- qi->tqi_readyTime is written directly to registers that expect - qi->tqi_readyTime is written directly to registers that expect
- microseconds as unit instead of TU. - microseconds as unit instead of TU.
- When setting the CABQ ready time, cur_conf->beacon_interval is in TU, so - When setting the CABQ ready time, cur_conf->beacon_interval is in TU, so
- convert it to microseconds before passing it to ath9k_hw. - convert it to microseconds before passing it to ath9k_hw.
- + If a flush is requested, make sure to clear the descriptor once we've
+ processed it.
- This should hopefully fix some Tx DMA issues with buffered multicast - This should hopefully fix some Tx DMA issues with buffered multicast
- frames in AP mode. - frames in AP mode.
- + This resolves a hang that will occur if all RX descriptors are full when a
+ flush is requested.
- Cc: stable@vger.kernel.org - Cc: stable@vger.kernel.org
- Signed-off-by: Felix Fietkau <nbd@openwrt.org> - Signed-off-by: Felix Fietkau <nbd@openwrt.org>
- + Signed-off-by: Tim Harvey <tharvey@gateworks.com>
+ Acked-by: Felix Fietkau <nbd@openwrt.org>
+ Signed-off-by: John W. Linville <linville@tuxdriver.com>
-commit fcb064fdd5a27bec8d24099bc0172468f34c97cb -commit fcb064fdd5a27bec8d24099bc0172468f34c97cb
+commit eefb1d6adc4c60d219182b8917e4567484ce07fc +commit eefb1d6adc4c60d219182b8917e4567484ce07fc
Author: Felix Fietkau <nbd@openwrt.org> Author: Felix Fietkau <nbd@openwrt.org>
...@@ -4595,7 +4634,7 @@ index a1af6c2..90dd5e7 100644 ...@@ -4595,7 +4634,7 @@ index a1af6c2..90dd5e7 100644
-commit e138e0ef9560c46ce93dbb22a728a57888e94d1c -commit e138e0ef9560c46ce93dbb22a728a57888e94d1c
-Author: Sujith Manoharan <c_manoha@qca.qualcomm.com> -Author: Sujith Manoharan <c_manoha@qca.qualcomm.com>
-Date: Mon Feb 3 13:31:37 2014 +0530 -Date: Mon Feb 3 13:31:37 2014 +0530
-
- ath9k: Fix TX power calculation - ath9k: Fix TX power calculation
- -
- The commit, "ath9k_hw: Fix incorrect Tx control power in AR9003 template" - The commit, "ath9k_hw: Fix incorrect Tx control power in AR9003 template"
...@@ -4868,7 +4907,7 @@ index a1af6c2..90dd5e7 100644 ...@@ -4868,7 +4907,7 @@ index a1af6c2..90dd5e7 100644
-commit dfb6889a75c601aedb7450b7e606668e77da6679 -commit dfb6889a75c601aedb7450b7e606668e77da6679
-Author: Johannes Berg <johannes.berg@intel.com> -Author: Johannes Berg <johannes.berg@intel.com>
-Date: Wed Jan 22 11:14:19 2014 +0200 -Date: Wed Jan 22 11:14:19 2014 +0200
-
- cfg80211: send scan results from work queue - cfg80211: send scan results from work queue
- -
- Due to the previous commit, when a scan finishes, it is in theory - Due to the previous commit, when a scan finishes, it is in theory
...@@ -6646,17 +6685,34 @@ index a1af6c2..90dd5e7 100644 ...@@ -6646,17 +6685,34 @@ index a1af6c2..90dd5e7 100644
-+ GFP_KERNEL); -+ GFP_KERNEL);
- -
- kfree(info); - kfree(info);
- +--- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
++++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
+@@ -1004,11 +1004,9 @@ static bool ar5008_hw_ani_control_new(st
+ case ATH9K_ANI_FIRSTEP_LEVEL:{
+ u32 level = param;
---- a/net/wireless/ibss.c ---- a/net/wireless/ibss.c
-+++ b/net/wireless/ibss.c -+++ b/net/wireless/ibss.c
-@@ -14,7 +14,8 @@ -@@ -14,7 +14,8 @@
- #include "rdev-ops.h" - #include "rdev-ops.h"
- +- value = level * 2;
- ++ value = level;
+ REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
+ AR_PHY_FIND_SIG_FIRSTEP, value);
+- REG_RMW_FIELD(ah, AR_PHY_FIND_SIG_LOW,
+- AR_PHY_FIND_SIG_FIRSTEP_LOW, value);
+ if (level != aniState->firstepLevel) {
+ ath_dbg(common, ANI,
+--- a/drivers/net/wireless/ath/ath9k/beacon.c
++++ b/drivers/net/wireless/ath/ath9k/beacon.c
+@@ -312,10 +312,9 @@ static void ath9k_csa_update_vif(void *d
--void __cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid) --void __cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid)
-+void __cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid, -+void __cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid,
-+ struct ieee80211_channel *channel) -+ struct ieee80211_channel *channel)
- { + void ath9k_csa_update(struct ath_softc *sc)
{
- struct wireless_dev *wdev = dev->ieee80211_ptr; - struct wireless_dev *wdev = dev->ieee80211_ptr;
- struct cfg80211_bss *bss; - struct cfg80211_bss *bss;
-@@ -28,8 +29,7 @@ void __cfg80211_ibss_joined(struct net_d -@@ -28,8 +29,7 @@ void __cfg80211_ibss_joined(struct net_d
...@@ -6676,7 +6732,29 @@ index a1af6c2..90dd5e7 100644 ...@@ -6676,7 +6732,29 @@ index a1af6c2..90dd5e7 100644
--void cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid, gfp_t gfp) --void cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid, gfp_t gfp)
-+void cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid, -+void cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid,
-+ struct ieee80211_channel *channel, gfp_t gfp) -+ struct ieee80211_channel *channel, gfp_t gfp)
- { +- ieee80211_iterate_active_interfaces(sc->hw,
+- IEEE80211_IFACE_ITER_NORMAL,
+- ath9k_csa_update_vif,
+- sc);
++ ieee80211_iterate_active_interfaces_atomic(sc->hw,
++ IEEE80211_IFACE_ITER_NORMAL,
++ ath9k_csa_update_vif, sc);
+ }
+
+ void ath9k_beacon_tasklet(unsigned long data)
+--- a/net/mac80211/main.c
++++ b/net/mac80211/main.c
+@@ -152,6 +152,8 @@ static u32 ieee80211_hw_conf_chan(struct
+ list_for_each_entry_rcu(sdata, &local->interfaces, list) {
+ if (!rcu_access_pointer(sdata->vif.chanctx_conf))
+ continue;
++ if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
++ continue;
+ power = min(power, sdata->vif.bss_conf.txpower);
+ }
+ rcu_read_unlock();
+@@ -203,7 +205,7 @@ void ieee80211_bss_info_change_notify(st
{
- struct wireless_dev *wdev = dev->ieee80211_ptr; - struct wireless_dev *wdev = dev->ieee80211_ptr;
- struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy);
- struct cfg80211_event *ev; - struct cfg80211_event *ev;
...@@ -6687,11 +6765,14 @@ index a1af6c2..90dd5e7 100644 ...@@ -6687,11 +6765,14 @@ index a1af6c2..90dd5e7 100644
-+ -+
-+ if (WARN_ON(!channel)) -+ if (WARN_ON(!channel))
-+ return; -+ return;
- + struct ieee80211_local *local = sdata->local;
- ev = kzalloc(sizeof(*ev), gfp); - ev = kzalloc(sizeof(*ev), gfp);
- if (!ev) - if (!ev)
- return; +- if (!changed)
- ++ if (!changed || sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
return;
- ev->type = EVENT_IBSS_JOINED; - ev->type = EVENT_IBSS_JOINED;
-- memcpy(ev->cr.bssid, bssid, ETH_ALEN); -- memcpy(ev->cr.bssid, bssid, ETH_ALEN);
-+ memcpy(ev->ij.bssid, bssid, ETH_ALEN); -+ memcpy(ev->ij.bssid, bssid, ETH_ALEN);
...@@ -6720,12 +6801,7 @@ index a1af6c2..90dd5e7 100644 ...@@ -6720,12 +6801,7 @@ index a1af6c2..90dd5e7 100644
-@@ -2278,11 +2278,6 @@ DECLARE_EVENT_CLASS(cfg80211_rx_evt, -@@ -2278,11 +2278,6 @@ DECLARE_EVENT_CLASS(cfg80211_rx_evt,
- TP_printk(NETDEV_PR_FMT ", " MAC_PR_FMT, NETDEV_PR_ARG, MAC_PR_ARG(addr)) - TP_printk(NETDEV_PR_FMT ", " MAC_PR_FMT, NETDEV_PR_ARG, MAC_PR_ARG(addr))
- ); - );
+--- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c -
++++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
+@@ -1004,11 +1004,9 @@ static bool ar5008_hw_ani_control_new(st
+ case ATH9K_ANI_FIRSTEP_LEVEL:{
+ u32 level = param;
--DEFINE_EVENT(cfg80211_rx_evt, cfg80211_ibss_joined, --DEFINE_EVENT(cfg80211_rx_evt, cfg80211_ibss_joined,
-- TP_PROTO(struct net_device *netdev, const u8 *addr), -- TP_PROTO(struct net_device *netdev, const u8 *addr),
-- TP_ARGS(netdev, addr) -- TP_ARGS(netdev, addr)
...@@ -6737,13 +6813,7 @@ index a1af6c2..90dd5e7 100644 ...@@ -6737,13 +6813,7 @@ index a1af6c2..90dd5e7 100644
-@@ -2293,6 +2288,24 @@ DEFINE_EVENT(cfg80211_rx_evt, cfg80211_r -@@ -2293,6 +2288,24 @@ DEFINE_EVENT(cfg80211_rx_evt, cfg80211_r
- TP_ARGS(netdev, addr) - TP_ARGS(netdev, addr)
- ); - );
+- value = level * 2; -
++ value = level;
+ REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
+ AR_PHY_FIND_SIG_FIRSTEP, value);
+- REG_RMW_FIELD(ah, AR_PHY_FIND_SIG_LOW,
+- AR_PHY_FIND_SIG_FIRSTEP_LOW, value);
-+TRACE_EVENT(cfg80211_ibss_joined, -+TRACE_EVENT(cfg80211_ibss_joined,
-+ TP_PROTO(struct net_device *netdev, const u8 *bssid, -+ TP_PROTO(struct net_device *netdev, const u8 *bssid,
-+ struct ieee80211_channel *channel), -+ struct ieee80211_channel *channel),
...@@ -6784,11 +6854,12 @@ index a1af6c2..90dd5e7 100644 ...@@ -6784,11 +6854,12 @@ index a1af6c2..90dd5e7 100644
-- cfg80211_get_chan_state(wdev_iter, &ch, &chmode); -- cfg80211_get_chan_state(wdev_iter, &ch, &chmode);
-+ cfg80211_get_chan_state(wdev_iter, &ch, &chmode, &radar_detect); -+ cfg80211_get_chan_state(wdev_iter, &ch, &chmode, &radar_detect);
- wdev_unlock(wdev_iter); - wdev_unlock(wdev_iter);
+ if (level != aniState->firstepLevel) { + drv_bss_info_changed(local, sdata, &sdata->vif.bss_conf, changed);
+ ath_dbg(common, ANI, +--- a/drivers/net/wireless/ath/ath9k/ani.c
+--- a/drivers/net/wireless/ath/ath9k/beacon.c ++++ b/drivers/net/wireless/ath/ath9k/ani.c
++++ b/drivers/net/wireless/ath/ath9k/beacon.c +@@ -155,6 +155,9 @@ static void ath9k_hw_set_ofdm_nil(struct
+@@ -312,10 +312,9 @@ static void ath9k_csa_update_vif(void *d + ATH9K_ANI_RSSI_THR_LOW,
+ ATH9K_ANI_RSSI_THR_HIGH);
- switch (chmode) { - switch (chmode) {
---- a/net/wireless/chan.c ---- a/net/wireless/chan.c
...@@ -6800,15 +6871,16 @@ index a1af6c2..90dd5e7 100644 ...@@ -6800,15 +6871,16 @@ index a1af6c2..90dd5e7 100644
-- enum cfg80211_chan_mode *chanmode) -- enum cfg80211_chan_mode *chanmode)
-+ enum cfg80211_chan_mode *chanmode, -+ enum cfg80211_chan_mode *chanmode,
-+ u8 *radar_detect) -+ u8 *radar_detect)
+ void ath9k_csa_update(struct ath_softc *sc) - {
{
- *chan = NULL; - *chan = NULL;
- *chanmode = CHAN_MODE_UNDEFINED; - *chanmode = CHAN_MODE_UNDEFINED;
-@@ -660,6 +661,11 @@ cfg80211_get_chan_state(struct wireless_ -@@ -660,6 +661,11 @@ cfg80211_get_chan_state(struct wireless_
- !wdev->ibss_dfs_possible) - !wdev->ibss_dfs_possible)
- ? CHAN_MODE_SHARED - ? CHAN_MODE_SHARED
- : CHAN_MODE_EXCLUSIVE; - : CHAN_MODE_EXCLUSIVE;
-+ ++ if (AR_SREV_9100(ah) && immunityLevel < ATH9K_ANI_OFDM_DEF_LEVEL)
++ immunityLevel = ATH9K_ANI_OFDM_DEF_LEVEL;
+
-+ /* consider worst-case - IBSS can try to return to the -+ /* consider worst-case - IBSS can try to return to the
-+ * original user-specified channel as creator */ -+ * original user-specified channel as creator */
-+ if (wdev->ibss_dfs_possible) -+ if (wdev->ibss_dfs_possible)
...@@ -6855,7 +6927,9 @@ index a1af6c2..90dd5e7 100644 ...@@ -6855,7 +6927,9 @@ index a1af6c2..90dd5e7 100644
-- wdev->channel = setup->chandef.chan; -- wdev->channel = setup->chandef.chan;
-+ wdev->chandef = setup->chandef; -+ wdev->chandef = setup->chandef;
- } - }
- + if (!scan)
+ aniState->ofdmNoiseImmunityLevel = immunityLevel;
- return err; - return err;
-@@ -244,7 +244,7 @@ int cfg80211_set_mesh_channel(struct cfg -@@ -244,7 +244,7 @@ int cfg80211_set_mesh_channel(struct cfg
- err = rdev_libertas_set_mesh_channel(rdev, wdev->netdev, - err = rdev_libertas_set_mesh_channel(rdev, wdev->netdev,
...@@ -6863,7 +6937,10 @@ index a1af6c2..90dd5e7 100644 ...@@ -6863,7 +6937,10 @@ index a1af6c2..90dd5e7 100644
- if (!err) - if (!err)
-- wdev->channel = chandef->chan; -- wdev->channel = chandef->chan;
-+ wdev->chandef = *chandef; -+ wdev->chandef = *chandef;
- +@@ -235,6 +238,9 @@ static void ath9k_hw_set_cck_nil(struct
+ BEACON_RSSI(ah), ATH9K_ANI_RSSI_THR_LOW,
+ ATH9K_ANI_RSSI_THR_HIGH);
- return err; - return err;
- } - }
-@@ -276,7 +276,7 @@ static int __cfg80211_leave_mesh(struct -@@ -276,7 +276,7 @@ static int __cfg80211_leave_mesh(struct
...@@ -6895,7 +6972,9 @@ index a1af6c2..90dd5e7 100644 ...@@ -6895,7 +6972,9 @@ index a1af6c2..90dd5e7 100644
-+ -+
-+ if (is2GHz && !twiceMaxEdgePower) -+ if (is2GHz && !twiceMaxEdgePower)
-+ twiceMaxEdgePower = 60; -+ twiceMaxEdgePower = 60;
-+ ++ if (AR_SREV_9100(ah) && immunityLevel < ATH9K_ANI_CCK_DEF_LEVEL)
++ immunityLevel = ATH9K_ANI_CCK_DEF_LEVEL;
+
- return twiceMaxEdgePower; - return twiceMaxEdgePower;
- } - }
- -
...@@ -6913,8 +6992,19 @@ index a1af6c2..90dd5e7 100644 ...@@ -6913,8 +6992,19 @@ index a1af6c2..90dd5e7 100644
-+ int mag_coeff[AR9300_MAX_CHAINS][MAX_MEASUREMENT][MAXIQCAL]; -+ int mag_coeff[AR9300_MAX_CHAINS][MAX_MEASUREMENT][MAXIQCAL];
-+ int phs_coeff[AR9300_MAX_CHAINS][MAX_MEASUREMENT][MAXIQCAL]; -+ int phs_coeff[AR9300_MAX_CHAINS][MAX_MEASUREMENT][MAXIQCAL];
- int iqc_coeff[2]; - int iqc_coeff[2];
- }; + if (ah->opmode == NL80211_IFTYPE_STATION &&
- + BEACON_RSSI(ah) <= ATH9K_ANI_RSSI_THR_LOW &&
+ immunityLevel > ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI)
+--- a/drivers/net/wireless/ath/ath9k/ath9k.h
++++ b/drivers/net/wireless/ath/ath9k/ath9k.h
+@@ -251,7 +251,6 @@ struct ath_atx_tid {
+
+ s8 bar_index;
+ bool sched;
+- bool paused;
+ bool active;
};
-@@ -800,7 +801,7 @@ static bool ar9003_hw_calc_iq_corr(struc -@@ -800,7 +801,7 @@ static bool ar9003_hw_calc_iq_corr(struc
- if (q_q_coff > 63) - if (q_q_coff > 63)
- q_q_coff = 63; - q_q_coff = 63;
...@@ -6935,15 +7025,8 @@ index a1af6c2..90dd5e7 100644 ...@@ -6935,15 +7025,8 @@ index a1af6c2..90dd5e7 100644
- chain_idx, iqc_coeff[1]); - chain_idx, iqc_coeff[1]);
-@@ -839,7 +840,8 @@ static bool ar9003_hw_calc_iq_corr(struc -@@ -839,7 +840,8 @@ static bool ar9003_hw_calc_iq_corr(struc
- return true; - return true;
+- ieee80211_iterate_active_interfaces(sc->hw, - }
+- IEEE80211_IFACE_ITER_NORMAL, -
+- ath9k_csa_update_vif,
+- sc);
++ ieee80211_iterate_active_interfaces_atomic(sc->hw,
++ IEEE80211_IFACE_ITER_NORMAL,
++ ath9k_csa_update_vif, sc);
}
--static void ar9003_hw_detect_outlier(int *mp_coeff, int nmeasurement, --static void ar9003_hw_detect_outlier(int *mp_coeff, int nmeasurement,
-+static void ar9003_hw_detect_outlier(int mp_coeff[][MAXIQCAL], -+static void ar9003_hw_detect_outlier(int mp_coeff[][MAXIQCAL],
-+ int nmeasurement, -+ int nmeasurement,
...@@ -6993,17 +7076,7 @@ index a1af6c2..90dd5e7 100644 ...@@ -6993,17 +7076,7 @@ index a1af6c2..90dd5e7 100644
- -
-- mp_coeff[outlier_idx] = mp_avg; -- mp_coeff[outlier_idx] = mp_avg;
-+ mp_coeff[outlier_idx][0] = mp_avg; -+ mp_coeff[outlier_idx][0] = mp_avg;
+ void ath9k_beacon_tasklet(unsigned long data) - }
+--- a/net/mac80211/main.c
++++ b/net/mac80211/main.c
+@@ -152,6 +152,8 @@ static u32 ieee80211_hw_conf_chan(struct
+ list_for_each_entry_rcu(sdata, &local->interfaces, list) {
+ if (!rcu_access_pointer(sdata->vif.chanctx_conf))
+ continue;
++ if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
++ continue;
+ power = min(power, sdata->vif.bss_conf.txpower);
}
- } - }
- -
--static void ar9003_hw_tx_iqcal_load_avg_2_passes(struct ath_hw *ah, --static void ar9003_hw_tx_iqcal_load_avg_2_passes(struct ath_hw *ah,
...@@ -7012,12 +7085,16 @@ index a1af6c2..90dd5e7 100644 ...@@ -7012,12 +7085,16 @@ index a1af6c2..90dd5e7 100644
-+static void ar9003_hw_tx_iq_cal_outlier_detection(struct ath_hw *ah, -+static void ar9003_hw_tx_iq_cal_outlier_detection(struct ath_hw *ah,
-+ struct coeff *coeff, -+ struct coeff *coeff,
-+ bool is_reusable) -+ bool is_reusable)
- { +--- a/drivers/net/wireless/ath/ath9k/xmit.c
++++ b/drivers/net/wireless/ath/ath9k/xmit.c
+@@ -107,9 +107,6 @@ static void ath_tx_queue_tid(struct ath_
{
- int i, im, nmeasurement; - int i, im, nmeasurement;
-+ int magnitude, phase; -+ int magnitude, phase;
- u32 tx_corr_coeff[MAX_MEASUREMENT][AR9300_MAX_CHAINS]; - u32 tx_corr_coeff[MAX_MEASUREMENT][AR9300_MAX_CHAINS];
- struct ath9k_hw_cal_data *caldata = ah->caldata; - struct ath9k_hw_cal_data *caldata = ah->caldata;
- + struct ath_atx_ac *ac = tid->ac;
-@@ -920,21 +923,30 @@ static void ar9003_hw_tx_iqcal_load_avg_ -@@ -920,21 +923,30 @@ static void ar9003_hw_tx_iqcal_load_avg_
- if (nmeasurement > MAX_MEASUREMENT) - if (nmeasurement > MAX_MEASUREMENT)
- nmeasurement = MAX_MEASUREMENT; - nmeasurement = MAX_MEASUREMENT;
...@@ -7027,7 +7104,9 @@ index a1af6c2..90dd5e7 100644 ...@@ -7027,7 +7104,9 @@ index a1af6c2..90dd5e7 100644
-- /* Detect magnitude outlier */ -- /* Detect magnitude outlier */
-- ar9003_hw_detect_outlier(coeff->mag_coeff[i], -- ar9003_hw_detect_outlier(coeff->mag_coeff[i],
-- nmeasurement, MAX_MAG_DELTA); -- nmeasurement, MAX_MAG_DELTA);
-- +- if (tid->paused)
+- return;
-
-- /* Detect phase outlier */ -- /* Detect phase outlier */
-- ar9003_hw_detect_outlier(coeff->phs_coeff[i], -- ar9003_hw_detect_outlier(coeff->phs_coeff[i],
-- nmeasurement, MAX_PHS_DELTA); -- nmeasurement, MAX_PHS_DELTA);
...@@ -7057,13 +7136,17 @@ index a1af6c2..90dd5e7 100644 ...@@ -7057,13 +7136,17 @@ index a1af6c2..90dd5e7 100644
-- ((coeff->phs_coeff[i][im] & 0x7f) << 7); -- ((coeff->phs_coeff[i][im] & 0x7f) << 7);
-+ coeff->iqc_coeff[0] = -+ coeff->iqc_coeff[0] =
-+ (phase & 0x7f) | ((magnitude & 0x7f) << 7); -+ (phase & 0x7f) | ((magnitude & 0x7f) << 7);
- + if (tid->sched)
+ return;
- if ((im % 2) == 0) - if ((im % 2) == 0)
- REG_RMW_FIELD(ah, tx_corr_coeff[im][i], - REG_RMW_FIELD(ah, tx_corr_coeff[im][i],
-@@ -991,7 +1003,63 @@ static bool ar9003_hw_tx_iq_cal_run(stru -@@ -991,7 +1003,63 @@ static bool ar9003_hw_tx_iq_cal_run(stru
- return true; - return true;
- } - }
- +@@ -1407,7 +1404,6 @@ int ath_tx_aggr_start(struct ath_softc *
+ ath_tx_tid_change_state(sc, txtid);
--static void ar9003_hw_tx_iq_cal_post_proc(struct ath_hw *ah, bool is_reusable) --static void ar9003_hw_tx_iq_cal_post_proc(struct ath_hw *ah, bool is_reusable)
-+static void __ar955x_tx_iq_cal_sort(struct ath_hw *ah, -+static void __ar955x_tx_iq_cal_sort(struct ath_hw *ah,
-+ struct coeff *coeff, -+ struct coeff *coeff,
...@@ -7122,9 +7205,7 @@ index a1af6c2..90dd5e7 100644 ...@@ -7122,9 +7205,7 @@ index a1af6c2..90dd5e7 100644
-+static void ar9003_hw_tx_iq_cal_post_proc(struct ath_hw *ah, -+static void ar9003_hw_tx_iq_cal_post_proc(struct ath_hw *ah,
-+ int iqcal_idx, -+ int iqcal_idx,
-+ bool is_reusable) -+ bool is_reusable)
+ rcu_read_unlock(); - {
+@@ -203,7 +205,7 @@ void ieee80211_bss_info_change_notify(st
{
- struct ath_common *common = ath9k_hw_common(ah); - struct ath_common *common = ath9k_hw_common(ah);
- const u32 txiqcal_status[AR9300_MAX_CHAINS] = { - const u32 txiqcal_status[AR9300_MAX_CHAINS] = {
-@@ -1004,10 +1072,11 @@ static void ar9003_hw_tx_iq_cal_post_pro -@@ -1004,10 +1072,11 @@ static void ar9003_hw_tx_iq_cal_post_pro
...@@ -7138,20 +7219,34 @@ index a1af6c2..90dd5e7 100644 ...@@ -7138,20 +7219,34 @@ index a1af6c2..90dd5e7 100644
-- int nmeasurement; -- int nmeasurement;
-+ int nmeasurement = 0; -+ int nmeasurement = 0;
-+ bool outlier_detect = true; -+ bool outlier_detect = true;
- + txtid->active = true;
+- txtid->paused = true;
+ *ssn = txtid->seq_start = txtid->seq_next;
+ txtid->bar_index = -1;
- for (i = 0; i < AR9300_MAX_CHAINS; i++) { - for (i = 0; i < AR9300_MAX_CHAINS; i++) {
- if (!(ah->txchainmask & (1 << i))) - if (!(ah->txchainmask & (1 << i)))
-@@ -1065,17 +1134,23 @@ static void ar9003_hw_tx_iq_cal_post_pro -@@ -1065,17 +1134,23 @@ static void ar9003_hw_tx_iq_cal_post_pro
- goto tx_iqcal_fail; - goto tx_iqcal_fail;
- } - }
- +@@ -1427,7 +1423,6 @@ void ath_tx_aggr_stop(struct ath_softc *
-- coeff.mag_coeff[i][im] = coeff.iqc_coeff[0] & 0x7f; -- coeff.mag_coeff[i][im] = coeff.iqc_coeff[0] & 0x7f;
-- coeff.phs_coeff[i][im] = -- coeff.phs_coeff[i][im] =
-+ coeff.phs_coeff[i][im][iqcal_idx] = -+ coeff.phs_coeff[i][im][iqcal_idx] =
-+ coeff.iqc_coeff[0] & 0x7f; -+ coeff.iqc_coeff[0] & 0x7f;
-+ coeff.mag_coeff[i][im][iqcal_idx] = -+ coeff.mag_coeff[i][im][iqcal_idx] =
- (coeff.iqc_coeff[0] >> 7) & 0x7f; - (coeff.iqc_coeff[0] >> 7) & 0x7f;
- + ath_txq_lock(sc, txq);
+ txtid->active = false;
+- txtid->paused = false;
+ ath_tx_flush_tid(sc, txtid);
+ ath_tx_tid_change_state(sc, txtid);
+ ath_txq_unlock_complete(sc, txq);
+@@ -1487,7 +1482,7 @@ void ath_tx_aggr_wakeup(struct ath_softc
+ ath_txq_lock(sc, txq);
+ ac->clear_ps_filter = true;
-- if (coeff.mag_coeff[i][im] > 63) -- if (coeff.mag_coeff[i][im] > 63)
-- coeff.mag_coeff[i][im] -= 128; -- coeff.mag_coeff[i][im] -= 128;
-- if (coeff.phs_coeff[i][im] > 63) -- if (coeff.phs_coeff[i][im] > 63)
...@@ -7160,7 +7255,11 @@ index a1af6c2..90dd5e7 100644 ...@@ -7160,7 +7255,11 @@ index a1af6c2..90dd5e7 100644
-+ coeff.mag_coeff[i][im][iqcal_idx] -= 128; -+ coeff.mag_coeff[i][im][iqcal_idx] -= 128;
-+ if (coeff.phs_coeff[i][im][iqcal_idx] > 63) -+ if (coeff.phs_coeff[i][im][iqcal_idx] > 63)
-+ coeff.phs_coeff[i][im][iqcal_idx] -= 128; -+ coeff.phs_coeff[i][im][iqcal_idx] -= 128;
- } +- if (!tid->paused && ath_tid_has_buffered(tid)) {
++ if (ath_tid_has_buffered(tid)) {
+ ath_tx_queue_tid(txq, tid);
+ ath_txq_schedule(sc, txq);
}
- } - }
-- ar9003_hw_tx_iqcal_load_avg_2_passes(ah, &coeff, is_reusable); -- ar9003_hw_tx_iqcal_load_avg_2_passes(ah, &coeff, is_reusable);
-+ -+
...@@ -7174,34 +7273,26 @@ index a1af6c2..90dd5e7 100644 ...@@ -7174,34 +7273,26 @@ index a1af6c2..90dd5e7 100644
- -
-@@ -1409,7 +1484,7 @@ skip_tx_iqcal: -@@ -1409,7 +1484,7 @@ skip_tx_iqcal:
- } - }
+ struct ieee80211_local *local = sdata->local; +@@ -1510,7 +1505,6 @@ void ath_tx_aggr_resume(struct ath_softc
+ ath_txq_lock(sc, txq);
- if (txiqcal_done) - if (txiqcal_done)
-- ar9003_hw_tx_iq_cal_post_proc(ah, is_reusable); -- ar9003_hw_tx_iq_cal_post_proc(ah, is_reusable);
-+ ar9003_hw_tx_iq_cal_post_proc(ah, 0, is_reusable); -+ ar9003_hw_tx_iq_cal_post_proc(ah, 0, is_reusable);
- else if (caldata && test_bit(TXIQCAL_DONE, &caldata->cal_flags)) - else if (caldata && test_bit(TXIQCAL_DONE, &caldata->cal_flags))
- ar9003_hw_tx_iq_cal_reload(ah); - ar9003_hw_tx_iq_cal_reload(ah);
+- if (!changed) + tid->baw_size = IEEE80211_MIN_AMPDU_BUF << sta->ht_cap.ampdu_factor;
++ if (!changed || sdata->vif.type == NL80211_IFTYPE_AP_VLAN) +- tid->paused = false;
+ return;
-@@ -1455,14 +1530,38 @@ skip_tx_iqcal: -@@ -1455,14 +1530,38 @@ skip_tx_iqcal:
- return true; - return true;
- } - }
+ drv_bss_info_changed(local, sdata, &sdata->vif.bss_conf, changed); -
+--- a/drivers/net/wireless/ath/ath9k/ani.c
++++ b/drivers/net/wireless/ath/ath9k/ani.c
+@@ -155,6 +155,9 @@ static void ath9k_hw_set_ofdm_nil(struct
+ ATH9K_ANI_RSSI_THR_LOW,
+ ATH9K_ANI_RSSI_THR_HIGH);
-+static bool do_ar9003_agc_cal(struct ath_hw *ah) -+static bool do_ar9003_agc_cal(struct ath_hw *ah)
-+{ -+{
-+ struct ath_common *common = ath9k_hw_common(ah); -+ struct ath_common *common = ath9k_hw_common(ah);
-+ bool status; -+ bool status;
++ if (AR_SREV_9100(ah) && immunityLevel < ATH9K_ANI_OFDM_DEF_LEVEL) -+
++ immunityLevel = ATH9K_ANI_OFDM_DEF_LEVEL;
+
-+ REG_WRITE(ah, AR_PHY_AGC_CONTROL, -+ REG_WRITE(ah, AR_PHY_AGC_CONTROL,
-+ REG_READ(ah, AR_PHY_AGC_CONTROL) | -+ REG_READ(ah, AR_PHY_AGC_CONTROL) |
-+ AR_PHY_AGC_CONTROL_CAL); -+ AR_PHY_AGC_CONTROL_CAL);
...@@ -7250,7 +7341,11 @@ index a1af6c2..90dd5e7 100644 ...@@ -7250,7 +7341,11 @@ index a1af6c2..90dd5e7 100644
-@@ -1512,27 +1616,37 @@ skip_tx_iqcal: -@@ -1512,27 +1616,37 @@ skip_tx_iqcal:
- if (AR_SREV_9330_11(ah)) - if (AR_SREV_9330_11(ah))
- ar9003_hw_manual_peak_cal(ah, 0, IS_CHAN_2GHZ(chan)); - ar9003_hw_manual_peak_cal(ah, 0, IS_CHAN_2GHZ(chan));
- + if (ath_tid_has_buffered(tid)) {
+ ath_tx_queue_tid(txq, tid);
+@@ -1544,8 +1538,6 @@ void ath9k_release_buffered_frames(struc
+ continue;
-- /* Calibrate the AGC */ -- /* Calibrate the AGC */
-- REG_WRITE(ah, AR_PHY_AGC_CONTROL, -- REG_WRITE(ah, AR_PHY_AGC_CONTROL,
-- REG_READ(ah, AR_PHY_AGC_CONTROL) | -- REG_READ(ah, AR_PHY_AGC_CONTROL) |
...@@ -7273,7 +7368,10 @@ index a1af6c2..90dd5e7 100644 ...@@ -7273,7 +7368,10 @@ index a1af6c2..90dd5e7 100644
-+ status = do_ar9003_agc_cal(ah); -+ status = do_ar9003_agc_cal(ah);
-+ if (!status) -+ if (!status)
-+ return false; -+ return false;
- + tid = ATH_AN_2_TID(an, i);
+- if (tid->paused)
+- continue;
-- if (!status) { -- if (!status) {
-- ath_dbg(common, CALIBRATE, -- ath_dbg(common, CALIBRATE,
-- "offset calibration failed to complete in %d ms; noisy environment?\n", -- "offset calibration failed to complete in %d ms; noisy environment?\n",
...@@ -7296,28 +7394,28 @@ index a1af6c2..90dd5e7 100644 ...@@ -7296,28 +7394,28 @@ index a1af6c2..90dd5e7 100644
-+ } -+ }
-+ } -+ }
- } - }
- + ath_txq_lock(sc, tid->ac->txq);
+ while (nframes > 0) {
+@@ -1844,9 +1836,6 @@ void ath_txq_schedule(struct ath_softc *
+ list_del(&tid->list);
+ tid->sched = false;
-- if (txiqcal_done) -- if (txiqcal_done)
-- ar9003_hw_tx_iq_cal_post_proc(ah, is_reusable); -- ar9003_hw_tx_iq_cal_post_proc(ah, is_reusable);
-- +- if (tid->paused)
+- continue;
-
- /* Revert chainmask to runtime parameters */ - /* Revert chainmask to runtime parameters */
- ar9003_hw_set_chain_masks(ah, ah->rxchainmask, ah->txchainmask); - ar9003_hw_set_chain_masks(ah, ah->rxchainmask, ah->txchainmask);
+ if (!scan) -
+ aniState->ofdmNoiseImmunityLevel = immunityLevel;
---- a/drivers/net/wireless/rtl818x/rtl8187/rtl8187.h ---- a/drivers/net/wireless/rtl818x/rtl8187/rtl8187.h
-+++ b/drivers/net/wireless/rtl818x/rtl8187/rtl8187.h -+++ b/drivers/net/wireless/rtl818x/rtl8187/rtl8187.h
-@@ -15,6 +15,8 @@ -@@ -15,6 +15,8 @@
- #ifndef RTL8187_H - #ifndef RTL8187_H
- #define RTL8187_H - #define RTL8187_H
+@@ -235,6 +238,9 @@ static void ath9k_hw_set_cck_nil(struct -
+ BEACON_RSSI(ah), ATH9K_ANI_RSSI_THR_LOW,
+ ATH9K_ANI_RSSI_THR_HIGH);
-+#include <linux/cache.h> -+#include <linux/cache.h>
++ if (AR_SREV_9100(ah) && immunityLevel < ATH9K_ANI_CCK_DEF_LEVEL) -+
++ immunityLevel = ATH9K_ANI_CCK_DEF_LEVEL;
+
- #include "rtl818x.h" - #include "rtl818x.h"
- #include "leds.h" - #include "leds.h"
- -
...@@ -7342,24 +7440,13 @@ index a1af6c2..90dd5e7 100644 ...@@ -7342,24 +7440,13 @@ index a1af6c2..90dd5e7 100644
-+ } *io_dmabuf ____cacheline_aligned; -+ } *io_dmabuf ____cacheline_aligned;
- bool rfkill_off; - bool rfkill_off;
- u16 seqno; - u16 seqno;
+ if (ah->opmode == NL80211_IFTYPE_STATION && - };
+ BEACON_RSSI(ah) <= ATH9K_ANI_RSSI_THR_LOW &&
+ immunityLevel > ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI)
+--- a/drivers/net/wireless/ath/ath9k/ath9k.h
++++ b/drivers/net/wireless/ath/ath9k/ath9k.h
+@@ -251,7 +251,6 @@ struct ath_atx_tid {
+
+ s8 bar_index;
+ bool sched;
+- bool paused;
+ bool active;
};
---- a/net/mac80211/wme.c ---- a/net/mac80211/wme.c
-+++ b/net/mac80211/wme.c -+++ b/net/mac80211/wme.c
-@@ -154,6 +154,11 @@ u16 ieee80211_select_queue(struct ieee80 -@@ -154,6 +154,11 @@ u16 ieee80211_select_queue(struct ieee80
- return IEEE80211_AC_BE; - return IEEE80211_AC_BE;
- } - }
-
-+ if (skb->protocol == sdata->control_port_protocol) { -+ if (skb->protocol == sdata->control_port_protocol) {
-+ skb->priority = 7; -+ skb->priority = 7;
-+ return ieee80211_downgrade_queue(sdata, skb); -+ return ieee80211_downgrade_queue(sdata, skb);
...@@ -7368,14 +7455,39 @@ index a1af6c2..90dd5e7 100644 ...@@ -7368,14 +7455,39 @@ index a1af6c2..90dd5e7 100644
- /* use the data classifier to determine what 802.1d tag the - /* use the data classifier to determine what 802.1d tag the
- * data frame has */ - * data frame has */
- rcu_read_lock(); - rcu_read_lock();
--- 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
-@@ -1444,14 +1444,16 @@ void ath_tx_aggr_sleep(struct ieee80211_ -@@ -1444,14 +1444,16 @@ void ath_tx_aggr_sleep(struct ieee80211_
- for (tidno = 0, tid = &an->tid[tidno]; - for (tidno = 0, tid = &an->tid[tidno];
- tidno < IEEE80211_NUM_TIDS; tidno++, tid++) { - tidno < IEEE80211_NUM_TIDS; tidno++, tid++) {
- + if (ath_tx_sched_aggr(sc, txq, tid, &stop))
+ sent = true;
+
+@@ -2698,7 +2687,6 @@ void ath_tx_node_init(struct ath_softc *
+ tid->baw_size = WME_MAX_BA;
+ tid->baw_head = tid->baw_tail = 0;
+ tid->sched = false;
+- tid->paused = false;
+ tid->active = false;
+ __skb_queue_head_init(&tid->buf_q);
+ __skb_queue_head_init(&tid->retry_q);
+--- a/drivers/net/wireless/ath/ath9k/recv.c
++++ b/drivers/net/wireless/ath/ath9k/recv.c
+@@ -975,6 +975,7 @@ int ath_rx_tasklet(struct ath_softc *sc,
+ u64 tsf = 0;
+ unsigned long flags;
+ dma_addr_t new_buf_addr;
++ unsigned int budget = 512;
-- if (!tid->sched) -- if (!tid->sched)
-- continue; + if (edma)
+ dma_type = DMA_BIDIRECTIONAL;
+@@ -1113,15 +1114,17 @@ requeue_drop_frag:
+ }
+ requeue:
+ list_add_tail(&bf->list, &sc->rx.rxbuf);
+- if (flush)
- continue;
-- --
- ac = tid->ac; - ac = tid->ac;
- txq = ac->txq; - txq = ac->txq;
...@@ -7388,7 +7500,7 @@ index a1af6c2..90dd5e7 100644 ...@@ -7388,7 +7500,7 @@ index a1af6c2..90dd5e7 100644
-+ } -+ }
-+ -+
- buffered = ath_tid_has_buffered(tid); - buffered = ath_tid_has_buffered(tid);
-
- tid->sched = false; - tid->sched = false;
-@@ -1696,7 +1698,7 @@ int ath_cabq_update(struct ath_softc *sc -@@ -1696,7 +1698,7 @@ int ath_cabq_update(struct ath_softc *sc
- -
...@@ -7414,7 +7526,15 @@ index a1af6c2..90dd5e7 100644 ...@@ -7414,7 +7526,15 @@ index a1af6c2..90dd5e7 100644
- -
-+ if (txctl->an && ieee80211_is_data_present(hdr->frame_control)) -+ if (txctl->an && ieee80211_is_data_present(hdr->frame_control))
-+ tid = ath_get_skb_tid(sc, txctl->an, skb); -+ tid = ath_get_skb_tid(sc, txctl->an, skb);
-+ + if (edma) {
+ ath_rx_edma_buf_link(sc, qtype);
+ } else {
+ ath_rx_buf_relink(sc, bf);
+- ath9k_hw_rxena(ah);
++ if (!flush)
++ ath9k_hw_rxena(ah);
+ }
+
- if (info->flags & IEEE80211_TX_CTL_PS_RESPONSE) { - if (info->flags & IEEE80211_TX_CTL_PS_RESPONSE) {
- ath_txq_unlock(sc, txq); - ath_txq_unlock(sc, txq);
- txq = sc->tx.uapsdq; - txq = sc->tx.uapsdq;
...@@ -7424,10 +7544,34 @@ index a1af6c2..90dd5e7 100644 ...@@ -7424,10 +7544,34 @@ index a1af6c2..90dd5e7 100644
-- tid = ath_get_skb_tid(sc, txctl->an, skb); -- tid = ath_get_skb_tid(sc, txctl->an, skb);
-- --
- WARN_ON(tid->ac->txq != txctl->txq); - WARN_ON(tid->ac->txq != txctl->txq);
- ++ if (!budget--)
++ break;
+ } while (1);
+
+ if (!(ah->imask & ATH9K_INT_RXEOL)) {
+--- a/drivers/net/wireless/ath/ath9k/ahb.c
++++ b/drivers/net/wireless/ath/ath9k/ahb.c
+@@ -86,7 +86,6 @@ static int ath_ahb_probe(struct platform
+ int irq;
+ int ret = 0;
+ struct ath_hw *ah;
+- struct ath_common *common;
+ char hw_name[64];
+
+ if (!dev_get_platdata(&pdev->dev)) {
+@@ -146,9 +145,6 @@ static int ath_ahb_probe(struct platform
+ wiphy_info(hw->wiphy, "%s mem=0x%lx, irq=%d\n",
+ hw_name, (unsigned long)mem, irq);
+
+- common = ath9k_hw_common(sc->sc_ah);
+- /* Will be cleared in ath9k_start() */
+- set_bit(ATH_OP_INVALID, &common->op_flags);
+ return 0;
- if (info->flags & IEEE80211_TX_CTL_CLEAR_PS_FILT) - if (info->flags & IEEE80211_TX_CTL_CLEAR_PS_FILT)
---- a/drivers/net/wireless/ath/ath9k/init.c + err_irq:
-+++ b/drivers/net/wireless/ath/ath9k/init.c --- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -943,6 +943,7 @@ static void ath9k_set_hw_capab(struct at -@@ -943,6 +943,7 @@ static void ath9k_set_hw_capab(struct at
- hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL; - hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
- hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_5_10_MHZ; - hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_5_10_MHZ;
...@@ -7463,7 +7607,20 @@ index a1af6c2..90dd5e7 100644 ...@@ -7463,7 +7607,20 @@ index a1af6c2..90dd5e7 100644
- -
--static void cleanup_single_sta(struct sta_info *sta) --static void cleanup_single_sta(struct sta_info *sta)
-+static void __cleanup_single_sta(struct sta_info *sta) -+static void __cleanup_single_sta(struct sta_info *sta)
- { +@@ -781,6 +781,9 @@ int ath9k_init_device(u16 devid, struct
+ common = ath9k_hw_common(ah);
+ ath9k_set_hw_capab(sc, hw);
+
++ /* Will be cleared in ath9k_start() */
++ set_bit(ATH_OP_INVALID, &common->op_flags);
++
+ /* Initialize regulatory */
+ error = ath_regd_init(&common->regulatory, sc->hw->wiphy,
+ ath9k_reg_notifier);
+--- a/drivers/net/wireless/ath/ath9k/pci.c
++++ b/drivers/net/wireless/ath/ath9k/pci.c
+@@ -784,7 +784,6 @@ static int ath_pci_probe(struct pci_dev
{
- int ac, i; - int ac, i;
- struct tid_ampdu_tx *tid_tx; - struct tid_ampdu_tx *tid_tx;
-@@ -99,7 +99,8 @@ static void cleanup_single_sta(struct st -@@ -99,7 +99,8 @@ static void cleanup_single_sta(struct st
...@@ -7515,7 +7672,20 @@ index a1af6c2..90dd5e7 100644 ...@@ -7515,7 +7672,20 @@ index a1af6c2..90dd5e7 100644
-- err = sta_info_insert_drv_state(local, sdata, sta); -- err = sta_info_insert_drv_state(local, sdata, sta);
-- if (err) -- if (err)
-- goto out_err; -- goto out_err;
-- + struct ath_softc *sc;
+ struct ieee80211_hw *hw;
+- struct ath_common *common;
+ u8 csz;
+ u32 val;
+ int ret = 0;
+@@ -877,10 +876,6 @@ static int ath_pci_probe(struct pci_dev
+ wiphy_info(hw->wiphy, "%s mem=0x%lx, irq=%d\n",
+ hw_name, (unsigned long)sc->mem, pdev->irq);
+
+- /* Will be cleared in ath9k_start() */
+- common = ath9k_hw_common(sc->sc_ah);
+- set_bit(ATH_OP_INVALID, &common->op_flags);
-
- local->num_sta++; - local->num_sta++;
- local->sta_generation++; - local->sta_generation++;
- smp_mb(); - smp_mb();
...@@ -7542,7 +7712,7 @@ index a1af6c2..90dd5e7 100644 ...@@ -7542,7 +7712,7 @@ index a1af6c2..90dd5e7 100644
-@@ -522,6 +537,12 @@ static int sta_info_insert_finish(struct -@@ -522,6 +537,12 @@ static int sta_info_insert_finish(struct
- mesh_accept_plinks_update(sdata); - mesh_accept_plinks_update(sdata);
- -
- return 0; return 0;
-+ out_remove: -+ out_remove:
-+ sta_info_hash_del(local, sta); -+ sta_info_hash_del(local, sta);
-+ list_del_rcu(&sta->list); -+ list_del_rcu(&sta->list);
...@@ -7647,28 +7817,23 @@ index a1af6c2..90dd5e7 100644 ...@@ -7647,28 +7817,23 @@ index a1af6c2..90dd5e7 100644
-- void (*fn)(void *data), void *data) -- void (*fn)(void *data), void *data)
-+void ieee80211_add_pending_skbs(struct ieee80211_local *local, -+void ieee80211_add_pending_skbs(struct ieee80211_local *local,
-+ struct sk_buff_head *skbs) -+ struct sk_buff_head *skbs)
+@@ -107,9 +107,6 @@ static void ath_tx_queue_tid(struct ath_ - {
{
- struct ieee80211_hw *hw = &local->hw; - struct ieee80211_hw *hw = &local->hw;
- struct sk_buff *skb; - struct sk_buff *skb;
-@@ -461,9 +460,6 @@ void ieee80211_add_pending_skbs_fn(struc -@@ -461,9 +460,6 @@ void ieee80211_add_pending_skbs_fn(struc
- __skb_queue_tail(&local->pending[queue], skb); - __skb_queue_tail(&local->pending[queue], skb);
- } - }
+ struct ath_atx_ac *ac = tid->ac; -
-- if (fn) -- if (fn)
-- fn(data); -- fn(data);
+- if (tid->paused) --
+- return;
-
- for (i = 0; i < hw->queues; i++) - for (i = 0; i < hw->queues; i++)
- __ieee80211_wake_queue(hw, i, - __ieee80211_wake_queue(hw, i,
- IEEE80211_QUEUE_STOP_REASON_SKB_ADD); - IEEE80211_QUEUE_STOP_REASON_SKB_ADD);
---- a/net/wireless/reg.c ---- a/net/wireless/reg.c
-+++ b/net/wireless/reg.c -+++ b/net/wireless/reg.c
-@@ -1700,7 +1700,7 @@ static void reg_process_hint(struct regu -@@ -1700,7 +1700,7 @@ static void reg_process_hint(struct regu
+ if (tid->sched) - return;
return;
- case NL80211_REGDOM_SET_BY_USER: - case NL80211_REGDOM_SET_BY_USER:
- treatment = reg_process_hint_user(reg_request); - treatment = reg_process_hint_user(reg_request);
-- if (treatment == REG_REQ_OK || -- if (treatment == REG_REQ_OK ||
...@@ -7762,7 +7927,7 @@ index a1af6c2..90dd5e7 100644 ...@@ -7762,7 +7927,7 @@ index a1af6c2..90dd5e7 100644
-+ len += scnprintf(buf + len, sizeof(buf) - len, -+ len += scnprintf(buf + len, sizeof(buf) - len,
- "%17s: %2d\n", "MCI Reset", - "%17s: %2d\n", "MCI Reset",
- sc->debug.stats.reset[RESET_TYPE_MCI]); - sc->debug.stats.reset[RESET_TYPE_MCI]);
-
---- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c ---- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c -+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-@@ -868,10 +868,6 @@ static void ar9003_hw_set_rfmode(struct -@@ -868,10 +868,6 @@ static void ar9003_hw_set_rfmode(struct
...@@ -7964,7 +8129,7 @@ index a1af6c2..90dd5e7 100644 ...@@ -7964,7 +8129,7 @@ index a1af6c2..90dd5e7 100644
-@@ -308,17 +318,6 @@ void ath9k_ani_reset(struct ath_hw *ah, -@@ -308,17 +318,6 @@ void ath9k_ani_reset(struct ath_hw *ah,
- BUG_ON(aniState == NULL); - BUG_ON(aniState == NULL);
- ah->stats.ast_ani_reset++; - ah->stats.ast_ani_reset++;
-
-- /* only allow a subset of functions in AP mode */ -- /* only allow a subset of functions in AP mode */
-- if (ah->opmode == NL80211_IFTYPE_AP) { -- if (ah->opmode == NL80211_IFTYPE_AP) {
-- if (IS_CHAN_2GHZ(chan)) { -- if (IS_CHAN_2GHZ(chan)) {
...@@ -8008,9 +8173,7 @@ index a1af6c2..90dd5e7 100644 ...@@ -8008,9 +8173,7 @@ index a1af6c2..90dd5e7 100644
- #define ATH9K_ANI_OFDM_TRIG_HIGH 3500 - #define ATH9K_ANI_OFDM_TRIG_HIGH 3500
- #define ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI 1000 - #define ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI 1000
-+#define ATH9K_ANI_OFDM_TRIG_HIGH_OLD 500 -+#define ATH9K_ANI_OFDM_TRIG_HIGH_OLD 500
+@@ -1407,7 +1404,6 @@ int ath_tx_aggr_start(struct ath_softc * -
+ ath_tx_tid_change_state(sc, txtid);
- #define ATH9K_ANI_OFDM_TRIG_LOW 400 - #define ATH9K_ANI_OFDM_TRIG_LOW 400
- #define ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI 900 - #define ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI 900
-+#define ATH9K_ANI_OFDM_TRIG_LOW_OLD 200 -+#define ATH9K_ANI_OFDM_TRIG_LOW_OLD 200
...@@ -8027,11 +8190,7 @@ index a1af6c2..90dd5e7 100644 ...@@ -8027,11 +8190,7 @@ index a1af6c2..90dd5e7 100644
-@@ -26,10 +26,6 @@ static const int firstep_table[] = -@@ -26,10 +26,6 @@ static const int firstep_table[] =
- /* level: 0 1 2 3 4 5 6 7 8 */ - /* level: 0 1 2 3 4 5 6 7 8 */
- { -4, -2, 0, 2, 4, 6, 8, 10, 12 }; /* lvl 0-8, default 2 */ - { -4, -2, 0, 2, 4, 6, 8, 10, 12 }; /* lvl 0-8, default 2 */
+ txtid->active = true; -
+- txtid->paused = true;
+ *ssn = txtid->seq_start = txtid->seq_next;
+ txtid->bar_index = -1;
--static const int cycpwrThr1_table[] = --static const int cycpwrThr1_table[] =
--/* level: 0 1 2 3 4 5 6 7 8 */ --/* level: 0 1 2 3 4 5 6 7 8 */
-- { -6, -4, -2, 0, 2, 4, 6, 8 }; /* lvl 0-7, default 3 */ -- { -6, -4, -2, 0, 2, 4, 6, 8 }; /* lvl 0-7, default 3 */
...@@ -8045,23 +8204,13 @@ index a1af6c2..90dd5e7 100644 ...@@ -8045,23 +8204,13 @@ index a1af6c2..90dd5e7 100644
- struct ar5416AniState *aniState = &ah->ani; - struct ar5416AniState *aniState = &ah->ani;
-- s32 value, value2; -- s32 value, value2;
-+ s32 value; -+ s32 value;
+@@ -1427,7 +1423,6 @@ void ath_tx_aggr_stop(struct ath_softc * -
- switch (cmd & ah->ani_function) { - switch (cmd & ah->ani_function) {
- case ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION:{ - case ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION:{
-@@ -1008,42 +1004,9 @@ static bool ar5008_hw_ani_control_new(st -@@ -1008,42 +1004,9 @@ static bool ar5008_hw_ani_control_new(st
- case ATH9K_ANI_FIRSTEP_LEVEL:{ - case ATH9K_ANI_FIRSTEP_LEVEL:{
- u32 level = param; - u32 level = param;
+ ath_txq_lock(sc, txq); -
+ txtid->active = false;
+- txtid->paused = false;
+ ath_tx_flush_tid(sc, txtid);
+ ath_tx_tid_change_state(sc, txtid);
+ ath_txq_unlock_complete(sc, txq);
+@@ -1487,7 +1482,7 @@ void ath_tx_aggr_wakeup(struct ath_softc
+ ath_txq_lock(sc, txq);
+ ac->clear_ps_filter = true;
-- if (level >= ARRAY_SIZE(firstep_table)) { -- if (level >= ARRAY_SIZE(firstep_table)) {
-- ath_dbg(common, ANI, -- ath_dbg(common, ANI,
-- "ATH9K_ANI_FIRSTEP_LEVEL: level out of range (%u > %zu)\n", -- "ATH9K_ANI_FIRSTEP_LEVEL: level out of range (%u > %zu)\n",
...@@ -8100,14 +8249,7 @@ index a1af6c2..90dd5e7 100644 ...@@ -8100,14 +8249,7 @@ index a1af6c2..90dd5e7 100644
-- REG_RMW_FIELD(ah, AR_PHY_FIND_SIG_LOW, -- REG_RMW_FIELD(ah, AR_PHY_FIND_SIG_LOW,
-- AR_PHY_FIND_SIG_FIRSTEP_LOW, value2); -- AR_PHY_FIND_SIG_FIRSTEP_LOW, value2);
-+ AR_PHY_FIND_SIG_FIRSTEP, value); -+ AR_PHY_FIND_SIG_FIRSTEP, value);
+- if (!tid->paused && ath_tid_has_buffered(tid)) { -
++ if (ath_tid_has_buffered(tid)) {
+ ath_tx_queue_tid(txq, tid);
+ ath_txq_schedule(sc, txq);
+ }
+@@ -1510,7 +1505,6 @@ void ath_tx_aggr_resume(struct ath_softc
+ ath_txq_lock(sc, txq);
- if (level != aniState->firstepLevel) { - if (level != aniState->firstepLevel) {
- ath_dbg(common, ANI, - ath_dbg(common, ANI,
-@@ -1060,7 +1023,7 @@ static bool ar5008_hw_ani_control_new(st -@@ -1060,7 +1023,7 @@ static bool ar5008_hw_ani_control_new(st
...@@ -8122,9 +8264,7 @@ index a1af6c2..90dd5e7 100644 ...@@ -8122,9 +8264,7 @@ index a1af6c2..90dd5e7 100644
-@@ -1073,41 +1036,13 @@ static bool ar5008_hw_ani_control_new(st -@@ -1073,41 +1036,13 @@ static bool ar5008_hw_ani_control_new(st
- case ATH9K_ANI_SPUR_IMMUNITY_LEVEL:{ - case ATH9K_ANI_SPUR_IMMUNITY_LEVEL:{
- u32 level = param; - u32 level = param;
+ tid->baw_size = IEEE80211_MIN_AMPDU_BUF << sta->ht_cap.ampdu_factor; -
+- tid->paused = false;
-- if (level >= ARRAY_SIZE(cycpwrThr1_table)) { -- if (level >= ARRAY_SIZE(cycpwrThr1_table)) {
-- ath_dbg(common, ANI, -- ath_dbg(common, ANI,
-- "ATH9K_ANI_SPUR_IMMUNITY_LEVEL: level out of range (%u > %zu)\n", -- "ATH9K_ANI_SPUR_IMMUNITY_LEVEL: level out of range (%u > %zu)\n",
...@@ -8147,11 +8287,7 @@ index a1af6c2..90dd5e7 100644 ...@@ -8147,11 +8287,7 @@ index a1af6c2..90dd5e7 100644
-- AR_PHY_TIMING5_CYCPWR_THR1, -- AR_PHY_TIMING5_CYCPWR_THR1,
-- value); -- value);
-+ AR_PHY_TIMING5_CYCPWR_THR1, value); -+ AR_PHY_TIMING5_CYCPWR_THR1, value);
+ if (ath_tid_has_buffered(tid)) { -
+ ath_tx_queue_tid(txq, tid);
+@@ -1544,8 +1538,6 @@ void ath9k_release_buffered_frames(struc
+ continue;
-- /* -- /*
-- * set AR_PHY_EXT_CCA for extension channel -- * set AR_PHY_EXT_CCA for extension channel
-- * make register setting relative to default -- * make register setting relative to default
...@@ -8169,10 +8305,7 @@ index a1af6c2..90dd5e7 100644 ...@@ -8169,10 +8305,7 @@ index a1af6c2..90dd5e7 100644
-+ if (IS_CHAN_HT40(ah->curchan)) -+ if (IS_CHAN_HT40(ah->curchan))
-+ REG_RMW_FIELD(ah, AR_PHY_EXT_CCA, -+ REG_RMW_FIELD(ah, AR_PHY_EXT_CCA,
-+ AR_PHY_EXT_TIMING5_CYCPWR_THR1, value); -+ AR_PHY_EXT_TIMING5_CYCPWR_THR1, value);
+ tid = ATH_AN_2_TID(an, i); -
+- if (tid->paused)
+- continue;
- if (level != aniState->spurImmunityLevel) { - if (level != aniState->spurImmunityLevel) {
- ath_dbg(common, ANI, - ath_dbg(common, ANI,
-@@ -1124,7 +1059,7 @@ static bool ar5008_hw_ani_control_new(st -@@ -1124,7 +1059,7 @@ static bool ar5008_hw_ani_control_new(st
...@@ -8184,26 +8317,7 @@ index a1af6c2..90dd5e7 100644 ...@@ -8184,26 +8317,7 @@ index a1af6c2..90dd5e7 100644
- aniState->iniDef.cycpwrThr1Ext); - aniState->iniDef.cycpwrThr1Ext);
- if (level > aniState->spurImmunityLevel) - if (level > aniState->spurImmunityLevel)
- ah->stats.ast_ani_spurup++; - ah->stats.ast_ani_spurup++;
+ ath_txq_lock(sc, tid->ac->txq); + err_init:
+ while (nframes > 0) {
+@@ -1844,9 +1836,6 @@ void ath_txq_schedule(struct ath_softc *
+ list_del(&tid->list);
+ tid->sched = false;
+
+- if (tid->paused)
+- continue;
+-
+ if (ath_tx_sched_aggr(sc, txq, tid, &stop))
+ sent = true;
+
+@@ -2698,7 +2687,6 @@ void ath_tx_node_init(struct ath_softc *
+ tid->baw_size = WME_MAX_BA;
+ tid->baw_head = tid->baw_tail = 0;
+ tid->sched = false;
+- tid->paused = false;
+ tid->active = false;
+ __skb_queue_head_init(&tid->buf_q);
+ __skb_queue_head_init(&tid->retry_q);
diff --git a/package/mac80211/patches/310-ap_scan.patch b/package/mac80211/patches/310-ap_scan.patch diff --git a/package/mac80211/patches/310-ap_scan.patch b/package/mac80211/patches/310-ap_scan.patch
index 389a003..87f165a 100644 index 389a003..87f165a 100644
--- a/package/mac80211/patches/310-ap_scan.patch --- a/package/mac80211/patches/310-ap_scan.patch
...@@ -8354,7 +8468,7 @@ index 96e7c6d..169eb9a 100644 ...@@ -8354,7 +8468,7 @@ index 96e7c6d..169eb9a 100644
ah->get_mac_revision = pdata->get_mac_revision; ah->get_mac_revision = pdata->get_mac_revision;
ah->external_reset = pdata->external_reset; ah->external_reset = pdata->external_reset;
diff --git a/package/mac80211/patches/502-ath9k_ahb_init.patch b/package/mac80211/patches/502-ath9k_ahb_init.patch diff --git a/package/mac80211/patches/502-ath9k_ahb_init.patch b/package/mac80211/patches/502-ath9k_ahb_init.patch
index 4edc63b..43c3260 100644 index 4edc63b..c1bdc6f 100644
--- a/package/mac80211/patches/502-ath9k_ahb_init.patch --- a/package/mac80211/patches/502-ath9k_ahb_init.patch
+++ b/package/mac80211/patches/502-ath9k_ahb_init.patch +++ b/package/mac80211/patches/502-ath9k_ahb_init.patch
@@ -1,15 +1,15 @@ @@ -1,15 +1,15 @@
...@@ -8363,7 +8477,7 @@ index 4edc63b..43c3260 100644 ...@@ -8363,7 +8477,7 @@ index 4edc63b..43c3260 100644
-@@ -1112,23 +1112,23 @@ static int __init ath9k_init(void) -@@ -1112,23 +1112,23 @@ static int __init ath9k_init(void)
- goto err_out; - goto err_out;
- } - }
+@@ -892,23 +892,23 @@ static int __init ath9k_init(void) +@@ -895,23 +895,23 @@ static int __init ath9k_init(void)
+ { + {
+ int error; + int error;
...@@ -8739,7 +8853,7 @@ index 30aa9ee..b84a991 100644 ...@@ -8739,7 +8853,7 @@ index 30aa9ee..b84a991 100644
if (changed & IEEE80211_CONF_CHANGE_POWER) { if (changed & IEEE80211_CONF_CHANGE_POWER) {
diff --git a/package/mac80211/patches/530-ath9k_extra_leds.patch b/package/mac80211/patches/530-ath9k_extra_leds.patch diff --git a/package/mac80211/patches/530-ath9k_extra_leds.patch b/package/mac80211/patches/530-ath9k_extra_leds.patch
index 59f78d9..fb24f03 100644 index 59f78d9..1174a47 100644
--- a/package/mac80211/patches/530-ath9k_extra_leds.patch --- a/package/mac80211/patches/530-ath9k_extra_leds.patch
+++ b/package/mac80211/patches/530-ath9k_extra_leds.patch +++ b/package/mac80211/patches/530-ath9k_extra_leds.patch
@@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
...@@ -8775,7 +8889,7 @@ index 59f78d9..fb24f03 100644 ...@@ -8775,7 +8889,7 @@ index 59f78d9..fb24f03 100644
--- 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
-@@ -1018,7 +1018,7 @@ int ath9k_init_device(u16 devid, struct -@@ -1018,7 +1018,7 @@ int ath9k_init_device(u16 devid, struct
+@@ -806,7 +806,7 @@ int ath9k_init_device(u16 devid, struct +@@ -809,7 +809,7 @@ int ath9k_init_device(u16 devid, struct
#ifdef CPTCFG_MAC80211_LEDS #ifdef CPTCFG_MAC80211_LEDS
/* must be initialized before ieee80211_register_hw */ /* must be initialized before ieee80211_register_hw */
...@@ -8868,7 +8982,7 @@ index d26a5af..e2e18c9 100644 ...@@ -8868,7 +8982,7 @@ index d26a5af..e2e18c9 100644
ah->get_mac_revision = pdata->get_mac_revision; ah->get_mac_revision = pdata->get_mac_revision;
ah->external_reset = pdata->external_reset; ah->external_reset = pdata->external_reset;
diff --git a/package/mac80211/patches/550-ath9k_entropy_from_adc.patch b/package/mac80211/patches/550-ath9k_entropy_from_adc.patch diff --git a/package/mac80211/patches/550-ath9k_entropy_from_adc.patch b/package/mac80211/patches/550-ath9k_entropy_from_adc.patch
index b59c362..54f5ced 100644 index b59c362..513c48d 100644
--- a/package/mac80211/patches/550-ath9k_entropy_from_adc.patch --- a/package/mac80211/patches/550-ath9k_entropy_from_adc.patch
+++ b/package/mac80211/patches/550-ath9k_entropy_from_adc.patch +++ b/package/mac80211/patches/550-ath9k_entropy_from_adc.patch
@@ -55,7 +55,7 @@ @@ -55,7 +55,7 @@
...@@ -8896,7 +9010,7 @@ index b59c362..54f5ced 100644 ...@@ -8896,7 +9010,7 @@ index b59c362..54f5ced 100644
const struct ath_bus_ops *bus_ops) const struct ath_bus_ops *bus_ops)
{ {
-@@ -1025,6 +1038,8 @@ int ath9k_init_device(u16 devid, struct -@@ -1025,6 +1038,8 @@ int ath9k_init_device(u16 devid, struct
+@@ -813,6 +826,8 @@ int ath9k_init_device(u16 devid, struct +@@ -816,6 +829,8 @@ int ath9k_init_device(u16 devid, struct
ARRAY_SIZE(ath9k_tpt_blink)); ARRAY_SIZE(ath9k_tpt_blink));
#endif #endif
...@@ -8923,7 +9037,7 @@ index ffffe0c..579a633 100644 ...@@ -8923,7 +9037,7 @@ index ffffe0c..579a633 100644
static const struct ieee80211_iface_limit if_limits[] = { static const struct ieee80211_iface_limit if_limits[] = {
{ .max = 2048, .types = BIT(NL80211_IFTYPE_STATION) | { .max = 2048, .types = BIT(NL80211_IFTYPE_STATION) |
diff --git a/package/mac80211/patches/552-ath9k_p2p_ps_support.patch b/package/mac80211/patches/552-ath9k_p2p_ps_support.patch diff --git a/package/mac80211/patches/552-ath9k_p2p_ps_support.patch b/package/mac80211/patches/552-ath9k_p2p_ps_support.patch
index 4a61db3..1bd0a54 100644 index 4a61db3..e066a38 100644
--- a/package/mac80211/patches/552-ath9k_p2p_ps_support.patch --- a/package/mac80211/patches/552-ath9k_p2p_ps_support.patch
+++ b/package/mac80211/patches/552-ath9k_p2p_ps_support.patch +++ b/package/mac80211/patches/552-ath9k_p2p_ps_support.patch
@@ -27,7 +27,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org> @@ -27,7 +27,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
...@@ -9052,7 +9166,7 @@ index 4a61db3..1bd0a54 100644 ...@@ -9052,7 +9166,7 @@ index 4a61db3..1bd0a54 100644
ath9k_init_misc(sc); ath9k_init_misc(sc);
ath_fill_led_pin(sc); ath_fill_led_pin(sc);
-@@ -1082,6 +1085,9 @@ static void ath9k_deinit_softc(struct at -@@ -1082,6 +1085,9 @@ static void ath9k_deinit_softc(struct at
+@@ -870,6 +873,9 @@ static void ath9k_deinit_softc(struct at +@@ -873,6 +876,9 @@ static void ath9k_deinit_softc(struct at
{ {
int i = 0; int i = 0;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment