mac80211: Update to version 5.11.22-1
authorHauke Mehrtens <hauke@hauke-m.de>
Mon, 4 Oct 2021 21:48:20 +0000 (23:48 +0200)
committerHauke Mehrtens <hauke@hauke-m.de>
Sat, 23 Oct 2021 21:17:23 +0000 (23:17 +0200)
The removed patches were applied upstream.
This backports version 5.11.22 and later does not support kernel
versions < 4.4, this allows us to remove some patches too.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
88 files changed:
package/kernel/mac80211/Makefile
package/kernel/mac80211/patches/ath/400-ath_move_debug_code.patch
package/kernel/mac80211/patches/ath/402-ath_regd_optional.patch
package/kernel/mac80211/patches/ath/404-regd_no_assoc_hints.patch
package/kernel/mac80211/patches/ath/406-ath_relax_default_regd.patch
package/kernel/mac80211/patches/ath10k/080-ath10k_thermal_config.patch
package/kernel/mac80211/patches/ath10k/921-ath10k_init_devices_synchronously.patch
package/kernel/mac80211/patches/ath10k/922-ath10k-increase-rx-buffer-size-to-2048.patch
package/kernel/mac80211/patches/ath10k/930-ath10k_add_tpt_led_trigger.patch
package/kernel/mac80211/patches/ath10k/974-ath10k_add-LED-and-GPIO-controlling-support-for-various-chipsets.patch
package/kernel/mac80211/patches/ath10k/975-ath10k-use-tpt-trigger-by-default.patch
package/kernel/mac80211/patches/ath10k/984-ath10k-Try-to-get-mac-address-from-dts.patch
package/kernel/mac80211/patches/ath9k/356-Revert-ath9k-interpret-requested-txpower-in-EIRP-dom.patch
package/kernel/mac80211/patches/ath9k/365-ath9k-adjust-tx-power-reduction-for-US-regulatory-do.patch
package/kernel/mac80211/patches/ath9k/410-ath9k_allow_adhoc_and_ap.patch
package/kernel/mac80211/patches/ath9k/450-ath9k-enabled-MFP-capability-unconditionally.patch
package/kernel/mac80211/patches/ath9k/501-ath9k_ahb_init.patch
package/kernel/mac80211/patches/ath9k/530-ath9k_extra_leds.patch
package/kernel/mac80211/patches/ath9k/542-ath9k_debugfs_diag.patch
package/kernel/mac80211/patches/ath9k/543-ath9k_entropy_from_adc.patch
package/kernel/mac80211/patches/ath9k/544-ath9k-ar933x-usb-hang-workaround.patch
package/kernel/mac80211/patches/ath9k/545-ath9k_ani_ws_detect.patch
package/kernel/mac80211/patches/ath9k/548-ath9k_enable_gpio_chip.patch
package/kernel/mac80211/patches/ath9k/549-ath9k_enable_gpio_buttons.patch
package/kernel/mac80211/patches/ath9k/551-ath9k_ubnt_uap_plus_hsr.patch
package/kernel/mac80211/patches/ath9k/552-ath9k-ahb_of.patch
package/kernel/mac80211/patches/brcm/812-b43-add-antenna-control.patch
package/kernel/mac80211/patches/brcm/862-brcmfmac-Disable-power-management.patch
package/kernel/mac80211/patches/brcm/998-survey.patch
package/kernel/mac80211/patches/build/003-remove_bogus_modparams.patch
package/kernel/mac80211/patches/build/004-kconfig_backport_fix.patch [deleted file]
package/kernel/mac80211/patches/build/010-disable_rfkill.patch [deleted file]
package/kernel/mac80211/patches/build/050-lib80211_option.patch
package/kernel/mac80211/patches/build/060-no_local_ssb_bcma.patch
package/kernel/mac80211/patches/mwl/700-mwl8k-missing-pci-id-for-WNR854T.patch
package/kernel/mac80211/patches/mwl/940-mwl8k_init_devices_synchronously.patch
package/kernel/mac80211/patches/rt2x00/002-rt2x00-define-RF5592-in-init_eeprom-routine.patch
package/kernel/mac80211/patches/rt2x00/602-rt2x00-introduce-rt2x00eeprom.patch
package/kernel/mac80211/patches/rt2x00/606-rt2x00-allow_disabling_bands_through_platform_data.patch
package/kernel/mac80211/patches/rt2x00/607-rt2x00-add_platform_data_mac_addr.patch
package/kernel/mac80211/patches/rt2x00/608-rt2x00-allow_disabling_bands_through_dts.patch
package/kernel/mac80211/patches/rt2x00/610-rt2x00-change-led-polarity-from-OF.patch
package/kernel/mac80211/patches/rt2x00/611-rt2x00-add-AP+STA-support.patch
package/kernel/mac80211/patches/rt2x00/612-rt2x00-led-tpt-trigger-support.patch
package/kernel/mac80211/patches/rt2x00/650-rt2x00-add-support-for-external-PA-on-MT7620.patch
package/kernel/mac80211/patches/rt2x00/982-rt2x00-add-rf-self-txdc-calibration.patch
package/kernel/mac80211/patches/rt2x00/983-rt2x00-add-r-calibration.patch
package/kernel/mac80211/patches/rt2x00/984-rt2x00-add-rxdcoc-calibration.patch
package/kernel/mac80211/patches/rt2x00/985-rt2x00-add-rxiq-calibration.patch
package/kernel/mac80211/patches/rt2x00/986-rt2x00-add-TX-LOFT-calibration.patch
package/kernel/mac80211/patches/rt2x00/991-rt2x00-mt7620-differentiate-based-on-SoC-CHIP_VER.patch
package/kernel/mac80211/patches/rt2x00/992-rt2x00-save-survey-for-every-channel-visited.patch [deleted file]
package/kernel/mac80211/patches/rtl/002-v5.13-rtlwifi-implement-set_tim-by-update-beacon-content.patch
package/kernel/mac80211/patches/subsys/010-sync-nl80211_h.patch
package/kernel/mac80211/patches/subsys/110-mac80211_keep_keys_on_stop_ap.patch
package/kernel/mac80211/patches/subsys/150-disable_addr_notifier.patch
package/kernel/mac80211/patches/subsys/210-ap_scan.patch
package/kernel/mac80211/patches/subsys/300-cfg80211-support-immediate-reconnect-request-hint.patch [deleted file]
package/kernel/mac80211/patches/subsys/301-mac80211-support-driver-based-disconnect-with-reconn.patch [deleted file]
package/kernel/mac80211/patches/subsys/302-cfg80211-Add-support-to-configure-SAE-PWE-value-to-d.patch [deleted file]
package/kernel/mac80211/patches/subsys/311-net-fq_impl-drop-get_default_func-move-default-flow-.patch
package/kernel/mac80211/patches/subsys/312-net-fq_impl-do-not-maintain-a-backlog-sorted-list-of.patch
package/kernel/mac80211/patches/subsys/315-mac80211-add-rx-decapsulation-offload-support.patch
package/kernel/mac80211/patches/subsys/316-mac80211-enable-QoS-support-for-nl80211-ctrl-port.patch
package/kernel/mac80211/patches/subsys/320-mac80211_hwsim-add-6GHz-channels.patch
package/kernel/mac80211/patches/subsys/321-mac80211_hwsim-make-6-GHz-channels-usable.patch
package/kernel/mac80211/patches/subsys/371-mac80211-don-t-apply-flow-control-on-management-fram.patch
package/kernel/mac80211/patches/subsys/372-mac80211-set-sk_pacing_shift-for-802.3-txpath.patch
package/kernel/mac80211/patches/subsys/373-mac80211-support-Rx-timestamp-calculation-for-all-pr.patch [deleted file]
package/kernel/mac80211/patches/subsys/374-mac80211-move-A-MPDU-session-check-from-minstrel_ht-.patch
package/kernel/mac80211/patches/subsys/375-mac80211-call-ieee80211_tx_h_rate_ctrl-when-dequeue.patch
package/kernel/mac80211/patches/subsys/376-mac80211-add-rate-control-support-for-encap-offload.patch
package/kernel/mac80211/patches/subsys/379-mac80211-fix-starting-aggregation-sessions-on-mesh-i.patch
package/kernel/mac80211/patches/subsys/380-mac80211-introduce-aql_enable-node-in-debugfs.patch
package/kernel/mac80211/patches/subsys/381-mac80211-rearrange-struct-txq_info-for-fewer-holes.patch
package/kernel/mac80211/patches/subsys/382-mac80211-Switch-to-a-virtual-time-based-airtime-sche.patch
package/kernel/mac80211/patches/subsys/384-nl80211-add-common-API-to-configure-SAR-power-limita.patch [deleted file]
package/kernel/mac80211/patches/subsys/385-mac80211-add-ieee80211_set_sar_specs.patch [deleted file]
package/kernel/mac80211/patches/subsys/386-mac80211-check-per-vif-offload_flags-in-Tx-path.patch
package/kernel/mac80211/patches/subsys/387-nl80211-add-support-for-BSS-coloring.patch
package/kernel/mac80211/patches/subsys/388-mac80211-add-support-for-BSS-color-change.patch
package/kernel/mac80211/patches/subsys/389-ieee80211-add-TWT-element-definitions.patch
package/kernel/mac80211/patches/subsys/390-mac80211-introduce-individual-TWT-support-in-AP-mode.patch
package/kernel/mac80211/patches/subsys/391-wireless-align-some-HE-capabilities-with-the-spec.patch
package/kernel/mac80211/patches/subsys/392-wireless-fix-spelling-of-A-MSDU-in-HE-capabilities.patch
package/kernel/mac80211/patches/subsys/393-wireless-align-HE-capabilities-A-MPDU-Length-Exponen.patch
package/kernel/mac80211/patches/subsys/500-mac80211_configure_antenna_gain.patch
package/kernel/mac80211/patches/subsys/782-net-next-1-of-net-pass-the-dst-buffer-to-of_get_mac_address.patch

index 0cbcc03d64feacd4f51b81263dff38af98e057b8..99e96e64d0119c71e251104f7916efe1783644e0 100644 (file)
@@ -10,10 +10,10 @@ include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=mac80211
 
-PKG_VERSION:=5.10.68-1
+PKG_VERSION:=5.11.22-1
 PKG_RELEASE:=1
-PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v5.10.68/
-PKG_HASH:=bba161b0084590c677a84b80993709e388a3c478f29ed0c475d4fce1b9162968
+PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v5.11.22/
+PKG_HASH:=35c23dd182711a3a6f671a673c2e0ace2ffdd25bbd1fb917e428d04924141299
 
 PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz
 PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/backports-$(PKG_VERSION)
index eacc72776e0f4a1ceaf6ee8671f6fd05defe1873..db10c45104d788329c260aa6779898e90c1dc356 100644 (file)
@@ -14,7 +14,7 @@
  CFLAGS_trace.o := -I$(src)
 --- a/drivers/net/wireless/ath/ath.h
 +++ b/drivers/net/wireless/ath/ath.h
-@@ -317,14 +317,7 @@ void _ath_dbg(struct ath_common *common,
+@@ -316,14 +316,7 @@ void _ath_dbg(struct ath_common *common,
  #endif /* CPTCFG_ATH_DEBUG */
  
  /** Returns string describing opmode, or NULL if unknown mode. */
index bf87d3551a18bd3ceb35f9ab98e5ee80609952f7..506beb79c3aa34e5f0abbd087a41ec02965b0d67 100644 (file)
@@ -37,7 +37,7 @@
        for (band = 0; band < NUM_NL80211_BANDS; band++) {
                if (!wiphy->bands[band])
                        continue;
-@@ -378,6 +387,9 @@ ath_reg_apply_ir_flags(struct wiphy *wip
+@@ -379,6 +388,9 @@ ath_reg_apply_ir_flags(struct wiphy *wip
  {
        struct ieee80211_supported_band *sband;
  
@@ -47,7 +47,7 @@
        sband = wiphy->bands[NL80211_BAND_2GHZ];
        if (!sband)
                return;
-@@ -407,6 +419,9 @@ static void ath_reg_apply_radar_flags(st
+@@ -408,6 +420,9 @@ static void ath_reg_apply_radar_flags(st
        struct ieee80211_channel *ch;
        unsigned int i;
  
@@ -57,7 +57,7 @@
        if (!wiphy->bands[NL80211_BAND_5GHZ])
                return;
  
-@@ -639,6 +654,10 @@ ath_regd_init_wiphy(struct ath_regulator
+@@ -640,6 +655,10 @@ ath_regd_init_wiphy(struct ath_regulator
        const struct ieee80211_regdomain *regd;
  
        wiphy->reg_notifier = reg_notifier;
@@ -82,7 +82,7 @@
        help
 --- a/local-symbols
 +++ b/local-symbols
-@@ -85,6 +85,7 @@ ADM8211=
+@@ -76,6 +76,7 @@ ADM8211=
  ATH_COMMON=
  WLAN_VENDOR_ATH=
  ATH_DEBUG=
index c6dc184e28c809eac543bdd18bc3bb1d64894805..bbbd8403e4ff3fb10cfe5a821c4e9501fcaadd70 100644 (file)
@@ -1,6 +1,6 @@
 --- a/net/wireless/reg.c
 +++ b/net/wireless/reg.c
-@@ -3252,6 +3252,8 @@ void regulatory_hint_country_ie(struct w
+@@ -3269,6 +3269,8 @@ void regulatory_hint_country_ie(struct w
        enum environment_cap env = ENVIRON_ANY;
        struct regulatory_request *request = NULL, *lr;
  
@@ -9,7 +9,7 @@
        /* IE len must be evenly divisible by 2 */
        if (country_ie_len & 0x01)
                return;
-@@ -3503,6 +3505,7 @@ static bool is_wiphy_all_set_reg_flag(en
+@@ -3520,6 +3522,7 @@ static bool is_wiphy_all_set_reg_flag(en
  
  void regulatory_hint_disconnect(void)
  {
index 35b0f2b76eff9b1fd0f69c98aaaf61da8ac59921..ee4e461342a9400aa61b7670896891265270677e 100644 (file)
@@ -39,7 +39,7 @@
  bool ath_is_world_regd(struct ath_regulatory *reg)
  {
        return is_wwr_sku(ath_regd_get_eepromRD(reg));
-@@ -658,6 +666,9 @@ ath_regd_init_wiphy(struct ath_regulator
+@@ -659,6 +667,9 @@ ath_regd_init_wiphy(struct ath_regulator
        if (IS_ENABLED(CPTCFG_ATH_USER_REGD))
                return 0;
  
index d183419a47bd0be606b37e5ca6898a1075c11755..c17001eecbbacce4be44fc6b2dbb1a94679f99c1 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath10k/Kconfig
 +++ b/drivers/net/wireless/ath/ath10k/Kconfig
-@@ -86,6 +86,12 @@ config ATH10K_TRACING
+@@ -85,6 +85,12 @@ config ATH10K_TRACING
        help
          Select this to ath10k use tracing infrastructure.
  
@@ -37,7 +37,7 @@
  void ath10k_thermal_event_temperature(struct ath10k *ar, int temperature);
 --- a/local-symbols
 +++ b/local-symbols
-@@ -144,6 +144,7 @@ ATH10K_SNOC=
+@@ -135,6 +135,7 @@ ATH10K_SNOC=
  ATH10K_DEBUG=
  ATH10K_DEBUGFS=
  ATH10K_SPECTRAL=
index e004acc340f7ea914a959c2406999911d4c93423..cca65be25b18f45aabe7624712fc027a19ac50bc 100644 (file)
@@ -14,7 +14,7 @@ Signed-off-by: Sven Eckelmann <sven@open-mesh.com>
 
 --- a/drivers/net/wireless/ath/ath10k/core.c
 +++ b/drivers/net/wireless/ath/ath10k/core.c
-@@ -3189,6 +3189,16 @@ int ath10k_core_register(struct ath10k *
+@@ -3329,6 +3329,16 @@ int ath10k_core_register(struct ath10k *
  
        queue_work(ar->workqueue, &ar->register_work);
  
index 8f7a60eec81ece22c08a268afbda8de07420c56b..333131edc5f28ec765be965556c7cd0f13b6dddb 100644 (file)
@@ -26,7 +26,7 @@ Forwarded: https://patchwork.kernel.org/patch/11367055/
 
 --- a/drivers/net/wireless/ath/ath10k/htt.h
 +++ b/drivers/net/wireless/ath/ath10k/htt.h
-@@ -2243,7 +2243,7 @@ struct htt_rx_chan_info {
+@@ -2241,7 +2241,7 @@ struct htt_rx_chan_info {
   * Should be: sizeof(struct htt_host_rx_desc) + max rx MSDU size,
   * rounded up to a cache line size.
   */
index 517a98206d90ba1c707d158544a73bd6693e03c3..74b3292e0c34dd33e55957bbddf8028ea244e5ed 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath10k/mac.c
 +++ b/drivers/net/wireless/ath/ath10k/mac.c
-@@ -9709,6 +9709,21 @@ static int ath10k_mac_init_rd(struct ath
+@@ -9708,6 +9708,21 @@ static int ath10k_mac_init_rd(struct ath
        return 0;
  }
  
@@ -22,7 +22,7 @@
  int ath10k_mac_register(struct ath10k *ar)
  {
        static const u32 cipher_suites[] = {
-@@ -10058,6 +10073,12 @@ int ath10k_mac_register(struct ath10k *a
+@@ -10057,6 +10072,12 @@ int ath10k_mac_register(struct ath10k *a
  
        ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER;
  
index ce8effe3c3d8c1a66141b9f5f70cf56a96a73a97..6e1c13b15d3d2d857f5afc62ce4eb642ce56d484 100644 (file)
@@ -114,7 +114,7 @@ v13:
  ath10k_core-$(CONFIG_DEV_COREDUMP) += coredump.o
 --- a/local-symbols
 +++ b/local-symbols
-@@ -145,6 +145,7 @@ ATH10K_DEBUG=
+@@ -136,6 +136,7 @@ ATH10K_DEBUG=
  ATH10K_DEBUGFS=
  ATH10K_SPECTRAL=
  ATH10K_THERMAL=
@@ -172,7 +172,7 @@ v13:
                .patch_load_addr = QCA9888_HW_2_0_PATCH_LOAD_ADDR,
                .uart_pin = 7,
                .cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_EACH,
-@@ -2904,6 +2910,10 @@ int ath10k_core_start(struct ath10k *ar,
+@@ -3044,6 +3050,10 @@ int ath10k_core_start(struct ath10k *ar,
                goto err_hif_stop;
        }
  
@@ -183,7 +183,7 @@ v13:
        return 0;
  
  err_hif_stop:
-@@ -3162,9 +3172,18 @@ static void ath10k_core_register_work(st
+@@ -3302,9 +3312,18 @@ static void ath10k_core_register_work(st
                goto err_spectral_destroy;
        }
  
@@ -202,7 +202,7 @@ v13:
  err_spectral_destroy:
        ath10k_spectral_destroy(ar);
  err_debug_destroy:
-@@ -3210,6 +3229,8 @@ void ath10k_core_unregister(struct ath10
+@@ -3350,6 +3369,8 @@ void ath10k_core_unregister(struct ath10
        if (!test_bit(ATH10K_FLAG_CORE_REGISTERED, &ar->dev_flags))
                return;
  
@@ -221,7 +221,7 @@ v13:
  
  #include "htt.h"
  #include "htc.h"
-@@ -1237,6 +1238,13 @@ struct ath10k {
+@@ -1251,6 +1252,13 @@ struct ath10k {
        } testmode;
  
        struct {
index 975d9a88a85db03d2641de703f1e0be9d299063e..eb7c0f9af5c3e54a324f920de3600ca3a663536c 100644 (file)
@@ -16,7 +16,7 @@ Signed-off-by: Mathias Kresin <dev@kresin.me>
 
 --- a/drivers/net/wireless/ath/ath10k/core.h
 +++ b/drivers/net/wireless/ath/ath10k/core.h
-@@ -1290,6 +1290,10 @@ struct ath10k {
+@@ -1304,6 +1304,10 @@ struct ath10k {
        bool coex_support;
        int coex_gpio_pin;
  
@@ -42,7 +42,7 @@ Signed-off-by: Mathias Kresin <dev@kresin.me>
        if (ret)
 --- a/drivers/net/wireless/ath/ath10k/mac.c
 +++ b/drivers/net/wireless/ath/ath10k/mac.c
-@@ -10075,7 +10075,7 @@ int ath10k_mac_register(struct ath10k *a
+@@ -10074,7 +10074,7 @@ int ath10k_mac_register(struct ath10k *a
        ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER;
  
  #ifdef CPTCFG_MAC80211_LEDS
index 2e3c5c30e395b441ca400d822b380c8bdbdc1ca6..1186ea8e0699c31acf9e1b3141c7c5dac6e03c43 100644 (file)
@@ -26,7 +26,7 @@ Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
  #include <linux/property.h>
  #include <linux/dmi.h>
  #include <linux/ctype.h>
-@@ -3080,6 +3081,8 @@ static int ath10k_core_probe_fw(struct a
+@@ -3220,6 +3221,8 @@ static int ath10k_core_probe_fw(struct a
  
        device_get_mac_address(ar->dev, ar->mac_addr, sizeof(ar->mac_addr));
  
index 406d03e2fee33f6df0505d167793dd6ff2e0350b..aa8a80817056c39a56311c383a586c3ac0f227b7 100644 (file)
@@ -8,7 +8,7 @@ This reverts commit 71f5137bf010c6faffab50c0ec15374c59c4a411.
 
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -2979,7 +2979,8 @@ void ath9k_hw_apply_txpower(struct ath_h
+@@ -2976,7 +2976,8 @@ void ath9k_hw_apply_txpower(struct ath_h
  {
        struct ath_regulatory *reg = ath9k_hw_regulatory(ah);
        struct ieee80211_channel *channel;
@@ -18,7 +18,7 @@ This reverts commit 71f5137bf010c6faffab50c0ec15374c59c4a411.
        u16 ctl = NO_CTL;
  
        if (!chan)
-@@ -2991,9 +2992,14 @@ void ath9k_hw_apply_txpower(struct ath_h
+@@ -2988,9 +2989,14 @@ void ath9k_hw_apply_txpower(struct ath_h
        channel = chan->chan;
        chan_pwr = min_t(int, channel->max_power * 2, MAX_COMBINED_POWER);
        new_pwr = min_t(int, chan_pwr, reg->power_limit);
index 12cbd27e1ab0815f8c5e1432cc006f68f2820c5c..288d4e478c790fb8923e6deecb2fb65f12f2e0f9 100644 (file)
@@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -2998,6 +2998,10 @@ void ath9k_hw_apply_txpower(struct ath_h
+@@ -2995,6 +2995,10 @@ void ath9k_hw_apply_txpower(struct ath_h
        if (ant_gain > max_gain)
                ant_reduction = ant_gain - max_gain;
  
index 0d06ed24342c280d511e844b9ea642436fa7bbb7..b936d0418061fde4209ad191f8c21c72d7b982b4 100644 (file)
@@ -7,4 +7,4 @@
 +      { .max = 1,     .types = BIT(NL80211_IFTYPE_ADHOC) },
  };
  
- #ifdef CPTCFG_WIRELESS_WDS
+ #ifdef CPTCFG_ATH9K_CHANNEL_CONTEXT
index fd17f135605aa6968b47cdaa5acf67bd28f5432d..5556d4bb8a49a372913a1007fef92c2703766f43 100644 (file)
@@ -14,7 +14,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
 
 --- a/drivers/net/wireless/ath/ath9k/init.c
 +++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -924,6 +924,7 @@ static void ath9k_set_hw_capab(struct at
+@@ -908,6 +908,7 @@ static void ath9k_set_hw_capab(struct at
        ieee80211_hw_set(hw, HOST_BROADCAST_PS_BUFFERING);
        ieee80211_hw_set(hw, SUPPORT_FAST_XMIT);
        ieee80211_hw_set(hw, SUPPORTS_CLONED_SKBS);
@@ -22,7 +22,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
  
        if (ath9k_ps_enable)
                ieee80211_hw_set(hw, SUPPORTS_PS);
-@@ -936,9 +937,6 @@ static void ath9k_set_hw_capab(struct at
+@@ -920,9 +921,6 @@ static void ath9k_set_hw_capab(struct at
                                IEEE80211_RADIOTAP_MCS_HAVE_STBC;
        }
  
index f5c62e3baa4716ea682f6e79f0a1e72986d1e725..7d8294243ee6e8909155913a72367ec80f545ee3 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/init.c
 +++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -1140,25 +1140,25 @@ static int __init ath9k_init(void)
+@@ -1121,25 +1121,25 @@ static int __init ath9k_init(void)
  {
        int error;
  
index 884593e24a45eb80c96336d33982bd4ebd866be0..8e8ce414a8308f85ed6580207585ce3bd4c4db9e 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/ath9k.h
 +++ b/drivers/net/wireless/ath/ath9k/ath9k.h
-@@ -844,6 +844,9 @@ static inline int ath9k_dump_btcoex(stru
+@@ -843,6 +843,9 @@ static inline int ath9k_dump_btcoex(stru
  #ifdef CPTCFG_MAC80211_LEDS
  void ath_init_leds(struct ath_softc *sc);
  void ath_deinit_leds(struct ath_softc *sc);
@@ -10,7 +10,7 @@
  #else
  static inline void ath_init_leds(struct ath_softc *sc)
  {
-@@ -980,6 +983,13 @@ void ath_ant_comb_scan(struct ath_softc
+@@ -979,6 +982,13 @@ void ath_ant_comb_scan(struct ath_softc
  
  #define ATH9K_NUM_CHANCTX  2 /* supports 2 operating channels */
  
@@ -24,7 +24,7 @@
  struct ath_softc {
        struct ieee80211_hw *hw;
        struct device *dev;
-@@ -1033,9 +1043,8 @@ struct ath_softc {
+@@ -1032,9 +1042,8 @@ struct ath_softc {
        spinlock_t chan_lock;
  
  #ifdef CPTCFG_MAC80211_LEDS
  
 --- a/drivers/net/wireless/ath/ath9k/init.c
 +++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -1052,7 +1052,7 @@ int ath9k_init_device(u16 devid, struct
+@@ -1033,7 +1033,7 @@ int ath9k_init_device(u16 devid, struct
  
  #ifdef CPTCFG_MAC80211_LEDS
        /* must be initialized before ieee80211_register_hw */
index 0e75b86cbfcee82217c4177d7159734fbb58f4d8..f93a6fe5cd78b6934e99e5d1603e9996f659c864 100644 (file)
@@ -84,7 +84,7 @@
        bool reset_power_on;
        bool htc_reset_init;
  
-@@ -1077,6 +1085,7 @@ void ath9k_hw_check_nav(struct ath_hw *a
+@@ -1076,6 +1084,7 @@ void ath9k_hw_check_nav(struct ath_hw *a
  bool ath9k_hw_check_alive(struct ath_hw *ah);
  
  bool ath9k_hw_setpower(struct ath_hw *ah, enum ath9k_power_mode mode);
@@ -94,7 +94,7 @@
  struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah,
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1882,6 +1882,20 @@ u32 ath9k_hw_get_tsf_offset(struct times
+@@ -1883,6 +1883,20 @@ u32 ath9k_hw_get_tsf_offset(struct times
  }
  EXPORT_SYMBOL(ath9k_hw_get_tsf_offset);
  
  int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
                   struct ath9k_hw_cal_data *caldata, bool fastcc)
  {
-@@ -2090,6 +2104,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
+@@ -2091,6 +2105,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
                ar9003_hw_disable_phy_restart(ah);
  
        ath9k_hw_apply_gpio_override(ah);
                REG_SET_BIT(ah, AR_BTCOEX_WL_LNADIV, AR_BTCOEX_WL_LNADIV_FORCE_ON);
 --- a/drivers/net/wireless/ath/ath9k/main.c
 +++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -536,6 +536,11 @@ irqreturn_t ath_isr(int irq, void *dev)
+@@ -531,6 +531,11 @@ irqreturn_t ath_isr(int irq, void *dev)
        if (test_bit(ATH_OP_HW_RESET, &common->op_flags))
                return IRQ_HANDLED;
  
index 0b0d4d30c4cb5bce434bc5a69b46098ba8409928..88b75a7b6f6304f3278f59ee31816996570caeda 100644 (file)
@@ -65,7 +65,7 @@
  }
  
  static const struct ieee80211_iface_limit if_limits[] = {
-@@ -1012,6 +1013,18 @@ static void ath9k_set_hw_capab(struct at
+@@ -993,6 +994,18 @@ static void ath9k_set_hw_capab(struct at
        wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CAN_REPLACE_PTK0);
  }
  
@@ -84,7 +84,7 @@
  int ath9k_init_device(u16 devid, struct ath_softc *sc,
                    const struct ath_bus_ops *bus_ops)
  {
-@@ -1057,6 +1070,8 @@ int ath9k_init_device(u16 devid, struct
+@@ -1038,6 +1051,8 @@ int ath9k_init_device(u16 devid, struct
                ARRAY_SIZE(ath9k_tpt_blink));
  #endif
  
  static inline void ath9k_hw_set_bt_ant_diversity(struct ath_hw *ah, bool enable)
 --- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
 +++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
-@@ -1349,9 +1349,30 @@ void ar5008_hw_init_rate_txpower(struct
+@@ -1340,9 +1340,30 @@ void ar5008_hw_init_rate_txpower(struct
        }
  }
  
        static const u32 ar5416_cca_regs[6] = {
                AR_PHY_CCA,
                AR_PHY_CH1_CCA,
-@@ -1366,6 +1387,8 @@ int ar5008_hw_attach_phy_ops(struct ath_
+@@ -1357,6 +1378,8 @@ int ar5008_hw_attach_phy_ops(struct ath_
        if (ret)
            return ret;
  
index 2d2b83707288b3e13b7343a5dabab9690e90a4df..93eee34b648121c23ab6cee5e6317cb2d955a23a 100644 (file)
@@ -40,7 +40,7 @@
        return true;
  }
  
-@@ -1860,8 +1879,14 @@ static int ath9k_hw_do_fastcc(struct ath
+@@ -1861,8 +1880,14 @@ static int ath9k_hw_do_fastcc(struct ath
        if (AR_SREV_9271(ah))
                ar9002_hw_load_ani_reg(ah, chan);
  
@@ -55,7 +55,7 @@
        return -EINVAL;
  }
  
-@@ -2115,6 +2140,9 @@ int ath9k_hw_reset(struct ath_hw *ah, st
+@@ -2116,6 +2141,9 @@ int ath9k_hw_reset(struct ath_hw *ah, st
                ath9k_hw_set_radar_params(ah);
        }
  
index 466767adb929cd4daa1dc0831056bc3bf313ca01..854bb3659a5f50d7994468f1342a26d4d99df877 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
 +++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
-@@ -978,55 +978,6 @@ static bool ar5008_hw_ani_control_new(st
+@@ -969,55 +969,6 @@ static bool ar5008_hw_ani_control_new(st
                 * on == 0 means more noise imm
                 */
                u32 on = param ? 1 : 0;
index 88198a45622c38a785004913d8051469a00c4fd5..78206d286015a384ee3d1b6db0173085e4d41061 100644 (file)
@@ -18,7 +18,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  
  #include "common.h"
  #include "debug.h"
-@@ -990,6 +991,14 @@ struct ath_led {
+@@ -989,6 +990,14 @@ struct ath_led {
        struct led_classdev cdev;
  };
  
@@ -33,7 +33,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  struct ath_softc {
        struct ieee80211_hw *hw;
        struct device *dev;
-@@ -1045,6 +1054,9 @@ struct ath_softc {
+@@ -1044,6 +1053,9 @@ struct ath_softc {
  #ifdef CPTCFG_MAC80211_LEDS
        const char *led_default_trigger;
        struct list_head leds;
index 83076b8ae49177b59b3f81d672095daca60f8466..716e09f351eb6dfd7e7bcd304983a4b3b8e5e93f 100644 (file)
@@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 ---
 --- a/drivers/net/wireless/ath/ath9k/ath9k.h
 +++ b/drivers/net/wireless/ath/ath9k/ath9k.h
-@@ -1056,6 +1056,7 @@ struct ath_softc {
+@@ -1055,6 +1055,7 @@ struct ath_softc {
        struct list_head leds;
  #ifdef CONFIG_GPIOLIB
        struct ath9k_gpio_chip *gpiochip;
index c98222781d81d77906b188dacf2d31518c041229..a41eb55f7486a97123314637e9e0769db28c94c8 100644 (file)
  
  static void ath9k_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
                        u32 queues, bool drop);
-@@ -657,6 +658,7 @@ void ath_reset_work(struct work_struct *
+@@ -652,6 +653,7 @@ void ath_reset_work(struct work_struct *
  static int ath9k_start(struct ieee80211_hw *hw)
  {
        struct ath_softc *sc = hw->priv;
        struct ath_hw *ah = sc->sc_ah;
        struct ath_common *common = ath9k_hw_common(ah);
        struct ieee80211_channel *curchan = sc->cur_chan->chandef.chan;
-@@ -735,6 +737,11 @@ static int ath9k_start(struct ieee80211_
+@@ -730,6 +732,11 @@ static int ath9k_start(struct ieee80211_
                                          AR_GPIO_OUTPUT_MUX_AS_OUTPUT);
        }
  
  
 --- a/local-symbols
 +++ b/local-symbols
-@@ -112,6 +112,7 @@ ATH9K_WOW=
+@@ -103,6 +103,7 @@ ATH9K_WOW=
  ATH9K_RFKILL=
  ATH9K_CHANNEL_CONTEXT=
  ATH9K_PCOEM=
index 8fd6e4409b06db17d00470d3bdcfbf92e53a2ff6..2552bbc7a143b80041d183224553b3ffee79f0b8 100644 (file)
  
  #include "common.h"
  #include "debug.h"
-@@ -1012,6 +1013,9 @@ struct ath_softc {
+@@ -1011,6 +1012,9 @@ struct ath_softc {
        struct ath_hw *sc_ah;
        void __iomem *mem;
        int irq;
index 52ae7a8ebaac8705dd3c053810108e0bff4af034..5dc04ecc88e228f5eb5a848ade7ebe8e548df352 100644 (file)
@@ -42,7 +42,7 @@
  
        if (wl->radio_enabled != phy->radio_on) {
                if (wl->radio_enabled) {
-@@ -5176,6 +5173,47 @@ static int b43_op_get_survey(struct ieee
+@@ -5175,6 +5172,47 @@ static int b43_op_get_survey(struct ieee
        return 0;
  }
  
@@ -90,7 +90,7 @@
  static const struct ieee80211_ops b43_hw_ops = {
        .tx                     = b43_op_tx,
        .conf_tx                = b43_op_conf_tx,
-@@ -5197,6 +5235,8 @@ static const struct ieee80211_ops b43_hw
+@@ -5196,6 +5234,8 @@ static const struct ieee80211_ops b43_hw
        .sw_scan_complete       = b43_op_sw_scan_complete_notifier,
        .get_survey             = b43_op_get_survey,
        .rfkill_poll            = b43_rfkill_poll,
@@ -99,7 +99,7 @@
  };
  
  /* Hard-reset the chip. Do not call this directly.
-@@ -5498,6 +5538,8 @@ static int b43_one_core_attach(struct b4
+@@ -5497,6 +5537,8 @@ static int b43_one_core_attach(struct b4
        if (!wldev)
                goto out;
  
        wldev->use_pio = b43_modparam_pio;
        wldev->dev = dev;
        wldev->wl = wl;
-@@ -5592,6 +5634,9 @@ static struct b43_wl *b43_wireless_init(
+@@ -5588,6 +5630,9 @@ static struct b43_wl *b43_wireless_init(
  
        wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
  
index 774656f1fdee74dd8016580969c7ed1c1e349255..e640849e6ad45fc3c40ef2e4feb3243f352836c2 100644 (file)
@@ -14,7 +14,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
 
 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-@@ -2961,6 +2961,10 @@ brcmf_cfg80211_set_power_mgmt(struct wip
+@@ -2958,6 +2958,10 @@ brcmf_cfg80211_set_power_mgmt(struct wip
         * preference in cfg struct to apply this to
         * FW later while initializing the dongle
         */
index 25a12c783e34444a27610a79caa72d6fe645c6cd..9e9f4bbf8fbbdc8f38741d0113472e5c0eb2a187 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-@@ -2913,6 +2913,63 @@ done:
+@@ -2910,6 +2910,63 @@ done:
  }
  
  static int
@@ -64,7 +64,7 @@
  brcmf_cfg80211_dump_station(struct wiphy *wiphy, struct net_device *ndev,
                            int idx, u8 *mac, struct station_info *sinfo)
  {
-@@ -3008,6 +3065,7 @@ static s32 brcmf_inform_single_bss(struc
+@@ -3005,6 +3062,7 @@ static s32 brcmf_inform_single_bss(struc
        struct brcmu_chan ch;
        u16 channel;
        u32 freq;
@@ -72,7 +72,7 @@
        u16 notify_capability;
        u16 notify_interval;
        u8 *notify_ie;
-@@ -3032,6 +3090,17 @@ static s32 brcmf_inform_single_bss(struc
+@@ -3029,6 +3087,17 @@ static s32 brcmf_inform_single_bss(struc
                band = NL80211_BAND_5GHZ;
  
        freq = ieee80211_channel_to_frequency(channel, band);
@@ -90,7 +90,7 @@
        bss_data.chan = ieee80211_get_channel(wiphy, freq);
        bss_data.scan_width = NL80211_BSS_CHAN_WIDTH_20;
        bss_data.boottime_ns = ktime_to_ns(ktime_get_boottime());
-@@ -5518,6 +5587,7 @@ static struct cfg80211_ops brcmf_cfg8021
+@@ -5515,6 +5584,7 @@ static struct cfg80211_ops brcmf_cfg8021
        .leave_ibss = brcmf_cfg80211_leave_ibss,
        .get_station = brcmf_cfg80211_get_station,
        .dump_station = brcmf_cfg80211_dump_station,
index 8fa465a7e1c920cf93e46d65837cb737840fd5af..aa26c8cb2abf315956112038ff5848478dfdb8f3 100644 (file)
@@ -1,6 +1,6 @@
 --- a/compat/main.c
 +++ b/compat/main.c
-@@ -20,31 +20,6 @@ MODULE_LICENSE("GPL");
+@@ -19,31 +19,6 @@ MODULE_LICENSE("GPL");
  #error "You need a CPTCFG_VERSION"
  #endif
  
diff --git a/package/kernel/mac80211/patches/build/004-kconfig_backport_fix.patch b/package/kernel/mac80211/patches/build/004-kconfig_backport_fix.patch
deleted file mode 100644 (file)
index 2c9572e..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
---- a/backport-include/linux/kconfig.h
-+++ b/backport-include/linux/kconfig.h
-@@ -5,6 +5,8 @@
- #include_next <linux/kconfig.h>
- #endif
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)
-+
- #ifndef __ARG_PLACEHOLDER_1
- #define __ARG_PLACEHOLDER_1 0,
- #define config_enabled(cfg) _config_enabled(cfg)
-@@ -16,6 +18,7 @@
-  * 3.1 - 3.3 had a broken version of this, so undef
-  * (they didn't have __ARG_PLACEHOLDER_1)
-  */
-+
- #undef IS_ENABLED
- #define IS_ENABLED(option) \
-         (config_enabled(option) || config_enabled(option##_MODULE))
-@@ -31,6 +34,8 @@
- #undef IS_BUILTIN
- #define IS_BUILTIN(option) config_enabled(option)
-+#endif
-+
- #ifndef IS_REACHABLE
- /*
-  * IS_REACHABLE(CONFIG_FOO) evaluates to 1 if the currently compiled
diff --git a/package/kernel/mac80211/patches/build/010-disable_rfkill.patch b/package/kernel/mac80211/patches/build/010-disable_rfkill.patch
deleted file mode 100644 (file)
index d525306..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
---- a/backport-include/linux/rfkill.h
-+++ b/backport-include/linux/rfkill.h
-@@ -2,6 +2,12 @@
- #define __COMPAT_RFKILL_H
- #include <linux/version.h>
-+#undef CONFIG_RFKILL
-+#undef CONFIG_RFKILL_FULL
-+#undef CONFIG_RFKILL_LEDS
-+#undef CONFIG_RFKILL_MODULE
-+#undef CONFIG_RFKILL_FULL_MODULE
-+
- #if LINUX_VERSION_IS_GEQ(3,10,0)
- #include_next <linux/rfkill.h>
- #else
index c1b1bc757f2d52a105180be4f141b4035ed68310..b2465b0d7e19a21eb8e5fbce62b932547f022ecd 100644 (file)
@@ -1,6 +1,6 @@
 --- a/net/wireless/Kconfig
 +++ b/net/wireless/Kconfig
-@@ -188,7 +188,7 @@ config CFG80211_WEXT_EXPORT
+@@ -187,7 +187,7 @@ config CFG80211_WEXT_EXPORT
  endif # CFG80211
  
  config LIB80211
@@ -9,7 +9,7 @@
        depends on m
        default n
        help
-@@ -198,19 +198,19 @@ config LIB80211
+@@ -197,19 +197,19 @@ config LIB80211
          Drivers should select this themselves if needed.
  
  config LIB80211_CRYPT_WEP
index ff2ce2071f5522e0c4d653bae816adf5ae6b720a..f51ddd8d719f5a9241edfb92b2f6a12606e5b23b 100644 (file)
@@ -1,9 +1,9 @@
 --- a/local-symbols
 +++ b/local-symbols
-@@ -437,43 +437,6 @@ USB_SIERRA_NET=
- USB_VL600=
+@@ -429,43 +429,6 @@ USB_VL600=
  USB_NET_CH9200=
  USB_NET_AQC111=
+ USB_RTL8153_ECM=
 -SSB_POSSIBLE=
 -SSB=
 -SSB_SPROM=
        select BRCMUTIL
 --- a/Kconfig.local
 +++ b/Kconfig.local
-@@ -1315,117 +1315,6 @@ config BACKPORTED_USB_NET_CH9200
- config BACKPORTED_USB_NET_AQC111
+@@ -1291,117 +1291,6 @@ config BACKPORTED_USB_NET_AQC111
+ config BACKPORTED_USB_RTL8153_ECM
        tristate
-       default USB_NET_AQC111
+       default USB_RTL8153_ECM
 -config BACKPORTED_SSB_POSSIBLE
 -      tristate
 -      default SSB_POSSIBLE
index d358cfe36767182458abc74877176fb571eda0e4..87bb42dce55033f9e883d9cd8cf3c38131a7930d 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/marvell/mwl8k.c
 +++ b/drivers/net/wireless/marvell/mwl8k.c
-@@ -5695,6 +5695,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw")
+@@ -5700,6 +5700,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw")
  MODULE_FIRMWARE(MWL8K_8366_AP_FW(MWL8K_8366_AP_FW_API));
  
  static const struct pci_device_id mwl8k_pci_id_table[] = {
index a35cf1875ac65e0d5b8ee0facb74372897cce348..ff12950e5f801a9f9e8e4bffa6882d38c722e332 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/marvell/mwl8k.c
 +++ b/drivers/net/wireless/marvell/mwl8k.c
-@@ -6280,6 +6280,8 @@ static int mwl8k_probe(struct pci_dev *p
+@@ -6286,6 +6286,8 @@ static int mwl8k_probe(struct pci_dev *p
  
        priv->running_bsses = 0;
  
@@ -9,7 +9,7 @@
        return rc;
  
  err_stop_firmware:
-@@ -6313,8 +6315,6 @@ static void mwl8k_remove(struct pci_dev
+@@ -6319,8 +6321,6 @@ static void mwl8k_remove(struct pci_dev
                return;
        priv = hw->priv;
  
index a50a1952851c9063e012692c09b8f599c69bf281..96eeb37dc603000bb2e25c4a24b5fcb10c42b99f 100644 (file)
@@ -40,7 +40,7 @@ Signed-off-by: Tomislav Požega <pozega.tomislav@gmail.com>
 
 --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
 +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -9416,6 +9416,8 @@ static int rt2800_init_eeprom(struct rt2
+@@ -9435,6 +9435,8 @@ static int rt2800_init_eeprom(struct rt2
                rf = RF3853;
        else if (rt2x00_rt(rt2x00dev, RT5350))
                rf = RF5350;
index 8628c1063ac6a802a28f84571bd5b243df3871ef..1930885ccf53e7f9dac312cf526ad998ca4d9675 100644 (file)
@@ -1,6 +1,6 @@
 --- a/local-symbols
 +++ b/local-symbols
-@@ -332,6 +332,7 @@ RT2X00_LIB_FIRMWARE=
+@@ -323,6 +323,7 @@ RT2X00_LIB_FIRMWARE=
  RT2X00_LIB_CRYPTO=
  RT2X00_LIB_LEDS=
  RT2X00_LIB_DEBUGFS=
        .drv_init_registers     = rt2800mmio_init_registers,
 --- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
 +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
-@@ -694,6 +694,7 @@ enum rt2x00_capability_flags {
+@@ -703,6 +703,7 @@ enum rt2x00_capability_flags {
        REQUIRE_HT_TX_DESC,
        REQUIRE_PS_AUTOWAKE,
        REQUIRE_DELAYED_RFKILL,
  
        /*
         * Capabilities
-@@ -970,6 +971,11 @@ struct rt2x00_dev {
+@@ -980,6 +981,11 @@ struct rt2x00_dev {
        const struct firmware *fw;
  
        /*
        DECLARE_KFIFO_PTR(txstatus_fifo, u32);
 --- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
 +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
-@@ -1402,6 +1402,10 @@ int rt2x00lib_probe_dev(struct rt2x00_de
+@@ -1401,6 +1401,10 @@ int rt2x00lib_probe_dev(struct rt2x00_de
        INIT_DELAYED_WORK(&rt2x00dev->autowakeup_work, rt2x00lib_autowakeup);
        INIT_WORK(&rt2x00dev->sleep_work, rt2x00lib_sleep);
  
        /*
         * Let the driver probe the device to detect the capabilities.
         */
-@@ -1545,6 +1549,11 @@ void rt2x00lib_remove_dev(struct rt2x00_
+@@ -1541,6 +1545,11 @@ void rt2x00lib_remove_dev(struct rt2x00_
         * Free the driver data.
         */
        kfree(rt2x00dev->drv_data);
index e12f0746694b469eeeb26b36d95ed776127f0be4..ffee2189d2d3b115cab9024ff1e4a54fe36b70e4 100644 (file)
@@ -12,7 +12,7 @@
  #endif /* _RT2X00_PLATFORM_H */
 --- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
 +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
-@@ -1008,6 +1008,22 @@ static int rt2x00lib_probe_hw_modes(stru
+@@ -1007,6 +1007,22 @@ static int rt2x00lib_probe_hw_modes(stru
        unsigned int num_rates;
        unsigned int i;
  
@@ -37,7 +37,7 @@
                num_rates += 4;
 --- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
 +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
-@@ -399,6 +399,7 @@ struct hw_mode_spec {
+@@ -408,6 +408,7 @@ struct hw_mode_spec {
        unsigned int supported_bands;
  #define SUPPORT_BAND_2GHZ     0x00000001
  #define SUPPORT_BAND_5GHZ     0x00000002
index 79f99ffdf4a23e6ba4751e15cd59747bc784ad52..37553bb80a07c55cbaa77cad64fd8316125d6989 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
 +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
-@@ -990,6 +990,12 @@ static void rt2x00lib_rate(struct ieee80
+@@ -989,6 +989,12 @@ static void rt2x00lib_rate(struct ieee80
  
  void rt2x00lib_set_mac_address(struct rt2x00_dev *rt2x00dev, u8 *eeprom_mac_addr)
  {
index 31f2f0261fd5e3d365b6c2fbbfcaee82d7a252a3..6211809c0a0c404c2bd96298ad3e377ae767360e 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
 +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
-@@ -1013,6 +1013,16 @@ static int rt2x00lib_probe_hw_modes(stru
+@@ -1012,6 +1012,16 @@ static int rt2x00lib_probe_hw_modes(stru
        struct ieee80211_rate *rates;
        unsigned int num_rates;
        unsigned int i;
index 039c6f6afc6a58f37fe42309d9cf14b4d28320cd..d78b76d7f5b0ee916620493fd71352a914f18441 100644 (file)
@@ -8,7 +8,7 @@
  
  #include "rt2x00.h"
  #include "rt2800lib.h"
-@@ -9530,6 +9531,17 @@ static int rt2800_init_eeprom(struct rt2
+@@ -9549,6 +9550,17 @@ static int rt2800_init_eeprom(struct rt2
        rt2800_init_led(rt2x00dev, &rt2x00dev->led_assoc, LED_TYPE_ASSOC);
        rt2800_init_led(rt2x00dev, &rt2x00dev->led_qual, LED_TYPE_QUALITY);
  
index 01a3851fcce8eb0abf5a167c09e6407182d8e771..0da9356e0c1eacbe42107ec88f95b5e127f06269 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
 +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
-@@ -1341,7 +1341,7 @@ static inline void rt2x00lib_set_if_comb
+@@ -1340,7 +1340,7 @@ static inline void rt2x00lib_set_if_comb
         */
        if_limit = &rt2x00dev->if_limits_ap;
        if_limit->max = rt2x00dev->ops->max_ap_intf;
index 079c87e33c47b9039d3e93b5cb682fbf1f08cd47..6e6564f8706e729155b65c4df29128bc5ec35c16 100644 (file)
@@ -11,7 +11,7 @@ Tested-by: Christoph Krapp <achterin@googlemail.com>
 
 --- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
 +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
-@@ -1126,6 +1126,19 @@ static void rt2x00lib_remove_hw(struct r
+@@ -1125,6 +1125,19 @@ static void rt2x00lib_remove_hw(struct r
        kfree(rt2x00dev->spec.channels_info);
  }
  
@@ -31,7 +31,7 @@ Tested-by: Christoph Krapp <achterin@googlemail.com>
  static int rt2x00lib_probe_hw(struct rt2x00_dev *rt2x00dev)
  {
        struct hw_mode_spec *spec = &rt2x00dev->spec;
-@@ -1207,6 +1220,10 @@ static int rt2x00lib_probe_hw(struct rt2
+@@ -1206,6 +1219,10 @@ static int rt2x00lib_probe_hw(struct rt2
  
  #undef RT2X00_TASKLET_INIT
  
index 20452cd8a7a27d26c61fdba7085e126796ba0651..8814c0253232ec9858f11f68f22edaf3c916761e 100644 (file)
@@ -30,7 +30,7 @@ Signed-off-by: Tomislav Po=C5=BEega <pozega.tomislav@gmail.com>
   * EEPROM LNA
 --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
 +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -4356,6 +4356,45 @@ static void rt2800_config_channel(struct
+@@ -4369,6 +4369,45 @@ static void rt2800_config_channel(struct
                rt2800_iq_calibrate(rt2x00dev, rf->channel);
        }
  
@@ -76,7 +76,7 @@ Signed-off-by: Tomislav Po=C5=BEega <pozega.tomislav@gmail.com>
        bbp = rt2800_bbp_read(rt2x00dev, 4);
        rt2x00_set_field8(&bbp, BBP4_BANDWIDTH, 2 * conf_is_ht40(conf));
        rt2800_bbp_write(rt2x00dev, 4, bbp);
-@@ -9559,7 +9598,8 @@ static int rt2800_init_eeprom(struct rt2
+@@ -9578,7 +9617,8 @@ static int rt2800_init_eeprom(struct rt2
         */
        eeprom = rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1);
  
@@ -86,7 +86,7 @@ Signed-off-by: Tomislav Po=C5=BEega <pozega.tomislav@gmail.com>
                if (rt2x00_get_field16(eeprom,
                    EEPROM_NIC_CONF1_EXTERNAL_TX0_PA_3352))
                    __set_bit(CAPABILITY_EXTERNAL_PA_TX0,
-@@ -9570,6 +9610,18 @@ static int rt2800_init_eeprom(struct rt2
+@@ -9589,6 +9629,18 @@ static int rt2800_init_eeprom(struct rt2
                              &rt2x00dev->cap_flags);
        }
  
index 6be847478e0543dc57afbe873de670e7e518e898..b798dcc6d87245dae48ab3161c2ab8e6a0dac9d9 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
 +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -8419,6 +8419,56 @@ static void rt2800_init_rfcsr_5592(struc
+@@ -8438,6 +8438,56 @@ static void rt2800_init_rfcsr_5592(struc
        rt2800_led_open_drain_enable(rt2x00dev);
  }
  
@@ -57,7 +57,7 @@
  static void rt2800_bbp_core_soft_reset(struct rt2x00_dev *rt2x00dev,
                                       bool set_bw, bool is_ht40)
  {
-@@ -9026,6 +9076,7 @@ static void rt2800_init_rfcsr_6352(struc
+@@ -9045,6 +9095,7 @@ static void rt2800_init_rfcsr_6352(struc
        rt2800_rfcsr_write_dccal(rt2x00dev, 5, 0x00);
        rt2800_rfcsr_write_dccal(rt2x00dev, 17, 0x7C);
  
index 3ed0ff7ef53320584dbfa94166391cb08013acc1..cf21c39a6cb2c6e247bdd0a0a074e0e9f0b22fef 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
 +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -8469,6 +8469,155 @@ static void rt2800_rf_self_txdc_cal(stru
+@@ -8488,6 +8488,155 @@ static void rt2800_rf_self_txdc_cal(stru
        rt2x00_info(rt2x00dev, "RF Tx self calibration end\n");
  }
  
  static void rt2800_bbp_core_soft_reset(struct rt2x00_dev *rt2x00dev,
                                       bool set_bw, bool is_ht40)
  {
-@@ -9076,6 +9225,7 @@ static void rt2800_init_rfcsr_6352(struc
+@@ -9095,6 +9244,7 @@ static void rt2800_init_rfcsr_6352(struc
        rt2800_rfcsr_write_dccal(rt2x00dev, 5, 0x00);
        rt2800_rfcsr_write_dccal(rt2x00dev, 17, 0x7C);
  
index 77be986d18b13b1558b6fc70e3d5d092a0ad7fa6..1f8684b0bf3885902da681ab75334c4d38ff7075 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
 +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -8618,6 +8618,70 @@ static void rt2800_r_calibration(struct
+@@ -8637,6 +8637,70 @@ static void rt2800_r_calibration(struct
        rt2800_register_write(rt2x00dev, PWR_PIN_CFG, MAC_PWR_PIN_CFG);
  }
  
@@ -71,7 +71,7 @@
  static void rt2800_bbp_core_soft_reset(struct rt2x00_dev *rt2x00dev,
                                       bool set_bw, bool is_ht40)
  {
-@@ -9227,6 +9291,7 @@ static void rt2800_init_rfcsr_6352(struc
+@@ -9246,6 +9310,7 @@ static void rt2800_init_rfcsr_6352(struc
  
        rt2800_r_calibration(rt2x00dev);
        rt2800_rf_self_txdc_cal(rt2x00dev);
index 7352ad036cd52d990029d9c1bfb4cf773aa09cae..98f2e245ce826d1c32bcafa33802076d7174fcdb 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
 +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -8682,6 +8682,384 @@ static void rt2800_rxdcoc_calibration(st
+@@ -8701,6 +8701,384 @@ static void rt2800_rxdcoc_calibration(st
        rt2800_rfcsr_write_bank(rt2x00dev, 0, 2, saverfb0r2);
  }
  
  static void rt2800_bbp_core_soft_reset(struct rt2x00_dev *rt2x00dev,
                                       bool set_bw, bool is_ht40)
  {
-@@ -9294,6 +9672,7 @@ static void rt2800_init_rfcsr_6352(struc
+@@ -9313,6 +9691,7 @@ static void rt2800_init_rfcsr_6352(struc
        rt2800_rxdcoc_calibration(rt2x00dev);
        rt2800_bw_filter_calibration(rt2x00dev, true);
        rt2800_bw_filter_calibration(rt2x00dev, false);
index fe0961baa799b4333ceb23edae2faa7152ffccfc..6a685f80ab8f3ec814732e72315af60eb1f625c4 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
 +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -9060,6 +9060,943 @@ restore_value:
+@@ -9079,6 +9079,943 @@ restore_value:
        rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, savemacsysctrl);
  }
  
  static void rt2800_bbp_core_soft_reset(struct rt2x00_dev *rt2x00dev,
                                       bool set_bw, bool is_ht40)
  {
-@@ -9672,6 +10609,7 @@ static void rt2800_init_rfcsr_6352(struc
+@@ -9691,6 +10628,7 @@ static void rt2800_init_rfcsr_6352(struc
        rt2800_rxdcoc_calibration(rt2x00dev);
        rt2800_bw_filter_calibration(rt2x00dev, true);
        rt2800_bw_filter_calibration(rt2x00dev, false);
index 3de00b2267871040114df1aad59b1fac4d2646b5..40b20ec5947484c2f6aef52dc1dc0fd176343294 100644 (file)
@@ -14,7 +14,7 @@
   */
 --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
 +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -3685,14 +3685,16 @@ static void rt2800_config_channel_rf7620
+@@ -3698,14 +3698,16 @@ static void rt2800_config_channel_rf7620
        rt2x00_set_field8(&rfcsr, RFCSR19_K, rf->rf4);
        rt2800_rfcsr_write(rt2x00dev, 19, rfcsr);
  
@@ -39,7 +39,7 @@
  
        rfcsr = rt2800_rfcsr_read(rt2x00dev, 1);
        rt2x00_set_field8(&rfcsr, RFCSR1_TX2_EN_MT7620,
-@@ -3726,18 +3728,23 @@ static void rt2800_config_channel_rf7620
+@@ -3739,18 +3741,23 @@ static void rt2800_config_channel_rf7620
                rt2800_rfcsr_write_dccal(rt2x00dev, 59, 0x20);
        }
  
@@ -73,7 +73,7 @@
  
        if (!test_bit(DEVICE_STATE_SCANNING, &rt2x00dev->flags)) {
                if (conf_is_ht40(conf)) {
-@@ -3837,25 +3844,29 @@ static void rt2800_config_alc(struct rt2
+@@ -3850,25 +3857,29 @@ static void rt2800_config_alc(struct rt2
        if (i == 10000)
                rt2x00_warn(rt2x00dev, "Wait MAC Status to MAX !!!\n");
  
        rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, mac_sys_ctrl);
  
        rt2800_vco_calibration(rt2x00dev);
-@@ -5887,18 +5898,33 @@ static int rt2800_init_registers(struct
+@@ -5906,18 +5917,33 @@ static int rt2800_init_registers(struct
        } else if (rt2x00_rt(rt2x00dev, RT5350)) {
                rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000404);
        } else if (rt2x00_rt(rt2x00dev, RT6352)) {
                reg = rt2800_register_read(rt2x00dev, TX_ALC_CFG_1);
                rt2x00_set_field32(&reg, TX_ALC_CFG_1_ROS_BUSY_EN, 0);
                rt2800_register_write(rt2x00dev, TX_ALC_CFG_1, reg);
-@@ -7042,14 +7068,16 @@ static void rt2800_init_bbp_6352(struct
+@@ -7061,14 +7087,16 @@ static void rt2800_init_bbp_6352(struct
        rt2800_bbp_write(rt2x00dev, 188, 0x00);
        rt2800_bbp_write(rt2x00dev, 189, 0x00);
  
  
        /* BBP for G band GLRT function (BBP_128 ~ BBP_221) */
        rt2800_bbp_glrt_write(rt2x00dev, 0, 0x00);
-@@ -10388,31 +10416,36 @@ static void rt2800_init_rfcsr_6352(struc
+@@ -10407,31 +10435,36 @@ static void rt2800_init_rfcsr_6352(struc
        rt2800_rfcsr_write(rt2x00dev, 42, 0x5B);
        rt2800_rfcsr_write(rt2x00dev, 43, 0x00);
  
  
        /* Initialize RF channel register to default value */
        rt2800_rfcsr_write_chanreg(rt2x00dev, 0, 0x03);
-@@ -10478,63 +10511,71 @@ static void rt2800_init_rfcsr_6352(struc
+@@ -10497,63 +10530,71 @@ static void rt2800_init_rfcsr_6352(struc
  
        rt2800_rfcsr_write_bank(rt2x00dev, 6, 45, 0xC5);
  
  
        /* Initialize RF DC calibration register to default value */
        rt2800_rfcsr_write_dccal(rt2x00dev, 0, 0x47);
-@@ -10597,12 +10638,17 @@ static void rt2800_init_rfcsr_6352(struc
+@@ -10616,12 +10657,17 @@ static void rt2800_init_rfcsr_6352(struc
        rt2800_rfcsr_write_dccal(rt2x00dev, 62, 0x00);
        rt2800_rfcsr_write_dccal(rt2x00dev, 63, 0x00);
  
diff --git a/package/kernel/mac80211/patches/rt2x00/992-rt2x00-save-survey-for-every-channel-visited.patch b/package/kernel/mac80211/patches/rt2x00/992-rt2x00-save-survey-for-every-channel-visited.patch
deleted file mode 100644 (file)
index 80e2a2f..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
---- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
-@@ -1238,6 +1238,8 @@ void rt2800_watchdog(struct rt2x00_dev *
-       if (test_bit(DEVICE_STATE_SCANNING, &rt2x00dev->flags))
-               return;
-+      rt2800_update_survey(rt2x00dev);
-+
-       queue_for_each(rt2x00dev, queue) {
-               switch (queue->qid) {
-               case QID_AC_VO:
-@@ -1274,6 +1276,18 @@ void rt2800_watchdog(struct rt2x00_dev *
- }
- EXPORT_SYMBOL_GPL(rt2800_watchdog);
-+void rt2800_update_survey(struct rt2x00_dev *rt2x00dev)
-+{
-+      struct ieee80211_channel *chan = rt2x00dev->hw->conf.chandef.chan;
-+      struct rt2x00_chan_survey *chan_survey =
-+                 &rt2x00dev->chan_survey[chan->hw_value];
-+
-+      chan_survey->time_idle += rt2800_register_read(rt2x00dev, CH_IDLE_STA);
-+      chan_survey->time_busy += rt2800_register_read(rt2x00dev, CH_BUSY_STA);
-+      chan_survey->time_ext_busy += rt2800_register_read(rt2x00dev, CH_BUSY_STA_SEC);
-+}
-+EXPORT_SYMBOL_GPL(rt2800_update_survey);
-+
- static unsigned int rt2800_hw_beacon_base(struct rt2x00_dev *rt2x00dev,
-                                         unsigned int index)
- {
-@@ -12199,26 +12213,30 @@ int rt2800_get_survey(struct ieee80211_h
- {
-       struct rt2x00_dev *rt2x00dev = hw->priv;
-       struct ieee80211_conf *conf = &hw->conf;
--      u32 idle, busy, busy_ext;
-+      struct rt2x00_chan_survey *chan_survey =
-+                 &rt2x00dev->chan_survey[idx];
-+      enum nl80211_band band = NL80211_BAND_2GHZ;
--      if (idx != 0)
-+      if (idx >= rt2x00dev->bands[band].n_channels) {
-+              idx -= rt2x00dev->bands[band].n_channels;
-+              band = NL80211_BAND_5GHZ;
-+      }
-+
-+      if (idx >= rt2x00dev->bands[band].n_channels)
-               return -ENOENT;
--      survey->channel = conf->chandef.chan;
-+      if (idx == 0)
-+              rt2800_update_survey(rt2x00dev);
--      idle = rt2800_register_read(rt2x00dev, CH_IDLE_STA);
--      busy = rt2800_register_read(rt2x00dev, CH_BUSY_STA);
--      busy_ext = rt2800_register_read(rt2x00dev, CH_BUSY_STA_SEC);
--
--      if (idle || busy) {
--              survey->filled = SURVEY_INFO_TIME |
--                               SURVEY_INFO_TIME_BUSY |
--                               SURVEY_INFO_TIME_EXT_BUSY;
--
--              survey->time = (idle + busy) / 1000;
--              survey->time_busy = busy / 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_busy = div_u64(chan_survey->time_busy, 1000);
-+      survey->time_ext_busy = div_u64(chan_survey->time_ext_busy, 1000);
-       if (!(hw->conf.flags & IEEE80211_CONF_OFFCHANNEL))
-               survey->filled |= SURVEY_INFO_IN_USE;
---- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
-@@ -243,6 +243,7 @@ bool rt2800_txstatus_timeout(struct rt2x
- bool rt2800_txstatus_pending(struct rt2x00_dev *rt2x00dev);
- void rt2800_watchdog(struct rt2x00_dev *rt2x00dev);
-+void rt2800_update_survey(struct rt2x00_dev *rt2x00dev);
- void rt2800_write_beacon(struct queue_entry *entry, struct txentry_desc *txdesc);
- void rt2800_clear_beacon(struct queue_entry *entry);
---- a/drivers/net/wireless/ralink/rt2x00/rt2800pci.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800pci.c
-@@ -360,6 +360,7 @@ static const struct rt2x00lib_ops rt2800
-       .gain_calibration       = rt2800_gain_calibration,
-       .vco_calibration        = rt2800_vco_calibration,
-       .watchdog               = rt2800_watchdog,
-+      .update_survey          = rt2800_update_survey,
-       .start_queue            = rt2800mmio_start_queue,
-       .kick_queue             = rt2800mmio_kick_queue,
-       .stop_queue             = rt2800mmio_stop_queue,
---- a/drivers/net/wireless/ralink/rt2x00/rt2800soc.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800soc.c
-@@ -214,6 +214,7 @@ static const struct rt2x00lib_ops rt2800
-       .gain_calibration       = rt2800_gain_calibration,
-       .vco_calibration        = rt2800_vco_calibration,
-       .watchdog               = rt2800_watchdog,
-+      .update_survey          = rt2800_update_survey,
-       .start_queue            = rt2800mmio_start_queue,
-       .kick_queue             = rt2800mmio_kick_queue,
-       .stop_queue             = rt2800mmio_stop_queue,
---- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
-@@ -183,6 +183,15 @@ struct rf_channel {
- };
- /*
-+ * Information structure for channel survey.
-+ */
-+struct rt2x00_chan_survey {
-+      u64 time_idle;
-+      u64 time_busy;
-+      u64 time_ext_busy;
-+};
-+
-+/*
-  * Channel information structure
-  */
- struct channel_info {
-@@ -567,6 +576,7 @@ struct rt2x00lib_ops {
-        * Data queue handlers.
-        */
-       void (*watchdog) (struct rt2x00_dev *rt2x00dev);
-+      void (*update_survey) (struct rt2x00_dev *rt2x00dev);
-       void (*start_queue) (struct data_queue *queue);
-       void (*kick_queue) (struct data_queue *queue);
-       void (*stop_queue) (struct data_queue *queue);
-@@ -755,6 +765,7 @@ struct rt2x00_dev {
-        */
-       struct ieee80211_hw *hw;
-       struct ieee80211_supported_band bands[NUM_NL80211_BANDS];
-+      struct rt2x00_chan_survey *chan_survey;
-       enum nl80211_band curr_band;
-       int curr_freq;
---- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
-@@ -1054,6 +1054,12 @@ static int rt2x00lib_probe_hw_modes(stru
-       if (!rates)
-               goto exit_free_channels;
-+      rt2x00dev->chan_survey =
-+              kcalloc(spec->num_channels, sizeof(struct rt2x00_chan_survey),
-+                      GFP_KERNEL);
-+      if (!rt2x00dev->chan_survey)
-+              goto exit_free_rates;
-+
-       /*
-        * Initialize Rate list.
-        */
-@@ -1105,6 +1111,8 @@ static int rt2x00lib_probe_hw_modes(stru
-       return 0;
-+ exit_free_rates:
-+      kfree(rates);
-  exit_free_channels:
-       kfree(channels);
-       rt2x00_err(rt2x00dev, "Allocation ieee80211 modes failed\n");
---- a/drivers/net/wireless/ralink/rt2x00/rt2x00mac.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00mac.c
-@@ -317,6 +317,15 @@ int rt2x00mac_config(struct ieee80211_hw
-               return 0;
-       /*
-+       * To provide correct survey data for survey-based ACS algorithm
-+       * we have to save survey data for current channel before switching.
-+       */
-+      if (rt2x00dev->ops->lib->update_survey &&
-+          (changed & IEEE80211_CONF_CHANGE_CHANNEL)) {
-+              rt2x00dev->ops->lib->update_survey(rt2x00dev);
-+      }
-+
-+      /*
-        * Some configuration parameters (e.g. channel and antenna values) can
-        * only be set when the radio is enabled, but do require the RX to
-        * be off. During this period we should keep link tuning enabled,
index 3daf65e967286116ff304f750e64c076a0dac1a3..d82dfec05bccc37202eab51fee01c10f7c9ad95c 100644 (file)
@@ -89,7 +89,7 @@ Tested-by: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
  #endif
 --- a/drivers/net/wireless/realtek/rtlwifi/usb.c
 +++ b/drivers/net/wireless/realtek/rtlwifi/usb.c
-@@ -807,6 +807,7 @@ static void rtl_usb_stop(struct ieee8021
+@@ -806,6 +806,7 @@ static void rtl_usb_stop(struct ieee8021
  
        tasklet_kill(&rtlusb->rx_work_tasklet);
        cancel_work_sync(&rtlpriv->works.lps_change_work);
@@ -97,7 +97,7 @@ Tested-by: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
  
        flush_workqueue(rtlpriv->works.rtl_wq);
  
-@@ -1033,6 +1034,8 @@ int rtl_usb_probe(struct usb_interface *
+@@ -1032,6 +1033,8 @@ int rtl_usb_probe(struct usb_interface *
                  rtl_fill_h2c_cmd_work_callback);
        INIT_WORK(&rtlpriv->works.lps_change_work,
                  rtl_lps_change_work_callback);
index e1f66ac1c34bc1b2c903b4cfb81122a0102448ff..f521846a3b66dfab9953fc5653cec766f2f1a21e 100644 (file)
   * @NL80211_CMD_DISCONNECT: drop a given connection; also used to notify
   *    userspace that a connection was dropped by the AP or due to other
   *    reasons, for this the %NL80211_ATTR_DISCONNECTED_BY_AP and
-@@ -757,7 +760,8 @@
-  *    of any other interfaces, and other interfaces will again take
-  *    precedence when they are used.
-  *
-- * @NL80211_CMD_SET_WDS_PEER: Set the MAC address of the peer on a WDS interface.
-+ * @NL80211_CMD_SET_WDS_PEER: Set the MAC address of the peer on a WDS interface
-+ *    (no longer supported).
-  *
-  * @NL80211_CMD_SET_MULTICAST_TO_UNICAST: Configure if this AP should perform
-  *    multicast to unicast conversion. When enabled, all multicast packets
-@@ -1177,6 +1181,10 @@
-  *    includes the contents of the frame. %NL80211_ATTR_ACK flag is included
-  *    if the recipient acknowledged the frame.
-  *
-+ * @NL80211_CMD_SET_SAR_SPECS: SAR power limitation configuration is
-+ *    passed using %NL80211_ATTR_SAR_SPEC. %NL80211_ATTR_WIPHY is used to
-+ *    specify the wiphy index to be applied to.
-+ *
-  * @NL80211_CMD_MAX: highest used command number
-  * @__NL80211_CMD_AFTER_LAST: internal use
-  */
-@@ -1407,6 +1415,8 @@ enum nl80211_commands {
-       NL80211_CMD_CONTROL_PORT_FRAME_TX_STATUS,
-+      NL80211_CMD_SET_SAR_SPECS,
-+
-       /* add new commands above here */
-       /* used to define NL80211_CMD_MAX below */
-@@ -1750,8 +1760,9 @@ enum nl80211_commands {
-  *    specify just a single bitrate, which is to be used for the beacon.
-  *    The driver must also specify support for this with the extended
-  *    features NL80211_EXT_FEATURE_BEACON_RATE_LEGACY,
-- *    NL80211_EXT_FEATURE_BEACON_RATE_HT and
-- *    NL80211_EXT_FEATURE_BEACON_RATE_VHT.
-+ *    NL80211_EXT_FEATURE_BEACON_RATE_HT,
-+ *    NL80211_EXT_FEATURE_BEACON_RATE_VHT and
-+ *    NL80211_EXT_FEATURE_BEACON_RATE_HE.
-  *
-  * @NL80211_ATTR_FRAME_MATCH: A binary attribute which typically must contain
-  *    at least one byte, currently used with @NL80211_CMD_REGISTER_FRAME.
-@@ -1955,8 +1966,15 @@ enum nl80211_commands {
+@@ -1963,8 +1966,15 @@ enum nl80211_commands {
   * @NL80211_ATTR_PROBE_RESP: Probe Response template data. Contains the entire
   *    probe-response frame. The DA field in the 802.11 header is zero-ed out,
   *    to be filled by the FW.
   * @NL80211_ATTR_HT_CAPABILITY_MASK: Specify which bits of the
   *      ATTR_HT_CAPABILITY to which attention should be paid.
   *      Currently, only mac80211 NICs support this feature.
-@@ -2077,7 +2095,8 @@ enum nl80211_commands {
-  *    until the channel switch event.
-  * @NL80211_ATTR_CH_SWITCH_BLOCK_TX: flag attribute specifying that transmission
-  *    must be blocked on the current channel (before the channel switch
-- *    operation).
-+ *    operation). Also included in the channel switch started event if quiet
-+ *    was requested by the AP.
-  * @NL80211_ATTR_CSA_IES: Nested set of attributes containing the IE information
-  *    for the time while performing a channel switch.
-  * @NL80211_ATTR_CNTDWN_OFFS_BEACON: An array of offsets (u16) to the channel
-@@ -2527,6 +2546,20 @@ enum nl80211_commands {
-  *    override mask. Used with NL80211_ATTR_S1G_CAPABILITY in
-  *    NL80211_CMD_ASSOCIATE or NL80211_CMD_CONNECT.
-  *
-+ * @NL80211_ATTR_SAE_PWE: Indicates the mechanism(s) allowed for SAE PWE
-+ *    derivation in WPA3-Personal networks which are using SAE authentication.
-+ *    This is a u8 attribute that encapsulates one of the values from
-+ *    &enum nl80211_sae_pwe_mechanism.
-+ *
-+ * @NL80211_ATTR_SAR_SPEC: SAR power limitation specification when
-+ *    used with %NL80211_CMD_SET_SAR_SPECS. The message contains fields
-+ *    of %nl80211_sar_attrs which specifies the sar type and related
-+ *    sar specs. Sar specs contains array of %nl80211_sar_specs_attrs.
-+ *
-+ * @NL80211_ATTR_RECONNECT_REQUESTED: flag attribute, used with deauth and
-+ *    disassoc events to indicate that an immediate reconnect to the AP
-+ *    is desired.
-+ *
-  * @NUM_NL80211_ATTR: total number of nl80211_attrs available
-  * @NL80211_ATTR_MAX: highest attribute number currently defined
-  * @__NL80211_ATTR_AFTER_LAST: internal use
-@@ -3016,6 +3049,14 @@ enum nl80211_attrs {
-       NL80211_ATTR_S1G_CAPABILITY,
-       NL80211_ATTR_S1G_CAPABILITY_MASK,
+@@ -3045,6 +3055,8 @@ enum nl80211_attrs {
+       NL80211_ATTR_SAR_SPEC,
  
-+      NL80211_ATTR_SAE_PWE,
-+
-+      NL80211_ATTR_RECONNECT_REQUESTED,
-+
-+      NL80211_ATTR_SAR_SPEC,
-+
 +      NL80211_ATTR_DISABLE_HE,
 +
        /* add attributes here, update the policy in nl80211.c */
  
        __NL80211_ATTR_AFTER_LAST,
-@@ -5896,6 +5937,19 @@ enum nl80211_feature_flags {
-  * @NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP: Driver/device supports
-  *    unsolicited broadcast probe response transmission
+@@ -5928,6 +5940,16 @@ enum nl80211_feature_flags {
+  * @NL80211_EXT_FEATURE_BEACON_RATE_HE: Driver supports beacon rate
+  *    configuration (AP/mesh) with HE rates.
   *
-+ * @NL80211_EXT_FEATURE_BEACON_RATE_HE: Driver supports beacon rate
-+ *    configuration (AP/mesh) with HE rates.
-+ *
 + * @NL80211_EXT_FEATURE_SECURE_LTF: Device supports secure LTF measurement
 + *      exchange protocol.
 + *
   * @NUM_NL80211_EXT_FEATURES: number of extended features.
   * @MAX_NL80211_EXT_FEATURES: highest extended feature index.
   */
-@@ -5956,6 +6010,10 @@ enum nl80211_ext_feature_index {
-       NL80211_EXT_FEATURE_SAE_OFFLOAD_AP,
+@@ -5989,6 +6011,9 @@ enum nl80211_ext_feature_index {
        NL80211_EXT_FEATURE_FILS_DISCOVERY,
        NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP,
-+      NL80211_EXT_FEATURE_BEACON_RATE_HE,
+       NL80211_EXT_FEATURE_BEACON_RATE_HE,
 +      NL80211_EXT_FEATURE_SECURE_LTF,
 +      NL80211_EXT_FEATURE_SECURE_RTT,
 +      NL80211_EXT_FEATURE_PROT_RANGE_NEGO_AND_MEASURE,
  
        /* add new features before the definition below */
        NUM_NL80211_EXT_FEATURES,
-@@ -6253,11 +6311,13 @@ struct nl80211_vendor_cmd_info {
+@@ -6286,11 +6311,13 @@ struct nl80211_vendor_cmd_info {
   * @NL80211_TDLS_PEER_HT: TDLS peer is HT capable.
   * @NL80211_TDLS_PEER_VHT: TDLS peer is VHT capable.
   * @NL80211_TDLS_PEER_WMM: TDLS peer is WMM capable.
  };
  
  /**
-@@ -6849,6 +6909,9 @@ enum nl80211_peer_measurement_ftm_capa {
+@@ -6882,6 +6909,9 @@ enum nl80211_peer_measurement_ftm_capa {
   *      if neither %NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED nor
   *    %NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set, EDCA based
   *    ranging will be used.
   *
   * @NUM_NL80211_PMSR_FTM_REQ_ATTR: internal
   * @NL80211_PMSR_FTM_REQ_ATTR_MAX: highest attribute number
-@@ -6867,6 +6930,7 @@ enum nl80211_peer_measurement_ftm_req {
+@@ -6900,6 +6930,7 @@ enum nl80211_peer_measurement_ftm_req {
        NL80211_PMSR_FTM_REQ_ATTR_REQUEST_CIVICLOC,
        NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED,
        NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED,
  
        /* keep last */
        NUM_NL80211_PMSR_FTM_REQ_ATTR,
-@@ -7124,4 +7188,115 @@ enum nl80211_unsol_bcast_probe_resp_attr
-       NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_MAX =
-               __NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_LAST - 1
- };
-+
-+/**
-+ * enum nl80211_sae_pwe_mechanism - The mechanism(s) allowed for SAE PWE
-+ *    derivation. Applicable only when WPA3-Personal SAE authentication is
-+ *    used.
-+ *
-+ * @NL80211_SAE_PWE_UNSPECIFIED: not specified, used internally to indicate that
-+ *    attribute is not present from userspace.
-+ * @NL80211_SAE_PWE_HUNT_AND_PECK: hunting-and-pecking loop only
-+ * @NL80211_SAE_PWE_HASH_TO_ELEMENT: hash-to-element only
-+ * @NL80211_SAE_PWE_BOTH: both hunting-and-pecking loop and hash-to-element
-+ *    can be used.
-+ */
-+enum nl80211_sae_pwe_mechanism {
-+      NL80211_SAE_PWE_UNSPECIFIED,
-+      NL80211_SAE_PWE_HUNT_AND_PECK,
-+      NL80211_SAE_PWE_HASH_TO_ELEMENT,
-+      NL80211_SAE_PWE_BOTH,
-+};
-+
-+/**
-+ * enum nl80211_sar_type - type of SAR specs
-+ *
-+ * @NL80211_SAR_TYPE_POWER: power limitation specified in 0.25dBm unit
-+ *
-+ */
-+enum nl80211_sar_type {
-+      NL80211_SAR_TYPE_POWER,
-+
-+      /* add new type here */
-+
-+      /* Keep last */
-+      NUM_NL80211_SAR_TYPE,
-+};
-+
-+/**
-+ * enum nl80211_sar_attrs - Attributes for SAR spec
-+ *
-+ * @NL80211_SAR_ATTR_TYPE: the SAR type as defined in &enum nl80211_sar_type.
-+ *
-+ * @NL80211_SAR_ATTR_SPECS: Nested array of SAR power
-+ *    limit specifications. Each specification contains a set
-+ *    of %nl80211_sar_specs_attrs.
-+ *
-+ *    For SET operation, it contains array of %NL80211_SAR_ATTR_SPECS_POWER
-+ *    and %NL80211_SAR_ATTR_SPECS_RANGE_INDEX.
-+ *
-+ *    For sar_capa dump, it contains array of
-+ *    %NL80211_SAR_ATTR_SPECS_START_FREQ
-+ *    and %NL80211_SAR_ATTR_SPECS_END_FREQ.
-+ *
-+ * @__NL80211_SAR_ATTR_LAST: Internal
-+ * @NL80211_SAR_ATTR_MAX: highest sar attribute
-+ *
-+ * These attributes are used with %NL80211_CMD_SET_SAR_SPEC
-+ */
-+enum nl80211_sar_attrs {
-+      __NL80211_SAR_ATTR_INVALID,
-+
-+      NL80211_SAR_ATTR_TYPE,
-+      NL80211_SAR_ATTR_SPECS,
-+
-+      __NL80211_SAR_ATTR_LAST,
-+      NL80211_SAR_ATTR_MAX = __NL80211_SAR_ATTR_LAST - 1,
-+};
-+
-+/**
-+ * enum nl80211_sar_specs_attrs - Attributes for SAR power limit specs
-+ *
-+ * @NL80211_SAR_ATTR_SPECS_POWER: Required (s32)value to specify the actual
-+ *    power limit value in units of 0.25 dBm if type is
-+ *    NL80211_SAR_TYPE_POWER. (i.e., a value of 44 represents 11 dBm).
-+ *    0 means userspace doesn't have SAR limitation on this associated range.
-+ *
-+ * @NL80211_SAR_ATTR_SPECS_RANGE_INDEX: Required (u32) value to specify the
-+ *    index of exported freq range table and the associated power limitation
-+ *    is applied to this range.
-+ *
-+ *    Userspace isn't required to set all the ranges advertised by WLAN driver,
-+ *    and userspace can skip some certain ranges. These skipped ranges don't
-+ *    have SAR limitations, and they are same as setting the
-+ *    %NL80211_SAR_ATTR_SPECS_POWER to any unreasonable high value because any
-+ *    value higher than regulatory allowed value just means SAR power
-+ *    limitation is removed, but it's required to set at least one range.
-+ *    It's not allowed to set duplicated range in one SET operation.
-+ *
-+ *    Every SET operation overwrites previous SET operation.
-+ *
-+ * @NL80211_SAR_ATTR_SPECS_START_FREQ: Required (u32) value to specify the start
-+ *    frequency of this range edge when registering SAR capability to wiphy.
-+ *    It's not a channel center frequency. The unit is kHz.
-+ *
-+ * @NL80211_SAR_ATTR_SPECS_END_FREQ: Required (u32) value to specify the end
-+ *    frequency of this range edge when registering SAR capability to wiphy.
-+ *    It's not a channel center frequency. The unit is kHz.
-+ *
-+ * @__NL80211_SAR_ATTR_SPECS_LAST: Internal
-+ * @NL80211_SAR_ATTR_SPECS_MAX: highest sar specs attribute
-+ */
-+enum nl80211_sar_specs_attrs {
-+      __NL80211_SAR_ATTR_SPECS_INVALID,
-+
-+      NL80211_SAR_ATTR_SPECS_POWER,
-+      NL80211_SAR_ATTR_SPECS_RANGE_INDEX,
-+      NL80211_SAR_ATTR_SPECS_START_FREQ,
-+      NL80211_SAR_ATTR_SPECS_END_FREQ,
-+
-+      __NL80211_SAR_ATTR_SPECS_LAST,
-+      NL80211_SAR_ATTR_SPECS_MAX = __NL80211_SAR_ATTR_SPECS_LAST - 1,
-+};
-+
- #endif /* __LINUX_NL80211_H */
index c6fafb77b14e021b3ad84e1a222480a615dfc21f..a63a2e2ee6a7f5512445dd7b39cf3a0e44c3c76f 100644 (file)
@@ -2,7 +2,7 @@ Used for AP+STA support in OpenWrt - preserve AP mode keys across STA reconnects
 
 --- a/net/mac80211/cfg.c
 +++ b/net/mac80211/cfg.c
-@@ -1307,7 +1307,6 @@ static int ieee80211_stop_ap(struct wiph
+@@ -1287,7 +1287,6 @@ static int ieee80211_stop_ap(struct wiph
        sdata->vif.bss_conf.ftmr_params = NULL;
  
        __sta_info_flush(sdata, true);
index 8d086625e4484ae602b39b42b47d6422286fe692..8a717558a7c817f56dbac16eb42c00870fabea96 100644 (file)
@@ -18,7 +18,7 @@
  static int ieee80211_ifa6_changed(struct notifier_block *nb,
                                  unsigned long data, void *arg)
  {
-@@ -1315,14 +1315,14 @@ int ieee80211_register_hw(struct ieee802
+@@ -1301,14 +1301,14 @@ int ieee80211_register_hw(struct ieee802
  
        rtnl_unlock();
  
@@ -35,7 +35,7 @@
        local->ifa6_notifier.notifier_call = ieee80211_ifa6_changed;
        result = register_inet6addr_notifier(&local->ifa6_notifier);
        if (result)
-@@ -1331,13 +1331,13 @@ int ieee80211_register_hw(struct ieee802
+@@ -1317,13 +1317,13 @@ int ieee80211_register_hw(struct ieee802
  
        return 0;
  
@@ -52,7 +52,7 @@
   fail_ifa:
  #endif
        wiphy_unregister(local->hw.wiphy);
-@@ -1365,10 +1365,10 @@ void ieee80211_unregister_hw(struct ieee
+@@ -1351,10 +1351,10 @@ void ieee80211_unregister_hw(struct ieee
        tasklet_kill(&local->tx_pending_tasklet);
        tasklet_kill(&local->tasklet);
  
index f8c3821c51b64595985e19474ba1d01ae47355b6..96e6195a2996e28ec20e3f61cbbc01a1544bc081 100644 (file)
@@ -1,6 +1,6 @@
 --- a/net/mac80211/cfg.c
 +++ b/net/mac80211/cfg.c
-@@ -2463,7 +2463,7 @@ static int ieee80211_scan(struct wiphy *
+@@ -2443,7 +2443,7 @@ static int ieee80211_scan(struct wiphy *
                 * the  frames sent while scanning on other channel will be
                 * lost)
                 */
diff --git a/package/kernel/mac80211/patches/subsys/300-cfg80211-support-immediate-reconnect-request-hint.patch b/package/kernel/mac80211/patches/subsys/300-cfg80211-support-immediate-reconnect-request-hint.patch
deleted file mode 100644 (file)
index 425b689..0000000
+++ /dev/null
@@ -1,279 +0,0 @@
-From: Johannes Berg <johannes.berg@intel.com>
-Date: Sun, 6 Dec 2020 14:54:42 +0200
-Subject: [PATCH] cfg80211: support immediate reconnect request hint
-
-There are cases where it's necessary to disconnect, but an
-immediate reconnection is desired. Support a hint to userspace
-that this is the case, by including a new attribute in the
-deauth or disassoc event.
-
-Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
-Link: https://lore.kernel.org/r/iwlwifi.20201206145305.58d33941fb9d.I0e7168c205c7949529c8e3b86f3c9b12c01a7017@changeid
-Signed-off-by: Johannes Berg <johannes.berg@intel.com>
----
-
---- a/include/net/cfg80211.h
-+++ b/include/net/cfg80211.h
-@@ -6410,13 +6410,15 @@ void cfg80211_abandon_assoc(struct net_d
-  * @dev: network device
-  * @buf: 802.11 frame (header + body)
-  * @len: length of the frame data
-+ * @reconnect: immediate reconnect is desired (include the nl80211 attribute)
-  *
-  * This function is called whenever deauthentication has been processed in
-  * station mode. This includes both received deauthentication frames and
-  * locally generated ones. This function may sleep. The caller must hold the
-  * corresponding wdev's mutex.
-  */
--void cfg80211_tx_mlme_mgmt(struct net_device *dev, const u8 *buf, size_t len);
-+void cfg80211_tx_mlme_mgmt(struct net_device *dev, const u8 *buf, size_t len,
-+                         bool reconnect);
- /**
-  * cfg80211_rx_unprot_mlme_mgmt - notification of unprotected mlme mgmt frame
---- a/net/mac80211/mlme.c
-+++ b/net/mac80211/mlme.c
-@@ -2725,7 +2725,7 @@ static void ieee80211_report_disconnect(
-       };
-       if (tx)
--              cfg80211_tx_mlme_mgmt(sdata->dev, buf, len);
-+              cfg80211_tx_mlme_mgmt(sdata->dev, buf, len, false);
-       else
-               cfg80211_rx_mlme_mgmt(sdata->dev, buf, len);
-@@ -4719,7 +4719,8 @@ void ieee80211_mgd_quiesce(struct ieee80
-               if (ifmgd->auth_data)
-                       ieee80211_destroy_auth_data(sdata, false);
-               cfg80211_tx_mlme_mgmt(sdata->dev, frame_buf,
--                                    IEEE80211_DEAUTH_FRAME_LEN);
-+                                    IEEE80211_DEAUTH_FRAME_LEN,
-+                                    false);
-       }
-       /* This is a bit of a hack - we should find a better and more generic
---- a/net/wireless/mlme.c
-+++ b/net/wireless/mlme.c
-@@ -4,7 +4,7 @@
-  *
-  * Copyright (c) 2009, Jouni Malinen <j@w1.fi>
-  * Copyright (c) 2015         Intel Deutschland GmbH
-- * Copyright (C) 2019 Intel Corporation
-+ * Copyright (C) 2019-2020 Intel Corporation
-  */
- #include <linux/kernel.h>
-@@ -81,7 +81,8 @@ static void cfg80211_process_auth(struct
- }
- static void cfg80211_process_deauth(struct wireless_dev *wdev,
--                                  const u8 *buf, size_t len)
-+                                  const u8 *buf, size_t len,
-+                                  bool reconnect)
- {
-       struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
-       struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)buf;
-@@ -89,7 +90,7 @@ static void cfg80211_process_deauth(stru
-       u16 reason_code = le16_to_cpu(mgmt->u.deauth.reason_code);
-       bool from_ap = !ether_addr_equal(mgmt->sa, wdev->netdev->dev_addr);
--      nl80211_send_deauth(rdev, wdev->netdev, buf, len, GFP_KERNEL);
-+      nl80211_send_deauth(rdev, wdev->netdev, buf, len, reconnect, GFP_KERNEL);
-       if (!wdev->current_bss ||
-           !ether_addr_equal(wdev->current_bss->pub.bssid, bssid))
-@@ -100,7 +101,8 @@ static void cfg80211_process_deauth(stru
- }
- static void cfg80211_process_disassoc(struct wireless_dev *wdev,
--                                    const u8 *buf, size_t len)
-+                                    const u8 *buf, size_t len,
-+                                    bool reconnect)
- {
-       struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
-       struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)buf;
-@@ -108,7 +110,8 @@ static void cfg80211_process_disassoc(st
-       u16 reason_code = le16_to_cpu(mgmt->u.disassoc.reason_code);
-       bool from_ap = !ether_addr_equal(mgmt->sa, wdev->netdev->dev_addr);
--      nl80211_send_disassoc(rdev, wdev->netdev, buf, len, GFP_KERNEL);
-+      nl80211_send_disassoc(rdev, wdev->netdev, buf, len, reconnect,
-+                            GFP_KERNEL);
-       if (WARN_ON(!wdev->current_bss ||
-                   !ether_addr_equal(wdev->current_bss->pub.bssid, bssid)))
-@@ -133,9 +136,9 @@ void cfg80211_rx_mlme_mgmt(struct net_de
-       if (ieee80211_is_auth(mgmt->frame_control))
-               cfg80211_process_auth(wdev, buf, len);
-       else if (ieee80211_is_deauth(mgmt->frame_control))
--              cfg80211_process_deauth(wdev, buf, len);
-+              cfg80211_process_deauth(wdev, buf, len, false);
-       else if (ieee80211_is_disassoc(mgmt->frame_control))
--              cfg80211_process_disassoc(wdev, buf, len);
-+              cfg80211_process_disassoc(wdev, buf, len, false);
- }
- EXPORT_SYMBOL(cfg80211_rx_mlme_mgmt);
-@@ -180,22 +183,23 @@ void cfg80211_abandon_assoc(struct net_d
- }
- EXPORT_SYMBOL(cfg80211_abandon_assoc);
--void cfg80211_tx_mlme_mgmt(struct net_device *dev, const u8 *buf, size_t len)
-+void cfg80211_tx_mlme_mgmt(struct net_device *dev, const u8 *buf, size_t len,
-+                         bool reconnect)
- {
-       struct wireless_dev *wdev = dev->ieee80211_ptr;
-       struct ieee80211_mgmt *mgmt = (void *)buf;
-       ASSERT_WDEV_LOCK(wdev);
--      trace_cfg80211_tx_mlme_mgmt(dev, buf, len);
-+      trace_cfg80211_tx_mlme_mgmt(dev, buf, len, reconnect);
-       if (WARN_ON(len < 2))
-               return;
-       if (ieee80211_is_deauth(mgmt->frame_control))
--              cfg80211_process_deauth(wdev, buf, len);
-+              cfg80211_process_deauth(wdev, buf, len, reconnect);
-       else
--              cfg80211_process_disassoc(wdev, buf, len);
-+              cfg80211_process_disassoc(wdev, buf, len, reconnect);
- }
- EXPORT_SYMBOL(cfg80211_tx_mlme_mgmt);
---- a/net/wireless/nl80211.c
-+++ b/net/wireless/nl80211.c
-@@ -736,6 +736,7 @@ static const struct nla_policy nl80211_p
-               NLA_POLICY_EXACT_LEN(IEEE80211_S1G_CAPABILITY_LEN),
-       [NL80211_ATTR_S1G_CAPABILITY_MASK] =
-               NLA_POLICY_EXACT_LEN(IEEE80211_S1G_CAPABILITY_LEN),
-+      [NL80211_ATTR_RECONNECT_REQUESTED] = { .type = NLA_REJECT },
- };
- /* policy for the key attributes */
-@@ -15902,7 +15903,7 @@ static void nl80211_send_mlme_event(stru
-                                   const u8 *buf, size_t len,
-                                   enum nl80211_commands cmd, gfp_t gfp,
-                                   int uapsd_queues, const u8 *req_ies,
--                                  size_t req_ies_len)
-+                                  size_t req_ies_len, bool reconnect)
- {
-       struct sk_buff *msg;
-       void *hdr;
-@@ -15924,6 +15925,9 @@ static void nl80211_send_mlme_event(stru
-            nla_put(msg, NL80211_ATTR_REQ_IE, req_ies_len, req_ies)))
-               goto nla_put_failure;
-+      if (reconnect && nla_put_flag(msg, NL80211_ATTR_RECONNECT_REQUESTED))
-+              goto nla_put_failure;
-+
-       if (uapsd_queues >= 0) {
-               struct nlattr *nla_wmm =
-                       nla_nest_start_noflag(msg, NL80211_ATTR_STA_WME);
-@@ -15952,7 +15956,8 @@ void nl80211_send_rx_auth(struct cfg8021
-                         size_t len, gfp_t gfp)
- {
-       nl80211_send_mlme_event(rdev, netdev, buf, len,
--                              NL80211_CMD_AUTHENTICATE, gfp, -1, NULL, 0);
-+                              NL80211_CMD_AUTHENTICATE, gfp, -1, NULL, 0,
-+                              false);
- }
- void nl80211_send_rx_assoc(struct cfg80211_registered_device *rdev,
-@@ -15962,23 +15967,25 @@ void nl80211_send_rx_assoc(struct cfg802
- {
-       nl80211_send_mlme_event(rdev, netdev, buf, len,
-                               NL80211_CMD_ASSOCIATE, gfp, uapsd_queues,
--                              req_ies, req_ies_len);
-+                              req_ies, req_ies_len, false);
- }
- void nl80211_send_deauth(struct cfg80211_registered_device *rdev,
-                        struct net_device *netdev, const u8 *buf,
--                       size_t len, gfp_t gfp)
-+                       size_t len, bool reconnect, gfp_t gfp)
- {
-       nl80211_send_mlme_event(rdev, netdev, buf, len,
--                              NL80211_CMD_DEAUTHENTICATE, gfp, -1, NULL, 0);
-+                              NL80211_CMD_DEAUTHENTICATE, gfp, -1, NULL, 0,
-+                              reconnect);
- }
- void nl80211_send_disassoc(struct cfg80211_registered_device *rdev,
-                          struct net_device *netdev, const u8 *buf,
--                         size_t len, gfp_t gfp)
-+                         size_t len, bool reconnect, gfp_t gfp)
- {
-       nl80211_send_mlme_event(rdev, netdev, buf, len,
--                              NL80211_CMD_DISASSOCIATE, gfp, -1, NULL, 0);
-+                              NL80211_CMD_DISASSOCIATE, gfp, -1, NULL, 0,
-+                              reconnect);
- }
- void cfg80211_rx_unprot_mlme_mgmt(struct net_device *dev, const u8 *buf,
-@@ -16009,7 +16016,7 @@ void cfg80211_rx_unprot_mlme_mgmt(struct
-       trace_cfg80211_rx_unprot_mlme_mgmt(dev, buf, len);
-       nl80211_send_mlme_event(rdev, dev, buf, len, cmd, GFP_ATOMIC, -1,
--                              NULL, 0);
-+                              NULL, 0, false);
- }
- EXPORT_SYMBOL(cfg80211_rx_unprot_mlme_mgmt);
---- a/net/wireless/nl80211.h
-+++ b/net/wireless/nl80211.h
-@@ -1,7 +1,7 @@
- /* SPDX-License-Identifier: GPL-2.0 */
- /*
-  * Portions of this file
-- * Copyright (C) 2018 Intel Corporation
-+ * Copyright (C) 2018, 2020 Intel Corporation
-  */
- #ifndef __NET_WIRELESS_NL80211_H
- #define __NET_WIRELESS_NL80211_H
-@@ -69,10 +69,12 @@ void nl80211_send_rx_assoc(struct cfg802
-                          const u8 *req_ies, size_t req_ies_len);
- void nl80211_send_deauth(struct cfg80211_registered_device *rdev,
-                        struct net_device *netdev,
--                       const u8 *buf, size_t len, gfp_t gfp);
-+                       const u8 *buf, size_t len,
-+                       bool reconnect, gfp_t gfp);
- void nl80211_send_disassoc(struct cfg80211_registered_device *rdev,
-                          struct net_device *netdev,
--                         const u8 *buf, size_t len, gfp_t gfp);
-+                         const u8 *buf, size_t len,
-+                         bool reconnect, gfp_t gfp);
- void nl80211_send_auth_timeout(struct cfg80211_registered_device *rdev,
-                              struct net_device *netdev,
-                              const u8 *addr, gfp_t gfp);
---- a/net/wireless/trace.h
-+++ b/net/wireless/trace.h
-@@ -2684,19 +2684,23 @@ DEFINE_EVENT(netdev_frame_event, cfg8021
- );
- TRACE_EVENT(cfg80211_tx_mlme_mgmt,
--      TP_PROTO(struct net_device *netdev, const u8 *buf, int len),
--      TP_ARGS(netdev, buf, len),
-+      TP_PROTO(struct net_device *netdev, const u8 *buf, int len,
-+               bool reconnect),
-+      TP_ARGS(netdev, buf, len, reconnect),
-       TP_STRUCT__entry(
-               NETDEV_ENTRY
-               __dynamic_array(u8, frame, len)
-+              __field(int, reconnect)
-       ),
-       TP_fast_assign(
-               NETDEV_ASSIGN;
-               memcpy(__get_dynamic_array(frame), buf, len);
-+              __entry->reconnect = reconnect;
-       ),
--      TP_printk(NETDEV_PR_FMT ", ftype:0x%.2x",
-+      TP_printk(NETDEV_PR_FMT ", ftype:0x%.2x reconnect:%d",
-                 NETDEV_PR_ARG,
--                le16_to_cpup((__le16 *)__get_dynamic_array(frame)))
-+                le16_to_cpup((__le16 *)__get_dynamic_array(frame)),
-+                __entry->reconnect)
- );
- DECLARE_EVENT_CLASS(netdev_mac_evt,
diff --git a/package/kernel/mac80211/patches/subsys/301-mac80211-support-driver-based-disconnect-with-reconn.patch b/package/kernel/mac80211/patches/subsys/301-mac80211-support-driver-based-disconnect-with-reconn.patch
deleted file mode 100644 (file)
index cc9602d..0000000
+++ /dev/null
@@ -1,271 +0,0 @@
-From: Johannes Berg <johannes.berg@intel.com>
-Date: Sun, 6 Dec 2020 14:54:43 +0200
-Subject: [PATCH] mac80211: support driver-based disconnect with reconnect hint
-
-Support the driver indicating that a disconnection needs
-to be performed, and pass through the reconnect hint in
-this case.
-
-Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
-Link: https://lore.kernel.org/r/iwlwifi.20201206145305.5c8dab7a22a0.I58459fdf6968b16c90cab9c574f0f04ca22b0c79@changeid
-Signed-off-by: Johannes Berg <johannes.berg@intel.com>
----
-
---- a/include/net/mac80211.h
-+++ b/include/net/mac80211.h
-@@ -5885,6 +5885,17 @@ void ieee80211_beacon_loss(struct ieee80
- void ieee80211_connection_loss(struct ieee80211_vif *vif);
- /**
-+ * ieee80211_disconnect - request disconnection
-+ *
-+ * @vif: &struct ieee80211_vif pointer from the add_interface callback.
-+ * @reconnect: immediate reconnect is desired
-+ *
-+ * Request disconnection from the current network and, if enabled, send a
-+ * hint to the higher layers that immediate reconnect is desired.
-+ */
-+void ieee80211_disconnect(struct ieee80211_vif *vif, bool reconnect);
-+
-+/**
-  * ieee80211_resume_disconnect - disconnect from AP after resume
-  *
-  * @vif: &struct ieee80211_vif pointer from the add_interface callback.
---- a/net/mac80211/ieee80211_i.h
-+++ b/net/mac80211/ieee80211_i.h
-@@ -450,7 +450,9 @@ struct ieee80211_if_managed {
-       unsigned long probe_timeout;
-       int probe_send_count;
-       bool nullfunc_failed;
--      bool connection_loss;
-+      u8 connection_loss:1,
-+         driver_disconnect:1,
-+         reconnect:1;
-       struct cfg80211_bss *associated;
-       struct ieee80211_mgd_auth_data *auth_data;
---- a/net/mac80211/mlme.c
-+++ b/net/mac80211/mlme.c
-@@ -2716,7 +2716,7 @@ EXPORT_SYMBOL(ieee80211_ap_probereq_get)
- static void ieee80211_report_disconnect(struct ieee80211_sub_if_data *sdata,
-                                       const u8 *buf, size_t len, bool tx,
--                                      u16 reason)
-+                                      u16 reason, bool reconnect)
- {
-       struct ieee80211_event event = {
-               .type = MLME_EVENT,
-@@ -2725,7 +2725,7 @@ static void ieee80211_report_disconnect(
-       };
-       if (tx)
--              cfg80211_tx_mlme_mgmt(sdata->dev, buf, len, false);
-+              cfg80211_tx_mlme_mgmt(sdata->dev, buf, len, reconnect);
-       else
-               cfg80211_rx_mlme_mgmt(sdata->dev, buf, len);
-@@ -2747,13 +2747,18 @@ static void __ieee80211_disconnect(struc
-       tx = !sdata->csa_block_tx;
--      /* AP is probably out of range (or not reachable for another reason) so
--       * remove the bss struct for that AP.
--       */
--      cfg80211_unlink_bss(local->hw.wiphy, ifmgd->associated);
-+      if (!ifmgd->driver_disconnect) {
-+              /*
-+               * AP is probably out of range (or not reachable for another
-+               * reason) so remove the bss struct for that AP.
-+               */
-+              cfg80211_unlink_bss(local->hw.wiphy, ifmgd->associated);
-+      }
-       ieee80211_set_disassoc(sdata, IEEE80211_STYPE_DEAUTH,
--                             WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY,
-+                             ifmgd->driver_disconnect ?
-+                                      WLAN_REASON_DEAUTH_LEAVING :
-+                                      WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY,
-                              tx, frame_buf);
-       mutex_lock(&local->mtx);
-       sdata->vif.csa_active = false;
-@@ -2766,7 +2771,9 @@ static void __ieee80211_disconnect(struc
-       mutex_unlock(&local->mtx);
-       ieee80211_report_disconnect(sdata, frame_buf, sizeof(frame_buf), tx,
--                                  WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY);
-+                                  WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY,
-+                                  ifmgd->reconnect);
-+      ifmgd->reconnect = false;
-       sdata_unlock(sdata);
- }
-@@ -2785,6 +2792,13 @@ static void ieee80211_beacon_connection_
-               sdata_info(sdata, "Connection to AP %pM lost\n",
-                          ifmgd->bssid);
-               __ieee80211_disconnect(sdata);
-+              ifmgd->connection_loss = false;
-+      } else if (ifmgd->driver_disconnect) {
-+              sdata_info(sdata,
-+                         "Driver requested disconnection from AP %pM\n",
-+                         ifmgd->bssid);
-+              __ieee80211_disconnect(sdata);
-+              ifmgd->driver_disconnect = false;
-       } else {
-               ieee80211_mgd_probe_ap(sdata, true);
-       }
-@@ -2823,6 +2837,21 @@ void ieee80211_connection_loss(struct ie
- }
- EXPORT_SYMBOL(ieee80211_connection_loss);
-+void ieee80211_disconnect(struct ieee80211_vif *vif, bool reconnect)
-+{
-+      struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
-+      struct ieee80211_hw *hw = &sdata->local->hw;
-+
-+      trace_api_disconnect(sdata, reconnect);
-+
-+      if (WARN_ON(sdata->vif.type != NL80211_IFTYPE_STATION))
-+              return;
-+
-+      sdata->u.mgd.driver_disconnect = true;
-+      sdata->u.mgd.reconnect = reconnect;
-+      ieee80211_queue_work(hw, &sdata->u.mgd.beacon_connection_loss_work);
-+}
-+EXPORT_SYMBOL(ieee80211_disconnect);
- static void ieee80211_destroy_auth_data(struct ieee80211_sub_if_data *sdata,
-                                       bool assoc)
-@@ -3126,7 +3155,7 @@ static void ieee80211_rx_mgmt_deauth(str
-               ieee80211_set_disassoc(sdata, 0, 0, false, NULL);
-               ieee80211_report_disconnect(sdata, (u8 *)mgmt, len, false,
--                                          reason_code);
-+                                          reason_code, false);
-               return;
-       }
-@@ -3175,7 +3204,8 @@ static void ieee80211_rx_mgmt_disassoc(s
-       ieee80211_set_disassoc(sdata, 0, 0, false, NULL);
--      ieee80211_report_disconnect(sdata, (u8 *)mgmt, len, false, reason_code);
-+      ieee80211_report_disconnect(sdata, (u8 *)mgmt, len, false, reason_code,
-+                                  false);
- }
- static void ieee80211_get_rates(struct ieee80211_supported_band *sband,
-@@ -4199,7 +4229,8 @@ static void ieee80211_rx_mgmt_beacon(str
-                                      true, deauth_buf);
-               ieee80211_report_disconnect(sdata, deauth_buf,
-                                           sizeof(deauth_buf), true,
--                                          WLAN_REASON_DEAUTH_LEAVING);
-+                                          WLAN_REASON_DEAUTH_LEAVING,
-+                                          false);
-               return;
-       }
-@@ -4344,7 +4375,7 @@ static void ieee80211_sta_connection_los
-                              tx, frame_buf);
-       ieee80211_report_disconnect(sdata, frame_buf, sizeof(frame_buf), true,
--                                  reason);
-+                                  reason, false);
- }
- static int ieee80211_auth(struct ieee80211_sub_if_data *sdata)
-@@ -5434,7 +5465,8 @@ int ieee80211_mgd_auth(struct ieee80211_
-               ieee80211_report_disconnect(sdata, frame_buf,
-                                           sizeof(frame_buf), true,
--                                          WLAN_REASON_UNSPECIFIED);
-+                                          WLAN_REASON_UNSPECIFIED,
-+                                          false);
-       }
-       sdata_info(sdata, "authenticate with %pM\n", req->bss->bssid);
-@@ -5506,7 +5538,8 @@ int ieee80211_mgd_assoc(struct ieee80211
-               ieee80211_report_disconnect(sdata, frame_buf,
-                                           sizeof(frame_buf), true,
--                                          WLAN_REASON_UNSPECIFIED);
-+                                          WLAN_REASON_UNSPECIFIED,
-+                                          false);
-       }
-       if (ifmgd->auth_data && !ifmgd->auth_data->done) {
-@@ -5809,7 +5842,7 @@ int ieee80211_mgd_deauth(struct ieee8021
-               ieee80211_destroy_auth_data(sdata, false);
-               ieee80211_report_disconnect(sdata, frame_buf,
-                                           sizeof(frame_buf), true,
--                                          req->reason_code);
-+                                          req->reason_code, false);
-               return 0;
-       }
-@@ -5829,7 +5862,7 @@ int ieee80211_mgd_deauth(struct ieee8021
-               ieee80211_destroy_assoc_data(sdata, false, true);
-               ieee80211_report_disconnect(sdata, frame_buf,
-                                           sizeof(frame_buf), true,
--                                          req->reason_code);
-+                                          req->reason_code, false);
-               return 0;
-       }
-@@ -5844,7 +5877,7 @@ int ieee80211_mgd_deauth(struct ieee8021
-                                      req->reason_code, tx, frame_buf);
-               ieee80211_report_disconnect(sdata, frame_buf,
-                                           sizeof(frame_buf), true,
--                                          req->reason_code);
-+                                          req->reason_code, false);
-               return 0;
-       }
-@@ -5877,7 +5910,7 @@ int ieee80211_mgd_disassoc(struct ieee80
-                              frame_buf);
-       ieee80211_report_disconnect(sdata, frame_buf, sizeof(frame_buf), true,
--                                  req->reason_code);
-+                                  req->reason_code, false);
-       return 0;
- }
---- a/net/mac80211/trace.h
-+++ b/net/mac80211/trace.h
-@@ -2,7 +2,7 @@
- /*
- * Portions of this file
- * Copyright(c) 2016-2017 Intel Deutschland GmbH
--* Copyright (C) 2018 - 2019 Intel Corporation
-+* Copyright (C) 2018 - 2020 Intel Corporation
- */
- #if !defined(__MAC80211_DRIVER_TRACE) || defined(TRACE_HEADER_MULTI_READ)
-@@ -2086,6 +2086,27 @@ TRACE_EVENT(api_connection_loss,
-       )
- );
-+TRACE_EVENT(api_disconnect,
-+      TP_PROTO(struct ieee80211_sub_if_data *sdata, bool reconnect),
-+
-+      TP_ARGS(sdata, reconnect),
-+
-+      TP_STRUCT__entry(
-+              VIF_ENTRY
-+              __field(int, reconnect)
-+      ),
-+
-+      TP_fast_assign(
-+              VIF_ASSIGN;
-+              __entry->reconnect = reconnect;
-+      ),
-+
-+      TP_printk(
-+              VIF_PR_FMT " reconnect:%d",
-+              VIF_PR_ARG, __entry->reconnect
-+      )
-+);
-+
- TRACE_EVENT(api_cqm_rssi_notify,
-       TP_PROTO(struct ieee80211_sub_if_data *sdata,
-                enum nl80211_cqm_rssi_threshold_event rssi_event,
diff --git a/package/kernel/mac80211/patches/subsys/302-cfg80211-Add-support-to-configure-SAE-PWE-value-to-d.patch b/package/kernel/mac80211/patches/subsys/302-cfg80211-Add-support-to-configure-SAE-PWE-value-to-d.patch
deleted file mode 100644 (file)
index da88d14..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-From: Rohan Dutta <drohan@codeaurora.org>
-Date: Tue, 27 Oct 2020 12:09:10 +0200
-Subject: [PATCH] cfg80211: Add support to configure SAE PWE value to drivers
-
-Add support to configure SAE PWE preference from userspace to drivers in
-both AP and STA modes. This is needed for cases where the driver takes
-care of Authentication frame processing (SME in the driver) so that
-correct enforcement of the acceptable PWE derivation mechanism can be
-performed.
-
-The userspace applications can pass the sae_pwe value using the
-NL80211_ATTR_SAE_PWE attribute in the NL80211_CMD_CONNECT and
-NL80211_CMD_START_AP commands to the driver. This allows selection
-between the hunting-and-pecking loop and hash-to-element options for PWE
-derivation. For backwards compatibility, this new attribute is optional
-and if not included, the driver is notified of the value being
-unspecified.
-
-Signed-off-by: Rohan Dutta <drohan@codeaurora.org>
-Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
-Link: https://lore.kernel.org/r/20201027100910.22283-1-jouni@codeaurora.org
-Signed-off-by: Johannes Berg <johannes.berg@intel.com>
----
-
---- a/include/net/cfg80211.h
-+++ b/include/net/cfg80211.h
-@@ -1009,6 +1009,14 @@ struct survey_info {
-  * @sae_pwd: password for SAE authentication (for devices supporting SAE
-  *    offload)
-  * @sae_pwd_len: length of SAE password (for devices supporting SAE offload)
-+ * @sae_pwe: The mechanisms allowed for SAE PWE derivation
-+ *    NL80211_SAE_PWE_UNSPECIFIED: Not-specified, used to indicate userspace
-+ *            did not specify any preference. The driver should follow its
-+ *            internal policy in such a scenario.
-+ *    NL80211_SAE_PWE_HUNT_AND_PECK: Allow hunting-and-pecking loop only
-+ *    NL80211_SAE_PWE_HASH_TO_ELEMENT: Allow hash-to-element only
-+ *    NL80211_SAE_PWE_BOTH: Allow either hunting-and-pecking loop
-+ *            or hash-to-element
-  */
- struct cfg80211_crypto_settings {
-       u32 wpa_versions;
-@@ -1027,6 +1035,7 @@ struct cfg80211_crypto_settings {
-       const u8 *psk;
-       const u8 *sae_pwd;
-       u8 sae_pwd_len;
-+      enum nl80211_sae_pwe_mechanism sae_pwe;
- };
- /**
---- a/net/wireless/nl80211.c
-+++ b/net/wireless/nl80211.c
-@@ -736,6 +736,9 @@ static const struct nla_policy nl80211_p
-               NLA_POLICY_EXACT_LEN(IEEE80211_S1G_CAPABILITY_LEN),
-       [NL80211_ATTR_S1G_CAPABILITY_MASK] =
-               NLA_POLICY_EXACT_LEN(IEEE80211_S1G_CAPABILITY_LEN),
-+      [NL80211_ATTR_SAE_PWE] =
-+              NLA_POLICY_RANGE(NLA_U8, NL80211_SAE_PWE_HUNT_AND_PECK,
-+                               NL80211_SAE_PWE_BOTH),
-       [NL80211_ATTR_RECONNECT_REQUESTED] = { .type = NLA_REJECT },
- };
-@@ -9763,6 +9766,12 @@ static int nl80211_crypto_settings(struc
-                       nla_len(info->attrs[NL80211_ATTR_SAE_PASSWORD]);
-       }
-+      if (info->attrs[NL80211_ATTR_SAE_PWE])
-+              settings->sae_pwe =
-+                      nla_get_u8(info->attrs[NL80211_ATTR_SAE_PWE]);
-+      else
-+              settings->sae_pwe = NL80211_SAE_PWE_UNSPECIFIED;
-+
-       return 0;
- }
index 6adca7d70d9e08d691ab6d28db8523bf5e463b22..2d7db8be36ebdfba2b3f04eb5fea4f834fb3e3b7 100644 (file)
@@ -68,7 +68,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  static int fq_init(struct fq *fq, int flows_cnt)
 --- a/net/mac80211/ieee80211_i.h
 +++ b/net/mac80211/ieee80211_i.h
-@@ -846,7 +846,6 @@ enum txq_info_flags {
+@@ -852,7 +852,6 @@ enum txq_info_flags {
   */
  struct txq_info {
        struct fq_tin tin;
@@ -78,7 +78,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        struct sk_buff_head frags;
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -1322,7 +1322,7 @@ static struct sk_buff *codel_dequeue_fun
+@@ -1309,7 +1309,7 @@ static struct sk_buff *codel_dequeue_fun
        fq = &local->fq;
  
        if (cvars == &txqi->def_cvars)
@@ -87,7 +87,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        else
                flow = &fq->flows[cvars - local->cvars];
  
-@@ -1365,7 +1365,7 @@ static struct sk_buff *fq_tin_dequeue_fu
+@@ -1352,7 +1352,7 @@ static struct sk_buff *fq_tin_dequeue_fu
                cparams = &local->cparams;
        }
  
@@ -96,7 +96,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
                cvars = &txqi->def_cvars;
        else
                cvars = &local->cvars[flow - fq->flows];
-@@ -1392,17 +1392,6 @@ static void fq_skb_free_func(struct fq *
+@@ -1379,17 +1379,6 @@ static void fq_skb_free_func(struct fq *
        ieee80211_free_txskb(&local->hw, skb);
  }
  
@@ -114,7 +114,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  static void ieee80211_txq_enqueue(struct ieee80211_local *local,
                                  struct txq_info *txqi,
                                  struct sk_buff *skb)
-@@ -1415,8 +1404,7 @@ static void ieee80211_txq_enqueue(struct
+@@ -1402,8 +1391,7 @@ static void ieee80211_txq_enqueue(struct
  
        spin_lock_bh(&fq->lock);
        fq_tin_enqueue(fq, tin, flow_idx, skb,
@@ -124,7 +124,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        spin_unlock_bh(&fq->lock);
  }
  
-@@ -1459,7 +1447,6 @@ void ieee80211_txq_init(struct ieee80211
+@@ -1446,7 +1434,6 @@ void ieee80211_txq_init(struct ieee80211
                        struct txq_info *txqi, int tid)
  {
        fq_tin_init(&txqi->tin);
@@ -132,7 +132,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        codel_vars_init(&txqi->def_cvars);
        codel_stats_init(&txqi->cstats);
        __skb_queue_head_init(&txqi->frags);
-@@ -3332,8 +3319,7 @@ static bool ieee80211_amsdu_aggregate(st
+@@ -3281,8 +3268,7 @@ static bool ieee80211_amsdu_aggregate(st
         */
  
        tin = &txqi->tin;
index 793c76abec865cef3ab7dadc4fa4aede1b7acb00..2fa2ba41ac2ffd63795678c41dd72dbf097b76b5 100644 (file)
@@ -306,7 +306,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  #endif
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -3386,8 +3386,6 @@ out_recalc:
+@@ -3335,8 +3335,6 @@ out_recalc:
        if (head->len != orig_len) {
                flow->backlog += head->len - orig_len;
                tin->backlog_bytes += head->len - orig_len;
index 49af25eb1d09ea366ccd9ecccd9a050343ebbdbb..4f0e5fb31a831311fa2d8e9dcdc418898d4dd4be 100644 (file)
@@ -26,7 +26,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 
 --- a/include/net/mac80211.h
 +++ b/include/net/mac80211.h
-@@ -1297,6 +1297,8 @@ ieee80211_tx_info_clear_status(struct ie
+@@ -1300,6 +1300,8 @@ ieee80211_tx_info_clear_status(struct ie
   *    the "0-length PSDU" field included there.  The value for it is
   *    in &struct ieee80211_rx_status.  Note that if this value isn't
   *    known the frame shouldn't be reported.
@@ -35,7 +35,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
   */
  enum mac80211_rx_flags {
        RX_FLAG_MMIC_ERROR              = BIT(0),
-@@ -1329,6 +1331,7 @@ enum mac80211_rx_flags {
+@@ -1332,6 +1334,7 @@ enum mac80211_rx_flags {
        RX_FLAG_RADIOTAP_HE_MU          = BIT(27),
        RX_FLAG_RADIOTAP_LSIG           = BIT(28),
        RX_FLAG_NO_PSDU                 = BIT(29),
@@ -43,7 +43,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  };
  
  /**
-@@ -1650,11 +1653,15 @@ enum ieee80211_vif_flags {
+@@ -1653,11 +1656,15 @@ enum ieee80211_vif_flags {
   *    The driver supports sending frames passed as 802.3 frames by mac80211.
   *    It must also support sending 802.11 packets for the same interface.
   * @IEEE80211_OFFLOAD_ENCAP_4ADDR: support 4-address mode encapsulation offload
@@ -59,7 +59,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  };
  
  /**
-@@ -2390,6 +2397,9 @@ struct ieee80211_txq {
+@@ -2393,6 +2400,9 @@ struct ieee80211_txq {
   * @IEEE80211_HW_SUPPORTS_TX_ENCAP_OFFLOAD: Hardware supports tx encapsulation
   *    offload
   *
@@ -69,7 +69,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
   * @NUM_IEEE80211_HW_FLAGS: number of hardware flags, used for sizing arrays
   */
  enum ieee80211_hw_flags {
-@@ -2443,6 +2453,7 @@ enum ieee80211_hw_flags {
+@@ -2446,6 +2456,7 @@ enum ieee80211_hw_flags {
        IEEE80211_HW_SUPPORTS_ONLY_HE_MULTI_BSSID,
        IEEE80211_HW_AMPDU_KEYBORDER_SUPPORT,
        IEEE80211_HW_SUPPORTS_TX_ENCAP_OFFLOAD,
@@ -77,10 +77,10 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  
        /* keep last, obviously */
        NUM_IEEE80211_HW_FLAGS
-@@ -4196,6 +4207,9 @@ struct ieee80211_ops {
-                                  struct ieee80211_vif *vif);
-       void (*sta_set_4addr)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+@@ -4202,6 +4213,9 @@ struct ieee80211_ops {
                              struct ieee80211_sta *sta, bool enabled);
+       int (*set_sar_specs)(struct ieee80211_hw *hw,
+                            const struct cfg80211_sar_specs *sar);
 +      void (*sta_set_decap_offload)(struct ieee80211_hw *hw,
 +                                    struct ieee80211_vif *vif,
 +                                    struct ieee80211_sta *sta, bool enabled);
@@ -132,7 +132,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  #endif /* __MAC80211_DRIVER_OPS */
 --- a/net/mac80211/iface.c
 +++ b/net/mac80211/iface.c
-@@ -856,7 +856,7 @@ static const struct net_device_ops ieee8
+@@ -815,7 +815,7 @@ static const struct net_device_ops ieee8
  
  };
  
@@ -141,7 +141,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  {
        switch (iftype) {
        /* P2P GO and client are mapped to AP/STATION types */
-@@ -876,7 +876,7 @@ static bool ieee80211_set_sdata_offload_
+@@ -835,7 +835,7 @@ static bool ieee80211_set_sdata_offload_
        flags = sdata->vif.offload_flags;
  
        if (ieee80211_hw_check(&local->hw, SUPPORTS_TX_ENCAP_OFFLOAD) &&
@@ -150,7 +150,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
                flags |= IEEE80211_OFFLOAD_ENCAP_ENABLED;
  
                if (!ieee80211_hw_check(&local->hw, SUPPORTS_TX_FRAG) &&
-@@ -889,10 +889,21 @@ static bool ieee80211_set_sdata_offload_
+@@ -848,10 +848,21 @@ static bool ieee80211_set_sdata_offload_
                flags &= ~IEEE80211_OFFLOAD_ENCAP_ENABLED;
        }
  
@@ -172,7 +172,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        return true;
  }
  
-@@ -910,7 +921,7 @@ static void ieee80211_set_vif_encap_ops(
+@@ -869,7 +880,7 @@ static void ieee80211_set_vif_encap_ops(
        }
  
        if (!ieee80211_hw_check(&local->hw, SUPPORTS_TX_ENCAP_OFFLOAD) ||
@@ -183,7 +183,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        enabled = bss->vif.offload_flags & IEEE80211_OFFLOAD_ENCAP_ENABLED;
 --- a/net/mac80211/rx.c
 +++ b/net/mac80211/rx.c
-@@ -4195,7 +4195,9 @@ void ieee80211_check_fast_rx(struct sta_
+@@ -4099,7 +4099,9 @@ void ieee80211_check_fast_rx(struct sta_
                .vif_type = sdata->vif.type,
                .control_port_protocol = sdata->control_port_protocol,
        }, *old, *new = NULL;
@@ -193,7 +193,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  
        /* use sparse to check that we don't return without updating */
        __acquire(check_fast_rx);
-@@ -4308,6 +4310,17 @@ void ieee80211_check_fast_rx(struct sta_
+@@ -4212,6 +4214,17 @@ void ieee80211_check_fast_rx(struct sta_
        if (assign)
                new = kmemdup(&fastrx, sizeof(fastrx), GFP_KERNEL);
  
@@ -211,7 +211,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        spin_lock_bh(&sta->lock);
        old = rcu_dereference_protected(sta->fast_rx, true);
        rcu_assign_pointer(sta->fast_rx, new);
-@@ -4354,6 +4367,108 @@ void ieee80211_check_fast_rx_iface(struc
+@@ -4258,6 +4271,108 @@ void ieee80211_check_fast_rx_iface(struc
        mutex_unlock(&local->sta_mtx);
  }
  
@@ -264,7 +264,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 +
 +      skb->dev = fast_rx->dev;
 +
-+      ieee80211_rx_stats(fast_rx->dev, skb->len);
++      dev_sw_netstats_rx_add(fast_rx->dev, skb->len);
 +
 +      /* The seqno index has the same property as needed
 +       * for the rx_msdu field, i.e. it is IEEE80211_NUM_TIDS
@@ -320,7 +320,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  static bool ieee80211_invoke_fast_rx(struct ieee80211_rx_data *rx,
                                     struct ieee80211_fast_rx *fast_rx)
  {
-@@ -4374,9 +4489,6 @@ static bool ieee80211_invoke_fast_rx(str
+@@ -4278,9 +4393,6 @@ static bool ieee80211_invoke_fast_rx(str
        } addrs __aligned(2);
        struct ieee80211_sta_rx_stats *stats = &sta->rx_stats;
  
@@ -330,7 +330,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        /* for parallel-rx, we need to have DUP_VALIDATED, otherwise we write
         * to a common data structure; drivers can implement that per queue
         * but we don't have that information in mac80211
-@@ -4450,32 +4562,6 @@ static bool ieee80211_invoke_fast_rx(str
+@@ -4354,32 +4466,6 @@ static bool ieee80211_invoke_fast_rx(str
            pskb_trim(skb, skb->len - fast_rx->icv_len))
                goto drop;
  
@@ -363,7 +363,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        if (rx->key && !ieee80211_has_protected(hdr->frame_control))
                goto drop;
  
-@@ -4487,12 +4573,6 @@ static bool ieee80211_invoke_fast_rx(str
+@@ -4391,12 +4477,6 @@ static bool ieee80211_invoke_fast_rx(str
                return true;
        }
  
@@ -376,13 +376,13 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        /* do the header conversion - first grab the addresses */
        ether_addr_copy(addrs.da, skb->data + fast_rx->da_offs);
        ether_addr_copy(addrs.sa, skb->data + fast_rx->sa_offs);
-@@ -4501,62 +4581,14 @@ static bool ieee80211_invoke_fast_rx(str
+@@ -4405,62 +4485,14 @@ static bool ieee80211_invoke_fast_rx(str
        /* push the addresses in front */
        memcpy(skb_push(skb, sizeof(addrs)), &addrs, sizeof(addrs));
  
 -      skb->dev = fast_rx->dev;
 -
--      ieee80211_rx_stats(fast_rx->dev, skb->len);
+-      dev_sw_netstats_rx_add(fast_rx->dev, skb->len);
 -
 -      /* The seqno index has the same property as needed
 -       * for the rx_msdu field, i.e. it is IEEE80211_NUM_TIDS
@@ -443,7 +443,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        stats->dropped++;
        return true;
  }
-@@ -4610,6 +4642,47 @@ static bool ieee80211_prepare_and_rx_han
+@@ -4514,6 +4546,47 @@ static bool ieee80211_prepare_and_rx_han
        return true;
  }
  
@@ -491,31 +491,26 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  /*
   * This is the actual Rx frames handler. as it belongs to Rx path it must
   * be called with rcu_read_lock protection.
-@@ -4847,15 +4920,20 @@ void ieee80211_rx_list(struct ieee80211_
+@@ -4753,13 +4826,17 @@ void ieee80211_rx_list(struct ieee80211_
         * if it was previously present.
         * Also, frames with less than 16 bytes are dropped.
         */
 -      skb = ieee80211_rx_monitor(local, skb, rate);
--      if (!skb)
--              return;
-+      if (!(status->flag & RX_FLAG_8023)) {
++      if (!(status->flag & RX_FLAG_8023))
 +              skb = ieee80211_rx_monitor(local, skb, rate);
-+              if (!skb)
-+                      return;
-+      }
-       ieee80211_tpt_led_trig_rx(local,
-                       ((struct ieee80211_hdr *)skb->data)->frame_control,
-                       skb->len);
--      __ieee80211_rx_handle_packet(hw, pubsta, skb, list);
-+      if (status->flag & RX_FLAG_8023)
-+              __ieee80211_rx_handle_8023(hw, pubsta, skb, list);
-+      else
-+              __ieee80211_rx_handle_packet(hw, pubsta, skb, list);
+       if (skb) {
+               ieee80211_tpt_led_trig_rx(local,
+                                         ((struct ieee80211_hdr *)skb->data)->frame_control,
+                                         skb->len);
+-              __ieee80211_rx_handle_packet(hw, pubsta, skb, list);
++              if (status->flag & RX_FLAG_8023)
++                      __ieee80211_rx_handle_8023(hw, pubsta, skb, list);
++              else
++                      __ieee80211_rx_handle_packet(hw, pubsta, skb, list);
+       }
  
-       return;
-  drop:
+       kcov_remote_stop();
 --- a/net/mac80211/sta_info.h
 +++ b/net/mac80211/sta_info.h
 @@ -71,6 +71,7 @@
index 43ac9a0cef83240901fb31c853a9064fb9a57e7a..a9352ce3abf60d0c838c862d39d189a03ddfa5de 100644 (file)
@@ -58,7 +58,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                                                                skb->data,
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -1195,9 +1195,7 @@ ieee80211_tx_prepare(struct ieee80211_su
+@@ -1182,9 +1182,7 @@ ieee80211_tx_prepare(struct ieee80211_su
                        tx->sta = rcu_dereference(sdata->u.vlan.sta);
                        if (!tx->sta && sdata->wdev.use_4addr)
                                return TX_DROP;
@@ -69,7 +69,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                        tx->sta = sta_info_get_bss(sdata, hdr->addr1);
                }
                if (!tx->sta && !is_multicast_ether_addr(hdr->addr1))
-@@ -5443,6 +5441,7 @@ int ieee80211_tx_control_port(struct wip
+@@ -5393,6 +5391,7 @@ int ieee80211_tx_control_port(struct wip
  {
        struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
        struct ieee80211_local *local = sdata->local;
@@ -77,7 +77,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        struct sk_buff *skb;
        struct ethhdr *ehdr;
        u32 ctrl_flags = 0;
-@@ -5465,8 +5464,7 @@ int ieee80211_tx_control_port(struct wip
+@@ -5415,8 +5414,7 @@ int ieee80211_tx_control_port(struct wip
        if (cookie)
                ctrl_flags |= IEEE80211_TX_CTL_REQ_TX_STATUS;
  
@@ -87,7 +87,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  
        skb = dev_alloc_skb(local->hw.extra_tx_headroom +
                            sizeof(struct ethhdr) + len);
-@@ -5483,10 +5481,25 @@ int ieee80211_tx_control_port(struct wip
+@@ -5433,10 +5431,25 @@ int ieee80211_tx_control_port(struct wip
        ehdr->h_proto = proto;
  
        skb->dev = dev;
index cbc55c93812421aa2ccc0c246283fbe9d2836100..a7c09f00bc4ac39e834d98944f7125c76d833dd0 100644 (file)
@@ -102,7 +102,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        struct ieee80211_channel channels_s1g[ARRAY_SIZE(hwsim_channels_s1g)];
        struct ieee80211_rate rates[ARRAY_SIZE(hwsim_rates)];
        struct ieee80211_iface_combination if_combination;
-@@ -579,7 +648,8 @@ struct mac80211_hwsim_data {
+@@ -578,7 +647,8 @@ struct mac80211_hwsim_data {
                struct ieee80211_channel *channel;
                unsigned long next_start, start, end;
        } survey_data[ARRAY_SIZE(hwsim_channels_2ghz) +
@@ -112,7 +112,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  
        struct ieee80211_channel *channel;
        u64 beacon_int  /* beacon interval in us */;
-@@ -3172,6 +3242,8 @@ static int mac80211_hwsim_new_radio(stru
+@@ -3149,6 +3219,8 @@ static int mac80211_hwsim_new_radio(stru
                sizeof(hwsim_channels_2ghz));
        memcpy(data->channels_5ghz, hwsim_channels_5ghz,
                sizeof(hwsim_channels_5ghz));
index c21d4446ab896dfc9238f4cd369dba2eae47d281..4bac10eefe719700b6edfe056f9bb233716ef7e0 100644 (file)
@@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 
 --- a/drivers/net/wireless/mac80211_hwsim.c
 +++ b/drivers/net/wireless/mac80211_hwsim.c
-@@ -2990,15 +2990,19 @@ static void mac80211_hwsim_he_capab(stru
+@@ -2968,15 +2968,19 @@ static void mac80211_hwsim_he_capab(stru
  {
        u16 n_iftype_data;
  
@@ -34,7 +34,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
                return;
        }
  
-@@ -3288,6 +3292,12 @@ static int mac80211_hwsim_new_radio(stru
+@@ -3265,6 +3269,12 @@ static int mac80211_hwsim_new_radio(stru
                        sband->vht_cap.vht_mcs.tx_mcs_map =
                                sband->vht_cap.vht_mcs.rx_mcs_map;
                        break;
@@ -47,7 +47,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
                case NL80211_BAND_S1GHZ:
                        memcpy(&sband->s1g_cap, &hwsim_s1g_cap,
                               sizeof(sband->s1g_cap));
-@@ -3298,6 +3308,13 @@ static int mac80211_hwsim_new_radio(stru
+@@ -3275,6 +3285,13 @@ static int mac80211_hwsim_new_radio(stru
                        continue;
                }
  
@@ -61,7 +61,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
                sband->ht_cap.ht_supported = true;
                sband->ht_cap.cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 |
                                    IEEE80211_HT_CAP_GRN_FLD |
-@@ -3311,10 +3328,6 @@ static int mac80211_hwsim_new_radio(stru
+@@ -3288,10 +3305,6 @@ static int mac80211_hwsim_new_radio(stru
                sband->ht_cap.mcs.rx_mask[0] = 0xff;
                sband->ht_cap.mcs.rx_mask[1] = 0xff;
                sband->ht_cap.mcs.tx_params = IEEE80211_HT_MCS_TX_DEFINED;
index 3ce6ceacd5d819a97a924aad6c8c5920ddc39a1d..cabe4f45613632db047282efe91933179e756954 100644 (file)
@@ -28,7 +28,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
   *
   * Transmit and frame generation functions.
   */
-@@ -1401,8 +1401,17 @@ static void ieee80211_txq_enqueue(struct
+@@ -1388,8 +1388,17 @@ static void ieee80211_txq_enqueue(struct
        ieee80211_set_skb_enqueue_time(skb);
  
        spin_lock_bh(&fq->lock);
@@ -48,7 +48,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        spin_unlock_bh(&fq->lock);
  }
  
-@@ -3866,6 +3875,9 @@ bool ieee80211_txq_airtime_check(struct
+@@ -3815,6 +3824,9 @@ bool ieee80211_txq_airtime_check(struct
        if (!txq->sta)
                return true;
  
index c8f3047a343b1965be74f5dc6fd4d200a94ff841..40aa76f2dfa584d613fd4a3093b25a651ca4459c 100644 (file)
@@ -9,7 +9,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
 
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -4193,6 +4193,9 @@ static bool ieee80211_tx_8023(struct iee
+@@ -4142,6 +4142,9 @@ static bool ieee80211_tx_8023(struct iee
        unsigned long flags;
        int q = info->hw_queue;
  
diff --git a/package/kernel/mac80211/patches/subsys/373-mac80211-support-Rx-timestamp-calculation-for-all-pr.patch b/package/kernel/mac80211/patches/subsys/373-mac80211-support-Rx-timestamp-calculation-for-all-pr.patch
deleted file mode 100644 (file)
index 117fb35..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-From: Avraham Stern <avraham.stern@intel.com>
-Date: Sun, 6 Dec 2020 14:54:45 +0200
-Subject: [PATCH] mac80211: support Rx timestamp calculation for all preamble
- types
-
-Add support for calculating the Rx timestamp for HE frames.
-Since now all frame types are supported, allow setting the Rx
-timestamp regardless of the frame type.
-
-Signed-off-by: Avraham Stern <avraham.stern@intel.com>
-Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
-Link: https://lore.kernel.org/r/iwlwifi.20201206145305.4786559af475.Ia54486bb0a12e5351f9d5c60ef6fcda7c9e7141c@changeid
-Signed-off-by: Johannes Berg <johannes.berg@intel.com>
----
-
---- a/net/mac80211/ieee80211_i.h
-+++ b/net/mac80211/ieee80211_i.h
-@@ -1587,13 +1587,8 @@ ieee80211_have_rx_timestamp(struct ieee8
- {
-       WARN_ON_ONCE(status->flag & RX_FLAG_MACTIME_START &&
-                    status->flag & RX_FLAG_MACTIME_END);
--      if (status->flag & (RX_FLAG_MACTIME_START | RX_FLAG_MACTIME_END))
--              return true;
--      /* can't handle non-legacy preamble yet */
--      if (status->flag & RX_FLAG_MACTIME_PLCP_START &&
--          status->encoding == RX_ENC_LEGACY)
--              return true;
--      return false;
-+      return !!(status->flag & (RX_FLAG_MACTIME_START | RX_FLAG_MACTIME_END |
-+                                RX_FLAG_MACTIME_PLCP_START));
- }
- void ieee80211_vif_inc_num_mcast(struct ieee80211_sub_if_data *sdata);
---- a/net/mac80211/util.c
-+++ b/net/mac80211/util.c
-@@ -3665,6 +3665,7 @@ u64 ieee80211_calculate_rx_timestamp(str
-       u64 ts = status->mactime;
-       struct rate_info ri;
-       u16 rate;
-+      u8 n_ltf;
-       if (WARN_ON(!ieee80211_have_rx_timestamp(status)))
-               return 0;
-@@ -3675,11 +3676,58 @@ u64 ieee80211_calculate_rx_timestamp(str
-       /* Fill cfg80211 rate info */
-       switch (status->encoding) {
-+      case RX_ENC_HE:
-+              ri.flags |= RATE_INFO_FLAGS_HE_MCS;
-+              ri.mcs = status->rate_idx;
-+              ri.nss = status->nss;
-+              ri.he_ru_alloc = status->he_ru;
-+              if (status->enc_flags & RX_ENC_FLAG_SHORT_GI)
-+                      ri.flags |= RATE_INFO_FLAGS_SHORT_GI;
-+
-+              /*
-+               * See P802.11ax_D6.0, section 27.3.4 for
-+               * VHT PPDU format.
-+               */
-+              if (status->flag & RX_FLAG_MACTIME_PLCP_START) {
-+                      mpdu_offset += 2;
-+                      ts += 36;
-+
-+                      /*
-+                       * TODO:
-+                       * For HE MU PPDU, add the HE-SIG-B.
-+                       * For HE ER PPDU, add 8us for the HE-SIG-A.
-+                       * For HE TB PPDU, add 4us for the HE-STF.
-+                       * Add the HE-LTF durations - variable.
-+                       */
-+              }
-+
-+              break;
-       case RX_ENC_HT:
-               ri.mcs = status->rate_idx;
-               ri.flags |= RATE_INFO_FLAGS_MCS;
-               if (status->enc_flags & RX_ENC_FLAG_SHORT_GI)
-                       ri.flags |= RATE_INFO_FLAGS_SHORT_GI;
-+
-+              /*
-+               * See P802.11REVmd_D3.0, section 19.3.2 for
-+               * HT PPDU format.
-+               */
-+              if (status->flag & RX_FLAG_MACTIME_PLCP_START) {
-+                      mpdu_offset += 2;
-+                      if (status->enc_flags & RX_ENC_FLAG_HT_GF)
-+                              ts += 24;
-+                      else
-+                              ts += 32;
-+
-+                      /*
-+                       * Add Data HT-LTFs per streams
-+                       * TODO: add Extension HT-LTFs, 4us per LTF
-+                       */
-+                      n_ltf = ((ri.mcs >> 3) & 3) + 1;
-+                      n_ltf = n_ltf == 3 ? 4 : n_ltf;
-+                      ts += n_ltf * 4;
-+              }
-+
-               break;
-       case RX_ENC_VHT:
-               ri.flags |= RATE_INFO_FLAGS_VHT_MCS;
-@@ -3687,6 +3735,23 @@ u64 ieee80211_calculate_rx_timestamp(str
-               ri.nss = status->nss;
-               if (status->enc_flags & RX_ENC_FLAG_SHORT_GI)
-                       ri.flags |= RATE_INFO_FLAGS_SHORT_GI;
-+
-+              /*
-+               * See P802.11REVmd_D3.0, section 21.3.2 for
-+               * VHT PPDU format.
-+               */
-+              if (status->flag & RX_FLAG_MACTIME_PLCP_START) {
-+                      mpdu_offset += 2;
-+                      ts += 36;
-+
-+                      /*
-+                       * Add VHT-LTFs per streams
-+                       */
-+                      n_ltf = (ri.nss != 1) && (ri.nss % 2) ?
-+                              ri.nss + 1 : ri.nss;
-+                      ts += 4 * n_ltf;
-+              }
-+
-               break;
-       default:
-               WARN_ON(1);
-@@ -3710,7 +3775,6 @@ u64 ieee80211_calculate_rx_timestamp(str
-               ri.legacy = DIV_ROUND_UP(bitrate, (1 << shift));
-               if (status->flag & RX_FLAG_MACTIME_PLCP_START) {
--                      /* TODO: handle HT/VHT preambles */
-                       if (status->band == NL80211_BAND_5GHZ) {
-                               ts += 20 << shift;
-                               mpdu_offset += 2;
index 07f5bb52639375b497a171a2d03bf2f1972fb6a6..2b64b5501824fcbf3b0e58f3200d4c699e099a25 100644 (file)
@@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 
 --- a/include/net/mac80211.h
 +++ b/include/net/mac80211.h
-@@ -6160,6 +6160,11 @@ enum rate_control_capabilities {
+@@ -6186,6 +6186,11 @@ enum rate_control_capabilities {
         * otherwise the NSS difference doesn't bother us.
         */
        RATE_CTRL_CAPA_VHT_EXT_NSS_BW = BIT(0),
@@ -76,7 +76,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        .rate_init = minstrel_ht_rate_init,
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -3953,6 +3953,29 @@ void ieee80211_txq_schedule_start(struct
+@@ -3902,6 +3902,29 @@ void ieee80211_txq_schedule_start(struct
  }
  EXPORT_SYMBOL(ieee80211_txq_schedule_start);
  
@@ -106,7 +106,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  void __ieee80211_subif_start_xmit(struct sk_buff *skb,
                                  struct net_device *dev,
                                  u32 info_flags,
-@@ -3983,6 +4006,8 @@ void __ieee80211_subif_start_xmit(struct
+@@ -3932,6 +3955,8 @@ void __ieee80211_subif_start_xmit(struct
                skb_get_hash(skb);
        }
  
@@ -115,7 +115,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        if (sta) {
                struct ieee80211_fast_tx *fast_tx;
  
-@@ -4246,6 +4271,8 @@ static void ieee80211_8023_xmit(struct i
+@@ -4195,6 +4220,8 @@ static void ieee80211_8023_xmit(struct i
  
        memset(info, 0, sizeof(*info));
  
index 26f7f592969549108edde54d4b7cf316a18d5469..ab16576bcdc8b0826b066e2f22fcd483f3ece2b9 100644 (file)
@@ -10,7 +10,7 @@ Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
 
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -1778,8 +1778,6 @@ static int invoke_tx_handlers_early(stru
+@@ -1765,8 +1765,6 @@ static int invoke_tx_handlers_early(stru
        CALL_TXH(ieee80211_tx_h_ps_buf);
        CALL_TXH(ieee80211_tx_h_check_control_port_protocol);
        CALL_TXH(ieee80211_tx_h_select_key);
@@ -19,7 +19,7 @@ Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
  
   txh_done:
        if (unlikely(res == TX_DROP)) {
-@@ -1812,6 +1810,9 @@ static int invoke_tx_handlers_late(struc
+@@ -1799,6 +1797,9 @@ static int invoke_tx_handlers_late(struc
                goto txh_done;
        }
  
@@ -29,7 +29,7 @@ Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
        CALL_TXH(ieee80211_tx_h_michael_mic_add);
        CALL_TXH(ieee80211_tx_h_sequence);
        CALL_TXH(ieee80211_tx_h_fragment);
-@@ -3404,15 +3405,21 @@ out:
+@@ -3353,15 +3354,21 @@ out:
   * Can be called while the sta lock is held. Anything that can cause packets to
   * be generated will cause deadlock!
   */
@@ -55,7 +55,7 @@ Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
        if (key)
                info->control.hw_key = &key->conf;
  
-@@ -3461,6 +3468,8 @@ static void ieee80211_xmit_fast_finish(s
+@@ -3410,6 +3417,8 @@ static void ieee80211_xmit_fast_finish(s
                        break;
                }
        }
@@ -64,7 +64,7 @@ Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
  }
  
  static bool ieee80211_xmit_fast(struct ieee80211_sub_if_data *sdata,
-@@ -3564,24 +3573,17 @@ static bool ieee80211_xmit_fast(struct i
+@@ -3513,24 +3522,17 @@ static bool ieee80211_xmit_fast(struct i
        tx.sta = sta;
        tx.key = fast_tx->key;
  
@@ -97,7 +97,7 @@ Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
  
        if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
                sdata = container_of(sdata->bss,
-@@ -3692,8 +3694,12 @@ begin:
+@@ -3641,8 +3643,12 @@ begin:
                    (tx.key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV))
                        pn_offs = ieee80211_hdrlen(hdr->frame_control);
  
index 5d390990cd0892e1c88c7301d0a566f2f0a5d513..6acb814b28467083983e497537b2342ab3cc13a1 100644 (file)
@@ -45,7 +45,7 @@ Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
        if (dest[0].idx < 0)
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -679,6 +679,7 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021
+@@ -666,6 +666,7 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021
        u32 len;
        struct ieee80211_tx_rate_control txrc;
        struct ieee80211_sta_rates *ratetbl = NULL;
@@ -53,7 +53,7 @@ Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
        bool assoc = false;
  
        memset(&txrc, 0, sizeof(txrc));
-@@ -720,7 +721,7 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021
+@@ -707,7 +708,7 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021
         * just wants a probe response.
         */
        if (tx->sdata->vif.bss_conf.use_short_preamble &&
@@ -62,7 +62,7 @@ Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
             (tx->sta && test_sta_flag(tx->sta, WLAN_STA_SHORT_PREAMBLE))))
                txrc.short_preamble = true;
  
-@@ -742,7 +743,8 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021
+@@ -729,7 +730,8 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021
                 "%s: Dropped data frame as no usable bitrate found while "
                 "scanning and associated. Target station: "
                 "%pM on %d GHz band\n",
@@ -72,7 +72,7 @@ Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
                 info->band ? 5 : 2))
                return TX_DROP;
  
-@@ -776,7 +778,7 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021
+@@ -763,7 +765,7 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021
  
        if (txrc.reported_rate.idx < 0) {
                txrc.reported_rate = tx->rate;
@@ -81,7 +81,7 @@ Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
                        tx->sta->tx_stats.last_rate = txrc.reported_rate;
        } else if (tx->sta)
                tx->sta->tx_stats.last_rate = txrc.reported_rate;
-@@ -3682,8 +3684,16 @@ begin:
+@@ -3631,8 +3633,16 @@ begin:
        else
                info->flags &= ~IEEE80211_TX_CTL_AMPDU;
  
@@ -101,7 +101,7 @@ Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
                struct sta_info *sta = container_of(txq->sta, struct sta_info,
 --- a/include/net/mac80211.h
 +++ b/include/net/mac80211.h
-@@ -6733,4 +6733,22 @@ struct sk_buff *ieee80211_get_fils_disco
+@@ -6754,4 +6754,22 @@ struct sk_buff *ieee80211_get_fils_disco
  struct sk_buff *
  ieee80211_get_unsol_bcast_probe_resp_tmpl(struct ieee80211_hw *hw,
                                          struct ieee80211_vif *vif);
index c7902d6542b642cab3a62704585700dc9a742ac5..3ba611b3aa71e9414097838706fb188738e4be50 100644 (file)
@@ -16,7 +16,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -1159,6 +1159,29 @@ static bool ieee80211_tx_prep_agg(struct
+@@ -1146,6 +1146,29 @@ static bool ieee80211_tx_prep_agg(struct
        return queued;
  }
  
@@ -46,7 +46,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  /*
   * initialises @tx
   * pass %NULL for the station if unknown, a valid pointer if known
-@@ -1172,6 +1195,7 @@ ieee80211_tx_prepare(struct ieee80211_su
+@@ -1159,6 +1182,7 @@ ieee80211_tx_prepare(struct ieee80211_su
        struct ieee80211_local *local = sdata->local;
        struct ieee80211_hdr *hdr;
        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
@@ -54,7 +54,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        int tid;
  
        memset(tx, 0, sizeof(*tx));
-@@ -1200,8 +1224,10 @@ ieee80211_tx_prepare(struct ieee80211_su
+@@ -1187,8 +1211,10 @@ ieee80211_tx_prepare(struct ieee80211_su
                } else if (tx->sdata->control_port_protocol == tx->skb->protocol) {
                        tx->sta = sta_info_get_bss(sdata, hdr->addr1);
                }
@@ -66,7 +66,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        }
  
        if (tx->sta && ieee80211_is_data_qos(hdr->frame_control) &&
-@@ -1211,8 +1237,12 @@ ieee80211_tx_prepare(struct ieee80211_su
+@@ -1198,8 +1224,12 @@ ieee80211_tx_prepare(struct ieee80211_su
                struct tid_ampdu_tx *tid_tx;
  
                tid = ieee80211_get_tid(hdr);
@@ -80,7 +80,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
                if (tid_tx) {
                        bool queued;
  
-@@ -3969,29 +3999,6 @@ void ieee80211_txq_schedule_start(struct
+@@ -3918,29 +3948,6 @@ void ieee80211_txq_schedule_start(struct
  }
  EXPORT_SYMBOL(ieee80211_txq_schedule_start);
  
index 073782188aa5038438e9f140faf6a2a1bccd2aba..b8a87a7cc1568a881e2e0376b8e99656b329b40b 100644 (file)
@@ -79,7 +79,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                DEBUGFS_ADD_MODE(aqm, 0600);
 --- a/net/mac80211/ieee80211_i.h
 +++ b/net/mac80211/ieee80211_i.h
-@@ -1140,6 +1140,8 @@ enum mac80211_scan_state {
+@@ -1147,6 +1147,8 @@ enum mac80211_scan_state {
        SCAN_ABORT,
  };
  
@@ -90,7 +90,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
         * don't cast (use the static inlines below), but we keep
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -3909,6 +3909,8 @@ void __ieee80211_schedule_txq(struct iee
+@@ -3858,6 +3858,8 @@ void __ieee80211_schedule_txq(struct iee
  }
  EXPORT_SYMBOL(__ieee80211_schedule_txq);
  
@@ -99,7 +99,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  bool ieee80211_txq_airtime_check(struct ieee80211_hw *hw,
                                 struct ieee80211_txq *txq)
  {
-@@ -3918,6 +3920,9 @@ bool ieee80211_txq_airtime_check(struct
+@@ -3867,6 +3869,9 @@ bool ieee80211_txq_airtime_check(struct
        if (!wiphy_ext_feature_isset(local->hw.wiphy, NL80211_EXT_FEATURE_AQL))
                return true;
  
index 708ad6f46018a6b966149989707e5ef1fca4a312..8033b0d0d4d818cac7886c826de8cd69d9247363 100644 (file)
@@ -22,7 +22,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
   */
  
  #ifndef IEEE80211_I_H
-@@ -848,9 +848,12 @@ struct txq_info {
+@@ -854,9 +854,12 @@ struct txq_info {
        struct fq_tin tin;
        struct codel_vars def_cvars;
        struct codel_stats cstats;
index 2fe12771c0cc813c78a7cfa43b9c6aacdd7e772f..475715a2f9ffda0f809f42f6a8b0f97def957498 100644 (file)
@@ -50,7 +50,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
 
 --- a/include/net/mac80211.h
 +++ b/include/net/mac80211.h
-@@ -6557,9 +6557,6 @@ static inline void ieee80211_txq_schedul
+@@ -6578,9 +6578,6 @@ static inline void ieee80211_txq_schedul
  {
  }
  
@@ -60,7 +60,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  /**
   * ieee80211_schedule_txq - schedule a TXQ for transmission
   *
-@@ -6572,11 +6569,7 @@ void __ieee80211_schedule_txq(struct iee
+@@ -6593,11 +6590,7 @@ void __ieee80211_schedule_txq(struct iee
   * The driver may call this function if it has buffered packets for
   * this TXQ internally.
   */
@@ -73,7 +73,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  
  /**
   * ieee80211_return_txq - return a TXQ previously acquired by ieee80211_next_txq()
-@@ -6588,12 +6581,8 @@ ieee80211_schedule_txq(struct ieee80211_
+@@ -6609,12 +6602,8 @@ ieee80211_schedule_txq(struct ieee80211_
   * The driver may set force=true if it has buffered packets for this TXQ
   * internally.
   */
@@ -90,7 +90,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
   * ieee80211_txq_may_transmit - check whether TXQ is allowed to transmit
 --- a/net/mac80211/cfg.c
 +++ b/net/mac80211/cfg.c
-@@ -1461,6 +1461,38 @@ static void sta_apply_mesh_params(struct
+@@ -1441,6 +1441,38 @@ static void sta_apply_mesh_params(struct
  #endif
  }
  
@@ -129,7 +129,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  static int sta_apply_parameters(struct ieee80211_local *local,
                                struct sta_info *sta,
                                struct station_parameters *params)
-@@ -1648,7 +1680,8 @@ static int sta_apply_parameters(struct i
+@@ -1628,7 +1660,8 @@ static int sta_apply_parameters(struct i
                sta_apply_mesh_params(local, sta, params);
  
        if (params->airtime_weight)
@@ -277,7 +277,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  IEEE80211_IF_FILE(multicast_to_unicast, u.ap.multicast_to_unicast, HEX);
  
  /* IBSS attributes */
-@@ -661,8 +689,10 @@ static void add_common_files(struct ieee
+@@ -658,8 +686,10 @@ static void add_common_files(struct ieee
  
        if (sdata->local->ops->wake_tx_queue &&
            sdata->vif.type != NL80211_IFTYPE_P2P_DEVICE &&
@@ -355,7 +355,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  
 --- a/net/mac80211/ieee80211_i.h
 +++ b/net/mac80211/ieee80211_i.h
-@@ -840,20 +840,16 @@ enum txq_info_flags {
+@@ -846,20 +846,16 @@ enum txq_info_flags {
   * @def_flow: used as a fallback flow when a packet destined to @tin hashes to
   *    a fq_flow which is already owned by a different tin
   * @def_cvars: codel vars for @def_flow
@@ -378,7 +378,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        unsigned long flags;
  
        /* keep last! */
-@@ -930,6 +926,8 @@ struct ieee80211_sub_if_data {
+@@ -938,6 +934,8 @@ struct ieee80211_sub_if_data {
        struct ieee80211_tx_queue_params tx_conf[IEEE80211_NUM_ACS];
        struct mac80211_qos_map __rcu *qos_map;
  
@@ -387,7 +387,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        struct work_struct csa_finalize_work;
        bool csa_block_tx; /* write-protected by sdata_lock and local->mtx */
        struct cfg80211_chan_def csa_chandef;
-@@ -1143,6 +1141,44 @@ enum mac80211_scan_state {
+@@ -1150,6 +1148,44 @@ enum mac80211_scan_state {
        SCAN_ABORT,
  };
  
@@ -432,7 +432,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  DECLARE_STATIC_KEY_FALSE(aql_disable);
  
  struct ieee80211_local {
-@@ -1156,13 +1192,8 @@ struct ieee80211_local {
+@@ -1163,13 +1199,8 @@ struct ieee80211_local {
        struct codel_params cparams;
  
        /* protects active_txqs and txqi->schedule_order */
@@ -447,7 +447,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        u32 aql_threshold;
        atomic_t aql_total_pending_airtime;
  
-@@ -1581,6 +1612,125 @@ static inline bool txq_has_queue(struct
+@@ -1587,6 +1618,125 @@ static inline bool txq_has_queue(struct
        return !(skb_queue_empty(&txqi->frags) && !txqi->tin.backlog_packets);
  }
  
@@ -573,7 +573,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  static inline int ieee80211_bssid_match(const u8 *raddr, const u8 *addr)
  {
        return ether_addr_equal(raddr, addr) ||
-@@ -1821,6 +1971,14 @@ int ieee80211_tx_control_port(struct wip
+@@ -1827,6 +1977,14 @@ int ieee80211_tx_control_port(struct wip
                              u64 *cookie);
  int ieee80211_probe_mesh_link(struct wiphy *wiphy, struct net_device *dev,
                              const u8 *buf, size_t len);
@@ -590,7 +590,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  void ieee80211_apply_htcap_overrides(struct ieee80211_sub_if_data *sdata,
 --- a/net/mac80211/iface.c
 +++ b/net/mac80211/iface.c
-@@ -2088,6 +2088,9 @@ int ieee80211_if_add(struct ieee80211_lo
+@@ -2013,6 +2013,9 @@ int ieee80211_if_add(struct ieee80211_lo
                }
        }
  
@@ -602,7 +602,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        sdata->ap_power_level = IEEE80211_UNSET_POWER_LEVEL;
 --- a/net/mac80211/main.c
 +++ b/net/mac80211/main.c
-@@ -693,10 +693,13 @@ struct ieee80211_hw *ieee80211_alloc_hw_
+@@ -691,10 +691,13 @@ struct ieee80211_hw *ieee80211_alloc_hw_
        spin_lock_init(&local->queue_stop_reason_lock);
  
        for (i = 0; i < IEEE80211_NUM_ACS; i++) {
@@ -622,7 +622,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  
 --- a/net/mac80211/rx.c
 +++ b/net/mac80211/rx.c
-@@ -1573,12 +1573,8 @@ static void sta_ps_start(struct sta_info
+@@ -1562,12 +1562,8 @@ static void sta_ps_start(struct sta_info
  
        for (tid = 0; tid < IEEE80211_NUM_TIDS; tid++) {
                struct ieee80211_txq *txq = sta->sta.txq[tid];
@@ -638,7 +638,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                        set_bit(tid, &sta->txq_buffered_tids);
 --- a/net/mac80211/sta_info.c
 +++ b/net/mac80211/sta_info.c
-@@ -426,15 +426,11 @@ struct sta_info *sta_info_alloc(struct i
+@@ -424,15 +424,11 @@ struct sta_info *sta_info_alloc(struct i
        if (sta_prepare_rate_control(local, sta, gfp))
                goto free_txq;
  
@@ -655,7 +655,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        }
  
        for (i = 0; i < IEEE80211_NUM_TIDS; i++)
-@@ -1893,24 +1889,59 @@ void ieee80211_sta_set_buffered(struct i
+@@ -1894,24 +1890,59 @@ void ieee80211_sta_set_buffered(struct i
  }
  EXPORT_SYMBOL(ieee80211_sta_set_buffered);
  
@@ -727,7 +727,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  }
  EXPORT_SYMBOL(ieee80211_sta_register_airtime);
  
-@@ -2354,7 +2385,7 @@ void sta_set_sinfo(struct sta_info *sta,
+@@ -2360,7 +2391,7 @@ void sta_set_sinfo(struct sta_info *sta,
        }
  
        if (!(sinfo->filled & BIT_ULL(NL80211_STA_INFO_AIRTIME_WEIGHT))) {
@@ -765,7 +765,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  
  struct sta_info;
  
-@@ -515,7 +522,6 @@ struct ieee80211_fragment_cache {
+@@ -487,7 +494,6 @@ struct ieee80211_sta_rx_stats {
   * @tid_seq: per-TID sequence numbers for sending to this STA
   * @airtime: per-AC struct airtime_info describing airtime statistics for this
   *    station
@@ -773,7 +773,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
   * @ampdu_mlme: A-MPDU state machine state
   * @mesh: mesh STA information
   * @debugfs_dir: debug filesystem directory dentry
-@@ -646,7 +652,6 @@ struct sta_info {
+@@ -617,7 +623,6 @@ struct sta_info {
        u16 tid_seq[IEEE80211_QOS_CTL_TID_MASK + 1];
  
        struct airtime_info airtime[IEEE80211_NUM_ACS];
@@ -783,7 +783,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
         * Aggregation information, locked with lock.
 --- a/net/mac80211/status.c
 +++ b/net/mac80211/status.c
-@@ -972,6 +972,25 @@ static void __ieee80211_tx_status(struct
+@@ -970,6 +970,25 @@ static void __ieee80211_tx_status(struct
                if (!(info->flags & IEEE80211_TX_CTL_INJECTED) && acked)
                        ieee80211_frame_acked(sta, skb);
  
@@ -819,7 +819,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  #include <net/net_namespace.h>
  #include <net/ieee80211_radiotap.h>
  #include <net/cfg80211.h>
-@@ -1489,7 +1490,7 @@ void ieee80211_txq_init(struct ieee80211
+@@ -1476,7 +1477,7 @@ void ieee80211_txq_init(struct ieee80211
        codel_vars_init(&txqi->def_cvars);
        codel_stats_init(&txqi->cstats);
        __skb_queue_head_init(&txqi->frags);
@@ -828,7 +828,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  
        txqi->txq.vif = &sdata->vif;
  
-@@ -1533,9 +1534,7 @@ void ieee80211_txq_purge(struct ieee8021
+@@ -1520,9 +1521,7 @@ void ieee80211_txq_purge(struct ieee8021
        ieee80211_purge_tx_queue(&local->hw, &txqi->frags);
        spin_unlock_bh(&fq->lock);
  
@@ -839,7 +839,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  }
  
  void ieee80211_txq_set_params(struct ieee80211_local *local)
-@@ -3819,102 +3818,259 @@ EXPORT_SYMBOL(ieee80211_tx_dequeue);
+@@ -3768,102 +3767,259 @@ EXPORT_SYMBOL(ieee80211_tx_dequeue);
  struct ieee80211_txq *ieee80211_next_txq(struct ieee80211_hw *hw, u8 ac)
  {
        struct ieee80211_local *local = hw_to_local(hw);
@@ -999,7 +999,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
 +{
 +      struct airtime_info *air_info, *tmp;
 +      u64 weight_sum = 0;
-+
 +      if (unlikely(!now))
 +              now = ktime_get_boottime_ns();
 +
@@ -1008,7 +1008,8 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
 +      if (!force && (air_sched->last_weight_update <
 +                     now - AIRTIME_ACTIVE_DURATION))
 +              return;
-+
+-      if (txqi->schedule_round == local->schedule_round[ac])
 +      list_for_each_entry_safe(air_info, tmp,
 +                               &air_sched->active_list, list) {
 +              if (airtime_is_active(air_info, now))
@@ -1019,7 +1020,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
 +      airtime_weight_sum_set(air_sched, weight_sum);
 +      air_sched->last_weight_update = now;
 +}
++
 +void ieee80211_schedule_txq(struct ieee80211_hw *hw,
 +                          struct ieee80211_txq *txq)
 +      __acquires(txq_lock) __releases(txq_lock)
@@ -1031,8 +1032,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
 +      struct airtime_info *air_info;
 +      u8 ac = txq->ac;
 +      bool was_active;
--      if (txqi->schedule_round == local->schedule_round[ac])
++
 +      air_sched = &local->airtime[ac];
 +      air_info = to_airtime_info(txq);
 +
@@ -1161,7 +1161,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        struct ieee80211_local *local = hw_to_local(hw);
  
        if (!wiphy_ext_feature_isset(local->hw.wiphy, NL80211_EXT_FEATURE_AQL))
-@@ -3929,15 +4085,12 @@ bool ieee80211_txq_airtime_check(struct
+@@ -3878,15 +4034,12 @@ bool ieee80211_txq_airtime_check(struct
        if (unlikely(txq->tid == IEEE80211_NUM_TIDS))
                return true;
  
@@ -1179,7 +1179,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                return true;
  
        return false;
-@@ -3947,60 +4100,59 @@ EXPORT_SYMBOL(ieee80211_txq_airtime_chec
+@@ -3896,60 +4049,59 @@ EXPORT_SYMBOL(ieee80211_txq_airtime_chec
  bool ieee80211_txq_may_transmit(struct ieee80211_hw *hw,
                                struct ieee80211_txq *txq)
  {
@@ -1200,11 +1200,11 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
 -              goto out;
 +      if (!ieee80211_txq_airtime_check(hw, txq))
 +              return false;
-+
-+      air_sched = &local->airtime[txq->ac];
-+      spin_lock_bh(&air_sched->lock);
  
 -      if (list_empty(&txqi->schedule_order))
++      air_sched = &local->airtime[txq->ac];
++      spin_lock_bh(&air_sched->lock);
++
 +      if (RB_EMPTY_NODE(&txqi->schedule_order))
                goto out;
  
@@ -1223,6 +1223,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
 -              if (sta->airtime[ac].deficit < 0)
 -                      sta->airtime[ac].deficit += sta->airtime_weight;
 -              list_move_tail(&iter->schedule_order, &local->active_txqs[ac]);
+-      }
 +      /* Like in ieee80211_next_txq(), make sure the first station in the
 +       * scheduling order is eligible for transmission to avoid starvation.
 +       */
@@ -1231,15 +1232,14 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
 +              first_txqi = container_of(node, struct txq_info,
 +                                        schedule_order);
 +              air_info = to_airtime_info(&first_txqi->txq);
-+
-+              if (air_sched->v_t < air_info->v_t)
-+                      airtime_catchup_v_t(air_sched, air_info->v_t, now);
-       }
  
 -      sta = container_of(txqi->txq.sta, struct sta_info, sta);
 -      if (sta->airtime[ac].deficit >= 0)
 -              goto out;
--
++              if (air_sched->v_t < air_info->v_t)
++                      airtime_catchup_v_t(air_sched, air_info->v_t, now);
++      }
 -      sta->airtime[ac].deficit += sta->airtime_weight;
 -      list_move_tail(&txqi->schedule_order, &local->active_txqs[ac]);
 -      spin_unlock_bh(&local->active_txq_lock[ac]);
diff --git a/package/kernel/mac80211/patches/subsys/384-nl80211-add-common-API-to-configure-SAR-power-limita.patch b/package/kernel/mac80211/patches/subsys/384-nl80211-add-common-API-to-configure-SAR-power-limita.patch
deleted file mode 100644 (file)
index a47e297..0000000
+++ /dev/null
@@ -1,398 +0,0 @@
-From: Carl Huang <cjhuang@codeaurora.org>
-Date: Thu, 3 Dec 2020 05:37:26 -0500
-Subject: [PATCH] nl80211: add common API to configure SAR power limitations
-
-NL80211_CMD_SET_SAR_SPECS is added to configure SAR from
-user space. NL80211_ATTR_SAR_SPEC is used to pass the SAR
-power specification when used with NL80211_CMD_SET_SAR_SPECS.
-
-Wireless driver needs to register SAR type, supported frequency
-ranges to wiphy, so user space can query it. The index in
-frequency range is used to specify which sub band the power
-limitation applies to. The SAR type is for compatibility, so later
-other SAR mechanism can be implemented without breaking the user
-space SAR applications.
-
-Normal process is user space queries the SAR capability, and
-gets the index of supported frequency ranges and associates the
-power limitation with this index and sends to kernel.
-
-Here is an example of message send to kernel:
-8c 00 00 00 08 00 01 00 00 00 00 00 38 00 2b 81
-08 00 01 00 00 00 00 00 2c 00 02 80 14 00 00 80
-08 00 02 00 00 00 00 00 08 00 01 00 38 00 00 00
-14 00 01 80 08 00 02 00 01 00 00 00 08 00 01 00
-48 00 00 00
-
-NL80211_CMD_SET_SAR_SPECS:  0x8c
-NL80211_ATTR_WIPHY:     0x01(phy idx is 0)
-NL80211_ATTR_SAR_SPEC:  0x812b (NLA_NESTED)
-NL80211_SAR_ATTR_TYPE:  0x00 (NL80211_SAR_TYPE_POWER)
-NL80211_SAR_ATTR_SPECS: 0x8002 (NLA_NESTED)
-freq range 0 power: 0x38 in 0.25dbm unit (14dbm)
-freq range 1 power: 0x48 in 0.25dbm unit (18dbm)
-
-Signed-off-by: Carl Huang <cjhuang@codeaurora.org>
-Reviewed-by: Brian Norris <briannorris@chromium.org>
-Reviewed-by: Abhishek Kumar <kuabhs@chromium.org>
-Link: https://lore.kernel.org/r/20201203103728.3034-2-cjhuang@codeaurora.org
-[minor edits, NLA parse cleanups]
-Signed-off-by: Johannes Berg <johannes.berg@intel.com>
----
-
---- a/include/net/cfg80211.h
-+++ b/include/net/cfg80211.h
-@@ -1737,6 +1737,54 @@ struct station_info {
-       u8 connected_to_as;
- };
-+/**
-+ * struct cfg80211_sar_sub_specs - sub specs limit
-+ * @power: power limitation in 0.25dbm
-+ * @freq_range_index: index the power limitation applies to
-+ */
-+struct cfg80211_sar_sub_specs {
-+      s32 power;
-+      u32 freq_range_index;
-+};
-+
-+/**
-+ * struct cfg80211_sar_specs - sar limit specs
-+ * @type: it's set with power in 0.25dbm or other types
-+ * @num_sub_specs: number of sar sub specs
-+ * @sub_specs: memory to hold the sar sub specs
-+ */
-+struct cfg80211_sar_specs {
-+      enum nl80211_sar_type type;
-+      u32 num_sub_specs;
-+      struct cfg80211_sar_sub_specs sub_specs[];
-+};
-+
-+
-+/**
-+ * @struct cfg80211_sar_chan_ranges - sar frequency ranges
-+ * @start_freq:  start range edge frequency
-+ * @end_freq:    end range edge frequency
-+ */
-+struct cfg80211_sar_freq_ranges {
-+      u32 start_freq;
-+      u32 end_freq;
-+};
-+
-+/**
-+ * struct cfg80211_sar_capa - sar limit capability
-+ * @type: it's set via power in 0.25dbm or other types
-+ * @num_freq_ranges: number of frequency ranges
-+ * @freq_ranges: memory to hold the freq ranges.
-+ *
-+ * Note: WLAN driver may append new ranges or split an existing
-+ * range to small ones and then append them.
-+ */
-+struct cfg80211_sar_capa {
-+      enum nl80211_sar_type type;
-+      u32 num_freq_ranges;
-+      const struct cfg80211_sar_freq_ranges *freq_ranges;
-+};
-+
- #if IS_ENABLED(CPTCFG_CFG80211)
- /**
-  * cfg80211_get_station - retrieve information about a given station
-@@ -4259,6 +4307,8 @@ struct cfg80211_ops {
-                                 struct cfg80211_tid_config *tid_conf);
-       int     (*reset_tid_config)(struct wiphy *wiphy, struct net_device *dev,
-                                   const u8 *peer, u8 tids);
-+      int     (*set_sar_specs)(struct wiphy *wiphy,
-+                               struct cfg80211_sar_specs *sar);
- };
- /*
-@@ -5030,6 +5080,8 @@ struct wiphy {
-       u8 max_data_retry_count;
-+      const struct cfg80211_sar_capa *sar_capa;
-+
-       char priv[] __aligned(NETDEV_ALIGN);
- };
---- a/net/wireless/nl80211.c
-+++ b/net/wireless/nl80211.c
-@@ -405,6 +405,18 @@ nl80211_unsol_bcast_probe_resp_policy[NL
-                                                      .len = IEEE80211_MAX_DATA_LEN }
- };
-+static const struct nla_policy
-+sar_specs_policy[NL80211_SAR_ATTR_SPECS_MAX + 1] = {
-+      [NL80211_SAR_ATTR_SPECS_POWER] = { .type = NLA_S32 },
-+      [NL80211_SAR_ATTR_SPECS_RANGE_INDEX] = {.type = NLA_U32 },
-+};
-+
-+static const struct nla_policy
-+sar_policy[NL80211_SAR_ATTR_MAX + 1] = {
-+      [NL80211_SAR_ATTR_TYPE] = NLA_POLICY_MAX(NLA_U32, NUM_NL80211_SAR_TYPE),
-+      [NL80211_SAR_ATTR_SPECS] = NLA_POLICY_NESTED_ARRAY(sar_specs_policy),
-+};
-+
- static const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = {
-       [0] = { .strict_start_type = NL80211_ATTR_HE_OBSS_PD },
-       [NL80211_ATTR_WIPHY] = { .type = NLA_U32 },
-@@ -739,6 +751,7 @@ static const struct nla_policy nl80211_p
-       [NL80211_ATTR_SAE_PWE] =
-               NLA_POLICY_RANGE(NLA_U8, NL80211_SAE_PWE_HUNT_AND_PECK,
-                                NL80211_SAE_PWE_BOTH),
-+      [NL80211_ATTR_SAR_SPEC] = NLA_POLICY_NESTED(sar_policy),
-       [NL80211_ATTR_RECONNECT_REQUESTED] = { .type = NLA_REJECT },
- };
-@@ -2117,6 +2130,56 @@ fail:
-       return -ENOBUFS;
- }
-+static int
-+nl80211_put_sar_specs(struct cfg80211_registered_device *rdev,
-+                    struct sk_buff *msg)
-+{
-+      struct nlattr *sar_capa, *specs, *sub_freq_range;
-+      u8 num_freq_ranges;
-+      int i;
-+
-+      if (!rdev->wiphy.sar_capa)
-+              return 0;
-+
-+      num_freq_ranges = rdev->wiphy.sar_capa->num_freq_ranges;
-+
-+      sar_capa = nla_nest_start(msg, NL80211_ATTR_SAR_SPEC);
-+      if (!sar_capa)
-+              return -ENOSPC;
-+
-+      if (nla_put_u32(msg, NL80211_SAR_ATTR_TYPE, rdev->wiphy.sar_capa->type))
-+              goto fail;
-+
-+      specs = nla_nest_start(msg, NL80211_SAR_ATTR_SPECS);
-+      if (!specs)
-+              goto fail;
-+
-+      /* report supported freq_ranges */
-+      for (i = 0; i < num_freq_ranges; i++) {
-+              sub_freq_range = nla_nest_start(msg, i + 1);
-+              if (!sub_freq_range)
-+                      goto fail;
-+
-+              if (nla_put_u32(msg, NL80211_SAR_ATTR_SPECS_START_FREQ,
-+                              rdev->wiphy.sar_capa->freq_ranges[i].start_freq))
-+                      goto fail;
-+
-+              if (nla_put_u32(msg, NL80211_SAR_ATTR_SPECS_END_FREQ,
-+                              rdev->wiphy.sar_capa->freq_ranges[i].end_freq))
-+                      goto fail;
-+
-+              nla_nest_end(msg, sub_freq_range);
-+      }
-+
-+      nla_nest_end(msg, specs);
-+      nla_nest_end(msg, sar_capa);
-+
-+      return 0;
-+fail:
-+      nla_nest_cancel(msg, sar_capa);
-+      return -ENOBUFS;
-+}
-+
- struct nl80211_dump_wiphy_state {
-       s64 filter_wiphy;
-       long start;
-@@ -2366,6 +2429,8 @@ static int nl80211_send_wiphy(struct cfg
-                       CMD(set_multicast_to_unicast, SET_MULTICAST_TO_UNICAST);
-                       CMD(update_connect_params, UPDATE_CONNECT_PARAMS);
-                       CMD(update_ft_ies, UPDATE_FT_IES);
-+                      if (rdev->wiphy.sar_capa)
-+                              CMD(set_sar_specs, SET_SAR_SPECS);
-               }
- #undef CMD
-@@ -2691,6 +2756,11 @@ static int nl80211_send_wiphy(struct cfg
-               if (nl80211_put_tid_config_support(rdev, msg))
-                       goto nla_put_failure;
-+              state->split_start++;
-+              break;
-+      case 16:
-+              if (nl80211_put_sar_specs(rdev, msg))
-+                      goto nla_put_failure;
-               /* done */
-               state->split_start = 0;
-@@ -14712,6 +14782,111 @@ static void nl80211_post_doit(__genl_con
-       }
- }
-+static int nl80211_set_sar_sub_specs(struct cfg80211_registered_device *rdev,
-+                                   struct cfg80211_sar_specs *sar_specs,
-+                                   struct nlattr *spec[], int index)
-+{
-+      u32 range_index, i;
-+
-+      if (!sar_specs || !spec)
-+              return -EINVAL;
-+
-+      if (!spec[NL80211_SAR_ATTR_SPECS_POWER] ||
-+          !spec[NL80211_SAR_ATTR_SPECS_RANGE_INDEX])
-+              return -EINVAL;
-+
-+      range_index = nla_get_u32(spec[NL80211_SAR_ATTR_SPECS_RANGE_INDEX]);
-+
-+      /* check if range_index exceeds num_freq_ranges */
-+      if (range_index >= rdev->wiphy.sar_capa->num_freq_ranges)
-+              return -EINVAL;
-+
-+      /* check if range_index duplicates */
-+      for (i = 0; i < index; i++) {
-+              if (sar_specs->sub_specs[i].freq_range_index == range_index)
-+                      return -EINVAL;
-+      }
-+
-+      sar_specs->sub_specs[index].power =
-+              nla_get_s32(spec[NL80211_SAR_ATTR_SPECS_POWER]);
-+
-+      sar_specs->sub_specs[index].freq_range_index = range_index;
-+
-+      return 0;
-+}
-+
-+static int nl80211_set_sar_specs(struct sk_buff *skb, struct genl_info *info)
-+{
-+      struct cfg80211_registered_device *rdev = info->user_ptr[0];
-+      struct nlattr *spec[NL80211_SAR_ATTR_SPECS_MAX + 1];
-+      struct nlattr *tb[NL80211_SAR_ATTR_MAX + 1];
-+      struct cfg80211_sar_specs *sar_spec;
-+      enum nl80211_sar_type type;
-+      struct nlattr *spec_list;
-+      u32 specs;
-+      int rem, err;
-+
-+      if (!rdev->wiphy.sar_capa || !rdev->ops->set_sar_specs)
-+              return -EOPNOTSUPP;
-+
-+      if (!info->attrs[NL80211_ATTR_SAR_SPEC])
-+              return -EINVAL;
-+
-+      nla_parse_nested(tb, NL80211_SAR_ATTR_MAX,
-+                       info->attrs[NL80211_ATTR_SAR_SPEC],
-+                       NULL, NULL);
-+
-+      if (!tb[NL80211_SAR_ATTR_TYPE] || !tb[NL80211_SAR_ATTR_SPECS])
-+              return -EINVAL;
-+
-+      type = nla_get_u32(tb[NL80211_SAR_ATTR_TYPE]);
-+      if (type != rdev->wiphy.sar_capa->type)
-+              return -EINVAL;
-+
-+      specs = 0;
-+      nla_for_each_nested(spec_list, tb[NL80211_SAR_ATTR_SPECS], rem)
-+              specs++;
-+
-+      if (specs > rdev->wiphy.sar_capa->num_freq_ranges)
-+              return -EINVAL;
-+
-+      sar_spec = kzalloc(sizeof(*sar_spec) +
-+                         specs * sizeof(struct cfg80211_sar_sub_specs),
-+                         GFP_KERNEL);
-+      if (!sar_spec)
-+              return -ENOMEM;
-+
-+      sar_spec->type = type;
-+      specs = 0;
-+      nla_for_each_nested(spec_list, tb[NL80211_SAR_ATTR_SPECS], rem) {
-+              nla_parse_nested(spec, NL80211_SAR_ATTR_SPECS_MAX,
-+                               spec_list, NULL, NULL);
-+
-+              switch (type) {
-+              case NL80211_SAR_TYPE_POWER:
-+                      if (nl80211_set_sar_sub_specs(rdev, sar_spec,
-+                                                    spec, specs)) {
-+                              err = -EINVAL;
-+                              goto error;
-+                      }
-+                      break;
-+              default:
-+                      err = -EINVAL;
-+                      goto error;
-+              }
-+              specs++;
-+      }
-+
-+      sar_spec->num_sub_specs = specs;
-+
-+      rdev->cur_cmd_info = info;
-+      err = rdev_set_sar_specs(rdev, sar_spec);
-+      rdev->cur_cmd_info = NULL;
-+error:
-+      kfree(sar_spec);
-+      return err;
-+}
-+
- static __genl_const struct genl_ops nl80211_ops[] = {
-       {
-               .cmd = NL80211_CMD_GET_WIPHY,
-@@ -15575,6 +15750,14 @@ static const struct genl_small_ops nl802
-               .internal_flags = NL80211_FLAG_NEED_NETDEV |
-                                 NL80211_FLAG_NEED_RTNL,
-       },
-+      {
-+              .cmd = NL80211_CMD_SET_SAR_SPECS,
-+              .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
-+              .doit = nl80211_set_sar_specs,
-+              .flags = GENL_UNS_ADMIN_PERM,
-+              .internal_flags = NL80211_FLAG_NEED_WIPHY |
-+                                NL80211_FLAG_NEED_RTNL,
-+      },
- };
- static struct genl_family nl80211_fam __genl_ro_after_init = {
---- a/net/wireless/rdev-ops.h
-+++ b/net/wireless/rdev-ops.h
-@@ -1356,4 +1356,16 @@ static inline int rdev_reset_tid_config(
-       return ret;
- }
-+static inline int rdev_set_sar_specs(struct cfg80211_registered_device *rdev,
-+                                   struct cfg80211_sar_specs *sar)
-+{
-+      int ret;
-+
-+      trace_rdev_set_sar_specs(&rdev->wiphy, sar);
-+      ret = rdev->ops->set_sar_specs(&rdev->wiphy, sar);
-+      trace_rdev_return_int(&rdev->wiphy, ret);
-+
-+      return ret;
-+}
-+
- #endif /* __CFG80211_RDEV_OPS */
---- a/net/wireless/trace.h
-+++ b/net/wireless/trace.h
-@@ -3551,6 +3551,25 @@ TRACE_EVENT(rdev_reset_tid_config,
-       TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", peer: " MAC_PR_FMT ", tids: 0x%x",
-                 WIPHY_PR_ARG, NETDEV_PR_ARG, MAC_PR_ARG(peer), __entry->tids)
- );
-+
-+TRACE_EVENT(rdev_set_sar_specs,
-+      TP_PROTO(struct wiphy *wiphy, struct cfg80211_sar_specs *sar),
-+      TP_ARGS(wiphy, sar),
-+      TP_STRUCT__entry(
-+              WIPHY_ENTRY
-+              __field(u16, type)
-+              __field(u16, num)
-+      ),
-+      TP_fast_assign(
-+              WIPHY_ASSIGN;
-+              __entry->type = sar->type;
-+              __entry->num = sar->num_sub_specs;
-+
-+      ),
-+      TP_printk(WIPHY_PR_FMT ", Set type:%d, num_specs:%d",
-+                WIPHY_PR_ARG, __entry->type, __entry->num)
-+);
-+
- #endif /* !__RDEV_OPS_TRACE || TRACE_HEADER_MULTI_READ */
- #undef TRACE_INCLUDE_PATH
diff --git a/package/kernel/mac80211/patches/subsys/385-mac80211-add-ieee80211_set_sar_specs.patch b/package/kernel/mac80211/patches/subsys/385-mac80211-add-ieee80211_set_sar_specs.patch
deleted file mode 100644 (file)
index c351bc8..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-From: Carl Huang <cjhuang@codeaurora.org>
-Date: Thu, 3 Dec 2020 05:37:27 -0500
-Subject: [PATCH] mac80211: add ieee80211_set_sar_specs
-
-This change registers ieee80211_set_sar_specs to
-mac80211_config_ops, so cfg80211 can call it.
-
-Signed-off-by: Carl Huang <cjhuang@codeaurora.org>
-Reviewed-by: Brian Norris <briannorris@chromium.org>
-Reviewed-by: Abhishek Kumar <kuabhs@chromium.org>
-Link: https://lore.kernel.org/r/20201203103728.3034-3-cjhuang@codeaurora.org
-Signed-off-by: Johannes Berg <johannes.berg@intel.com>
----
-
---- a/include/net/mac80211.h
-+++ b/include/net/mac80211.h
-@@ -4207,6 +4207,8 @@ struct ieee80211_ops {
-                                  struct ieee80211_vif *vif);
-       void (*sta_set_4addr)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-                             struct ieee80211_sta *sta, bool enabled);
-+      int (*set_sar_specs)(struct ieee80211_hw *hw,
-+                           const struct cfg80211_sar_specs *sar);
-       void (*sta_set_decap_offload)(struct ieee80211_hw *hw,
-                                     struct ieee80211_vif *vif,
-                                     struct ieee80211_sta *sta, bool enabled);
---- a/net/mac80211/cfg.c
-+++ b/net/mac80211/cfg.c
-@@ -4136,6 +4136,17 @@ static int ieee80211_reset_tid_config(st
-       return ret;
- }
-+static int ieee80211_set_sar_specs(struct wiphy *wiphy,
-+                                 struct cfg80211_sar_specs *sar)
-+{
-+      struct ieee80211_local *local = wiphy_priv(wiphy);
-+
-+      if (!local->ops->set_sar_specs)
-+              return -EOPNOTSUPP;
-+
-+      return local->ops->set_sar_specs(&local->hw, sar);
-+}
-+
- const struct cfg80211_ops mac80211_config_ops = {
-       .add_virtual_intf = ieee80211_add_iface,
-       .del_virtual_intf = ieee80211_del_iface,
-@@ -4239,4 +4250,5 @@ const struct cfg80211_ops mac80211_confi
-       .probe_mesh_link = ieee80211_probe_mesh_link,
-       .set_tid_config = ieee80211_set_tid_config,
-       .reset_tid_config = ieee80211_reset_tid_config,
-+      .set_sar_specs = ieee80211_set_sar_specs,
- };
index c2cc16cd4837918d1e03fa99329519cbb2d14d91..8aec8cedf44187f588fa88f07b49e9c43e5fa0ae 100644 (file)
@@ -14,7 +14,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
 
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -3331,6 +3331,9 @@ static bool ieee80211_amsdu_aggregate(st
+@@ -3280,6 +3280,9 @@ static bool ieee80211_amsdu_aggregate(st
        if (!ieee80211_hw_check(&local->hw, TX_AMSDU))
                return false;
  
index 36b705de12e4bfabeeb4db4babb3ad2cb7f97d17..6a1757a38a01519979b26af97923db6154621cb8 100644 (file)
@@ -1,3 +1,4 @@
+From 0d2ab3aea50bb02ff0c9c3d53c7b2b4b21cdd59d Mon Sep 17 00:00:00 2001
 From: John Crispin <john@phrozen.org>
 Date: Fri, 2 Jul 2021 19:44:07 +0200
 Subject: [PATCH] nl80211: add support for BSS coloring
@@ -13,10 +14,16 @@ Link: https://lore.kernel.org/r/500b3582aec8fe2c42ef46f3117b148cb7cbceb5.1625247
 [remove unnecessary NULL initialisation]
 Signed-off-by: Johannes Berg <johannes.berg@intel.com>
 ---
+ include/net/cfg80211.h       |  92 ++++++++++++++++++++
+ include/uapi/linux/nl80211.h |  43 ++++++++++
+ net/wireless/nl80211.c       | 157 +++++++++++++++++++++++++++++++++++
+ net/wireless/rdev-ops.h      |  13 +++
+ net/wireless/trace.h         |  46 ++++++++++
+ 5 files changed, 351 insertions(+)
 
 --- a/include/net/cfg80211.h
 +++ b/include/net/cfg80211.h
-@@ -1252,6 +1252,27 @@ struct cfg80211_csa_settings {
+@@ -1248,6 +1248,27 @@ struct cfg80211_csa_settings {
  #define CFG80211_MAX_NUM_DIFFERENT_CHANNELS 10
  
  /**
@@ -44,16 +51,16 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
   * struct iface_combination_params - input parameters for interface combinations
   *
   * Used to pass interface combination parameters
-@@ -3979,6 +4000,8 @@ struct mgmt_frame_regs {
-  *    This callback may sleep.
-  * @reset_tid_config: Reset TID specific configuration for the peer, for the
+@@ -3975,6 +3996,8 @@ struct mgmt_frame_regs {
   *    given TIDs. This callback may sleep.
+  *
+  * @set_sar_specs: Update the SAR (TX power) settings.
 + *
 + * @color_change: Initiate a color change.
   */
  struct cfg80211_ops {
        int     (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow);
-@@ -4309,6 +4332,9 @@ struct cfg80211_ops {
+@@ -4302,6 +4325,9 @@ struct cfg80211_ops {
                                    const u8 *peer, u8 tids);
        int     (*set_sar_specs)(struct wiphy *wiphy,
                                 struct cfg80211_sar_specs *sar);
@@ -63,7 +70,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  };
  
  /*
-@@ -8094,4 +8120,70 @@ void cfg80211_update_owe_info_event(stru
+@@ -8089,4 +8115,70 @@ void cfg80211_update_owe_info_event(stru
   */
  void cfg80211_bss_flush(struct wiphy *wiphy);
  
@@ -225,8 +232,8 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
 +++ b/net/wireless/nl80211.c
 @@ -753,6 +753,10 @@ static const struct nla_policy nl80211_p
                                 NL80211_SAE_PWE_BOTH),
-       [NL80211_ATTR_SAR_SPEC] = NLA_POLICY_NESTED(sar_policy),
        [NL80211_ATTR_RECONNECT_REQUESTED] = { .type = NLA_REJECT },
+       [NL80211_ATTR_SAR_SPEC] = NLA_POLICY_NESTED(sar_policy),
 +      [NL80211_ATTR_OBSS_COLOR_BITMAP] = { .type = NLA_U64 },
 +      [NL80211_ATTR_COLOR_CHANGE_COUNT] = { .type = NLA_U8 },
 +      [NL80211_ATTR_COLOR_CHANGE_COLOR] = { .type = NLA_U8 },
@@ -234,7 +241,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  };
  
  /* policy for the key attributes */
-@@ -14677,6 +14681,106 @@ bad_tid_conf:
+@@ -14659,6 +14663,106 @@ bad_tid_conf:
        return ret;
  }
  
@@ -341,7 +348,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  #define NL80211_FLAG_NEED_WIPHY               0x01
  #define NL80211_FLAG_NEED_NETDEV      0x02
  #define NL80211_FLAG_NEED_RTNL                0x04
-@@ -15758,6 +15862,14 @@ static const struct genl_small_ops nl802
+@@ -15730,6 +15834,14 @@ static const struct genl_small_ops nl802
                .internal_flags = NL80211_FLAG_NEED_WIPHY |
                                  NL80211_FLAG_NEED_RTNL,
        },
@@ -356,7 +363,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  };
  
  static struct genl_family nl80211_fam __genl_ro_after_init = {
-@@ -17384,6 +17496,51 @@ void cfg80211_ch_switch_started_notify(s
+@@ -17361,6 +17473,51 @@ void cfg80211_ch_switch_started_notify(s
  }
  EXPORT_SYMBOL(cfg80211_ch_switch_started_notify);
  
@@ -410,7 +417,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                     const struct cfg80211_chan_def *chandef,
 --- a/net/wireless/rdev-ops.h
 +++ b/net/wireless/rdev-ops.h
-@@ -1368,4 +1368,17 @@ static inline int rdev_set_sar_specs(str
+@@ -1358,4 +1358,17 @@ static inline int rdev_set_sar_specs(str
        return ret;
  }
  
@@ -430,7 +437,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  #endif /* __CFG80211_RDEV_OPS */
 --- a/net/wireless/trace.h
 +++ b/net/wireless/trace.h
-@@ -3570,6 +3570,52 @@ TRACE_EVENT(rdev_set_sar_specs,
+@@ -3565,6 +3565,52 @@ TRACE_EVENT(rdev_set_sar_specs,
                  WIPHY_PR_ARG, __entry->type, __entry->num)
  );
  
index 0a3118545faff95db9bef9d652b66f97fca3c05e..fc99b36c5db943bf969127c17347b08f3369a948 100644 (file)
@@ -19,7 +19,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
 
 --- a/include/net/mac80211.h
 +++ b/include/net/mac80211.h
-@@ -1710,6 +1710,10 @@ enum ieee80211_offload_flags {
+@@ -1713,6 +1713,10 @@ enum ieee80211_offload_flags {
   *    protected by fq->lock.
   * @offload_flags: 802.3 -> 802.11 enapsulation offload flags, see
   *    &enum ieee80211_offload_flags.
@@ -30,7 +30,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
   */
  struct ieee80211_vif {
        enum nl80211_iftype type;
-@@ -1738,6 +1742,9 @@ struct ieee80211_vif {
+@@ -1741,6 +1745,9 @@ struct ieee80211_vif {
  
        bool txqs_stopped[IEEE80211_NUM_ACS];
  
@@ -40,7 +40,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        /* must be last */
        u8 drv_priv[] __aligned(sizeof(void *));
  };
-@@ -4982,6 +4989,16 @@ void ieee80211_csa_finish(struct ieee802
+@@ -4986,6 +4993,16 @@ void ieee80211_csa_finish(struct ieee802
  bool ieee80211_beacon_cntdwn_is_complete(struct ieee80211_vif *vif);
  
  /**
@@ -57,7 +57,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
   * ieee80211_proberesp_get - retrieve a Probe Response template
   * @hw: pointer obtained from ieee80211_alloc_hw().
   * @vif: &struct ieee80211_vif pointer from the add_interface callback.
-@@ -6726,6 +6743,18 @@ ieee80211_get_unsol_bcast_probe_resp_tmp
+@@ -6745,6 +6762,18 @@ ieee80211_get_unsol_bcast_probe_resp_tmp
                                          struct ieee80211_vif *vif);
  
  /**
@@ -78,7 +78,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
   * The function is used to check if a frame is a data frame. Frames with
 --- a/net/mac80211/cfg.c
 +++ b/net/mac80211/cfg.c
-@@ -827,9 +827,11 @@ static int ieee80211_set_monitor_channel
+@@ -809,9 +809,11 @@ static int ieee80211_set_monitor_channel
        return ret;
  }
  
@@ -93,7 +93,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  {
        struct probe_resp *new, *old;
  
-@@ -849,6 +851,8 @@ static int ieee80211_set_probe_resp(stru
+@@ -831,6 +833,8 @@ static int ieee80211_set_probe_resp(stru
                memcpy(new->cntdwn_counter_offsets, csa->counter_offsets_presp,
                       csa->n_counter_offsets_presp *
                       sizeof(new->cntdwn_counter_offsets[0]));
@@ -102,7 +102,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  
        rcu_assign_pointer(sdata->u.ap.probe_resp, new);
        if (old)
-@@ -954,7 +958,8 @@ static int ieee80211_set_ftm_responder_p
+@@ -936,7 +940,8 @@ static int ieee80211_set_ftm_responder_p
  
  static int ieee80211_assign_beacon(struct ieee80211_sub_if_data *sdata,
                                   struct cfg80211_beacon_data *params,
@@ -112,7 +112,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  {
        struct beacon_data *new, *old;
        int new_head_len, new_tail_len;
-@@ -1003,6 +1008,9 @@ static int ieee80211_assign_beacon(struc
+@@ -985,6 +990,9 @@ static int ieee80211_assign_beacon(struc
                memcpy(new->cntdwn_counter_offsets, csa->counter_offsets_beacon,
                       csa->n_counter_offsets_beacon *
                       sizeof(new->cntdwn_counter_offsets[0]));
@@ -122,7 +122,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        }
  
        /* copy in head */
-@@ -1019,7 +1027,7 @@ static int ieee80211_assign_beacon(struc
+@@ -1001,7 +1009,7 @@ static int ieee80211_assign_beacon(struc
                        memcpy(new->tail, old->tail, new_tail_len);
  
        err = ieee80211_set_probe_resp(sdata, params->probe_resp,
@@ -131,7 +131,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        if (err < 0) {
                kfree(new);
                return err;
-@@ -1176,7 +1184,7 @@ static int ieee80211_start_ap(struct wip
+@@ -1156,7 +1164,7 @@ static int ieee80211_start_ap(struct wip
        if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL))
                sdata->vif.bss_conf.beacon_tx_rate = params->beacon_rate;
  
@@ -140,7 +140,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        if (err < 0)
                goto error;
        changed |= err;
-@@ -1231,17 +1239,17 @@ static int ieee80211_change_beacon(struc
+@@ -1211,17 +1219,17 @@ static int ieee80211_change_beacon(struc
        sdata = IEEE80211_DEV_TO_SUB_IF(dev);
        sdata_assert_lock(sdata);
  
@@ -161,7 +161,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        if (err < 0)
                return err;
        ieee80211_bss_info_change_notify(sdata, err);
-@@ -3174,7 +3182,7 @@ static int ieee80211_set_after_csa_beaco
+@@ -3144,7 +3152,7 @@ static int ieee80211_set_after_csa_beaco
        switch (sdata->vif.type) {
        case NL80211_IFTYPE_AP:
                err = ieee80211_assign_beacon(sdata, sdata->u.ap.next_beacon,
@@ -170,7 +170,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                kfree(sdata->u.ap.next_beacon);
                sdata->u.ap.next_beacon = NULL;
  
-@@ -3340,7 +3348,7 @@ static int ieee80211_set_csa_beacon(stru
+@@ -3310,7 +3318,7 @@ static int ieee80211_set_csa_beacon(stru
                csa.n_counter_offsets_presp = params->n_counter_offsets_presp;
                csa.count = params->count;
  
@@ -179,7 +179,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                if (err < 0) {
                        kfree(sdata->u.ap.next_beacon);
                        return err;
-@@ -3428,6 +3436,15 @@ static int ieee80211_set_csa_beacon(stru
+@@ -3399,6 +3407,15 @@ static int ieee80211_set_csa_beacon(stru
        return 0;
  }
  
@@ -195,7 +195,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  static int
  __ieee80211_channel_switch(struct wiphy *wiphy, struct net_device *dev,
                           struct cfg80211_csa_settings *params)
-@@ -3496,6 +3513,10 @@ __ieee80211_channel_switch(struct wiphy
+@@ -3467,6 +3484,10 @@ __ieee80211_channel_switch(struct wiphy
                goto out;
        }
  
@@ -206,7 +206,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        err = ieee80211_set_csa_beacon(sdata, params, &changed);
        if (err) {
                ieee80211_vif_unreserve_chanctx(sdata);
-@@ -4147,6 +4168,196 @@ static int ieee80211_set_sar_specs(struc
+@@ -4118,6 +4139,196 @@ static int ieee80211_set_sar_specs(struc
        return local->ops->set_sar_specs(&local->hw, sar);
  }
  
@@ -403,7 +403,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  const struct cfg80211_ops mac80211_config_ops = {
        .add_virtual_intf = ieee80211_add_iface,
        .del_virtual_intf = ieee80211_del_iface,
-@@ -4251,4 +4462,5 @@ const struct cfg80211_ops mac80211_confi
+@@ -4221,4 +4432,5 @@ const struct cfg80211_ops mac80211_confi
        .set_tid_config = ieee80211_set_tid_config,
        .reset_tid_config = ieee80211_reset_tid_config,
        .set_sar_specs = ieee80211_set_sar_specs,
@@ -411,7 +411,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  };
 --- a/net/mac80211/ieee80211_i.h
 +++ b/net/mac80211/ieee80211_i.h
-@@ -248,6 +248,12 @@ struct ieee80211_csa_settings {
+@@ -259,6 +259,12 @@ struct ieee80211_csa_settings {
        u8 count;
  };
  
@@ -424,7 +424,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  struct beacon_data {
        u8 *head, *tail;
        int head_len, tail_len;
-@@ -932,6 +938,8 @@ struct ieee80211_sub_if_data {
+@@ -940,6 +946,8 @@ struct ieee80211_sub_if_data {
        bool csa_block_tx; /* write-protected by sdata_lock and local->mtx */
        struct cfg80211_chan_def csa_chandef;
  
@@ -433,7 +433,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        struct list_head assigned_chanctx_list; /* protected by chanctx_mtx */
        struct list_head reserved_chanctx_list; /* protected by chanctx_mtx */
  
-@@ -1900,6 +1908,9 @@ void ieee80211_csa_finalize_work(struct
+@@ -1906,6 +1914,9 @@ void ieee80211_csa_finalize_work(struct
  int ieee80211_channel_switch(struct wiphy *wiphy, struct net_device *dev,
                             struct cfg80211_csa_settings *params);
  
@@ -445,7 +445,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                                         NETIF_F_HW_CSUM | NETIF_F_SG | \
 --- a/net/mac80211/iface.c
 +++ b/net/mac80211/iface.c
-@@ -465,6 +465,7 @@ static void ieee80211_do_stop(struct iee
+@@ -458,6 +458,7 @@ static void ieee80211_do_stop(struct iee
        sdata_unlock(sdata);
  
        cancel_work_sync(&sdata->csa_finalize_work);
@@ -453,7 +453,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  
        cancel_delayed_work_sync(&sdata->dfs_cac_timer_work);
  
-@@ -1639,6 +1640,7 @@ static void ieee80211_setup_sdata(struct
+@@ -1569,6 +1570,7 @@ static void ieee80211_setup_sdata(struct
        INIT_WORK(&sdata->work, ieee80211_iface_work);
        INIT_WORK(&sdata->recalc_smps, ieee80211_recalc_smps_work);
        INIT_WORK(&sdata->csa_finalize_work, ieee80211_csa_finalize_work);
@@ -463,7 +463,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -4790,11 +4790,11 @@ static int ieee80211_beacon_add_tim(stru
+@@ -4740,11 +4740,11 @@ static int ieee80211_beacon_add_tim(stru
  static void ieee80211_set_beacon_cntdwn(struct ieee80211_sub_if_data *sdata,
                                        struct beacon_data *beacon)
  {
@@ -477,7 +477,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  
        switch (sdata->vif.type) {
        case NL80211_IFTYPE_AP:
-@@ -4814,21 +4814,27 @@ static void ieee80211_set_beacon_cntdwn(
+@@ -4764,21 +4764,27 @@ static void ieee80211_set_beacon_cntdwn(
        }
  
        rcu_read_lock();
@@ -514,7 +514,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        }
        rcu_read_unlock();
  }
-@@ -5038,6 +5044,7 @@ __ieee80211_beacon_get(struct ieee80211_
+@@ -4988,6 +4994,7 @@ __ieee80211_beacon_get(struct ieee80211_
                        if (offs) {
                                offs->tim_offset = beacon->head_len;
                                offs->tim_length = skb->len - beacon->head_len;
index 369619938ece731a22aeb67f9a7a4e568f8b8b2f..d2b1881ddc0037f35c6b30b293308b243d96c8db 100644 (file)
@@ -73,7 +73,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                        } u;
                } __packed action;
        } u;
-@@ -2880,6 +2926,7 @@ enum ieee80211_eid {
+@@ -2881,6 +2927,7 @@ enum ieee80211_eid {
        WLAN_EID_AID_RESPONSE = 211,
        WLAN_EID_S1G_BCN_COMPAT = 213,
        WLAN_EID_S1G_SHORT_BCN_INTERVAL = 214,
@@ -81,7 +81,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        WLAN_EID_S1G_CAPABILITIES = 217,
        WLAN_EID_VENDOR_SPECIFIC = 221,
        WLAN_EID_QOS_PARAMETER = 222,
-@@ -2948,6 +2995,7 @@ enum ieee80211_category {
+@@ -2949,6 +2996,7 @@ enum ieee80211_category {
        WLAN_CATEGORY_FST = 18,
        WLAN_CATEGORY_UNPROT_DMG = 20,
        WLAN_CATEGORY_VHT = 21,
@@ -89,7 +89,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        WLAN_CATEGORY_VENDOR_SPECIFIC_PROTECTED = 126,
        WLAN_CATEGORY_VENDOR_SPECIFIC = 127,
  };
-@@ -3021,6 +3069,20 @@ enum ieee80211_key_len {
+@@ -3022,6 +3070,20 @@ enum ieee80211_key_len {
        WLAN_KEY_LEN_BIP_GMAC_256 = 32,
  };
  
index cdee132f152694461aad27bd1d23bb60cc44256e..c502d696164f92fd44a090280918992ccf981ef7 100644 (file)
@@ -27,7 +27,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
 
 --- a/include/net/mac80211.h
 +++ b/include/net/mac80211.h
-@@ -4219,6 +4219,11 @@ struct ieee80211_ops {
+@@ -4223,6 +4223,11 @@ struct ieee80211_ops {
        void (*sta_set_decap_offload)(struct ieee80211_hw *hw,
                                      struct ieee80211_vif *vif,
                                      struct ieee80211_sta *sta, bool enabled);
@@ -84,7 +84,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  #endif /* __MAC80211_DRIVER_OPS */
 --- a/net/mac80211/ieee80211_i.h
 +++ b/net/mac80211/ieee80211_i.h
-@@ -954,6 +954,7 @@ struct ieee80211_sub_if_data {
+@@ -962,6 +962,7 @@ struct ieee80211_sub_if_data {
  
        struct work_struct work;
        struct sk_buff_head skb_queue;
@@ -92,7 +92,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  
        u8 needed_rx_chains;
        enum ieee80211_smps_mode smps_mode;
-@@ -2093,6 +2094,11 @@ ieee80211_he_op_ie_to_bss_conf(struct ie
+@@ -2099,6 +2100,11 @@ ieee80211_he_op_ie_to_bss_conf(struct ie
  
  /* S1G */
  void ieee80211_s1g_sta_rate_init(struct sta_info *sta);
@@ -106,7 +106,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata,
 --- a/net/mac80211/iface.c
 +++ b/net/mac80211/iface.c
-@@ -563,6 +563,7 @@ static void ieee80211_do_stop(struct iee
+@@ -555,6 +555,7 @@ static void ieee80211_do_stop(struct iee
                 */
                ieee80211_free_keys(sdata, true);
                skb_queue_purge(&sdata->skb_queue);
@@ -114,7 +114,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        }
  
        spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
-@@ -1070,6 +1071,7 @@ int ieee80211_add_virtual_monitor(struct
+@@ -1029,6 +1030,7 @@ int ieee80211_add_virtual_monitor(struct
        }
  
        skb_queue_head_init(&sdata->skb_queue);
@@ -122,8 +122,8 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        INIT_WORK(&sdata->work, ieee80211_iface_work);
  
        return 0;
-@@ -1442,6 +1444,24 @@ static void ieee80211_if_setup_no_queue(
- #endif
+@@ -1370,6 +1372,24 @@ static void ieee80211_if_setup_no_queue(
+       dev->priv_flags |= IFF_NO_QUEUE;
  }
  
 +static void ieee80211_iface_process_status(struct ieee80211_sub_if_data *sdata,
@@ -147,7 +147,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  static void ieee80211_iface_work(struct work_struct *work)
  {
        struct ieee80211_sub_if_data *sdata =
-@@ -1519,6 +1539,16 @@ static void ieee80211_iface_work(struct
+@@ -1448,6 +1468,16 @@ static void ieee80211_iface_work(struct
                                WARN_ON(1);
                                break;
                        }
@@ -164,8 +164,8 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                } else if (ieee80211_is_ext(mgmt->frame_control)) {
                        if (sdata->vif.type == NL80211_IFTYPE_STATION)
                                ieee80211_sta_rx_queued_ext(sdata, skb);
-@@ -1574,6 +1604,12 @@ static void ieee80211_iface_work(struct
-               kfree_skb(skb);
+@@ -1504,6 +1534,12 @@ static void ieee80211_iface_work(struct
+               kcov_remote_stop();
        }
  
 +      /* process status queue */
@@ -177,7 +177,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        /* then other type-dependent work */
        switch (sdata->vif.type) {
        case NL80211_IFTYPE_STATION:
-@@ -1637,6 +1677,7 @@ static void ieee80211_setup_sdata(struct
+@@ -1567,6 +1603,7 @@ static void ieee80211_setup_sdata(struct
        }
  
        skb_queue_head_init(&sdata->skb_queue);
@@ -187,7 +187,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        INIT_WORK(&sdata->csa_finalize_work, ieee80211_csa_finalize_work);
 --- a/net/mac80211/rx.c
 +++ b/net/mac80211/rx.c
-@@ -3208,6 +3208,68 @@ ieee80211_rx_h_mgmt_check(struct ieee802
+@@ -3116,6 +3116,68 @@ ieee80211_rx_h_mgmt_check(struct ieee802
        return RX_CONTINUE;
  }
  
@@ -256,7 +256,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  static ieee80211_rx_result debug_noinline
  ieee80211_rx_h_action(struct ieee80211_rx_data *rx)
  {
-@@ -3487,6 +3549,17 @@ ieee80211_rx_h_action(struct ieee80211_r
+@@ -3395,6 +3457,17 @@ ieee80211_rx_h_action(struct ieee80211_r
                    !mesh_path_sel_is_hwmp(sdata))
                        break;
                goto queue;
index eb32c49890f560795863468a44888df21d5c8ab7..33cd29bd458ccfab96434d6a9da488d06dd00726 100644 (file)
@@ -12,7 +12,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
 
 --- a/drivers/net/wireless/ath/ath11k/mac.c
 +++ b/drivers/net/wireless/ath/ath11k/mac.c
-@@ -3627,7 +3627,7 @@ ath11k_mac_filter_he_cap_mesh(struct iee
+@@ -3656,7 +3656,7 @@ ath11k_mac_filter_he_cap_mesh(struct iee
            IEEE80211_HE_MAC_CAP4_BQR;
        he_cap_elem->mac_cap_info[4] &= ~m;
  
@@ -21,7 +21,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
            IEEE80211_HE_MAC_CAP5_UL_2x996_TONE_RU |
            IEEE80211_HE_MAC_CAP5_PUNCTURED_SOUNDING |
            IEEE80211_HE_MAC_CAP5_HT_VHT_TRIG_FRAME_RX;
-@@ -3637,7 +3637,7 @@ ath11k_mac_filter_he_cap_mesh(struct iee
+@@ -3666,7 +3666,7 @@ ath11k_mac_filter_he_cap_mesh(struct iee
            IEEE80211_HE_PHY_CAP2_UL_MU_PARTIAL_MU_MIMO;
        he_cap_elem->phy_cap_info[2] &= ~m;
  
@@ -30,7 +30,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
            IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_TX_MASK |
            IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_MASK;
        he_cap_elem->phy_cap_info[3] &= ~m;
-@@ -3649,13 +3649,13 @@ ath11k_mac_filter_he_cap_mesh(struct iee
+@@ -3678,13 +3678,13 @@ ath11k_mac_filter_he_cap_mesh(struct iee
        he_cap_elem->phy_cap_info[5] &= ~m;
  
        m = IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_75_MU |
@@ -49,7 +49,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        he_cap_elem->phy_cap_info[7] &= ~m;
 --- a/drivers/net/wireless/mediatek/mt76/mt7915/init.c
 +++ b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
-@@ -307,8 +307,8 @@ mt7915_set_stream_he_txbf_caps(struct ie
+@@ -423,8 +423,8 @@ mt7915_set_stream_he_txbf_caps(struct ie
            IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_ABOVE_80MHZ_MASK;
        elem->phy_cap_info[5] &= ~c;
  
@@ -60,8 +60,8 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        elem->phy_cap_info[6] &= ~c;
  
        elem->phy_cap_info[7] &= ~IEEE80211_HE_PHY_CAP7_MAX_NC_MASK;
-@@ -348,8 +348,8 @@ mt7915_set_stream_he_txbf_caps(struct ie
-       c = (nss - 1) | (max_t(int, mcs->tx_mcs_160, 1) << 3);
+@@ -461,8 +461,8 @@ mt7915_set_stream_he_txbf_caps(struct ie
+       c = (nss - 1) | (max_t(int, le16_to_cpu(mcs->tx_mcs_160), 1) << 3);
        elem->phy_cap_info[5] |= c;
  
 -      c = IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMER_FB |
@@ -69,9 +69,9 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
 +      c = IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMING_FB |
 +          IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMING_PARTIAL_BW_FB;
        elem->phy_cap_info[6] |= c;
- }
  
-@@ -484,7 +484,7 @@ mt7915_init_he_caps(struct mt7915_phy *p
+       /* the maximum cap is 4 x 3, (Nr, Nc) = (3, 2) */
+@@ -589,7 +589,7 @@ mt7915_init_he_caps(struct mt7915_phy *p
                                IEEE80211_HE_PHY_CAP6_PARTIAL_BW_EXT_RANGE |
                                IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT;
                        he_cap_elem->phy_cap_info[7] |=
@@ -82,7 +82,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                                IEEE80211_HE_PHY_CAP8_20MHZ_IN_40MHZ_HE_PPDU_IN_2G |
 --- a/include/linux/ieee80211.h
 +++ b/include/linux/ieee80211.h
-@@ -2065,7 +2065,7 @@ int ieee80211_get_vht_max_nss(struct iee
+@@ -2066,7 +2066,7 @@ int ieee80211_get_vht_max_nss(struct iee
  #define IEEE80211_HE_MAC_CAP4_BSRP_BQRP_A_MPDU_AGG            0x01
  #define IEEE80211_HE_MAC_CAP4_QTP                             0x02
  #define IEEE80211_HE_MAC_CAP4_BQR                             0x04
@@ -91,7 +91,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  #define IEEE80211_HE_MAC_CAP4_NDP_FB_REP                      0x10
  #define IEEE80211_HE_MAC_CAP4_OPS                             0x20
  #define IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU                  0x40
-@@ -2076,7 +2076,7 @@ int ieee80211_get_vht_max_nss(struct iee
+@@ -2077,7 +2077,7 @@ int ieee80211_get_vht_max_nss(struct iee
  
  #define IEEE80211_HE_MAC_CAP5_MULTI_TID_AGG_TX_QOS_B40                0x01
  #define IEEE80211_HE_MAC_CAP5_MULTI_TID_AGG_TX_QOS_B41                0x02
@@ -100,7 +100,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  #define IEEE80211_HE_MAC_CAP5_UL_2x996_TONE_RU                        0x08
  #define IEEE80211_HE_MAC_CAP5_OM_CTRL_UL_MU_DATA_DIS_RX               0x10
  #define IEEE80211_HE_MAC_CAP5_HE_DYNAMIC_SM_PS                        0x20
-@@ -2134,7 +2134,7 @@ int ieee80211_get_vht_max_nss(struct iee
+@@ -2135,7 +2135,7 @@ int ieee80211_get_vht_max_nss(struct iee
  #define IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_MASK                   0x18
  #define IEEE80211_HE_PHY_CAP3_DCM_MAX_RX_NSS_1                                0x00
  #define IEEE80211_HE_PHY_CAP3_DCM_MAX_RX_NSS_2                                0x20
@@ -109,7 +109,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  #define IEEE80211_HE_PHY_CAP3_SU_BEAMFORMER                           0x80
  
  #define IEEE80211_HE_PHY_CAP4_SU_BEAMFORMEE                           0x01
-@@ -2181,15 +2181,15 @@ int ieee80211_get_vht_max_nss(struct iee
+@@ -2182,15 +2182,15 @@ int ieee80211_get_vht_max_nss(struct iee
  
  #define IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_42_SU                     0x01
  #define IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_75_MU                     0x02
@@ -185,7 +185,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        PFLAG_RANGE(PHY, 7, MAX_NC, 0, 1, 1, "MAX-NC-%d");
 --- a/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c
 +++ b/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c
-@@ -631,7 +631,7 @@ static struct ieee80211_sband_iftype_dat
+@@ -587,7 +587,7 @@ static const struct ieee80211_sband_ifty
                                .phy_cap_info[6] =
                                        IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT,
                                .phy_cap_info[7] =
index 75aecf06c7079b36c5efa3bc38d9d442eddeedd8..f932fa63d742b7be0564f9070aebd61823b27278 100644 (file)
@@ -11,7 +11,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
 
 --- a/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c
 +++ b/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c
-@@ -598,7 +598,7 @@ static struct ieee80211_sband_iftype_dat
+@@ -554,7 +554,7 @@ static const struct ieee80211_sband_ifty
                                        IEEE80211_HE_MAC_CAP3_OMI_CONTROL |
                                        IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2,
                                .mac_cap_info[4] =
@@ -20,7 +20,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                                        IEEE80211_HE_MAC_CAP4_MULTI_TID_AGG_TX_QOS_B39,
                                .mac_cap_info[5] =
                                        IEEE80211_HE_MAC_CAP5_MULTI_TID_AGG_TX_QOS_B40 |
-@@ -682,7 +682,7 @@ static struct ieee80211_sband_iftype_dat
+@@ -638,7 +638,7 @@ static const struct ieee80211_sband_ifty
                                        IEEE80211_HE_MAC_CAP3_OMI_CONTROL |
                                        IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2,
                                .mac_cap_info[4] =
@@ -31,7 +31,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                                .phy_cap_info[0] =
 --- a/drivers/net/wireless/mediatek/mt76/mt7915/init.c
 +++ b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
-@@ -427,7 +427,7 @@ mt7915_init_he_caps(struct mt7915_phy *p
+@@ -532,7 +532,7 @@ mt7915_init_he_caps(struct mt7915_phy *p
                        IEEE80211_HE_MAC_CAP3_OMI_CONTROL |
                        IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_RESERVED;
                he_cap_elem->mac_cap_info[4] =
@@ -42,7 +42,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                        he_cap_elem->phy_cap_info[0] =
 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
 +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
-@@ -1353,7 +1353,7 @@ mt7915_mcu_sta_he_tlv(struct sk_buff *sk
+@@ -1325,7 +1325,7 @@ mt7915_mcu_sta_he_tlv(struct sk_buff *sk
        if (elem->mac_cap_info[3] & IEEE80211_HE_MAC_CAP3_OMI_CONTROL)
                cap |= STA_REC_HE_CAP_OM;
  
@@ -53,7 +53,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        if (elem->mac_cap_info[4] & IEEE80211_HE_MAC_CAP4_BQR)
 --- a/include/linux/ieee80211.h
 +++ b/include/linux/ieee80211.h
-@@ -2068,7 +2068,7 @@ int ieee80211_get_vht_max_nss(struct iee
+@@ -2069,7 +2069,7 @@ int ieee80211_get_vht_max_nss(struct iee
  #define IEEE80211_HE_MAC_CAP4_PSR_RESP                                0x08
  #define IEEE80211_HE_MAC_CAP4_NDP_FB_REP                      0x10
  #define IEEE80211_HE_MAC_CAP4_OPS                             0x20
@@ -75,7 +75,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  
 --- a/drivers/net/wireless/mac80211_hwsim.c
 +++ b/drivers/net/wireless/mac80211_hwsim.c
-@@ -2818,7 +2818,7 @@ static const struct ieee80211_sband_ifty
+@@ -2796,7 +2796,7 @@ static const struct ieee80211_sband_ifty
                                .mac_cap_info[3] =
                                        IEEE80211_HE_MAC_CAP3_OMI_CONTROL |
                                        IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2,
@@ -84,7 +84,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                                .phy_cap_info[1] =
                                        IEEE80211_HE_PHY_CAP1_PREAMBLE_PUNC_RX_MASK |
                                        IEEE80211_HE_PHY_CAP1_DEVICE_CLASS_A |
-@@ -2862,7 +2862,7 @@ static const struct ieee80211_sband_ifty
+@@ -2840,7 +2840,7 @@ static const struct ieee80211_sband_ifty
                                .mac_cap_info[3] =
                                        IEEE80211_HE_MAC_CAP3_OMI_CONTROL |
                                        IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2,
@@ -93,7 +93,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                                .phy_cap_info[1] =
                                        IEEE80211_HE_PHY_CAP1_PREAMBLE_PUNC_RX_MASK |
                                        IEEE80211_HE_PHY_CAP1_DEVICE_CLASS_A |
-@@ -2908,7 +2908,7 @@ static const struct ieee80211_sband_ifty
+@@ -2886,7 +2886,7 @@ static const struct ieee80211_sband_ifty
                                .mac_cap_info[3] =
                                        IEEE80211_HE_MAC_CAP3_OMI_CONTROL |
                                        IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2,
@@ -102,7 +102,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                                .phy_cap_info[0] =
                                        IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G |
                                        IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G |
-@@ -2956,7 +2956,7 @@ static const struct ieee80211_sband_ifty
+@@ -2934,7 +2934,7 @@ static const struct ieee80211_sband_ifty
                                .mac_cap_info[3] =
                                        IEEE80211_HE_MAC_CAP3_OMI_CONTROL |
                                        IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2,
index adb89f6390d6909783af29a6bcde7faab36d4cb5..dc927a683ceef7ee047940b5e04adf024d91902e 100644 (file)
@@ -13,7 +13,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
 
 --- a/drivers/net/wireless/ath/ath11k/mac.c
 +++ b/drivers/net/wireless/ath/ath11k/mac.c
-@@ -1290,9 +1290,8 @@ static void ath11k_peer_assoc_h_he(struc
+@@ -1265,9 +1265,8 @@ static void ath11k_peer_assoc_h_he(struc
         * request, then use MAX_AMPDU_LEN_FACTOR as 16 to calculate max_ampdu
         * length.
         */
@@ -27,7 +27,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                if (sta->vht_cap.vht_supported)
 --- a/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c
 +++ b/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c
-@@ -596,7 +596,7 @@ static struct ieee80211_sband_iftype_dat
+@@ -552,7 +552,7 @@ static const struct ieee80211_sband_ifty
                                        IEEE80211_HE_MAC_CAP2_32BIT_BA_BITMAP,
                                .mac_cap_info[3] =
                                        IEEE80211_HE_MAC_CAP3_OMI_CONTROL |
@@ -36,7 +36,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                                .mac_cap_info[4] =
                                        IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU |
                                        IEEE80211_HE_MAC_CAP4_MULTI_TID_AGG_TX_QOS_B39,
-@@ -680,7 +680,7 @@ static struct ieee80211_sband_iftype_dat
+@@ -636,7 +636,7 @@ static const struct ieee80211_sband_ifty
                                        IEEE80211_HE_MAC_CAP2_BSR,
                                .mac_cap_info[3] =
                                        IEEE80211_HE_MAC_CAP3_OMI_CONTROL |
@@ -47,7 +47,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                                .mac_cap_info[5] =
 --- a/drivers/net/wireless/mac80211_hwsim.c
 +++ b/drivers/net/wireless/mac80211_hwsim.c
-@@ -2817,7 +2817,7 @@ static const struct ieee80211_sband_ifty
+@@ -2795,7 +2795,7 @@ static const struct ieee80211_sband_ifty
                                        IEEE80211_HE_MAC_CAP2_ACK_EN,
                                .mac_cap_info[3] =
                                        IEEE80211_HE_MAC_CAP3_OMI_CONTROL |
@@ -56,7 +56,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                                .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU,
                                .phy_cap_info[1] =
                                        IEEE80211_HE_PHY_CAP1_PREAMBLE_PUNC_RX_MASK |
-@@ -2861,7 +2861,7 @@ static const struct ieee80211_sband_ifty
+@@ -2839,7 +2839,7 @@ static const struct ieee80211_sband_ifty
                                        IEEE80211_HE_MAC_CAP2_ACK_EN,
                                .mac_cap_info[3] =
                                        IEEE80211_HE_MAC_CAP3_OMI_CONTROL |
@@ -65,7 +65,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                                .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU,
                                .phy_cap_info[1] =
                                        IEEE80211_HE_PHY_CAP1_PREAMBLE_PUNC_RX_MASK |
-@@ -2907,7 +2907,7 @@ static const struct ieee80211_sband_ifty
+@@ -2885,7 +2885,7 @@ static const struct ieee80211_sband_ifty
                                        IEEE80211_HE_MAC_CAP2_ACK_EN,
                                .mac_cap_info[3] =
                                        IEEE80211_HE_MAC_CAP3_OMI_CONTROL |
@@ -74,7 +74,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                                .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU,
                                .phy_cap_info[0] =
                                        IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G |
-@@ -2955,7 +2955,7 @@ static const struct ieee80211_sband_ifty
+@@ -2933,7 +2933,7 @@ static const struct ieee80211_sband_ifty
                                        IEEE80211_HE_MAC_CAP2_ACK_EN,
                                .mac_cap_info[3] =
                                        IEEE80211_HE_MAC_CAP3_OMI_CONTROL |
@@ -85,7 +85,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                                        IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G |
 --- a/drivers/net/wireless/mediatek/mt76/mt7915/init.c
 +++ b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
-@@ -425,7 +425,7 @@ mt7915_init_he_caps(struct mt7915_phy *p
+@@ -530,7 +530,7 @@ mt7915_init_he_caps(struct mt7915_phy *p
                        IEEE80211_HE_MAC_CAP0_HTC_HE;
                he_cap_elem->mac_cap_info[3] =
                        IEEE80211_HE_MAC_CAP3_OMI_CONTROL |
@@ -96,7 +96,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  
 --- a/include/linux/ieee80211.h
 +++ b/include/linux/ieee80211.h
-@@ -2051,17 +2051,15 @@ int ieee80211_get_vht_max_nss(struct iee
+@@ -2052,17 +2052,15 @@ int ieee80211_get_vht_max_nss(struct iee
   * A-MDPU Length Exponent field in the HT capabilities, VHT capabilities and the
   * same field in the HE capabilities.
   */
index 6f13f642086d0ed20f33b6bdbe766b02098a40bc..fb0106bac1a4b174ca92b34772fd5383bc544245 100644 (file)
@@ -1,24 +1,24 @@
 --- a/include/net/cfg80211.h
 +++ b/include/net/cfg80211.h
-@@ -3814,6 +3814,7 @@ struct mgmt_frame_regs {
+@@ -3810,6 +3810,7 @@ struct mgmt_frame_regs {
   *    (as advertised by the nl80211 feature flag.)
   * @get_tx_power: store the current TX power into the dbm variable;
   *    return 0 if successful
 + * @set_antenna_gain: set antenna gain to reduce maximum tx power if necessary
   *
-  * @set_wds_peer: set the WDS peer for a WDS interface
-  *
-@@ -4138,6 +4139,7 @@ struct cfg80211_ops {
+  * @rfkill_poll: polls the hw rfkill line, use cfg80211 reporting
+  *    functions to adjust rfkill hw state
+@@ -4134,6 +4135,7 @@ struct cfg80211_ops {
                                enum nl80211_tx_power_setting type, int mbm);
        int     (*get_tx_power)(struct wiphy *wiphy, struct wireless_dev *wdev,
                                int *dbm);
 +      int     (*set_antenna_gain)(struct wiphy *wiphy, int dbi);
  
-       int     (*set_wds_peer)(struct wiphy *wiphy, struct net_device *dev,
-                               const u8 *addr);
+       void    (*rfkill_poll)(struct wiphy *wiphy);
 --- a/include/net/mac80211.h
 +++ b/include/net/mac80211.h
-@@ -1561,6 +1561,7 @@ enum ieee80211_smps_mode {
+@@ -1564,6 +1564,7 @@ enum ieee80211_smps_mode {
   *
   * @power_level: requested transmit power (in dBm), backward compatibility
   *    value only that is set to the minimum of all interfaces
@@ -26,7 +26,7 @@
   *
   * @chandef: the channel definition to tune to
   * @radar_enabled: whether radar detection is enabled
-@@ -1581,6 +1582,7 @@ enum ieee80211_smps_mode {
+@@ -1584,6 +1585,7 @@ enum ieee80211_smps_mode {
  struct ieee80211_conf {
        u32 flags;
        int power_level, dynamic_ps_timeout;
@@ -57,7 +57,7 @@
        __NL80211_ATTR_AFTER_LAST,
 --- a/net/mac80211/cfg.c
 +++ b/net/mac80211/cfg.c
-@@ -2769,6 +2769,19 @@ static int ieee80211_get_tx_power(struct
+@@ -2749,6 +2749,19 @@ static int ieee80211_get_tx_power(struct
        return 0;
  }
  
 +      return 0;
 +}
 +
- static int ieee80211_set_wds_peer(struct wiphy *wiphy, struct net_device *dev,
-                                 const u8 *addr)
+ static void ieee80211_rfkill_poll(struct wiphy *wiphy)
  {
-@@ -4413,6 +4426,7 @@ const struct cfg80211_ops mac80211_confi
+       struct ieee80211_local *local = wiphy_priv(wiphy);
+@@ -4384,6 +4397,7 @@ const struct cfg80211_ops mac80211_confi
        .set_wiphy_params = ieee80211_set_wiphy_params,
        .set_tx_power = ieee80211_set_tx_power,
        .get_tx_power = ieee80211_get_tx_power,
 +      .set_antenna_gain = ieee80211_set_antenna_gain,
-       .set_wds_peer = ieee80211_set_wds_peer,
        .rfkill_poll = ieee80211_rfkill_poll,
        CFG80211_TESTMODE_CMD(ieee80211_testmode_cmd)
+       CFG80211_TESTMODE_DUMP(ieee80211_testmode_dump)
 --- a/net/mac80211/ieee80211_i.h
 +++ b/net/mac80211/ieee80211_i.h
-@@ -1435,6 +1435,7 @@ struct ieee80211_local {
+@@ -1441,6 +1441,7 @@ struct ieee80211_local {
        int dynamic_ps_forced_timeout;
  
        int user_power_level; /* in dBm, for all interfaces */
        if (local->hw.conf.power_level != power) {
                changed |= IEEE80211_CONF_CHANGE_POWER;
                local->hw.conf.power_level = power;
-@@ -665,6 +671,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_
+@@ -663,6 +669,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_
                                         IEEE80211_RADIOTAP_MCS_HAVE_BW;
        local->hw.radiotap_vht_details = IEEE80211_RADIOTAP_VHT_KNOWN_GI |
                                         IEEE80211_RADIOTAP_VHT_KNOWN_BANDWIDTH;
  };
  
  /* policy for the key attributes */
-@@ -3322,6 +3323,20 @@ static int nl80211_set_wiphy(struct sk_b
+@@ -3296,6 +3297,20 @@ static int nl80211_set_wiphy(struct sk_b
                if (result)
                        return result;
        }
index 5d943621551c8e866588372b02c2f793582912ce..ea6e6974ca026a68442fd0ea8aa6d5f4b3dfc4be 100644 (file)
@@ -203,10 +203,11 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
  }
 --- a/drivers/net/wireless/mediatek/mt76/eeprom.c
 +++ b/drivers/net/wireless/mediatek/mt76/eeprom.c
-@@ -90,15 +90,9 @@ out_put_node:
- void
- mt76_eeprom_override(struct mt76_dev *dev)
+@@ -91,16 +91,9 @@ void
+ mt76_eeprom_override(struct mt76_phy *phy)
  {
+       struct mt76_dev *dev = phy->dev;
+-
 -#ifdef CONFIG_OF
        struct device_node *np = dev->dev->of_node;
 -      const u8 *mac = NULL;
@@ -214,15 +215,15 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
 -      if (np)
 -              mac = of_get_mac_address(np);
 -      if (!IS_ERR_OR_NULL(mac))
--              ether_addr_copy(dev->macaddr, mac);
+-              ether_addr_copy(phy->macaddr, mac);
 -#endif
-+      of_get_mac_address(np, dev->macaddr);
++      of_get_mac_address(np, phy->macaddr);
  
-       if (!is_valid_ether_addr(dev->macaddr)) {
-               eth_random_addr(dev->macaddr);
+       if (!is_valid_ether_addr(phy->macaddr)) {
+               eth_random_addr(phy->macaddr);
 --- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
 +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
-@@ -990,11 +990,7 @@ static void rt2x00lib_rate(struct ieee80
+@@ -989,11 +989,7 @@ static void rt2x00lib_rate(struct ieee80
  
  void rt2x00lib_set_mac_address(struct rt2x00_dev *rt2x00dev, u8 *eeprom_mac_addr)
  {