From 1598a12f5cdf5ff2d012eeabbf4e18afc5bb5bb7 Mon Sep 17 00:00:00 2001 From: Parikshit Gune Date: Tue, 28 Feb 2023 15:41:32 +0530 Subject: [PATCH] qcacmn: Add RX stats support for Direct switch Add support to send RX stats when Direct switch is enabled. For WDS extended mode get the stats from peer object, else take it from vdev object. These will be accumulated by PPEDS module Change-Id: I1f73c50679c416536cfc1ebaaeaec9b307e8bf56 CRs-Fixed: 3421251 --- dp/inc/cdp_txrx_ops.h | 5 +++++ dp/inc/cdp_txrx_ppe.h | 27 +++++++++++++++++++++++++++ dp/inc/cdp_txrx_stats_struct.h | 2 ++ dp/wifi3.0/be/dp_be.c | 1 + dp/wifi3.0/dp_internal.h | 2 ++ dp/wifi3.0/dp_main.c | 8 +++++--- dp/wifi3.0/dp_stats.c | 2 ++ dp/wifi3.0/dp_types.h | 2 ++ 8 files changed, 46 insertions(+), 3 deletions(-) diff --git a/dp/inc/cdp_txrx_ops.h b/dp/inc/cdp_txrx_ops.h index dedf6f7f51..3d2c689d3f 100644 --- a/dp/inc/cdp_txrx_ops.h +++ b/dp/inc/cdp_txrx_ops.h @@ -2403,6 +2403,11 @@ struct cdp_ppeds_txrx_ops { void (*ppeds_update_int_pri2tid)(struct cdp_soc_t *soc, uint8_t pri, uint8_t tid); void (*ppeds_entry_dump)(struct cdp_soc_t *soc); + void + (*ppeds_stats_sync)(struct cdp_soc_t *soc, + uint16_t vdev_id, + struct cdp_ds_vp_params *vp_params, + void *stats); }; #endif /* WLAN_SUPPORT_PPEDS */ diff --git a/dp/inc/cdp_txrx_ppe.h b/dp/inc/cdp_txrx_ppe.h index dad349d4cb..41842fd7c7 100644 --- a/dp/inc/cdp_txrx_ppe.h +++ b/dp/inc/cdp_txrx_ppe.h @@ -44,6 +44,33 @@ QDF_STATUS cdp_ppesds_vp_setup_fw_recovery(struct cdp_soc_t *soc, return QDF_STATUS_E_INVAL; } +/* + * cdp_ppesds_update_dev_stats() - Update dev stats for PPE-DS mode. + * @soc: data path soc handle + * @vp_params: VP params + * @vdev_id: vdev id + * @stats: stats pointer from ppe + * + * return: void + */ +static inline +void cdp_ppesds_update_dev_stats(struct cdp_soc_t *soc, + struct cdp_ds_vp_params *vp_params, + uint16_t vdev_id, void *stats) +{ + if (!soc || !soc->ops || !soc->ops->ppeds_ops) { + QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL, + "%s invalid instance", __func__); + return; + } + + if (soc->ops->ppeds_ops->ppeds_stats_sync) + return soc->ops->ppeds_ops->ppeds_stats_sync(soc, + vdev_id, + vp_params, + stats); +} + /** * cdp_ppesds_entry_attach() - attach the ppe vp interface. * @soc: data path soc handle diff --git a/dp/inc/cdp_txrx_stats_struct.h b/dp/inc/cdp_txrx_stats_struct.h index b450c51804..914e1700f9 100644 --- a/dp/inc/cdp_txrx_stats_struct.h +++ b/dp/inc/cdp_txrx_stats_struct.h @@ -1687,6 +1687,7 @@ struct cdp_tx_stats { * @raw: Raw Pakets received * @nawds_mcast_drop: Total multicast packets * @mec_drop: Total MEC packets dropped + * @ppeds_drop: Total DS packets dropped * @last_rx_ts: last timestamp in jiffies when RX happened * @intra_bss: Intra-bss statistics * @intra_bss.pkts: Intra BSS packets received @@ -1777,6 +1778,7 @@ struct cdp_rx_stats { struct cdp_pkt_info raw; uint32_t nawds_mcast_drop; struct cdp_pkt_info mec_drop; + struct cdp_pkt_info ppeds_drop; unsigned long last_rx_ts; struct { struct cdp_pkt_info pkts; diff --git a/dp/wifi3.0/be/dp_be.c b/dp/wifi3.0/be/dp_be.c index f67495babe..84c0bbc999 100644 --- a/dp/wifi3.0/be/dp_be.c +++ b/dp/wifi3.0/be/dp_be.c @@ -76,6 +76,7 @@ static struct cdp_ppeds_txrx_ops dp_ops_ppeds_be = { .ppeds_entry_dump = dp_ppeds_dump_ppe_vp_tbl_be, .ppeds_enable_pri2tid = dp_ppeds_vdev_enable_pri2tid_be, .ppeds_vp_setup_recovery = dp_ppeds_vp_setup_on_fw_recovery, + .ppeds_stats_sync = dp_ppeds_stats_sync_be, }; static void dp_ppeds_rings_status(struct dp_soc *soc) diff --git a/dp/wifi3.0/dp_internal.h b/dp/wifi3.0/dp_internal.h index 68e793ec60..291ce5794e 100644 --- a/dp/wifi3.0/dp_internal.h +++ b/dp/wifi3.0/dp_internal.h @@ -1960,6 +1960,8 @@ void dp_update_vdev_stats_on_peer_unmap(struct dp_vdev *vdev, _tgtobj->rx.mcast_3addr_drop += _srcobj->rx.mcast_3addr_drop; \ _tgtobj->rx.mec_drop.num += _srcobj->rx.mec_drop.num; \ _tgtobj->rx.mec_drop.bytes += _srcobj->rx.mec_drop.bytes; \ + _tgtobj->rx.ppeds_drop.num += _srcobj->rx.ppeds_drop.num; \ + _tgtobj->rx.ppeds_drop.bytes += _srcobj->rx.ppeds_drop.bytes; \ _tgtobj->rx.intra_bss.pkts.num += \ _srcobj->rx.intra_bss.pkts.num; \ _tgtobj->rx.intra_bss.pkts.bytes += \ diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index bc2b9f6210..bc19283876 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -5780,8 +5780,8 @@ static QDF_STATUS dp_vdev_getstats(struct cdp_vdev *vdev_handle, vdev_stats = qdf_mem_malloc_atomic(sizeof(struct cdp_vdev_stats)); if (!vdev_stats) { - dp_cdp_err("%pK: DP alloc failure - unable to get alloc vdev stats", - soc); + dp_err("%pK: DP alloc failure - unable to get alloc vdev stats", + soc); return QDF_STATUS_E_FAILURE; } @@ -5823,7 +5823,8 @@ static QDF_STATUS dp_vdev_getstats(struct cdp_vdev *vdev_handle, vdev_stats->rx.peer_unauth_rx_pkt_drop + vdev_stats->rx.policy_check_drop + vdev_stats->rx.nawds_mcast_drop + - vdev_stats->rx.mcast_3addr_drop; + vdev_stats->rx.mcast_3addr_drop + + vdev_stats->rx.ppeds_drop.num; qdf_mem_free(vdev_stats); @@ -5884,6 +5885,7 @@ static void dp_pdev_getstats(struct cdp_pdev *pdev_handle, pdev->stats.dropped.mon_rx_drop + pdev->stats.dropped.mon_radiotap_update_err + pdev->stats.rx.mec_drop.num + + pdev->stats.rx.ppeds_drop.num + pdev->stats.rx.multipass_rx_pkt_drop + pdev->stats.rx.peer_unauth_rx_pkt_drop + pdev->stats.rx.policy_check_drop + diff --git a/dp/wifi3.0/dp_stats.c b/dp/wifi3.0/dp_stats.c index 44cdf51fa7..c2b88362c0 100644 --- a/dp/wifi3.0/dp_stats.c +++ b/dp/wifi3.0/dp_stats.c @@ -8950,6 +8950,8 @@ void dp_update_pdev_stats(struct dp_pdev *tgtobj, srcobj->tx.last_ack_rssi; tgtobj->stats.rx.mec_drop.num += srcobj->rx.mec_drop.num; tgtobj->stats.rx.mec_drop.bytes += srcobj->rx.mec_drop.bytes; + tgtobj->stats.rx.ppeds_drop.num += srcobj->rx.ppeds_drop.num; + tgtobj->stats.rx.ppeds_drop.bytes += srcobj->rx.ppeds_drop.bytes; tgtobj->stats.rx.multipass_rx_pkt_drop += srcobj->rx.multipass_rx_pkt_drop; tgtobj->stats.rx.peer_unauth_rx_pkt_drop += diff --git a/dp/wifi3.0/dp_types.h b/dp/wifi3.0/dp_types.h index d3db24ae83..ac637ce2ad 100644 --- a/dp/wifi3.0/dp_types.h +++ b/dp/wifi3.0/dp_types.h @@ -4437,6 +4437,7 @@ struct dp_peer_extd_tx_stats { * @raw: Raw Pakets received * @nawds_mcast_drop: Total NAWDS multicast packets dropped * @mec_drop: Total MEC packets dropped + * @ppeds_drop: Total DS packets dropped * @last_rx_ts: last timestamp in jiffies when RX happened * @intra_bss: Intra BSS statistics * @intra_bss.pkts: Intra BSS packets received @@ -4471,6 +4472,7 @@ struct dp_peer_per_pkt_rx_stats { struct cdp_pkt_info raw; uint32_t nawds_mcast_drop; struct cdp_pkt_info mec_drop; + struct cdp_pkt_info ppeds_drop; unsigned long last_rx_ts; struct { struct cdp_pkt_info pkts;