소스 검색

mac80211: Update to 6.12.44

Updates backports to kernel version 6.12.44. This includes many fixes
for normal and security bugs.

The removed patches were applied upstream and backported to kernel
6.12.44.

This is based on the same backports code as used for the old tar based
on kernel 6.12.6.

removed upstream patches:
ath11k/001-wifi-ath11k-Fix-DMA-buffer-allocation-to-resolve-SWIOTLB-issues.patch [1]
ath11k/002-wifi-ath11k-use-dma-alloc-noncoherent-for-rx-tid-buffer-allocation.patch [2]
rtl/050-wifi-rtlwifi-rtl8821ae-phy-restore-removed-code-to-f.patch [3]
subsys/400-v6.16-wifi-mac80211-do-not-offer-a-mesh-path-if-forwarding.patch [4]

Part of the following patch was merged upstream:
subsys/350-wifi-mac80211-Add-link-iteration-macro-for-link-data.patch [5]

[1]: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=linux-6.12.y&id=b92c5179db4b19152c6492d1dfda457bff789272
[2]: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=linux-6.12.y&id=115360031be90aa6cf11d718caf19fea94824285
[3]: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=linux-6.12.y&id=411c7738669907b5e2288ee7a0396ec0980e58fc
[4]: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=linux-6.12.y&id=4c43d2c649269e91a81cbc6b2d6b7c552d3eeb45
[5]: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=linux-6.12.y&id=a4afc3d522ca03920fe14c2b95638237fb6edbd8

Link: https://github.com/openwrt/openwrt/pull/19920
Signed-off-by: Hauke Mehrtens <[email protected]>
Hauke Mehrtens 7 달 전
부모
커밋
b4b9288f2a
57개의 변경된 파일217개의 추가작업 그리고 657개의 파일을 삭제
  1. 2 2
      package/kernel/mac80211/Makefile
  2. 2 2
      package/kernel/mac80211/patches/ath/404-regd_no_assoc_hints.patch
  3. 1 1
      package/kernel/mac80211/patches/ath10k/921-ath10k_init_devices_synchronously.patch
  4. 2 2
      package/kernel/mac80211/patches/ath10k/930-ath10k_add_tpt_led_trigger.patch
  5. 2 2
      package/kernel/mac80211/patches/ath10k/975-ath10k-use-tpt-trigger-by-default.patch
  6. 1 1
      package/kernel/mac80211/patches/ath10k/984-ath10k-Try-to-get-mac-address-from-dts.patch
  7. 1 1
      package/kernel/mac80211/patches/ath10k/988-ath10k-always-use-mac80211-loss-detection.patch
  8. 0 91
      package/kernel/mac80211/patches/ath11k/001-wifi-ath11k-Fix-DMA-buffer-allocation-to-resolve-SWIOTLB-issues.patch
  9. 0 255
      package/kernel/mac80211/patches/ath11k/002-wifi-ath11k-use-dma-alloc-noncoherent-for-rx-tid-buffer-allocation.patch
  10. 2 2
      package/kernel/mac80211/patches/ath11k/903-ath11k-support-setting-FW-memory-mode-via-DT.patch
  11. 27 27
      package/kernel/mac80211/patches/ath12k/001-wifi-ath12k-add-11d-scan-offload-support-and-handle-country-code-for-WCN7850.patch
  12. 1 1
      package/kernel/mac80211/patches/ath9k/410-ath9k_allow_adhoc_and_ap.patch
  13. 2 2
      package/kernel/mac80211/patches/ath9k/450-ath9k-enabled-MFP-capability-unconditionally.patch
  14. 1 1
      package/kernel/mac80211/patches/ath9k/501-ath9k_ahb_init.patch
  15. 1 1
      package/kernel/mac80211/patches/ath9k/512-ath9k_channelbw_debugfs.patch
  16. 1 1
      package/kernel/mac80211/patches/ath9k/530-ath9k_extra_leds.patch
  17. 3 3
      package/kernel/mac80211/patches/ath9k/543-ath9k_entropy_from_adc.patch
  18. 2 2
      package/kernel/mac80211/patches/ath9k/553-ath9k_of_gpio_mask.patch
  19. 4 4
      package/kernel/mac80211/patches/brcm/870-04-rpi-6.12-brcmfmac-non-upstream-support-DS1-exit-firmware-re-download.patch
  20. 1 1
      package/kernel/mac80211/patches/build/150-ath_iommu_paging_domain_revert.patch
  21. 1 1
      package/kernel/mac80211/patches/build/210-wireless_netns_local_backport.patch
  22. 1 1
      package/kernel/mac80211/patches/build/220-brcmfmac_usb_driver_backport.patch
  23. 2 2
      package/kernel/mac80211/patches/build/230-fix-init_vqs-build-error-on-kernel-6.6.patch
  24. 1 1
      package/kernel/mac80211/patches/mwl/700-mwl8k-missing-pci-id-for-WNR854T.patch
  25. 2 2
      package/kernel/mac80211/patches/mwl/940-mwl8k_init_devices_synchronously.patch
  26. 8 8
      package/kernel/mac80211/patches/rtl/017-v6.13-wifi-rtw88-Constify-some-arrays-and-structs.patch
  27. 7 7
      package/kernel/mac80211/patches/rtl/019-v6.13-wifi-rtw88-Parse-the-RX-descriptor-with-a-single-fun.patch
  28. 22 22
      package/kernel/mac80211/patches/rtl/024-v6.13-wifi-rtw88-Add-some-definitions-for-RTL8821AU-RTL881.patch
  29. 3 3
      package/kernel/mac80211/patches/rtl/025-v6.13-wifi-rtw88-Dump-the-HW-features-only-for-some-chips.patch
  30. 2 2
      package/kernel/mac80211/patches/rtl/026-v6.13-wifi-rtw88-Allow-different-C2H-RA-report-sizes.patch
  31. 9 7
      package/kernel/mac80211/patches/rtl/029-v6.13-wifi-rtw88-Let-each-driver-control-the-power-on-off-.patch
  32. 6 6
      package/kernel/mac80211/patches/rtl/030-v6.13-wifi-rtw88-Enable-data-rate-fallback-for-older-chips.patch
  33. 1 1
      package/kernel/mac80211/patches/rtl/032-v6.13-wifi-rtw88-Support-TX-page-sizes-bigger-than-128.patch
  34. 8 8
      package/kernel/mac80211/patches/rtl/033-v6.13-wifi-rtw88-Move-pwr_track_tbl-to-struct-rtw_rfe_def.patch
  35. 1 1
      package/kernel/mac80211/patches/rtl/034-v6.13-wifi-rtw88-usb-Set-pkt_info.ls-for-the-reserved-page.patch
  36. 3 3
      package/kernel/mac80211/patches/rtl/048-wifi-rtw88-usb-Support-USB-3-with-RTL8812AU.patch
  37. 2 2
      package/kernel/mac80211/patches/rtl/049-wifi-rtw88-usb-Enable-RX-aggregation-for-8821au-8812.patch
  38. 0 32
      package/kernel/mac80211/patches/rtl/050-wifi-rtlwifi-rtl8821ae-phy-restore-removed-code-to-f.patch
  39. 1 1
      package/kernel/mac80211/patches/subsys/130-disable_auto_vif.patch
  40. 1 1
      package/kernel/mac80211/patches/subsys/230-avoid-crashing-missing-band.patch
  41. 1 1
      package/kernel/mac80211/patches/subsys/301-mac80211-sta-randomize-BA-session-dialog-token-alloc.patch
  42. 3 3
      package/kernel/mac80211/patches/subsys/305-mac80211-increase-quantum-for-airtime-scheduler.patch
  43. 4 4
      package/kernel/mac80211/patches/subsys/310-cfg80211-allow-grace-period-for-DFS-available-after-.patch
  44. 8 8
      package/kernel/mac80211/patches/subsys/320-mac80211-add-AQL-support-for-broadcast-packets.patch
  45. 20 20
      package/kernel/mac80211/patches/subsys/330-wifi-cfg80211-add-option-for-vif-allowed-radios.patch
  46. 4 4
      package/kernel/mac80211/patches/subsys/331-wifi-mac80211-use-vif-radio-mask-to-limit-ibss-scan-.patch
  47. 1 1
      package/kernel/mac80211/patches/subsys/332-wifi-mac80211-use-vif-radio-mask-to-limit-chanctx-an.patch
  48. 4 4
      package/kernel/mac80211/patches/subsys/334-wifi-cfg80211-pass-net_device-to-.set_monitor_channel.patch
  49. 9 9
      package/kernel/mac80211/patches/subsys/335-wifi-mac80211-add-flag-to-opt-out-of-virtual-monitor.patch
  50. 5 5
      package/kernel/mac80211/patches/subsys/336-wifi-cfg80211-add-monitor-SKIP_TX-flag.patch
  51. 2 2
      package/kernel/mac80211/patches/subsys/337-wifi-mac80211-add-support-for-the-monitor-SKIP_TX-fl.patch
  52. 5 5
      package/kernel/mac80211/patches/subsys/340-wifi-cfg80211-report-per-wiphy-radio-antenna-mask.patch
  53. 1 1
      package/kernel/mac80211/patches/subsys/341-wifi-mac80211-fix-vif-addr-when-switching-from-monit.patch
  54. 8 16
      package/kernel/mac80211/patches/subsys/350-wifi-mac80211-Add-link-iteration-macro-for-link-data.patch
  55. 2 2
      package/kernel/mac80211/patches/subsys/351-wifi-mac80211-extend-beacon-monitoring-for-MLO.patch
  56. 3 3
      package/kernel/mac80211/patches/subsys/352-wifi-mac80211-extend-connection-monitoring-for-MLO.patch
  57. 0 56
      package/kernel/mac80211/patches/subsys/400-v6.16-wifi-mac80211-do-not-offer-a-mesh-path-if-forwarding.patch

+ 2 - 2
package/kernel/mac80211/Makefile

@@ -10,13 +10,13 @@ include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=mac80211
 
-PKG_VERSION:=6.12.6
+PKG_VERSION:=6.12.44
 PKG_RELEASE:=2
 PKG_LICENSE:=GPL-2.0-only
 PKG_LICENSE_FILES:=COPYING
 
 PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources/
-PKG_HASH:=28ec39425a1b3270e1422d92a8131a6a3d8919cc13e8ee250c315e55d922ba68
+PKG_HASH:=85a9f92ddba3bf2970a089e7af576c1135217c387205f4481ea9131c0c45c509
 
 PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz
 PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(if $(BUILD_VARIANT),$(PKG_NAME)-$(BUILD_VARIANT)/)backports-$(PKG_VERSION)

+ 2 - 2
package/kernel/mac80211/patches/ath/404-regd_no_assoc_hints.patch

@@ -1,6 +1,6 @@
 --- a/net/wireless/reg.c
 +++ b/net/wireless/reg.c
-@@ -3364,6 +3364,8 @@ void regulatory_hint_country_ie(struct w
+@@ -3367,6 +3367,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;
-@@ -3615,6 +3617,7 @@ static bool is_wiphy_all_set_reg_flag(en
+@@ -3618,6 +3620,7 @@ static bool is_wiphy_all_set_reg_flag(en
  
  void regulatory_hint_disconnect(void)
  {

+ 1 - 1
package/kernel/mac80211/patches/ath10k/921-ath10k_init_devices_synchronously.patch

@@ -14,7 +14,7 @@ Signed-off-by: Sven Eckelmann <[email protected]>
 
 --- a/drivers/net/wireless/ath/ath10k/core.c
 +++ b/drivers/net/wireless/ath/ath10k/core.c
-@@ -3539,6 +3539,16 @@ int ath10k_core_register(struct ath10k *
+@@ -3577,6 +3577,16 @@ int ath10k_core_register(struct ath10k *
  
  	queue_work(ar->workqueue, &ar->register_work);
  

+ 2 - 2
package/kernel/mac80211/patches/ath10k/930-ath10k_add_tpt_led_trigger.patch

@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath10k/mac.c
 +++ b/drivers/net/wireless/ath/ath10k/mac.c
-@@ -9919,6 +9919,21 @@ static int ath10k_mac_init_rd(struct ath
+@@ -9924,6 +9924,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[] = {
-@@ -10281,6 +10296,12 @@ int ath10k_mac_register(struct ath10k *a
+@@ -10286,6 +10301,12 @@ int ath10k_mac_register(struct ath10k *a
  
  	ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER;
  

+ 2 - 2
package/kernel/mac80211/patches/ath10k/975-ath10k-use-tpt-trigger-by-default.patch

@@ -16,7 +16,7 @@ Signed-off-by: Mathias Kresin <[email protected]>
 
 --- a/drivers/net/wireless/ath/ath10k/core.h
 +++ b/drivers/net/wireless/ath/ath10k/core.h
-@@ -1315,6 +1315,10 @@ struct ath10k {
+@@ -1320,6 +1320,10 @@ struct ath10k {
  	s32 tx_power_2g_limit;
  	s32 tx_power_5g_limit;
  
@@ -40,7 +40,7 @@ Signed-off-by: Mathias Kresin <[email protected]>
  	if (ret)
 --- a/drivers/net/wireless/ath/ath10k/mac.c
 +++ b/drivers/net/wireless/ath/ath10k/mac.c
-@@ -10297,7 +10297,7 @@ int ath10k_mac_register(struct ath10k *a
+@@ -10302,7 +10302,7 @@ int ath10k_mac_register(struct ath10k *a
  	ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER;
  
  #ifdef CPTCFG_MAC80211_LEDS

+ 1 - 1
package/kernel/mac80211/patches/ath10k/984-ath10k-Try-to-get-mac-address-from-dts.patch

@@ -26,7 +26,7 @@ Signed-off-by: Ansuel Smith <[email protected]>
  #include <linux/property.h>
  #include <linux/dmi.h>
  #include <linux/ctype.h>
-@@ -3411,6 +3412,8 @@ static int ath10k_core_probe_fw(struct a
+@@ -3449,6 +3450,8 @@ static int ath10k_core_probe_fw(struct a
  
  	device_get_mac_address(ar->dev, ar->mac_addr);
  

+ 1 - 1
package/kernel/mac80211/patches/ath10k/988-ath10k-always-use-mac80211-loss-detection.patch

@@ -18,7 +18,7 @@ Signed-off-by: David Bauer <[email protected]>
 
 --- a/drivers/net/wireless/ath/ath10k/mac.c
 +++ b/drivers/net/wireless/ath/ath10k/mac.c
-@@ -10089,7 +10089,6 @@ int ath10k_mac_register(struct ath10k *a
+@@ -10094,7 +10094,6 @@ int ath10k_mac_register(struct ath10k *a
  	ieee80211_hw_set(ar->hw, CHANCTX_STA_CSA);
  	ieee80211_hw_set(ar->hw, QUEUE_CONTROL);
  	ieee80211_hw_set(ar->hw, SUPPORTS_TX_FRAG);

+ 0 - 91
package/kernel/mac80211/patches/ath11k/001-wifi-ath11k-Fix-DMA-buffer-allocation-to-resolve-SWIOTLB-issues.patch

@@ -1,91 +0,0 @@
-wifi: ath11k: Fix DMA buffer allocation to resolve SWIOTLB issues
-Currently, the driver allocates cacheable DMA buffers for rings like
-HAL_REO_DST and HAL_WBM2SW_RELEASE. The buffers for HAL_WBM2SW_RELEASE
-are large (1024 KiB), exceeding the SWIOTLB slot size of 256 KiB. This
-leads to "swiotlb buffer is full" error messages on systems without an
-IOMMU that use SWIOTLB, causing driver initialization failures. The driver
-calls dma_map_single() with these large buffers obtained from kzalloc(),
-resulting in ring initialization errors on systems without an IOMMU that
-use SWIOTLB.
-
-To address these issues, replace the flawed buffer allocation mechanism
-with the appropriate DMA API. Specifically, use dma_alloc_noncoherent()
-for cacheable DMA buffers, ensuring proper freeing of buffers with
-dma_free_noncoherent().
-
-Error log:
-[   10.194343] ath11k_pci 0000:04:00.0: swiotlb buffer is full (sz:1048583 bytes), total 32768 (slots), used 2529 (slots)
-[   10.194406] ath11k_pci 0000:04:00.0: failed to set up tcl_comp ring (0) :-12
-[   10.194781] ath11k_pci 0000:04:00.0: failed to init DP: -12
-
-Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
-Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3
-
-Reported-by: Tim Harvey <[email protected]>
-Closes: https://lore.kernel.org/all/[email protected]/
-Signed-off-by: P Praneesh <[email protected]>
-Tested-by: Tim Harvey <[email protected]>
-Link: https://patch.msgid.link/[email protected]
-Signed-off-by: Jeff Johnson <[email protected]>
---- a/drivers/net/wireless/ath/ath11k/dp.c
-+++ b/drivers/net/wireless/ath/ath11k/dp.c
-@@ -1,7 +1,7 @@
- // SPDX-License-Identifier: BSD-3-Clause-Clear
- /*
-  * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
-- * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
-+ * Copyright (c) 2021-2025 Qualcomm Innovation Center, Inc. All rights reserved.
-  */
- 
- #include <crypto/hash.h>
-@@ -104,14 +104,12 @@ void ath11k_dp_srng_cleanup(struct ath11
- 	if (!ring->vaddr_unaligned)
- 		return;
- 
--	if (ring->cached) {
--		dma_unmap_single(ab->dev, ring->paddr_unaligned, ring->size,
--				 DMA_FROM_DEVICE);
--		kfree(ring->vaddr_unaligned);
--	} else {
-+	if (ring->cached)
-+		dma_free_noncoherent(ab->dev, ring->size, ring->vaddr_unaligned,
-+				     ring->paddr_unaligned, DMA_FROM_DEVICE);
-+	else
- 		dma_free_coherent(ab->dev, ring->size, ring->vaddr_unaligned,
- 				  ring->paddr_unaligned);
--	}
- 
- 	ring->vaddr_unaligned = NULL;
- }
-@@ -249,25 +247,14 @@ int ath11k_dp_srng_setup(struct ath11k_b
- 		default:
- 			cached = false;
- 		}
--
--		if (cached) {
--			ring->vaddr_unaligned = kzalloc(ring->size, GFP_KERNEL);
--			if (!ring->vaddr_unaligned)
--				return -ENOMEM;
--
--			ring->paddr_unaligned = dma_map_single(ab->dev,
--							       ring->vaddr_unaligned,
--							       ring->size,
--							       DMA_FROM_DEVICE);
--			if (dma_mapping_error(ab->dev, ring->paddr_unaligned)) {
--				kfree(ring->vaddr_unaligned);
--				ring->vaddr_unaligned = NULL;
--				return -ENOMEM;
--			}
--		}
- 	}
- 
--	if (!cached)
-+	if (cached)
-+		ring->vaddr_unaligned = dma_alloc_noncoherent(ab->dev, ring->size,
-+							      &ring->paddr_unaligned,
-+							      DMA_FROM_DEVICE,
-+							      GFP_KERNEL);
-+	else
- 		ring->vaddr_unaligned = dma_alloc_coherent(ab->dev, ring->size,
- 							   &ring->paddr_unaligned,
- 							   GFP_KERNEL);

+ 0 - 255
package/kernel/mac80211/patches/ath11k/002-wifi-ath11k-use-dma-alloc-noncoherent-for-rx-tid-buffer-allocation.patch

@@ -1,255 +0,0 @@
-wifi: ath11k: Use dma_alloc_noncoherent for rx_tid buffer allocation
-
-Currently, the driver allocates cacheable DMA buffers for the rx_tid
-structure using kzalloc() and dma_map_single(). These buffers are
-long-lived and can persist for the lifetime of the peer, which is not
-advisable. Instead of using kzalloc() and dma_map_single() for allocating
-cacheable DMA buffers, utilize the dma_alloc_noncoherent() helper for the
-allocation of long-lived cacheable DMA buffers, such as the peer's rx_tid.
-Since dma_alloc_noncoherent() returns unaligned physical and virtual
-addresses, align them internally before use within the driver. This
-ensures proper allocation of non-coherent memory through the kernel
-helper.
-
-Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
-Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3
-
-Signed-off-by: P Praneesh <[email protected]>
---- a/drivers/net/wireless/ath/ath11k/dp.h
-+++ b/drivers/net/wireless/ath/ath11k/dp.h
-@@ -1,7 +1,7 @@
- /* SPDX-License-Identifier: BSD-3-Clause-Clear */
- /*
-  * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
-- * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
-+ * Copyright (c) 2021-2023, 2025 Qualcomm Innovation Center, Inc. All rights reserved.
-  */
- 
- #ifndef ATH11K_DP_H
-@@ -20,7 +20,6 @@ struct ath11k_ext_irq_grp;
- 
- struct dp_rx_tid {
- 	u8 tid;
--	u32 *vaddr;
- 	dma_addr_t paddr;
- 	u32 size;
- 	u32 ba_win_sz;
-@@ -37,6 +36,9 @@ struct dp_rx_tid {
- 	/* Timer info related to fragments */
- 	struct timer_list frag_timer;
- 	struct ath11k_base *ab;
-+	u32 *vaddr_unaligned;
-+	dma_addr_t paddr_unaligned;
-+	u32 unaligned_size;
- };
- 
- #define DP_REO_DESC_FREE_THRESHOLD  64
---- a/drivers/net/wireless/ath/ath11k/dp_rx.c
-+++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
-@@ -1,7 +1,7 @@
- // SPDX-License-Identifier: BSD-3-Clause-Clear
- /*
-  * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
-- * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
-+ * Copyright (c) 2021-2025 Qualcomm Innovation Center, Inc. All rights reserved.
-  */
- 
- #include <linux/ieee80211.h>
-@@ -675,11 +675,11 @@ void ath11k_dp_reo_cmd_list_cleanup(stru
- 	list_for_each_entry_safe(cmd, tmp, &dp->reo_cmd_list, list) {
- 		list_del(&cmd->list);
- 		rx_tid = &cmd->data;
--		if (rx_tid->vaddr) {
--			dma_unmap_single(ab->dev, rx_tid->paddr,
--					 rx_tid->size, DMA_BIDIRECTIONAL);
--			kfree(rx_tid->vaddr);
--			rx_tid->vaddr = NULL;
-+		if (rx_tid->vaddr_unaligned) {
-+			dma_free_noncoherent(ab->dev, rx_tid->unaligned_size,
-+					     rx_tid->vaddr_unaligned,
-+					     rx_tid->paddr_unaligned, DMA_BIDIRECTIONAL);
-+			rx_tid->vaddr_unaligned = NULL;
- 		}
- 		kfree(cmd);
- 	}
-@@ -689,11 +689,11 @@ void ath11k_dp_reo_cmd_list_cleanup(stru
- 		list_del(&cmd_cache->list);
- 		dp->reo_cmd_cache_flush_count--;
- 		rx_tid = &cmd_cache->data;
--		if (rx_tid->vaddr) {
--			dma_unmap_single(ab->dev, rx_tid->paddr,
--					 rx_tid->size, DMA_BIDIRECTIONAL);
--			kfree(rx_tid->vaddr);
--			rx_tid->vaddr = NULL;
-+		if (rx_tid->vaddr_unaligned) {
-+			dma_free_noncoherent(ab->dev, rx_tid->unaligned_size,
-+					     rx_tid->vaddr_unaligned,
-+					     rx_tid->paddr_unaligned, DMA_BIDIRECTIONAL);
-+			rx_tid->vaddr_unaligned = NULL;
- 		}
- 		kfree(cmd_cache);
- 	}
-@@ -708,11 +708,11 @@ static void ath11k_dp_reo_cmd_free(struc
- 	if (status != HAL_REO_CMD_SUCCESS)
- 		ath11k_warn(dp->ab, "failed to flush rx tid hw desc, tid %d status %d\n",
- 			    rx_tid->tid, status);
--	if (rx_tid->vaddr) {
--		dma_unmap_single(dp->ab->dev, rx_tid->paddr, rx_tid->size,
--				 DMA_BIDIRECTIONAL);
--		kfree(rx_tid->vaddr);
--		rx_tid->vaddr = NULL;
-+	if (rx_tid->vaddr_unaligned) {
-+		dma_free_noncoherent(dp->ab->dev, rx_tid->unaligned_size,
-+				     rx_tid->vaddr_unaligned,
-+				     rx_tid->paddr_unaligned, DMA_BIDIRECTIONAL);
-+		rx_tid->vaddr_unaligned = NULL;
- 	}
- }
- 
-@@ -749,10 +749,10 @@ static void ath11k_dp_reo_cache_flush(st
- 	if (ret) {
- 		ath11k_err(ab, "failed to send HAL_REO_CMD_FLUSH_CACHE cmd, tid %d (%d)\n",
- 			   rx_tid->tid, ret);
--		dma_unmap_single(ab->dev, rx_tid->paddr, rx_tid->size,
--				 DMA_BIDIRECTIONAL);
--		kfree(rx_tid->vaddr);
--		rx_tid->vaddr = NULL;
-+		dma_free_noncoherent(ab->dev, rx_tid->unaligned_size,
-+				     rx_tid->vaddr_unaligned,
-+				     rx_tid->paddr_unaligned, DMA_BIDIRECTIONAL);
-+		rx_tid->vaddr_unaligned = NULL;
- 	}
- }
- 
-@@ -802,10 +802,10 @@ static void ath11k_dp_rx_tid_del_func(st
- 
- 	return;
- free_desc:
--	dma_unmap_single(ab->dev, rx_tid->paddr, rx_tid->size,
--			 DMA_BIDIRECTIONAL);
--	kfree(rx_tid->vaddr);
--	rx_tid->vaddr = NULL;
-+	dma_free_noncoherent(ab->dev, rx_tid->unaligned_size,
-+			     rx_tid->vaddr_unaligned,
-+			     rx_tid->paddr_unaligned, DMA_BIDIRECTIONAL);
-+	rx_tid->vaddr_unaligned = NULL;
- }
- 
- void ath11k_peer_rx_tid_delete(struct ath11k *ar,
-@@ -831,14 +831,16 @@ void ath11k_peer_rx_tid_delete(struct at
- 		if (ret != -ESHUTDOWN)
- 			ath11k_err(ar->ab, "failed to send HAL_REO_CMD_UPDATE_RX_QUEUE cmd, tid %d (%d)\n",
- 				   tid, ret);
--		dma_unmap_single(ar->ab->dev, rx_tid->paddr, rx_tid->size,
--				 DMA_BIDIRECTIONAL);
--		kfree(rx_tid->vaddr);
--		rx_tid->vaddr = NULL;
-+		dma_free_noncoherent(ar->ab->dev, rx_tid->unaligned_size,
-+				     rx_tid->vaddr_unaligned,
-+				     rx_tid->paddr_unaligned, DMA_BIDIRECTIONAL);
-+		rx_tid->vaddr_unaligned = NULL;
- 	}
- 
- 	rx_tid->paddr = 0;
-+	rx_tid->paddr_unaligned = 0;
- 	rx_tid->size = 0;
-+	rx_tid->unaligned_size = 0;
- }
- 
- static int ath11k_dp_rx_link_desc_return(struct ath11k_base *ab,
-@@ -982,10 +984,9 @@ static void ath11k_dp_rx_tid_mem_free(st
- 	if (!rx_tid->active)
- 		goto unlock_exit;
- 
--	dma_unmap_single(ab->dev, rx_tid->paddr, rx_tid->size,
--			 DMA_BIDIRECTIONAL);
--	kfree(rx_tid->vaddr);
--	rx_tid->vaddr = NULL;
-+	dma_free_noncoherent(ab->dev, rx_tid->unaligned_size, rx_tid->vaddr_unaligned,
-+			     rx_tid->paddr_unaligned, DMA_BIDIRECTIONAL);
-+	rx_tid->vaddr_unaligned = NULL;
- 
- 	rx_tid->active = false;
- 
-@@ -1000,9 +1001,8 @@ int ath11k_peer_rx_tid_setup(struct ath1
- 	struct ath11k_base *ab = ar->ab;
- 	struct ath11k_peer *peer;
- 	struct dp_rx_tid *rx_tid;
--	u32 hw_desc_sz;
--	u32 *addr_aligned;
--	void *vaddr;
-+	u32 hw_desc_sz, *vaddr;
-+	void *vaddr_unaligned;
- 	dma_addr_t paddr;
- 	int ret;
- 
-@@ -1050,37 +1050,34 @@ int ath11k_peer_rx_tid_setup(struct ath1
- 	else
- 		hw_desc_sz = ath11k_hal_reo_qdesc_size(DP_BA_WIN_SZ_MAX, tid);
- 
--	vaddr = kzalloc(hw_desc_sz + HAL_LINK_DESC_ALIGN - 1, GFP_ATOMIC);
--	if (!vaddr) {
-+	rx_tid->unaligned_size = hw_desc_sz + HAL_LINK_DESC_ALIGN - 1;
-+	vaddr_unaligned = dma_alloc_noncoherent(ab->dev, rx_tid->unaligned_size, &paddr,
-+						DMA_BIDIRECTIONAL, GFP_ATOMIC);
-+	if (!vaddr_unaligned) {
- 		spin_unlock_bh(&ab->base_lock);
- 		return -ENOMEM;
- 	}
- 
--	addr_aligned = PTR_ALIGN(vaddr, HAL_LINK_DESC_ALIGN);
--
--	ath11k_hal_reo_qdesc_setup(addr_aligned, tid, ba_win_sz,
--				   ssn, pn_type);
--
--	paddr = dma_map_single(ab->dev, addr_aligned, hw_desc_sz,
--			       DMA_BIDIRECTIONAL);
--
--	ret = dma_mapping_error(ab->dev, paddr);
--	if (ret) {
--		spin_unlock_bh(&ab->base_lock);
--		ath11k_warn(ab, "failed to setup dma map for peer %pM rx tid %d: %d\n",
--			    peer_mac, tid, ret);
--		goto err_mem_free;
--	}
--
--	rx_tid->vaddr = vaddr;
--	rx_tid->paddr = paddr;
-+	rx_tid->vaddr_unaligned = vaddr_unaligned;
-+	vaddr = PTR_ALIGN(vaddr_unaligned, HAL_LINK_DESC_ALIGN);
-+	rx_tid->paddr_unaligned = paddr;
-+	rx_tid->paddr = rx_tid->paddr_unaligned + ((unsigned long)vaddr -
-+			(unsigned long)rx_tid->vaddr_unaligned);
-+	ath11k_hal_reo_qdesc_setup(vaddr, tid, ba_win_sz, ssn, pn_type);
- 	rx_tid->size = hw_desc_sz;
- 	rx_tid->active = true;
- 
-+	/* After dma_alloc_noncoherent, vaddr is being modified for reo qdesc setup.
-+	 * Since these changes are not reflected in the device, driver now needs to
-+	 * explicitly call dma_sync_single_for_device.
-+	 */
-+	dma_sync_single_for_device(ab->dev, rx_tid->paddr,
-+				   rx_tid->size,
-+				   DMA_TO_DEVICE);
- 	spin_unlock_bh(&ab->base_lock);
- 
--	ret = ath11k_wmi_peer_rx_reorder_queue_setup(ar, vdev_id, peer_mac,
--						     paddr, tid, 1, ba_win_sz);
-+	ret = ath11k_wmi_peer_rx_reorder_queue_setup(ar, vdev_id, peer_mac, rx_tid->paddr,
-+						     tid, 1, ba_win_sz);
- 	if (ret) {
- 		ath11k_warn(ar->ab, "failed to setup rx reorder queue for peer %pM tid %d: %d\n",
- 			    peer_mac, tid, ret);
-@@ -1088,12 +1085,6 @@ int ath11k_peer_rx_tid_setup(struct ath1
- 	}
- 
- 	return ret;
--
--err_mem_free:
--	kfree(rx_tid->vaddr);
--	rx_tid->vaddr = NULL;
--
--	return ret;
- }
- 
- int ath11k_dp_rx_ampdu_start(struct ath11k *ar,

+ 2 - 2
package/kernel/mac80211/patches/ath11k/903-ath11k-support-setting-FW-memory-mode-via-DT.patch

@@ -31,7 +31,7 @@ Signed-off-by: Robert Marko <[email protected]>
  	{
  		.hw_rev = ATH11K_HW_IPQ8074,
  		.name = "ipq8074 hw2.0",
-@@ -2147,7 +2147,8 @@ static void ath11k_core_reset(struct wor
+@@ -2200,7 +2200,8 @@ static void ath11k_core_reset(struct wor
  static int ath11k_init_hw_params(struct ath11k_base *ab)
  {
  	const struct ath11k_hw_params *hw_params = NULL;
@@ -41,7 +41,7 @@ Signed-off-by: Robert Marko <[email protected]>
  
  	for (i = 0; i < ARRAY_SIZE(ath11k_hw_params); i++) {
  		hw_params = &ath11k_hw_params[i];
-@@ -2163,7 +2164,31 @@ static int ath11k_init_hw_params(struct
+@@ -2216,7 +2217,31 @@ static int ath11k_init_hw_params(struct
  
  	ab->hw_params = *hw_params;
  

+ 27 - 27
package/kernel/mac80211/patches/ath12k/001-wifi-ath12k-add-11d-scan-offload-support-and-handle-country-code-for-WCN7850.patch

@@ -121,7 +121,7 @@ Acked-by: Jeff Johnson <[email protected]>
  };
  
  static __le32 ath12k_wmi_tlv_hdr(u32 cmd, u32 len)
-@@ -2364,7 +2366,10 @@ int ath12k_wmi_send_scan_start_cmd(struc
+@@ -2374,7 +2376,10 @@ int ath12k_wmi_send_scan_start_cmd(struc
  	cmd->scan_id = cpu_to_le32(arg->scan_id);
  	cmd->scan_req_id = cpu_to_le32(arg->scan_req_id);
  	cmd->vdev_id = cpu_to_le32(arg->vdev_id);
@@ -133,7 +133,7 @@ Acked-by: Jeff Johnson <[email protected]>
  	cmd->notify_scan_events = cpu_to_le32(arg->notify_scan_events);
  
  	ath12k_wmi_copy_scan_event_cntrl_flags(cmd, arg);
-@@ -3084,6 +3089,110 @@ out:
+@@ -3094,6 +3099,110 @@ out:
  	return ret;
  }
  
@@ -244,7 +244,7 @@ Acked-by: Jeff Johnson <[email protected]>
  int
  ath12k_wmi_send_twt_enable_cmd(struct ath12k *ar, u32 pdev_id)
  {
-@@ -5669,6 +5778,50 @@ static void ath12k_wmi_op_ep_tx_credits(
+@@ -5714,6 +5823,50 @@ static void ath12k_wmi_op_ep_tx_credits(
  	wake_up(&ab->wmi_ab.tx_credits_wq);
  }
  
@@ -295,7 +295,7 @@ Acked-by: Jeff Johnson <[email protected]>
  static void ath12k_wmi_htc_tx_complete(struct ath12k_base *ab,
  				       struct sk_buff *skb)
  {
-@@ -7270,6 +7423,9 @@ static void ath12k_wmi_op_rx(struct ath1
+@@ -7317,6 +7470,9 @@ static void ath12k_wmi_op_rx(struct ath1
  	case WMI_GTK_OFFLOAD_STATUS_EVENTID:
  		ath12k_wmi_gtk_offload_status_event(ab, skb);
  		break;
@@ -336,9 +336,9 @@ Acked-by: Jeff Johnson <[email protected]>
  struct wmi_delba_send_cmd {
  	__le32 tlv_header;
  	__le32 vdev_id;
-@@ -3945,6 +3967,16 @@ struct ath12k_wmi_eht_rate_set_params {
+@@ -3944,6 +3966,16 @@ struct ath12k_wmi_eht_rate_set_params {
+ #define REG_ALPHA2_LEN 2
  #define MAX_6G_REG_RULES 5
- #define REG_US_5G_NUM_REG_RULES 4
  
 +struct wmi_set_current_country_arg {
 +	u8 alpha2[REG_ALPHA2_LEN];
@@ -353,7 +353,7 @@ Acked-by: Jeff Johnson <[email protected]>
  enum wmi_start_event_param {
  	WMI_VDEV_START_RESP_EVENT = 0,
  	WMI_VDEV_RESTART_RESP_EVENT,
-@@ -5547,11 +5579,17 @@ int ath12k_wmi_send_bcn_offload_control_
+@@ -5546,11 +5578,17 @@ int ath12k_wmi_send_bcn_offload_control_
  					    u32 vdev_id, u32 bcn_ctrl_op);
  int ath12k_wmi_send_init_country_cmd(struct ath12k *ar,
  				     struct ath12k_wmi_init_country_arg *arg);
@@ -373,7 +373,7 @@ Acked-by: Jeff Johnson <[email protected]>
  				 struct ath12k_wmi_rx_reorder_queue_remove_arg *arg);
 --- a/drivers/net/wireless/ath/ath12k/core.c
 +++ b/drivers/net/wireless/ath/ath12k/core.c
-@@ -1014,6 +1014,7 @@ void ath12k_core_halt(struct ath12k *ar)
+@@ -1017,6 +1017,7 @@ void ath12k_core_halt(struct ath12k *ar)
  	cancel_delayed_work_sync(&ar->scan.timeout);
  	cancel_work_sync(&ar->regd_update_work);
  	cancel_work_sync(&ab->rfkill_work);
@@ -381,7 +381,7 @@ Acked-by: Jeff Johnson <[email protected]>
  
  	rcu_assign_pointer(ab->pdevs_active[ar->pdev_idx], NULL);
  	synchronize_rcu();
-@@ -1021,6 +1022,34 @@ void ath12k_core_halt(struct ath12k *ar)
+@@ -1029,6 +1030,34 @@ void ath12k_core_halt(struct ath12k *ar)
  	idr_init(&ar->txmgmt_idr);
  }
  
@@ -416,7 +416,7 @@ Acked-by: Jeff Johnson <[email protected]>
  static void ath12k_core_pre_reconfigure_recovery(struct ath12k_base *ab)
  {
  	struct ath12k *ar;
-@@ -1045,8 +1074,10 @@ static void ath12k_core_pre_reconfigure_
+@@ -1053,8 +1082,10 @@ static void ath12k_core_pre_reconfigure_
  			ar = &ah->radio[j];
  
  			ath12k_mac_drain_tx(ar);
@@ -428,7 +428,7 @@ Acked-by: Jeff Johnson <[email protected]>
  			complete(&ar->scan.on_channel);
  			complete(&ar->peer_assoc_done);
  			complete(&ar->peer_delete_done);
-@@ -1312,6 +1343,7 @@ struct ath12k_base *ath12k_core_alloc(st
+@@ -1320,6 +1351,7 @@ struct ath12k_base *ath12k_core_alloc(st
  	INIT_WORK(&ab->restart_work, ath12k_core_restart);
  	INIT_WORK(&ab->reset_work, ath12k_core_reset);
  	INIT_WORK(&ab->rfkill_work, ath12k_rfkill_work);
@@ -438,7 +438,7 @@ Acked-by: Jeff Johnson <[email protected]>
  	init_completion(&ab->htc_suspend);
 --- a/drivers/net/wireless/ath/ath12k/core.h
 +++ b/drivers/net/wireless/ath/ath12k/core.h
-@@ -199,6 +199,12 @@ enum ath12k_scan_state {
+@@ -200,6 +200,12 @@ enum ath12k_scan_state {
  	ATH12K_SCAN_ABORTING,
  };
  
@@ -451,7 +451,7 @@ Acked-by: Jeff Johnson <[email protected]>
  enum ath12k_dev_flags {
  	ATH12K_CAC_RUNNING,
  	ATH12K_FLAG_CRASH_FLUSH,
-@@ -319,6 +325,8 @@ struct ath12k_vif_iter {
+@@ -320,6 +326,8 @@ struct ath12k_vif_iter {
  #define ATH12K_RX_RATE_TABLE_11AX_NUM	576
  #define ATH12K_RX_RATE_TABLE_NUM 320
  
@@ -460,7 +460,7 @@ Acked-by: Jeff Johnson <[email protected]>
  struct ath12k_rx_peer_rate_stats {
  	u64 ht_mcs_count[HAL_RX_MAX_MCS_HT + 1];
  	u64 vht_mcs_count[HAL_RX_MAX_MCS_VHT + 1];
-@@ -654,6 +662,13 @@ struct ath12k {
+@@ -655,6 +663,13 @@ struct ath12k {
  	u32 freq_low;
  	u32 freq_high;
  
@@ -474,7 +474,7 @@ Acked-by: Jeff Johnson <[email protected]>
  	bool nlo_enabled;
  };
  
-@@ -886,6 +901,8 @@ struct ath12k_base {
+@@ -887,6 +902,8 @@ struct ath12k_base {
  	/* continuous recovery fail count */
  	atomic_t fail_cont_count;
  	unsigned long reset_fail_timeout;
@@ -532,7 +532,7 @@ Acked-by: Jeff Johnson <[email protected]>
  	return ret;
  }
  
-@@ -5994,7 +6009,7 @@ static int ath12k_mac_start(struct ath12
+@@ -5998,7 +6013,7 @@ static int ath12k_mac_start(struct ath12
  
  	/* TODO: Do we need to enable ANI? */
  
@@ -541,7 +541,7 @@ Acked-by: Jeff Johnson <[email protected]>
  
  	ar->num_started_vdevs = 0;
  	ar->num_created_vdevs = 0;
-@@ -6174,6 +6189,9 @@ static void ath12k_mac_stop(struct ath12
+@@ -6178,6 +6193,9 @@ static void ath12k_mac_stop(struct ath12
  	cancel_delayed_work_sync(&ar->scan.timeout);
  	cancel_work_sync(&ar->regd_update_work);
  	cancel_work_sync(&ar->ab->rfkill_work);
@@ -551,7 +551,7 @@ Acked-by: Jeff Johnson <[email protected]>
  
  	spin_lock_bh(&ar->data_lock);
  	list_for_each_entry_safe(ppdu_stats, tmp, &ar->ppdu_stats_info, list) {
-@@ -6420,6 +6438,117 @@ static void ath12k_mac_op_update_vif_off
+@@ -6424,6 +6442,117 @@ static void ath12k_mac_op_update_vif_off
  	ath12k_mac_update_vif_offload(arvif);
  }
  
@@ -669,7 +669,7 @@ Acked-by: Jeff Johnson <[email protected]>
  static int ath12k_mac_vdev_create(struct ath12k *ar, struct ieee80211_vif *vif)
  {
  	struct ath12k_hw *ah = ar->ah;
-@@ -6534,6 +6663,7 @@ static int ath12k_mac_vdev_create(struct
+@@ -6538,6 +6667,7 @@ static int ath12k_mac_vdev_create(struct
  				    arvif->vdev_id, ret);
  			goto err_peer_del;
  		}
@@ -677,7 +677,7 @@ Acked-by: Jeff Johnson <[email protected]>
  		break;
  	case WMI_VDEV_TYPE_STA:
  		param_id = WMI_STA_PS_PARAM_RX_WAKE_POLICY;
-@@ -6572,6 +6702,13 @@ static int ath12k_mac_vdev_create(struct
+@@ -6576,6 +6706,13 @@ static int ath12k_mac_vdev_create(struct
  				    arvif->vdev_id, ret);
  			goto err_peer_del;
  		}
@@ -691,7 +691,7 @@ Acked-by: Jeff Johnson <[email protected]>
  		break;
  	default:
  		break;
-@@ -6912,6 +7049,11 @@ static void ath12k_mac_op_remove_interfa
+@@ -6916,6 +7053,11 @@ static void ath12k_mac_op_remove_interfa
  	ath12k_dbg(ab, ATH12K_DBG_MAC, "mac remove interface (vdev %d)\n",
  		   arvif->vdev_id);
  
@@ -703,7 +703,7 @@ Acked-by: Jeff Johnson <[email protected]>
  	if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
  		ret = ath12k_peer_delete(ar, arvif->vdev_id, vif->addr);
  		if (ret)
-@@ -7752,6 +7894,14 @@ ath12k_mac_op_unassign_vif_chanctx(struc
+@@ -7756,6 +7898,14 @@ ath12k_mac_op_unassign_vif_chanctx(struc
  	    ar->num_started_vdevs == 1 && ar->monitor_vdev_created)
  		ath12k_mac_monitor_stop(ar);
  
@@ -718,7 +718,7 @@ Acked-by: Jeff Johnson <[email protected]>
  	mutex_unlock(&ar->conf_mutex);
  }
  
-@@ -8290,6 +8440,14 @@ ath12k_mac_op_reconfig_complete(struct i
+@@ -8294,6 +8444,14 @@ ath12k_mac_op_reconfig_complete(struct i
  		ath12k_warn(ar->ab, "pdev %d successfully recovered\n",
  			    ar->pdev->pdev_id);
  
@@ -733,7 +733,7 @@ Acked-by: Jeff Johnson <[email protected]>
  		if (ab->is_reset) {
  			recovery_count = atomic_inc_return(&ab->recovery_count);
  
-@@ -9339,6 +9497,9 @@ static void ath12k_mac_setup(struct ath1
+@@ -9344,6 +9502,9 @@ static void ath12k_mac_setup(struct ath1
  
  	INIT_WORK(&ar->wmi_mgmt_tx_work, ath12k_mgmt_over_wmi_tx_work);
  	skb_queue_head_init(&ar->wmi_mgmt_tx_queue);
@@ -888,7 +888,7 @@ Acked-by: Jeff Johnson <[email protected]>
  #endif
 --- a/drivers/net/wireless/ath/ath12k/hw.c
 +++ b/drivers/net/wireless/ath/ath12k/hw.c
-@@ -928,6 +928,7 @@ static const struct ath12k_hw_params ath
+@@ -961,6 +961,7 @@ static const struct ath12k_hw_params ath
  		.iova_mask = 0,
  
  		.supports_aspm = false,
@@ -896,7 +896,7 @@ Acked-by: Jeff Johnson <[email protected]>
  	},
  	{
  		.name = "wcn7850 hw2.0",
-@@ -1008,6 +1009,7 @@ static const struct ath12k_hw_params ath
+@@ -1041,6 +1042,7 @@ static const struct ath12k_hw_params ath
  		.iova_mask = ATH12K_PCIE_MAX_PAYLOAD_SIZE - 1,
  
  		.supports_aspm = true,
@@ -904,7 +904,7 @@ Acked-by: Jeff Johnson <[email protected]>
  	},
  	{
  		.name = "qcn9274 hw2.0",
-@@ -1084,6 +1086,7 @@ static const struct ath12k_hw_params ath
+@@ -1117,6 +1119,7 @@ static const struct ath12k_hw_params ath
  		.iova_mask = 0,
  
  		.supports_aspm = false,

+ 1 - 1
package/kernel/mac80211/patches/ath9k/410-ath9k_allow_adhoc_and_ap.patch

@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/init.c
 +++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -882,6 +882,7 @@ static const struct ieee80211_iface_limi
+@@ -884,6 +884,7 @@ static const struct ieee80211_iface_limi
  				 BIT(NL80211_IFTYPE_AP) },
  	{ .max = 1,	.types = BIT(NL80211_IFTYPE_P2P_CLIENT) |
  				 BIT(NL80211_IFTYPE_P2P_GO) },

+ 2 - 2
package/kernel/mac80211/patches/ath9k/450-ath9k-enabled-MFP-capability-unconditionally.patch

@@ -14,7 +14,7 @@ Signed-off-by: David Bauer <[email protected]>
 
 --- a/drivers/net/wireless/ath/ath9k/init.c
 +++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -963,6 +963,7 @@ static void ath9k_set_hw_capab(struct at
+@@ -965,6 +965,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 <[email protected]>
  
  	if (ath9k_ps_enable)
  		ieee80211_hw_set(hw, SUPPORTS_PS);
-@@ -975,9 +976,6 @@ static void ath9k_set_hw_capab(struct at
+@@ -977,9 +978,6 @@ static void ath9k_set_hw_capab(struct at
  				IEEE80211_RADIOTAP_MCS_HAVE_STBC;
  	}
  

+ 1 - 1
package/kernel/mac80211/patches/ath9k/501-ath9k_ahb_init.patch

@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/init.c
 +++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -1178,25 +1178,25 @@ static int __init ath9k_init(void)
+@@ -1180,25 +1180,25 @@ static int __init ath9k_init(void)
  {
  	int error;
  

+ 1 - 1
package/kernel/mac80211/patches/ath9k/512-ath9k_channelbw_debugfs.patch

@@ -181,7 +181,7 @@
  	hw->max_listen_interval = 1;
 --- a/drivers/net/wireless/ath/ath9k/init.c
 +++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -733,6 +733,7 @@ static int ath9k_init_softc(u16 devid, s
+@@ -735,6 +735,7 @@ static int ath9k_init_softc(u16 devid, s
  	if (!ath9k_is_chanctx_enabled())
  		sc->cur_chan->hw_queue_base = 0;
  

+ 1 - 1
package/kernel/mac80211/patches/ath9k/530-ath9k_extra_leds.patch

@@ -181,7 +181,7 @@
  
 --- a/drivers/net/wireless/ath/ath9k/init.c
 +++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -1089,7 +1089,7 @@ int ath9k_init_device(u16 devid, struct
+@@ -1091,7 +1091,7 @@ int ath9k_init_device(u16 devid, struct
  
  #ifdef CPTCFG_MAC80211_LEDS
  	/* must be initialized before ieee80211_register_hw */

+ 3 - 3
package/kernel/mac80211/patches/ath9k/543-ath9k_entropy_from_adc.patch

@@ -55,7 +55,7 @@
  	ops->spectral_scan_config = ar9003_hw_spectral_scan_config;
 --- a/drivers/net/wireless/ath/ath9k/init.c
 +++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -871,7 +871,8 @@ static void ath9k_init_txpower_limits(st
+@@ -873,7 +873,8 @@ static void ath9k_init_txpower_limits(st
  	if (ah->caps.hw_caps & ATH9K_HW_CAP_5GHZ)
  		ath9k_init_band_txpower(sc, NL80211_BAND_5GHZ);
  
@@ -65,7 +65,7 @@
  }
  
  static const struct ieee80211_iface_limit if_limits[] = {
-@@ -1049,6 +1050,18 @@ static void ath9k_set_hw_capab(struct at
+@@ -1051,6 +1052,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)
  {
-@@ -1096,6 +1109,8 @@ int ath9k_init_device(u16 devid, struct
+@@ -1098,6 +1111,8 @@ int ath9k_init_device(u16 devid, struct
  
  	wiphy_read_of_freq_limits(hw->wiphy);
  

+ 2 - 2
package/kernel/mac80211/patches/ath9k/553-ath9k_of_gpio_mask.patch

@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/init.c
 +++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -696,6 +696,12 @@ static int ath9k_of_init(struct ath_soft
+@@ -698,6 +698,12 @@ static int ath9k_of_init(struct ath_soft
  	return 0;
  }
  
@@ -13,7 +13,7 @@
  static int ath9k_init_softc(u16 devid, struct ath_softc *sc,
  			    const struct ath_bus_ops *bus_ops)
  {
-@@ -804,6 +810,9 @@ static int ath9k_init_softc(u16 devid, s
+@@ -806,6 +812,9 @@ static int ath9k_init_softc(u16 devid, s
  	if (ret)
  		goto err_hw;
  

+ 4 - 4
package/kernel/mac80211/patches/brcm/870-04-rpi-6.12-brcmfmac-non-upstream-support-DS1-exit-firmware-re-download.patch

@@ -112,7 +112,7 @@ JIRA: SWWLAN-136577
  				    BRCMF_DEFAULT_SCAN_CHANNEL_TIME);
 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-@@ -1317,7 +1317,7 @@ int brcmf_alloc(struct device *dev, stru
+@@ -1322,7 +1322,7 @@ int brcmf_alloc(struct device *dev, stru
  	return 0;
  }
  
@@ -121,7 +121,7 @@ JIRA: SWWLAN-136577
  {
  	struct brcmf_bus *bus_if = dev_get_drvdata(dev);
  	struct brcmf_pub *drvr = bus_if->drvr;
-@@ -1358,10 +1358,13 @@ int brcmf_attach(struct device *dev)
+@@ -1363,10 +1363,13 @@ int brcmf_attach(struct device *dev)
  	brcmf_fweh_register(drvr, BRCMF_E_PSM_WATCHDOG,
  			    brcmf_psm_watchdog_notify);
  
@@ -692,7 +692,7 @@ JIRA: SWWLAN-136577
  #endif /* BRCMFMAC_SDIO_H */
 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-@@ -1200,7 +1200,7 @@ static void brcmf_usb_probe_phase2(struc
+@@ -1202,7 +1202,7 @@ static void brcmf_usb_probe_phase2(struc
  		goto error;
  
  	/* Attach to the common driver interface */
@@ -701,7 +701,7 @@ JIRA: SWWLAN-136577
  	if (ret)
  		goto error;
  
-@@ -1277,7 +1277,7 @@ static int brcmf_usb_probe_cb(struct brc
+@@ -1279,7 +1279,7 @@ static int brcmf_usb_probe_cb(struct brc
  		ret = brcmf_alloc(devinfo->dev, devinfo->settings);
  		if (ret)
  			goto fail;

+ 1 - 1
package/kernel/mac80211/patches/build/150-ath_iommu_paging_domain_revert.patch

@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath10k/snoc.c
 +++ b/drivers/net/wireless/ath/ath10k/snoc.c
-@@ -1635,10 +1635,10 @@ static int ath10k_fw_init(struct ath10k
+@@ -1637,10 +1637,10 @@ static int ath10k_fw_init(struct ath10k
  
  	ar_snoc->fw.dev = &pdev->dev;
  

+ 1 - 1
package/kernel/mac80211/patches/build/210-wireless_netns_local_backport.patch

@@ -32,7 +32,7 @@
  		}
  
  		return err;
-@@ -1518,7 +1526,9 @@ static int cfg80211_netdev_notifier_call
+@@ -1525,7 +1533,9 @@ static int cfg80211_netdev_notifier_call
  		SET_NETDEV_DEVTYPE(dev, &wiphy_type);
  		wdev->netdev = dev;
  		/* can only change netns with wiphy */

+ 1 - 1
package/kernel/mac80211/patches/build/220-brcmfmac_usb_driver_backport.patch

@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-@@ -1574,7 +1574,11 @@ static int brcmf_usb_reset_device(struct
+@@ -1576,7 +1576,11 @@ static int brcmf_usb_reset_device(struct
  
  void brcmf_usb_exit(void)
  {

+ 2 - 2
package/kernel/mac80211/patches/build/230-fix-init_vqs-build-error-on-kernel-6.6.patch

@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/virtual/mac80211_hwsim.c
 +++ b/drivers/net/wireless/virtual/mac80211_hwsim.c
-@@ -6629,6 +6629,7 @@ static void hwsim_virtio_rx_done(struct
+@@ -6636,6 +6636,7 @@ static void hwsim_virtio_rx_done(struct
  
  static int init_vqs(struct virtio_device *vdev)
  {
@@ -8,7 +8,7 @@
  	struct virtqueue_info vqs_info[HWSIM_NUM_VQS] = {
  		[HWSIM_VQ_TX] = { "tx", hwsim_virtio_tx_done },
  		[HWSIM_VQ_RX] = { "rx", hwsim_virtio_rx_done },
-@@ -6636,6 +6637,19 @@ static int init_vqs(struct virtio_device
+@@ -6643,6 +6644,19 @@ static int init_vqs(struct virtio_device
  
  	return virtio_find_vqs(vdev, HWSIM_NUM_VQS,
  			       hwsim_vqs, vqs_info, NULL);

+ 1 - 1
package/kernel/mac80211/patches/mwl/700-mwl8k-missing-pci-id-for-WNR854T.patch

@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/marvell/mwl8k.c
 +++ b/drivers/net/wireless/marvell/mwl8k.c
-@@ -5712,6 +5712,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw")
+@@ -5716,6 +5716,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[] = {

+ 2 - 2
package/kernel/mac80211/patches/mwl/940-mwl8k_init_devices_synchronously.patch

@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/marvell/mwl8k.c
 +++ b/drivers/net/wireless/marvell/mwl8k.c
-@@ -6298,6 +6298,8 @@ static int mwl8k_probe(struct pci_dev *p
+@@ -6302,6 +6302,8 @@ static int mwl8k_probe(struct pci_dev *p
  
  	priv->running_bsses = 0;
  
@@ -9,7 +9,7 @@
  	return rc;
  
  err_stop_firmware:
-@@ -6331,8 +6333,6 @@ static void mwl8k_remove(struct pci_dev
+@@ -6335,8 +6337,6 @@ static void mwl8k_remove(struct pci_dev
  		return;
  	priv = hw->priv;
  

+ 8 - 8
package/kernel/mac80211/patches/rtl/017-v6.13-wifi-rtw88-Constify-some-arrays-and-structs.patch

@@ -284,7 +284,7 @@ Link: https://patch.msgid.link/[email protected]
  	.query_rx_desc		= rtw8821c_query_rx_desc,
 --- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
 +++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
-@@ -1978,13 +1978,13 @@ static const struct rtw_pwr_seq_cmd tran
+@@ -1980,13 +1980,13 @@ static const struct rtw_pwr_seq_cmd tran
  	 RTW_PWR_CMD_END, 0, 0},
  };
  
@@ -300,7 +300,7 @@ Link: https://patch.msgid.link/[email protected]
  	trans_act_to_cardemu_8822b,
  	trans_cardemu_to_carddis_8822b,
  	NULL
-@@ -2156,7 +2156,7 @@ static const struct rtw_rqpn rqpn_table_
+@@ -2158,7 +2158,7 @@ static const struct rtw_rqpn rqpn_table_
  	 RTW_DMA_MAPPING_EXTRA, RTW_DMA_MAPPING_HIGH},
  };
  
@@ -309,7 +309,7 @@ Link: https://patch.msgid.link/[email protected]
  	.prio[RTW_DMA_MAPPING_EXTRA] = {
  		.rsvd = REG_FIFOPAGE_INFO_4, .avail = REG_FIFOPAGE_INFO_4 + 2,
  	},
-@@ -2172,7 +2172,7 @@ static struct rtw_prioq_addrs prioq_addr
+@@ -2174,7 +2174,7 @@ static struct rtw_prioq_addrs prioq_addr
  	.wsize = true,
  };
  
@@ -318,7 +318,7 @@ Link: https://patch.msgid.link/[email protected]
  	.phy_set_param		= rtw8822b_phy_set_param,
  	.read_efuse		= rtw8822b_read_efuse,
  	.query_rx_desc		= rtw8822b_query_rx_desc,
-@@ -2521,7 +2521,7 @@ static const struct rtw_reg_domain coex_
+@@ -2523,7 +2523,7 @@ static const struct rtw_reg_domain coex_
  	{0xc50,  MASKBYTE0, RTW_REG_DOMAIN_MAC8},
  };
  
@@ -329,7 +329,7 @@ Link: https://patch.msgid.link/[email protected]
  };
 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
 +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
-@@ -4874,13 +4874,13 @@ static const struct rtw_pwr_seq_cmd tran
+@@ -4875,13 +4875,13 @@ static const struct rtw_pwr_seq_cmd tran
  	 RTW_PWR_CMD_END, 0, 0},
  };
  
@@ -345,7 +345,7 @@ Link: https://patch.msgid.link/[email protected]
  	trans_act_to_cardemu_8822c,
  	trans_cardemu_to_carddis_8822c,
  	NULL
-@@ -4972,7 +4972,7 @@ static const struct rtw_rqpn rqpn_table_
+@@ -4973,7 +4973,7 @@ static const struct rtw_rqpn rqpn_table_
  	 RTW_DMA_MAPPING_EXTRA, RTW_DMA_MAPPING_HIGH},
  };
  
@@ -354,7 +354,7 @@ Link: https://patch.msgid.link/[email protected]
  	.prio[RTW_DMA_MAPPING_EXTRA] = {
  		.rsvd = REG_FIFOPAGE_INFO_4, .avail = REG_FIFOPAGE_INFO_4 + 2,
  	},
-@@ -4988,7 +4988,7 @@ static struct rtw_prioq_addrs prioq_addr
+@@ -4989,7 +4989,7 @@ static struct rtw_prioq_addrs prioq_addr
  	.wsize = true,
  };
  
@@ -363,7 +363,7 @@ Link: https://patch.msgid.link/[email protected]
  	.phy_set_param		= rtw8822c_phy_set_param,
  	.read_efuse		= rtw8822c_read_efuse,
  	.query_rx_desc		= rtw8822c_query_rx_desc,
-@@ -5301,7 +5301,7 @@ static const struct rtw_pwr_track_tbl rt
+@@ -5302,7 +5302,7 @@ static const struct rtw_pwr_track_tbl rt
  	.pwrtrk_2g_ccka_p = rtw8822c_pwrtrk_2g_cck_a_p,
  };
  

+ 7 - 7
package/kernel/mac80211/patches/rtl/019-v6.13-wifi-rtw88-Parse-the-RX-descriptor-with-a-single-fun.patch

@@ -48,7 +48,7 @@ Link: https://patch.msgid.link/[email protected]
  	bool (*write_rf)(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path,
 --- a/drivers/net/wireless/realtek/rtw88/pci.c
 +++ b/drivers/net/wireless/realtek/rtw88/pci.c
-@@ -1065,7 +1065,7 @@ static u32 rtw_pci_rx_napi(struct rtw_de
+@@ -1066,7 +1066,7 @@ static u32 rtw_pci_rx_napi(struct rtw_de
  		dma_sync_single_for_cpu(rtwdev->dev, dma, RTK_PCI_RX_BUF_SIZE,
  					DMA_FROM_DEVICE);
  		rx_desc = skb->data;
@@ -302,9 +302,9 @@ Link: https://patch.msgid.link/[email protected]
 -}
 -
  static void
- rtw8822b_set_tx_power_index_by_rate(struct rtw_dev *rtwdev, u8 path, u8 rs)
- {
-@@ -2175,7 +2134,7 @@ static const struct rtw_prioq_addrs prio
+ rtw8822b_set_tx_power_index_by_rate(struct rtw_dev *rtwdev, u8 path,
+ 				    u8 rs, u32 *phy_pwr_idx)
+@@ -2177,7 +2136,7 @@ static const struct rtw_prioq_addrs prio
  static const struct rtw_chip_ops rtw8822b_ops = {
  	.phy_set_param		= rtw8822b_phy_set_param,
  	.read_efuse		= rtw8822b_read_efuse,
@@ -364,7 +364,7 @@ Link: https://patch.msgid.link/[email protected]
  static void
  rtw8822c_set_write_tx_power_ref(struct rtw_dev *rtwdev, u8 *tx_pwr_ref_cck,
  				u8 *tx_pwr_ref_ofdm)
-@@ -4991,7 +4949,7 @@ static const struct rtw_prioq_addrs prio
+@@ -4992,7 +4950,7 @@ static const struct rtw_prioq_addrs prio
  static const struct rtw_chip_ops rtw8822c_ops = {
  	.phy_set_param		= rtw8822c_phy_set_param,
  	.read_efuse		= rtw8822c_read_efuse,
@@ -535,7 +535,7 @@ Link: https://patch.msgid.link/[email protected]
  				struct rtw_rx_pkt_stat *pkt_stat);
 --- a/drivers/net/wireless/realtek/rtw88/sdio.c
 +++ b/drivers/net/wireless/realtek/rtw88/sdio.c
-@@ -981,8 +981,7 @@ static void rtw_sdio_rxfifo_recv(struct
+@@ -979,8 +979,7 @@ static void rtw_sdio_rxfifo_recv(struct
  
  	while (true) {
  		rx_desc = skb->data;
@@ -547,7 +547,7 @@ Link: https://patch.msgid.link/[email protected]
  
 --- a/drivers/net/wireless/realtek/rtw88/usb.c
 +++ b/drivers/net/wireless/realtek/rtw88/usb.c
-@@ -571,8 +571,8 @@ static void rtw_usb_rx_handler(struct wo
+@@ -625,8 +625,8 @@ static void rtw_usb_rx_handler(struct wo
  
  		do {
  			rx_desc = skb->data;

+ 22 - 22
package/kernel/mac80211/patches/rtl/024-v6.13-wifi-rtw88-Add-some-definitions-for-RTL8821AU-RTL881.patch

@@ -82,7 +82,7 @@ Link: https://patch.msgid.link/[email protected]
  #define REG_AFE_CTRL_4		0x0078
  #define BIT_CK320M_AFE_EN	BIT(4)
  #define BIT_EN_SYN		BIT(15)
-@@ -134,6 +143,11 @@
+@@ -135,6 +144,11 @@
  #define REG_PMC_DBG_CTRL1	0xa8
  #define BITS_PMC_BT_IQK_STS	GENMASK(22, 21)
  
@@ -94,7 +94,7 @@ Link: https://patch.msgid.link/[email protected]
  #define REG_PAD_CTRL2		0x00C4
  #define BIT_RSM_EN_V1		BIT(16)
  #define BIT_NO_PDN_CHIPOFF_V1	BIT(17)
-@@ -185,6 +199,15 @@
+@@ -186,6 +200,15 @@
  #define MAC_TRX_ENABLE	(BIT_HCI_TXDMA_EN | BIT_HCI_RXDMA_EN | BIT_TXDMA_EN | \
  			BIT_RXDMA_EN | BIT_PROTOCOL_EN | BIT_SCHEDULE_EN | \
  			BIT_MACTXEN | BIT_MACRXEN)
@@ -110,7 +110,7 @@ Link: https://patch.msgid.link/[email protected]
  #define BIT_SHIFT_TXDMA_VOQ_MAP	4
  #define BIT_MASK_TXDMA_VOQ_MAP	0x3
  #define BIT_TXDMA_VOQ_MAP(x)                                                   \
-@@ -256,6 +279,8 @@
+@@ -257,6 +280,8 @@
  #define REG_HMEBOX1		0x01D4
  #define REG_HMEBOX2		0x01D8
  #define REG_HMEBOX3		0x01DC
@@ -119,7 +119,7 @@ Link: https://patch.msgid.link/[email protected]
  #define REG_HMEBOX0_EX		0x01F0
  #define REG_HMEBOX1_EX		0x01F4
  #define REG_HMEBOX2_EX		0x01F8
-@@ -298,6 +323,7 @@
+@@ -299,6 +324,7 @@
  
  #define REG_AUTO_LLT		0x0224
  #define BIT_AUTO_INIT_LLT	BIT(16)
@@ -127,7 +127,7 @@ Link: https://patch.msgid.link/[email protected]
  #define REG_RQPN_CTRL_1		0x0228
  #define REG_RQPN_CTRL_2		0x022C
  #define BIT_LD_RQPN		BIT(31)
-@@ -329,6 +355,7 @@
+@@ -330,6 +356,7 @@
  #define BIT_DMA_BURST_SIZE_1024	0
  
  #define REG_RXPKTNUM		0x02B0
@@ -135,7 +135,7 @@ Link: https://patch.msgid.link/[email protected]
  
  #define REG_INT_MIG		0x0304
  #define REG_HCI_MIX_CFG		0x03FC
-@@ -336,6 +363,7 @@
+@@ -337,6 +364,7 @@
  
  #define REG_BCNQ_INFO		0x0418
  #define BIT_MGQ_CPU_EMPTY	BIT(24)
@@ -143,7 +143,7 @@ Link: https://patch.msgid.link/[email protected]
  #define REG_FWHW_TXQ_CTRL	0x0420
  #define BIT_EN_BCNQ_DL		BIT(22)
  #define BIT_EN_WR_FREE_TAIL	BIT(20)
-@@ -362,10 +390,12 @@
+@@ -363,10 +391,12 @@
  #define REG_AMPDU_MAX_TIME_V1	0x0455
  #define REG_BCNQ1_BDNY_V1	0x0456
  #define REG_AMPDU_MAX_TIME	0x0456
@@ -156,7 +156,7 @@ Link: https://patch.msgid.link/[email protected]
  #define REG_DATA_SC		0x0483
  #define REG_ARFR2_V1		0x048C
  #define REG_ARFRH2_V1		0x0490
-@@ -390,6 +420,8 @@
+@@ -391,6 +421,8 @@
  #define REG_PRECNT_CTRL		0x04E5
  #define BIT_BTCCA_CTRL		(BIT(0) | BIT(1))
  #define BIT_EN_PRECNT		BIT(11)
@@ -165,7 +165,7 @@ Link: https://patch.msgid.link/[email protected]
  #define REG_DUMMY_PAGE4_V1	0x04FC
  
  #define REG_EDCA_VO_PARAM	0x0500
-@@ -400,6 +432,7 @@
+@@ -401,6 +433,7 @@
  #define BIT_MASK_CWMAX		GENMASK(15, 12)
  #define BIT_MASK_CWMIN		GENMASK(11, 8)
  #define BIT_MASK_AIFS		GENMASK(7, 0)
@@ -173,7 +173,7 @@ Link: https://patch.msgid.link/[email protected]
  #define REG_PIFS		0x0512
  #define REG_SIFS		0x0514
  #define BIT_SHIFT_SIFS_OFDM_CTX	8
-@@ -526,6 +559,8 @@
+@@ -527,6 +560,8 @@
  #define REG_BT_COEX_V2		0x0762
  #define BIT_GNT_BT_POLARITY	BIT(12)
  #define BIT_LTE_COEX_EN		BIT(7)
@@ -182,7 +182,7 @@ Link: https://patch.msgid.link/[email protected]
  #define REG_BT_COEX_ENH_INTR_CTRL	0x76E
  #define BIT_R_GRANTALL_WLMASK	BIT(3)
  #define BIT_STATIS_BT_EN	BIT(2)
-@@ -543,14 +578,43 @@
+@@ -544,14 +579,43 @@
  #define REG_FPGA0_RFMOD		0x0800
  #define BIT_CCKEN		BIT(24)
  #define BIT_OFDMEN		BIT(25)
@@ -226,7 +226,7 @@ Link: https://patch.msgid.link/[email protected]
  
  #define REG_DIS_DPD		0x0a70
  #define DIS_DPD_MASK		GENMASK(9, 0)
-@@ -566,13 +630,109 @@
+@@ -567,13 +631,109 @@
  #define DIS_DPD_RATEVHT2SS_MCS1	BIT(9)
  #define DIS_DPD_RATEALL		GENMASK(9, 0)
  
@@ -336,7 +336,7 @@ Link: https://patch.msgid.link/[email protected]
  #define REG_ANAPARSW_MAC_0	0x1010
  #define BIT_CF_L_V2		GENMASK(29, 28)
  
-@@ -709,6 +869,10 @@
+@@ -710,6 +870,10 @@
  
  #define REG_IGN_GNTBT4	0x4160
  
@@ -347,7 +347,7 @@ Link: https://patch.msgid.link/[email protected]
  #define RF_MODE		0x00
  #define RF_MODOPT	0x01
  #define RF_WLINT	0x01
-@@ -716,7 +880,13 @@
+@@ -717,7 +881,13 @@
  #define RF_DTXLOK	0x08
  #define RF_CFGCH	0x18
  #define BIT_BAND	GENMASK(18, 16)
@@ -361,7 +361,7 @@ Link: https://patch.msgid.link/[email protected]
  #define RF_LUTWA	0x33
  #define RF_LUTWD1	0x3e
  #define RF_LUTWD0	0x3f
-@@ -725,10 +895,14 @@
+@@ -726,10 +896,14 @@
  #define RF_T_METER	0x42
  #define RF_BSPAD	0x54
  #define RF_GAINTX	0x56
@@ -378,7 +378,7 @@ Link: https://patch.msgid.link/[email protected]
  #define RF_MALSEL	0xbe
 --- a/drivers/net/wireless/realtek/rtw88/rtw8821c.h
 +++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.h
-@@ -214,19 +214,10 @@ extern const struct rtw_chip_info rtw882
+@@ -215,19 +215,10 @@ extern const struct rtw_chip_info rtw882
  #define BIT_FEN_EN	BIT(26)
  #define REG_INIRTS_RATE_SEL 0x0480
  #define REG_HTSTFWT	0x800
@@ -398,7 +398,7 @@ Link: https://patch.msgid.link/[email protected]
  #define REG_ADC40	0x8c8
  #define REG_CHFIR	0x8f0
  #define REG_CDDTXP	0x93c
-@@ -234,14 +225,11 @@ extern const struct rtw_chip_info rtw882
+@@ -235,14 +226,11 @@ extern const struct rtw_chip_info rtw882
  #define REG_ACBB0	0x948
  #define REG_ACBBRXFIR	0x94c
  #define REG_ACGG2TBL	0x958
@@ -413,7 +413,7 @@ Link: https://patch.msgid.link/[email protected]
  #define REG_RXDESC	0xa2c
  #define REG_ENTXCCK	0xa80
  #define BTG_LNA		0xfc84
-@@ -252,12 +240,8 @@ extern const struct rtw_chip_info rtw882
+@@ -253,12 +241,8 @@ extern const struct rtw_chip_info rtw882
  #define REG_PWRTH2	0xaa8
  #define REG_CSRATIO	0xaaa
  #define REG_TXFILTER	0xaac
@@ -426,7 +426,7 @@ Link: https://patch.msgid.link/[email protected]
  #define REG_TRSW	0xca0
  #define REG_RFESEL0	0xcb0
  #define REG_RFESEL8	0xcb4
-@@ -269,14 +253,6 @@ extern const struct rtw_chip_info rtw882
+@@ -270,14 +254,6 @@ extern const struct rtw_chip_info rtw882
  #define B_WLA_SWITCH	BIT(23)
  #define REG_RFEINV	0xcbc
  #define REG_AGCTR_B	0xe08
@@ -443,7 +443,7 @@ Link: https://patch.msgid.link/[email protected]
  #define REG_ANTWT	0x1904
 --- a/drivers/net/wireless/realtek/rtw88/rtw8822b.h
 +++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.h
-@@ -151,21 +151,12 @@ _rtw_write32s_mask(struct rtw_dev *rtwde
+@@ -152,21 +152,12 @@ _rtw_write32s_mask(struct rtw_dev *rtwde
  #define RTW8822B_EDCCA_MAX	0x7f
  #define RTW8822B_EDCCA_SRC_DEF	1
  #define REG_HTSTFWT	0x800
@@ -465,7 +465,7 @@ Link: https://patch.msgid.link/[email protected]
  #define REG_ADC40	0x8c8
  #define REG_EDCCA_DECISION	0x8dc
  #define BIT_EDCCA_OPTION	BIT(5)
-@@ -176,7 +167,6 @@ _rtw_write32s_mask(struct rtw_dev *rtwde
+@@ -177,7 +168,6 @@ _rtw_write32s_mask(struct rtw_dev *rtwde
  #define REG_ACBB0	0x948
  #define REG_ACBBRXFIR	0x94c
  #define REG_ACGG2TBL	0x958
@@ -473,7 +473,7 @@ Link: https://patch.msgid.link/[email protected]
  #define REG_ADCINI	0xa04
  #define REG_TXSF2	0xa24
  #define REG_TXSF6	0xa28
-@@ -184,14 +174,12 @@ _rtw_write32s_mask(struct rtw_dev *rtwde
+@@ -185,14 +175,12 @@ _rtw_write32s_mask(struct rtw_dev *rtwde
  #define REG_ENTXCCK	0xa80
  #define REG_AGCTR_A	0xc08
  #define REG_TXDFIR	0xc20

+ 3 - 3
package/kernel/mac80211/patches/rtl/025-v6.13-wifi-rtw88-Dump-the-HW-features-only-for-some-chips.patch

@@ -21,7 +21,7 @@ Link: https://patch.msgid.link/[email protected]
 
 --- a/drivers/net/wireless/realtek/rtw88/main.c
 +++ b/drivers/net/wireless/realtek/rtw88/main.c
-@@ -1917,6 +1917,9 @@ static int rtw_dump_hw_feature(struct rt
+@@ -1907,6 +1907,9 @@ static int rtw_dump_hw_feature(struct rt
  	u8 bw;
  	int i;
  
@@ -73,7 +73,7 @@ Link: https://patch.msgid.link/[email protected]
  	.lps_deep_mode_supported = BIT(LPS_DEEP_MODE_LCLK),
 --- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
 +++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
-@@ -2509,6 +2509,7 @@ const struct rtw_chip_info rtw8822b_hw_s
+@@ -2511,6 +2511,7 @@ const struct rtw_chip_info rtw8822b_hw_s
  	.page_size = TX_PAGE_SIZE,
  	.dig_min = 0x1c,
  	.usb_tx_agg_desc_num = 3,
@@ -83,7 +83,7 @@ Link: https://patch.msgid.link/[email protected]
  	.lps_deep_mode_supported = BIT(LPS_DEEP_MODE_LCLK),
 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
 +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
-@@ -5329,6 +5329,7 @@ const struct rtw_chip_info rtw8822c_hw_s
+@@ -5330,6 +5330,7 @@ const struct rtw_chip_info rtw8822c_hw_s
  	.page_size = TX_PAGE_SIZE,
  	.dig_min = 0x20,
  	.usb_tx_agg_desc_num = 3,

+ 2 - 2
package/kernel/mac80211/patches/rtl/026-v6.13-wifi-rtw88-Allow-different-C2H-RA-report-sizes.patch

@@ -155,7 +155,7 @@ Link: https://patch.msgid.link/[email protected]
  	.lps_deep_mode_supported = BIT(LPS_DEEP_MODE_LCLK),
 --- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
 +++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
-@@ -2510,6 +2510,7 @@ const struct rtw_chip_info rtw8822b_hw_s
+@@ -2512,6 +2512,7 @@ const struct rtw_chip_info rtw8822b_hw_s
  	.dig_min = 0x1c,
  	.usb_tx_agg_desc_num = 3,
  	.hw_feature_report = true,
@@ -165,7 +165,7 @@ Link: https://patch.msgid.link/[email protected]
  	.lps_deep_mode_supported = BIT(LPS_DEEP_MODE_LCLK),
 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
 +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
-@@ -5330,6 +5330,7 @@ const struct rtw_chip_info rtw8822c_hw_s
+@@ -5331,6 +5331,7 @@ const struct rtw_chip_info rtw8822c_hw_s
  	.dig_min = 0x20,
  	.usb_tx_agg_desc_num = 3,
  	.hw_feature_report = true,

+ 9 - 7
package/kernel/mac80211/patches/rtl/029-v6.13-wifi-rtw88-Let-each-driver-control-the-power-on-off-.patch

@@ -67,7 +67,7 @@ Link: https://patch.msgid.link/[email protected]
  
  static int rtw_mac_power_switch(struct rtw_dev *rtwdev, bool pwr_on)
  {
-@@ -994,6 +995,7 @@ int rtw_download_firmware(struct rtw_dev
+@@ -999,6 +1000,7 @@ int rtw_download_firmware(struct rtw_dev
  
  	return 0;
  }
@@ -75,7 +75,7 @@ Link: https://patch.msgid.link/[email protected]
  
  static u32 get_priority_queues(struct rtw_dev *rtwdev, u32 queues)
  {
-@@ -1127,7 +1129,7 @@ static int txdma_queue_mapping(struct rt
+@@ -1132,7 +1134,7 @@ static int txdma_queue_mapping(struct rt
  	return 0;
  }
  
@@ -84,7 +84,7 @@ Link: https://patch.msgid.link/[email protected]
  {
  	const struct rtw_chip_info *chip = rtwdev->chip;
  	struct rtw_fifo_conf *fifo = &rtwdev->fifo;
-@@ -1179,6 +1181,7 @@ static int set_trx_fifo_info(struct rtw_
+@@ -1184,6 +1186,7 @@ static int set_trx_fifo_info(struct rtw_
  
  	return 0;
  }
@@ -92,7 +92,7 @@ Link: https://patch.msgid.link/[email protected]
  
  static int __priority_queue_cfg(struct rtw_dev *rtwdev,
  				const struct rtw_page_table *pg_tbl,
-@@ -1256,7 +1259,7 @@ static int priority_queue_cfg(struct rtw
+@@ -1261,7 +1264,7 @@ static int priority_queue_cfg(struct rtw
  	u16 pubq_num;
  	int ret;
  
@@ -103,7 +103,7 @@ Link: https://patch.msgid.link/[email protected]
  
 --- a/drivers/net/wireless/realtek/rtw88/mac.h
 +++ b/drivers/net/wireless/realtek/rtw88/mac.h
-@@ -30,11 +30,14 @@
+@@ -30,6 +30,8 @@
  
  void rtw_set_channel_mac(struct rtw_dev *rtwdev, u8 channel, u8 bw,
  			 u8 primary_ch_idx);
@@ -111,6 +111,8 @@ Link: https://patch.msgid.link/[email protected]
 +		       const struct rtw_pwr_seq_cmd * const *cmd_seq);
  int rtw_mac_power_on(struct rtw_dev *rtwdev);
  void rtw_mac_power_off(struct rtw_dev *rtwdev);
+ void rtw_write_firmware_page(struct rtw_dev *rtwdev, u32 page,
+@@ -37,6 +39,7 @@ void rtw_write_firmware_page(struct rtw_
  int rtw_download_firmware(struct rtw_dev *rtwdev, struct rtw_fw_state *fw);
  int rtw_mac_init(struct rtw_dev *rtwdev);
  void rtw_mac_flush_queues(struct rtw_dev *rtwdev, u32 queues, bool drop);
@@ -250,7 +252,7 @@ Link: https://patch.msgid.link/[email protected]
  	.query_phy_status	= query_phy_status,
 --- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
 +++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
-@@ -2132,6 +2132,8 @@ static const struct rtw_prioq_addrs prio
+@@ -2134,6 +2134,8 @@ static const struct rtw_prioq_addrs prio
  };
  
  static const struct rtw_chip_ops rtw8822b_ops = {
@@ -261,7 +263,7 @@ Link: https://patch.msgid.link/[email protected]
  	.query_phy_status	= query_phy_status,
 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
 +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
-@@ -4947,6 +4947,8 @@ static const struct rtw_prioq_addrs prio
+@@ -4948,6 +4948,8 @@ static const struct rtw_prioq_addrs prio
  };
  
  static const struct rtw_chip_ops rtw8822c_ops = {

+ 6 - 6
package/kernel/mac80211/patches/rtl/030-v6.13-wifi-rtw88-Enable-data-rate-fallback-for-older-chips.patch

@@ -60,7 +60,7 @@ Link: https://patch.msgid.link/[email protected]
  
 --- a/drivers/net/wireless/realtek/rtw88/pci.c
 +++ b/drivers/net/wireless/realtek/rtw88/pci.c
-@@ -824,7 +824,7 @@ static int rtw_pci_tx_write_data(struct
+@@ -825,7 +825,7 @@ static int rtw_pci_tx_write_data(struct
  	pkt_desc = skb_push(skb, chip->tx_pkt_desc_sz);
  	memset(pkt_desc, 0, tx_pkt_desc_sz);
  	pkt_info->qsel = rtw_pci_get_tx_qsel(skb, queue);
@@ -101,7 +101,7 @@ Link: https://patch.msgid.link/[email protected]
  	.lps_deep_mode_supported = BIT(LPS_DEEP_MODE_LCLK),
 --- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
 +++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
-@@ -2513,6 +2513,7 @@ const struct rtw_chip_info rtw8822b_hw_s
+@@ -2515,6 +2515,7 @@ const struct rtw_chip_info rtw8822b_hw_s
  	.usb_tx_agg_desc_num = 3,
  	.hw_feature_report = true,
  	.c2h_ra_report_size = 7,
@@ -111,7 +111,7 @@ Link: https://patch.msgid.link/[email protected]
  	.lps_deep_mode_supported = BIT(LPS_DEEP_MODE_LCLK),
 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
 +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
-@@ -5333,6 +5333,7 @@ const struct rtw_chip_info rtw8822c_hw_s
+@@ -5334,6 +5334,7 @@ const struct rtw_chip_info rtw8822c_hw_s
  	.usb_tx_agg_desc_num = 3,
  	.hw_feature_report = true,
  	.c2h_ra_report_size = 7,
@@ -121,7 +121,7 @@ Link: https://patch.msgid.link/[email protected]
  	.ht_supported = true,
 --- a/drivers/net/wireless/realtek/rtw88/sdio.c
 +++ b/drivers/net/wireless/realtek/rtw88/sdio.c
-@@ -864,7 +864,7 @@ static void rtw_sdio_tx_skb_prepare(stru
+@@ -862,7 +862,7 @@ static void rtw_sdio_tx_skb_prepare(stru
  
  	pkt_info->qsel = rtw_sdio_get_tx_qsel(rtwdev, skb, queue);
  
@@ -174,7 +174,7 @@ Link: https://patch.msgid.link/[email protected]
  void rtw_tx_rsvd_page_pkt_info_update(struct rtw_dev *rtwdev,
 --- a/drivers/net/wireless/realtek/rtw88/usb.c
 +++ b/drivers/net/wireless/realtek/rtw88/usb.c
-@@ -458,7 +458,7 @@ static int rtw_usb_write_data(struct rtw
+@@ -512,7 +512,7 @@ static int rtw_usb_write_data(struct rtw
  	skb_put_data(skb, buf, size);
  	skb_push(skb, chip->tx_pkt_desc_sz);
  	memset(skb->data, 0, chip->tx_pkt_desc_sz);
@@ -183,7 +183,7 @@ Link: https://patch.msgid.link/[email protected]
  	rtw_tx_fill_txdesc_checksum(rtwdev, pkt_info, skb->data);
  
  	ret = rtw_usb_write_port(rtwdev, qsel, skb,
-@@ -525,7 +525,7 @@ static int rtw_usb_tx_write(struct rtw_d
+@@ -579,7 +579,7 @@ static int rtw_usb_tx_write(struct rtw_d
  	pkt_desc = skb_push(skb, chip->tx_pkt_desc_sz);
  	memset(pkt_desc, 0, chip->tx_pkt_desc_sz);
  	ep = qsel_to_ep(rtwusb, pkt_info->qsel);

+ 1 - 1
package/kernel/mac80211/patches/rtl/032-v6.13-wifi-rtw88-Support-TX-page-sizes-bigger-than-128.patch

@@ -93,7 +93,7 @@ Link: https://patch.msgid.link/[email protected]
  	if (rtw_fw_feature_ext_check(&rtwdev->fw, FW_FEATURE_EXT_OLD_PAGE_NUM))
 --- a/drivers/net/wireless/realtek/rtw88/mac.c
 +++ b/drivers/net/wireless/realtek/rtw88/mac.c
-@@ -1138,7 +1138,7 @@ int rtw_set_trx_fifo_info(struct rtw_dev
+@@ -1143,7 +1143,7 @@ int rtw_set_trx_fifo_info(struct rtw_dev
  
  	/* config rsvd page num */
  	fifo->rsvd_drv_pg_num = chip->rsvd_drv_pg_num;

+ 8 - 8
package/kernel/mac80211/patches/rtl/033-v6.13-wifi-rtw88-Move-pwr_track_tbl-to-struct-rtw_rfe_def.patch

@@ -199,7 +199,7 @@ Link: https://patch.msgid.link/[email protected]
  	.bfer_mu_max_num = 1,
 --- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
 +++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
-@@ -2072,12 +2072,6 @@ static const struct rtw_intf_phy_para_ta
+@@ -2074,12 +2074,6 @@ static const struct rtw_intf_phy_para_ta
  	.n_gen2_para	= ARRAY_SIZE(pcie_gen2_param_8822b),
  };
  
@@ -212,7 +212,7 @@ Link: https://patch.msgid.link/[email protected]
  static const struct rtw_hw_reg rtw8822b_dig[] = {
  	[0] = { .addr = 0xc50, .mask = 0x7f },
  	[1] = { .addr = 0xe50, .mask = 0x7f },
-@@ -2432,7 +2426,7 @@ static const u8 rtw8822b_pwrtrk_2g_cck_a
+@@ -2434,7 +2428,7 @@ static const u8 rtw8822b_pwrtrk_2g_cck_a
  	10, 11, 11, 12, 12, 13, 13, 14, 14, 15
  };
  
@@ -221,7 +221,7 @@ Link: https://patch.msgid.link/[email protected]
  	.pwrtrk_5gb_n[RTW_PWR_TRK_5G_1] = rtw8822b_pwrtrk_5gb_n[RTW_PWR_TRK_5G_1],
  	.pwrtrk_5gb_n[RTW_PWR_TRK_5G_2] = rtw8822b_pwrtrk_5gb_n[RTW_PWR_TRK_5G_2],
  	.pwrtrk_5gb_n[RTW_PWR_TRK_5G_3] = rtw8822b_pwrtrk_5gb_n[RTW_PWR_TRK_5G_3],
-@@ -2455,6 +2449,12 @@ static const struct rtw_pwr_track_tbl rt
+@@ -2457,6 +2451,12 @@ static const struct rtw_pwr_track_tbl rt
  	.pwrtrk_2g_ccka_p = rtw8822b_pwrtrk_2g_cck_a_p,
  };
  
@@ -234,7 +234,7 @@ Link: https://patch.msgid.link/[email protected]
  static const struct rtw_reg_domain coex_info_hw_regs_8822b[] = {
  	{0xcb0, MASKDWORD, RTW_REG_DOMAIN_MAC32},
  	{0xcb4, MASKDWORD, RTW_REG_DOMAIN_MAC32},
-@@ -2535,7 +2535,6 @@ const struct rtw_chip_info rtw8822b_hw_s
+@@ -2537,7 +2537,6 @@ const struct rtw_chip_info rtw8822b_hw_s
  	.rf_tbl = {&rtw8822b_rf_a_tbl, &rtw8822b_rf_b_tbl},
  	.rfe_defs = rtw8822b_rfe_defs,
  	.rfe_defs_size = ARRAY_SIZE(rtw8822b_rfe_defs),
@@ -244,7 +244,7 @@ Link: https://patch.msgid.link/[email protected]
  	.bfer_mu_max_num = 1,
 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
 +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
-@@ -4883,16 +4883,6 @@ static const struct rtw_intf_phy_para_ta
+@@ -4884,16 +4884,6 @@ static const struct rtw_intf_phy_para_ta
  	.n_gen2_para	= ARRAY_SIZE(pcie_gen2_param_8822c),
  };
  
@@ -261,7 +261,7 @@ Link: https://patch.msgid.link/[email protected]
  static const struct rtw_hw_reg rtw8822c_dig[] = {
  	[0] = { .addr = 0x1d70, .mask = 0x7f },
  	[1] = { .addr = 0x1d70, .mask = 0x7f00 },
-@@ -5238,7 +5228,7 @@ static const u8 rtw8822c_pwrtrk_2g_cck_a
+@@ -5239,7 +5229,7 @@ static const u8 rtw8822c_pwrtrk_2g_cck_a
  	18, 18, 19, 20, 21, 22, 23, 24, 24, 25
  };
  
@@ -270,7 +270,7 @@ Link: https://patch.msgid.link/[email protected]
  	.pwrtrk_5gb_n[RTW_PWR_TRK_5G_1] = rtw8822c_pwrtrk_5gb_n[RTW_PWR_TRK_5G_1],
  	.pwrtrk_5gb_n[RTW_PWR_TRK_5G_2] = rtw8822c_pwrtrk_5gb_n[RTW_PWR_TRK_5G_2],
  	.pwrtrk_5gb_n[RTW_PWR_TRK_5G_3] = rtw8822c_pwrtrk_5gb_n[RTW_PWR_TRK_5G_3],
-@@ -5261,6 +5251,16 @@ static const struct rtw_pwr_track_tbl rt
+@@ -5262,6 +5252,16 @@ static const struct rtw_pwr_track_tbl rt
  	.pwrtrk_2g_ccka_p = rtw8822c_pwrtrk_2g_cck_a_p,
  };
  
@@ -287,7 +287,7 @@ Link: https://patch.msgid.link/[email protected]
  static const struct rtw_hw_reg_offset rtw8822c_edcca_th[] = {
  	[EDCCA_TH_L2H_IDX] = {
  		{.addr = 0x84c, .mask = MASKBYTE2}, .offset = 0x80
-@@ -5360,7 +5360,6 @@ const struct rtw_chip_info rtw8822c_hw_s
+@@ -5361,7 +5361,6 @@ const struct rtw_chip_info rtw8822c_hw_s
  	.rfe_defs_size = ARRAY_SIZE(rtw8822c_rfe_defs),
  	.en_dis_dpd = true,
  	.dpd_ratemask = DIS_DPD_RATEALL,

+ 1 - 1
package/kernel/mac80211/patches/rtl/034-v6.13-wifi-rtw88-usb-Set-pkt_info.ls-for-the-reserved-page.patch

@@ -17,7 +17,7 @@ Link: https://patch.msgid.link/[email protected]
 
 --- a/drivers/net/wireless/realtek/rtw88/usb.c
 +++ b/drivers/net/wireless/realtek/rtw88/usb.c
-@@ -478,6 +478,7 @@ static int rtw_usb_write_data_rsvd_page(
+@@ -532,6 +532,7 @@ static int rtw_usb_write_data_rsvd_page(
  	pkt_info.tx_pkt_size = size;
  	pkt_info.qsel = TX_DESC_QSEL_BEACON;
  	pkt_info.offset = chip->tx_pkt_desc_sz;

+ 3 - 3
package/kernel/mac80211/patches/rtl/048-wifi-rtw88-usb-Support-USB-3-with-RTL8812AU.patch

@@ -12,7 +12,7 @@ Signed-off-by: Bitterblue Smith <[email protected]>
 
 --- a/drivers/net/wireless/realtek/rtw88/usb.c
 +++ b/drivers/net/wireless/realtek/rtw88/usb.c
-@@ -930,6 +930,32 @@ static void rtw_usb_intf_deinit(struct r
+@@ -985,6 +985,32 @@ static void rtw_usb_intf_deinit(struct r
  	usb_set_intfdata(intf, NULL);
  }
  
@@ -45,7 +45,7 @@ Signed-off-by: Bitterblue Smith <[email protected]>
  static int rtw_usb_switch_mode_new(struct rtw_dev *rtwdev)
  {
  	enum usb_device_speed cur_speed;
-@@ -983,7 +1009,8 @@ static int rtw_usb_switch_mode(struct rt
+@@ -1038,7 +1064,8 @@ static int rtw_usb_switch_mode(struct rt
  {
  	u8 id = rtwdev->chip->id;
  
@@ -55,7 +55,7 @@ Signed-off-by: Bitterblue Smith <[email protected]>
  		return 0;
  
  	if (!rtwdev->efuse.usb_mode_switch) {
-@@ -998,7 +1025,10 @@ static int rtw_usb_switch_mode(struct rt
+@@ -1053,7 +1080,10 @@ static int rtw_usb_switch_mode(struct rt
  		return 0;
  	}
  

+ 2 - 2
package/kernel/mac80211/patches/rtl/049-wifi-rtw88-usb-Enable-RX-aggregation-for-8821au-8812.patch

@@ -19,7 +19,7 @@ Signed-off-by: Bitterblue Smith <[email protected]>
 
 --- a/drivers/net/wireless/realtek/rtw88/usb.c
 +++ b/drivers/net/wireless/realtek/rtw88/usb.c
-@@ -789,6 +789,32 @@ static void rtw_usb_dynamic_rx_agg_v1(st
+@@ -843,6 +843,32 @@ static void rtw_usb_dynamic_rx_agg_v1(st
  	rtw_write16(rtwdev, REG_RXDMA_AGG_PG_TH, val16);
  }
  
@@ -52,7 +52,7 @@ Signed-off-by: Bitterblue Smith <[email protected]>
  static void rtw_usb_dynamic_rx_agg(struct rtw_dev *rtwdev, bool enable)
  {
  	switch (rtwdev->chip->id) {
-@@ -797,6 +823,10 @@ static void rtw_usb_dynamic_rx_agg(struc
+@@ -851,6 +877,10 @@ static void rtw_usb_dynamic_rx_agg(struc
  	case RTW_CHIP_TYPE_8821C:
  		rtw_usb_dynamic_rx_agg_v1(rtwdev, enable);
  		break;

+ 0 - 32
package/kernel/mac80211/patches/rtl/050-wifi-rtlwifi-rtl8821ae-phy-restore-removed-code-to-f.patch

@@ -1,32 +0,0 @@
-From 927dcd0ab53f39ee00a2d1f204b5aac77e28fcf9 Mon Sep 17 00:00:00 2001
-From: Colin Ian King <[email protected]>
-Date: Wed, 6 Nov 2024 15:46:42 +0000
-Subject: [PATCH 5/6] wifi: rtlwifi: rtl8821ae: phy: restore removed code to
- fix infinite loop
-
-A previous clean-up fix removed the assignment of v2 inside a while loop
-that turned it into an infinite loop. Fix this by restoring the assignment
-of v2 from array[] so that v2 is updated inside the loop.
-
-Fixes: cda37445718d ("wifi: rtlwifi: rtl8821ae: phy: remove some useless code")
-Signed-off-by: Colin Ian King <[email protected]>
-Tested-by: Ping-Ke Shih <[email protected]>
-Reviewed-by: Su Hui <[email protected]>
----
- drivers/net/wireless/realtek/rtlwifi/rtl8821ae/phy.c | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
---- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/phy.c
-+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/phy.c
-@@ -2033,8 +2033,10 @@ static bool _rtl8821ae_phy_config_bb_wit
- 			if (!_rtl8821ae_check_condition(hw, v1)) {
- 				i += 2; /* skip the pair of expression*/
- 				v2 = array[i+1];
--				while (v2 != 0xDEAD)
-+				while (v2 != 0xDEAD) {
- 					i += 3;
-+					v2 = array[i + 1];
-+				}
- 			}
- 		}
- 	}

+ 1 - 1
package/kernel/mac80211/patches/subsys/130-disable_auto_vif.patch

@@ -1,6 +1,6 @@
 --- a/net/mac80211/main.c
 +++ b/net/mac80211/main.c
-@@ -1583,24 +1583,6 @@ int ieee80211_register_hw(struct ieee802
+@@ -1585,24 +1585,6 @@ int ieee80211_register_hw(struct ieee802
  
  	ieee80211_check_wbrf_support(local);
  

+ 1 - 1
package/kernel/mac80211/patches/subsys/230-avoid-crashing-missing-band.patch

@@ -18,7 +18,7 @@ Signed-off-by: David Bauer <[email protected]>
 
 --- a/net/mac80211/sta_info.c
 +++ b/net/mac80211/sta_info.c
-@@ -2439,6 +2439,13 @@ static void sta_stats_decode_rate(struct
+@@ -2446,6 +2446,13 @@ static void sta_stats_decode_rate(struct
  
  		sband = local->hw.wiphy->bands[band];
  

+ 1 - 1
package/kernel/mac80211/patches/subsys/301-mac80211-sta-randomize-BA-session-dialog-token-alloc.patch

@@ -28,7 +28,7 @@ Signed-off-by: Johannes Berg <[email protected]>
 
 --- a/net/mac80211/sta_info.c
 +++ b/net/mac80211/sta_info.c
-@@ -565,6 +565,7 @@ __sta_info_alloc(struct ieee80211_sub_if
+@@ -564,6 +564,7 @@ __sta_info_alloc(struct ieee80211_sub_if
  	spin_lock_init(&sta->ps_lock);
  	INIT_WORK(&sta->drv_deliver_wk, sta_deliver_ps_frames);
  	wiphy_work_init(&sta->ampdu_mlme.work, ieee80211_ba_session_work);

+ 3 - 3
package/kernel/mac80211/patches/subsys/305-mac80211-increase-quantum-for-airtime-scheduler.patch

@@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -4081,7 +4081,7 @@ struct ieee80211_txq *ieee80211_next_txq
+@@ -4082,7 +4082,7 @@ struct ieee80211_txq *ieee80211_next_txq
  
  		if (deficit < 0)
  			sta->airtime[txqi->txq.ac].deficit +=
@@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  
  		if (deficit < 0 || !aql_check) {
  			list_move_tail(&txqi->schedule_order,
-@@ -4224,7 +4224,8 @@ bool ieee80211_txq_may_transmit(struct i
+@@ -4227,7 +4227,8 @@ bool ieee80211_txq_may_transmit(struct i
  		}
  		sta = container_of(iter->txq.sta, struct sta_info, sta);
  		if (ieee80211_sta_deficit(sta, ac) < 0)
@@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  		list_move_tail(&iter->schedule_order, &local->active_txqs[ac]);
  	}
  
-@@ -4232,7 +4233,7 @@ bool ieee80211_txq_may_transmit(struct i
+@@ -4235,7 +4236,7 @@ bool ieee80211_txq_may_transmit(struct i
  	if (sta->airtime[ac].deficit >= 0)
  		goto out;
  

+ 4 - 4
package/kernel/mac80211/patches/subsys/310-cfg80211-allow-grace-period-for-DFS-available-after-.patch

@@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
 
 --- a/include/net/cfg80211.h
 +++ b/include/net/cfg80211.h
-@@ -187,6 +187,8 @@ enum ieee80211_channel_flags {
+@@ -190,6 +190,8 @@ enum ieee80211_channel_flags {
   * @dfs_state: current state of this channel. Only relevant if radar is required
   *	on this channel.
   * @dfs_state_entered: timestamp (jiffies) when the dfs state was entered.
@@ -20,7 +20,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
   * @dfs_cac_ms: DFS CAC time in milliseconds, this is valid for DFS channels.
   * @psd: power spectral density (in dBm)
   */
-@@ -204,6 +206,7 @@ struct ieee80211_channel {
+@@ -207,6 +209,7 @@ struct ieee80211_channel {
  	int orig_mag, orig_mpwr;
  	enum nl80211_dfs_state dfs_state;
  	unsigned long dfs_state_entered;
@@ -124,7 +124,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  
 --- a/net/wireless/mlme.c
 +++ b/net/wireless/mlme.c
-@@ -1031,6 +1031,8 @@ void cfg80211_dfs_channels_update_work(s
+@@ -1032,6 +1032,8 @@ void cfg80211_dfs_channels_update_work(s
  			if (c->dfs_state == NL80211_DFS_UNAVAILABLE) {
  				time_dfs_update = IEEE80211_DFS_MIN_NOP_TIME_MS;
  				radar_event = NL80211_RADAR_NOP_FINISHED;
@@ -133,7 +133,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  			} else {
  				if (regulatory_pre_cac_allowed(wiphy) ||
  				    cfg80211_any_wiphy_oper_chan(wiphy, c))
-@@ -1038,11 +1040,10 @@ void cfg80211_dfs_channels_update_work(s
+@@ -1039,11 +1041,10 @@ void cfg80211_dfs_channels_update_work(s
  
  				time_dfs_update = REG_PRE_CAC_EXPIRY_GRACE_MS;
  				radar_event = NL80211_RADAR_PRE_CAC_EXPIRED;

+ 8 - 8
package/kernel/mac80211/patches/subsys/320-mac80211-add-AQL-support-for-broadcast-packets.patch

@@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
 
 --- a/include/net/cfg80211.h
 +++ b/include/net/cfg80211.h
-@@ -3423,6 +3423,7 @@ enum wiphy_params_flags {
+@@ -3426,6 +3426,7 @@ enum wiphy_params_flags {
  /* The per TXQ device queue limit in airtime */
  #define IEEE80211_DEFAULT_AQL_TXQ_LIMIT_L	5000
  #define IEEE80211_DEFAULT_AQL_TXQ_LIMIT_H	12000
@@ -70,7 +70,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  
 --- a/net/mac80211/ieee80211_i.h
 +++ b/net/mac80211/ieee80211_i.h
-@@ -1351,10 +1351,12 @@ struct ieee80211_local {
+@@ -1360,10 +1360,12 @@ struct ieee80211_local {
  	spinlock_t handle_wake_tx_queue_lock;
  
  	u16 airtime_flags;
@@ -95,7 +95,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  		spin_lock_init(&local->active_txq_lock[i]);
 --- a/net/mac80211/sta_info.c
 +++ b/net/mac80211/sta_info.c
-@@ -2353,13 +2353,28 @@ EXPORT_SYMBOL(ieee80211_sta_recalc_aggre
+@@ -2360,13 +2360,28 @@ EXPORT_SYMBOL(ieee80211_sta_recalc_aggre
  
  void ieee80211_sta_update_pending_airtime(struct ieee80211_local *local,
  					  struct sta_info *sta, u8 ac,
@@ -136,7 +136,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  		spin_unlock_irqrestore(&local->ack_status_lock, flags);
  
  		if (id >= 0) {
-@@ -3982,20 +3982,20 @@ begin:
+@@ -3983,20 +3983,20 @@ begin:
  encap_out:
  	info->control.vif = vif;
  
@@ -167,7 +167,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  	}
  
  	return skb;
-@@ -4047,6 +4047,7 @@ struct ieee80211_txq *ieee80211_next_txq
+@@ -4048,6 +4048,7 @@ struct ieee80211_txq *ieee80211_next_txq
  	struct ieee80211_txq *ret = NULL;
  	struct txq_info *txqi = NULL, *head = NULL;
  	bool found_eligible_txq = false;
@@ -175,7 +175,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  
  	spin_lock_bh(&local->active_txq_lock[ac]);
  
-@@ -4070,26 +4071,26 @@ struct ieee80211_txq *ieee80211_next_txq
+@@ -4071,26 +4072,26 @@ struct ieee80211_txq *ieee80211_next_txq
  	if (!head)
  		head = txqi;
  
@@ -214,7 +214,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  	if (txqi->schedule_round == local->schedule_round[ac])
  		goto out;
  
-@@ -4154,7 +4155,8 @@ bool ieee80211_txq_airtime_check(struct
+@@ -4157,7 +4158,8 @@ bool ieee80211_txq_airtime_check(struct
  		return true;
  
  	if (!txq->sta)
@@ -224,7 +224,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  
  	if (unlikely(txq->tid == IEEE80211_NUM_TIDS))
  		return true;
-@@ -4203,15 +4205,15 @@ bool ieee80211_txq_may_transmit(struct i
+@@ -4206,15 +4208,15 @@ bool ieee80211_txq_may_transmit(struct i
  
  	spin_lock_bh(&local->active_txq_lock[ac]);
  

+ 20 - 20
package/kernel/mac80211/patches/subsys/330-wifi-cfg80211-add-option-for-vif-allowed-radios.patch

@@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
 
 --- a/include/net/cfg80211.h
 +++ b/include/net/cfg80211.h
-@@ -6271,6 +6271,7 @@ enum ieee80211_ap_reg_power {
+@@ -6274,6 +6274,7 @@ enum ieee80211_ap_reg_power {
   *	entered.
   * @links.cac_time_ms: CAC time in ms
   * @valid_links: bitmap describing what elements of @links are valid
@@ -31,7 +31,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
   */
  struct wireless_dev {
  	struct wiphy *wiphy;
-@@ -6383,6 +6384,8 @@ struct wireless_dev {
+@@ -6386,6 +6387,8 @@ struct wireless_dev {
  		unsigned int cac_time_ms;
  	} links[IEEE80211_MLD_MAX_NUM_LINKS];
  	u16 valid_links;
@@ -40,7 +40,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  };
  
  static inline const u8 *wdev_address(struct wireless_dev *wdev)
-@@ -6569,6 +6572,17 @@ bool cfg80211_radio_chandef_valid(const
+@@ -6572,6 +6575,17 @@ bool cfg80211_radio_chandef_valid(const
  				  const struct cfg80211_chan_def *chandef);
  
  /**
@@ -81,7 +81,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  	__NL80211_ATTR_AFTER_LAST,
 --- a/net/wireless/nl80211.c
 +++ b/net/wireless/nl80211.c
-@@ -829,6 +829,7 @@ static const struct nla_policy nl80211_p
+@@ -832,6 +832,7 @@ static const struct nla_policy nl80211_p
  	[NL80211_ATTR_MLO_TTLM_DLINK] = NLA_POLICY_EXACT_LEN(sizeof(u16) * 8),
  	[NL80211_ATTR_MLO_TTLM_ULINK] = NLA_POLICY_EXACT_LEN(sizeof(u16) * 8),
  	[NL80211_ATTR_ASSOC_SPP_AMSDU] = { .type = NLA_FLAG },
@@ -89,7 +89,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  };
  
  /* policy for the key attributes */
-@@ -3996,7 +3997,8 @@ static int nl80211_send_iface(struct sk_
+@@ -4003,7 +4004,8 @@ static int nl80211_send_iface(struct sk_
  	    nla_put_u32(msg, NL80211_ATTR_GENERATION,
  			rdev->devlist_generation ^
  			(cfg80211_rdev_list_generation << 2)) ||
@@ -99,7 +99,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  		goto nla_put_failure;
  
  	if (rdev->ops->get_channel && !wdev->valid_links) {
-@@ -4312,6 +4314,29 @@ static int nl80211_valid_4addr(struct cf
+@@ -4324,6 +4326,29 @@ static int nl80211_valid_4addr(struct cf
  	return -EOPNOTSUPP;
  }
  
@@ -129,7 +129,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  static int nl80211_set_interface(struct sk_buff *skb, struct genl_info *info)
  {
  	struct cfg80211_registered_device *rdev = info->user_ptr[0];
-@@ -4319,6 +4344,8 @@ static int nl80211_set_interface(struct
+@@ -4331,6 +4356,8 @@ static int nl80211_set_interface(struct
  	int err;
  	enum nl80211_iftype otype, ntype;
  	struct net_device *dev = info->user_ptr[1];
@@ -138,7 +138,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  	bool change = false;
  
  	memset(&params, 0, sizeof(params));
-@@ -4332,8 +4359,6 @@ static int nl80211_set_interface(struct
+@@ -4344,8 +4371,6 @@ static int nl80211_set_interface(struct
  	}
  
  	if (info->attrs[NL80211_ATTR_MESH_ID]) {
@@ -147,7 +147,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  		if (ntype != NL80211_IFTYPE_MESH_POINT)
  			return -EINVAL;
  		if (otype != NL80211_IFTYPE_MESH_POINT)
-@@ -4364,6 +4389,12 @@ static int nl80211_set_interface(struct
+@@ -4376,6 +4401,12 @@ static int nl80211_set_interface(struct
  	if (err > 0)
  		change = true;
  
@@ -160,7 +160,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  	if (change)
  		err = cfg80211_change_iface(rdev, dev, ntype, &params);
  	else
-@@ -4372,11 +4403,11 @@ static int nl80211_set_interface(struct
+@@ -4384,11 +4415,11 @@ static int nl80211_set_interface(struct
  	if (!err && params.use_4addr != -1)
  		dev->ieee80211_ptr->use_4addr = params.use_4addr;
  
@@ -175,7 +175,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  
  	return err;
  }
-@@ -4387,6 +4418,7 @@ static int _nl80211_new_interface(struct
+@@ -4399,6 +4430,7 @@ static int _nl80211_new_interface(struct
  	struct vif_params params;
  	struct wireless_dev *wdev;
  	struct sk_buff *msg;
@@ -183,7 +183,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  	int err;
  	enum nl80211_iftype type = NL80211_IFTYPE_UNSPECIFIED;
  
-@@ -4424,6 +4456,10 @@ static int _nl80211_new_interface(struct
+@@ -4436,6 +4468,10 @@ static int _nl80211_new_interface(struct
  	if (err < 0)
  		return err;
  
@@ -194,7 +194,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  	msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
  	if (!msg)
  		return -ENOMEM;
-@@ -4465,6 +4501,9 @@ static int _nl80211_new_interface(struct
+@@ -4477,6 +4513,9 @@ static int _nl80211_new_interface(struct
  		break;
  	}
  
@@ -204,7 +204,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  	if (nl80211_send_iface(msg, info->snd_portid, info->snd_seq, 0,
  			       rdev, wdev, NL80211_CMD_NEW_INTERFACE) < 0) {
  		nlmsg_free(msg);
-@@ -9180,6 +9219,9 @@ static bool cfg80211_off_channel_oper_al
+@@ -9192,6 +9231,9 @@ static bool cfg80211_off_channel_oper_al
  
  	lockdep_assert_wiphy(wdev->wiphy);
  
@@ -214,7 +214,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  	if (!cfg80211_beaconing_iface_active(wdev))
  		return true;
  
-@@ -9392,7 +9434,8 @@ static int nl80211_trigger_scan(struct s
+@@ -9404,7 +9446,8 @@ static int nl80211_trigger_scan(struct s
  			}
  
  			/* ignore disabled channels */
@@ -224,7 +224,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  				continue;
  
  			request->channels[i] = chan;
-@@ -9412,7 +9455,8 @@ static int nl80211_trigger_scan(struct s
+@@ -9424,7 +9467,8 @@ static int nl80211_trigger_scan(struct s
  
  				chan = &wiphy->bands[band]->channels[j];
  
@@ -236,7 +236,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  				request->channels[i] = chan;
 --- a/net/wireless/scan.c
 +++ b/net/wireless/scan.c
-@@ -956,7 +956,8 @@ static int cfg80211_scan_6ghz(struct cfg
+@@ -953,7 +953,8 @@ static int cfg80211_scan_6ghz(struct cfg
  		struct ieee80211_channel *chan =
  			ieee80211_get_channel(&rdev->wiphy, ap->center_freq);
  
@@ -246,7 +246,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  			continue;
  
  		for (i = 0; i < rdev_req->n_channels; i++) {
-@@ -3519,9 +3520,12 @@ int cfg80211_wext_siwscan(struct net_dev
+@@ -3512,9 +3513,12 @@ int cfg80211_wext_siwscan(struct net_dev
  			continue;
  
  		for (j = 0; j < wiphy->bands[band]->n_channels; j++) {
@@ -263,7 +263,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  			/* If we have a wireless request structure and the
 --- a/net/wireless/util.c
 +++ b/net/wireless/util.c
-@@ -2923,3 +2923,32 @@ bool cfg80211_radio_chandef_valid(const
+@@ -2970,3 +2970,32 @@ bool cfg80211_radio_chandef_valid(const
  	return true;
  }
  EXPORT_SYMBOL(cfg80211_radio_chandef_valid);
@@ -298,7 +298,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
 +EXPORT_SYMBOL(cfg80211_wdev_channel_allowed);
 --- a/net/wireless/core.c
 +++ b/net/wireless/core.c
-@@ -1424,6 +1424,8 @@ void cfg80211_init_wdev(struct wireless_
+@@ -1431,6 +1431,8 @@ void cfg80211_init_wdev(struct wireless_
  	/* allow mac80211 to determine the timeout */
  	wdev->ps_timeout = -1;
  

+ 4 - 4
package/kernel/mac80211/patches/subsys/331-wifi-mac80211-use-vif-radio-mask-to-limit-ibss-scan-.patch

@@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
 
 --- a/net/mac80211/scan.c
 +++ b/net/mac80211/scan.c
-@@ -1176,14 +1176,14 @@ int ieee80211_request_ibss_scan(struct i
+@@ -1175,14 +1175,14 @@ int ieee80211_request_ibss_scan(struct i
  				unsigned int n_channels)
  {
  	struct ieee80211_local *local = sdata->local;
@@ -27,7 +27,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  
  	/* fill internal scan request */
  	if (!channels) {
-@@ -1200,7 +1200,9 @@ int ieee80211_request_ibss_scan(struct i
+@@ -1199,7 +1199,9 @@ int ieee80211_request_ibss_scan(struct i
  				    &local->hw.wiphy->bands[band]->channels[i];
  
  				if (tmp_ch->flags & (IEEE80211_CHAN_NO_IR |
@@ -38,7 +38,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  					continue;
  
  				local->int_scan_req->channels[n_ch] = tmp_ch;
-@@ -1209,21 +1211,23 @@ int ieee80211_request_ibss_scan(struct i
+@@ -1208,21 +1210,23 @@ int ieee80211_request_ibss_scan(struct i
  		}
  
  		if (WARN_ON_ONCE(n_ch == 0))
@@ -66,7 +66,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  
  		local->int_scan_req->n_channels = n_ch;
  	}
-@@ -1233,9 +1237,7 @@ int ieee80211_request_ibss_scan(struct i
+@@ -1232,9 +1236,7 @@ int ieee80211_request_ibss_scan(struct i
  	memcpy(local->int_scan_req->ssids[0].ssid, ssid, IEEE80211_MAX_SSID_LEN);
  	local->int_scan_req->ssids[0].ssid_len = ssid_len;
  

+ 1 - 1
package/kernel/mac80211/patches/subsys/332-wifi-mac80211-use-vif-radio-mask-to-limit-chanctx-an.patch

@@ -39,7 +39,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  			new_ctx = ieee80211_new_chanctx(local, chanreq, mode,
  							false, radio_idx);
  		else
-@@ -1883,7 +1888,9 @@ int _ieee80211_link_use_channel(struct i
+@@ -1884,7 +1889,9 @@ int _ieee80211_link_use_channel(struct i
  	/* Note: context is now reserved */
  	if (ctx)
  		reserved = true;

+ 4 - 4
package/kernel/mac80211/patches/subsys/334-wifi-cfg80211-pass-net_device-to-.set_monitor_channel.patch

@@ -49,7 +49,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  
 --- a/include/net/cfg80211.h
 +++ b/include/net/cfg80211.h
-@@ -4700,6 +4700,7 @@ struct cfg80211_ops {
+@@ -4703,6 +4703,7 @@ struct cfg80211_ops {
  					     struct ieee80211_channel *chan);
  
  	int	(*set_monitor_channel)(struct wiphy *wiphy,
@@ -69,7 +69,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  	struct ieee80211_local *local = wiphy_priv(wiphy);
 --- a/net/wireless/chan.c
 +++ b/net/wireless/chan.c
-@@ -1673,6 +1673,7 @@ bool cfg80211_reg_check_beaconing(struct
+@@ -1679,6 +1679,7 @@ bool cfg80211_reg_check_beaconing(struct
  EXPORT_SYMBOL(cfg80211_reg_check_beaconing);
  
  int cfg80211_set_monitor_channel(struct cfg80211_registered_device *rdev,
@@ -77,7 +77,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  				 struct cfg80211_chan_def *chandef)
  {
  	if (!rdev->ops->set_monitor_channel)
-@@ -1680,7 +1681,7 @@ int cfg80211_set_monitor_channel(struct
+@@ -1686,7 +1687,7 @@ int cfg80211_set_monitor_channel(struct
  	if (!cfg80211_has_monitors_only(rdev))
  		return -EBUSY;
  
@@ -98,7 +98,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  int ieee80211_get_ratemask(struct ieee80211_supported_band *sband,
 --- a/net/wireless/nl80211.c
 +++ b/net/wireless/nl80211.c
-@@ -3562,7 +3562,7 @@ static int __nl80211_set_channel(struct
+@@ -3569,7 +3569,7 @@ static int __nl80211_set_channel(struct
  	case NL80211_IFTYPE_MESH_POINT:
  		return cfg80211_set_mesh_channel(rdev, wdev, &chandef);
  	case NL80211_IFTYPE_MONITOR:

+ 9 - 9
package/kernel/mac80211/patches/subsys/335-wifi-mac80211-add-flag-to-opt-out-of-virtual-monitor.patch

@@ -25,7 +25,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
   * @IEEE80211_HW_NO_AUTO_VIF: The driver would like for no wlanX to
   *	be created.  It is expected user-space will create vifs as
   *	desired (and thus have them named as desired).
-@@ -2838,6 +2843,7 @@ enum ieee80211_hw_flags {
+@@ -2843,6 +2848,7 @@ enum ieee80211_hw_flags {
  	IEEE80211_HW_SUPPORTS_DYNAMIC_PS,
  	IEEE80211_HW_MFP_CAPABLE,
  	IEEE80211_HW_WANT_MONITOR_VIF,
@@ -217,7 +217,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  	}
  
  	/* Regardless of eth_mac_addr() return we still want to add the
-@@ -699,9 +704,11 @@ static void ieee80211_do_stop(struct iee
+@@ -705,9 +710,11 @@ static void ieee80211_do_stop(struct iee
  		ieee80211_recalc_idle(local);
  		ieee80211_recalc_offload(local);
  
@@ -230,7 +230,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  		fallthrough;
  	default:
  		if (!going_down)
-@@ -1131,7 +1138,8 @@ int ieee80211_add_virtual_monitor(struct
+@@ -1140,7 +1147,8 @@ int ieee80211_add_virtual_monitor(struct
  	ASSERT_RTNL();
  	lockdep_assert_wiphy(local->hw.wiphy);
  
@@ -240,7 +240,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  		return 0;
  
  	sdata = kzalloc(sizeof(*sdata) + local->hw.vif_data_size, GFP_KERNEL);
-@@ -1193,6 +1201,9 @@ void ieee80211_del_virtual_monitor(struc
+@@ -1202,6 +1210,9 @@ void ieee80211_del_virtual_monitor(struc
  {
  	struct ieee80211_sub_if_data *sdata;
  
@@ -250,7 +250,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  	ASSERT_RTNL();
  	lockdep_assert_wiphy(local->hw.wiphy);
  
-@@ -1328,7 +1339,8 @@ int ieee80211_do_open(struct wireless_de
+@@ -1345,7 +1356,8 @@ int ieee80211_do_open(struct wireless_de
  			break;
  		}
  
@@ -284,7 +284,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  			vif = &sdata->vif;
  			break;
  		}
-@@ -3952,7 +3953,8 @@ begin:
+@@ -3953,7 +3954,8 @@ begin:
  
  	switch (tx.sdata->vif.type) {
  	case NL80211_IFTYPE_MONITOR:
@@ -296,7 +296,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  		}
 --- a/net/mac80211/util.c
 +++ b/net/mac80211/util.c
-@@ -739,7 +739,8 @@ static void __iterate_interfaces(struct
+@@ -740,7 +740,8 @@ static void __iterate_interfaces(struct
  				lockdep_is_held(&local->hw.wiphy->mtx)) {
  		switch (sdata->vif.type) {
  		case NL80211_IFTYPE_MONITOR:
@@ -306,7 +306,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  				continue;
  			break;
  		case NL80211_IFTYPE_AP_VLAN:
-@@ -1856,8 +1857,10 @@ int ieee80211_reconfig(struct ieee80211_
+@@ -1860,8 +1861,10 @@ int ieee80211_reconfig(struct ieee80211_
  	}
  
  	list_for_each_entry(sdata, &local->interfaces, list) {
@@ -318,7 +318,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  		    ieee80211_sdata_running(sdata)) {
  			res = drv_add_interface(local, sdata);
  			if (WARN_ON(res))
-@@ -1870,11 +1873,14 @@ int ieee80211_reconfig(struct ieee80211_
+@@ -1874,11 +1877,14 @@ int ieee80211_reconfig(struct ieee80211_
  	 */
  	if (res) {
  		list_for_each_entry_continue_reverse(sdata, &local->interfaces,

+ 5 - 5
package/kernel/mac80211/patches/subsys/336-wifi-cfg80211-add-monitor-SKIP_TX-flag.patch

@@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
 
 --- a/include/net/cfg80211.h
 +++ b/include/net/cfg80211.h
-@@ -2272,6 +2272,7 @@ static inline int cfg80211_get_station(s
+@@ -2275,6 +2275,7 @@ static inline int cfg80211_get_station(s
   * @MONITOR_FLAG_OTHER_BSS: disable BSSID filtering
   * @MONITOR_FLAG_COOK_FRAMES: report frames after processing
   * @MONITOR_FLAG_ACTIVE: active monitor, ACKs frames on its MAC address
@@ -18,7 +18,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
   */
  enum monitor_flags {
  	MONITOR_FLAG_CHANGED		= BIT(__NL80211_MNTR_FLAG_INVALID),
-@@ -2281,6 +2282,7 @@ enum monitor_flags {
+@@ -2284,6 +2285,7 @@ enum monitor_flags {
  	MONITOR_FLAG_OTHER_BSS		= BIT(NL80211_MNTR_FLAG_OTHER_BSS),
  	MONITOR_FLAG_COOK_FRAMES	= BIT(NL80211_MNTR_FLAG_COOK_FRAMES),
  	MONITOR_FLAG_ACTIVE		= BIT(NL80211_MNTR_FLAG_ACTIVE),
@@ -28,7 +28,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  /**
 --- a/include/uapi/linux/nl80211.h
 +++ b/include/uapi/linux/nl80211.h
-@@ -4703,6 +4703,7 @@ enum nl80211_survey_info {
+@@ -4709,6 +4709,7 @@ enum nl80211_survey_info {
   *	overrides all other flags.
   * @NL80211_MNTR_FLAG_ACTIVE: use the configured MAC address
   *	and ACK incoming unicast packets.
@@ -36,7 +36,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
   *
   * @__NL80211_MNTR_FLAG_AFTER_LAST: internal use
   * @NL80211_MNTR_FLAG_MAX: highest possible monitor flag
-@@ -4715,6 +4716,7 @@ enum nl80211_mntr_flags {
+@@ -4721,6 +4722,7 @@ enum nl80211_mntr_flags {
  	NL80211_MNTR_FLAG_OTHER_BSS,
  	NL80211_MNTR_FLAG_COOK_FRAMES,
  	NL80211_MNTR_FLAG_ACTIVE,
@@ -46,7 +46,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  	__NL80211_MNTR_FLAG_AFTER_LAST,
 --- a/net/wireless/nl80211.c
 +++ b/net/wireless/nl80211.c
-@@ -4201,6 +4201,7 @@ static const struct nla_policy mntr_flag
+@@ -4208,6 +4208,7 @@ static const struct nla_policy mntr_flag
  	[NL80211_MNTR_FLAG_OTHER_BSS] = { .type = NLA_FLAG },
  	[NL80211_MNTR_FLAG_COOK_FRAMES] = { .type = NLA_FLAG },
  	[NL80211_MNTR_FLAG_ACTIVE] = { .type = NLA_FLAG },

+ 2 - 2
package/kernel/mac80211/patches/subsys/337-wifi-mac80211-add-support-for-the-monitor-SKIP_TX-fl.patch

@@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
 
 --- a/net/mac80211/ieee80211_i.h
 +++ b/net/mac80211/ieee80211_i.h
-@@ -1373,7 +1373,7 @@ struct ieee80211_local {
+@@ -1382,7 +1382,7 @@ struct ieee80211_local {
  	spinlock_t queue_stop_reason_lock;
  
  	int open_count;
@@ -22,7 +22,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  	    fif_probe_req;
 --- a/net/mac80211/iface.c
 +++ b/net/mac80211/iface.c
-@@ -1094,6 +1094,8 @@ void ieee80211_adjust_monitor_flags(stru
+@@ -1103,6 +1103,8 @@ void ieee80211_adjust_monitor_flags(stru
  	ADJUST(CONTROL, control);
  	ADJUST(CONTROL, pspoll);
  	ADJUST(OTHER_BSS, other_bss);

+ 5 - 5
package/kernel/mac80211/patches/subsys/340-wifi-cfg80211-report-per-wiphy-radio-antenna-mask.patch

@@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
 
 --- a/include/net/cfg80211.h
 +++ b/include/net/cfg80211.h
-@@ -5443,6 +5443,8 @@ struct wiphy_radio_freq_range {
+@@ -5446,6 +5446,8 @@ struct wiphy_radio_freq_range {
   * @iface_combinations: Valid interface combinations array, should not
   *	list single interface types.
   * @n_iface_combinations: number of entries in @iface_combinations array.
@@ -20,7 +20,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
   */
  struct wiphy_radio {
  	const struct wiphy_radio_freq_range *freq_range;
-@@ -5450,6 +5452,8 @@ struct wiphy_radio {
+@@ -5453,6 +5455,8 @@ struct wiphy_radio {
  
  	const struct ieee80211_iface_combination *iface_combinations;
  	int n_iface_combinations;
@@ -31,7 +31,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  #define CFG80211_HW_TIMESTAMP_ALL_PEERS	0xffff
 --- a/include/uapi/linux/nl80211.h
 +++ b/include/uapi/linux/nl80211.h
-@@ -8038,6 +8038,8 @@ enum nl80211_ap_settings_flags {
+@@ -8044,6 +8044,8 @@ enum nl80211_ap_settings_flags {
   * @NL80211_WIPHY_RADIO_ATTR_INTERFACE_COMBINATION: Supported interface
   *	combination for this radio. Attribute may be present multiple times
   *	and contains attributes defined in &enum nl80211_if_combination_attrs.
@@ -40,7 +40,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
   *
   * @__NL80211_WIPHY_RADIO_ATTR_LAST: Internal
   * @NL80211_WIPHY_RADIO_ATTR_MAX: Highest attribute
-@@ -8048,6 +8050,7 @@ enum nl80211_wiphy_radio_attrs {
+@@ -8054,6 +8056,7 @@ enum nl80211_wiphy_radio_attrs {
  	NL80211_WIPHY_RADIO_ATTR_INDEX,
  	NL80211_WIPHY_RADIO_ATTR_FREQ_RANGE,
  	NL80211_WIPHY_RADIO_ATTR_INTERFACE_COMBINATION,
@@ -50,7 +50,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  	__NL80211_WIPHY_RADIO_ATTR_LAST,
 --- a/net/wireless/nl80211.c
 +++ b/net/wireless/nl80211.c
-@@ -2431,6 +2431,11 @@ static int nl80211_put_radio(struct wiph
+@@ -2438,6 +2438,11 @@ static int nl80211_put_radio(struct wiph
  	if (nla_put_u32(msg, NL80211_WIPHY_RADIO_ATTR_INDEX, idx))
  		goto nla_put_failure;
  

+ 1 - 1
package/kernel/mac80211/patches/subsys/341-wifi-mac80211-fix-vif-addr-when-switching-from-monit.patch

@@ -52,7 +52,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  	}
  
  	/* Regardless of eth_mac_addr() return we still want to add the
-@@ -1324,6 +1319,8 @@ int ieee80211_do_open(struct wireless_de
+@@ -1336,6 +1331,8 @@ int ieee80211_do_open(struct wireless_de
  		}
  	}
  

+ 8 - 16
package/kernel/mac80211/patches/subsys/350-wifi-mac80211-Add-link-iteration-macro-for-link-data.patch

@@ -1,7 +1,8 @@
+From 4e1916dec9850cd49dd5792200ab649061cbedc1 Mon Sep 17 00:00:00 2001
 From: Maharaja Kennadyrajan <[email protected]>
 Date: Fri, 18 Jul 2025 11:38:35 +0530
-Subject: [PATCH] wifi: mac80211: Add link iteration macro for link data
- with rcu_dereference
+Subject: [PATCH] wifi: mac80211: Add link iteration macro for link data with
+ rcu_dereference
 
 Currently, the existing macro for_each_link_data() uses sdata_dereference()
 which requires the wiphy lock. This lock cannot be used in atomic or RCU
@@ -19,24 +20,15 @@ Signed-off-by: Maharaja Kennadyrajan <[email protected]>
 Link: https://patch.msgid.link/[email protected]
 Signed-off-by: Johannes Berg <[email protected]>
 ---
+ net/mac80211/ieee80211_i.h | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
 
 --- a/net/mac80211/ieee80211_i.h
 +++ b/net/mac80211/ieee80211_i.h
-@@ -1211,6 +1211,30 @@ struct ieee80211_sub_if_data *vif_to_sda
- 	if ((_link = wiphy_dereference((local)->hw.wiphy,		\
- 				       ___sdata->link[___link_id])))
+@@ -1220,6 +1220,19 @@ struct ieee80211_sub_if_data *vif_to_sda
+ 		    ((__link) = sdata_dereference((__sdata)->link[__link_id],	\
+ 						  (__sdata))))
  
-+#define for_each_link_data(sdata, __link)					\
-+	/* outer loop just to define the variable ... */			\
-+	for (struct ieee80211_sub_if_data *__sdata = (sdata); __sdata;		\
-+		__sdata = NULL /* always stop */)				\
-+	for (int __link_id = 0;							\
-+	     __link_id < ARRAY_SIZE((__sdata)->link); __link_id++)		\
-+		if ((!(__sdata)->vif.valid_links ||				\
-+		     (__sdata)->vif.valid_links & BIT(__link_id)) &&		\
-+		    ((__link) = sdata_dereference((__sdata)->link[__link_id],	\
-+						  (__sdata))))
-+
 +/*
 + * for_each_link_data_rcu should be used under RCU read lock.
 + */

+ 2 - 2
package/kernel/mac80211/patches/subsys/351-wifi-mac80211-extend-beacon-monitoring-for-MLO.patch

@@ -23,7 +23,7 @@ Signed-off-by: Johannes Berg <[email protected]>
 
 --- a/net/mac80211/mlme.c
 +++ b/net/mac80211/mlme.c
-@@ -2159,6 +2159,21 @@ static void ieee80211_csa_switch_work(st
+@@ -2167,6 +2167,21 @@ static void ieee80211_csa_switch_work(st
  		}
  	}
  
@@ -45,7 +45,7 @@ Signed-off-by: Johannes Berg <[email protected]>
  	ieee80211_sta_reset_beacon_monitor(sdata);
  	ieee80211_sta_reset_conn_monitor(sdata);
  }
-@@ -7863,6 +7878,29 @@ void ieee80211_sta_work(struct ieee80211
+@@ -7892,6 +7907,29 @@ void ieee80211_sta_work(struct ieee80211
  	}
  }
  

+ 3 - 3
package/kernel/mac80211/patches/subsys/352-wifi-mac80211-extend-connection-monitoring-for-MLO.patch

@@ -25,7 +25,7 @@ Signed-off-by: Johannes Berg <[email protected]>
 
 --- a/net/mac80211/mlme.c
 +++ b/net/mac80211/mlme.c
-@@ -3831,9 +3831,6 @@ static void ieee80211_mgd_probe_ap_send(
+@@ -3841,9 +3841,6 @@ static void ieee80211_mgd_probe_ap_send(
  
  	lockdep_assert_wiphy(sdata->local->hw.wiphy);
  
@@ -35,7 +35,7 @@ Signed-off-by: Johannes Berg <[email protected]>
  	/*
  	 * Try sending broadcast probe requests for the last three
  	 * probe requests after the first ones failed since some
-@@ -3879,9 +3876,6 @@ static void ieee80211_mgd_probe_ap(struc
+@@ -3889,9 +3886,6 @@ static void ieee80211_mgd_probe_ap(struc
  
  	lockdep_assert_wiphy(sdata->local->hw.wiphy);
  
@@ -45,7 +45,7 @@ Signed-off-by: Johannes Berg <[email protected]>
  	if (!ieee80211_sdata_running(sdata))
  		return;
  
-@@ -7921,36 +7915,73 @@ static void ieee80211_sta_bcn_mon_timer(
+@@ -7950,36 +7944,73 @@ static void ieee80211_sta_bcn_mon_timer(
  			 &sdata->u.mgd.beacon_connection_loss_work);
  }
  

+ 0 - 56
package/kernel/mac80211/patches/subsys/400-v6.16-wifi-mac80211-do-not-offer-a-mesh-path-if-forwarding.patch

@@ -1,56 +0,0 @@
-From 0d47666f48a084363ee54f389bec2865de4934b8 Mon Sep 17 00:00:00 2001
-From: Benjamin Berg <[email protected]>
-Date: Wed, 30 Apr 2025 20:25:38 +0200
-Subject: [PATCH] wifi: mac80211: do not offer a mesh path if forwarding is
- disabled
-
-When processing a PREQ the code would always check whether we have a
-mesh path locally and reply accordingly. However, when forwarding is
-disabled then we should not reply with this information as we will not
-forward data packets down that path.
-
-Move the check for dot11MeshForwarding up in the function and skip the
-mesh path lookup in that case. In the else block, set forward to false
-so that the rest of the function becomes a no-op and the
-dot11MeshForwarding check does not need to be duplicated.
-
-This explains an effect observed in the Freifunk community where mesh
-forwarding is disabled. In that case a mesh with three STAs and only bad
-links in between them, individual STAs would occionally have indirect
-mpath entries. This should not have happened.
-
-Signed-off-by: Benjamin Berg <[email protected]>
-Reviewed-by: Rouven Czerwinski <[email protected]>
----
- net/mac80211/mesh_hwmp.c | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
---- a/net/mac80211/mesh_hwmp.c
-+++ b/net/mac80211/mesh_hwmp.c
-@@ -630,7 +630,7 @@ static void hwmp_preq_frame_process(stru
- 				mesh_path_add_gate(mpath);
- 		}
- 		rcu_read_unlock();
--	} else {
-+	} else if (ifmsh->mshcfg.dot11MeshForwarding) {
- 		rcu_read_lock();
- 		mpath = mesh_path_lookup(sdata, target_addr);
- 		if (mpath) {
-@@ -648,6 +648,8 @@ static void hwmp_preq_frame_process(stru
- 			}
- 		}
- 		rcu_read_unlock();
-+	} else {
-+		forward = false;
- 	}
- 
- 	if (reply) {
-@@ -665,7 +667,7 @@ static void hwmp_preq_frame_process(stru
- 		}
- 	}
- 
--	if (forward && ifmsh->mshcfg.dot11MeshForwarding) {
-+	if (forward) {
- 		u32 preq_id;
- 		u8 hopcount;
-