From cac1a4be66f548735878beccc10dc4b1ec7ad364 Mon Sep 17 00:00:00 2001 From: John Crispin Date: Fri, 22 Jun 2018 09:43:56 +0200 Subject: [PATCH] mac80211: drop 355-ath9k-limit-retries-for-powersave-response-frames.patch several people reported this bug to be causing drop out issues Signed-off-by: John Crispin --- ...00-use-TXOP_BACKOFF-for-probe-frames.patch | 4 +- .../100-remove-cryptoapi-dependencies.patch | 10 +- ...aes-cmac-switch-to-shash-CMAC-driver.patch | 43 +++++---- ...leanup-brcmf_cfg80211_escan-function.patch | 14 +-- ...fmac-Remove-brcmf_sdiod_request_data.patch | 4 +- ...replace-old-IO-functions-with-simple.patch | 6 +- ...brcmfmac-Remove-brcmf_sdiod_addrprep.patch | 12 +-- ..._hw-issue-external-reset-for-QCA955x.patch | 51 +++++----- ...etries-for-powersave-response-frames.patch | 96 ------------------- ...ata-bit-in-PS-buffered-frame-release.patch | 8 +- ...ntially-stale-EOSP-status-bit-in-int.patch | 2 +- ...fix-block-ack-window-tracking-issues.patch | 18 ++-- ...ata-flag-for-buffered-multicast-pack.patch | 4 +- ...trel-reduce-minstrel_mcs_groups-size.patch | 86 +++++++++-------- ...tect-queue-draining-by-rcu_read_lock.patch | 4 +- .../patches/530-ath9k_extra_leds.patch | 12 +-- .../kernel/mac80211/patches/552-ahb_of.patch | 12 +-- ...dling-for-VHT160-in-recent-firmwares.patch | 2 +- ...rolling-support-for-various-chipsets.patch | 12 +-- 19 files changed, 157 insertions(+), 243 deletions(-) delete mode 100644 package/kernel/mac80211/patches/355-ath9k-limit-retries-for-powersave-response-frames.patch diff --git a/package/kernel/mac80211/patches/090-Revert-rt2800-use-TXOP_BACKOFF-for-probe-frames.patch b/package/kernel/mac80211/patches/090-Revert-rt2800-use-TXOP_BACKOFF-for-probe-frames.patch index 53d1c8a094..95feffa0ee 100644 --- a/package/kernel/mac80211/patches/090-Revert-rt2800-use-TXOP_BACKOFF-for-probe-frames.patch +++ b/package/kernel/mac80211/patches/090-Revert-rt2800-use-TXOP_BACKOFF-for-probe-frames.patch @@ -21,11 +21,9 @@ Signed-off-by: Stanislaw Gruszka drivers/net/wireless/ralink/rt2x00/rt2x00queue.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) -diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c -index a6884e73d2ab..7ddee980048b 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c -@@ -372,16 +372,15 @@ static void rt2x00queue_create_tx_descriptor_ht(struct rt2x00_dev *rt2x00dev, +@@ -372,16 +372,15 @@ static void rt2x00queue_create_tx_descri /* * Determine IFS values diff --git a/package/kernel/mac80211/patches/100-remove-cryptoapi-dependencies.patch b/package/kernel/mac80211/patches/100-remove-cryptoapi-dependencies.patch index aa44149aed..8d7a39a6df 100644 --- a/package/kernel/mac80211/patches/100-remove-cryptoapi-dependencies.patch +++ b/package/kernel/mac80211/patches/100-remove-cryptoapi-dependencies.patch @@ -173,7 +173,8 @@ #define AES_CCM_H -#include "aead_api.h" -- ++#include + -#define CCM_AAD_LEN 32 - -static inline struct crypto_aead * @@ -201,8 +202,7 @@ - be16_to_cpup((__be16 *)aad), - data, data_len, mic); -} -+#include - +- -static inline void ieee80211_aes_key_free(struct crypto_aead *tfm) -{ - return aead_key_free(tfm); @@ -338,10 +338,10 @@ #define AES_GCM_H -#include "aead_api.h" -- --#define GCM_AAD_LEN 32 +#include +-#define GCM_AAD_LEN 32 +- -static inline int ieee80211_aes_gcm_encrypt(struct crypto_aead *tfm, - u8 *j_0, u8 *aad, u8 *data, - size_t data_len, u8 *mic) diff --git a/package/kernel/mac80211/patches/131-Revert-mac80211-aes-cmac-switch-to-shash-CMAC-driver.patch b/package/kernel/mac80211/patches/131-Revert-mac80211-aes-cmac-switch-to-shash-CMAC-driver.patch index f2bee9b05c..d138b2c5ac 100644 --- a/package/kernel/mac80211/patches/131-Revert-mac80211-aes-cmac-switch-to-shash-CMAC-driver.patch +++ b/package/kernel/mac80211/patches/131-Revert-mac80211-aes-cmac-switch-to-shash-CMAC-driver.patch @@ -20,12 +20,9 @@ Signed-off-by: Felix Fietkau -void ieee80211_aes_cmac(struct crypto_shash *tfm, const u8 *aad, - const u8 *data, size_t data_len, u8 *mic) +void gf_mulx(u8 *pad) - { -- SHASH_DESC_ON_STACK(desc, tfm); -- u8 out[AES_BLOCK_SIZE]; ++{ + int i, carry; - -- desc->tfm = tfm; ++ + carry = pad[0] & 0x80; + for (i = 0; i < AES_BLOCK_SIZE - 1; i++) + pad[i] = (pad[i] << 1) | (pad[i + 1] >> 7); @@ -33,20 +30,17 @@ Signed-off-by: Felix Fietkau + if (carry) + pad[AES_BLOCK_SIZE - 1] ^= 0x87; +} - -- crypto_shash_init(desc); -- crypto_shash_update(desc, aad, AAD_LEN); -- crypto_shash_update(desc, data, data_len - CMAC_TLEN); -- crypto_shash_finup(desc, zero, CMAC_TLEN, out); ++ +void aes_cmac_vector(struct crypto_cipher *tfm, size_t num_elem, + const u8 *addr[], const size_t *len, u8 *mac, + size_t mac_len) -+{ + { +- SHASH_DESC_ON_STACK(desc, tfm); +- u8 out[AES_BLOCK_SIZE]; + u8 cbc[AES_BLOCK_SIZE], pad[AES_BLOCK_SIZE]; + const u8 *pos, *end; + size_t i, e, left, total_len; - -- memcpy(mic, out, CMAC_TLEN); ++ + memset(cbc, 0, AES_BLOCK_SIZE); + + total_len = 0; @@ -93,10 +87,14 @@ Signed-off-by: Felix Fietkau + pad[i] ^= cbc[i]; + crypto_cipher_encrypt_one(tfm, pad, pad); + memcpy(mac, pad, mac_len); - } ++} --void ieee80211_aes_cmac_256(struct crypto_shash *tfm, const u8 *aad, -+ +- desc->tfm = tfm; + +- crypto_shash_init(desc); +- crypto_shash_update(desc, aad, AAD_LEN); +- crypto_shash_update(desc, data, data_len - CMAC_TLEN); +- crypto_shash_finup(desc, zero, CMAC_TLEN, out); +void ieee80211_aes_cmac(struct crypto_cipher *tfm, const u8 *aad, + const u8 *data, size_t data_len, u8 *mic) +{ @@ -111,10 +109,12 @@ Signed-off-by: Felix Fietkau + len[1] = data_len - CMAC_TLEN; + addr[2] = zero; + len[2] = CMAC_TLEN; -+ + +- memcpy(mic, out, CMAC_TLEN); + aes_cmac_vector(tfm, 3, addr, len, mic, CMAC_TLEN); -+} -+ + } + +-void ieee80211_aes_cmac_256(struct crypto_shash *tfm, const u8 *aad, +void ieee80211_aes_cmac_256(struct crypto_cipher *tfm, const u8 *aad, const u8 *data, size_t data_len, u8 *mic) { @@ -122,8 +122,7 @@ Signed-off-by: Felix Fietkau + const u8 *addr[3]; + size_t len[3]; + u8 zero[CMAC_TLEN_256]; - -- desc->tfm = tfm; ++ + memset(zero, 0, CMAC_TLEN_256); + addr[0] = aad; + len[0] = AAD_LEN; @@ -132,6 +131,8 @@ Signed-off-by: Felix Fietkau + addr[2] = zero; + len[2] = CMAC_TLEN_256; +- desc->tfm = tfm; +- - crypto_shash_init(desc); - crypto_shash_update(desc, aad, AAD_LEN); - crypto_shash_update(desc, data, data_len - CMAC_TLEN_256); diff --git a/package/kernel/mac80211/patches/303-v4.15-0003-brcmfmac-cleanup-brcmf_cfg80211_escan-function.patch b/package/kernel/mac80211/patches/303-v4.15-0003-brcmfmac-cleanup-brcmf_cfg80211_escan-function.patch index ffd2db7620..b6f3d0c697 100644 --- a/package/kernel/mac80211/patches/303-v4.15-0003-brcmfmac-cleanup-brcmf_cfg80211_escan-function.patch +++ b/package/kernel/mac80211/patches/303-v4.15-0003-brcmfmac-cleanup-brcmf_cfg80211_escan-function.patch @@ -88,7 +88,7 @@ Signed-off-by: Kalle Valo - spec_scan = true; - } else - brcmf_dbg(SCAN, "Broadcast scan\n"); - +- - passive_scan = cfg->active_scan ? 0 : 1; - err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_PASSIVE_SCAN, - passive_scan); @@ -105,15 +105,17 @@ Signed-off-by: Kalle Valo - ssid_le.SSID); - else - brcmf_err("WLC_SCAN error (%d)\n", err); -+ cfg->escan_info.run = brcmf_run_escan; -+ err = brcmf_p2p_scan_prep(wiphy, request, vif); -+ if (err) -+ goto scan_out; - +- - brcmf_scan_config_mpc(ifp, 1); - goto scan_out; - } - } ++ ++ cfg->escan_info.run = brcmf_run_escan; ++ err = brcmf_p2p_scan_prep(wiphy, request, vif); ++ if (err) ++ goto scan_out; ++ + err = brcmf_do_escan(vif->ifp, request); + if (err) + goto scan_out; diff --git a/package/kernel/mac80211/patches/311-v4.16-0007-brcmfmac-Remove-brcmf_sdiod_request_data.patch b/package/kernel/mac80211/patches/311-v4.16-0007-brcmfmac-Remove-brcmf_sdiod_request_data.patch index beaa4d3a29..552f9fb443 100644 --- a/package/kernel/mac80211/patches/311-v4.16-0007-brcmfmac-Remove-brcmf_sdiod_request_data.patch +++ b/package/kernel/mac80211/patches/311-v4.16-0007-brcmfmac-Remove-brcmf_sdiod_request_data.patch @@ -141,12 +141,12 @@ Signed-off-by: Kalle Valo - func = SDIO_FUNC_0; - else - func = SDIO_FUNC_1; - +- - do { - /* for retry wait for 1 ms till bus get settled down */ - if (retry) - usleep_range(1000, 2000); -- + - ret = brcmf_sdiod_request_data(sdiodev, func, addr, regsz, - data, true); - diff --git a/package/kernel/mac80211/patches/312-v4.16-0004-brcmfmac-Rename-replace-old-IO-functions-with-simple.patch b/package/kernel/mac80211/patches/312-v4.16-0004-brcmfmac-Rename-replace-old-IO-functions-with-simple.patch index 7aa3de929f..7c27e17775 100644 --- a/package/kernel/mac80211/patches/312-v4.16-0004-brcmfmac-Rename-replace-old-IO-functions-with-simple.patch +++ b/package/kernel/mac80211/patches/312-v4.16-0004-brcmfmac-Rename-replace-old-IO-functions-with-simple.patch @@ -198,14 +198,14 @@ Signed-off-by: Kalle Valo int retval; - retval = brcmf_sdiod_reg_read(sdiodev, addr, 1, &data); -+ retval = brcmf_sdiod_addrprep(sdiodev, &addr); - +- - if (ret) - *ret = retval; - - return data; -} -- ++ retval = brcmf_sdiod_addrprep(sdiodev, &addr); + -u32 brcmf_sdiod_regrl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret) -{ - u32 data; diff --git a/package/kernel/mac80211/patches/312-v4.16-0006-brcmfmac-Remove-brcmf_sdiod_addrprep.patch b/package/kernel/mac80211/patches/312-v4.16-0006-brcmfmac-Remove-brcmf_sdiod_addrprep.patch index 44303fa410..dc598aa471 100644 --- a/package/kernel/mac80211/patches/312-v4.16-0006-brcmfmac-Remove-brcmf_sdiod_addrprep.patch +++ b/package/kernel/mac80211/patches/312-v4.16-0006-brcmfmac-Remove-brcmf_sdiod_addrprep.patch @@ -62,10 +62,10 @@ Signed-off-by: Kalle Valo + if (!err) sdiodev->sbwad = bar0; - } -- + - *addr &= SBSDIO_SB_OFT_ADDR_MASK; - *addr |= SBSDIO_SB_ACCESS_2_4B_FLAG; - +- - return 0; + return err; } @@ -99,14 +99,14 @@ Signed-off-by: Kalle Valo + retval = brcmf_sdiod_set_backplane_window(sdiodev, addr); + if (retval) + goto out; -+ -+ addr &= SBSDIO_SB_OFT_ADDR_MASK; -+ addr |= SBSDIO_SB_ACCESS_2_4B_FLAG; - if (!retval) - sdio_writel(sdiodev->func[1], data, addr, &retval); -+ sdio_writel(sdiodev->func[1], data, addr, &retval); ++ addr &= SBSDIO_SB_OFT_ADDR_MASK; ++ addr |= SBSDIO_SB_ACCESS_2_4B_FLAG; ++ sdio_writel(sdiodev->func[1], data, addr, &retval); ++ +out: if (ret) *ret = retval; diff --git a/package/kernel/mac80211/patches/351-ath9k_hw-issue-external-reset-for-QCA955x.patch b/package/kernel/mac80211/patches/351-ath9k_hw-issue-external-reset-for-QCA955x.patch index 34d7d3b1cf..5eb69b898d 100644 --- a/package/kernel/mac80211/patches/351-ath9k_hw-issue-external-reset-for-QCA955x.patch +++ b/package/kernel/mac80211/patches/351-ath9k_hw-issue-external-reset-for-QCA955x.patch @@ -29,6 +29,21 @@ Signed-off-by: Felix Fietkau - npend = ath9k_hw_numtxpending(ah, i); - if (npend) - break; +- } +- +- if (ah->external_reset && +- (npend || type == ATH9K_RESET_COLD)) { +- int reset_err = 0; +- +- ath_dbg(ath9k_hw_common(ah), RESET, +- "reset MAC via external reset\n"); +- +- reset_err = ah->external_reset(); +- if (reset_err) { +- ath_err(ath9k_hw_common(ah), +- "External reset failed, err=%d\n", +- reset_err); +- return false; + if (type == ATH9K_RESET_COLD) + return true; + @@ -44,47 +59,35 @@ Signed-off-by: Felix Fietkau + for (i = 0; i < AR_NUM_QCU; i++) { + if (ath9k_hw_numtxpending(ah, i)) + return true; -+ } - } - -- if (ah->external_reset && -- (npend || type == ATH9K_RESET_COLD)) { -- int reset_err = 0; + } ++ } ++ + return false; +} - -- ath_dbg(ath9k_hw_common(ah), RESET, -- "reset MAC via external reset\n"); ++ +static bool ath9k_hw_external_reset(struct ath_hw *ah, int type) +{ + int err; - -- reset_err = ah->external_reset(); -- if (reset_err) { -- ath_err(ath9k_hw_common(ah), -- "External reset failed, err=%d\n", -- reset_err); -- return false; -- } ++ + if (!ah->external_reset || !ath9k_hw_need_external_reset(ah, type)) + return true; - -- REG_WRITE(ah, AR_RTC_RESET, 1); ++ + ath_dbg(ath9k_hw_common(ah), RESET, + "reset MAC via external reset\n"); -+ + +- REG_WRITE(ah, AR_RTC_RESET, 1); + err = ah->external_reset(); + if (err) { + ath_err(ath9k_hw_common(ah), + "External reset failed, err=%d\n", err); + return false; -+ } -+ + } + + if (AR_SREV_9550(ah)) { + REG_WRITE(ah, AR_RTC_RESET, 0); + udelay(10); - } - ++ } ++ + REG_WRITE(ah, AR_RTC_RESET, 1); + udelay(10); + diff --git a/package/kernel/mac80211/patches/355-ath9k-limit-retries-for-powersave-response-frames.patch b/package/kernel/mac80211/patches/355-ath9k-limit-retries-for-powersave-response-frames.patch deleted file mode 100644 index 31825b819c..0000000000 --- a/package/kernel/mac80211/patches/355-ath9k-limit-retries-for-powersave-response-frames.patch +++ /dev/null @@ -1,96 +0,0 @@ -From: Felix Fietkau -Date: Thu, 2 Jul 2015 15:20:56 +0200 -Subject: [PATCH] ath9k: limit retries for powersave response frames - -In some cases, the channel might be busy enough that an ath9k AP's -response to PS-Poll frames might be too slow and the station has already -gone to sleep. To avoid wasting too much airtime on this, limit the -number of retries on such frames and ensure that no sample rate gets -used. - -Signed-off-by: Felix Fietkau ---- - ---- a/drivers/net/wireless/ath/ath9k/xmit.c -+++ b/drivers/net/wireless/ath/ath9k/xmit.c -@@ -188,10 +188,25 @@ static void ath_send_bar(struct ath_atx_ - } - - static void ath_set_rates(struct ieee80211_vif *vif, struct ieee80211_sta *sta, -- struct ath_buf *bf) -+ struct ath_buf *bf, bool ps) - { -+ struct ieee80211_tx_info *info = IEEE80211_SKB_CB(bf->bf_mpdu); -+ -+ if (ps) { -+ /* Clear the first rate to avoid using a sample rate for PS frames */ -+ info->control.rates[0].idx = -1; -+ info->control.rates[0].count = 0; -+ } -+ - ieee80211_get_tx_rates(vif, sta, bf->bf_mpdu, bf->rates, - ARRAY_SIZE(bf->rates)); -+ if (!ps) -+ return; -+ -+ if (bf->rates[0].count > 2) -+ bf->rates[0].count = 2; -+ -+ bf->rates[1].idx = -1; - } - - static void ath_txq_skb_done(struct ath_softc *sc, struct ath_txq *txq, -@@ -1502,7 +1517,7 @@ ath_tx_form_burst(struct ath_softc *sc, - break; - } - -- ath_set_rates(tid->an->vif, tid->an->sta, bf); -+ ath_set_rates(tid->an->vif, tid->an->sta, bf, false); - } while (1); - } - -@@ -1532,7 +1547,7 @@ static bool ath_tx_sched_aggr(struct ath - return false; - } - -- ath_set_rates(tid->an->vif, tid->an->sta, bf); -+ ath_set_rates(tid->an->vif, tid->an->sta, bf, false); - if (aggr) - aggr_len = ath_tx_form_aggr(sc, txq, tid, &bf_q, bf); - else -@@ -1690,7 +1705,7 @@ void ath9k_release_buffered_frames(struc - break; - - list_add_tail(&bf->list, &bf_q); -- ath_set_rates(tid->an->vif, tid->an->sta, bf); -+ ath_set_rates(tid->an->vif, tid->an->sta, bf, true); - if (bf_isampdu(bf)) { - ath_tx_addto_baw(sc, tid, bf); - bf->bf_state.bf_type &= ~BUF_AGGR; -@@ -2390,7 +2405,7 @@ int ath_tx_start(struct ieee80211_hw *hw - if (txctl->paprd) - bf->bf_state.bfs_paprd_timestamp = jiffies; - -- ath_set_rates(vif, sta, bf); -+ ath_set_rates(vif, sta, bf, ps_resp); - ath_tx_send_normal(sc, txq, tid, skb); - - out: -@@ -2429,7 +2444,7 @@ void ath_tx_cabq(struct ieee80211_hw *hw - break; - - bf->bf_lastbf = bf; -- ath_set_rates(vif, NULL, bf); -+ ath_set_rates(vif, NULL, bf, false); - ath_buf_set_rate(sc, bf, &info, fi->framelen, false); - duration += info.rates[0].PktDuration; - if (bf_tail) -@@ -2946,7 +2961,7 @@ int ath9k_tx99_send(struct ath_softc *sc - return -EINVAL; - } - -- ath_set_rates(sc->tx99_vif, NULL, bf); -+ ath_set_rates(sc->tx99_vif, NULL, bf, false); - - ath9k_hw_set_desc_link(sc->sc_ah, bf->bf_desc, bf->bf_daddr); - ath9k_hw_tx99_start(sc->sc_ah, txctl->txq->axq_qnum); diff --git a/package/kernel/mac80211/patches/360-ath9k-fix-moredata-bit-in-PS-buffered-frame-release.patch b/package/kernel/mac80211/patches/360-ath9k-fix-moredata-bit-in-PS-buffered-frame-release.patch index c9c74bb836..d651e6ce30 100644 --- a/package/kernel/mac80211/patches/360-ath9k-fix-moredata-bit-in-PS-buffered-frame-release.patch +++ b/package/kernel/mac80211/patches/360-ath9k-fix-moredata-bit-in-PS-buffered-frame-release.patch @@ -7,7 +7,7 @@ Signed-off-by: Felix Fietkau --- a/drivers/net/wireless/ath/ath9k/xmit.c +++ b/drivers/net/wireless/ath/ath9k/xmit.c -@@ -1674,6 +1674,22 @@ void ath_tx_aggr_wakeup(struct ath_softc +@@ -1659,6 +1659,22 @@ void ath_tx_aggr_wakeup(struct ath_softc } } @@ -30,15 +30,15 @@ Signed-off-by: Felix Fietkau void ath9k_release_buffered_frames(struct ieee80211_hw *hw, struct ieee80211_sta *sta, u16 tids, int nframes, -@@ -1704,6 +1720,7 @@ void ath9k_release_buffered_frames(struc +@@ -1689,6 +1705,7 @@ void ath9k_release_buffered_frames(struc if (!bf) break; + ath9k_set_moredata(sc, bf, true); list_add_tail(&bf->list, &bf_q); - ath_set_rates(tid->an->vif, tid->an->sta, bf, true); + ath_set_rates(tid->an->vif, tid->an->sta, bf); if (bf_isampdu(bf)) { -@@ -1727,6 +1744,9 @@ void ath9k_release_buffered_frames(struc +@@ -1712,6 +1729,9 @@ void ath9k_release_buffered_frames(struc if (list_empty(&bf_q)) return; diff --git a/package/kernel/mac80211/patches/361-ath9k-clear-potentially-stale-EOSP-status-bit-in-int.patch b/package/kernel/mac80211/patches/361-ath9k-clear-potentially-stale-EOSP-status-bit-in-int.patch index 1893187e8a..319de2a767 100644 --- a/package/kernel/mac80211/patches/361-ath9k-clear-potentially-stale-EOSP-status-bit-in-int.patch +++ b/package/kernel/mac80211/patches/361-ath9k-clear-potentially-stale-EOSP-status-bit-in-int.patch @@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau --- a/drivers/net/wireless/ath/ath9k/xmit.c +++ b/drivers/net/wireless/ath/ath9k/xmit.c -@@ -984,7 +984,8 @@ ath_tx_get_tid_subframe(struct ath_softc +@@ -969,7 +969,8 @@ ath_tx_get_tid_subframe(struct ath_softc bf->bf_lastbf = bf; tx_info = IEEE80211_SKB_CB(skb); diff --git a/package/kernel/mac80211/patches/363-ath9k-fix-block-ack-window-tracking-issues.patch b/package/kernel/mac80211/patches/363-ath9k-fix-block-ack-window-tracking-issues.patch index 59de1dfe1a..e25e92dda9 100644 --- a/package/kernel/mac80211/patches/363-ath9k-fix-block-ack-window-tracking-issues.patch +++ b/package/kernel/mac80211/patches/363-ath9k-fix-block-ack-window-tracking-issues.patch @@ -21,7 +21,7 @@ Signed-off-by: Felix Fietkau static struct ath_buf *ath_tx_setup_buffer(struct ath_softc *sc, struct ath_txq *txq, struct ath_atx_tid *tid, -@@ -311,7 +311,7 @@ static void ath_tx_flush_tid(struct ath_ +@@ -296,7 +296,7 @@ static void ath_tx_flush_tid(struct ath_ } if (fi->baw_tracked) { @@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau sendbar = true; } -@@ -327,10 +327,15 @@ static void ath_tx_flush_tid(struct ath_ +@@ -312,10 +312,15 @@ static void ath_tx_flush_tid(struct ath_ } static void ath_tx_update_baw(struct ath_softc *sc, struct ath_atx_tid *tid, @@ -47,7 +47,7 @@ Signed-off-by: Felix Fietkau index = ATH_BA_INDEX(tid->seq_start, seqno); cindex = (tid->baw_head + index) & (ATH_TID_MAX_BUFS - 1); -@@ -351,6 +356,9 @@ static void ath_tx_addto_baw(struct ath_ +@@ -336,6 +341,9 @@ static void ath_tx_addto_baw(struct ath_ u16 seqno = bf->bf_state.seqno; int index, cindex; @@ -57,7 +57,7 @@ Signed-off-by: Felix Fietkau index = ATH_BA_INDEX(tid->seq_start, seqno); cindex = (tid->baw_head + index) & (ATH_TID_MAX_BUFS - 1); __set_bit(cindex, tid->tx_buf); -@@ -627,7 +635,7 @@ static void ath_tx_complete_aggr(struct +@@ -612,7 +620,7 @@ static void ath_tx_complete_aggr(struct * complete the acked-ones/xretried ones; update * block-ack window */ @@ -66,7 +66,7 @@ Signed-off-by: Felix Fietkau if (rc_update && (acked_cnt == 1 || txfail_cnt == 1)) { memcpy(tx_info->control.rates, rates, sizeof(rates)); -@@ -657,7 +665,7 @@ static void ath_tx_complete_aggr(struct +@@ -642,7 +650,7 @@ static void ath_tx_complete_aggr(struct * run out of tx buf. */ if (!tbf) { @@ -75,7 +75,7 @@ Signed-off-by: Felix Fietkau ath_tx_complete_buf(sc, bf, txq, &bf_head, NULL, ts, -@@ -1026,11 +1034,14 @@ ath_tx_get_tid_subframe(struct ath_softc +@@ -1011,11 +1019,14 @@ ath_tx_get_tid_subframe(struct ath_softc INIT_LIST_HEAD(&bf_head); list_add(&bf->list, &bf_head); @@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau return bf; } -@@ -1088,8 +1099,6 @@ ath_tx_form_aggr(struct ath_softc *sc, s +@@ -1073,8 +1084,6 @@ ath_tx_form_aggr(struct ath_softc *sc, s bf->bf_next = NULL; /* link buffers of this frame to the aggregate */ @@ -100,10 +100,10 @@ Signed-off-by: Felix Fietkau bf->bf_state.ndelim = ndelim; list_add_tail(&bf->list, bf_q); -@@ -1725,10 +1734,8 @@ void ath9k_release_buffered_frames(struc +@@ -1710,10 +1719,8 @@ void ath9k_release_buffered_frames(struc ath9k_set_moredata(sc, bf, true); list_add_tail(&bf->list, &bf_q); - ath_set_rates(tid->an->vif, tid->an->sta, bf, true); + ath_set_rates(tid->an->vif, tid->an->sta, bf); - if (bf_isampdu(bf)) { - ath_tx_addto_baw(sc, tid, bf); + if (bf_isampdu(bf)) diff --git a/package/kernel/mac80211/patches/366-ath9k-fix-more-data-flag-for-buffered-multicast-pack.patch b/package/kernel/mac80211/patches/366-ath9k-fix-more-data-flag-for-buffered-multicast-pack.patch index 096eb56a2d..0f3120d671 100644 --- a/package/kernel/mac80211/patches/366-ath9k-fix-more-data-flag-for-buffered-multicast-pack.patch +++ b/package/kernel/mac80211/patches/366-ath9k-fix-more-data-flag-for-buffered-multicast-pack.patch @@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau --- a/drivers/net/wireless/ath/ath9k/xmit.c +++ b/drivers/net/wireless/ath/ath9k/xmit.c -@@ -2451,7 +2451,6 @@ void ath_tx_cabq(struct ieee80211_hw *hw +@@ -2436,7 +2436,6 @@ void ath_tx_cabq(struct ieee80211_hw *hw .txq = sc->beacon.cabq }; struct ath_tx_info info = {}; @@ -20,7 +20,7 @@ Signed-off-by: Felix Fietkau struct ath_buf *bf_tail = NULL; struct ath_buf *bf; LIST_HEAD(bf_q); -@@ -2495,15 +2494,10 @@ void ath_tx_cabq(struct ieee80211_hw *hw +@@ -2480,15 +2479,10 @@ void ath_tx_cabq(struct ieee80211_hw *hw if (list_empty(&bf_q)) return; diff --git a/package/kernel/mac80211/patches/372-mac80211-minstrel-reduce-minstrel_mcs_groups-size.patch b/package/kernel/mac80211/patches/372-mac80211-minstrel-reduce-minstrel_mcs_groups-size.patch index fa51f1be7e..02a0ca0a52 100644 --- a/package/kernel/mac80211/patches/372-mac80211-minstrel-reduce-minstrel_mcs_groups-size.patch +++ b/package/kernel/mac80211/patches/372-mac80211-minstrel-reduce-minstrel_mcs_groups-size.patch @@ -136,72 +136,82 @@ Signed-off-by: Felix Fietkau - MCS_GROUP(1, 0, BW_20), - MCS_GROUP(2, 0, BW_20), - MCS_GROUP(3, 0, BW_20), -+ MCS_GROUP(1, 0, BW_20, 5), -+ MCS_GROUP(2, 0, BW_20, 4), -+ MCS_GROUP(3, 0, BW_20, 4), - +- - MCS_GROUP(1, 1, BW_20), - MCS_GROUP(2, 1, BW_20), - MCS_GROUP(3, 1, BW_20), -+ MCS_GROUP(1, 1, BW_20, 5), -+ MCS_GROUP(2, 1, BW_20, 4), -+ MCS_GROUP(3, 1, BW_20, 4), - +- - MCS_GROUP(1, 0, BW_40), - MCS_GROUP(2, 0, BW_40), - MCS_GROUP(3, 0, BW_40), -+ MCS_GROUP(1, 0, BW_40, 4), -+ MCS_GROUP(2, 0, BW_40, 4), -+ MCS_GROUP(3, 0, BW_40, 4), - +- - MCS_GROUP(1, 1, BW_40), - MCS_GROUP(2, 1, BW_40), - MCS_GROUP(3, 1, BW_40), -+ MCS_GROUP(1, 1, BW_40, 4), -+ MCS_GROUP(2, 1, BW_40, 4), -+ MCS_GROUP(3, 1, BW_40, 4), - +- - CCK_GROUP, -+ CCK_GROUP(8), - +- - VHT_GROUP(1, 0, BW_20), - VHT_GROUP(2, 0, BW_20), - VHT_GROUP(3, 0, BW_20), -+ VHT_GROUP(1, 0, BW_20, 5), -+ VHT_GROUP(2, 0, BW_20, 4), -+ VHT_GROUP(3, 0, BW_20, 4), - +- - VHT_GROUP(1, 1, BW_20), - VHT_GROUP(2, 1, BW_20), - VHT_GROUP(3, 1, BW_20), -+ VHT_GROUP(1, 1, BW_20, 5), -+ VHT_GROUP(2, 1, BW_20, 4), -+ VHT_GROUP(3, 1, BW_20, 4), - +- - VHT_GROUP(1, 0, BW_40), - VHT_GROUP(2, 0, BW_40), - VHT_GROUP(3, 0, BW_40), -+ VHT_GROUP(1, 0, BW_40, 4), -+ VHT_GROUP(2, 0, BW_40, 4), -+ VHT_GROUP(3, 0, BW_40, 4), - +- - VHT_GROUP(1, 1, BW_40), - VHT_GROUP(2, 1, BW_40), - VHT_GROUP(3, 1, BW_40), -+ VHT_GROUP(1, 1, BW_40, 4), -+ VHT_GROUP(2, 1, BW_40, 4), -+ VHT_GROUP(3, 1, BW_40, 4), - +- - VHT_GROUP(1, 0, BW_80), - VHT_GROUP(2, 0, BW_80), - VHT_GROUP(3, 0, BW_80), -+ VHT_GROUP(1, 0, BW_80, 4), -+ VHT_GROUP(2, 0, BW_80, 4), -+ VHT_GROUP(3, 0, BW_80, 4), - +- - VHT_GROUP(1, 1, BW_80), - VHT_GROUP(2, 1, BW_80), - VHT_GROUP(3, 1, BW_80), ++ MCS_GROUP(1, 0, BW_20, 5), ++ MCS_GROUP(2, 0, BW_20, 4), ++ MCS_GROUP(3, 0, BW_20, 4), ++ ++ MCS_GROUP(1, 1, BW_20, 5), ++ MCS_GROUP(2, 1, BW_20, 4), ++ MCS_GROUP(3, 1, BW_20, 4), ++ ++ MCS_GROUP(1, 0, BW_40, 4), ++ MCS_GROUP(2, 0, BW_40, 4), ++ MCS_GROUP(3, 0, BW_40, 4), ++ ++ MCS_GROUP(1, 1, BW_40, 4), ++ MCS_GROUP(2, 1, BW_40, 4), ++ MCS_GROUP(3, 1, BW_40, 4), ++ ++ CCK_GROUP(8), ++ ++ VHT_GROUP(1, 0, BW_20, 5), ++ VHT_GROUP(2, 0, BW_20, 4), ++ VHT_GROUP(3, 0, BW_20, 4), ++ ++ VHT_GROUP(1, 1, BW_20, 5), ++ VHT_GROUP(2, 1, BW_20, 4), ++ VHT_GROUP(3, 1, BW_20, 4), ++ ++ VHT_GROUP(1, 0, BW_40, 4), ++ VHT_GROUP(2, 0, BW_40, 4), ++ VHT_GROUP(3, 0, BW_40, 4), ++ ++ VHT_GROUP(1, 1, BW_40, 4), ++ VHT_GROUP(2, 1, BW_40, 4), ++ VHT_GROUP(3, 1, BW_40, 4), ++ ++ VHT_GROUP(1, 0, BW_80, 4), ++ VHT_GROUP(2, 0, BW_80, 4), ++ VHT_GROUP(3, 0, BW_80, 4), ++ + VHT_GROUP(1, 1, BW_80, 4), + VHT_GROUP(2, 1, BW_80, 4), + VHT_GROUP(3, 1, BW_80, 4), diff --git a/package/kernel/mac80211/patches/374-ath9k-Protect-queue-draining-by-rcu_read_lock.patch b/package/kernel/mac80211/patches/374-ath9k-Protect-queue-draining-by-rcu_read_lock.patch index 9970574e14..0b599b73ac 100644 --- a/package/kernel/mac80211/patches/374-ath9k-Protect-queue-draining-by-rcu_read_lock.patch +++ b/package/kernel/mac80211/patches/374-ath9k-Protect-queue-draining-by-rcu_read_lock.patch @@ -23,7 +23,7 @@ Signed-off-by: Toke Høiland-Jørgensen --- a/drivers/net/wireless/ath/ath9k/xmit.c +++ b/drivers/net/wireless/ath/ath9k/xmit.c -@@ -2930,6 +2930,8 @@ void ath_tx_node_cleanup(struct ath_soft +@@ -2915,6 +2915,8 @@ void ath_tx_node_cleanup(struct ath_soft struct ath_txq *txq; int tidno; @@ -32,7 +32,7 @@ Signed-off-by: Toke Høiland-Jørgensen for (tidno = 0; tidno < IEEE80211_NUM_TIDS; tidno++) { tid = ath_node_to_tid(an, tidno); txq = tid->txq; -@@ -2947,6 +2949,8 @@ void ath_tx_node_cleanup(struct ath_soft +@@ -2932,6 +2934,8 @@ void ath_tx_node_cleanup(struct ath_soft if (!an->sta) break; /* just one multicast ath_atx_tid */ } diff --git a/package/kernel/mac80211/patches/530-ath9k_extra_leds.patch b/package/kernel/mac80211/patches/530-ath9k_extra_leds.patch index 9084ea7db3..8ea2f79a20 100644 --- a/package/kernel/mac80211/patches/530-ath9k_extra_leds.patch +++ b/package/kernel/mac80211/patches/530-ath9k_extra_leds.patch @@ -103,8 +103,7 @@ + GFP_KERNEL); + if (!led) + return -ENOMEM; - -- ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin, val); ++ + led->gpio = gpio = (struct gpio_led *) (led + 1); + _name = (char *) (led->gpio + 1); + @@ -117,7 +116,8 @@ + ret = ath_add_led(sc, led); + if (unlikely(ret < 0)) + kfree(led); -+ + +- ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin, val); + return ret; } @@ -125,11 +125,11 @@ { - if (!sc->led_registered) - return; -- -- ath_led_brightness(&sc->led_cdev, LED_OFF); -- led_classdev_unregister(&sc->led_cdev); + struct ath_led *led; +- ath_led_brightness(&sc->led_cdev, LED_OFF); +- led_classdev_unregister(&sc->led_cdev); +- - ath9k_hw_gpio_free(sc->sc_ah, sc->sc_ah->led_pin); + while (!list_empty(&sc->leds)) { + led = list_first_entry(&sc->leds, struct ath_led, list); diff --git a/package/kernel/mac80211/patches/552-ahb_of.patch b/package/kernel/mac80211/patches/552-ahb_of.patch index 1af1f44b7f..8c20b00dd4 100644 --- a/package/kernel/mac80211/patches/552-ahb_of.patch +++ b/package/kernel/mac80211/patches/552-ahb_of.patch @@ -1,7 +1,5 @@ -Index: backports-2017-11-01/drivers/net/wireless/ath/ath9k/ahb.c -=================================================================== ---- backports-2017-11-01.orig/drivers/net/wireless/ath/ath9k/ahb.c -+++ backports-2017-11-01/drivers/net/wireless/ath/ath9k/ahb.c +--- a/drivers/net/wireless/ath/ath9k/ahb.c ++++ b/drivers/net/wireless/ath/ath9k/ahb.c @@ -19,7 +19,15 @@ #include #include @@ -310,10 +308,8 @@ Index: backports-2017-11-01/drivers/net/wireless/ath/ath9k/ahb.c }, .id_table = ath9k_platform_id_table, }; -Index: backports-2017-11-01/drivers/net/wireless/ath/ath9k/ath9k.h -=================================================================== ---- backports-2017-11-01.orig/drivers/net/wireless/ath/ath9k/ath9k.h -+++ backports-2017-11-01/drivers/net/wireless/ath/ath9k/ath9k.h +--- a/drivers/net/wireless/ath/ath9k/ath9k.h ++++ b/drivers/net/wireless/ath/ath9k/ath9k.h @@ -25,6 +25,7 @@ #include #include diff --git a/package/kernel/mac80211/patches/973-ath10k_fix-band_center_freq-handling-for-VHT160-in-recent-firmwares.patch b/package/kernel/mac80211/patches/973-ath10k_fix-band_center_freq-handling-for-VHT160-in-recent-firmwares.patch index c8f79b815a..657b31f5a8 100644 --- a/package/kernel/mac80211/patches/973-ath10k_fix-band_center_freq-handling-for-VHT160-in-recent-firmwares.patch +++ b/package/kernel/mac80211/patches/973-ath10k_fix-band_center_freq-handling-for-VHT160-in-recent-firmwares.patch @@ -10,7 +10,7 @@ consider that this patch will not work with older firmwares anymore. to avoid un 2 files changed, 8 insertions(+), 10 deletions(-) --- a/drivers/net/wireless/ath/ath10k/mac.c +++ b/drivers/net/wireless/ath/ath10k/mac.c -@@ -4416,13 +4416,6 @@ static struct ieee80211_sta_vht_cap ath1 +@@ -4415,13 +4415,6 @@ static struct ieee80211_sta_vht_cap ath1 vht_cap.cap |= val; } diff --git a/package/kernel/mac80211/patches/974-ath10k_add-LED-and-GPIO-controlling-support-for-various-chipsets.patch b/package/kernel/mac80211/patches/974-ath10k_add-LED-and-GPIO-controlling-support-for-various-chipsets.patch index cb9ecb8574..7b17e111ab 100644 --- a/package/kernel/mac80211/patches/974-ath10k_add-LED-and-GPIO-controlling-support-for-various-chipsets.patch +++ b/package/kernel/mac80211/patches/974-ath10k_add-LED-and-GPIO-controlling-support-for-various-chipsets.patch @@ -475,7 +475,7 @@ v13: static const struct wmi_peer_flags_map wmi_tlv_peer_flags_map = { --- a/drivers/net/wireless/ath/ath10k/wmi.c +++ b/drivers/net/wireless/ath/ath10k/wmi.c -@@ -6575,6 +6575,49 @@ ath10k_wmi_op_gen_peer_set_param(struct +@@ -6580,6 +6580,49 @@ ath10k_wmi_op_gen_peer_set_param(struct return skb; } @@ -525,7 +525,7 @@ v13: static struct sk_buff * ath10k_wmi_op_gen_set_psmode(struct ath10k *ar, u32 vdev_id, enum wmi_sta_ps_mode psmode) -@@ -8076,6 +8119,9 @@ static const struct wmi_ops wmi_ops = { +@@ -8081,6 +8124,9 @@ static const struct wmi_ops wmi_ops = { .fw_stats_fill = ath10k_wmi_main_op_fw_stats_fill, .get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype, .gen_echo = ath10k_wmi_op_gen_echo, @@ -535,7 +535,7 @@ v13: /* .gen_bcn_tmpl not implemented */ /* .gen_prb_tmpl not implemented */ /* .gen_p2p_go_bcn_ie not implemented */ -@@ -8146,6 +8192,8 @@ static const struct wmi_ops wmi_10_1_ops +@@ -8151,6 +8197,8 @@ static const struct wmi_ops wmi_10_1_ops .fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill, .get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype, .gen_echo = ath10k_wmi_op_gen_echo, @@ -544,7 +544,7 @@ v13: /* .gen_bcn_tmpl not implemented */ /* .gen_prb_tmpl not implemented */ /* .gen_p2p_go_bcn_ie not implemented */ -@@ -8217,6 +8265,8 @@ static const struct wmi_ops wmi_10_2_ops +@@ -8222,6 +8270,8 @@ static const struct wmi_ops wmi_10_2_ops .gen_delba_send = ath10k_wmi_op_gen_delba_send, .fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill, .get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype, @@ -553,7 +553,7 @@ v13: /* .gen_pdev_enable_adaptive_cca not implemented */ }; -@@ -8287,6 +8337,8 @@ static const struct wmi_ops wmi_10_2_4_o +@@ -8292,6 +8342,8 @@ static const struct wmi_ops wmi_10_2_4_o .gen_pdev_enable_adaptive_cca = ath10k_wmi_op_gen_pdev_enable_adaptive_cca, .get_vdev_subtype = ath10k_wmi_10_2_4_op_get_vdev_subtype, @@ -562,7 +562,7 @@ v13: /* .gen_bcn_tmpl not implemented */ /* .gen_prb_tmpl not implemented */ /* .gen_p2p_go_bcn_ie not implemented */ -@@ -8362,6 +8414,8 @@ static const struct wmi_ops wmi_10_4_ops +@@ -8367,6 +8419,8 @@ static const struct wmi_ops wmi_10_4_ops .gen_pdev_bss_chan_info_req = ath10k_wmi_10_2_op_gen_pdev_bss_chan_info, .gen_echo = ath10k_wmi_op_gen_echo, .gen_pdev_get_tpc_config = ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config, -- 2.25.1