diff --git a/dp/wifi3.0/dp_rx.h b/dp/wifi3.0/dp_rx.h index f1013084e9..1fb90b5988 100644 --- a/dp/wifi3.0/dp_rx.h +++ b/dp/wifi3.0/dp_rx.h @@ -1070,6 +1070,24 @@ static inline void dp_rx_desc_prep(struct dp_rx_desc *rx_desc, qdf_nbuf_t nbuf) } #endif /* RX_DESC_DEBUG_CHECK */ +#ifdef RXDMA_ERR_PKT_DROP +/** + * dp_rxdma_err_nbuf_drop(): Function to drop rxdma err frame + * @nbuf: buffer pointer + * + * return: bool: true if RXDMA_ERR_PKT_DROP is enabled + */ +static inline bool dp_rxdma_err_nbuf_drop(void) +{ + return true; +} +#else +static inline bool dp_rxdma_err_nbuf_drop(void) +{ + return false; +} +#endif + void dp_rx_process_rxdma_err(struct dp_soc *soc, qdf_nbuf_t nbuf, uint8_t *rx_tlv_hdr, struct dp_peer *peer, uint8_t err_code, uint8_t mac_id); diff --git a/dp/wifi3.0/dp_rx_err.c b/dp/wifi3.0/dp_rx_err.c index 2ae41a0303..f8973165ca 100644 --- a/dp/wifi3.0/dp_rx_err.c +++ b/dp/wifi3.0/dp_rx_err.c @@ -949,6 +949,10 @@ dp_rx_process_rxdma_err(struct dp_soc *soc, qdf_nbuf_t nbuf, hal_rx_dump_pkt_tlvs(soc->hal_soc, rx_tlv_hdr, QDF_TRACE_LEVEL_INFO); + if (dp_rxdma_err_nbuf_drop()) { + qdf_nbuf_free(nbuf); + return; + } qdf_assert(0); } @@ -1507,7 +1511,7 @@ done: while (nbuf) { struct dp_peer *peer; uint16_t peer_id; - uint8_t e_code; + uint8_t err_code; uint8_t *tlv_hdr; rx_tlv_hdr = qdf_nbuf_data(nbuf); @@ -1638,27 +1642,20 @@ done: case HAL_RXDMA_ERR_DECRYPT: pool_id = wbm_err_info.pool_id; - e_code = wbm_err_info.rxdma_err_code; + err_code = wbm_err_info.rxdma_err_code; tlv_hdr = rx_tlv_hdr; + dp_rx_process_rxdma_err(soc, nbuf, + tlv_hdr, peer, + err_code, + pool_id); + nbuf = next; if (peer) { DP_STATS_INC(peer, rx.err. decrypt_err, 1); - } else { - dp_rx_process_rxdma_err(soc, - nbuf, - tlv_hdr, - NULL, - e_code, - pool_id - ); - nbuf = next; - continue; + dp_peer_unref_del_find_by_id( + peer); } - - QDF_TRACE(QDF_MODULE_ID_DP, - QDF_TRACE_LEVEL_DEBUG, - "Packet received with Decrypt error"); - break; + continue; default: dp_err_rl("RXDMA error %d",