mirror of
https://git.openwrt.org/openwrt/openwrt.git
synced 2026-01-28 03:37:17 +01:00
mac80211: Update to 6.12.44
Updates backports to kernel version 6.12.44. This includes many fixes for normal and security bugs. The removed patches were applied upstream and backported to kernel 6.12.44. This is based on the same backports code as used for the old tar based on kernel 6.12.6. removed upstream patches: ath11k/001-wifi-ath11k-Fix-DMA-buffer-allocation-to-resolve-SWIOTLB-issues.patch [1] ath11k/002-wifi-ath11k-use-dma-alloc-noncoherent-for-rx-tid-buffer-allocation.patch [2] rtl/050-wifi-rtlwifi-rtl8821ae-phy-restore-removed-code-to-f.patch [3] subsys/400-v6.16-wifi-mac80211-do-not-offer-a-mesh-path-if-forwarding.patch [4] Part of the following patch was merged upstream: subsys/350-wifi-mac80211-Add-link-iteration-macro-for-link-data.patch [5] [1]: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=linux-6.12.y&id=b92c5179db4b19152c6492d1dfda457bff789272 [2]: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=linux-6.12.y&id=115360031be90aa6cf11d718caf19fea94824285 [3]: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=linux-6.12.y&id=411c7738669907b5e2288ee7a0396ec0980e58fc [4]: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=linux-6.12.y&id=4c43d2c649269e91a81cbc6b2d6b7c552d3eeb45 [5]: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=linux-6.12.y&id=a4afc3d522ca03920fe14c2b95638237fb6edbd8 Link: https://github.com/openwrt/openwrt/pull/19920 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
parent
faf4f1e49e
commit
b4b9288f2a
57 changed files with 217 additions and 657 deletions
|
|
@ -10,13 +10,13 @@ include $(INCLUDE_DIR)/kernel.mk
|
|||
|
||||
PKG_NAME:=mac80211
|
||||
|
||||
PKG_VERSION:=6.12.6
|
||||
PKG_VERSION:=6.12.44
|
||||
PKG_RELEASE:=2
|
||||
PKG_LICENSE:=GPL-2.0-only
|
||||
PKG_LICENSE_FILES:=COPYING
|
||||
|
||||
PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources/
|
||||
PKG_HASH:=28ec39425a1b3270e1422d92a8131a6a3d8919cc13e8ee250c315e55d922ba68
|
||||
PKG_HASH:=85a9f92ddba3bf2970a089e7af576c1135217c387205f4481ea9131c0c45c509
|
||||
|
||||
PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz
|
||||
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(if $(BUILD_VARIANT),$(PKG_NAME)-$(BUILD_VARIANT)/)backports-$(PKG_VERSION)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
--- a/net/wireless/reg.c
|
||||
+++ b/net/wireless/reg.c
|
||||
@@ -3364,6 +3364,8 @@ void regulatory_hint_country_ie(struct w
|
||||
@@ -3367,6 +3367,8 @@ void regulatory_hint_country_ie(struct w
|
||||
enum environment_cap env = ENVIRON_ANY;
|
||||
struct regulatory_request *request = NULL, *lr;
|
||||
|
||||
|
|
@ -9,7 +9,7 @@
|
|||
/* IE len must be evenly divisible by 2 */
|
||||
if (country_ie_len & 0x01)
|
||||
return;
|
||||
@@ -3615,6 +3617,7 @@ static bool is_wiphy_all_set_reg_flag(en
|
||||
@@ -3618,6 +3620,7 @@ static bool is_wiphy_all_set_reg_flag(en
|
||||
|
||||
void regulatory_hint_disconnect(void)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ Signed-off-by: Sven Eckelmann <sven@open-mesh.com>
|
|||
|
||||
--- a/drivers/net/wireless/ath/ath10k/core.c
|
||||
+++ b/drivers/net/wireless/ath/ath10k/core.c
|
||||
@@ -3539,6 +3539,16 @@ int ath10k_core_register(struct ath10k *
|
||||
@@ -3577,6 +3577,16 @@ int ath10k_core_register(struct ath10k *
|
||||
|
||||
queue_work(ar->workqueue, &ar->register_work);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/ath/ath10k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath10k/mac.c
|
||||
@@ -9919,6 +9919,21 @@ static int ath10k_mac_init_rd(struct ath
|
||||
@@ -9924,6 +9924,21 @@ static int ath10k_mac_init_rd(struct ath
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -22,7 +22,7 @@
|
|||
int ath10k_mac_register(struct ath10k *ar)
|
||||
{
|
||||
static const u32 cipher_suites[] = {
|
||||
@@ -10281,6 +10296,12 @@ int ath10k_mac_register(struct ath10k *a
|
||||
@@ -10286,6 +10301,12 @@ int ath10k_mac_register(struct ath10k *a
|
||||
|
||||
ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER;
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ Signed-off-by: Mathias Kresin <dev@kresin.me>
|
|||
|
||||
--- a/drivers/net/wireless/ath/ath10k/core.h
|
||||
+++ b/drivers/net/wireless/ath/ath10k/core.h
|
||||
@@ -1315,6 +1315,10 @@ struct ath10k {
|
||||
@@ -1320,6 +1320,10 @@ struct ath10k {
|
||||
s32 tx_power_2g_limit;
|
||||
s32 tx_power_5g_limit;
|
||||
|
||||
|
|
@ -40,7 +40,7 @@ Signed-off-by: Mathias Kresin <dev@kresin.me>
|
|||
if (ret)
|
||||
--- a/drivers/net/wireless/ath/ath10k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath10k/mac.c
|
||||
@@ -10297,7 +10297,7 @@ int ath10k_mac_register(struct ath10k *a
|
||||
@@ -10302,7 +10302,7 @@ int ath10k_mac_register(struct ath10k *a
|
||||
ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER;
|
||||
|
||||
#ifdef CPTCFG_MAC80211_LEDS
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
|
|||
#include <linux/property.h>
|
||||
#include <linux/dmi.h>
|
||||
#include <linux/ctype.h>
|
||||
@@ -3411,6 +3412,8 @@ static int ath10k_core_probe_fw(struct a
|
||||
@@ -3449,6 +3450,8 @@ static int ath10k_core_probe_fw(struct a
|
||||
|
||||
device_get_mac_address(ar->dev, ar->mac_addr);
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
|||
|
||||
--- a/drivers/net/wireless/ath/ath10k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath10k/mac.c
|
||||
@@ -10089,7 +10089,6 @@ int ath10k_mac_register(struct ath10k *a
|
||||
@@ -10094,7 +10094,6 @@ int ath10k_mac_register(struct ath10k *a
|
||||
ieee80211_hw_set(ar->hw, CHANCTX_STA_CSA);
|
||||
ieee80211_hw_set(ar->hw, QUEUE_CONTROL);
|
||||
ieee80211_hw_set(ar->hw, SUPPORTS_TX_FRAG);
|
||||
|
|
|
|||
|
|
@ -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 <tharvey@gateworks.com>
|
||||
Closes: https://lore.kernel.org/all/20241210041133.GA17116@lst.de/
|
||||
Signed-off-by: P Praneesh <quic_ppranees@quicinc.com>
|
||||
Tested-by: Tim Harvey <tharvey@gateworks.com>
|
||||
Link: https://patch.msgid.link/20250119164219.647059-2-quic_ppranees@quicinc.com
|
||||
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
|
||||
--- 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);
|
||||
|
|
@ -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 <quic_ppranees@quicinc.com>
|
||||
--- 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,
|
||||
|
|
@ -31,7 +31,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
|||
{
|
||||
.hw_rev = ATH11K_HW_IPQ8074,
|
||||
.name = "ipq8074 hw2.0",
|
||||
@@ -2147,7 +2147,8 @@ static void ath11k_core_reset(struct wor
|
||||
@@ -2200,7 +2200,8 @@ static void ath11k_core_reset(struct wor
|
||||
static int ath11k_init_hw_params(struct ath11k_base *ab)
|
||||
{
|
||||
const struct ath11k_hw_params *hw_params = NULL;
|
||||
|
|
@ -41,7 +41,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
|||
|
||||
for (i = 0; i < ARRAY_SIZE(ath11k_hw_params); i++) {
|
||||
hw_params = &ath11k_hw_params[i];
|
||||
@@ -2163,7 +2164,31 @@ static int ath11k_init_hw_params(struct
|
||||
@@ -2216,7 +2217,31 @@ static int ath11k_init_hw_params(struct
|
||||
|
||||
ab->hw_params = *hw_params;
|
||||
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||
};
|
||||
|
||||
static __le32 ath12k_wmi_tlv_hdr(u32 cmd, u32 len)
|
||||
@@ -2364,7 +2366,10 @@ int ath12k_wmi_send_scan_start_cmd(struc
|
||||
@@ -2374,7 +2376,10 @@ int ath12k_wmi_send_scan_start_cmd(struc
|
||||
cmd->scan_id = cpu_to_le32(arg->scan_id);
|
||||
cmd->scan_req_id = cpu_to_le32(arg->scan_req_id);
|
||||
cmd->vdev_id = cpu_to_le32(arg->vdev_id);
|
||||
|
|
@ -133,7 +133,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||
cmd->notify_scan_events = cpu_to_le32(arg->notify_scan_events);
|
||||
|
||||
ath12k_wmi_copy_scan_event_cntrl_flags(cmd, arg);
|
||||
@@ -3084,6 +3089,110 @@ out:
|
||||
@@ -3094,6 +3099,110 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -244,7 +244,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||
int
|
||||
ath12k_wmi_send_twt_enable_cmd(struct ath12k *ar, u32 pdev_id)
|
||||
{
|
||||
@@ -5669,6 +5778,50 @@ static void ath12k_wmi_op_ep_tx_credits(
|
||||
@@ -5714,6 +5823,50 @@ static void ath12k_wmi_op_ep_tx_credits(
|
||||
wake_up(&ab->wmi_ab.tx_credits_wq);
|
||||
}
|
||||
|
||||
|
|
@ -295,7 +295,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||
static void ath12k_wmi_htc_tx_complete(struct ath12k_base *ab,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
@@ -7270,6 +7423,9 @@ static void ath12k_wmi_op_rx(struct ath1
|
||||
@@ -7317,6 +7470,9 @@ static void ath12k_wmi_op_rx(struct ath1
|
||||
case WMI_GTK_OFFLOAD_STATUS_EVENTID:
|
||||
ath12k_wmi_gtk_offload_status_event(ab, skb);
|
||||
break;
|
||||
|
|
@ -336,9 +336,9 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||
struct wmi_delba_send_cmd {
|
||||
__le32 tlv_header;
|
||||
__le32 vdev_id;
|
||||
@@ -3945,6 +3967,16 @@ struct ath12k_wmi_eht_rate_set_params {
|
||||
@@ -3944,6 +3966,16 @@ struct ath12k_wmi_eht_rate_set_params {
|
||||
#define REG_ALPHA2_LEN 2
|
||||
#define MAX_6G_REG_RULES 5
|
||||
#define REG_US_5G_NUM_REG_RULES 4
|
||||
|
||||
+struct wmi_set_current_country_arg {
|
||||
+ u8 alpha2[REG_ALPHA2_LEN];
|
||||
|
|
@ -353,7 +353,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||
enum wmi_start_event_param {
|
||||
WMI_VDEV_START_RESP_EVENT = 0,
|
||||
WMI_VDEV_RESTART_RESP_EVENT,
|
||||
@@ -5547,11 +5579,17 @@ int ath12k_wmi_send_bcn_offload_control_
|
||||
@@ -5546,11 +5578,17 @@ int ath12k_wmi_send_bcn_offload_control_
|
||||
u32 vdev_id, u32 bcn_ctrl_op);
|
||||
int ath12k_wmi_send_init_country_cmd(struct ath12k *ar,
|
||||
struct ath12k_wmi_init_country_arg *arg);
|
||||
|
|
@ -373,7 +373,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||
struct ath12k_wmi_rx_reorder_queue_remove_arg *arg);
|
||||
--- a/drivers/net/wireless/ath/ath12k/core.c
|
||||
+++ b/drivers/net/wireless/ath/ath12k/core.c
|
||||
@@ -1014,6 +1014,7 @@ void ath12k_core_halt(struct ath12k *ar)
|
||||
@@ -1017,6 +1017,7 @@ void ath12k_core_halt(struct ath12k *ar)
|
||||
cancel_delayed_work_sync(&ar->scan.timeout);
|
||||
cancel_work_sync(&ar->regd_update_work);
|
||||
cancel_work_sync(&ab->rfkill_work);
|
||||
|
|
@ -381,7 +381,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||
|
||||
rcu_assign_pointer(ab->pdevs_active[ar->pdev_idx], NULL);
|
||||
synchronize_rcu();
|
||||
@@ -1021,6 +1022,34 @@ void ath12k_core_halt(struct ath12k *ar)
|
||||
@@ -1029,6 +1030,34 @@ void ath12k_core_halt(struct ath12k *ar)
|
||||
idr_init(&ar->txmgmt_idr);
|
||||
}
|
||||
|
||||
|
|
@ -416,7 +416,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||
static void ath12k_core_pre_reconfigure_recovery(struct ath12k_base *ab)
|
||||
{
|
||||
struct ath12k *ar;
|
||||
@@ -1045,8 +1074,10 @@ static void ath12k_core_pre_reconfigure_
|
||||
@@ -1053,8 +1082,10 @@ static void ath12k_core_pre_reconfigure_
|
||||
ar = &ah->radio[j];
|
||||
|
||||
ath12k_mac_drain_tx(ar);
|
||||
|
|
@ -428,7 +428,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||
complete(&ar->scan.on_channel);
|
||||
complete(&ar->peer_assoc_done);
|
||||
complete(&ar->peer_delete_done);
|
||||
@@ -1312,6 +1343,7 @@ struct ath12k_base *ath12k_core_alloc(st
|
||||
@@ -1320,6 +1351,7 @@ struct ath12k_base *ath12k_core_alloc(st
|
||||
INIT_WORK(&ab->restart_work, ath12k_core_restart);
|
||||
INIT_WORK(&ab->reset_work, ath12k_core_reset);
|
||||
INIT_WORK(&ab->rfkill_work, ath12k_rfkill_work);
|
||||
|
|
@ -438,7 +438,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||
init_completion(&ab->htc_suspend);
|
||||
--- a/drivers/net/wireless/ath/ath12k/core.h
|
||||
+++ b/drivers/net/wireless/ath/ath12k/core.h
|
||||
@@ -199,6 +199,12 @@ enum ath12k_scan_state {
|
||||
@@ -200,6 +200,12 @@ enum ath12k_scan_state {
|
||||
ATH12K_SCAN_ABORTING,
|
||||
};
|
||||
|
||||
|
|
@ -451,7 +451,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||
enum ath12k_dev_flags {
|
||||
ATH12K_CAC_RUNNING,
|
||||
ATH12K_FLAG_CRASH_FLUSH,
|
||||
@@ -319,6 +325,8 @@ struct ath12k_vif_iter {
|
||||
@@ -320,6 +326,8 @@ struct ath12k_vif_iter {
|
||||
#define ATH12K_RX_RATE_TABLE_11AX_NUM 576
|
||||
#define ATH12K_RX_RATE_TABLE_NUM 320
|
||||
|
||||
|
|
@ -460,7 +460,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||
struct ath12k_rx_peer_rate_stats {
|
||||
u64 ht_mcs_count[HAL_RX_MAX_MCS_HT + 1];
|
||||
u64 vht_mcs_count[HAL_RX_MAX_MCS_VHT + 1];
|
||||
@@ -654,6 +662,13 @@ struct ath12k {
|
||||
@@ -655,6 +663,13 @@ struct ath12k {
|
||||
u32 freq_low;
|
||||
u32 freq_high;
|
||||
|
||||
|
|
@ -474,7 +474,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||
bool nlo_enabled;
|
||||
};
|
||||
|
||||
@@ -886,6 +901,8 @@ struct ath12k_base {
|
||||
@@ -887,6 +902,8 @@ struct ath12k_base {
|
||||
/* continuous recovery fail count */
|
||||
atomic_t fail_cont_count;
|
||||
unsigned long reset_fail_timeout;
|
||||
|
|
@ -532,7 +532,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||
return ret;
|
||||
}
|
||||
|
||||
@@ -5994,7 +6009,7 @@ static int ath12k_mac_start(struct ath12
|
||||
@@ -5998,7 +6013,7 @@ static int ath12k_mac_start(struct ath12
|
||||
|
||||
/* TODO: Do we need to enable ANI? */
|
||||
|
||||
|
|
@ -541,7 +541,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||
|
||||
ar->num_started_vdevs = 0;
|
||||
ar->num_created_vdevs = 0;
|
||||
@@ -6174,6 +6189,9 @@ static void ath12k_mac_stop(struct ath12
|
||||
@@ -6178,6 +6193,9 @@ static void ath12k_mac_stop(struct ath12
|
||||
cancel_delayed_work_sync(&ar->scan.timeout);
|
||||
cancel_work_sync(&ar->regd_update_work);
|
||||
cancel_work_sync(&ar->ab->rfkill_work);
|
||||
|
|
@ -551,7 +551,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||
|
||||
spin_lock_bh(&ar->data_lock);
|
||||
list_for_each_entry_safe(ppdu_stats, tmp, &ar->ppdu_stats_info, list) {
|
||||
@@ -6420,6 +6438,117 @@ static void ath12k_mac_op_update_vif_off
|
||||
@@ -6424,6 +6442,117 @@ static void ath12k_mac_op_update_vif_off
|
||||
ath12k_mac_update_vif_offload(arvif);
|
||||
}
|
||||
|
||||
|
|
@ -669,7 +669,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||
static int ath12k_mac_vdev_create(struct ath12k *ar, struct ieee80211_vif *vif)
|
||||
{
|
||||
struct ath12k_hw *ah = ar->ah;
|
||||
@@ -6534,6 +6663,7 @@ static int ath12k_mac_vdev_create(struct
|
||||
@@ -6538,6 +6667,7 @@ static int ath12k_mac_vdev_create(struct
|
||||
arvif->vdev_id, ret);
|
||||
goto err_peer_del;
|
||||
}
|
||||
|
|
@ -677,7 +677,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||
break;
|
||||
case WMI_VDEV_TYPE_STA:
|
||||
param_id = WMI_STA_PS_PARAM_RX_WAKE_POLICY;
|
||||
@@ -6572,6 +6702,13 @@ static int ath12k_mac_vdev_create(struct
|
||||
@@ -6576,6 +6706,13 @@ static int ath12k_mac_vdev_create(struct
|
||||
arvif->vdev_id, ret);
|
||||
goto err_peer_del;
|
||||
}
|
||||
|
|
@ -691,7 +691,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -6912,6 +7049,11 @@ static void ath12k_mac_op_remove_interfa
|
||||
@@ -6916,6 +7053,11 @@ static void ath12k_mac_op_remove_interfa
|
||||
ath12k_dbg(ab, ATH12K_DBG_MAC, "mac remove interface (vdev %d)\n",
|
||||
arvif->vdev_id);
|
||||
|
||||
|
|
@ -703,7 +703,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||
if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
|
||||
ret = ath12k_peer_delete(ar, arvif->vdev_id, vif->addr);
|
||||
if (ret)
|
||||
@@ -7752,6 +7894,14 @@ ath12k_mac_op_unassign_vif_chanctx(struc
|
||||
@@ -7756,6 +7898,14 @@ ath12k_mac_op_unassign_vif_chanctx(struc
|
||||
ar->num_started_vdevs == 1 && ar->monitor_vdev_created)
|
||||
ath12k_mac_monitor_stop(ar);
|
||||
|
||||
|
|
@ -718,7 +718,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||
mutex_unlock(&ar->conf_mutex);
|
||||
}
|
||||
|
||||
@@ -8290,6 +8440,14 @@ ath12k_mac_op_reconfig_complete(struct i
|
||||
@@ -8294,6 +8444,14 @@ ath12k_mac_op_reconfig_complete(struct i
|
||||
ath12k_warn(ar->ab, "pdev %d successfully recovered\n",
|
||||
ar->pdev->pdev_id);
|
||||
|
||||
|
|
@ -733,7 +733,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||
if (ab->is_reset) {
|
||||
recovery_count = atomic_inc_return(&ab->recovery_count);
|
||||
|
||||
@@ -9339,6 +9497,9 @@ static void ath12k_mac_setup(struct ath1
|
||||
@@ -9344,6 +9502,9 @@ static void ath12k_mac_setup(struct ath1
|
||||
|
||||
INIT_WORK(&ar->wmi_mgmt_tx_work, ath12k_mgmt_over_wmi_tx_work);
|
||||
skb_queue_head_init(&ar->wmi_mgmt_tx_queue);
|
||||
|
|
@ -888,7 +888,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||
#endif
|
||||
--- a/drivers/net/wireless/ath/ath12k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath12k/hw.c
|
||||
@@ -928,6 +928,7 @@ static const struct ath12k_hw_params ath
|
||||
@@ -961,6 +961,7 @@ static const struct ath12k_hw_params ath
|
||||
.iova_mask = 0,
|
||||
|
||||
.supports_aspm = false,
|
||||
|
|
@ -896,7 +896,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||
},
|
||||
{
|
||||
.name = "wcn7850 hw2.0",
|
||||
@@ -1008,6 +1009,7 @@ static const struct ath12k_hw_params ath
|
||||
@@ -1041,6 +1042,7 @@ static const struct ath12k_hw_params ath
|
||||
.iova_mask = ATH12K_PCIE_MAX_PAYLOAD_SIZE - 1,
|
||||
|
||||
.supports_aspm = true,
|
||||
|
|
@ -904,7 +904,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|||
},
|
||||
{
|
||||
.name = "qcn9274 hw2.0",
|
||||
@@ -1084,6 +1086,7 @@ static const struct ath12k_hw_params ath
|
||||
@@ -1117,6 +1119,7 @@ static const struct ath12k_hw_params ath
|
||||
.iova_mask = 0,
|
||||
|
||||
.supports_aspm = false,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
@@ -882,6 +882,7 @@ static const struct ieee80211_iface_limi
|
||||
@@ -884,6 +884,7 @@ static const struct ieee80211_iface_limi
|
||||
BIT(NL80211_IFTYPE_AP) },
|
||||
{ .max = 1, .types = BIT(NL80211_IFTYPE_P2P_CLIENT) |
|
||||
BIT(NL80211_IFTYPE_P2P_GO) },
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
|||
|
||||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
@@ -963,6 +963,7 @@ static void ath9k_set_hw_capab(struct at
|
||||
@@ -965,6 +965,7 @@ static void ath9k_set_hw_capab(struct at
|
||||
ieee80211_hw_set(hw, HOST_BROADCAST_PS_BUFFERING);
|
||||
ieee80211_hw_set(hw, SUPPORT_FAST_XMIT);
|
||||
ieee80211_hw_set(hw, SUPPORTS_CLONED_SKBS);
|
||||
|
|
@ -22,7 +22,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
|||
|
||||
if (ath9k_ps_enable)
|
||||
ieee80211_hw_set(hw, SUPPORTS_PS);
|
||||
@@ -975,9 +976,6 @@ static void ath9k_set_hw_capab(struct at
|
||||
@@ -977,9 +978,6 @@ static void ath9k_set_hw_capab(struct at
|
||||
IEEE80211_RADIOTAP_MCS_HAVE_STBC;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
@@ -1178,25 +1178,25 @@ static int __init ath9k_init(void)
|
||||
@@ -1180,25 +1180,25 @@ static int __init ath9k_init(void)
|
||||
{
|
||||
int error;
|
||||
|
||||
|
|
|
|||
|
|
@ -181,7 +181,7 @@
|
|||
hw->max_listen_interval = 1;
|
||||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
@@ -733,6 +733,7 @@ static int ath9k_init_softc(u16 devid, s
|
||||
@@ -735,6 +735,7 @@ static int ath9k_init_softc(u16 devid, s
|
||||
if (!ath9k_is_chanctx_enabled())
|
||||
sc->cur_chan->hw_queue_base = 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -181,7 +181,7 @@
|
|||
|
||||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
@@ -1089,7 +1089,7 @@ int ath9k_init_device(u16 devid, struct
|
||||
@@ -1091,7 +1091,7 @@ int ath9k_init_device(u16 devid, struct
|
||||
|
||||
#ifdef CPTCFG_MAC80211_LEDS
|
||||
/* must be initialized before ieee80211_register_hw */
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@
|
|||
ops->spectral_scan_config = ar9003_hw_spectral_scan_config;
|
||||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
@@ -871,7 +871,8 @@ static void ath9k_init_txpower_limits(st
|
||||
@@ -873,7 +873,8 @@ static void ath9k_init_txpower_limits(st
|
||||
if (ah->caps.hw_caps & ATH9K_HW_CAP_5GHZ)
|
||||
ath9k_init_band_txpower(sc, NL80211_BAND_5GHZ);
|
||||
|
||||
|
|
@ -65,7 +65,7 @@
|
|||
}
|
||||
|
||||
static const struct ieee80211_iface_limit if_limits[] = {
|
||||
@@ -1049,6 +1050,18 @@ static void ath9k_set_hw_capab(struct at
|
||||
@@ -1051,6 +1052,18 @@ static void ath9k_set_hw_capab(struct at
|
||||
wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CAN_REPLACE_PTK0);
|
||||
}
|
||||
|
||||
|
|
@ -84,7 +84,7 @@
|
|||
int ath9k_init_device(u16 devid, struct ath_softc *sc,
|
||||
const struct ath_bus_ops *bus_ops)
|
||||
{
|
||||
@@ -1096,6 +1109,8 @@ int ath9k_init_device(u16 devid, struct
|
||||
@@ -1098,6 +1111,8 @@ int ath9k_init_device(u16 devid, struct
|
||||
|
||||
wiphy_read_of_freq_limits(hw->wiphy);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
@@ -696,6 +696,12 @@ static int ath9k_of_init(struct ath_soft
|
||||
@@ -698,6 +698,12 @@ static int ath9k_of_init(struct ath_soft
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -13,7 +13,7 @@
|
|||
static int ath9k_init_softc(u16 devid, struct ath_softc *sc,
|
||||
const struct ath_bus_ops *bus_ops)
|
||||
{
|
||||
@@ -804,6 +810,9 @@ static int ath9k_init_softc(u16 devid, s
|
||||
@@ -806,6 +812,9 @@ static int ath9k_init_softc(u16 devid, s
|
||||
if (ret)
|
||||
goto err_hw;
|
||||
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ JIRA: SWWLAN-136577
|
|||
BRCMF_DEFAULT_SCAN_CHANNEL_TIME);
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
||||
@@ -1317,7 +1317,7 @@ int brcmf_alloc(struct device *dev, stru
|
||||
@@ -1322,7 +1322,7 @@ int brcmf_alloc(struct device *dev, stru
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -121,7 +121,7 @@ JIRA: SWWLAN-136577
|
|||
{
|
||||
struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
||||
struct brcmf_pub *drvr = bus_if->drvr;
|
||||
@@ -1358,10 +1358,13 @@ int brcmf_attach(struct device *dev)
|
||||
@@ -1363,10 +1363,13 @@ int brcmf_attach(struct device *dev)
|
||||
brcmf_fweh_register(drvr, BRCMF_E_PSM_WATCHDOG,
|
||||
brcmf_psm_watchdog_notify);
|
||||
|
||||
|
|
@ -692,7 +692,7 @@ JIRA: SWWLAN-136577
|
|||
#endif /* BRCMFMAC_SDIO_H */
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
@@ -1200,7 +1200,7 @@ static void brcmf_usb_probe_phase2(struc
|
||||
@@ -1202,7 +1202,7 @@ static void brcmf_usb_probe_phase2(struc
|
||||
goto error;
|
||||
|
||||
/* Attach to the common driver interface */
|
||||
|
|
@ -701,7 +701,7 @@ JIRA: SWWLAN-136577
|
|||
if (ret)
|
||||
goto error;
|
||||
|
||||
@@ -1277,7 +1277,7 @@ static int brcmf_usb_probe_cb(struct brc
|
||||
@@ -1279,7 +1279,7 @@ static int brcmf_usb_probe_cb(struct brc
|
||||
ret = brcmf_alloc(devinfo->dev, devinfo->settings);
|
||||
if (ret)
|
||||
goto fail;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/ath/ath10k/snoc.c
|
||||
+++ b/drivers/net/wireless/ath/ath10k/snoc.c
|
||||
@@ -1635,10 +1635,10 @@ static int ath10k_fw_init(struct ath10k
|
||||
@@ -1637,10 +1637,10 @@ static int ath10k_fw_init(struct ath10k
|
||||
|
||||
ar_snoc->fw.dev = &pdev->dev;
|
||||
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@
|
|||
}
|
||||
|
||||
return err;
|
||||
@@ -1518,7 +1526,9 @@ static int cfg80211_netdev_notifier_call
|
||||
@@ -1525,7 +1533,9 @@ static int cfg80211_netdev_notifier_call
|
||||
SET_NETDEV_DEVTYPE(dev, &wiphy_type);
|
||||
wdev->netdev = dev;
|
||||
/* can only change netns with wiphy */
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
|
||||
@@ -1574,7 +1574,11 @@ static int brcmf_usb_reset_device(struct
|
||||
@@ -1576,7 +1576,11 @@ static int brcmf_usb_reset_device(struct
|
||||
|
||||
void brcmf_usb_exit(void)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/virtual/mac80211_hwsim.c
|
||||
+++ b/drivers/net/wireless/virtual/mac80211_hwsim.c
|
||||
@@ -6629,6 +6629,7 @@ static void hwsim_virtio_rx_done(struct
|
||||
@@ -6636,6 +6636,7 @@ static void hwsim_virtio_rx_done(struct
|
||||
|
||||
static int init_vqs(struct virtio_device *vdev)
|
||||
{
|
||||
|
|
@ -8,7 +8,7 @@
|
|||
struct virtqueue_info vqs_info[HWSIM_NUM_VQS] = {
|
||||
[HWSIM_VQ_TX] = { "tx", hwsim_virtio_tx_done },
|
||||
[HWSIM_VQ_RX] = { "rx", hwsim_virtio_rx_done },
|
||||
@@ -6636,6 +6637,19 @@ static int init_vqs(struct virtio_device
|
||||
@@ -6643,6 +6644,19 @@ static int init_vqs(struct virtio_device
|
||||
|
||||
return virtio_find_vqs(vdev, HWSIM_NUM_VQS,
|
||||
hwsim_vqs, vqs_info, NULL);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/marvell/mwl8k.c
|
||||
+++ b/drivers/net/wireless/marvell/mwl8k.c
|
||||
@@ -5712,6 +5712,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw")
|
||||
@@ -5716,6 +5716,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw")
|
||||
MODULE_FIRMWARE(MWL8K_8366_AP_FW(MWL8K_8366_AP_FW_API));
|
||||
|
||||
static const struct pci_device_id mwl8k_pci_id_table[] = {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/marvell/mwl8k.c
|
||||
+++ b/drivers/net/wireless/marvell/mwl8k.c
|
||||
@@ -6298,6 +6298,8 @@ static int mwl8k_probe(struct pci_dev *p
|
||||
@@ -6302,6 +6302,8 @@ static int mwl8k_probe(struct pci_dev *p
|
||||
|
||||
priv->running_bsses = 0;
|
||||
|
||||
|
|
@ -9,7 +9,7 @@
|
|||
return rc;
|
||||
|
||||
err_stop_firmware:
|
||||
@@ -6331,8 +6333,6 @@ static void mwl8k_remove(struct pci_dev
|
||||
@@ -6335,8 +6337,6 @@ static void mwl8k_remove(struct pci_dev
|
||||
return;
|
||||
priv = hw->priv;
|
||||
|
||||
|
|
|
|||
|
|
@ -284,7 +284,7 @@ Link: https://patch.msgid.link/dae7994f-3491-40de-b537-ebf68df084bb@gmail.com
|
|||
.query_rx_desc = rtw8821c_query_rx_desc,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
@@ -1978,13 +1978,13 @@ static const struct rtw_pwr_seq_cmd tran
|
||||
@@ -1980,13 +1980,13 @@ static const struct rtw_pwr_seq_cmd tran
|
||||
RTW_PWR_CMD_END, 0, 0},
|
||||
};
|
||||
|
||||
|
|
@ -300,7 +300,7 @@ Link: https://patch.msgid.link/dae7994f-3491-40de-b537-ebf68df084bb@gmail.com
|
|||
trans_act_to_cardemu_8822b,
|
||||
trans_cardemu_to_carddis_8822b,
|
||||
NULL
|
||||
@@ -2156,7 +2156,7 @@ static const struct rtw_rqpn rqpn_table_
|
||||
@@ -2158,7 +2158,7 @@ static const struct rtw_rqpn rqpn_table_
|
||||
RTW_DMA_MAPPING_EXTRA, RTW_DMA_MAPPING_HIGH},
|
||||
};
|
||||
|
||||
|
|
@ -309,7 +309,7 @@ Link: https://patch.msgid.link/dae7994f-3491-40de-b537-ebf68df084bb@gmail.com
|
|||
.prio[RTW_DMA_MAPPING_EXTRA] = {
|
||||
.rsvd = REG_FIFOPAGE_INFO_4, .avail = REG_FIFOPAGE_INFO_4 + 2,
|
||||
},
|
||||
@@ -2172,7 +2172,7 @@ static struct rtw_prioq_addrs prioq_addr
|
||||
@@ -2174,7 +2174,7 @@ static struct rtw_prioq_addrs prioq_addr
|
||||
.wsize = true,
|
||||
};
|
||||
|
||||
|
|
@ -318,7 +318,7 @@ Link: https://patch.msgid.link/dae7994f-3491-40de-b537-ebf68df084bb@gmail.com
|
|||
.phy_set_param = rtw8822b_phy_set_param,
|
||||
.read_efuse = rtw8822b_read_efuse,
|
||||
.query_rx_desc = rtw8822b_query_rx_desc,
|
||||
@@ -2521,7 +2521,7 @@ static const struct rtw_reg_domain coex_
|
||||
@@ -2523,7 +2523,7 @@ static const struct rtw_reg_domain coex_
|
||||
{0xc50, MASKBYTE0, RTW_REG_DOMAIN_MAC8},
|
||||
};
|
||||
|
||||
|
|
@ -329,7 +329,7 @@ Link: https://patch.msgid.link/dae7994f-3491-40de-b537-ebf68df084bb@gmail.com
|
|||
};
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
@@ -4874,13 +4874,13 @@ static const struct rtw_pwr_seq_cmd tran
|
||||
@@ -4875,13 +4875,13 @@ static const struct rtw_pwr_seq_cmd tran
|
||||
RTW_PWR_CMD_END, 0, 0},
|
||||
};
|
||||
|
||||
|
|
@ -345,7 +345,7 @@ Link: https://patch.msgid.link/dae7994f-3491-40de-b537-ebf68df084bb@gmail.com
|
|||
trans_act_to_cardemu_8822c,
|
||||
trans_cardemu_to_carddis_8822c,
|
||||
NULL
|
||||
@@ -4972,7 +4972,7 @@ static const struct rtw_rqpn rqpn_table_
|
||||
@@ -4973,7 +4973,7 @@ static const struct rtw_rqpn rqpn_table_
|
||||
RTW_DMA_MAPPING_EXTRA, RTW_DMA_MAPPING_HIGH},
|
||||
};
|
||||
|
||||
|
|
@ -354,7 +354,7 @@ Link: https://patch.msgid.link/dae7994f-3491-40de-b537-ebf68df084bb@gmail.com
|
|||
.prio[RTW_DMA_MAPPING_EXTRA] = {
|
||||
.rsvd = REG_FIFOPAGE_INFO_4, .avail = REG_FIFOPAGE_INFO_4 + 2,
|
||||
},
|
||||
@@ -4988,7 +4988,7 @@ static struct rtw_prioq_addrs prioq_addr
|
||||
@@ -4989,7 +4989,7 @@ static struct rtw_prioq_addrs prioq_addr
|
||||
.wsize = true,
|
||||
};
|
||||
|
||||
|
|
@ -363,7 +363,7 @@ Link: https://patch.msgid.link/dae7994f-3491-40de-b537-ebf68df084bb@gmail.com
|
|||
.phy_set_param = rtw8822c_phy_set_param,
|
||||
.read_efuse = rtw8822c_read_efuse,
|
||||
.query_rx_desc = rtw8822c_query_rx_desc,
|
||||
@@ -5301,7 +5301,7 @@ static const struct rtw_pwr_track_tbl rt
|
||||
@@ -5302,7 +5302,7 @@ static const struct rtw_pwr_track_tbl rt
|
||||
.pwrtrk_2g_ccka_p = rtw8822c_pwrtrk_2g_cck_a_p,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ Link: https://patch.msgid.link/913f1747-38fc-4409-85a4-57bb9cee506b@gmail.com
|
|||
bool (*write_rf)(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/pci.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/pci.c
|
||||
@@ -1065,7 +1065,7 @@ static u32 rtw_pci_rx_napi(struct rtw_de
|
||||
@@ -1066,7 +1066,7 @@ static u32 rtw_pci_rx_napi(struct rtw_de
|
||||
dma_sync_single_for_cpu(rtwdev->dev, dma, RTK_PCI_RX_BUF_SIZE,
|
||||
DMA_FROM_DEVICE);
|
||||
rx_desc = skb->data;
|
||||
|
|
@ -302,9 +302,9 @@ Link: https://patch.msgid.link/913f1747-38fc-4409-85a4-57bb9cee506b@gmail.com
|
|||
-}
|
||||
-
|
||||
static void
|
||||
rtw8822b_set_tx_power_index_by_rate(struct rtw_dev *rtwdev, u8 path, u8 rs)
|
||||
{
|
||||
@@ -2175,7 +2134,7 @@ static const struct rtw_prioq_addrs prio
|
||||
rtw8822b_set_tx_power_index_by_rate(struct rtw_dev *rtwdev, u8 path,
|
||||
u8 rs, u32 *phy_pwr_idx)
|
||||
@@ -2177,7 +2136,7 @@ static const struct rtw_prioq_addrs prio
|
||||
static const struct rtw_chip_ops rtw8822b_ops = {
|
||||
.phy_set_param = rtw8822b_phy_set_param,
|
||||
.read_efuse = rtw8822b_read_efuse,
|
||||
|
|
@ -364,7 +364,7 @@ Link: https://patch.msgid.link/913f1747-38fc-4409-85a4-57bb9cee506b@gmail.com
|
|||
static void
|
||||
rtw8822c_set_write_tx_power_ref(struct rtw_dev *rtwdev, u8 *tx_pwr_ref_cck,
|
||||
u8 *tx_pwr_ref_ofdm)
|
||||
@@ -4991,7 +4949,7 @@ static const struct rtw_prioq_addrs prio
|
||||
@@ -4992,7 +4950,7 @@ static const struct rtw_prioq_addrs prio
|
||||
static const struct rtw_chip_ops rtw8822c_ops = {
|
||||
.phy_set_param = rtw8822c_phy_set_param,
|
||||
.read_efuse = rtw8822c_read_efuse,
|
||||
|
|
@ -535,7 +535,7 @@ Link: https://patch.msgid.link/913f1747-38fc-4409-85a4-57bb9cee506b@gmail.com
|
|||
struct rtw_rx_pkt_stat *pkt_stat);
|
||||
--- a/drivers/net/wireless/realtek/rtw88/sdio.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/sdio.c
|
||||
@@ -981,8 +981,7 @@ static void rtw_sdio_rxfifo_recv(struct
|
||||
@@ -979,8 +979,7 @@ static void rtw_sdio_rxfifo_recv(struct
|
||||
|
||||
while (true) {
|
||||
rx_desc = skb->data;
|
||||
|
|
@ -547,7 +547,7 @@ Link: https://patch.msgid.link/913f1747-38fc-4409-85a4-57bb9cee506b@gmail.com
|
|||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
@@ -571,8 +571,8 @@ static void rtw_usb_rx_handler(struct wo
|
||||
@@ -625,8 +625,8 @@ static void rtw_usb_rx_handler(struct wo
|
||||
|
||||
do {
|
||||
rx_desc = skb->data;
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ Link: https://patch.msgid.link/9279a9cd-6f86-4dc3-a095-7c36cb9b9d06@gmail.com
|
|||
#define REG_AFE_CTRL_4 0x0078
|
||||
#define BIT_CK320M_AFE_EN BIT(4)
|
||||
#define BIT_EN_SYN BIT(15)
|
||||
@@ -134,6 +143,11 @@
|
||||
@@ -135,6 +144,11 @@
|
||||
#define REG_PMC_DBG_CTRL1 0xa8
|
||||
#define BITS_PMC_BT_IQK_STS GENMASK(22, 21)
|
||||
|
||||
|
|
@ -94,7 +94,7 @@ Link: https://patch.msgid.link/9279a9cd-6f86-4dc3-a095-7c36cb9b9d06@gmail.com
|
|||
#define REG_PAD_CTRL2 0x00C4
|
||||
#define BIT_RSM_EN_V1 BIT(16)
|
||||
#define BIT_NO_PDN_CHIPOFF_V1 BIT(17)
|
||||
@@ -185,6 +199,15 @@
|
||||
@@ -186,6 +200,15 @@
|
||||
#define MAC_TRX_ENABLE (BIT_HCI_TXDMA_EN | BIT_HCI_RXDMA_EN | BIT_TXDMA_EN | \
|
||||
BIT_RXDMA_EN | BIT_PROTOCOL_EN | BIT_SCHEDULE_EN | \
|
||||
BIT_MACTXEN | BIT_MACRXEN)
|
||||
|
|
@ -110,7 +110,7 @@ Link: https://patch.msgid.link/9279a9cd-6f86-4dc3-a095-7c36cb9b9d06@gmail.com
|
|||
#define BIT_SHIFT_TXDMA_VOQ_MAP 4
|
||||
#define BIT_MASK_TXDMA_VOQ_MAP 0x3
|
||||
#define BIT_TXDMA_VOQ_MAP(x) \
|
||||
@@ -256,6 +279,8 @@
|
||||
@@ -257,6 +280,8 @@
|
||||
#define REG_HMEBOX1 0x01D4
|
||||
#define REG_HMEBOX2 0x01D8
|
||||
#define REG_HMEBOX3 0x01DC
|
||||
|
|
@ -119,7 +119,7 @@ Link: https://patch.msgid.link/9279a9cd-6f86-4dc3-a095-7c36cb9b9d06@gmail.com
|
|||
#define REG_HMEBOX0_EX 0x01F0
|
||||
#define REG_HMEBOX1_EX 0x01F4
|
||||
#define REG_HMEBOX2_EX 0x01F8
|
||||
@@ -298,6 +323,7 @@
|
||||
@@ -299,6 +324,7 @@
|
||||
|
||||
#define REG_AUTO_LLT 0x0224
|
||||
#define BIT_AUTO_INIT_LLT BIT(16)
|
||||
|
|
@ -127,7 +127,7 @@ Link: https://patch.msgid.link/9279a9cd-6f86-4dc3-a095-7c36cb9b9d06@gmail.com
|
|||
#define REG_RQPN_CTRL_1 0x0228
|
||||
#define REG_RQPN_CTRL_2 0x022C
|
||||
#define BIT_LD_RQPN BIT(31)
|
||||
@@ -329,6 +355,7 @@
|
||||
@@ -330,6 +356,7 @@
|
||||
#define BIT_DMA_BURST_SIZE_1024 0
|
||||
|
||||
#define REG_RXPKTNUM 0x02B0
|
||||
|
|
@ -135,7 +135,7 @@ Link: https://patch.msgid.link/9279a9cd-6f86-4dc3-a095-7c36cb9b9d06@gmail.com
|
|||
|
||||
#define REG_INT_MIG 0x0304
|
||||
#define REG_HCI_MIX_CFG 0x03FC
|
||||
@@ -336,6 +363,7 @@
|
||||
@@ -337,6 +364,7 @@
|
||||
|
||||
#define REG_BCNQ_INFO 0x0418
|
||||
#define BIT_MGQ_CPU_EMPTY BIT(24)
|
||||
|
|
@ -143,7 +143,7 @@ Link: https://patch.msgid.link/9279a9cd-6f86-4dc3-a095-7c36cb9b9d06@gmail.com
|
|||
#define REG_FWHW_TXQ_CTRL 0x0420
|
||||
#define BIT_EN_BCNQ_DL BIT(22)
|
||||
#define BIT_EN_WR_FREE_TAIL BIT(20)
|
||||
@@ -362,10 +390,12 @@
|
||||
@@ -363,10 +391,12 @@
|
||||
#define REG_AMPDU_MAX_TIME_V1 0x0455
|
||||
#define REG_BCNQ1_BDNY_V1 0x0456
|
||||
#define REG_AMPDU_MAX_TIME 0x0456
|
||||
|
|
@ -156,7 +156,7 @@ Link: https://patch.msgid.link/9279a9cd-6f86-4dc3-a095-7c36cb9b9d06@gmail.com
|
|||
#define REG_DATA_SC 0x0483
|
||||
#define REG_ARFR2_V1 0x048C
|
||||
#define REG_ARFRH2_V1 0x0490
|
||||
@@ -390,6 +420,8 @@
|
||||
@@ -391,6 +421,8 @@
|
||||
#define REG_PRECNT_CTRL 0x04E5
|
||||
#define BIT_BTCCA_CTRL (BIT(0) | BIT(1))
|
||||
#define BIT_EN_PRECNT BIT(11)
|
||||
|
|
@ -165,7 +165,7 @@ Link: https://patch.msgid.link/9279a9cd-6f86-4dc3-a095-7c36cb9b9d06@gmail.com
|
|||
#define REG_DUMMY_PAGE4_V1 0x04FC
|
||||
|
||||
#define REG_EDCA_VO_PARAM 0x0500
|
||||
@@ -400,6 +432,7 @@
|
||||
@@ -401,6 +433,7 @@
|
||||
#define BIT_MASK_CWMAX GENMASK(15, 12)
|
||||
#define BIT_MASK_CWMIN GENMASK(11, 8)
|
||||
#define BIT_MASK_AIFS GENMASK(7, 0)
|
||||
|
|
@ -173,7 +173,7 @@ Link: https://patch.msgid.link/9279a9cd-6f86-4dc3-a095-7c36cb9b9d06@gmail.com
|
|||
#define REG_PIFS 0x0512
|
||||
#define REG_SIFS 0x0514
|
||||
#define BIT_SHIFT_SIFS_OFDM_CTX 8
|
||||
@@ -526,6 +559,8 @@
|
||||
@@ -527,6 +560,8 @@
|
||||
#define REG_BT_COEX_V2 0x0762
|
||||
#define BIT_GNT_BT_POLARITY BIT(12)
|
||||
#define BIT_LTE_COEX_EN BIT(7)
|
||||
|
|
@ -182,7 +182,7 @@ Link: https://patch.msgid.link/9279a9cd-6f86-4dc3-a095-7c36cb9b9d06@gmail.com
|
|||
#define REG_BT_COEX_ENH_INTR_CTRL 0x76E
|
||||
#define BIT_R_GRANTALL_WLMASK BIT(3)
|
||||
#define BIT_STATIS_BT_EN BIT(2)
|
||||
@@ -543,14 +578,43 @@
|
||||
@@ -544,14 +579,43 @@
|
||||
#define REG_FPGA0_RFMOD 0x0800
|
||||
#define BIT_CCKEN BIT(24)
|
||||
#define BIT_OFDMEN BIT(25)
|
||||
|
|
@ -226,7 +226,7 @@ Link: https://patch.msgid.link/9279a9cd-6f86-4dc3-a095-7c36cb9b9d06@gmail.com
|
|||
|
||||
#define REG_DIS_DPD 0x0a70
|
||||
#define DIS_DPD_MASK GENMASK(9, 0)
|
||||
@@ -566,13 +630,109 @@
|
||||
@@ -567,13 +631,109 @@
|
||||
#define DIS_DPD_RATEVHT2SS_MCS1 BIT(9)
|
||||
#define DIS_DPD_RATEALL GENMASK(9, 0)
|
||||
|
||||
|
|
@ -336,7 +336,7 @@ Link: https://patch.msgid.link/9279a9cd-6f86-4dc3-a095-7c36cb9b9d06@gmail.com
|
|||
#define REG_ANAPARSW_MAC_0 0x1010
|
||||
#define BIT_CF_L_V2 GENMASK(29, 28)
|
||||
|
||||
@@ -709,6 +869,10 @@
|
||||
@@ -710,6 +870,10 @@
|
||||
|
||||
#define REG_IGN_GNTBT4 0x4160
|
||||
|
||||
|
|
@ -347,7 +347,7 @@ Link: https://patch.msgid.link/9279a9cd-6f86-4dc3-a095-7c36cb9b9d06@gmail.com
|
|||
#define RF_MODE 0x00
|
||||
#define RF_MODOPT 0x01
|
||||
#define RF_WLINT 0x01
|
||||
@@ -716,7 +880,13 @@
|
||||
@@ -717,7 +881,13 @@
|
||||
#define RF_DTXLOK 0x08
|
||||
#define RF_CFGCH 0x18
|
||||
#define BIT_BAND GENMASK(18, 16)
|
||||
|
|
@ -361,7 +361,7 @@ Link: https://patch.msgid.link/9279a9cd-6f86-4dc3-a095-7c36cb9b9d06@gmail.com
|
|||
#define RF_LUTWA 0x33
|
||||
#define RF_LUTWD1 0x3e
|
||||
#define RF_LUTWD0 0x3f
|
||||
@@ -725,10 +895,14 @@
|
||||
@@ -726,10 +896,14 @@
|
||||
#define RF_T_METER 0x42
|
||||
#define RF_BSPAD 0x54
|
||||
#define RF_GAINTX 0x56
|
||||
|
|
@ -378,7 +378,7 @@ Link: https://patch.msgid.link/9279a9cd-6f86-4dc3-a095-7c36cb9b9d06@gmail.com
|
|||
#define RF_MALSEL 0xbe
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.h
|
||||
@@ -214,19 +214,10 @@ extern const struct rtw_chip_info rtw882
|
||||
@@ -215,19 +215,10 @@ extern const struct rtw_chip_info rtw882
|
||||
#define BIT_FEN_EN BIT(26)
|
||||
#define REG_INIRTS_RATE_SEL 0x0480
|
||||
#define REG_HTSTFWT 0x800
|
||||
|
|
@ -398,7 +398,7 @@ Link: https://patch.msgid.link/9279a9cd-6f86-4dc3-a095-7c36cb9b9d06@gmail.com
|
|||
#define REG_ADC40 0x8c8
|
||||
#define REG_CHFIR 0x8f0
|
||||
#define REG_CDDTXP 0x93c
|
||||
@@ -234,14 +225,11 @@ extern const struct rtw_chip_info rtw882
|
||||
@@ -235,14 +226,11 @@ extern const struct rtw_chip_info rtw882
|
||||
#define REG_ACBB0 0x948
|
||||
#define REG_ACBBRXFIR 0x94c
|
||||
#define REG_ACGG2TBL 0x958
|
||||
|
|
@ -413,7 +413,7 @@ Link: https://patch.msgid.link/9279a9cd-6f86-4dc3-a095-7c36cb9b9d06@gmail.com
|
|||
#define REG_RXDESC 0xa2c
|
||||
#define REG_ENTXCCK 0xa80
|
||||
#define BTG_LNA 0xfc84
|
||||
@@ -252,12 +240,8 @@ extern const struct rtw_chip_info rtw882
|
||||
@@ -253,12 +241,8 @@ extern const struct rtw_chip_info rtw882
|
||||
#define REG_PWRTH2 0xaa8
|
||||
#define REG_CSRATIO 0xaaa
|
||||
#define REG_TXFILTER 0xaac
|
||||
|
|
@ -426,7 +426,7 @@ Link: https://patch.msgid.link/9279a9cd-6f86-4dc3-a095-7c36cb9b9d06@gmail.com
|
|||
#define REG_TRSW 0xca0
|
||||
#define REG_RFESEL0 0xcb0
|
||||
#define REG_RFESEL8 0xcb4
|
||||
@@ -269,14 +253,6 @@ extern const struct rtw_chip_info rtw882
|
||||
@@ -270,14 +254,6 @@ extern const struct rtw_chip_info rtw882
|
||||
#define B_WLA_SWITCH BIT(23)
|
||||
#define REG_RFEINV 0xcbc
|
||||
#define REG_AGCTR_B 0xe08
|
||||
|
|
@ -443,7 +443,7 @@ Link: https://patch.msgid.link/9279a9cd-6f86-4dc3-a095-7c36cb9b9d06@gmail.com
|
|||
#define REG_ANTWT 0x1904
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.h
|
||||
@@ -151,21 +151,12 @@ _rtw_write32s_mask(struct rtw_dev *rtwde
|
||||
@@ -152,21 +152,12 @@ _rtw_write32s_mask(struct rtw_dev *rtwde
|
||||
#define RTW8822B_EDCCA_MAX 0x7f
|
||||
#define RTW8822B_EDCCA_SRC_DEF 1
|
||||
#define REG_HTSTFWT 0x800
|
||||
|
|
@ -465,7 +465,7 @@ Link: https://patch.msgid.link/9279a9cd-6f86-4dc3-a095-7c36cb9b9d06@gmail.com
|
|||
#define REG_ADC40 0x8c8
|
||||
#define REG_EDCCA_DECISION 0x8dc
|
||||
#define BIT_EDCCA_OPTION BIT(5)
|
||||
@@ -176,7 +167,6 @@ _rtw_write32s_mask(struct rtw_dev *rtwde
|
||||
@@ -177,7 +168,6 @@ _rtw_write32s_mask(struct rtw_dev *rtwde
|
||||
#define REG_ACBB0 0x948
|
||||
#define REG_ACBBRXFIR 0x94c
|
||||
#define REG_ACGG2TBL 0x958
|
||||
|
|
@ -473,7 +473,7 @@ Link: https://patch.msgid.link/9279a9cd-6f86-4dc3-a095-7c36cb9b9d06@gmail.com
|
|||
#define REG_ADCINI 0xa04
|
||||
#define REG_TXSF2 0xa24
|
||||
#define REG_TXSF6 0xa28
|
||||
@@ -184,14 +174,12 @@ _rtw_write32s_mask(struct rtw_dev *rtwde
|
||||
@@ -185,14 +175,12 @@ _rtw_write32s_mask(struct rtw_dev *rtwde
|
||||
#define REG_ENTXCCK 0xa80
|
||||
#define REG_AGCTR_A 0xc08
|
||||
#define REG_TXDFIR 0xc20
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ Link: https://patch.msgid.link/8becd851-8760-4480-8e8c-c4869ce72507@gmail.com
|
|||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.c
|
||||
@@ -1917,6 +1917,9 @@ static int rtw_dump_hw_feature(struct rt
|
||||
@@ -1907,6 +1907,9 @@ static int rtw_dump_hw_feature(struct rt
|
||||
u8 bw;
|
||||
int i;
|
||||
|
||||
|
|
@ -73,7 +73,7 @@ Link: https://patch.msgid.link/8becd851-8760-4480-8e8c-c4869ce72507@gmail.com
|
|||
.lps_deep_mode_supported = BIT(LPS_DEEP_MODE_LCLK),
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
@@ -2509,6 +2509,7 @@ const struct rtw_chip_info rtw8822b_hw_s
|
||||
@@ -2511,6 +2511,7 @@ const struct rtw_chip_info rtw8822b_hw_s
|
||||
.page_size = TX_PAGE_SIZE,
|
||||
.dig_min = 0x1c,
|
||||
.usb_tx_agg_desc_num = 3,
|
||||
|
|
@ -83,7 +83,7 @@ Link: https://patch.msgid.link/8becd851-8760-4480-8e8c-c4869ce72507@gmail.com
|
|||
.lps_deep_mode_supported = BIT(LPS_DEEP_MODE_LCLK),
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
@@ -5329,6 +5329,7 @@ const struct rtw_chip_info rtw8822c_hw_s
|
||||
@@ -5330,6 +5330,7 @@ const struct rtw_chip_info rtw8822c_hw_s
|
||||
.page_size = TX_PAGE_SIZE,
|
||||
.dig_min = 0x20,
|
||||
.usb_tx_agg_desc_num = 3,
|
||||
|
|
|
|||
|
|
@ -155,7 +155,7 @@ Link: https://patch.msgid.link/c3e73c3a-fb2f-4013-9f06-d5274211e282@gmail.com
|
|||
.lps_deep_mode_supported = BIT(LPS_DEEP_MODE_LCLK),
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
@@ -2510,6 +2510,7 @@ const struct rtw_chip_info rtw8822b_hw_s
|
||||
@@ -2512,6 +2512,7 @@ const struct rtw_chip_info rtw8822b_hw_s
|
||||
.dig_min = 0x1c,
|
||||
.usb_tx_agg_desc_num = 3,
|
||||
.hw_feature_report = true,
|
||||
|
|
@ -165,7 +165,7 @@ Link: https://patch.msgid.link/c3e73c3a-fb2f-4013-9f06-d5274211e282@gmail.com
|
|||
.lps_deep_mode_supported = BIT(LPS_DEEP_MODE_LCLK),
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
@@ -5330,6 +5330,7 @@ const struct rtw_chip_info rtw8822c_hw_s
|
||||
@@ -5331,6 +5331,7 @@ const struct rtw_chip_info rtw8822c_hw_s
|
||||
.dig_min = 0x20,
|
||||
.usb_tx_agg_desc_num = 3,
|
||||
.hw_feature_report = true,
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ Link: https://patch.msgid.link/98ab839f-9100-44ae-9551-9af743a4aa3a@gmail.com
|
|||
|
||||
static int rtw_mac_power_switch(struct rtw_dev *rtwdev, bool pwr_on)
|
||||
{
|
||||
@@ -994,6 +995,7 @@ int rtw_download_firmware(struct rtw_dev
|
||||
@@ -999,6 +1000,7 @@ int rtw_download_firmware(struct rtw_dev
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -75,7 +75,7 @@ Link: https://patch.msgid.link/98ab839f-9100-44ae-9551-9af743a4aa3a@gmail.com
|
|||
|
||||
static u32 get_priority_queues(struct rtw_dev *rtwdev, u32 queues)
|
||||
{
|
||||
@@ -1127,7 +1129,7 @@ static int txdma_queue_mapping(struct rt
|
||||
@@ -1132,7 +1134,7 @@ static int txdma_queue_mapping(struct rt
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -84,7 +84,7 @@ Link: https://patch.msgid.link/98ab839f-9100-44ae-9551-9af743a4aa3a@gmail.com
|
|||
{
|
||||
const struct rtw_chip_info *chip = rtwdev->chip;
|
||||
struct rtw_fifo_conf *fifo = &rtwdev->fifo;
|
||||
@@ -1179,6 +1181,7 @@ static int set_trx_fifo_info(struct rtw_
|
||||
@@ -1184,6 +1186,7 @@ static int set_trx_fifo_info(struct rtw_
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -92,7 +92,7 @@ Link: https://patch.msgid.link/98ab839f-9100-44ae-9551-9af743a4aa3a@gmail.com
|
|||
|
||||
static int __priority_queue_cfg(struct rtw_dev *rtwdev,
|
||||
const struct rtw_page_table *pg_tbl,
|
||||
@@ -1256,7 +1259,7 @@ static int priority_queue_cfg(struct rtw
|
||||
@@ -1261,7 +1264,7 @@ static int priority_queue_cfg(struct rtw
|
||||
u16 pubq_num;
|
||||
int ret;
|
||||
|
||||
|
|
@ -103,7 +103,7 @@ Link: https://patch.msgid.link/98ab839f-9100-44ae-9551-9af743a4aa3a@gmail.com
|
|||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/mac.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/mac.h
|
||||
@@ -30,11 +30,14 @@
|
||||
@@ -30,6 +30,8 @@
|
||||
|
||||
void rtw_set_channel_mac(struct rtw_dev *rtwdev, u8 channel, u8 bw,
|
||||
u8 primary_ch_idx);
|
||||
|
|
@ -111,6 +111,8 @@ Link: https://patch.msgid.link/98ab839f-9100-44ae-9551-9af743a4aa3a@gmail.com
|
|||
+ const struct rtw_pwr_seq_cmd * const *cmd_seq);
|
||||
int rtw_mac_power_on(struct rtw_dev *rtwdev);
|
||||
void rtw_mac_power_off(struct rtw_dev *rtwdev);
|
||||
void rtw_write_firmware_page(struct rtw_dev *rtwdev, u32 page,
|
||||
@@ -37,6 +39,7 @@ void rtw_write_firmware_page(struct rtw_
|
||||
int rtw_download_firmware(struct rtw_dev *rtwdev, struct rtw_fw_state *fw);
|
||||
int rtw_mac_init(struct rtw_dev *rtwdev);
|
||||
void rtw_mac_flush_queues(struct rtw_dev *rtwdev, u32 queues, bool drop);
|
||||
|
|
@ -250,7 +252,7 @@ Link: https://patch.msgid.link/98ab839f-9100-44ae-9551-9af743a4aa3a@gmail.com
|
|||
.query_phy_status = query_phy_status,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
@@ -2132,6 +2132,8 @@ static const struct rtw_prioq_addrs prio
|
||||
@@ -2134,6 +2134,8 @@ static const struct rtw_prioq_addrs prio
|
||||
};
|
||||
|
||||
static const struct rtw_chip_ops rtw8822b_ops = {
|
||||
|
|
@ -261,7 +263,7 @@ Link: https://patch.msgid.link/98ab839f-9100-44ae-9551-9af743a4aa3a@gmail.com
|
|||
.query_phy_status = query_phy_status,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
@@ -4947,6 +4947,8 @@ static const struct rtw_prioq_addrs prio
|
||||
@@ -4948,6 +4948,8 @@ static const struct rtw_prioq_addrs prio
|
||||
};
|
||||
|
||||
static const struct rtw_chip_ops rtw8822c_ops = {
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ Link: https://patch.msgid.link/2b3e3e6f-541b-4a3b-8ca3-65b267e6a95a@gmail.com
|
|||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/pci.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/pci.c
|
||||
@@ -824,7 +824,7 @@ static int rtw_pci_tx_write_data(struct
|
||||
@@ -825,7 +825,7 @@ static int rtw_pci_tx_write_data(struct
|
||||
pkt_desc = skb_push(skb, chip->tx_pkt_desc_sz);
|
||||
memset(pkt_desc, 0, tx_pkt_desc_sz);
|
||||
pkt_info->qsel = rtw_pci_get_tx_qsel(skb, queue);
|
||||
|
|
@ -101,7 +101,7 @@ Link: https://patch.msgid.link/2b3e3e6f-541b-4a3b-8ca3-65b267e6a95a@gmail.com
|
|||
.lps_deep_mode_supported = BIT(LPS_DEEP_MODE_LCLK),
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
@@ -2513,6 +2513,7 @@ const struct rtw_chip_info rtw8822b_hw_s
|
||||
@@ -2515,6 +2515,7 @@ const struct rtw_chip_info rtw8822b_hw_s
|
||||
.usb_tx_agg_desc_num = 3,
|
||||
.hw_feature_report = true,
|
||||
.c2h_ra_report_size = 7,
|
||||
|
|
@ -111,7 +111,7 @@ Link: https://patch.msgid.link/2b3e3e6f-541b-4a3b-8ca3-65b267e6a95a@gmail.com
|
|||
.lps_deep_mode_supported = BIT(LPS_DEEP_MODE_LCLK),
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
@@ -5333,6 +5333,7 @@ const struct rtw_chip_info rtw8822c_hw_s
|
||||
@@ -5334,6 +5334,7 @@ const struct rtw_chip_info rtw8822c_hw_s
|
||||
.usb_tx_agg_desc_num = 3,
|
||||
.hw_feature_report = true,
|
||||
.c2h_ra_report_size = 7,
|
||||
|
|
@ -121,7 +121,7 @@ Link: https://patch.msgid.link/2b3e3e6f-541b-4a3b-8ca3-65b267e6a95a@gmail.com
|
|||
.ht_supported = true,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/sdio.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/sdio.c
|
||||
@@ -864,7 +864,7 @@ static void rtw_sdio_tx_skb_prepare(stru
|
||||
@@ -862,7 +862,7 @@ static void rtw_sdio_tx_skb_prepare(stru
|
||||
|
||||
pkt_info->qsel = rtw_sdio_get_tx_qsel(rtwdev, skb, queue);
|
||||
|
||||
|
|
@ -174,7 +174,7 @@ Link: https://patch.msgid.link/2b3e3e6f-541b-4a3b-8ca3-65b267e6a95a@gmail.com
|
|||
void rtw_tx_rsvd_page_pkt_info_update(struct rtw_dev *rtwdev,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
@@ -458,7 +458,7 @@ static int rtw_usb_write_data(struct rtw
|
||||
@@ -512,7 +512,7 @@ static int rtw_usb_write_data(struct rtw
|
||||
skb_put_data(skb, buf, size);
|
||||
skb_push(skb, chip->tx_pkt_desc_sz);
|
||||
memset(skb->data, 0, chip->tx_pkt_desc_sz);
|
||||
|
|
@ -183,7 +183,7 @@ Link: https://patch.msgid.link/2b3e3e6f-541b-4a3b-8ca3-65b267e6a95a@gmail.com
|
|||
rtw_tx_fill_txdesc_checksum(rtwdev, pkt_info, skb->data);
|
||||
|
||||
ret = rtw_usb_write_port(rtwdev, qsel, skb,
|
||||
@@ -525,7 +525,7 @@ static int rtw_usb_tx_write(struct rtw_d
|
||||
@@ -579,7 +579,7 @@ static int rtw_usb_tx_write(struct rtw_d
|
||||
pkt_desc = skb_push(skb, chip->tx_pkt_desc_sz);
|
||||
memset(pkt_desc, 0, chip->tx_pkt_desc_sz);
|
||||
ep = qsel_to_ep(rtwusb, pkt_info->qsel);
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ Link: https://patch.msgid.link/acdefbb1-3daf-4349-9e03-9472754d5f1e@gmail.com
|
|||
if (rtw_fw_feature_ext_check(&rtwdev->fw, FW_FEATURE_EXT_OLD_PAGE_NUM))
|
||||
--- a/drivers/net/wireless/realtek/rtw88/mac.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/mac.c
|
||||
@@ -1138,7 +1138,7 @@ int rtw_set_trx_fifo_info(struct rtw_dev
|
||||
@@ -1143,7 +1143,7 @@ int rtw_set_trx_fifo_info(struct rtw_dev
|
||||
|
||||
/* config rsvd page num */
|
||||
fifo->rsvd_drv_pg_num = chip->rsvd_drv_pg_num;
|
||||
|
|
|
|||
|
|
@ -199,7 +199,7 @@ Link: https://patch.msgid.link/904d0ab1-c046-40cd-a3a3-d4fdcf663c9d@gmail.com
|
|||
.bfer_mu_max_num = 1,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
@@ -2072,12 +2072,6 @@ static const struct rtw_intf_phy_para_ta
|
||||
@@ -2074,12 +2074,6 @@ static const struct rtw_intf_phy_para_ta
|
||||
.n_gen2_para = ARRAY_SIZE(pcie_gen2_param_8822b),
|
||||
};
|
||||
|
||||
|
|
@ -212,7 +212,7 @@ Link: https://patch.msgid.link/904d0ab1-c046-40cd-a3a3-d4fdcf663c9d@gmail.com
|
|||
static const struct rtw_hw_reg rtw8822b_dig[] = {
|
||||
[0] = { .addr = 0xc50, .mask = 0x7f },
|
||||
[1] = { .addr = 0xe50, .mask = 0x7f },
|
||||
@@ -2432,7 +2426,7 @@ static const u8 rtw8822b_pwrtrk_2g_cck_a
|
||||
@@ -2434,7 +2428,7 @@ static const u8 rtw8822b_pwrtrk_2g_cck_a
|
||||
10, 11, 11, 12, 12, 13, 13, 14, 14, 15
|
||||
};
|
||||
|
||||
|
|
@ -221,7 +221,7 @@ Link: https://patch.msgid.link/904d0ab1-c046-40cd-a3a3-d4fdcf663c9d@gmail.com
|
|||
.pwrtrk_5gb_n[RTW_PWR_TRK_5G_1] = rtw8822b_pwrtrk_5gb_n[RTW_PWR_TRK_5G_1],
|
||||
.pwrtrk_5gb_n[RTW_PWR_TRK_5G_2] = rtw8822b_pwrtrk_5gb_n[RTW_PWR_TRK_5G_2],
|
||||
.pwrtrk_5gb_n[RTW_PWR_TRK_5G_3] = rtw8822b_pwrtrk_5gb_n[RTW_PWR_TRK_5G_3],
|
||||
@@ -2455,6 +2449,12 @@ static const struct rtw_pwr_track_tbl rt
|
||||
@@ -2457,6 +2451,12 @@ static const struct rtw_pwr_track_tbl rt
|
||||
.pwrtrk_2g_ccka_p = rtw8822b_pwrtrk_2g_cck_a_p,
|
||||
};
|
||||
|
||||
|
|
@ -234,7 +234,7 @@ Link: https://patch.msgid.link/904d0ab1-c046-40cd-a3a3-d4fdcf663c9d@gmail.com
|
|||
static const struct rtw_reg_domain coex_info_hw_regs_8822b[] = {
|
||||
{0xcb0, MASKDWORD, RTW_REG_DOMAIN_MAC32},
|
||||
{0xcb4, MASKDWORD, RTW_REG_DOMAIN_MAC32},
|
||||
@@ -2535,7 +2535,6 @@ const struct rtw_chip_info rtw8822b_hw_s
|
||||
@@ -2537,7 +2537,6 @@ const struct rtw_chip_info rtw8822b_hw_s
|
||||
.rf_tbl = {&rtw8822b_rf_a_tbl, &rtw8822b_rf_b_tbl},
|
||||
.rfe_defs = rtw8822b_rfe_defs,
|
||||
.rfe_defs_size = ARRAY_SIZE(rtw8822b_rfe_defs),
|
||||
|
|
@ -244,7 +244,7 @@ Link: https://patch.msgid.link/904d0ab1-c046-40cd-a3a3-d4fdcf663c9d@gmail.com
|
|||
.bfer_mu_max_num = 1,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
@@ -4883,16 +4883,6 @@ static const struct rtw_intf_phy_para_ta
|
||||
@@ -4884,16 +4884,6 @@ static const struct rtw_intf_phy_para_ta
|
||||
.n_gen2_para = ARRAY_SIZE(pcie_gen2_param_8822c),
|
||||
};
|
||||
|
||||
|
|
@ -261,7 +261,7 @@ Link: https://patch.msgid.link/904d0ab1-c046-40cd-a3a3-d4fdcf663c9d@gmail.com
|
|||
static const struct rtw_hw_reg rtw8822c_dig[] = {
|
||||
[0] = { .addr = 0x1d70, .mask = 0x7f },
|
||||
[1] = { .addr = 0x1d70, .mask = 0x7f00 },
|
||||
@@ -5238,7 +5228,7 @@ static const u8 rtw8822c_pwrtrk_2g_cck_a
|
||||
@@ -5239,7 +5229,7 @@ static const u8 rtw8822c_pwrtrk_2g_cck_a
|
||||
18, 18, 19, 20, 21, 22, 23, 24, 24, 25
|
||||
};
|
||||
|
||||
|
|
@ -270,7 +270,7 @@ Link: https://patch.msgid.link/904d0ab1-c046-40cd-a3a3-d4fdcf663c9d@gmail.com
|
|||
.pwrtrk_5gb_n[RTW_PWR_TRK_5G_1] = rtw8822c_pwrtrk_5gb_n[RTW_PWR_TRK_5G_1],
|
||||
.pwrtrk_5gb_n[RTW_PWR_TRK_5G_2] = rtw8822c_pwrtrk_5gb_n[RTW_PWR_TRK_5G_2],
|
||||
.pwrtrk_5gb_n[RTW_PWR_TRK_5G_3] = rtw8822c_pwrtrk_5gb_n[RTW_PWR_TRK_5G_3],
|
||||
@@ -5261,6 +5251,16 @@ static const struct rtw_pwr_track_tbl rt
|
||||
@@ -5262,6 +5252,16 @@ static const struct rtw_pwr_track_tbl rt
|
||||
.pwrtrk_2g_ccka_p = rtw8822c_pwrtrk_2g_cck_a_p,
|
||||
};
|
||||
|
||||
|
|
@ -287,7 +287,7 @@ Link: https://patch.msgid.link/904d0ab1-c046-40cd-a3a3-d4fdcf663c9d@gmail.com
|
|||
static const struct rtw_hw_reg_offset rtw8822c_edcca_th[] = {
|
||||
[EDCCA_TH_L2H_IDX] = {
|
||||
{.addr = 0x84c, .mask = MASKBYTE2}, .offset = 0x80
|
||||
@@ -5360,7 +5360,6 @@ const struct rtw_chip_info rtw8822c_hw_s
|
||||
@@ -5361,7 +5361,6 @@ const struct rtw_chip_info rtw8822c_hw_s
|
||||
.rfe_defs_size = ARRAY_SIZE(rtw8822c_rfe_defs),
|
||||
.en_dis_dpd = true,
|
||||
.dpd_ratemask = DIS_DPD_RATEALL,
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ Link: https://patch.msgid.link/e443f5d9-4b53-4f64-985c-64313ec80bef@gmail.com
|
|||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
@@ -478,6 +478,7 @@ static int rtw_usb_write_data_rsvd_page(
|
||||
@@ -532,6 +532,7 @@ static int rtw_usb_write_data_rsvd_page(
|
||||
pkt_info.tx_pkt_size = size;
|
||||
pkt_info.qsel = TX_DESC_QSEL_BEACON;
|
||||
pkt_info.offset = chip->tx_pkt_desc_sz;
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
|||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
@@ -930,6 +930,32 @@ static void rtw_usb_intf_deinit(struct r
|
||||
@@ -985,6 +985,32 @@ static void rtw_usb_intf_deinit(struct r
|
||||
usb_set_intfdata(intf, NULL);
|
||||
}
|
||||
|
||||
|
|
@ -45,7 +45,7 @@ Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
|||
static int rtw_usb_switch_mode_new(struct rtw_dev *rtwdev)
|
||||
{
|
||||
enum usb_device_speed cur_speed;
|
||||
@@ -983,7 +1009,8 @@ static int rtw_usb_switch_mode(struct rt
|
||||
@@ -1038,7 +1064,8 @@ static int rtw_usb_switch_mode(struct rt
|
||||
{
|
||||
u8 id = rtwdev->chip->id;
|
||||
|
||||
|
|
@ -55,7 +55,7 @@ Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
|||
return 0;
|
||||
|
||||
if (!rtwdev->efuse.usb_mode_switch) {
|
||||
@@ -998,7 +1025,10 @@ static int rtw_usb_switch_mode(struct rt
|
||||
@@ -1053,7 +1080,10 @@ static int rtw_usb_switch_mode(struct rt
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
|||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
@@ -789,6 +789,32 @@ static void rtw_usb_dynamic_rx_agg_v1(st
|
||||
@@ -843,6 +843,32 @@ static void rtw_usb_dynamic_rx_agg_v1(st
|
||||
rtw_write16(rtwdev, REG_RXDMA_AGG_PG_TH, val16);
|
||||
}
|
||||
|
||||
|
|
@ -52,7 +52,7 @@ Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
|||
static void rtw_usb_dynamic_rx_agg(struct rtw_dev *rtwdev, bool enable)
|
||||
{
|
||||
switch (rtwdev->chip->id) {
|
||||
@@ -797,6 +823,10 @@ static void rtw_usb_dynamic_rx_agg(struc
|
||||
@@ -851,6 +877,10 @@ static void rtw_usb_dynamic_rx_agg(struc
|
||||
case RTW_CHIP_TYPE_8821C:
|
||||
rtw_usb_dynamic_rx_agg_v1(rtwdev, enable);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -1,32 +0,0 @@
|
|||
From 927dcd0ab53f39ee00a2d1f204b5aac77e28fcf9 Mon Sep 17 00:00:00 2001
|
||||
From: Colin Ian King <colin.i.king@gmail.com>
|
||||
Date: Wed, 6 Nov 2024 15:46:42 +0000
|
||||
Subject: [PATCH 5/6] wifi: rtlwifi: rtl8821ae: phy: restore removed code to
|
||||
fix infinite loop
|
||||
|
||||
A previous clean-up fix removed the assignment of v2 inside a while loop
|
||||
that turned it into an infinite loop. Fix this by restoring the assignment
|
||||
of v2 from array[] so that v2 is updated inside the loop.
|
||||
|
||||
Fixes: cda37445718d ("wifi: rtlwifi: rtl8821ae: phy: remove some useless code")
|
||||
Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
|
||||
Tested-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Reviewed-by: Su Hui <suhui@nfschina.com>
|
||||
---
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8821ae/phy.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/phy.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/phy.c
|
||||
@@ -2033,8 +2033,10 @@ static bool _rtl8821ae_phy_config_bb_wit
|
||||
if (!_rtl8821ae_check_condition(hw, v1)) {
|
||||
i += 2; /* skip the pair of expression*/
|
||||
v2 = array[i+1];
|
||||
- while (v2 != 0xDEAD)
|
||||
+ while (v2 != 0xDEAD) {
|
||||
i += 3;
|
||||
+ v2 = array[i + 1];
|
||||
+ }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
--- a/net/mac80211/main.c
|
||||
+++ b/net/mac80211/main.c
|
||||
@@ -1583,24 +1583,6 @@ int ieee80211_register_hw(struct ieee802
|
||||
@@ -1585,24 +1585,6 @@ int ieee80211_register_hw(struct ieee802
|
||||
|
||||
ieee80211_check_wbrf_support(local);
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
|||
|
||||
--- a/net/mac80211/sta_info.c
|
||||
+++ b/net/mac80211/sta_info.c
|
||||
@@ -2439,6 +2439,13 @@ static void sta_stats_decode_rate(struct
|
||||
@@ -2446,6 +2446,13 @@ static void sta_stats_decode_rate(struct
|
||||
|
||||
sband = local->hw.wiphy->bands[band];
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
|
||||
--- a/net/mac80211/sta_info.c
|
||||
+++ b/net/mac80211/sta_info.c
|
||||
@@ -565,6 +565,7 @@ __sta_info_alloc(struct ieee80211_sub_if
|
||||
@@ -564,6 +564,7 @@ __sta_info_alloc(struct ieee80211_sub_if
|
||||
spin_lock_init(&sta->ps_lock);
|
||||
INIT_WORK(&sta->drv_deliver_wk, sta_deliver_ps_frames);
|
||||
wiphy_work_init(&sta->ampdu_mlme.work, ieee80211_ba_session_work);
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -4081,7 +4081,7 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
@@ -4082,7 +4082,7 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
|
||||
if (deficit < 0)
|
||||
sta->airtime[txqi->txq.ac].deficit +=
|
||||
|
|
@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
if (deficit < 0 || !aql_check) {
|
||||
list_move_tail(&txqi->schedule_order,
|
||||
@@ -4224,7 +4224,8 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
@@ -4227,7 +4227,8 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
}
|
||||
sta = container_of(iter->txq.sta, struct sta_info, sta);
|
||||
if (ieee80211_sta_deficit(sta, ac) < 0)
|
||||
|
|
@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
list_move_tail(&iter->schedule_order, &local->active_txqs[ac]);
|
||||
}
|
||||
|
||||
@@ -4232,7 +4233,7 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
@@ -4235,7 +4236,7 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
if (sta->airtime[ac].deficit >= 0)
|
||||
goto out;
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
--- a/include/net/cfg80211.h
|
||||
+++ b/include/net/cfg80211.h
|
||||
@@ -187,6 +187,8 @@ enum ieee80211_channel_flags {
|
||||
@@ -190,6 +190,8 @@ enum ieee80211_channel_flags {
|
||||
* @dfs_state: current state of this channel. Only relevant if radar is required
|
||||
* on this channel.
|
||||
* @dfs_state_entered: timestamp (jiffies) when the dfs state was entered.
|
||||
|
|
@ -20,7 +20,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
* @dfs_cac_ms: DFS CAC time in milliseconds, this is valid for DFS channels.
|
||||
* @psd: power spectral density (in dBm)
|
||||
*/
|
||||
@@ -204,6 +206,7 @@ struct ieee80211_channel {
|
||||
@@ -207,6 +209,7 @@ struct ieee80211_channel {
|
||||
int orig_mag, orig_mpwr;
|
||||
enum nl80211_dfs_state dfs_state;
|
||||
unsigned long dfs_state_entered;
|
||||
|
|
@ -124,7 +124,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
--- a/net/wireless/mlme.c
|
||||
+++ b/net/wireless/mlme.c
|
||||
@@ -1031,6 +1031,8 @@ void cfg80211_dfs_channels_update_work(s
|
||||
@@ -1032,6 +1032,8 @@ void cfg80211_dfs_channels_update_work(s
|
||||
if (c->dfs_state == NL80211_DFS_UNAVAILABLE) {
|
||||
time_dfs_update = IEEE80211_DFS_MIN_NOP_TIME_MS;
|
||||
radar_event = NL80211_RADAR_NOP_FINISHED;
|
||||
|
|
@ -133,7 +133,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
} else {
|
||||
if (regulatory_pre_cac_allowed(wiphy) ||
|
||||
cfg80211_any_wiphy_oper_chan(wiphy, c))
|
||||
@@ -1038,11 +1040,10 @@ void cfg80211_dfs_channels_update_work(s
|
||||
@@ -1039,11 +1041,10 @@ void cfg80211_dfs_channels_update_work(s
|
||||
|
||||
time_dfs_update = REG_PRE_CAC_EXPIRY_GRACE_MS;
|
||||
radar_event = NL80211_RADAR_PRE_CAC_EXPIRED;
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
--- a/include/net/cfg80211.h
|
||||
+++ b/include/net/cfg80211.h
|
||||
@@ -3423,6 +3423,7 @@ enum wiphy_params_flags {
|
||||
@@ -3426,6 +3426,7 @@ enum wiphy_params_flags {
|
||||
/* The per TXQ device queue limit in airtime */
|
||||
#define IEEE80211_DEFAULT_AQL_TXQ_LIMIT_L 5000
|
||||
#define IEEE80211_DEFAULT_AQL_TXQ_LIMIT_H 12000
|
||||
|
|
@ -70,7 +70,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
--- a/net/mac80211/ieee80211_i.h
|
||||
+++ b/net/mac80211/ieee80211_i.h
|
||||
@@ -1351,10 +1351,12 @@ struct ieee80211_local {
|
||||
@@ -1360,10 +1360,12 @@ struct ieee80211_local {
|
||||
spinlock_t handle_wake_tx_queue_lock;
|
||||
|
||||
u16 airtime_flags;
|
||||
|
|
@ -95,7 +95,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
spin_lock_init(&local->active_txq_lock[i]);
|
||||
--- a/net/mac80211/sta_info.c
|
||||
+++ b/net/mac80211/sta_info.c
|
||||
@@ -2353,13 +2353,28 @@ EXPORT_SYMBOL(ieee80211_sta_recalc_aggre
|
||||
@@ -2360,13 +2360,28 @@ EXPORT_SYMBOL(ieee80211_sta_recalc_aggre
|
||||
|
||||
void ieee80211_sta_update_pending_airtime(struct ieee80211_local *local,
|
||||
struct sta_info *sta, u8 ac,
|
||||
|
|
@ -136,7 +136,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
spin_unlock_irqrestore(&local->ack_status_lock, flags);
|
||||
|
||||
if (id >= 0) {
|
||||
@@ -3982,20 +3982,20 @@ begin:
|
||||
@@ -3983,20 +3983,20 @@ begin:
|
||||
encap_out:
|
||||
info->control.vif = vif;
|
||||
|
||||
|
|
@ -167,7 +167,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
}
|
||||
|
||||
return skb;
|
||||
@@ -4047,6 +4047,7 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
@@ -4048,6 +4048,7 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
struct ieee80211_txq *ret = NULL;
|
||||
struct txq_info *txqi = NULL, *head = NULL;
|
||||
bool found_eligible_txq = false;
|
||||
|
|
@ -175,7 +175,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
spin_lock_bh(&local->active_txq_lock[ac]);
|
||||
|
||||
@@ -4070,26 +4071,26 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
@@ -4071,26 +4072,26 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
if (!head)
|
||||
head = txqi;
|
||||
|
||||
|
|
@ -214,7 +214,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
if (txqi->schedule_round == local->schedule_round[ac])
|
||||
goto out;
|
||||
|
||||
@@ -4154,7 +4155,8 @@ bool ieee80211_txq_airtime_check(struct
|
||||
@@ -4157,7 +4158,8 @@ bool ieee80211_txq_airtime_check(struct
|
||||
return true;
|
||||
|
||||
if (!txq->sta)
|
||||
|
|
@ -224,7 +224,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
if (unlikely(txq->tid == IEEE80211_NUM_TIDS))
|
||||
return true;
|
||||
@@ -4203,15 +4205,15 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
@@ -4206,15 +4208,15 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
|
||||
spin_lock_bh(&local->active_txq_lock[ac]);
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
--- a/include/net/cfg80211.h
|
||||
+++ b/include/net/cfg80211.h
|
||||
@@ -6271,6 +6271,7 @@ enum ieee80211_ap_reg_power {
|
||||
@@ -6274,6 +6274,7 @@ enum ieee80211_ap_reg_power {
|
||||
* entered.
|
||||
* @links.cac_time_ms: CAC time in ms
|
||||
* @valid_links: bitmap describing what elements of @links are valid
|
||||
|
|
@ -31,7 +31,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
*/
|
||||
struct wireless_dev {
|
||||
struct wiphy *wiphy;
|
||||
@@ -6383,6 +6384,8 @@ struct wireless_dev {
|
||||
@@ -6386,6 +6387,8 @@ struct wireless_dev {
|
||||
unsigned int cac_time_ms;
|
||||
} links[IEEE80211_MLD_MAX_NUM_LINKS];
|
||||
u16 valid_links;
|
||||
|
|
@ -40,7 +40,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
};
|
||||
|
||||
static inline const u8 *wdev_address(struct wireless_dev *wdev)
|
||||
@@ -6569,6 +6572,17 @@ bool cfg80211_radio_chandef_valid(const
|
||||
@@ -6572,6 +6575,17 @@ bool cfg80211_radio_chandef_valid(const
|
||||
const struct cfg80211_chan_def *chandef);
|
||||
|
||||
/**
|
||||
|
|
@ -81,7 +81,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
__NL80211_ATTR_AFTER_LAST,
|
||||
--- a/net/wireless/nl80211.c
|
||||
+++ b/net/wireless/nl80211.c
|
||||
@@ -829,6 +829,7 @@ static const struct nla_policy nl80211_p
|
||||
@@ -832,6 +832,7 @@ static const struct nla_policy nl80211_p
|
||||
[NL80211_ATTR_MLO_TTLM_DLINK] = NLA_POLICY_EXACT_LEN(sizeof(u16) * 8),
|
||||
[NL80211_ATTR_MLO_TTLM_ULINK] = NLA_POLICY_EXACT_LEN(sizeof(u16) * 8),
|
||||
[NL80211_ATTR_ASSOC_SPP_AMSDU] = { .type = NLA_FLAG },
|
||||
|
|
@ -89,7 +89,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
};
|
||||
|
||||
/* policy for the key attributes */
|
||||
@@ -3996,7 +3997,8 @@ static int nl80211_send_iface(struct sk_
|
||||
@@ -4003,7 +4004,8 @@ static int nl80211_send_iface(struct sk_
|
||||
nla_put_u32(msg, NL80211_ATTR_GENERATION,
|
||||
rdev->devlist_generation ^
|
||||
(cfg80211_rdev_list_generation << 2)) ||
|
||||
|
|
@ -99,7 +99,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
goto nla_put_failure;
|
||||
|
||||
if (rdev->ops->get_channel && !wdev->valid_links) {
|
||||
@@ -4312,6 +4314,29 @@ static int nl80211_valid_4addr(struct cf
|
||||
@@ -4324,6 +4326,29 @@ static int nl80211_valid_4addr(struct cf
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
|
|
@ -129,7 +129,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
static int nl80211_set_interface(struct sk_buff *skb, struct genl_info *info)
|
||||
{
|
||||
struct cfg80211_registered_device *rdev = info->user_ptr[0];
|
||||
@@ -4319,6 +4344,8 @@ static int nl80211_set_interface(struct
|
||||
@@ -4331,6 +4356,8 @@ static int nl80211_set_interface(struct
|
||||
int err;
|
||||
enum nl80211_iftype otype, ntype;
|
||||
struct net_device *dev = info->user_ptr[1];
|
||||
|
|
@ -138,7 +138,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
bool change = false;
|
||||
|
||||
memset(¶ms, 0, sizeof(params));
|
||||
@@ -4332,8 +4359,6 @@ static int nl80211_set_interface(struct
|
||||
@@ -4344,8 +4371,6 @@ static int nl80211_set_interface(struct
|
||||
}
|
||||
|
||||
if (info->attrs[NL80211_ATTR_MESH_ID]) {
|
||||
|
|
@ -147,7 +147,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
if (ntype != NL80211_IFTYPE_MESH_POINT)
|
||||
return -EINVAL;
|
||||
if (otype != NL80211_IFTYPE_MESH_POINT)
|
||||
@@ -4364,6 +4389,12 @@ static int nl80211_set_interface(struct
|
||||
@@ -4376,6 +4401,12 @@ static int nl80211_set_interface(struct
|
||||
if (err > 0)
|
||||
change = true;
|
||||
|
||||
|
|
@ -160,7 +160,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
if (change)
|
||||
err = cfg80211_change_iface(rdev, dev, ntype, ¶ms);
|
||||
else
|
||||
@@ -4372,11 +4403,11 @@ static int nl80211_set_interface(struct
|
||||
@@ -4384,11 +4415,11 @@ static int nl80211_set_interface(struct
|
||||
if (!err && params.use_4addr != -1)
|
||||
dev->ieee80211_ptr->use_4addr = params.use_4addr;
|
||||
|
||||
|
|
@ -175,7 +175,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
return err;
|
||||
}
|
||||
@@ -4387,6 +4418,7 @@ static int _nl80211_new_interface(struct
|
||||
@@ -4399,6 +4430,7 @@ static int _nl80211_new_interface(struct
|
||||
struct vif_params params;
|
||||
struct wireless_dev *wdev;
|
||||
struct sk_buff *msg;
|
||||
|
|
@ -183,7 +183,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
int err;
|
||||
enum nl80211_iftype type = NL80211_IFTYPE_UNSPECIFIED;
|
||||
|
||||
@@ -4424,6 +4456,10 @@ static int _nl80211_new_interface(struct
|
||||
@@ -4436,6 +4468,10 @@ static int _nl80211_new_interface(struct
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
|
|
@ -194,7 +194,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
|
||||
if (!msg)
|
||||
return -ENOMEM;
|
||||
@@ -4465,6 +4501,9 @@ static int _nl80211_new_interface(struct
|
||||
@@ -4477,6 +4513,9 @@ static int _nl80211_new_interface(struct
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -204,7 +204,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
if (nl80211_send_iface(msg, info->snd_portid, info->snd_seq, 0,
|
||||
rdev, wdev, NL80211_CMD_NEW_INTERFACE) < 0) {
|
||||
nlmsg_free(msg);
|
||||
@@ -9180,6 +9219,9 @@ static bool cfg80211_off_channel_oper_al
|
||||
@@ -9192,6 +9231,9 @@ static bool cfg80211_off_channel_oper_al
|
||||
|
||||
lockdep_assert_wiphy(wdev->wiphy);
|
||||
|
||||
|
|
@ -214,7 +214,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
if (!cfg80211_beaconing_iface_active(wdev))
|
||||
return true;
|
||||
|
||||
@@ -9392,7 +9434,8 @@ static int nl80211_trigger_scan(struct s
|
||||
@@ -9404,7 +9446,8 @@ static int nl80211_trigger_scan(struct s
|
||||
}
|
||||
|
||||
/* ignore disabled channels */
|
||||
|
|
@ -224,7 +224,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
continue;
|
||||
|
||||
request->channels[i] = chan;
|
||||
@@ -9412,7 +9455,8 @@ static int nl80211_trigger_scan(struct s
|
||||
@@ -9424,7 +9467,8 @@ static int nl80211_trigger_scan(struct s
|
||||
|
||||
chan = &wiphy->bands[band]->channels[j];
|
||||
|
||||
|
|
@ -236,7 +236,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
request->channels[i] = chan;
|
||||
--- a/net/wireless/scan.c
|
||||
+++ b/net/wireless/scan.c
|
||||
@@ -956,7 +956,8 @@ static int cfg80211_scan_6ghz(struct cfg
|
||||
@@ -953,7 +953,8 @@ static int cfg80211_scan_6ghz(struct cfg
|
||||
struct ieee80211_channel *chan =
|
||||
ieee80211_get_channel(&rdev->wiphy, ap->center_freq);
|
||||
|
||||
|
|
@ -246,7 +246,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
continue;
|
||||
|
||||
for (i = 0; i < rdev_req->n_channels; i++) {
|
||||
@@ -3519,9 +3520,12 @@ int cfg80211_wext_siwscan(struct net_dev
|
||||
@@ -3512,9 +3513,12 @@ int cfg80211_wext_siwscan(struct net_dev
|
||||
continue;
|
||||
|
||||
for (j = 0; j < wiphy->bands[band]->n_channels; j++) {
|
||||
|
|
@ -263,7 +263,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
/* If we have a wireless request structure and the
|
||||
--- a/net/wireless/util.c
|
||||
+++ b/net/wireless/util.c
|
||||
@@ -2923,3 +2923,32 @@ bool cfg80211_radio_chandef_valid(const
|
||||
@@ -2970,3 +2970,32 @@ bool cfg80211_radio_chandef_valid(const
|
||||
return true;
|
||||
}
|
||||
EXPORT_SYMBOL(cfg80211_radio_chandef_valid);
|
||||
|
|
@ -298,7 +298,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
+EXPORT_SYMBOL(cfg80211_wdev_channel_allowed);
|
||||
--- a/net/wireless/core.c
|
||||
+++ b/net/wireless/core.c
|
||||
@@ -1424,6 +1424,8 @@ void cfg80211_init_wdev(struct wireless_
|
||||
@@ -1431,6 +1431,8 @@ void cfg80211_init_wdev(struct wireless_
|
||||
/* allow mac80211 to determine the timeout */
|
||||
wdev->ps_timeout = -1;
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
--- a/net/mac80211/scan.c
|
||||
+++ b/net/mac80211/scan.c
|
||||
@@ -1176,14 +1176,14 @@ int ieee80211_request_ibss_scan(struct i
|
||||
@@ -1175,14 +1175,14 @@ int ieee80211_request_ibss_scan(struct i
|
||||
unsigned int n_channels)
|
||||
{
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
|
|
@ -27,7 +27,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
/* fill internal scan request */
|
||||
if (!channels) {
|
||||
@@ -1200,7 +1200,9 @@ int ieee80211_request_ibss_scan(struct i
|
||||
@@ -1199,7 +1199,9 @@ int ieee80211_request_ibss_scan(struct i
|
||||
&local->hw.wiphy->bands[band]->channels[i];
|
||||
|
||||
if (tmp_ch->flags & (IEEE80211_CHAN_NO_IR |
|
||||
|
|
@ -38,7 +38,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
continue;
|
||||
|
||||
local->int_scan_req->channels[n_ch] = tmp_ch;
|
||||
@@ -1209,21 +1211,23 @@ int ieee80211_request_ibss_scan(struct i
|
||||
@@ -1208,21 +1210,23 @@ int ieee80211_request_ibss_scan(struct i
|
||||
}
|
||||
|
||||
if (WARN_ON_ONCE(n_ch == 0))
|
||||
|
|
@ -66,7 +66,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
local->int_scan_req->n_channels = n_ch;
|
||||
}
|
||||
@@ -1233,9 +1237,7 @@ int ieee80211_request_ibss_scan(struct i
|
||||
@@ -1232,9 +1236,7 @@ int ieee80211_request_ibss_scan(struct i
|
||||
memcpy(local->int_scan_req->ssids[0].ssid, ssid, IEEE80211_MAX_SSID_LEN);
|
||||
local->int_scan_req->ssids[0].ssid_len = ssid_len;
|
||||
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
new_ctx = ieee80211_new_chanctx(local, chanreq, mode,
|
||||
false, radio_idx);
|
||||
else
|
||||
@@ -1883,7 +1888,9 @@ int _ieee80211_link_use_channel(struct i
|
||||
@@ -1884,7 +1889,9 @@ int _ieee80211_link_use_channel(struct i
|
||||
/* Note: context is now reserved */
|
||||
if (ctx)
|
||||
reserved = true;
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
--- a/include/net/cfg80211.h
|
||||
+++ b/include/net/cfg80211.h
|
||||
@@ -4700,6 +4700,7 @@ struct cfg80211_ops {
|
||||
@@ -4703,6 +4703,7 @@ struct cfg80211_ops {
|
||||
struct ieee80211_channel *chan);
|
||||
|
||||
int (*set_monitor_channel)(struct wiphy *wiphy,
|
||||
|
|
@ -69,7 +69,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
struct ieee80211_local *local = wiphy_priv(wiphy);
|
||||
--- a/net/wireless/chan.c
|
||||
+++ b/net/wireless/chan.c
|
||||
@@ -1673,6 +1673,7 @@ bool cfg80211_reg_check_beaconing(struct
|
||||
@@ -1679,6 +1679,7 @@ bool cfg80211_reg_check_beaconing(struct
|
||||
EXPORT_SYMBOL(cfg80211_reg_check_beaconing);
|
||||
|
||||
int cfg80211_set_monitor_channel(struct cfg80211_registered_device *rdev,
|
||||
|
|
@ -77,7 +77,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
struct cfg80211_chan_def *chandef)
|
||||
{
|
||||
if (!rdev->ops->set_monitor_channel)
|
||||
@@ -1680,7 +1681,7 @@ int cfg80211_set_monitor_channel(struct
|
||||
@@ -1686,7 +1687,7 @@ int cfg80211_set_monitor_channel(struct
|
||||
if (!cfg80211_has_monitors_only(rdev))
|
||||
return -EBUSY;
|
||||
|
||||
|
|
@ -98,7 +98,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
int ieee80211_get_ratemask(struct ieee80211_supported_band *sband,
|
||||
--- a/net/wireless/nl80211.c
|
||||
+++ b/net/wireless/nl80211.c
|
||||
@@ -3562,7 +3562,7 @@ static int __nl80211_set_channel(struct
|
||||
@@ -3569,7 +3569,7 @@ static int __nl80211_set_channel(struct
|
||||
case NL80211_IFTYPE_MESH_POINT:
|
||||
return cfg80211_set_mesh_channel(rdev, wdev, &chandef);
|
||||
case NL80211_IFTYPE_MONITOR:
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
* @IEEE80211_HW_NO_AUTO_VIF: The driver would like for no wlanX to
|
||||
* be created. It is expected user-space will create vifs as
|
||||
* desired (and thus have them named as desired).
|
||||
@@ -2838,6 +2843,7 @@ enum ieee80211_hw_flags {
|
||||
@@ -2843,6 +2848,7 @@ enum ieee80211_hw_flags {
|
||||
IEEE80211_HW_SUPPORTS_DYNAMIC_PS,
|
||||
IEEE80211_HW_MFP_CAPABLE,
|
||||
IEEE80211_HW_WANT_MONITOR_VIF,
|
||||
|
|
@ -217,7 +217,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
}
|
||||
|
||||
/* Regardless of eth_mac_addr() return we still want to add the
|
||||
@@ -699,9 +704,11 @@ static void ieee80211_do_stop(struct iee
|
||||
@@ -705,9 +710,11 @@ static void ieee80211_do_stop(struct iee
|
||||
ieee80211_recalc_idle(local);
|
||||
ieee80211_recalc_offload(local);
|
||||
|
||||
|
|
@ -230,7 +230,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
fallthrough;
|
||||
default:
|
||||
if (!going_down)
|
||||
@@ -1131,7 +1138,8 @@ int ieee80211_add_virtual_monitor(struct
|
||||
@@ -1140,7 +1147,8 @@ int ieee80211_add_virtual_monitor(struct
|
||||
ASSERT_RTNL();
|
||||
lockdep_assert_wiphy(local->hw.wiphy);
|
||||
|
||||
|
|
@ -240,7 +240,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
return 0;
|
||||
|
||||
sdata = kzalloc(sizeof(*sdata) + local->hw.vif_data_size, GFP_KERNEL);
|
||||
@@ -1193,6 +1201,9 @@ void ieee80211_del_virtual_monitor(struc
|
||||
@@ -1202,6 +1210,9 @@ void ieee80211_del_virtual_monitor(struc
|
||||
{
|
||||
struct ieee80211_sub_if_data *sdata;
|
||||
|
||||
|
|
@ -250,7 +250,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
ASSERT_RTNL();
|
||||
lockdep_assert_wiphy(local->hw.wiphy);
|
||||
|
||||
@@ -1328,7 +1339,8 @@ int ieee80211_do_open(struct wireless_de
|
||||
@@ -1345,7 +1356,8 @@ int ieee80211_do_open(struct wireless_de
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -284,7 +284,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
vif = &sdata->vif;
|
||||
break;
|
||||
}
|
||||
@@ -3952,7 +3953,8 @@ begin:
|
||||
@@ -3953,7 +3954,8 @@ begin:
|
||||
|
||||
switch (tx.sdata->vif.type) {
|
||||
case NL80211_IFTYPE_MONITOR:
|
||||
|
|
@ -296,7 +296,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
}
|
||||
--- a/net/mac80211/util.c
|
||||
+++ b/net/mac80211/util.c
|
||||
@@ -739,7 +739,8 @@ static void __iterate_interfaces(struct
|
||||
@@ -740,7 +740,8 @@ static void __iterate_interfaces(struct
|
||||
lockdep_is_held(&local->hw.wiphy->mtx)) {
|
||||
switch (sdata->vif.type) {
|
||||
case NL80211_IFTYPE_MONITOR:
|
||||
|
|
@ -306,7 +306,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
continue;
|
||||
break;
|
||||
case NL80211_IFTYPE_AP_VLAN:
|
||||
@@ -1856,8 +1857,10 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
@@ -1860,8 +1861,10 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
}
|
||||
|
||||
list_for_each_entry(sdata, &local->interfaces, list) {
|
||||
|
|
@ -318,7 +318,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
ieee80211_sdata_running(sdata)) {
|
||||
res = drv_add_interface(local, sdata);
|
||||
if (WARN_ON(res))
|
||||
@@ -1870,11 +1873,14 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
@@ -1874,11 +1877,14 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
*/
|
||||
if (res) {
|
||||
list_for_each_entry_continue_reverse(sdata, &local->interfaces,
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
--- a/include/net/cfg80211.h
|
||||
+++ b/include/net/cfg80211.h
|
||||
@@ -2272,6 +2272,7 @@ static inline int cfg80211_get_station(s
|
||||
@@ -2275,6 +2275,7 @@ static inline int cfg80211_get_station(s
|
||||
* @MONITOR_FLAG_OTHER_BSS: disable BSSID filtering
|
||||
* @MONITOR_FLAG_COOK_FRAMES: report frames after processing
|
||||
* @MONITOR_FLAG_ACTIVE: active monitor, ACKs frames on its MAC address
|
||||
|
|
@ -18,7 +18,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
*/
|
||||
enum monitor_flags {
|
||||
MONITOR_FLAG_CHANGED = BIT(__NL80211_MNTR_FLAG_INVALID),
|
||||
@@ -2281,6 +2282,7 @@ enum monitor_flags {
|
||||
@@ -2284,6 +2285,7 @@ enum monitor_flags {
|
||||
MONITOR_FLAG_OTHER_BSS = BIT(NL80211_MNTR_FLAG_OTHER_BSS),
|
||||
MONITOR_FLAG_COOK_FRAMES = BIT(NL80211_MNTR_FLAG_COOK_FRAMES),
|
||||
MONITOR_FLAG_ACTIVE = BIT(NL80211_MNTR_FLAG_ACTIVE),
|
||||
|
|
@ -28,7 +28,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
/**
|
||||
--- a/include/uapi/linux/nl80211.h
|
||||
+++ b/include/uapi/linux/nl80211.h
|
||||
@@ -4703,6 +4703,7 @@ enum nl80211_survey_info {
|
||||
@@ -4709,6 +4709,7 @@ enum nl80211_survey_info {
|
||||
* overrides all other flags.
|
||||
* @NL80211_MNTR_FLAG_ACTIVE: use the configured MAC address
|
||||
* and ACK incoming unicast packets.
|
||||
|
|
@ -36,7 +36,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
*
|
||||
* @__NL80211_MNTR_FLAG_AFTER_LAST: internal use
|
||||
* @NL80211_MNTR_FLAG_MAX: highest possible monitor flag
|
||||
@@ -4715,6 +4716,7 @@ enum nl80211_mntr_flags {
|
||||
@@ -4721,6 +4722,7 @@ enum nl80211_mntr_flags {
|
||||
NL80211_MNTR_FLAG_OTHER_BSS,
|
||||
NL80211_MNTR_FLAG_COOK_FRAMES,
|
||||
NL80211_MNTR_FLAG_ACTIVE,
|
||||
|
|
@ -46,7 +46,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
__NL80211_MNTR_FLAG_AFTER_LAST,
|
||||
--- a/net/wireless/nl80211.c
|
||||
+++ b/net/wireless/nl80211.c
|
||||
@@ -4201,6 +4201,7 @@ static const struct nla_policy mntr_flag
|
||||
@@ -4208,6 +4208,7 @@ static const struct nla_policy mntr_flag
|
||||
[NL80211_MNTR_FLAG_OTHER_BSS] = { .type = NLA_FLAG },
|
||||
[NL80211_MNTR_FLAG_COOK_FRAMES] = { .type = NLA_FLAG },
|
||||
[NL80211_MNTR_FLAG_ACTIVE] = { .type = NLA_FLAG },
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
--- a/net/mac80211/ieee80211_i.h
|
||||
+++ b/net/mac80211/ieee80211_i.h
|
||||
@@ -1373,7 +1373,7 @@ struct ieee80211_local {
|
||||
@@ -1382,7 +1382,7 @@ struct ieee80211_local {
|
||||
spinlock_t queue_stop_reason_lock;
|
||||
|
||||
int open_count;
|
||||
|
|
@ -22,7 +22,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
fif_probe_req;
|
||||
--- a/net/mac80211/iface.c
|
||||
+++ b/net/mac80211/iface.c
|
||||
@@ -1094,6 +1094,8 @@ void ieee80211_adjust_monitor_flags(stru
|
||||
@@ -1103,6 +1103,8 @@ void ieee80211_adjust_monitor_flags(stru
|
||||
ADJUST(CONTROL, control);
|
||||
ADJUST(CONTROL, pspoll);
|
||||
ADJUST(OTHER_BSS, other_bss);
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
--- a/include/net/cfg80211.h
|
||||
+++ b/include/net/cfg80211.h
|
||||
@@ -5443,6 +5443,8 @@ struct wiphy_radio_freq_range {
|
||||
@@ -5446,6 +5446,8 @@ struct wiphy_radio_freq_range {
|
||||
* @iface_combinations: Valid interface combinations array, should not
|
||||
* list single interface types.
|
||||
* @n_iface_combinations: number of entries in @iface_combinations array.
|
||||
|
|
@ -20,7 +20,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
*/
|
||||
struct wiphy_radio {
|
||||
const struct wiphy_radio_freq_range *freq_range;
|
||||
@@ -5450,6 +5452,8 @@ struct wiphy_radio {
|
||||
@@ -5453,6 +5455,8 @@ struct wiphy_radio {
|
||||
|
||||
const struct ieee80211_iface_combination *iface_combinations;
|
||||
int n_iface_combinations;
|
||||
|
|
@ -31,7 +31,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
#define CFG80211_HW_TIMESTAMP_ALL_PEERS 0xffff
|
||||
--- a/include/uapi/linux/nl80211.h
|
||||
+++ b/include/uapi/linux/nl80211.h
|
||||
@@ -8038,6 +8038,8 @@ enum nl80211_ap_settings_flags {
|
||||
@@ -8044,6 +8044,8 @@ enum nl80211_ap_settings_flags {
|
||||
* @NL80211_WIPHY_RADIO_ATTR_INTERFACE_COMBINATION: Supported interface
|
||||
* combination for this radio. Attribute may be present multiple times
|
||||
* and contains attributes defined in &enum nl80211_if_combination_attrs.
|
||||
|
|
@ -40,7 +40,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
*
|
||||
* @__NL80211_WIPHY_RADIO_ATTR_LAST: Internal
|
||||
* @NL80211_WIPHY_RADIO_ATTR_MAX: Highest attribute
|
||||
@@ -8048,6 +8050,7 @@ enum nl80211_wiphy_radio_attrs {
|
||||
@@ -8054,6 +8056,7 @@ enum nl80211_wiphy_radio_attrs {
|
||||
NL80211_WIPHY_RADIO_ATTR_INDEX,
|
||||
NL80211_WIPHY_RADIO_ATTR_FREQ_RANGE,
|
||||
NL80211_WIPHY_RADIO_ATTR_INTERFACE_COMBINATION,
|
||||
|
|
@ -50,7 +50,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
__NL80211_WIPHY_RADIO_ATTR_LAST,
|
||||
--- a/net/wireless/nl80211.c
|
||||
+++ b/net/wireless/nl80211.c
|
||||
@@ -2431,6 +2431,11 @@ static int nl80211_put_radio(struct wiph
|
||||
@@ -2438,6 +2438,11 @@ static int nl80211_put_radio(struct wiph
|
||||
if (nla_put_u32(msg, NL80211_WIPHY_RADIO_ATTR_INDEX, idx))
|
||||
goto nla_put_failure;
|
||||
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
}
|
||||
|
||||
/* Regardless of eth_mac_addr() return we still want to add the
|
||||
@@ -1324,6 +1319,8 @@ int ieee80211_do_open(struct wireless_de
|
||||
@@ -1336,6 +1331,8 @@ int ieee80211_do_open(struct wireless_de
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
From 4e1916dec9850cd49dd5792200ab649061cbedc1 Mon Sep 17 00:00:00 2001
|
||||
From: Maharaja Kennadyrajan <maharaja.kennadyrajan@oss.qualcomm.com>
|
||||
Date: Fri, 18 Jul 2025 11:38:35 +0530
|
||||
Subject: [PATCH] wifi: mac80211: Add link iteration macro for link data
|
||||
with rcu_dereference
|
||||
Subject: [PATCH] wifi: mac80211: Add link iteration macro for link data with
|
||||
rcu_dereference
|
||||
|
||||
Currently, the existing macro for_each_link_data() uses sdata_dereference()
|
||||
which requires the wiphy lock. This lock cannot be used in atomic or RCU
|
||||
|
|
@ -19,24 +20,15 @@ Signed-off-by: Maharaja Kennadyrajan <maharaja.kennadyrajan@oss.qualcomm.com>
|
|||
Link: https://patch.msgid.link/20250718060837.59371-3-maharaja.kennadyrajan@oss.qualcomm.com
|
||||
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
---
|
||||
net/mac80211/ieee80211_i.h | 13 +++++++++++++
|
||||
1 file changed, 13 insertions(+)
|
||||
|
||||
--- a/net/mac80211/ieee80211_i.h
|
||||
+++ b/net/mac80211/ieee80211_i.h
|
||||
@@ -1211,6 +1211,30 @@ struct ieee80211_sub_if_data *vif_to_sda
|
||||
if ((_link = wiphy_dereference((local)->hw.wiphy, \
|
||||
___sdata->link[___link_id])))
|
||||
@@ -1220,6 +1220,19 @@ struct ieee80211_sub_if_data *vif_to_sda
|
||||
((__link) = sdata_dereference((__sdata)->link[__link_id], \
|
||||
(__sdata))))
|
||||
|
||||
+#define for_each_link_data(sdata, __link) \
|
||||
+ /* outer loop just to define the variable ... */ \
|
||||
+ for (struct ieee80211_sub_if_data *__sdata = (sdata); __sdata; \
|
||||
+ __sdata = NULL /* always stop */) \
|
||||
+ for (int __link_id = 0; \
|
||||
+ __link_id < ARRAY_SIZE((__sdata)->link); __link_id++) \
|
||||
+ if ((!(__sdata)->vif.valid_links || \
|
||||
+ (__sdata)->vif.valid_links & BIT(__link_id)) && \
|
||||
+ ((__link) = sdata_dereference((__sdata)->link[__link_id], \
|
||||
+ (__sdata))))
|
||||
+
|
||||
+/*
|
||||
+ * for_each_link_data_rcu should be used under RCU read lock.
|
||||
+ */
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
|
||||
--- a/net/mac80211/mlme.c
|
||||
+++ b/net/mac80211/mlme.c
|
||||
@@ -2159,6 +2159,21 @@ static void ieee80211_csa_switch_work(st
|
||||
@@ -2167,6 +2167,21 @@ static void ieee80211_csa_switch_work(st
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -45,7 +45,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
ieee80211_sta_reset_beacon_monitor(sdata);
|
||||
ieee80211_sta_reset_conn_monitor(sdata);
|
||||
}
|
||||
@@ -7863,6 +7878,29 @@ void ieee80211_sta_work(struct ieee80211
|
||||
@@ -7892,6 +7907,29 @@ void ieee80211_sta_work(struct ieee80211
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
|
||||
--- a/net/mac80211/mlme.c
|
||||
+++ b/net/mac80211/mlme.c
|
||||
@@ -3831,9 +3831,6 @@ static void ieee80211_mgd_probe_ap_send(
|
||||
@@ -3841,9 +3841,6 @@ static void ieee80211_mgd_probe_ap_send(
|
||||
|
||||
lockdep_assert_wiphy(sdata->local->hw.wiphy);
|
||||
|
||||
|
|
@ -35,7 +35,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
/*
|
||||
* Try sending broadcast probe requests for the last three
|
||||
* probe requests after the first ones failed since some
|
||||
@@ -3879,9 +3876,6 @@ static void ieee80211_mgd_probe_ap(struc
|
||||
@@ -3889,9 +3886,6 @@ static void ieee80211_mgd_probe_ap(struc
|
||||
|
||||
lockdep_assert_wiphy(sdata->local->hw.wiphy);
|
||||
|
||||
|
|
@ -45,7 +45,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
if (!ieee80211_sdata_running(sdata))
|
||||
return;
|
||||
|
||||
@@ -7921,36 +7915,73 @@ static void ieee80211_sta_bcn_mon_timer(
|
||||
@@ -7950,36 +7944,73 @@ static void ieee80211_sta_bcn_mon_timer(
|
||||
&sdata->u.mgd.beacon_connection_loss_work);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,56 +0,0 @@
|
|||
From 0d47666f48a084363ee54f389bec2865de4934b8 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Berg <benjamin@sipsolutions.net>
|
||||
Date: Wed, 30 Apr 2025 20:25:38 +0200
|
||||
Subject: [PATCH] wifi: mac80211: do not offer a mesh path if forwarding is
|
||||
disabled
|
||||
|
||||
When processing a PREQ the code would always check whether we have a
|
||||
mesh path locally and reply accordingly. However, when forwarding is
|
||||
disabled then we should not reply with this information as we will not
|
||||
forward data packets down that path.
|
||||
|
||||
Move the check for dot11MeshForwarding up in the function and skip the
|
||||
mesh path lookup in that case. In the else block, set forward to false
|
||||
so that the rest of the function becomes a no-op and the
|
||||
dot11MeshForwarding check does not need to be duplicated.
|
||||
|
||||
This explains an effect observed in the Freifunk community where mesh
|
||||
forwarding is disabled. In that case a mesh with three STAs and only bad
|
||||
links in between them, individual STAs would occionally have indirect
|
||||
mpath entries. This should not have happened.
|
||||
|
||||
Signed-off-by: Benjamin Berg <benjamin@sipsolutions.net>
|
||||
Reviewed-by: Rouven Czerwinski <rouven@czerwinskis.de>
|
||||
---
|
||||
net/mac80211/mesh_hwmp.c | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/net/mac80211/mesh_hwmp.c
|
||||
+++ b/net/mac80211/mesh_hwmp.c
|
||||
@@ -630,7 +630,7 @@ static void hwmp_preq_frame_process(stru
|
||||
mesh_path_add_gate(mpath);
|
||||
}
|
||||
rcu_read_unlock();
|
||||
- } else {
|
||||
+ } else if (ifmsh->mshcfg.dot11MeshForwarding) {
|
||||
rcu_read_lock();
|
||||
mpath = mesh_path_lookup(sdata, target_addr);
|
||||
if (mpath) {
|
||||
@@ -648,6 +648,8 @@ static void hwmp_preq_frame_process(stru
|
||||
}
|
||||
}
|
||||
rcu_read_unlock();
|
||||
+ } else {
|
||||
+ forward = false;
|
||||
}
|
||||
|
||||
if (reply) {
|
||||
@@ -665,7 +667,7 @@ static void hwmp_preq_frame_process(stru
|
||||
}
|
||||
}
|
||||
|
||||
- if (forward && ifmsh->mshcfg.dot11MeshForwarding) {
|
||||
+ if (forward) {
|
||||
u32 preq_id;
|
||||
u8 hopcount;
|
||||
|
||||
Loading…
Add table
Reference in a new issue