diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 821da64c3d..c2e63dff6a 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -5811,7 +5811,7 @@ dp_ppdu_ring_cfg(struct dp_pdev *pdev) struct htt_rx_ring_tlv_filter htt_tlv_filter = {0}; int mac_id; - htt_tlv_filter.mpdu_start = 0; + htt_tlv_filter.mpdu_start = 1; htt_tlv_filter.msdu_start = 0; htt_tlv_filter.packet = 0; htt_tlv_filter.msdu_end = 0; diff --git a/hal/wifi3.0/hal_api_mon.h b/hal/wifi3.0/hal_api_mon.h index 26d4125ce1..a3003fa4f9 100644 --- a/hal/wifi3.0/hal_api_mon.h +++ b/hal/wifi3.0/hal_api_mon.h @@ -1002,6 +1002,26 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info) ppdu_info->msdu_info.first_msdu_payload = rx_tlv; ppdu_info->msdu_info.payload_len = tlv_len; break; + case WIFIRX_MPDU_START_E: + { + uint8_t *rx_mpdu_start = + (uint8_t *)rx_tlv + HAL_RX_OFFSET(RX_MPDU_START_0, + RX_MPDU_INFO_RX_MPDU_INFO_DETAILS); + uint32_t ppdu_id = HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_0, + PHY_PPDU_ID); + + if (ppdu_info->rx_status.prev_ppdu_id != ppdu_id) { + ppdu_info->rx_status.prev_ppdu_id = ppdu_id; + ppdu_info->rx_status.ppdu_len = + HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_13, + MPDU_LENGTH); + } else { + ppdu_info->rx_status.ppdu_len += + HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_13, + MPDU_LENGTH); + } + break; + } case 0: return HAL_TLV_STATUS_PPDU_DONE; diff --git a/qdf/inc/qdf_nbuf.h b/qdf/inc/qdf_nbuf.h index c9e1eaaed5..c190ca1abe 100644 --- a/qdf/inc/qdf_nbuf.h +++ b/qdf/inc/qdf_nbuf.h @@ -217,6 +217,7 @@ * @he_data3: HE property of received frame * @he_data4: HE property of received frame * @he_data5: HE property of received frame + * @prev_ppdu_id: ppdu_id in previously received message * */ struct mon_rx_status { @@ -286,6 +287,7 @@ struct mon_rx_status { uint16_t he_data5; uint16_t he_data6; uint32_t ppdu_len; + uint32_t prev_ppdu_id; }; /* Masks for HE SIG known fields in mon_rx_status structure */