diff --git a/dp/inc/cdp_txrx_host_stats.h b/dp/inc/cdp_txrx_host_stats.h index 69d90e98d3..9a18113a63 100644 --- a/dp/inc/cdp_txrx_host_stats.h +++ b/dp/inc/cdp_txrx_host_stats.h @@ -24,7 +24,6 @@ #ifndef _CDP_TXRX_HOST_STATS_H_ #define _CDP_TXRX_HOST_STATS_H_ #include "cdp_txrx_handle.h" -#include "cdp_txrx_extd_struct.h" /** * cdp_host_stats_get: cdp call to get host stats * @soc: SOC handle diff --git a/dp/wifi3.0/dp_rx.c b/dp/wifi3.0/dp_rx.c index 9f5f4988e9..929d9c97e7 100644 --- a/dp/wifi3.0/dp_rx.c +++ b/dp/wifi3.0/dp_rx.c @@ -1366,6 +1366,7 @@ static void dp_rx_msdu_stats_update(struct dp_soc *soc, DP_STATS_INC_PKT(peer, rx.rcvd_reo[ring_id], 1, msdu_len); DP_STATS_INCC(peer, rx.non_amsdu_cnt, 1, is_not_amsdu); DP_STATS_INCC(peer, rx.amsdu_cnt, 1, !is_not_amsdu); + DP_STATS_INCC(peer, rx.rx_retries, 1, qdf_nbuf_is_rx_retry_flag(nbuf)); tid_stats->msdu_cnt++; if (qdf_unlikely(qdf_nbuf_is_da_mcbc(nbuf) && @@ -1798,6 +1799,9 @@ more_data: /* Get MSDU DESC info */ hal_rx_msdu_desc_info_get(ring_desc, &msdu_desc_info); + if (mpdu_desc_info.mpdu_flags & HAL_MPDU_F_RETRY_BIT) + qdf_nbuf_set_rx_retry_flag(rx_desc->nbuf, 1); + if (qdf_unlikely(mpdu_desc_info.mpdu_flags & HAL_MPDU_F_RAW_AMPDU)) { /* previous msdu has end bit set, so current one is diff --git a/qdf/inc/qdf_nbuf.h b/qdf/inc/qdf_nbuf.h index 6318b85477..1d7bb512e1 100644 --- a/qdf/inc/qdf_nbuf.h +++ b/qdf/inc/qdf_nbuf.h @@ -1271,6 +1271,29 @@ static inline int qdf_nbuf_is_sa_valid(qdf_nbuf_t buf) return __qdf_nbuf_is_sa_valid(buf); } +/** + * qdf_nbuf_set_rx_retry_flag() - set rx retry flag bit + * @buf: Network buffer + * @val: 0/1 + * + * Return: void + */ +static inline void qdf_nbuf_set_rx_retry_flag(qdf_nbuf_t buf, uint8_t val) +{ + __qdf_nbuf_set_rx_retry_flag(buf, val); +} + +/** + * qdf_nbuf_is_rx_retry_flag() - get rx retry flag bit + * @buf: Network buffer + * + * Return: integer value - 0/1 + */ +static inline int qdf_nbuf_is_rx_retry_flag(qdf_nbuf_t buf) +{ + return __qdf_nbuf_is_rx_retry_flag(buf); +} + /** * qdf_nbuf_set_raw_frame() - set raw_frame bit * @buf: Network buffer diff --git a/qdf/linux/src/i_qdf_nbuf.h b/qdf/linux/src/i_qdf_nbuf.h index 0ea6f2d181..9ca1af3fd4 100644 --- a/qdf/linux/src/i_qdf_nbuf.h +++ b/qdf/linux/src/i_qdf_nbuf.h @@ -150,6 +150,7 @@ typedef union { * @rx.is_raw_frame: RAW frame * @rx.fcs_err: FCS error * @rx.tid_val: tid value + * @rx.flag_retry: flag to indicate MSDU is retried * @rx.reserved: reserved * * @tx.dev.priv_cb_w.fctx: ctx to handle special pkts defined by ftype @@ -265,7 +266,8 @@ struct qdf_nbuf_cb { uint8_t is_raw_frame:1, fcs_err:1, tid_val:4, - reserved:2; + flag_retry:1, + reserved:1; } rx; /* Note: MAX: 40 bytes */ @@ -404,6 +406,10 @@ QDF_COMPILE_TIME_ASSERT(qdf_nbuf_cb_size, (((struct qdf_nbuf_cb *) \ ((skb)->cb))->u.rx.flag_sa_valid) +#define QDF_NBUF_CB_RX_RETRY_FLAG(skb) \ + (((struct qdf_nbuf_cb *) \ + ((skb)->cb))->u.rx.flag_retry) + #define QDF_NBUF_CB_RX_RAW_FRAME(skb) \ (((struct qdf_nbuf_cb *) \ ((skb)->cb))->u.rx.is_raw_frame) @@ -643,6 +649,12 @@ typedef void (*qdf_nbuf_free_t)(__qdf_nbuf_t); #define __qdf_nbuf_is_sa_valid(skb) \ (QDF_NBUF_CB_RX_SA_VALID((skb))) +#define __qdf_nbuf_set_rx_retry_flag(skb, val) \ + ((QDF_NBUF_CB_RX_RETRY_FLAG((skb))) = val) + +#define __qdf_nbuf_is_rx_retry_flag(skb) \ + (QDF_NBUF_CB_RX_RETRY_FLAG((skb))) + #define __qdf_nbuf_set_raw_frame(skb, val) \ ((QDF_NBUF_CB_RX_RAW_FRAME((skb))) = val)