diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 5bce496908..1aff3728dc 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -5442,6 +5442,7 @@ static QDF_STATUS dp_rxdma_ring_config(struct dp_soc *soc) { int i; QDF_STATUS status = QDF_STATUS_SUCCESS; + for (i = 0; i < MAX_PDEV_CNT; 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 lmac_id; + /* Configure monitor mode rings */ + dp_monitor_soc_htt_srng_setup(soc); + for (i = 0; i < MAX_PDEV_CNT; i++) { struct dp_pdev *pdev = soc->pdev_list[i]; diff --git a/dp/wifi3.0/monitor/1.0/dp_mon_1.0.c b/dp/wifi3.0/monitor/1.0/dp_mon_1.0.c index 5e63678735..e8d3f45124 100644 --- a/dp/wifi3.0/monitor/1.0/dp_mon_1.0.c +++ b/dp/wifi3.0/monitor/1.0/dp_mon_1.0.c @@ -3235,7 +3235,7 @@ struct dp_mon_ops monitor_ops_1_0 = { .mon_config_debug_sniffer = dp_config_debug_sniffer, .mon_flush_rings = dp_flush_monitor_rings, #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 #if defined(DP_CON_MON) .mon_service_rings = dp_service_mon_rings, diff --git a/dp/wifi3.0/monitor/2.0/dp_mon_2.0.c b/dp/wifi3.0/monitor/2.0/dp_mon_2.0.c index c2e5ee7c48..2e4de2f2b2 100644 --- a/dp/wifi3.0/monitor/2.0/dp_mon_2.0.c +++ b/dp/wifi3.0/monitor/2.0/dp_mon_2.0.c @@ -341,8 +341,37 @@ dp_set_bpr_enable_2_0(struct dp_pdev *pdev, int val) #ifndef DISABLE_MON_CONFIG static -QDF_STATUS dp_mon_htt_srng_setup_2_0(struct dp_soc *soc, - struct dp_pdev *pdev, +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, int mac_id, int mac_for_pdev) { @@ -565,14 +594,6 @@ QDF_STATUS dp_mon_soc_init_2_0(struct dp_soc *soc) 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; fail: 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_flush_rings = NULL, #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 #if defined(DP_CON_MON) .mon_service_rings = NULL, diff --git a/dp/wifi3.0/monitor/dp_mon.c b/dp/wifi3.0/monitor/dp_mon.c index 74c2f79524..000802ac6e 100644 --- a/dp/wifi3.0/monitor/dp_mon.c +++ b/dp/wifi3.0/monitor/dp_mon.c @@ -1989,8 +1989,9 @@ QDF_STATUS dp_mon_htt_srng_setup(struct dp_soc *soc, struct dp_mon_ops *mon_ops; mon_ops = dp_mon_ops_get(soc); - if (mon_ops && mon_ops->mon_htt_srng_setup) - return mon_ops->mon_htt_srng_setup(soc, pdev, mac_id, mac_for_pdev); + if (mon_ops && mon_ops->mon_pdev_htt_srng_setup) + return mon_ops->mon_pdev_htt_srng_setup(soc, pdev, + mac_id, mac_for_pdev); return QDF_STATUS_E_FAILURE; } diff --git a/dp/wifi3.0/monitor/dp_mon.h b/dp/wifi3.0/monitor/dp_mon.h index 2dcf12b361..cc575add4a 100644 --- a/dp/wifi3.0/monitor/dp_mon.h +++ b/dp/wifi3.0/monitor/dp_mon.h @@ -358,10 +358,11 @@ struct dp_mon_ops { QDF_STATUS (*mon_config_debug_sniffer)(struct dp_pdev *pdev, int val); void (*mon_flush_rings)(struct dp_soc *soc); #if !defined(DISABLE_MON_CONFIG) - QDF_STATUS (*mon_htt_srng_setup)(struct dp_soc *soc, - struct dp_pdev *pdev, - int mac_id, - int mac_for_pdev); + QDF_STATUS (*mon_pdev_htt_srng_setup)(struct dp_soc *soc, + struct dp_pdev *pdev, + int mac_id, + int mac_for_pdev); + QDF_STATUS (*mon_soc_htt_srng_setup)(struct dp_soc *soc); #endif #if !defined(DISABLE_MON_CONFIG) && defined(MON_ENABLE_DROP_FOR_MAC) uint32_t (*mon_drop_packets_for_mac)(struct dp_pdev *pdev, @@ -1689,13 +1690,32 @@ static inline QDF_STATUS dp_monitor_htt_srng_setup(struct dp_soc *soc, } 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"); return QDF_STATUS_E_FAILURE; } - return monitor_ops->mon_htt_srng_setup(soc, pdev, mac_id, - mac_for_pdev); + return monitor_ops->mon_pdev_htt_srng_setup(soc, pdev, mac_id, + 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 static inline QDF_STATUS dp_monitor_htt_srng_setup(struct dp_soc *soc,