diff --git a/dp/inc/cdp_txrx_host_stats.h b/dp/inc/cdp_txrx_host_stats.h index 960cffe6af..558c8e9659 100644 --- a/dp/inc/cdp_txrx_host_stats.h +++ b/dp/inc/cdp_txrx_host_stats.h @@ -153,11 +153,11 @@ cdp_enable_enhanced_stats(ol_txrx_soc_handle soc, uint8_t pdev_id) return QDF_STATUS_E_FAILURE; } - if (!soc->ops->host_stats_ops || - !soc->ops->host_stats_ops->txrx_enable_enhanced_stats) + if (!soc->ops->mon_ops || + !soc->ops->mon_ops->txrx_enable_enhanced_stats) return QDF_STATUS_E_FAILURE; - return soc->ops->host_stats_ops->txrx_enable_enhanced_stats + return soc->ops->mon_ops->txrx_enable_enhanced_stats (soc, pdev_id); } @@ -177,11 +177,11 @@ cdp_disable_enhanced_stats(ol_txrx_soc_handle soc, uint8_t pdev_id) return QDF_STATUS_E_FAILURE; } - if (!soc->ops->host_stats_ops || - !soc->ops->host_stats_ops->txrx_disable_enhanced_stats) + if (!soc->ops->mon_ops || + !soc->ops->mon_ops->txrx_disable_enhanced_stats) return QDF_STATUS_E_FAILURE; - return soc->ops->host_stats_ops->txrx_disable_enhanced_stats + return soc->ops->mon_ops->txrx_disable_enhanced_stats (soc, pdev_id); } diff --git a/dp/inc/cdp_txrx_ops.h b/dp/inc/cdp_txrx_ops.h index bb808ec9bf..ec023bc9df 100644 --- a/dp/inc/cdp_txrx_ops.h +++ b/dp/inc/cdp_txrx_ops.h @@ -984,6 +984,8 @@ struct cdp_me_ops { * @txrx_set_lite_mon_peer_config: set lite monitor peer config * @txrx_get_lite_mon_peer_config: get lite monitor peer list * @txrx_is_lite_mon_enabled: get lite monitor enable/disable status + * @txrx_enable_enhanced_stats: Enable enhanced stats + * @txrx_disable_enhanced_stats: Disable enhanced stats * @txrx_get_lite_mon_legacy_feature_enabled: returns the legacy filter enabled * @txrx_set_mon_pdev_params_rssi_dbm_conv: To set RSSI dbm conversion params * in monitor pdev @@ -1015,6 +1017,12 @@ struct cdp_mon_ops { enum cdp_mon_reap_source source, bool enable); + QDF_STATUS (*txrx_enable_enhanced_stats)(struct cdp_soc_t *soc, + uint8_t pdev_id); + + QDF_STATUS (*txrx_disable_enhanced_stats)(struct cdp_soc_t *soc, + uint8_t pdev_id); + #ifdef QCA_SUPPORT_LITE_MONITOR QDF_STATUS (*txrx_set_lite_mon_config)( @@ -1068,8 +1076,6 @@ struct cdp_mon_ops { * @txrx_host_stats_clr: * @txrx_host_ce_stats: * @txrx_stats_publish: - * @txrx_enable_enhanced_stats: Enable enhanced stats functionality. - * @txrx_disable_enhanced_stats: Disable enhanced stats functionality. * @tx_print_tso_stats: * @tx_rst_tso_stats: * @tx_print_sg_stats: @@ -1127,10 +1133,6 @@ struct cdp_host_stats_ops { int (*txrx_stats_publish)(struct cdp_soc_t *soc, uint8_t pdev_id, struct cdp_stats_extd *buf); - QDF_STATUS (*txrx_enable_enhanced_stats)(struct cdp_soc_t *soc, - uint8_t pdev_id); - QDF_STATUS (*txrx_disable_enhanced_stats)(struct cdp_soc_t *soc, - uint8_t pdev_id); QDF_STATUS (*tx_print_tso_stats)(struct cdp_soc_t *soc, uint8_t vdev_id); diff --git a/dp/wifi3.0/be/dp_be.h b/dp/wifi3.0/be/dp_be.h index e13164f02e..dafd7e4026 100644 --- a/dp/wifi3.0/be/dp_be.h +++ b/dp/wifi3.0/be/dp_be.h @@ -528,16 +528,16 @@ void dp_mcast_mlo_iter_ptnr_vdev(struct dp_soc_be *be_soc, void *arg, enum dp_mod_id mod_id); /** - * dp_mcast_mlo_iter_ptnr_soc() - API to iterate through ptnr soc list + * dp_mlo_iter_ptnr_soc() - API to iterate through ptnr soc list * @be_soc: dp_soc_be pointer * @func: function to be called for each peer * @arg: argument need to be passed to func * * Return: None */ -void dp_mcast_mlo_iter_ptnr_soc(struct dp_soc_be *be_soc, - dp_ptnr_soc_iter_func func, - void *arg); +void dp_mlo_iter_ptnr_soc(struct dp_soc_be *be_soc, + dp_ptnr_soc_iter_func func, + void *arg); /** * dp_mlo_get_mcast_primary_vdev() - get ref to mcast primary vdev * @be_soc: dp_soc_be pointer diff --git a/dp/wifi3.0/be/dp_be_rx.c b/dp/wifi3.0/be/dp_be_rx.c index 640b472faf..584a9233a0 100644 --- a/dp/wifi3.0/be/dp_be_rx.c +++ b/dp/wifi3.0/be/dp_be_rx.c @@ -112,7 +112,7 @@ static inline void dp_wds_ext_peer_learn_be(struct dp_soc *soc, &ta_txrx_peer->wds_ext.init); if (qdf_unlikely(ta_txrx_peer->nawds_enabled && - ta_txrx_peer->mld_peer)) { + ta_txrx_peer->is_mld_peer)) { ta_base_peer = dp_get_primary_link_peer_by_id( soc, ta_txrx_peer->peer_id, @@ -184,7 +184,7 @@ uint32_t dp_rx_process_be(struct dp_intr *int_ctx, uint32_t rx_bufs_reaped[WLAN_MAX_MLO_CHIPS][MAX_PDEV_CNT]; uint8_t mac_id = 0; struct dp_pdev *rx_pdev; - bool enh_flag; + uint8_t enh_flag; struct dp_srng *dp_rxdma_srng; struct rx_desc_pool *rx_desc_pool; struct dp_soc *soc = int_ctx->soc; @@ -565,7 +565,8 @@ done: rx_bufs_used++; - if (txrx_peer->is_mld_peer) { + /* MLD Link Peer Statistics support */ + if (txrx_peer->is_mld_peer && rx_pdev->link_peer_stats) { link_id = ((dp_rx_get_msdu_hw_link_id(nbuf)) + 1); if (link_id < 1 || link_id > DP_MAX_MLO_LINKS) link_id = 0; diff --git a/dp/wifi3.0/be/mlo/dp_mlo.c b/dp/wifi3.0/be/mlo/dp_mlo.c index 7e905f6480..abbc60f8bb 100644 --- a/dp/wifi3.0/be/mlo/dp_mlo.c +++ b/dp/wifi3.0/be/mlo/dp_mlo.c @@ -288,9 +288,9 @@ static void dp_mlo_soc_teardown(struct cdp_soc_t *soc_hdl, return; /* During the teardown drain the Rx buffers if any exist in the ring */ - dp_mcast_mlo_iter_ptnr_soc(be_soc, - dp_mlo_soc_drain_rx_buf, - NULL); + dp_mlo_iter_ptnr_soc(be_soc, + dp_mlo_soc_drain_rx_buf, + NULL); dp_mlo_set_soc_by_chip_id(mlo_ctxt, NULL, be_soc->mlo_chip_id); be_soc->ml_ctxt = NULL; @@ -814,9 +814,9 @@ dp_soc_get_by_idle_bm_id(struct dp_soc *soc, uint8_t idle_bm_id) } #ifdef WLAN_MCAST_MLO -void dp_mcast_mlo_iter_ptnr_soc(struct dp_soc_be *be_soc, - dp_ptnr_soc_iter_func func, - void *arg) +void dp_mlo_iter_ptnr_soc(struct dp_soc_be *be_soc, + dp_ptnr_soc_iter_func func, + void *arg) { int i = 0; struct dp_mlo_ctxt *dp_mlo = be_soc->ml_ctxt; @@ -831,7 +831,7 @@ void dp_mcast_mlo_iter_ptnr_soc(struct dp_soc_be *be_soc, } } -qdf_export_symbol(dp_mcast_mlo_iter_ptnr_soc); +qdf_export_symbol(dp_mlo_iter_ptnr_soc); void dp_mcast_mlo_iter_ptnr_vdev(struct dp_soc_be *be_soc, struct dp_vdev_be *be_vdev, diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index f9175d8d0b..285e5d6c0c 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -7872,9 +7872,11 @@ static QDF_STATUS dp_txrx_peer_detach(struct dp_soc *soc, struct dp_peer *peer) } static inline -uint8_t dp_txrx_peer_calculate_stats_size(struct dp_peer *peer) +uint8_t dp_txrx_peer_calculate_stats_size(struct dp_soc *soc, + struct dp_peer *peer) { - if (IS_MLO_DP_MLD_PEER(peer)) { + if ((wlan_cfg_is_peer_link_stats_enabled(soc->wlan_cfg_ctx)) && + IS_MLO_DP_MLD_PEER(peer)) { return (DP_MAX_MLO_LINKS + 1); } return 1; @@ -7887,7 +7889,7 @@ static QDF_STATUS dp_txrx_peer_attach(struct dp_soc *soc, struct dp_peer *peer) struct cdp_txrx_peer_params_update params = {0}; uint8_t stats_arr_size = 0; - stats_arr_size = dp_txrx_peer_calculate_stats_size(peer); + stats_arr_size = dp_txrx_peer_calculate_stats_size(soc, peer); txrx_peer = (struct dp_txrx_peer *)qdf_mem_malloc(sizeof(*txrx_peer) + (stats_arr_size * diff --git a/dp/wifi3.0/dp_rx.c b/dp/wifi3.0/dp_rx.c index 3adb25473f..8659cdcd81 100644 --- a/dp/wifi3.0/dp_rx.c +++ b/dp/wifi3.0/dp_rx.c @@ -2491,7 +2491,7 @@ void dp_rx_msdu_stats_update(struct dp_soc *soc, qdf_nbuf_t nbuf, { bool is_not_amsdu; struct dp_vdev *vdev = txrx_peer->vdev; - bool enh_flag; + uint8_t enh_flag; qdf_ether_header_t *eh; uint16_t msdu_len = QDF_NBUF_CB_RX_PKT_LEN(nbuf); diff --git a/dp/wifi3.0/dp_rx_err.c b/dp/wifi3.0/dp_rx_err.c index d95fdbd445..e025e86de4 100644 --- a/dp/wifi3.0/dp_rx_err.c +++ b/dp/wifi3.0/dp_rx_err.c @@ -2417,14 +2417,19 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc, continue; } - if (txrx_peer && txrx_peer->is_mld_peer) { + pool_id = wbm_err_info.pool_id; + dp_pdev = dp_get_pdev_for_lmac_id(soc, pool_id); + + if (dp_pdev && dp_pdev->link_peer_stats && + txrx_peer && txrx_peer->is_mld_peer) { link_id = ((dp_rx_peer_mdata_link_id_get( soc, peer_meta_data)) + 1); if (link_id < 1 || link_id > DP_MAX_MLO_LINKS) link_id = 0; - } else + } else { link_id = 0; + } if (wbm_err_info.wbm_err_src == HAL_RX_WBM_ERR_SRC_REO) { if (wbm_err_info.reo_psh_rsn @@ -2434,8 +2439,6 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc, rx.err.reo_error [wbm_err_info.reo_err_code], 1); /* increment @pdev level */ - pool_id = wbm_err_info.pool_id; - dp_pdev = dp_get_pdev_for_lmac_id(soc, pool_id); if (dp_pdev) DP_STATS_INC(dp_pdev, err.reo_error, 1); @@ -2545,8 +2548,6 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc, rx.err.rxdma_error [wbm_err_info.rxdma_err_code], 1); /* increment @pdev level */ - pool_id = wbm_err_info.pool_id; - dp_pdev = dp_get_pdev_for_lmac_id(soc, pool_id); if (dp_pdev) DP_STATS_INC(dp_pdev, err.rxdma_error, 1); diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c index f95fd3f48c..935a7bd927 100644 --- a/dp/wifi3.0/dp_tx.c +++ b/dp/wifi3.0/dp_tx.c @@ -5302,6 +5302,7 @@ void dp_tx_comp_process_tx_status(struct dp_soc *soc, if (link_id < 1 || link_id > DP_MAX_MLO_LINKS) link_id = 0; #endif + dp_tx_update_connectivity_stats(soc, vdev, tx_desc, ts->status); dp_tx_update_uplink_delay(soc, vdev, ts); diff --git a/dp/wifi3.0/dp_types.h b/dp/wifi3.0/dp_types.h index eefea23330..b5a3f85ae8 100644 --- a/dp/wifi3.0/dp_types.h +++ b/dp/wifi3.0/dp_types.h @@ -3391,7 +3391,8 @@ struct dp_pdev { bool is_pdev_down; /* Enhanced Stats is enabled */ - bool enhanced_stats_en; + uint8_t enhanced_stats_en:1, + link_peer_stats:1; /* Flag to indicate fast RX */ bool rx_fast_flag; 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 5d91208616..e1b0880186 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 @@ -1308,6 +1308,10 @@ struct cdp_mon_ops dp_ops_mon_1_0 = { .soc_config_full_mon_mode = dp_soc_config_full_mon_mode, .get_mon_pdev_rx_stats = dp_pdev_get_rx_mon_stats, .txrx_enable_mon_reap_timer = dp_enable_mon_reap_timer, +#ifdef QCA_ENHANCED_STATS_SUPPORT + .txrx_enable_enhanced_stats = dp_enable_enhanced_stats, + .txrx_disable_enhanced_stats = dp_disable_enhanced_stats, +#endif /* QCA_ENHANCED_STATS_SUPPORT */ #ifdef QCA_SUPPORT_LITE_MONITOR .txrx_set_lite_mon_config = NULL, .txrx_get_lite_mon_config = NULL, 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 3e088c053d..4f88e7150f 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 @@ -1664,6 +1664,10 @@ struct cdp_mon_ops dp_ops_mon_2_0 = { .soc_config_full_mon_mode = NULL, .get_mon_pdev_rx_stats = dp_pdev_get_rx_mon_stats, .txrx_enable_mon_reap_timer = NULL, +#ifdef QCA_ENHANCED_STATS_SUPPORT + .txrx_enable_enhanced_stats = dp_enable_enhanced_stats_2_0, + .txrx_disable_enhanced_stats = dp_disable_enhanced_stats_2_0, +#endif /* QCA_ENHANCED_STATS_SUPPORT */ #ifdef QCA_SUPPORT_LITE_MONITOR .txrx_set_lite_mon_config = dp_lite_mon_set_config, .txrx_get_lite_mon_config = dp_lite_mon_get_config, @@ -1752,3 +1756,49 @@ void dp_mon_rx_update_rx_protocol_tag_stats(struct dp_pdev *pdev, { } #endif + +#ifdef QCA_ENHANCED_STATS_SUPPORT +static void +dp_enable_enhanced_stats_for_each_pdev(struct dp_soc *soc, void *arg) { + uint8_t i = 0; + + for (i = 0; i < MAX_PDEV_CNT; i++) + dp_enable_enhanced_stats(dp_soc_to_cdp_soc_t(soc), i); +} + +QDF_STATUS +dp_enable_enhanced_stats_2_0(struct cdp_soc_t *soc, uint8_t pdev_id) +{ + struct dp_soc *dp_soc = cdp_soc_t_to_dp_soc(soc); + struct dp_soc_be *be_soc = NULL; + + be_soc = dp_get_be_soc_from_dp_soc(dp_soc); + + dp_mlo_iter_ptnr_soc(be_soc, + dp_enable_enhanced_stats_for_each_pdev, + NULL); + return QDF_STATUS_SUCCESS; +} + +static void +dp_disable_enhanced_stats_for_each_pdev(struct dp_soc *soc, void *arg) { + uint8_t i = 0; + + for (i = 0; i < MAX_PDEV_CNT; i++) + dp_disable_enhanced_stats(dp_soc_to_cdp_soc_t(soc), i); +} + +QDF_STATUS +dp_disable_enhanced_stats_2_0(struct cdp_soc_t *soc, uint8_t pdev_id) +{ + struct dp_soc *dp_soc = cdp_soc_t_to_dp_soc(soc); + struct dp_soc_be *be_soc = NULL; + + be_soc = dp_get_be_soc_from_dp_soc(dp_soc); + + dp_mlo_iter_ptnr_soc(be_soc, + dp_disable_enhanced_stats_for_each_pdev, + NULL); + return QDF_STATUS_SUCCESS; +} +#endif diff --git a/dp/wifi3.0/monitor/2.0/dp_mon_2.0.h b/dp/wifi3.0/monitor/2.0/dp_mon_2.0.h index 7957f39f6c..09f6a92271 100644 --- a/dp/wifi3.0/monitor/2.0/dp_mon_2.0.h +++ b/dp/wifi3.0/monitor/2.0/dp_mon_2.0.h @@ -551,4 +551,27 @@ struct dp_mon_pdev_be *dp_get_be_mon_pdev_from_dp_mon_pdev(struct dp_mon_pdev *m return (struct dp_mon_pdev_be *)mon_pdev; } #endif + +#ifdef QCA_ENHANCED_STATS_SUPPORT +/* + * dp_enable_enhanced_stats_2_0() - BE Wrapper to enable stats + * @soc: Datapath soc handle + * @pdev_id: Pdev Id on which stats will get enable + * + * Return: status success/failure + */ +QDF_STATUS +dp_enable_enhanced_stats_2_0(struct cdp_soc_t *soc, uint8_t pdev_id); + +/* + * dp_disable_enhanced_stats_2_0() - BE Wrapper to disable stats + * @soc: Datapath soc handle + * @pdev_id: Pdev Id on which stats will get disable + * + * Return: status success/failure + */ +QDF_STATUS +dp_disable_enhanced_stats_2_0(struct cdp_soc_t *soc, uint8_t pdev_id); +#endif /* QCA_ENHANCED_STATS_SUPPORT */ + #endif /* _DP_MON_2_0_H_ */ diff --git a/dp/wifi3.0/monitor/dp_mon.c b/dp/wifi3.0/monitor/dp_mon.c index 6ab9cc54a3..5596ef8e4d 100644 --- a/dp/wifi3.0/monitor/dp_mon.c +++ b/dp/wifi3.0/monitor/dp_mon.c @@ -1941,12 +1941,13 @@ static void dp_mon_tx_enable_enhanced_stats(struct dp_pdev *pdev) * * Return: QDF_STATUS */ -static QDF_STATUS +QDF_STATUS dp_enable_enhanced_stats(struct cdp_soc_t *soc, uint8_t pdev_id) { struct dp_pdev *pdev = NULL; QDF_STATUS status = QDF_STATUS_SUCCESS; struct dp_mon_pdev *mon_pdev; + struct dp_soc *dp_soc = cdp_soc_t_to_dp_soc(soc); pdev = dp_get_pdev_from_soc_pdev_id_wifi3((struct dp_soc *)soc, pdev_id); @@ -1963,7 +1964,9 @@ dp_enable_enhanced_stats(struct cdp_soc_t *soc, uint8_t pdev_id) dp_cal_client_timer_start(mon_pdev->cal_client_ctx); mon_pdev->enhanced_stats_en = 1; - pdev->enhanced_stats_en = true; + pdev->enhanced_stats_en = 1; + pdev->link_peer_stats = wlan_cfg_is_peer_link_stats_enabled( + dp_soc->wlan_cfg_ctx); dp_mon_filter_setup_enhanced_stats(pdev); status = dp_mon_filter_update(pdev); @@ -1972,7 +1975,8 @@ dp_enable_enhanced_stats(struct cdp_soc_t *soc, uint8_t pdev_id) dp_mon_filter_reset_enhanced_stats(pdev); dp_cal_client_timer_stop(mon_pdev->cal_client_ctx); mon_pdev->enhanced_stats_en = 0; - pdev->enhanced_stats_en = false; + pdev->enhanced_stats_en = 0; + pdev->link_peer_stats = 0; return QDF_STATUS_E_FAILURE; } @@ -2005,7 +2009,7 @@ static void dp_mon_tx_disable_enhanced_stats(struct dp_pdev *pdev) * * Return: QDF_STATUS */ -static QDF_STATUS +QDF_STATUS dp_disable_enhanced_stats(struct cdp_soc_t *soc, uint8_t pdev_id) { struct dp_pdev *pdev = @@ -2023,7 +2027,8 @@ dp_disable_enhanced_stats(struct cdp_soc_t *soc, uint8_t pdev_id) dp_cal_client_timer_stop(mon_pdev->cal_client_ctx); mon_pdev->enhanced_stats_en = 0; - pdev->enhanced_stats_en = false; + pdev->enhanced_stats_en = 0; + pdev->link_peer_stats = 0; dp_mon_tx_disable_enhanced_stats(pdev); @@ -6450,12 +6455,6 @@ void dp_mon_cdp_ops_register(struct dp_soc *soc) ops->ctrl_ops->txrx_update_peer_pkt_capture_params = dp_peer_update_pkt_capture_params; #endif /* WLAN_TX_PKT_CAPTURE_ENH || WLAN_RX_PKT_CAPTURE_ENH */ -#ifdef QCA_ENHANCED_STATS_SUPPORT - ops->host_stats_ops->txrx_enable_enhanced_stats = - dp_enable_enhanced_stats; - ops->host_stats_ops->txrx_disable_enhanced_stats = - dp_disable_enhanced_stats; -#endif /* QCA_ENHANCED_STATS_SUPPORT */ #ifdef WDI_EVENT_ENABLE ops->ctrl_ops->txrx_get_pldev = dp_get_pldev; #endif @@ -6515,10 +6514,6 @@ void dp_mon_cdp_ops_deregister(struct dp_soc *soc) #if defined(WLAN_TX_PKT_CAPTURE_ENH) || defined(WLAN_RX_PKT_CAPTURE_ENH) ops->ctrl_ops->txrx_update_peer_pkt_capture_params = NULL; #endif /* WLAN_TX_PKT_CAPTURE_ENH || WLAN_RX_PKT_CAPTURE_ENH */ -#ifdef FEATURE_PERPKT_INFO - ops->host_stats_ops->txrx_enable_enhanced_stats = NULL; - ops->host_stats_ops->txrx_disable_enhanced_stats = NULL; -#endif /* FEATURE_PERPKT_INFO */ #ifdef WDI_EVENT_ENABLE ops->ctrl_ops->txrx_get_pldev = NULL; #endif diff --git a/dp/wifi3.0/monitor/dp_mon.h b/dp/wifi3.0/monitor/dp_mon.h index bd8e9d82f2..5a9567462b 100644 --- a/dp/wifi3.0/monitor/dp_mon.h +++ b/dp/wifi3.0/monitor/dp_mon.h @@ -1064,7 +1064,7 @@ struct dp_mon_pdev { /* Neighnour peer list */ TAILQ_HEAD(, dp_neighbour_peer) neighbour_peers_list; /* Enhanced Stats is enabled */ - bool enhanced_stats_en; + uint8_t enhanced_stats_en; qdf_nbuf_queue_t rx_status_q; /* 128 bytes mpdu header queue per user for ppdu */ @@ -4293,7 +4293,29 @@ QDF_STATUS dp_pdev_get_rx_mon_stats(struct cdp_soc_t *soc_hdl, uint8_t pdev_id, bool dp_enable_mon_reap_timer(struct cdp_soc_t *soc_hdl, enum cdp_mon_reap_source source, bool enable); +#ifdef QCA_ENHANCED_STATS_SUPPORT /** + * dp_enable_enhanced_stats() - enable enhanced and MLD Link Peer stats + * @soc: Datapath soc handle + * @pdev_id: Pdev Id on which stats will get enable + * + * Return: status success/failure + */ +QDF_STATUS +dp_enable_enhanced_stats(struct cdp_soc_t *soc, uint8_t pdev_id); + +/** + * dp_disable_enhanced_stats() - disable enhanced and MLD Link Peer stats + * @soc: Datapath soc handle + * @pdev_id: Pdev Id on which stats will get disable + * + * Return: status success/failure + */ +QDF_STATUS +dp_disable_enhanced_stats(struct cdp_soc_t *soc, uint8_t pdev_id); +#endif /* QCA_ENHANCED_STATS_SUPPORT */ + +/* * dp_monitor_lite_mon_disable_rx() - disables rx lite mon * @pdev: dp pdev * diff --git a/wlan_cfg/cfg_dp.h b/wlan_cfg/cfg_dp.h index ae31f483d4..4fafbf8982 100644 --- a/wlan_cfg/cfg_dp.h +++ b/wlan_cfg/cfg_dp.h @@ -1446,6 +1446,16 @@ CFG_INI_BOOL("peer_ext_stats", \ false, "Peer extended stats") +#ifdef QCA_ENHANCED_STATS_SUPPORT +#define DEFAULT_PEER_LINK_STATS_VALUE true +#else +#define DEFAULT_PEER_LINK_STATS_VALUE false +#endif /* QCA_ENHANCED_STATS_SUPPORT */ + +#define CFG_DP_PEER_LINK_STATS \ + CFG_INI_BOOL("peer_link_stats", \ + DEFAULT_PEER_LINK_STATS_VALUE, "Peer Link stats") + #define CFG_DP_PEER_JITTER_STATS \ CFG_INI_BOOL("peer_jitter_stats", \ false, "Peer Jitter stats") @@ -1973,6 +1983,7 @@ CFG(CFG_DP_REO_RINGS_MAP) \ CFG(CFG_DP_PEER_EXT_STATS) \ CFG(CFG_DP_PEER_JITTER_STATS) \ + CFG(CFG_DP_PEER_LINK_STATS) \ CFG(CFG_DP_RX_BUFF_POOL_ENABLE) \ CFG(CFG_DP_RX_REFILL_BUFF_POOL_ENABLE) \ CFG(CFG_DP_RX_PENDING_HL_THRESHOLD) \ diff --git a/wlan_cfg/wlan_cfg.c b/wlan_cfg/wlan_cfg.c index 2a56712766..effe7301bf 100644 --- a/wlan_cfg/wlan_cfg.c +++ b/wlan_cfg/wlan_cfg.c @@ -3060,6 +3060,8 @@ wlan_cfg_soc_attach(struct cdp_ctrl_objmgr_psoc *psoc) wlan_cfg_ctx->pext_stats_enabled = cfg_get(psoc, CFG_DP_PEER_EXT_STATS); wlan_cfg_ctx->jitter_stats_enabled = cfg_get(psoc, CFG_DP_PEER_JITTER_STATS); + wlan_cfg_ctx->peer_link_stats_enabled = + cfg_get(psoc, CFG_DP_PEER_LINK_STATS); wlan_cfg_ctx->is_rx_buff_pool_enabled = cfg_get(psoc, CFG_DP_RX_BUFF_POOL_ENABLE); wlan_cfg_ctx->is_rx_refill_buff_pool_enabled = @@ -4113,6 +4115,22 @@ bool wlan_cfg_is_peer_jitter_stats_enabled(struct wlan_cfg_dp_soc_ctxt *cfg) return cfg->jitter_stats_enabled; } +void +wlan_cfg_set_peer_link_stats(struct wlan_cfg_dp_soc_ctxt *cfg, + bool val) +{ + cfg->peer_link_stats_enabled = val; +} + +qdf_export_symbol(wlan_cfg_set_peer_link_stats); + +bool wlan_cfg_is_peer_link_stats_enabled(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->peer_link_stats_enabled; +} + +qdf_export_symbol(wlan_cfg_is_peer_link_stats_enabled); + #ifdef WLAN_FEATURE_RX_PREALLOC_BUFFER_POOL bool wlan_cfg_is_rx_buffer_pool_enabled(struct wlan_cfg_dp_soc_ctxt *cfg) { diff --git a/wlan_cfg/wlan_cfg.h b/wlan_cfg/wlan_cfg.h index 0080142c7f..93514e1f2b 100644 --- a/wlan_cfg/wlan_cfg.h +++ b/wlan_cfg/wlan_cfg.h @@ -298,6 +298,7 @@ struct wlan_srng_cfg { * @radio2_rx_default_reo: * @wow_check_rx_pending_enable: Enable RX frame pending check in WoW * @jitter_stats_enabled: true if jitter stats are enabled + * @peer_link_stats_enabled: true if MLO Peer Link stats are enabled * @ipa_tx_ring_size: IPA tx ring size * @ipa_tx_comp_ring_size: IPA tx completion ring size * @ipa_tx_alt_ring_size: IPA tx alt ring size @@ -476,6 +477,7 @@ struct wlan_cfg_dp_soc_ctxt { uint8_t radio2_rx_default_reo; bool wow_check_rx_pending_enable; bool jitter_stats_enabled; + bool peer_link_stats_enabled; #ifdef IPA_OFFLOAD uint32_t ipa_tx_ring_size; uint32_t ipa_tx_comp_ring_size; @@ -1994,6 +1996,27 @@ bool wlan_cfg_is_fst_in_cmem_enabled(struct wlan_cfg_dp_soc_ctxt *cfg); */ bool wlan_cfg_is_swlm_enabled(struct wlan_cfg_dp_soc_ctxt *cfg); +/** + * wlan_cfg_set_peer_link_stats() - set peer link stats + * + * @cfg: soc configuration context + * @val: Flag value read from INI + * + * Return: void + */ +void +wlan_cfg_set_peer_link_stats(struct wlan_cfg_dp_soc_ctxt *cfg, + bool val); +/** + * wlan_cfg_is_peer_link_stats_enabled() - check if link peer stats are enabled + * + * @cfg: soc configuration context + * + * Return: bool + */ +bool +wlan_cfg_is_peer_link_stats_enabled(struct wlan_cfg_dp_soc_ctxt *cfg); + #ifdef IPA_OFFLOAD /** * wlan_cfg_ipa_tx_ring_size - Get Tx DMA ring size (TCL Data Ring)