Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
F
ffbs-gluon
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
darkbit
ffbs-gluon
Commits
5df63b7f
Commit
5df63b7f
authored
11 years ago
by
Matthias Schiffer
Browse files
Options
Downloads
Patches
Plain Diff
Update mac80211 backport
parent
8194bc1d
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
patches/openwrt/0019-Backport-hostapd-and-mac80211-from-Barrier-Breaker.patch
+332
-218
332 additions, 218 deletions
...-Backport-hostapd-and-mac80211-from-Barrier-Breaker.patch
with
332 additions
and
218 deletions
patches/openwrt/0019-Backport-hostapd-and-mac80211-from-Barrier-Breaker.patch
+
332
−
218
View file @
5df63b7f
...
...
@@ -3881,10 +3881,10 @@ index 7b50154..3f749e9 100644
pm_qos_remove_notifier(PM_QOS_NETWORK_LATENCY,
&local->network_latency_notifier);
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
+++ b/package/mac80211/patches/300-pending_work.patch
@@ -1,4153 +1,
239
@@
@@ -1,4153 +1,
378
@@
-commit 93f310a38a1d81a4bc8fcd9bf29628bd721cf2ef
-Author: Felix Fietkau <nbd@openwrt.org>
-Date: Sun Apr 6 23:35:28 2014 +0200
...
...
@@ -3921,23 +3921,37 @@ index a1af6c2..90dd5e7 100644
-commit 3a0f984b1cdcd6a9f8c441635ef3b05d58547f4e
-Author: Felix Fietkau <nbd@openwrt.org>
-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
-
- On older chips, the INI value differ in similar ways as cycpwr_thr1, so
- 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
- implementation (fewer steps, controlled at a different point in time),
- it makes sense to use values similar to what would be applied for newer
- 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: Rajkumar Manoharan <rmanohar@qti.qualcomm.com>
+ Signed-off-by: John W. Linville <linville@tuxdriver.com>
-commit 91d70d40400c569b49605b78fd7c43e9405694f4
-Author: Felix Fietkau <nbd@openwrt.org>
-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
-
- The table was copied from the ANI implementation of AR9300. It assumes
...
...
@@ -3946,11 +3960,14 @@ index a1af6c2..90dd5e7 100644
-
- On older chips, the differences are bigger and especially AR5008/AR9001
- 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
- previous implementation (expressed as a simple formula instead of the
- 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>
-
-commit c977493766310a825f406836636ffd66e1447783
...
...
@@ -3958,7 +3975,11 @@ index a1af6c2..90dd5e7 100644
-Date: Mon Mar 10 19:52:56 2014 +0100
-
- 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
- OFDM weak signal detection. The checks for this are elsewhere, and an
- earlier commit relaxed the restrictions for older chips, which are more
...
...
@@ -3971,28 +3992,46 @@ index a1af6c2..90dd5e7 100644
-Date: Sun Mar 9 11:25:43 2014 +0100
-
- 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.
-
+ 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: Tim Harvey <tharvey@gateworks.com>
+ Acked-by: Felix Fietkau <nbd@openwrt.org>
+ Signed-off-by: John W. Linville <linville@tuxdriver.com>
-commit 22e298b5a3a8a49e33805d4e351965123dede35b
-Author: Felix Fietkau <nbd@openwrt.org>
-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 possible hang on flush
- qi->tqi_readyTime is written directly to registers that expect
- microseconds as unit instead of TU.
- When setting the CABQ ready time, cur_conf->beacon_interval is in TU, so
- 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
- 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
- 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 eefb1d6adc4c60d219182b8917e4567484ce07fc
Author: Felix Fietkau <nbd@openwrt.org>
...
...
@@ -4595,7 +4634,7 @@ index a1af6c2..90dd5e7 100644
-commit e138e0ef9560c46ce93dbb22a728a57888e94d1c
-Author: Sujith Manoharan <c_manoha@qca.qualcomm.com>
-Date: Mon Feb 3 13:31:37 2014 +0530
-
- ath9k: Fix TX power calculation
-
- The commit, "ath9k_hw: Fix incorrect Tx control power in AR9003 template"
...
...
@@ -4868,7 +4907,7 @@ index a1af6c2..90dd5e7 100644
-commit dfb6889a75c601aedb7450b7e606668e77da6679
-Author: Johannes Berg <johannes.berg@intel.com>
-Date: Wed Jan 22 11:14:19 2014 +0200
-
- cfg80211: send scan results from work queue
-
- Due to the previous commit, when a scan finishes, it is in theory
...
...
@@ -6646,17 +6685,34 @@ index a1af6c2..90dd5e7 100644
-+ GFP_KERNEL);
-
- 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
-+++ b/net/wireless/ibss.c
-@@ -14,7 +14,8 @@
- #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,
-+ struct ieee80211_channel *channel)
- {
+ void ath9k_csa_update(struct ath_softc *sc)
{
- struct wireless_dev *wdev = dev->ieee80211_ptr;
- struct cfg80211_bss *bss;
-@@ -28,8 +29,7 @@ void __cfg80211_ibss_joined(struct net_d
...
...
@@ -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,
-+ 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 cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy);
- struct cfg80211_event *ev;
...
...
@@ -6687,11 +6765,14 @@ index a1af6c2..90dd5e7 100644
-+
-+ if (WARN_ON(!channel))
-+ return;
-
+ struct ieee80211_local *local = sdata->local;
- ev = kzalloc(sizeof(*ev), gfp);
- if (!ev)
- return;
-
+- if (!changed)
++ if (!changed || sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
return;
- ev->type = EVENT_IBSS_JOINED;
-- memcpy(ev->cr.bssid, bssid, ETH_ALEN);
-+ memcpy(ev->ij.bssid, bssid, ETH_ALEN);
...
...
@@ -6720,12 +6801,7 @@ index a1af6c2..90dd5e7 100644
-@@ -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))
- );
+--- 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,
-- TP_PROTO(struct net_device *netdev, const u8 *addr),
-- TP_ARGS(netdev, addr)
...
...
@@ -6737,13 +6813,7 @@ index a1af6c2..90dd5e7 100644
-@@ -2293,6 +2288,24 @@ DEFINE_EVENT(cfg80211_rx_evt, cfg80211_r
- 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,
-+ TP_PROTO(struct net_device *netdev, const u8 *bssid,
-+ struct ieee80211_channel *channel),
...
...
@@ -6784,11 +6854,12 @@ index a1af6c2..90dd5e7 100644
-- cfg80211_get_chan_state(wdev_iter, &ch, &chmode);
-+ cfg80211_get_chan_state(wdev_iter, &ch, &chmode, &radar_detect);
- wdev_unlock(wdev_iter);
+ 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
+ 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);
- switch (chmode) {
---- a/net/wireless/chan.c
...
...
@@ -6800,15 +6871,16 @@ index a1af6c2..90dd5e7 100644
-- enum cfg80211_chan_mode *chanmode)
-+ enum cfg80211_chan_mode *chanmode,
-+ u8 *radar_detect)
+ void ath9k_csa_update(struct ath_softc *sc)
{
- {
- *chan = NULL;
- *chanmode = CHAN_MODE_UNDEFINED;
-@@ -660,6 +661,11 @@ cfg80211_get_chan_state(struct wireless_
- !wdev->ibss_dfs_possible)
- ? CHAN_MODE_SHARED
- : 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
-+ * original user-specified channel as creator */
-+ if (wdev->ibss_dfs_possible)
...
...
@@ -6855,7 +6927,9 @@ index a1af6c2..90dd5e7 100644
-- wdev->channel = setup->chandef.chan;
-+ wdev->chandef = setup->chandef;
- }
-
+ if (!scan)
+ aniState->ofdmNoiseImmunityLevel = immunityLevel;
- return err;
-@@ -244,7 +244,7 @@ int cfg80211_set_mesh_channel(struct cfg
- err = rdev_libertas_set_mesh_channel(rdev, wdev->netdev,
...
...
@@ -6863,7 +6937,10 @@ index a1af6c2..90dd5e7 100644
- if (!err)
-- wdev->channel = chandef->chan;
-+ 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;
- }
-@@ -276,7 +276,7 @@ static int __cfg80211_leave_mesh(struct
...
...
@@ -6895,7 +6972,9 @@ index a1af6c2..90dd5e7 100644
-+
-+ if (is2GHz && !twiceMaxEdgePower)
-+ twiceMaxEdgePower = 60;
-+
++ if (AR_SREV_9100(ah) && immunityLevel < ATH9K_ANI_CCK_DEF_LEVEL)
++ immunityLevel = ATH9K_ANI_CCK_DEF_LEVEL;
+
- return twiceMaxEdgePower;
- }
-
...
...
@@ -6913,8 +6992,19 @@ index a1af6c2..90dd5e7 100644
-+ int mag_coeff[AR9300_MAX_CHAINS][MAX_MEASUREMENT][MAXIQCAL];
-+ int phs_coeff[AR9300_MAX_CHAINS][MAX_MEASUREMENT][MAXIQCAL];
- 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
- if (q_q_coff > 63)
- q_q_coff = 63;
...
...
@@ -6935,15 +7025,8 @@ index a1af6c2..90dd5e7 100644
- chain_idx, iqc_coeff[1]);
-@@ -839,7 +840,8 @@ static bool ar9003_hw_calc_iq_corr(struc
- 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[][MAXIQCAL],
-+ int nmeasurement,
...
...
@@ -6993,17 +7076,7 @@ index a1af6c2..90dd5e7 100644
-
-- mp_coeff[outlier_idx] = 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,
...
...
@@ -7012,12 +7085,16 @@ index a1af6c2..90dd5e7 100644
-+static void ar9003_hw_tx_iq_cal_outlier_detection(struct ath_hw *ah,
-+ struct coeff *coeff,
-+ 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 magnitude, phase;
- u32 tx_corr_coeff[MAX_MEASUREMENT][AR9300_MAX_CHAINS];
- 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_
- if (nmeasurement > MAX_MEASUREMENT)
- nmeasurement = MAX_MEASUREMENT;
...
...
@@ -7027,7 +7104,9 @@ index a1af6c2..90dd5e7 100644
-- /* Detect magnitude outlier */
-- ar9003_hw_detect_outlier(coeff->mag_coeff[i],
-- nmeasurement, MAX_MAG_DELTA);
--
+- if (tid->paused)
+- return;
-
-- /* Detect phase outlier */
-- ar9003_hw_detect_outlier(coeff->phs_coeff[i],
-- nmeasurement, MAX_PHS_DELTA);
...
...
@@ -7057,13 +7136,17 @@ index a1af6c2..90dd5e7 100644
-- ((coeff->phs_coeff[i][im] & 0x7f) << 7);
-+ coeff->iqc_coeff[0] =
-+ (phase & 0x7f) | ((magnitude & 0x7f) << 7);
-
+ if (tid->sched)
+ return;
- if ((im % 2) == 0)
- REG_RMW_FIELD(ah, tx_corr_coeff[im][i],
-@@ -991,7 +1003,63 @@ static bool ar9003_hw_tx_iq_cal_run(stru
- 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 __ar955x_tx_iq_cal_sort(struct ath_hw *ah,
-+ struct coeff *coeff,
...
...
@@ -7122,9 +7205,7 @@ index a1af6c2..90dd5e7 100644
-+static void ar9003_hw_tx_iq_cal_post_proc(struct ath_hw *ah,
-+ int iqcal_idx,
-+ 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);
- const u32 txiqcal_status[AR9300_MAX_CHAINS] = {
-@@ -1004,10 +1072,11 @@ static void ar9003_hw_tx_iq_cal_post_pro
...
...
@@ -7138,20 +7219,34 @@ index a1af6c2..90dd5e7 100644
-- int nmeasurement;
-+ int nmeasurement = 0;
-+ 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++) {
- if (!(ah->txchainmask & (1 << i)))
-@@ -1065,17 +1134,23 @@ static void ar9003_hw_tx_iq_cal_post_pro
- 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.phs_coeff[i][im] =
-+ coeff.phs_coeff[i][im][iqcal_idx] =
-+ coeff.iqc_coeff[0] & 0x7f;
-+ coeff.mag_coeff[i][im][iqcal_idx] =
- (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)
-- coeff.mag_coeff[i][im] -= 128;
-- if (coeff.phs_coeff[i][im] > 63)
...
...
@@ -7160,7 +7255,11 @@ index a1af6c2..90dd5e7 100644
-+ coeff.mag_coeff[i][im][iqcal_idx] -= 128;
-+ if (coeff.phs_coeff[i][im][iqcal_idx] > 63)
-+ 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);
-+
...
...
@@ -7174,34 +7273,26 @@ index a1af6c2..90dd5e7 100644
-
-@@ -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)
-- ar9003_hw_tx_iq_cal_post_proc(ah, is_reusable);
-+ ar9003_hw_tx_iq_cal_post_proc(ah, 0, is_reusable);
- else if (caldata && test_bit(TXIQCAL_DONE, &caldata->cal_flags))
- ar9003_hw_tx_iq_cal_reload(ah);
+- if (!changed)
++ if (!changed || sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
+ return;
+ tid->baw_size = IEEE80211_MIN_AMPDU_BUF << sta->ht_cap.ampdu_factor;
+- tid->paused = false;
-@@ -1455,14 +1530,38 @@ skip_tx_iqcal:
- 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)
-+{
-+ struct ath_common *common = ath9k_hw_common(ah);
-+ 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_READ(ah, AR_PHY_AGC_CONTROL) |
-+ AR_PHY_AGC_CONTROL_CAL);
...
...
@@ -7250,7 +7341,11 @@ index a1af6c2..90dd5e7 100644
-@@ -1512,27 +1616,37 @@ skip_tx_iqcal:
- if (AR_SREV_9330_11(ah))
- 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 */
-- REG_WRITE(ah, AR_PHY_AGC_CONTROL,
-- REG_READ(ah, AR_PHY_AGC_CONTROL) |
...
...
@@ -7273,7 +7368,10 @@ index a1af6c2..90dd5e7 100644
-+ status = do_ar9003_agc_cal(ah);
-+ if (!status)
-+ return false;
-
+ tid = ATH_AN_2_TID(an, i);
+- if (tid->paused)
+- continue;
-- if (!status) {
-- ath_dbg(common, CALIBRATE,
-- "offset calibration failed to complete in %d ms; noisy environment?\n",
...
...
@@ -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)
-- ar9003_hw_tx_iq_cal_post_proc(ah, is_reusable);
--
+- if (tid->paused)
+- continue;
-
- /* Revert chainmask to runtime parameters */
- ar9003_hw_set_chain_masks(ah, ah->rxchainmask, ah->txchainmask);
+ if (!scan)
+ aniState->ofdmNoiseImmunityLevel = immunityLevel;
-
---- a/drivers/net/wireless/rtl818x/rtl8187/rtl8187.h
-+++ b/drivers/net/wireless/rtl818x/rtl8187/rtl8187.h
-@@ -15,6 +15,8 @@
- #ifndef 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>
++ if (AR_SREV_9100(ah) && immunityLevel < ATH9K_ANI_CCK_DEF_LEVEL)
++ immunityLevel = ATH9K_ANI_CCK_DEF_LEVEL;
+
-+
- #include "rtl818x.h"
- #include "leds.h"
-
...
...
@@ -7342,24 +7440,13 @@ index a1af6c2..90dd5e7 100644
-+ } *io_dmabuf ____cacheline_aligned;
- bool rfkill_off;
- 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
-+++ b/net/mac80211/wme.c
-@@ -154,6 +154,11 @@ u16 ieee80211_select_queue(struct ieee80
- return IEEE80211_AC_BE;
- }
-
-+ if (skb->protocol == sdata->control_port_protocol) {
-+ skb->priority = 7;
-+ return ieee80211_downgrade_queue(sdata, skb);
...
...
@@ -7368,14 +7455,39 @@ index a1af6c2..90dd5e7 100644
- /* use the data classifier to determine what 802.1d tag the
- * data frame has */
- rcu_read_lock();
--- a/drivers/net/wireless/ath/ath9k/xmit.c
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
-
--- a/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_
- for (tidno = 0, tid = &an->tid[tidno];
- 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)
-- 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;
- txq = ac->txq;
...
...
@@ -7388,7 +7500,7 @@ index a1af6c2..90dd5e7 100644
-+ }
-+
- buffered = ath_tid_has_buffered(tid);
-
- tid->sched = false;
-@@ -1696,7 +1698,7 @@ int ath_cabq_update(struct ath_softc *sc
-
...
...
@@ -7414,7 +7526,15 @@ index a1af6c2..90dd5e7 100644
-
-+ if (txctl->an && ieee80211_is_data_present(hdr->frame_control))
-+ 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) {
- ath_txq_unlock(sc, txq);
- txq = sc->tx.uapsdq;
...
...
@@ -7424,10 +7544,34 @@ index a1af6c2..90dd5e7 100644
-- tid = ath_get_skb_tid(sc, txctl->an, skb);
--
- 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)
---- a/drivers/net/wireless/ath/ath9k/init.c
-+++ b/drivers/net/wireless/ath/ath9k/init.c
+ err_irq:
--- 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
- hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
- hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_5_10_MHZ;
...
...
@@ -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)
- {
+@@ -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;
- struct tid_ampdu_tx *tid_tx;
-@@ -99,7 +99,8 @@ static void cleanup_single_sta(struct st
...
...
@@ -7515,7 +7672,20 @@ index a1af6c2..90dd5e7 100644
-- err = sta_info_insert_drv_state(local, sdata, sta);
-- if (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->sta_generation++;
- smp_mb();
...
...
@@ -7542,7 +7712,7 @@ index a1af6c2..90dd5e7 100644
-@@ -522,6 +537,12 @@ static int sta_info_insert_finish(struct
- mesh_accept_plinks_update(sdata);
-
-
return 0;
return 0;
-+ out_remove:
-+ sta_info_hash_del(local, sta);
-+ list_del_rcu(&sta->list);
...
...
@@ -7647,28 +7817,23 @@ index a1af6c2..90dd5e7 100644
-- void (*fn)(void *data), void *data)
-+void ieee80211_add_pending_skbs(struct ieee80211_local *local,
-+ struct sk_buff_head *skbs)
+@@ -107,9 +107,6 @@ static void ath_tx_queue_tid(struct ath_
{
- {
- struct ieee80211_hw *hw = &local->hw;
- struct sk_buff *skb;
-@@ -461,9 +460,6 @@ void ieee80211_add_pending_skbs_fn(struc
- __skb_queue_tail(&local->pending[queue], skb);
- }
+ struct ath_atx_ac *ac = tid->ac;
-
-- if (fn)
-- fn(data);
+- if (tid->paused)
+- return;
-
--
- for (i = 0; i < hw->queues; i++)
- __ieee80211_wake_queue(hw, i,
- IEEE80211_QUEUE_STOP_REASON_SKB_ADD);
---- a/net/wireless/reg.c
-+++ b/net/wireless/reg.c
-@@ -1700,7 +1700,7 @@ static void reg_process_hint(struct regu
+ if (tid->sched)
return;
- return;
- case NL80211_REGDOM_SET_BY_USER:
- treatment = reg_process_hint_user(reg_request);
-- if (treatment == REG_REQ_OK ||
...
...
@@ -7762,7 +7927,7 @@ index a1af6c2..90dd5e7 100644
-+ len += scnprintf(buf + len, sizeof(buf) - len,
- "%17s: %2d\n", "MCI Reset",
- sc->debug.stats.reset[RESET_TYPE_MCI]);
-
---- a/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
...
...
@@ -7964,7 +8129,7 @@ index a1af6c2..90dd5e7 100644
-@@ -308,17 +318,6 @@ void ath9k_ani_reset(struct ath_hw *ah,
- BUG_ON(aniState == NULL);
- ah->stats.ast_ani_reset++;
-
-- /* only allow a subset of functions in AP mode */
-- if (ah->opmode == NL80211_IFTYPE_AP) {
-- if (IS_CHAN_2GHZ(chan)) {
...
...
@@ -8008,9 +8173,7 @@ index a1af6c2..90dd5e7 100644
- #define ATH9K_ANI_OFDM_TRIG_HIGH 3500
- #define ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI 1000
-+#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_ABOVE_INI 900
-+#define ATH9K_ANI_OFDM_TRIG_LOW_OLD 200
...
...
@@ -8027,11 +8190,7 @@ index a1af6c2..90dd5e7 100644
-@@ -26,10 +26,6 @@ static const int firstep_table[] =
- /* level: 0 1 2 3 4 5 6 7 8 */
- { -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[] =
--/* level: 0 1 2 3 4 5 6 7 8 */
-- { -6, -4, -2, 0, 2, 4, 6, 8 }; /* lvl 0-7, default 3 */
...
...
@@ -8045,23 +8204,13 @@ index a1af6c2..90dd5e7 100644
- struct ar5416AniState *aniState = &ah->ani;
-- s32 value, value2;
-+ s32 value;
+@@ -1427,7 +1423,6 @@ void ath_tx_aggr_stop(struct ath_softc *
-
- switch (cmd & ah->ani_function) {
- case ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION:{
-@@ -1008,42 +1004,9 @@ static bool ar5008_hw_ani_control_new(st
- case ATH9K_ANI_FIRSTEP_LEVEL:{
- 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)) {
-- ath_dbg(common, ANI,
-- "ATH9K_ANI_FIRSTEP_LEVEL: level out of range (%u > %zu)\n",
...
...
@@ -8100,14 +8249,7 @@ index a1af6c2..90dd5e7 100644
-- REG_RMW_FIELD(ah, AR_PHY_FIND_SIG_LOW,
-- AR_PHY_FIND_SIG_FIRSTEP_LOW, value2);
-+ 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) {
- ath_dbg(common, ANI,
-@@ -1060,7 +1023,7 @@ static bool ar5008_hw_ani_control_new(st
...
...
@@ -8122,9 +8264,7 @@ index a1af6c2..90dd5e7 100644
-@@ -1073,41 +1036,13 @@ static bool ar5008_hw_ani_control_new(st
- case ATH9K_ANI_SPUR_IMMUNITY_LEVEL:{
- u32 level = param;
+ tid->baw_size = IEEE80211_MIN_AMPDU_BUF << sta->ht_cap.ampdu_factor;
+- tid->paused = false;
-
-- if (level >= ARRAY_SIZE(cycpwrThr1_table)) {
-- ath_dbg(common, ANI,
-- "ATH9K_ANI_SPUR_IMMUNITY_LEVEL: level out of range (%u > %zu)\n",
...
...
@@ -8147,11 +8287,7 @@ index a1af6c2..90dd5e7 100644
-- 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
-- * make register setting relative to default
...
...
@@ -8169,10 +8305,7 @@ index a1af6c2..90dd5e7 100644
-+ if (IS_CHAN_HT40(ah->curchan))
-+ REG_RMW_FIELD(ah, AR_PHY_EXT_CCA,
-+ AR_PHY_EXT_TIMING5_CYCPWR_THR1, value);
+ tid = ATH_AN_2_TID(an, i);
+- if (tid->paused)
+- continue;
-
- if (level != aniState->spurImmunityLevel) {
- ath_dbg(common, ANI,
-@@ -1124,7 +1059,7 @@ static bool ar5008_hw_ani_control_new(st
...
...
@@ -8184,26 +8317,7 @@ index a1af6c2..90dd5e7 100644
- aniState->iniDef.cycpwrThr1Ext);
- if (level > aniState->spurImmunityLevel)
- ah->stats.ast_ani_spurup++;
+ 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 (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);
+ err_init:
diff --git a/package/mac80211/patches/310-ap_scan.patch b/package/mac80211/patches/310-ap_scan.patch
index 389a003..87f165a 100644
--- a/package/mac80211/patches/310-ap_scan.patch
...
...
@@ -8354,7 +8468,7 @@ index 96e7c6d..169eb9a 100644
ah->get_mac_revision = pdata->get_mac_revision;
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
index 4edc63b..
43c3260
100644
index 4edc63b..
c1bdc6f
100644
--- a/package/mac80211/patches/502-ath9k_ahb_init.patch
+++ b/package/mac80211/patches/502-ath9k_ahb_init.patch
@@ -1,15 +1,15 @@
...
...
@@ -8363,7 +8477,7 @@ index 4edc63b..43c3260 100644
-@@ -1112,23 +1112,23 @@ static int __init ath9k_init(void)
- goto err_out;
- }
+@@ -89
2
,23 +89
2
,23 @@ static int __init ath9k_init(void)
+@@ -89
5
,23 +89
5
,23 @@ static int __init ath9k_init(void)
+ {
+ int error;
...
...
@@ -8739,7 +8853,7 @@ index 30aa9ee..b84a991 100644
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
index 59f78d9..
fb24f03
100644
index 59f78d9..
1174a47
100644
--- a/package/mac80211/patches/530-ath9k_extra_leds.patch
+++ b/package/mac80211/patches/530-ath9k_extra_leds.patch
@@ -1,6 +1,6 @@
...
...
@@ -8775,7 +8889,7 @@ index 59f78d9..fb24f03 100644
--- a/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
+@@ -80
6
,7 +80
6
,7 @@ int ath9k_init_device(u16 devid, struct
+@@ -80
9
,7 +80
9
,7 @@ int ath9k_init_device(u16 devid, struct
#ifdef CPTCFG_MAC80211_LEDS
/* must be initialized before ieee80211_register_hw */
...
...
@@ -8868,7 +8982,7 @@ index d26a5af..e2e18c9 100644
ah->get_mac_revision = pdata->get_mac_revision;
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
index b59c362..5
4f5ce
d 100644
index b59c362..5
13c48
d 100644
--- a/package/mac80211/patches/550-ath9k_entropy_from_adc.patch
+++ b/package/mac80211/patches/550-ath9k_entropy_from_adc.patch
@@ -55,7 +55,7 @@
...
...
@@ -8896,7 +9010,7 @@ index b59c362..54f5ced 100644
const struct ath_bus_ops *bus_ops)
{
-@@ -1025,6 +1038,8 @@ int ath9k_init_device(u16 devid, struct
+@@ -81
3
,6 +82
6
,8 @@ int ath9k_init_device(u16 devid, struct
+@@ -81
6
,6 +82
9
,8 @@ int ath9k_init_device(u16 devid, struct
ARRAY_SIZE(ath9k_tpt_blink));
#endif
...
...
@@ -8923,7 +9037,7 @@ index ffffe0c..579a633 100644
static const struct ieee80211_iface_limit if_limits[] = {
{ .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
index 4a61db3..
1bd0a54
100644
index 4a61db3..
e066a38
100644
--- a/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>
...
...
@@ -9052,7 +9166,7 @@ index 4a61db3..1bd0a54 100644
ath9k_init_misc(sc);
ath_fill_led_pin(sc);
-@@ -1082,6 +1085,9 @@ static void ath9k_deinit_softc(struct at
+@@ -87
0
,6 +87
3
,9 @@ static void ath9k_deinit_softc(struct at
+@@ -87
3
,6 +87
6
,9 @@ static void ath9k_deinit_softc(struct at
{
int i = 0;
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment