Parcourir la source

qcacmn: Add multicast and unicast packets stats for BSS peer

Add support to display multicast packets stats. Also
avoid sending message to target-if layer for every MSDU
to update node statistics

Change-Id: I7bb73d97bd8a02a601d191040a9a5730a9584d3d
Pranita Solanke il y a 7 ans
Parent
commit
fc2ff39199
5 fichiers modifiés avec 37 ajouts et 22 suppressions
  1. 6 1
      dp/wifi3.0/dp_htt.c
  2. 11 2
      dp/wifi3.0/dp_main.c
  3. 8 11
      dp/wifi3.0/dp_rx.c
  4. 10 7
      dp/wifi3.0/dp_rx_mon_status.c
  5. 2 1
      dp/wifi3.0/dp_tx.c

+ 6 - 1
dp/wifi3.0/dp_htt.c

@@ -86,8 +86,10 @@ static void dp_tx_stats_update(struct dp_soc *soc, struct dp_peer *peer,
 	DP_STATS_INCC(peer, tx.ldpc, num_msdu, ppdu->ldpc);
 	DP_STATS_INC_PKT(peer, tx.tx_success, ppdu->success_msdus,
 			ppdu->success_bytes);
+
 	if (ppdu->is_mcast) {
-		DP_STATS_INC_PKT(peer, tx.mcast, num_msdu, (ppdu->success_bytes
+		DP_STATS_INC_PKT(peer, tx.mcast, ppdu->mpdu_tried_mcast,
+					(ppdu->success_bytes
 					+ ppdu->retry_bytes +
 					ppdu->failed_bytes));
 	} else {
@@ -133,6 +135,8 @@ static void dp_tx_stats_update(struct dp_soc *soc, struct dp_peer *peer,
 		soc->cdp_soc.ol_ops->update_dp_stats(pdev->osif_pdev,
 				&peer->stats, ppdu->peer_id,
 				UPDATE_PEER_STATS);
+
+		dp_aggregate_vdev_stats(peer->vdev);
 	}
 }
 #endif
@@ -2132,6 +2136,7 @@ static void dp_process_ppdu_stats_tx_mgmtctrl_payload_tlv(
 
 	uint32_t payload_size = length - HTT_MGMT_CTRL_TLV_RESERVERD_LEN;
 
+
 	nbuf = qdf_nbuf_alloc(pdev->soc->osdev, payload_size, 0, 4, true);
 
 	if (!nbuf) {

+ 11 - 2
dp/wifi3.0/dp_main.c

@@ -4549,6 +4549,14 @@ static inline void dp_print_peer_stats(struct dp_peer *peer)
 			peer->stats.tx.tx_success.num);
 	DP_PRINT_STATS("Success Bytes = %d",
 			peer->stats.tx.tx_success.bytes);
+	DP_PRINT_STATS("Unicast Success Packets = %d",
+			peer->stats.tx.ucast.num);
+	DP_PRINT_STATS("Unicast Success Bytes = %d",
+			peer->stats.tx.ucast.bytes);
+	DP_PRINT_STATS("Multicast Success Packets = %d",
+			peer->stats.tx.mcast.num);
+	DP_PRINT_STATS("Multicast Success Bytes = %d",
+			peer->stats.tx.mcast.bytes);
 	DP_PRINT_STATS("Packets Failed = %d",
 			peer->stats.tx.tx_failed);
 	DP_PRINT_STATS("Packets In OFDMA = %d",
@@ -4621,9 +4629,10 @@ static inline void dp_print_peer_stats(struct dp_peer *peer)
 	DP_PRINT_STATS("Bytes Sent To Stack = %d",
 			peer->stats.rx.to_stack.bytes);
 	for (i = 0; i <  CDP_MAX_RX_RINGS; i++) {
-		DP_PRINT_STATS("Packets Received = %d",
+		DP_PRINT_STATS("Ring Id = %d", i);
+		DP_PRINT_STATS("	Packets Received = %d",
 				peer->stats.rx.rcvd_reo[i].num);
-		DP_PRINT_STATS("Bytes Received = %d",
+		DP_PRINT_STATS("	Bytes Received = %d",
 				peer->stats.rx.rcvd_reo[i].bytes);
 	}
 	DP_PRINT_STATS("Multicast Packets Received = %d",

+ 8 - 11
dp/wifi3.0/dp_rx.c

@@ -1336,21 +1336,23 @@ done:
 		pkt_type = hal_rx_msdu_start_get_pkt_type(rx_tlv_hdr);
 		DP_STATS_INC(vdev->pdev,
 				rx.reception_type[reception_type], 1);
+
 		DP_STATS_INCC(vdev->pdev, rx.nss[nss], 1,
 				((reception_type == REPT_MU_MIMO) ||
 				 (reception_type == REPT_MU_OFDMA_MIMO))
 				);
+
 		DP_STATS_INCC(peer, rx.err.mic_err, 1,
 				hal_rx_mpdu_end_mic_err_get(
 					rx_tlv_hdr));
+
 		DP_STATS_INCC(peer, rx.err.decrypt_err, 1,
 				hal_rx_mpdu_end_decrypt_err_get(
 					rx_tlv_hdr));
 
-		DP_STATS_INC(peer, rx.wme_ac_type[TID_TO_WME_AC(tid)],
-				1);
 		DP_STATS_INC(peer, rx.reception_type[reception_type],
 				1);
+
 		if (soc->process_rx_status) {
 			ampdu_flag = (mpdu_desc_info.mpdu_flags &
 					HAL_MPDU_F_AMPDU_FLAG);
@@ -1400,6 +1402,9 @@ done:
 					mcs_count[mcs], 1,
 					((mcs < (MAX_MCS - 1)) &&
 					 (pkt_type == DOT11_AX)));
+
+			DP_STATS_INC(peer, rx.wme_ac_type[TID_TO_WME_AC(tid)],
+					1);
 		}
 
 		/*
@@ -1489,7 +1494,7 @@ done:
 		DP_STATS_INC_PKT(peer, rx.to_stack, 1,
 				pkt_len);
 
-		if ((pdev->enhanced_stats_en) && likely(peer) &&
+		if ((soc->process_rx_status) && likely(peer) &&
 			hal_rx_attn_first_mpdu_get(rx_tlv_hdr)) {
 			if (soc->cdp_soc.ol_ops->update_dp_stats) {
 				soc->cdp_soc.ol_ops->update_dp_stats(
@@ -1497,14 +1502,6 @@ done:
 						&peer->stats,
 						peer_id,
 						UPDATE_PEER_STATS);
-
-				dp_aggregate_vdev_stats(peer->vdev);
-
-				soc->cdp_soc.ol_ops->update_dp_stats(
-						vdev->pdev->osif_pdev,
-						&peer->vdev->stats,
-						peer->vdev->vdev_id,
-						UPDATE_VDEV_STATS);
 			}
 		}
 		nbuf = next;

+ 10 - 7
dp/wifi3.0/dp_rx_mon_status.c

@@ -122,6 +122,7 @@ static void dp_rx_stats_update(struct dp_soc *soc, struct dp_peer *peer,
 
 	if (soc->process_rx_status)
 		return;
+
 	DP_STATS_UPD(peer, rx.rssi, ppdu->rssi);
 	DP_STATS_INC(peer, rx.sgi_count[ppdu->u.gi], num_msdu);
 	DP_STATS_INC(peer, rx.bw[ppdu->u.bw], num_msdu);
@@ -164,18 +165,20 @@ static void dp_rx_stats_update(struct dp_soc *soc, struct dp_peer *peer,
 		soc->cdp_soc.ol_ops->update_dp_stats(pdev->osif_pdev,
 				&peer->stats, ppdu->peer_id,
 				UPDATE_PEER_STATS);
+
+		dp_aggregate_vdev_stats(peer->vdev);
 	}
 }
 #endif
 
 /**
-* dp_rx_handle_am_copy_mode() - Allocate and deliver first MSDU payload
-* @soc: core txrx main context
-* @pdev: pdev strcuture
-* @ppdu_info: structure for rx ppdu ring
-*
-* Return: QDF_STATUS_SUCCESS - If nbuf to be freed by caller
-*         QDF_STATUS_E_ALREADY - If nbuf not to be freed by caller
+ * dp_rx_handle_am_copy_mode() - Allocate and deliver first MSDU payload
+ * @soc: core txrx main context
+ * @pdev: pdev strcuture
+ * @ppdu_info: structure for rx ppdu ring
+ *
+ * Return: QDF_STATUS_SUCCESS - If nbuf to be freed by caller
+ *         QDF_STATUS_E_ALREADY - If nbuf not to be freed by caller
 */
 #ifdef FEATURE_PERPKT_INFO
 static inline QDF_STATUS

+ 2 - 1
dp/wifi3.0/dp_tx.c

@@ -2254,7 +2254,6 @@ static void dp_tx_update_peer_stats(struct dp_peer *peer,
 	if (!ts->release_src == HAL_TX_COMP_RELEASE_SOURCE_TQM)
 		return;
 
-
 	DP_STATS_INCC(peer, tx.dropped.age_out, 1,
 			(ts->status == HAL_TX_TQM_RR_REM_CMD_AGED));
 
@@ -2269,7 +2268,9 @@ static void dp_tx_update_peer_stats(struct dp_peer *peer,
 
 	if (!ts->status == HAL_TX_TQM_RR_FRAME_ACKED)
 		return;
+
 	DP_STATS_INCC(peer, tx.ofdma, 1, ts->ofdma);
+
 	DP_STATS_INCC(peer, tx.amsdu_cnt, 1, ts->msdu_part_of_amsdu);
 
 	if (!(soc->process_tx_status))