qcacmn: Split tx and rx buffer add function

Split tx and rx monitor buffer add function so that
they can be indivudually called when lite monitor mode is enabled.

Change-Id: I9996d0261f1912237bd6fa45058d410698b9fa28
CRs-Fixed: 3206170
This commit is contained in:
Nandha Kishore Easwaran
2022-05-26 17:26:05 +05:30
committed by Madan Koyyalamudi
parent 0c558b779b
commit 7f485d5e89
5 changed files with 102 additions and 35 deletions

View File

@@ -6586,8 +6586,7 @@ static QDF_STATUS dp_vdev_attach_wifi3(struct cdp_soc_t *cdp_soc,
if (wlan_op_mode_monitor == vdev->opmode) {
if (dp_monitor_vdev_attach(vdev) == QDF_STATUS_SUCCESS) {
dp_monitor_pdev_set_mon_vdev(vdev);
dp_monitor_vdev_set_monitor_mode_buf_rings(pdev);
return QDF_STATUS_SUCCESS;
return dp_monitor_vdev_set_monitor_mode_buf_rings(pdev);
}
return QDF_STATUS_E_FAILURE;
}

View File

@@ -353,7 +353,7 @@ QDF_STATUS dp_mon_rings_alloc_1_0(struct dp_pdev *pdev)
#endif
#ifdef QCA_MONITOR_PKT_SUPPORT
void dp_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev)
QDF_STATUS dp_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev)
{
uint32_t mac_id;
uint32_t mac_for_pdev;
@@ -392,6 +392,7 @@ void dp_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev)
}
}
}
return QDF_STATUS_SUCCESS;
}
#endif

View File

@@ -398,10 +398,9 @@ QDF_STATUS dp_mon_desc_pool_alloc(uint32_t pool_size,
return QDF_STATUS_SUCCESS;
}
static
void dp_vdev_set_monitor_mode_buf_rings_2_0(struct dp_pdev *pdev)
QDF_STATUS dp_vdev_set_monitor_mode_buf_rings_rx_2_0(struct dp_pdev *pdev)
{
int tx_mon_max_entries, rx_mon_max_entries;
int rx_mon_max_entries;
struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx;
struct dp_soc *soc = pdev->soc;
struct dp_mon_soc *mon_soc = soc->monitor_soc;
@@ -410,54 +409,106 @@ void dp_vdev_set_monitor_mode_buf_rings_2_0(struct dp_pdev *pdev)
if (!mon_soc_be) {
dp_mon_err("DP MON SOC is NULL");
return;
return QDF_STATUS_E_FAILURE;
}
soc_cfg_ctx = soc->wlan_cfg_ctx;
rx_mon_max_entries = wlan_cfg_get_dp_soc_rx_mon_buf_ring_size(soc_cfg_ctx);
tx_mon_max_entries = wlan_cfg_get_dp_soc_tx_mon_buf_ring_size(soc_cfg_ctx);
hal_set_low_threshold(soc->rxdma_mon_buf_ring[0].hal_srng,
rx_mon_max_entries >> 2);
status = htt_srng_setup(soc->htt_handle, 0,
soc->rxdma_mon_buf_ring[0].hal_srng,
RXDMA_MONITOR_BUF);
if (status != QDF_STATUS_SUCCESS) {
dp_err("Failed to send htt srng setup message for Rx mon buf ring");
return;
dp_mon_err("Failed to send htt srng setup message for Rx mon buf ring");
return status;
}
if (mon_soc_be->rx_mon_ring_fill_level < rx_mon_max_entries) {
status = dp_rx_mon_buffers_alloc(soc,
(rx_mon_max_entries -
mon_soc_be->rx_mon_ring_fill_level));
if (status != QDF_STATUS_SUCCESS) {
dp_mon_err("%pK: Rx mon buffers allocation failed", soc);
return status;
}
mon_soc_be->rx_mon_ring_fill_level +=
(rx_mon_max_entries -
mon_soc_be->rx_mon_ring_fill_level);
}
return QDF_STATUS_SUCCESS;
}
QDF_STATUS dp_vdev_set_monitor_mode_buf_rings_tx_2_0(struct dp_pdev *pdev)
{
int tx_mon_max_entries;
struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx;
struct dp_soc *soc = pdev->soc;
struct dp_mon_soc *mon_soc = soc->monitor_soc;
struct dp_mon_soc_be *mon_soc_be =
dp_get_be_mon_soc_from_dp_mon_soc(mon_soc);
QDF_STATUS status;
if (!mon_soc_be) {
dp_mon_err("DP MON SOC is NULL");
return QDF_STATUS_E_FAILURE;
}
soc_cfg_ctx = soc->wlan_cfg_ctx;
tx_mon_max_entries =
wlan_cfg_get_dp_soc_tx_mon_buf_ring_size(soc_cfg_ctx);
hal_set_low_threshold(mon_soc_be->tx_mon_buf_ring.hal_srng,
tx_mon_max_entries >> 2);
status = htt_srng_setup(soc->htt_handle, 0,
mon_soc_be->tx_mon_buf_ring.hal_srng,
TX_MONITOR_BUF);
if (status != QDF_STATUS_SUCCESS) {
dp_err("Failed to send htt srng setup message for Tx mon buf ring");
return;
}
if (mon_soc_be->rx_mon_ring_fill_level < rx_mon_max_entries) {
if (dp_rx_mon_buffers_alloc(soc,
(rx_mon_max_entries - mon_soc_be->rx_mon_ring_fill_level))) {
dp_mon_err("%pK: Rx mon buffers allocation failed", soc);
return;
}
mon_soc_be->rx_mon_ring_fill_level +=
(rx_mon_max_entries - mon_soc_be->rx_mon_ring_fill_level);
dp_mon_err("Failed to send htt srng setup message for Tx mon buf ring");
return status;
}
if (mon_soc_be->tx_mon_ring_fill_level < tx_mon_max_entries) {
if (dp_tx_mon_buffers_alloc(soc,
(tx_mon_max_entries - mon_soc_be->tx_mon_ring_fill_level))) {
status = dp_tx_mon_buffers_alloc(soc,
(tx_mon_max_entries -
mon_soc_be->tx_mon_ring_fill_level));
if (status != QDF_STATUS_SUCCESS) {
dp_mon_err("%pK: Tx mon buffers allocation failed", soc);
return;
return status;
}
mon_soc_be->tx_mon_ring_fill_level +=
(tx_mon_max_entries -
mon_soc_be->tx_mon_ring_fill_level);
}
mon_soc_be->tx_mon_ring_fill_level +=
(tx_mon_max_entries - mon_soc_be->tx_mon_ring_fill_level);
return QDF_STATUS_SUCCESS;
}
static
QDF_STATUS dp_vdev_set_monitor_mode_buf_rings_2_0(struct dp_pdev *pdev)
{
int status;
struct dp_soc *soc = pdev->soc;
status = dp_vdev_set_monitor_mode_buf_rings_rx_2_0(pdev);
if (status != QDF_STATUS_SUCCESS) {
dp_mon_err("%pK: Rx monitor extra buffer allocation failed",
soc);
return status;
}
status = dp_vdev_set_monitor_mode_buf_rings_tx_2_0(pdev);
if (status != QDF_STATUS_SUCCESS) {
dp_mon_err("%pK: Tx monitor extra buffer allocation failed",
soc);
return status;
}
return QDF_STATUS_SUCCESS;
}
static

View File

@@ -297,6 +297,22 @@ void dp_mon_filter_show_filter_be(enum dp_mon_filter_mode mode,
void dp_mon_filter_show_tx_filter_be(enum dp_mon_filter_mode mode,
struct dp_mon_filter_be *filter);
/**
* dp_vdev_set_monitor_mode_buf_rings_tx_2_0() - Add buffers to tx ring
* @pdev: Pointer to dp_pdev object
*
* Return: QDF_STATUS
*/
QDF_STATUS dp_vdev_set_monitor_mode_buf_rings_tx_2_0(struct dp_pdev *pdev);
/**
* dp_vdev_set_monitor_mode_buf_rings_rx_2_0() - Add buffers to rx ring
* @pdev: Pointer to dp_pdev object
*
* Return: QDF_STATUS
*/
QDF_STATUS dp_vdev_set_monitor_mode_buf_rings_rx_2_0(struct dp_pdev *pdev);
#ifdef QCA_ENHANCED_STATS_SUPPORT
/**
* dp_mon_get_puncture_type() - Get puncture type

View File

@@ -471,9 +471,9 @@ void dp_pktlogmod_exit(struct dp_pdev *handle)
*
* @pdev: DP pdev object
*
* Return: void
* Return: QDF_STATUS
*/
void dp_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev);
QDF_STATUS dp_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev);
/**
* dp_vdev_set_monitor_mode_rings () - set monitor mode rings
@@ -489,7 +489,7 @@ QDF_STATUS dp_vdev_set_monitor_mode_rings(struct dp_pdev *pdev,
uint8_t delayed_replenish);
#else
static inline void
static inline QDF_STATUS
dp_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev)
{
}
@@ -652,7 +652,7 @@ struct dp_mon_ops {
#if defined(DP_CON_MON) && !defined(REMOVE_PKT_LOG)
void (*mon_pktlogmod_exit)(struct dp_pdev *pdev);
#endif
void (*mon_vdev_set_monitor_mode_buf_rings)(struct dp_pdev *pdev);
QDF_STATUS (*mon_vdev_set_monitor_mode_buf_rings)(struct dp_pdev *pdev);
QDF_STATUS (*mon_vdev_set_monitor_mode_rings)(struct dp_pdev *pdev,
uint8_t delayed_replenish);
void (*mon_neighbour_peers_detach)(struct dp_pdev *pdev);
@@ -3218,20 +3218,20 @@ static inline void dp_monitor_pktlogmod_exit(struct dp_pdev *pdev) {}
#endif
static inline
void dp_monitor_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev)
QDF_STATUS dp_monitor_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev)
{
struct dp_mon_ops *monitor_ops;
struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
if (!mon_soc) {
dp_mon_debug("monitor soc is NULL");
return;
return QDF_STATUS_E_FAILURE;
}
monitor_ops = mon_soc->mon_ops;
if (!monitor_ops || !monitor_ops->mon_vdev_set_monitor_mode_buf_rings) {
dp_mon_debug("callback not registered");
return;
return QDF_STATUS_E_FAILURE;
}
return monitor_ops->mon_vdev_set_monitor_mode_buf_rings(pdev);