qcacmn: Add more stats to cdp_soc_stats structure

Add more stats to cdp_soc_stats interface structure to ship it to
userspace. Move soc, delay and jitter stats apis from dp_main.c to
dp_stats.c.

Change-Id: Idb7f8b706e8744350d7fb2e8802d9303b3f25b5c
CRs-Fixed: 3084586
This commit is contained in:
Subrat Mishra
2021-11-15 11:48:45 +05:30
committed by Madan Koyyalamudi
parent 362e95bae6
commit 0a5f55fb4a
4 changed files with 574 additions and 164 deletions

View File

@@ -9951,145 +9951,6 @@ static QDF_STATUS dp_txrx_update_vdev_host_stats(struct cdp_soc_t *soc_hdl,
return QDF_STATUS_SUCCESS;
}
/* dp_txrx_get_soc_stats - will return cdp_soc_stats
* @soc_hdl: soc handle
* @soc_stats: buffer to hold the values
*
* return: status success/failure
*/
static QDF_STATUS
dp_txrx_get_soc_stats(struct cdp_soc_t *soc_hdl,
struct cdp_soc_stats *soc_stats)
{
struct dp_soc *soc = (struct dp_soc *)soc_hdl;
soc_stats->tx.egress = soc->stats.tx.egress;
soc_stats->rx.ingress = soc->stats.rx.ingress;
soc_stats->rx.err_ring_pkts = soc->stats.rx.err_ring_pkts;
soc_stats->rx.rx_frags = soc->stats.rx.rx_frags;
soc_stats->rx.reo_reinject = soc->stats.rx.reo_reinject;
soc_stats->rx.bar_frame = soc->stats.rx.bar_frame;
soc_stats->rx.err.rx_rejected = soc->stats.rx.err.rejected;
soc_stats->rx.err.rx_raw_frm_drop = soc->stats.rx.err.raw_frm_drop;
return QDF_STATUS_SUCCESS;
}
#ifdef QCA_PEER_EXT_STATS
/* dp_txrx_get_peer_delay_stats - to get peer delay stats per TIDs
* @soc: soc handle
* @vdev_id: id of vdev handle
* @peer_mac: mac of DP_PEER handle
* @delay_stats: pointer to delay stats array
* return: status success/failure
*/
static QDF_STATUS
dp_txrx_get_peer_delay_stats(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
uint8_t *peer_mac,
struct cdp_delay_tid_stats *delay_stats)
{
struct dp_soc *soc = (struct dp_soc *)soc_hdl;
struct dp_peer *peer = dp_peer_find_hash_find(soc, peer_mac, 0, vdev_id,
DP_MOD_ID_CDP);
struct cdp_peer_ext_stats *pext_stats;
struct cdp_delay_rx_stats *rx_delay;
struct cdp_delay_tx_stats *tx_delay;
uint8_t tid;
if (!peer)
return QDF_STATUS_E_FAILURE;
if (!wlan_cfg_is_peer_ext_stats_enabled(soc->wlan_cfg_ctx)) {
dp_peer_unref_delete(peer, DP_MOD_ID_CDP);
return QDF_STATUS_E_FAILURE;
}
pext_stats = peer->pext_stats;
if (!pext_stats) {
dp_peer_unref_delete(peer, DP_MOD_ID_CDP);
return QDF_STATUS_E_FAILURE;
}
for (tid = 0; tid < CDP_MAX_DATA_TIDS; tid++) {
rx_delay = &delay_stats[tid].rx_delay;
dp_accumulate_delay_tid_stats(soc, pext_stats->delay_stats,
&rx_delay->to_stack_delay, tid,
CDP_HIST_TYPE_REAP_STACK);
tx_delay = &delay_stats[tid].tx_delay;
dp_accumulate_delay_tid_stats(soc, pext_stats->delay_stats,
&tx_delay->tx_swq_delay, tid,
CDP_HIST_TYPE_SW_ENQEUE_DELAY);
dp_accumulate_delay_tid_stats(soc, pext_stats->delay_stats,
&tx_delay->hwtx_delay, tid,
CDP_HIST_TYPE_HW_COMP_DELAY);
}
dp_peer_unref_delete(peer, DP_MOD_ID_CDP);
return QDF_STATUS_SUCCESS;
}
#else
static QDF_STATUS
dp_txrx_get_peer_delay_stats(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
uint8_t *peer_mac,
struct cdp_delay_tid_stats *delay_stats)
{
return QDF_STATUS_E_FAILURE;
}
#endif /* QCA_PEER_EXT_STATS */
#ifdef WLAN_PEER_JITTER
/* dp_txrx_get_peer_jitter_stats - to get peer jitter stats per TIDs
* @soc: soc handle
* @pdev_id: id of pdev handle
* @vdev_id: id of vdev handle
* @peer_mac: mac of DP_PEER handle
* @tid_stats: pointer to jitter stats array
* return: status success/failure
*/
static QDF_STATUS
dp_txrx_get_peer_jitter_stats(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
uint8_t vdev_id, uint8_t *peer_mac,
struct cdp_peer_tid_stats *tid_stats)
{
struct dp_soc *soc = (struct dp_soc *)soc_hdl;
struct dp_pdev *pdev = dp_get_pdev_from_soc_pdev_id_wifi3(soc, pdev_id);
struct dp_peer *peer;
uint8_t tid;
if (!pdev)
return QDF_STATUS_E_FAILURE;
if (!wlan_cfg_get_dp_pdev_nss_enabled(pdev->wlan_cfg_ctx))
return QDF_STATUS_E_FAILURE;
peer = dp_peer_find_hash_find(soc, peer_mac, 0, vdev_id, DP_MOD_ID_CDP);
if (!peer)
return QDF_STATUS_E_FAILURE;
for (tid = 0; tid < qdf_min(CDP_DATA_TID_MAX, DP_MAX_TIDS); tid++) {
struct dp_rx_tid *rx_tid = &peer->rx_tid[tid];
tid_stats[tid].tx_avg_jitter = rx_tid->stats.tx_avg_jitter;
tid_stats[tid].tx_avg_delay = rx_tid->stats.tx_avg_delay;
tid_stats[tid].tx_avg_err = rx_tid->stats.tx_avg_err;
tid_stats[tid].tx_total_success =
rx_tid->stats.tx_total_success;
tid_stats[tid].tx_drop = rx_tid->stats.tx_drop;
}
dp_peer_unref_delete(peer, DP_MOD_ID_CDP);
return QDF_STATUS_SUCCESS;
}
#else
static QDF_STATUS
dp_txrx_get_peer_jitter_stats(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
uint8_t vdev_id, uint8_t *peer_mac,
struct cdp_peer_tid_stats *tid_stats)
{
return QDF_STATUS_E_FAILURE;
}
#endif /* WLAN_PEER_JITTER */
/* dp_txrx_get_peer_stats - will return cdp_peer_stats
* @soc: soc handle
* @vdev_id: id of vdev handle