diff --git a/dp/wifi3.0/dp_rx_mon_status.c b/dp/wifi3.0/dp_rx_mon_status.c index b7b9547fc5..d232e74e99 100644 --- a/dp/wifi3.0/dp_rx_mon_status.c +++ b/dp/wifi3.0/dp_rx_mon_status.c @@ -2036,8 +2036,13 @@ dp_rx_pdev_mon_status_desc_pool_init(struct dp_pdev *pdev, uint32_t mac_id) pdev->mon_ppdu_status = DP_PPDU_STATUS_START; - qdf_mem_zero(&pdev->ppdu_info.rx_status, - sizeof(pdev->ppdu_info.rx_status)); + qdf_mem_zero(&pdev->ppdu_info, sizeof(pdev->ppdu_info)); + + /* + * Set ppdu_id to HAL_INVALID_PPDU_ID in order to avoid ppdu_id + * match with '0' ppdu_id from monitor status ring + */ + pdev->ppdu_info.com_info.ppdu_id = HAL_INVALID_PPDU_ID; qdf_mem_zero(&pdev->rx_mon_stats, sizeof(pdev->rx_mon_stats)); diff --git a/hal/wifi3.0/hal_api_mon.h b/hal/wifi3.0/hal_api_mon.h index 5af0dbc46a..890725ebfd 100644 --- a/hal/wifi3.0/hal_api_mon.h +++ b/hal/wifi3.0/hal_api_mon.h @@ -154,8 +154,15 @@ rs->rs_flags |= (IEEE80211_AMSDU_FLAG); \ } \ +#define HAL_RX_SET_MSDU_AGGREGATION((rs_mpdu), (rs_ppdu))\ +{\ + if (rs_mpdu->rs_flags & IEEE80211_AMSDU_FLAG)\ + rs_ppdu->rs_flags |= IEEE80211_AMSDU_FLAG;\ +} \ + #else #define HAL_RX_GET_MSDU_AGGREGATION(rx_desc, rs) +#define HAL_RX_SET_MSDU_AGGREGATION(rs_mpdu, rs_ppdu) #endif /* Max MPDUs per status buffer */ @@ -170,6 +177,7 @@ * struct hal_rx_mon_desc_info () - HAL Rx Monitor descriptor info * * @ppdu_id: PHY ppdu id + * @status_ppdu_id: status PHY ppdu id * @status_buf_count: number of status buffer count * @rxdma_push_reason: rxdma push reason * @rxdma_error_code: rxdma error code @@ -184,6 +192,7 @@ */ struct hal_rx_mon_desc_info { uint16_t ppdu_id; + uint16_t status_ppdu_id; uint8_t status_buf_count; uint8_t rxdma_push_reason; uint8_t rxdma_error_code; @@ -471,7 +480,6 @@ struct hal_rx_ppdu_common_info { uint32_t mpdu_cnt_fcs_ok; uint32_t mpdu_cnt_fcs_err; uint32_t mpdu_fcs_ok_bitmap[HAL_RX_NUM_WORDS_PER_PPDU_BITMAP]; - uint32_t last_ppdu_id; uint32_t mpdu_cnt; uint8_t num_users; }; diff --git a/hal/wifi3.0/hal_generic_api.h b/hal/wifi3.0/hal_generic_api.h index 1801035d8f..00405bd72d 100644 --- a/hal/wifi3.0/hal_generic_api.h +++ b/hal/wifi3.0/hal_generic_api.h @@ -568,11 +568,18 @@ hal_rx_status_get_tlv_info_generic(void *rx_tlv_hdr, void *ppduinfo, case WIFIRX_PPDU_START_E: { - struct hal_rx_ppdu_common_info *com_info = &ppdu_info->com_info; + if (qdf_likely(ppdu_info->com_info.ppdu_id != + HAL_RX_GET(rx_tlv, RX_PPDU_START_0, PHY_PPDU_ID))) + /* Reset ppdu_info before processing the ppdu */ + qdf_mem_zero(ppdu_info, + sizeof(struct hal_rx_ppdu_info)); + else + qdf_assert_always(0); ppdu_info->com_info.ppdu_id = HAL_RX_GET(rx_tlv, RX_PPDU_START_0, PHY_PPDU_ID); + /* channel number is set in PHY meta data */ ppdu_info->rx_status.chan_num = (HAL_RX_GET(rx_tlv, RX_PPDU_START_1, @@ -594,20 +601,6 @@ hal_rx_status_get_tlv_info_generic(void *rx_tlv_hdr, void *ppduinfo, ppdu_info->com_info.ppdu_timestamp; ppdu_info->rx_state = HAL_RX_MON_PPDU_START; - /* If last ppdu_id doesn't match new ppdu_id, - * 1. reset mpdu_cnt - * 2. update last_ppdu_id with new - * 3. reset mpdu fcs bitmap - */ - if (com_info->ppdu_id != com_info->last_ppdu_id) { - com_info->mpdu_cnt = 0; - com_info->last_ppdu_id = - com_info->ppdu_id; - com_info->num_users = 0; - qdf_mem_zero(&com_info->mpdu_fcs_ok_bitmap, - HAL_RX_NUM_WORDS_PER_PPDU_BITMAP * - sizeof(com_info->mpdu_fcs_ok_bitmap[0])); - } break; } diff --git a/hal/wifi3.0/hal_rx.h b/hal/wifi3.0/hal_rx.h index 476a23dde9..5757b63c57 100644 --- a/hal/wifi3.0/hal_rx.h +++ b/hal/wifi3.0/hal_rx.h @@ -21,6 +21,7 @@ #include +#define HAL_INVALID_PPDU_ID 0xFFFFFFFF #define HAL_RX_OFFSET(block, field) block##_##field##_OFFSET #define HAL_RX_LSB(block, field) block##_##field##_LSB #define HAL_RX_MASk(block, field) block##_##field##_MASK