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
This commit is contained in:
Pranita Solanke 2017-12-15 19:25:13 +05:30 • committed by snandini
commit fc2ff39199
5 changed files with 37 additions and 22 deletions

View file

@ -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) {

View file

@ -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",

View file

@ -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;

View file

@ -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

View file

@ -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))