diff --git a/dp/wifi3.0/be/dp_be.c b/dp/wifi3.0/be/dp_be.c index a306476353..5dd1bf78cc 100644 --- a/dp/wifi3.0/be/dp_be.c +++ b/dp/wifi3.0/be/dp_be.c @@ -2922,6 +2922,9 @@ void dp_initialize_arch_ops_be(struct dp_arch_ops *arch_ops) arch_ops->txrx_srng_init = dp_srng_init_be; arch_ops->dp_get_vdev_stats_for_unmap_peer = dp_get_vdev_stats_for_unmap_peer_be; +#ifdef WLAN_MLO_MULTI_CHIP + arch_ops->dp_get_interface_stats = dp_get_interface_stats_be; +#endif #if defined(DP_POWER_SAVE) || defined(FEATURE_RUNTIME_PM) arch_ops->dp_update_ring_hptp = dp_update_ring_hptp; #endif diff --git a/dp/wifi3.0/be/mlo/dp_mlo.c b/dp/wifi3.0/be/mlo/dp_mlo.c index cefb9abd93..ec08fa5c6d 100644 --- a/dp/wifi3.0/be/mlo/dp_mlo.c +++ b/dp/wifi3.0/be/mlo/dp_mlo.c @@ -665,12 +665,6 @@ void dp_aggregate_interface_stats(struct dp_vdev *vdev, DP_MOD_ID_GENERIC_STATS); dp_update_vdev_rate_stats(vdev_stats, &vdev->stats); - -#if defined(FEATURE_PERPKT_INFO) && WDI_EVENT_ENABLE - dp_wdi_event_handler(WDI_EVENT_UPDATE_DP_STATS, vdev->pdev->soc, - vdev_stats, vdev->vdev_id, - UPDATE_VDEV_STATS, vdev->pdev->pdev_id); -#endif } /** @@ -766,10 +760,10 @@ complete: } QDF_STATUS -dp_txrx_get_interface_stats(struct cdp_soc_t *soc_hdl, - uint8_t vdev_id, - void *buf, - bool is_aggregate) +dp_get_interface_stats_be(struct cdp_soc_t *soc_hdl, + uint8_t vdev_id, + void *buf, + bool is_aggregate) { struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl); struct dp_vdev *vdev = dp_vdev_get_ref_by_id(soc, vdev_id, diff --git a/dp/wifi3.0/be/mlo/dp_mlo.h b/dp/wifi3.0/be/mlo/dp_mlo.h index d62f73bd09..d2d1b9e276 100644 --- a/dp/wifi3.0/be/mlo/dp_mlo.h +++ b/dp/wifi3.0/be/mlo/dp_mlo.h @@ -204,4 +204,17 @@ int32_t dp_mlo_get_delta_tsf2_wrt_mlo_offset(struct dp_soc *soc, * Return: int32_t */ int32_t dp_mlo_get_delta_tqm_wrt_mlo_offset(struct dp_soc *soc); + +/** + * dp_get_interface_stats_be() - get vdev stats for ath interface + * @soc_hdl: CDP SoC handle + * @vdev_id: vdev Id + * @buf: buffer for vdev stats + * @is_aggregate: for aggregation + * + * Return: QDF_STATUS + */ +QDF_STATUS +dp_get_interface_stats_be(struct cdp_soc_t *soc_hdl, uint8_t vdev_id, + void *buf, bool is_aggregate); #endif /* __DP_MLO_H */ diff --git a/dp/wifi3.0/dp_internal.h b/dp/wifi3.0/dp_internal.h index 88be50e1e0..f52fcb6e3c 100644 --- a/dp/wifi3.0/dp_internal.h +++ b/dp/wifi3.0/dp_internal.h @@ -2849,20 +2849,17 @@ void dp_aggregate_vdev_stats(struct dp_vdev *vdev, struct cdp_vdev_stats *vdev_stats); /** - * dp_txrx_get_interface_stats() - get vdev stats for ath interface + * dp_txrx_get_vdev_stats() - Update buffer with cdp_vdev_stats * @soc_hdl: CDP SoC handle * @vdev_id: vdev Id * @buf: buffer for vdev stats - * @is_aggregate: for aggregation + * @is_aggregate: are aggregate stats being collected * * Return: QDF_STATUS */ - QDF_STATUS -dp_txrx_get_interface_stats(struct cdp_soc_t *soc_hdl, - uint8_t vdev_id, - void *buf, - bool is_aggregate); +dp_txrx_get_vdev_stats(struct cdp_soc_t *soc_hdl, uint8_t vdev_id, + void *buf, bool is_aggregate); /** * dp_rx_bar_stats_cb() - BAR received stats callback diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 5fa99db474..b0c07eac27 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -5751,8 +5751,8 @@ void dp_aggregate_vdev_stats(struct dp_vdev *vdev, #if defined(FEATURE_PERPKT_INFO) && WDI_EVENT_ENABLE dp_wdi_event_handler(WDI_EVENT_UPDATE_DP_STATS, vdev->pdev->soc, - vdev_stats, vdev->vdev_id, - UPDATE_VDEV_STATS, vdev->pdev->pdev_id); + vdev_stats, vdev->vdev_id, + UPDATE_VDEV_STATS, vdev->pdev->pdev_id); #endif } @@ -8191,7 +8191,7 @@ dp_txrx_reset_peer_stats(struct cdp_soc_t *soc, uint8_t vdev_id, * * Return: QDF_STATUS */ -static QDF_STATUS +QDF_STATUS dp_txrx_get_vdev_stats(struct cdp_soc_t *soc_hdl, uint8_t vdev_id, void *buf, bool is_aggregate) { @@ -8946,6 +8946,22 @@ QDF_STATUS dp_txrx_clear_dump_stats(struct cdp_soc_t *soc_hdl, uint8_t pdev_id, return status; } +static QDF_STATUS +dp_txrx_get_interface_stats(struct cdp_soc_t *soc_hdl, + uint8_t vdev_id, + void *buf, + bool is_aggregate) +{ + struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl); + + if (soc && soc->arch_ops.dp_get_interface_stats) + return soc->arch_ops.dp_get_interface_stats(soc_hdl, + vdev_id, + buf, + is_aggregate); + return QDF_STATUS_E_FAILURE; +} + #ifdef QCA_LL_TX_FLOW_CONTROL_V2 /** * dp_update_flow_control_parameters() - API to store datapath @@ -10908,11 +10924,7 @@ static struct cdp_host_stats_ops dp_ops_host_stats = { dp_get_peer_extd_rate_link_stats, .get_pdev_obss_stats = dp_get_obss_stats, .clear_pdev_obss_pd_stats = dp_clear_pdev_obss_pd_stats, -#ifdef CONFIG_MLO_SINGLE_DEV .txrx_get_interface_stats = dp_txrx_get_interface_stats, -#else - .txrx_get_interface_stats = dp_txrx_get_vdev_stats, -#endif /* TODO */ }; diff --git a/dp/wifi3.0/dp_stats.c b/dp/wifi3.0/dp_stats.c index c4aa163883..561f5da4fc 100644 --- a/dp/wifi3.0/dp_stats.c +++ b/dp/wifi3.0/dp_stats.c @@ -8661,7 +8661,7 @@ void dp_update_vdev_stats_on_peer_unmap(struct dp_vdev *vdev, uint8_t link_id = 0; struct dp_pdev *pdev = vdev->pdev; - if (soc && soc->arch_ops.dp_get_vdev_stats_for_unmap_peer) + if (soc->arch_ops.dp_get_vdev_stats_for_unmap_peer) soc->arch_ops.dp_get_vdev_stats_for_unmap_peer(vdev, peer, &vdev_stats); diff --git a/dp/wifi3.0/dp_types.h b/dp/wifi3.0/dp_types.h index 9c87d76821..c56c87a0e4 100644 --- a/dp/wifi3.0/dp_types.h +++ b/dp/wifi3.0/dp_types.h @@ -2260,6 +2260,7 @@ enum dp_context_type { * @dp_tx_desc_pool_free: Free arch specific TX descriptor pool * @txrx_srng_init: Init txrx srng * @dp_get_vdev_stats_for_unmap_peer: Get vdev stats pointer for unmap peer + * @dp_get_interface_stats: Get interface stats * @ppeds_handle_attached: * @txrx_soc_ppeds_interrupt_stop: * @txrx_soc_ppeds_interrupt_start: @@ -2511,6 +2512,10 @@ struct dp_arch_ops { struct dp_vdev *vdev, struct dp_peer *peer, struct cdp_vdev_stats **vdev_stats); + QDF_STATUS (*dp_get_interface_stats)(struct cdp_soc_t *soc_hdl, + uint8_t vdev_id, + void *buf, + bool is_aggregate); #ifdef WLAN_SUPPORT_PPEDS void (*txrx_soc_ppeds_interrupt_stop)(struct dp_soc *soc); void (*txrx_soc_ppeds_interrupt_start)(struct dp_soc *soc); diff --git a/dp/wifi3.0/li/dp_li.c b/dp/wifi3.0/li/dp_li.c index 0e60004155..7b8ad1c06a 100644 --- a/dp/wifi3.0/li/dp_li.c +++ b/dp/wifi3.0/li/dp_li.c @@ -719,6 +719,7 @@ void dp_initialize_arch_ops_li(struct dp_arch_ops *arch_ops) arch_ops->txrx_srng_init = dp_srng_init_li; arch_ops->dp_get_vdev_stats_for_unmap_peer = dp_get_vdev_stats_for_unmap_peer_li; + arch_ops->dp_get_interface_stats = dp_txrx_get_vdev_stats; #if defined(DP_POWER_SAVE) || defined(FEATURE_RUNTIME_PM) arch_ops->dp_update_ring_hptp = dp_update_ring_hptp; #endif