Kaynağa Gözat

mac80211: update to version 6.14.11

Update to version 6.14.11

Signed-off-by: Mieczyslaw Nalewaj <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
Mieczyslaw Nalewaj 7 ay önce
ebeveyn
işleme
88f4c32060
100 değiştirilmiş dosya ile 1917 ekleme ve 4662 silme
  1. 3 3
      package/kernel/mac80211/Makefile
  2. 1 1
      package/kernel/mac80211/patches/ath/402-ath_regd_optional.patch
  3. 2 2
      package/kernel/mac80211/patches/ath/404-regd_no_assoc_hints.patch
  4. 1 1
      package/kernel/mac80211/patches/ath10k/080-ath10k_thermal_config.patch
  5. 2 2
      package/kernel/mac80211/patches/ath10k/930-ath10k_add_tpt_led_trigger.patch
  6. 1 1
      package/kernel/mac80211/patches/ath10k/975-ath10k-use-tpt-trigger-by-default.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. 1 1
      package/kernel/mac80211/patches/ath11k/0906-wifi-ath11k-disable-coldboot-for-ipq6018.patch
  11. 1 1
      package/kernel/mac80211/patches/ath11k/0907-wifi-ath11k-disable-coldboot-calibration-for-ipq5018.patch
  12. 5 5
      package/kernel/mac80211/patches/ath11k/201-wifi-ath11k-Support-setting-bdf-addr-and-caldb-addr-.patch
  13. 1 1
      package/kernel/mac80211/patches/ath11k/900-ath11k-control-thermal-support-via-symbol.patch
  14. 2 2
      package/kernel/mac80211/patches/ath11k/903-ath11k-support-setting-FW-memory-mode-via-DT.patch
  15. 14 10
      package/kernel/mac80211/patches/ath11k/905-ath11k-remove-intersection-support-for-regulatory-ru.patch
  16. 4 4
      package/kernel/mac80211/patches/ath11k/920-wifi-ath11k-add-hw-params-for-QCN6122.patch
  17. 2 2
      package/kernel/mac80211/patches/ath11k/921-wifi-ath11k-add-hal-regs-for-QCN6122.patch
  18. 2 2
      package/kernel/mac80211/patches/ath11k/922-wifi-ath11k-add-hw-ring-mask-for-QCN6122.patch
  19. 1 1
      package/kernel/mac80211/patches/ath11k/923-wifi-ath11k-update-hif_and-pci_ops-for-QCN6122.patch
  20. 1 1
      package/kernel/mac80211/patches/ath11k/924-wifi-ath11k-add-multipd-support-for-QCN6122.patch
  21. 2 2
      package/kernel/mac80211/patches/ath11k/925-wifi-ath11k-add-QCN6122-device-support.patch
  22. 1 1
      package/kernel/mac80211/patches/ath11k/931-wifi-ath11k-Support-to-assign-m3-dump-memory.patch
  23. 6 6
      package/kernel/mac80211/patches/ath11k/932-wifi-ath11k-poll-reo-status-ipq5018.patch
  24. 1 1
      package/kernel/mac80211/patches/ath11k/940-ath11k-Revert-clear-the-keys-properly-when-DISABLE_K.patch
  25. 71 71
      package/kernel/mac80211/patches/ath12k/001-wifi-ath12k-add-11d-scan-offload-support-and-handle-country-code-for-WCN7850.patch
  26. 0 67
      package/kernel/mac80211/patches/ath12k/002-wifi-ath12k-Fetch-regdb.bin-file-from-board-2.bin.patch
  27. 53 0
      package/kernel/mac80211/patches/ath12k/003-1-v6.16-wifi-ath12k-Pass-correct-values-of-center-freq1-and-.patch
  28. 43 0
      package/kernel/mac80211/patches/ath12k/003-2-v6.16-wifi-ath12k-Pass-correct-values-of-center-freq1-and-.patch
  29. 0 140
      package/kernel/mac80211/patches/ath12k/003-wifi-ath12k-fix-handling-of-6-GHz-rules.patch
  30. 1 1
      package/kernel/mac80211/patches/ath12k/100-ath12k-prevent-ltssm-startup-crash.patch
  31. 2 2
      package/kernel/mac80211/patches/ath12k/102-wifi-ath12k-limit-WMI_SCAN_CHAN_LIST_CMDID-arg.patch
  32. 1 1
      package/kernel/mac80211/patches/ath12k/103-wifi-ath12k-fix-5GHz-operation-on-wideband-QCN.patch
  33. 115 100
      package/kernel/mac80211/patches/ath12k/104-1-wifi-ath12k-push-HE-MU-MIMO-params-to-hardware.patch
  34. 82 62
      package/kernel/mac80211/patches/ath12k/104-2-wifi-ath12k-push-EHT-MU-MIMO-params-to-hardware.patch
  35. 61 50
      package/kernel/mac80211/patches/ath12k/104-3-wifi-ath12k-move-HE-MCS-mapper-to-a-separate-function.patch
  36. 59 48
      package/kernel/mac80211/patches/ath12k/104-4-wifi-ath12k-generate-rx-and-tx-mcs-maps-for-supported-HE-mcs.patch
  37. 59 48
      package/kernel/mac80211/patches/ath12k/104-5-wifi-ath12k-fix-TX-and-RX-MCS-rate-configurations-in-HE-mode.patch
  38. 310 235
      package/kernel/mac80211/patches/ath12k/104-6-wifi-ath12k-add-support-for-setting-fixed-HE-rate-GI-LTF.patch
  39. 94 86
      package/kernel/mac80211/patches/ath12k/104-7-wifi-ath12k-clean-up-80P80-support.patch
  40. 121 127
      package/kernel/mac80211/patches/ath12k/104-8-wifi-ath12k-add-support-for-160-MHz-bandwidth.patch
  41. 65 54
      package/kernel/mac80211/patches/ath12k/104-9-wifi-ath12k-add-extended-NSS-bandwidth-support-for-160-MHz.patch
  42. 82 0
      package/kernel/mac80211/patches/ath12k/200-Revert-wifi-ath12k-convert-tasklet-to-BH-workqueue-f.patch
  43. 4 4
      package/kernel/mac80211/patches/ath9k/341-wifi-ath9k-obtain-system-gpios.patch
  44. 2 2
      package/kernel/mac80211/patches/ath9k/356-Revert-ath9k-interpret-requested-txpower-in-EIRP-dom.patch
  45. 1 1
      package/kernel/mac80211/patches/ath9k/365-ath9k-adjust-tx-power-reduction-for-US-regulatory-do.patch
  46. 1 1
      package/kernel/mac80211/patches/ath9k/401-ath9k_blink_default.patch
  47. 1 1
      package/kernel/mac80211/patches/ath9k/410-ath9k_allow_adhoc_and_ap.patch
  48. 2 2
      package/kernel/mac80211/patches/ath9k/450-ath9k-enabled-MFP-capability-unconditionally.patch
  49. 1 1
      package/kernel/mac80211/patches/ath9k/500-ath9k_eeprom_debugfs.patch
  50. 1 1
      package/kernel/mac80211/patches/ath9k/501-ath9k_ahb_init.patch
  51. 2 2
      package/kernel/mac80211/patches/ath9k/512-ath9k_channelbw_debugfs.patch
  52. 3 3
      package/kernel/mac80211/patches/ath9k/530-ath9k_extra_leds.patch
  53. 4 4
      package/kernel/mac80211/patches/ath9k/542-ath9k_debugfs_diag.patch
  54. 3 3
      package/kernel/mac80211/patches/ath9k/543-ath9k_entropy_from_adc.patch
  55. 1 1
      package/kernel/mac80211/patches/ath9k/544-ath9k-ar933x-usb-hang-workaround.patch
  56. 1 1
      package/kernel/mac80211/patches/ath9k/548-ath9k_enable_gpio_chip.patch
  57. 7 7
      package/kernel/mac80211/patches/ath9k/550-ath9k-of.patch
  58. 2 2
      package/kernel/mac80211/patches/ath9k/551-ath9k_ubnt_uap_plus_hsr.patch
  59. 61 29
      package/kernel/mac80211/patches/ath9k/552-ath9k-ahb_of.patch
  60. 1 1
      package/kernel/mac80211/patches/brcm/860-brcmfmac-workaround-bug-with-some-inconsistent-BSSes.patch
  61. 7 7
      package/kernel/mac80211/patches/brcm/861-brcmfmac-add-in-driver-tables-with-country-codes.patch
  62. 1 1
      package/kernel/mac80211/patches/brcm/870-02-rpi-6.12-brcmfmac-Prefer-a-ccode-from-OTP-over-nvram-file.patch
  63. 1 1
      package/kernel/mac80211/patches/brcm/870-03-rpi-6.12-brcmfmac-Increase-power-saving-delay-to-2s.patch
  64. 8 8
      package/kernel/mac80211/patches/brcm/870-04-rpi-6.12-brcmfmac-non-upstream-support-DS1-exit-firmware-re-download.patch
  65. 1 1
      package/kernel/mac80211/patches/brcm/870-05-rpi-6.12-brcmfmac-Fix-interoperating-DPP-and-other-encryption.patch
  66. 3 3
      package/kernel/mac80211/patches/brcm/871-brcmfmac-disable-dump_survey-on-bcm2835.patch
  67. 1 1
      package/kernel/mac80211/patches/build/100-backports-drop-QRTR-and-MHI.patch
  68. 0 32
      package/kernel/mac80211/patches/build/110-backport-include-fix-linux-acpi_amd_wbrf.h-inclusion.patch
  69. 3 3
      package/kernel/mac80211/patches/build/210-wireless_netns_local_backport.patch
  70. 1 1
      package/kernel/mac80211/patches/build/220-brcmfmac_usb_driver_backport.patch
  71. 2 2
      package/kernel/mac80211/patches/build/230-fix-init_vqs-build-error-on-kernel-6.6.patch
  72. 14 0
      package/kernel/mac80211/patches/build/240-realtek-rtw88-BH-workqueue.patch
  73. 20 0
      package/kernel/mac80211/patches/build/360-change-read_new-to-read.patch
  74. 252 0
      package/kernel/mac80211/patches/build/400-restore-old-debugfs_fops.patch
  75. 210 0
      package/kernel/mac80211/patches/build/410-mac80211-convert-short-fops-to-debugfs-files.patch
  76. 1 1
      package/kernel/mac80211/patches/mwl/950-mwifiex-Print-stringified-name-of-command-in-error-l.patch
  77. 1 1
      package/kernel/mac80211/patches/rt2x00/602-01-wifi-rt2x00-Add-support-for-loading-EEPROM-from-user.patch
  78. 5 4
      package/kernel/mac80211/patches/rt2x00/609-rt2x00-make-wmac-loadable-via-OF-on-rt288x-305x-SoC.patch
  79. 1 1
      package/kernel/mac80211/patches/rt2x00/610-rt2x00-change-led-polarity-from-OF.patch
  80. 3 3
      package/kernel/mac80211/patches/rt2x00/620-01-rt2x00-respect-rt2800-hardware-TX-queue-index.patch
  81. 2 2
      package/kernel/mac80211/patches/rt2x00/621-01-rt2x00-always-calibrate-MT7620-when-switching-channe.patch
  82. 0 34
      package/kernel/mac80211/patches/rt2x00/621-04-rt2x00-fix-register-operation-on-RXIQ-calibration.patch
  83. 1 1
      package/kernel/mac80211/patches/rt2x00/622-01-rt2x00-fix-RFCSR-register-init-values-for-RT5592.patch
  84. 2 2
      package/kernel/mac80211/patches/rt2x00/994-rt2x00-import-support-for-external-LNA-on-MT7620.patch
  85. 5 5
      package/kernel/mac80211/patches/rt2x00/996-rt2x00-mt7620-differentiate-based-on-SoC-CHIP_VER.patch
  86. 0 42
      package/kernel/mac80211/patches/rt2x00/997-rt2x00-change-remove-to-remove_new.patch
  87. 0 374
      package/kernel/mac80211/patches/rtl/017-v6.13-wifi-rtw88-Constify-some-arrays-and-structs.patch
  88. 0 560
      package/kernel/mac80211/patches/rtl/019-v6.13-wifi-rtw88-Parse-the-RX-descriptor-with-a-single-fun.patch
  89. 0 34
      package/kernel/mac80211/patches/rtl/022-v6.13-wifi-rtw88-Refactor-looping-in-rtw_phy_store_tx_powe.patch
  90. 0 39
      package/kernel/mac80211/patches/rtl/023-v6.13-wifi-rtw88-Report-the-signal-strength-only-if-it-s-k.patch
  91. 0 490
      package/kernel/mac80211/patches/rtl/024-v6.13-wifi-rtw88-Add-some-definitions-for-RTL8821AU-RTL881.patch
  92. 0 93
      package/kernel/mac80211/patches/rtl/025-v6.13-wifi-rtw88-Dump-the-HW-features-only-for-some-chips.patch
  93. 0 175
      package/kernel/mac80211/patches/rtl/026-v6.13-wifi-rtw88-Allow-different-C2H-RA-report-sizes.patch
  94. 0 165
      package/kernel/mac80211/patches/rtl/027-v6.13-wifi-rtw88-Extend-the-init-table-parsing-for-RTL8812.patch
  95. 0 58
      package/kernel/mac80211/patches/rtl/028-v6.13-wifi-rtw88-Allow-rtw_chip_info.ltecoex_addr-to-be-NU.patch
  96. 0 272
      package/kernel/mac80211/patches/rtl/029-v6.13-wifi-rtw88-Let-each-driver-control-the-power-on-off-.patch
  97. 0 194
      package/kernel/mac80211/patches/rtl/030-v6.13-wifi-rtw88-Enable-data-rate-fallback-for-older-chips.patch
  98. 0 85
      package/kernel/mac80211/patches/rtl/031-v6.13-wifi-rtw88-Make-txagc_remnant_ofdm-an-array.patch
  99. 0 115
      package/kernel/mac80211/patches/rtl/032-v6.13-wifi-rtw88-Support-TX-page-sizes-bigger-than-128.patch
  100. 0 297
      package/kernel/mac80211/patches/rtl/033-v6.13-wifi-rtw88-Move-pwr_track_tbl-to-struct-rtw_rfe_def.patch

+ 3 - 3
package/kernel/mac80211/Makefile

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

+ 1 - 1
package/kernel/mac80211/patches/ath/402-ath_regd_optional.patch

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

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

@@ -1,6 +1,6 @@
 --- a/net/wireless/reg.c
 --- a/net/wireless/reg.c
 +++ b/net/wireless/reg.c
 +++ b/net/wireless/reg.c
-@@ -3364,6 +3364,8 @@ void regulatory_hint_country_ie(struct w
+@@ -3365,6 +3365,8 @@ void regulatory_hint_country_ie(struct w
  	enum environment_cap env = ENVIRON_ANY;
  	enum environment_cap env = ENVIRON_ANY;
  	struct regulatory_request *request = NULL, *lr;
  	struct regulatory_request *request = NULL, *lr;
  
  
@@ -9,7 +9,7 @@
  	/* IE len must be evenly divisible by 2 */
  	/* IE len must be evenly divisible by 2 */
  	if (country_ie_len & 0x01)
  	if (country_ie_len & 0x01)
  		return;
  		return;
-@@ -3615,6 +3617,7 @@ static bool is_wiphy_all_set_reg_flag(en
+@@ -3614,6 +3616,7 @@ static bool is_wiphy_all_set_reg_flag(en
  
  
  void regulatory_hint_disconnect(void)
  void regulatory_hint_disconnect(void)
  {
  {

+ 1 - 1
package/kernel/mac80211/patches/ath10k/080-ath10k_thermal_config.patch

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

+ 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
 --- a/drivers/net/wireless/ath/ath10k/mac.c
 +++ b/drivers/net/wireless/ath/ath10k/mac.c
 +++ b/drivers/net/wireless/ath/ath10k/mac.c
-@@ -9920,6 +9920,21 @@ static int ath10k_mac_init_rd(struct ath
+@@ -9934,6 +9934,21 @@ static int ath10k_mac_init_rd(struct ath
  	return 0;
  	return 0;
  }
  }
  
  
@@ -22,7 +22,7 @@
  int ath10k_mac_register(struct ath10k *ar)
  int ath10k_mac_register(struct ath10k *ar)
  {
  {
  	static const u32 cipher_suites[] = {
  	static const u32 cipher_suites[] = {
-@@ -10282,6 +10297,12 @@ int ath10k_mac_register(struct ath10k *a
+@@ -10296,6 +10311,12 @@ int ath10k_mac_register(struct ath10k *a
  
  
  	ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER;
  	ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER;
  
  

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

@@ -40,7 +40,7 @@ Signed-off-by: Mathias Kresin <[email protected]>
  	if (ret)
  	if (ret)
 --- a/drivers/net/wireless/ath/ath10k/mac.c
 --- a/drivers/net/wireless/ath/ath10k/mac.c
 +++ b/drivers/net/wireless/ath/ath10k/mac.c
 +++ b/drivers/net/wireless/ath/ath10k/mac.c
-@@ -10298,7 +10298,7 @@ int ath10k_mac_register(struct ath10k *a
+@@ -10312,7 +10312,7 @@ int ath10k_mac_register(struct ath10k *a
  	ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER;
  	ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER;
  
  
  #ifdef CPTCFG_MAC80211_LEDS
  #ifdef CPTCFG_MAC80211_LEDS

+ 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
 --- a/drivers/net/wireless/ath/ath10k/mac.c
 +++ b/drivers/net/wireless/ath/ath10k/mac.c
 +++ b/drivers/net/wireless/ath/ath10k/mac.c
-@@ -10090,7 +10090,6 @@ int ath10k_mac_register(struct ath10k *a
+@@ -10104,7 +10104,6 @@ int ath10k_mac_register(struct ath10k *a
  	ieee80211_hw_set(ar->hw, CHANCTX_STA_CSA);
  	ieee80211_hw_set(ar->hw, CHANCTX_STA_CSA);
  	ieee80211_hw_set(ar->hw, QUEUE_CONTROL);
  	ieee80211_hw_set(ar->hw, QUEUE_CONTROL);
  	ieee80211_hw_set(ar->hw, SUPPORTS_TX_FRAG);
  	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,

+ 1 - 1
package/kernel/mac80211/patches/ath11k/0906-wifi-ath11k-disable-coldboot-for-ipq6018.patch

@@ -13,7 +13,7 @@ Signed-off-by: Mantas Pucka <[email protected]>
 
 
 --- a/drivers/net/wireless/ath/ath11k/core.c
 --- a/drivers/net/wireless/ath/ath11k/core.c
 +++ b/drivers/net/wireless/ath/ath11k/core.c
 +++ b/drivers/net/wireless/ath/ath11k/core.c
-@@ -170,8 +170,8 @@ static const struct ath11k_hw_params ath
+@@ -171,8 +171,8 @@ static const struct ath11k_hw_params ath
  		.supports_shadow_regs = false,
  		.supports_shadow_regs = false,
  		.idle_ps = false,
  		.idle_ps = false,
  		.supports_sta_ps = false,
  		.supports_sta_ps = false,

+ 1 - 1
package/kernel/mac80211/patches/ath11k/0907-wifi-ath11k-disable-coldboot-calibration-for-ipq5018.patch

@@ -14,7 +14,7 @@ Signed-off-by: George Moussalem <[email protected]>
 
 
 --- a/drivers/net/wireless/ath/ath11k/core.c
 --- a/drivers/net/wireless/ath/ath11k/core.c
 +++ b/drivers/net/wireless/ath/ath11k/core.c
 +++ b/drivers/net/wireless/ath/ath11k/core.c
-@@ -691,8 +691,8 @@ static const struct ath11k_hw_params ath
+@@ -698,8 +698,8 @@ static const struct ath11k_hw_params ath
  		.supports_suspend = false,
  		.supports_suspend = false,
  		.hal_params = &ath11k_hw_hal_params_ipq8074,
  		.hal_params = &ath11k_hw_hal_params_ipq8074,
  		.single_pdev_only = false,
  		.single_pdev_only = false,

+ 5 - 5
package/kernel/mac80211/patches/ath11k/201-wifi-ath11k-Support-setting-bdf-addr-and-caldb-addr-.patch

@@ -10,7 +10,7 @@ Signed-off-by: Ziyang Huang <[email protected]>
 
 
 --- a/drivers/net/wireless/ath/ath11k/qmi.c
 --- a/drivers/net/wireless/ath/ath11k/qmi.c
 +++ b/drivers/net/wireless/ath/ath11k/qmi.c
 +++ b/drivers/net/wireless/ath/ath11k/qmi.c
-@@ -2028,6 +2028,7 @@ static int ath11k_qmi_assign_target_mem_
+@@ -2030,6 +2030,7 @@ static int ath11k_qmi_assign_target_mem_
  	struct device_node *hremote_node = NULL;
  	struct device_node *hremote_node = NULL;
  	struct resource res;
  	struct resource res;
  	u32 host_ddr_sz;
  	u32 host_ddr_sz;
@@ -18,7 +18,7 @@ Signed-off-by: Ziyang Huang <[email protected]>
  	int i, idx, ret;
  	int i, idx, ret;
  
  
  	for (i = 0, idx = 0; i < ab->qmi.mem_seg_count; i++) {
  	for (i = 0, idx = 0; i < ab->qmi.mem_seg_count; i++) {
-@@ -2067,7 +2068,9 @@ static int ath11k_qmi_assign_target_mem_
+@@ -2069,7 +2070,9 @@ static int ath11k_qmi_assign_target_mem_
  			idx++;
  			idx++;
  			break;
  			break;
  		case BDF_MEM_REGION_TYPE:
  		case BDF_MEM_REGION_TYPE:
@@ -29,7 +29,7 @@ Signed-off-by: Ziyang Huang <[email protected]>
  			ab->qmi.target_mem[idx].vaddr = NULL;
  			ab->qmi.target_mem[idx].vaddr = NULL;
  			ab->qmi.target_mem[idx].size = ab->qmi.target_mem[i].size;
  			ab->qmi.target_mem[idx].size = ab->qmi.target_mem[i].size;
  			ab->qmi.target_mem[idx].type = ab->qmi.target_mem[i].type;
  			ab->qmi.target_mem[idx].type = ab->qmi.target_mem[i].type;
-@@ -2089,8 +2092,9 @@ static int ath11k_qmi_assign_target_mem_
+@@ -2091,8 +2094,9 @@ static int ath11k_qmi_assign_target_mem_
  					if (!ab->qmi.target_mem[idx].iaddr)
  					if (!ab->qmi.target_mem[idx].iaddr)
  						return -EIO;
  						return -EIO;
  				} else {
  				} else {
@@ -41,7 +41,7 @@ Signed-off-by: Ziyang Huang <[email protected]>
  				}
  				}
  			} else {
  			} else {
  				ab->qmi.target_mem[idx].paddr = 0;
  				ab->qmi.target_mem[idx].paddr = 0;
-@@ -2295,6 +2299,7 @@ static int ath11k_qmi_load_file_target_m
+@@ -2297,6 +2301,7 @@ static int ath11k_qmi_load_file_target_m
  	struct qmi_wlanfw_bdf_download_resp_msg_v01 resp;
  	struct qmi_wlanfw_bdf_download_resp_msg_v01 resp;
  	struct qmi_txn txn;
  	struct qmi_txn txn;
  	const u8 *temp = data;
  	const u8 *temp = data;
@@ -49,7 +49,7 @@ Signed-off-by: Ziyang Huang <[email protected]>
  	void __iomem *bdf_addr = NULL;
  	void __iomem *bdf_addr = NULL;
  	int ret = 0;
  	int ret = 0;
  	u32 remaining = len;
  	u32 remaining = len;
-@@ -2306,7 +2311,9 @@ static int ath11k_qmi_load_file_target_m
+@@ -2308,7 +2313,9 @@ static int ath11k_qmi_load_file_target_m
  	memset(&resp, 0, sizeof(resp));
  	memset(&resp, 0, sizeof(resp));
  
  
  	if (ab->hw_params.fixed_bdf_addr) {
  	if (ab->hw_params.fixed_bdf_addr) {

+ 1 - 1
package/kernel/mac80211/patches/ath11k/900-ath11k-control-thermal-support-via-symbol.patch

@@ -56,7 +56,7 @@ Signed-off-by: Robert Marko <[email protected]>
  int ath11k_thermal_set_throttling(struct ath11k *ar, u32 throttle_state);
  int ath11k_thermal_set_throttling(struct ath11k *ar, u32 throttle_state);
 --- a/local-symbols
 --- a/local-symbols
 +++ b/local-symbols
 +++ b/local-symbols
-@@ -168,6 +168,7 @@ ATH11K_DEBUG=
+@@ -162,6 +162,7 @@ ATH11K_DEBUG=
  ATH11K_DEBUGFS=
  ATH11K_DEBUGFS=
  ATH11K_TRACING=
  ATH11K_TRACING=
  ATH11K_SPECTRAL=
  ATH11K_SPECTRAL=

+ 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,
  		.hw_rev = ATH11K_HW_IPQ8074,
  		.name = "ipq8074 hw2.0",
  		.name = "ipq8074 hw2.0",
-@@ -2147,7 +2147,8 @@ static void ath11k_core_reset(struct wor
+@@ -2280,7 +2280,8 @@ static void ath11k_core_reset(struct wor
  static int ath11k_init_hw_params(struct ath11k_base *ab)
  static int ath11k_init_hw_params(struct ath11k_base *ab)
  {
  {
  	const struct ath11k_hw_params *hw_params = NULL;
  	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++) {
  	for (i = 0; i < ARRAY_SIZE(ath11k_hw_params); i++) {
  		hw_params = &ath11k_hw_params[i];
  		hw_params = &ath11k_hw_params[i];
-@@ -2163,7 +2164,31 @@ static int ath11k_init_hw_params(struct
+@@ -2296,7 +2297,31 @@ static int ath11k_init_hw_params(struct
  
  
  	ab->hw_params = *hw_params;
  	ab->hw_params = *hw_params;
  
  

+ 14 - 10
package/kernel/mac80211/patches/ath11k/905-ath11k-remove-intersection-support-for-regulatory-ru.patch

@@ -23,7 +23,7 @@ Signed-off-by: Aditya Kumar Singh <[email protected]>
 
 
 --- a/drivers/net/wireless/ath/ath11k/reg.c
 --- a/drivers/net/wireless/ath/ath11k/reg.c
 +++ b/drivers/net/wireless/ath/ath11k/reg.c
 +++ b/drivers/net/wireless/ath/ath11k/reg.c
-@@ -361,134 +361,6 @@ static u32 ath11k_map_fw_phy_flags(u32 p
+@@ -353,134 +353,6 @@ static u32 ath11k_map_fw_phy_flags(u32 p
  	return flags;
  	return flags;
  }
  }
  
  
@@ -158,7 +158,7 @@ Signed-off-by: Aditya Kumar Singh <[email protected]>
  static const char *
  static const char *
  ath11k_reg_get_regdom_str(enum nl80211_dfs_regions dfs_region)
  ath11k_reg_get_regdom_str(enum nl80211_dfs_regions dfs_region)
  {
  {
-@@ -639,11 +511,11 @@ ath11k_reg_ap_pwr_convert(enum ieee80211
+@@ -631,11 +503,11 @@ ath11k_reg_ap_pwr_convert(enum ieee80211
  
  
  struct ieee80211_regdomain *
  struct ieee80211_regdomain *
  ath11k_reg_build_regd(struct ath11k_base *ab,
  ath11k_reg_build_regd(struct ath11k_base *ab,
@@ -172,7 +172,7 @@ Signed-off-by: Aditya Kumar Singh <[email protected]>
  	struct cur_reg_rule *reg_rule, *reg_rule_6ghz;
  	struct cur_reg_rule *reg_rule, *reg_rule_6ghz;
  	u8 i = 0, j = 0, k = 0;
  	u8 i = 0, j = 0, k = 0;
  	u8 num_rules;
  	u8 num_rules;
-@@ -686,26 +558,26 @@ ath11k_reg_build_regd(struct ath11k_base
+@@ -678,26 +550,26 @@ ath11k_reg_build_regd(struct ath11k_base
  	}
  	}
  
  
  	if (!num_rules)
  	if (!num_rules)
@@ -206,7 +206,7 @@ Signed-off-by: Aditya Kumar Singh <[email protected]>
  		   reg_info->dfs_region, num_rules);
  		   reg_info->dfs_region, num_rules);
  	/* Update reg_rules[] below. Firmware is expected to
  	/* Update reg_rules[] below. Firmware is expected to
  	 * send these rules in order(2 GHz rules first and then 5 GHz)
  	 * send these rules in order(2 GHz rules first and then 5 GHz)
-@@ -744,7 +616,7 @@ ath11k_reg_build_regd(struct ath11k_base
+@@ -736,7 +608,7 @@ ath11k_reg_build_regd(struct ath11k_base
  		flags |= ath11k_map_fw_reg_flags(reg_rule->flags);
  		flags |= ath11k_map_fw_reg_flags(reg_rule->flags);
  		flags |= ath11k_map_fw_phy_flags(reg_info->phybitmap);
  		flags |= ath11k_map_fw_phy_flags(reg_info->phybitmap);
  
  
@@ -215,7 +215,7 @@ Signed-off-by: Aditya Kumar Singh <[email protected]>
  				       reg_rule->start_freq,
  				       reg_rule->start_freq,
  				       reg_rule->end_freq, max_bw,
  				       reg_rule->end_freq, max_bw,
  				       reg_rule->ant_gain, reg_rule->reg_power,
  				       reg_rule->ant_gain, reg_rule->reg_power,
-@@ -759,7 +631,7 @@ ath11k_reg_build_regd(struct ath11k_base
+@@ -751,7 +623,7 @@ ath11k_reg_build_regd(struct ath11k_base
  		    reg_info->dfs_region == ATH11K_DFS_REG_ETSI &&
  		    reg_info->dfs_region == ATH11K_DFS_REG_ETSI &&
  		    (reg_rule->end_freq > ETSI_WEATHER_RADAR_BAND_LOW &&
  		    (reg_rule->end_freq > ETSI_WEATHER_RADAR_BAND_LOW &&
  		    reg_rule->start_freq < ETSI_WEATHER_RADAR_BAND_HIGH)){
  		    reg_rule->start_freq < ETSI_WEATHER_RADAR_BAND_HIGH)){
@@ -224,7 +224,7 @@ Signed-off-by: Aditya Kumar Singh <[email protected]>
  							     reg_rule, &i,
  							     reg_rule, &i,
  							     flags, max_bw);
  							     flags, max_bw);
  			continue;
  			continue;
-@@ -770,51 +642,23 @@ ath11k_reg_build_regd(struct ath11k_base
+@@ -762,37 +634,20 @@ ath11k_reg_build_regd(struct ath11k_base
  				   "\t%d. (%d - %d @ %d) (%d, %d) (%d ms) (FLAGS %d) (%d, %d)\n",
  				   "\t%d. (%d - %d @ %d) (%d, %d) (%d ms) (FLAGS %d) (%d, %d)\n",
  				   i + 1, reg_rule->start_freq, reg_rule->end_freq,
  				   i + 1, reg_rule->start_freq, reg_rule->end_freq,
  				   max_bw, reg_rule->ant_gain, reg_rule->reg_power,
  				   max_bw, reg_rule->ant_gain, reg_rule->reg_power,
@@ -265,6 +265,10 @@ Signed-off-by: Aditya Kumar Singh <[email protected]>
  	return new_regd;
  	return new_regd;
  }
  }
  
  
+@@ -844,17 +699,6 @@ void ath11k_regd_update_chan_list_work(s
+ 	}
+ }
+ 
 -static bool ath11k_reg_is_world_alpha(char *alpha)
 -static bool ath11k_reg_is_world_alpha(char *alpha)
 -{
 -{
 -	if (alpha[0] == '0' && alpha[1] == '0')
 -	if (alpha[0] == '0' && alpha[1] == '0')
@@ -279,7 +283,7 @@ Signed-off-by: Aditya Kumar Singh <[email protected]>
  static enum wmi_vdev_type ath11k_reg_get_ar_vdev_type(struct ath11k *ar)
  static enum wmi_vdev_type ath11k_reg_get_ar_vdev_type(struct ath11k *ar)
  {
  {
  	struct ath11k_vif *arvif;
  	struct ath11k_vif *arvif;
-@@ -837,7 +681,6 @@ int ath11k_reg_handle_chan_list(struct a
+@@ -877,7 +721,6 @@ int ath11k_reg_handle_chan_list(struct a
  				enum ieee80211_ap_reg_power power_type)
  				enum ieee80211_ap_reg_power power_type)
  {
  {
  	struct ieee80211_regdomain *regd;
  	struct ieee80211_regdomain *regd;
@@ -287,7 +291,7 @@ Signed-off-by: Aditya Kumar Singh <[email protected]>
  	int pdev_idx;
  	int pdev_idx;
  	struct ath11k *ar;
  	struct ath11k *ar;
  	enum wmi_vdev_type vdev_type;
  	enum wmi_vdev_type vdev_type;
-@@ -889,24 +732,14 @@ int ath11k_reg_handle_chan_list(struct a
+@@ -929,24 +772,14 @@ int ath11k_reg_handle_chan_list(struct a
  		    (char *)reg_info->alpha2, 2))
  		    (char *)reg_info->alpha2, 2))
  		goto retfail;
  		goto retfail;
  
  
@@ -317,8 +321,8 @@ Signed-off-by: Aditya Kumar Singh <[email protected]>
  		goto fallback;
  		goto fallback;
 --- a/drivers/net/wireless/ath/ath11k/reg.h
 --- a/drivers/net/wireless/ath/ath11k/reg.h
 +++ b/drivers/net/wireless/ath/ath11k/reg.h
 +++ b/drivers/net/wireless/ath/ath11k/reg.h
-@@ -35,7 +35,7 @@ void ath11k_reg_free(struct ath11k_base
- void ath11k_regd_update_work(struct work_struct *work);
+@@ -36,7 +36,7 @@ void ath11k_regd_update_work(struct work
+ void ath11k_regd_update_chan_list_work(struct work_struct *work);
  struct ieee80211_regdomain *
  struct ieee80211_regdomain *
  ath11k_reg_build_regd(struct ath11k_base *ab,
  ath11k_reg_build_regd(struct ath11k_base *ab,
 -		      struct cur_regulatory_info *reg_info, bool intersect,
 -		      struct cur_regulatory_info *reg_info, bool intersect,

+ 4 - 4
package/kernel/mac80211/patches/ath11k/920-wifi-ath11k-add-hw-params-for-QCN6122.patch

@@ -25,9 +25,9 @@ Signed-off-by: George Moussalem <[email protected]>
 
 
 --- a/drivers/net/wireless/ath/ath11k/core.c
 --- a/drivers/net/wireless/ath/ath11k/core.c
 +++ b/drivers/net/wireless/ath/ath11k/core.c
 +++ b/drivers/net/wireless/ath/ath11k/core.c
-@@ -809,6 +809,67 @@ static struct ath11k_hw_params ath11k_hw
- 		.support_fw_mac_sequence = true,
+@@ -905,6 +905,67 @@ static struct ath11k_hw_params ath11k_hw
  		.support_dual_stations = true,
  		.support_dual_stations = true,
+ 		.pdev_suspend = false,
  	},
  	},
 +	{
 +	{
 +		.hw_rev = ATH11K_HW_QCN6122_HW10,
 +		.hw_rev = ATH11K_HW_QCN6122_HW10,
@@ -95,10 +95,10 @@ Signed-off-by: George Moussalem <[email protected]>
  static inline struct ath11k_pdev *ath11k_core_get_single_pdev(struct ath11k_base *ab)
  static inline struct ath11k_pdev *ath11k_core_get_single_pdev(struct ath11k_base *ab)
 --- a/drivers/net/wireless/ath/ath11k/core.h
 --- a/drivers/net/wireless/ath/ath11k/core.h
 +++ b/drivers/net/wireless/ath/ath11k/core.h
 +++ b/drivers/net/wireless/ath/ath11k/core.h
-@@ -148,6 +148,7 @@ enum ath11k_hw_rev {
- 	ATH11K_HW_WCN6750_HW10,
+@@ -149,6 +149,7 @@ enum ath11k_hw_rev {
  	ATH11K_HW_IPQ5018_HW10,
  	ATH11K_HW_IPQ5018_HW10,
  	ATH11K_HW_QCA2066_HW21,
  	ATH11K_HW_QCA2066_HW21,
+ 	ATH11K_HW_QCA6698AQ_HW21,
 +	ATH11K_HW_QCN6122_HW10,
 +	ATH11K_HW_QCN6122_HW10,
  };
  };
  
  

+ 2 - 2
package/kernel/mac80211/patches/ath11k/921-wifi-ath11k-add-hal-regs-for-QCN6122.patch

@@ -10,7 +10,7 @@ Signed-off-by: George Moussalem <[email protected]>
 ---
 ---
 --- a/drivers/net/wireless/ath/ath11k/core.c
 --- a/drivers/net/wireless/ath/ath11k/core.c
 +++ b/drivers/net/wireless/ath/ath11k/core.c
 +++ b/drivers/net/wireless/ath/ath11k/core.c
-@@ -822,6 +822,7 @@ static struct ath11k_hw_params ath11k_hw
+@@ -918,6 +918,7 @@ static struct ath11k_hw_params ath11k_hw
  		.bdf_addr = 0x4D200000,
  		.bdf_addr = 0x4D200000,
  		.hw_ops = &ipq5018_ops,
  		.hw_ops = &ipq5018_ops,
  		.hal_desc_sz = sizeof(struct hal_rx_desc_qcn9074),
  		.hal_desc_sz = sizeof(struct hal_rx_desc_qcn9074),
@@ -104,7 +104,7 @@ Signed-off-by: George Moussalem <[email protected]>
  	.tcl2wbm_rbm_map = ath11k_hw_tcl2wbm_rbm_map_ipq8074,
  	.tcl2wbm_rbm_map = ath11k_hw_tcl2wbm_rbm_map_ipq8074,
 --- a/drivers/net/wireless/ath/ath11k/hw.h
 --- a/drivers/net/wireless/ath/ath11k/hw.h
 +++ b/drivers/net/wireless/ath/ath11k/hw.h
 +++ b/drivers/net/wireless/ath/ath11k/hw.h
-@@ -425,6 +425,7 @@ extern const struct ath11k_hw_regs qcn90
+@@ -426,6 +426,7 @@ extern const struct ath11k_hw_regs qcn90
  extern const struct ath11k_hw_regs wcn6855_regs;
  extern const struct ath11k_hw_regs wcn6855_regs;
  extern const struct ath11k_hw_regs wcn6750_regs;
  extern const struct ath11k_hw_regs wcn6750_regs;
  extern const struct ath11k_hw_regs ipq5018_regs;
  extern const struct ath11k_hw_regs ipq5018_regs;

+ 2 - 2
package/kernel/mac80211/patches/ath11k/922-wifi-ath11k-add-hw-ring-mask-for-QCN6122.patch

@@ -8,7 +8,7 @@ Signed-off-by: George Moussalem <[email protected]>
 ---
 ---
 --- a/drivers/net/wireless/ath/ath11k/core.c
 --- a/drivers/net/wireless/ath/ath11k/core.c
 +++ b/drivers/net/wireless/ath/ath11k/core.c
 +++ b/drivers/net/wireless/ath/ath11k/core.c
-@@ -821,6 +821,7 @@ static struct ath11k_hw_params ath11k_hw
+@@ -917,6 +917,7 @@ static struct ath11k_hw_params ath11k_hw
  		.max_radios = MAX_RADIOS_5018,
  		.max_radios = MAX_RADIOS_5018,
  		.bdf_addr = 0x4D200000,
  		.bdf_addr = 0x4D200000,
  		.hw_ops = &ipq5018_ops,
  		.hw_ops = &ipq5018_ops,
@@ -64,7 +64,7 @@ Signed-off-by: George Moussalem <[email protected]>
  	/* CE0: host->target HTC control and raw streams */
  	/* CE0: host->target HTC control and raw streams */
 --- a/drivers/net/wireless/ath/ath11k/hw.h
 --- a/drivers/net/wireless/ath/ath11k/hw.h
 +++ b/drivers/net/wireless/ath/ath11k/hw.h
 +++ b/drivers/net/wireless/ath/ath11k/hw.h
-@@ -289,6 +289,7 @@ extern const struct ath11k_hw_ring_mask
+@@ -290,6 +290,7 @@ extern const struct ath11k_hw_ring_mask
  extern const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_qca6390;
  extern const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_qca6390;
  extern const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_qcn9074;
  extern const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_qcn9074;
  extern const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_wcn6750;
  extern const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_wcn6750;

+ 1 - 1
package/kernel/mac80211/patches/ath11k/923-wifi-ath11k-update-hif_and-pci_ops-for-QCN6122.patch

@@ -91,7 +91,7 @@ Signed-off-by: George Moussalem <[email protected]>
  #endif /* _HIF_H_ */
  #endif /* _HIF_H_ */
 --- a/drivers/net/wireless/ath/ath11k/qmi.c
 --- a/drivers/net/wireless/ath/ath11k/qmi.c
 +++ b/drivers/net/wireless/ath/ath11k/qmi.c
 +++ b/drivers/net/wireless/ath/ath11k/qmi.c
-@@ -2187,6 +2187,8 @@ static int ath11k_qmi_request_device_inf
+@@ -2189,6 +2189,8 @@ static int ath11k_qmi_request_device_inf
  	if (!ab->hw_params.ce_remap)
  	if (!ab->hw_params.ce_remap)
  		ab->mem_ce = ab->mem;
  		ab->mem_ce = ab->mem;
  
  

+ 1 - 1
package/kernel/mac80211/patches/ath11k/924-wifi-ath11k-add-multipd-support-for-QCN6122.patch

@@ -89,7 +89,7 @@ Signed-off-by: George Moussalem <[email protected]>
  /* SMBIOS type containing Board Data File Name Extension */
  /* SMBIOS type containing Board Data File Name Extension */
  #define ATH11K_SMBIOS_BDF_EXT_TYPE 0xF8
  #define ATH11K_SMBIOS_BDF_EXT_TYPE 0xF8
  
  
-@@ -951,6 +954,7 @@ struct ath11k_base {
+@@ -952,6 +955,7 @@ struct ath11k_base {
  	struct list_head peers;
  	struct list_head peers;
  	wait_queue_head_t peer_mapping_wq;
  	wait_queue_head_t peer_mapping_wq;
  	u8 mac_addr[ETH_ALEN];
  	u8 mac_addr[ETH_ALEN];

+ 2 - 2
package/kernel/mac80211/patches/ath11k/925-wifi-ath11k-add-QCN6122-device-support.patch

@@ -37,9 +37,9 @@ Signed-off-by: George Moussalem <[email protected]>
  
  
 --- a/drivers/net/wireless/ath/ath11k/pcic.c
 --- a/drivers/net/wireless/ath/ath11k/pcic.c
 +++ b/drivers/net/wireless/ath/ath11k/pcic.c
 +++ b/drivers/net/wireless/ath/ath11k/pcic.c
-@@ -126,6 +126,15 @@ static const struct ath11k_msi_config at
+@@ -137,6 +137,15 @@ static const struct ath11k_msi_config at
  		},
  		},
- 		.hw_rev = ATH11K_HW_QCA2066_HW21,
+ 		.hw_rev = ATH11K_HW_QCA6698AQ_HW21,
  	},
  	},
 +	{
 +	{
 +		.total_vectors = 13,
 +		.total_vectors = 13,

+ 1 - 1
package/kernel/mac80211/patches/ath11k/931-wifi-ath11k-Support-to-assign-m3-dump-memory.patch

@@ -10,7 +10,7 @@ Signed-off-by: Ziyang Huang <[email protected]>
 
 
 --- a/drivers/net/wireless/ath/ath11k/qmi.c
 --- a/drivers/net/wireless/ath/ath11k/qmi.c
 +++ b/drivers/net/wireless/ath/ath11k/qmi.c
 +++ b/drivers/net/wireless/ath/ath11k/qmi.c
-@@ -2104,6 +2104,18 @@ static int ath11k_qmi_assign_target_mem_
+@@ -2106,6 +2106,18 @@ static int ath11k_qmi_assign_target_mem_
  			ab->qmi.target_mem[idx].type = ab->qmi.target_mem[i].type;
  			ab->qmi.target_mem[idx].type = ab->qmi.target_mem[i].type;
  			idx++;
  			idx++;
  			break;
  			break;

+ 6 - 6
package/kernel/mac80211/patches/ath11k/932-wifi-ath11k-poll-reo-status-ipq5018.patch

@@ -24,10 +24,10 @@ Signed-off-by: Sriram R <[email protected]>
 ---
 ---
 --- a/drivers/net/wireless/ath/ath11k/core.c
 --- a/drivers/net/wireless/ath/ath11k/core.c
 +++ b/drivers/net/wireless/ath/ath11k/core.c
 +++ b/drivers/net/wireless/ath/ath11k/core.c
-@@ -719,6 +719,7 @@ static struct ath11k_hw_params ath11k_hw
- 		.smp2p_wow_exit = false,
+@@ -727,6 +727,7 @@ static struct ath11k_hw_params ath11k_hw
  		.support_fw_mac_sequence = false,
  		.support_fw_mac_sequence = false,
  		.support_dual_stations = false,
  		.support_dual_stations = false,
+ 		.pdev_suspend = false,
 +		.reo_status_poll = true,
 +		.reo_status_poll = true,
  	},
  	},
  	{
  	{
@@ -121,7 +121,7 @@ Signed-off-by: Sriram R <[email protected]>
  struct dp_reo_cache_flush_elem {
  struct dp_reo_cache_flush_elem {
  	struct list_head list;
  	struct list_head list;
  	struct dp_rx_tid data;
  	struct dp_rx_tid data;
-@@ -288,6 +290,10 @@ struct ath11k_dp {
+@@ -287,6 +289,10 @@ struct ath11k_dp {
  	spinlock_t reo_cmd_lock;
  	spinlock_t reo_cmd_lock;
  	struct ath11k_hp_update_timer reo_cmd_timer;
  	struct ath11k_hp_update_timer reo_cmd_timer;
  	struct ath11k_hp_update_timer tx_ring_timer[DP_TCL_NUM_RING_MAX];
  	struct ath11k_hp_update_timer tx_ring_timer[DP_TCL_NUM_RING_MAX];
@@ -132,7 +132,7 @@ Signed-off-by: Sriram R <[email protected]>
  };
  };
  
  
  /* HTT definitions */
  /* HTT definitions */
-@@ -1691,5 +1697,6 @@ void ath11k_dp_shadow_init_timer(struct
+@@ -1690,5 +1696,6 @@ void ath11k_dp_shadow_init_timer(struct
  				 struct ath11k_hp_update_timer *update_timer,
  				 struct ath11k_hp_update_timer *update_timer,
  				 u32 interval, u32 ring_id);
  				 u32 interval, u32 ring_id);
  void ath11k_dp_stop_shadow_timers(struct ath11k_base *ab);
  void ath11k_dp_stop_shadow_timers(struct ath11k_base *ab);
@@ -154,10 +154,10 @@ Signed-off-by: Sriram R <[email protected]>
  
  
 --- a/drivers/net/wireless/ath/ath11k/hw.h
 --- a/drivers/net/wireless/ath/ath11k/hw.h
 +++ b/drivers/net/wireless/ath/ath11k/hw.h
 +++ b/drivers/net/wireless/ath/ath11k/hw.h
-@@ -232,6 +232,7 @@ struct ath11k_hw_params {
- 	bool smp2p_wow_exit;
+@@ -233,6 +233,7 @@ struct ath11k_hw_params {
  	bool support_fw_mac_sequence;
  	bool support_fw_mac_sequence;
  	bool support_dual_stations;
  	bool support_dual_stations;
+ 	bool pdev_suspend;
 +	bool reo_status_poll;
 +	bool reo_status_poll;
  };
  };
  
  

+ 1 - 1
package/kernel/mac80211/patches/ath11k/940-ath11k-Revert-clear-the-keys-properly-when-DISABLE_K.patch

@@ -23,7 +23,7 @@ Signed-off-by: Rameshkumar Sundaram <[email protected]>
 
 
 --- a/drivers/net/wireless/ath/ath11k/mac.c
 --- a/drivers/net/wireless/ath/ath11k/mac.c
 +++ b/drivers/net/wireless/ath/ath11k/mac.c
 +++ b/drivers/net/wireless/ath/ath11k/mac.c
-@@ -4222,7 +4222,9 @@ static int ath11k_install_key(struct ath
+@@ -4220,7 +4220,9 @@ static int ath11k_install_key(struct ath
  		return 0;
  		return 0;
  
  
  	if (cmd == DISABLE_KEY) {
  	if (cmd == DISABLE_KEY) {

+ 71 - 71
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)
  static __le32 ath12k_wmi_tlv_hdr(u32 cmd, u32 len)
-@@ -2364,7 +2366,10 @@ int ath12k_wmi_send_scan_start_cmd(struc
+@@ -2531,7 +2533,10 @@ int ath12k_wmi_send_scan_start_cmd(struc
  	cmd->scan_id = cpu_to_le32(arg->scan_id);
  	cmd->scan_id = cpu_to_le32(arg->scan_id);
  	cmd->scan_req_id = cpu_to_le32(arg->scan_req_id);
  	cmd->scan_req_id = cpu_to_le32(arg->scan_req_id);
  	cmd->vdev_id = cpu_to_le32(arg->vdev_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);
  	cmd->notify_scan_events = cpu_to_le32(arg->notify_scan_events);
  
  
  	ath12k_wmi_copy_scan_event_cntrl_flags(cmd, arg);
  	ath12k_wmi_copy_scan_event_cntrl_flags(cmd, arg);
-@@ -3084,6 +3089,110 @@ out:
+@@ -3253,6 +3258,110 @@ out:
  	return ret;
  	return ret;
  }
  }
  
  
@@ -244,7 +244,7 @@ Acked-by: Jeff Johnson <[email protected]>
  int
  int
  ath12k_wmi_send_twt_enable_cmd(struct ath12k *ar, u32 pdev_id)
  ath12k_wmi_send_twt_enable_cmd(struct ath12k *ar, u32 pdev_id)
  {
  {
-@@ -5669,6 +5778,50 @@ static void ath12k_wmi_op_ep_tx_credits(
+@@ -5873,6 +5982,50 @@ static void ath12k_wmi_op_ep_tx_credits(
  	wake_up(&ab->wmi_ab.tx_credits_wq);
  	wake_up(&ab->wmi_ab.tx_credits_wq);
  }
  }
  
  
@@ -295,9 +295,9 @@ Acked-by: Jeff Johnson <[email protected]>
  static void ath12k_wmi_htc_tx_complete(struct ath12k_base *ab,
  static void ath12k_wmi_htc_tx_complete(struct ath12k_base *ab,
  				       struct sk_buff *skb)
  				       struct sk_buff *skb)
  {
  {
-@@ -7270,6 +7423,9 @@ static void ath12k_wmi_op_rx(struct ath1
- 	case WMI_GTK_OFFLOAD_STATUS_EVENTID:
- 		ath12k_wmi_gtk_offload_status_event(ab, skb);
+@@ -7586,6 +7739,9 @@ static void ath12k_wmi_op_rx(struct ath1
+ 	case WMI_OBSS_COLOR_COLLISION_DETECTION_EVENTID:
+ 		/* debug might flood hence silently ignore (no-op) */
  		break;
  		break;
 +	case WMI_11D_NEW_COUNTRY_EVENTID:
 +	case WMI_11D_NEW_COUNTRY_EVENTID:
 +		ath12k_reg_11d_new_cc_event(ab, skb);
 +		ath12k_reg_11d_new_cc_event(ab, skb);
@@ -307,7 +307,7 @@ Acked-by: Jeff Johnson <[email protected]>
  		ath12k_dbg(ab, ATH12K_DBG_WMI, "Unknown eventid: 0x%x\n", id);
  		ath12k_dbg(ab, ATH12K_DBG_WMI, "Unknown eventid: 0x%x\n", id);
 --- a/drivers/net/wireless/ath/ath12k/wmi.h
 --- a/drivers/net/wireless/ath/ath12k/wmi.h
 +++ b/drivers/net/wireless/ath/ath12k/wmi.h
 +++ b/drivers/net/wireless/ath/ath12k/wmi.h
-@@ -3860,6 +3860,28 @@ struct wmi_init_country_cmd {
+@@ -3990,6 +3990,28 @@ struct wmi_init_country_cmd {
  	} cc_info;
  	} cc_info;
  } __packed;
  } __packed;
  
  
@@ -336,9 +336,9 @@ Acked-by: Jeff Johnson <[email protected]>
  struct wmi_delba_send_cmd {
  struct wmi_delba_send_cmd {
  	__le32 tlv_header;
  	__le32 tlv_header;
  	__le32 vdev_id;
  	__le32 vdev_id;
-@@ -3945,6 +3967,16 @@ struct ath12k_wmi_eht_rate_set_params {
+@@ -4074,6 +4096,16 @@ struct ath12k_wmi_eht_rate_set_params {
+ #define REG_ALPHA2_LEN 2
  #define MAX_6G_REG_RULES 5
  #define MAX_6G_REG_RULES 5
- #define REG_US_5G_NUM_REG_RULES 4
  
  
 +struct wmi_set_current_country_arg {
 +struct wmi_set_current_country_arg {
 +	u8 alpha2[REG_ALPHA2_LEN];
 +	u8 alpha2[REG_ALPHA2_LEN];
@@ -353,7 +353,7 @@ Acked-by: Jeff Johnson <[email protected]>
  enum wmi_start_event_param {
  enum wmi_start_event_param {
  	WMI_VDEV_START_RESP_EVENT = 0,
  	WMI_VDEV_START_RESP_EVENT = 0,
  	WMI_VDEV_RESTART_RESP_EVENT,
  	WMI_VDEV_RESTART_RESP_EVENT,
-@@ -5547,11 +5579,17 @@ int ath12k_wmi_send_bcn_offload_control_
+@@ -5714,11 +5746,17 @@ int ath12k_wmi_send_bcn_offload_control_
  					    u32 vdev_id, u32 bcn_ctrl_op);
  					    u32 vdev_id, u32 bcn_ctrl_op);
  int ath12k_wmi_send_init_country_cmd(struct ath12k *ar,
  int ath12k_wmi_send_init_country_cmd(struct ath12k *ar,
  				     struct ath12k_wmi_init_country_arg *arg);
  				     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);
  				 struct ath12k_wmi_rx_reorder_queue_remove_arg *arg);
 --- a/drivers/net/wireless/ath/ath12k/core.c
 --- a/drivers/net/wireless/ath/ath12k/core.c
 +++ b/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)
+@@ -1251,6 +1251,7 @@ void ath12k_core_halt(struct ath12k *ar)
  	cancel_delayed_work_sync(&ar->scan.timeout);
  	cancel_delayed_work_sync(&ar->scan.timeout);
  	cancel_work_sync(&ar->regd_update_work);
  	cancel_work_sync(&ar->regd_update_work);
  	cancel_work_sync(&ab->rfkill_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);
  	rcu_assign_pointer(ab->pdevs_active[ar->pdev_idx], NULL);
  	synchronize_rcu();
  	synchronize_rcu();
-@@ -1021,6 +1022,34 @@ void ath12k_core_halt(struct ath12k *ar)
+@@ -1258,6 +1259,34 @@ void ath12k_core_halt(struct ath12k *ar)
  	idr_init(&ar->txmgmt_idr);
  	idr_init(&ar->txmgmt_idr);
  }
  }
  
  
@@ -415,8 +415,8 @@ Acked-by: Jeff Johnson <[email protected]>
 +
 +
  static void ath12k_core_pre_reconfigure_recovery(struct ath12k_base *ab)
  static void ath12k_core_pre_reconfigure_recovery(struct ath12k_base *ab)
  {
  {
- 	struct ath12k *ar;
-@@ -1045,8 +1074,10 @@ static void ath12k_core_pre_reconfigure_
+ 	struct ath12k_hw_group *ag = ab->ag;
+@@ -1283,8 +1312,10 @@ static void ath12k_core_pre_reconfigure_
  			ar = &ah->radio[j];
  			ar = &ah->radio[j];
  
  
  			ath12k_mac_drain_tx(ar);
  			ath12k_mac_drain_tx(ar);
@@ -428,18 +428,18 @@ Acked-by: Jeff Johnson <[email protected]>
  			complete(&ar->scan.on_channel);
  			complete(&ar->scan.on_channel);
  			complete(&ar->peer_assoc_done);
  			complete(&ar->peer_assoc_done);
  			complete(&ar->peer_delete_done);
  			complete(&ar->peer_delete_done);
-@@ -1312,6 +1343,7 @@ struct ath12k_base *ath12k_core_alloc(st
- 	INIT_WORK(&ab->restart_work, ath12k_core_restart);
+@@ -1953,6 +1984,7 @@ struct ath12k_base *ath12k_core_alloc(st
  	INIT_WORK(&ab->reset_work, ath12k_core_reset);
  	INIT_WORK(&ab->reset_work, ath12k_core_reset);
  	INIT_WORK(&ab->rfkill_work, ath12k_rfkill_work);
  	INIT_WORK(&ab->rfkill_work, ath12k_rfkill_work);
+ 	INIT_WORK(&ab->dump_work, ath12k_coredump_upload);
 +	INIT_WORK(&ab->update_11d_work, ath12k_update_11d);
 +	INIT_WORK(&ab->update_11d_work, ath12k_update_11d);
  
  
  	timer_setup(&ab->rx_replenish_retry, ath12k_ce_rx_replenish_retry, 0);
  	timer_setup(&ab->rx_replenish_retry, ath12k_ce_rx_replenish_retry, 0);
  	init_completion(&ab->htc_suspend);
  	init_completion(&ab->htc_suspend);
 --- a/drivers/net/wireless/ath/ath12k/core.h
 --- a/drivers/net/wireless/ath/ath12k/core.h
 +++ b/drivers/net/wireless/ath/ath12k/core.h
 +++ b/drivers/net/wireless/ath/ath12k/core.h
-@@ -199,6 +199,12 @@ enum ath12k_scan_state {
- 	ATH12K_SCAN_ABORTING,
+@@ -224,6 +224,12 @@ enum ath12k_hw_group_flags {
+ 	ATH12K_GROUP_FLAG_UNREGISTER,
  };
  };
  
  
 +enum ath12k_11d_state {
 +enum ath12k_11d_state {
@@ -449,9 +449,9 @@ Acked-by: Jeff Johnson <[email protected]>
 +};
 +};
 +
 +
  enum ath12k_dev_flags {
  enum ath12k_dev_flags {
- 	ATH12K_CAC_RUNNING,
+ 	ATH12K_FLAG_CAC_RUNNING,
  	ATH12K_FLAG_CRASH_FLUSH,
  	ATH12K_FLAG_CRASH_FLUSH,
-@@ -319,6 +325,8 @@ struct ath12k_vif_iter {
+@@ -361,6 +367,8 @@ struct ath12k_vif_iter {
  #define ATH12K_RX_RATE_TABLE_11AX_NUM	576
  #define ATH12K_RX_RATE_TABLE_11AX_NUM	576
  #define ATH12K_RX_RATE_TABLE_NUM 320
  #define ATH12K_RX_RATE_TABLE_NUM 320
  
  
@@ -460,9 +460,9 @@ Acked-by: Jeff Johnson <[email protected]>
  struct ath12k_rx_peer_rate_stats {
  struct ath12k_rx_peer_rate_stats {
  	u64 ht_mcs_count[HAL_RX_MAX_MCS_HT + 1];
  	u64 ht_mcs_count[HAL_RX_MAX_MCS_HT + 1];
  	u64 vht_mcs_count[HAL_RX_MAX_MCS_VHT + 1];
  	u64 vht_mcs_count[HAL_RX_MAX_MCS_VHT + 1];
-@@ -654,6 +662,13 @@ struct ath12k {
- 	u32 freq_low;
- 	u32 freq_high;
+@@ -713,6 +721,13 @@ struct ath12k {
+ 
+ 	struct wiphy_radio_freq_range freq_range;
  
  
 +	/* Protected by wiphy::mtx lock. */
 +	/* Protected by wiphy::mtx lock. */
 +	u32 vdev_id_11d_scan;
 +	u32 vdev_id_11d_scan;
@@ -472,9 +472,9 @@ Acked-by: Jeff Johnson <[email protected]>
 +	bool regdom_set_by_user;
 +	bool regdom_set_by_user;
 +
 +
  	bool nlo_enabled;
  	bool nlo_enabled;
- };
  
  
-@@ -886,6 +901,8 @@ struct ath12k_base {
+ 	struct completion mlo_setup_done;
+@@ -985,6 +1000,8 @@ struct ath12k_base {
  	/* continuous recovery fail count */
  	/* continuous recovery fail count */
  	atomic_t fail_cont_count;
  	atomic_t fail_cont_count;
  	unsigned long reset_fail_timeout;
  	unsigned long reset_fail_timeout;
@@ -485,28 +485,28 @@ Acked-by: Jeff Johnson <[email protected]>
  		u32 fw_crash_counter;
  		u32 fw_crash_counter;
 --- a/drivers/net/wireless/ath/ath12k/mac.c
 --- a/drivers/net/wireless/ath/ath12k/mac.c
 +++ b/drivers/net/wireless/ath/ath12k/mac.c
 +++ b/drivers/net/wireless/ath/ath12k/mac.c
-@@ -2949,6 +2949,11 @@ static void ath12k_bss_assoc(struct ath1
+@@ -3340,6 +3340,11 @@ static void ath12k_bss_assoc(struct ath1
  	if (ret)
  	if (ret)
  		ath12k_warn(ar->ab, "failed to set vdev %i OBSS PD parameters: %d\n",
  		ath12k_warn(ar->ab, "failed to set vdev %i OBSS PD parameters: %d\n",
  			    arvif->vdev_id, ret);
  			    arvif->vdev_id, ret);
 +
 +
 +	if (test_bit(WMI_TLV_SERVICE_11D_OFFLOAD, ar->ab->wmi_ab.svc_map) &&
 +	if (test_bit(WMI_TLV_SERVICE_11D_OFFLOAD, ar->ab->wmi_ab.svc_map) &&
-+	    arvif->vdev_type == WMI_VDEV_TYPE_STA &&
-+	    arvif->vdev_subtype == WMI_VDEV_SUBTYPE_NONE)
++	    ahvif->vdev_type == WMI_VDEV_TYPE_STA &&
++	    ahvif->vdev_subtype == WMI_VDEV_SUBTYPE_NONE)
 +		ath12k_mac_11d_scan_stop_all(ar->ab);
 +		ath12k_mac_11d_scan_stop_all(ar->ab);
  }
  }
  
  
  static void ath12k_bss_disassoc(struct ath12k *ar,
  static void ath12k_bss_disassoc(struct ath12k *ar,
-@@ -3524,7 +3529,7 @@ void __ath12k_mac_scan_finish(struct ath
- 		ar->scan_channel = NULL;
- 		ar->scan.roc_freq = 0;
+@@ -4094,7 +4099,7 @@ void __ath12k_mac_scan_finish(struct ath
+ 		fallthrough;
+ 	case ATH12K_SCAN_STARTING:
  		cancel_delayed_work(&ar->scan.timeout);
  		cancel_delayed_work(&ar->scan.timeout);
 -		complete(&ar->scan.completed);
 -		complete(&ar->scan.completed);
 +		complete_all(&ar->scan.completed);
 +		complete_all(&ar->scan.completed);
+ 		wiphy_work_queue(ar->ah->hw->wiphy, &ar->scan.vdev_clean_wk);
  		break;
  		break;
  	}
  	}
- }
-@@ -3790,7 +3795,12 @@ scan:
+@@ -4438,7 +4443,12 @@ static int ath12k_mac_op_hw_scan(struct
  
  
  	ret = ath12k_start_scan(ar, arg);
  	ret = ath12k_start_scan(ar, arg);
  	if (ret) {
  	if (ret) {
@@ -520,19 +520,19 @@ Acked-by: Jeff Johnson <[email protected]>
  		spin_lock_bh(&ar->data_lock);
  		spin_lock_bh(&ar->data_lock);
  		ar->scan.state = ATH12K_SCAN_IDLE;
  		ar->scan.state = ATH12K_SCAN_IDLE;
  		spin_unlock_bh(&ar->data_lock);
  		spin_unlock_bh(&ar->data_lock);
-@@ -3810,6 +3820,11 @@ exit:
- 
- 	mutex_unlock(&ar->conf_mutex);
+@@ -4465,6 +4475,11 @@ exit:
+ 		kfree(arg);
+ 	}
  
  
 +	if (ar->state_11d == ATH12K_11D_PREPARING &&
 +	if (ar->state_11d == ATH12K_11D_PREPARING &&
-+	    arvif->vdev_type == WMI_VDEV_TYPE_STA &&
-+	    arvif->vdev_subtype == WMI_VDEV_SUBTYPE_NONE)
++	    ahvif->vdev_type == WMI_VDEV_TYPE_STA &&
++	    ahvif->vdev_subtype == WMI_VDEV_SUBTYPE_NONE)
 +		ath12k_mac_11d_scan_start(ar, arvif->vdev_id);
 +		ath12k_mac_11d_scan_start(ar, arvif->vdev_id);
 +
 +
  	return ret;
  	return ret;
  }
  }
  
  
-@@ -5995,7 +6010,7 @@ static int ath12k_mac_start(struct ath12
+@@ -7383,7 +7398,7 @@ static int ath12k_mac_start(struct ath12
  
  
  	/* TODO: Do we need to enable ANI? */
  	/* TODO: Do we need to enable ANI? */
  
  
@@ -541,8 +541,8 @@ Acked-by: Jeff Johnson <[email protected]>
  
  
  	ar->num_started_vdevs = 0;
  	ar->num_started_vdevs = 0;
  	ar->num_created_vdevs = 0;
  	ar->num_created_vdevs = 0;
-@@ -6175,6 +6190,9 @@ static void ath12k_mac_stop(struct ath12
- 	cancel_delayed_work_sync(&ar->scan.timeout);
+@@ -7564,6 +7579,9 @@ static void ath12k_mac_stop(struct ath12
+ 	wiphy_work_cancel(ath12k_ar_to_hw(ar)->wiphy, &ar->scan.vdev_clean_wk);
  	cancel_work_sync(&ar->regd_update_work);
  	cancel_work_sync(&ar->regd_update_work);
  	cancel_work_sync(&ar->ab->rfkill_work);
  	cancel_work_sync(&ar->ab->rfkill_work);
 +	cancel_work_sync(&ar->ab->update_11d_work);
 +	cancel_work_sync(&ar->ab->update_11d_work);
@@ -551,22 +551,22 @@ Acked-by: Jeff Johnson <[email protected]>
  
  
  	spin_lock_bh(&ar->data_lock);
  	spin_lock_bh(&ar->data_lock);
  	list_for_each_entry_safe(ppdu_stats, tmp, &ar->ppdu_stats_info, list) {
  	list_for_each_entry_safe(ppdu_stats, tmp, &ar->ppdu_stats_info, list) {
-@@ -6421,6 +6439,117 @@ static void ath12k_mac_op_update_vif_off
- 	ath12k_mac_update_vif_offload(arvif);
+@@ -7857,6 +7875,117 @@ static void ath12k_mac_op_update_vif_off
+ 	ath12k_mac_update_vif_offload(&ahvif->deflink);
  }
  }
  
  
 +static bool ath12k_mac_vif_ap_active_any(struct ath12k_base *ab)
 +static bool ath12k_mac_vif_ap_active_any(struct ath12k_base *ab)
 +{
 +{
 +	struct ath12k *ar;
 +	struct ath12k *ar;
 +	struct ath12k_pdev *pdev;
 +	struct ath12k_pdev *pdev;
-+	struct ath12k_vif *arvif;
++	struct ath12k_link_vif *arvif;
 +	int i;
 +	int i;
 +
 +
 +	for (i = 0; i < ab->num_radios; i++) {
 +	for (i = 0; i < ab->num_radios; i++) {
 +		pdev = &ab->pdevs[i];
 +		pdev = &ab->pdevs[i];
 +		ar = pdev->ar;
 +		ar = pdev->ar;
 +		list_for_each_entry(arvif, &ar->arvifs, list) {
 +		list_for_each_entry(arvif, &ar->arvifs, list) {
-+			if (arvif->is_up && arvif->vdev_type == WMI_VDEV_TYPE_AP)
++			if (arvif->is_up && arvif->ahvif->vdev_type == WMI_VDEV_TYPE_AP)
 +				return true;
 +				return true;
 +		}
 +		}
 +	}
 +	}
@@ -666,10 +666,10 @@ Acked-by: Jeff Johnson <[email protected]>
 +	}
 +	}
 +}
 +}
 +
 +
- static int ath12k_mac_vdev_create(struct ath12k *ar, struct ieee80211_vif *vif)
+ int ath12k_mac_vdev_create(struct ath12k *ar, struct ath12k_link_vif *arvif)
  {
  {
  	struct ath12k_hw *ah = ar->ah;
  	struct ath12k_hw *ah = ar->ah;
-@@ -6535,6 +6664,7 @@ static int ath12k_mac_vdev_create(struct
+@@ -7991,6 +8120,7 @@ int ath12k_mac_vdev_create(struct ath12k
  				    arvif->vdev_id, ret);
  				    arvif->vdev_id, ret);
  			goto err_peer_del;
  			goto err_peer_del;
  		}
  		}
@@ -677,48 +677,48 @@ Acked-by: Jeff Johnson <[email protected]>
  		break;
  		break;
  	case WMI_VDEV_TYPE_STA:
  	case WMI_VDEV_TYPE_STA:
  		param_id = WMI_STA_PS_PARAM_RX_WAKE_POLICY;
  		param_id = WMI_STA_PS_PARAM_RX_WAKE_POLICY;
-@@ -6573,6 +6703,13 @@ static int ath12k_mac_vdev_create(struct
+@@ -8029,6 +8159,13 @@ int ath12k_mac_vdev_create(struct ath12k
  				    arvif->vdev_id, ret);
  				    arvif->vdev_id, ret);
  			goto err_peer_del;
  			goto err_peer_del;
  		}
  		}
 +
 +
 +		if (test_bit(WMI_TLV_SERVICE_11D_OFFLOAD, ab->wmi_ab.svc_map) &&
 +		if (test_bit(WMI_TLV_SERVICE_11D_OFFLOAD, ab->wmi_ab.svc_map) &&
-+		    arvif->vdev_type == WMI_VDEV_TYPE_STA &&
-+		    arvif->vdev_subtype == WMI_VDEV_SUBTYPE_NONE) {
++		    ahvif->vdev_type == WMI_VDEV_TYPE_STA &&
++		    ahvif->vdev_subtype == WMI_VDEV_SUBTYPE_NONE) {
 +			reinit_completion(&ar->completed_11d_scan);
 +			reinit_completion(&ar->completed_11d_scan);
 +			ar->state_11d = ATH12K_11D_PREPARING;
 +			ar->state_11d = ATH12K_11D_PREPARING;
 +		}
 +		}
  		break;
  		break;
  	default:
  	default:
  		break;
  		break;
-@@ -6913,6 +7050,11 @@ static void ath12k_mac_op_remove_interfa
- 	ath12k_dbg(ab, ATH12K_DBG_MAC, "mac remove interface (vdev %d)\n",
- 		   arvif->vdev_id);
+@@ -8821,6 +8958,11 @@ ath12k_mac_vdev_start_restart(struct ath
+ 			return ret;
+ 	}
  
  
 +	if (test_bit(WMI_TLV_SERVICE_11D_OFFLOAD, ab->wmi_ab.svc_map) &&
 +	if (test_bit(WMI_TLV_SERVICE_11D_OFFLOAD, ab->wmi_ab.svc_map) &&
-+	    arvif->vdev_type == WMI_VDEV_TYPE_STA &&
-+	    arvif->vdev_subtype == WMI_VDEV_SUBTYPE_NONE)
++	    ahvif->vdev_type == WMI_VDEV_TYPE_STA &&
++	    ahvif->vdev_subtype == WMI_VDEV_SUBTYPE_NONE)
 +		ath12k_mac_11d_scan_stop(ar);
 +		ath12k_mac_11d_scan_stop(ar);
 +
 +
- 	if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
- 		ret = ath12k_peer_delete(ar, arvif->vdev_id, vif->addr);
- 		if (ret)
-@@ -7753,6 +7895,14 @@ ath12k_mac_op_unassign_vif_chanctx(struc
+ 	if (ahvif->vdev_type == WMI_VDEV_TYPE_AP) {
+ 		arg.ssid = ahvif->u.ap.ssid;
+ 		arg.ssid_len = ahvif->u.ap.ssid_len;
+@@ -9395,6 +9537,14 @@ ath12k_mac_op_unassign_vif_chanctx(struc
  	    ar->num_started_vdevs == 1 && ar->monitor_vdev_created)
  	    ar->num_started_vdevs == 1 && ar->monitor_vdev_created)
  		ath12k_mac_monitor_stop(ar);
  		ath12k_mac_monitor_stop(ar);
  
  
 +	if (test_bit(WMI_TLV_SERVICE_11D_OFFLOAD, ab->wmi_ab.svc_map) &&
 +	if (test_bit(WMI_TLV_SERVICE_11D_OFFLOAD, ab->wmi_ab.svc_map) &&
-+	    arvif->vdev_type == WMI_VDEV_TYPE_STA &&
-+	    arvif->vdev_subtype == WMI_VDEV_SUBTYPE_NONE &&
++	    ahvif->vdev_type == WMI_VDEV_TYPE_STA &&
++	    ahvif->vdev_subtype == WMI_VDEV_SUBTYPE_NONE &&
 +	    ar->state_11d != ATH12K_11D_PREPARING) {
 +	    ar->state_11d != ATH12K_11D_PREPARING) {
 +		reinit_completion(&ar->completed_11d_scan);
 +		reinit_completion(&ar->completed_11d_scan);
 +		ar->state_11d = ATH12K_11D_PREPARING;
 +		ar->state_11d = ATH12K_11D_PREPARING;
 +	}
 +	}
 +
 +
- 	mutex_unlock(&ar->conf_mutex);
+ 	ath12k_mac_remove_link_interface(hw, arvif);
+ 	ath12k_mac_unassign_link_vif(arvif);
  }
  }
- 
-@@ -8291,6 +8441,14 @@ ath12k_mac_op_reconfig_complete(struct i
+@@ -9958,6 +10108,14 @@ ath12k_mac_op_reconfig_complete(struct i
  		ath12k_warn(ar->ab, "pdev %d successfully recovered\n",
  		ath12k_warn(ar->ab, "pdev %d successfully recovered\n",
  			    ar->pdev->pdev_id);
  			    ar->pdev->pdev_id);
  
  
@@ -733,19 +733,19 @@ Acked-by: Jeff Johnson <[email protected]>
  		if (ab->is_reset) {
  		if (ab->is_reset) {
  			recovery_count = atomic_inc_return(&ab->recovery_count);
  			recovery_count = atomic_inc_return(&ab->recovery_count);
  
  
-@@ -9340,6 +9498,9 @@ static void ath12k_mac_setup(struct ath1
+@@ -11173,6 +11331,9 @@ static void ath12k_mac_setup(struct ath1
  
  
- 	INIT_WORK(&ar->wmi_mgmt_tx_work, ath12k_mgmt_over_wmi_tx_work);
+ 	wiphy_work_init(&ar->wmi_mgmt_tx_work, ath12k_mgmt_over_wmi_tx_work);
  	skb_queue_head_init(&ar->wmi_mgmt_tx_queue);
  	skb_queue_head_init(&ar->wmi_mgmt_tx_queue);
 +
 +
 +	ar->vdev_id_11d_scan = ATH12K_11D_INVALID_VDEV_ID;
 +	ar->vdev_id_11d_scan = ATH12K_11D_INVALID_VDEV_ID;
 +	init_completion(&ar->completed_11d_scan);
 +	init_completion(&ar->completed_11d_scan);
  }
  }
  
  
- int ath12k_mac_register(struct ath12k_base *ab)
+ static int __ath12k_mac_mlo_setup(struct ath12k *ar)
 --- a/drivers/net/wireless/ath/ath12k/mac.h
 --- a/drivers/net/wireless/ath/ath12k/mac.h
 +++ b/drivers/net/wireless/ath/ath12k/mac.h
 +++ b/drivers/net/wireless/ath/ath12k/mac.h
-@@ -51,6 +51,13 @@ enum ath12k_supported_bw {
+@@ -66,6 +66,13 @@ struct ath12k_mac_get_any_chanctx_conf_a
  
  
  extern const struct htt_rx_ring_tlv_filter ath12k_mac_mon_status_filter_default;
  extern const struct htt_rx_ring_tlv_filter ath12k_mac_mon_status_filter_default;
  
  
@@ -756,9 +756,9 @@ Acked-by: Jeff Johnson <[email protected]>
 +void ath12k_mac_11d_scan_stop(struct ath12k *ar);
 +void ath12k_mac_11d_scan_stop(struct ath12k *ar);
 +void ath12k_mac_11d_scan_stop_all(struct ath12k_base *ab);
 +void ath12k_mac_11d_scan_stop_all(struct ath12k_base *ab);
 +
 +
- void ath12k_mac_destroy(struct ath12k_base *ab);
- void ath12k_mac_unregister(struct ath12k_base *ab);
- int ath12k_mac_register(struct ath12k_base *ab);
+ void ath12k_mac_destroy(struct ath12k_hw_group *ag);
+ void ath12k_mac_unregister(struct ath12k_hw_group *ag);
+ int ath12k_mac_register(struct ath12k_hw_group *ag);
 --- a/drivers/net/wireless/ath/ath12k/reg.c
 --- a/drivers/net/wireless/ath/ath12k/reg.c
 +++ b/drivers/net/wireless/ath/ath12k/reg.c
 +++ b/drivers/net/wireless/ath/ath12k/reg.c
 @@ -48,6 +48,7 @@ ath12k_reg_notifier(struct wiphy *wiphy,
 @@ -48,6 +48,7 @@ ath12k_reg_notifier(struct wiphy *wiphy,

+ 0 - 67
package/kernel/mac80211/patches/ath12k/002-wifi-ath12k-Fetch-regdb.bin-file-from-board-2.bin.patch

@@ -1,67 +0,0 @@
-From 24f587572acf7509127dbdfcbf1b681ef84eeba0 Mon Sep 17 00:00:00 2001
-From: Aaradhana Sahu <[email protected]>
-Date: Thu, 16 Jan 2025 08:58:35 +0530
-Subject: [PATCH] wifi: ath12k: Fetch regdb.bin file from board-2.bin
-
-Currently, ath12k_core_fetch_regdb() finds regdb.bin file through
-board id's but in board-2.bin file regdb.bin file is present with
-default board id because of which regdb.bin is not fetched.
-
-Add support to fetch regdb.bin file from board-2.bin through
-default board id.
-
-Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
-
-Signed-off-by: Aaradhana Sahu <[email protected]>
-Reviewed-by: Aditya Kumar Singh <[email protected]>
-Link: https://patch.msgid.link/[email protected]
-Signed-off-by: Jeff Johnson <[email protected]>
----
- drivers/net/wireless/ath/ath12k/core.c | 12 +++++++-----
- 1 file changed, 7 insertions(+), 5 deletions(-)
-
---- a/drivers/net/wireless/ath/ath12k/core.c
-+++ b/drivers/net/wireless/ath/ath12k/core.c
-@@ -161,7 +161,7 @@ EXPORT_SYMBOL(ath12k_core_resume);
- 
- static int __ath12k_core_create_board_name(struct ath12k_base *ab, char *name,
- 					   size_t name_len, bool with_variant,
--					   bool bus_type_mode)
-+					   bool bus_type_mode, bool with_default)
- {
- 	/* strlen(',variant=') + strlen(ab->qmi.target.bdf_ext) */
- 	char variant[9 + ATH12K_QMI_BDF_EXT_STR_LENGTH] = { 0 };
-@@ -192,7 +192,9 @@ static int __ath12k_core_create_board_na
- 			  "bus=%s,qmi-chip-id=%d,qmi-board-id=%d%s",
- 			  ath12k_bus_str(ab->hif.bus),
- 			  ab->qmi.target.chip_id,
--			  ab->qmi.target.board_id, variant);
-+			  with_default ?
-+			  ATH12K_BOARD_ID_DEFAULT : ab->qmi.target.board_id,
-+			  variant);
- 		break;
- 	}
- 
-@@ -204,19 +206,19 @@ static int __ath12k_core_create_board_na
- static int ath12k_core_create_board_name(struct ath12k_base *ab, char *name,
- 					 size_t name_len)
- {
--	return __ath12k_core_create_board_name(ab, name, name_len, true, false);
-+	return __ath12k_core_create_board_name(ab, name, name_len, true, false, false);
- }
- 
- static int ath12k_core_create_fallback_board_name(struct ath12k_base *ab, char *name,
- 						  size_t name_len)
- {
--	return __ath12k_core_create_board_name(ab, name, name_len, false, false);
-+	return __ath12k_core_create_board_name(ab, name, name_len, false, false, true);
- }
- 
- static int ath12k_core_create_bus_type_board_name(struct ath12k_base *ab, char *name,
- 						  size_t name_len)
- {
--	return __ath12k_core_create_board_name(ab, name, name_len, false, true);
-+	return __ath12k_core_create_board_name(ab, name, name_len, false, true, true);
- }
- 
- const struct firmware *ath12k_core_firmware_request(struct ath12k_base *ab,

+ 53 - 0
package/kernel/mac80211/patches/ath12k/003-1-v6.16-wifi-ath12k-Pass-correct-values-of-center-freq1-and-.patch

@@ -0,0 +1,53 @@
+From b1b01e46a3db5ad44d1e4691ba37c1e0832cd5cf Mon Sep 17 00:00:00 2001
+From: Suraj P Kizhakkethil <[email protected]>
+Date: Tue, 4 Mar 2025 15:23:14 +0530
+Subject: [PATCH 1/2] wifi: ath12k: Pass correct values of center freq1 and
+ center freq2 for 160 MHz
+
+Currently, for 160 MHz bandwidth, center frequency1 and
+center frequency2 are not passed correctly to the firmware.
+Set center frequency1 as the center frequency
+of the primary 80 MHz channel segment and center frequency2 as
+the center frequency of the 160 MHz channel and pass the values
+to the firmware.
+
+Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
+
+Signed-off-by: Suraj P Kizhakkethil <[email protected]>
+Reviewed-by: Aditya Kumar Singh <[email protected]>
+Link: https://patch.msgid.link/[email protected]
+Signed-off-by: Jeff Johnson <[email protected]>
+---
+ drivers/net/wireless/ath/ath12k/wmi.c | 16 +++++++++++++---
+ 1 file changed, 13 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/wireless/ath/ath12k/wmi.c
++++ b/drivers/net/wireless/ath/ath12k/wmi.c
+@@ -1000,14 +1000,24 @@ int ath12k_wmi_vdev_down(struct ath12k *
+ static void ath12k_wmi_put_wmi_channel(struct ath12k_wmi_channel_params *chan,
+ 				       struct wmi_vdev_start_req_arg *arg)
+ {
++	u32 center_freq1 = arg->band_center_freq1;
++
+ 	memset(chan, 0, sizeof(*chan));
+ 
+ 	chan->mhz = cpu_to_le32(arg->freq);
+-	chan->band_center_freq1 = cpu_to_le32(arg->band_center_freq1);
+-	if (arg->mode == MODE_11AC_VHT80_80)
++	chan->band_center_freq1 = cpu_to_le32(center_freq1);
++	if (arg->mode == MODE_11BE_EHT160) {
++		if (arg->freq > center_freq1)
++			chan->band_center_freq1 = cpu_to_le32(center_freq1 + 40);
++		else
++			chan->band_center_freq1 = cpu_to_le32(center_freq1 - 40);
++
++		chan->band_center_freq2 = cpu_to_le32(center_freq1);
++	} else if (arg->mode == MODE_11BE_EHT80_80) {
+ 		chan->band_center_freq2 = cpu_to_le32(arg->band_center_freq2);
+-	else
++	} else {
+ 		chan->band_center_freq2 = 0;
++	}
+ 
+ 	chan->info |= le32_encode_bits(arg->mode, WMI_CHAN_INFO_MODE);
+ 	if (arg->passive)

+ 43 - 0
package/kernel/mac80211/patches/ath12k/003-2-v6.16-wifi-ath12k-Pass-correct-values-of-center-freq1-and-.patch

@@ -0,0 +1,43 @@
+From 5e44b181bec8e2fe3826033360fc1a42bb432191 Mon Sep 17 00:00:00 2001
+From: Sriram R <[email protected]>
+Date: Tue, 4 Mar 2025 15:23:15 +0530
+Subject: [PATCH 2/2] wifi: ath12k: Pass correct values of center freq1 and
+ center freq2 for 320 MHz
+
+Currently, for 320 MHz bandwidth, center frequency1 and
+center frequency2 are not passed correctly to the firmware.
+Set center frequency1 as the center frequency of the
+primary 160 MHz channel segment and center frequency2 as the center
+frequency of the 320 MHz channel and pass the values
+to the firmware.
+
+Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
+
+Signed-off-by: Sriram R <[email protected]>
+Signed-off-by: Suraj P Kizhakkethil <[email protected]>
+Reviewed-by: Aditya Kumar Singh <[email protected]>
+Link: https://patch.msgid.link/[email protected]
+Signed-off-by: Jeff Johnson <[email protected]>
+---
+ drivers/net/wireless/ath/ath12k/wmi.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+--- a/drivers/net/wireless/ath/ath12k/wmi.c
++++ b/drivers/net/wireless/ath/ath12k/wmi.c
+@@ -1006,7 +1006,15 @@ static void ath12k_wmi_put_wmi_channel(s
+ 
+ 	chan->mhz = cpu_to_le32(arg->freq);
+ 	chan->band_center_freq1 = cpu_to_le32(center_freq1);
+-	if (arg->mode == MODE_11BE_EHT160) {
++	if (arg->mode == MODE_11BE_EHT320) {
++		if (arg->freq > center_freq1)
++			chan->band_center_freq1 = cpu_to_le32(center_freq1 + 80);
++		else
++			chan->band_center_freq1 = cpu_to_le32(center_freq1 - 80);
++
++		chan->band_center_freq2 = cpu_to_le32(center_freq1);
++
++	} else if (arg->mode == MODE_11BE_EHT160) {
+ 		if (arg->freq > center_freq1)
+ 			chan->band_center_freq1 = cpu_to_le32(center_freq1 + 40);
+ 		else

+ 0 - 140
package/kernel/mac80211/patches/ath12k/003-wifi-ath12k-fix-handling-of-6-GHz-rules.patch

@@ -1,140 +0,0 @@
-From 64a1ba4072b34af1b76bf15fca5c2075b8cc4d64 Mon Sep 17 00:00:00 2001
-From: Aditya Kumar Singh <[email protected]>
-Date: Thu, 23 Jan 2025 21:51:38 +0530
-Subject: [PATCH] wifi: ath12k: fix handling of 6 GHz rules
-
-In the US country code, to avoid including 6 GHz rules in the 5 GHz rules
-list, the number of 5 GHz rules is set to a default constant value of 4
-(REG_US_5G_NUM_REG_RULES). However, if there are more than 4 valid 5 GHz
-rules, the current logic will bypass the legitimate 6 GHz rules.
-
-For example, if there are 5 valid 5 GHz rules and 1 valid 6 GHz rule, the
-current logic will only consider 4 of the 5 GHz rules, treating the last
-valid rule as a 6 GHz rule. Consequently, the actual 6 GHz rule is never
-processed, leading to the eventual disabling of 6 GHz channels.
-
-To fix this issue, instead of hardcoding the value to 4, use a helper
-function to determine the number of 6 GHz rules present in the 5 GHz rules
-list and ignore only those rules.
-
-Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
-
-Cc: [email protected]
-Fixes: d889913205cf ("wifi: ath12k: driver for Qualcomm Wi-Fi 7 devices")
-Signed-off-by: Aditya Kumar Singh <[email protected]>
-Link: https://patch.msgid.link/20250123-fix_6ghz_rules_handling-v1-1-d734bfa58ff4@oss.qualcomm.com
-Signed-off-by: Jeff Johnson <[email protected]>
----
- drivers/net/wireless/ath/ath12k/wmi.c | 61 ++++++++++++++++++++++++++---------
- drivers/net/wireless/ath/ath12k/wmi.h |  1 -
- 2 files changed, 45 insertions(+), 17 deletions(-)
-
---- a/drivers/net/wireless/ath/ath12k/wmi.c
-+++ b/drivers/net/wireless/ath/ath12k/wmi.c
-@@ -4790,6 +4790,22 @@ static struct ath12k_reg_rule
- 	return reg_rule_ptr;
- }
- 
-+static u8 ath12k_wmi_ignore_num_extra_rules(struct ath12k_wmi_reg_rule_ext_params *rule,
-+					    u32 num_reg_rules)
-+{
-+	u8 num_invalid_5ghz_rules = 0;
-+	u32 count, start_freq;
-+
-+	for (count = 0; count < num_reg_rules; count++) {
-+		start_freq = le32_get_bits(rule[count].freq_info, REG_RULE_START_FREQ);
-+
-+		if (start_freq >= ATH12K_MIN_6G_FREQ)
-+			num_invalid_5ghz_rules++;
-+	}
-+
-+	return num_invalid_5ghz_rules;
-+}
-+
- static int ath12k_pull_reg_chan_list_ext_update_ev(struct ath12k_base *ab,
- 						   struct sk_buff *skb,
- 						   struct ath12k_reg_info *reg_info)
-@@ -4800,6 +4816,7 @@ static int ath12k_pull_reg_chan_list_ext
- 	u32 num_2g_reg_rules, num_5g_reg_rules;
- 	u32 num_6g_reg_rules_ap[WMI_REG_CURRENT_MAX_AP_TYPE];
- 	u32 num_6g_reg_rules_cl[WMI_REG_CURRENT_MAX_AP_TYPE][WMI_REG_MAX_CLIENT_TYPE];
-+	u8 num_invalid_5ghz_ext_rules;
- 	u32 total_reg_rules = 0;
- 	int ret, i, j;
- 
-@@ -4893,20 +4910,6 @@ static int ath12k_pull_reg_chan_list_ext
- 
- 	memcpy(reg_info->alpha2, &ev->alpha2, REG_ALPHA2_LEN);
- 
--	/* FIXME: Currently FW includes 6G reg rule also in 5G rule
--	 * list for country US.
--	 * Having same 6G reg rule in 5G and 6G rules list causes
--	 * intersect check to be true, and same rules will be shown
--	 * multiple times in iw cmd. So added hack below to avoid
--	 * parsing 6G rule from 5G reg rule list, and this can be
--	 * removed later, after FW updates to remove 6G reg rule
--	 * from 5G rules list.
--	 */
--	if (memcmp(reg_info->alpha2, "US", 2) == 0) {
--		reg_info->num_5g_reg_rules = REG_US_5G_NUM_REG_RULES;
--		num_5g_reg_rules = reg_info->num_5g_reg_rules;
--	}
--
- 	reg_info->dfs_region = le32_to_cpu(ev->dfs_region);
- 	reg_info->phybitmap = le32_to_cpu(ev->phybitmap);
- 	reg_info->num_phy = le32_to_cpu(ev->num_phy);
-@@ -5009,8 +5012,29 @@ static int ath12k_pull_reg_chan_list_ext
- 		}
- 	}
- 
-+	ext_wmi_reg_rule += num_2g_reg_rules;
-+
-+	/* Firmware might include 6 GHz reg rule in 5 GHz rule list
-+	 * for few countries along with separate 6 GHz rule.
-+	 * Having same 6 GHz reg rule in 5 GHz and 6 GHz rules list
-+	 * causes intersect check to be true, and same rules will be
-+	 * shown multiple times in iw cmd.
-+	 * Hence, avoid parsing 6 GHz rule from 5 GHz reg rule list
-+	 */
-+	num_invalid_5ghz_ext_rules = ath12k_wmi_ignore_num_extra_rules(ext_wmi_reg_rule,
-+								       num_5g_reg_rules);
-+
-+	if (num_invalid_5ghz_ext_rules) {
-+		ath12k_dbg(ab, ATH12K_DBG_WMI,
-+			   "CC: %s 5 GHz reg rules number %d from fw, %d number of invalid 5 GHz rules",
-+			   reg_info->alpha2, reg_info->num_5g_reg_rules,
-+			   num_invalid_5ghz_ext_rules);
-+
-+		num_5g_reg_rules = num_5g_reg_rules - num_invalid_5ghz_ext_rules;
-+		reg_info->num_5g_reg_rules = num_5g_reg_rules;
-+	}
-+
- 	if (num_5g_reg_rules) {
--		ext_wmi_reg_rule += num_2g_reg_rules;
- 		reg_info->reg_rules_5g_ptr =
- 			create_ext_reg_rules_from_wmi(num_5g_reg_rules,
- 						      ext_wmi_reg_rule);
-@@ -5022,7 +5046,12 @@ static int ath12k_pull_reg_chan_list_ext
- 		}
- 	}
- 
--	ext_wmi_reg_rule += num_5g_reg_rules;
-+	/* We have adjusted the number of 5 GHz reg rules above. But still those
-+	 * many rules needs to be adjusted in ext_wmi_reg_rule.
-+	 *
-+	 * NOTE: num_invalid_5ghz_ext_rules will be 0 for rest other cases.
-+	 */
-+	ext_wmi_reg_rule += (num_5g_reg_rules + num_invalid_5ghz_ext_rules);
- 
- 	for (i = 0; i < WMI_REG_CURRENT_MAX_AP_TYPE; i++) {
- 		reg_info->reg_rules_6g_ap_ptr[i] =
---- a/drivers/net/wireless/ath/ath12k/wmi.h
-+++ b/drivers/net/wireless/ath/ath12k/wmi.h
-@@ -3965,7 +3965,6 @@ struct ath12k_wmi_eht_rate_set_params {
- #define MAX_REG_RULES 10
- #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];

+ 1 - 1
package/kernel/mac80211/patches/ath12k/100-ath12k-prevent-ltssm-startup-crash.patch

@@ -5,7 +5,7 @@ But have issues on BPI-Rx boards.
 
 
 --- a/drivers/net/wireless/ath/ath12k/pci.c
 --- a/drivers/net/wireless/ath/ath12k/pci.c
 +++ b/drivers/net/wireless/ath/ath12k/pci.c
 +++ b/drivers/net/wireless/ath/ath12k/pci.c
-@@ -277,6 +277,9 @@ static void ath12k_pci_enable_ltssm(stru
+@@ -279,6 +279,9 @@ static void ath12k_pci_enable_ltssm(stru
  	u32 val;
  	u32 val;
  	int i;
  	int i;
  
  

+ 2 - 2
package/kernel/mac80211/patches/ath12k/102-wifi-ath12k-limit-WMI_SCAN_CHAN_LIST_CMDID-arg.patch

@@ -130,7 +130,7 @@ Best regards,
 
 
 --- a/drivers/net/wireless/ath/ath12k/wmi.c
 --- a/drivers/net/wireless/ath/ath12k/wmi.c
 +++ b/drivers/net/wireless/ath/ath12k/wmi.c
 +++ b/drivers/net/wireless/ath/ath12k/wmi.c
-@@ -2558,6 +2558,9 @@ int ath12k_wmi_send_scan_chan_list_cmd(s
+@@ -2743,6 +2743,9 @@ int ath12k_wmi_send_scan_chan_list_cmd(s
  		max_chan_limit = (wmi->wmi_ab->max_msg_len[ar->pdev_idx] - len) /
  		max_chan_limit = (wmi->wmi_ab->max_msg_len[ar->pdev_idx] - len) /
  			sizeof(*chan_info);
  			sizeof(*chan_info);
  
  
@@ -142,7 +142,7 @@ Best regards,
  		arg->nallchans -= num_send_chans;
  		arg->nallchans -= num_send_chans;
 --- a/drivers/net/wireless/ath/ath12k/wmi.h
 --- a/drivers/net/wireless/ath/ath12k/wmi.h
 +++ b/drivers/net/wireless/ath/ath12k/wmi.h
 +++ b/drivers/net/wireless/ath/ath12k/wmi.h
-@@ -3743,6 +3743,8 @@ struct wmi_stop_scan_cmd {
+@@ -3873,6 +3873,8 @@ struct wmi_stop_scan_cmd {
  	__le32 pdev_id;
  	__le32 pdev_id;
  } __packed;
  } __packed;
  
  

+ 1 - 1
package/kernel/mac80211/patches/ath12k/103-wifi-ath12k-fix-5GHz-operation-on-wideband-QCN.patch

@@ -124,7 +124,7 @@ Best regards,
 
 
 --- a/drivers/net/wireless/ath/ath12k/mac.c
 --- a/drivers/net/wireless/ath/ath12k/mac.c
 +++ b/drivers/net/wireless/ath/ath12k/mac.c
 +++ b/drivers/net/wireless/ath/ath12k/mac.c
-@@ -5186,9 +5186,7 @@ static void ath12k_mac_setup_ht_vht_cap(
+@@ -6432,9 +6432,7 @@ static void ath12k_mac_setup_ht_vht_cap(
  						    rate_cap_rx_chainmask);
  						    rate_cap_rx_chainmask);
  	}
  	}
  
  

+ 115 - 100
package/kernel/mac80211/patches/ath12k/104-1-wifi-ath12k-push-HE-MU-MIMO-params-to-hardware.patch

@@ -1,68 +1,68 @@
-From patchwork Wed Sep 18 21:20:48 2024
+From patchwork Wed May 21 22:45:31 2025
 Content-Type: text/plain; charset="utf-8"
 Content-Type: text/plain; charset="utf-8"
 MIME-Version: 1.0
 MIME-Version: 1.0
 Content-Transfer-Encoding: 7bit
 Content-Transfer-Encoding: 7bit
 X-Patchwork-Submitter: Pradeep Kumar Chitrapu <[email protected]>
 X-Patchwork-Submitter: Pradeep Kumar Chitrapu <[email protected]>
-X-Patchwork-Id: 13807212
+X-Patchwork-Id: 14096118
 X-Patchwork-Delegate: [email protected]
 X-Patchwork-Delegate: [email protected]
-Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com
- [205.220.168.131])
+Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com
+ [205.220.180.131])
 	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 	(No client certificate requested)
 	(No client certificate requested)
-	by smtp.subspace.kernel.org (Postfix) with ESMTPS id A06681CA6B9
-	for <[email protected]>; Wed, 18 Sep 2024 21:21:13 +0000 (UTC)
+	by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8D9B523506D
+	for <[email protected]>; Wed, 21 May 2025 22:45:57 +0000 (UTC)
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
- arc=none smtp.client-ip=205.220.168.131
+ arc=none smtp.client-ip=205.220.180.131
 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
-	t=1726694475; cv=none;
- b=HjUnHV2ZbMRZne/OD71kC1p0zBs+1+LVanM+3YbUfCnjvvtSry2r0Dj0HBjHnId1ltZw0ebTJaEZDcXBybkc2yiiGRlcH5s4feXisp9WApElGptz2Qn1SEtO3VDLKyE5m56eJftK/dpin6HPZGOk3hMBHkxoo966Jp4vlC9e2rY=
+	t=1747867559; cv=none;
+ b=QXLrpE5trQYq3qZVPuAYdZ8IfmZi7XatjLyxn+9IZXmAWvPsCpT2EOrmLKoTKXH1gxwInwHzxiiwzDveDdYBFh2FGnxhAgdJlTBf1yChfW7+YndhKTtca3rP8z+Zt8QK48/n7gpmFEWkKGmxkG1DKIkCHgAZjD///ttubaAe2gc=
 ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
 ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
-	s=arc-20240116; t=1726694475; c=relaxed/simple;
-	bh=lJX5iM2Ahf/ROaeR2Kk4suhcbwA47aOSPqyQsesg4A0=;
+	s=arc-20240116; t=1747867559; c=relaxed/simple;
+	bh=wlnSlGktw4cBYqpNPJwSPfG4fkld5ABcJ0NmmjY/jLg=;
 	h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:
 	h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:
 	 MIME-Version:Content-Type;
 	 MIME-Version:Content-Type;
- b=RYEWdi9+UZKYtzHKfAF5xdIOkpdgQjBK8hE1SX/f0rJDxozjZe1jDY28C+kzN4uhSwcBSwr7pZjMLL8LELNITE6fIk/zDY5UAO/jdeUPBnTrmrckzZOwaCFIQ1nt6ssDZDfpJADBjCIuMXB7HNChH3qSMlmYTV9QTDxpBK0fQxM=
+ b=A4dIxT87Fh9Y97+jvDIVTPlA5cnixK5ZcCAl5lklS0dCWBpo0QkFFiYyRUSKso7kYaT6KFazofkMt8A2z/fDgN8gVZgqEkaXDFSRjqNWCtoplSK7qYryl88snzbQvzD52CbWKkX8yu2Qmd98HFrl2kg69o1e4wzXVcNc+fehea8=
 ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
 ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
  dmarc=pass (p=none dis=none) header.from=quicinc.com;
  dmarc=pass (p=none dis=none) header.from=quicinc.com;
  spf=pass smtp.mailfrom=quicinc.com;
  spf=pass smtp.mailfrom=quicinc.com;
  dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
  dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
- header.b=EtpV59A6; arc=none smtp.client-ip=205.220.168.131
+ header.b=gwsO0461; arc=none smtp.client-ip=205.220.180.131
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
  dmarc=pass (p=none dis=none) header.from=quicinc.com
  dmarc=pass (p=none dis=none) header.from=quicinc.com
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
  spf=pass smtp.mailfrom=quicinc.com
  spf=pass smtp.mailfrom=quicinc.com
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
 	dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
 	dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
- header.b="EtpV59A6"
-Received: from pps.filterd (m0279862.ppops.net [127.0.0.1])
+ header.b="gwsO0461"
+Received: from pps.filterd (m0279871.ppops.net [127.0.0.1])
 	by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id
 	by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id
- 48IL3WbX003099;
-	Wed, 18 Sep 2024 21:21:07 GMT
+ 54LIZCMW000836;
+	Wed, 21 May 2025 22:45:53 GMT
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
 	cc:content-transfer-encoding:content-type:date:from:in-reply-to
 	cc:content-transfer-encoding:content-type:date:from:in-reply-to
 	:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=
 	:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=
-	3ukRiLVgAcc9GoJxAaFrgsHYImZ/9ZPgSlMf75Ew/1Y=; b=EtpV59A6K8yD5o5B
-	8JSYPL7TI2tnIQciUmyLNJig3DWGn3AZbFqPjgTYUgoQLHjsNWd+WRAKx13tQhSW
-	peq0OW9986uI1TFVpaw0pwVXoBiStEI5MH/7ThiA5nIAI4hYBI6+iiwL7qWpboSL
-	UrG9sWI35wsgcjedTtrzR2QfpeTAvlnReoac/49o5GAysu1oGDN79VAAP7tDZbO2
-	trx/XdQmW/8iqtRR3Idhjcod6B6ovXKkmAZUHzhp4zRupTUsKOU84X3aTYZQLN/B
-	46HuFZSlOJEB/63Co7I2K8YfQT3FikP2mkrIsDwH78Y2OekhXJWFe7dU4SsX6nh6
-	sIXVxA==
-Received: from nalasppmta04.qualcomm.com (Global_NAT1.qualcomm.com
+	jJ/9931jjDg+8neUbH09oigyzQwINmgJKgsYw6rWwPU=; b=gwsO0461NDm4hzMy
+	/aP5LNjbfqB08SmlMEzcZ/MRNS7Ffjdvz9gsUyJR4DOilx71C5MvB0ZBvxEJF6pg
+	qcU4QPZtOzyixWx+3vL6eh4Sdt/RN5AD/6U6TJEZCPwdJNLMD5uB2OQjP87NG9Wj
+	2aEs+kb//lRXz6Gy5d7CCDW3+1KSDzgIg/cYJecPjWsMKbyCxTeFTIkkdonetQyz
+	PSzkIDi3IBnca94koYTQyFTVvpUVHpC3QAq+jM9+xQJOItRbDHZjdPjLG6q1ML4W
+	zYHODhd8LupxL323rnWJQxtYu5Ver7g2LgPW3npNz/JEdF2Hq9b8G0w5U8qVJVHr
+	2nNuUA==
+Received: from nalasppmta05.qualcomm.com (Global_NAT1.qualcomm.com
  [129.46.96.20])
  [129.46.96.20])
-	by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 41n4gd387e-1
+	by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46rwf6vbsd-1
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
-	Wed, 18 Sep 2024 21:21:07 +0000 (GMT)
+	Wed, 21 May 2025 22:45:53 +0000 (GMT)
 Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com
 Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com
  [10.47.209.196])
  [10.47.209.196])
-	by NALASPPMTA04.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id
- 48ILL6rr020545
+	by NALASPPMTA05.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id
+ 54LMjqLl023280
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
-	Wed, 18 Sep 2024 21:21:06 GMT
-Received: from ath12k-linux1.qualcomm.com (10.80.80.8) by
+	Wed, 21 May 2025 22:45:52 GMT
+Received: from ath12k-linux2.qualcomm.com (10.80.80.8) by
  nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server
  nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server
  (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
  (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
- 15.2.1544.9; Wed, 18 Sep 2024 14:21:06 -0700
+ 15.2.1544.9; Wed, 21 May 2025 15:45:51 -0700
 From: Pradeep Kumar Chitrapu <[email protected]>
 From: Pradeep Kumar Chitrapu <[email protected]>
 To: <[email protected]>
 To: <[email protected]>
 CC: <[email protected]>,
 CC: <[email protected]>,
@@ -71,12 +71,13 @@ CC: <[email protected]>,
         Muna Sinada <[email protected]>,
         Muna Sinada <[email protected]>,
         "Jeff
         "Jeff
  Johnson" <[email protected]>
  Johnson" <[email protected]>
-Subject: [PATCH V8 1/9] wifi: ath12k: push HE MU-MIMO params to hardware
-Date: Wed, 18 Sep 2024 14:20:48 -0700
-Message-ID: <[email protected]>
-X-Mailer: git-send-email 2.34.1
-In-Reply-To: <[email protected]>
-References: <[email protected]>
+Subject: [PATCH ath-next V14 1/9] wifi: ath12k: push HE MU-MIMO params to
+ hardware
+Date: Wed, 21 May 2025 15:45:31 -0700
+Message-ID: <[email protected]>
+X-Mailer: git-send-email 2.43.0
+In-Reply-To: <[email protected]>
+References: <[email protected]>
 Precedence: bulk
 Precedence: bulk
 X-Mailing-List: [email protected]
 X-Mailing-List: [email protected]
 List-Id: <linux-wireless.vger.kernel.org>
 List-Id: <linux-wireless.vger.kernel.org>
@@ -88,17 +89,28 @@ X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To
 X-QCInternal: smtphost
 X-QCInternal: smtphost
 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800
 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800
  signatures=585085
  signatures=585085
-X-Proofpoint-ORIG-GUID: QTgqLsl2p5OGLwWEQsGrsmA8q68U11H8
-X-Proofpoint-GUID: QTgqLsl2p5OGLwWEQsGrsmA8q68U11H8
+X-Proofpoint-GUID: Zzf2Q5y4JzSN5f1E_vlCnvLRODG4zasa
+X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTIxMDIyNiBTYWx0ZWRfXyLZVeJQcQf0U
+ B/O6/0+L+1nXg6SAFSC1bdc8B/eF8RxRnvbbX+YkF3RG14/UHGCF654g8ZXTq8oTCDzm3x5wmAk
+ i8wAlv0otog8iYaicRd5q/x9Vynwlo0e67/iHhH1K0rxsp5yagZ6L3XLS82iLDPuXzHP7ylgo+I
+ D0c1CMcLo4bGNe421uQk2jqRij3j1iAoI0gGSwcQqHRucJQSYetF+SSp/oDox9Dn2TqOagngt4V
+ UxzAxO13SoH2X7RyWe5NxhfbEjOUmHjfodyJhBfIYh4s5SCx8IDUn6jSorAnl5mh1ZmAfISyZCC
+ UqoQ2LDdmGl1HT3d4xvb7/ah09ru4wukKEcvP+HDrow6Xn/WsfgmRy6xdRv5vdNODiEv64XOGHa
+ TxrJA2l36xRwX82xvkyUzyQ1sIeXwbvD0Wn//AQSmFVE0uMJHnCwRE1OYRGf9Dd2p/mfZfFh
+X-Authority-Analysis: v=2.4 cv=fZOty1QF c=1 sm=1 tr=0 ts=682e57a1 cx=c_pps
+ a=ouPCqIW2jiPt+lZRy3xVPw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17
+ a=GEpy-HfZoHoA:10 a=dt9VzEwgFbYA:10 a=COk6AnOGAAAA:8 a=-_O-Wy8N5QNPZvNXkjkA:9
+ a=TjNXssC_j7lpFel5tvFf:22
+X-Proofpoint-ORIG-GUID: Zzf2Q5y4JzSN5f1E_vlCnvLRODG4zasa
 X-Proofpoint-Virus-Version: vendor=baseguard
 X-Proofpoint-Virus-Version: vendor=baseguard
- engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.60.29
- definitions=2024-09-06_09,2024-09-06_01,2024-09-02_01
+ engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
+ definitions=2025-05-21_07,2025-05-20_03,2025-03-28_01
 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
- malwarescore=0 suspectscore=0
- bulkscore=0 clxscore=1015 spamscore=0 adultscore=0 lowpriorityscore=0
- mlxlogscore=999 impostorscore=0 mlxscore=0 priorityscore=1501 phishscore=0
- classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2408220000
- definitions=main-2409180140
+ clxscore=1015 mlxscore=0 adultscore=0 spamscore=0 bulkscore=0 suspectscore=0
+ malwarescore=0 priorityscore=1501 impostorscore=0 mlxlogscore=999
+ lowpriorityscore=0 phishscore=0 classifier=spam authscore=0 authtc=n/a
+ authcc= route=outbound adjust=0 reason=mlx scancount=1
+ engine=8.19.0-2505160000 definitions=main-2505210226
 
 
 Currently, only the HE IE in management frames is updated with
 Currently, only the HE IE in management frames is updated with
 respect to MU-MIMO configurations, but this change is not
 respect to MU-MIMO configurations, but this change is not
@@ -112,42 +124,50 @@ Signed-off-by: Muna Sinada <[email protected]>
 Signed-off-by: Pradeep Kumar Chitrapu <[email protected]>
 Signed-off-by: Pradeep Kumar Chitrapu <[email protected]>
 Acked-by: Jeff Johnson <[email protected]>
 Acked-by: Jeff Johnson <[email protected]>
 ---
 ---
- drivers/net/wireless/ath/ath12k/mac.c | 215 +++++++++++++++++---------
+ drivers/net/wireless/ath/ath12k/mac.c | 228 +++++++++++++++++---------
  drivers/net/wireless/ath/ath12k/mac.h |  15 ++
  drivers/net/wireless/ath/ath12k/mac.h |  15 ++
  drivers/net/wireless/ath/ath12k/wmi.h |  28 +---
  drivers/net/wireless/ath/ath12k/wmi.h |  28 +---
- 3 files changed, 156 insertions(+), 102 deletions(-)
+ 3 files changed, 169 insertions(+), 102 deletions(-)
 
 
 --- a/drivers/net/wireless/ath/ath12k/mac.c
 --- a/drivers/net/wireless/ath/ath12k/mac.c
 +++ b/drivers/net/wireless/ath/ath12k/mac.c
 +++ b/drivers/net/wireless/ath/ath12k/mac.c
-@@ -2851,6 +2851,108 @@ static int ath12k_setup_peer_smps(struct
+@@ -3215,6 +3215,125 @@ static int ath12k_setup_peer_smps(struct
  					 ath12k_smps_map[smps]);
  					 ath12k_smps_map[smps]);
  }
  }
  
  
-+static int ath12k_mac_set_he_txbf_conf(struct ath12k_vif *arvif)
++static int ath12k_mac_set_he_txbf_conf(struct ath12k_link_vif *arvif)
 +{
 +{
++	struct ath12k_vif *ahvif = arvif->ahvif;
 +	struct ath12k *ar = arvif->ar;
 +	struct ath12k *ar = arvif->ar;
 +	u32 param = WMI_VDEV_PARAM_SET_HEMU_MODE;
 +	u32 param = WMI_VDEV_PARAM_SET_HEMU_MODE;
 +	u32 value = 0;
 +	u32 value = 0;
 +	int ret;
 +	int ret;
++	struct ieee80211_bss_conf *link_conf;
 +
 +
-+	if (!arvif->vif->bss_conf.he_support)
++	link_conf = ath12k_mac_get_link_bss_conf(arvif);
++	if (!link_conf) {
++		ath12k_warn(ar->ab, "unable to access bss link conf in txbf conf\n");
++		return -EINVAL;
++	}
++
++	if (!link_conf->he_support)
 +		return 0;
 +		return 0;
 +
 +
-+	if (arvif->vif->bss_conf.he_su_beamformer) {
++	if (link_conf->he_su_beamformer) {
 +		value |= u32_encode_bits(HE_SU_BFER_ENABLE, HE_MODE_SU_TX_BFER);
 +		value |= u32_encode_bits(HE_SU_BFER_ENABLE, HE_MODE_SU_TX_BFER);
-+		if (arvif->vif->bss_conf.he_mu_beamformer &&
-+		    arvif->vdev_type == WMI_VDEV_TYPE_AP)
++		if (link_conf->he_mu_beamformer &&
++		    ahvif->vdev_type == WMI_VDEV_TYPE_AP)
 +			value |= u32_encode_bits(HE_MU_BFER_ENABLE, HE_MODE_MU_TX_BFER);
 +			value |= u32_encode_bits(HE_MU_BFER_ENABLE, HE_MODE_MU_TX_BFER);
 +	}
 +	}
 +
 +
-+	if (arvif->vif->type != NL80211_IFTYPE_MESH_POINT) {
++	if (ahvif->vif->type != NL80211_IFTYPE_MESH_POINT) {
 +		value |= u32_encode_bits(HE_DL_MUOFDMA_ENABLE, HE_MODE_DL_OFDMA) |
 +		value |= u32_encode_bits(HE_DL_MUOFDMA_ENABLE, HE_MODE_DL_OFDMA) |
 +			 u32_encode_bits(HE_UL_MUOFDMA_ENABLE, HE_MODE_UL_OFDMA);
 +			 u32_encode_bits(HE_UL_MUOFDMA_ENABLE, HE_MODE_UL_OFDMA);
 +
 +
-+		if (arvif->vif->bss_conf.he_full_ul_mumimo)
++		if (link_conf->he_full_ul_mumimo)
 +			value |= u32_encode_bits(HE_UL_MUMIMO_ENABLE, HE_MODE_UL_MUMIMO);
 +			value |= u32_encode_bits(HE_UL_MUMIMO_ENABLE, HE_MODE_UL_MUMIMO);
 +
 +
-+		if (arvif->vif->bss_conf.he_su_beamformee)
++		if (link_conf->he_su_beamformee)
 +			value |= u32_encode_bits(HE_SU_BFEE_ENABLE, HE_MODE_SU_TX_BFEE);
 +			value |= u32_encode_bits(HE_SU_BFEE_ENABLE, HE_MODE_SU_TX_BFEE);
 +	}
 +	}
 +
 +
@@ -174,21 +194,30 @@ Acked-by: Jeff Johnson <[email protected]>
 +}
 +}
 +
 +
 +static int ath12k_mac_vif_recalc_sta_he_txbf(struct ath12k *ar,
 +static int ath12k_mac_vif_recalc_sta_he_txbf(struct ath12k *ar,
-+					     struct ieee80211_vif *vif,
++					     struct ath12k_link_vif *arvif,
 +					     struct ieee80211_sta_he_cap *he_cap,
 +					     struct ieee80211_sta_he_cap *he_cap,
 +					     int *hemode)
 +					     int *hemode)
 +{
 +{
++	struct ieee80211_vif *vif = arvif->ahvif->vif;
 +	struct ieee80211_he_cap_elem he_cap_elem = {};
 +	struct ieee80211_he_cap_elem he_cap_elem = {};
 +	struct ieee80211_sta_he_cap *cap_band;
 +	struct ieee80211_sta_he_cap *cap_band;
 +	struct cfg80211_chan_def def;
 +	struct cfg80211_chan_def def;
++	u8 link_id = arvif->link_id;
++	struct ieee80211_bss_conf *link_conf;
 +
 +
-+	if (!vif->bss_conf.he_support)
++	link_conf = ath12k_mac_get_link_bss_conf(arvif);
++	if (!link_conf) {
++		ath12k_warn(ar->ab, "unable to access bss link conf in recalc txbf conf\n");
++		return -EINVAL;
++	}
++
++	if (!link_conf->he_support)
 +		return 0;
 +		return 0;
 +
 +
 +	if (vif->type != NL80211_IFTYPE_STATION)
 +	if (vif->type != NL80211_IFTYPE_STATION)
 +		return -EINVAL;
 +		return -EINVAL;
 +
 +
-+	if (WARN_ON(ath12k_mac_vif_chan(vif, &def)))
++	if (WARN_ON(ath12k_mac_vif_link_chan(vif, link_id, &def)))
 +		return -EINVAL;
 +		return -EINVAL;
 +
 +
 +	if (def.chan->band == NL80211_BAND_2GHZ)
 +	if (def.chan->band == NL80211_BAND_2GHZ)
@@ -226,29 +255,22 @@ Acked-by: Jeff Johnson <[email protected]>
 +}
 +}
 +
 +
  static void ath12k_bss_assoc(struct ath12k *ar,
  static void ath12k_bss_assoc(struct ath12k *ar,
- 			     struct ath12k_vif *arvif,
+ 			     struct ath12k_link_vif *arvif,
  			     struct ieee80211_bss_conf *bss_conf)
  			     struct ieee80211_bss_conf *bss_conf)
-@@ -2858,9 +2960,11 @@ static void ath12k_bss_assoc(struct ath1
- 	struct ieee80211_vif *vif = arvif->vif;
- 	struct ath12k_wmi_vdev_up_params params = {};
- 	struct ath12k_wmi_peer_assoc_arg peer_arg;
-+	struct ieee80211_sta_he_cap he_cap;
- 	struct ieee80211_sta *ap_sta;
+@@ -3229,6 +3348,7 @@ static void ath12k_bss_assoc(struct ath1
+ 	struct ath12k_sta *ahsta;
  	struct ath12k_peer *peer;
  	struct ath12k_peer *peer;
  	bool is_auth = false;
  	bool is_auth = false;
 +	u32 hemode = 0;
 +	u32 hemode = 0;
  	int ret;
  	int ret;
  
  
- 	lockdep_assert_held(&ar->conf_mutex);
-@@ -2880,8 +2984,29 @@ static void ath12k_bss_assoc(struct ath1
+ 	lockdep_assert_wiphy(ath12k_ar_to_hw(ar)->wiphy);
+@@ -3272,8 +3392,26 @@ static void ath12k_bss_assoc(struct ath1
  
  
- 	ath12k_peer_assoc_prepare(ar, vif, ap_sta, &peer_arg, false);
+ 	ath12k_peer_assoc_prepare(ar, arvif, arsta, peer_arg, false);
  
  
-+	/* he_cap here is updated at assoc success for sta mode only */
-+	he_cap = ap_sta->deflink.he_cap;
-+
-+	/* ap_sta->deflink.he_cap must be protected by rcu_read_lock */
-+	ret = ath12k_mac_vif_recalc_sta_he_txbf(ar, vif, &he_cap, &hemode);
++	/* link_sta->he_cap must be protected by rcu_read_lock */
++	ret = ath12k_mac_vif_recalc_sta_he_txbf(ar, arvif, &link_sta->he_cap, &hemode);
 +	if (ret) {
 +	if (ret) {
 +		ath12k_warn(ar->ab, "failed to recalc he txbf for vdev %i on bss %pM: %d\n",
 +		ath12k_warn(ar->ab, "failed to recalc he txbf for vdev %i on bss %pM: %d\n",
 +			    arvif->vdev_id, bss_conf->bssid, ret);
 +			    arvif->vdev_id, bss_conf->bssid, ret);
@@ -267,10 +289,10 @@ Acked-by: Jeff Johnson <[email protected]>
 +		return;
 +		return;
 +	}
 +	}
 +
 +
- 	ret = ath12k_wmi_send_peer_assoc_cmd(ar, &peer_arg);
+ 	ret = ath12k_wmi_send_peer_assoc_cmd(ar, peer_arg);
  	if (ret) {
  	if (ret) {
  		ath12k_warn(ar->ab, "failed to run peer assoc for %pM vdev %i: %d\n",
  		ath12k_warn(ar->ab, "failed to run peer assoc for %pM vdev %i: %d\n",
-@@ -3220,6 +3345,13 @@ static void ath12k_mac_bss_info_changed(
+@@ -3677,6 +3815,13 @@ static void ath12k_mac_bss_info_changed(
  		ether_addr_copy(arvif->bssid, info->bssid);
  		ether_addr_copy(arvif->bssid, info->bssid);
  
  
  	if (changed & BSS_CHANGED_BEACON_ENABLED) {
  	if (changed & BSS_CHANGED_BEACON_ENABLED) {
@@ -283,8 +305,8 @@ Acked-by: Jeff Johnson <[email protected]>
 +		}
 +		}
  		ath12k_control_beaconing(arvif, info);
  		ath12k_control_beaconing(arvif, info);
  
  
- 		if (arvif->is_up && vif->bss_conf.he_support &&
-@@ -5352,11 +5484,14 @@ static void ath12k_mac_copy_he_cap(struc
+ 		if (arvif->is_up && info->he_support &&
+@@ -6598,11 +6743,14 @@ static void ath12k_mac_copy_he_cap(struc
  
  
  	he_cap_elem->mac_cap_info[1] &=
  	he_cap_elem->mac_cap_info[1] &=
  		IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_MASK;
  		IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_MASK;
@@ -302,7 +324,7 @@ Acked-by: Jeff Johnson <[email protected]>
  	he_cap_elem->phy_cap_info[5] |= num_tx_chains - 1;
  	he_cap_elem->phy_cap_info[5] |= num_tx_chains - 1;
  
  
  	switch (iftype) {
  	switch (iftype) {
-@@ -6318,71 +6453,6 @@ static int ath12k_mac_setup_vdev_create_
+@@ -7734,72 +7882,6 @@ static int ath12k_mac_setup_vdev_create_
  	return 0;
  	return 0;
  }
  }
  
  
@@ -341,14 +363,15 @@ Acked-by: Jeff Johnson <[email protected]>
 -}
 -}
 -
 -
 -static int ath12k_set_he_mu_sounding_mode(struct ath12k *ar,
 -static int ath12k_set_he_mu_sounding_mode(struct ath12k *ar,
--					  struct ath12k_vif *arvif)
+-					  struct ath12k_link_vif *arvif)
 -{
 -{
 -	u32 param_id, param_value;
 -	u32 param_id, param_value;
 -	struct ath12k_base *ab = ar->ab;
 -	struct ath12k_base *ab = ar->ab;
+-	struct ath12k_vif *ahvif = arvif->ahvif;
 -	int ret;
 -	int ret;
 -
 -
 -	param_id = WMI_VDEV_PARAM_SET_HEMU_MODE;
 -	param_id = WMI_VDEV_PARAM_SET_HEMU_MODE;
--	param_value = ath12k_mac_prepare_he_mode(ar->pdev, arvif->vif->type);
+-	param_value = ath12k_mac_prepare_he_mode(ar->pdev, ahvif->vif->type);
 -	ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
 -	ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
 -					    param_id, param_value);
 -					    param_id, param_value);
 -	if (ret) {
 -	if (ret) {
@@ -371,22 +394,14 @@ Acked-by: Jeff Johnson <[email protected]>
 -	return ret;
 -	return ret;
 -}
 -}
 -
 -
- static void ath12k_mac_update_vif_offload(struct ath12k_vif *arvif)
+ static void ath12k_mac_update_vif_offload(struct ath12k_link_vif *arvif)
  {
  {
- 	struct ieee80211_vif *vif = arvif->vif;
-@@ -7340,7 +7410,6 @@ ath12k_mac_vdev_start_restart(struct ath
- 	struct ath12k_base *ab = ar->ab;
- 	struct wmi_vdev_start_req_arg arg = {};
- 	const struct cfg80211_chan_def *chandef = &ctx->def;
--	int he_support = arvif->vif->bss_conf.he_support;
- 	int ret;
- 
- 	lockdep_assert_held(&ar->conf_mutex);
-@@ -7396,14 +7465,6 @@ ath12k_mac_vdev_start_restart(struct ath
+ 	struct ath12k_vif *ahvif = arvif->ahvif;
+@@ -8978,14 +9060,6 @@ ath12k_mac_vdev_start_restart(struct ath
  		spin_unlock_bh(&ab->base_lock);
  		spin_unlock_bh(&ab->base_lock);
  
  
  		/* TODO: Notify if secondary 80Mhz also needs radar detection */
  		/* TODO: Notify if secondary 80Mhz also needs radar detection */
--		if (he_support) {
+-		if (link_conf->he_support) {
 -			ret = ath12k_set_he_mu_sounding_mode(ar, arvif);
 -			ret = ath12k_set_he_mu_sounding_mode(ar, arvif);
 -			if (ret) {
 -			if (ret) {
 -				ath12k_warn(ar->ab, "failed to set he mode vdev %i\n",
 -				ath12k_warn(ar->ab, "failed to set he mode vdev %i\n",
@@ -399,9 +414,9 @@ Acked-by: Jeff Johnson <[email protected]>
  	arg.passive |= !!(chandef->chan->flags & IEEE80211_CHAN_NO_IR);
  	arg.passive |= !!(chandef->chan->flags & IEEE80211_CHAN_NO_IR);
 --- a/drivers/net/wireless/ath/ath12k/mac.h
 --- a/drivers/net/wireless/ath/ath12k/mac.h
 +++ b/drivers/net/wireless/ath/ath12k/mac.h
 +++ b/drivers/net/wireless/ath/ath12k/mac.h
-@@ -41,6 +41,21 @@ struct ath12k_generic_iter {
- #define ATH12K_TX_POWER_MAX_VAL	70
- #define ATH12K_TX_POWER_MIN_VAL	0
+@@ -51,6 +51,21 @@ struct ath12k_generic_iter {
+ #define ATH12K_DEFAULT_SCAN_LINK	IEEE80211_MLD_MAX_NUM_LINKS
+ #define ATH12K_NUM_MAX_LINKS		(IEEE80211_MLD_MAX_NUM_LINKS + 1)
  
  
 +#define HECAP_PHY_SUBFMR_GET(hecap_phy) \
 +#define HECAP_PHY_SUBFMR_GET(hecap_phy) \
 +	u8_get_bits(hecap_phy[3], IEEE80211_HE_PHY_CAP3_SU_BEAMFORMER)
 +	u8_get_bits(hecap_phy[3], IEEE80211_HE_PHY_CAP3_SU_BEAMFORMER)
@@ -423,7 +438,7 @@ Acked-by: Jeff Johnson <[email protected]>
  	ATH12K_BW_40    = 1,
  	ATH12K_BW_40    = 1,
 --- a/drivers/net/wireless/ath/ath12k/wmi.h
 --- a/drivers/net/wireless/ath/ath12k/wmi.h
 +++ b/drivers/net/wireless/ath/ath12k/wmi.h
 +++ b/drivers/net/wireless/ath/ath12k/wmi.h
-@@ -2995,31 +2995,6 @@ struct ath12k_wmi_rx_reorder_queue_remov
+@@ -3079,31 +3079,6 @@ struct ath12k_wmi_rx_reorder_queue_remov
  #define WMI_VDEV_PARAM_TXBF_SU_TX_BFER BIT(2)
  #define WMI_VDEV_PARAM_TXBF_SU_TX_BFER BIT(2)
  #define WMI_VDEV_PARAM_TXBF_MU_TX_BFER BIT(3)
  #define WMI_VDEV_PARAM_TXBF_MU_TX_BFER BIT(3)
  
  
@@ -455,7 +470,7 @@ Acked-by: Jeff Johnson <[email protected]>
  #define HE_MODE_SU_TX_BFEE	BIT(0)
  #define HE_MODE_SU_TX_BFEE	BIT(0)
  #define HE_MODE_SU_TX_BFER	BIT(1)
  #define HE_MODE_SU_TX_BFER	BIT(1)
  #define HE_MODE_MU_TX_BFEE	BIT(2)
  #define HE_MODE_MU_TX_BFEE	BIT(2)
-@@ -3031,8 +3006,11 @@ struct ath12k_wmi_rx_reorder_queue_remov
+@@ -3115,8 +3090,11 @@ struct ath12k_wmi_rx_reorder_queue_remov
  #define HE_DL_MUOFDMA_ENABLE	1
  #define HE_DL_MUOFDMA_ENABLE	1
  #define HE_UL_MUOFDMA_ENABLE	1
  #define HE_UL_MUOFDMA_ENABLE	1
  #define HE_DL_MUMIMO_ENABLE	1
  #define HE_DL_MUMIMO_ENABLE	1

+ 82 - 62
package/kernel/mac80211/patches/ath12k/104-2-wifi-ath12k-push-EHT-MU-MIMO-params-to-hardware.patch

@@ -1,68 +1,68 @@
-From patchwork Wed Sep 18 21:20:49 2024
+From patchwork Wed May 21 22:45:32 2025
 Content-Type: text/plain; charset="utf-8"
 Content-Type: text/plain; charset="utf-8"
 MIME-Version: 1.0
 MIME-Version: 1.0
 Content-Transfer-Encoding: 7bit
 Content-Transfer-Encoding: 7bit
 X-Patchwork-Submitter: Pradeep Kumar Chitrapu <[email protected]>
 X-Patchwork-Submitter: Pradeep Kumar Chitrapu <[email protected]>
-X-Patchwork-Id: 13807210
+X-Patchwork-Id: 14096119
 X-Patchwork-Delegate: [email protected]
 X-Patchwork-Delegate: [email protected]
-Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com
- [205.220.168.131])
+Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com
+ [205.220.180.131])
 	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 	(No client certificate requested)
 	(No client certificate requested)
-	by smtp.subspace.kernel.org (Postfix) with ESMTPS id B81C317967F
-	for <[email protected]>; Wed, 18 Sep 2024 21:21:12 +0000 (UTC)
+	by smtp.subspace.kernel.org (Postfix) with ESMTPS id 697B71A23AA
+	for <[email protected]>; Wed, 21 May 2025 22:45:58 +0000 (UTC)
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
- arc=none smtp.client-ip=205.220.168.131
+ arc=none smtp.client-ip=205.220.180.131
 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
-	t=1726694474; cv=none;
- b=SYN3tI9xaTiXuxK7CUAD6gXBOqoyS1qZxAGNOXDt4yS1Q6oU0YiwQonIkVrnux7/DC3bCm2JScN5vIxVzkGOkFztaIHlZMM/TRsp6GzSIbZdasVpxySumoe965kRna+5fYAmf4i3wJupfj9p6509u7j6kXzz1ZxlSStR4wLObcE=
+	t=1747867560; cv=none;
+ b=XceXZ7CY2+FEzM9RuC10/cGW+vmyB2cX8QWJ3ckav7jiY5NYBQe1XW2asWcHaAEmOwdUh2iRT6imeiQLYue78g4UAcBErvihTGqlYL0m+10CQMNHmQZurUQkLPeFS0WAwlA+HBgcdp+Z71PhXs/ttQD6dF/8mlPaeGqxlTUoEcM=
 ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
 ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
-	s=arc-20240116; t=1726694474; c=relaxed/simple;
-	bh=yQPaApb7knqLxhkxSrizMfAanw18TDUbxBPbfnhzlV0=;
+	s=arc-20240116; t=1747867560; c=relaxed/simple;
+	bh=mXjCwVOeMuqCjiNDATjkwHPrwNjm6Uv3d5yO5+bqbfk=;
 	h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:
 	h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:
 	 MIME-Version:Content-Type;
 	 MIME-Version:Content-Type;
- b=W+Rk8/tiKUvP6A8WYQFxi97//4Yj4m/rYPXAg0YP+6K+GXDcFK2VD+yEzmymA/fsenli+7ZEJ1zH6XgzLe4+1QFctCYGnq1LPoD01a4AIF8VqJGVdgs6e1ZwCKv8AOLkZUb09QkmM8Ur4R1xFhc4oVqhlvm3NMc24NERWmxzGjI=
+ b=SeDDAI+0lqXCMqhleIhxgpdPq9QuWaPI9jj0JOqYiwOIVtAsNqQv7KQ+AMvXDQTsIe0LfA2l23stlXB7sLNpKHTM9JhPsLkafU7mvBaiwTxaJR5tEi4zGQZhsrKSn/awYszamnM81hQS3r9bBgS4oe8AeFV2/lDXYPXNHCGv0+w=
 ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
 ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
  dmarc=pass (p=none dis=none) header.from=quicinc.com;
  dmarc=pass (p=none dis=none) header.from=quicinc.com;
  spf=pass smtp.mailfrom=quicinc.com;
  spf=pass smtp.mailfrom=quicinc.com;
  dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
  dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
- header.b=XJxqlj7h; arc=none smtp.client-ip=205.220.168.131
+ header.b=DwzHO5rL; arc=none smtp.client-ip=205.220.180.131
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
  dmarc=pass (p=none dis=none) header.from=quicinc.com
  dmarc=pass (p=none dis=none) header.from=quicinc.com
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
  spf=pass smtp.mailfrom=quicinc.com
  spf=pass smtp.mailfrom=quicinc.com
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
 	dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
 	dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
- header.b="XJxqlj7h"
-Received: from pps.filterd (m0279867.ppops.net [127.0.0.1])
+ header.b="DwzHO5rL"
+Received: from pps.filterd (m0279869.ppops.net [127.0.0.1])
 	by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id
 	by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id
- 48IHKWuA006417;
-	Wed, 18 Sep 2024 21:21:08 GMT
+ 54LJflLg012749;
+	Wed, 21 May 2025 22:45:53 GMT
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
 	cc:content-transfer-encoding:content-type:date:from:in-reply-to
 	cc:content-transfer-encoding:content-type:date:from:in-reply-to
 	:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=
 	:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=
-	hcoreX5pgczyblwh1gpL6Ax4OV0yrVpAaKX7psGXczI=; b=XJxqlj7hhoW4GYMB
-	+B9r7ajbqV+ZxP+/1uDt5veOBY8aQgsorBoEbZFKm+ccV0u5SQJ/fFSomLg8QYpE
-	iojXUyYsGJMsXSPW+OdC0DQ2JrhDEHWFQa/6c3C0sdBE5IGgTa8YiAmYAx/A1ti1
-	ruMNSyT8H/xEKkR953axz1DOGJZfp9dCtOM5Xw6nrqpeUEYBShgvQ+1LLXqrH8U4
-	qUlYW2vKFKJgZUe97nwRrwOiunhTD4M2ARe6xHqZ7bL+2bW27sRTSI69vGrcEdKM
-	Ied7A8KmlUAN5BBsOj5MeKAaoy0+h4iY/9W3JgDfOu+LwjuAaKzgPNrttmPehdhJ
-	Q8q0JQ==
+	tiHJ0bp145D1K0TKBussv+a5p9S+5sP37NuNrmk03fg=; b=DwzHO5rLl1Vp87qm
+	lpxifM2nR9pLT0mgMqz/HRb/yTHCnS9oGDXzc24mnve2I/O9X/YT8q8qN+wjBlLB
+	4W7snIItVpffzrSmAJupTNtzj8qbmIYeti1zUlDdVoesUaICbdiDvSeCWPUtfeaz
+	tNKDOmBUTvCb+1qxxciQZhuRobmmkuRgcg8VkgCFP+OyG5o1OrUESYu3QeZ62Hle
+	ODt78jw+qe8cE9e2TxGEZhy++loik0tbF8D9P3cX5L+CdB+i4TyWnFxwvNgJciIx
+	RptE1lyB75UdrnAqETq0km4svwyidUuum/x0hqd6TvlDod3b7FD4tjbE7EP5iQ5V
+	Dw2tXA==
 Received: from nalasppmta01.qualcomm.com (Global_NAT1.qualcomm.com
 Received: from nalasppmta01.qualcomm.com (Global_NAT1.qualcomm.com
  [129.46.96.20])
  [129.46.96.20])
-	by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 41n4kjk65k-1
+	by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46rwf9carr-1
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
-	Wed, 18 Sep 2024 21:21:07 +0000 (GMT)
+	Wed, 21 May 2025 22:45:53 +0000 (GMT)
 Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com
 Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com
  [10.47.209.196])
  [10.47.209.196])
 	by NALASPPMTA01.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id
 	by NALASPPMTA01.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id
- 48ILL7IZ032342
+ 54LMjqtS008810
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
-	Wed, 18 Sep 2024 21:21:07 GMT
-Received: from ath12k-linux1.qualcomm.com (10.80.80.8) by
+	Wed, 21 May 2025 22:45:52 GMT
+Received: from ath12k-linux2.qualcomm.com (10.80.80.8) by
  nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server
  nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server
  (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
  (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
- 15.2.1544.9; Wed, 18 Sep 2024 14:21:06 -0700
+ 15.2.1544.9; Wed, 21 May 2025 15:45:52 -0700
 From: Pradeep Kumar Chitrapu <[email protected]>
 From: Pradeep Kumar Chitrapu <[email protected]>
 To: <[email protected]>
 To: <[email protected]>
 CC: <[email protected]>,
 CC: <[email protected]>,
@@ -71,12 +71,13 @@ CC: <[email protected]>,
         Muna Sinada <[email protected]>,
         Muna Sinada <[email protected]>,
         "Jeff
         "Jeff
  Johnson" <[email protected]>
  Johnson" <[email protected]>
-Subject: [PATCH V8 2/9] wifi: ath12k: push EHT MU-MIMO params to hardware
-Date: Wed, 18 Sep 2024 14:20:49 -0700
-Message-ID: <[email protected]>
-X-Mailer: git-send-email 2.34.1
-In-Reply-To: <[email protected]>
-References: <[email protected]>
+Subject: [PATCH ath-next V14 2/9] wifi: ath12k: push EHT MU-MIMO params to
+ hardware
+Date: Wed, 21 May 2025 15:45:32 -0700
+Message-ID: <[email protected]>
+X-Mailer: git-send-email 2.43.0
+In-Reply-To: <[email protected]>
+References: <[email protected]>
 Precedence: bulk
 Precedence: bulk
 X-Mailing-List: [email protected]
 X-Mailing-List: [email protected]
 List-Id: <linux-wireless.vger.kernel.org>
 List-Id: <linux-wireless.vger.kernel.org>
@@ -88,17 +89,28 @@ X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To
 X-QCInternal: smtphost
 X-QCInternal: smtphost
 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800
 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800
  signatures=585085
  signatures=585085
-X-Proofpoint-GUID: DiIEaDHD4453WG2b31qitb3_i0JkAM4u
-X-Proofpoint-ORIG-GUID: DiIEaDHD4453WG2b31qitb3_i0JkAM4u
+X-Proofpoint-ORIG-GUID: _eaDrXLa14UhDtRJT-hk8Y6z1fwFI6QB
+X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTIxMDIyNSBTYWx0ZWRfX7QgTyyXEHZM8
+ OnUvphQD/4J77Z8iHm4hJQIe6duMI5HbpiWELH5aRxqU7pFuvCjmltcmWPjwls9DzTkJnDGHMjo
+ FuBarQpMaZO8eQsx97aM8WpE0dpJHROE1ZRZ3SV8VEoTHHG712fvPw+oUWaZo6WccaEbxH9x9+W
+ n76tkFOOopbjRgOBmCokHCrfZmCMKcT4FLUFoiIDn0Fv8b/WKaut3Z+1hrEwcOuXCJv4X1QIOcx
+ 6NCnxNr8y1O1cwqXg3pBhHB+BpcLiEat6TlD9bH/5oUZHFce4W1jkZYs2J5VJnzLDeQxq8xBhP0
+ Qal3bpuUPyWAMKZKH/uAEXwEZ5ZMghUioGuc78EBMJhSXa2VsT3lhmJtc/CaHDqNKFrp01I/KAh
+ 7UcIN/PKb8qOKrHE8/8cpuHgoBgB24X84Qo5rORKfnW4s7FbS0xkcs2ZV2TI0AIGz4eEZAOY
+X-Authority-Analysis: v=2.4 cv=GawXnRXL c=1 sm=1 tr=0 ts=682e57a1 cx=c_pps
+ a=ouPCqIW2jiPt+lZRy3xVPw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17
+ a=GEpy-HfZoHoA:10 a=dt9VzEwgFbYA:10 a=COk6AnOGAAAA:8 a=uoU_VXRAPQDrZd00miQA:9
+ a=TjNXssC_j7lpFel5tvFf:22
+X-Proofpoint-GUID: _eaDrXLa14UhDtRJT-hk8Y6z1fwFI6QB
 X-Proofpoint-Virus-Version: vendor=baseguard
 X-Proofpoint-Virus-Version: vendor=baseguard
- engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.60.29
- definitions=2024-09-06_09,2024-09-06_01,2024-09-02_01
+ engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
+ definitions=2025-05-21_07,2025-05-20_03,2025-03-28_01
 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
- bulkscore=0 adultscore=0
- suspectscore=0 mlxscore=0 clxscore=1015 lowpriorityscore=0 malwarescore=0
- phishscore=0 impostorscore=0 mlxlogscore=999 priorityscore=1501
- spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1
- engine=8.19.0-2408220000 definitions=main-2409180140
+ mlxscore=0 mlxlogscore=999 lowpriorityscore=0 impostorscore=0
+ priorityscore=1501 clxscore=1015 malwarescore=0 phishscore=0 bulkscore=0
+ spamscore=0 suspectscore=0 adultscore=0 classifier=spam authscore=0
+ authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1
+ engine=8.19.0-2505160000 definitions=main-2505210225
 
 
 Currently, only the EHT IE in management frames is updated with
 Currently, only the EHT IE in management frames is updated with
 respect to MU-MIMO configurations, but this change is not
 respect to MU-MIMO configurations, but this change is not
@@ -113,30 +125,38 @@ Signed-off-by: Muna Sinada <[email protected]>
 Signed-off-by: Pradeep Kumar Chitrapu <[email protected]>
 Signed-off-by: Pradeep Kumar Chitrapu <[email protected]>
 Acked-by: Jeff Johnson <[email protected]>
 Acked-by: Jeff Johnson <[email protected]>
 ---
 ---
- drivers/net/wireless/ath/ath12k/mac.c | 50 +++++++++++++++++++++++++++
- drivers/net/wireless/ath/ath12k/wmi.h | 21 +++++++++++
- 2 files changed, 71 insertions(+)
+ drivers/net/wireless/ath/ath12k/mac.c | 58 +++++++++++++++++++++++++++
+ drivers/net/wireless/ath/ath12k/wmi.h | 21 ++++++++++
+ 2 files changed, 79 insertions(+)
 
 
 --- a/drivers/net/wireless/ath/ath12k/mac.c
 --- a/drivers/net/wireless/ath/ath12k/mac.c
 +++ b/drivers/net/wireless/ath/ath12k/mac.c
 +++ b/drivers/net/wireless/ath/ath12k/mac.c
-@@ -2953,6 +2953,50 @@ static int ath12k_mac_vif_recalc_sta_he_
+@@ -3334,6 +3334,58 @@ static int ath12k_mac_vif_recalc_sta_he_
  	return 0;
  	return 0;
  }
  }
  
  
-+static int ath12k_mac_set_eht_txbf_conf(struct ath12k_vif *arvif)
++static int ath12k_mac_set_eht_txbf_conf(struct ath12k_link_vif *arvif)
 +{
 +{
-+	u32 param = WMI_VDEV_PARAM_SET_EHT_MU_MODE;
++	struct ath12k_vif *ahvif = arvif->ahvif;
 +	struct ath12k *ar = arvif->ar;
 +	struct ath12k *ar = arvif->ar;
++	u32 param = WMI_VDEV_PARAM_SET_EHT_MU_MODE;
 +	u32 value = 0;
 +	u32 value = 0;
 +	int ret;
 +	int ret;
++	struct ieee80211_bss_conf *link_conf;
++
++	link_conf = ath12k_mac_get_link_bss_conf(arvif);
++	if (!link_conf) {
++		ath12k_warn(ar->ab, "unable to access bss link conf in eht txbf conf\n");
++		return -ENOENT;
++	}
 +
 +
-+	if (!arvif->vif->bss_conf.eht_support)
++	if (!link_conf->eht_support)
 +		return 0;
 +		return 0;
 +
 +
-+	if (arvif->vif->bss_conf.eht_su_beamformer) {
++	if (link_conf->eht_su_beamformer) {
 +		value |= u32_encode_bits(EHT_SU_BFER_ENABLE, EHT_MODE_SU_TX_BFER);
 +		value |= u32_encode_bits(EHT_SU_BFER_ENABLE, EHT_MODE_SU_TX_BFER);
-+		if (arvif->vif->bss_conf.eht_mu_beamformer &&
-+		    arvif->vdev_type == WMI_VDEV_TYPE_AP)
++		if (link_conf->eht_mu_beamformer &&
++		    ahvif->vdev_type == WMI_VDEV_TYPE_AP)
 +			value |= u32_encode_bits(EHT_MU_BFER_ENABLE,
 +			value |= u32_encode_bits(EHT_MU_BFER_ENABLE,
 +						 EHT_MODE_MU_TX_BFER) |
 +						 EHT_MODE_MU_TX_BFER) |
 +				 u32_encode_bits(EHT_DL_MUOFDMA_ENABLE,
 +				 u32_encode_bits(EHT_DL_MUOFDMA_ENABLE,
@@ -145,14 +165,14 @@ Acked-by: Jeff Johnson <[email protected]>
 +						 EHT_MODE_UL_OFDMA_MUMIMO);
 +						 EHT_MODE_UL_OFDMA_MUMIMO);
 +	}
 +	}
 +
 +
-+	if (arvif->vif->type != NL80211_IFTYPE_MESH_POINT) {
++	if (ahvif->vif->type != NL80211_IFTYPE_MESH_POINT) {
 +		value |= u32_encode_bits(EHT_DL_MUOFDMA_ENABLE, EHT_MODE_DL_OFDMA) |
 +		value |= u32_encode_bits(EHT_DL_MUOFDMA_ENABLE, EHT_MODE_DL_OFDMA) |
 +			 u32_encode_bits(EHT_UL_MUOFDMA_ENABLE, EHT_MODE_UL_OFDMA);
 +			 u32_encode_bits(EHT_UL_MUOFDMA_ENABLE, EHT_MODE_UL_OFDMA);
 +
 +
-+		if (arvif->vif->bss_conf.eht_80mhz_full_bw_ul_mumimo)
++		if (link_conf->eht_80mhz_full_bw_ul_mumimo)
 +			value |= u32_encode_bits(EHT_UL_MUMIMO_ENABLE, EHT_MODE_MUMIMO);
 +			value |= u32_encode_bits(EHT_UL_MUMIMO_ENABLE, EHT_MODE_MUMIMO);
 +
 +
-+		if (arvif->vif->bss_conf.eht_su_beamformee)
++		if (link_conf->eht_su_beamformee)
 +			value |= u32_encode_bits(EHT_SU_BFEE_ENABLE,
 +			value |= u32_encode_bits(EHT_SU_BFEE_ENABLE,
 +						 EHT_MODE_SU_TX_BFEE);
 +						 EHT_MODE_SU_TX_BFEE);
 +	}
 +	}
@@ -168,9 +188,9 @@ Acked-by: Jeff Johnson <[email protected]>
 +}
 +}
 +
 +
  static void ath12k_bss_assoc(struct ath12k *ar,
  static void ath12k_bss_assoc(struct ath12k *ar,
- 			     struct ath12k_vif *arvif,
+ 			     struct ath12k_link_vif *arvif,
  			     struct ieee80211_bss_conf *bss_conf)
  			     struct ieee80211_bss_conf *bss_conf)
-@@ -3351,6 +3395,12 @@ static void ath12k_mac_bss_info_changed(
+@@ -3821,6 +3873,12 @@ static void ath12k_mac_bss_info_changed(
  				ath12k_warn(ar->ab,
  				ath12k_warn(ar->ab,
  					    "failed to set HE TXBF config for vdev: %d\n",
  					    "failed to set HE TXBF config for vdev: %d\n",
  					    arvif->vdev_id);
  					    arvif->vdev_id);
@@ -185,7 +205,7 @@ Acked-by: Jeff Johnson <[email protected]>
  
  
 --- a/drivers/net/wireless/ath/ath12k/wmi.h
 --- a/drivers/net/wireless/ath/ath12k/wmi.h
 +++ b/drivers/net/wireless/ath/ath12k/wmi.h
 +++ b/drivers/net/wireless/ath/ath12k/wmi.h
-@@ -1139,6 +1139,7 @@ enum wmi_tlv_vdev_param {
+@@ -1152,6 +1152,7 @@ enum wmi_tlv_vdev_param {
  	WMI_VDEV_PARAM_BSS_COLOR,
  	WMI_VDEV_PARAM_BSS_COLOR,
  	WMI_VDEV_PARAM_SET_HEMU_MODE,
  	WMI_VDEV_PARAM_SET_HEMU_MODE,
  	WMI_VDEV_PARAM_HEOPS_0_31 = 0x8003,
  	WMI_VDEV_PARAM_HEOPS_0_31 = 0x8003,
@@ -193,7 +213,7 @@ Acked-by: Jeff Johnson <[email protected]>
  };
  };
  
  
  enum wmi_tlv_peer_flags {
  enum wmi_tlv_peer_flags {
-@@ -3012,6 +3013,26 @@ struct ath12k_wmi_rx_reorder_queue_remov
+@@ -3096,6 +3097,26 @@ struct ath12k_wmi_rx_reorder_queue_remov
  #define HE_MU_BFER_ENABLE	1
  #define HE_MU_BFER_ENABLE	1
  #define HE_SU_BFER_ENABLE	1
  #define HE_SU_BFER_ENABLE	1
  
  

+ 61 - 50
package/kernel/mac80211/patches/ath12k/104-3-wifi-ath12k-move-HE-MCS-mapper-to-a-separate-function.patch

@@ -1,68 +1,68 @@
-From patchwork Wed Sep 18 21:20:50 2024
+From patchwork Wed May 21 22:45:33 2025
 Content-Type: text/plain; charset="utf-8"
 Content-Type: text/plain; charset="utf-8"
 MIME-Version: 1.0
 MIME-Version: 1.0
 Content-Transfer-Encoding: 7bit
 Content-Transfer-Encoding: 7bit
 X-Patchwork-Submitter: Pradeep Kumar Chitrapu <[email protected]>
 X-Patchwork-Submitter: Pradeep Kumar Chitrapu <[email protected]>
-X-Patchwork-Id: 13807213
+X-Patchwork-Id: 14096126
 X-Patchwork-Delegate: [email protected]
 X-Patchwork-Delegate: [email protected]
-Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com
- [205.220.180.131])
+Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com
+ [205.220.168.131])
 	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 	(No client certificate requested)
 	(No client certificate requested)
-	by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4B2B11CB312
-	for <[email protected]>; Wed, 18 Sep 2024 21:21:14 +0000 (UTC)
+	by smtp.subspace.kernel.org (Postfix) with ESMTPS id A4E00239570
+	for <[email protected]>; Wed, 21 May 2025 22:46:01 +0000 (UTC)
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
- arc=none smtp.client-ip=205.220.180.131
+ arc=none smtp.client-ip=205.220.168.131
 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
-	t=1726694475; cv=none;
- b=uo8JC/iAnxSCZyXzNFarViwWJNwY+JldG9aDgn6LOK7yCxMusODCN3rw4mSCs0sLxHrfxFouDKWpiKeM7hGb/fzQzU2eh6bHNvzhjOqaTjAsJo7sVGj4L2QK1UPb2ZxMke35L51ztNTVhAc7IS17sn6blDZnU+1+RGRKXskHc78=
+	t=1747867563; cv=none;
+ b=m0NU8tyG2d1pHiYNjTYhCTeGXC0pFtHNZTKxb+dc5AEzzUCa75lxPxtYFZApv1QHaLqo3lGkZ+ADhqhj/V82GA+bUeetm3hSsnyGgjbayU3IzqeO09+VPkt9sx9hdrTMlVGEI4c5881Zho41rlVW65O/SlmqRi4J/ajQzA4tiGQ=
 ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
 ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
-	s=arc-20240116; t=1726694475; c=relaxed/simple;
-	bh=nhEu2OadboIpWVwShgMmYabjiVuEo2mUKJhJlcUzvgI=;
+	s=arc-20240116; t=1747867563; c=relaxed/simple;
+	bh=0bTV82dMwisd7nmbtolnSKswG/aTjqN0YxpAx66Oqv8=;
 	h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:
 	h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:
 	 MIME-Version:Content-Type;
 	 MIME-Version:Content-Type;
- b=iPc43CIgA4O9RfgxO3cfBBvDShW3nh4Q/MVoL1JTtx8u/9t1CeFY7KstjtKiPdJ6vxx0yhZwXcwCRFfbZdfRduyybDRKPmgqN/VogzkwizBSFWBL41H02pCvee2mV3poTyZz9CnCJ5L7An5k7ARI3Eo6EwsgaAYIncO/tU2Jsao=
+ b=jOkezej/N9fmvOtPNCGPpnPNtoQ+pAG4k1zAiw3xnL1iikk7VcJlbXDCrGUithxMZE2513zz/fsfDjXx0AMi4YT1ISljvGCw9B0dGQ5ECiFfoGLc+12nnsvqjiXI5zla6C1iX7bgtJjv/OYWzoY0TR5jI28CZWC/Pa9fT/X0duw=
 ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
 ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
  dmarc=pass (p=none dis=none) header.from=quicinc.com;
  dmarc=pass (p=none dis=none) header.from=quicinc.com;
  spf=pass smtp.mailfrom=quicinc.com;
  spf=pass smtp.mailfrom=quicinc.com;
  dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
  dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
- header.b=iXyzdRBT; arc=none smtp.client-ip=205.220.180.131
+ header.b=UqUMYAcW; arc=none smtp.client-ip=205.220.168.131
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
  dmarc=pass (p=none dis=none) header.from=quicinc.com
  dmarc=pass (p=none dis=none) header.from=quicinc.com
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
  spf=pass smtp.mailfrom=quicinc.com
  spf=pass smtp.mailfrom=quicinc.com
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
 	dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
 	dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
- header.b="iXyzdRBT"
-Received: from pps.filterd (m0279869.ppops.net [127.0.0.1])
+ header.b="UqUMYAcW"
+Received: from pps.filterd (m0279866.ppops.net [127.0.0.1])
 	by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id
 	by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id
- 48I90GrT001584;
-	Wed, 18 Sep 2024 21:21:09 GMT
+ 54LIDlKw013406;
+	Wed, 21 May 2025 22:45:53 GMT
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
 	cc:content-transfer-encoding:content-type:date:from:in-reply-to
 	cc:content-transfer-encoding:content-type:date:from:in-reply-to
 	:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=
 	:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=
-	aj0umwCwR0cGrc/Vc7qz7QRYcnU4amMo6KwLL9RZRaA=; b=iXyzdRBTMie5qv2n
-	KocnG3cRtZjxDUMbNTj+in3o4zrIU5RFumLb3ZmgpbCZD9jcmxkc9fcTdtwxUz8e
-	LTodO1mKSkqtOufy45keXIYYJN3lxfFsZtA5bcmG+QCJZJmPaTpMaf9L9Us9e+JZ
-	Ngjh4JNR3UIXn5+UvNGrRNEWeAlCrwf9Z5bWl1mQmwmkVVuH3nMu1IyPidF3tzRk
-	AdQTPkPtpnoGlYwEWL/noPAYTf4OuZrqPCAj31iBfZvq2RjAdWtPx/ayYEQsNKCu
-	xoBLKjb8hppxfGqn06TpV73nTxvhEDwnwBTwfgrr+xVeKvwz6Mrh8aoYBdUeFUAh
-	OiuxDA==
-Received: from nalasppmta03.qualcomm.com (Global_NAT1.qualcomm.com
+	tYXOeicncMlFjsw5kmnB5kxC/Nrj/HibF1jgO4m8lhM=; b=UqUMYAcWWQ07Z79h
+	GESSroshxr6zIUBw3jr/ESGDCO554RYWZZh9PXJxjTRM3ceCrNHNpCAT+mqXXiWy
+	eb+l7G0W+s1l/MStBq7B43CSdKxljZtlkC/JsHk6DQjBacQzVB8qAiq3ShbR/vn7
+	ud3kzjHtYsfLvIpi+8wLTkE1in8E/CUFZ4bea866xldnrcOVEa7EuxKwKXj3sLhE
+	8n3IsPUIYGLKnEFkmWFZTXTqlEOV9lVYdTxeDAUBxII8PQIKu+dlB/UWffTFTSOd
+	aQDPK5N6y8x29E2fugyy2XBSEFskz50Jb60+kJhHFGTgl5cQw+NfymuC9SQJBWaE
+	HFZu+w==
+Received: from nalasppmta02.qualcomm.com (Global_NAT1.qualcomm.com
  [129.46.96.20])
  [129.46.96.20])
-	by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 41n4hf38cn-1
+	by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46rwh5cfg1-1
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
-	Wed, 18 Sep 2024 21:21:08 +0000 (GMT)
+	Wed, 21 May 2025 22:45:53 +0000 (GMT)
 Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com
 Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com
  [10.47.209.196])
  [10.47.209.196])
-	by NALASPPMTA03.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id
- 48ILL7e8005093
+	by NALASPPMTA02.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id
+ 54LMjqn9020293
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
-	Wed, 18 Sep 2024 21:21:07 GMT
-Received: from ath12k-linux1.qualcomm.com (10.80.80.8) by
+	Wed, 21 May 2025 22:45:52 GMT
+Received: from ath12k-linux2.qualcomm.com (10.80.80.8) by
  nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server
  nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server
  (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
  (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
- 15.2.1544.9; Wed, 18 Sep 2024 14:21:07 -0700
+ 15.2.1544.9; Wed, 21 May 2025 15:45:52 -0700
 From: Pradeep Kumar Chitrapu <[email protected]>
 From: Pradeep Kumar Chitrapu <[email protected]>
 To: <[email protected]>
 To: <[email protected]>
 CC: <[email protected]>,
 CC: <[email protected]>,
@@ -71,13 +71,13 @@ CC: <[email protected]>,
         Muna Sinada <[email protected]>,
         Muna Sinada <[email protected]>,
         "Jeff
         "Jeff
  Johnson" <[email protected]>
  Johnson" <[email protected]>
-Subject: [PATCH V8 3/9] wifi: ath12k: move HE MCS mapper to a separate
- function
-Date: Wed, 18 Sep 2024 14:20:50 -0700
-Message-ID: <20240918212056.4137076[email protected]>
-X-Mailer: git-send-email 2.34.1
-In-Reply-To: <20240918212056.4137076[email protected]>
-References: <20240918212056.4137076[email protected]>
+Subject: [PATCH ath-next V14 3/9] wifi: ath12k: move HE MCS mapper to a
+ separate function
+Date: Wed, 21 May 2025 15:45:33 -0700
+Message-ID: <20250521224539.355985[email protected]>
+X-Mailer: git-send-email 2.43.0
+In-Reply-To: <20250521224539.355985[email protected]>
+References: <20250521224539.355985[email protected]>
 Precedence: bulk
 Precedence: bulk
 X-Mailing-List: [email protected]
 X-Mailing-List: [email protected]
 List-Id: <linux-wireless.vger.kernel.org>
 List-Id: <linux-wireless.vger.kernel.org>
@@ -89,17 +89,28 @@ X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To
 X-QCInternal: smtphost
 X-QCInternal: smtphost
 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800
 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800
  signatures=585085
  signatures=585085
-X-Proofpoint-ORIG-GUID: zHmCiFNBcWNOH7v_I9cuj0l6gmfKvBVa
-X-Proofpoint-GUID: zHmCiFNBcWNOH7v_I9cuj0l6gmfKvBVa
+X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTIxMDIyNiBTYWx0ZWRfX0c42ymLt+PTP
+ 1OuRw1LMafhFmBy7Y+zhs50WttVxoryUfqamicOcfcFB1N0ReYFgzeQ7geC/w54E8E6mzQDYeie
+ WWkPGvuIyvtCjzhBcBwz1A7W/LdsI7Od6+VlXyCuAp4pbCASB7kqVnI7Neak6mvdIQIW5khVLX7
+ r/364Kop8/BPQzOVUZf5snfx4TBCgWauiHZQBTJupIn1Tf8+NctUXB8H3QNfu8zJTLVrBA3rtt1
+ +yjeNOHom4U/t0u5Vzxu+8XctXsWHoYytfluXbsRo7WNut0MwPSY8GCm7RQ2wDQp0CzdactGb6t
+ KCMvNcpkDRjEtOdkNtf2BeVHF1yJKxuibe6qssobLjTadJRkC33xnz5E+hzF6sEZlg7JWok01h4
+ OxWFUldQYnF/eQjZYTQcgLyH91h9gWkvz0YJWKGCrg0PlxqeIFS/SQvVNs7qMnsX0qrXb7NV
+X-Authority-Analysis: v=2.4 cv=XeWJzJ55 c=1 sm=1 tr=0 ts=682e57a1 cx=c_pps
+ a=ouPCqIW2jiPt+lZRy3xVPw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17
+ a=GEpy-HfZoHoA:10 a=dt9VzEwgFbYA:10 a=COk6AnOGAAAA:8 a=4Pgy4kl5F6fn7-PMLAkA:9
+ a=TjNXssC_j7lpFel5tvFf:22
+X-Proofpoint-GUID: CVZHk1FyIP3eCYHbVaXVp1fjSAGIjnVJ
+X-Proofpoint-ORIG-GUID: CVZHk1FyIP3eCYHbVaXVp1fjSAGIjnVJ
 X-Proofpoint-Virus-Version: vendor=baseguard
 X-Proofpoint-Virus-Version: vendor=baseguard
- engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.60.29
- definitions=2024-09-06_09,2024-09-06_01,2024-09-02_01
+ engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
+ definitions=2025-05-21_07,2025-05-20_03,2025-03-28_01
 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
- priorityscore=1501 mlxscore=0
- suspectscore=0 bulkscore=0 lowpriorityscore=0 spamscore=0 clxscore=1015
- mlxlogscore=999 adultscore=0 malwarescore=0 phishscore=0 impostorscore=0
- classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2408220000
- definitions=main-2409180140
+ phishscore=0 clxscore=1015 mlxlogscore=999 mlxscore=0 bulkscore=0 spamscore=0
+ suspectscore=0 impostorscore=0 adultscore=0 malwarescore=0 lowpriorityscore=0
+ priorityscore=1501 classifier=spam authscore=0 authtc=n/a authcc=
+ route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000
+ definitions=main-2505210226
 
 
 Refactor the HE MCS mapper functionality in
 Refactor the HE MCS mapper functionality in
 ath12k_mac_copy_he_cap() into a new function.
 ath12k_mac_copy_he_cap() into a new function.
@@ -119,7 +130,7 @@ Acked-by: Jeff Johnson <[email protected]>
 
 
 --- a/drivers/net/wireless/ath/ath12k/mac.c
 --- a/drivers/net/wireless/ath/ath12k/mac.c
 +++ b/drivers/net/wireless/ath/ath12k/mac.c
 +++ b/drivers/net/wireless/ath/ath12k/mac.c
-@@ -5519,12 +5519,24 @@ static __le16 ath12k_mac_setup_he_6ghz_c
+@@ -6786,12 +6786,24 @@ static __le16 ath12k_mac_setup_he_6ghz_c
  	return cpu_to_le16(bcap->he_6ghz_capa);
  	return cpu_to_le16(bcap->he_6ghz_capa);
  }
  }
  
  
@@ -145,7 +156,7 @@ Acked-by: Jeff Johnson <[email protected]>
  
  
  	he_cap->has_he = true;
  	he_cap->has_he = true;
  	memcpy(he_cap_elem->mac_cap_info, band_cap->he_cap_info,
  	memcpy(he_cap_elem->mac_cap_info, band_cap->he_cap_info,
-@@ -5562,13 +5574,7 @@ static void ath12k_mac_copy_he_cap(struc
+@@ -6829,13 +6841,7 @@ static void ath12k_mac_copy_he_cap(struc
  		break;
  		break;
  	}
  	}
  
  

+ 59 - 48
package/kernel/mac80211/patches/ath12k/104-4-wifi-ath12k-generate-rx-and-tx-mcs-maps-for-supported-HE-mcs.patch

@@ -1,68 +1,68 @@
-From patchwork Wed Sep 18 21:20:51 2024
+From patchwork Wed May 21 22:45:34 2025
 Content-Type: text/plain; charset="utf-8"
 Content-Type: text/plain; charset="utf-8"
 MIME-Version: 1.0
 MIME-Version: 1.0
 Content-Transfer-Encoding: 7bit
 Content-Transfer-Encoding: 7bit
 X-Patchwork-Submitter: Pradeep Kumar Chitrapu <[email protected]>
 X-Patchwork-Submitter: Pradeep Kumar Chitrapu <[email protected]>
-X-Patchwork-Id: 13807215
+X-Patchwork-Id: 14096123
 X-Patchwork-Delegate: [email protected]
 X-Patchwork-Delegate: [email protected]
 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com
 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com
  [205.220.180.131])
  [205.220.180.131])
 	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 	(No client certificate requested)
 	(No client certificate requested)
-	by smtp.subspace.kernel.org (Postfix) with ESMTPS id A88651CB32C
-	for <[email protected]>; Wed, 18 Sep 2024 21:21:14 +0000 (UTC)
+	by smtp.subspace.kernel.org (Postfix) with ESMTPS id A3C04239581
+	for <[email protected]>; Wed, 21 May 2025 22:45:57 +0000 (UTC)
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
  arc=none smtp.client-ip=205.220.180.131
  arc=none smtp.client-ip=205.220.180.131
 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
-	t=1726694476; cv=none;
- b=Lkqx2oSLyeGRxKcm+N4Vmg+KOuwHpt6xhgWj9SpyWNXxxWkVExVyHvPrWaP/u4OXd0YjYBJC3Dg0NJYY9WJyL0A3RP8GK++s9CiRloNaEmEjI71S/f3+0HVXu5bCmi8cyiIMFzCpAcNuZ67J7r/WxvNRbeox3iZHmXK1WFUb4Hs=
+	t=1747867561; cv=none;
+ b=JUfYB6YNOea3E6luldlHf63eW7OUVXEtawJXGCeH7nt9iIJpG0ODfz3v+Zl+gtQtUZ1ELh/UAhCubbThHH30w661eEN5+cQarbiqdd1cN5dnkAsmZUNSD6l//QpurFV6Wsvv4Nr2fYgyuAVHf9JDoITZKNEbIki68J7WTV+fieU=
 ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
 ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
-	s=arc-20240116; t=1726694476; c=relaxed/simple;
-	bh=nv4kc89H7eGC0FLgCwC70zFDhNkClMNiRf5HjDZHHuQ=;
+	s=arc-20240116; t=1747867561; c=relaxed/simple;
+	bh=e6/wBkUC5dKwNLeEqNLmC/3pJt4EcGfxZRx+zntD5Ek=;
 	h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:
 	h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:
 	 MIME-Version:Content-Type;
 	 MIME-Version:Content-Type;
- b=B1oJWv7vHZKRChjamOFJnRzQVtL7qBs7/Ho9GojLQtHyCKtrCEOJt/lWvhkqISf48/5MaQOCdkHhCrQT/eHP9hZ1wnCdeOKXh6Wmk/QYt9yEcc0X6HT5wUxgpaA3PooH/cMlJCX0c8hyhT7XBm6vWnPwQjt/FnLTubA3uj+X8oE=
+ b=bg3Y4gdyPqhSKZtqqeN+SjMvTgg+BVUsyqAvkS3YPjV+C7dPwxcByNFjDRsuBqwHuSvgolo2ISExqyfJkgT6Flp4H+hriFJHcMdI0WmDf9NrBPI+E07JvNLDvP5X59C6pSrqpjXYngUV6AvPCJL7ynVBFF80h0neCm0IRu8Ur8w=
 ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
 ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
  dmarc=pass (p=none dis=none) header.from=quicinc.com;
  dmarc=pass (p=none dis=none) header.from=quicinc.com;
  spf=pass smtp.mailfrom=quicinc.com;
  spf=pass smtp.mailfrom=quicinc.com;
  dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
  dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
- header.b=WweZPnje; arc=none smtp.client-ip=205.220.180.131
+ header.b=LbIprPEi; arc=none smtp.client-ip=205.220.180.131
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
  dmarc=pass (p=none dis=none) header.from=quicinc.com
  dmarc=pass (p=none dis=none) header.from=quicinc.com
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
  spf=pass smtp.mailfrom=quicinc.com
  spf=pass smtp.mailfrom=quicinc.com
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
 	dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
 	dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
- header.b="WweZPnje"
-Received: from pps.filterd (m0279872.ppops.net [127.0.0.1])
+ header.b="LbIprPEi"
+Received: from pps.filterd (m0279873.ppops.net [127.0.0.1])
 	by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id
 	by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id
- 48IACJst031540;
-	Wed, 18 Sep 2024 21:21:09 GMT
+ 54LIdAVE024983;
+	Wed, 21 May 2025 22:45:54 GMT
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
 	cc:content-transfer-encoding:content-type:date:from:in-reply-to
 	cc:content-transfer-encoding:content-type:date:from:in-reply-to
 	:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=
 	:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=
-	ARu9Fu0s66NeuLm2pdCBchANS+rlgd275Q/E4KE2T1o=; b=WweZPnjehL/ZQW57
-	4JHJDsl8A5hyljMaJrVPdmZwNktTurJPMpD5z0akqx2dq3bfjzx2rx5NAtMb831x
-	ieysvT1ApK5V32fmb9xzG7FMIU3DH4eqr/9ApZbHFVPTglHrVoVzHJLps3I+Ts5P
-	gi1dsIAdwTai7hW1FchcW/pZ2kJMq6zN7oljoFs7pc1CvzHfIJowQM8gFfslkqlL
-	lvm9A9knvnUlkrEvzgpoZfZxm/91t9bQzkQDTX91wRc0oGR/9liT+z4Sdum2rLwb
-	fri8rhQIw8w1ExGM1nzChPaajmDIsE86ODjDL2xBbd/DcdsVvOYl8ewJ8AX45qNs
-	+LpHtg==
-Received: from nalasppmta03.qualcomm.com (Global_NAT1.qualcomm.com
+	oR9JZ4DE7PwiZ/DcP72BpK9yTZspsBeRbWSrP3w24nY=; b=LbIprPEif55TZs6Z
+	ZsvTaIhFDxESbkxn/avX548dzh51JY3wFWHowpcPEnJJdIE1oNPWkxrPo0hHkyUb
+	UICPtIHoZHdMwN/uHPyglzBnBLNP82LGLHZI5eHx6jVz4INyCFm1Gmof8YNLLIo/
+	pTKj4Qx3OO0jH6zSnAoKIIg39v5TWetjVZbL2qbNR+GImD0RtoefBQxRgyJWn11r
+	O3ycFAW9xlW8wYJql07vue+hM3MWNtk5EPqF70c7JrrmMAYvTyOFuP0Kaf11szIB
+	mF4bMyb+bb1/QA6moW7LDIoDBWEjCLINcTdGUPTnwnfBWlxZJhZoMqzU9ZuZgvsR
+	1UjthA==
+Received: from nalasppmta05.qualcomm.com (Global_NAT1.qualcomm.com
  [129.46.96.20])
  [129.46.96.20])
-	by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 41n4j6uagq-1
+	by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46rwf4vc5x-1
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
-	Wed, 18 Sep 2024 21:21:09 +0000 (GMT)
+	Wed, 21 May 2025 22:45:54 +0000 (GMT)
 Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com
 Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com
  [10.47.209.196])
  [10.47.209.196])
-	by NALASPPMTA03.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id
- 48ILL8gM005103
+	by NALASPPMTA05.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id
+ 54LMjrWL023291
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
-	Wed, 18 Sep 2024 21:21:08 GMT
-Received: from ath12k-linux1.qualcomm.com (10.80.80.8) by
+	Wed, 21 May 2025 22:45:53 GMT
+Received: from ath12k-linux2.qualcomm.com (10.80.80.8) by
  nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server
  nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server
  (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
  (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
- 15.2.1544.9; Wed, 18 Sep 2024 14:21:07 -0700
+ 15.2.1544.9; Wed, 21 May 2025 15:45:52 -0700
 From: Pradeep Kumar Chitrapu <[email protected]>
 From: Pradeep Kumar Chitrapu <[email protected]>
 To: <[email protected]>
 To: <[email protected]>
 CC: <[email protected]>,
 CC: <[email protected]>,
@@ -71,13 +71,13 @@ CC: <[email protected]>,
         Muna Sinada <[email protected]>,
         Muna Sinada <[email protected]>,
         "Jeff
         "Jeff
  Johnson" <[email protected]>
  Johnson" <[email protected]>
-Subject: [PATCH V8 4/9] wifi: ath12k: generate rx and tx mcs maps for
- supported HE mcs
-Date: Wed, 18 Sep 2024 14:20:51 -0700
-Message-ID: <20240918212056.4137076[email protected]>
-X-Mailer: git-send-email 2.34.1
-In-Reply-To: <20240918212056.4137076[email protected]>
-References: <20240918212056.4137076[email protected]>
+Subject: [PATCH ath-next V14 4/9] wifi: ath12k: generate rx and tx mcs maps
+ for supported HE mcs
+Date: Wed, 21 May 2025 15:45:34 -0700
+Message-ID: <20250521224539.355985[email protected]>
+X-Mailer: git-send-email 2.43.0
+In-Reply-To: <20250521224539.355985[email protected]>
+References: <20250521224539.355985[email protected]>
 Precedence: bulk
 Precedence: bulk
 X-Mailing-List: [email protected]
 X-Mailing-List: [email protected]
 List-Id: <linux-wireless.vger.kernel.org>
 List-Id: <linux-wireless.vger.kernel.org>
@@ -89,17 +89,28 @@ X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To
 X-QCInternal: smtphost
 X-QCInternal: smtphost
 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800
 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800
  signatures=585085
  signatures=585085
-X-Proofpoint-ORIG-GUID: wHJ63GZpWGKZ4XSyQZiVlsARNAgr5CQM
-X-Proofpoint-GUID: wHJ63GZpWGKZ4XSyQZiVlsARNAgr5CQM
+X-Proofpoint-GUID: mYgnUwiU6CWGXCKmK4mo491eQG1yf62Y
+X-Proofpoint-ORIG-GUID: mYgnUwiU6CWGXCKmK4mo491eQG1yf62Y
+X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTIxMDIyNiBTYWx0ZWRfX1nkoUF8smaXX
+ IWIOVUfe7hMPdAVBJy7J1imFvumQnVaEdoZ98Hgv5FTjeK2Ebgl2R2fohvg1z4LsyCLnU8qfg96
+ 1OdC0+PM8u7DhRIEnk7H2EZt0UJoJRxlc7daiIvimTjbBLu53yfgzses5Gth0zLCzoih5ffW/H5
+ 1h2tf1ZE4W6AmHjQJc+WE0P3RhBMdl286VT/kc0ko03He0+5/QdxsynqL2e4svB4f3035pzXOEK
+ dUS4nBFSZJXuBkq0d//SizRJgH9egq51A/OVPm8om04qEcOK3x9OmrrborAen5I0iuLaqAMMBXa
+ nlUKQ4fpPRovjAByevo6BIIwB698Nmo72bZcFiWOocONR92lAssB6pFXJnuwOC6VQ7MJE7DKc0x
+ 5UnlyGSMzMAM7cQXuGFk1AK16e6Tu/rC5YA6A4ogDKajrcBGepxGFKcZ+xK4+BwuwgI4Qysv
+X-Authority-Analysis: v=2.4 cv=R7UDGcRX c=1 sm=1 tr=0 ts=682e57a2 cx=c_pps
+ a=ouPCqIW2jiPt+lZRy3xVPw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17
+ a=GEpy-HfZoHoA:10 a=dt9VzEwgFbYA:10 a=COk6AnOGAAAA:8 a=WmtfbAKxhnfIJFSrnnQA:9
+ a=TjNXssC_j7lpFel5tvFf:22
 X-Proofpoint-Virus-Version: vendor=baseguard
 X-Proofpoint-Virus-Version: vendor=baseguard
- engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.60.29
- definitions=2024-09-06_09,2024-09-06_01,2024-09-02_01
+ engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
+ definitions=2025-05-21_07,2025-05-20_03,2025-03-28_01
 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
- phishscore=0 mlxlogscore=999
- mlxscore=0 malwarescore=0 bulkscore=0 priorityscore=1501 clxscore=1015
- adultscore=0 suspectscore=0 lowpriorityscore=0 spamscore=0 impostorscore=0
- classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2408220000
- definitions=main-2409180140
+ phishscore=0 clxscore=1015 mlxlogscore=999 priorityscore=1501 spamscore=0
+ bulkscore=0 lowpriorityscore=0 malwarescore=0 suspectscore=0 mlxscore=0
+ impostorscore=0 adultscore=0 classifier=spam authscore=0 authtc=n/a authcc=
+ route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000
+ definitions=main-2505210226
 
 
 Generate rx and tx mcs maps in ath12k_mac_set_hemcsmap() based
 Generate rx and tx mcs maps in ath12k_mac_set_hemcsmap() based
 on number of supported tx/rx chains and set them in supported
 on number of supported tx/rx chains and set them in supported
@@ -117,7 +128,7 @@ Acked-by: Jeff Johnson <[email protected]>
 
 
 --- a/drivers/net/wireless/ath/ath12k/mac.c
 --- a/drivers/net/wireless/ath/ath12k/mac.c
 +++ b/drivers/net/wireless/ath/ath12k/mac.c
 +++ b/drivers/net/wireless/ath/ath12k/mac.c
-@@ -5519,20 +5519,40 @@ static __le16 ath12k_mac_setup_he_6ghz_c
+@@ -6786,20 +6786,40 @@ static __le16 ath12k_mac_setup_he_6ghz_c
  	return cpu_to_le16(bcap->he_6ghz_capa);
  	return cpu_to_le16(bcap->he_6ghz_capa);
  }
  }
  
  
@@ -166,7 +177,7 @@ Acked-by: Jeff Johnson <[email protected]>
  				   int iftype, u8 num_tx_chains,
  				   int iftype, u8 num_tx_chains,
  				   struct ieee80211_sta_he_cap *he_cap)
  				   struct ieee80211_sta_he_cap *he_cap)
  {
  {
-@@ -5574,7 +5594,7 @@ static void ath12k_mac_copy_he_cap(struc
+@@ -6841,7 +6861,7 @@ static void ath12k_mac_copy_he_cap(struc
  		break;
  		break;
  	}
  	}
  
  
@@ -175,7 +186,7 @@ Acked-by: Jeff Johnson <[email protected]>
  	memset(he_cap->ppe_thres, 0, sizeof(he_cap->ppe_thres));
  	memset(he_cap->ppe_thres, 0, sizeof(he_cap->ppe_thres));
  	if (he_cap_elem->phy_cap_info[6] &
  	if (he_cap_elem->phy_cap_info[6] &
  	    IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT)
  	    IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT)
-@@ -5763,7 +5783,7 @@ static int ath12k_mac_copy_sband_iftype_
+@@ -7030,7 +7050,7 @@ static int ath12k_mac_copy_sband_iftype_
  
  
  		data[idx].types_mask = BIT(i);
  		data[idx].types_mask = BIT(i);
  
  

+ 59 - 48
package/kernel/mac80211/patches/ath12k/104-5-wifi-ath12k-fix-TX-and-RX-MCS-rate-configurations-in-HE-mode.patch

@@ -1,81 +1,81 @@
-From patchwork Wed Sep 18 21:20:52 2024
+From patchwork Wed May 21 22:45:35 2025
 Content-Type: text/plain; charset="utf-8"
 Content-Type: text/plain; charset="utf-8"
 MIME-Version: 1.0
 MIME-Version: 1.0
 Content-Transfer-Encoding: 7bit
 Content-Transfer-Encoding: 7bit
 X-Patchwork-Submitter: Pradeep Kumar Chitrapu <[email protected]>
 X-Patchwork-Submitter: Pradeep Kumar Chitrapu <[email protected]>
-X-Patchwork-Id: 13807211
+X-Patchwork-Id: 14096120
 X-Patchwork-Delegate: [email protected]
 X-Patchwork-Delegate: [email protected]
-Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com
- [205.220.168.131])
+Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com
+ [205.220.180.131])
 	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 	(No client certificate requested)
 	(No client certificate requested)
-	by smtp.subspace.kernel.org (Postfix) with ESMTPS id 77FB41CA6AC
-	for <[email protected]>; Wed, 18 Sep 2024 21:21:13 +0000 (UTC)
+	by smtp.subspace.kernel.org (Postfix) with ESMTPS id A3B9F239570
+	for <[email protected]>; Wed, 21 May 2025 22:45:57 +0000 (UTC)
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
- arc=none smtp.client-ip=205.220.168.131
+ arc=none smtp.client-ip=205.220.180.131
 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
-	t=1726694475; cv=none;
- b=RN/ddoo5Vh8RVGeYZ8k8lXTOb7bzs7wSIAQGFjyvpfc9NICOpTDXpM3ai/D/fFtXLR8mFmYa4uIMFdrWML1x/UjZtd+jJnNyL/jo4/t5+ONN0nU4brd/dW7fv/biqLA6CkFbjnw01XnInXLzGT8IIm4NvxBkMy/RVj0tC33y7os=
+	t=1747867560; cv=none;
+ b=GmlOnDZdpnT/77kfeg7qPbZIn+pp+Rv41/WYnHylPZroDHwpWp5rzjObHMVoVIVB8f5dpHJSWNb5ucf0EdCqAqynnnDnAHne0d3j8kMBBH6ZVQr4AnIsYhkIrbmy6o7JffEBF094XVxGwQTjyWSEPi6VY94Md6L1NnuF0J5lJXw=
 ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
 ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
-	s=arc-20240116; t=1726694475; c=relaxed/simple;
-	bh=bsvgv033jSAPUVmS0VlMcScTn/1aM6tw3aACOOiqxvA=;
+	s=arc-20240116; t=1747867560; c=relaxed/simple;
+	bh=Xdsuttpv57eTzMnRm7g3A0+frkCx/SnGj1xOjVOXHng=;
 	h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:
 	h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:
 	 MIME-Version:Content-Type;
 	 MIME-Version:Content-Type;
- b=rDT2TKhzEg9vR1RSVstUP/e9Z+sWhPbag7vxjm3nmkSJBFS5bR72jSO3YnpEGSQLOgd0c+ou8ce0GQOHHZBEpr8VlMP4o6SK8T3BVg4yPiHhqLzwadektVXzAofZ0K+caSvYUjsPvDd2wH1xDyUPHgvr/DjsPh8bhO1MP80pTYk=
+ b=DCZ4pyonUsAaIuBQUBu/1NYBINM2V/yqfV+6ngHC6I8x7PP5e0WLPB1zEyJgRG752GtXxlhP3WdI6a+eW/8O0I64lNeSLtCeGZQ2ljn0mAfcuMtjB3rZq3UejFTR8v3I78Chfhv8/eSjfW7gSO+sswpSCXiFykPgseD3Hhz6W/4=
 ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
 ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
  dmarc=pass (p=none dis=none) header.from=quicinc.com;
  dmarc=pass (p=none dis=none) header.from=quicinc.com;
  spf=pass smtp.mailfrom=quicinc.com;
  spf=pass smtp.mailfrom=quicinc.com;
  dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
  dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
- header.b=DbZeRJ9u; arc=none smtp.client-ip=205.220.168.131
+ header.b=n5c8p9dB; arc=none smtp.client-ip=205.220.180.131
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
  dmarc=pass (p=none dis=none) header.from=quicinc.com
  dmarc=pass (p=none dis=none) header.from=quicinc.com
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
  spf=pass smtp.mailfrom=quicinc.com
  spf=pass smtp.mailfrom=quicinc.com
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
 	dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
 	dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
- header.b="DbZeRJ9u"
-Received: from pps.filterd (m0279867.ppops.net [127.0.0.1])
+ header.b="n5c8p9dB"
+Received: from pps.filterd (m0279869.ppops.net [127.0.0.1])
 	by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id
 	by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id
- 48I9TNqc020283;
-	Wed, 18 Sep 2024 21:21:09 GMT
+ 54LIhKMc027654;
+	Wed, 21 May 2025 22:45:54 GMT
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
 	cc:content-transfer-encoding:content-type:date:from:in-reply-to
 	cc:content-transfer-encoding:content-type:date:from:in-reply-to
 	:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=
 	:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=
-	azR+5F3oXqRD0oIXJq+q0F3HbuiVUYwPuvX5vVskhnw=; b=DbZeRJ9uo40mL5rR
-	p0cASEsdLU8yr/aYeIXTSWCHBf5P73m5S26EYVv6MqTdcnmRT7flYyQWzotNV+gg
-	oHJpR7L5sN+omhK+7gDPRcm5j29/U9+7rMG7I0JwrfR6KbUUNJkrg+omW45ZdRPS
-	/92XJynSBDgzEGETs0AjLe+PLPW4Ucnncc+YscEVm/dtR4f5vQBYwGdCwv4IuczO
-	FJrEmDh3mj7m6JtNVV+A3LT5qS7PCAbiS7qhTAkDfhH9gDZJuUTO2b6ByyO4UkWp
-	afB41wIc4KUDYsTHkThkApxxp0vHfJJLGCweUi+YKYaqvQETgLhHx/UkSRdoRBII
-	N708pg==
+	igBIHxXxEIGErFGPWQKC8rBeF0DUPvb+tsDy6dmbEUQ=; b=n5c8p9dBo/+917ae
+	iUuuRoUPhgwmxRjEorR4N5thttRSLen0XwHulOSFzfVHZvX/ZX7Xb8qa67RpJUAw
+	jx3TGu38TFybZ9zCbXxa3PoR7FqIyl7TyaU+RpGmjLnDTRjq5ODiDDkcGM8aLJ6C
+	pgH1JDyjAtZODpP3W+kKpoMlU/N8QCB8wVOob4E3+nH0XDeYWh0cSY4dAnFcFYsC
+	dgkUoVt65T3wJptGX80bBT1muPG/3O+IiWrYoP6NVayscmgOnCqKVpuSjYrEn/02
+	HlxMp7yg/I4LhlQquL2SfmAXdKThQLrOF/XiFsCW2VZETvSbXsLI0NXYRbRFUxC4
+	e9SLmw==
 Received: from nalasppmta05.qualcomm.com (Global_NAT1.qualcomm.com
 Received: from nalasppmta05.qualcomm.com (Global_NAT1.qualcomm.com
  [129.46.96.20])
  [129.46.96.20])
-	by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 41n4kjk65m-1
+	by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46rwf9cars-1
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
-	Wed, 18 Sep 2024 21:21:09 +0000 (GMT)
+	Wed, 21 May 2025 22:45:54 +0000 (GMT)
 Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com
 Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com
  [10.47.209.196])
  [10.47.209.196])
 	by NALASPPMTA05.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id
 	by NALASPPMTA05.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id
- 48ILL8Gi009579
+ 54LMjrc1023294
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
-	Wed, 18 Sep 2024 21:21:08 GMT
-Received: from ath12k-linux1.qualcomm.com (10.80.80.8) by
+	Wed, 21 May 2025 22:45:53 GMT
+Received: from ath12k-linux2.qualcomm.com (10.80.80.8) by
  nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server
  nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server
  (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
  (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
- 15.2.1544.9; Wed, 18 Sep 2024 14:21:08 -0700
+ 15.2.1544.9; Wed, 21 May 2025 15:45:53 -0700
 From: Pradeep Kumar Chitrapu <[email protected]>
 From: Pradeep Kumar Chitrapu <[email protected]>
 To: <[email protected]>
 To: <[email protected]>
 CC: <[email protected]>,
 CC: <[email protected]>,
         Pradeep Kumar Chitrapu
         Pradeep Kumar Chitrapu
 	<[email protected]>,
 	<[email protected]>,
         Jeff Johnson <[email protected]>
         Jeff Johnson <[email protected]>
-Subject: [PATCH V8 5/9] wifi: ath12k: fix TX and RX MCS rate configurations in
- HE mode
-Date: Wed, 18 Sep 2024 14:20:52 -0700
-Message-ID: <20240918212056.4137076[email protected]>
-X-Mailer: git-send-email 2.34.1
-In-Reply-To: <20240918212056.4137076[email protected]>
-References: <20240918212056.4137076[email protected]>
+Subject: [PATCH ath-next V14 5/9] wifi: ath12k: fix TX and RX MCS rate
+ configurations in HE mode
+Date: Wed, 21 May 2025 15:45:35 -0700
+Message-ID: <20250521224539.355985[email protected]>
+X-Mailer: git-send-email 2.43.0
+In-Reply-To: <20250521224539.355985[email protected]>
+References: <20250521224539.355985[email protected]>
 Precedence: bulk
 Precedence: bulk
 X-Mailing-List: [email protected]
 X-Mailing-List: [email protected]
 List-Id: <linux-wireless.vger.kernel.org>
 List-Id: <linux-wireless.vger.kernel.org>
@@ -87,17 +87,28 @@ X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To
 X-QCInternal: smtphost
 X-QCInternal: smtphost
 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800
 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800
  signatures=585085
  signatures=585085
-X-Proofpoint-GUID: JNJY4yItbZ8HP8WQjm82lNqNLkxUdf1v
-X-Proofpoint-ORIG-GUID: JNJY4yItbZ8HP8WQjm82lNqNLkxUdf1v
+X-Proofpoint-ORIG-GUID: lrtwH7rWiPRFD03fbbD0IavLBLpNgTW-
+X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTIxMDIyNSBTYWx0ZWRfX0HS2wunF/V5Q
+ jQqxwakF2Imrc/4a4WgPSFOFxUyO27D7Yw6gnIBRodgtwOFgflHDfeJMrELW79jrSDvXvRC0nnc
+ lTonRisd7/CZWExy3sM2diYhHrZ5YT1dPhFtq33ItpY8BaOhwiLxc3wn0tlWRX8B/cd+xyEHTZY
+ A4nCDSw77SEdaZfmqAB81LMzQWIuTucnxkms4pM1CIIYZrgAPcBk4XN8tWVQ6JQKCpMpelTF6Hj
+ /XLCY2ByRqjtwd/zSjtcCfLOyKdT+uQtAJU1XZvedwqQW5MFk2GeD7O72PfhAP1V0YcbHdiTxde
+ roRpAlQg48k0Ug5EMIUPb9TYEP15vwtPDTw03C3u7eOhs6znDqvMYNAtXwbxfGeHRwjsbMgpWLG
+ +weN3zziLWlwb66N0xo5nfdJRHrOVDNcSx8/Z/xvCmHBTuVr44Q7It0iW+CGbHNqXrg4h4CH
+X-Authority-Analysis: v=2.4 cv=GawXnRXL c=1 sm=1 tr=0 ts=682e57a2 cx=c_pps
+ a=ouPCqIW2jiPt+lZRy3xVPw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17
+ a=GEpy-HfZoHoA:10 a=dt9VzEwgFbYA:10 a=COk6AnOGAAAA:8 a=mu3tZSmwaZwQUXtd2tAA:9
+ a=TjNXssC_j7lpFel5tvFf:22
+X-Proofpoint-GUID: lrtwH7rWiPRFD03fbbD0IavLBLpNgTW-
 X-Proofpoint-Virus-Version: vendor=baseguard
 X-Proofpoint-Virus-Version: vendor=baseguard
- engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.60.29
- definitions=2024-09-06_09,2024-09-06_01,2024-09-02_01
+ engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
+ definitions=2025-05-21_07,2025-05-20_03,2025-03-28_01
 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
- bulkscore=0 adultscore=0
- suspectscore=0 mlxscore=0 clxscore=1015 lowpriorityscore=0 malwarescore=0
- phishscore=0 impostorscore=0 mlxlogscore=999 priorityscore=1501
- spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1
- engine=8.19.0-2408220000 definitions=main-2409180140
+ mlxscore=0 mlxlogscore=999 lowpriorityscore=0 impostorscore=0
+ priorityscore=1501 clxscore=1015 malwarescore=0 phishscore=0 bulkscore=0
+ spamscore=0 suspectscore=0 adultscore=0 classifier=spam authscore=0
+ authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1
+ engine=8.19.0-2505160000 definitions=main-2505210225
 
 
 Currently, the TX and RX MCS rate configurations per peer are
 Currently, the TX and RX MCS rate configurations per peer are
 reversed when sent to the firmware. As a result, RX MCS rates
 reversed when sent to the firmware. As a result, RX MCS rates
@@ -116,7 +127,7 @@ Acked-by: Jeff Johnson <[email protected]>
 
 
 --- a/drivers/net/wireless/ath/ath12k/wmi.c
 --- a/drivers/net/wireless/ath/ath12k/wmi.c
 +++ b/drivers/net/wireless/ath/ath12k/wmi.c
 +++ b/drivers/net/wireless/ath/ath12k/wmi.c
-@@ -2140,8 +2140,8 @@ int ath12k_wmi_send_peer_assoc_cmd(struc
+@@ -2266,8 +2266,8 @@ int ath12k_wmi_send_peer_assoc_cmd(struc
  		he_mcs->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_HE_RATE_SET,
  		he_mcs->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_HE_RATE_SET,
  							    sizeof(*he_mcs));
  							    sizeof(*he_mcs));
  
  
@@ -129,7 +140,7 @@ Acked-by: Jeff Johnson <[email protected]>
  
  
 --- a/drivers/net/wireless/ath/ath12k/wmi.h
 --- a/drivers/net/wireless/ath/ath12k/wmi.h
 +++ b/drivers/net/wireless/ath/ath12k/wmi.h
 +++ b/drivers/net/wireless/ath/ath12k/wmi.h
-@@ -3953,7 +3953,9 @@ struct ath12k_wmi_vht_rate_set_params {
+@@ -4083,7 +4083,9 @@ struct ath12k_wmi_vht_rate_set_params {
  
  
  struct ath12k_wmi_he_rate_set_params {
  struct ath12k_wmi_he_rate_set_params {
  	__le32 tlv_header;
  	__le32 tlv_header;

Dosya farkı çok büyük olduğundan ihmal edildi
+ 310 - 235
package/kernel/mac80211/patches/ath12k/104-6-wifi-ath12k-add-support-for-setting-fixed-HE-rate-GI-LTF.patch


+ 94 - 86
package/kernel/mac80211/patches/ath12k/104-7-wifi-ath12k-clean-up-80P80-support.patch

@@ -1,80 +1,80 @@
-From patchwork Wed Sep 18 21:20:54 2024
+From patchwork Wed May 21 22:45:37 2025
 Content-Type: text/plain; charset="utf-8"
 Content-Type: text/plain; charset="utf-8"
 MIME-Version: 1.0
 MIME-Version: 1.0
 Content-Transfer-Encoding: 7bit
 Content-Transfer-Encoding: 7bit
 X-Patchwork-Submitter: Pradeep Kumar Chitrapu <[email protected]>
 X-Patchwork-Submitter: Pradeep Kumar Chitrapu <[email protected]>
-X-Patchwork-Id: 13807218
+X-Patchwork-Id: 14096121
 X-Patchwork-Delegate: [email protected]
 X-Patchwork-Delegate: [email protected]
-Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com
- [205.220.168.131])
+Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com
+ [205.220.180.131])
 	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 	(No client certificate requested)
 	(No client certificate requested)
-	by smtp.subspace.kernel.org (Postfix) with ESMTPS id E7A2C15853D
-	for <[email protected]>; Wed, 18 Sep 2024 21:21:29 +0000 (UTC)
+	by smtp.subspace.kernel.org (Postfix) with ESMTPS id ED55023958A
+	for <[email protected]>; Wed, 21 May 2025 22:45:58 +0000 (UTC)
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
- arc=none smtp.client-ip=205.220.168.131
+ arc=none smtp.client-ip=205.220.180.131
 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
-	t=1726694491; cv=none;
- b=IDDUnQF/Tnpw/FvWitX7ofLgG/RwY2FyN79K1j9v3STIk2mbRSVtS7kUmHv83gWDgLeingrnJyz3kE7pWhAK5Zt+U/d3HoSbyXlaWdr1m98ZLPJnOIO51q8LBaUW4uPaZbMJiRGvTbhFw+0k6FNjQse034o2zQ5vHk1qETT9XsU=
+	t=1747867560; cv=none;
+ b=R6R1l/0hUMYWkLzVM4w8Z2s3aU01ujlrdBV4IEYLrqQ3CzuP8xd2fnZMcdbVAFvXd/hepJKOZrFod6RG43u2TuGCQ5wM3SKIqyk0c/MlskZk+jnUnvm9WtrezJS82phw1G2mJ8NiYsKzmcJGMQtaYfl3jWA4o+BGMGyOg0Keb/M=
 ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
 ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
-	s=arc-20240116; t=1726694491; c=relaxed/simple;
-	bh=4Sbgjg6TXf4A547Y46Qiyw4U55YEFrIGdUXLZjEx5C0=;
+	s=arc-20240116; t=1747867560; c=relaxed/simple;
+	bh=HUqzq2V1sSbcLZxqxveNb5xXvMg5sfyIhSzn4mKsdms=;
 	h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:
 	h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:
 	 MIME-Version:Content-Type;
 	 MIME-Version:Content-Type;
- b=Y+NDqrjfpb1iFWpY9XYrVbCXhYRTFGsK7MN6jcsgZur7Ro+ZQsyZfhkFA+t+Bb52hk2p2N7v1TAdqLDK2CiFXaWPy/JfESHATwktCnNG+8/UL3n0VIjl+qxGTWt3pS/aWzI6yQjM2FB6tKc4kMnGX//RrgXhEIrh1M4ROs3IpJ0=
+ b=G9poRT2jwhhAC0htiaG4SIE8b1DuTf63uDCDCGj5WoQ4B/v/NWtaqtzBWJF4c7UuQBso4JO4X9auJyfxJ4SxUBrULdlJq7mvAs7nxFOPEBDBltLKWCZznLwuuuo690MjvUQ5mfKt/Oy+uREyur4vXsQtfSBZc0DSZUlC5R+Z2Mc=
 ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
 ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
  dmarc=pass (p=none dis=none) header.from=quicinc.com;
  dmarc=pass (p=none dis=none) header.from=quicinc.com;
  spf=pass smtp.mailfrom=quicinc.com;
  spf=pass smtp.mailfrom=quicinc.com;
  dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
  dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
- header.b=Kt1nBSex; arc=none smtp.client-ip=205.220.168.131
+ header.b=cu63IdMd; arc=none smtp.client-ip=205.220.180.131
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
  dmarc=pass (p=none dis=none) header.from=quicinc.com
  dmarc=pass (p=none dis=none) header.from=quicinc.com
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
  spf=pass smtp.mailfrom=quicinc.com
  spf=pass smtp.mailfrom=quicinc.com
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
 	dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
 	dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
- header.b="Kt1nBSex"
-Received: from pps.filterd (m0279866.ppops.net [127.0.0.1])
+ header.b="cu63IdMd"
+Received: from pps.filterd (m0279871.ppops.net [127.0.0.1])
 	by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id
 	by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id
- 48IJrYUI005813;
-	Wed, 18 Sep 2024 21:21:27 GMT
+ 54LJgw7Z025025;
+	Wed, 21 May 2025 22:45:56 GMT
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
 	cc:content-transfer-encoding:content-type:date:from:in-reply-to
 	cc:content-transfer-encoding:content-type:date:from:in-reply-to
 	:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=
 	:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=
-	7iZtYFy4NRmF2YHXqLd4zDMUbigsFxIkBQ6OeDD3zOs=; b=Kt1nBSex9R0mUQFv
-	fimFwEUDD2mzhj9KyoJnJsvbpzJOV9sBCCp3nPyxHNB66qzQUi/U904HE+wQ26S+
-	Dmo2aGOzcx4GHLU8agTSdb51h1ylcD1ulUXKpEqDIEkWv7leWNteXYTqoj2aUvXQ
-	MH261Yr4HRs5iWT53+FXUrPvY1eipkyG20XH2RcNT7XMMIT29hm5DRVTwU0kzAVU
-	/0hrrSBcgbTJP0KA5zSfO+bFE7fyWSxrjOzt7ugW9KdHlAj5iNAeePRUUlvqSGe7
-	07QprF1ixgWWpsIbUnZdd9UZLPKot8h5Vous/24QLAznqmj/FgipHLT6+Dy61eVq
-	L/T40w==
+	90lF32RvbNU2yyxl2mGBEewKfDvRJ7MRRLe6DgCwXFs=; b=cu63IdMdS+nJIsqy
+	ktY/ZQ/qTTWf2MpubSMC9UftiwnI9Xj6K8LFE0q+NvCN2EgZKzf+OzyW9wbbRepN
+	Q3ZYBAR3lFyw40J6AZgpAuPiq7Y+eqt7l8jc+/2bb2+imOzvWHwFkXSvc8nijnHX
+	ZLEU29M0xloyHeJ7xLbumzRdfcCJ6357/HKp9U3mLvEfpLY97t5/H3yEJWHQmnvE
+	aHkFaLM6Ru2R2+nzPDylKcY+TZsqv306oEqydWI33ANyvfDkWJqbQjtQ+geTkJxC
+	syi9ZifD5zPdOjb9YWNn0V8mWUBRx6hW8ZKU/L3gWGXjkvyRHneZ4AOz83Tp9Ym4
+	L34jSQ==
 Received: from nalasppmta04.qualcomm.com (Global_NAT1.qualcomm.com
 Received: from nalasppmta04.qualcomm.com (Global_NAT1.qualcomm.com
  [129.46.96.20])
  [129.46.96.20])
-	by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 41n4jdu9q1-1
+	by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46rwf6vbsf-1
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
-	Wed, 18 Sep 2024 21:21:27 +0000 (GMT)
+	Wed, 21 May 2025 22:45:55 +0000 (GMT)
 Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com
 Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com
  [10.47.209.196])
  [10.47.209.196])
 	by NALASPPMTA04.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id
 	by NALASPPMTA04.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id
- 48ILL9Ux020570
+ 54LMjsWN022226
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
-	Wed, 18 Sep 2024 21:21:09 GMT
-Received: from ath12k-linux1.qualcomm.com (10.80.80.8) by
+	Wed, 21 May 2025 22:45:54 GMT
+Received: from ath12k-linux2.qualcomm.com (10.80.80.8) by
  nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server
  nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server
  (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
  (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
- 15.2.1544.9; Wed, 18 Sep 2024 14:21:08 -0700
+ 15.2.1544.9; Wed, 21 May 2025 15:45:54 -0700
 From: Pradeep Kumar Chitrapu <[email protected]>
 From: Pradeep Kumar Chitrapu <[email protected]>
 To: <[email protected]>
 To: <[email protected]>
 CC: <[email protected]>,
 CC: <[email protected]>,
         Pradeep Kumar Chitrapu
         Pradeep Kumar Chitrapu
 	<[email protected]>,
 	<[email protected]>,
         Jeff Johnson <[email protected]>
         Jeff Johnson <[email protected]>
-Subject: [PATCH V8 7/9] wifi: ath12k: clean up 80P80 support
-Date: Wed, 18 Sep 2024 14:20:54 -0700
-Message-ID: <20240918212056.4137076[email protected]>
-X-Mailer: git-send-email 2.34.1
-In-Reply-To: <20240918212056.4137076[email protected]>
-References: <20240918212056.4137076[email protected]>
+Subject: [PATCH ath-next V14 7/9] wifi: ath12k: clean up 80P80 support
+Date: Wed, 21 May 2025 15:45:37 -0700
+Message-ID: <20250521224539.355985[email protected]>
+X-Mailer: git-send-email 2.43.0
+In-Reply-To: <20250521224539.355985[email protected]>
+References: <20250521224539.355985[email protected]>
 Precedence: bulk
 Precedence: bulk
 X-Mailing-List: [email protected]
 X-Mailing-List: [email protected]
 List-Id: <linux-wireless.vger.kernel.org>
 List-Id: <linux-wireless.vger.kernel.org>
@@ -86,17 +86,28 @@ X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To
 X-QCInternal: smtphost
 X-QCInternal: smtphost
 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800
 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800
  signatures=585085
  signatures=585085
-X-Proofpoint-ORIG-GUID: zOl2cVhwvoAFaH70WioUIdrk_oIr5c-T
-X-Proofpoint-GUID: zOl2cVhwvoAFaH70WioUIdrk_oIr5c-T
+X-Proofpoint-GUID: xDBdjIlSrmWJZkBfMwcImhxnyTIR4551
+X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTIxMDIyNiBTYWx0ZWRfX75XKL//oF16a
+ YMA/60ZSduIYMzTQ+PpEhRfS8BSEJ3JAYNLLDjp3b1hmrHJmdqMnxgbya6RQ+qeAISgkr8ZWIMx
+ fGx/btrlFP2SbXd0JWwSMOApD3LJewBu/ZeBWBDEWbbO00LOGnR0aFqmCeym6YSeYyakVcNd8nQ
+ 0JnPxxBLeXeYPpIZTFMD6TpVFyfvtCG9jpMOI27FLBdHLednVW2yrOx5b62xwy181re5iN4XOki
+ 1M/HJRMACpfQJImHpO9X3rRh2j79oKIKVwa3UjV8A7vD3noV/pV0SOTZP0awMYQH/Pn91nji685
+ auXzHG2pai3Byw89+jYZIG2xfiqBcBwIEARvw52XSv3glk0tSvLDxNo8nyFNPsZ63g70USl1IlC
+ AKhW+QOw9/zkn3oCB+3fZZ/y+F4vlu4OzN4gETU+6p3798YiFGWMvocQnI/Ig7Unex9rmOP5
+X-Authority-Analysis: v=2.4 cv=fZOty1QF c=1 sm=1 tr=0 ts=682e57a3 cx=c_pps
+ a=ouPCqIW2jiPt+lZRy3xVPw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17
+ a=GEpy-HfZoHoA:10 a=dt9VzEwgFbYA:10 a=COk6AnOGAAAA:8 a=QHHbJxpVzSBZVvfXPLwA:9
+ a=TjNXssC_j7lpFel5tvFf:22
+X-Proofpoint-ORIG-GUID: xDBdjIlSrmWJZkBfMwcImhxnyTIR4551
 X-Proofpoint-Virus-Version: vendor=baseguard
 X-Proofpoint-Virus-Version: vendor=baseguard
- engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.60.29
- definitions=2024-09-06_09,2024-09-06_01,2024-09-02_01
+ engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
+ definitions=2025-05-21_07,2025-05-20_03,2025-03-28_01
 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
- phishscore=0 impostorscore=0
- clxscore=1015 adultscore=0 mlxscore=0 suspectscore=0 malwarescore=0
- priorityscore=1501 spamscore=0 bulkscore=0 lowpriorityscore=0
- mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1
- engine=8.19.0-2408220000 definitions=main-2409180141
+ clxscore=1015 mlxscore=0 adultscore=0 spamscore=0 bulkscore=0 suspectscore=0
+ malwarescore=0 priorityscore=1501 impostorscore=0 mlxlogscore=999
+ lowpriorityscore=0 phishscore=0 classifier=spam authscore=0 authtc=n/a
+ authcc= route=outbound adjust=0 reason=mlx scancount=1
+ engine=8.19.0-2505160000 definitions=main-2505210226
 
 
 Clean up unused 80P80 references as hardware does not support
 Clean up unused 80P80 references as hardware does not support
 it. This is applicable to both QCN9274 and WCN7850.
 it. This is applicable to both QCN9274 and WCN7850.
@@ -106,14 +117,14 @@ Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
 Signed-off-by: Pradeep Kumar Chitrapu <[email protected]>
 Signed-off-by: Pradeep Kumar Chitrapu <[email protected]>
 Acked-by: Jeff Johnson <[email protected]>
 Acked-by: Jeff Johnson <[email protected]>
 ---
 ---
- drivers/net/wireless/ath/ath12k/mac.c | 51 ++++++---------------------
- drivers/net/wireless/ath/ath12k/wmi.c |  5 +--
+ drivers/net/wireless/ath/ath12k/mac.c | 48 ++++++---------------------
+ drivers/net/wireless/ath/ath12k/wmi.c |  2 --
  drivers/net/wireless/ath/ath12k/wmi.h |  1 -
  drivers/net/wireless/ath/ath12k/wmi.h |  1 -
- 3 files changed, 11 insertions(+), 46 deletions(-)
+ 3 files changed, 10 insertions(+), 41 deletions(-)
 
 
 --- a/drivers/net/wireless/ath/ath12k/mac.c
 --- a/drivers/net/wireless/ath/ath12k/mac.c
 +++ b/drivers/net/wireless/ath/ath12k/mac.c
 +++ b/drivers/net/wireless/ath/ath12k/mac.c
-@@ -206,7 +206,7 @@ ath12k_phymodes[NUM_NL80211_BANDS][ATH12
+@@ -207,7 +207,7 @@ ath12k_phymodes[NUM_NL80211_BANDS][ATH12
  			[NL80211_CHAN_WIDTH_40] = MODE_11BE_EHT40,
  			[NL80211_CHAN_WIDTH_40] = MODE_11BE_EHT40,
  			[NL80211_CHAN_WIDTH_80] = MODE_11BE_EHT80,
  			[NL80211_CHAN_WIDTH_80] = MODE_11BE_EHT80,
  			[NL80211_CHAN_WIDTH_160] = MODE_11BE_EHT160,
  			[NL80211_CHAN_WIDTH_160] = MODE_11BE_EHT160,
@@ -122,7 +133,7 @@ Acked-by: Jeff Johnson <[email protected]>
  			[NL80211_CHAN_WIDTH_320] = MODE_11BE_EHT320,
  			[NL80211_CHAN_WIDTH_320] = MODE_11BE_EHT320,
  	},
  	},
  	[NL80211_BAND_6GHZ] = {
  	[NL80211_BAND_6GHZ] = {
-@@ -217,7 +217,7 @@ ath12k_phymodes[NUM_NL80211_BANDS][ATH12
+@@ -218,7 +218,7 @@ ath12k_phymodes[NUM_NL80211_BANDS][ATH12
  			[NL80211_CHAN_WIDTH_40] = MODE_11BE_EHT40,
  			[NL80211_CHAN_WIDTH_40] = MODE_11BE_EHT40,
  			[NL80211_CHAN_WIDTH_80] = MODE_11BE_EHT80,
  			[NL80211_CHAN_WIDTH_80] = MODE_11BE_EHT80,
  			[NL80211_CHAN_WIDTH_160] = MODE_11BE_EHT160,
  			[NL80211_CHAN_WIDTH_160] = MODE_11BE_EHT160,
@@ -131,9 +142,9 @@ Acked-by: Jeff Johnson <[email protected]>
  			[NL80211_CHAN_WIDTH_320] = MODE_11BE_EHT320,
  			[NL80211_CHAN_WIDTH_320] = MODE_11BE_EHT320,
  	},
  	},
  
  
-@@ -2390,17 +2390,6 @@ static void ath12k_peer_assoc_h_he(struc
+@@ -2638,17 +2638,6 @@ static void ath12k_peer_assoc_h_he(struc
  
  
- 	switch (sta->deflink.bandwidth) {
+ 	switch (link_sta->bandwidth) {
  	case IEEE80211_STA_RX_BW_160:
  	case IEEE80211_STA_RX_BW_160:
 -		if (he_cap->he_cap_elem.phy_cap_info[0] &
 -		if (he_cap->he_cap_elem.phy_cap_info[0] &
 -		    IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G) {
 -		    IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G) {
@@ -149,15 +160,14 @@ Acked-by: Jeff Johnson <[email protected]>
  		v = le16_to_cpu(he_cap->he_mcs_nss_supp.rx_mcs_160);
  		v = le16_to_cpu(he_cap->he_mcs_nss_supp.rx_mcs_160);
  		arg->peer_he_rx_mcs_set[WMI_HECAP_TXRX_MCS_NSS_IDX_160] = v;
  		arg->peer_he_rx_mcs_set[WMI_HECAP_TXRX_MCS_NSS_IDX_160] = v;
  
  
-@@ -2658,16 +2647,11 @@ static enum wmi_phy_mode ath12k_mac_get_
- 						    struct ieee80211_sta *sta)
+@@ -2935,16 +2924,11 @@ static enum wmi_phy_mode ath12k_mac_get_
+ 						    struct ieee80211_link_sta *link_sta)
  {
  {
- 	if (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_160) {
--		switch (sta->deflink.vht_cap.cap &
+ 	if (link_sta->bandwidth == IEEE80211_STA_RX_BW_160) {
+-		switch (link_sta->vht_cap.cap &
 -			IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK) {
 -			IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK) {
 -		case IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ:
 -		case IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ:
-+		if (sta->deflink.vht_cap.cap &
-+		    IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ)
++		if (link_sta->vht_cap.cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ)
  			return MODE_11AC_VHT160;
  			return MODE_11AC_VHT160;
 -		case IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ:
 -		case IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ:
 -			return MODE_11AC_VHT80_80;
 -			return MODE_11AC_VHT80_80;
@@ -166,15 +176,16 @@ Acked-by: Jeff Johnson <[email protected]>
 -			return MODE_11AC_VHT160;
 -			return MODE_11AC_VHT160;
 -		}
 -		}
 +
 +
-+		return MODE_UNKNOWN;
++		/* not sure if this is a valid case? */
++		return MODE_11AC_VHT160;
  	}
  	}
  
  
- 	if (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_80)
-@@ -2689,11 +2673,8 @@ static enum wmi_phy_mode ath12k_mac_get_
- 		if (sta->deflink.he_cap.he_cap_elem.phy_cap_info[0] &
+ 	if (link_sta->bandwidth == IEEE80211_STA_RX_BW_80)
+@@ -2966,11 +2950,8 @@ static enum wmi_phy_mode ath12k_mac_get_
+ 		if (link_sta->he_cap.he_cap_elem.phy_cap_info[0] &
  		     IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G)
  		     IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G)
  			return MODE_11AX_HE160;
  			return MODE_11AX_HE160;
--		else if (sta->deflink.he_cap.he_cap_elem.phy_cap_info[0] &
+-		else if (link_sta->he_cap.he_cap_elem.phy_cap_info[0] &
 -		     IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G)
 -		     IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G)
 -			return MODE_11AX_HE80_80;
 -			return MODE_11AX_HE80_80;
 -		/* not sure if this is a valid case? */
 -		/* not sure if this is a valid case? */
@@ -183,24 +194,24 @@ Acked-by: Jeff Johnson <[email protected]>
 +		return MODE_UNKNOWN;
 +		return MODE_UNKNOWN;
  	}
  	}
  
  
- 	if (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_80)
-@@ -2721,14 +2702,7 @@ static enum wmi_phy_mode ath12k_mac_get_
+ 	if (link_sta->bandwidth == IEEE80211_STA_RX_BW_80)
+@@ -2998,14 +2979,10 @@ static enum wmi_phy_mode ath12k_mac_get_
  		    IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G)
  		    IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G)
  			return MODE_11BE_EHT160;
  			return MODE_11BE_EHT160;
  
  
--		if (sta->deflink.he_cap.he_cap_elem.phy_cap_info[0] &
+-		if (link_sta->he_cap.he_cap_elem.phy_cap_info[0] &
 -			 IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G)
 -			 IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G)
 -			return MODE_11BE_EHT80_80;
 -			return MODE_11BE_EHT80_80;
 -
 -
--		ath12k_warn(ar->ab, "invalid EHT PHY capability info for 160 Mhz: %d\n",
--			    sta->deflink.he_cap.he_cap_elem.phy_cap_info[0]);
--
+ 		ath12k_warn(ar->ab, "invalid EHT PHY capability info for 160 Mhz: %d\n",
+ 			    link_sta->he_cap.he_cap_elem.phy_cap_info[0]);
+ 
 -		return MODE_11BE_EHT160;
 -		return MODE_11BE_EHT160;
 +		return MODE_UNKNOWN;
 +		return MODE_UNKNOWN;
  	}
  	}
  
  
- 	if (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_80)
-@@ -5806,8 +5780,6 @@ static void ath12k_mac_set_hemcsmap(stru
+ 	if (link_sta->bandwidth == IEEE80211_STA_RX_BW_80)
+@@ -7077,8 +7054,6 @@ static void ath12k_mac_set_hemcsmap(stru
  	mcs_nss->tx_mcs_80 = cpu_to_le16(txmcs_map & 0xffff);
  	mcs_nss->tx_mcs_80 = cpu_to_le16(txmcs_map & 0xffff);
  	mcs_nss->rx_mcs_160 = cpu_to_le16(rxmcs_map & 0xffff);
  	mcs_nss->rx_mcs_160 = cpu_to_le16(rxmcs_map & 0xffff);
  	mcs_nss->tx_mcs_160 = cpu_to_le16(txmcs_map & 0xffff);
  	mcs_nss->tx_mcs_160 = cpu_to_le16(txmcs_map & 0xffff);
@@ -209,7 +220,7 @@ Acked-by: Jeff Johnson <[email protected]>
  }
  }
  
  
  static void ath12k_mac_copy_he_cap(struct ath12k *ar,
  static void ath12k_mac_copy_he_cap(struct ath12k *ar,
-@@ -5829,6 +5801,7 @@ static void ath12k_mac_copy_he_cap(struc
+@@ -7100,6 +7075,7 @@ static void ath12k_mac_copy_he_cap(struc
  		IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_IN_2G |
  		IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_IN_2G |
  		IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G |
  		IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G |
  		IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G;
  		IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G;
@@ -217,7 +228,7 @@ Acked-by: Jeff Johnson <[email protected]>
  	he_cap_elem->phy_cap_info[0] &=
  	he_cap_elem->phy_cap_info[0] &=
  		~IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G;
  		~IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G;
  	he_cap_elem->phy_cap_info[5] &=
  	he_cap_elem->phy_cap_info[5] &=
-@@ -8495,10 +8468,6 @@ static __le16
+@@ -10176,10 +10152,6 @@ static __le16
  ath12k_mac_get_tx_mcs_map(const struct ieee80211_sta_he_cap *he_cap)
  ath12k_mac_get_tx_mcs_map(const struct ieee80211_sta_he_cap *he_cap)
  {
  {
  	if (he_cap->he_cap_elem.phy_cap_info[0] &
  	if (he_cap->he_cap_elem.phy_cap_info[0] &
@@ -230,25 +241,22 @@ Acked-by: Jeff Johnson <[email protected]>
  
  
 --- a/drivers/net/wireless/ath/ath12k/wmi.c
 --- a/drivers/net/wireless/ath/ath12k/wmi.c
 +++ b/drivers/net/wireless/ath/ath12k/wmi.c
 +++ b/drivers/net/wireless/ath/ath12k/wmi.c
-@@ -986,10 +986,7 @@ static void ath12k_wmi_put_wmi_channel(s
+@@ -1021,8 +1021,6 @@ static void ath12k_wmi_put_wmi_channel(s
+ 			chan->band_center_freq1 = cpu_to_le32(center_freq1 - 40);
  
  
- 	chan->mhz = cpu_to_le32(arg->freq);
- 	chan->band_center_freq1 = cpu_to_le32(arg->band_center_freq1);
--	if (arg->mode == MODE_11AC_VHT80_80)
+ 		chan->band_center_freq2 = cpu_to_le32(center_freq1);
+-	} else if (arg->mode == MODE_11BE_EHT80_80) {
 -		chan->band_center_freq2 = cpu_to_le32(arg->band_center_freq2);
 -		chan->band_center_freq2 = cpu_to_le32(arg->band_center_freq2);
--	else
--		chan->band_center_freq2 = 0;
-+	chan->band_center_freq2 = 0;
- 
- 	chan->info |= le32_encode_bits(arg->mode, WMI_CHAN_INFO_MODE);
- 	if (arg->passive)
+ 	} else {
+ 		chan->band_center_freq2 = 0;
+ 	}
 --- a/drivers/net/wireless/ath/ath12k/wmi.h
 --- a/drivers/net/wireless/ath/ath12k/wmi.h
 +++ b/drivers/net/wireless/ath/ath12k/wmi.h
 +++ b/drivers/net/wireless/ath/ath12k/wmi.h
-@@ -3633,7 +3633,6 @@ struct wmi_vdev_install_key_arg {
+@@ -3726,7 +3726,6 @@ struct wmi_vdev_install_key_arg {
  #define WMI_HOST_MAX_HE_RATE_SET		3
  #define WMI_HOST_MAX_HE_RATE_SET		3
  #define WMI_HECAP_TXRX_MCS_NSS_IDX_80		0
  #define WMI_HECAP_TXRX_MCS_NSS_IDX_80		0
  #define WMI_HECAP_TXRX_MCS_NSS_IDX_160		1
  #define WMI_HECAP_TXRX_MCS_NSS_IDX_160		1
 -#define WMI_HECAP_TXRX_MCS_NSS_IDX_80_80	2
 -#define WMI_HECAP_TXRX_MCS_NSS_IDX_80_80	2
  
  
- struct wmi_rate_set_arg {
- 	u32 num_rates;
+ #define ATH12K_WMI_MLO_MAX_PARTNER_LINKS \
+ 	(ATH12K_WMI_MLO_MAX_LINKS + ATH12K_MAX_NUM_BRIDGE_LINKS - 1)

+ 121 - 127
package/kernel/mac80211/patches/ath12k/104-8-wifi-ath12k-add-support-for-160-MHz-bandwidth.patch

@@ -1,68 +1,68 @@
-From patchwork Wed Sep 18 21:20:55 2024
+From patchwork Wed May 21 22:45:38 2025
 Content-Type: text/plain; charset="utf-8"
 Content-Type: text/plain; charset="utf-8"
 MIME-Version: 1.0
 MIME-Version: 1.0
 Content-Transfer-Encoding: 7bit
 Content-Transfer-Encoding: 7bit
 X-Patchwork-Submitter: Pradeep Kumar Chitrapu <[email protected]>
 X-Patchwork-Submitter: Pradeep Kumar Chitrapu <[email protected]>
-X-Patchwork-Id: 13807216
+X-Patchwork-Id: 14096124
 X-Patchwork-Delegate: [email protected]
 X-Patchwork-Delegate: [email protected]
 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com
 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com
  [205.220.180.131])
  [205.220.180.131])
 	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 	(No client certificate requested)
 	(No client certificate requested)
-	by smtp.subspace.kernel.org (Postfix) with ESMTPS id C64DB1CB518
-	for <[email protected]>; Wed, 18 Sep 2024 21:21:15 +0000 (UTC)
+	by smtp.subspace.kernel.org (Postfix) with ESMTPS id DEE9223A9AA
+	for <[email protected]>; Wed, 21 May 2025 22:45:59 +0000 (UTC)
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
  arc=none smtp.client-ip=205.220.180.131
  arc=none smtp.client-ip=205.220.180.131
 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
-	t=1726694477; cv=none;
- b=aWI5JISgL9c0iB/8EAXYKF/Lb2sJoeG+v5+Va4eb/voqwiSQ4FtwPkCC00b9attXvu4dD9wEHGKPW8Uh2kb1tSTl0uNHxijRmLYK2VUWkLHsZ3Pd6VvGoTpbtmOTgsGklZHZiFd+jyWgGkHB4ZBkHSkG9JH6VR44MSIgNj8g14A=
+	t=1747867561; cv=none;
+ b=qWgm5H8L0Zhrc5crkCw7SBoGEQ8yf+aC0TSWOzfiTwcAddeStpjorEa3XaBl0GOhHPRaECOhMSNqu88tQ5CzCGmumBQ3QLC6mod6Tb0Y0PdeUJm3YoGKcI+F0oE3g5kCHaU9LRKKnmMZQS72kE7dO+lEBfwMIuCX/VwV066B1p8=
 ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
 ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
-	s=arc-20240116; t=1726694477; c=relaxed/simple;
-	bh=AYJpDHbXZ0n0NNHQi7/aGcqo7YfyoYhv+FrXZ143wMA=;
+	s=arc-20240116; t=1747867561; c=relaxed/simple;
+	bh=61S52HJJJauXcXkg3NpFqkwtGSPNO+bmTpNYu1v9AKM=;
 	h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:
 	h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:
 	 MIME-Version:Content-Type;
 	 MIME-Version:Content-Type;
- b=jD1C2mzFvENculg9HS0v02iWUDzrWXiuU5GXTyC/0BKAJirnQkOUdVm7u0AEPiMxfkktLT3QCJLuvnKu3ZqSXWNbc2zOdUHTyW12fKdDNHib1WYYySBnfqu4EmiJKGcTE57VFlVdbklngOCDTCqHvVgP7YitGg2fWLPqBP/4yhM=
+ b=gi5WIxM8SYlljyfdAVTdIK6JQ5jJHPGGfdxPkwbtEaPElRA55vurxkaaJ0RktTtDYYJEn7KLZFieBHAv5/nEcrDjL4NGvgT3wiAoGcbsd+TIF6w5J2RSmAwhAP008N5swveLHDzJ0M9TrtQj2HHndc8JPD4oGWbcEqKQqHSq8ck=
 ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
 ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
  dmarc=pass (p=none dis=none) header.from=quicinc.com;
  dmarc=pass (p=none dis=none) header.from=quicinc.com;
  spf=pass smtp.mailfrom=quicinc.com;
  spf=pass smtp.mailfrom=quicinc.com;
  dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
  dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
- header.b=OMqc+btb; arc=none smtp.client-ip=205.220.180.131
+ header.b=lMYw009C; arc=none smtp.client-ip=205.220.180.131
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
  dmarc=pass (p=none dis=none) header.from=quicinc.com
  dmarc=pass (p=none dis=none) header.from=quicinc.com
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
  spf=pass smtp.mailfrom=quicinc.com
  spf=pass smtp.mailfrom=quicinc.com
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
 	dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
 	dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
- header.b="OMqc+btb"
-Received: from pps.filterd (m0279872.ppops.net [127.0.0.1])
+ header.b="lMYw009C"
+Received: from pps.filterd (m0279868.ppops.net [127.0.0.1])
 	by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id
 	by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id
- 48I8sxTR020476;
-	Wed, 18 Sep 2024 21:21:11 GMT
+ 54LJgEPE029249;
+	Wed, 21 May 2025 22:45:56 GMT
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
 	cc:content-transfer-encoding:content-type:date:from:in-reply-to
 	cc:content-transfer-encoding:content-type:date:from:in-reply-to
 	:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=
 	:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=
-	dFohRj9vqwjJTRRYk31/1oJCFqLLKUuQ/verxCo/cGo=; b=OMqc+btbHl9cHSxO
-	NauW5WX4C34QsGL/4d03QTtCDlctfB5PRmINiP2/jGcVZk3NZWS3d2f5zjPY7+hd
-	uaUDslDMQwvAj1Jay/we1qNaFIPuzj4c9BbHqvvXa0WiCgQWpBC2h2jcFLXbeVHE
-	5bqH+plXU5cz1d2YbsRpCXsdUWL/+S3u6A6/qxj6UraJ1s/rkE4ndQe/AQuf96Ja
-	ylYiZPdtJJXzB6rPDN1bQsSET/PNXzIkrYTaDLF9A6688WU9izJdAjRcsu8oB8o1
-	U+yftDfoegI7+ZyTZ4JUnQs7zJp171L/qsF0U9RONZCIbSLN9pkTo6xp6CrHGeLQ
-	0tCmwQ==
-Received: from nalasppmta05.qualcomm.com (Global_NAT1.qualcomm.com
+	ph+yJaIkwYsZzzEsymzTjupgmHjdwFMJhbEzuPrYvfY=; b=lMYw009CSvZqDxkz
+	+HCEzcZhy6QO8G2ut93TJxHdCbVLlRaMNReXGlGqx2KRNracyLRkAQsC16i+QcpJ
+	aHBvIE2c0/TEtBiyv3HzBf3/89R0POT080sz81P6go3m8w9bcIE+Q2DqjdhVNqu3
+	AlV8qb6pj/QUVvDbJQxO1M9eCXSO6g2BBDjgRCktOu+x2TlxhdBZ/tJP+h0AUk+j
+	YsH1LhcLOZYCFTJyB6IFmHWvtGk5Ef6i6D/tXyCL7nQiDP/R1v2PcdlLlI5e5/PO
+	FhKB2+RCmSyJUtyaAHHi/mVen5yqFX2K3/vL3BtprRAJINhFxQrLs6xLIQabELzj
+	KCstuQ==
+Received: from nalasppmta04.qualcomm.com (Global_NAT1.qualcomm.com
  [129.46.96.20])
  [129.46.96.20])
-	by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 41n4j6uagr-1
+	by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46rwfb4b3x-1
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
-	Wed, 18 Sep 2024 21:21:10 +0000 (GMT)
+	Wed, 21 May 2025 22:45:55 +0000 (GMT)
 Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com
 Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com
  [10.47.209.196])
  [10.47.209.196])
-	by NALASPPMTA05.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id
- 48ILL9IB009589
+	by NALASPPMTA04.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id
+ 54LMjtX2022238
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
-	Wed, 18 Sep 2024 21:21:09 GMT
-Received: from ath12k-linux1.qualcomm.com (10.80.80.8) by
+	Wed, 21 May 2025 22:45:55 GMT
+Received: from ath12k-linux2.qualcomm.com (10.80.80.8) by
  nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server
  nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server
  (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
  (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
- 15.2.1544.9; Wed, 18 Sep 2024 14:21:09 -0700
+ 15.2.1544.9; Wed, 21 May 2025 15:45:54 -0700
 From: Pradeep Kumar Chitrapu <[email protected]>
 From: Pradeep Kumar Chitrapu <[email protected]>
 To: <[email protected]>
 To: <[email protected]>
 CC: <[email protected]>,
 CC: <[email protected]>,
@@ -71,12 +71,13 @@ CC: <[email protected]>,
         P Praneesh <[email protected]>,
         P Praneesh <[email protected]>,
         "Jeff
         "Jeff
  Johnson" <[email protected]>
  Johnson" <[email protected]>
-Subject: [PATCH V8 8/9] wifi: ath12k: add support for 160 MHz bandwidth
-Date: Wed, 18 Sep 2024 14:20:55 -0700
-Message-ID: <[email protected]>
-X-Mailer: git-send-email 2.34.1
-In-Reply-To: <[email protected]>
-References: <[email protected]>
+Subject: [PATCH ath-next V14 8/9] wifi: ath12k: add support for 160 MHz
+ bandwidth
+Date: Wed, 21 May 2025 15:45:38 -0700
+Message-ID: <[email protected]>
+X-Mailer: git-send-email 2.43.0
+In-Reply-To: <[email protected]>
+References: <[email protected]>
 Precedence: bulk
 Precedence: bulk
 X-Mailing-List: [email protected]
 X-Mailing-List: [email protected]
 List-Id: <linux-wireless.vger.kernel.org>
 List-Id: <linux-wireless.vger.kernel.org>
@@ -88,17 +89,28 @@ X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To
 X-QCInternal: smtphost
 X-QCInternal: smtphost
 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800
 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800
  signatures=585085
  signatures=585085
-X-Proofpoint-ORIG-GUID: wO0mnzqAAbcWYLNaoEhU3YfsdCyDJ2hk
-X-Proofpoint-GUID: wO0mnzqAAbcWYLNaoEhU3YfsdCyDJ2hk
+X-Proofpoint-ORIG-GUID: T9MbsOp4F8M93FD6ZEyfm1BTh5tEiCIl
+X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTIxMDIyNiBTYWx0ZWRfX0EeEFBAyVxZV
+ WX6jh2dkCn4P+eViI8Gvz/6S+yZ+Avx9/8To2mbulh5j1kDm92bEDu7iQtI17ILPnOgbUXWAjjt
+ Z2LvemtbMzJe0lY0EjJNWWunihdlsXPAdOnZFjV0rOtakq8Xx4y8K45/1cGY9dQOApxDFC9HiLZ
+ +FK9apopZ2DyP6haLf5HQI+6DC3wwgbEQlE+89g69hXEM8UePlFlsf0fpfIVgiWG73gfzHkrRPM
+ 8ByVGmKpFSXIBmvY+EZZOPuPsQHt/91pIisXw5Joxdbl6Qf2anjuC0X4LPrTgTxgXWhljS4JdXo
+ djhNt09IBnNuagxN9aMx/frUhqQPNL54kp/cXbpgcLQX0XQg8SOvwyxJs+CALQUyymluDLHyH9w
+ UQUznCXFrps86AX/Fpnhrl9hqR5NO0/6oR340zsS7mvryRucOqzT7vc3WPMJEhW68VMCAl5Z
+X-Proofpoint-GUID: T9MbsOp4F8M93FD6ZEyfm1BTh5tEiCIl
+X-Authority-Analysis: v=2.4 cv=dLCmmPZb c=1 sm=1 tr=0 ts=682e57a4 cx=c_pps
+ a=ouPCqIW2jiPt+lZRy3xVPw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17
+ a=GEpy-HfZoHoA:10 a=dt9VzEwgFbYA:10 a=COk6AnOGAAAA:8 a=dOJm2eNAaUnF9U8lSB4A:9
+ a=TjNXssC_j7lpFel5tvFf:22
 X-Proofpoint-Virus-Version: vendor=baseguard
 X-Proofpoint-Virus-Version: vendor=baseguard
- engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.60.29
- definitions=2024-09-06_09,2024-09-06_01,2024-09-02_01
+ engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
+ definitions=2025-05-21_07,2025-05-20_03,2025-03-28_01
 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
- phishscore=0 mlxlogscore=999
- mlxscore=0 malwarescore=0 bulkscore=0 priorityscore=1501 clxscore=1015
- adultscore=0 suspectscore=0 lowpriorityscore=0 spamscore=0 impostorscore=0
- classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2408220000
- definitions=main-2409180140
+ mlxscore=0 clxscore=1015 adultscore=0 bulkscore=0 phishscore=0 suspectscore=0
+ impostorscore=0 malwarescore=0 lowpriorityscore=0 mlxlogscore=999 spamscore=0
+ priorityscore=1501 classifier=spam authscore=0 authtc=n/a authcc=
+ route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000
+ definitions=main-2505210226
 
 
 Add support to configure maximum NSS in 160 MHz bandwidth.
 Add support to configure maximum NSS in 160 MHz bandwidth.
 Firmware advertises support for handling NSS ratio information
 Firmware advertises support for handling NSS ratio information
@@ -119,18 +131,18 @@ Signed-off-by: Pradeep Kumar Chitrapu <[email protected]>
 Acked-by: Jeff Johnson <[email protected]>
 Acked-by: Jeff Johnson <[email protected]>
 ---
 ---
  drivers/net/wireless/ath/ath12k/core.h |  2 +
  drivers/net/wireless/ath/ath12k/core.h |  2 +
- drivers/net/wireless/ath/ath12k/mac.c  | 85 ++++++++++++++++++++++----
+ drivers/net/wireless/ath/ath12k/mac.c  | 89 ++++++++++++++++++++++----
  drivers/net/wireless/ath/ath12k/mac.h  |  2 +
  drivers/net/wireless/ath/ath12k/mac.h  |  2 +
- drivers/net/wireless/ath/ath12k/wmi.c  | 19 +++++-
- drivers/net/wireless/ath/ath12k/wmi.h  | 28 +++++++++
- 5 files changed, 124 insertions(+), 12 deletions(-)
+ drivers/net/wireless/ath/ath12k/wmi.c  |  7 +-
+ drivers/net/wireless/ath/ath12k/wmi.h  | 28 ++++++++
+ 5 files changed, 115 insertions(+), 13 deletions(-)
 
 
 --- a/drivers/net/wireless/ath/ath12k/core.h
 --- a/drivers/net/wireless/ath/ath12k/core.h
 +++ b/drivers/net/wireless/ath/ath12k/core.h
 +++ b/drivers/net/wireless/ath/ath12k/core.h
-@@ -717,6 +717,8 @@ struct ath12k_pdev_cap {
- 	u32 tx_chain_mask_shift;
- 	u32 rx_chain_mask_shift;
+@@ -789,6 +789,8 @@ struct ath12k_pdev_cap {
  	struct ath12k_band_cap band[NUM_NL80211_BANDS];
  	struct ath12k_band_cap band[NUM_NL80211_BANDS];
+ 	u32 eml_cap;
+ 	u32 mld_cap;
 +	bool nss_ratio_enabled;
 +	bool nss_ratio_enabled;
 +	u8 nss_ratio_info;
 +	u8 nss_ratio_info;
  };
  };
@@ -138,7 +150,7 @@ Acked-by: Jeff Johnson <[email protected]>
  struct mlo_timestamp {
  struct mlo_timestamp {
 --- a/drivers/net/wireless/ath/ath12k/mac.c
 --- a/drivers/net/wireless/ath/ath12k/mac.c
 +++ b/drivers/net/wireless/ath/ath12k/mac.c
 +++ b/drivers/net/wireless/ath/ath12k/mac.c
-@@ -2050,6 +2050,34 @@ ath12k_peer_assoc_h_vht_limit(u16 tx_mcs
+@@ -2267,6 +2267,34 @@ ath12k_peer_assoc_h_vht_limit(u16 tx_mcs
  	return tx_mcs_set;
  	return tx_mcs_set;
  }
  }
  
  
@@ -171,28 +183,27 @@ Acked-by: Jeff Johnson <[email protected]>
 +}
 +}
 +
 +
  static void ath12k_peer_assoc_h_vht(struct ath12k *ar,
  static void ath12k_peer_assoc_h_vht(struct ath12k *ar,
- 				    struct ieee80211_vif *vif,
- 				    struct ieee80211_sta *sta,
-@@ -2065,6 +2093,7 @@ static void ath12k_peer_assoc_h_vht(stru
+ 				    struct ath12k_link_vif *arvif,
+ 				    struct ath12k_link_sta *arsta,
+@@ -2284,6 +2312,7 @@ static void ath12k_peer_assoc_h_vht(stru
  	u8 max_nss, vht_mcs;
  	u8 max_nss, vht_mcs;
  	int i, vht_nss, nss_idx;
  	int i, vht_nss, nss_idx;
  	bool user_rate_valid = true;
  	bool user_rate_valid = true;
 +	u32 rx_nss, tx_nss, nss_160;
 +	u32 rx_nss, tx_nss, nss_160;
  
  
- 	if (WARN_ON(ath12k_mac_vif_chan(vif, &def)))
- 		return;
-@@ -2159,10 +2188,24 @@ static void ath12k_peer_assoc_h_vht(stru
+ 	lockdep_assert_wiphy(ath12k_ar_to_hw(ar)->wiphy);
+ 
+@@ -2388,10 +2417,24 @@ static void ath12k_peer_assoc_h_vht(stru
  	/* TODO:  Check */
  	/* TODO:  Check */
  	arg->tx_max_mcs_nss = 0xFF;
  	arg->tx_max_mcs_nss = 0xFF;
  
  
 -	ath12k_dbg(ar->ab, ATH12K_DBG_MAC, "mac vht peer %pM max_mpdu %d flags 0x%x\n",
 -	ath12k_dbg(ar->ab, ATH12K_DBG_MAC, "mac vht peer %pM max_mpdu %d flags 0x%x\n",
--		   sta->addr, arg->peer_max_mpdu, arg->peer_flags);
+-		   arsta->addr, arg->peer_max_mpdu, arg->peer_flags);
 +	if (arg->peer_phymode == MODE_11AC_VHT160) {
 +	if (arg->peer_phymode == MODE_11AC_VHT160) {
 +		tx_nss = ath12k_get_nss_160mhz(ar, max_nss);
 +		tx_nss = ath12k_get_nss_160mhz(ar, max_nss);
 +		rx_nss = min(arg->peer_nss, tx_nss);
 +		rx_nss = min(arg->peer_nss, tx_nss);
 +		arg->peer_bw_rxnss_override = ATH12K_BW_NSS_MAP_ENABLE;
 +		arg->peer_bw_rxnss_override = ATH12K_BW_NSS_MAP_ENABLE;
- 
--	/* TODO: rxnss_override */
++
 +		if (!rx_nss) {
 +		if (!rx_nss) {
 +			ath12k_warn(ar->ab, "invalid max_nss\n");
 +			ath12k_warn(ar->ab, "invalid max_nss\n");
 +			return;
 +			return;
@@ -201,28 +212,26 @@ Acked-by: Jeff Johnson <[email protected]>
 +		nss_160 = u32_encode_bits(rx_nss - 1, ATH12K_PEER_RX_NSS_160MHZ);
 +		nss_160 = u32_encode_bits(rx_nss - 1, ATH12K_PEER_RX_NSS_160MHZ);
 +		arg->peer_bw_rxnss_override |= nss_160;
 +		arg->peer_bw_rxnss_override |= nss_160;
 +	}
 +	}
-+
+ 
+-	/* TODO: rxnss_override */
 +	ath12k_dbg(ar->ab, ATH12K_DBG_MAC,
 +	ath12k_dbg(ar->ab, ATH12K_DBG_MAC,
 +		   "mac vht peer %pM max_mpdu %d flags 0x%x nss_override 0x%x\n",
 +		   "mac vht peer %pM max_mpdu %d flags 0x%x nss_override 0x%x\n",
-+		   sta->addr, arg->peer_max_mpdu, arg->peer_flags,
++		   arsta->addr, arg->peer_max_mpdu, arg->peer_flags,
 +		   arg->peer_bw_rxnss_override);
 +		   arg->peer_bw_rxnss_override);
  }
  }
  
  
  static int ath12k_mac_get_max_he_mcs_map(u16 mcs_map, int nss)
  static int ath12k_mac_get_max_he_mcs_map(u16 mcs_map, int nss)
-@@ -2251,6 +2294,7 @@ static void ath12k_peer_assoc_h_he(struc
+@@ -2484,6 +2527,7 @@ static void ath12k_peer_assoc_h_he(struc
  	u16 he_tx_mcs = 0, v = 0;
  	u16 he_tx_mcs = 0, v = 0;
  	int he_nss, nss_idx;
  	int he_nss, nss_idx;
  	bool user_rate_valid = true;
  	bool user_rate_valid = true;
 +	u32 rx_nss, tx_nss, nss_160;
 +	u32 rx_nss, tx_nss, nss_160;
  
  
- 	if (WARN_ON(ath12k_mac_vif_chan(vif, &def)))
+ 	if (WARN_ON(ath12k_mac_vif_link_chan(vif, link_id, &def)))
  		return;
  		return;
-@@ -2429,11 +2473,28 @@ static void ath12k_peer_assoc_h_he(struc
- 		    he_mcs_mask[i])
- 			max_nss = i + 1;
- 	}
-+	max_nss = min(max_nss, ar->num_tx_chains);
- 	arg->peer_nss = min(sta->deflink.rx_nss, max_nss);
+@@ -2681,9 +2725,25 @@ static void ath12k_peer_assoc_h_he(struc
+ 	max_nss = min(max_nss, ar->num_tx_chains);
+ 	arg->peer_nss = min(link_sta->rx_nss, max_nss);
  
  
 +	if (arg->peer_phymode == MODE_11AX_HE160) {
 +	if (arg->peer_phymode == MODE_11AX_HE160) {
 +		tx_nss = ath12k_get_nss_160mhz(ar, max_nss);
 +		tx_nss = ath12k_get_nss_160mhz(ar, max_nss);
@@ -240,30 +249,31 @@ Acked-by: Jeff Johnson <[email protected]>
 +
 +
  	ath12k_dbg(ar->ab, ATH12K_DBG_MAC,
  	ath12k_dbg(ar->ab, ATH12K_DBG_MAC,
 -		   "mac he peer %pM nss %d mcs cnt %d\n",
 -		   "mac he peer %pM nss %d mcs cnt %d\n",
--		   sta->deflink.addr, arg->peer_nss, arg->peer_he_mcs_count);
+-		   arsta->addr, arg->peer_nss, arg->peer_he_mcs_count);
 +		   "mac he peer %pM nss %d mcs cnt %d nss_override 0x%x\n",
 +		   "mac he peer %pM nss %d mcs cnt %d nss_override 0x%x\n",
-+		   sta->deflink.addr, arg->peer_nss,
++		   arsta->addr, arg->peer_nss,
 +		   arg->peer_he_mcs_count,
 +		   arg->peer_he_mcs_count,
 +		   arg->peer_bw_rxnss_override);
 +		   arg->peer_bw_rxnss_override);
  }
  }
  
  
  static void ath12k_peer_assoc_h_he_6ghz(struct ath12k *ar,
  static void ath12k_peer_assoc_h_he_6ghz(struct ath12k *ar,
-@@ -2965,13 +3026,13 @@ static void ath12k_peer_assoc_prepare(st
- 	ath12k_peer_assoc_h_basic(ar, vif, sta, arg);
- 	ath12k_peer_assoc_h_crypto(ar, vif, sta, arg);
- 	ath12k_peer_assoc_h_rates(ar, vif, sta, arg);
-+	ath12k_peer_assoc_h_phymode(ar, vif, sta, arg);
- 	ath12k_peer_assoc_h_ht(ar, vif, sta, arg);
- 	ath12k_peer_assoc_h_vht(ar, vif, sta, arg);
- 	ath12k_peer_assoc_h_he(ar, vif, sta, arg);
- 	ath12k_peer_assoc_h_he_6ghz(ar, vif, sta, arg);
- 	ath12k_peer_assoc_h_eht(ar, vif, sta, arg);
- 	ath12k_peer_assoc_h_qos(ar, vif, sta, arg);
--	ath12k_peer_assoc_h_phymode(ar, vif, sta, arg);
- 	ath12k_peer_assoc_h_smps(sta, arg);
+@@ -2924,10 +2984,13 @@ static enum wmi_phy_mode ath12k_mac_get_
+ 						    struct ieee80211_link_sta *link_sta)
+ {
+ 	if (link_sta->bandwidth == IEEE80211_STA_RX_BW_160) {
+-		if (link_sta->vht_cap.cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ)
++		if (link_sta->vht_cap.cap & (IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ |
++		    IEEE80211_VHT_CAP_EXT_NSS_BW_MASK))
+ 			return MODE_11AC_VHT160;
+ 
+-		/* not sure if this is a valid case? */
++		/* Allow STA to connect even if it does not explicitly advertise 160 MHz
++		 * support
++		 */
+ 		return MODE_11AC_VHT160;
+ 	}
  
  
- 	/* TODO: amsdu_disable req? */
-@@ -5552,10 +5613,8 @@ ath12k_create_vht_cap(struct ath12k *ar,
+@@ -6826,10 +6889,8 @@ ath12k_create_vht_cap(struct ath12k *ar,
  
  
  	ath12k_set_vht_txbf_cap(ar, &vht_cap.cap);
  	ath12k_set_vht_txbf_cap(ar, &vht_cap.cap);
  
  
@@ -276,29 +286,29 @@ Acked-by: Jeff Johnson <[email protected]>
  
  
  	rxmcs_map = 0;
  	rxmcs_map = 0;
  	txmcs_map = 0;
  	txmcs_map = 0;
-@@ -9711,7 +9770,8 @@ static int ath12k_mac_setup_iface_combin
- 	combinations[0].radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) |
- 						BIT(NL80211_CHAN_WIDTH_20) |
- 						BIT(NL80211_CHAN_WIDTH_40) |
--						BIT(NL80211_CHAN_WIDTH_80);
-+						BIT(NL80211_CHAN_WIDTH_80) |
-+						BIT(NL80211_CHAN_WIDTH_160);
+@@ -11437,7 +11498,8 @@ ath12k_mac_setup_radio_iface_comb(struct
+ 	comb[0].radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) |
+ 					BIT(NL80211_CHAN_WIDTH_20) |
+ 					BIT(NL80211_CHAN_WIDTH_40) |
+-					BIT(NL80211_CHAN_WIDTH_80);
++					BIT(NL80211_CHAN_WIDTH_80) |
++					BIT(NL80211_CHAN_WIDTH_160);
  
  
- 	wiphy->iface_combinations = combinations;
- 	wiphy->n_iface_combinations = 1;
-@@ -9927,6 +9987,9 @@ static int ath12k_mac_hw_register(struct
+ 	return 0;
+ }
+@@ -11811,6 +11873,9 @@ static int ath12k_mac_hw_register(struct
  	ieee80211_hw_set(hw, SUPPORTS_TX_FRAG);
  	ieee80211_hw_set(hw, SUPPORTS_TX_FRAG);
  	ieee80211_hw_set(hw, REPORTS_LOW_ACK);
  	ieee80211_hw_set(hw, REPORTS_LOW_ACK);
  
  
 +	if (cap->nss_ratio_enabled)
 +	if (cap->nss_ratio_enabled)
 +		ieee80211_hw_set(hw, SUPPORTS_VHT_EXT_NSS_BW);
 +		ieee80211_hw_set(hw, SUPPORTS_VHT_EXT_NSS_BW);
 +
 +
- 	if ((ht_cap & WMI_HT_CAP_ENABLED) || ar->supports_6ghz) {
+ 	if ((ht_cap & WMI_HT_CAP_ENABLED) || is_6ghz) {
  		ieee80211_hw_set(hw, AMPDU_AGGREGATION);
  		ieee80211_hw_set(hw, AMPDU_AGGREGATION);
  		ieee80211_hw_set(hw, TX_AMPDU_SETUP_IN_HW);
  		ieee80211_hw_set(hw, TX_AMPDU_SETUP_IN_HW);
 --- a/drivers/net/wireless/ath/ath12k/mac.h
 --- a/drivers/net/wireless/ath/ath12k/mac.h
 +++ b/drivers/net/wireless/ath/ath12k/mac.h
 +++ b/drivers/net/wireless/ath/ath12k/mac.h
-@@ -37,6 +37,8 @@ struct ath12k_generic_iter {
+@@ -38,6 +38,8 @@ struct ath12k_generic_iter {
  #define IEEE80211_DISABLE_VHT_MCS_SUPPORT_0_11	BIT(24)
  #define IEEE80211_DISABLE_VHT_MCS_SUPPORT_0_11	BIT(24)
  
  
  #define ATH12K_CHAN_WIDTH_NUM			14
  #define ATH12K_CHAN_WIDTH_NUM			14
@@ -320,35 +330,19 @@ Acked-by: Jeff Johnson <[email protected]>
  	} else {
  	} else {
  		return -EINVAL;
  		return -EINVAL;
  	}
  	}
-@@ -982,11 +986,24 @@ int ath12k_wmi_vdev_down(struct ath12k *
- static void ath12k_wmi_put_wmi_channel(struct ath12k_wmi_channel_params *chan,
- 				       struct wmi_vdev_start_req_arg *arg)
- {
-+	u32 center_freq1 = arg->band_center_freq1;
-+
- 	memset(chan, 0, sizeof(*chan));
+@@ -1014,7 +1018,8 @@ static void ath12k_wmi_put_wmi_channel(s
  
  
- 	chan->mhz = cpu_to_le32(arg->freq);
- 	chan->band_center_freq1 = cpu_to_le32(arg->band_center_freq1);
--	chan->band_center_freq2 = 0;
-+	if (arg->mode == MODE_11AX_HE160) {
-+		if (arg->freq > center_freq1)
-+			chan->band_center_freq1 =
-+					cpu_to_le32(center_freq1 + 40);
-+		else
-+			chan->band_center_freq1 =
-+					cpu_to_le32(center_freq1 - 40);
-+
-+		chan->band_center_freq2 = cpu_to_le32(arg->band_center_freq1);
-+	} else {
-+		chan->band_center_freq2 = 0;
-+	}
+ 		chan->band_center_freq2 = cpu_to_le32(center_freq1);
  
  
- 	chan->info |= le32_encode_bits(arg->mode, WMI_CHAN_INFO_MODE);
- 	if (arg->passive)
+-	} else if (arg->mode == MODE_11BE_EHT160) {
++	} else if (arg->mode == MODE_11BE_EHT160 ||
++		   arg->mode == MODE_11AX_HE160) {
+ 		if (arg->freq > center_freq1)
+ 			chan->band_center_freq1 = cpu_to_le32(center_freq1 + 40);
+ 		else
 --- a/drivers/net/wireless/ath/ath12k/wmi.h
 --- a/drivers/net/wireless/ath/ath12k/wmi.h
 +++ b/drivers/net/wireless/ath/ath12k/wmi.h
 +++ b/drivers/net/wireless/ath/ath12k/wmi.h
-@@ -2264,6 +2264,21 @@ enum wmi_direct_buffer_module {
+@@ -2290,6 +2290,21 @@ enum wmi_direct_buffer_module {
  	WMI_DIRECT_BUF_MAX
  	WMI_DIRECT_BUF_MAX
  };
  };
  
  
@@ -370,7 +364,7 @@ Acked-by: Jeff Johnson <[email protected]>
  struct ath12k_wmi_pdev_band_arg {
  struct ath12k_wmi_pdev_band_arg {
  	u32 pdev_id;
  	u32 pdev_id;
  	u32 start_freq;
  	u32 start_freq;
-@@ -2580,6 +2595,12 @@ struct ath12k_wmi_hw_mode_cap_params {
+@@ -2606,6 +2621,12 @@ struct ath12k_wmi_hw_mode_cap_params {
  } __packed;
  } __packed;
  
  
  #define WMI_MAX_HECAP_PHY_SIZE                 (3)
  #define WMI_MAX_HECAP_PHY_SIZE                 (3)
@@ -383,7 +377,7 @@ Acked-by: Jeff Johnson <[email protected]>
  
  
  /* pdev_id is present in lower 16 bits of pdev_and_hw_link_ids in
  /* pdev_id is present in lower 16 bits of pdev_and_hw_link_ids in
   * ath12k_wmi_mac_phy_caps_params & ath12k_wmi_caps_ext_params.
   * ath12k_wmi_mac_phy_caps_params & ath12k_wmi_caps_ext_params.
-@@ -2621,6 +2642,13 @@ struct ath12k_wmi_mac_phy_caps_params {
+@@ -2647,6 +2668,13 @@ struct ath12k_wmi_mac_phy_caps_params {
  	__le32 he_cap_info_2g_ext;
  	__le32 he_cap_info_2g_ext;
  	__le32 he_cap_info_5g_ext;
  	__le32 he_cap_info_5g_ext;
  	__le32 he_cap_info_internal;
  	__le32 he_cap_info_internal;

+ 65 - 54
package/kernel/mac80211/patches/ath12k/104-9-wifi-ath12k-add-extended-NSS-bandwidth-support-for-160-MHz.patch

@@ -1,81 +1,81 @@
-From patchwork Wed Sep 18 21:20:56 2024
+From patchwork Wed May 21 22:45:39 2025
 Content-Type: text/plain; charset="utf-8"
 Content-Type: text/plain; charset="utf-8"
 MIME-Version: 1.0
 MIME-Version: 1.0
 Content-Transfer-Encoding: 7bit
 Content-Transfer-Encoding: 7bit
 X-Patchwork-Submitter: Pradeep Kumar Chitrapu <[email protected]>
 X-Patchwork-Submitter: Pradeep Kumar Chitrapu <[email protected]>
-X-Patchwork-Id: 13807214
+X-Patchwork-Id: 14096122
 X-Patchwork-Delegate: [email protected]
 X-Patchwork-Delegate: [email protected]
-Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com
- [205.220.168.131])
+Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com
+ [205.220.180.131])
 	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 	(No client certificate requested)
 	(No client certificate requested)
-	by smtp.subspace.kernel.org (Postfix) with ESMTPS id A44471CB32B
-	for <[email protected]>; Wed, 18 Sep 2024 21:21:14 +0000 (UTC)
+	by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9A1E9239E85
+	for <[email protected]>; Wed, 21 May 2025 22:45:59 +0000 (UTC)
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
- arc=none smtp.client-ip=205.220.168.131
+ arc=none smtp.client-ip=205.220.180.131
 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
-	t=1726694476; cv=none;
- b=YnQUUZ4IfmLtgtYCtYRGhH8uRGd6VL74IRylGv6Ihb2PMO/n5UdfZlDk/m9w0OH4/sSsqULSz2lupiSTwXCPxc+73uK+OUjIEmCfPlNdrtzK2naXyiXAASPqonpnRBnyoIFwaE8zj8AHUqk5TAajedqpK9EnOaboX2XGYVbe0yI=
+	t=1747867561; cv=none;
+ b=YNQGoLeTsEUX0an1dYT8uFrTBxczoxLPoB0nXP+MEP3YMcemaxVf4zoi5GMSuKPLe4yeLz/R7AB090SrXrBTbY6MmwXLrUJGFBQUGwr05KQ5BnedSLyVE+PtNo01ZVjrjprsc5LC4z0vYHmQdBsqIfqP+bb+ATVkdkkKWV4Kg3A=
 ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
 ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
-	s=arc-20240116; t=1726694476; c=relaxed/simple;
-	bh=TAPBD6g5pYNuC8Odk6t6JkL8GvKdG9H30IPHTEgA7C0=;
+	s=arc-20240116; t=1747867561; c=relaxed/simple;
+	bh=WkoD1wqfpiPds2ZNAwn7TY38LnC6cJOAuobqk3tWbSk=;
 	h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:
 	h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:
 	 MIME-Version:Content-Type;
 	 MIME-Version:Content-Type;
- b=djAINL+wQRgQaGOI4fotrExnm1Yz5quwEW2I7s85hWLI3gB+HsjwPKWJypllDKm8W0FDcrsoZWFmOrfx0wJ5LIe+OtXJ4ijSG7xcJeGtgDXZ3hAA5ZBk/B+CD+g+NZ3c0mwkSKpUm5dUBPKi1+kJsPuVEwKeCmdMVj8QHSYMXPw=
+ b=aAO1mDb/PrwqKRHoeS0PAxgJAvDLPWPPBkzRX0hwJbFzcXtKdtWHDE83rjGbjR1bnM7lhkAU4SwoT87sOuciveNqdywUe6+9XTB2oWM/j0Tza/ZRKKRZFeByh7ib8Aibzc4y0ACg7Oaz/QhmWmPObPjc4oKuVzaH/P8Tub0rBcI=
 ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
 ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
  dmarc=pass (p=none dis=none) header.from=quicinc.com;
  dmarc=pass (p=none dis=none) header.from=quicinc.com;
  spf=pass smtp.mailfrom=quicinc.com;
  spf=pass smtp.mailfrom=quicinc.com;
  dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
  dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
- header.b=i4iTJD+Z; arc=none smtp.client-ip=205.220.168.131
+ header.b=o3M+Sjyr; arc=none smtp.client-ip=205.220.180.131
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
  dmarc=pass (p=none dis=none) header.from=quicinc.com
  dmarc=pass (p=none dis=none) header.from=quicinc.com
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
  spf=pass smtp.mailfrom=quicinc.com
  spf=pass smtp.mailfrom=quicinc.com
 Authentication-Results: smtp.subspace.kernel.org;
 Authentication-Results: smtp.subspace.kernel.org;
 	dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
 	dkim=pass (2048-bit key) header.d=quicinc.com [email protected]
- header.b="i4iTJD+Z"
-Received: from pps.filterd (m0279863.ppops.net [127.0.0.1])
+ header.b="o3M+Sjyr"
+Received: from pps.filterd (m0279871.ppops.net [127.0.0.1])
 	by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id
 	by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id
- 48I9VJ15022098;
-	Wed, 18 Sep 2024 21:21:11 GMT
+ 54LJHZNq001758;
+	Wed, 21 May 2025 22:45:56 GMT
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=
 	cc:content-transfer-encoding:content-type:date:from:in-reply-to
 	cc:content-transfer-encoding:content-type:date:from:in-reply-to
 	:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=
 	:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=
-	2gwv4CbPGErAHv9NWtZrCSVk7NoZpHzKz9tuTs+8dV4=; b=i4iTJD+ZMXDp8Ul8
-	HTo5IL/NLwS3mnlutEaaL+juUKm+wsFdl/BeMp9CC4H/sapolIhM4Zje9t3H9K0R
-	+z1OxQDEekvWrrfUlikEaUHjOEwQ4YKSPJ+1uAIrbbA3REWeW5z39IITJ3dGU05N
-	hnfPQEiFcPgDbFQv0Iaf434znv8rbOow6dc+M1E6EjpGd92Mq80BpsJqP8Ee0RUr
-	WO3rsws1kXzFs6ELsg/FmC3l6eG9A4z9SUxcZ7QqTaz8aPOAZS/lclN0cOJT7VgK
-	7UNPGoDoJhTmHEX17W/rQR8RiV8c0hMciOuB1sfI7H/1uGkEPMjmfIsEdBjQ/9oa
-	DDiHrg==
-Received: from nalasppmta02.qualcomm.com (Global_NAT1.qualcomm.com
+	wh8AVrVaz3Wne8xUCnRodQGPYbrNE8Rm9/NepU3KoQA=; b=o3M+SjyriKBrU+dH
+	+Uwb/f5RzskxDlOAgOvwNH7O5p766ueJYE/nAazyAuVI1fbDT1gkgvOM4VOLQAPP
+	zg9tDUD5Mz80GzBzSnheYbeedz7RgpaN14Qr6Gz/+1yrP4wWTh2quGduIAXBFDZR
+	QpWsQh2DxVOvXqoLRm64iurJNhvpq+YIAwpAxEA9Fp46SrXsFefc82nza6qgdk5P
+	pUjalFWnwLLxaSHJj2EoJhFDAf99q9N5KNKW/UCNY8A2CwQXqL9KmggTLRK1OC+S
+	ueHigeV9ydoGGD1W6zmEdydGv5JSaQRhjAxtJokUtrlUwn8mbpJyokm+Ie4GZV5v
+	tie1qQ==
+Received: from nalasppmta04.qualcomm.com (Global_NAT1.qualcomm.com
  [129.46.96.20])
  [129.46.96.20])
-	by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 41n4hfk92c-1
+	by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46rwf6vbsg-1
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
-	Wed, 18 Sep 2024 21:21:11 +0000 (GMT)
+	Wed, 21 May 2025 22:45:56 +0000 (GMT)
 Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com
 Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com
  [10.47.209.196])
  [10.47.209.196])
-	by NALASPPMTA02.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id
- 48ILLA0u011397
+	by NALASPPMTA04.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id
+ 54LMjtcB022245
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
 	(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
-	Wed, 18 Sep 2024 21:21:10 GMT
-Received: from ath12k-linux1.qualcomm.com (10.80.80.8) by
+	Wed, 21 May 2025 22:45:55 GMT
+Received: from ath12k-linux2.qualcomm.com (10.80.80.8) by
  nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server
  nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server
  (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
  (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
- 15.2.1544.9; Wed, 18 Sep 2024 14:21:09 -0700
+ 15.2.1544.9; Wed, 21 May 2025 15:45:54 -0700
 From: Pradeep Kumar Chitrapu <[email protected]>
 From: Pradeep Kumar Chitrapu <[email protected]>
 To: <[email protected]>
 To: <[email protected]>
 CC: <[email protected]>,
 CC: <[email protected]>,
         Pradeep Kumar Chitrapu
         Pradeep Kumar Chitrapu
 	<[email protected]>,
 	<[email protected]>,
         Jeff Johnson <[email protected]>
         Jeff Johnson <[email protected]>
-Subject: [PATCH V8 9/9] wifi: ath12k: add extended NSS bandwidth support for
- 160 MHz
-Date: Wed, 18 Sep 2024 14:20:56 -0700
-Message-ID: <20240918212056.4137076[email protected]>
-X-Mailer: git-send-email 2.34.1
-In-Reply-To: <20240918212056.4137076[email protected]>
-References: <20240918212056.4137076[email protected]>
+Subject: [PATCH ath-next V14 9/9] wifi: ath12k: add extended NSS bandwidth
+ support for 160 MHz
+Date: Wed, 21 May 2025 15:45:39 -0700
+Message-ID: <20250521224539.355985[email protected]>
+X-Mailer: git-send-email 2.43.0
+In-Reply-To: <20250521224539.355985[email protected]>
+References: <20250521224539.355985[email protected]>
 Precedence: bulk
 Precedence: bulk
 X-Mailing-List: [email protected]
 X-Mailing-List: [email protected]
 List-Id: <linux-wireless.vger.kernel.org>
 List-Id: <linux-wireless.vger.kernel.org>
@@ -87,17 +87,28 @@ X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To
 X-QCInternal: smtphost
 X-QCInternal: smtphost
 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800
 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800
  signatures=585085
  signatures=585085
-X-Proofpoint-GUID: Mta6b5FqdCLrvsiUf1WwMHFr8SiJUh5L
-X-Proofpoint-ORIG-GUID: Mta6b5FqdCLrvsiUf1WwMHFr8SiJUh5L
+X-Proofpoint-GUID: 3XlPaBNySyE2wx5TC6p1DVWVXzadsV9U
+X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTIxMDIyNiBTYWx0ZWRfX4g8vKznbpwuH
+ ZKoHe/eZESaXJ/nU0MF27s2mZH9kbhxkG1nYDBAxgIAR6HSB4Ir8V8BP9wvETNPaaV4xpgjbT6m
+ sDGIplm3HpwbpmQYiBtQIsOrs/s1B2t7uVdhqW02FHlFu/UIBLwZc7J8sLJcsYdxHYcx7MQ3nEe
+ tDoPrPTEwHw7n1CnzcfVsEUAuxuJ5iFaxBATgZF+LuAhijNvhyaoEWRUO2KUcBJaFHq/QbCYfpY
+ JBXWUNl+mlZxfQe4pogCpRmvEOONRvpKgZLFdEAxf2Fx0Z7OhaIV84gi99TYTjfe1aihjorJ/cp
+ cv78Jzcd3Pe3GwTFD0ZOqI30oSiaUyJS3E9XIjfDGLAVMK6FeM+KOYgnqo95ImgBH8HRshrA4LJ
+ qTKv2kKP1y4zPtpf7lmI2mcl7emiLGQx+t0d7Z8upCbYseoNAGHUkFJ45HF940Za9ZkEYTRq
+X-Authority-Analysis: v=2.4 cv=fZOty1QF c=1 sm=1 tr=0 ts=682e57a4 cx=c_pps
+ a=ouPCqIW2jiPt+lZRy3xVPw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17
+ a=GEpy-HfZoHoA:10 a=dt9VzEwgFbYA:10 a=COk6AnOGAAAA:8 a=Opr4SxZhII4Vei-TI5AA:9
+ a=TjNXssC_j7lpFel5tvFf:22
+X-Proofpoint-ORIG-GUID: 3XlPaBNySyE2wx5TC6p1DVWVXzadsV9U
 X-Proofpoint-Virus-Version: vendor=baseguard
 X-Proofpoint-Virus-Version: vendor=baseguard
- engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.60.29
- definitions=2024-09-06_09,2024-09-06_01,2024-09-02_01
+ engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40
+ definitions=2025-05-21_07,2025-05-20_03,2025-03-28_01
 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0
- priorityscore=1501
- clxscore=1015 phishscore=0 malwarescore=0 mlxlogscore=999 mlxscore=0
- impostorscore=0 adultscore=0 suspectscore=0 lowpriorityscore=0 spamscore=0
- bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1
- engine=8.19.0-2408220000 definitions=main-2409180140
+ clxscore=1015 mlxscore=0 adultscore=0 spamscore=0 bulkscore=0 suspectscore=0
+ malwarescore=0 priorityscore=1501 impostorscore=0 mlxlogscore=999
+ lowpriorityscore=0 phishscore=0 classifier=spam authscore=0 authtc=n/a
+ authcc= route=outbound adjust=0 reason=mlx scancount=1
+ engine=8.19.0-2505160000 definitions=main-2505210226
 
 
 Currently rx and tx MCS map for 160 MHz under HE capabilities
 Currently rx and tx MCS map for 160 MHz under HE capabilities
 are not updating properly, when 160 MHz is configured with NSS
 are not updating properly, when 160 MHz is configured with NSS
@@ -121,19 +132,19 @@ Acked-by: Jeff Johnson <[email protected]>
 
 
 --- a/drivers/net/wireless/ath/ath12k/mac.c
 --- a/drivers/net/wireless/ath/ath12k/mac.c
 +++ b/drivers/net/wireless/ath/ath12k/mac.c
 +++ b/drivers/net/wireless/ath/ath12k/mac.c
-@@ -2477,8 +2477,10 @@ static void ath12k_peer_assoc_h_he(struc
- 	arg->peer_nss = min(sta->deflink.rx_nss, max_nss);
+@@ -2726,8 +2726,10 @@ static void ath12k_peer_assoc_h_he(struc
+ 	arg->peer_nss = min(link_sta->rx_nss, max_nss);
  
  
  	if (arg->peer_phymode == MODE_11AX_HE160) {
  	if (arg->peer_phymode == MODE_11AX_HE160) {
 -		tx_nss = ath12k_get_nss_160mhz(ar, max_nss);
 -		tx_nss = ath12k_get_nss_160mhz(ar, max_nss);
 +		tx_nss = ath12k_get_nss_160mhz(ar, ar->num_tx_chains);
 +		tx_nss = ath12k_get_nss_160mhz(ar, ar->num_tx_chains);
  		rx_nss = min(arg->peer_nss, tx_nss);
  		rx_nss = min(arg->peer_nss, tx_nss);
 +
 +
-+		arg->peer_nss = min(sta->deflink.rx_nss, ar->num_rx_chains);
++		arg->peer_nss = min(link_sta->rx_nss, ar->num_rx_chains);
  		arg->peer_bw_rxnss_override = ATH12K_BW_NSS_MAP_ENABLE;
  		arg->peer_bw_rxnss_override = ATH12K_BW_NSS_MAP_ENABLE;
  
  
  		if (!rx_nss) {
  		if (!rx_nss) {
-@@ -5636,6 +5638,12 @@ ath12k_create_vht_cap(struct ath12k *ar,
+@@ -6912,6 +6914,12 @@ ath12k_create_vht_cap(struct ath12k *ar,
  	vht_cap.vht_mcs.rx_mcs_map = cpu_to_le16(rxmcs_map);
  	vht_cap.vht_mcs.rx_mcs_map = cpu_to_le16(rxmcs_map);
  	vht_cap.vht_mcs.tx_mcs_map = cpu_to_le16(txmcs_map);
  	vht_cap.vht_mcs.tx_mcs_map = cpu_to_le16(txmcs_map);
  
  
@@ -146,7 +157,7 @@ Acked-by: Jeff Johnson <[email protected]>
  	return vht_cap;
  	return vht_cap;
  }
  }
  
  
-@@ -5816,11 +5824,12 @@ static void ath12k_mac_set_hemcsmap(stru
+@@ -7092,11 +7100,12 @@ static void ath12k_mac_set_hemcsmap(stru
  				    struct ieee80211_sta_he_cap *he_cap)
  				    struct ieee80211_sta_he_cap *he_cap)
  {
  {
  	struct ieee80211_he_mcs_nss_supp *mcs_nss = &he_cap->he_mcs_nss_supp;
  	struct ieee80211_he_mcs_nss_supp *mcs_nss = &he_cap->he_mcs_nss_supp;
@@ -162,7 +173,7 @@ Acked-by: Jeff Johnson <[email protected]>
  	for (i = 0; i < 8; i++) {
  	for (i = 0; i < 8; i++) {
  		if (i < ar->num_tx_chains &&
  		if (i < ar->num_tx_chains &&
  		    (ar->cfg_tx_chainmask >> cap->tx_chain_mask_shift) & BIT(i))
  		    (ar->cfg_tx_chainmask >> cap->tx_chain_mask_shift) & BIT(i))
-@@ -5833,12 +5842,24 @@ static void ath12k_mac_set_hemcsmap(stru
+@@ -7109,12 +7118,24 @@ static void ath12k_mac_set_hemcsmap(stru
  			rxmcs_map |= IEEE80211_HE_MCS_SUPPORT_0_11 << (i * 2);
  			rxmcs_map |= IEEE80211_HE_MCS_SUPPORT_0_11 << (i * 2);
  		else
  		else
  			rxmcs_map |= IEEE80211_HE_MCS_NOT_SUPPORTED << (i * 2);
  			rxmcs_map |= IEEE80211_HE_MCS_NOT_SUPPORTED << (i * 2);

+ 82 - 0
package/kernel/mac80211/patches/ath12k/200-Revert-wifi-ath12k-convert-tasklet-to-BH-workqueue-f.patch

@@ -0,0 +1,82 @@
+From cd911185014f773f0e227cabfb760b30968c3bca Mon Sep 17 00:00:00 2001
+From: Mantas Pucka <[email protected]>
+Date: Tue, 27 May 2025 14:13:27 +0300
+Subject: [PATCH] Revert "wifi: ath12k: convert tasklet to BH workqueue for CE
+ interrupts"
+
+This reverts commit cdad737160571a98cc4933a62c9f2728e965ab27.
+---
+ drivers/net/wireless/ath/ath12k/ce.h  |  2 +-
+ drivers/net/wireless/ath/ath12k/pci.c | 14 +++++++-------
+ 2 files changed, 8 insertions(+), 8 deletions(-)
+
+--- a/drivers/net/wireless/ath/ath12k/ce.h
++++ b/drivers/net/wireless/ath/ath12k/ce.h
+@@ -148,7 +148,7 @@ struct ath12k_ce_pipe {
+ 	void (*send_cb)(struct ath12k_ce_pipe *pipe);
+ 	void (*recv_cb)(struct ath12k_base *ab, struct sk_buff *skb);
+ 
+-	struct work_struct intr_wq;
++	struct tasklet_struct intr_tq;
+ 	struct ath12k_ce_ring *src_ring;
+ 	struct ath12k_ce_ring *dest_ring;
+ 	struct ath12k_ce_ring *status_ring;
+--- a/drivers/net/wireless/ath/ath12k/pci.c
++++ b/drivers/net/wireless/ath/ath12k/pci.c
+@@ -430,9 +430,9 @@ static void ath12k_pci_sync_ce_irqs(stru
+ 	}
+ }
+ 
+-static void ath12k_pci_ce_workqueue(struct work_struct *work)
++static void ath12k_pci_ce_tasklet(struct tasklet_struct *t)
+ {
+-	struct ath12k_ce_pipe *ce_pipe = from_work(ce_pipe, work, intr_wq);
++	struct ath12k_ce_pipe *ce_pipe = from_tasklet(ce_pipe, t, intr_tq);
+ 	int irq_idx = ATH12K_PCI_IRQ_CE0_OFFSET + ce_pipe->pipe_num;
+ 
+ 	ath12k_ce_per_engine_service(ce_pipe->ab, ce_pipe->pipe_num);
+@@ -454,7 +454,7 @@ static irqreturn_t ath12k_pci_ce_interru
+ 
+ 	disable_irq_nosync(ab->irq_num[irq_idx]);
+ 
+-	queue_work(system_bh_wq, &ce_pipe->intr_wq);
++	tasklet_schedule(&ce_pipe->intr_tq);
+ 
+ 	return IRQ_HANDLED;
+ }
+@@ -683,7 +683,7 @@ static int ath12k_pci_config_irq(struct
+ 
+ 		irq_idx = ATH12K_PCI_IRQ_CE0_OFFSET + i;
+ 
+-		INIT_WORK(&ce_pipe->intr_wq, ath12k_pci_ce_workqueue);
++		tasklet_setup(&ce_pipe->intr_tq, ath12k_pci_ce_tasklet);
+ 
+ 		ret = request_irq(irq, ath12k_pci_ce_interrupt_handler,
+ 				  ab_pci->irq_flags, irq_name[irq_idx],
+@@ -970,7 +970,7 @@ static void ath12k_pci_aspm_restore(stru
+ 						   PCI_EXP_LNKCTL_ASPMC);
+ }
+ 
+-static void ath12k_pci_cancel_workqueue(struct ath12k_base *ab)
++static void ath12k_pci_kill_tasklets(struct ath12k_base *ab)
+ {
+ 	int i;
+ 
+@@ -980,7 +980,7 @@ static void ath12k_pci_cancel_workqueue(
+ 		if (ath12k_ce_get_attr_flags(ab, i) & CE_ATTR_DIS_INTR)
+ 			continue;
+ 
+-		cancel_work_sync(&ce_pipe->intr_wq);
++		tasklet_kill(&ce_pipe->intr_tq);
+ 	}
+ }
+ 
+@@ -988,7 +988,7 @@ static void ath12k_pci_ce_irq_disable_sy
+ {
+ 	ath12k_pci_ce_irqs_disable(ab);
+ 	ath12k_pci_sync_ce_irqs(ab);
+-	ath12k_pci_cancel_workqueue(ab);
++	ath12k_pci_kill_tasklets(ab);
+ }
+ 
+ int ath12k_pci_map_service_to_pipe(struct ath12k_base *ab, u16 service_id,

+ 4 - 4
package/kernel/mac80211/patches/ath9k/341-wifi-ath9k-obtain-system-gpios.patch

@@ -180,7 +180,7 @@ Best regards,
  #include <linux/unaligned.h>
  #include <linux/unaligned.h>
  
  
  #include "hw.h"
  #include "hw.h"
-@@ -2727,19 +2727,25 @@ static void ath9k_hw_gpio_cfg_output_mux
+@@ -2718,19 +2718,25 @@ static void ath9k_hw_gpio_cfg_output_mux
  static void ath9k_hw_gpio_cfg_soc(struct ath_hw *ah, u32 gpio, bool out,
  static void ath9k_hw_gpio_cfg_soc(struct ath_hw *ah, u32 gpio, bool out,
  				  const char *label)
  				  const char *label)
  {
  {
@@ -210,7 +210,7 @@ Best regards,
  }
  }
  
  
  static void ath9k_hw_gpio_cfg_wmac(struct ath_hw *ah, u32 gpio, bool out,
  static void ath9k_hw_gpio_cfg_wmac(struct ath_hw *ah, u32 gpio, bool out,
-@@ -2801,8 +2807,10 @@ void ath9k_hw_gpio_free(struct ath_hw *a
+@@ -2792,8 +2798,10 @@ void ath9k_hw_gpio_free(struct ath_hw *a
  
  
  	WARN_ON(gpio >= ah->caps.num_gpio_pins);
  	WARN_ON(gpio >= ah->caps.num_gpio_pins);
  
  
@@ -223,7 +223,7 @@ Best regards,
  }
  }
  EXPORT_SYMBOL(ath9k_hw_gpio_free);
  EXPORT_SYMBOL(ath9k_hw_gpio_free);
  
  
-@@ -2830,8 +2838,8 @@ u32 ath9k_hw_gpio_get(struct ath_hw *ah,
+@@ -2821,8 +2829,8 @@ u32 ath9k_hw_gpio_get(struct ath_hw *ah,
  			val = REG_READ(ah, AR_GPIO_IN(ah)) & BIT(gpio);
  			val = REG_READ(ah, AR_GPIO_IN(ah)) & BIT(gpio);
  		else
  		else
  			val = MS_REG_READ(AR, gpio);
  			val = MS_REG_READ(AR, gpio);
@@ -234,7 +234,7 @@ Best regards,
  	} else {
  	} else {
  		WARN_ON(1);
  		WARN_ON(1);
  	}
  	}
-@@ -2854,8 +2862,8 @@ void ath9k_hw_set_gpio(struct ath_hw *ah
+@@ -2845,8 +2853,8 @@ void ath9k_hw_set_gpio(struct ath_hw *ah
  			AR7010_GPIO_OUT : AR_GPIO_IN_OUT(ah);
  			AR7010_GPIO_OUT : AR_GPIO_IN_OUT(ah);
  
  
  		REG_RMW(ah, out_addr, val << gpio, BIT(gpio));
  		REG_RMW(ah, out_addr, val << gpio, BIT(gpio));

+ 2 - 2
package/kernel/mac80211/patches/ath9k/356-Revert-ath9k-interpret-requested-txpower-in-EIRP-dom.patch

@@ -8,7 +8,7 @@ This reverts commit 71f5137bf010c6faffab50c0ec15374c59c4a411.
 
 
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -2983,7 +2983,8 @@ void ath9k_hw_apply_txpower(struct ath_h
+@@ -2974,7 +2974,8 @@ void ath9k_hw_apply_txpower(struct ath_h
  {
  {
  	struct ath_regulatory *reg = ath9k_hw_regulatory(ah);
  	struct ath_regulatory *reg = ath9k_hw_regulatory(ah);
  	struct ieee80211_channel *channel;
  	struct ieee80211_channel *channel;
@@ -18,7 +18,7 @@ This reverts commit 71f5137bf010c6faffab50c0ec15374c59c4a411.
  	u16 ctl = NO_CTL;
  	u16 ctl = NO_CTL;
  
  
  	if (!chan)
  	if (!chan)
-@@ -2995,9 +2996,14 @@ void ath9k_hw_apply_txpower(struct ath_h
+@@ -2986,9 +2987,14 @@ void ath9k_hw_apply_txpower(struct ath_h
  	channel = chan->chan;
  	channel = chan->chan;
  	chan_pwr = min_t(int, channel->max_power * 2, MAX_COMBINED_POWER);
  	chan_pwr = min_t(int, channel->max_power * 2, MAX_COMBINED_POWER);
  	new_pwr = min_t(int, chan_pwr, reg->power_limit);
  	new_pwr = min_t(int, chan_pwr, reg->power_limit);

+ 1 - 1
package/kernel/mac80211/patches/ath9k/365-ath9k-adjust-tx-power-reduction-for-US-regulatory-do.patch

@@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
 
 
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -3002,6 +3002,10 @@ void ath9k_hw_apply_txpower(struct ath_h
+@@ -2993,6 +2993,10 @@ void ath9k_hw_apply_txpower(struct ath_h
  	if (ant_gain > max_gain)
  	if (ant_gain > max_gain)
  		ant_reduction = ant_gain - max_gain;
  		ant_reduction = ant_gain - max_gain;
  
  

+ 1 - 1
package/kernel/mac80211/patches/ath9k/401-ath9k_blink_default.patch

@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/init.c
 --- a/drivers/net/wireless/ath/ath9k/init.c
 +++ b/drivers/net/wireless/ath/ath9k/init.c
 +++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -48,7 +48,7 @@ int ath9k_modparam_nohwcrypt;
+@@ -47,7 +47,7 @@ int ath9k_modparam_nohwcrypt;
  module_param_named(nohwcrypt, ath9k_modparam_nohwcrypt, int, 0444);
  module_param_named(nohwcrypt, ath9k_modparam_nohwcrypt, int, 0444);
  MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption");
  MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption");
  
  

+ 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
 --- a/drivers/net/wireless/ath/ath9k/init.c
 +++ b/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
+@@ -836,6 +836,7 @@ static const struct ieee80211_iface_limi
  				 BIT(NL80211_IFTYPE_AP) },
  				 BIT(NL80211_IFTYPE_AP) },
  	{ .max = 1,	.types = BIT(NL80211_IFTYPE_P2P_CLIENT) |
  	{ .max = 1,	.types = BIT(NL80211_IFTYPE_P2P_CLIENT) |
  				 BIT(NL80211_IFTYPE_P2P_GO) },
  				 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
 --- a/drivers/net/wireless/ath/ath9k/init.c
 +++ b/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
+@@ -917,6 +917,7 @@ static void ath9k_set_hw_capab(struct at
  	ieee80211_hw_set(hw, HOST_BROADCAST_PS_BUFFERING);
  	ieee80211_hw_set(hw, HOST_BROADCAST_PS_BUFFERING);
  	ieee80211_hw_set(hw, SUPPORT_FAST_XMIT);
  	ieee80211_hw_set(hw, SUPPORT_FAST_XMIT);
  	ieee80211_hw_set(hw, SUPPORTS_CLONED_SKBS);
  	ieee80211_hw_set(hw, SUPPORTS_CLONED_SKBS);
@@ -22,7 +22,7 @@ Signed-off-by: David Bauer <[email protected]>
  
  
  	if (ath9k_ps_enable)
  	if (ath9k_ps_enable)
  		ieee80211_hw_set(hw, SUPPORTS_PS);
  		ieee80211_hw_set(hw, SUPPORTS_PS);
-@@ -975,9 +976,6 @@ static void ath9k_set_hw_capab(struct at
+@@ -929,9 +930,6 @@ static void ath9k_set_hw_capab(struct at
  				IEEE80211_RADIOTAP_MCS_HAVE_STBC;
  				IEEE80211_RADIOTAP_MCS_HAVE_STBC;
  	}
  	}
  
  

+ 1 - 1
package/kernel/mac80211/patches/ath9k/500-ath9k_eeprom_debugfs.patch

@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/debug.c
 --- a/drivers/net/wireless/ath/ath9k/debug.c
 +++ b/drivers/net/wireless/ath/ath9k/debug.c
 +++ b/drivers/net/wireless/ath/ath9k/debug.c
-@@ -1429,6 +1429,7 @@ int ath9k_init_debug(struct ath_hw *ah)
+@@ -1430,6 +1430,7 @@ int ath9k_init_debug(struct ath_hw *ah)
  
  
  	ath9k_cmn_debug_base_eeprom(sc->debug.debugfs_phy, sc->sc_ah);
  	ath9k_cmn_debug_base_eeprom(sc->debug.debugfs_phy, sc->sc_ah);
  	ath9k_cmn_debug_modal_eeprom(sc->debug.debugfs_phy, sc->sc_ah);
  	ath9k_cmn_debug_modal_eeprom(sc->debug.debugfs_phy, sc->sc_ah);

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

@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/init.c
 --- a/drivers/net/wireless/ath/ath9k/init.c
 +++ b/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)
+@@ -1132,25 +1132,25 @@ static int __init ath9k_init(void)
  {
  {
  	int error;
  	int error;
  
  

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

@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/debug.c
 --- a/drivers/net/wireless/ath/ath9k/debug.c
 +++ b/drivers/net/wireless/ath/ath9k/debug.c
 +++ b/drivers/net/wireless/ath/ath9k/debug.c
-@@ -1430,6 +1430,7 @@ int ath9k_init_debug(struct ath_hw *ah)
+@@ -1431,6 +1431,7 @@ int ath9k_init_debug(struct ath_hw *ah)
  	ath9k_cmn_debug_base_eeprom(sc->debug.debugfs_phy, sc->sc_ah);
  	ath9k_cmn_debug_base_eeprom(sc->debug.debugfs_phy, sc->sc_ah);
  	ath9k_cmn_debug_modal_eeprom(sc->debug.debugfs_phy, sc->sc_ah);
  	ath9k_cmn_debug_modal_eeprom(sc->debug.debugfs_phy, sc->sc_ah);
  	ath9k_cmn_debug_eeprom(sc->debug.debugfs_phy, sc->sc_ah);
  	ath9k_cmn_debug_eeprom(sc->debug.debugfs_phy, sc->sc_ah);
@@ -181,7 +181,7 @@
  	hw->max_listen_interval = 1;
  	hw->max_listen_interval = 1;
 --- a/drivers/net/wireless/ath/ath9k/init.c
 --- a/drivers/net/wireless/ath/ath9k/init.c
 +++ b/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
+@@ -691,6 +691,7 @@ static int ath9k_init_softc(u16 devid, s
  	if (!ath9k_is_chanctx_enabled())
  	if (!ath9k_is_chanctx_enabled())
  		sc->cur_chan->hw_queue_base = 0;
  		sc->cur_chan->hw_queue_base = 0;
  
  

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

@@ -24,7 +24,7 @@
  struct ath_softc {
  struct ath_softc {
  	struct ieee80211_hw *hw;
  	struct ieee80211_hw *hw;
  	struct device *dev;
  	struct device *dev;
-@@ -1034,9 +1044,8 @@ struct ath_softc {
+@@ -1036,9 +1046,8 @@ struct ath_softc {
  	spinlock_t chan_lock;
  	spinlock_t chan_lock;
  
  
  #ifdef CPTCFG_MAC80211_LEDS
  #ifdef CPTCFG_MAC80211_LEDS
@@ -181,7 +181,7 @@
  
  
 --- a/drivers/net/wireless/ath/ath9k/init.c
 --- a/drivers/net/wireless/ath/ath9k/init.c
 +++ b/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
+@@ -1043,7 +1043,7 @@ int ath9k_init_device(u16 devid, struct
  
  
  #ifdef CPTCFG_MAC80211_LEDS
  #ifdef CPTCFG_MAC80211_LEDS
  	/* must be initialized before ieee80211_register_hw */
  	/* must be initialized before ieee80211_register_hw */
@@ -254,7 +254,7 @@
  
  
  static ssize_t read_file_ani(struct file *file, char __user *user_buf,
  static ssize_t read_file_ani(struct file *file, char __user *user_buf,
  			     size_t count, loff_t *ppos)
  			     size_t count, loff_t *ppos)
-@@ -1390,6 +1445,10 @@ int ath9k_init_debug(struct ath_hw *ah)
+@@ -1391,6 +1446,10 @@ int ath9k_init_debug(struct ath_hw *ah)
  	ath9k_tx99_init_debug(sc);
  	ath9k_tx99_init_debug(sc);
  	ath9k_cmn_spectral_init_debug(&sc->spec_priv, sc->debug.debugfs_phy);
  	ath9k_cmn_spectral_init_debug(&sc->spec_priv, sc->debug.debugfs_phy);
  
  

+ 4 - 4
package/kernel/mac80211/patches/ath9k/542-ath9k_debugfs_diag.patch

@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/debug.c
 --- a/drivers/net/wireless/ath/ath9k/debug.c
 +++ b/drivers/net/wireless/ath/ath9k/debug.c
 +++ b/drivers/net/wireless/ath/ath9k/debug.c
-@@ -1428,6 +1428,50 @@ void ath9k_deinit_debug(struct ath_softc
+@@ -1429,6 +1429,50 @@ void ath9k_deinit_debug(struct ath_softc
  	ath9k_cmn_spectral_deinit_debug(&sc->spec_priv);
  	ath9k_cmn_spectral_deinit_debug(&sc->spec_priv);
  }
  }
  
  
@@ -51,7 +51,7 @@
  int ath9k_init_debug(struct ath_hw *ah)
  int ath9k_init_debug(struct ath_hw *ah)
  {
  {
  	struct ath_common *common = ath9k_hw_common(ah);
  	struct ath_common *common = ath9k_hw_common(ah);
-@@ -1449,6 +1493,8 @@ int ath9k_init_debug(struct ath_hw *ah)
+@@ -1450,6 +1494,8 @@ int ath9k_init_debug(struct ath_hw *ah)
  	debugfs_create_file("gpio_led", S_IWUSR,
  	debugfs_create_file("gpio_led", S_IWUSR,
  			   sc->debug.debugfs_phy, sc, &fops_gpio_led);
  			   sc->debug.debugfs_phy, sc, &fops_gpio_led);
  #endif
  #endif
@@ -94,7 +94,7 @@
  struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah,
  struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah,
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1881,6 +1881,20 @@ u32 ath9k_hw_get_tsf_offset(struct times
+@@ -1872,6 +1872,20 @@ u32 ath9k_hw_get_tsf_offset(ktime_t last
  }
  }
  EXPORT_SYMBOL(ath9k_hw_get_tsf_offset);
  EXPORT_SYMBOL(ath9k_hw_get_tsf_offset);
  
  
@@ -115,7 +115,7 @@
  int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
  int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
  		   struct ath9k_hw_cal_data *caldata, bool fastcc)
  		   struct ath9k_hw_cal_data *caldata, bool fastcc)
  {
  {
-@@ -2089,6 +2103,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
+@@ -2080,6 +2094,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
  		ar9003_hw_disable_phy_restart(ah);
  		ar9003_hw_disable_phy_restart(ah);
  
  
  	ath9k_hw_apply_gpio_override(ah);
  	ath9k_hw_apply_gpio_override(ah);

+ 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;
  	ops->spectral_scan_config = ar9003_hw_spectral_scan_config;
 --- a/drivers/net/wireless/ath/ath9k/init.c
 --- a/drivers/net/wireless/ath/ath9k/init.c
 +++ b/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
+@@ -825,7 +825,8 @@ static void ath9k_init_txpower_limits(st
  	if (ah->caps.hw_caps & ATH9K_HW_CAP_5GHZ)
  	if (ah->caps.hw_caps & ATH9K_HW_CAP_5GHZ)
  		ath9k_init_band_txpower(sc, NL80211_BAND_5GHZ);
  		ath9k_init_band_txpower(sc, NL80211_BAND_5GHZ);
  
  
@@ -65,7 +65,7 @@
  }
  }
  
  
  static const struct ieee80211_iface_limit if_limits[] = {
  static const struct ieee80211_iface_limit if_limits[] = {
-@@ -1049,6 +1050,18 @@ static void ath9k_set_hw_capab(struct at
+@@ -1003,6 +1004,18 @@ static void ath9k_set_hw_capab(struct at
  	wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CAN_REPLACE_PTK0);
  	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,
  int ath9k_init_device(u16 devid, struct ath_softc *sc,
  		    const struct ath_bus_ops *bus_ops)
  		    const struct ath_bus_ops *bus_ops)
  {
  {
-@@ -1096,6 +1109,8 @@ int ath9k_init_device(u16 devid, struct
+@@ -1050,6 +1063,8 @@ int ath9k_init_device(u16 devid, struct
  
  
  	wiphy_read_of_freq_limits(hw->wiphy);
  	wiphy_read_of_freq_limits(hw->wiphy);
  
  

+ 1 - 1
package/kernel/mac80211/patches/ath9k/544-ath9k-ar933x-usb-hang-workaround.patch

@@ -55,7 +55,7 @@
  	return -EINVAL;
  	return -EINVAL;
  }
  }
  
  
-@@ -2114,6 +2139,9 @@ int ath9k_hw_reset(struct ath_hw *ah, st
+@@ -2105,6 +2130,9 @@ int ath9k_hw_reset(struct ath_hw *ah, st
  		ath9k_hw_set_radar_params(ah);
  		ath9k_hw_set_radar_params(ah);
  	}
  	}
  
  

+ 1 - 1
package/kernel/mac80211/patches/ath9k/548-ath9k_enable_gpio_chip.patch

@@ -19,7 +19,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  
  
  #include "common.h"
  #include "common.h"
  #include "debug.h"
  #include "debug.h"
-@@ -1046,6 +1048,10 @@ struct ath_softc {
+@@ -1048,6 +1050,10 @@ struct ath_softc {
  #ifdef CPTCFG_MAC80211_LEDS
  #ifdef CPTCFG_MAC80211_LEDS
  	const char *led_default_trigger;
  	const char *led_default_trigger;
  	struct list_head leds;
  	struct list_head leds;

+ 7 - 7
package/kernel/mac80211/patches/ath9k/550-ath9k-of.patch

@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/init.c
 --- a/drivers/net/wireless/ath/ath9k/init.c
 +++ b/drivers/net/wireless/ath/ath9k/init.c
 +++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -29,6 +29,11 @@
+@@ -28,6 +28,11 @@
  
  
  #include "ath9k.h"
  #include "ath9k.h"
  
  
@@ -12,7 +12,7 @@
  struct ath9k_eeprom_ctx {
  struct ath9k_eeprom_ctx {
  	struct completion complete;
  	struct completion complete;
  	struct ath_hw *ah;
  	struct ath_hw *ah;
-@@ -243,6 +248,81 @@ static unsigned int ath9k_reg_rmw(void *
+@@ -242,6 +247,81 @@ static unsigned int ath9k_reg_rmw(void *
  	return val;
  	return val;
  }
  }
  
  
@@ -94,7 +94,7 @@
  /**************************/
  /**************************/
  /*     Initialization     */
  /*     Initialization     */
  /**************************/
  /**************************/
-@@ -670,6 +750,7 @@ static int ath9k_of_init(struct ath_soft
+@@ -626,6 +706,7 @@ static int ath9k_of_init(struct ath_soft
  	struct ath_common *common = ath9k_hw_common(ah);
  	struct ath_common *common = ath9k_hw_common(ah);
  	enum ath_bus_type bus_type = common->bus_ops->ath_bus_type;
  	enum ath_bus_type bus_type = common->bus_ops->ath_bus_type;
  	char eeprom_name[100];
  	char eeprom_name[100];
@@ -102,7 +102,7 @@
  	int ret;
  	int ret;
  
  
  	if (!of_device_is_available(np))
  	if (!of_device_is_available(np))
-@@ -677,6 +758,43 @@ static int ath9k_of_init(struct ath_soft
+@@ -633,6 +714,43 @@ static int ath9k_of_init(struct ath_soft
  
  
  	ath_dbg(common, CONFIG, "parsing configuration from OF node\n");
  	ath_dbg(common, CONFIG, "parsing configuration from OF node\n");
  
  
@@ -146,9 +146,9 @@
  	if (of_property_read_bool(np, "qca,no-eeprom")) {
  	if (of_property_read_bool(np, "qca,no-eeprom")) {
  		/* ath9k-eeprom-<bus>-<id>.bin */
  		/* ath9k-eeprom-<bus>-<id>.bin */
  		scnprintf(eeprom_name, sizeof(eeprom_name),
  		scnprintf(eeprom_name, sizeof(eeprom_name),
-@@ -693,6 +811,17 @@ static int ath9k_of_init(struct ath_soft
- 
- 	of_get_mac_address(np, common->macaddr);
+@@ -651,6 +769,17 @@ static int ath9k_of_init(struct ath_soft
+ 	if (ret == -EPROBE_DEFER)
+ 		return ret;
  
  
 +	np = of_get_child_by_name(np, "led");
 +	np = of_get_child_by_name(np, "led");
 +	if (np && of_device_is_available(np)) {
 +	if (np && of_device_is_available(np)) {

+ 2 - 2
package/kernel/mac80211/patches/ath9k/551-ath9k_ubnt_uap_plus_hsr.patch

@@ -7,7 +7,7 @@
 +#include "hsr.h"
 +#include "hsr.h"
  
  
  /* Set/change channels.  If the channel is really being changed, it's done
  /* Set/change channels.  If the channel is really being changed, it's done
-  * by reseting the chip.  To accomplish this we must first cleanup any pending
+  * by resetting the chip.  To accomplish this we must first cleanup any pending
 @@ -22,6 +23,7 @@
 @@ -22,6 +23,7 @@
   */
   */
  static int ath_set_channel(struct ath_softc *sc)
  static int ath_set_channel(struct ath_softc *sc)
@@ -374,7 +374,7 @@
  
  
 --- a/local-symbols
 --- a/local-symbols
 +++ b/local-symbols
 +++ b/local-symbols
-@@ -123,6 +123,7 @@ ATH9K_WOW=
+@@ -117,6 +117,7 @@ ATH9K_WOW=
  ATH9K_RFKILL=
  ATH9K_RFKILL=
  ATH9K_CHANNEL_CONTEXT=
  ATH9K_CHANNEL_CONTEXT=
  ATH9K_PCOEM=
  ATH9K_PCOEM=

+ 61 - 29
package/kernel/mac80211/patches/ath9k/552-ath9k-ahb_of.patch

@@ -1,40 +1,67 @@
 --- a/drivers/net/wireless/ath/ath9k/ahb.c
 --- a/drivers/net/wireless/ath/ath9k/ahb.c
 +++ b/drivers/net/wireless/ath/ath9k/ahb.c
 +++ b/drivers/net/wireless/ath/ath9k/ahb.c
-@@ -20,6 +20,7 @@
+@@ -16,37 +16,21 @@
+  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+  */
+ 
++#include <linux/mod_devicetable.h>
++#include <linux/module.h>
+ #include <linux/nl80211.h>
++#include <linux/of.h>
  #include <linux/platform_device.h>
  #include <linux/platform_device.h>
- #include <linux/module.h>
- #include <linux/mod_devicetable.h>
-+#include <linux/of_device.h>
+-#include <linux/module.h>
+-#include <linux/mod_devicetable.h>
++
  #include "ath9k.h"
  #include "ath9k.h"
  
  
- static const struct platform_device_id ath9k_platform_id_table[] = {
-@@ -69,21 +70,28 @@ static const struct ath_bus_ops ath_ahb_
- 	.eeprom_read = ath_ahb_eeprom_read,
+-static const struct platform_device_id ath9k_platform_id_table[] = {
+-	{
+-		.name = "ath9k",
+-		.driver_data = AR5416_AR9100_DEVID,
+-	},
+-	{
+-		.name = "ar933x_wmac",
+-		.driver_data = AR9300_DEVID_AR9330,
+-	},
+-	{
+-		.name = "ar934x_wmac",
+-		.driver_data = AR9300_DEVID_AR9340,
+-	},
+-	{
+-		.name = "qca955x_wmac",
+-		.driver_data = AR9300_DEVID_QCA955X,
+-	},
+-	{
+-		.name = "qca953x_wmac",
+-		.driver_data = AR9300_DEVID_AR953X,
+-	},
+-	{
+-		.name = "qca956x_wmac",
+-		.driver_data = AR9300_DEVID_QCA956X,
+-	},
++static const struct of_device_id ath9k_of_match_table[] = {
++	{ .compatible = "qca,ar9130-wifi", .data = (void *)AR5416_AR9100_DEVID },
++	{ .compatible = "qca,ar9330-wifi", .data = (void *)AR9300_DEVID_AR9330 },
++	{ .compatible = "qca,ar9340-wifi", .data = (void *)AR9300_DEVID_AR9340 },
++	{ .compatible = "qca,qca9530-wifi", .data = (void *)AR9300_DEVID_AR953X },
++	{ .compatible = "qca,qca9550-wifi", .data = (void *)AR9300_DEVID_QCA955X },
++	{ .compatible = "qca,qca9560-wifi", .data = (void *)AR9300_DEVID_QCA956X },
+ 	{},
  };
  };
  
  
-+const struct of_device_id of_ath_ahb_match[] = {
-+	{ .compatible = "qca,ar9130-wmac", .data = (void *)AR5416_AR9100_DEVID },
-+	{ .compatible = "qca,ar9330-wmac", .data = (void *)AR9300_DEVID_AR9330 },
-+	{ .compatible = "qca,ar9340-wmac", .data = (void *)AR9300_DEVID_AR9340 },
-+	{ .compatible = "qca,qca9530-wmac", .data = (void *)AR9300_DEVID_AR953X },
-+	{ .compatible = "qca,qca9550-wmac", .data = (void *)AR9300_DEVID_QCA955X },
-+	{ .compatible = "qca,qca9560-wmac", .data = (void *)AR9300_DEVID_QCA956X },
-+	{},
-+};
-+MODULE_DEVICE_TABLE(of, of_ath_ahb_match);
-+
+@@ -71,19 +55,14 @@ static const struct ath_bus_ops ath_ahb_
+ 
  static int ath_ahb_probe(struct platform_device *pdev)
  static int ath_ahb_probe(struct platform_device *pdev)
  {
  {
 -	void __iomem *mem;
 -	void __iomem *mem;
 -	struct ath_softc *sc;
 -	struct ath_softc *sc;
-+	const struct of_device_id *match;
  	struct ieee80211_hw *hw;
  	struct ieee80211_hw *hw;
 -	const struct platform_device_id *id = platform_get_device_id(pdev);
 -	const struct platform_device_id *id = platform_get_device_id(pdev);
 -	int irq;
 -	int irq;
 -	int ret = 0;
 -	int ret = 0;
 +	struct ath_softc *sc;
 +	struct ath_softc *sc;
-+	void __iomem *mem;
  	struct ath_hw *ah;
  	struct ath_hw *ah;
++	void __iomem *mem;
  	char hw_name[64];
  	char hw_name[64];
 -
 -
 -	if (!dev_get_platdata(&pdev->dev)) {
 -	if (!dev_get_platdata(&pdev->dev)) {
@@ -47,22 +74,27 @@
  
  
  	mem = devm_platform_ioremap_resource(pdev, 0);
  	mem = devm_platform_ioremap_resource(pdev, 0);
  	if (IS_ERR(mem)) {
  	if (IS_ERR(mem)) {
-@@ -117,7 +125,9 @@ static int ath_ahb_probe(struct platform
+@@ -117,7 +96,8 @@ static int ath_ahb_probe(struct platform
  		goto err_free_hw;
  		goto err_free_hw;
  	}
  	}
  
  
 -	ret = ath9k_init_device(id->driver_data, sc, &ath_ahb_bus_ops);
 -	ret = ath9k_init_device(id->driver_data, sc, &ath_ahb_bus_ops);
-+	match = of_match_device(of_ath_ahb_match, &pdev->dev);
-+	dev_id = (uintptr_t)match->data;
++	dev_id = (u16)(kernel_ulong_t)of_device_get_match_data(&pdev->dev);
 +	ret = ath9k_init_device(dev_id, sc, &ath_ahb_bus_ops);
 +	ret = ath9k_init_device(dev_id, sc, &ath_ahb_bus_ops);
  	if (ret) {
  	if (ret) {
  		dev_err(&pdev->dev, "failed to initialize device\n");
  		dev_err(&pdev->dev, "failed to initialize device\n");
  		goto err_irq;
  		goto err_irq;
-@@ -155,6 +165,7 @@ static struct platform_driver ath_ahb_dr
- 	.remove_new = ath_ahb_remove,
- 	.driver		= {
- 		.name	= "ath9k",
-+		.of_match_table = of_ath_ahb_match,
+@@ -167,11 +147,11 @@ static struct platform_driver ath_ahb_dr
+ 	
+ 	.driver = {
+ 		.name = "ath9k",
++		.of_match_table = ath9k_of_match_table,
  	},
  	},
- 	.id_table    = ath9k_platform_id_table,
+-	.id_table = ath9k_platform_id_table,
  };
  };
+ 
+-MODULE_DEVICE_TABLE(platform, ath9k_platform_id_table);
++MODULE_DEVICE_TABLE(of, ath9k_of_match_table);
+ 
+ int ath_ahb_init(void)
+ {

+ 1 - 1
package/kernel/mac80211/patches/brcm/860-brcmfmac-workaround-bug-with-some-inconsistent-BSSes.patch

@@ -10,7 +10,7 @@ Signed-off-by: Rafał Miłecki <[email protected]>
 
 
 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-@@ -980,8 +980,36 @@ static struct wireless_dev *brcmf_cfg802
+@@ -984,8 +984,36 @@ static struct wireless_dev *brcmf_cfg802
  	struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
  	struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
  	struct brcmf_pub *drvr = cfg->pub;
  	struct brcmf_pub *drvr = cfg->pub;
  	struct wireless_dev *wdev;
  	struct wireless_dev *wdev;

+ 7 - 7
package/kernel/mac80211/patches/brcm/861-brcmfmac-add-in-driver-tables-with-country-codes.patch

@@ -12,7 +12,7 @@ Signed-off-by: Rafał Miłecki <[email protected]>
 
 
 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c
 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c
 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c
 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c
-@@ -65,6 +65,36 @@ static int brcmf_of_get_country_codes(st
+@@ -66,6 +66,36 @@ static int brcmf_of_get_country_codes(st
  	return 0;
  	return 0;
  }
  }
  
  
@@ -46,15 +46,15 @@ Signed-off-by: Rafał Miłecki <[email protected]>
 +	}
 +	}
 +}
 +}
 +
 +
- void brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type,
- 		    struct brcmf_mp_device *settings)
+ int brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type,
+ 		   struct brcmf_mp_device *settings)
  {
  {
-@@ -113,6 +143,8 @@ void brcmf_of_probe(struct device *dev,
- 	}
- 	of_node_put(root);
+@@ -121,6 +151,8 @@ int brcmf_of_probe(struct device *dev, e
+ 
+ 	brcmf_dbg(INFO, "%s LPO clock\n", clk ? "enable" : "no");
  
  
 +	brcmf_of_probe_cc(dev, settings);
 +	brcmf_of_probe_cc(dev, settings);
 +
 +
  	if (!np || !of_device_is_compatible(np, "brcm,bcm4329-fmac"))
  	if (!np || !of_device_is_compatible(np, "brcm,bcm4329-fmac"))
- 		return;
+ 		return 0;
  
  

+ 1 - 1
package/kernel/mac80211/patches/brcm/870-02-rpi-6.12-brcmfmac-Prefer-a-ccode-from-OTP-over-nvram-file.patch

@@ -22,7 +22,7 @@ Signed-off-by: Phil Elwell <[email protected]>
  #include <net/cfg80211.h>
  #include <net/cfg80211.h>
  #include <net/netlink.h>
  #include <net/netlink.h>
  #include <uapi/linux/if_arp.h>
  #include <uapi/linux/if_arp.h>
-@@ -8212,31 +8213,45 @@ static void brcmf_cfg80211_reg_notifier(
+@@ -8215,31 +8216,45 @@ static void brcmf_cfg80211_reg_notifier(
  	struct brcmf_if *ifp = brcmf_get_ifp(cfg->pub, 0);
  	struct brcmf_if *ifp = brcmf_get_ifp(cfg->pub, 0);
  	struct brcmf_pub *drvr = cfg->pub;
  	struct brcmf_pub *drvr = cfg->pub;
  	struct brcmf_fil_country_le ccreq;
  	struct brcmf_fil_country_le ccreq;

+ 1 - 1
package/kernel/mac80211/patches/brcm/870-03-rpi-6.12-brcmfmac-Increase-power-saving-delay-to-2s.patch

@@ -14,7 +14,7 @@ Signed-off-by: Phil Elwell <[email protected]>
 
 
 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-@@ -3338,6 +3338,7 @@ brcmf_cfg80211_set_power_mgmt(struct wip
+@@ -3342,6 +3342,7 @@ brcmf_cfg80211_set_power_mgmt(struct wip
  			bphy_err(drvr, "error (%d)\n", err);
  			bphy_err(drvr, "error (%d)\n", err);
  	}
  	}
  
  

+ 8 - 8
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);
  				    BRCMF_DEFAULT_SCAN_CHANNEL_TIME);
 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
 +++ b/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;
  	return 0;
  }
  }
  
  
@@ -121,7 +121,7 @@ JIRA: SWWLAN-136577
  {
  {
  	struct brcmf_bus *bus_if = dev_get_drvdata(dev);
  	struct brcmf_bus *bus_if = dev_get_drvdata(dev);
  	struct brcmf_pub *drvr = bus_if->drvr;
  	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_fweh_register(drvr, BRCMF_E_PSM_WATCHDOG,
  			    brcmf_psm_watchdog_notify);
  			    brcmf_psm_watchdog_notify);
  
  
@@ -205,7 +205,7 @@ JIRA: SWWLAN-136577
  				    void *data);
  				    void *data);
 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
-@@ -2207,7 +2207,7 @@ static void brcmf_pcie_setup(struct devi
+@@ -2210,7 +2210,7 @@ static void brcmf_pcie_setup(struct devi
  
  
  	init_waitqueue_head(&devinfo->mbdata_resp_wait);
  	init_waitqueue_head(&devinfo->mbdata_resp_wait);
  
  
@@ -482,7 +482,7 @@ JIRA: SWWLAN-136577
  	bus->tx_hdrlen = SDPCM_HWHDR_LEN + SDPCM_SWHDR_LEN;
  	bus->tx_hdrlen = SDPCM_HWHDR_LEN + SDPCM_SWHDR_LEN;
  	if (sdiodev->sg_support) {
  	if (sdiodev->sg_support) {
  		bus->txglom = false;
  		bus->txglom = false;
-@@ -4215,7 +4413,7 @@ static void brcmf_sdio_firmware_callback
+@@ -4217,7 +4415,7 @@ static void brcmf_sdio_firmware_callback
  	u8 saveclk, bpreq;
  	u8 saveclk, bpreq;
  	u8 devctl;
  	u8 devctl;
  
  
@@ -491,7 +491,7 @@ JIRA: SWWLAN-136577
  
  
  	if (err)
  	if (err)
  		goto fail;
  		goto fail;
-@@ -4392,12 +4590,25 @@ static void brcmf_sdio_firmware_callback
+@@ -4394,12 +4592,25 @@ static void brcmf_sdio_firmware_callback
  	}
  	}
  
  
  	/* Attach to the common layer, reserve hdr space */
  	/* Attach to the common layer, reserve hdr space */
@@ -518,7 +518,7 @@ JIRA: SWWLAN-136577
  	/* ready */
  	/* ready */
  	return;
  	return;
  
  
-@@ -4640,3 +4851,40 @@ int brcmf_sdio_sleep(struct brcmf_sdio *
+@@ -4646,3 +4857,40 @@ int brcmf_sdio_sleep(struct brcmf_sdio *
  
  
  	return ret;
  	return ret;
  }
  }
@@ -692,7 +692,7 @@ JIRA: SWWLAN-136577
  #endif /* BRCMFMAC_SDIO_H */
  #endif /* BRCMFMAC_SDIO_H */
 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
 +++ b/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;
  		goto error;
  
  
  	/* Attach to the common driver interface */
  	/* Attach to the common driver interface */
@@ -701,7 +701,7 @@ JIRA: SWWLAN-136577
  	if (ret)
  	if (ret)
  		goto error;
  		goto error;
  
  
-@@ -1277,7 +1277,7 @@ static int brcmf_usb_probe_cb(struct brc
+@@ -1282,7 +1282,7 @@ static int brcmf_usb_probe_cb(struct brc
  		ret = brcmf_alloc(devinfo->dev, devinfo->settings);
  		ret = brcmf_alloc(devinfo->dev, devinfo->settings);
  		if (ret)
  		if (ret)
  			goto fail;
  			goto fail;

+ 1 - 1
package/kernel/mac80211/patches/brcm/870-05-rpi-6.12-brcmfmac-Fix-interoperating-DPP-and-other-encryption.patch

@@ -25,7 +25,7 @@ Signed-off-by: Chi-hsien Lin <[email protected]>
 
 
 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-@@ -2491,43 +2491,50 @@ brcmf_cfg80211_connect(struct wiphy *wip
+@@ -2495,43 +2495,50 @@ brcmf_cfg80211_connect(struct wiphy *wip
  		goto done;
  		goto done;
  	}
  	}
  
  

+ 3 - 3
package/kernel/mac80211/patches/brcm/871-brcmfmac-disable-dump_survey-on-bcm2835.patch

@@ -9,7 +9,7 @@ Signed-off-by: Álvaro Fernández Rojas <[email protected]>
 
 
 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-@@ -7991,6 +7991,7 @@ static s32 brcmf_translate_country_code(
+@@ -7994,6 +7994,7 @@ static s32 brcmf_translate_country_code(
  	return 0;
  	return 0;
  }
  }
  
  
@@ -17,7 +17,7 @@ Signed-off-by: Álvaro Fernández Rojas <[email protected]>
  static int
  static int
  brcmf_parse_dump_obss(char *buf, struct brcmf_dump_survey *survey)
  brcmf_parse_dump_obss(char *buf, struct brcmf_dump_survey *survey)
  {
  {
-@@ -8213,6 +8214,7 @@ exit:
+@@ -8216,6 +8217,7 @@ exit:
  		brcmf_set_mpc(ifp, 1);
  		brcmf_set_mpc(ifp, 1);
  	return err;
  	return err;
  }
  }
@@ -25,7 +25,7 @@ Signed-off-by: Álvaro Fernández Rojas <[email protected]>
  
  
  static void brcmf_cfg80211_reg_notifier(struct wiphy *wiphy,
  static void brcmf_cfg80211_reg_notifier(struct wiphy *wiphy,
  					struct regulatory_request *req)
  					struct regulatory_request *req)
-@@ -8379,8 +8381,10 @@ struct brcmf_cfg80211_info *brcmf_cfg802
+@@ -8382,8 +8384,10 @@ struct brcmf_cfg80211_info *brcmf_cfg802
  	if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_WOWL_GTK))
  	if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_WOWL_GTK))
  		ops->set_rekey_data = brcmf_cfg80211_set_rekey_data;
  		ops->set_rekey_data = brcmf_cfg80211_set_rekey_data;
  #endif
  #endif

+ 1 - 1
package/kernel/mac80211/patches/build/100-backports-drop-QRTR-and-MHI.patch

@@ -59,7 +59,7 @@ Signed-off-by: Robert Marko <[email protected]>
  	  This module adds support for PCIE bus
  	  This module adds support for PCIE bus
 --- a/local-symbols
 --- a/local-symbols
 +++ b/local-symbols
 +++ b/local-symbols
-@@ -59,14 +59,6 @@ MAC80211_MESH_PS_DEBUG=
+@@ -53,14 +53,6 @@ MAC80211_MESH_PS_DEBUG=
  MAC80211_TDLS_DEBUG=
  MAC80211_TDLS_DEBUG=
  MAC80211_DEBUG_COUNTERS=
  MAC80211_DEBUG_COUNTERS=
  MAC80211_STA_HASH_MAX_SIZE=
  MAC80211_STA_HASH_MAX_SIZE=

+ 0 - 32
package/kernel/mac80211/patches/build/110-backport-include-fix-linux-acpi_amd_wbrf.h-inclusion.patch

@@ -1,32 +0,0 @@
-From: Felix Fietkau <[email protected]>
-Date: Tue, 14 Jan 2025 11:42:25 +0100
-Subject: [PATCH] backport-include: fix linux/acpi_amd_wbrf.h inclusion
-
-Fix building for kernel >= 6.8 by adjusting incorrect guard usage,
-otherwise an #include_next header is masked and compilation will fail
-for net/mac80211/wbrf.c in the mac80211 kernel module.
-
-Fixes: 52cdcaab ("backport-include: backport linux/acpi_amd_wbrf.h")
-Reported-by: Tony Ambardar <[email protected]>
-Signed-off-by: Felix Fietkau <[email protected]>
----
-
---- a/backport-include/linux/acpi_amd_wbrf.h
-+++ b/backport-include/linux/acpi_amd_wbrf.h
-@@ -4,8 +4,8 @@
-  * Copyright (C) 2023 Advanced Micro Devices
-  */
- 
--#ifndef _ACPI_AMD_WBRF_H
--#define _ACPI_AMD_WBRF_H
-+#ifndef __BACKPORT_ACPI_AMD_WBRF_H
-+#define __BACKPORT_ACPI_AMD_WBRF_H
- 
- #if LINUX_VERSION_IS_GEQ(6,8,0)
- #include_next <linux/acpi_amd_wbrf.h>
-@@ -83,4 +83,4 @@ int amd_wbrf_unregister_notifier(struct
- }
- 
- #endif /* >=6,8,0 */
--#endif /* _ACPI_AMD_WBRF_H */
-+#endif /* __BACKPORT_ACPI_AMD_WBRF_H */

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

@@ -1,6 +1,6 @@
 --- a/net/wireless/core.c
 --- a/net/wireless/core.c
 +++ b/net/wireless/core.c
 +++ b/net/wireless/core.c
-@@ -165,11 +165,15 @@ int cfg80211_switch_netns(struct cfg8021
+@@ -162,11 +162,15 @@ int cfg80211_switch_netns(struct cfg8021
  	list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) {
  	list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) {
  		if (!wdev->netdev)
  		if (!wdev->netdev)
  			continue;
  			continue;
@@ -16,7 +16,7 @@
  	}
  	}
  
  
  	if (err) {
  	if (err) {
-@@ -181,11 +185,15 @@ int cfg80211_switch_netns(struct cfg8021
+@@ -178,11 +182,15 @@ int cfg80211_switch_netns(struct cfg8021
  						     list) {
  						     list) {
  			if (!wdev->netdev)
  			if (!wdev->netdev)
  				continue;
  				continue;
@@ -32,7 +32,7 @@
  		}
  		}
  
  
  		return err;
  		return err;
-@@ -1518,7 +1526,9 @@ static int cfg80211_netdev_notifier_call
+@@ -1520,7 +1528,9 @@ static int cfg80211_netdev_notifier_call
  		SET_NETDEV_DEVTYPE(dev, &wiphy_type);
  		SET_NETDEV_DEVTYPE(dev, &wiphy_type);
  		wdev->netdev = dev;
  		wdev->netdev = dev;
  		/* can only change netns with wiphy */
  		/* 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
 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
 +++ b/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
+@@ -1579,7 +1579,11 @@ static int brcmf_usb_reset_device(struct
  
  
  void brcmf_usb_exit(void)
  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
 --- a/drivers/net/wireless/virtual/mac80211_hwsim.c
 +++ b/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
+@@ -6670,6 +6670,7 @@ static void hwsim_virtio_rx_done(struct
  
  
  static int init_vqs(struct virtio_device *vdev)
  static int init_vqs(struct virtio_device *vdev)
  {
  {
@@ -8,7 +8,7 @@
  	struct virtqueue_info vqs_info[HWSIM_NUM_VQS] = {
  	struct virtqueue_info vqs_info[HWSIM_NUM_VQS] = {
  		[HWSIM_VQ_TX] = { "tx", hwsim_virtio_tx_done },
  		[HWSIM_VQ_TX] = { "tx", hwsim_virtio_tx_done },
  		[HWSIM_VQ_RX] = { "rx", hwsim_virtio_rx_done },
  		[HWSIM_VQ_RX] = { "rx", hwsim_virtio_rx_done },
-@@ -6636,6 +6637,19 @@ static int init_vqs(struct virtio_device
+@@ -6677,6 +6678,19 @@ static int init_vqs(struct virtio_device
  
  
  	return virtio_find_vqs(vdev, HWSIM_NUM_VQS,
  	return virtio_find_vqs(vdev, HWSIM_NUM_VQS,
  			       hwsim_vqs, vqs_info, NULL);
  			       hwsim_vqs, vqs_info, NULL);

+ 14 - 0
package/kernel/mac80211/patches/build/240-realtek-rtw88-BH-workqueue.patch

@@ -0,0 +1,14 @@
+--- a/drivers/net/wireless/realtek/rtw88/usb.c
++++ b/drivers/net/wireless/realtek/rtw88/usb.c
+@@ -909,7 +909,11 @@ static int rtw_usb_init_rx(struct rtw_de
+ 	struct sk_buff *rx_skb;
+ 	int i;
+ 
++#if LINUX_VERSION_IS_GEQ(6,9,0)
+ 	rtwusb->rxwq = alloc_workqueue("rtw88_usb: rx wq", WQ_BH, 0);
++#else
++	rtwusb->rxwq = create_singlethread_workqueue("rtw88_usb: rx wq");
++#endif
+ 	if (!rtwusb->rxwq) {
+ 		rtw_err(rtwdev, "failed to create RX work queue\n");
+ 		return -ENOMEM;

+ 20 - 0
package/kernel/mac80211/patches/build/360-change-read_new-to-read.patch

@@ -0,0 +1,20 @@
+--- a/drivers/net/wireless/ti/wlcore/sysfs.c
++++ b/drivers/net/wireless/ti/wlcore/sysfs.c
+@@ -88,7 +88,7 @@ static ssize_t hw_pg_ver_show(struct dev
+ static DEVICE_ATTR_RO(hw_pg_ver);
+ 
+ static ssize_t wl1271_sysfs_read_fwlog(struct file *filp, struct kobject *kobj,
+-				       const struct bin_attribute *bin_attr,
++				       struct bin_attribute *bin_attr,
+ 				       char *buffer, loff_t pos, size_t count)
+ {
+ 	struct device *dev = kobj_to_dev(kobj);
+@@ -121,7 +121,7 @@ static ssize_t wl1271_sysfs_read_fwlog(s
+ 
+ static const struct bin_attribute fwlog_attr = {
+ 	.attr = { .name = "fwlog", .mode = 0400 },
+-	.read_new = wl1271_sysfs_read_fwlog,
++	.read = wl1271_sysfs_read_fwlog,
+ };
+ 
+ int wlcore_sysfs_init(struct wl1271 *wl)

+ 252 - 0
package/kernel/mac80211/patches/build/400-restore-old-debugfs_fops.patch

@@ -0,0 +1,252 @@
+--- a/drivers/net/wireless/ath/carl9170/debug.c
++++ b/drivers/net/wireless/ath/carl9170/debug.c
+@@ -54,6 +54,7 @@ struct carl9170_debugfs_fops {
+ 	char *(*read)(struct ar9170 *ar, char *buf, size_t bufsize,
+ 		      ssize_t *len);
+ 	ssize_t (*write)(struct ar9170 *aru, const char *buf, size_t size);
++	const struct file_operations fops;
+ 
+ 	enum carl9170_device_state req_dev_state;
+ };
+@@ -61,7 +62,7 @@ struct carl9170_debugfs_fops {
+ static ssize_t carl9170_debugfs_read(struct file *file, char __user *userbuf,
+ 				     size_t count, loff_t *ppos)
+ {
+-	const struct carl9170_debugfs_fops *dfops;
++	struct carl9170_debugfs_fops *dfops;
+ 	struct ar9170 *ar;
+ 	char *buf = NULL, *res_buf = NULL;
+ 	ssize_t ret = 0;
+@@ -74,7 +75,8 @@ static ssize_t carl9170_debugfs_read(str
+ 
+ 	if (!ar)
+ 		return -ENODEV;
+-	dfops = debugfs_get_aux(file);
++	dfops = container_of(debugfs_real_fops(file),
++			     struct carl9170_debugfs_fops, fops);
+ 
+ 	if (!dfops->read)
+ 		return -ENOSYS;
+@@ -111,7 +113,7 @@ out_free:
+ static ssize_t carl9170_debugfs_write(struct file *file,
+ 	const char __user *userbuf, size_t count, loff_t *ppos)
+ {
+-	const struct carl9170_debugfs_fops *dfops;
++	struct carl9170_debugfs_fops *dfops;
+ 	struct ar9170 *ar;
+ 	char *buf = NULL;
+ 	int err = 0;
+@@ -126,7 +128,8 @@ static ssize_t carl9170_debugfs_write(st
+ 
+ 	if (!ar)
+ 		return -ENODEV;
+-	dfops = debugfs_get_aux(file);
++	dfops = container_of(debugfs_real_fops(file),
++			     struct carl9170_debugfs_fops, fops);
+ 
+ 	if (!dfops->write)
+ 		return -ENOSYS;
+@@ -162,11 +165,6 @@ out_free:
+ 	return err;
+ }
+ 
+-static struct debugfs_short_fops debugfs_fops = {
+-	.read	= carl9170_debugfs_read,
+-	.write	= carl9170_debugfs_write,
+-};
+-
+ #define __DEBUGFS_DECLARE_FILE(name, _read, _write, _read_bufsize,	\
+ 			       _attr, _dstate)				\
+ static const struct carl9170_debugfs_fops carl_debugfs_##name ##_ops = {\
+@@ -175,6 +173,12 @@ static const struct carl9170_debugfs_fop
+ 	.write = _write,						\
+ 	.attr = _attr,							\
+ 	.req_dev_state = _dstate,					\
++	.fops = {							\
++		.open	= simple_open,					\
++		.read	= carl9170_debugfs_read,			\
++		.write	= carl9170_debugfs_write,			\
++		.owner	= THIS_MODULE					\
++	},								\
+ }
+ 
+ #define DEBUGFS_DECLARE_FILE(name, _read, _write, _read_bufsize, _attr)	\
+@@ -812,9 +816,9 @@ void carl9170_debugfs_register(struct ar
+ 		ar->hw->wiphy->debugfsdir);
+ 
+ #define DEBUGFS_ADD(name)						\
+-	debugfs_create_file_aux(#name, carl_debugfs_##name ##_ops.attr,	\
+-			    ar->debug_dir, ar, &carl_debugfs_##name ## _ops, \
+-			    &debugfs_fops)
++	debugfs_create_file(#name, carl_debugfs_##name ##_ops.attr,	\
++			    ar->debug_dir, ar,				\
++			    &carl_debugfs_##name ## _ops.fops)
+ 
+ 	DEBUGFS_ADD(usb_tx_anch_urbs);
+ 	DEBUGFS_ADD(usb_rx_pool_urbs);
+--- a/drivers/net/wireless/broadcom/b43/debugfs.c
++++ b/drivers/net/wireless/broadcom/b43/debugfs.c
+@@ -30,6 +30,7 @@ static struct dentry *rootdir;
+ struct b43_debugfs_fops {
+ 	ssize_t (*read)(struct b43_wldev *dev, char *buf, size_t bufsize);
+ 	int (*write)(struct b43_wldev *dev, const char *buf, size_t count);
++	struct file_operations fops;
+ 	/* Offset of struct b43_dfs_file in struct b43_dfsentry */
+ 	size_t file_struct_offset;
+ };
+@@ -490,7 +491,7 @@ static ssize_t b43_debugfs_read(struct f
+ 				size_t count, loff_t *ppos)
+ {
+ 	struct b43_wldev *dev;
+-	const struct b43_debugfs_fops *dfops;
++	struct b43_debugfs_fops *dfops;
+ 	struct b43_dfs_file *dfile;
+ 	ssize_t ret;
+ 	char *buf;
+@@ -510,7 +511,8 @@ static ssize_t b43_debugfs_read(struct f
+ 		goto out_unlock;
+ 	}
+ 
+-	dfops = debugfs_get_aux(file);
++	dfops = container_of(debugfs_real_fops(file),
++			     struct b43_debugfs_fops, fops);
+ 	if (!dfops->read) {
+ 		err = -ENOSYS;
+ 		goto out_unlock;
+@@ -553,7 +555,7 @@ static ssize_t b43_debugfs_write(struct
+ 				 size_t count, loff_t *ppos)
+ {
+ 	struct b43_wldev *dev;
+-	const struct b43_debugfs_fops *dfops;
++	struct b43_debugfs_fops *dfops;
+ 	char *buf;
+ 	int err = 0;
+ 
+@@ -571,7 +573,8 @@ static ssize_t b43_debugfs_write(struct
+ 		goto out_unlock;
+ 	}
+ 
+-	dfops = debugfs_get_aux(file);
++	dfops = container_of(debugfs_real_fops(file),
++			     struct b43_debugfs_fops, fops);
+ 	if (!dfops->write) {
+ 		err = -ENOSYS;
+ 		goto out_unlock;
+@@ -599,16 +602,16 @@ out_unlock:
+ }
+ 
+ 
+-static struct debugfs_short_fops debugfs_ops = {
+-	.read	= b43_debugfs_read,
+-	.write	= b43_debugfs_write,
+-	.llseek = generic_file_llseek,
+-};
+-
+ #define B43_DEBUGFS_FOPS(name, _read, _write)			\
+ 	static struct b43_debugfs_fops fops_##name = {		\
+ 		.read	= _read,				\
+ 		.write	= _write,				\
++		.fops	= {					\
++			.open	= simple_open,			\
++			.read	= b43_debugfs_read,		\
++			.write	= b43_debugfs_write,		\
++			.llseek = generic_file_llseek,		\
++		},						\
+ 		.file_struct_offset = offsetof(struct b43_dfsentry, \
+ 					       file_##name),	\
+ 	}
+@@ -700,9 +703,9 @@ void b43_debugfs_add_device(struct b43_w
+ 
+ #define ADD_FILE(name, mode)	\
+ 	do {							\
+-		debugfs_create_file_aux(__stringify(name),	\
++		debugfs_create_file(__stringify(name),		\
+ 				mode, e->subdir, dev,		\
+-				&fops_##name, &debugfs_ops);	\
++				&fops_##name.fops);		\
+ 	} while (0)
+ 
+ 
+--- a/drivers/net/wireless/broadcom/b43legacy/debugfs.c
++++ b/drivers/net/wireless/broadcom/b43legacy/debugfs.c
+@@ -31,6 +31,7 @@ static struct dentry *rootdir;
+ struct b43legacy_debugfs_fops {
+ 	ssize_t (*read)(struct b43legacy_wldev *dev, char *buf, size_t bufsize);
+ 	int (*write)(struct b43legacy_wldev *dev, const char *buf, size_t count);
++	struct file_operations fops;
+ 	/* Offset of struct b43legacy_dfs_file in struct b43legacy_dfsentry */
+ 	size_t file_struct_offset;
+ 	/* Take wl->irq_lock before calling read/write? */
+@@ -187,7 +188,7 @@ static ssize_t b43legacy_debugfs_read(st
+ 				size_t count, loff_t *ppos)
+ {
+ 	struct b43legacy_wldev *dev;
+-	const struct b43legacy_debugfs_fops *dfops;
++	struct b43legacy_debugfs_fops *dfops;
+ 	struct b43legacy_dfs_file *dfile;
+ 	ssize_t ret;
+ 	char *buf;
+@@ -207,7 +208,8 @@ static ssize_t b43legacy_debugfs_read(st
+ 		goto out_unlock;
+ 	}
+ 
+-	dfops = debugfs_get_aux(file);
++	dfops = container_of(debugfs_real_fops(file),
++			     struct b43legacy_debugfs_fops, fops);
+ 	if (!dfops->read) {
+ 		err = -ENOSYS;
+ 		goto out_unlock;
+@@ -255,7 +257,7 @@ static ssize_t b43legacy_debugfs_write(s
+ 				 size_t count, loff_t *ppos)
+ {
+ 	struct b43legacy_wldev *dev;
+-	const struct b43legacy_debugfs_fops *dfops;
++	struct b43legacy_debugfs_fops *dfops;
+ 	char *buf;
+ 	int err = 0;
+ 
+@@ -273,7 +275,8 @@ static ssize_t b43legacy_debugfs_write(s
+ 		goto out_unlock;
+ 	}
+ 
+-	dfops = debugfs_get_aux(file);
++	dfops = container_of(debugfs_real_fops(file),
++			     struct b43legacy_debugfs_fops, fops);
+ 	if (!dfops->write) {
+ 		err = -ENOSYS;
+ 		goto out_unlock;
+@@ -305,16 +308,17 @@ out_unlock:
+ 	return err ? err : count;
+ }
+ 
+-static struct debugfs_short_fops debugfs_ops = {
+-	.read	= b43legacy_debugfs_read,
+-	.write	= b43legacy_debugfs_write,
+-	.llseek = generic_file_llseek
+-};
+ 
+ #define B43legacy_DEBUGFS_FOPS(name, _read, _write, _take_irqlock)	\
+ 	static struct b43legacy_debugfs_fops fops_##name = {		\
+ 		.read	= _read,				\
+ 		.write	= _write,				\
++		.fops	= {					\
++			.open	= simple_open,				\
++			.read	= b43legacy_debugfs_read,		\
++			.write	= b43legacy_debugfs_write,		\
++			.llseek = generic_file_llseek,			\
++		},						\
+ 		.file_struct_offset = offsetof(struct b43legacy_dfsentry, \
+ 					       file_##name),	\
+ 		.take_irqlock	= _take_irqlock,		\
+@@ -382,9 +386,9 @@ void b43legacy_debugfs_add_device(struct
+ 
+ #define ADD_FILE(name, mode)	\
+ 	do {							\
+-		debugfs_create_file_aux(__stringify(name), mode,	\
++		debugfs_create_file(__stringify(name), mode,	\
+ 				    e->subdir, dev,		\
+-				    &fops_##name, &debugfs_ops);	\
++				    &fops_##name.fops);		\
+ 	} while (0)
+ 
+ 

+ 210 - 0
package/kernel/mac80211/patches/build/410-mac80211-convert-short-fops-to-debugfs-files.patch

@@ -0,0 +1,210 @@
+--- a/net/mac80211/debugfs.c
++++ b/net/mac80211/debugfs.c
+@@ -42,8 +42,9 @@ static ssize_t name## _read(struct file
+ }
+ 
+ #define DEBUGFS_READONLY_FILE_OPS(name)			\
+-static const struct debugfs_short_fops name## _ops = {				\
++static const struct file_operations name## _ops = {			\
+ 	.read = name## _read,						\
++	.open = simple_open,						\
+ 	.llseek = generic_file_llseek,					\
+ };
+ 
+@@ -141,9 +142,10 @@ static ssize_t aqm_write(struct file *fi
+ 	return -EINVAL;
+ }
+ 
+-static const struct debugfs_short_fops aqm_ops = {
++static const struct file_operations aqm_ops = {
+ 	.write = aqm_write,
+ 	.read = aqm_read,
++	.open = simple_open,
+ 	.llseek = default_llseek,
+ };
+ 
+@@ -192,9 +194,10 @@ static ssize_t airtime_flags_write(struc
+ 	return count;
+ }
+ 
+-static const struct debugfs_short_fops airtime_flags_ops = {
++static const struct file_operations airtime_flags_ops = {
+ 	.write = airtime_flags_write,
+ 	.read = airtime_flags_read,
++	.open = simple_open,
+ 	.llseek = default_llseek,
+ };
+ 
+@@ -222,8 +225,9 @@ static ssize_t aql_pending_read(struct f
+ 				       buf, len);
+ }
+ 
+-static const struct debugfs_short_fops aql_pending_ops = {
++static const struct file_operations aql_pending_ops = {
+ 	.read = aql_pending_read,
++	.open = simple_open,
+ 	.llseek = default_llseek,
+ };
+ 
+@@ -301,9 +305,10 @@ static ssize_t aql_txq_limit_write(struc
+ 	return count;
+ }
+ 
+-static const struct debugfs_short_fops aql_txq_limit_ops = {
++static const struct file_operations aql_txq_limit_ops = {
+ 	.write = aql_txq_limit_write,
+ 	.read = aql_txq_limit_read,
++	.open = simple_open,
+ 	.llseek = default_llseek,
+ };
+ 
+@@ -350,9 +355,10 @@ static ssize_t aql_enable_write(struct f
+ 	return count;
+ }
+ 
+-static const struct debugfs_short_fops aql_enable_ops = {
++static const struct file_operations aql_enable_ops = {
+ 	.write = aql_enable_write,
+ 	.read = aql_enable_read,
++	.open = simple_open,
+ 	.llseek = default_llseek,
+ };
+ 
+@@ -400,9 +406,10 @@ static ssize_t force_tx_status_write(str
+ 	return count;
+ }
+ 
+-static const struct debugfs_short_fops force_tx_status_ops = {
++static const struct file_operations force_tx_status_ops = {
+ 	.write = force_tx_status_write,
+ 	.read = force_tx_status_read,
++	.open = simple_open,
+ 	.llseek = default_llseek,
+ };
+ 
+@@ -427,8 +434,9 @@ static ssize_t reset_write(struct file *
+ 	return count;
+ }
+ 
+-static const struct debugfs_short_fops reset_ops = {
++static const struct file_operations reset_ops = {
+ 	.write = reset_write,
++	.open = simple_open,
+ 	.llseek = noop_llseek,
+ };
+ #endif
+@@ -656,8 +664,9 @@ static ssize_t stats_ ##name## _read(str
+ 				      print_devstats_##name);		\
+ }									\
+ 									\
+-static const struct debugfs_short_fops stats_ ##name## _ops = {			\
++static const struct file_operations stats_ ##name## _ops = {		\
+ 	.read = stats_ ##name## _read,					\
++	.open = simple_open,						\
+ 	.llseek = generic_file_llseek,					\
+ };
+ 
+--- a/net/mac80211/debugfs_key.c
++++ b/net/mac80211/debugfs_key.c
+@@ -26,15 +26,17 @@ static ssize_t key_##name##_read(struct
+ #define KEY_READ_X(name) KEY_READ(name, name, "0x%x\n")
+ 
+ #define KEY_OPS(name)							\
+-static const struct debugfs_short_fops key_ ##name## _ops = {		\
++static const struct file_operations key_ ##name## _ops = {		\
+ 	.read = key_##name##_read,					\
++	.open = simple_open,						\
+ 	.llseek = generic_file_llseek,					\
+ }
+ 
+ #define KEY_OPS_W(name)							\
+-static const struct debugfs_short_fops key_ ##name## _ops = {		\
++static const struct file_operations key_ ##name## _ops = {		\
+ 	.read = key_##name##_read,					\
+ 	.write = key_##name##_write,					\
++	.open = simple_open,						\
+ 	.llseek = generic_file_llseek,					\
+ }
+ 
+@@ -47,8 +49,9 @@ static const struct debugfs_short_fops k
+ #define KEY_CONF_READ_D(name) KEY_CONF_READ(name, "%d\n")
+ 
+ #define KEY_CONF_OPS(name)						\
+-static const struct debugfs_short_fops key_ ##name## _ops = {		\
++static const struct file_operations key_ ##name## _ops = {		\
+ 	.read = key_conf_##name##_read,					\
++	.open = simple_open,						\
+ 	.llseek = generic_file_llseek,					\
+ }
+ 
+--- a/net/mac80211/debugfs_netdev.c
++++ b/net/mac80211/debugfs_netdev.c
+@@ -221,9 +221,10 @@ static ssize_t ieee80211_if_fmt_##name(
+ }
+ 
+ #define _IEEE80211_IF_FILE_OPS(name, _read, _write)			\
+-static const struct debugfs_short_fops name##_ops = {				\
++static const struct file_operations name##_ops = {			\
+ 	.read = (_read),						\
+ 	.write = (_write),						\
++	.open = simple_open,						\
+ 	.llseek = generic_file_llseek,					\
+ }
+ 
+--- a/net/mac80211/debugfs_sta.c
++++ b/net/mac80211/debugfs_sta.c
+@@ -30,15 +30,17 @@ static ssize_t sta_ ##name## _read(struc
+ #define STA_READ_D(name, field) STA_READ(name, field, "%d\n")
+ 
+ #define STA_OPS(name)							\
+-static const struct debugfs_short_fops sta_ ##name## _ops = {		\
++static const struct file_operations sta_ ##name## _ops = {		\
+ 	.read = sta_##name##_read,					\
++	.open = simple_open,						\
+ 	.llseek = generic_file_llseek,					\
+ }
+ 
+ #define STA_OPS_RW(name)						\
+-static const struct debugfs_short_fops sta_ ##name## _ops = {		\
++static const struct file_operations sta_ ##name## _ops = {		\
+ 	.read = sta_##name##_read,					\
+ 	.write = sta_##name##_write,					\
++	.open = simple_open,						\
+ 	.llseek = generic_file_llseek,					\
+ }
+ 
+@@ -448,8 +450,9 @@ STA_OPS_RW(agg_status);
+ 
+ /* link sta attributes */
+ #define LINK_STA_OPS(name)						\
+-static const struct debugfs_short_fops link_sta_ ##name## _ops = {		\
++static const struct file_operations link_sta_ ##name## _ops = {		\
+ 	.read = link_sta_##name##_read,					\
++	.open = simple_open,						\
+ 	.llseek = generic_file_llseek,					\
+ }
+ 
+--- a/net/mac80211/rate.c
++++ b/net/mac80211/rate.c
+@@ -249,8 +249,9 @@ static ssize_t rcname_read(struct file *
+ 				       ref->ops->name, len);
+ }
+ 
+-const struct debugfs_short_fops rcname_ops = {
++const struct file_operations rcname_ops = {
+ 	.read = rcname_read,
++	.open = simple_open,
+ 	.llseek = default_llseek,
+ };
+ #endif
+--- a/net/mac80211/rate.h
++++ b/net/mac80211/rate.h
+@@ -62,7 +62,7 @@ static inline void rate_control_add_sta_
+ #endif
+ }
+ 
+-extern const struct debugfs_short_fops rcname_ops;
++extern const struct file_operations rcname_ops;
+ 
+ static inline void rate_control_add_debugfs(struct ieee80211_local *local)
+ {

+ 1 - 1
package/kernel/mac80211/patches/mwl/950-mwifiex-Print-stringified-name-of-command-in-error-l.patch

@@ -152,7 +152,7 @@ Signed-off-by: Pali Rohár <[email protected]>
  
  
 --- a/drivers/net/wireless/marvell/mwifiex/main.h
 --- a/drivers/net/wireless/marvell/mwifiex/main.h
 +++ b/drivers/net/wireless/marvell/mwifiex/main.h
 +++ b/drivers/net/wireless/marvell/mwifiex/main.h
-@@ -1100,6 +1100,8 @@ void mwifiex_cancel_all_pending_cmd(stru
+@@ -1096,6 +1096,8 @@ void mwifiex_cancel_all_pending_cmd(stru
  void mwifiex_cancel_pending_scan_cmd(struct mwifiex_adapter *adapter);
  void mwifiex_cancel_pending_scan_cmd(struct mwifiex_adapter *adapter);
  void mwifiex_cancel_scan(struct mwifiex_adapter *adapter);
  void mwifiex_cancel_scan(struct mwifiex_adapter *adapter);
  
  

+ 1 - 1
package/kernel/mac80211/patches/rt2x00/602-01-wifi-rt2x00-Add-support-for-loading-EEPROM-from-user.patch

@@ -21,7 +21,7 @@ Signed-off-by: Christian Marangi <[email protected]>
 
 
 --- a/local-symbols
 --- a/local-symbols
 +++ b/local-symbols
 +++ b/local-symbols
-@@ -339,6 +339,7 @@ RT2X00_LIB_FIRMWARE=
+@@ -334,6 +334,7 @@ RT2X00_LIB_FIRMWARE=
  RT2X00_LIB_CRYPTO=
  RT2X00_LIB_CRYPTO=
  RT2X00_LIB_LEDS=
  RT2X00_LIB_LEDS=
  RT2X00_LIB_DEBUGFS=
  RT2X00_LIB_DEBUGFS=

+ 5 - 4
package/kernel/mac80211/patches/rt2x00/609-rt2x00-make-wmac-loadable-via-OF-on-rt288x-305x-SoC.patch

@@ -13,10 +13,11 @@ Signed-off-by: John Crispin <[email protected]>
 
 
 --- a/drivers/net/wireless/ralink/rt2x00/rt2800soc.c
 --- a/drivers/net/wireless/ralink/rt2x00/rt2800soc.c
 +++ b/drivers/net/wireless/ralink/rt2x00/rt2800soc.c
 +++ b/drivers/net/wireless/ralink/rt2x00/rt2800soc.c
-@@ -230,10 +230,17 @@ static int rt2800soc_probe(struct platfo
- 	return rt2x00soc_probe(pdev, &rt2800soc_ops);
+@@ -237,10 +237,18 @@ static int bp_rt2x00soc_remove(struct pl
+ 	return 0;
  }
  }
- 
+ #endif
++
 +static const struct of_device_id rt2880_wmac_match[] = {
 +static const struct of_device_id rt2880_wmac_match[] = {
 +	{ .compatible = "ralink,rt2880-wmac" },
 +	{ .compatible = "ralink,rt2880-wmac" },
 +	{},
 +	{},
@@ -30,4 +31,4 @@ Signed-off-by: John Crispin <[email protected]>
 +		.of_match_table	= rt2880_wmac_match,
 +		.of_match_table	= rt2880_wmac_match,
  	},
  	},
  	.probe		= rt2800soc_probe,
  	.probe		= rt2800soc_probe,
- 	.remove		= rt2x00soc_remove,
+ #if LINUX_VERSION_IS_GEQ(6,11,0)

+ 1 - 1
package/kernel/mac80211/patches/rt2x00/610-rt2x00-change-led-polarity-from-OF.patch

@@ -8,7 +8,7 @@
  
  
  #include "rt2x00.h"
  #include "rt2x00.h"
  #include "rt2800lib.h"
  #include "rt2800lib.h"
-@@ -11282,6 +11283,17 @@ static int rt2800_init_eeprom(struct rt2
+@@ -11276,6 +11277,17 @@ static int rt2800_init_eeprom(struct rt2
  	rt2800_init_led(rt2x00dev, &rt2x00dev->led_assoc, LED_TYPE_ASSOC);
  	rt2800_init_led(rt2x00dev, &rt2x00dev->led_assoc, LED_TYPE_ASSOC);
  	rt2800_init_led(rt2x00dev, &rt2x00dev->led_qual, LED_TYPE_QUALITY);
  	rt2800_init_led(rt2x00dev, &rt2x00dev->led_qual, LED_TYPE_QUALITY);
  
  

+ 3 - 3
package/kernel/mac80211/patches/rt2x00/620-01-rt2x00-respect-rt2800-hardware-TX-queue-index.patch

@@ -114,7 +114,7 @@ Signed-off-by: Shiji Yang <[email protected]>
  		queue = rt2x00queue_get_tx_queue(rt2x00dev, qid);
  		queue = rt2x00queue_get_tx_queue(rt2x00dev, qid);
  
  
  		if (unlikely(rt2x00queue_empty(queue))) {
  		if (unlikely(rt2x00queue_empty(queue))) {
-@@ -12188,8 +12197,9 @@ int rt2800_conf_tx(struct ieee80211_hw *
+@@ -12182,8 +12191,9 @@ int rt2800_conf_tx(struct ieee80211_hw *
  	queue = rt2x00queue_get_tx_queue(rt2x00dev, queue_idx);
  	queue = rt2x00queue_get_tx_queue(rt2x00dev, queue_idx);
  
  
  	/* Update WMM TXOP register */
  	/* Update WMM TXOP register */
@@ -126,7 +126,7 @@ Signed-off-by: Shiji Yang <[email protected]>
  	field.bit_mask = 0xffff << field.bit_offset;
  	field.bit_mask = 0xffff << field.bit_offset;
  
  
  	reg = rt2800_register_read(rt2x00dev, offset);
  	reg = rt2800_register_read(rt2x00dev, offset);
-@@ -12197,7 +12207,7 @@ int rt2800_conf_tx(struct ieee80211_hw *
+@@ -12191,7 +12201,7 @@ int rt2800_conf_tx(struct ieee80211_hw *
  	rt2800_register_write(rt2x00dev, offset, reg);
  	rt2800_register_write(rt2x00dev, offset, reg);
  
  
  	/* Update WMM registers */
  	/* Update WMM registers */
@@ -135,7 +135,7 @@ Signed-off-by: Shiji Yang <[email protected]>
  	field.bit_mask = 0xf << field.bit_offset;
  	field.bit_mask = 0xf << field.bit_offset;
  
  
  	reg = rt2800_register_read(rt2x00dev, WMM_AIFSN_CFG);
  	reg = rt2800_register_read(rt2x00dev, WMM_AIFSN_CFG);
-@@ -12213,7 +12223,7 @@ int rt2800_conf_tx(struct ieee80211_hw *
+@@ -12207,7 +12217,7 @@ int rt2800_conf_tx(struct ieee80211_hw *
  	rt2800_register_write(rt2x00dev, WMM_CWMAX_CFG, reg);
  	rt2800_register_write(rt2x00dev, WMM_CWMAX_CFG, reg);
  
  
  	/* Update EDCA registers */
  	/* Update EDCA registers */

+ 2 - 2
package/kernel/mac80211/patches/rt2x00/621-01-rt2x00-always-calibrate-MT7620-when-switching-channe.patch

@@ -42,7 +42,7 @@ Signed-off-by: Shiji Yang <[email protected]>
  	}
  	}
  	if (flags & IEEE80211_CONF_CHANGE_POWER)
  	if (flags & IEEE80211_CONF_CHANGE_POWER)
  		rt2800_config_txpower(rt2x00dev, libconf->conf->chandef.chan,
  		rt2800_config_txpower(rt2x00dev, libconf->conf->chandef.chan,
-@@ -10427,15 +10438,19 @@ static void rt2800_restore_rf_bbp_rt6352
+@@ -10421,15 +10432,19 @@ static void rt2800_restore_rf_bbp_rt6352
  	}
  	}
  }
  }
  
  
@@ -65,7 +65,7 @@ Signed-off-by: Shiji Yang <[email protected]>
  	rt2800_rf_self_txdc_cal(rt2x00dev);
  	rt2800_rf_self_txdc_cal(rt2x00dev);
  	rt2800_rxdcoc_calibration(rt2x00dev);
  	rt2800_rxdcoc_calibration(rt2x00dev);
  	rt2800_bw_filter_calibration(rt2x00dev, true);
  	rt2800_bw_filter_calibration(rt2x00dev, true);
-@@ -10766,9 +10781,6 @@ static void rt2800_init_rfcsr_6352(struc
+@@ -10760,9 +10775,6 @@ static void rt2800_init_rfcsr_6352(struc
  
  
  	rt2800_rfcsr_write_dccal(rt2x00dev, 5, 0x00);
  	rt2800_rfcsr_write_dccal(rt2x00dev, 5, 0x00);
  	rt2800_rfcsr_write_dccal(rt2x00dev, 17, 0x7C);
  	rt2800_rfcsr_write_dccal(rt2x00dev, 17, 0x7C);

+ 0 - 34
package/kernel/mac80211/patches/rt2x00/621-04-rt2x00-fix-register-operation-on-RXIQ-calibration.patch

@@ -24,37 +24,3 @@ Signed-off-by: Shiji Yang <[email protected]>
  	rt2800_bbp_write(rt2x00dev, 4, bbpval);
  	rt2800_bbp_write(rt2x00dev, 4, bbpval);
  
  
  	bbpval = rt2800_bbp_read(rt2x00dev, 21);
  	bbpval = rt2800_bbp_read(rt2x00dev, 21);
-@@ -8928,13 +8928,13 @@ static void rt2800_rxiq_calibration(stru
- 	for (ch_idx = 0; ch_idx < 2; ch_idx = ch_idx + 1) {
- 		if (ch_idx == 0) {
- 			rfval = rfb0r1 & (~0x3);
--			rfval = rfb0r1 | 0x1;
-+			rfval = rfval | 0x1;
- 			rt2800_rfcsr_write_bank(rt2x00dev, 0, 1, rfval);
- 			rfval = rfb0r2 & (~0x33);
--			rfval = rfb0r2 | 0x11;
-+			rfval = rfval | 0x11;
- 			rt2800_rfcsr_write_bank(rt2x00dev, 0, 2, rfval);
- 			rfval = rfb0r42 & (~0x50);
--			rfval = rfb0r42 | 0x10;
-+			rfval = rfval | 0x10;
- 			rt2800_rfcsr_write_bank(rt2x00dev, 0, 42, rfval);
- 
- 			rt2800_register_write(rt2x00dev, RF_CONTROL0, 0x00001006);
-@@ -8947,13 +8947,13 @@ static void rt2800_rxiq_calibration(stru
- 			rt2800_bbp_dcoc_write(rt2x00dev, 1, 0x00);
- 		} else {
- 			rfval = rfb0r1 & (~0x3);
--			rfval = rfb0r1 | 0x2;
-+			rfval = rfval | 0x2;
- 			rt2800_rfcsr_write_bank(rt2x00dev, 0, 1, rfval);
- 			rfval = rfb0r2 & (~0x33);
--			rfval = rfb0r2 | 0x22;
-+			rfval = rfval | 0x22;
- 			rt2800_rfcsr_write_bank(rt2x00dev, 0, 2, rfval);
- 			rfval = rfb0r42 & (~0x50);
--			rfval = rfb0r42 | 0x40;
-+			rfval = rfval | 0x40;
- 			rt2800_rfcsr_write_bank(rt2x00dev, 0, 42, rfval);
- 
- 			rt2800_register_write(rt2x00dev, RF_CONTROL0, 0x00002006);

+ 1 - 1
package/kernel/mac80211/patches/rt2x00/622-01-rt2x00-fix-RFCSR-register-init-values-for-RT5592.patch

@@ -77,7 +77,7 @@ Signed-off-by: Shiji Yang <[email protected]>
 +			rt2800_rfcsr_write(rt2x00dev, 59, 0x7C);
 +			rt2800_rfcsr_write(rt2x00dev, 59, 0x7C);
 +
 +
  			if (rf->channel <= 50) {
  			if (rf->channel <= 50) {
--				rt2800_rfcsr_write(rt2x00dev, 55, 0x06),
+-				rt2800_rfcsr_write(rt2x00dev, 55, 0x06);
 -				rt2800_rfcsr_write(rt2x00dev, 56, 0xD3);
 -				rt2800_rfcsr_write(rt2x00dev, 56, 0xD3);
 +				rt2800_rfcsr_write(rt2x00dev, 44, 0X32);
 +				rt2800_rfcsr_write(rt2x00dev, 44, 0X32);
 +				rt2800_rfcsr_write(rt2x00dev, 54, 0xF9);
 +				rt2800_rfcsr_write(rt2x00dev, 54, 0xF9);

+ 2 - 2
package/kernel/mac80211/patches/rt2x00/994-rt2x00-import-support-for-external-LNA-on-MT7620.patch

@@ -52,7 +52,7 @@ Signed-off-by: Daniel Golle <[email protected]>
  static const unsigned int rt2800_eeprom_map[EEPROM_WORD_COUNT] = {
  static const unsigned int rt2800_eeprom_map[EEPROM_WORD_COUNT] = {
  	[EEPROM_CHIP_ID]		= 0x0000,
  	[EEPROM_CHIP_ID]		= 0x0000,
  	[EEPROM_VERSION]		= 0x0001,
  	[EEPROM_VERSION]		= 0x0001,
-@@ -10428,8 +10446,10 @@ static void rt2800_restore_rf_bbp_rt6352
+@@ -10422,8 +10440,10 @@ static void rt2800_restore_rf_bbp_rt6352
  static void rt2800_calibration_rt6352_stage1(struct rt2x00_dev *rt2x00dev)
  static void rt2800_calibration_rt6352_stage1(struct rt2x00_dev *rt2x00dev)
  {
  {
  	if (rt2x00_has_cap_external_pa(rt2x00dev) ||
  	if (rt2x00_has_cap_external_pa(rt2x00dev) ||
@@ -64,7 +64,7 @@ Signed-off-by: Daniel Golle <[email protected]>
  
  
  	rt2800_r_calibration(rt2x00dev);
  	rt2800_r_calibration(rt2x00dev);
  }
  }
-@@ -10453,6 +10473,8 @@ static void rt2800_calibration_rt6352_st
+@@ -10447,6 +10467,8 @@ static void rt2800_calibration_rt6352_st
  	    !rt2x00_has_cap_external_lna_bg(rt2x00dev))
  	    !rt2x00_has_cap_external_lna_bg(rt2x00dev))
  		return;
  		return;
  
  

+ 5 - 5
package/kernel/mac80211/patches/rt2x00/996-rt2x00-mt7620-differentiate-based-on-SoC-CHIP_VER.patch

@@ -203,7 +203,7 @@
  
  
  	/* BBP for G band GLRT function (BBP_128 ~ BBP_221) */
  	/* BBP for G band GLRT function (BBP_128 ~ BBP_221) */
  	rt2800_bbp_glrt_write(rt2x00dev, 0, 0x00);
  	rt2800_bbp_glrt_write(rt2x00dev, 0, 0x00);
-@@ -10404,6 +10434,9 @@ static void rt2800_restore_rf_bbp_rt6352
+@@ -10398,6 +10428,9 @@ static void rt2800_restore_rf_bbp_rt6352
  		rt2800_register_write(rt2x00dev, RF_BYPASS3, 0x0);
  		rt2800_register_write(rt2x00dev, RF_BYPASS3, 0x0);
  	}
  	}
  
  
@@ -213,7 +213,7 @@
  	if (rt2x00_has_cap_external_lna_bg(rt2x00dev)) {
  	if (rt2x00_has_cap_external_lna_bg(rt2x00dev)) {
  		rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x16);
  		rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x16);
  		rt2800_rfcsr_write_chanreg(rt2x00dev, 17, 0x23);
  		rt2800_rfcsr_write_chanreg(rt2x00dev, 17, 0x23);
-@@ -10485,6 +10518,9 @@ static void rt2800_calibration_rt6352_st
+@@ -10479,6 +10512,9 @@ static void rt2800_calibration_rt6352_st
  		rt2800_register_write(rt2x00dev, RF_BYPASS3, reg);
  		rt2800_register_write(rt2x00dev, RF_BYPASS3, reg);
  	}
  	}
  
  
@@ -223,7 +223,7 @@
  	if (rt2x00_has_cap_external_lna_bg(rt2x00dev)) {
  	if (rt2x00_has_cap_external_lna_bg(rt2x00dev)) {
  		rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x66);
  		rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x66);
  		rt2800_rfcsr_write_chanreg(rt2x00dev, 17, 0x20);
  		rt2800_rfcsr_write_chanreg(rt2x00dev, 17, 0x20);
-@@ -10575,31 +10611,36 @@ static void rt2800_init_rfcsr_6352(struc
+@@ -10569,31 +10605,36 @@ static void rt2800_init_rfcsr_6352(struc
  	rt2800_rfcsr_write(rt2x00dev, 42, 0x5B);
  	rt2800_rfcsr_write(rt2x00dev, 42, 0x5B);
  	rt2800_rfcsr_write(rt2x00dev, 43, 0x00);
  	rt2800_rfcsr_write(rt2x00dev, 43, 0x00);
  
  
@@ -285,7 +285,7 @@
  
  
  	/* Initialize RF channel register to default value */
  	/* Initialize RF channel register to default value */
  	rt2800_rfcsr_write_chanreg(rt2x00dev, 0, 0x03);
  	rt2800_rfcsr_write_chanreg(rt2x00dev, 0, 0x03);
-@@ -10665,63 +10706,71 @@ static void rt2800_init_rfcsr_6352(struc
+@@ -10659,63 +10700,71 @@ static void rt2800_init_rfcsr_6352(struc
  
  
  	rt2800_rfcsr_write_bank(rt2x00dev, 6, 45, 0xC5);
  	rt2800_rfcsr_write_bank(rt2x00dev, 6, 45, 0xC5);
  
  
@@ -412,7 +412,7 @@
  
  
  	/* Initialize RF DC calibration register to default value */
  	/* Initialize RF DC calibration register to default value */
  	rt2800_rfcsr_write_dccal(rt2x00dev, 0, 0x47);
  	rt2800_rfcsr_write_dccal(rt2x00dev, 0, 0x47);
-@@ -10784,12 +10833,17 @@ static void rt2800_init_rfcsr_6352(struc
+@@ -10778,12 +10827,17 @@ static void rt2800_init_rfcsr_6352(struc
  	rt2800_rfcsr_write_dccal(rt2x00dev, 62, 0x00);
  	rt2800_rfcsr_write_dccal(rt2x00dev, 62, 0x00);
  	rt2800_rfcsr_write_dccal(rt2x00dev, 63, 0x00);
  	rt2800_rfcsr_write_dccal(rt2x00dev, 63, 0x00);
  
  

+ 0 - 42
package/kernel/mac80211/patches/rt2x00/997-rt2x00-change-remove-to-remove_new.patch

@@ -1,42 +0,0 @@
---- a/drivers/net/wireless/ralink/rt2x00/rt2800soc.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2800soc.c
-@@ -273,7 +273,7 @@ static struct platform_driver rt2800soc_
- 		.of_match_table	= rt2880_wmac_match,
- 	},
- 	.probe		= rt2800soc_probe,
--	.remove		= rt2x00soc_remove,
-+	.remove_new	= rt2x00soc_remove,
- 	.suspend	= rt2x00soc_suspend,
- 	.resume		= rt2x00soc_resume,
- };
---- a/drivers/net/wireless/ralink/rt2x00/rt2x00soc.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00soc.c
-@@ -124,7 +124,7 @@ exit_free_device:
- }
- EXPORT_SYMBOL_GPL(rt2x00soc_probe);
- 
--int rt2x00soc_remove(struct platform_device *pdev)
-+void rt2x00soc_remove(struct platform_device *pdev)
- {
- 	struct ieee80211_hw *hw = platform_get_drvdata(pdev);
- 	struct rt2x00_dev *rt2x00dev = hw->priv;
-@@ -135,8 +135,6 @@ int rt2x00soc_remove(struct platform_dev
- 	rt2x00lib_remove_dev(rt2x00dev);
- 	rt2x00soc_free_reg(rt2x00dev);
- 	ieee80211_free_hw(hw);
--
--	return 0;
- }
- EXPORT_SYMBOL_GPL(rt2x00soc_remove);
- 
---- a/drivers/net/wireless/ralink/rt2x00/rt2x00soc.h
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00soc.h
-@@ -17,7 +17,7 @@
-  * SoC driver handlers.
-  */
- int rt2x00soc_probe(struct platform_device *pdev, const struct rt2x00_ops *ops);
--int rt2x00soc_remove(struct platform_device *pdev);
-+void rt2x00soc_remove(struct platform_device *pdev);
- #ifdef CONFIG_PM
- int rt2x00soc_suspend(struct platform_device *pdev, pm_message_t state);
- int rt2x00soc_resume(struct platform_device *pdev);

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

@@ -1,374 +0,0 @@
-From 140403599b74839b0a57c5397b7e8579e5332364 Mon Sep 17 00:00:00 2001
-From: Bitterblue Smith <[email protected]>
-Date: Wed, 18 Sep 2024 01:53:55 +0300
-Subject: [PATCH] wifi: rtw88: Constify some arrays and structs
-
-These are never modified, so make them const:
-
-card_enable_flow_8703b
-card_disable_flow_8703b
-rtw8703b_ops
-
-rtw8723d_ops
-card_enable_flow_8723d
-card_disable_flow_8723d
-
-trans_carddis_to_cardemu_8821c
-trans_cardemu_to_act_8821c
-trans_act_to_cardemu_8821c
-trans_cardemu_to_carddis_8821c
-card_enable_flow_8821c
-card_disable_flow_8821c
-rtw8821c_dig
-page_table_8821c
-rqpn_table_8821c
-prioq_addrs_8821c
-rtw8821c_ops
-
-card_enable_flow_8822b
-card_disable_flow_8822b
-prioq_addrs_8822b
-rtw8822b_ops
-rtw8822b_edcca_th
-
-card_enable_flow_8822c
-card_disable_flow_8822c
-prioq_addrs_8822c
-rtw8822c_ops
-rtw8822c_edcca_th
-
-Signed-off-by: Bitterblue Smith <[email protected]>
-Acked-by: Ping-Ke Shih <[email protected]>
-Signed-off-by: Ping-Ke Shih <[email protected]>
-Link: https://patch.msgid.link/[email protected]
----
- drivers/net/wireless/realtek/rtw88/fw.c       |  2 +-
- drivers/net/wireless/realtek/rtw88/mac.c      |  4 ++--
- drivers/net/wireless/realtek/rtw88/main.h     |  8 +++----
- drivers/net/wireless/realtek/rtw88/phy.c      |  2 +-
- drivers/net/wireless/realtek/rtw88/rtw8703b.c |  6 ++---
- drivers/net/wireless/realtek/rtw88/rtw8723d.c |  6 ++---
- drivers/net/wireless/realtek/rtw88/rtw8821c.c | 22 +++++++++----------
- drivers/net/wireless/realtek/rtw88/rtw8822b.c | 10 ++++-----
- drivers/net/wireless/realtek/rtw88/rtw8822c.c | 10 ++++-----
- 9 files changed, 35 insertions(+), 35 deletions(-)
-
---- a/drivers/net/wireless/realtek/rtw88/fw.c
-+++ b/drivers/net/wireless/realtek/rtw88/fw.c
-@@ -267,7 +267,7 @@ static void rtw_fw_scan_result(struct rt
- static void rtw_fw_adaptivity_result(struct rtw_dev *rtwdev, u8 *payload,
- 				     u8 length)
- {
--	struct rtw_hw_reg_offset *edcca_th = rtwdev->chip->edcca_th;
-+	const struct rtw_hw_reg_offset *edcca_th = rtwdev->chip->edcca_th;
- 	struct rtw_c2h_adaptivity *result = (struct rtw_c2h_adaptivity *)payload;
- 
- 	rtw_dbg(rtwdev, RTW_DBG_ADAPTIVITY,
---- a/drivers/net/wireless/realtek/rtw88/mac.c
-+++ b/drivers/net/wireless/realtek/rtw88/mac.c
-@@ -228,7 +228,7 @@ static int rtw_sub_pwr_seq_parser(struct
- }
- 
- static int rtw_pwr_seq_parser(struct rtw_dev *rtwdev,
--			      const struct rtw_pwr_seq_cmd **cmd_seq)
-+			      const struct rtw_pwr_seq_cmd * const *cmd_seq)
- {
- 	u8 cut_mask;
- 	u8 intf_mask;
-@@ -271,7 +271,7 @@ static int rtw_pwr_seq_parser(struct rtw
- static int rtw_mac_power_switch(struct rtw_dev *rtwdev, bool pwr_on)
- {
- 	const struct rtw_chip_info *chip = rtwdev->chip;
--	const struct rtw_pwr_seq_cmd **pwr_seq;
-+	const struct rtw_pwr_seq_cmd * const *pwr_seq;
- 	u32 imr = 0;
- 	u8 rpwm;
- 	bool cur_pwr;
---- a/drivers/net/wireless/realtek/rtw88/main.h
-+++ b/drivers/net/wireless/realtek/rtw88/main.h
-@@ -1167,7 +1167,7 @@ enum rtw_fwcd_item {
- 
- /* hardware configuration for each IC */
- struct rtw_chip_info {
--	struct rtw_chip_ops *ops;
-+	const struct rtw_chip_ops *ops;
- 	u8 id;
- 
- 	const char *fw_name;
-@@ -1209,8 +1209,8 @@ struct rtw_chip_info {
- 
- 	/* init values */
- 	u8 sys_func_en;
--	const struct rtw_pwr_seq_cmd **pwr_on_seq;
--	const struct rtw_pwr_seq_cmd **pwr_off_seq;
-+	const struct rtw_pwr_seq_cmd * const *pwr_on_seq;
-+	const struct rtw_pwr_seq_cmd * const *pwr_off_seq;
- 	const struct rtw_rqpn *rqpn_table;
- 	const struct rtw_prioq_addrs *prioq_addrs;
- 	const struct rtw_page_table *page_table;
-@@ -1242,7 +1242,7 @@ struct rtw_chip_info {
- 	u8 bfer_su_max_num;
- 	u8 bfer_mu_max_num;
- 
--	struct rtw_hw_reg_offset *edcca_th;
-+	const struct rtw_hw_reg_offset *edcca_th;
- 	s8 l2h_th_ini_cs;
- 	s8 l2h_th_ini_ad;
- 
---- a/drivers/net/wireless/realtek/rtw88/phy.c
-+++ b/drivers/net/wireless/realtek/rtw88/phy.c
-@@ -123,7 +123,7 @@ static void rtw_phy_cck_pd_init(struct r
- 
- void rtw_phy_set_edcca_th(struct rtw_dev *rtwdev, u8 l2h, u8 h2l)
- {
--	struct rtw_hw_reg_offset *edcca_th = rtwdev->chip->edcca_th;
-+	const struct rtw_hw_reg_offset *edcca_th = rtwdev->chip->edcca_th;
- 
- 	rtw_write32_mask(rtwdev,
- 			 edcca_th[EDCCA_TH_L2H_IDX].hw_reg.addr,
---- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c
-+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
-@@ -481,14 +481,14 @@ static const struct rtw_pwr_seq_cmd tran
- 	{TRANS_SEQ_END},
- };
- 
--static const struct rtw_pwr_seq_cmd *card_enable_flow_8703b[] = {
-+static const struct rtw_pwr_seq_cmd * const card_enable_flow_8703b[] = {
- 	trans_pre_enable_8703b,
- 	trans_carddis_to_cardemu_8703b,
- 	trans_cardemu_to_act_8703b,
- 	NULL
- };
- 
--static const struct rtw_pwr_seq_cmd *card_disable_flow_8703b[] = {
-+static const struct rtw_pwr_seq_cmd * const card_disable_flow_8703b[] = {
- 	trans_act_to_lps_8703b,
- 	trans_act_to_reset_mcu_8703b,
- 	trans_act_to_cardemu_8703b,
-@@ -1941,7 +1941,7 @@ static const struct coex_tdma_para tdma_
- 	{ {0x61, 0x08, 0x03, 0x11, 0x11} },
- };
- 
--static struct rtw_chip_ops rtw8703b_ops = {
-+static const struct rtw_chip_ops rtw8703b_ops = {
- 	.mac_init		= rtw8723x_mac_init,
- 	.dump_fw_crash		= NULL,
- 	.shutdown		= NULL,
---- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c
-+++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
-@@ -1430,7 +1430,7 @@ static void rtw8723d_pwr_track(struct rt
- 	dm_info->pwr_trk_triggered = false;
- }
- 
--static struct rtw_chip_ops rtw8723d_ops = {
-+static const struct rtw_chip_ops rtw8723d_ops = {
- 	.phy_set_param		= rtw8723d_phy_set_param,
- 	.read_efuse		= rtw8723x_read_efuse,
- 	.query_rx_desc		= rtw8723d_query_rx_desc,
-@@ -1788,7 +1788,7 @@ static const struct rtw_pwr_seq_cmd tran
- 	 RTW_PWR_CMD_END, 0, 0},
- };
- 
--static const struct rtw_pwr_seq_cmd *card_enable_flow_8723d[] = {
-+static const struct rtw_pwr_seq_cmd * const card_enable_flow_8723d[] = {
- 	trans_carddis_to_cardemu_8723d,
- 	trans_cardemu_to_act_8723d,
- 	NULL
-@@ -2004,7 +2004,7 @@ static const struct rtw_pwr_seq_cmd tran
- 	 RTW_PWR_CMD_END, 0, 0},
- };
- 
--static const struct rtw_pwr_seq_cmd *card_disable_flow_8723d[] = {
-+static const struct rtw_pwr_seq_cmd * const card_disable_flow_8723d[] = {
- 	trans_act_to_lps_8723d,
- 	trans_act_to_pre_carddis_8723d,
- 	trans_act_to_cardemu_8723d,
---- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c
-+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
-@@ -1254,7 +1254,7 @@ static void rtw8821c_fill_txdesc_checksu
- 	fill_txdesc_checksum_common(txdesc, 16);
- }
- 
--static struct rtw_pwr_seq_cmd trans_carddis_to_cardemu_8821c[] = {
-+static const struct rtw_pwr_seq_cmd trans_carddis_to_cardemu_8821c[] = {
- 	{0x0086,
- 	 RTW_PWR_CUT_ALL_MSK,
- 	 RTW_PWR_INTF_SDIO_MSK,
-@@ -1292,7 +1292,7 @@ static struct rtw_pwr_seq_cmd trans_card
- 	 RTW_PWR_CMD_END, 0, 0},
- };
- 
--static struct rtw_pwr_seq_cmd trans_cardemu_to_act_8821c[] = {
-+static const struct rtw_pwr_seq_cmd trans_cardemu_to_act_8821c[] = {
- 	{0x0020,
- 	 RTW_PWR_CUT_ALL_MSK,
- 	 RTW_PWR_INTF_USB_MSK | RTW_PWR_INTF_SDIO_MSK,
-@@ -1396,7 +1396,7 @@ static struct rtw_pwr_seq_cmd trans_card
- 	 RTW_PWR_CMD_END, 0, 0},
- };
- 
--static struct rtw_pwr_seq_cmd trans_act_to_cardemu_8821c[] = {
-+static const struct rtw_pwr_seq_cmd trans_act_to_cardemu_8821c[] = {
- 	{0x0093,
- 	 RTW_PWR_CUT_ALL_MSK,
- 	 RTW_PWR_INTF_ALL_MSK,
-@@ -1454,7 +1454,7 @@ static struct rtw_pwr_seq_cmd trans_act_
- 	 RTW_PWR_CMD_END, 0, 0},
- };
- 
--static struct rtw_pwr_seq_cmd trans_cardemu_to_carddis_8821c[] = {
-+static const struct rtw_pwr_seq_cmd trans_cardemu_to_carddis_8821c[] = {
- 	{0x0007,
- 	 RTW_PWR_CUT_ALL_MSK,
- 	 RTW_PWR_INTF_USB_MSK | RTW_PWR_INTF_SDIO_MSK,
-@@ -1567,13 +1567,13 @@ static struct rtw_pwr_seq_cmd trans_card
- 	 RTW_PWR_CMD_END, 0, 0},
- };
- 
--static const struct rtw_pwr_seq_cmd *card_enable_flow_8821c[] = {
-+static const struct rtw_pwr_seq_cmd * const card_enable_flow_8821c[] = {
- 	trans_carddis_to_cardemu_8821c,
- 	trans_cardemu_to_act_8821c,
- 	NULL
- };
- 
--static const struct rtw_pwr_seq_cmd *card_disable_flow_8821c[] = {
-+static const struct rtw_pwr_seq_cmd * const card_disable_flow_8821c[] = {
- 	trans_act_to_cardemu_8821c,
- 	trans_cardemu_to_carddis_8821c,
- 	NULL
-@@ -1629,7 +1629,7 @@ static const struct rtw_rfe_def rtw8821c
- 	[6] = RTW_DEF_RFE(8821c, 0, 0),
- };
- 
--static struct rtw_hw_reg rtw8821c_dig[] = {
-+static const struct rtw_hw_reg rtw8821c_dig[] = {
- 	[0] = { .addr = 0xc50, .mask = 0x7f },
- };
- 
-@@ -1639,7 +1639,7 @@ static const struct rtw_ltecoex_addr rtw
- 	.rdata = LTECOEX_READ_DATA,
- };
- 
--static struct rtw_page_table page_table_8821c[] = {
-+static const struct rtw_page_table page_table_8821c[] = {
- 	/* not sure what [0] stands for */
- 	{16, 16, 16, 14, 1},
- 	{16, 16, 16, 14, 1},
-@@ -1648,7 +1648,7 @@ static struct rtw_page_table page_table_
- 	{16, 16, 16, 14, 1},
- };
- 
--static struct rtw_rqpn rqpn_table_8821c[] = {
-+static const struct rtw_rqpn rqpn_table_8821c[] = {
- 	/* not sure what [0] stands for */
- 	{RTW_DMA_MAPPING_NORMAL, RTW_DMA_MAPPING_NORMAL,
- 	 RTW_DMA_MAPPING_LOW, RTW_DMA_MAPPING_LOW,
-@@ -1667,7 +1667,7 @@ static struct rtw_rqpn rqpn_table_8821c[
- 	 RTW_DMA_MAPPING_EXTRA, RTW_DMA_MAPPING_HIGH},
- };
- 
--static struct rtw_prioq_addrs prioq_addrs_8821c = {
-+static const struct rtw_prioq_addrs prioq_addrs_8821c = {
- 	.prio[RTW_DMA_MAPPING_EXTRA] = {
- 		.rsvd = REG_FIFOPAGE_INFO_4, .avail = REG_FIFOPAGE_INFO_4 + 2,
- 	},
-@@ -1683,7 +1683,7 @@ static struct rtw_prioq_addrs prioq_addr
- 	.wsize = true,
- };
- 
--static struct rtw_chip_ops rtw8821c_ops = {
-+static const struct rtw_chip_ops rtw8821c_ops = {
- 	.phy_set_param		= rtw8821c_phy_set_param,
- 	.read_efuse		= rtw8821c_read_efuse,
- 	.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
- 	 RTW_PWR_CMD_END, 0, 0},
- };
- 
--static const struct rtw_pwr_seq_cmd *card_enable_flow_8822b[] = {
-+static const struct rtw_pwr_seq_cmd * const card_enable_flow_8822b[] = {
- 	trans_carddis_to_cardemu_8822b,
- 	trans_cardemu_to_act_8822b,
- 	NULL
- };
- 
--static const struct rtw_pwr_seq_cmd *card_disable_flow_8822b[] = {
-+static const struct rtw_pwr_seq_cmd * const card_disable_flow_8822b[] = {
- 	trans_act_to_cardemu_8822b,
- 	trans_cardemu_to_carddis_8822b,
- 	NULL
-@@ -2156,7 +2156,7 @@ static const struct rtw_rqpn rqpn_table_
- 	 RTW_DMA_MAPPING_EXTRA, RTW_DMA_MAPPING_HIGH},
- };
- 
--static struct rtw_prioq_addrs prioq_addrs_8822b = {
-+static const struct rtw_prioq_addrs prioq_addrs_8822b = {
- 	.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
- 	.wsize = true,
- };
- 
--static struct rtw_chip_ops rtw8822b_ops = {
-+static const struct rtw_chip_ops rtw8822b_ops = {
- 	.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_
- 	{0xc50,  MASKBYTE0, RTW_REG_DOMAIN_MAC8},
- };
- 
--static struct rtw_hw_reg_offset rtw8822b_edcca_th[] = {
-+static const struct rtw_hw_reg_offset rtw8822b_edcca_th[] = {
- 	[EDCCA_TH_L2H_IDX] = {{.addr = 0x8a4, .mask = MASKBYTE0}, .offset = 0},
- 	[EDCCA_TH_H2L_IDX] = {{.addr = 0x8a4, .mask = MASKBYTE1}, .offset = 0},
- };
---- 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
- 	 RTW_PWR_CMD_END, 0, 0},
- };
- 
--static const struct rtw_pwr_seq_cmd *card_enable_flow_8822c[] = {
-+static const struct rtw_pwr_seq_cmd * const card_enable_flow_8822c[] = {
- 	trans_carddis_to_cardemu_8822c,
- 	trans_cardemu_to_act_8822c,
- 	NULL
- };
- 
--static const struct rtw_pwr_seq_cmd *card_disable_flow_8822c[] = {
-+static const struct rtw_pwr_seq_cmd * const card_disable_flow_8822c[] = {
- 	trans_act_to_cardemu_8822c,
- 	trans_cardemu_to_carddis_8822c,
- 	NULL
-@@ -4972,7 +4972,7 @@ static const struct rtw_rqpn rqpn_table_
- 	 RTW_DMA_MAPPING_EXTRA, RTW_DMA_MAPPING_HIGH},
- };
- 
--static struct rtw_prioq_addrs prioq_addrs_8822c = {
-+static const struct rtw_prioq_addrs prioq_addrs_8822c = {
- 	.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
- 	.wsize = true,
- };
- 
--static struct rtw_chip_ops rtw8822c_ops = {
-+static const struct rtw_chip_ops rtw8822c_ops = {
- 	.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
- 	.pwrtrk_2g_ccka_p = rtw8822c_pwrtrk_2g_cck_a_p,
- };
- 
--static struct rtw_hw_reg_offset rtw8822c_edcca_th[] = {
-+static const struct rtw_hw_reg_offset rtw8822c_edcca_th[] = {
- 	[EDCCA_TH_L2H_IDX] = {
- 		{.addr = 0x84c, .mask = MASKBYTE2}, .offset = 0x80
- 	},

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

@@ -1,560 +0,0 @@
-From bbb6f9be7f99464d5ab7e2f321fa728d33eeec9a Mon Sep 17 00:00:00 2001
-From: Bitterblue Smith <[email protected]>
-Date: Fri, 20 Sep 2024 22:27:30 +0300
-Subject: [PATCH] wifi: rtw88: Parse the RX descriptor with a single function
-
-rtw8703b_query_rx_desc(), rtw8723d_query_rx_desc(),
-rtw8821c_query_rx_desc(), rtw8822b_query_rx_desc(), and
-rtw8822c_query_rx_desc() are almost identical, so replace them all with
-a single function, rtw_rx_query_rx_desc().
-
-Also, access the RX descriptor using a struct with __le32 members and
-le32_get_bits().
-
-Tested with RTL8811CU, RTL8811AU, and RTL8812AU.
-
-Signed-off-by: Bitterblue Smith <[email protected]>
-Tested-by: Ping-Ke Shih <[email protected]> # RTL8723DE and RTL8822CE
-Acked-by: Ping-Ke Shih <[email protected]>
-Signed-off-by: Ping-Ke Shih <[email protected]>
-Link: https://patch.msgid.link/[email protected]
----
- drivers/net/wireless/realtek/rtw88/main.h     |  5 +-
- drivers/net/wireless/realtek/rtw88/pci.c      |  2 +-
- drivers/net/wireless/realtek/rtw88/rtw8703b.c | 56 +--------------
- drivers/net/wireless/realtek/rtw88/rtw8723d.c | 43 +-----------
- drivers/net/wireless/realtek/rtw88/rtw8821c.c | 43 +-----------
- drivers/net/wireless/realtek/rtw88/rtw8822b.c | 43 +-----------
- drivers/net/wireless/realtek/rtw88/rtw8822c.c | 44 +-----------
- drivers/net/wireless/realtek/rtw88/rx.c       | 70 +++++++++++++++++--
- drivers/net/wireless/realtek/rtw88/rx.h       | 64 ++++++++---------
- drivers/net/wireless/realtek/rtw88/sdio.c     |  3 +-
- drivers/net/wireless/realtek/rtw88/usb.c      |  4 +-
- 11 files changed, 106 insertions(+), 271 deletions(-)
-
---- a/drivers/net/wireless/realtek/rtw88/main.h
-+++ b/drivers/net/wireless/realtek/rtw88/main.h
-@@ -848,9 +848,8 @@ struct rtw_chip_ops {
- 	void (*phy_set_param)(struct rtw_dev *rtwdev);
- 	void (*set_channel)(struct rtw_dev *rtwdev, u8 channel,
- 			    u8 bandwidth, u8 primary_chan_idx);
--	void (*query_rx_desc)(struct rtw_dev *rtwdev, u8 *rx_desc,
--			      struct rtw_rx_pkt_stat *pkt_stat,
--			      struct ieee80211_rx_status *rx_status);
-+	void (*query_phy_status)(struct rtw_dev *rtwdev, u8 *phy_status,
-+				 struct rtw_rx_pkt_stat *pkt_stat);
- 	u32 (*read_rf)(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path,
- 		       u32 addr, u32 mask);
- 	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
- 		dma_sync_single_for_cpu(rtwdev->dev, dma, RTK_PCI_RX_BUF_SIZE,
- 					DMA_FROM_DEVICE);
- 		rx_desc = skb->data;
--		chip->ops->query_rx_desc(rtwdev, rx_desc, &pkt_stat, &rx_status);
-+		rtw_rx_query_rx_desc(rtwdev, rx_desc, &pkt_stat, &rx_status);
- 
- 		/* offset from rx_desc to payload */
- 		pkt_offset = pkt_desc_sz + pkt_stat.drv_info_sz +
---- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c
-+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
-@@ -29,9 +29,6 @@
- #define TBTT_PROHIBIT_HOLD_TIME 0x80
- #define TBTT_PROHIBIT_HOLD_TIME_STOP_BCN 0x64
- 
--/* raw pkt_stat->drv_info_sz is in unit of 8-bytes */
--#define RX_DRV_INFO_SZ_UNIT_8703B 8
--
- #define TRANS_SEQ_END			\
- 	0xFFFF,				\
- 	RTW_PWR_CUT_ALL_MSK,		\
-@@ -1032,57 +1029,6 @@ static void query_phy_status(struct rtw_
- 		query_phy_status_ofdm(rtwdev, phy_status, pkt_stat);
- }
- 
--static void rtw8703b_query_rx_desc(struct rtw_dev *rtwdev, u8 *rx_desc,
--				   struct rtw_rx_pkt_stat *pkt_stat,
--				   struct ieee80211_rx_status *rx_status)
--{
--	struct ieee80211_hdr *hdr;
--	u32 desc_sz = rtwdev->chip->rx_pkt_desc_sz;
--	u8 *phy_status = NULL;
--
--	memset(pkt_stat, 0, sizeof(*pkt_stat));
--
--	pkt_stat->phy_status = GET_RX_DESC_PHYST(rx_desc);
--	pkt_stat->icv_err = GET_RX_DESC_ICV_ERR(rx_desc);
--	pkt_stat->crc_err = GET_RX_DESC_CRC32(rx_desc);
--	pkt_stat->decrypted = !GET_RX_DESC_SWDEC(rx_desc) &&
--			      GET_RX_DESC_ENC_TYPE(rx_desc) != RX_DESC_ENC_NONE;
--	pkt_stat->is_c2h = GET_RX_DESC_C2H(rx_desc);
--	pkt_stat->pkt_len = GET_RX_DESC_PKT_LEN(rx_desc);
--	pkt_stat->drv_info_sz = GET_RX_DESC_DRV_INFO_SIZE(rx_desc);
--	pkt_stat->shift = GET_RX_DESC_SHIFT(rx_desc);
--	pkt_stat->rate = GET_RX_DESC_RX_RATE(rx_desc);
--	pkt_stat->cam_id = GET_RX_DESC_MACID(rx_desc);
--	pkt_stat->ppdu_cnt = 0;
--	pkt_stat->tsf_low = GET_RX_DESC_TSFL(rx_desc);
--
--	pkt_stat->drv_info_sz *= RX_DRV_INFO_SZ_UNIT_8703B;
--
--	if (pkt_stat->is_c2h)
--		return;
--
--	hdr = (struct ieee80211_hdr *)(rx_desc + desc_sz + pkt_stat->shift +
--				       pkt_stat->drv_info_sz);
--
--	pkt_stat->bw = GET_RX_DESC_BW(rx_desc);
--
--	if (pkt_stat->phy_status) {
--		phy_status = rx_desc + desc_sz + pkt_stat->shift;
--		query_phy_status(rtwdev, phy_status, pkt_stat);
--	}
--
--	rtw_rx_fill_rx_status(rtwdev, pkt_stat, hdr, rx_status, phy_status);
--
--	/* Rtl8723cs driver checks for size < 14 or size > 8192 and
--	 * simply drops the packet. Maybe this should go into
--	 * rtw_rx_fill_rx_status()?
--	 */
--	if (pkt_stat->pkt_len == 0) {
--		rx_status->flag |= RX_FLAG_NO_PSDU;
--		rtw_dbg(rtwdev, RTW_DBG_RX, "zero length packet");
--	}
--}
--
- #define ADDA_ON_VAL_8703B 0x03c00014
- 
- static
-@@ -1948,7 +1894,7 @@ static const struct rtw_chip_ops rtw8703
- 	.read_efuse		= rtw8703b_read_efuse,
- 	.phy_set_param		= rtw8703b_phy_set_param,
- 	.set_channel		= rtw8703b_set_channel,
--	.query_rx_desc		= rtw8703b_query_rx_desc,
-+	.query_phy_status	= query_phy_status,
- 	.read_rf		= rtw_phy_read_rf_sipi,
- 	.write_rf		= rtw_phy_write_rf_reg_sipi,
- 	.set_tx_power_index	= rtw8723x_set_tx_power_index,
---- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c
-+++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
-@@ -227,47 +227,6 @@ static void query_phy_status(struct rtw_
- 	}
- }
- 
--static void rtw8723d_query_rx_desc(struct rtw_dev *rtwdev, u8 *rx_desc,
--				   struct rtw_rx_pkt_stat *pkt_stat,
--				   struct ieee80211_rx_status *rx_status)
--{
--	struct ieee80211_hdr *hdr;
--	u32 desc_sz = rtwdev->chip->rx_pkt_desc_sz;
--	u8 *phy_status = NULL;
--
--	memset(pkt_stat, 0, sizeof(*pkt_stat));
--
--	pkt_stat->phy_status = GET_RX_DESC_PHYST(rx_desc);
--	pkt_stat->icv_err = GET_RX_DESC_ICV_ERR(rx_desc);
--	pkt_stat->crc_err = GET_RX_DESC_CRC32(rx_desc);
--	pkt_stat->decrypted = !GET_RX_DESC_SWDEC(rx_desc) &&
--			      GET_RX_DESC_ENC_TYPE(rx_desc) != RX_DESC_ENC_NONE;
--	pkt_stat->is_c2h = GET_RX_DESC_C2H(rx_desc);
--	pkt_stat->pkt_len = GET_RX_DESC_PKT_LEN(rx_desc);
--	pkt_stat->drv_info_sz = GET_RX_DESC_DRV_INFO_SIZE(rx_desc);
--	pkt_stat->shift = GET_RX_DESC_SHIFT(rx_desc);
--	pkt_stat->rate = GET_RX_DESC_RX_RATE(rx_desc);
--	pkt_stat->cam_id = GET_RX_DESC_MACID(rx_desc);
--	pkt_stat->ppdu_cnt = 0;
--	pkt_stat->tsf_low = GET_RX_DESC_TSFL(rx_desc);
--
--	/* drv_info_sz is in unit of 8-bytes */
--	pkt_stat->drv_info_sz *= 8;
--
--	/* c2h cmd pkt's rx/phy status is not interested */
--	if (pkt_stat->is_c2h)
--		return;
--
--	hdr = (struct ieee80211_hdr *)(rx_desc + desc_sz + pkt_stat->shift +
--				       pkt_stat->drv_info_sz);
--	if (pkt_stat->phy_status) {
--		phy_status = rx_desc + desc_sz + pkt_stat->shift;
--		query_phy_status(rtwdev, phy_status, pkt_stat);
--	}
--
--	rtw_rx_fill_rx_status(rtwdev, pkt_stat, hdr, rx_status, phy_status);
--}
--
- static bool rtw8723d_check_spur_ov_thres(struct rtw_dev *rtwdev,
- 					 u8 channel, u32 thres)
- {
-@@ -1433,7 +1392,7 @@ static void rtw8723d_pwr_track(struct rt
- static const struct rtw_chip_ops rtw8723d_ops = {
- 	.phy_set_param		= rtw8723d_phy_set_param,
- 	.read_efuse		= rtw8723x_read_efuse,
--	.query_rx_desc		= rtw8723d_query_rx_desc,
-+	.query_phy_status	= query_phy_status,
- 	.set_channel		= rtw8723d_set_channel,
- 	.mac_init		= rtw8723x_mac_init,
- 	.shutdown		= rtw8723d_shutdown,
---- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c
-+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
-@@ -679,47 +679,6 @@ static void query_phy_status(struct rtw_
- 	}
- }
- 
--static void rtw8821c_query_rx_desc(struct rtw_dev *rtwdev, u8 *rx_desc,
--				   struct rtw_rx_pkt_stat *pkt_stat,
--				   struct ieee80211_rx_status *rx_status)
--{
--	struct ieee80211_hdr *hdr;
--	u32 desc_sz = rtwdev->chip->rx_pkt_desc_sz;
--	u8 *phy_status = NULL;
--
--	memset(pkt_stat, 0, sizeof(*pkt_stat));
--
--	pkt_stat->phy_status = GET_RX_DESC_PHYST(rx_desc);
--	pkt_stat->icv_err = GET_RX_DESC_ICV_ERR(rx_desc);
--	pkt_stat->crc_err = GET_RX_DESC_CRC32(rx_desc);
--	pkt_stat->decrypted = !GET_RX_DESC_SWDEC(rx_desc) &&
--			      GET_RX_DESC_ENC_TYPE(rx_desc) != RX_DESC_ENC_NONE;
--	pkt_stat->is_c2h = GET_RX_DESC_C2H(rx_desc);
--	pkt_stat->pkt_len = GET_RX_DESC_PKT_LEN(rx_desc);
--	pkt_stat->drv_info_sz = GET_RX_DESC_DRV_INFO_SIZE(rx_desc);
--	pkt_stat->shift = GET_RX_DESC_SHIFT(rx_desc);
--	pkt_stat->rate = GET_RX_DESC_RX_RATE(rx_desc);
--	pkt_stat->cam_id = GET_RX_DESC_MACID(rx_desc);
--	pkt_stat->ppdu_cnt = GET_RX_DESC_PPDU_CNT(rx_desc);
--	pkt_stat->tsf_low = GET_RX_DESC_TSFL(rx_desc);
--
--	/* drv_info_sz is in unit of 8-bytes */
--	pkt_stat->drv_info_sz *= 8;
--
--	/* c2h cmd pkt's rx/phy status is not interested */
--	if (pkt_stat->is_c2h)
--		return;
--
--	hdr = (struct ieee80211_hdr *)(rx_desc + desc_sz + pkt_stat->shift +
--				       pkt_stat->drv_info_sz);
--	if (pkt_stat->phy_status) {
--		phy_status = rx_desc + desc_sz + pkt_stat->shift;
--		query_phy_status(rtwdev, phy_status, pkt_stat);
--	}
--
--	rtw_rx_fill_rx_status(rtwdev, pkt_stat, hdr, rx_status, phy_status);
--}
--
- static void
- rtw8821c_set_tx_power_index_by_rate(struct rtw_dev *rtwdev, u8 path, u8 rs)
- {
-@@ -1686,7 +1645,7 @@ static const struct rtw_prioq_addrs prio
- static const struct rtw_chip_ops rtw8821c_ops = {
- 	.phy_set_param		= rtw8821c_phy_set_param,
- 	.read_efuse		= rtw8821c_read_efuse,
--	.query_rx_desc		= rtw8821c_query_rx_desc,
-+	.query_phy_status	= query_phy_status,
- 	.set_channel		= rtw8821c_set_channel,
- 	.mac_init		= rtw8821c_mac_init,
- 	.read_rf		= rtw_phy_read_rf,
---- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
-+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
-@@ -934,47 +934,6 @@ static void query_phy_status(struct rtw_
- 	}
- }
- 
--static void rtw8822b_query_rx_desc(struct rtw_dev *rtwdev, u8 *rx_desc,
--				   struct rtw_rx_pkt_stat *pkt_stat,
--				   struct ieee80211_rx_status *rx_status)
--{
--	struct ieee80211_hdr *hdr;
--	u32 desc_sz = rtwdev->chip->rx_pkt_desc_sz;
--	u8 *phy_status = NULL;
--
--	memset(pkt_stat, 0, sizeof(*pkt_stat));
--
--	pkt_stat->phy_status = GET_RX_DESC_PHYST(rx_desc);
--	pkt_stat->icv_err = GET_RX_DESC_ICV_ERR(rx_desc);
--	pkt_stat->crc_err = GET_RX_DESC_CRC32(rx_desc);
--	pkt_stat->decrypted = !GET_RX_DESC_SWDEC(rx_desc) &&
--			      GET_RX_DESC_ENC_TYPE(rx_desc) != RX_DESC_ENC_NONE;
--	pkt_stat->is_c2h = GET_RX_DESC_C2H(rx_desc);
--	pkt_stat->pkt_len = GET_RX_DESC_PKT_LEN(rx_desc);
--	pkt_stat->drv_info_sz = GET_RX_DESC_DRV_INFO_SIZE(rx_desc);
--	pkt_stat->shift = GET_RX_DESC_SHIFT(rx_desc);
--	pkt_stat->rate = GET_RX_DESC_RX_RATE(rx_desc);
--	pkt_stat->cam_id = GET_RX_DESC_MACID(rx_desc);
--	pkt_stat->ppdu_cnt = GET_RX_DESC_PPDU_CNT(rx_desc);
--	pkt_stat->tsf_low = GET_RX_DESC_TSFL(rx_desc);
--
--	/* drv_info_sz is in unit of 8-bytes */
--	pkt_stat->drv_info_sz *= 8;
--
--	/* c2h cmd pkt's rx/phy status is not interested */
--	if (pkt_stat->is_c2h)
--		return;
--
--	hdr = (struct ieee80211_hdr *)(rx_desc + desc_sz + pkt_stat->shift +
--				       pkt_stat->drv_info_sz);
--	if (pkt_stat->phy_status) {
--		phy_status = rx_desc + desc_sz + pkt_stat->shift;
--		query_phy_status(rtwdev, phy_status, pkt_stat);
--	}
--
--	rtw_rx_fill_rx_status(rtwdev, pkt_stat, hdr, rx_status, phy_status);
--}
--
- 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
- static const struct rtw_chip_ops rtw8822b_ops = {
- 	.phy_set_param		= rtw8822b_phy_set_param,
- 	.read_efuse		= rtw8822b_read_efuse,
--	.query_rx_desc		= rtw8822b_query_rx_desc,
-+	.query_phy_status	= query_phy_status,
- 	.set_channel		= rtw8822b_set_channel,
- 	.mac_init		= rtw8822b_mac_init,
- 	.read_rf		= rtw_phy_read_rf,
---- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
-+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
-@@ -2690,48 +2690,6 @@ static void query_phy_status(struct rtw_
- 	}
- }
- 
--static void rtw8822c_query_rx_desc(struct rtw_dev *rtwdev, u8 *rx_desc,
--				   struct rtw_rx_pkt_stat *pkt_stat,
--				   struct ieee80211_rx_status *rx_status)
--{
--	struct ieee80211_hdr *hdr;
--	u32 desc_sz = rtwdev->chip->rx_pkt_desc_sz;
--	u8 *phy_status = NULL;
--
--	memset(pkt_stat, 0, sizeof(*pkt_stat));
--
--	pkt_stat->phy_status = GET_RX_DESC_PHYST(rx_desc);
--	pkt_stat->icv_err = GET_RX_DESC_ICV_ERR(rx_desc);
--	pkt_stat->crc_err = GET_RX_DESC_CRC32(rx_desc);
--	pkt_stat->decrypted = !GET_RX_DESC_SWDEC(rx_desc) &&
--			      GET_RX_DESC_ENC_TYPE(rx_desc) != RX_DESC_ENC_NONE;
--	pkt_stat->is_c2h = GET_RX_DESC_C2H(rx_desc);
--	pkt_stat->pkt_len = GET_RX_DESC_PKT_LEN(rx_desc);
--	pkt_stat->drv_info_sz = GET_RX_DESC_DRV_INFO_SIZE(rx_desc);
--	pkt_stat->shift = GET_RX_DESC_SHIFT(rx_desc);
--	pkt_stat->rate = GET_RX_DESC_RX_RATE(rx_desc);
--	pkt_stat->cam_id = GET_RX_DESC_MACID(rx_desc);
--	pkt_stat->ppdu_cnt = GET_RX_DESC_PPDU_CNT(rx_desc);
--	pkt_stat->tsf_low = GET_RX_DESC_TSFL(rx_desc);
--
--	/* drv_info_sz is in unit of 8-bytes */
--	pkt_stat->drv_info_sz *= 8;
--
--	/* c2h cmd pkt's rx/phy status is not interested */
--	if (pkt_stat->is_c2h)
--		return;
--
--	hdr = (struct ieee80211_hdr *)(rx_desc + desc_sz + pkt_stat->shift +
--				       pkt_stat->drv_info_sz);
--	pkt_stat->hdr = hdr;
--	if (pkt_stat->phy_status) {
--		phy_status = rx_desc + desc_sz + pkt_stat->shift;
--		query_phy_status(rtwdev, phy_status, pkt_stat);
--	}
--
--	rtw_rx_fill_rx_status(rtwdev, pkt_stat, hdr, rx_status, phy_status);
--}
--
- 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
- static const struct rtw_chip_ops rtw8822c_ops = {
- 	.phy_set_param		= rtw8822c_phy_set_param,
- 	.read_efuse		= rtw8822c_read_efuse,
--	.query_rx_desc		= rtw8822c_query_rx_desc,
-+	.query_phy_status	= query_phy_status,
- 	.set_channel		= rtw8822c_set_channel,
- 	.mac_init		= rtw8822c_mac_init,
- 	.dump_fw_crash		= rtw8822c_dump_fw_crash,
---- a/drivers/net/wireless/realtek/rtw88/rx.c
-+++ b/drivers/net/wireless/realtek/rtw88/rx.c
-@@ -187,11 +187,10 @@ fill_rx_status:
- }
- EXPORT_SYMBOL(rtw_update_rx_freq_from_ie);
- 
--void rtw_rx_fill_rx_status(struct rtw_dev *rtwdev,
--			   struct rtw_rx_pkt_stat *pkt_stat,
--			   struct ieee80211_hdr *hdr,
--			   struct ieee80211_rx_status *rx_status,
--			   u8 *phy_status)
-+static void rtw_rx_fill_rx_status(struct rtw_dev *rtwdev,
-+				  struct rtw_rx_pkt_stat *pkt_stat,
-+				  struct ieee80211_hdr *hdr,
-+				  struct ieee80211_rx_status *rx_status)
- {
- 	struct ieee80211_hw *hw = rtwdev->hw;
- 	u8 path;
-@@ -242,5 +241,64 @@ void rtw_rx_fill_rx_status(struct rtw_de
- 	}
- 
- 	rtw_rx_addr_match(rtwdev, pkt_stat, hdr);
-+
-+	/* Rtl8723cs driver checks for size < 14 or size > 8192 and
-+	 * simply drops the packet.
-+	 */
-+	if (rtwdev->chip->id == RTW_CHIP_TYPE_8703B && pkt_stat->pkt_len == 0) {
-+		rx_status->flag |= RX_FLAG_NO_PSDU;
-+		rtw_dbg(rtwdev, RTW_DBG_RX, "zero length packet");
-+	}
-+}
-+
-+void rtw_rx_query_rx_desc(struct rtw_dev *rtwdev, void *rx_desc8,
-+			  struct rtw_rx_pkt_stat *pkt_stat,
-+			  struct ieee80211_rx_status *rx_status)
-+{
-+	u32 desc_sz = rtwdev->chip->rx_pkt_desc_sz;
-+	struct rtw_rx_desc *rx_desc = rx_desc8;
-+	struct ieee80211_hdr *hdr;
-+	u32 enc_type, swdec;
-+	void *phy_status;
-+
-+	memset(pkt_stat, 0, sizeof(*pkt_stat));
-+
-+	pkt_stat->pkt_len = le32_get_bits(rx_desc->w0, RTW_RX_DESC_W0_PKT_LEN);
-+	pkt_stat->crc_err = le32_get_bits(rx_desc->w0, RTW_RX_DESC_W0_CRC32);
-+	pkt_stat->icv_err = le32_get_bits(rx_desc->w0, RTW_RX_DESC_W0_ICV_ERR);
-+	pkt_stat->drv_info_sz = le32_get_bits(rx_desc->w0,
-+					      RTW_RX_DESC_W0_DRV_INFO_SIZE);
-+	enc_type = le32_get_bits(rx_desc->w0, RTW_RX_DESC_W0_ENC_TYPE);
-+	pkt_stat->shift = le32_get_bits(rx_desc->w0, RTW_RX_DESC_W0_SHIFT);
-+	pkt_stat->phy_status = le32_get_bits(rx_desc->w0, RTW_RX_DESC_W0_PHYST);
-+	swdec = le32_get_bits(rx_desc->w0, RTW_RX_DESC_W0_SWDEC);
-+	pkt_stat->decrypted = !swdec && enc_type != RX_DESC_ENC_NONE;
-+
-+	pkt_stat->cam_id = le32_get_bits(rx_desc->w1, RTW_RX_DESC_W1_MACID);
-+
-+	pkt_stat->is_c2h = le32_get_bits(rx_desc->w2, RTW_RX_DESC_W2_C2H);
-+	pkt_stat->ppdu_cnt = le32_get_bits(rx_desc->w2, RTW_RX_DESC_W2_PPDU_CNT);
-+
-+	pkt_stat->rate = le32_get_bits(rx_desc->w3, RTW_RX_DESC_W3_RX_RATE);
-+
-+	pkt_stat->bw = le32_get_bits(rx_desc->w4, RTW_RX_DESC_W4_BW);
-+
-+	pkt_stat->tsf_low = le32_get_bits(rx_desc->w5, RTW_RX_DESC_W5_TSFL);
-+
-+	/* drv_info_sz is in unit of 8-bytes */
-+	pkt_stat->drv_info_sz *= 8;
-+
-+	/* c2h cmd pkt's rx/phy status is not interested */
-+	if (pkt_stat->is_c2h)
-+		return;
-+
-+	phy_status = rx_desc8 + desc_sz + pkt_stat->shift;
-+	hdr = phy_status + pkt_stat->drv_info_sz;
-+	pkt_stat->hdr = hdr;
-+
-+	if (pkt_stat->phy_status)
-+		rtwdev->chip->ops->query_phy_status(rtwdev, phy_status, pkt_stat);
-+
-+	rtw_rx_fill_rx_status(rtwdev, pkt_stat, hdr, rx_status);
- }
--EXPORT_SYMBOL(rtw_rx_fill_rx_status);
-+EXPORT_SYMBOL(rtw_rx_query_rx_desc);
---- a/drivers/net/wireless/realtek/rtw88/rx.h
-+++ b/drivers/net/wireless/realtek/rtw88/rx.h
-@@ -14,42 +14,40 @@ enum rtw_rx_desc_enc {
- 	RX_DESC_ENC_WEP104	= 5,
- };
- 
--#define GET_RX_DESC_PHYST(rxdesc)                                              \
--	le32_get_bits(*((__le32 *)(rxdesc) + 0x00), BIT(26))
--#define GET_RX_DESC_ICV_ERR(rxdesc)                                            \
--	le32_get_bits(*((__le32 *)(rxdesc) + 0x00), BIT(15))
--#define GET_RX_DESC_CRC32(rxdesc)                                              \
--	le32_get_bits(*((__le32 *)(rxdesc) + 0x00), BIT(14))
--#define GET_RX_DESC_SWDEC(rxdesc)                                              \
--	le32_get_bits(*((__le32 *)(rxdesc) + 0x00), BIT(27))
--#define GET_RX_DESC_C2H(rxdesc)                                                \
--	le32_get_bits(*((__le32 *)(rxdesc) + 0x02), BIT(28))
--#define GET_RX_DESC_PKT_LEN(rxdesc)                                            \
--	le32_get_bits(*((__le32 *)(rxdesc) + 0x00), GENMASK(13, 0))
--#define GET_RX_DESC_DRV_INFO_SIZE(rxdesc)                                      \
--	le32_get_bits(*((__le32 *)(rxdesc) + 0x00), GENMASK(19, 16))
--#define GET_RX_DESC_SHIFT(rxdesc)                                              \
--	le32_get_bits(*((__le32 *)(rxdesc) + 0x00), GENMASK(25, 24))
--#define GET_RX_DESC_ENC_TYPE(rxdesc)                                           \
--	le32_get_bits(*((__le32 *)(rxdesc) + 0x00), GENMASK(22, 20))
--#define GET_RX_DESC_RX_RATE(rxdesc)                                            \
--	le32_get_bits(*((__le32 *)(rxdesc) + 0x03), GENMASK(6, 0))
--#define GET_RX_DESC_MACID(rxdesc)                                              \
--	le32_get_bits(*((__le32 *)(rxdesc) + 0x01), GENMASK(6, 0))
--#define GET_RX_DESC_PPDU_CNT(rxdesc)                                           \
--	le32_get_bits(*((__le32 *)(rxdesc) + 0x02), GENMASK(30, 29))
--#define GET_RX_DESC_TSFL(rxdesc)                                               \
--	le32_get_bits(*((__le32 *)(rxdesc) + 0x05), GENMASK(31, 0))
--#define GET_RX_DESC_BW(rxdesc)                                                 \
--	(le32_get_bits(*((__le32 *)(rxdesc) + 0x04), GENMASK(5, 4)))
-+struct rtw_rx_desc {
-+	__le32 w0;
-+	__le32 w1;
-+	__le32 w2;
-+	__le32 w3;
-+	__le32 w4;
-+	__le32 w5;
-+} __packed;
-+
-+#define RTW_RX_DESC_W0_PKT_LEN		GENMASK(13, 0)
-+#define RTW_RX_DESC_W0_CRC32		BIT(14)
-+#define RTW_RX_DESC_W0_ICV_ERR		BIT(15)
-+#define RTW_RX_DESC_W0_DRV_INFO_SIZE	GENMASK(19, 16)
-+#define RTW_RX_DESC_W0_ENC_TYPE		GENMASK(22, 20)
-+#define RTW_RX_DESC_W0_SHIFT		GENMASK(25, 24)
-+#define RTW_RX_DESC_W0_PHYST		BIT(26)
-+#define RTW_RX_DESC_W0_SWDEC		BIT(27)
-+
-+#define RTW_RX_DESC_W1_MACID		GENMASK(6, 0)
-+
-+#define RTW_RX_DESC_W2_C2H		BIT(28)
-+#define RTW_RX_DESC_W2_PPDU_CNT		GENMASK(30, 29)
-+
-+#define RTW_RX_DESC_W3_RX_RATE		GENMASK(6, 0)
-+
-+#define RTW_RX_DESC_W4_BW		GENMASK(5, 4)
-+
-+#define RTW_RX_DESC_W5_TSFL		GENMASK(31, 0)
- 
- void rtw_rx_stats(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,
- 		  struct sk_buff *skb);
--void rtw_rx_fill_rx_status(struct rtw_dev *rtwdev,
--			   struct rtw_rx_pkt_stat *pkt_stat,
--			   struct ieee80211_hdr *hdr,
--			   struct ieee80211_rx_status *rx_status,
--			   u8 *phy_status);
-+void rtw_rx_query_rx_desc(struct rtw_dev *rtwdev, void *rx_desc8,
-+			  struct rtw_rx_pkt_stat *pkt_stat,
-+			  struct ieee80211_rx_status *rx_status);
- void rtw_update_rx_freq_from_ie(struct rtw_dev *rtwdev, struct sk_buff *skb,
- 				struct ieee80211_rx_status *rx_status,
- 				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
- 
- 	while (true) {
- 		rx_desc = skb->data;
--		chip->ops->query_rx_desc(rtwdev, rx_desc, &pkt_stat,
--					 &rx_status);
-+		rtw_rx_query_rx_desc(rtwdev, rx_desc, &pkt_stat, &rx_status);
- 		pkt_offset = pkt_desc_sz + pkt_stat.drv_info_sz +
- 			     pkt_stat.shift;
- 
---- 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
- 
- 		do {
- 			rx_desc = skb->data;
--			chip->ops->query_rx_desc(rtwdev, rx_desc, &pkt_stat,
--						 &rx_status);
-+			rtw_rx_query_rx_desc(rtwdev, rx_desc, &pkt_stat,
-+					     &rx_status);
- 			pkt_offset = pkt_desc_sz + pkt_stat.drv_info_sz +
- 				     pkt_stat.shift;
- 

+ 0 - 34
package/kernel/mac80211/patches/rtl/022-v6.13-wifi-rtw88-Refactor-looping-in-rtw_phy_store_tx_powe.patch

@@ -1,34 +0,0 @@
-From 7846f0b63562f4db45f712cc7dab091985baf07b Mon Sep 17 00:00:00 2001
-From: Mohammed Anees <[email protected]>
-Date: Thu, 17 Oct 2024 13:36:38 +0530
-Subject: [PATCH] wifi: rtw88: Refactor looping in
- rtw_phy_store_tx_power_by_rate
-
-The previous implementation included an unnecessary else
-condition paired with a continue statement. Since a check
-is already performed to determine if the band is either
-2G or 5G, the else condition will never be triggered.
-We can remove this check.
-
-Signed-off-by: Mohammed Anees <[email protected]>
-Acked-by: Ping-Ke Shih <[email protected]>
-Signed-off-by: Ping-Ke Shih <[email protected]>
-Link: https://patch.msgid.link/[email protected]
----
- drivers/net/wireless/realtek/rtw88/phy.c | 4 +---
- 1 file changed, 1 insertion(+), 3 deletions(-)
-
---- a/drivers/net/wireless/realtek/rtw88/phy.c
-+++ b/drivers/net/wireless/realtek/rtw88/phy.c
-@@ -1470,10 +1470,8 @@ static void rtw_phy_store_tx_power_by_ra
- 		rate = rates[i];
- 		if (band == PHY_BAND_2G)
- 			hal->tx_pwr_by_rate_offset_2g[rfpath][rate] = offset;
--		else if (band == PHY_BAND_5G)
--			hal->tx_pwr_by_rate_offset_5g[rfpath][rate] = offset;
- 		else
--			continue;
-+			hal->tx_pwr_by_rate_offset_5g[rfpath][rate] = offset;
- 	}
- }
- 

+ 0 - 39
package/kernel/mac80211/patches/rtl/023-v6.13-wifi-rtw88-Report-the-signal-strength-only-if-it-s-k.patch

@@ -1,39 +0,0 @@
-From 47f754b3f838205f3b25c4839f74801d180995bf Mon Sep 17 00:00:00 2001
-From: Bitterblue Smith <[email protected]>
-Date: Tue, 22 Oct 2024 20:20:26 +0300
-Subject: [PATCH] wifi: rtw88: Report the signal strength only if it's known
-
-RTL8811CU doesn't report the signal strength for many (any?) data
-frames. When the signal strength is not known, set
-RX_FLAG_NO_SIGNAL_VAL in order to avoid reporting a signal
-strength of 0.
-
-Signed-off-by: Bitterblue Smith <[email protected]>
-Acked-by: Ping-Ke Shih <[email protected]>
-Signed-off-by: Ping-Ke Shih <[email protected]>
-Link: https://patch.msgid.link/[email protected]
----
- drivers/net/wireless/realtek/rtw88/rx.c | 12 ++++++++----
- 1 file changed, 8 insertions(+), 4 deletions(-)
-
---- a/drivers/net/wireless/realtek/rtw88/rx.c
-+++ b/drivers/net/wireless/realtek/rtw88/rx.c
-@@ -234,10 +234,14 @@ static void rtw_rx_fill_rx_status(struct
- 	else
- 		rx_status->bw = RATE_INFO_BW_20;
- 
--	rx_status->signal = pkt_stat->signal_power;
--	for (path = 0; path < rtwdev->hal.rf_path_num; path++) {
--		rx_status->chains |= BIT(path);
--		rx_status->chain_signal[path] = pkt_stat->rx_power[path];
-+	if (pkt_stat->phy_status) {
-+		rx_status->signal = pkt_stat->signal_power;
-+		for (path = 0; path < rtwdev->hal.rf_path_num; path++) {
-+			rx_status->chains |= BIT(path);
-+			rx_status->chain_signal[path] = pkt_stat->rx_power[path];
-+		}
-+	} else {
-+		rx_status->flag |= RX_FLAG_NO_SIGNAL_VAL;
- 	}
- 
- 	rtw_rx_addr_match(rtwdev, pkt_stat, hdr);

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

@@ -1,490 +0,0 @@
-From d12722830ea4f562e91586927ec21b64d0369544 Mon Sep 17 00:00:00 2001
-From: Bitterblue Smith <[email protected]>
-Date: Wed, 23 Oct 2024 17:00:59 +0300
-Subject: [PATCH] wifi: rtw88: Add some definitions for RTL8821AU/RTL8812AU
-
-Add 8821A and 8812A chip type enums.
-
-Add cck_high_power member to struct rtw_hal. This will be used to
-calculate the RX signal strength of RTL8812AU.
-
-Add various register definitions which will be used by the new drivers.
-
-Move some existing register definitions from rtw8821c.h and rtw8822b.h.
-They were duplicated in those headers and will also be used by the new
-drivers.
-
-Signed-off-by: Bitterblue Smith <[email protected]>
-Signed-off-by: Ping-Ke Shih <[email protected]>
-Link: https://patch.msgid.link/[email protected]
----
- drivers/net/wireless/realtek/rtw88/main.h     |   3 +
- drivers/net/wireless/realtek/rtw88/reg.h      | 174 ++++++++++++++++++
- drivers/net/wireless/realtek/rtw88/rtw8821c.h |  24 ---
- drivers/net/wireless/realtek/rtw88/rtw8822b.h |  12 --
- 4 files changed, 177 insertions(+), 36 deletions(-)
-
---- a/drivers/net/wireless/realtek/rtw88/main.h
-+++ b/drivers/net/wireless/realtek/rtw88/main.h
-@@ -189,6 +189,8 @@ enum rtw_chip_type {
- 	RTW_CHIP_TYPE_8723D,
- 	RTW_CHIP_TYPE_8821C,
- 	RTW_CHIP_TYPE_8703B,
-+	RTW_CHIP_TYPE_8821A,
-+	RTW_CHIP_TYPE_8812A,
- };
- 
- enum rtw_tx_queue_type {
-@@ -1934,6 +1936,7 @@ struct rtw_hal {
- 	u32 antenna_rx;
- 	u8 bfee_sts_cap;
- 	bool txrx_1ss;
-+	bool cck_high_power;
- 
- 	/* protect tx power section */
- 	struct mutex tx_power_mutex;
---- a/drivers/net/wireless/realtek/rtw88/reg.h
-+++ b/drivers/net/wireless/realtek/rtw88/reg.h
-@@ -9,6 +9,7 @@
- #define BIT_FEN_EN_25_1		BIT(13)
- #define BIT_FEN_ELDR		BIT(12)
- #define BIT_FEN_CPUEN		BIT(2)
-+#define BIT_FEN_USBA		BIT(2)
- #define BIT_FEN_BB_GLB_RST	BIT(1)
- #define BIT_FEN_BB_RSTB		BIT(0)
- #define BIT_R_DIS_PRST		BIT(6)
-@@ -16,6 +17,10 @@
- #define REG_SYS_PW_CTRL		0x0004
- #define BIT_PFM_WOWL		BIT(3)
- #define BIT_APFM_OFFMAC		BIT(9)
-+#define REG_APS_FSMCO		0x0004
-+#define APS_FSMCO_MAC_ENABLE	BIT(8)
-+#define APS_FSMCO_MAC_OFF	BIT(9)
-+#define APS_FSMCO_HW_POWERDOWN	BIT(15)
- #define REG_SYS_CLK_CTRL	0x0008
- #define BIT_CPU_CLK_EN		BIT(14)
- 
-@@ -58,6 +63,8 @@
- #define BIT_SHIFT_LDO25_VOLTAGE	4
- #define BIT_LDO25_EN		BIT(7)
- 
-+#define REG_ACLK_MON		0x3e
-+
- #define REG_GPIO_MUXCFG		0x0040
- #define BIT_FSPI_EN		BIT(19)
- #define BIT_EN_SIC		BIT(12)
-@@ -90,6 +97,8 @@
- #define BIT_USB_SUS_DIS		BIT(8)
- #define BIT_SDIO_PAD_E5		BIT(18)
- 
-+#define REG_RF_B_CTRL		0x76
-+
- #define REG_AFE_CTRL_4		0x0078
- #define BIT_CK320M_AFE_EN	BIT(4)
- #define BIT_EN_SYN		BIT(15)
-@@ -134,6 +143,11 @@
- #define REG_PMC_DBG_CTRL1	0xa8
- #define BITS_PMC_BT_IQK_STS	GENMASK(22, 21)
- 
-+#define REG_HIMR0		0xb0
-+#define REG_HISR0		0xb4
-+#define REG_HIMR1		0xb8
-+#define REG_HISR1		0xbc
-+
- #define REG_PAD_CTRL2		0x00C4
- #define BIT_RSM_EN_V1		BIT(16)
- #define BIT_NO_PDN_CHIPOFF_V1	BIT(17)
-@@ -185,6 +199,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)
-+#define REG_PBP			0x104
-+#define PBP_RX_MASK		0x0f
-+#define PBP_TX_MASK		0xf0
-+#define PBP_64			0x0
-+#define PBP_128			0x1
-+#define PBP_256			0x2
-+#define PBP_512			0x3
-+#define PBP_1024		0x4
-+
- #define BIT_SHIFT_TXDMA_VOQ_MAP	4
- #define BIT_MASK_TXDMA_VOQ_MAP	0x3
- #define BIT_TXDMA_VOQ_MAP(x)                                                   \
-@@ -256,6 +279,8 @@
- #define REG_HMEBOX1		0x01D4
- #define REG_HMEBOX2		0x01D8
- #define REG_HMEBOX3		0x01DC
-+#define REG_LLT_INIT		0x01E0
-+#define BIT_LLT_WRITE_ACCESS	BIT(30)
- #define REG_HMEBOX0_EX		0x01F0
- #define REG_HMEBOX1_EX		0x01F4
- #define REG_HMEBOX2_EX		0x01F8
-@@ -298,6 +323,7 @@
- 
- #define REG_AUTO_LLT		0x0224
- #define BIT_AUTO_INIT_LLT	BIT(16)
-+#define REG_DWBCN1_CTRL		0x0228
- #define REG_RQPN_CTRL_1		0x0228
- #define REG_RQPN_CTRL_2		0x022C
- #define BIT_LD_RQPN		BIT(31)
-@@ -329,6 +355,7 @@
- #define BIT_DMA_BURST_SIZE_1024	0
- 
- #define REG_RXPKTNUM		0x02B0
-+#define REG_EARLY_MODE_CONTROL	0x02BC
- 
- #define REG_INT_MIG		0x0304
- #define REG_HCI_MIX_CFG		0x03FC
-@@ -336,6 +363,7 @@
- 
- #define REG_BCNQ_INFO		0x0418
- #define BIT_MGQ_CPU_EMPTY	BIT(24)
-+#define REG_TXPKT_EMPTY		0x041A
- #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 @@
- #define REG_AMPDU_MAX_TIME_V1	0x0455
- #define REG_BCNQ1_BDNY_V1	0x0456
- #define REG_AMPDU_MAX_TIME	0x0456
-+#define REG_AMPDU_MAX_LENGTH	0x0458
- #define REG_WMAC_LBK_BF_HD	0x045D
- #define REG_TX_HANG_CTRL	0x045E
- #define BIT_EN_GNT_BT_AWAKE	BIT(3)
- #define BIT_EN_EOF_V1		BIT(2)
-+#define REG_FAST_EDCA_CTRL	0x0460
- #define REG_DATA_SC		0x0483
- #define REG_ARFR2_V1		0x048C
- #define REG_ARFRH2_V1		0x0490
-@@ -390,6 +420,8 @@
- #define REG_PRECNT_CTRL		0x04E5
- #define BIT_BTCCA_CTRL		(BIT(0) | BIT(1))
- #define BIT_EN_PRECNT		BIT(11)
-+#define REG_TX_RPT_CTRL		0x04EC
-+#define REG_TX_RPT_TIME		0x04F0
- #define REG_DUMMY_PAGE4_V1	0x04FC
- 
- #define REG_EDCA_VO_PARAM	0x0500
-@@ -400,6 +432,7 @@
- #define BIT_MASK_CWMAX		GENMASK(15, 12)
- #define BIT_MASK_CWMIN		GENMASK(11, 8)
- #define BIT_MASK_AIFS		GENMASK(7, 0)
-+#define REG_BCNTCFG		0x0510
- #define REG_PIFS		0x0512
- #define REG_SIFS		0x0514
- #define BIT_SHIFT_SIFS_OFDM_CTX	8
-@@ -526,6 +559,8 @@
- #define REG_BT_COEX_V2		0x0762
- #define BIT_GNT_BT_POLARITY	BIT(12)
- #define BIT_LTE_COEX_EN		BIT(7)
-+#define REG_GNT_BT		0x0765
-+#define BIT_PTA_SW_CTL		GENMASK(4, 3)
- #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 @@
- #define REG_FPGA0_RFMOD		0x0800
- #define BIT_CCKEN		BIT(24)
- #define BIT_OFDMEN		BIT(25)
-+#define REG_CCK_RPT_FORMAT	0x0804
-+#define BIT_CCK_RPT_FORMAT	BIT(16)
-+#define REG_RXPSEL		0x0808
-+#define BIT_RX_PSEL_RST		(BIT(28) | BIT(29))
-+#define REG_TXPSEL		0x080C
- #define REG_RX_GAIN_EN		0x081c
-+#define REG_CCASEL		0x082C
-+#define REG_PDMFTH		0x0830
-+#define REG_BWINDICATION	0x0834
-+#define REG_CCA2ND		0x0838
-+#define REG_L1PKTH		0x0848
-+#define REG_CLKTRK		0x0860
-+#define REG_ADCCLK		0x08AC
-+#define REG_HSSI_READ		0x08B0
-+#define REG_FPGA0_XCD_RF_PARA	0x08B4
-+#define REG_RX_MCS_LIMIT	0x08BC
-+#define REG_ADC160		0x08C4
-+#define REG_ANTSEL_SW		0x0900
-+#define REG_DAC_RSTB		0x090c
-+#define REG_SINGLE_TONE_CONT_TX	0x0914
- 
- #define REG_RFE_CTRL_E		0x0974
- #define REG_2ND_CCA_CTRL	0x0976
-+#define REG_IQK_COM00		0x0978
-+#define REG_IQK_COM32		0x097c
-+#define REG_IQK_COM64		0x0980
-+#define REG_IQK_COM96		0x0984
-+
-+#define REG_FAS			0x09a4
-+#define REG_RXSB		0x0a00
-+#define REG_CCK_RX		0x0a04
-+#define REG_CCK_PD_TH		0x0a0a
- 
- #define REG_CCK0_FAREPORT	0xa2c
- #define BIT_CCK0_2RX		BIT(18)
- #define BIT_CCK0_MRC		BIT(22)
-+#define REG_FA_CCK		0x0a5c
- 
- #define REG_DIS_DPD		0x0a70
- #define DIS_DPD_MASK		GENMASK(9, 0)
-@@ -566,13 +630,109 @@
- #define DIS_DPD_RATEVHT2SS_MCS1	BIT(9)
- #define DIS_DPD_RATEALL		GENMASK(9, 0)
- 
-+#define REG_CNTRST		0x0b58
-+
-+#define REG_3WIRE_SWA		0x0c00
-+#define REG_RX_IQC_AB_A		0x0c10
-+#define REG_TXSCALE_A		0x0c1c
-+#define BB_SWING_MASK		GENMASK(31, 21)
-+#define REG_TX_AGC_A_CCK_11_CCK_1		0xc20
-+#define REG_TX_AGC_A_OFDM18_OFDM6		0xc24
-+#define REG_TX_AGC_A_OFDM54_OFDM24		0xc28
-+#define REG_TX_AGC_A_MCS3_MCS0			0xc2c
-+#define REG_TX_AGC_A_MCS7_MCS4			0xc30
-+#define REG_TX_AGC_A_MCS11_MCS8			0xc34
-+#define REG_TX_AGC_A_MCS15_MCS12		0xc38
-+#define REG_TX_AGC_A_NSS1_INDEX3_NSS1_INDEX0	0xc3c
-+#define REG_TX_AGC_A_NSS1_INDEX7_NSS1_INDEX4	0xc40
-+#define REG_TX_AGC_A_NSS2_INDEX1_NSS1_INDEX8	0xc44
-+#define REG_TX_AGC_A_NSS2_INDEX5_NSS2_INDEX2	0xc48
-+#define REG_TX_AGC_A_NSS2_INDEX9_NSS2_INDEX6	0xc4c
-+#define REG_RXIGI_A		0x0c50
-+#define REG_TX_PWR_TRAINING_A	0x0c54
-+#define REG_CK_MONHA		0x0c5c
-+#define REG_AFE_PWR1_A		0x0c60
-+#define REG_AFE_PWR2_A		0x0c64
-+#define REG_RX_WAIT_CCA_TX_CCK_RFON_A	0x0c68
-+#define REG_OFDM0_XA_TX_IQ_IMBALANCE	0x0c80
-+#define REG_OFDM0_A_TX_AFE	0x0c84
-+#define REG_OFDM0_XB_TX_IQ_IMBALANCE	0x0c88
-+#define REG_TSSI_TRK_SW		0x0c8c
-+#define REG_LSSI_WRITE_A	0x0c90
-+#define REG_PREDISTA		0x0c90
-+#define REG_TXAGCIDX		0x0c94
-+
-+#define REG_RFE_PINMUX_A	0x0cb0
-+#define REG_RFE_INV_A		0x0cb4
- #define REG_RFE_CTRL8		0x0cb4
- #define BIT_MASK_RFE_SEL89	GENMASK(7, 0)
-+#define PTA_CTRL_PIN		0x66
-+#define DPDT_CTRL_PIN		0x77
-+#define RFE_INV_MASK		0x3ff00000
-+#define REG_RFECTL_A		0x0cb8
- #define REG_RFE_INV8		0x0cbd
- #define BIT_MASK_RFE_INV89	GENMASK(1, 0)
- #define REG_RFE_INV16		0x0cbe
- #define BIT_RFE_BUF_EN		BIT(3)
- 
-+#define REG_IQK_DPD_CFG		0x0cc4
-+#define REG_CFG_PMPD		0x0cc8
-+#define REG_IQC_Y		0x0ccc
-+#define REG_IQC_X		0x0cd4
-+#define REG_INTPO_SETA		0x0ce8
-+
-+#define REG_IQKA_END		0x0d00
-+#define REG_PI_READ_A		0x0d04
-+#define REG_SI_READ_A		0x0d08
-+#define REG_IQKB_END		0x0d40
-+#define REG_PI_READ_B		0x0d44
-+#define REG_SI_READ_B		0x0d48
-+
-+#define REG_3WIRE_SWB		0x0e00
-+#define REG_RX_IQC_AB_B		0x0e10
-+#define REG_TXSCALE_B		0x0e1c
-+#define REG_TX_AGC_B_CCK_11_CCK_1		0xe20
-+#define REG_TX_AGC_B_OFDM18_OFDM6		0xe24
-+#define REG_TX_AGC_B_OFDM54_OFDM24		0xe28
-+#define REG_TX_AGC_B_MCS3_MCS0			0xe2c
-+#define REG_TX_AGC_B_MCS7_MCS4			0xe30
-+#define REG_TX_AGC_B_MCS11_MCS8			0xe34
-+#define REG_TX_AGC_B_MCS15_MCS12		0xe38
-+#define REG_TX_AGC_B_NSS1_INDEX3_NSS1_INDEX0	0xe3c
-+#define REG_TX_AGC_B_NSS1_INDEX7_NSS1_INDEX4	0xe40
-+#define REG_TX_AGC_B_NSS2_INDEX1_NSS1_INDEX8	0xe44
-+#define REG_TX_AGC_B_NSS2_INDEX5_NSS2_INDEX2	0xe48
-+#define REG_TX_AGC_B_NSS2_INDEX9_NSS2_INDEX6	0xe4c
-+#define REG_RXIGI_B		0x0e50
-+#define REG_TX_PWR_TRAINING_B	0x0e54
-+#define REG_CK_MONHB		0x0e5c
-+#define REG_AFE_PWR1_B		0x0e60
-+#define REG_AFE_PWR2_B		0x0e64
-+#define REG_RX_WAIT_CCA_TX_CCK_RFON_B	0x0e68
-+#define REG_TXTONEB		0x0e80
-+#define REG_RXTONEB		0x0e84
-+#define REG_TXPITMB		0x0e88
-+#define REG_RXPITMB		0x0e8c
-+#define REG_LSSI_WRITE_B	0x0e90
-+#define REG_PREDISTB		0x0e90
-+#define REG_INIDLYB		0x0e94
-+#define REG_RFE_PINMUX_B	0x0eb0
-+#define REG_RFE_INV_B		0x0eb4
-+#define REG_RFECTL_B		0x0eb8
-+#define REG_BPBDB		0x0ec4
-+#define REG_PHYTXONB		0x0ec8
-+#define REG_IQKYB		0x0ecc
-+#define REG_IQKXB		0x0ed4
-+#define REG_INTPO_SETB		0x0ee8
-+
-+#define REG_CRC_CCK		0x0f04
-+#define REG_CCA_OFDM		0x0f08
-+#define REG_CRC_VHT		0x0f0c
-+#define REG_CRC_HT		0x0f10
-+#define REG_CRC_OFDM		0x0f14
-+#define REG_FA_OFDM		0x0f48
-+#define REG_CCA_CCK		0x0fcc
-+
- #define REG_ANAPARSW_MAC_0	0x1010
- #define BIT_CF_L_V2		GENMASK(29, 28)
- 
-@@ -709,6 +869,10 @@
- 
- #define REG_IGN_GNTBT4	0x4160
- 
-+#define REG_USB_MOD	0xf008
-+#define REG_USB3_RXITV	0xf050
-+#define REG_USB_HRPWM	0xfe58
-+
- #define RF_MODE		0x00
- #define RF_MODOPT	0x01
- #define RF_WLINT	0x01
-@@ -716,7 +880,13 @@
- #define RF_DTXLOK	0x08
- #define RF_CFGCH	0x18
- #define BIT_BAND	GENMASK(18, 16)
-+#define RF18_BAND_MASK	(BIT(16) | BIT(9) | BIT(8))
-+#define RF18_CHANNEL_MASK	(MASKBYTE0)
-+#define RF18_RFSI_MASK	(BIT(18) | BIT(17))
- #define RF_RCK		0x1d
-+#define RF_MODE_TABLE_ADDR	0x30
-+#define RF_MODE_TABLE_DATA0	0x31
-+#define RF_MODE_TABLE_DATA1	0x32
- #define RF_LUTWA	0x33
- #define RF_LUTWD1	0x3e
- #define RF_LUTWD0	0x3f
-@@ -725,10 +895,14 @@
- #define RF_T_METER	0x42
- #define RF_BSPAD	0x54
- #define RF_GAINTX	0x56
-+#define RF_TXMOD	0x58
- #define RF_TXATANK	0x64
-+#define RF_TXA_PREPAD	0x65
- #define RF_TRXIQ	0x66
- #define RF_RXIQGEN	0x8d
-+#define RF_RXBB2	0x8f
- #define RF_SYN_PFD	0xb0
-+#define RF_LCK		0xb4
- #define RF_XTALX2	0xb8
- #define RF_SYN_CTRL	0xbb
- #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
- #define BIT_FEN_EN	BIT(26)
- #define REG_INIRTS_RATE_SEL 0x0480
- #define REG_HTSTFWT	0x800
--#define REG_RXPSEL	0x808
--#define BIT_RX_PSEL_RST		(BIT(28) | BIT(29))
--#define REG_TXPSEL	0x80c
- #define REG_RXCCAMSK	0x814
--#define REG_CCASEL	0x82c
--#define REG_PDMFTH	0x830
--#define REG_CCA2ND	0x838
- #define REG_L1WT	0x83c
- #define REG_L1PKWT	0x840
- #define REG_MRC		0x850
--#define REG_CLKTRK	0x860
--#define REG_ADCCLK	0x8ac
--#define REG_ADC160	0x8c4
- #define REG_ADC40	0x8c8
- #define REG_CHFIR	0x8f0
- #define REG_CDDTXP	0x93c
-@@ -234,14 +225,11 @@ extern const struct rtw_chip_info rtw882
- #define REG_ACBB0	0x948
- #define REG_ACBBRXFIR	0x94c
- #define REG_ACGG2TBL	0x958
--#define REG_FAS		0x9a4
--#define REG_RXSB	0xa00
- #define REG_ADCINI	0xa04
- #define REG_PWRTH	0xa08
- #define REG_CCA_FLTR	0xa20
- #define REG_TXSF2	0xa24
- #define REG_TXSF6	0xa28
--#define REG_FA_CCK	0xa5c
- #define REG_RXDESC	0xa2c
- #define REG_ENTXCCK	0xa80
- #define BTG_LNA		0xfc84
-@@ -252,12 +240,8 @@ extern const struct rtw_chip_info rtw882
- #define REG_PWRTH2	0xaa8
- #define REG_CSRATIO	0xaaa
- #define REG_TXFILTER	0xaac
--#define REG_CNTRST	0xb58
- #define REG_AGCTR_A	0xc08
--#define REG_TXSCALE_A	0xc1c
- #define REG_TXDFIR	0xc20
--#define REG_RXIGI_A	0xc50
--#define REG_TXAGCIDX	0xc94
- #define REG_TRSW	0xca0
- #define REG_RFESEL0	0xcb0
- #define REG_RFESEL8	0xcb4
-@@ -269,14 +253,6 @@ extern const struct rtw_chip_info rtw882
- #define B_WLA_SWITCH	BIT(23)
- #define REG_RFEINV	0xcbc
- #define REG_AGCTR_B	0xe08
--#define REG_RXIGI_B	0xe50
--#define REG_CRC_CCK	0xf04
--#define REG_CRC_OFDM	0xf14
--#define REG_CRC_HT	0xf10
--#define REG_CRC_VHT	0xf0c
--#define REG_CCA_OFDM	0xf08
--#define REG_FA_OFDM	0xf48
--#define REG_CCA_CCK	0xfcc
- #define REG_DMEM_CTRL	0x1080
- #define BIT_WL_RST	BIT(16)
- #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
- #define RTW8822B_EDCCA_MAX	0x7f
- #define RTW8822B_EDCCA_SRC_DEF	1
- #define REG_HTSTFWT	0x800
--#define REG_RXPSEL	0x808
--#define BIT_RX_PSEL_RST		(BIT(28) | BIT(29))
--#define REG_TXPSEL	0x80c
- #define REG_RXCCAMSK	0x814
--#define REG_CCASEL	0x82c
--#define REG_PDMFTH	0x830
--#define REG_CCA2ND	0x838
- #define REG_L1WT	0x83c
- #define REG_L1PKWT	0x840
- #define REG_MRC		0x850
--#define REG_CLKTRK	0x860
- #define REG_EDCCA_POW_MA	0x8a0
- #define BIT_MA_LEVEL	GENMASK(1, 0)
--#define REG_ADCCLK	0x8ac
--#define REG_ADC160	0x8c4
- #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
- #define REG_ACBB0	0x948
- #define REG_ACBBRXFIR	0x94c
- #define REG_ACGG2TBL	0x958
--#define REG_RXSB	0xa00
- #define REG_ADCINI	0xa04
- #define REG_TXSF2	0xa24
- #define REG_TXSF6	0xa28
-@@ -184,14 +174,12 @@ _rtw_write32s_mask(struct rtw_dev *rtwde
- #define REG_ENTXCCK	0xa80
- #define REG_AGCTR_A	0xc08
- #define REG_TXDFIR	0xc20
--#define REG_RXIGI_A	0xc50
- #define REG_TRSW	0xca0
- #define REG_RFESEL0	0xcb0
- #define REG_RFESEL8	0xcb4
- #define REG_RFECTL	0xcb8
- #define REG_RFEINV	0xcbc
- #define REG_AGCTR_B	0xe08
--#define REG_RXIGI_B	0xe50
- #define REG_ANTWT	0x1904
- #define REG_IQKFAILMSK	0x1bf0
- 

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

@@ -1,93 +0,0 @@
-From 87341ca1eac9a3bac23bd41f6e24f3c93b77452f Mon Sep 17 00:00:00 2001
-From: Bitterblue Smith <[email protected]>
-Date: Wed, 23 Oct 2024 17:02:05 +0300
-Subject: [PATCH] wifi: rtw88: Dump the HW features only for some chips
-
-RTL8821AU and RTL8812AU don't support this. They hit the "failed to read
-hw feature report" error.
-
-Signed-off-by: Bitterblue Smith <[email protected]>
-Signed-off-by: Ping-Ke Shih <[email protected]>
-Link: https://patch.msgid.link/[email protected]
----
- drivers/net/wireless/realtek/rtw88/main.c     | 3 +++
- drivers/net/wireless/realtek/rtw88/main.h     | 1 +
- drivers/net/wireless/realtek/rtw88/rtw8703b.c | 1 +
- drivers/net/wireless/realtek/rtw88/rtw8723d.c | 1 +
- drivers/net/wireless/realtek/rtw88/rtw8821c.c | 1 +
- drivers/net/wireless/realtek/rtw88/rtw8822b.c | 1 +
- drivers/net/wireless/realtek/rtw88/rtw8822c.c | 1 +
- 7 files changed, 9 insertions(+)
-
---- 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
- 	u8 bw;
- 	int i;
- 
-+	if (!rtwdev->chip->hw_feature_report)
-+		return 0;
-+
- 	id = rtw_read8(rtwdev, REG_C2HEVT);
- 	if (id != C2H_HW_FEATURE_REPORT) {
- 		rtw_err(rtwdev, "failed to read hw feature report\n");
---- a/drivers/net/wireless/realtek/rtw88/main.h
-+++ b/drivers/net/wireless/realtek/rtw88/main.h
-@@ -1200,6 +1200,7 @@ struct rtw_chip_info {
- 	const struct rtw_fwcd_segs *fwcd_segs;
- 
- 	u8 usb_tx_agg_desc_num;
-+	bool hw_feature_report;
- 
- 	u8 default_1ss_tx_path;
- 
---- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c
-+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
-@@ -1960,6 +1960,7 @@ const struct rtw_chip_info rtw8703b_hw_s
- 	.max_power_index = 0x3f,
- 	.ampdu_density = IEEE80211_HT_MPDU_DENSITY_16,
- 	.usb_tx_agg_desc_num = 1, /* Not sure if this chip has USB interface */
-+	.hw_feature_report = true,
- 
- 	.path_div_supported = false,
- 	.ht_supported = true,
---- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c
-+++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
-@@ -2131,6 +2131,7 @@ const struct rtw_chip_info rtw8723d_hw_s
- 	.page_size = TX_PAGE_SIZE,
- 	.dig_min = 0x20,
- 	.usb_tx_agg_desc_num = 1,
-+	.hw_feature_report = true,
- 	.ht_supported = true,
- 	.vht_supported = false,
- 	.lps_deep_mode_supported = 0,
---- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c
-+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
-@@ -1968,6 +1968,7 @@ const struct rtw_chip_info rtw8821c_hw_s
- 	.page_size = TX_PAGE_SIZE,
- 	.dig_min = 0x1c,
- 	.usb_tx_agg_desc_num = 3,
-+	.hw_feature_report = true,
- 	.ht_supported = true,
- 	.vht_supported = true,
- 	.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
- 	.page_size = TX_PAGE_SIZE,
- 	.dig_min = 0x1c,
- 	.usb_tx_agg_desc_num = 3,
-+	.hw_feature_report = true,
- 	.ht_supported = true,
- 	.vht_supported = true,
- 	.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
- 	.page_size = TX_PAGE_SIZE,
- 	.dig_min = 0x20,
- 	.usb_tx_agg_desc_num = 3,
-+	.hw_feature_report = true,
- 	.default_1ss_tx_path = BB_PATH_A,
- 	.path_div_supported = true,
- 	.ht_supported = true,

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

@@ -1,175 +0,0 @@
-From d9018f4373517d4560ce2ebf12684f77f5fbdad6 Mon Sep 17 00:00:00 2001
-From: Bitterblue Smith <[email protected]>
-Date: Wed, 23 Oct 2024 17:06:14 +0300
-Subject: [PATCH] wifi: rtw88: Allow different C2H RA report sizes
-
-The RTL8821AU and RTL8812AU have smaller RA report size, only 4 bytes.
-Avoid the "invalid ra report c2h length" error.
-
-Also, use a struct and u8_get_bits() to access the RA report C2H.
-
-Signed-off-by: Bitterblue Smith <[email protected]>
-Signed-off-by: Ping-Ke Shih <[email protected]>
-Link: https://patch.msgid.link/[email protected]
----
- drivers/net/wireless/realtek/rtw88/fw.c       | 21 +++++++++++++------
- drivers/net/wireless/realtek/rtw88/fw.h       | 17 +++++++++++----
- drivers/net/wireless/realtek/rtw88/main.h     |  1 +
- drivers/net/wireless/realtek/rtw88/rtw8703b.c |  1 +
- drivers/net/wireless/realtek/rtw88/rtw8723d.c |  1 +
- drivers/net/wireless/realtek/rtw88/rtw8821c.c |  1 +
- drivers/net/wireless/realtek/rtw88/rtw8822b.c |  1 +
- drivers/net/wireless/realtek/rtw88/rtw8822c.c |  1 +
- 8 files changed, 34 insertions(+), 10 deletions(-)
-
---- a/drivers/net/wireless/realtek/rtw88/fw.c
-+++ b/drivers/net/wireless/realtek/rtw88/fw.c
-@@ -139,25 +139,30 @@ static u16 get_max_amsdu_len(u32 bit_rat
- struct rtw_fw_iter_ra_data {
- 	struct rtw_dev *rtwdev;
- 	u8 *payload;
-+	u8 length;
- };
- 
- static void rtw_fw_ra_report_iter(void *data, struct ieee80211_sta *sta)
- {
- 	struct rtw_fw_iter_ra_data *ra_data = data;
-+	struct rtw_c2h_ra_rpt *ra_rpt = (struct rtw_c2h_ra_rpt *)ra_data->payload;
- 	struct rtw_sta_info *si = (struct rtw_sta_info *)sta->drv_priv;
- 	u8 mac_id, rate, sgi, bw;
- 	u8 mcs, nss;
- 	u32 bit_rate;
- 
--	mac_id = GET_RA_REPORT_MACID(ra_data->payload);
-+	mac_id = ra_rpt->mac_id;
- 	if (si->mac_id != mac_id)
- 		return;
- 
- 	si->ra_report.txrate.flags = 0;
- 
--	rate = GET_RA_REPORT_RATE(ra_data->payload);
--	sgi = GET_RA_REPORT_SGI(ra_data->payload);
--	bw = GET_RA_REPORT_BW(ra_data->payload);
-+	rate = u8_get_bits(ra_rpt->rate_sgi, RTW_C2H_RA_RPT_RATE);
-+	sgi = u8_get_bits(ra_rpt->rate_sgi, RTW_C2H_RA_RPT_SGI);
-+	if (ra_data->length >= offsetofend(typeof(*ra_rpt), bw))
-+		bw = ra_rpt->bw;
-+	else
-+		bw = si->bw_mode;
- 
- 	if (rate < DESC_RATEMCS0) {
- 		si->ra_report.txrate.legacy = rtw_desc_to_bitrate(rate);
-@@ -197,14 +202,18 @@ legacy:
- static void rtw_fw_ra_report_handle(struct rtw_dev *rtwdev, u8 *payload,
- 				    u8 length)
- {
-+	struct rtw_c2h_ra_rpt *ra_rpt = (struct rtw_c2h_ra_rpt *)payload;
- 	struct rtw_fw_iter_ra_data ra_data;
- 
--	if (WARN(length < 7, "invalid ra report c2h length\n"))
-+	if (WARN(length < rtwdev->chip->c2h_ra_report_size,
-+		 "invalid ra report c2h length %d\n", length))
- 		return;
- 
--	rtwdev->dm_info.tx_rate = GET_RA_REPORT_RATE(payload);
-+	rtwdev->dm_info.tx_rate = u8_get_bits(ra_rpt->rate_sgi,
-+					      RTW_C2H_RA_RPT_RATE);
- 	ra_data.rtwdev = rtwdev;
- 	ra_data.payload = payload;
-+	ra_data.length = length;
- 	rtw_iterate_stas_atomic(rtwdev, rtw_fw_ra_report_iter, &ra_data);
- }
- 
---- a/drivers/net/wireless/realtek/rtw88/fw.h
-+++ b/drivers/net/wireless/realtek/rtw88/fw.h
-@@ -85,6 +85,19 @@ struct rtw_c2h_adaptivity {
- 	u8 option;
- } __packed;
- 
-+struct rtw_c2h_ra_rpt {
-+	u8 rate_sgi;
-+	u8 mac_id;
-+	u8 byte2;
-+	u8 status;
-+	u8 byte4;
-+	u8 ra_ratio;
-+	u8 bw;
-+} __packed;
-+
-+#define RTW_C2H_RA_RPT_RATE	GENMASK(6, 0)
-+#define RTW_C2H_RA_RPT_SGI	BIT(7)
-+
- struct rtw_h2c_register {
- 	u32 w0;
- 	u32 w1;
-@@ -364,10 +377,6 @@ struct rtw_fw_hdr_legacy {
- #define GET_CHAN_SWITCH_CENTRAL_CH(c2h_payload)	(c2h_payload[2])
- #define GET_CHAN_SWITCH_ID(c2h_payload)		(c2h_payload[3])
- #define GET_CHAN_SWITCH_STATUS(c2h_payload)	(c2h_payload[4])
--#define GET_RA_REPORT_RATE(c2h_payload)		(c2h_payload[0] & 0x7f)
--#define GET_RA_REPORT_SGI(c2h_payload)		((c2h_payload[0] & 0x80) >> 7)
--#define GET_RA_REPORT_BW(c2h_payload)		(c2h_payload[6])
--#define GET_RA_REPORT_MACID(c2h_payload)	(c2h_payload[1])
- 
- #define GET_BCN_FILTER_NOTIFY_TYPE(c2h_payload)	(c2h_payload[1] & 0xf)
- #define GET_BCN_FILTER_NOTIFY_EVENT(c2h_payload)	(c2h_payload[1] & 0x10)
---- a/drivers/net/wireless/realtek/rtw88/main.h
-+++ b/drivers/net/wireless/realtek/rtw88/main.h
-@@ -1201,6 +1201,7 @@ struct rtw_chip_info {
- 
- 	u8 usb_tx_agg_desc_num;
- 	bool hw_feature_report;
-+	u8 c2h_ra_report_size;
- 
- 	u8 default_1ss_tx_path;
- 
---- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c
-+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
-@@ -1961,6 +1961,7 @@ const struct rtw_chip_info rtw8703b_hw_s
- 	.ampdu_density = IEEE80211_HT_MPDU_DENSITY_16,
- 	.usb_tx_agg_desc_num = 1, /* Not sure if this chip has USB interface */
- 	.hw_feature_report = true,
-+	.c2h_ra_report_size = 7,
- 
- 	.path_div_supported = false,
- 	.ht_supported = true,
---- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c
-+++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
-@@ -2132,6 +2132,7 @@ const struct rtw_chip_info rtw8723d_hw_s
- 	.dig_min = 0x20,
- 	.usb_tx_agg_desc_num = 1,
- 	.hw_feature_report = true,
-+	.c2h_ra_report_size = 7,
- 	.ht_supported = true,
- 	.vht_supported = false,
- 	.lps_deep_mode_supported = 0,
---- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c
-+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
-@@ -1969,6 +1969,7 @@ const struct rtw_chip_info rtw8821c_hw_s
- 	.dig_min = 0x1c,
- 	.usb_tx_agg_desc_num = 3,
- 	.hw_feature_report = true,
-+	.c2h_ra_report_size = 7,
- 	.ht_supported = true,
- 	.vht_supported = true,
- 	.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
- 	.dig_min = 0x1c,
- 	.usb_tx_agg_desc_num = 3,
- 	.hw_feature_report = true,
-+	.c2h_ra_report_size = 7,
- 	.ht_supported = true,
- 	.vht_supported = true,
- 	.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
- 	.dig_min = 0x20,
- 	.usb_tx_agg_desc_num = 3,
- 	.hw_feature_report = true,
-+	.c2h_ra_report_size = 7,
- 	.default_1ss_tx_path = BB_PATH_A,
- 	.path_div_supported = true,
- 	.ht_supported = true,

+ 0 - 165
package/kernel/mac80211/patches/rtl/027-v6.13-wifi-rtw88-Extend-the-init-table-parsing-for-RTL8812.patch

@@ -1,165 +0,0 @@
-From 95a772e30b60e7954d03f3372268722475aa303f Mon Sep 17 00:00:00 2001
-From: Bitterblue Smith <[email protected]>
-Date: Wed, 23 Oct 2024 17:08:24 +0300
-Subject: [PATCH] wifi: rtw88: Extend the init table parsing for RTL8812AU
-
-The chips supported so far only use the first condition, and so the
-parsing code ignores the second condition. RTL8812AU's init tables use
-the second condition also. Make the parsing code check it.
-
-Signed-off-by: Bitterblue Smith <[email protected]>
-Signed-off-by: Ping-Ke Shih <[email protected]>
-Link: https://patch.msgid.link/[email protected]
----
- drivers/net/wireless/realtek/rtw88/main.h | 15 ++++++
- drivers/net/wireless/realtek/rtw88/phy.c  | 62 ++++++++++++++++++++---
- 2 files changed, 69 insertions(+), 8 deletions(-)
-
---- a/drivers/net/wireless/realtek/rtw88/main.h
-+++ b/drivers/net/wireless/realtek/rtw88/main.h
-@@ -1835,6 +1835,20 @@ struct rtw_phy_cond {
- 	#define BRANCH_ENDIF	3
- };
- 
-+struct rtw_phy_cond2 {
-+#ifdef __LITTLE_ENDIAN
-+	u8 type_glna;
-+	u8 type_gpa;
-+	u8 type_alna;
-+	u8 type_apa;
-+#else
-+	u8 type_apa;
-+	u8 type_alna;
-+	u8 type_gpa;
-+	u8 type_glna;
-+#endif
-+};
-+
- struct rtw_fifo_conf {
- 	/* tx fifo information */
- 	u16 rsvd_boundary;
-@@ -1916,6 +1930,7 @@ struct rtw_hal {
- 	u8 oem_id;
- 	u8 pkg_type;
- 	struct rtw_phy_cond phy_cond;
-+	struct rtw_phy_cond2 phy_cond2;
- 	bool rfe_btg;
- 
- 	u8 ps_mode;
---- a/drivers/net/wireless/realtek/rtw88/phy.c
-+++ b/drivers/net/wireless/realtek/rtw88/phy.c
-@@ -18,7 +18,10 @@ struct phy_cfg_pair {
- };
- 
- union phy_table_tile {
--	struct rtw_phy_cond cond;
-+	struct {
-+		struct rtw_phy_cond cond;
-+		struct rtw_phy_cond2 cond2;
-+	} __packed;
- 	struct phy_cfg_pair cfg;
- };
- 
-@@ -1041,7 +1044,8 @@ void rtw_phy_setup_phy_cond(struct rtw_d
- {
- 	struct rtw_hal *hal = &rtwdev->hal;
- 	struct rtw_efuse *efuse = &rtwdev->efuse;
--	struct rtw_phy_cond cond = {0};
-+	struct rtw_phy_cond cond = {};
-+	struct rtw_phy_cond2 cond2 = {};
- 
- 	cond.cut = hal->cut_version ? hal->cut_version : 15;
- 	cond.pkg = pkg ? pkg : 15;
-@@ -1061,15 +1065,34 @@ void rtw_phy_setup_phy_cond(struct rtw_d
- 		break;
- 	}
- 
-+	if (rtwdev->chip->id == RTW_CHIP_TYPE_8812A ||
-+	    rtwdev->chip->id == RTW_CHIP_TYPE_8821A) {
-+		cond.rfe = 0;
-+		cond.rfe |= efuse->ext_lna_2g;
-+		cond.rfe |= efuse->ext_pa_2g  << 1;
-+		cond.rfe |= efuse->ext_lna_5g << 2;
-+		cond.rfe |= efuse->ext_pa_5g  << 3;
-+		cond.rfe |= efuse->btcoex     << 4;
-+
-+		cond2.type_alna = efuse->alna_type;
-+		cond2.type_glna = efuse->glna_type;
-+		cond2.type_apa = efuse->apa_type;
-+		cond2.type_gpa = efuse->gpa_type;
-+	}
-+
- 	hal->phy_cond = cond;
-+	hal->phy_cond2 = cond2;
- 
--	rtw_dbg(rtwdev, RTW_DBG_PHY, "phy cond=0x%08x\n", *((u32 *)&hal->phy_cond));
-+	rtw_dbg(rtwdev, RTW_DBG_PHY, "phy cond=0x%08x cond2=0x%08x\n",
-+		*((u32 *)&hal->phy_cond), *((u32 *)&hal->phy_cond2));
- }
- 
--static bool check_positive(struct rtw_dev *rtwdev, struct rtw_phy_cond cond)
-+static bool check_positive(struct rtw_dev *rtwdev, struct rtw_phy_cond cond,
-+			   struct rtw_phy_cond2 cond2)
- {
- 	struct rtw_hal *hal = &rtwdev->hal;
- 	struct rtw_phy_cond drv_cond = hal->phy_cond;
-+	struct rtw_phy_cond2 drv_cond2 = hal->phy_cond2;
- 
- 	if (cond.cut && cond.cut != drv_cond.cut)
- 		return false;
-@@ -1080,8 +1103,29 @@ static bool check_positive(struct rtw_de
- 	if (cond.intf && cond.intf != drv_cond.intf)
- 		return false;
- 
--	if (cond.rfe != drv_cond.rfe)
--		return false;
-+	if (rtwdev->chip->id == RTW_CHIP_TYPE_8812A ||
-+	    rtwdev->chip->id == RTW_CHIP_TYPE_8821A) {
-+		if (!(cond.rfe & 0x0f))
-+			return true;
-+
-+		if ((cond.rfe & drv_cond.rfe) != cond.rfe)
-+			return false;
-+
-+		if ((cond.rfe & BIT(0)) && cond2.type_glna != drv_cond2.type_glna)
-+			return false;
-+
-+		if ((cond.rfe & BIT(1)) && cond2.type_gpa != drv_cond2.type_gpa)
-+			return false;
-+
-+		if ((cond.rfe & BIT(2)) && cond2.type_alna != drv_cond2.type_alna)
-+			return false;
-+
-+		if ((cond.rfe & BIT(3)) && cond2.type_apa != drv_cond2.type_apa)
-+			return false;
-+	} else {
-+		if (cond.rfe != drv_cond.rfe)
-+			return false;
-+	}
- 
- 	return true;
- }
-@@ -1090,7 +1134,8 @@ void rtw_parse_tbl_phy_cond(struct rtw_d
- {
- 	const union phy_table_tile *p = tbl->data;
- 	const union phy_table_tile *end = p + tbl->size / 2;
--	struct rtw_phy_cond pos_cond = {0};
-+	struct rtw_phy_cond pos_cond = {};
-+	struct rtw_phy_cond2 pos_cond2 = {};
- 	bool is_matched = true, is_skipped = false;
- 
- 	BUILD_BUG_ON(sizeof(union phy_table_tile) != sizeof(struct phy_cfg_pair));
-@@ -1109,11 +1154,12 @@ void rtw_parse_tbl_phy_cond(struct rtw_d
- 			case BRANCH_ELIF:
- 			default:
- 				pos_cond = p->cond;
-+				pos_cond2 = p->cond2;
- 				break;
- 			}
- 		} else if (p->cond.neg) {
- 			if (!is_skipped) {
--				if (check_positive(rtwdev, pos_cond)) {
-+				if (check_positive(rtwdev, pos_cond, pos_cond2)) {
- 					is_matched = true;
- 					is_skipped = true;
- 				} else {

+ 0 - 58
package/kernel/mac80211/patches/rtl/028-v6.13-wifi-rtw88-Allow-rtw_chip_info.ltecoex_addr-to-be-NU.patch

@@ -1,58 +0,0 @@
-From 7c5bbeba7c36575a3a57ef4be775b2f3fb68c3f9 Mon Sep 17 00:00:00 2001
-From: Bitterblue Smith <[email protected]>
-Date: Wed, 23 Oct 2024 17:09:04 +0300
-Subject: [PATCH] wifi: rtw88: Allow rtw_chip_info.ltecoex_addr to be NULL
-
-RTL8821A doesn't have this. Trying to use it results in error messages,
-so don't try if ltecoex_addr is NULL.
-
-Signed-off-by: Bitterblue Smith <[email protected]>
-Signed-off-by: Ping-Ke Shih <[email protected]>
-Link: https://patch.msgid.link/[email protected]
----
- drivers/net/wireless/realtek/rtw88/coex.c | 14 +++++++++++---
- 1 file changed, 11 insertions(+), 3 deletions(-)
-
---- a/drivers/net/wireless/realtek/rtw88/coex.c
-+++ b/drivers/net/wireless/realtek/rtw88/coex.c
-@@ -950,12 +950,18 @@ static void rtw_coex_coex_ctrl_owner(str
- 
- static void rtw_coex_set_gnt_bt(struct rtw_dev *rtwdev, u8 state)
- {
-+	if (!rtwdev->chip->ltecoex_addr)
-+		return;
-+
- 	rtw_coex_write_indirect_reg(rtwdev, LTE_COEX_CTRL, 0xc000, state);
- 	rtw_coex_write_indirect_reg(rtwdev, LTE_COEX_CTRL, 0x0c00, state);
- }
- 
- static void rtw_coex_set_gnt_wl(struct rtw_dev *rtwdev, u8 state)
- {
-+	if (!rtwdev->chip->ltecoex_addr)
-+		return;
-+
- 	rtw_coex_write_indirect_reg(rtwdev, LTE_COEX_CTRL, 0x3000, state);
- 	rtw_coex_write_indirect_reg(rtwdev, LTE_COEX_CTRL, 0x0300, state);
- }
-@@ -3904,7 +3910,7 @@ void rtw_coex_display_coex_info(struct r
- 	u8 sys_lte;
- 	u16 score_board_WB, score_board_BW;
- 	u32 wl_reg_6c0, wl_reg_6c4, wl_reg_6c8, wl_reg_778, wl_reg_6cc;
--	u32 lte_coex, bt_coex;
-+	u32 lte_coex = 0, bt_coex = 0;
- 	int i;
- 
- 	score_board_BW = rtw_coex_read_scbd(rtwdev);
-@@ -3916,8 +3922,10 @@ void rtw_coex_display_coex_info(struct r
- 	wl_reg_778 = rtw_read8(rtwdev, REG_BT_STAT_CTRL);
- 
- 	sys_lte = rtw_read8(rtwdev, 0x73);
--	lte_coex = rtw_coex_read_indirect_reg(rtwdev, 0x38);
--	bt_coex = rtw_coex_read_indirect_reg(rtwdev, 0x54);
-+	if (rtwdev->chip->ltecoex_addr) {
-+		lte_coex = rtw_coex_read_indirect_reg(rtwdev, 0x38);
-+		bt_coex = rtw_coex_read_indirect_reg(rtwdev, 0x54);
-+	}
- 
- 	if (!coex_stat->wl_under_ips &&
- 	    (!coex_stat->wl_under_lps || coex_stat->wl_force_lps_ctrl) &&

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

@@ -1,272 +0,0 @@
-From fbb5e1b3637a720c83c91a7b1476ab0429bfc747 Mon Sep 17 00:00:00 2001
-From: Bitterblue Smith <[email protected]>
-Date: Wed, 23 Oct 2024 17:09:47 +0300
-Subject: [PATCH] wifi: rtw88: Let each driver control the power on/off process
-
-RTL8821AU and RTL8812AU have to do some things differently, so let
-them have full control.
-
-The other chips use the same functions as before.
-
-Signed-off-by: Bitterblue Smith <[email protected]>
-Signed-off-by: Ping-Ke Shih <[email protected]>
-Link: https://patch.msgid.link/[email protected]
----
- drivers/net/wireless/realtek/rtw88/coex.c     |  3 +++
- drivers/net/wireless/realtek/rtw88/mac.c      | 11 +++++++----
- drivers/net/wireless/realtek/rtw88/mac.h      |  3 +++
- drivers/net/wireless/realtek/rtw88/main.c     | 13 ++++++++-----
- drivers/net/wireless/realtek/rtw88/main.h     |  5 +++++
- drivers/net/wireless/realtek/rtw88/rtw8703b.c |  2 ++
- drivers/net/wireless/realtek/rtw88/rtw8723d.c |  2 ++
- drivers/net/wireless/realtek/rtw88/rtw8821c.c |  2 ++
- drivers/net/wireless/realtek/rtw88/rtw8822b.c |  2 ++
- drivers/net/wireless/realtek/rtw88/rtw8822c.c |  2 ++
- 10 files changed, 36 insertions(+), 9 deletions(-)
-
---- a/drivers/net/wireless/realtek/rtw88/coex.c
-+++ b/drivers/net/wireless/realtek/rtw88/coex.c
-@@ -2753,16 +2753,19 @@ void rtw_coex_power_on_setting(struct rt
- 	rtw_write8(rtwdev, 0xff1a, 0x0);
- 	rtw_coex_set_gnt_debug(rtwdev);
- }
-+EXPORT_SYMBOL(rtw_coex_power_on_setting);
- 
- void rtw_coex_power_off_setting(struct rtw_dev *rtwdev)
- {
- 	rtw_write16(rtwdev, REG_WIFI_BT_INFO, BIT_BT_INT_EN);
- }
-+EXPORT_SYMBOL(rtw_coex_power_off_setting);
- 
- void rtw_coex_init_hw_config(struct rtw_dev *rtwdev, bool wifi_only)
- {
- 	__rtw_coex_init_hw_config(rtwdev, wifi_only);
- }
-+EXPORT_SYMBOL(rtw_coex_init_hw_config);
- 
- void rtw_coex_ips_notify(struct rtw_dev *rtwdev, u8 type)
- {
---- a/drivers/net/wireless/realtek/rtw88/mac.c
-+++ b/drivers/net/wireless/realtek/rtw88/mac.c
-@@ -227,8 +227,8 @@ static int rtw_sub_pwr_seq_parser(struct
- 	return 0;
- }
- 
--static int rtw_pwr_seq_parser(struct rtw_dev *rtwdev,
--			      const struct rtw_pwr_seq_cmd * const *cmd_seq)
-+int rtw_pwr_seq_parser(struct rtw_dev *rtwdev,
-+		       const struct rtw_pwr_seq_cmd * const *cmd_seq)
- {
- 	u8 cut_mask;
- 	u8 intf_mask;
-@@ -267,6 +267,7 @@ static int rtw_pwr_seq_parser(struct rtw
- 
- 	return 0;
- }
-+EXPORT_SYMBOL(rtw_pwr_seq_parser);
- 
- static int rtw_mac_power_switch(struct rtw_dev *rtwdev, bool pwr_on)
- {
-@@ -994,6 +995,7 @@ int rtw_download_firmware(struct rtw_dev
- 
- 	return 0;
- }
-+EXPORT_SYMBOL(rtw_download_firmware);
- 
- static u32 get_priority_queues(struct rtw_dev *rtwdev, u32 queues)
- {
-@@ -1127,7 +1129,7 @@ static int txdma_queue_mapping(struct rt
- 	return 0;
- }
- 
--static int set_trx_fifo_info(struct rtw_dev *rtwdev)
-+int rtw_set_trx_fifo_info(struct rtw_dev *rtwdev)
- {
- 	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_
- 
- 	return 0;
- }
-+EXPORT_SYMBOL(rtw_set_trx_fifo_info);
- 
- 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
- 	u16 pubq_num;
- 	int ret;
- 
--	ret = set_trx_fifo_info(rtwdev);
-+	ret = rtw_set_trx_fifo_info(rtwdev);
- 	if (ret)
- 		return ret;
- 
---- a/drivers/net/wireless/realtek/rtw88/mac.h
-+++ b/drivers/net/wireless/realtek/rtw88/mac.h
-@@ -30,11 +30,14 @@
- 
- void rtw_set_channel_mac(struct rtw_dev *rtwdev, u8 channel, u8 bw,
- 			 u8 primary_ch_idx);
-+int rtw_pwr_seq_parser(struct rtw_dev *rtwdev,
-+		       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);
- 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);
-+int rtw_set_trx_fifo_info(struct rtw_dev *rtwdev);
- int rtw_ddma_to_fw_fifo(struct rtw_dev *rtwdev, u32 ocp_src, u32 size);
- 
- static inline void rtw_mac_flush_all_queues(struct rtw_dev *rtwdev, bool drop)
---- a/drivers/net/wireless/realtek/rtw88/main.c
-+++ b/drivers/net/wireless/realtek/rtw88/main.c
-@@ -1309,7 +1309,7 @@ void rtw_update_sta_info(struct rtw_dev
- 	rtw_fw_send_ra_info(rtwdev, si, reset_ra_mask);
- }
- 
--static int rtw_wait_firmware_completion(struct rtw_dev *rtwdev)
-+int rtw_wait_firmware_completion(struct rtw_dev *rtwdev)
- {
- 	const struct rtw_chip_info *chip = rtwdev->chip;
- 	struct rtw_fw_state *fw;
-@@ -1329,6 +1329,7 @@ static int rtw_wait_firmware_completion(
- 
- 	return ret;
- }
-+EXPORT_SYMBOL(rtw_wait_firmware_completion);
- 
- static enum rtw_lps_deep_mode rtw_update_lps_deep_mode(struct rtw_dev *rtwdev,
- 						       struct rtw_fw_state *fw)
-@@ -1350,7 +1351,7 @@ static enum rtw_lps_deep_mode rtw_update
- 	return LPS_DEEP_MODE_NONE;
- }
- 
--static int rtw_power_on(struct rtw_dev *rtwdev)
-+int rtw_power_on(struct rtw_dev *rtwdev)
- {
- 	const struct rtw_chip_info *chip = rtwdev->chip;
- 	struct rtw_fw_state *fw = &rtwdev->fw;
-@@ -1413,6 +1414,7 @@ err_off:
- err:
- 	return ret;
- }
-+EXPORT_SYMBOL(rtw_power_on);
- 
- void rtw_core_fw_scan_notify(struct rtw_dev *rtwdev, bool start)
- {
-@@ -1485,7 +1487,7 @@ int rtw_core_start(struct rtw_dev *rtwde
- {
- 	int ret;
- 
--	ret = rtw_power_on(rtwdev);
-+	ret = rtwdev->chip->ops->power_on(rtwdev);
- 	if (ret)
- 		return ret;
- 
-@@ -1505,12 +1507,13 @@ int rtw_core_start(struct rtw_dev *rtwde
- 	return 0;
- }
- 
--static void rtw_power_off(struct rtw_dev *rtwdev)
-+void rtw_power_off(struct rtw_dev *rtwdev)
- {
- 	rtw_hci_stop(rtwdev);
- 	rtw_coex_power_off_setting(rtwdev);
- 	rtw_mac_power_off(rtwdev);
- }
-+EXPORT_SYMBOL(rtw_power_off);
- 
- void rtw_core_stop(struct rtw_dev *rtwdev)
- {
-@@ -1535,7 +1538,7 @@ void rtw_core_stop(struct rtw_dev *rtwde
- 
- 	mutex_lock(&rtwdev->mutex);
- 
--	rtw_power_off(rtwdev);
-+	rtwdev->chip->ops->power_off(rtwdev);
- }
- 
- static void rtw_init_ht_cap(struct rtw_dev *rtwdev,
---- a/drivers/net/wireless/realtek/rtw88/main.h
-+++ b/drivers/net/wireless/realtek/rtw88/main.h
-@@ -843,6 +843,8 @@ struct rtw_regd {
- };
- 
- struct rtw_chip_ops {
-+	int (*power_on)(struct rtw_dev *rtwdev);
-+	void (*power_off)(struct rtw_dev *rtwdev);
- 	int (*mac_init)(struct rtw_dev *rtwdev);
- 	int (*dump_fw_crash)(struct rtw_dev *rtwdev);
- 	void (*shutdown)(struct rtw_dev *rtwdev);
-@@ -2209,6 +2211,7 @@ void rtw_core_scan_start(struct rtw_dev
- void rtw_core_scan_complete(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,
- 			    bool hw_scan);
- int rtw_core_start(struct rtw_dev *rtwdev);
-+void rtw_power_off(struct rtw_dev *rtwdev);
- void rtw_core_stop(struct rtw_dev *rtwdev);
- int rtw_chip_info_setup(struct rtw_dev *rtwdev);
- int rtw_core_init(struct rtw_dev *rtwdev);
-@@ -2223,6 +2226,8 @@ int rtw_sta_add(struct rtw_dev *rtwdev,
- void rtw_sta_remove(struct rtw_dev *rtwdev, struct ieee80211_sta *sta,
- 		    bool fw_exist);
- void rtw_fw_recovery(struct rtw_dev *rtwdev);
-+int rtw_wait_firmware_completion(struct rtw_dev *rtwdev);
-+int rtw_power_on(struct rtw_dev *rtwdev);
- void rtw_core_fw_scan_notify(struct rtw_dev *rtwdev, bool start);
- int rtw_dump_fw(struct rtw_dev *rtwdev, const u32 ocp_src, u32 size,
- 		u32 fwcd_item);
---- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c
-+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
-@@ -1888,6 +1888,8 @@ static const struct coex_tdma_para tdma_
- };
- 
- static const struct rtw_chip_ops rtw8703b_ops = {
-+	.power_on		= rtw_power_on,
-+	.power_off		= rtw_power_off,
- 	.mac_init		= rtw8723x_mac_init,
- 	.dump_fw_crash		= NULL,
- 	.shutdown		= NULL,
---- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c
-+++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
-@@ -1390,6 +1390,8 @@ static void rtw8723d_pwr_track(struct rt
- }
- 
- static const struct rtw_chip_ops rtw8723d_ops = {
-+	.power_on		= rtw_power_on,
-+	.power_off		= rtw_power_off,
- 	.phy_set_param		= rtw8723d_phy_set_param,
- 	.read_efuse		= rtw8723x_read_efuse,
- 	.query_phy_status	= query_phy_status,
---- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c
-+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
-@@ -1643,6 +1643,8 @@ static const struct rtw_prioq_addrs prio
- };
- 
- static const struct rtw_chip_ops rtw8821c_ops = {
-+	.power_on		= rtw_power_on,
-+	.power_off		= rtw_power_off,
- 	.phy_set_param		= rtw8821c_phy_set_param,
- 	.read_efuse		= rtw8821c_read_efuse,
- 	.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
- };
- 
- static const struct rtw_chip_ops rtw8822b_ops = {
-+	.power_on		= rtw_power_on,
-+	.power_off		= rtw_power_off,
- 	.phy_set_param		= rtw8822b_phy_set_param,
- 	.read_efuse		= rtw8822b_read_efuse,
- 	.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
- };
- 
- static const struct rtw_chip_ops rtw8822c_ops = {
-+	.power_on		= rtw_power_on,
-+	.power_off		= rtw_power_off,
- 	.phy_set_param		= rtw8822c_phy_set_param,
- 	.read_efuse		= rtw8822c_read_efuse,
- 	.query_phy_status	= query_phy_status,

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

@@ -1,194 +0,0 @@
-From c7706b1173c77185a2ef40c7d1811021566563f3 Mon Sep 17 00:00:00 2001
-From: Bitterblue Smith <[email protected]>
-Date: Wed, 23 Oct 2024 17:10:32 +0300
-Subject: [PATCH] wifi: rtw88: Enable data rate fallback for older chips
-
-RTL8811AU fails to perform the 4-way handshake when the AP is too far
-because it transmits the EAPOL frames at MCS9 and when that doesn't
-work it retries 48 times with the same rate, to no avail.
-
-Retrying 48 times with the same rate seems pointless. Set the
-appropriate field in the TX descriptor to allow it to use lower rates
-when retrying.
-
-Set it for RTL8723D and RTL8703B because they interpret this field the
-same way as RTL8811A.
-
-The newer RTL8822C, RTL8822B, RTL8821C seem to interpret this field in
-the TX descriptor differently, so leave it alone for those chips.
-
-Tested with RTL8811AU and RTL8723DU.
-
-Signed-off-by: Bitterblue Smith <[email protected]>
-Signed-off-by: Ping-Ke Shih <[email protected]>
-Link: https://patch.msgid.link/[email protected]
----
- drivers/net/wireless/realtek/rtw88/fw.c       | 2 +-
- drivers/net/wireless/realtek/rtw88/main.h     | 1 +
- drivers/net/wireless/realtek/rtw88/pci.c      | 2 +-
- drivers/net/wireless/realtek/rtw88/rtw8703b.c | 1 +
- drivers/net/wireless/realtek/rtw88/rtw8723d.c | 1 +
- drivers/net/wireless/realtek/rtw88/rtw8821c.c | 1 +
- drivers/net/wireless/realtek/rtw88/rtw8822b.c | 1 +
- drivers/net/wireless/realtek/rtw88/rtw8822c.c | 1 +
- drivers/net/wireless/realtek/rtw88/sdio.c     | 2 +-
- drivers/net/wireless/realtek/rtw88/tx.c       | 6 +++++-
- drivers/net/wireless/realtek/rtw88/tx.h       | 4 +++-
- drivers/net/wireless/realtek/rtw88/usb.c      | 4 ++--
- 12 files changed, 19 insertions(+), 7 deletions(-)
-
---- a/drivers/net/wireless/realtek/rtw88/fw.c
-+++ b/drivers/net/wireless/realtek/rtw88/fw.c
-@@ -1290,7 +1290,7 @@ static void rtw_fill_rsvd_page_desc(stru
- 	rtw_tx_rsvd_page_pkt_info_update(rtwdev, &pkt_info, skb, type);
- 	pkt_desc = skb_push(skb, chip->tx_pkt_desc_sz);
- 	memset(pkt_desc, 0, chip->tx_pkt_desc_sz);
--	rtw_tx_fill_tx_desc(&pkt_info, skb);
-+	rtw_tx_fill_tx_desc(rtwdev, &pkt_info, skb);
- }
- 
- static inline u8 rtw_len_to_page(unsigned int len, u8 page_size)
---- a/drivers/net/wireless/realtek/rtw88/main.h
-+++ b/drivers/net/wireless/realtek/rtw88/main.h
-@@ -1204,6 +1204,7 @@ struct rtw_chip_info {
- 	u8 usb_tx_agg_desc_num;
- 	bool hw_feature_report;
- 	u8 c2h_ra_report_size;
-+	bool old_datarate_fb_limit;
- 
- 	u8 default_1ss_tx_path;
- 
---- 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
- 	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);
--	rtw_tx_fill_tx_desc(pkt_info, skb);
-+	rtw_tx_fill_tx_desc(rtwdev, pkt_info, skb);
- 	dma = dma_map_single(&rtwpci->pdev->dev, skb->data, skb->len,
- 			     DMA_TO_DEVICE);
- 	if (dma_mapping_error(&rtwpci->pdev->dev, dma))
---- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c
-+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
-@@ -1964,6 +1964,7 @@ const struct rtw_chip_info rtw8703b_hw_s
- 	.usb_tx_agg_desc_num = 1, /* Not sure if this chip has USB interface */
- 	.hw_feature_report = true,
- 	.c2h_ra_report_size = 7,
-+	.old_datarate_fb_limit = true,
- 
- 	.path_div_supported = false,
- 	.ht_supported = true,
---- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c
-+++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
-@@ -2135,6 +2135,7 @@ const struct rtw_chip_info rtw8723d_hw_s
- 	.usb_tx_agg_desc_num = 1,
- 	.hw_feature_report = true,
- 	.c2h_ra_report_size = 7,
-+	.old_datarate_fb_limit = true,
- 	.ht_supported = true,
- 	.vht_supported = false,
- 	.lps_deep_mode_supported = 0,
---- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c
-+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
-@@ -1972,6 +1972,7 @@ const struct rtw_chip_info rtw8821c_hw_s
- 	.usb_tx_agg_desc_num = 3,
- 	.hw_feature_report = true,
- 	.c2h_ra_report_size = 7,
-+	.old_datarate_fb_limit = false,
- 	.ht_supported = true,
- 	.vht_supported = true,
- 	.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
- 	.usb_tx_agg_desc_num = 3,
- 	.hw_feature_report = true,
- 	.c2h_ra_report_size = 7,
-+	.old_datarate_fb_limit = false,
- 	.ht_supported = true,
- 	.vht_supported = true,
- 	.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
- 	.usb_tx_agg_desc_num = 3,
- 	.hw_feature_report = true,
- 	.c2h_ra_report_size = 7,
-+	.old_datarate_fb_limit = false,
- 	.default_1ss_tx_path = BB_PATH_A,
- 	.path_div_supported = true,
- 	.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
- 
- 	pkt_info->qsel = rtw_sdio_get_tx_qsel(rtwdev, skb, queue);
- 
--	rtw_tx_fill_tx_desc(pkt_info, skb);
-+	rtw_tx_fill_tx_desc(rtwdev, pkt_info, skb);
- 	rtw_tx_fill_txdesc_checksum(rtwdev, pkt_info, pkt_desc);
- }
- 
---- a/drivers/net/wireless/realtek/rtw88/tx.c
-+++ b/drivers/net/wireless/realtek/rtw88/tx.c
-@@ -32,7 +32,8 @@ void rtw_tx_stats(struct rtw_dev *rtwdev
- 	}
- }
- 
--void rtw_tx_fill_tx_desc(struct rtw_tx_pkt_info *pkt_info, struct sk_buff *skb)
-+void rtw_tx_fill_tx_desc(struct rtw_dev *rtwdev,
-+			 struct rtw_tx_pkt_info *pkt_info, struct sk_buff *skb)
- {
- 	struct rtw_tx_desc *tx_desc = (struct rtw_tx_desc *)skb->data;
- 	bool more_data = false;
-@@ -67,6 +68,9 @@ void rtw_tx_fill_tx_desc(struct rtw_tx_p
- 
- 	tx_desc->w4 = le32_encode_bits(pkt_info->rate, RTW_TX_DESC_W4_DATARATE);
- 
-+	if (rtwdev->chip->old_datarate_fb_limit)
-+		tx_desc->w4 |= le32_encode_bits(0x1f, RTW_TX_DESC_W4_DATARATE_FB_LIMIT);
-+
- 	tx_desc->w5 = le32_encode_bits(pkt_info->short_gi, RTW_TX_DESC_W5_DATA_SHORT) |
- 		      le32_encode_bits(pkt_info->bw, RTW_TX_DESC_W5_DATA_BW) |
- 		      le32_encode_bits(pkt_info->ldpc, RTW_TX_DESC_W5_DATA_LDPC) |
---- a/drivers/net/wireless/realtek/rtw88/tx.h
-+++ b/drivers/net/wireless/realtek/rtw88/tx.h
-@@ -44,6 +44,7 @@ struct rtw_tx_desc {
- #define RTW_TX_DESC_W3_NAVUSEHDR BIT(15)
- #define RTW_TX_DESC_W3_MAX_AGG_NUM GENMASK(21, 17)
- #define RTW_TX_DESC_W4_DATARATE GENMASK(6, 0)
-+#define RTW_TX_DESC_W4_DATARATE_FB_LIMIT GENMASK(12, 8)
- #define RTW_TX_DESC_W4_RTSRATE GENMASK(28, 24)
- #define RTW_TX_DESC_W5_DATA_SHORT BIT(4)
- #define RTW_TX_DESC_W5_DATA_BW GENMASK(6, 5)
-@@ -94,7 +95,8 @@ void rtw_tx_pkt_info_update(struct rtw_d
- 			    struct rtw_tx_pkt_info *pkt_info,
- 			    struct ieee80211_sta *sta,
- 			    struct sk_buff *skb);
--void rtw_tx_fill_tx_desc(struct rtw_tx_pkt_info *pkt_info, struct sk_buff *skb);
-+void rtw_tx_fill_tx_desc(struct rtw_dev *rtwdev,
-+			 struct rtw_tx_pkt_info *pkt_info, struct sk_buff *skb);
- void rtw_tx_report_enqueue(struct rtw_dev *rtwdev, struct sk_buff *skb, u8 sn);
- void rtw_tx_report_handle(struct rtw_dev *rtwdev, struct sk_buff *skb, int src);
- 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
- 	skb_put_data(skb, buf, size);
- 	skb_push(skb, chip->tx_pkt_desc_sz);
- 	memset(skb->data, 0, chip->tx_pkt_desc_sz);
--	rtw_tx_fill_tx_desc(pkt_info, skb);
-+	rtw_tx_fill_tx_desc(rtwdev, pkt_info, skb);
- 	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
- 	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);
--	rtw_tx_fill_tx_desc(pkt_info, skb);
-+	rtw_tx_fill_tx_desc(rtwdev, pkt_info, skb);
- 	rtw_tx_fill_txdesc_checksum(rtwdev, pkt_info, skb->data);
- 	tx_data = rtw_usb_get_tx_data(skb);
- 	tx_data->sn = pkt_info->sn;

+ 0 - 85
package/kernel/mac80211/patches/rtl/031-v6.13-wifi-rtw88-Make-txagc_remnant_ofdm-an-array.patch

@@ -1,85 +0,0 @@
-From abb0f19492ba6289ffba6ec1057c0426240958af Mon Sep 17 00:00:00 2001
-From: Bitterblue Smith <[email protected]>
-Date: Wed, 23 Oct 2024 17:10:54 +0300
-Subject: [PATCH] wifi: rtw88: Make txagc_remnant_ofdm an array
-
-txagc_remnant_ofdm member of struct rtw_dm_info should be different for
-each RF path, so make it an array of size RTW_RF_PATH_MAX (4).
-
-Until now all the chips using this had only one RF path, but RTL8812AU
-has two, and RTL8814AU has four.
-
-Signed-off-by: Bitterblue Smith <[email protected]>
-Signed-off-by: Ping-Ke Shih <[email protected]>
-Link: https://patch.msgid.link/[email protected]
----
- drivers/net/wireless/realtek/rtw88/main.h     | 2 +-
- drivers/net/wireless/realtek/rtw88/phy.c      | 4 ++--
- drivers/net/wireless/realtek/rtw88/rtw8703b.c | 4 ++--
- drivers/net/wireless/realtek/rtw88/rtw8723d.c | 4 ++--
- 4 files changed, 7 insertions(+), 7 deletions(-)
-
---- a/drivers/net/wireless/realtek/rtw88/main.h
-+++ b/drivers/net/wireless/realtek/rtw88/main.h
-@@ -1715,7 +1715,7 @@ struct rtw_dm_info {
- 	bool pwr_trk_init_trigger;
- 	struct ewma_thermal avg_thermal[RTW_RF_PATH_MAX];
- 	s8 txagc_remnant_cck;
--	s8 txagc_remnant_ofdm;
-+	s8 txagc_remnant_ofdm[RTW_RF_PATH_MAX];
- 	u8 rx_cck_agc_report_type;
- 
- 	/* backup dack results for each path and I/Q */
---- a/drivers/net/wireless/realtek/rtw88/phy.c
-+++ b/drivers/net/wireless/realtek/rtw88/phy.c
-@@ -2169,8 +2169,8 @@ void rtw_get_tx_power_params(struct rtw_
- 
- 	*limit = rtw_phy_get_tx_power_limit(rtwdev, band, bw, path,
- 					    rate, ch, regd);
--	*remnant = (rate <= DESC_RATE11M ? dm_info->txagc_remnant_cck :
--		    dm_info->txagc_remnant_ofdm);
-+	*remnant = rate <= DESC_RATE11M ? dm_info->txagc_remnant_cck :
-+					  dm_info->txagc_remnant_ofdm[path];
- 	*sar = rtw_phy_get_tx_power_sar(rtwdev, hal->sar_band, path, rate);
- }
- 
---- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c
-+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
-@@ -637,7 +637,7 @@ static void rtw8703b_pwrtrack_init(struc
- 	dm_info->pwr_trk_init_trigger = true;
- 	dm_info->thermal_meter_k = rtwdev->efuse.thermal_meter_k;
- 	dm_info->txagc_remnant_cck = 0;
--	dm_info->txagc_remnant_ofdm = 0;
-+	dm_info->txagc_remnant_ofdm[RF_PATH_A] = 0;
- }
- 
- static void rtw8703b_phy_set_param(struct rtw_dev *rtwdev)
-@@ -1589,7 +1589,7 @@ static void rtw8703b_pwrtrack_set_ofdm_p
- {
- 	struct rtw_dm_info *dm_info = &rtwdev->dm_info;
- 
--	dm_info->txagc_remnant_ofdm = txagc_idx;
-+	dm_info->txagc_remnant_ofdm[RF_PATH_A] = txagc_idx;
- 
- 	/* Only path A is calibrated for rtl8703b */
- 	rtw8703b_set_iqk_matrix(rtwdev, swing_idx, RF_PATH_A);
---- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c
-+++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
-@@ -79,7 +79,7 @@ static void rtw8723d_pwrtrack_init(struc
- 	dm_info->pwr_trk_init_trigger = true;
- 	dm_info->thermal_meter_k = rtwdev->efuse.thermal_meter_k;
- 	dm_info->txagc_remnant_cck = 0;
--	dm_info->txagc_remnant_ofdm = 0;
-+	dm_info->txagc_remnant_ofdm[RF_PATH_A] = 0;
- }
- 
- static void rtw8723d_phy_set_param(struct rtw_dev *rtwdev)
-@@ -1265,7 +1265,7 @@ static void rtw8723d_pwrtrack_set_ofdm_p
- {
- 	struct rtw_dm_info *dm_info = &rtwdev->dm_info;
- 
--	dm_info->txagc_remnant_ofdm = txagc_idx;
-+	dm_info->txagc_remnant_ofdm[RF_PATH_A] = txagc_idx;
- 
- 	rtw8723d_set_iqk_matrix(rtwdev, swing_idx, RF_PATH_A);
- 	rtw8723d_set_iqk_matrix(rtwdev, swing_idx, RF_PATH_B);

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

@@ -1,115 +0,0 @@
-From 82a617413e8545775ec03a1970809ac5f549ef32 Mon Sep 17 00:00:00 2001
-From: Bitterblue Smith <[email protected]>
-Date: Wed, 23 Oct 2024 17:12:06 +0300
-Subject: [PATCH] wifi: rtw88: Support TX page sizes bigger than 128
-
-All the chips supported so far have a TX page size of 128 bytes.
-
-Change the type of the page_size member of struct rtw_chip_info from u8
-to u16 in order to support RTL8821AU (page size of 256 bytes) and
-RTL8812AU (page size of 512 bytes). Also change the types of several
-related variables and function parameters from u8 to u16.
-
-The TX page size is used, among other things, to construct the beacon,
-null data, QOS null data, and PS poll templates which are uploaded to
-the chip's reserved page. Each template needs to be aligned on a
-multiple of the TX page size. Power saving can't work if the TX page
-size is wrong.
-
-Signed-off-by: Bitterblue Smith <[email protected]>
-Signed-off-by: Ping-Ke Shih <[email protected]>
-Link: https://patch.msgid.link/[email protected]
----
- drivers/net/wireless/realtek/rtw88/debug.c |  2 +-
- drivers/net/wireless/realtek/rtw88/fw.c    | 21 +++++++++++----------
- drivers/net/wireless/realtek/rtw88/mac.c   |  2 +-
- drivers/net/wireless/realtek/rtw88/main.h  |  2 +-
- 4 files changed, 14 insertions(+), 13 deletions(-)
-
---- a/drivers/net/wireless/realtek/rtw88/debug.c
-+++ b/drivers/net/wireless/realtek/rtw88/debug.c
-@@ -308,7 +308,7 @@ static int rtw_debugfs_get_rsvd_page(str
- {
- 	struct rtw_debugfs_priv *debugfs_priv = m->private;
- 	struct rtw_dev *rtwdev = debugfs_priv->rtwdev;
--	u8 page_size = rtwdev->chip->page_size;
-+	u16 page_size = rtwdev->chip->page_size;
- 	u32 buf_size = debugfs_priv->rsvd_page.page_num * page_size;
- 	u32 offset = debugfs_priv->rsvd_page.page_offset * page_size;
- 	u8 *buf;
---- a/drivers/net/wireless/realtek/rtw88/fw.c
-+++ b/drivers/net/wireless/realtek/rtw88/fw.c
-@@ -1293,13 +1293,13 @@ static void rtw_fill_rsvd_page_desc(stru
- 	rtw_tx_fill_tx_desc(rtwdev, &pkt_info, skb);
- }
- 
--static inline u8 rtw_len_to_page(unsigned int len, u8 page_size)
-+static inline u8 rtw_len_to_page(unsigned int len, u16 page_size)
- {
- 	return DIV_ROUND_UP(len, page_size);
- }
- 
--static void rtw_rsvd_page_list_to_buf(struct rtw_dev *rtwdev, u8 page_size,
--				      u8 page_margin, u32 page, u8 *buf,
-+static void rtw_rsvd_page_list_to_buf(struct rtw_dev *rtwdev, u16 page_size,
-+				      u16 page_margin, u32 page, u8 *buf,
- 				      struct rtw_rsvd_page *rsvd_pkt)
- {
- 	struct sk_buff *skb = rsvd_pkt->skb;
-@@ -1601,13 +1601,13 @@ static int  __rtw_build_rsvd_page_from_v
- 
- static u8 *rtw_build_rsvd_page(struct rtw_dev *rtwdev, u32 *size)
- {
--	struct ieee80211_hw *hw = rtwdev->hw;
- 	const struct rtw_chip_info *chip = rtwdev->chip;
--	struct sk_buff *iter;
-+	struct ieee80211_hw *hw = rtwdev->hw;
- 	struct rtw_rsvd_page *rsvd_pkt;
--	u32 page = 0;
-+	struct sk_buff *iter;
-+	u16 page_size, page_margin, tx_desc_sz;
- 	u8 total_page = 0;
--	u8 page_size, page_margin, tx_desc_sz;
-+	u32 page = 0;
- 	u8 *buf;
- 	int ret;
- 
-@@ -2013,12 +2013,13 @@ static int _rtw_hw_scan_update_probe_req
- {
- 	const struct rtw_chip_info *chip = rtwdev->chip;
- 	struct sk_buff *skb, *tmp;
--	u8 page_offset = 1, *buf, page_size = chip->page_size;
- 	u16 pg_addr = rtwdev->fifo.rsvd_h2c_info_addr, loc;
--	u16 buf_offset = page_size * page_offset;
- 	u8 tx_desc_sz = chip->tx_pkt_desc_sz;
--	u8 page_cnt, pages;
-+	u16 page_size = chip->page_size;
-+	u8 page_offset = 1, *buf;
-+	u16 buf_offset = page_size * page_offset;
- 	unsigned int pkt_len;
-+	u8 page_cnt, pages;
- 	int ret;
- 
- 	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
- 
- 	/* config rsvd page num */
- 	fifo->rsvd_drv_pg_num = chip->rsvd_drv_pg_num;
--	fifo->txff_pg_num = chip->txff_size >> 7;
-+	fifo->txff_pg_num = chip->txff_size / chip->page_size;
- 	if (rtw_chip_wcpu_11n(rtwdev))
- 		fifo->rsvd_pg_num = fifo->rsvd_drv_pg_num;
- 	else
---- a/drivers/net/wireless/realtek/rtw88/main.h
-+++ b/drivers/net/wireless/realtek/rtw88/main.h
-@@ -1187,7 +1187,7 @@ struct rtw_chip_info {
- 	u32 fw_rxff_size;
- 	u16 rsvd_drv_pg_num;
- 	u8 band;
--	u8 page_size;
-+	u16 page_size;
- 	u8 csi_buf_pg_num;
- 	u8 dig_max;
- 	u8 dig_min;

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

@@ -1,297 +0,0 @@
-From 67d915604e6993ff627ac001983a2de63ff71b13 Mon Sep 17 00:00:00 2001
-From: Bitterblue Smith <[email protected]>
-Date: Wed, 23 Oct 2024 17:12:39 +0300
-Subject: [PATCH] wifi: rtw88: Move pwr_track_tbl to struct rtw_rfe_def
-
-RTL8812AU uses one set of TX power tracking tables for RFE 3, and
-another set for everything else.
-
-Move pwr_track_tbl from struct rtw_chip_info to struct rtw_rfe_def in
-order to load the right set of tables for each RFE (RF front end) type.
-
-Signed-off-by: Bitterblue Smith <[email protected]>
-Signed-off-by: Ping-Ke Shih <[email protected]>
-Link: https://patch.msgid.link/[email protected]
----
- drivers/net/wireless/realtek/rtw88/main.h     |  8 ++++---
- drivers/net/wireless/realtek/rtw88/phy.c      |  3 ++-
- drivers/net/wireless/realtek/rtw88/rtw8703b.c | 12 +++++-----
- drivers/net/wireless/realtek/rtw88/rtw8723d.c | 12 +++++-----
- drivers/net/wireless/realtek/rtw88/rtw8723x.c |  3 ++-
- drivers/net/wireless/realtek/rtw88/rtw8821c.c | 17 +++++++-------
- drivers/net/wireless/realtek/rtw88/rtw8822b.c | 15 ++++++------
- drivers/net/wireless/realtek/rtw88/rtw8822c.c | 23 +++++++++----------
- 8 files changed, 47 insertions(+), 46 deletions(-)
-
---- a/drivers/net/wireless/realtek/rtw88/main.h
-+++ b/drivers/net/wireless/realtek/rtw88/main.h
-@@ -1099,17 +1099,20 @@ enum rtw_rfe_fem {
- struct rtw_rfe_def {
- 	const struct rtw_table *phy_pg_tbl;
- 	const struct rtw_table *txpwr_lmt_tbl;
-+	const struct rtw_pwr_track_tbl *pwr_track_tbl;
- 	const struct rtw_table *agc_btg_tbl;
- };
- 
--#define RTW_DEF_RFE(chip, bb_pg, pwrlmt) {				  \
-+#define RTW_DEF_RFE(chip, bb_pg, pwrlmt, track) {				  \
- 	.phy_pg_tbl = &rtw ## chip ## _bb_pg_type ## bb_pg ## _tbl,	  \
- 	.txpwr_lmt_tbl = &rtw ## chip ## _txpwr_lmt_type ## pwrlmt ## _tbl, \
-+	.pwr_track_tbl = &rtw ## chip ## _pwr_track_type ## track ## _tbl, \
- 	}
- 
--#define RTW_DEF_RFE_EXT(chip, bb_pg, pwrlmt, btg) {			  \
-+#define RTW_DEF_RFE_EXT(chip, bb_pg, pwrlmt, track, btg) {			  \
- 	.phy_pg_tbl = &rtw ## chip ## _bb_pg_type ## bb_pg ## _tbl,	  \
- 	.txpwr_lmt_tbl = &rtw ## chip ## _txpwr_lmt_type ## pwrlmt ## _tbl, \
-+	.pwr_track_tbl = &rtw ## chip ## _pwr_track_type ## track ## _tbl, \
- 	.agc_btg_tbl = &rtw ## chip ## _agc_btg_type ## btg ## _tbl, \
- 	}
- 
-@@ -1243,7 +1246,6 @@ struct rtw_chip_info {
- 	u16 dpd_ratemask;
- 	u8 iqk_threshold;
- 	u8 lck_threshold;
--	const struct rtw_pwr_track_tbl *pwr_track_tbl;
- 
- 	u8 bfer_su_max_num;
- 	u8 bfer_mu_max_num;
---- a/drivers/net/wireless/realtek/rtw88/phy.c
-+++ b/drivers/net/wireless/realtek/rtw88/phy.c
-@@ -2384,7 +2384,8 @@ void rtw_phy_init_tx_power(struct rtw_de
- void rtw_phy_config_swing_table(struct rtw_dev *rtwdev,
- 				struct rtw_swing_table *swing_table)
- {
--	const struct rtw_pwr_track_tbl *tbl = rtwdev->chip->pwr_track_tbl;
-+	const struct rtw_rfe_def *rfe_def = rtw_get_rfe_def(rtwdev);
-+	const struct rtw_pwr_track_tbl *tbl = rfe_def->pwr_track_tbl;
- 	u8 channel = rtwdev->hal.current_channel;
- 
- 	if (IS_CH_2G_BAND(channel)) {
---- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c
-+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
-@@ -493,11 +493,6 @@ static const struct rtw_pwr_seq_cmd * co
- 	NULL
- };
- 
--static const struct rtw_rfe_def rtw8703b_rfe_defs[] = {
--	[0] = { .phy_pg_tbl	= &rtw8703b_bb_pg_tbl,
--		.txpwr_lmt_tbl	= &rtw8703b_txpwr_lmt_tbl,},
--};
--
- static const struct rtw_page_table page_table_8703b[] = {
- 	{12, 2, 2, 0, 1},
- 	{12, 2, 2, 0, 1},
-@@ -1818,6 +1813,12 @@ static const struct rtw_pwr_track_tbl rt
- 	.pwrtrk_xtal_p = rtw8703b_pwrtrk_xtal_p,
- };
- 
-+static const struct rtw_rfe_def rtw8703b_rfe_defs[] = {
-+	[0] = { .phy_pg_tbl	= &rtw8703b_bb_pg_tbl,
-+		.txpwr_lmt_tbl	= &rtw8703b_txpwr_lmt_tbl,
-+		.pwr_track_tbl	= &rtw8703b_rtw_pwr_track_tbl, },
-+};
-+
- /* Shared-Antenna Coex Table */
- static const struct coex_table_para table_sant_8703b[] = {
- 	{0xffffffff, 0xffffffff}, /* case-0 */
-@@ -1997,7 +1998,6 @@ const struct rtw_chip_info rtw8703b_hw_s
- 	.rfe_defs_size = ARRAY_SIZE(rtw8703b_rfe_defs),
- 
- 	.iqk_threshold = 8,
--	.pwr_track_tbl = &rtw8703b_rtw_pwr_track_tbl,
- 
- 	/* WOWLAN firmware exists, but not implemented yet */
- 	.wow_fw_name = "rtw88/rtw8703b_wow_fw.bin",
---- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c
-+++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
-@@ -2020,11 +2020,6 @@ static const struct rtw_intf_phy_para_ta
- 	.n_gen1_para	= ARRAY_SIZE(pcie_gen1_param_8723d),
- };
- 
--static const struct rtw_rfe_def rtw8723d_rfe_defs[] = {
--	[0] = { .phy_pg_tbl	= &rtw8723d_bb_pg_tbl,
--		.txpwr_lmt_tbl	= &rtw8723d_txpwr_lmt_tbl,},
--};
--
- static const u8 rtw8723d_pwrtrk_2gb_n[] = {
- 	0, 0, 1, 1, 1, 2, 2, 3, 4, 4, 4, 4, 5, 5, 5,
- 	6, 6, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 10, 10
-@@ -2088,6 +2083,12 @@ static const struct rtw_pwr_track_tbl rt
- 	.pwrtrk_xtal_n = rtw8723d_pwrtrk_xtal_n,
- };
- 
-+static const struct rtw_rfe_def rtw8723d_rfe_defs[] = {
-+	[0] = { .phy_pg_tbl	= &rtw8723d_bb_pg_tbl,
-+		.txpwr_lmt_tbl	= &rtw8723d_txpwr_lmt_tbl,
-+		.pwr_track_tbl	= &rtw8723d_rtw_pwr_track_tbl, },
-+};
-+
- static const struct rtw_reg_domain coex_info_hw_regs_8723d[] = {
- 	{0x948, MASKDWORD, RTW_REG_DOMAIN_MAC32},
- 	{0x67, BIT(7), RTW_REG_DOMAIN_MAC8},
-@@ -2159,7 +2160,6 @@ const struct rtw_chip_info rtw8723d_hw_s
- 	.rfe_defs = rtw8723d_rfe_defs,
- 	.rfe_defs_size = ARRAY_SIZE(rtw8723d_rfe_defs),
- 	.rx_ldpc = false,
--	.pwr_track_tbl = &rtw8723d_rtw_pwr_track_tbl,
- 	.iqk_threshold = 8,
- 	.ampdu_density = IEEE80211_HT_MPDU_DENSITY_16,
- 	.max_scan_ie_len = IEEE80211_MAX_DATA_LEN,
---- a/drivers/net/wireless/realtek/rtw88/rtw8723x.c
-+++ b/drivers/net/wireless/realtek/rtw88/rtw8723x.c
-@@ -595,7 +595,8 @@ void __rtw8723x_pwrtrack_set_xtal(struct
- 				  u8 delta)
- {
- 	struct rtw_dm_info *dm_info = &rtwdev->dm_info;
--	const struct rtw_pwr_track_tbl *tbl = rtwdev->chip->pwr_track_tbl;
-+	const struct rtw_rfe_def *rfe_def = rtw_get_rfe_def(rtwdev);
-+	const struct rtw_pwr_track_tbl *tbl = rfe_def->pwr_track_tbl;
- 	const s8 *pwrtrk_xtal;
- 	s8 xtal_cap;
- 
---- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c
-+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
-@@ -1581,13 +1581,6 @@ static const struct rtw_intf_phy_para_ta
- 	.n_gen2_para	= ARRAY_SIZE(pcie_gen2_param_8821c),
- };
- 
--static const struct rtw_rfe_def rtw8821c_rfe_defs[] = {
--	[0] = RTW_DEF_RFE(8821c, 0, 0),
--	[2] = RTW_DEF_RFE_EXT(8821c, 0, 0, 2),
--	[4] = RTW_DEF_RFE_EXT(8821c, 0, 0, 2),
--	[6] = RTW_DEF_RFE(8821c, 0, 0),
--};
--
- static const struct rtw_hw_reg rtw8821c_dig[] = {
- 	[0] = { .addr = 0xc50, .mask = 0x7f },
- };
-@@ -1899,7 +1892,7 @@ static const u8 rtw8821c_pwrtrk_2g_cck_a
- 	5, 6, 6, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9
- };
- 
--static const struct rtw_pwr_track_tbl rtw8821c_rtw_pwr_track_tbl = {
-+static const struct rtw_pwr_track_tbl rtw8821c_pwr_track_type0_tbl = {
- 	.pwrtrk_5gb_n[0] = rtw8821c_pwrtrk_5gb_n[0],
- 	.pwrtrk_5gb_n[1] = rtw8821c_pwrtrk_5gb_n[1],
- 	.pwrtrk_5gb_n[2] = rtw8821c_pwrtrk_5gb_n[2],
-@@ -1922,6 +1915,13 @@ static const struct rtw_pwr_track_tbl rt
- 	.pwrtrk_2g_ccka_p = rtw8821c_pwrtrk_2g_cck_a_p,
- };
- 
-+static const struct rtw_rfe_def rtw8821c_rfe_defs[] = {
-+	[0] = RTW_DEF_RFE(8821c, 0, 0, 0),
-+	[2] = RTW_DEF_RFE_EXT(8821c, 0, 0, 0, 2),
-+	[4] = RTW_DEF_RFE_EXT(8821c, 0, 0, 0, 2),
-+	[6] = RTW_DEF_RFE(8821c, 0, 0, 0),
-+};
-+
- static const struct rtw_reg_domain coex_info_hw_regs_8821c[] = {
- 	{0xCB0, MASKDWORD, RTW_REG_DOMAIN_MAC32},
- 	{0xCB4, MASKDWORD, RTW_REG_DOMAIN_MAC32},
-@@ -1994,7 +1994,6 @@ const struct rtw_chip_info rtw8821c_hw_s
- 	.rfe_defs = rtw8821c_rfe_defs,
- 	.rfe_defs_size = ARRAY_SIZE(rtw8821c_rfe_defs),
- 	.rx_ldpc = false,
--	.pwr_track_tbl = &rtw8821c_rtw_pwr_track_tbl,
- 	.iqk_threshold = 8,
- 	.bfer_su_max_num = 2,
- 	.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
- 	.n_gen2_para	= ARRAY_SIZE(pcie_gen2_param_8822b),
- };
- 
--static const struct rtw_rfe_def rtw8822b_rfe_defs[] = {
--	[2] = RTW_DEF_RFE(8822b, 2, 2),
--	[3] = RTW_DEF_RFE(8822b, 3, 0),
--	[5] = RTW_DEF_RFE(8822b, 5, 5),
--};
--
- 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
- 	10, 11, 11, 12, 12, 13, 13, 14, 14, 15
- };
- 
--static const struct rtw_pwr_track_tbl rtw8822b_rtw_pwr_track_tbl = {
-+static const struct rtw_pwr_track_tbl rtw8822b_pwr_track_type0_tbl = {
- 	.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
- 	.pwrtrk_2g_ccka_p = rtw8822b_pwrtrk_2g_cck_a_p,
- };
- 
-+static const struct rtw_rfe_def rtw8822b_rfe_defs[] = {
-+	[2] = RTW_DEF_RFE(8822b, 2, 2, 0),
-+	[3] = RTW_DEF_RFE(8822b, 3, 0, 0),
-+	[5] = RTW_DEF_RFE(8822b, 5, 5, 0),
-+};
-+
- 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
- 	.rf_tbl = {&rtw8822b_rf_a_tbl, &rtw8822b_rf_b_tbl},
- 	.rfe_defs = rtw8822b_rfe_defs,
- 	.rfe_defs_size = ARRAY_SIZE(rtw8822b_rfe_defs),
--	.pwr_track_tbl = &rtw8822b_rtw_pwr_track_tbl,
- 	.iqk_threshold = 8,
- 	.bfer_su_max_num = 2,
- 	.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
- 	.n_gen2_para	= ARRAY_SIZE(pcie_gen2_param_8822c),
- };
- 
--static const struct rtw_rfe_def rtw8822c_rfe_defs[] = {
--	[0] = RTW_DEF_RFE(8822c, 0, 0),
--	[1] = RTW_DEF_RFE(8822c, 0, 0),
--	[2] = RTW_DEF_RFE(8822c, 0, 0),
--	[3] = RTW_DEF_RFE(8822c, 0, 0),
--	[4] = RTW_DEF_RFE(8822c, 0, 0),
--	[5] = RTW_DEF_RFE(8822c, 0, 5),
--	[6] = RTW_DEF_RFE(8822c, 0, 0),
--};
--
- 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
- 	18, 18, 19, 20, 21, 22, 23, 24, 24, 25
- };
- 
--static const struct rtw_pwr_track_tbl rtw8822c_rtw_pwr_track_tbl = {
-+static const struct rtw_pwr_track_tbl rtw8822c_pwr_track_type0_tbl = {
- 	.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
- 	.pwrtrk_2g_ccka_p = rtw8822c_pwrtrk_2g_cck_a_p,
- };
- 
-+static const struct rtw_rfe_def rtw8822c_rfe_defs[] = {
-+	[0] = RTW_DEF_RFE(8822c, 0, 0, 0),
-+	[1] = RTW_DEF_RFE(8822c, 0, 0, 0),
-+	[2] = RTW_DEF_RFE(8822c, 0, 0, 0),
-+	[3] = RTW_DEF_RFE(8822c, 0, 0, 0),
-+	[4] = RTW_DEF_RFE(8822c, 0, 0, 0),
-+	[5] = RTW_DEF_RFE(8822c, 0, 5, 0),
-+	[6] = RTW_DEF_RFE(8822c, 0, 0, 0),
-+};
-+
- 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
- 	.rfe_defs_size = ARRAY_SIZE(rtw8822c_rfe_defs),
- 	.en_dis_dpd = true,
- 	.dpd_ratemask = DIS_DPD_RATEALL,
--	.pwr_track_tbl = &rtw8822c_rtw_pwr_track_tbl,
- 	.iqk_threshold = 8,
- 	.lck_threshold = 8,
- 	.bfer_su_max_num = 2,

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor