Forráskód Böngészése

qcacmn: Update airtime computation to per AC level

Update airtime computation to per AC level.

Change-Id: Ia8cb890d2f1dc167ec3a2610ff5a70238d55262d
CRs-Fixed: 3281256
Himanshu Batra 2 éve
szülő
commit
6a5ab907c1

+ 1 - 1
dp/inc/cdp_txrx_stats_struct.h

@@ -2679,7 +2679,7 @@ struct cdp_peer_telemetry_stats {
 	uint32_t tx_mpdu_total;
 	uint32_t rx_mpdu_retried;
 	uint32_t rx_mpdu_total;
-	uint8_t airtime_consumption;
+	uint8_t airtime_consumption[WME_AC_MAX];
 	uint8_t snr;
 };
 #endif

+ 14 - 10
dp/wifi3.0/monitor/dp_mon.c

@@ -2060,7 +2060,7 @@ void dp_peer_update_telemetry_stats(struct dp_peer *peer)
 	struct dp_pdev *pdev;
 	struct dp_vdev *vdev;
 	struct dp_mon_peer *mon_peer = NULL;
-	uint8_t idx;
+	uint8_t idx, ac;
 
 	vdev = peer->vdev;
 	if (!vdev)
@@ -2076,14 +2076,16 @@ void dp_peer_update_telemetry_stats(struct dp_peer *peer)
 			     mon_peer->stats.tx.retries);
 		DP_STATS_INC(pdev, telemetry_stats.tx_mpdu_total,
 			     mon_peer->stats.tx.tx_mpdus_tried);
-		idx = mon_peer->stats.airtime_consumption.avg_consumption.idx;
-		mon_peer->stats.airtime_consumption.avg_consumption.avg_consumption_per_sec[idx] =
-				mon_peer->stats.airtime_consumption.consumption;
-		mon_peer->stats.airtime_consumption.consumption = 0;
-		mon_peer->stats.airtime_consumption.avg_consumption.idx++;
-		if (mon_peer->stats.airtime_consumption.avg_consumption.idx ==
-		    MAX_CONSUMPTION_TIME)
-			mon_peer->stats.airtime_consumption.avg_consumption.idx = 0;
+		for (ac = 0; ac < WME_AC_MAX; ac++) {
+			idx = mon_peer->stats.airtime_consumption[ac].avg_consumption.idx;
+			mon_peer->stats.airtime_consumption[ac].avg_consumption.avg_consumption_per_sec[idx] =
+					mon_peer->stats.airtime_consumption[ac].consumption;
+			mon_peer->stats.airtime_consumption[ac].consumption = 0;
+			mon_peer->stats.airtime_consumption[ac].avg_consumption.idx++;
+			if (mon_peer->stats.airtime_consumption[ac].avg_consumption.idx ==
+			    MAX_CONSUMPTION_TIME)
+				mon_peer->stats.airtime_consumption[ac].avg_consumption.idx = 0;
+		}
 	}
 }
 #else
@@ -4070,12 +4072,14 @@ void dp_ppdu_desc_user_airtime_consumption_update(
 			struct cdp_tx_completion_ppdu_user *user)
 {
 	struct dp_mon_peer *mon_peer = NULL;
+	uint8_t ac = 0;
 
 	mon_peer = peer->monitor_peer;
 	if (qdf_unlikely(!mon_peer))
 		return;
 
-	DP_STATS_INC(mon_peer, airtime_consumption.consumption,
+	ac = TID_TO_WME_AC(user->tid);
+	DP_STATS_INC(mon_peer, airtime_consumption[ac].consumption,
 		     user->phy_tx_time_us);
 }
 #else

+ 13 - 9
dp/wifi3.0/monitor/dp_mon.h

@@ -903,7 +903,7 @@ struct dp_mon_peer_stats {
 	dp_mon_peer_tx_stats tx;
 	dp_mon_peer_rx_stats rx;
 #ifdef WLAN_TELEMETRY_STATS_SUPPORT
-	struct dp_mon_peer_airtime_consumption airtime_consumption;
+	struct dp_mon_peer_airtime_consumption airtime_consumption[WME_AC_MAX];
 #endif
 #endif
 };
@@ -4239,20 +4239,24 @@ void dp_monitor_peer_telemetry_stats(struct dp_peer *peer,
 				     struct cdp_peer_telemetry_stats *stats)
 {
 	struct dp_mon_peer_stats *mon_peer_stats = NULL;
-	uint8_t idx = 0;
+	uint8_t idx = 0, ac;
 	uint32_t consumption = 0;
 
 	if (qdf_unlikely(!peer->monitor_peer))
 		return;
 
 	mon_peer_stats = &peer->monitor_peer->stats;
-	for (idx = 0; idx < MAX_CONSUMPTION_TIME; idx++)
-		consumption +=
-			mon_peer_stats->airtime_consumption.avg_consumption.avg_consumption_per_sec[idx];
-	/* consumption is in micro seconds, convert it to seconds and
-	 * then calculate %age per 5 sec
-	 */
-	stats->airtime_consumption = ((consumption * 100) / (MAX_CONSUMPTION_TIME * 1000000));
+	for (ac = 0; ac < WME_AC_MAX; ac++) {
+		consumption = 0;
+		for (idx = 0; idx < MAX_CONSUMPTION_TIME; idx++)
+			consumption +=
+				mon_peer_stats->airtime_consumption[ac].avg_consumption.avg_consumption_per_sec[idx];
+		/* consumption is in micro seconds, convert it to seconds and
+		 * then calculate %age per 5 sec
+		 */
+		stats->airtime_consumption[ac] =
+			((consumption * 100) / (MAX_CONSUMPTION_TIME * 1000000));
+	}
 	stats->tx_mpdu_retried = mon_peer_stats->tx.retries;
 	stats->tx_mpdu_total = mon_peer_stats->tx.tx_mpdus_tried;
 	stats->rx_mpdu_retried = mon_peer_stats->rx.mpdu_retry_cnt;

+ 3 - 1
dp/wifi3.0/monitor/dp_rx_mon.c

@@ -818,6 +818,7 @@ dp_ppdu_desc_user_rx_time_update(struct dp_pdev *pdev,
 {
 	uint32_t nss_ru_width_sum = 0;
 	struct dp_mon_peer *mon_peer = NULL;
+	uint8_t ac = 0;
 
 	if (!pdev || !ppdu_desc || !user || !peer)
 		return;
@@ -839,7 +840,8 @@ dp_ppdu_desc_user_rx_time_update(struct dp_pdev *pdev,
 	if (qdf_unlikely(!mon_peer))
 		return;
 
-	DP_STATS_INC(mon_peer, airtime_consumption.consumption,
+	ac = TID_TO_WME_AC(user->tid);
+	DP_STATS_INC(mon_peer, airtime_consumption[ac].consumption,
 		     user->rx_time_us);
 }
 #else