qcacmn: Ini and Config command Support for MLO Link Peer Stats
Add support to enable/disable MLO Link Peer stats through ini and cfg80211tool enable_ol stats command Change-Id: Id1229a149befa416d060e1b07eee150e6b295abf CRs-Fixed: 3397721
This commit is contained in:

committed by
Madan Koyyalamudi

父節點
4c88b99fe7
當前提交
bad3898323
@@ -153,11 +153,11 @@ cdp_enable_enhanced_stats(ol_txrx_soc_handle soc, uint8_t pdev_id)
|
|||||||
return QDF_STATUS_E_FAILURE;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!soc->ops->host_stats_ops ||
|
if (!soc->ops->mon_ops ||
|
||||||
!soc->ops->host_stats_ops->txrx_enable_enhanced_stats)
|
!soc->ops->mon_ops->txrx_enable_enhanced_stats)
|
||||||
return QDF_STATUS_E_FAILURE;
|
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);
|
(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;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!soc->ops->host_stats_ops ||
|
if (!soc->ops->mon_ops ||
|
||||||
!soc->ops->host_stats_ops->txrx_disable_enhanced_stats)
|
!soc->ops->mon_ops->txrx_disable_enhanced_stats)
|
||||||
return QDF_STATUS_E_FAILURE;
|
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);
|
(soc, pdev_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -984,6 +984,8 @@ struct cdp_me_ops {
|
|||||||
* @txrx_set_lite_mon_peer_config: set lite monitor peer config
|
* @txrx_set_lite_mon_peer_config: set lite monitor peer config
|
||||||
* @txrx_get_lite_mon_peer_config: get lite monitor peer list
|
* @txrx_get_lite_mon_peer_config: get lite monitor peer list
|
||||||
* @txrx_is_lite_mon_enabled: get lite monitor enable/disable status
|
* @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_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
|
* @txrx_set_mon_pdev_params_rssi_dbm_conv: To set RSSI dbm conversion params
|
||||||
* in monitor pdev
|
* in monitor pdev
|
||||||
@@ -1015,6 +1017,12 @@ struct cdp_mon_ops {
|
|||||||
enum cdp_mon_reap_source source,
|
enum cdp_mon_reap_source source,
|
||||||
bool enable);
|
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
|
#ifdef QCA_SUPPORT_LITE_MONITOR
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
(*txrx_set_lite_mon_config)(
|
(*txrx_set_lite_mon_config)(
|
||||||
@@ -1068,8 +1076,6 @@ struct cdp_mon_ops {
|
|||||||
* @txrx_host_stats_clr:
|
* @txrx_host_stats_clr:
|
||||||
* @txrx_host_ce_stats:
|
* @txrx_host_ce_stats:
|
||||||
* @txrx_stats_publish:
|
* @txrx_stats_publish:
|
||||||
* @txrx_enable_enhanced_stats: Enable enhanced stats functionality.
|
|
||||||
* @txrx_disable_enhanced_stats: Disable enhanced stats functionality.
|
|
||||||
* @tx_print_tso_stats:
|
* @tx_print_tso_stats:
|
||||||
* @tx_rst_tso_stats:
|
* @tx_rst_tso_stats:
|
||||||
* @tx_print_sg_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,
|
int (*txrx_stats_publish)(struct cdp_soc_t *soc, uint8_t pdev_id,
|
||||||
struct cdp_stats_extd *buf);
|
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
|
QDF_STATUS
|
||||||
(*tx_print_tso_stats)(struct cdp_soc_t *soc, uint8_t vdev_id);
|
(*tx_print_tso_stats)(struct cdp_soc_t *soc, uint8_t vdev_id);
|
||||||
|
@@ -528,16 +528,16 @@ void dp_mcast_mlo_iter_ptnr_vdev(struct dp_soc_be *be_soc,
|
|||||||
void *arg,
|
void *arg,
|
||||||
enum dp_mod_id mod_id);
|
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
|
* @be_soc: dp_soc_be pointer
|
||||||
* @func: function to be called for each peer
|
* @func: function to be called for each peer
|
||||||
* @arg: argument need to be passed to func
|
* @arg: argument need to be passed to func
|
||||||
*
|
*
|
||||||
* Return: None
|
* Return: None
|
||||||
*/
|
*/
|
||||||
void dp_mcast_mlo_iter_ptnr_soc(struct dp_soc_be *be_soc,
|
void dp_mlo_iter_ptnr_soc(struct dp_soc_be *be_soc,
|
||||||
dp_ptnr_soc_iter_func func,
|
dp_ptnr_soc_iter_func func,
|
||||||
void *arg);
|
void *arg);
|
||||||
/**
|
/**
|
||||||
* dp_mlo_get_mcast_primary_vdev() - get ref to mcast primary vdev
|
* dp_mlo_get_mcast_primary_vdev() - get ref to mcast primary vdev
|
||||||
* @be_soc: dp_soc_be pointer
|
* @be_soc: dp_soc_be pointer
|
||||||
|
@@ -112,7 +112,7 @@ static inline void dp_wds_ext_peer_learn_be(struct dp_soc *soc,
|
|||||||
&ta_txrx_peer->wds_ext.init);
|
&ta_txrx_peer->wds_ext.init);
|
||||||
|
|
||||||
if (qdf_unlikely(ta_txrx_peer->nawds_enabled &&
|
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(
|
ta_base_peer = dp_get_primary_link_peer_by_id(
|
||||||
soc,
|
soc,
|
||||||
ta_txrx_peer->peer_id,
|
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];
|
uint32_t rx_bufs_reaped[WLAN_MAX_MLO_CHIPS][MAX_PDEV_CNT];
|
||||||
uint8_t mac_id = 0;
|
uint8_t mac_id = 0;
|
||||||
struct dp_pdev *rx_pdev;
|
struct dp_pdev *rx_pdev;
|
||||||
bool enh_flag;
|
uint8_t enh_flag;
|
||||||
struct dp_srng *dp_rxdma_srng;
|
struct dp_srng *dp_rxdma_srng;
|
||||||
struct rx_desc_pool *rx_desc_pool;
|
struct rx_desc_pool *rx_desc_pool;
|
||||||
struct dp_soc *soc = int_ctx->soc;
|
struct dp_soc *soc = int_ctx->soc;
|
||||||
@@ -565,7 +565,8 @@ done:
|
|||||||
|
|
||||||
rx_bufs_used++;
|
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);
|
link_id = ((dp_rx_get_msdu_hw_link_id(nbuf)) + 1);
|
||||||
if (link_id < 1 || link_id > DP_MAX_MLO_LINKS)
|
if (link_id < 1 || link_id > DP_MAX_MLO_LINKS)
|
||||||
link_id = 0;
|
link_id = 0;
|
||||||
|
@@ -288,9 +288,9 @@ static void dp_mlo_soc_teardown(struct cdp_soc_t *soc_hdl,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/* During the teardown drain the Rx buffers if any exist in the ring */
|
/* During the teardown drain the Rx buffers if any exist in the ring */
|
||||||
dp_mcast_mlo_iter_ptnr_soc(be_soc,
|
dp_mlo_iter_ptnr_soc(be_soc,
|
||||||
dp_mlo_soc_drain_rx_buf,
|
dp_mlo_soc_drain_rx_buf,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
dp_mlo_set_soc_by_chip_id(mlo_ctxt, NULL, be_soc->mlo_chip_id);
|
dp_mlo_set_soc_by_chip_id(mlo_ctxt, NULL, be_soc->mlo_chip_id);
|
||||||
be_soc->ml_ctxt = NULL;
|
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
|
#ifdef WLAN_MCAST_MLO
|
||||||
void dp_mcast_mlo_iter_ptnr_soc(struct dp_soc_be *be_soc,
|
void dp_mlo_iter_ptnr_soc(struct dp_soc_be *be_soc,
|
||||||
dp_ptnr_soc_iter_func func,
|
dp_ptnr_soc_iter_func func,
|
||||||
void *arg)
|
void *arg)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
struct dp_mlo_ctxt *dp_mlo = be_soc->ml_ctxt;
|
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,
|
void dp_mcast_mlo_iter_ptnr_vdev(struct dp_soc_be *be_soc,
|
||||||
struct dp_vdev_be *be_vdev,
|
struct dp_vdev_be *be_vdev,
|
||||||
|
@@ -7872,9 +7872,11 @@ static QDF_STATUS dp_txrx_peer_detach(struct dp_soc *soc, struct dp_peer *peer)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline
|
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 (DP_MAX_MLO_LINKS + 1);
|
||||||
}
|
}
|
||||||
return 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};
|
struct cdp_txrx_peer_params_update params = {0};
|
||||||
uint8_t stats_arr_size = 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) +
|
txrx_peer = (struct dp_txrx_peer *)qdf_mem_malloc(sizeof(*txrx_peer) +
|
||||||
(stats_arr_size *
|
(stats_arr_size *
|
||||||
|
@@ -2491,7 +2491,7 @@ void dp_rx_msdu_stats_update(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
|||||||
{
|
{
|
||||||
bool is_not_amsdu;
|
bool is_not_amsdu;
|
||||||
struct dp_vdev *vdev = txrx_peer->vdev;
|
struct dp_vdev *vdev = txrx_peer->vdev;
|
||||||
bool enh_flag;
|
uint8_t enh_flag;
|
||||||
qdf_ether_header_t *eh;
|
qdf_ether_header_t *eh;
|
||||||
uint16_t msdu_len = QDF_NBUF_CB_RX_PKT_LEN(nbuf);
|
uint16_t msdu_len = QDF_NBUF_CB_RX_PKT_LEN(nbuf);
|
||||||
|
|
||||||
|
@@ -2417,14 +2417,19 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
|||||||
continue;
|
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(
|
link_id = ((dp_rx_peer_mdata_link_id_get(
|
||||||
soc,
|
soc,
|
||||||
peer_meta_data)) + 1);
|
peer_meta_data)) + 1);
|
||||||
if (link_id < 1 || link_id > DP_MAX_MLO_LINKS)
|
if (link_id < 1 || link_id > DP_MAX_MLO_LINKS)
|
||||||
link_id = 0;
|
link_id = 0;
|
||||||
} else
|
} else {
|
||||||
link_id = 0;
|
link_id = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (wbm_err_info.wbm_err_src == HAL_RX_WBM_ERR_SRC_REO) {
|
if (wbm_err_info.wbm_err_src == HAL_RX_WBM_ERR_SRC_REO) {
|
||||||
if (wbm_err_info.reo_psh_rsn
|
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
|
rx.err.reo_error
|
||||||
[wbm_err_info.reo_err_code], 1);
|
[wbm_err_info.reo_err_code], 1);
|
||||||
/* increment @pdev level */
|
/* increment @pdev level */
|
||||||
pool_id = wbm_err_info.pool_id;
|
|
||||||
dp_pdev = dp_get_pdev_for_lmac_id(soc, pool_id);
|
|
||||||
if (dp_pdev)
|
if (dp_pdev)
|
||||||
DP_STATS_INC(dp_pdev, err.reo_error,
|
DP_STATS_INC(dp_pdev, err.reo_error,
|
||||||
1);
|
1);
|
||||||
@@ -2545,8 +2548,6 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
|||||||
rx.err.rxdma_error
|
rx.err.rxdma_error
|
||||||
[wbm_err_info.rxdma_err_code], 1);
|
[wbm_err_info.rxdma_err_code], 1);
|
||||||
/* increment @pdev level */
|
/* increment @pdev level */
|
||||||
pool_id = wbm_err_info.pool_id;
|
|
||||||
dp_pdev = dp_get_pdev_for_lmac_id(soc, pool_id);
|
|
||||||
if (dp_pdev)
|
if (dp_pdev)
|
||||||
DP_STATS_INC(dp_pdev,
|
DP_STATS_INC(dp_pdev,
|
||||||
err.rxdma_error, 1);
|
err.rxdma_error, 1);
|
||||||
|
@@ -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)
|
if (link_id < 1 || link_id > DP_MAX_MLO_LINKS)
|
||||||
link_id = 0;
|
link_id = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
dp_tx_update_connectivity_stats(soc, vdev, tx_desc, ts->status);
|
dp_tx_update_connectivity_stats(soc, vdev, tx_desc, ts->status);
|
||||||
dp_tx_update_uplink_delay(soc, vdev, ts);
|
dp_tx_update_uplink_delay(soc, vdev, ts);
|
||||||
|
|
||||||
|
@@ -3391,7 +3391,8 @@ struct dp_pdev {
|
|||||||
bool is_pdev_down;
|
bool is_pdev_down;
|
||||||
|
|
||||||
/* Enhanced Stats is enabled */
|
/* Enhanced Stats is enabled */
|
||||||
bool enhanced_stats_en;
|
uint8_t enhanced_stats_en:1,
|
||||||
|
link_peer_stats:1;
|
||||||
|
|
||||||
/* Flag to indicate fast RX */
|
/* Flag to indicate fast RX */
|
||||||
bool rx_fast_flag;
|
bool rx_fast_flag;
|
||||||
|
@@ -1308,6 +1308,10 @@ struct cdp_mon_ops dp_ops_mon_1_0 = {
|
|||||||
.soc_config_full_mon_mode = dp_soc_config_full_mon_mode,
|
.soc_config_full_mon_mode = dp_soc_config_full_mon_mode,
|
||||||
.get_mon_pdev_rx_stats = dp_pdev_get_rx_mon_stats,
|
.get_mon_pdev_rx_stats = dp_pdev_get_rx_mon_stats,
|
||||||
.txrx_enable_mon_reap_timer = dp_enable_mon_reap_timer,
|
.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
|
#ifdef QCA_SUPPORT_LITE_MONITOR
|
||||||
.txrx_set_lite_mon_config = NULL,
|
.txrx_set_lite_mon_config = NULL,
|
||||||
.txrx_get_lite_mon_config = NULL,
|
.txrx_get_lite_mon_config = NULL,
|
||||||
|
@@ -1664,6 +1664,10 @@ struct cdp_mon_ops dp_ops_mon_2_0 = {
|
|||||||
.soc_config_full_mon_mode = NULL,
|
.soc_config_full_mon_mode = NULL,
|
||||||
.get_mon_pdev_rx_stats = dp_pdev_get_rx_mon_stats,
|
.get_mon_pdev_rx_stats = dp_pdev_get_rx_mon_stats,
|
||||||
.txrx_enable_mon_reap_timer = NULL,
|
.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
|
#ifdef QCA_SUPPORT_LITE_MONITOR
|
||||||
.txrx_set_lite_mon_config = dp_lite_mon_set_config,
|
.txrx_set_lite_mon_config = dp_lite_mon_set_config,
|
||||||
.txrx_get_lite_mon_config = dp_lite_mon_get_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
|
#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
|
||||||
|
@@ -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;
|
return (struct dp_mon_pdev_be *)mon_pdev;
|
||||||
}
|
}
|
||||||
#endif
|
#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_ */
|
#endif /* _DP_MON_2_0_H_ */
|
||||||
|
@@ -1941,12 +1941,13 @@ static void dp_mon_tx_enable_enhanced_stats(struct dp_pdev *pdev)
|
|||||||
*
|
*
|
||||||
* Return: QDF_STATUS
|
* Return: QDF_STATUS
|
||||||
*/
|
*/
|
||||||
static QDF_STATUS
|
QDF_STATUS
|
||||||
dp_enable_enhanced_stats(struct cdp_soc_t *soc, uint8_t pdev_id)
|
dp_enable_enhanced_stats(struct cdp_soc_t *soc, uint8_t pdev_id)
|
||||||
{
|
{
|
||||||
struct dp_pdev *pdev = NULL;
|
struct dp_pdev *pdev = NULL;
|
||||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||||
struct dp_mon_pdev *mon_pdev;
|
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 = dp_get_pdev_from_soc_pdev_id_wifi3((struct dp_soc *)soc,
|
||||||
pdev_id);
|
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);
|
dp_cal_client_timer_start(mon_pdev->cal_client_ctx);
|
||||||
|
|
||||||
mon_pdev->enhanced_stats_en = 1;
|
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);
|
dp_mon_filter_setup_enhanced_stats(pdev);
|
||||||
status = dp_mon_filter_update(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_mon_filter_reset_enhanced_stats(pdev);
|
||||||
dp_cal_client_timer_stop(mon_pdev->cal_client_ctx);
|
dp_cal_client_timer_stop(mon_pdev->cal_client_ctx);
|
||||||
mon_pdev->enhanced_stats_en = 0;
|
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;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2005,7 +2009,7 @@ static void dp_mon_tx_disable_enhanced_stats(struct dp_pdev *pdev)
|
|||||||
*
|
*
|
||||||
* Return: QDF_STATUS
|
* Return: QDF_STATUS
|
||||||
*/
|
*/
|
||||||
static QDF_STATUS
|
QDF_STATUS
|
||||||
dp_disable_enhanced_stats(struct cdp_soc_t *soc, uint8_t pdev_id)
|
dp_disable_enhanced_stats(struct cdp_soc_t *soc, uint8_t pdev_id)
|
||||||
{
|
{
|
||||||
struct dp_pdev *pdev =
|
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);
|
dp_cal_client_timer_stop(mon_pdev->cal_client_ctx);
|
||||||
|
|
||||||
mon_pdev->enhanced_stats_en = 0;
|
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);
|
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 =
|
ops->ctrl_ops->txrx_update_peer_pkt_capture_params =
|
||||||
dp_peer_update_pkt_capture_params;
|
dp_peer_update_pkt_capture_params;
|
||||||
#endif /* WLAN_TX_PKT_CAPTURE_ENH || WLAN_RX_PKT_CAPTURE_ENH */
|
#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
|
#ifdef WDI_EVENT_ENABLE
|
||||||
ops->ctrl_ops->txrx_get_pldev = dp_get_pldev;
|
ops->ctrl_ops->txrx_get_pldev = dp_get_pldev;
|
||||||
#endif
|
#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)
|
#if defined(WLAN_TX_PKT_CAPTURE_ENH) || defined(WLAN_RX_PKT_CAPTURE_ENH)
|
||||||
ops->ctrl_ops->txrx_update_peer_pkt_capture_params = NULL;
|
ops->ctrl_ops->txrx_update_peer_pkt_capture_params = NULL;
|
||||||
#endif /* WLAN_TX_PKT_CAPTURE_ENH || WLAN_RX_PKT_CAPTURE_ENH */
|
#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
|
#ifdef WDI_EVENT_ENABLE
|
||||||
ops->ctrl_ops->txrx_get_pldev = NULL;
|
ops->ctrl_ops->txrx_get_pldev = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
@@ -1064,7 +1064,7 @@ struct dp_mon_pdev {
|
|||||||
/* Neighnour peer list */
|
/* Neighnour peer list */
|
||||||
TAILQ_HEAD(, dp_neighbour_peer) neighbour_peers_list;
|
TAILQ_HEAD(, dp_neighbour_peer) neighbour_peers_list;
|
||||||
/* Enhanced Stats is enabled */
|
/* Enhanced Stats is enabled */
|
||||||
bool enhanced_stats_en;
|
uint8_t enhanced_stats_en;
|
||||||
qdf_nbuf_queue_t rx_status_q;
|
qdf_nbuf_queue_t rx_status_q;
|
||||||
|
|
||||||
/* 128 bytes mpdu header queue per user for ppdu */
|
/* 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,
|
bool dp_enable_mon_reap_timer(struct cdp_soc_t *soc_hdl,
|
||||||
enum cdp_mon_reap_source source, bool enable);
|
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
|
* dp_monitor_lite_mon_disable_rx() - disables rx lite mon
|
||||||
* @pdev: dp pdev
|
* @pdev: dp pdev
|
||||||
*
|
*
|
||||||
|
@@ -1446,6 +1446,16 @@
|
|||||||
CFG_INI_BOOL("peer_ext_stats", \
|
CFG_INI_BOOL("peer_ext_stats", \
|
||||||
false, "Peer extended 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 \
|
#define CFG_DP_PEER_JITTER_STATS \
|
||||||
CFG_INI_BOOL("peer_jitter_stats", \
|
CFG_INI_BOOL("peer_jitter_stats", \
|
||||||
false, "Peer Jitter stats")
|
false, "Peer Jitter stats")
|
||||||
@@ -1973,6 +1983,7 @@
|
|||||||
CFG(CFG_DP_REO_RINGS_MAP) \
|
CFG(CFG_DP_REO_RINGS_MAP) \
|
||||||
CFG(CFG_DP_PEER_EXT_STATS) \
|
CFG(CFG_DP_PEER_EXT_STATS) \
|
||||||
CFG(CFG_DP_PEER_JITTER_STATS) \
|
CFG(CFG_DP_PEER_JITTER_STATS) \
|
||||||
|
CFG(CFG_DP_PEER_LINK_STATS) \
|
||||||
CFG(CFG_DP_RX_BUFF_POOL_ENABLE) \
|
CFG(CFG_DP_RX_BUFF_POOL_ENABLE) \
|
||||||
CFG(CFG_DP_RX_REFILL_BUFF_POOL_ENABLE) \
|
CFG(CFG_DP_RX_REFILL_BUFF_POOL_ENABLE) \
|
||||||
CFG(CFG_DP_RX_PENDING_HL_THRESHOLD) \
|
CFG(CFG_DP_RX_PENDING_HL_THRESHOLD) \
|
||||||
|
@@ -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->pext_stats_enabled = cfg_get(psoc, CFG_DP_PEER_EXT_STATS);
|
||||||
wlan_cfg_ctx->jitter_stats_enabled =
|
wlan_cfg_ctx->jitter_stats_enabled =
|
||||||
cfg_get(psoc, CFG_DP_PEER_JITTER_STATS);
|
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 =
|
wlan_cfg_ctx->is_rx_buff_pool_enabled =
|
||||||
cfg_get(psoc, CFG_DP_RX_BUFF_POOL_ENABLE);
|
cfg_get(psoc, CFG_DP_RX_BUFF_POOL_ENABLE);
|
||||||
wlan_cfg_ctx->is_rx_refill_buff_pool_enabled =
|
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;
|
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
|
#ifdef WLAN_FEATURE_RX_PREALLOC_BUFFER_POOL
|
||||||
bool wlan_cfg_is_rx_buffer_pool_enabled(struct wlan_cfg_dp_soc_ctxt *cfg)
|
bool wlan_cfg_is_rx_buffer_pool_enabled(struct wlan_cfg_dp_soc_ctxt *cfg)
|
||||||
{
|
{
|
||||||
|
@@ -298,6 +298,7 @@ struct wlan_srng_cfg {
|
|||||||
* @radio2_rx_default_reo:
|
* @radio2_rx_default_reo:
|
||||||
* @wow_check_rx_pending_enable: Enable RX frame pending check in WoW
|
* @wow_check_rx_pending_enable: Enable RX frame pending check in WoW
|
||||||
* @jitter_stats_enabled: true if jitter stats are enabled
|
* @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_ring_size: IPA tx ring size
|
||||||
* @ipa_tx_comp_ring_size: IPA tx completion ring size
|
* @ipa_tx_comp_ring_size: IPA tx completion ring size
|
||||||
* @ipa_tx_alt_ring_size: IPA tx alt 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;
|
uint8_t radio2_rx_default_reo;
|
||||||
bool wow_check_rx_pending_enable;
|
bool wow_check_rx_pending_enable;
|
||||||
bool jitter_stats_enabled;
|
bool jitter_stats_enabled;
|
||||||
|
bool peer_link_stats_enabled;
|
||||||
#ifdef IPA_OFFLOAD
|
#ifdef IPA_OFFLOAD
|
||||||
uint32_t ipa_tx_ring_size;
|
uint32_t ipa_tx_ring_size;
|
||||||
uint32_t ipa_tx_comp_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);
|
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
|
#ifdef IPA_OFFLOAD
|
||||||
/**
|
/**
|
||||||
* wlan_cfg_ipa_tx_ring_size - Get Tx DMA ring size (TCL Data Ring)
|
* wlan_cfg_ipa_tx_ring_size - Get Tx DMA ring size (TCL Data Ring)
|
||||||
|
Reference in New Issue
Block a user