[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