diff --git a/dp/inc/cdp_txrx_stats_struct.h b/dp/inc/cdp_txrx_stats_struct.h index 21151191cb..806fe8f9ee 100644 --- a/dp/inc/cdp_txrx_stats_struct.h +++ b/dp/inc/cdp_txrx_stats_struct.h @@ -679,6 +679,7 @@ struct cdp_tx_ingress_stats { struct { struct cdp_pkt_info raw_pkt; uint32_t dma_map_error; + uint32_t invalid_raw_pkt_datatype; } raw; /* TSO packets info */ diff --git a/dp/wifi3.0/dp_stats.c b/dp/wifi3.0/dp_stats.c index b7dfb03d4a..cd7c402154 100644 --- a/dp/wifi3.0/dp_stats.c +++ b/dp/wifi3.0/dp_stats.c @@ -5298,6 +5298,8 @@ dp_print_pdev_tx_stats(struct dp_pdev *pdev) pdev->stats.tx_i.raw.raw_pkt.bytes); DP_PRINT_STATS(" DMA map error = %d", pdev->stats.tx_i.raw.dma_map_error); + DP_PRINT_STATS(" RAW pkt type[!data] error = %d", + pdev->stats.tx_i.raw.invalid_raw_pkt_datatype); DP_PRINT_STATS("Reinjected:"); DP_PRINT_STATS(" Packets = %d", pdev->stats.tx_i.reinject_pkts.num); diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c index 7e1f09e56c..e73b3d9a49 100644 --- a/dp/wifi3.0/dp_tx.c +++ b/dp/wifi3.0/dp_tx.c @@ -936,6 +936,13 @@ static qdf_nbuf_t dp_tx_prepare_raw(struct dp_vdev *vdev, qdf_nbuf_t nbuf, DP_STATS_INC_PKT(vdev, tx_i.raw.raw_pkt, 1, qdf_nbuf_len(nbuf)); + /* Continue only if frames are of DATA type */ + if (!DP_FRAME_IS_DATA(qos_wh)) { + DP_STATS_INC(vdev, tx_i.raw.invalid_raw_pkt_datatype, 1); + QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG, + "Pkt. recd is of not data type"); + goto error; + } /* SWAR for HW: Enable WEP bit in the AMSDU frames for RAW mode */ if (vdev->raw_mode_war && (qos_wh->i_fc[0] & QDF_IEEE80211_FC0_SUBTYPE_QOS) &&