qcacmn: Add HTT ring setup for monitor rings

Add HTT ring setup for monitor source and destination rings

CRs-Fixed: 3010856
Change-Id: Ice96ed938a25069fd60f07e2a4bebd9ad0184200
This commit is contained in:
Naga
2021-10-05 00:26:02 +05:30
committed by Madan Koyyalamudi
parent 92ac36e016
commit 1648e13dbe
5 changed files with 68 additions and 21 deletions

View File

@@ -5442,6 +5442,7 @@ static QDF_STATUS dp_rxdma_ring_config(struct dp_soc *soc)
{ {
int i; int i;
QDF_STATUS status = QDF_STATUS_SUCCESS; QDF_STATUS status = QDF_STATUS_SUCCESS;
for (i = 0; i < MAX_PDEV_CNT; i++) { for (i = 0; i < MAX_PDEV_CNT; i++) {
struct dp_pdev *pdev = soc->pdev_list[i]; struct dp_pdev *pdev = soc->pdev_list[i];
@@ -5542,6 +5543,9 @@ static QDF_STATUS dp_rxdma_ring_config(struct dp_soc *soc)
int mac_for_pdev; int mac_for_pdev;
int lmac_id; int lmac_id;
/* Configure monitor mode rings */
dp_monitor_soc_htt_srng_setup(soc);
for (i = 0; i < MAX_PDEV_CNT; i++) { for (i = 0; i < MAX_PDEV_CNT; i++) {
struct dp_pdev *pdev = soc->pdev_list[i]; struct dp_pdev *pdev = soc->pdev_list[i];

View File

@@ -3235,7 +3235,7 @@ struct dp_mon_ops monitor_ops_1_0 = {
.mon_config_debug_sniffer = dp_config_debug_sniffer, .mon_config_debug_sniffer = dp_config_debug_sniffer,
.mon_flush_rings = dp_flush_monitor_rings, .mon_flush_rings = dp_flush_monitor_rings,
#if !defined(DISABLE_MON_CONFIG) #if !defined(DISABLE_MON_CONFIG)
.mon_htt_srng_setup = dp_mon_htt_srng_setup_1_0, .mon_pdev_htt_srng_setup = dp_mon_htt_srng_setup_1_0,
#endif #endif
#if defined(DP_CON_MON) #if defined(DP_CON_MON)
.mon_service_rings = dp_service_mon_rings, .mon_service_rings = dp_service_mon_rings,

View File

@@ -341,7 +341,36 @@ dp_set_bpr_enable_2_0(struct dp_pdev *pdev, int val)
#ifndef DISABLE_MON_CONFIG #ifndef DISABLE_MON_CONFIG
static static
QDF_STATUS dp_mon_htt_srng_setup_2_0(struct dp_soc *soc, QDF_STATUS dp_mon_soc_htt_srng_setup_2_0(struct dp_soc *soc)
{
struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc);
struct dp_mon_soc_be *mon_soc = be_soc->monitor_soc_be;
QDF_STATUS status;
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 status;
}
status = htt_srng_setup(soc->htt_handle, 0,
mon_soc->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 status;
}
return status;
}
static
QDF_STATUS dp_mon_pdev_htt_srng_setup_2_0(struct dp_soc *soc,
struct dp_pdev *pdev, struct dp_pdev *pdev,
int mac_id, int mac_id,
int mac_for_pdev) int mac_for_pdev)
@@ -565,14 +594,6 @@ QDF_STATUS dp_mon_soc_init_2_0(struct dp_soc *soc)
goto fail; goto fail;
} }
htt_srng_setup(soc->htt_handle, 0,
soc->rxdma_mon_buf_ring[0].hal_srng,
RXDMA_MONITOR_BUF);
htt_srng_setup(soc->htt_handle, 0,
mon_soc->tx_mon_buf_ring.hal_srng,
TX_MONITOR_BUF);
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
fail: fail:
dp_mon_soc_deinit_2_0(soc); dp_mon_soc_deinit_2_0(soc);
@@ -809,7 +830,8 @@ struct dp_mon_ops monitor_ops_2_0 = {
.mon_config_debug_sniffer = dp_config_debug_sniffer, .mon_config_debug_sniffer = dp_config_debug_sniffer,
.mon_flush_rings = NULL, .mon_flush_rings = NULL,
#if !defined(DISABLE_MON_CONFIG) #if !defined(DISABLE_MON_CONFIG)
.mon_htt_srng_setup = dp_mon_htt_srng_setup_2_0, .mon_pdev_htt_srng_setup = dp_mon_pdev_htt_srng_setup_2_0,
.mon_soc_htt_srng_setup = dp_mon_soc_htt_srng_setup_2_0,
#endif #endif
#if defined(DP_CON_MON) #if defined(DP_CON_MON)
.mon_service_rings = NULL, .mon_service_rings = NULL,

View File

@@ -1989,8 +1989,9 @@ QDF_STATUS dp_mon_htt_srng_setup(struct dp_soc *soc,
struct dp_mon_ops *mon_ops; struct dp_mon_ops *mon_ops;
mon_ops = dp_mon_ops_get(soc); mon_ops = dp_mon_ops_get(soc);
if (mon_ops && mon_ops->mon_htt_srng_setup) if (mon_ops && mon_ops->mon_pdev_htt_srng_setup)
return mon_ops->mon_htt_srng_setup(soc, pdev, mac_id, mac_for_pdev); return mon_ops->mon_pdev_htt_srng_setup(soc, pdev,
mac_id, mac_for_pdev);
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
} }

View File

@@ -358,10 +358,11 @@ struct dp_mon_ops {
QDF_STATUS (*mon_config_debug_sniffer)(struct dp_pdev *pdev, int val); QDF_STATUS (*mon_config_debug_sniffer)(struct dp_pdev *pdev, int val);
void (*mon_flush_rings)(struct dp_soc *soc); void (*mon_flush_rings)(struct dp_soc *soc);
#if !defined(DISABLE_MON_CONFIG) #if !defined(DISABLE_MON_CONFIG)
QDF_STATUS (*mon_htt_srng_setup)(struct dp_soc *soc, QDF_STATUS (*mon_pdev_htt_srng_setup)(struct dp_soc *soc,
struct dp_pdev *pdev, struct dp_pdev *pdev,
int mac_id, int mac_id,
int mac_for_pdev); int mac_for_pdev);
QDF_STATUS (*mon_soc_htt_srng_setup)(struct dp_soc *soc);
#endif #endif
#if !defined(DISABLE_MON_CONFIG) && defined(MON_ENABLE_DROP_FOR_MAC) #if !defined(DISABLE_MON_CONFIG) && defined(MON_ENABLE_DROP_FOR_MAC)
uint32_t (*mon_drop_packets_for_mac)(struct dp_pdev *pdev, uint32_t (*mon_drop_packets_for_mac)(struct dp_pdev *pdev,
@@ -1689,14 +1690,33 @@ static inline QDF_STATUS dp_monitor_htt_srng_setup(struct dp_soc *soc,
} }
monitor_ops = mon_soc->mon_ops; monitor_ops = mon_soc->mon_ops;
if (!monitor_ops || !monitor_ops->mon_htt_srng_setup) { if (!monitor_ops || !monitor_ops->mon_pdev_htt_srng_setup) {
dp_mon_debug("callback not registered"); dp_mon_debug("callback not registered");
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
} }
return monitor_ops->mon_htt_srng_setup(soc, pdev, mac_id, return monitor_ops->mon_pdev_htt_srng_setup(soc, pdev, mac_id,
mac_for_pdev); mac_for_pdev);
} }
static inline QDF_STATUS dp_monitor_soc_htt_srng_setup(struct dp_soc *soc)
{
struct dp_mon_ops *monitor_ops;
struct dp_mon_soc *mon_soc = soc->monitor_soc;
if (!mon_soc) {
dp_mon_debug("monitor soc is NULL");
return QDF_STATUS_SUCCESS;
}
monitor_ops = mon_soc->mon_ops;
if (!monitor_ops || !monitor_ops->mon_soc_htt_srng_setup) {
dp_mon_debug("callback not registered");
return QDF_STATUS_E_FAILURE;
}
return monitor_ops->mon_soc_htt_srng_setup(soc);
}
#else #else
static inline QDF_STATUS dp_monitor_htt_srng_setup(struct dp_soc *soc, static inline QDF_STATUS dp_monitor_htt_srng_setup(struct dp_soc *soc,
struct dp_pdev *pdev, struct dp_pdev *pdev,