From fc2ff39199ea55792d294ba887b5e6e2686ea2b6 Mon Sep 17 00:00:00 2001 From: Pranita Solanke Date: Fri, 15 Dec 2017 19:25:13 +0530 Subject: [PATCH] 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 --- dp/wifi3.0/dp_htt.c | 7 ++++++- dp/wifi3.0/dp_main.c | 13 +++++++++++-- dp/wifi3.0/dp_rx.c | 19 ++++++++----------- dp/wifi3.0/dp_rx_mon_status.c | 17 ++++++++++------- dp/wifi3.0/dp_tx.c | 3 ++- 5 files changed, 37 insertions(+), 22 deletions(-) diff --git a/dp/wifi3.0/dp_htt.c b/dp/wifi3.0/dp_htt.c index a37b3e2c7218..5f3977540065 100644 --- a/dp/wifi3.0/dp_htt.c +++ b/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) { diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 6a64abf95d7c..b2e5b88b2456 100644 --- a/dp/wifi3.0/dp_main.c +++ b/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", diff --git a/dp/wifi3.0/dp_rx.c b/dp/wifi3.0/dp_rx.c index dd10aeaa9769..5bb633fb1136 100644 --- a/dp/wifi3.0/dp_rx.c +++ b/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; diff --git a/dp/wifi3.0/dp_rx_mon_status.c b/dp/wifi3.0/dp_rx_mon_status.c index bbb4a4dbeec4..93b2e9f791c6 100644 --- a/dp/wifi3.0/dp_rx_mon_status.c +++ b/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 diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c index 6fd6a842e21b..b850cd86c88b 100644 --- a/dp/wifi3.0/dp_tx.c +++ b/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))