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:

committed by
Madan Koyyalamudi

parent
0c558b779b
commit
7f485d5e89
@@ -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;
|
||||
}
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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);
|
||||
(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
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user