qcacmn: Ignore raw frame if is not of type Data

Non raw traffic gets enqueued to VAP in raw mode
and incorrect fc.type causes HW fault.
Lets proceed only if raw frame is of type data.

Change-Id: I9f0d608cd1b319feb9af642969b258aab813645f
CRs-Fixed: 2434391
This commit is contained in:
Ankit Kumar
2019-04-12 12:33:51 +05:30
committed by nshrivas
parent 2e504085a3
commit 2972a24c55
3 changed files with 10 additions and 0 deletions

View File

@@ -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 */

View File

@@ -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);

View File

@@ -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) &&