From 0dcfff9b90bfde52c019a2d89920884f13b77f4b Mon Sep 17 00:00:00 2001 From: Harsh Kumar Bijlani Date: Fri, 2 Jul 2021 17:33:27 +0530 Subject: [PATCH] qcacmn: Define cdp interface struct and API to fetch dp soc stats Define a new cdp interface structure and API for soc stats for use by upper layers to fetch dp soc stats. Change-Id: I314e952546551003da2ca7f69b2e1aa23c126e66 --- dp/inc/cdp_txrx_host_stats.h | 23 +++++++++++++++++++++++ dp/inc/cdp_txrx_ops.h | 3 +++ dp/inc/cdp_txrx_stats_struct.h | 30 ++++++++++++++++++++++++++++++ dp/wifi3.0/dp_main.c | 25 +++++++++++++++++++++++++ 4 files changed, 81 insertions(+) diff --git a/dp/inc/cdp_txrx_host_stats.h b/dp/inc/cdp_txrx_host_stats.h index 156d094980..128aac2ef1 100644 --- a/dp/inc/cdp_txrx_host_stats.h +++ b/dp/inc/cdp_txrx_host_stats.h @@ -489,6 +489,29 @@ cdp_txrx_get_peer_stats_param(ol_txrx_soc_handle soc, uint8_t vdev_id, buf); } +/** + * @brief Call to get soc stats + * + * @param soc - soc handle + * @soc_stats - buffer for cdp soc stats + * @return - QDF_STATUS + */ +static inline QDF_STATUS +cdp_host_get_soc_stats(ol_txrx_soc_handle soc, struct cdp_soc_stats *soc_stats) +{ + if (!soc || !soc->ops) { + dp_cdp_debug("Invalid Instance"); + QDF_BUG(0); + return QDF_STATUS_E_FAILURE; + } + + if (!soc->ops->host_stats_ops || + !soc->ops->host_stats_ops->txrx_get_soc_stats) + return QDF_STATUS_E_FAILURE; + + return soc->ops->host_stats_ops->txrx_get_soc_stats(soc, soc_stats); +} + /** * @brief Call to get peer stats * diff --git a/dp/inc/cdp_txrx_ops.h b/dp/inc/cdp_txrx_ops.h index 729d6eed19..9fe460a466 100644 --- a/dp/inc/cdp_txrx_ops.h +++ b/dp/inc/cdp_txrx_ops.h @@ -934,6 +934,9 @@ struct cdp_host_stats_ops { (*txrx_get_peer_stats)(struct cdp_soc_t *soc, uint8_t vdev_id, uint8_t *peer_mac, struct cdp_peer_stats *peer_stats); + QDF_STATUS + (*txrx_get_soc_stats)(struct cdp_soc_t *soc, + struct cdp_soc_stats *soc_stats); QDF_STATUS (*txrx_reset_peer_ald_stats)(struct cdp_soc_t *soc, uint8_t vdev_id, diff --git a/dp/inc/cdp_txrx_stats_struct.h b/dp/inc/cdp_txrx_stats_struct.h index 69a749340d..07f42c7408 100644 --- a/dp/inc/cdp_txrx_stats_struct.h +++ b/dp/inc/cdp_txrx_stats_struct.h @@ -1900,6 +1900,36 @@ struct cdp_cfr_rcc_stats { struct cdp_cfr_rcc_stats { }; #endif + +/* struct cdp_soc_stats - soc stats + * @tx.egress: Total packets transmitted + * @rx.ingress: Total rx packets count + * @rx.err_ring_pkts: Total Packets in Rx Error ring + * @rx.rx_frags: No of Fragments + * @rx.reo_reinject: No of reinjected packets + * @rx.bar_frame: Number of bar frames received + * @rx.err.rejected: RX msdu rejected count on delivery to vdev stack_fn + * @rx.err.raw_frm_drop: RX raw frame dropped count + */ +struct cdp_soc_stats { + struct { + struct cdp_pkt_info egress; + } tx; + + struct { + struct cdp_pkt_info ingress; + uint32_t err_ring_pkts; + uint32_t rx_frags; + uint32_t reo_reinject; + uint32_t bar_frame; + + struct { + uint32_t rx_rejected; + uint32_t rx_raw_frm_drop; + } err; + } rx; +}; + /* struct cdp_pdev_stats - pdev stats * @msdu_not_done: packets dropped because msdu done bit not set * @mec:Multicast Echo check diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 36b5324e3e..ebbebe268f 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -10619,6 +10619,30 @@ 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; +} + /* dp_txrx_get_peer_stats - will return cdp_peer_stats * @soc: soc handle * @vdev_id: id of vdev handle @@ -12458,6 +12482,7 @@ static struct cdp_host_stats_ops dp_ops_host_stats = { .txrx_stats_publish = dp_txrx_stats_publish, .txrx_get_vdev_stats = dp_txrx_get_vdev_stats, .txrx_get_peer_stats = dp_txrx_get_peer_stats, + .txrx_get_soc_stats = dp_txrx_get_soc_stats, .txrx_get_peer_stats_param = dp_txrx_get_peer_stats_param, .txrx_reset_peer_stats = dp_txrx_reset_peer_stats, .txrx_get_pdev_stats = dp_txrx_get_pdev_stats,