[PATCH v7 9/9] wifi: ath12k: add monitor interface support on QCN9274
Karthikeyan Periyasamy
quic_periyasa at quicinc.com
Sat Feb 22 06:50:44 PST 2025
On 2/22/2025 7:44 PM, Vasanthakumar Thiagarajan wrote:
>
>
> On 2/22/2025 9:00 AM, Karthikeyan Periyasamy wrote:
>> From: P Praneesh <quic_ppranees at quicinc.com>
>>
>> Currently, the monitor interface is not supported. To support the monitor
>> interface, configure the monitor vdev state identifier, configure the HTT
>> filter setup, subscribe the mac80211 NO_VIRTUAL_MONITOR feature and
>> prevent monitor interface to transmit packet. Therefore, add these
>> procedures to add monitor interface support and enable the monitor
>> interface support on the QCN9274 platform through the hardware parameter.
>>
>> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
>> Tested-on: WCN7850 hw2.0 PCI
>> WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3
>>
>> Signed-off-by: P Praneesh <quic_ppranees at quicinc.com>
>> Signed-off-by: Karthikeyan Periyasamy <quic_periyasa at quicinc.com>
>> ---
>> drivers/net/wireless/ath/ath12k/core.c | 5 +++++
>> drivers/net/wireless/ath/ath12k/dp_tx.c | 6 +++++
>> drivers/net/wireless/ath/ath12k/hw.c | 4 ++--
>> drivers/net/wireless/ath/ath12k/mac.c | 30 ++++++++++++++++++++++++-
>> 4 files changed, 42 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/net/wireless/ath/ath12k/core.c
>> b/drivers/net/wireless/ath/ath12k/core.c
>> index 0b2dec081c6e..ed7365ce7f95 100644
>> --- a/drivers/net/wireless/ath/ath12k/core.c
>> +++ b/drivers/net/wireless/ath/ath12k/core.c
>> @@ -1306,6 +1306,11 @@ static void
>> ath12k_core_pre_reconfigure_recovery(struct ath12k_base *ab)
>> ath12k_mac_tx_mgmt_pending_free, ar);
>> idr_destroy(&ar->txmgmt_idr);
>> wake_up(&ar->txmgmt_empty_waitq);
>> +
>> + ar->monitor_vdev_id = -1;
>> + ar->monitor_conf_enabled = false;
>> + ar->monitor_vdev_created = false;
>> + ar->monitor_started = false;
>> }
>> }
>> diff --git a/drivers/net/wireless/ath/ath12k/dp_tx.c
>> b/drivers/net/wireless/ath/ath12k/dp_tx.c
>> index 46a55554c19c..a74afa8b2236 100644
>> --- a/drivers/net/wireless/ath/ath12k/dp_tx.c
>> +++ b/drivers/net/wireless/ath/ath12k/dp_tx.c
>> @@ -7,6 +7,7 @@
>> #include "core.h"
>> #include "dp_tx.h"
>> #include "debug.h"
>> +#include "debugfs.h"
>> #include "hw.h"
>> #include "peer.h"
>> #include "mac.h"
>> @@ -1431,6 +1432,11 @@ int
>> ath12k_dp_tx_htt_rx_monitor_mode_ring_config(struct ath12k *ar, bool
>> reset)
>> HTT_RX_MON_MO_CTRL_FILTER_FLASG3 |
>> HTT_RX_MON_FP_DATA_FILTER_FLASG3 |
>> HTT_RX_MON_MO_DATA_FILTER_FLASG3;
>> + } else {
>> + tlv_filter = ath12k_mac_mon_status_filter_default;
>> +
>> + if (ath12k_debugfs_is_extd_rx_stats_enabled(ar))
>> + tlv_filter.rx_filter = ath12k_debugfs_rx_filter(ar);
>> }
>> if (ab->hw_params->rxdma1_enable) {
>> diff --git a/drivers/net/wireless/ath/ath12k/hw.c
>> b/drivers/net/wireless/ath/ath12k/hw.c
>> index a106ebed7870..021a4b565e8b 100644
>> --- a/drivers/net/wireless/ath/ath12k/hw.c
>> +++ b/drivers/net/wireless/ath/ath12k/hw.c
>> @@ -1,7 +1,7 @@
>> // SPDX-License-Identifier: BSD-3-Clause-Clear
>> /*
>> * Copyright (c) 2018-2021 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/types.h>
>> @@ -1049,7 +1049,7 @@ static const struct ath12k_hw_params
>> ath12k_hw_params[] = {
>> BIT(NL80211_IFTYPE_AP) |
>> BIT(NL80211_IFTYPE_MESH_POINT) |
>> BIT(NL80211_IFTYPE_AP_VLAN),
>> - .supports_monitor = false,
>> + .supports_monitor = true,
>> .idle_ps = false,
>> .download_calib = true,
>> diff --git a/drivers/net/wireless/ath/ath12k/mac.c
>> b/drivers/net/wireless/ath/ath12k/mac.c
>> index 54af9cbbf7cb..b90dad5cb2e0 100644
>> --- a/drivers/net/wireless/ath/ath12k/mac.c
>> +++ b/drivers/net/wireless/ath/ath12k/mac.c
>> @@ -1349,9 +1349,15 @@ static int ath12k_mac_monitor_start(struct
>> ath12k *ar)
>> return ret;
>> }
>> + ret = ath12k_dp_tx_htt_monitor_mode_ring_config(ar, false);
>> + if (ret) {
>> + ath12k_warn(ar->ab, "fail to set monitor filter: %d\n", ret);
>> + return ret;
>> + }
>> +
>> ar->monitor_started = true;
>> ar->num_started_vdevs++;
>> - ret = ath12k_dp_tx_htt_monitor_mode_ring_config(ar, false);
>> +
>> ath12k_dbg(ar->ab, ATH12K_DBG_MAC, "mac monitor started ret
>> %d\n", ret);
>> return ret;
>> @@ -7334,6 +7340,11 @@ static void ath12k_mac_op_tx(struct
>> ieee80211_hw *hw,
>> u8 link_id;
>> int ret;
>> + if (ahvif->vdev_type == WMI_VDEV_TYPE_MONITOR) {
>> + ieee80211_free_txskb(hw, skb);
>> + return;
>> + }
>> +
>> link_id = u32_get_bits(info->control.flags,
>> IEEE80211_TX_CTRL_MLO_LINK);
>> memset(skb_cb, 0, sizeof(*skb_cb));
>> skb_cb->vif = vif;
>> @@ -8083,6 +8094,9 @@ int ath12k_mac_vdev_create(struct ath12k *ar,
>> struct ath12k_link_vif *arvif)
>> lockdep_assert_wiphy(hw->wiphy);
>> + if (vif->type == NL80211_IFTYPE_MONITOR && ar->monitor_vdev_created)
>> + return -EINVAL;
>> +
>
> Some comment on the scenario that is being handled here might be helpful?
>
sure, will address this comment in the next version of the patch.
--
Karthikeyan Periyasamy
--
கார்த்திகேயன் பெரியசாமி
More information about the ath12k
mailing list