Explorar o código

qcacmn: Update pdev telemetry stats to per AC level

Update pdev telemetry stats to per AC level

Change-Id: I0f3680875d28b6c4a7e671941373e42ee886cb16
CRs-Fixed: 3316937
Himanshu Batra %!s(int64=2) %!d(string=hai) anos
pai
achega
f72f76ba4c
Modificáronse 3 ficheiros con 46 adicións e 10 borrados
  1. 2 2
      dp/inc/cdp_txrx_stats_struct.h
  2. 4 4
      dp/wifi3.0/dp_stats.c
  3. 40 4
      dp/wifi3.0/monitor/dp_mon.c

+ 2 - 2
dp/inc/cdp_txrx_stats_struct.h

@@ -2814,8 +2814,8 @@ struct cdp_soc_stats {
  * @link_airtime: pdev airtime usage per ac per sec
  */
 struct cdp_pdev_telemetry_stats {
-	uint32_t tx_mpdu_failed;
-	uint32_t tx_mpdu_total;
+	uint32_t tx_mpdu_failed[WME_AC_MAX];
+	uint32_t tx_mpdu_total[WME_AC_MAX];
 	uint32_t link_airtime[WME_AC_MAX];
 };
 

+ 4 - 4
dp/wifi3.0/dp_stats.c

@@ -9170,12 +9170,12 @@ dp_get_pdev_telemetry_stats(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
 	/* consumption is in micro seconds, convert it to seconds and
 	 * then calculate %age per sec
 	 */
-	for (ac = 0; ac < WME_AC_MAX; ac++)
+	for (ac = 0; ac < WME_AC_MAX; ac++) {
 		stats->link_airtime[ac] =
 			((pdev->stats.telemetry_stats.link_airtime[ac] * 100) / 1000000);
-	stats->tx_mpdu_failed = pdev->stats.telemetry_stats.tx_mpdu_failed;
-	stats->tx_mpdu_total = pdev->stats.telemetry_stats.tx_mpdu_total;
-
+		stats->tx_mpdu_failed[ac] = pdev->stats.telemetry_stats.tx_mpdu_failed[ac];
+		stats->tx_mpdu_total[ac] = pdev->stats.telemetry_stats.tx_mpdu_total[ac];
+	}
 	return QDF_STATUS_SUCCESS;
 }
 

+ 40 - 4
dp/wifi3.0/monitor/dp_mon.c

@@ -2084,10 +2084,6 @@ void dp_peer_update_telemetry_stats(struct dp_peer *peer)
 
 	mon_peer = peer->monitor_peer;
 	if (qdf_likely(mon_peer)) {
-		DP_STATS_INC(pdev, telemetry_stats.tx_mpdu_failed,
-			     mon_peer->stats.tx.retries);
-		DP_STATS_INC(pdev, telemetry_stats.tx_mpdu_total,
-			     mon_peer->stats.tx.tx_mpdus_tried);
 		for (ac = 0; ac < WME_AC_MAX; ac++) {
 			mon_peer->stats.airtime_consumption[ac].avg_consumption_per_sec =
 					mon_peer->stats.airtime_consumption[ac].consumption;
@@ -2732,6 +2728,44 @@ static uint32_t dp_mon_get_ru_width_from_ru_size(uint16_t ru_size)
 }
 #endif
 
+#ifdef WLAN_TELEMETRY_STATS_SUPPORT
+/*
+ * dp_pdev_telemetry_stats_update() - Update pdev telemetry stats
+ * @pdev: Datapath pdev handle
+ * @ppdu: PPDU Descriptor
+ *
+ * Return: None
+ */
+static void
+dp_pdev_telemetry_stats_update(
+		struct dp_pdev *pdev,
+		struct cdp_tx_completion_ppdu_user *ppdu)
+{
+	uint16_t mpdu_tried;
+	uint16_t mpdu_failed;
+	uint16_t num_mpdu;
+	uint8_t ac = 0;
+
+	num_mpdu = ppdu->mpdu_success;
+	mpdu_tried = ppdu->mpdu_tried_ucast + ppdu->mpdu_tried_mcast;
+	mpdu_failed = mpdu_tried - num_mpdu;
+
+	ac = TID_TO_WME_AC(ppdu->tid);
+
+	DP_STATS_INC(pdev, telemetry_stats.tx_mpdu_failed[ac],
+		     mpdu_failed);
+
+	DP_STATS_INC(pdev, telemetry_stats.tx_mpdu_total[ac],
+		     mpdu_tried);
+}
+#else
+static inline void
+dp_pdev_telemetry_stats_update(
+		struct dp_pdev *pdev,
+		struct cdp_tx_completion_ppdu_user *ppdu)
+{ }
+#endif
+
 /*
  * dp_tx_stats_update() - Update per-peer statistics
  * @pdev: Datapath pdev handle
@@ -2790,6 +2824,7 @@ dp_tx_stats_update(struct dp_pdev *pdev, struct dp_peer *peer,
 		 * mpdu failed equal mpdu tried.
 		 */
 		DP_STATS_INC(mon_peer, tx.retries, mpdu_failed);
+		dp_pdev_telemetry_stats_update(pdev, ppdu);
 		return;
 	}
 
@@ -2896,6 +2931,7 @@ dp_tx_stats_update(struct dp_pdev *pdev, struct dp_peer *peer,
 		mon_ops->mon_tx_stats_update(mon_peer, ppdu);
 
 	dp_tx_rate_stats_update(peer, ppdu);
+	dp_pdev_telemetry_stats_update(pdev, ppdu);
 
 	dp_peer_stats_notify(pdev, peer);