qcacmn: Rx and Tx peer statistics update
* Update the pkt_type counters correctly within the array bound * Add support for NSS counters on Tx side * Update ampdu flag in PPDU struct * Add support for ampdu flag in hal_ppdu struct Change-Id: I79ea52727124ea4be4d82912cb2513ea58e2af10
This commit is contained in:

committed by
snandini

parent
5819e29cbb
commit
ed0aba69a9
@@ -836,6 +836,9 @@ struct cdp_tx_stats {
|
|||||||
/* SGI count */
|
/* SGI count */
|
||||||
uint32_t sgi_count[MAX_GI];
|
uint32_t sgi_count[MAX_GI];
|
||||||
|
|
||||||
|
/* Packet count for different num_spatial_stream values */
|
||||||
|
uint32_t nss[SS_COUNT];
|
||||||
|
|
||||||
/* Packet Count for different bandwidths */
|
/* Packet Count for different bandwidths */
|
||||||
uint32_t bw[MAX_BW];
|
uint32_t bw[MAX_BW];
|
||||||
|
|
||||||
@@ -935,6 +938,8 @@ struct cdp_tx_ingress_stats {
|
|||||||
struct cdp_pkt_info inspect_pkts;
|
struct cdp_pkt_info inspect_pkts;
|
||||||
/*NAWDS Multicast Packet Count */
|
/*NAWDS Multicast Packet Count */
|
||||||
struct cdp_pkt_info nawds_mcast;
|
struct cdp_pkt_info nawds_mcast;
|
||||||
|
/* Number of broadcast packets */
|
||||||
|
struct cdp_pkt_info bcast;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
/* Total Raw packets */
|
/* Total Raw packets */
|
||||||
|
@@ -80,6 +80,7 @@ static void dp_tx_stats_update(struct dp_soc *soc, struct dp_peer *peer,
|
|||||||
DP_STATS_UPD(peer, tx.tx_rate, ppdu->tx_rate);
|
DP_STATS_UPD(peer, tx.tx_rate, ppdu->tx_rate);
|
||||||
DP_STATS_INC(peer, tx.sgi_count[ppdu->gi], num_msdu);
|
DP_STATS_INC(peer, tx.sgi_count[ppdu->gi], num_msdu);
|
||||||
DP_STATS_INC(peer, tx.bw[ppdu->bw], num_msdu);
|
DP_STATS_INC(peer, tx.bw[ppdu->bw], num_msdu);
|
||||||
|
DP_STATS_INC(peer, tx.nss[ppdu->nss], num_msdu);
|
||||||
DP_STATS_UPD(peer, tx.last_ack_rssi, ack_rssi);
|
DP_STATS_UPD(peer, tx.last_ack_rssi, ack_rssi);
|
||||||
DP_STATS_INC(peer, tx.wme_ac_type[TID_TO_WME_AC(ppdu->tid)], num_msdu);
|
DP_STATS_INC(peer, tx.wme_ac_type[TID_TO_WME_AC(ppdu->tid)], num_msdu);
|
||||||
DP_STATS_INCC(peer, tx.stbc, num_msdu, ppdu->stbc);
|
DP_STATS_INCC(peer, tx.stbc, num_msdu, ppdu->stbc);
|
||||||
@@ -101,31 +102,31 @@ static void dp_tx_stats_update(struct dp_soc *soc, struct dp_peer *peer,
|
|||||||
DP_STATS_INC(peer, tx.retries,
|
DP_STATS_INC(peer, tx.retries,
|
||||||
(ppdu->long_retries + ppdu->short_retries));
|
(ppdu->long_retries + ppdu->short_retries));
|
||||||
DP_STATS_INCC(peer,
|
DP_STATS_INCC(peer,
|
||||||
tx.pkt_type[preamble].mcs_count[MAX_MCS], num_msdu,
|
tx.pkt_type[preamble].mcs_count[MAX_MCS-1], num_msdu,
|
||||||
((mcs >= MAX_MCS_11A) && (preamble == DOT11_A)));
|
((mcs >= MAX_MCS_11A) && (preamble == DOT11_A)));
|
||||||
DP_STATS_INCC(peer,
|
DP_STATS_INCC(peer,
|
||||||
tx.pkt_type[preamble].mcs_count[mcs], num_msdu,
|
tx.pkt_type[preamble].mcs_count[mcs], num_msdu,
|
||||||
((mcs < MAX_MCS_11A) && (preamble == DOT11_A)));
|
((mcs < MAX_MCS_11A) && (preamble == DOT11_A)));
|
||||||
DP_STATS_INCC(peer,
|
DP_STATS_INCC(peer,
|
||||||
tx.pkt_type[preamble].mcs_count[MAX_MCS], num_msdu,
|
tx.pkt_type[preamble].mcs_count[MAX_MCS-1], num_msdu,
|
||||||
((mcs >= MAX_MCS_11B) && (preamble == DOT11_B)));
|
((mcs >= MAX_MCS_11B) && (preamble == DOT11_B)));
|
||||||
DP_STATS_INCC(peer,
|
DP_STATS_INCC(peer,
|
||||||
tx.pkt_type[preamble].mcs_count[mcs], num_msdu,
|
tx.pkt_type[preamble].mcs_count[mcs], num_msdu,
|
||||||
((mcs < (MAX_MCS_11B)) && (preamble == DOT11_B)));
|
((mcs < (MAX_MCS_11B)) && (preamble == DOT11_B)));
|
||||||
DP_STATS_INCC(peer,
|
DP_STATS_INCC(peer,
|
||||||
tx.pkt_type[preamble].mcs_count[MAX_MCS], num_msdu,
|
tx.pkt_type[preamble].mcs_count[MAX_MCS-1], num_msdu,
|
||||||
((mcs >= MAX_MCS_11A) && (preamble == DOT11_N)));
|
((mcs >= MAX_MCS_11A) && (preamble == DOT11_N)));
|
||||||
DP_STATS_INCC(peer,
|
DP_STATS_INCC(peer,
|
||||||
tx.pkt_type[preamble].mcs_count[mcs], num_msdu,
|
tx.pkt_type[preamble].mcs_count[mcs], num_msdu,
|
||||||
((mcs < MAX_MCS_11A) && (preamble == DOT11_N)));
|
((mcs < MAX_MCS_11A) && (preamble == DOT11_N)));
|
||||||
DP_STATS_INCC(peer,
|
DP_STATS_INCC(peer,
|
||||||
tx.pkt_type[preamble].mcs_count[MAX_MCS], num_msdu,
|
tx.pkt_type[preamble].mcs_count[MAX_MCS-1], num_msdu,
|
||||||
((mcs >= MAX_MCS_11AC) && (preamble == DOT11_AC)));
|
((mcs >= MAX_MCS_11AC) && (preamble == DOT11_AC)));
|
||||||
DP_STATS_INCC(peer,
|
DP_STATS_INCC(peer,
|
||||||
tx.pkt_type[preamble].mcs_count[mcs], num_msdu,
|
tx.pkt_type[preamble].mcs_count[mcs], num_msdu,
|
||||||
((mcs < MAX_MCS_11AC) && (preamble == DOT11_AC)));
|
((mcs < MAX_MCS_11AC) && (preamble == DOT11_AC)));
|
||||||
DP_STATS_INCC(peer,
|
DP_STATS_INCC(peer,
|
||||||
tx.pkt_type[preamble].mcs_count[MAX_MCS], num_msdu,
|
tx.pkt_type[preamble].mcs_count[MAX_MCS-1], num_msdu,
|
||||||
((mcs >= (MAX_MCS - 1)) && (preamble == DOT11_AX)));
|
((mcs >= (MAX_MCS - 1)) && (preamble == DOT11_AX)));
|
||||||
DP_STATS_INCC(peer,
|
DP_STATS_INCC(peer,
|
||||||
tx.pkt_type[preamble].mcs_count[mcs], num_msdu,
|
tx.pkt_type[preamble].mcs_count[mcs], num_msdu,
|
||||||
|
@@ -4828,6 +4828,14 @@ static inline void dp_print_peer_stats(struct dp_peer *peer)
|
|||||||
peer->stats.tx.bw[2], peer->stats.tx.bw[3],
|
peer->stats.tx.bw[2], peer->stats.tx.bw[3],
|
||||||
peer->stats.tx.bw[4], peer->stats.tx.bw[5]);
|
peer->stats.tx.bw[4], peer->stats.tx.bw[5]);
|
||||||
|
|
||||||
|
index = 0;
|
||||||
|
for (i = 0; i < SS_COUNT; i++) {
|
||||||
|
index += qdf_snprint(&nss[index], DP_NSS_LENGTH - index,
|
||||||
|
" %d", peer->stats.tx.nss[i]);
|
||||||
|
}
|
||||||
|
DP_PRINT_STATS("NSS(1-8) = %s",
|
||||||
|
nss);
|
||||||
|
|
||||||
DP_PRINT_STATS("Aggregation:");
|
DP_PRINT_STATS("Aggregation:");
|
||||||
DP_PRINT_STATS(" Number of Msdu's Part of Amsdu = %d",
|
DP_PRINT_STATS(" Number of Msdu's Part of Amsdu = %d",
|
||||||
peer->stats.tx.amsdu_cnt);
|
peer->stats.tx.amsdu_cnt);
|
||||||
|
@@ -1193,14 +1193,16 @@ dp_rx_process(struct dp_intr *int_ctx, void *hal_ring, uint32_t quota)
|
|||||||
DP_STATS_INC_PKT(peer, rx.rcvd_reo[ring_id], 1,
|
DP_STATS_INC_PKT(peer, rx.rcvd_reo[ring_id], 1,
|
||||||
qdf_nbuf_len(rx_desc->nbuf));
|
qdf_nbuf_len(rx_desc->nbuf));
|
||||||
|
|
||||||
ampdu_flag = (mpdu_desc_info.mpdu_flags &
|
if (soc->process_rx_status) {
|
||||||
HAL_MPDU_F_AMPDU_FLAG);
|
ampdu_flag = (mpdu_desc_info.mpdu_flags &
|
||||||
|
HAL_MPDU_F_AMPDU_FLAG);
|
||||||
|
|
||||||
DP_STATS_INCC(peer, rx.ampdu_cnt, 1, ampdu_flag);
|
DP_STATS_INCC(peer, rx.ampdu_cnt, 1, ampdu_flag);
|
||||||
DP_STATS_INCC(peer, rx.non_ampdu_cnt, 1, !(ampdu_flag));
|
DP_STATS_INCC(peer, rx.non_ampdu_cnt, 1, !(ampdu_flag));
|
||||||
|
}
|
||||||
|
|
||||||
amsdu_flag = ((msdu_desc_info.msdu_flags &
|
amsdu_flag = ((msdu_desc_info.msdu_flags &
|
||||||
HAL_MSDU_F_FIRST_MSDU_IN_MPDU) &&
|
HAL_MSDU_F_FIRST_MSDU_IN_MPDU) &&
|
||||||
(msdu_desc_info.msdu_flags &
|
(msdu_desc_info.msdu_flags &
|
||||||
HAL_MSDU_F_LAST_MSDU_IN_MPDU));
|
HAL_MSDU_F_LAST_MSDU_IN_MPDU));
|
||||||
|
|
||||||
@@ -1410,7 +1412,7 @@ done:
|
|||||||
DP_STATS_INC(peer, rx.bw[bw], 1);
|
DP_STATS_INC(peer, rx.bw[bw], 1);
|
||||||
DP_STATS_INC(peer, rx.sgi_count[sgi], 1);
|
DP_STATS_INC(peer, rx.sgi_count[sgi], 1);
|
||||||
DP_STATS_INCC(peer, rx.pkt_type[pkt_type].
|
DP_STATS_INCC(peer, rx.pkt_type[pkt_type].
|
||||||
mcs_count[MAX_MCS], 1,
|
mcs_count[MAX_MCS - 1], 1,
|
||||||
((mcs >= MAX_MCS_11A) &&
|
((mcs >= MAX_MCS_11A) &&
|
||||||
(pkt_type == DOT11_A)));
|
(pkt_type == DOT11_A)));
|
||||||
DP_STATS_INCC(peer, rx.pkt_type[pkt_type].
|
DP_STATS_INCC(peer, rx.pkt_type[pkt_type].
|
||||||
@@ -1418,7 +1420,7 @@ done:
|
|||||||
((mcs < MAX_MCS_11A) &&
|
((mcs < MAX_MCS_11A) &&
|
||||||
(pkt_type == DOT11_A)));
|
(pkt_type == DOT11_A)));
|
||||||
DP_STATS_INCC(peer, rx.pkt_type[pkt_type].
|
DP_STATS_INCC(peer, rx.pkt_type[pkt_type].
|
||||||
mcs_count[MAX_MCS], 1,
|
mcs_count[MAX_MCS - 1], 1,
|
||||||
((mcs >= MAX_MCS_11B) &&
|
((mcs >= MAX_MCS_11B) &&
|
||||||
(pkt_type == DOT11_B)));
|
(pkt_type == DOT11_B)));
|
||||||
DP_STATS_INCC(peer, rx.pkt_type[pkt_type].
|
DP_STATS_INCC(peer, rx.pkt_type[pkt_type].
|
||||||
@@ -1426,7 +1428,7 @@ done:
|
|||||||
((mcs < MAX_MCS_11B) &&
|
((mcs < MAX_MCS_11B) &&
|
||||||
(pkt_type == DOT11_B)));
|
(pkt_type == DOT11_B)));
|
||||||
DP_STATS_INCC(peer, rx.pkt_type[pkt_type].
|
DP_STATS_INCC(peer, rx.pkt_type[pkt_type].
|
||||||
mcs_count[MAX_MCS], 1,
|
mcs_count[MAX_MCS - 1], 1,
|
||||||
((mcs >= MAX_MCS_11A) &&
|
((mcs >= MAX_MCS_11A) &&
|
||||||
(pkt_type == DOT11_N)));
|
(pkt_type == DOT11_N)));
|
||||||
DP_STATS_INCC(peer, rx.pkt_type[pkt_type].
|
DP_STATS_INCC(peer, rx.pkt_type[pkt_type].
|
||||||
@@ -1434,7 +1436,7 @@ done:
|
|||||||
((mcs < MAX_MCS_11A) &&
|
((mcs < MAX_MCS_11A) &&
|
||||||
(pkt_type == DOT11_N)));
|
(pkt_type == DOT11_N)));
|
||||||
DP_STATS_INCC(peer, rx.pkt_type[pkt_type].
|
DP_STATS_INCC(peer, rx.pkt_type[pkt_type].
|
||||||
mcs_count[MAX_MCS], 1,
|
mcs_count[MAX_MCS - 1], 1,
|
||||||
((mcs >= MAX_MCS_11AC) &&
|
((mcs >= MAX_MCS_11AC) &&
|
||||||
(pkt_type == DOT11_AC)));
|
(pkt_type == DOT11_AC)));
|
||||||
DP_STATS_INCC(peer, rx.pkt_type[pkt_type].
|
DP_STATS_INCC(peer, rx.pkt_type[pkt_type].
|
||||||
@@ -1442,7 +1444,7 @@ done:
|
|||||||
((mcs < MAX_MCS_11AC) &&
|
((mcs < MAX_MCS_11AC) &&
|
||||||
(pkt_type == DOT11_AC)));
|
(pkt_type == DOT11_AC)));
|
||||||
DP_STATS_INCC(peer, rx.pkt_type[pkt_type].
|
DP_STATS_INCC(peer, rx.pkt_type[pkt_type].
|
||||||
mcs_count[MAX_MCS], 1,
|
mcs_count[MAX_MCS - 1], 1,
|
||||||
((mcs >= (MAX_MCS - 1)) &&
|
((mcs >= (MAX_MCS - 1)) &&
|
||||||
(pkt_type == DOT11_AX)));
|
(pkt_type == DOT11_AX)));
|
||||||
DP_STATS_INCC(peer, rx.pkt_type[pkt_type].
|
DP_STATS_INCC(peer, rx.pkt_type[pkt_type].
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2017 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2017-2018 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -86,6 +86,11 @@ dp_rx_populate_cdp_indication_ppdu(struct dp_soc *soc,
|
|||||||
cdp_rx_ppdu->num_msdu = (cdp_rx_ppdu->tcp_msdu_count +
|
cdp_rx_ppdu->num_msdu = (cdp_rx_ppdu->tcp_msdu_count +
|
||||||
cdp_rx_ppdu->udp_msdu_count +
|
cdp_rx_ppdu->udp_msdu_count +
|
||||||
cdp_rx_ppdu->other_msdu_count);
|
cdp_rx_ppdu->other_msdu_count);
|
||||||
|
|
||||||
|
if (ppdu_info->com_info.mpdu_cnt_fcs_ok > 1)
|
||||||
|
cdp_rx_ppdu->is_ampdu = 1;
|
||||||
|
else
|
||||||
|
cdp_rx_ppdu->is_ampdu = 0;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static inline void
|
static inline void
|
||||||
@@ -124,37 +129,44 @@ static void dp_rx_stats_update(struct dp_soc *soc, struct dp_peer *peer,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
DP_STATS_UPD(peer, rx.rssi, ppdu->rssi);
|
DP_STATS_UPD(peer, rx.rssi, ppdu->rssi);
|
||||||
|
|
||||||
|
if ((preamble == DOT11_A) || (preamble == DOT11_B))
|
||||||
|
ppdu->u.nss = 1;
|
||||||
|
|
||||||
|
if (ppdu->u.nss)
|
||||||
|
DP_STATS_INC(peer, rx.nss[ppdu->u.nss - 1], num_msdu);
|
||||||
|
|
||||||
DP_STATS_INC(peer, rx.sgi_count[ppdu->u.gi], num_msdu);
|
DP_STATS_INC(peer, rx.sgi_count[ppdu->u.gi], num_msdu);
|
||||||
DP_STATS_INC(peer, rx.bw[ppdu->u.bw], num_msdu);
|
DP_STATS_INC(peer, rx.bw[ppdu->u.bw], num_msdu);
|
||||||
DP_STATS_INCC(peer, rx.ampdu_cnt, num_msdu, ppdu->is_ampdu);
|
DP_STATS_INCC(peer, rx.ampdu_cnt, num_msdu, ppdu->is_ampdu);
|
||||||
DP_STATS_INCC(peer, rx.non_ampdu_cnt, num_msdu, !(ppdu->is_ampdu));
|
DP_STATS_INCC(peer, rx.non_ampdu_cnt, num_msdu, !(ppdu->is_ampdu));
|
||||||
DP_STATS_UPD(peer, rx.rx_rate, mcs);
|
DP_STATS_UPD(peer, rx.rx_rate, mcs);
|
||||||
DP_STATS_INCC(peer,
|
DP_STATS_INCC(peer,
|
||||||
rx.pkt_type[preamble].mcs_count[MAX_MCS], num_msdu,
|
rx.pkt_type[preamble].mcs_count[MAX_MCS - 1], num_msdu,
|
||||||
((mcs >= MAX_MCS_11A) && (preamble == DOT11_A)));
|
((mcs >= MAX_MCS_11A) && (preamble == DOT11_A)));
|
||||||
DP_STATS_INCC(peer,
|
DP_STATS_INCC(peer,
|
||||||
rx.pkt_type[preamble].mcs_count[mcs], num_msdu,
|
rx.pkt_type[preamble].mcs_count[mcs], num_msdu,
|
||||||
((mcs < MAX_MCS_11A) && (preamble == DOT11_A)));
|
((mcs < MAX_MCS_11A) && (preamble == DOT11_A)));
|
||||||
DP_STATS_INCC(peer,
|
DP_STATS_INCC(peer,
|
||||||
rx.pkt_type[preamble].mcs_count[MAX_MCS], num_msdu,
|
rx.pkt_type[preamble].mcs_count[MAX_MCS - 1], num_msdu,
|
||||||
((mcs >= MAX_MCS_11B) && (preamble == DOT11_B)));
|
((mcs >= MAX_MCS_11B) && (preamble == DOT11_B)));
|
||||||
DP_STATS_INCC(peer,
|
DP_STATS_INCC(peer,
|
||||||
rx.pkt_type[preamble].mcs_count[mcs], num_msdu,
|
rx.pkt_type[preamble].mcs_count[mcs], num_msdu,
|
||||||
((mcs < MAX_MCS_11B) && (preamble == DOT11_B)));
|
((mcs < MAX_MCS_11B) && (preamble == DOT11_B)));
|
||||||
DP_STATS_INCC(peer,
|
DP_STATS_INCC(peer,
|
||||||
rx.pkt_type[preamble].mcs_count[MAX_MCS], num_msdu,
|
rx.pkt_type[preamble].mcs_count[MAX_MCS - 1], num_msdu,
|
||||||
((mcs >= MAX_MCS_11A) && (preamble == DOT11_N)));
|
((mcs >= MAX_MCS_11A) && (preamble == DOT11_N)));
|
||||||
DP_STATS_INCC(peer,
|
DP_STATS_INCC(peer,
|
||||||
rx.pkt_type[preamble].mcs_count[mcs], num_msdu,
|
rx.pkt_type[preamble].mcs_count[mcs], num_msdu,
|
||||||
((mcs < MAX_MCS_11A) && (preamble == DOT11_N)));
|
((mcs < MAX_MCS_11A) && (preamble == DOT11_N)));
|
||||||
DP_STATS_INCC(peer,
|
DP_STATS_INCC(peer,
|
||||||
rx.pkt_type[preamble].mcs_count[MAX_MCS], num_msdu,
|
rx.pkt_type[preamble].mcs_count[MAX_MCS - 1], num_msdu,
|
||||||
((mcs >= MAX_MCS_11AC) && (preamble == DOT11_AC)));
|
((mcs >= MAX_MCS_11AC) && (preamble == DOT11_AC)));
|
||||||
DP_STATS_INCC(peer,
|
DP_STATS_INCC(peer,
|
||||||
rx.pkt_type[preamble].mcs_count[mcs], num_msdu,
|
rx.pkt_type[preamble].mcs_count[mcs], num_msdu,
|
||||||
((mcs < MAX_MCS_11AC) && (preamble == DOT11_AC)));
|
((mcs < MAX_MCS_11AC) && (preamble == DOT11_AC)));
|
||||||
DP_STATS_INCC(peer,
|
DP_STATS_INCC(peer,
|
||||||
rx.pkt_type[preamble].mcs_count[MAX_MCS], num_msdu,
|
rx.pkt_type[preamble].mcs_count[MAX_MCS - 1], num_msdu,
|
||||||
((mcs >= (MAX_MCS - 1)) && (preamble == DOT11_AX)));
|
((mcs >= (MAX_MCS - 1)) && (preamble == DOT11_AX)));
|
||||||
DP_STATS_INCC(peer,
|
DP_STATS_INCC(peer,
|
||||||
rx.pkt_type[preamble].mcs_count[mcs], num_msdu,
|
rx.pkt_type[preamble].mcs_count[mcs], num_msdu,
|
||||||
|
@@ -2353,23 +2353,23 @@ static void dp_tx_update_peer_stats(struct dp_peer *peer,
|
|||||||
if (!(soc->process_tx_status))
|
if (!(soc->process_tx_status))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
DP_STATS_INCC(peer, tx.pkt_type[pkt_type].mcs_count[MAX_MCS], 1,
|
DP_STATS_INCC(peer, tx.pkt_type[pkt_type].mcs_count[MAX_MCS - 1], 1,
|
||||||
((mcs >= MAX_MCS_11A) && (pkt_type == DOT11_A)));
|
((mcs >= MAX_MCS_11A) && (pkt_type == DOT11_A)));
|
||||||
DP_STATS_INCC(peer, tx.pkt_type[pkt_type].mcs_count[mcs], 1,
|
DP_STATS_INCC(peer, tx.pkt_type[pkt_type].mcs_count[mcs], 1,
|
||||||
((mcs < (MAX_MCS_11A)) && (pkt_type == DOT11_A)));
|
((mcs < (MAX_MCS_11A)) && (pkt_type == DOT11_A)));
|
||||||
DP_STATS_INCC(peer, tx.pkt_type[pkt_type].mcs_count[MAX_MCS], 1,
|
DP_STATS_INCC(peer, tx.pkt_type[pkt_type].mcs_count[MAX_MCS - 1], 1,
|
||||||
((mcs >= MAX_MCS_11B) && (pkt_type == DOT11_B)));
|
((mcs >= MAX_MCS_11B) && (pkt_type == DOT11_B)));
|
||||||
DP_STATS_INCC(peer, tx.pkt_type[pkt_type].mcs_count[mcs], 1,
|
DP_STATS_INCC(peer, tx.pkt_type[pkt_type].mcs_count[mcs], 1,
|
||||||
((mcs < MAX_MCS_11B) && (pkt_type == DOT11_B)));
|
((mcs < MAX_MCS_11B) && (pkt_type == DOT11_B)));
|
||||||
DP_STATS_INCC(peer, tx.pkt_type[pkt_type].mcs_count[MAX_MCS], 1,
|
DP_STATS_INCC(peer, tx.pkt_type[pkt_type].mcs_count[MAX_MCS - 1], 1,
|
||||||
((mcs >= MAX_MCS_11A) && (pkt_type == DOT11_N)));
|
((mcs >= MAX_MCS_11A) && (pkt_type == DOT11_N)));
|
||||||
DP_STATS_INCC(peer, tx.pkt_type[pkt_type].mcs_count[mcs], 1,
|
DP_STATS_INCC(peer, tx.pkt_type[pkt_type].mcs_count[mcs], 1,
|
||||||
((mcs < MAX_MCS_11A) && (pkt_type == DOT11_N)));
|
((mcs < MAX_MCS_11A) && (pkt_type == DOT11_N)));
|
||||||
DP_STATS_INCC(peer, tx.pkt_type[pkt_type].mcs_count[MAX_MCS], 1,
|
DP_STATS_INCC(peer, tx.pkt_type[pkt_type].mcs_count[MAX_MCS - 1], 1,
|
||||||
((mcs >= MAX_MCS_11AC) && (pkt_type == DOT11_AC)));
|
((mcs >= MAX_MCS_11AC) && (pkt_type == DOT11_AC)));
|
||||||
DP_STATS_INCC(peer, tx.pkt_type[pkt_type].mcs_count[mcs], 1,
|
DP_STATS_INCC(peer, tx.pkt_type[pkt_type].mcs_count[mcs], 1,
|
||||||
((mcs < MAX_MCS_11AC) && (pkt_type == DOT11_AC)));
|
((mcs < MAX_MCS_11AC) && (pkt_type == DOT11_AC)));
|
||||||
DP_STATS_INCC(peer, tx.pkt_type[pkt_type].mcs_count[MAX_MCS], 1,
|
DP_STATS_INCC(peer, tx.pkt_type[pkt_type].mcs_count[MAX_MCS - 1], 1,
|
||||||
((mcs >= (MAX_MCS - 1)) && (pkt_type == DOT11_AX)));
|
((mcs >= (MAX_MCS - 1)) && (pkt_type == DOT11_AX)));
|
||||||
DP_STATS_INCC(peer, tx.pkt_type[pkt_type].mcs_count[mcs], 1,
|
DP_STATS_INCC(peer, tx.pkt_type[pkt_type].mcs_count[mcs], 1,
|
||||||
((mcs < (MAX_MCS - 1)) && (pkt_type == DOT11_AX)));
|
((mcs < (MAX_MCS - 1)) && (pkt_type == DOT11_AX)));
|
||||||
|
@@ -428,6 +428,8 @@ struct hal_rx_ppdu_common_info {
|
|||||||
uint32_t ppdu_id;
|
uint32_t ppdu_id;
|
||||||
uint32_t last_ppdu_id;
|
uint32_t last_ppdu_id;
|
||||||
uint32_t ppdu_timestamp;
|
uint32_t ppdu_timestamp;
|
||||||
|
uint32_t mpdu_cnt_fcs_ok;
|
||||||
|
uint32_t mpdu_cnt_fcs_err;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct hal_rx_ppdu_info {
|
struct hal_rx_ppdu_info {
|
||||||
@@ -523,6 +525,9 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
|
|||||||
ppdu_info->rx_status.ast_index =
|
ppdu_info->rx_status.ast_index =
|
||||||
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_4,
|
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_4,
|
||||||
AST_INDEX);
|
AST_INDEX);
|
||||||
|
ppdu_info->rx_status.mcs =
|
||||||
|
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_1, MCS);
|
||||||
|
|
||||||
tid = HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_12,
|
tid = HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_12,
|
||||||
RECEIVED_QOS_DATA_TID_BITMAP);
|
RECEIVED_QOS_DATA_TID_BITMAP);
|
||||||
ppdu_info->rx_status.tid = qdf_find_first_bit(&tid, sizeof(tid)*8);
|
ppdu_info->rx_status.tid = qdf_find_first_bit(&tid, sizeof(tid)*8);
|
||||||
@@ -536,13 +541,21 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
|
|||||||
UDP_MSDU_COUNT);
|
UDP_MSDU_COUNT);
|
||||||
ppdu_info->rx_status.other_msdu_count =
|
ppdu_info->rx_status.other_msdu_count =
|
||||||
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_10,
|
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_10,
|
||||||
OTHER_MSDU_COUNT);
|
OTHER_MSDU_COUNT);
|
||||||
|
ppdu_info->rx_status.nss =
|
||||||
|
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_1, NSS);
|
||||||
ppdu_info->rx_status.first_data_seq_ctrl =
|
ppdu_info->rx_status.first_data_seq_ctrl =
|
||||||
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_3,
|
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_3,
|
||||||
DATA_SEQUENCE_CONTROL_INFO_VALID);
|
DATA_SEQUENCE_CONTROL_INFO_VALID);
|
||||||
ppdu_info->rx_status.preamble_type =
|
ppdu_info->rx_status.preamble_type =
|
||||||
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_3,
|
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_3,
|
||||||
HT_CONTROL_FIELD_PKT_TYPE);
|
HT_CONTROL_FIELD_PKT_TYPE);
|
||||||
|
ppdu_info->com_info.mpdu_cnt_fcs_ok =
|
||||||
|
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_3,
|
||||||
|
MPDU_CNT_FCS_OK);
|
||||||
|
ppdu_info->com_info.mpdu_cnt_fcs_err =
|
||||||
|
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_2,
|
||||||
|
MPDU_CNT_FCS_ERR);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user