Loading dp/wifi3.0/dp_main.c +2 −0 Original line number Diff line number Diff line Loading @@ -10573,6 +10573,8 @@ static QDF_STATUS dp_runtime_suspend(struct cdp_soc_t *soc_hdl, uint8_t pdev_id) /* perform a force flush if tx is pending */ for (i = 0; i < soc->num_tcl_data_rings; i++) { if (i == IPA_TCL_DATA_RING_IDX) continue; hal_srng_set_event(soc->tcl_data_ring[i].hal_srng, HAL_SRNG_FLUSH_EVENT); dp_flush_ring_hptp(soc, soc->tcl_data_ring[i].hal_srng); Loading dp/wifi3.0/dp_rx.c +19 −11 Original line number Diff line number Diff line Loading @@ -2399,18 +2399,26 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, * Check if DMA completed -- msdu_done is the last bit * to be written */ if (qdf_unlikely(!qdf_nbuf_is_rx_chfrag_cont(nbuf) && !hal_rx_attn_msdu_done_get(rx_tlv_hdr))) { dp_err("MSDU DONE failure"); if (qdf_likely(!qdf_nbuf_is_rx_chfrag_cont(nbuf))) { if (qdf_unlikely(!hal_rx_attn_msdu_done_get( rx_tlv_hdr))) { dp_err_rl("MSDU DONE failure"); DP_STATS_INC(soc, rx.err.msdu_done_fail, 1); hal_rx_dump_pkt_tlvs(hal_soc, rx_tlv_hdr, QDF_TRACE_LEVEL_INFO); tid_stats->fail_cnt[MSDU_DONE_FAILURE]++; qdf_nbuf_free(nbuf); qdf_assert(0); qdf_nbuf_free(nbuf); nbuf = next; continue; } else if (qdf_unlikely(hal_rx_attn_msdu_len_err_get( rx_tlv_hdr))) { DP_STATS_INC(soc, rx.err.msdu_len_err, 1); qdf_nbuf_free(nbuf); nbuf = next; continue; } } DP_HIST_PACKET_COUNT_INC(vdev->pdev->pdev_id); /* Loading dp/wifi3.0/dp_types.h +2 −0 Original line number Diff line number Diff line Loading @@ -871,6 +871,8 @@ struct dp_soc_stats { uint32_t intrabss_eapol_drop; /* Non Eapol pkt drop cnt due to peer not authorized */ uint32_t peer_unauth_rx_pkt_drop; /* MSDU len err count */ uint32_t msdu_len_err; } err; /* packet count per core - per ring */ Loading hal/wifi3.0/hal_rx.h +22 −0 Original line number Diff line number Diff line Loading @@ -3782,4 +3782,26 @@ bool hal_rx_is_buf_addr_info_valid( return (HAL_RX_BUFFER_ADDR_31_0_GET(buf_addr_info) == 0) ? false : true; } #define HAL_RX_ATTN_MSDU_LEN_ERR_GET(_rx_attn) \ (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_attn, \ RX_ATTENTION_1_MSDU_LENGTH_ERR_OFFSET)), \ RX_ATTENTION_1_MSDU_LENGTH_ERR_MASK, \ RX_ATTENTION_1_MSDU_LENGTH_ERR_LSB)) /** * hal_rx_attn_msdu_len_err_get(): Get msdu_len_err value from * rx attention tlvs * @buf: pointer to rx pkt tlvs hdr * * Return: msdu_len_err value */ static inline uint32_t hal_rx_attn_msdu_len_err_get(uint8_t *buf) { struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf; struct rx_attention *rx_attn = &pkt_tlvs->attn_tlv.rx_attn; return HAL_RX_ATTN_MSDU_LEN_ERR_GET(rx_attn); } #endif /* _HAL_RX_H */ Loading
dp/wifi3.0/dp_main.c +2 −0 Original line number Diff line number Diff line Loading @@ -10573,6 +10573,8 @@ static QDF_STATUS dp_runtime_suspend(struct cdp_soc_t *soc_hdl, uint8_t pdev_id) /* perform a force flush if tx is pending */ for (i = 0; i < soc->num_tcl_data_rings; i++) { if (i == IPA_TCL_DATA_RING_IDX) continue; hal_srng_set_event(soc->tcl_data_ring[i].hal_srng, HAL_SRNG_FLUSH_EVENT); dp_flush_ring_hptp(soc, soc->tcl_data_ring[i].hal_srng); Loading
dp/wifi3.0/dp_rx.c +19 −11 Original line number Diff line number Diff line Loading @@ -2399,18 +2399,26 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, * Check if DMA completed -- msdu_done is the last bit * to be written */ if (qdf_unlikely(!qdf_nbuf_is_rx_chfrag_cont(nbuf) && !hal_rx_attn_msdu_done_get(rx_tlv_hdr))) { dp_err("MSDU DONE failure"); if (qdf_likely(!qdf_nbuf_is_rx_chfrag_cont(nbuf))) { if (qdf_unlikely(!hal_rx_attn_msdu_done_get( rx_tlv_hdr))) { dp_err_rl("MSDU DONE failure"); DP_STATS_INC(soc, rx.err.msdu_done_fail, 1); hal_rx_dump_pkt_tlvs(hal_soc, rx_tlv_hdr, QDF_TRACE_LEVEL_INFO); tid_stats->fail_cnt[MSDU_DONE_FAILURE]++; qdf_nbuf_free(nbuf); qdf_assert(0); qdf_nbuf_free(nbuf); nbuf = next; continue; } else if (qdf_unlikely(hal_rx_attn_msdu_len_err_get( rx_tlv_hdr))) { DP_STATS_INC(soc, rx.err.msdu_len_err, 1); qdf_nbuf_free(nbuf); nbuf = next; continue; } } DP_HIST_PACKET_COUNT_INC(vdev->pdev->pdev_id); /* Loading
dp/wifi3.0/dp_types.h +2 −0 Original line number Diff line number Diff line Loading @@ -871,6 +871,8 @@ struct dp_soc_stats { uint32_t intrabss_eapol_drop; /* Non Eapol pkt drop cnt due to peer not authorized */ uint32_t peer_unauth_rx_pkt_drop; /* MSDU len err count */ uint32_t msdu_len_err; } err; /* packet count per core - per ring */ Loading
hal/wifi3.0/hal_rx.h +22 −0 Original line number Diff line number Diff line Loading @@ -3782,4 +3782,26 @@ bool hal_rx_is_buf_addr_info_valid( return (HAL_RX_BUFFER_ADDR_31_0_GET(buf_addr_info) == 0) ? false : true; } #define HAL_RX_ATTN_MSDU_LEN_ERR_GET(_rx_attn) \ (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_attn, \ RX_ATTENTION_1_MSDU_LENGTH_ERR_OFFSET)), \ RX_ATTENTION_1_MSDU_LENGTH_ERR_MASK, \ RX_ATTENTION_1_MSDU_LENGTH_ERR_LSB)) /** * hal_rx_attn_msdu_len_err_get(): Get msdu_len_err value from * rx attention tlvs * @buf: pointer to rx pkt tlvs hdr * * Return: msdu_len_err value */ static inline uint32_t hal_rx_attn_msdu_len_err_get(uint8_t *buf) { struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf; struct rx_attention *rx_attn = &pkt_tlvs->attn_tlv.rx_attn; return HAL_RX_ATTN_MSDU_LEN_ERR_GET(rx_attn); } #endif /* _HAL_RX_H */