diff --git a/core/dp/htt/htt_rx.c b/core/dp/htt/htt_rx.c index ac6bcf29ad..1e6bd0b009 100644 --- a/core/dp/htt/htt_rx.c +++ b/core/dp/htt/htt_rx.c @@ -2114,6 +2114,11 @@ uint32_t htt_rx_amsdu_rx_in_order_get_pktlog(qdf_nbuf_t rx_ind_msg) } /* Return values: 1 - success, 0 - failure */ +#define RX_DESC_DISCARD_IS_SET ((*((u_int8_t *) &rx_desc->fw_desc.u.val)) & \ + FW_RX_DESC_DISCARD_M) +#define RX_DESC_MIC_ERR_IS_SET ((*((u_int8_t *) &rx_desc->fw_desc.u.val)) & \ + FW_RX_DESC_ANY_ERR_M) + static int htt_rx_amsdu_rx_in_order_pop_ll(htt_pdev_handle pdev, qdf_nbuf_t rx_ind_msg, @@ -2223,15 +2228,16 @@ htt_rx_amsdu_rx_in_order_pop_ll(htt_pdev_handle pdev, /* calling callback function for packet logging */ if (pdev->rx_pkt_dump_cb) { - if (qdf_unlikely((*((u_int8_t *) - &rx_desc->fw_desc.u.val)) & - FW_RX_DESC_ANY_ERR_M)) + if (qdf_unlikely(RX_DESC_MIC_ERR_IS_SET && + !RX_DESC_DISCARD_IS_SET)) status = RX_PKT_FATE_FW_DROP_INVALID; pdev->rx_pkt_dump_cb(msdu, peer_id, status); } - - if (qdf_unlikely((*((u_int8_t *) &rx_desc->fw_desc.u.val)) & - FW_RX_DESC_ANY_ERR_M)) { + /* if discard flag is set (SA is self MAC), then + * don't check mic failure. + */ + if (qdf_unlikely(RX_DESC_MIC_ERR_IS_SET && + !RX_DESC_DISCARD_IS_SET)) { uint8_t tid = HTT_RX_IN_ORD_PADDR_IND_EXT_TID_GET( *(u_int32_t *)rx_ind_data);