Search Linux Wireless

Re: [PATCH v7 9/9] wifi: ath12k: add monitor interface support on QCN9274

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





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@xxxxxxxxxxx>

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@xxxxxxxxxxx>
Signed-off-by: Karthikeyan Periyasamy <quic_periyasa@xxxxxxxxxxx>
---
  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
--
கார்த்திகேயன் பெரியசாமி




[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux