diff --git a/dp/wifi3.0/dp_rx.c b/dp/wifi3.0/dp_rx.c index 3e5f024c7e8d..14112975fbbc 100644 --- a/dp/wifi3.0/dp_rx.c +++ b/dp/wifi3.0/dp_rx.c @@ -420,7 +420,7 @@ dp_rx_intrabss_fwd(struct dp_soc *soc, * * Return: void */ -static + void dp_rx_fill_mesh_stats(struct dp_vdev *vdev, qdf_nbuf_t nbuf, uint8_t *rx_tlv_hdr, struct dp_peer *peer) { @@ -493,7 +493,6 @@ void dp_rx_fill_mesh_stats(struct dp_vdev *vdev, qdf_nbuf_t nbuf, * Return: status(0 indicates drop, 1 indicate to no drop) */ -static inline QDF_STATUS dp_rx_filter_mesh_packets(struct dp_vdev *vdev, qdf_nbuf_t nbuf, uint8_t *rx_tlv_hdr) { @@ -540,13 +539,11 @@ QDF_STATUS dp_rx_filter_mesh_packets(struct dp_vdev *vdev, qdf_nbuf_t nbuf, } #else -static void dp_rx_fill_mesh_stats(struct dp_vdev *vdev, qdf_nbuf_t nbuf, uint8_t *rx_tlv_hdr, struct dp_peer *peer) { } -static inline QDF_STATUS dp_rx_filter_mesh_packets(struct dp_vdev *vdev, qdf_nbuf_t nbuf, uint8_t *rx_tlv_hdr) { diff --git a/dp/wifi3.0/dp_rx.h b/dp/wifi3.0/dp_rx.h index b1636209f6e7..5e9d50a35b21 100644 --- a/dp/wifi3.0/dp_rx.h +++ b/dp/wifi3.0/dp_rx.h @@ -648,8 +648,13 @@ QDF_STATUS dp_rx_link_desc_buf_return(struct dp_soc *soc, struct dp_srng *dp_rxdma_srng, void *buf_addr_info); - uint32_t dp_rxdma_err_process(struct dp_soc *soc, uint32_t mac_id, uint32_t quota); + +void dp_rx_fill_mesh_stats(struct dp_vdev *vdev, qdf_nbuf_t nbuf, + uint8_t *rx_tlv_hdr, struct dp_peer *peer); +QDF_STATUS dp_rx_filter_mesh_packets(struct dp_vdev *vdev, qdf_nbuf_t nbuf, + uint8_t *rx_tlv_hdr); + #endif /* _DP_RX_H */ diff --git a/dp/wifi3.0/dp_rx_err.c b/dp/wifi3.0/dp_rx_err.c index bfd1b00a7c5d..f36c7a290f2b 100644 --- a/dp/wifi3.0/dp_rx_err.c +++ b/dp/wifi3.0/dp_rx_err.c @@ -569,6 +569,23 @@ dp_rx_err_deliver(struct dp_soc *soc, struct dp_rx_desc *rx_desc, */ qdf_nbuf_pull_head(nbuf, (l2_hdr_offset + RX_PKT_TLVS_LEN)); + qdf_nbuf_set_chfrag_start(nbuf, 1); + qdf_nbuf_set_chfrag_end(nbuf, 1); + if (dp_rx_filter_mesh_packets(vdev, nbuf, + rx_desc->rx_buf_start) + == QDF_STATUS_SUCCESS) { + QDF_TRACE(QDF_MODULE_ID_DP, + QDF_TRACE_LEVEL_INFO_MED, + FL("mesh pkt filtered")); + DP_STATS_INC(vdev->pdev, dropped.mesh_filter, + 1); + + qdf_nbuf_free(nbuf); + goto fail; + + } + dp_rx_fill_mesh_stats(vdev, nbuf, rx_desc->rx_buf_start, peer); + if (qdf_unlikely(vdev->rx_decap_type == htt_cmn_pkt_type_raw)) { dp_rx_deliver_raw(vdev, nbuf, peer); } else { diff --git a/dp/wifi3.0/hal_rx.h b/dp/wifi3.0/hal_rx.h index 25b9400e52c9..96c366aca940 100644 --- a/dp/wifi3.0/hal_rx.h +++ b/dp/wifi3.0/hal_rx.h @@ -1906,7 +1906,7 @@ enum hal_reo_error_code { * @ HAL_RXDMA_ERR_FCS : FCS check on the MPDU frame failed * @ HAL_RXDMA_ERR_DECRYPT : Decryption error * @ HAL_RXDMA_ERR_TKIP_MIC : TKIP MIC error - * @ HAL_RXDMA_ERR_UNECRYPTED : Received a frame that was expected to be + * @ HAL_RXDMA_ERR_UNENCRYPTED : Received a frame that was expected to be * encrypted but wasn’t * @ HAL_RXDMA_ERR_MSDU_LEN : MSDU related length error * @ HAL_RXDMA_ERR_MSDU_LIMIT : Number of MSDUs in the MPDUs exceeded