mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-29 10:08:59 +00:00
359a6e36e9
Synchronize the ath11k backports with the current ath-next tree. All of the changes are various bugfixes, there is no new major feature. Notable bugfixes are: * WCN6855 board name fixes * One MSI vector booting is working again This is rather important for most of the older platforms. * DFS CAC state in virtual interfaces was fixed * TX power during CAC reporting Signed-off-by: Robert Marko <robimarko@gmail.com>
81 lines
3.2 KiB
Diff
81 lines
3.2 KiB
Diff
From 69fcb525905600a151997cd16367bb92c34a2b14 Mon Sep 17 00:00:00 2001
|
|
From: Aditya Kumar Singh <quic_adisi@quicinc.com>
|
|
Date: Tue, 3 Oct 2023 17:26:54 +0300
|
|
Subject: [PATCH] wifi: ath11k: fix CAC running state during virtual interface
|
|
start
|
|
|
|
Currently channel definition's primary channel's DFS CAC time
|
|
as well as primary channel's state i.e usable are used to set
|
|
the CAC_RUNNING flag for the ath11k radio structure. However,
|
|
this is wrong since certain channel definition are possbile
|
|
where primary channel may not be a DFS channel but, secondary
|
|
channel is a DFS channel. For example - channel 36 with 160 MHz
|
|
bandwidth.
|
|
In such cases, the flag will not be set which is wrong.
|
|
|
|
Fix this issue by using cfg80211_chandef_dfs_usable() function
|
|
from cfg80211 which return trues if at least one channel is in
|
|
usable state.
|
|
|
|
While at it, modify the CAC running debug log message to print
|
|
the CAC time as well in milli-seconds.
|
|
|
|
Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
|
|
|
|
Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com>
|
|
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
|
Link: https://lore.kernel.org/r/20230912051857.2284-3-quic_adisi@quicinc.com
|
|
---
|
|
drivers/net/wireless/ath/ath11k/mac.c | 19 +++++++++++--------
|
|
1 file changed, 11 insertions(+), 8 deletions(-)
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
|
@@ -5,6 +5,7 @@
|
|
*/
|
|
|
|
#include <net/mac80211.h>
|
|
+#include <net/cfg80211.h>
|
|
#include <linux/etherdevice.h>
|
|
#include <linux/bitfield.h>
|
|
#include <linux/inetdevice.h>
|
|
@@ -7196,6 +7197,7 @@ ath11k_mac_vdev_start_restart(struct ath
|
|
struct wmi_vdev_start_req_arg arg = {};
|
|
const struct cfg80211_chan_def *chandef = &ctx->def;
|
|
int ret = 0;
|
|
+ unsigned int dfs_cac_time;
|
|
|
|
lockdep_assert_held(&ar->conf_mutex);
|
|
|
|
@@ -7275,20 +7277,21 @@ ath11k_mac_vdev_start_restart(struct ath
|
|
ath11k_dbg(ab, ATH11K_DBG_MAC, "vdev %pM started, vdev_id %d\n",
|
|
arvif->vif->addr, arvif->vdev_id);
|
|
|
|
- /* Enable CAC Flag in the driver by checking the channel DFS cac time,
|
|
- * i.e dfs_cac_ms value which will be valid only for radar channels
|
|
- * and state as NL80211_DFS_USABLE which indicates CAC needs to be
|
|
+ /* Enable CAC Flag in the driver by checking the all sub-channel's DFS
|
|
+ * state as NL80211_DFS_USABLE which indicates CAC needs to be
|
|
* done before channel usage. This flags is used to drop rx packets.
|
|
* during CAC.
|
|
*/
|
|
/* TODO Set the flag for other interface types as required */
|
|
- if (arvif->vdev_type == WMI_VDEV_TYPE_AP &&
|
|
- chandef->chan->dfs_cac_ms &&
|
|
- chandef->chan->dfs_state == NL80211_DFS_USABLE) {
|
|
+ if (arvif->vdev_type == WMI_VDEV_TYPE_AP && ctx->radar_enabled &&
|
|
+ cfg80211_chandef_dfs_usable(ar->hw->wiphy, chandef)) {
|
|
set_bit(ATH11K_CAC_RUNNING, &ar->dev_flags);
|
|
+ dfs_cac_time = cfg80211_chandef_dfs_cac_time(ar->hw->wiphy,
|
|
+ chandef);
|
|
ath11k_dbg(ab, ATH11K_DBG_MAC,
|
|
- "CAC Started in chan_freq %d for vdev %d\n",
|
|
- arg.channel.freq, arg.vdev_id);
|
|
+ "cac started dfs_cac_time %u center_freq %d center_freq1 %d for vdev %d\n",
|
|
+ dfs_cac_time, arg.channel.freq, chandef->center_freq1,
|
|
+ arg.vdev_id);
|
|
}
|
|
|
|
ret = ath11k_mac_set_txbf_conf(arvif);
|