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;