qca-wifi: Check peer capture enable while enqueuing MSDUS

this is done to queue frames when filtering and eventually free them
when the feature is disabled

Change-Id: I2dcaa1b354e8e2a0403cf438526a545669ed84e6
This commit is contained in:
Ruben Columbus
2019-10-08 14:49:31 -07:00
committed by Gerrit - the friendly Code Review server
parent 6012551d92
commit 6829a32527
4 changed files with 62 additions and 1 deletions

View File

@@ -646,4 +646,11 @@ dp_config_enh_rx_capture(struct cdp_pdev *pdev_handle, uint32_t val)
return dp_pdev_configure_monitor_rings(pdev); return dp_pdev_configure_monitor_rings(pdev);
} }
void
dp_peer_set_rx_capture_enabled(struct cdp_peer *peer_handle, bool value)
{
struct dp_peer *peer = (struct dp_peer *)peer_handle;
peer->rx_cap_enabled = value;
}
#endif /* WLAN_RX_PKT_CAPTURE_ENH */ #endif /* WLAN_RX_PKT_CAPTURE_ENH */

View File

@@ -73,5 +73,15 @@ dp_rx_mon_enh_capture_process(struct dp_pdev *pdev, uint32_t tlv_status,
*/ */
QDF_STATUS QDF_STATUS
dp_config_enh_rx_capture(struct cdp_pdev *pdev_handle, uint8_t val); dp_config_enh_rx_capture(struct cdp_pdev *pdev_handle, uint8_t val);
/**
* dp_peer_set_rx_capture_enabled: Set rx_cap_enabled bit in peer
* @peer_handle: Peer handle
* @value: Enable/disable setting for rx_cap_enabled
*
* Return: None
*/
void
dp_peer_set_rx_capture_enabled(struct cdp_peer *peer_handle, bool value);
#endif /* WLAN_RX_PKT_CAPTURE_ENH */ #endif /* WLAN_RX_PKT_CAPTURE_ENH */
#endif /* _DP_RX_MON_FEATURE_H_ */ #endif /* _DP_RX_MON_FEATURE_H_ */

View File

@@ -180,6 +180,23 @@ void dp_peer_tid_queue_init(struct dp_peer *peer)
} }
} }
static
void dp_peer_tx_cap_tid_queue_flush(struct dp_peer *peer)
{
int tid;
struct dp_tx_tid *tx_tid;
for (tid = 0; tid < DP_MAX_TIDS; tid++) {
tx_tid = &peer->tx_capture.tx_tid[tid];
qdf_spin_lock_bh(&tx_tid->tid_lock);
qdf_nbuf_queue_free(&tx_tid->msdu_comp_q);
qdf_spin_unlock_bh(&tx_tid->tid_lock);
tx_tid->max_ppdu_id = 0;
}
}
/* /*
* dp_peer_tid_queue_cleanup() remove ppdu stats queue per TID * dp_peer_tid_queue_cleanup() remove ppdu stats queue per TID
* @peer: Datapath peer * @peer: Datapath peer
@@ -468,7 +485,7 @@ QDF_STATUS dp_tx_add_to_comp_queue(struct dp_soc *soc,
{ {
int ret = QDF_STATUS_E_FAILURE; int ret = QDF_STATUS_E_FAILURE;
if ((desc->pdev->tx_capture_enabled != CDP_TX_ENH_CAPTURE_DISABLED) && if (peer && dp_peer_or_pdev_tx_cap_enabled(desc->pdev, peer) &&
((ts->status == HAL_TX_TQM_RR_FRAME_ACKED) || ((ts->status == HAL_TX_TQM_RR_FRAME_ACKED) ||
(ts->status == HAL_TX_TQM_RR_REM_CMD_TX) || (ts->status == HAL_TX_TQM_RR_REM_CMD_TX) ||
((ts->status == HAL_TX_TQM_RR_REM_CMD_AGED) && ts->transmit_cnt))) { ((ts->status == HAL_TX_TQM_RR_REM_CMD_AGED) && ts->transmit_cnt))) {
@@ -3167,4 +3184,21 @@ QDF_STATUS dp_send_ack_frame_to_stack(struct dp_soc *soc,
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
/**
* dp_peer_set_tx_capture_enabled: Set tx_cap_enabled bit in peer
* @peer_handle: Peer handle
* @value: Enable/disable setting for tx_cap_enabled
*
* Return: None
*/
void
dp_peer_set_tx_capture_enabled(struct cdp_peer *peer_handle, bool value)
{
struct dp_peer *peer = (struct dp_peer *)peer_handle;
peer->tx_cap_enabled = value;
if (!value)
dp_peer_tx_cap_tid_queue_flush(peer);
}
#endif #endif

View File

@@ -255,5 +255,15 @@ void dp_print_pdev_tx_capture_stats(struct dp_pdev *pdev);
QDF_STATUS dp_send_ack_frame_to_stack(struct dp_soc *soc, QDF_STATUS dp_send_ack_frame_to_stack(struct dp_soc *soc,
struct dp_pdev *pdev, struct dp_pdev *pdev,
struct hal_rx_ppdu_info *ppdu_info); struct hal_rx_ppdu_info *ppdu_info);
/**
* dp_peer_set_tx_capture_enabled: Set tx_cap_enabled bit in peer
* @peer_handle: Peer handle
* @value: Enable/disable setting for tx_cap_enabled
*
* Return: None
*/
void
dp_peer_set_tx_capture_enabled(struct cdp_peer *peer_handle, bool value);
#endif #endif
#endif #endif