qcacmn: Add support for local packet capture stop

Add support for local packet capture stop.

Change-Id: Ib12574f5b418ea009ec35ef85e170bc8c592c86f
CRs-Fixed: 3415812
This commit is contained in:
Srinivas Girigowda
2022-12-15 17:16:34 -08:00
committed by Madan Koyyalamudi
parent d52311a2b1
commit 13554f0cdc
8 changed files with 104 additions and 0 deletions

View File

@@ -332,6 +332,30 @@ QDF_STATUS cdp_start_local_pkt_capture(ol_txrx_soc_handle soc,
return soc->ops->mon_ops->start_local_pkt_capture(soc, pdev_id, filter);
}
/**
* cdp_stop_local_pkt_capture() - stop local pkt capture
* @soc: opaque soc handle
* @pdev_id: pdev_id
*
* Return: QDF_STATUS_SUCCESS if success
* QDF_STATUS_E_FAILURE if error
*/
static inline
QDF_STATUS cdp_stop_local_pkt_capture(ol_txrx_soc_handle soc, uint8_t pdev_id)
{
if (!soc || !soc->ops) {
dp_cdp_debug("Invalid Instance");
QDF_BUG(0);
return QDF_STATUS_E_FAILURE;
}
if (!soc->ops->mon_ops ||
!soc->ops->mon_ops->stop_local_pkt_capture)
return QDF_STATUS_E_FAILURE;
return soc->ops->mon_ops->stop_local_pkt_capture(soc, pdev_id);
}
#else
static inline
QDF_STATUS cdp_start_local_pkt_capture(ol_txrx_soc_handle soc,
@@ -341,6 +365,12 @@ QDF_STATUS cdp_start_local_pkt_capture(ol_txrx_soc_handle soc,
return QDF_STATUS_E_NOSUPPORT;
}
static inline
QDF_STATUS cdp_stop_local_pkt_capture(ol_txrx_soc_handle soc, uint8_t pdev_id)
{
return QDF_STATUS_E_NOSUPPORT;
}
#endif /* WLAN_FEATURE_LOCAL_PKT_CAPTURE */
#endif

View File

@@ -994,6 +994,7 @@ struct cdp_me_ops {
* @txrx_cfr_filter: Handler to configure host rx monitor status ring
* @txrx_update_mon_mac_filter: Handler to configure mon mac filter
* @start_local_pkt_capture: start local packet capture
* @stop_local_pkt_capture: stop local packet capture
*/
struct cdp_mon_ops {
@@ -1106,6 +1107,9 @@ struct cdp_mon_ops {
QDF_STATUS (*start_local_pkt_capture)
(struct cdp_soc_t *soc, uint8_t pdev_id,
struct cdp_monitor_filter *filter);
QDF_STATUS (*stop_local_pkt_capture)(struct cdp_soc_t *soc,
uint8_t pdev_id);
#endif
};

View File

@@ -1471,6 +1471,7 @@ struct cdp_mon_ops dp_ops_mon_1_0 = {
dp_mon_pdev_params_rssi_dbm_conv,
#ifdef WLAN_FEATURE_LOCAL_PKT_CAPTURE
.start_local_pkt_capture = dp_mon_start_local_pkt_capture,
.stop_local_pkt_capture = dp_mon_stop_local_pkt_capture,
#endif /* WLAN_FEATURE_LOCAL_PKT_CAPTURE */
};

View File

@@ -1455,6 +1455,7 @@ struct cdp_mon_ops dp_ops_mon_2_0 = {
.txrx_update_mon_mac_filter = NULL,
#ifdef WLAN_FEATURE_LOCAL_PKT_CAPTURE
.start_local_pkt_capture = NULL,
.stop_local_pkt_capture = NULL,
#endif /* WLAN_FEATURE_LOCAL_PKT_CAPTURE */
};

View File

@@ -3469,8 +3469,13 @@ void dp_mon_filter_reset_local_pkt_capture_tx(struct dp_pdev *pdev)
enum dp_mon_filter_srng_type srng_type =
DP_MON_FILTER_SRNG_TYPE_TXMON_DEST;
struct dp_mon_pdev_be *mon_pdev_be = NULL;
struct dp_pdev_tx_monitor_be *tx_mon_be;
mon_pdev_be = dp_get_be_mon_pdev_from_dp_mon_pdev(mon_pdev);
tx_mon_be = &mon_pdev_be->tx_monitor_be;
tx_mon_be->mode = TX_MON_BE_DISABLE;
mon_pdev_be->tx_mon_mode = 0;
filter.tx_valid = true;
mon_pdev_be->filter_be[mode][srng_type] = filter;
}

View File

@@ -874,6 +874,7 @@ struct dp_mon_ops {
struct htt_rx_ring_tlv_filter *tlv_filter);
#ifdef WLAN_FEATURE_LOCAL_PKT_CAPTURE
QDF_STATUS (*start_local_pkt_capture)(struct dp_pdev *pdev);
QDF_STATUS (*stop_local_pkt_capture)(struct dp_pdev *pdev);
#endif /* WLAN_FEATURE_LOCAL_PKT_CAPTURE */
};

View File

@@ -1010,4 +1010,50 @@ QDF_STATUS dp_mon_start_local_pkt_capture(struct cdp_soc_t *cdp_soc,
return status;
}
QDF_STATUS dp_mon_stop_local_pkt_capture(struct cdp_soc_t *cdp_soc,
uint8_t pdev_id)
{
bool local_pkt_capture_running;
struct dp_soc *soc = cdp_soc_t_to_dp_soc(cdp_soc);
struct dp_pdev *pdev = dp_get_pdev_from_soc_pdev_id_wifi3(soc, pdev_id);
struct dp_mon_pdev *mon_pdev;
QDF_STATUS status = QDF_STATUS_SUCCESS;
if (!pdev) {
dp_mon_filter_err("pdev Context is null");
return QDF_STATUS_E_INVAL;
}
mon_pdev = pdev->monitor_pdev;
local_pkt_capture_running =
dp_mon_get_local_pkt_capture_running(cdp_soc, pdev_id);
if (!local_pkt_capture_running) {
dp_mon_filter_err("Local pkt capture is not running");
return QDF_STATUS_SUCCESS;
}
qdf_spin_lock_bh(&mon_pdev->mon_lock);
dp_mon_reset_local_pkt_capture_rx_filter(pdev);
status = dp_mon_filter_update(pdev);
if (QDF_IS_STATUS_ERROR(status)) {
dp_mon_filter_err("local pkt capture set rx filter failed");
qdf_spin_unlock_bh(&mon_pdev->mon_lock);
return status;
}
qdf_spin_unlock_bh(&mon_pdev->mon_lock);
mon_pdev->mon_filter_mode = 0;
mon_pdev->fp_mgmt_filter = 0;
mon_pdev->fp_ctrl_filter = 0;
mon_pdev->fp_data_filter = 0;
qdf_spin_lock_bh(&mon_pdev->mon_lock);
dp_mon_filter_reset_tx_mon_mode(pdev);
dp_tx_mon_filter_update(pdev);
qdf_spin_unlock_bh(&mon_pdev->mon_lock);
dp_mon_filter_debug("local pkt capture stopped");
return QDF_STATUS_SUCCESS;
}
#endif /* WLAN_FEATURE_LOCAL_PKT_CAPTURE */

View File

@@ -574,6 +574,14 @@ dp_rx_mon_hdr_length_set(uint32_t *msg_word,
QDF_STATUS dp_mon_start_local_pkt_capture(struct cdp_soc_t *cdp_soc,
uint8_t pdev_id,
struct cdp_monitor_filter *filter);
/**
* dp_mon_stop_local_pkt_capture() - stop local packet capture
* @cdp_soc: cdp soc
* @pdev_id: pdev id
*/
QDF_STATUS dp_mon_stop_local_pkt_capture(struct cdp_soc_t *cdp_soc,
uint8_t pdev_id);
#else
static inline
QDF_STATUS dp_mon_start_local_pkt_capture(struct cdp_soc_t *cdp_soc,
@@ -582,5 +590,13 @@ QDF_STATUS dp_mon_start_local_pkt_capture(struct cdp_soc_t *cdp_soc,
{
return QDF_STATUS_E_NOSUPPORT;
}
static inline
QDF_STATUS dp_mon_stop_local_pkt_capture(struct cdp_soc_t *cdp_soc,
uint8_t pdev_id)
{
return QDF_STATUS_E_NOSUPPORT;
}
#endif /* WLAN_FEATURE_LOCAL_PKT_CAPTURE */
#endif /* #ifndef _DP_MON_FILTER_H_ */