mac80211: Refresh patches again

A wrong quilt configuration was used last time.

Fixes: ed1e234d87 ("mac80211: refresh patches")
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
Hauke Mehrtens 2021-02-15 22:23:17 +01:00
parent f0933303d6
commit 0cde9a0a65
14 changed files with 124 additions and 110 deletions

View File

@ -37,7 +37,7 @@
void ath10k_thermal_event_temperature(struct ath10k *ar, int temperature); void ath10k_thermal_event_temperature(struct ath10k *ar, int temperature);
--- a/local-symbols --- a/local-symbols
+++ b/local-symbols +++ b/local-symbols
@@ -143,6 +143,7 @@ ATH10K_SNOC= @@ -142,6 +142,7 @@ ATH10K_SNOC=
ATH10K_DEBUG= ATH10K_DEBUG=
ATH10K_DEBUGFS= ATH10K_DEBUGFS=
ATH10K_SPECTRAL= ATH10K_SPECTRAL=

View File

@ -29,6 +29,21 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
- npend = ath9k_hw_numtxpending(ah, i); - npend = ath9k_hw_numtxpending(ah, i);
- if (npend) - if (npend)
- break; - 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) + if (type == ATH9K_RESET_COLD)
+ return true; + return true;
+ +
@ -44,47 +59,35 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+ for (i = 0; i < AR_NUM_QCU; i++) { + for (i = 0; i < AR_NUM_QCU; i++) {
+ if (ath9k_hw_numtxpending(ah, i)) + if (ath9k_hw_numtxpending(ah, i))
+ return true; + return true;
+ } }
} + }
+
- if (ah->external_reset &&
- (npend || type == ATH9K_RESET_COLD)) {
- int reset_err = 0;
+ return false; + 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) +static bool ath9k_hw_external_reset(struct ath_hw *ah, int type)
+{ +{
+ int err; + 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)) + if (!ah->external_reset || !ath9k_hw_need_external_reset(ah, type))
+ return true; + return true;
+
- REG_WRITE(ah, AR_RTC_RESET, 1);
+ ath_dbg(ath9k_hw_common(ah), RESET, + ath_dbg(ath9k_hw_common(ah), RESET,
+ "reset MAC via external reset\n"); + "reset MAC via external reset\n");
+
- REG_WRITE(ah, AR_RTC_RESET, 1);
+ err = ah->external_reset(); + err = ah->external_reset();
+ if (err) { + if (err) {
+ ath_err(ath9k_hw_common(ah), + ath_err(ath9k_hw_common(ah),
+ "External reset failed, err=%d\n", err); + "External reset failed, err=%d\n", err);
+ return false; + return false;
+ } }
+
+ if (AR_SREV_9550(ah)) { + if (AR_SREV_9550(ah)) {
+ REG_WRITE(ah, AR_RTC_RESET, 0); + REG_WRITE(ah, AR_RTC_RESET, 0);
+ udelay(10); + udelay(10);
} + }
+
+ REG_WRITE(ah, AR_RTC_RESET, 1); + REG_WRITE(ah, AR_RTC_RESET, 1);
+ udelay(10); + udelay(10);
+ +

View File

@ -82,7 +82,7 @@
help help
--- a/local-symbols --- a/local-symbols
+++ b/local-symbols +++ b/local-symbols
@@ -86,6 +86,7 @@ ADM8211= @@ -85,6 +85,7 @@ ADM8211=
ATH_COMMON= ATH_COMMON=
WLAN_VENDOR_ATH= WLAN_VENDOR_ATH=
ATH_DEBUG= ATH_DEBUG=

View File

@ -103,8 +103,7 @@
+ GFP_KERNEL); + GFP_KERNEL);
+ if (!led) + if (!led)
+ return -ENOMEM; + return -ENOMEM;
+
- ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin, val);
+ led->gpio = gpio = (struct gpio_led *) (led + 1); + led->gpio = gpio = (struct gpio_led *) (led + 1);
+ _name = (char *) (led->gpio + 1); + _name = (char *) (led->gpio + 1);
+ +
@ -117,7 +116,8 @@
+ ret = ath_add_led(sc, led); + ret = ath_add_led(sc, led);
+ if (unlikely(ret < 0)) + if (unlikely(ret < 0))
+ kfree(led); + kfree(led);
+
- ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin, val);
+ return ret; + return ret;
} }
@ -125,11 +125,11 @@
{ {
- if (!sc->led_registered) - if (!sc->led_registered)
- return; - return;
-
- ath_led_brightness(&sc->led_cdev, LED_OFF);
- led_classdev_unregister(&sc->led_cdev);
+ struct ath_led *led; + 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); - ath9k_hw_gpio_free(sc->sc_ah, sc->sc_ah->led_pin);
+ while (!list_empty(&sc->leds)) { + while (!list_empty(&sc->leds)) {
+ led = list_first_entry(&sc->leds, struct ath_led, list); + led = list_first_entry(&sc->leds, struct ath_led, list);

View File

@ -371,7 +371,7 @@
--- a/local-symbols --- a/local-symbols
+++ b/local-symbols +++ b/local-symbols
@@ -113,6 +113,7 @@ ATH9K_WOW= @@ -112,6 +112,7 @@ ATH9K_WOW=
ATH9K_RFKILL= ATH9K_RFKILL=
ATH9K_CHANNEL_CONTEXT= ATH9K_CHANNEL_CONTEXT=
ATH9K_PCOEM= ATH9K_PCOEM=

View File

@ -114,7 +114,7 @@ v13:
ath10k_core-$(CONFIG_DEV_COREDUMP) += coredump.o ath10k_core-$(CONFIG_DEV_COREDUMP) += coredump.o
--- a/local-symbols --- a/local-symbols
+++ b/local-symbols +++ b/local-symbols
@@ -146,6 +146,7 @@ ATH10K_DEBUG= @@ -145,6 +145,7 @@ ATH10K_DEBUG=
ATH10K_DEBUGFS= ATH10K_DEBUGFS=
ATH10K_SPECTRAL= ATH10K_SPECTRAL=
ATH10K_THERMAL= ATH10K_THERMAL=

View File

@ -1,6 +1,6 @@
--- a/local-symbols --- a/local-symbols
+++ b/local-symbols +++ b/local-symbols
@@ -333,6 +333,7 @@ RT2X00_LIB_FIRMWARE= @@ -332,6 +332,7 @@ RT2X00_LIB_FIRMWARE=
RT2X00_LIB_CRYPTO= RT2X00_LIB_CRYPTO=
RT2X00_LIB_LEDS= RT2X00_LIB_LEDS=
RT2X00_LIB_DEBUGFS= RT2X00_LIB_DEBUGFS=

View File

@ -22,15 +22,16 @@
- rfcsr = rt2800_rfcsr_read(rt2x00dev, 16); - rfcsr = rt2800_rfcsr_read(rt2x00dev, 16);
- rt2x00_set_field8(&rfcsr, RFCSR16_SDM_MODE_MT7620, 0x80); - rt2x00_set_field8(&rfcsr, RFCSR16_SDM_MODE_MT7620, 0x80);
- rt2800_rfcsr_write(rt2x00dev, 16, rfcsr); - rt2800_rfcsr_write(rt2x00dev, 16, rfcsr);
-
- rfcsr = rt2800_rfcsr_read(rt2x00dev, 21);
- rt2x00_set_field8(&rfcsr, RFCSR21_BIT8, 1);
- rt2800_rfcsr_write(rt2x00dev, 21, rfcsr);
+ if (rt2800_hw_get_chipver(rt2x00dev) > 1) { + if (rt2800_hw_get_chipver(rt2x00dev) > 1) {
+ /* Default: XO=20MHz , SDM mode */ + /* Default: XO=20MHz , SDM mode */
+ rfcsr = rt2800_rfcsr_read(rt2x00dev, 16); + rfcsr = rt2800_rfcsr_read(rt2x00dev, 16);
+ rt2x00_set_field8(&rfcsr, RFCSR16_SDM_MODE_MT7620, 0x80); + rt2x00_set_field8(&rfcsr, RFCSR16_SDM_MODE_MT7620, 0x80);
+ rt2800_rfcsr_write(rt2x00dev, 16, rfcsr); + rt2800_rfcsr_write(rt2x00dev, 16, rfcsr);
+
- rfcsr = rt2800_rfcsr_read(rt2x00dev, 21);
- rt2x00_set_field8(&rfcsr, RFCSR21_BIT8, 1);
- rt2800_rfcsr_write(rt2x00dev, 21, rfcsr);
+ rfcsr = rt2800_rfcsr_read(rt2x00dev, 21); + rfcsr = rt2800_rfcsr_read(rt2x00dev, 21);
+ rt2x00_set_field8(&rfcsr, RFCSR21_BIT8, 1); + rt2x00_set_field8(&rfcsr, RFCSR21_BIT8, 1);
+ rt2800_rfcsr_write(rt2x00dev, 21, rfcsr); + rt2800_rfcsr_write(rt2x00dev, 21, rfcsr);
@ -216,6 +217,10 @@
- rt2800_rfcsr_write(rt2x00dev, 28, 0x61); - rt2800_rfcsr_write(rt2x00dev, 28, 0x61);
- rt2800_rfcsr_write(rt2x00dev, 29, 0xB5); - rt2800_rfcsr_write(rt2x00dev, 29, 0xB5);
- rt2800_rfcsr_write(rt2x00dev, 43, 0x02); - rt2800_rfcsr_write(rt2x00dev, 43, 0x02);
-
- rt2800_rfcsr_write(rt2x00dev, 28, 0x62);
- rt2800_rfcsr_write(rt2x00dev, 29, 0xAD);
- rt2800_rfcsr_write(rt2x00dev, 39, 0x80);
+ if (rt2800_hw_get_chipver(rt2x00dev) > 1) { + if (rt2800_hw_get_chipver(rt2x00dev) > 1) {
+ rt2800_rfcsr_write(rt2x00dev, 11, 0x21); + rt2800_rfcsr_write(rt2x00dev, 11, 0x21);
+ if (rt2800_clk_is_20mhz(rt2x00dev)) + if (rt2800_clk_is_20mhz(rt2x00dev))
@ -239,10 +244,7 @@
+ rt2800_rfcsr_write(rt2x00dev, 29, 0xB5); + rt2800_rfcsr_write(rt2x00dev, 29, 0xB5);
+ rt2800_rfcsr_write(rt2x00dev, 43, 0x02); + rt2800_rfcsr_write(rt2x00dev, 43, 0x02);
+ } + }
+
- rt2800_rfcsr_write(rt2x00dev, 28, 0x62);
- rt2800_rfcsr_write(rt2x00dev, 29, 0xAD);
- rt2800_rfcsr_write(rt2x00dev, 39, 0x80);
+ if (rt2800_hw_get_chipver(rt2x00dev) > 1 && + if (rt2800_hw_get_chipver(rt2x00dev) > 1 &&
+ rt2800_hw_get_chipeco(rt2x00dev) >= 2) { + rt2800_hw_get_chipeco(rt2x00dev) >= 2) {
+ rt2800_rfcsr_write(rt2x00dev, 28, 0x62); + rt2800_rfcsr_write(rt2x00dev, 28, 0x62);
@ -286,6 +288,33 @@
- rt2800_rfcsr_write_chanreg(rt2x00dev, 59, 0x6B); - rt2800_rfcsr_write_chanreg(rt2x00dev, 59, 0x6B);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 60, 0xF7); - rt2800_rfcsr_write_chanreg(rt2x00dev, 60, 0xF7);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 61, 0x09); - rt2800_rfcsr_write_chanreg(rt2x00dev, 61, 0x09);
-
- rt2800_rfcsr_write_chanreg(rt2x00dev, 10, 0x51);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x06);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 19, 0xA7);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 28, 0x2C);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x64);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 8, 0x51);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 9, 0x36);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 11, 0x53);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x16);
-
- rt2800_rfcsr_write_chanreg(rt2x00dev, 47, 0x6C);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 48, 0xFC);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 49, 0x1F);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 54, 0x27);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x66);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 59, 0x6B);
-
- /* Initialize RF channel register for DRQFN */
- rt2800_rfcsr_write_chanreg(rt2x00dev, 43, 0xD3);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 44, 0xE3);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 45, 0xE5);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 47, 0x28);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x68);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 56, 0xF7);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 58, 0x02);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 60, 0xC7);
+ if (rt2800_hw_get_chipver(rt2x00dev) > 1) { + if (rt2800_hw_get_chipver(rt2x00dev) > 1) {
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 9, 0x47); + rt2800_rfcsr_write_chanreg(rt2x00dev, 9, 0x47);
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 10, 0x71); + rt2800_rfcsr_write_chanreg(rt2x00dev, 10, 0x71);
@ -318,16 +347,7 @@
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 60, 0xF7); + rt2800_rfcsr_write_chanreg(rt2x00dev, 60, 0xF7);
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 61, 0x09); + rt2800_rfcsr_write_chanreg(rt2x00dev, 61, 0x09);
+ } + }
+
- rt2800_rfcsr_write_chanreg(rt2x00dev, 10, 0x51);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x06);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 19, 0xA7);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 28, 0x2C);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x64);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 8, 0x51);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 9, 0x36);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 11, 0x53);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x16);
+ if (rt2800_hw_get_chipver(rt2x00dev) > 1 && + if (rt2800_hw_get_chipver(rt2x00dev) > 1 &&
+ rt2800_hw_get_chipeco(rt2x00dev) >= 2) { + rt2800_hw_get_chipeco(rt2x00dev) >= 2) {
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 10, 0x51); + rt2800_rfcsr_write_chanreg(rt2x00dev, 10, 0x51);
@ -339,13 +359,7 @@
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 9, 0x36); + rt2800_rfcsr_write_chanreg(rt2x00dev, 9, 0x36);
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 11, 0x53); + rt2800_rfcsr_write_chanreg(rt2x00dev, 11, 0x53);
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x16); + rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x16);
+
- rt2800_rfcsr_write_chanreg(rt2x00dev, 47, 0x6C);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 48, 0xFC);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 49, 0x1F);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 54, 0x27);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x66);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 59, 0x6B);
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 47, 0x6C); + rt2800_rfcsr_write_chanreg(rt2x00dev, 47, 0x6C);
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 48, 0xFC); + rt2800_rfcsr_write_chanreg(rt2x00dev, 48, 0xFC);
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 49, 0x1F); + rt2800_rfcsr_write_chanreg(rt2x00dev, 49, 0x1F);
@ -353,16 +367,7 @@
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x66); + rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x66);
+ rt2800_rfcsr_write_chanreg(rt2x00dev, 59, 0x6B); + rt2800_rfcsr_write_chanreg(rt2x00dev, 59, 0x6B);
+ } + }
+
- /* Initialize RF channel register for DRQFN */
- rt2800_rfcsr_write_chanreg(rt2x00dev, 43, 0xD3);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 44, 0xE3);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 45, 0xE5);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 47, 0x28);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x68);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 56, 0xF7);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 58, 0x02);
- rt2800_rfcsr_write_chanreg(rt2x00dev, 60, 0xC7);
+ if (rt2800_hw_get_chippkg(rt2x00dev) == 0 && + if (rt2800_hw_get_chippkg(rt2x00dev) == 0 &&
+ rt2800_hw_get_chipver(rt2x00dev) == 1) { + rt2800_hw_get_chipver(rt2x00dev) == 1) {
+ /* Initialize RF channel register for DRQFN */ + /* Initialize RF channel register for DRQFN */

View File

@ -53,20 +53,22 @@
- idle = rt2800_register_read(rt2x00dev, CH_IDLE_STA); - idle = rt2800_register_read(rt2x00dev, CH_IDLE_STA);
- busy = rt2800_register_read(rt2x00dev, CH_BUSY_STA); - busy = rt2800_register_read(rt2x00dev, CH_BUSY_STA);
- busy_ext = rt2800_register_read(rt2x00dev, CH_BUSY_STA_SEC); - busy_ext = rt2800_register_read(rt2x00dev, CH_BUSY_STA_SEC);
+ survey->channel = &rt2x00dev->bands[band].channels[idx]; -
- if (idle || busy) { - if (idle || busy) {
- survey->filled = SURVEY_INFO_TIME | - survey->filled = SURVEY_INFO_TIME |
- SURVEY_INFO_TIME_BUSY | - SURVEY_INFO_TIME_BUSY |
- SURVEY_INFO_TIME_EXT_BUSY; - SURVEY_INFO_TIME_EXT_BUSY;
+ survey->filled = SURVEY_INFO_TIME | -
+ SURVEY_INFO_TIME_BUSY |
+ SURVEY_INFO_TIME_EXT_BUSY;
- survey->time = (idle + busy) / 1000; - survey->time = (idle + busy) / 1000;
- survey->time_busy = busy / 1000; - survey->time_busy = busy / 1000;
- survey->time_ext_busy = busy_ext / 1000; - survey->time_ext_busy = busy_ext / 1000;
- } - }
+ survey->channel = &rt2x00dev->bands[band].channels[idx];
+
+ survey->filled = SURVEY_INFO_TIME |
+ SURVEY_INFO_TIME_BUSY |
+ SURVEY_INFO_TIME_EXT_BUSY;
+
+ survey->time = div_u64(chan_survey->time_idle + chan_survey->time_busy, 1000); + survey->time = div_u64(chan_survey->time_idle + chan_survey->time_busy, 1000);
+ survey->time_busy = div_u64(chan_survey->time_busy, 1000); + survey->time_busy = div_u64(chan_survey->time_busy, 1000);
+ survey->time_ext_busy = div_u64(chan_survey->time_ext_busy, 1000); + survey->time_ext_busy = div_u64(chan_survey->time_ext_busy, 1000);

View File

@ -166,7 +166,8 @@
#define AES_CCM_H #define AES_CCM_H
-#include "aead_api.h" -#include "aead_api.h"
- +#include <linux/crypto.h>
-#define CCM_AAD_LEN 32 -#define CCM_AAD_LEN 32
- -
-static inline struct crypto_aead * -static inline struct crypto_aead *
@ -194,8 +195,7 @@
- be16_to_cpup((__be16 *)aad), - be16_to_cpup((__be16 *)aad),
- data, data_len, mic); - data, data_len, mic);
-} -}
+#include <linux/crypto.h> -
-static inline void ieee80211_aes_key_free(struct crypto_aead *tfm) -static inline void ieee80211_aes_key_free(struct crypto_aead *tfm)
-{ -{
- return aead_key_free(tfm); - return aead_key_free(tfm);
@ -331,10 +331,10 @@
#define AES_GCM_H #define AES_GCM_H
-#include "aead_api.h" -#include "aead_api.h"
-
-#define GCM_AAD_LEN 32
+#include <linux/crypto.h> +#include <linux/crypto.h>
-#define GCM_AAD_LEN 32
-
-static inline int ieee80211_aes_gcm_encrypt(struct crypto_aead *tfm, -static inline int ieee80211_aes_gcm_encrypt(struct crypto_aead *tfm,
- u8 *j_0, u8 *aad, u8 *data, - u8 *j_0, u8 *aad, u8 *data,
- size_t data_len, u8 *mic) - size_t data_len, u8 *mic)

View File

@ -133,34 +133,37 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
-static void fq_recalc_backlog(struct fq *fq, -static void fq_recalc_backlog(struct fq *fq,
- struct fq_tin *tin, - struct fq_tin *tin,
- struct fq_flow *flow) - struct fq_flow *flow)
+static struct fq_flow *fq_find_fattest_flow(struct fq *fq) -{
{
- struct fq_flow *i; - struct fq_flow *i;
+ struct fq_tin *tin; -
+ struct fq_flow *flow = NULL;
+ u32 len = 0;
+ int i;
- if (list_empty(&flow->backlogchain)) - if (list_empty(&flow->backlogchain))
- list_add_tail(&flow->backlogchain, &fq->backlogs); - list_add_tail(&flow->backlogchain, &fq->backlogs);
+ for_each_set_bit(i, fq->flows_bitmap, fq->flows_cnt) { -
+ struct fq_flow *cur = &fq->flows[i];
+ unsigned int cur_len;
- i = flow; - i = flow;
- list_for_each_entry_continue_reverse(i, &fq->backlogs, - list_for_each_entry_continue_reverse(i, &fq->backlogs,
- backlogchain) - backlogchain)
- if (i->backlog > flow->backlog) - if (i->backlog > flow->backlog)
- break; - break;
+static struct fq_flow *fq_find_fattest_flow(struct fq *fq)
+{
+ struct fq_tin *tin;
+ struct fq_flow *flow = NULL;
+ u32 len = 0;
+ int i;
+
+ for_each_set_bit(i, fq->flows_bitmap, fq->flows_cnt) {
+ struct fq_flow *cur = &fq->flows[i];
+ unsigned int cur_len;
+
+ cur_len = cur->backlog; + cur_len = cur->backlog;
+ if (cur_len <= len) + if (cur_len <= len)
+ continue; + continue;
+
- list_move(&flow->backlogchain, &i->backlogchain);
+ flow = cur; + flow = cur;
+ len = cur_len; + len = cur_len;
+ } + }
+
- list_move(&flow->backlogchain, &i->backlogchain);
+ list_for_each_entry(tin, &fq->tin_backlog, tin_list) { + list_for_each_entry(tin, &fq->tin_backlog, tin_list) {
+ unsigned int cur_len = tin->default_flow.backlog; + unsigned int cur_len = tin->default_flow.backlog;
+ +

View File

@ -28,13 +28,14 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
- (!(key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) || - (!(key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) ||
- key->conf.cipher == WLAN_CIPHER_SUITE_TKIP)) - key->conf.cipher == WLAN_CIPHER_SUITE_TKIP))
- offload = false; - offload = false;
+ sdata->control_port_protocol == ehdr->h_proto)) -
+ goto skip_offload;
- if (offload) - if (offload)
- ieee80211_8023_xmit(sdata, dev, sta, key, skb); - ieee80211_8023_xmit(sdata, dev, sta, key, skb);
- else - else
- ieee80211_subif_start_xmit(skb, dev); - ieee80211_subif_start_xmit(skb, dev);
+ sdata->control_port_protocol == ehdr->h_proto))
+ goto skip_offload;
+ key = rcu_dereference(sta->ptk[sta->ptk_idx]); + key = rcu_dereference(sta->ptk[sta->ptk_idx]);
+ if (!key) + if (!key)
+ key = rcu_dereference(sdata->default_unicast_key); + key = rcu_dereference(sdata->default_unicast_key);
@ -45,7 +46,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+ +
+ ieee80211_8023_xmit(sdata, dev, sta, key, skb); + ieee80211_8023_xmit(sdata, dev, sta, key, skb);
+ goto out; + goto out;
+
+skip_offload: +skip_offload:
+ ieee80211_subif_start_xmit(skb, dev); + ieee80211_subif_start_xmit(skb, dev);
out: out:

View File

@ -27,8 +27,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
- if (!mi->avg_ampdu_len) - if (!mi->avg_ampdu_len)
- return AVG_AMPDU_SIZE; - return AVG_AMPDU_SIZE;
+ int duration; + int duration;
+
- return MINSTREL_TRUNC(mi->avg_ampdu_len);
+ if (mi->avg_ampdu_len) + if (mi->avg_ampdu_len)
+ return MINSTREL_TRUNC(mi->avg_ampdu_len); + return MINSTREL_TRUNC(mi->avg_ampdu_len);
+ +
@ -36,7 +35,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+ return 1; + return 1;
+ +
+ duration = minstrel_get_duration(mi->max_tp_rate[0]); + duration = minstrel_get_duration(mi->max_tp_rate[0]);
+
- return MINSTREL_TRUNC(mi->avg_ampdu_len);
+ if (duration > 400 * 1000) + if (duration > 400 * 1000)
+ return 2; + return 2;
+ +

View File

@ -179,14 +179,14 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+ if (!rate) + if (!rate)
return; return;
- } - }
-
- i = 0; - i = 0;
- if (n_rates > 1) { - if (n_rates > 1) {
- random = prandom_u32(); - random = prandom_u32();
- i = random % n_rates; - i = random % n_rates;
- } - }
- probe_rate = rates[i]; - probe_rate = rates[i];
-
-out: -out:
- mi->sample_rate = probe_rate; - mi->sample_rate = probe_rate;
+ mi->sample_rate = rate; + mi->sample_rate = rate;
@ -584,13 +584,13 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
- -
- if (!(mi->supported[sample_group] & BIT(sample_idx))) - if (!(mi->supported[sample_group] & BIT(sample_idx)))
- return -1; - return -1;
- + u8 seq;
- mrs = &mg->rates[sample_idx]; - mrs = &mg->rates[sample_idx];
- sample_idx += MI_RATE(sample_group, 0); - sample_idx += MI_RATE(sample_group, 0);
- -
- tp_rate1 = mi->max_tp_rate[0]; - tp_rate1 = mi->max_tp_rate[0];
+ u8 seq; -
- /* Set tp_rate2 to the second highest max_tp_rate */ - /* Set tp_rate2 to the second highest max_tp_rate */
- if (minstrel_get_duration(mi->max_tp_rate[0]) > - if (minstrel_get_duration(mi->max_tp_rate[0]) >
- minstrel_get_duration(mi->max_tp_rate[1])) { - minstrel_get_duration(mi->max_tp_rate[1])) {
@ -673,8 +673,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
- else - else
- sample_idx = minstrel_get_sample_rate(mp, mi); - sample_idx = minstrel_get_sample_rate(mp, mi);
+ return; + return;
+
- if (sample_idx < 0)
+ if (mp->hw->max_rates == 1 && mp->sample_switch && + if (mp->hw->max_rates == 1 && mp->sample_switch &&
+ (mi->total_packets_cur >= SAMPLE_SWITCH_THR || + (mi->total_packets_cur >= SAMPLE_SWITCH_THR ||
+ mp->sample_switch == 1)) + mp->sample_switch == 1))
@ -682,7 +681,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+ +
+ if (time_is_before_jiffies(mi->sample_time)) + if (time_is_before_jiffies(mi->sample_time))
+ return; + return;
+
- if (sample_idx < 0)
+ mi->sample_time = jiffies + MINSTREL_SAMPLE_INTERVAL; + mi->sample_time = jiffies + MINSTREL_SAMPLE_INTERVAL;
+ sample_idx = minstrel_ht_get_sample_rate(mp, mi); + sample_idx = minstrel_ht_get_sample_rate(mp, mi);
+ if (!sample_idx) + if (!sample_idx)