Эх сурвалжийг харах

qcacmn: dp stats aggregate handling for bridge vap in mlo

dp stats aggregate handling for bridge vap in mlo

Change-Id: I4bb934776a35f76b091694de024b173c744ac087
CRs-Fixed: 3557225
Mukul Dhiman 1 жил өмнө
parent
commit
fe14b1901b

+ 46 - 2
dp/wifi3.0/be/mlo/dp_mlo.c

@@ -662,6 +662,32 @@ void dp_aggregate_all_vdev_stats(
 						   src_vdev_stats);
 }
 
+/**
+ * dp_mlo_vdev_stats_aggr_bridge_vap() - aggregate bridge vdev stats
+ * @be_vdev: Dp Vdev handle
+ * @bridge_vdev: Dp vdev handle for bridge vdev
+ * @arg: buffer for target vdev stats
+ *
+ * return: void
+ */
+static
+void dp_mlo_vdev_stats_aggr_bridge_vap(struct dp_vdev_be *be_vdev,
+				       struct dp_vdev *bridge_vdev,
+				       void *arg)
+{
+	struct cdp_vdev_stats *tgt_vdev_stats = (struct cdp_vdev_stats *)arg;
+	struct dp_vdev_be *bridge_be_vdev = NULL;
+
+	bridge_be_vdev = dp_get_be_vdev_from_dp_vdev(bridge_vdev);
+	if (!bridge_be_vdev)
+		return;
+
+	dp_aggregate_all_vdev_stats(tgt_vdev_stats, &bridge_vdev->stats);
+	dp_aggregate_all_vdev_stats(tgt_vdev_stats, &bridge_be_vdev->mlo_stats);
+	dp_vdev_iterate_peer(bridge_vdev, dp_update_vdev_stats, tgt_vdev_stats,
+			     DP_MOD_ID_GENERIC_STATS);
+}
+
 /**
  * dp_aggregate_interface_stats_based_on_peer_type() - aggregate stats at
  * VDEV level based on peer type connected to vdev
@@ -679,11 +705,13 @@ void dp_aggregate_interface_stats_based_on_peer_type(
 {
 	struct cdp_vdev_stats *tgt_vdev_stats = NULL;
 	struct dp_vdev_be *be_vdev = NULL;
+	struct dp_soc_be *be_soc = NULL;
 
 	if (!vdev || !vdev->pdev)
 		return;
 
 	tgt_vdev_stats = vdev_stats;
+	be_soc = dp_get_be_soc_from_dp_soc(vdev->pdev->soc);
 	be_vdev = dp_get_be_vdev_from_dp_vdev(vdev);
 	if (!be_vdev)
 		return;
@@ -692,6 +720,13 @@ void dp_aggregate_interface_stats_based_on_peer_type(
 		dp_aggregate_all_vdev_stats(tgt_vdev_stats,
 					    &vdev->stats);
 	} else {
+		if (be_vdev->mcast_primary) {
+			dp_mlo_iter_ptnr_vdev(be_soc, be_vdev,
+					      dp_mlo_vdev_stats_aggr_bridge_vap,
+					      (void *)vdev_stats,
+					      DP_MOD_ID_GENERIC_STATS,
+					      DP_BRIDGE_VDEV_ITER);
+		}
 		dp_aggregate_vdev_ingress_stats(tgt_vdev_stats,
 						&vdev->stats);
 		dp_aggregate_vdev_stats_for_unmapped_peers(
@@ -719,14 +754,23 @@ void dp_aggregate_interface_stats(struct dp_vdev *vdev,
 				  struct cdp_vdev_stats *vdev_stats)
 {
 	struct dp_vdev_be *be_vdev = NULL;
+	struct dp_soc_be *be_soc = NULL;
 
 	if (!vdev || !vdev->pdev)
 		return;
 
+	be_soc = dp_get_be_soc_from_dp_soc(vdev->pdev->soc);
 	be_vdev = dp_get_be_vdev_from_dp_vdev(vdev);
 	if (!be_vdev)
 		return;
 
+	if (be_vdev->mcast_primary) {
+		dp_mlo_iter_ptnr_vdev(be_soc, be_vdev,
+				      dp_mlo_vdev_stats_aggr_bridge_vap,
+				      (void *)vdev_stats, DP_MOD_ID_GENERIC_STATS,
+				      DP_BRIDGE_VDEV_ITER);
+	}
+
 	dp_aggregate_all_vdev_stats(vdev_stats, &be_vdev->mlo_stats);
 	dp_aggregate_all_vdev_stats(vdev_stats, &vdev->stats);
 
@@ -865,7 +909,7 @@ static QDF_STATUS dp_mlo_get_mld_vdev_stats(struct cdp_soc_t *soc_hdl,
 				      dp_mlo_aggr_ptnr_iface_stats_mlo_links,
 				      buf,
 				      DP_MOD_ID_GENERIC_STATS,
-				      DP_ALL_VDEV_ITER);
+				      DP_LINK_VDEV_ITER);
 	} else {
 		dp_aggregate_interface_stats(vdev, buf);
 
@@ -876,7 +920,7 @@ static QDF_STATUS dp_mlo_get_mld_vdev_stats(struct cdp_soc_t *soc_hdl,
 		dp_mlo_iter_ptnr_vdev(be_soc, vdev_be,
 				      dp_mlo_aggr_ptnr_iface_stats, buf,
 				      DP_MOD_ID_GENERIC_STATS,
-				      DP_ALL_VDEV_ITER);
+				      DP_LINK_VDEV_ITER);
 	}
 
 complete: