瀏覽代碼

qcacmn: Do not check for msdu Done bit for raw packets

Do not check for msdu Done bit for raw packets as HW
does not set this bit for msdus spread across nbufs.

Change-Id: I9c2af01c6b55600511abeec9ab6fc185fcc6ef36
Tallapragada Kalyan 6 年之前
父節點
當前提交
cea9c935f9
共有 1 個文件被更改,包括 26 次插入25 次删除
  1. 26 25
      dp/wifi3.0/dp_rx.c

+ 26 - 25
dp/wifi3.0/dp_rx.c

@@ -1807,29 +1807,6 @@ done:
 		if (qdf_nbuf_is_rx_chfrag_start(nbuf))
 			tid = qdf_nbuf_get_tid_val(nbuf);
 
-		/*
-		 * Check if DMA completed -- msdu_done is the last bit
-		 * to be written
-		 */
-		rx_pdev = soc->pdev_list[rx_desc->pool_id];
-		DP_RX_TID_SAVE(nbuf, tid);
-		if (qdf_unlikely(rx_pdev->delay_stats_flag))
-			qdf_nbuf_set_timestamp(nbuf);
-
-		tid_stats = &rx_pdev->stats.tid_stats.
-			    tid_rx_stats[ring_id][tid];
-		if (qdf_unlikely(!hal_rx_attn_msdu_done_get(rx_tlv_hdr))) {
-			dp_err("MSDU DONE failure");
-			DP_STATS_INC(soc, rx.err.msdu_done_fail, 1);
-			hal_rx_dump_pkt_tlvs(hal_soc, rx_tlv_hdr,
-					QDF_TRACE_LEVEL_INFO);
-			tid_stats->fail_cnt[MSDU_DONE_FAILURE]++;
-			qdf_nbuf_free(nbuf);
-			qdf_assert(0);
-			nbuf = next;
-			continue;
-		}
-
 		peer_mdata =  QDF_NBUF_CB_RX_PEER_ID(nbuf);
 		peer_id = DP_PEER_METADATA_PEER_ID_GET(peer_mdata);
 		peer = dp_peer_find_by_id(soc, peer_id);
@@ -1856,14 +1833,12 @@ done:
 		} else {
 			DP_STATS_INC_PKT(soc, rx.err.rx_invalid_peer, 1,
 					 QDF_NBUF_CB_RX_PKT_LEN(nbuf));
-			tid_stats->fail_cnt[INVALID_PEER_VDEV]++;
 			qdf_nbuf_free(nbuf);
 			nbuf = next;
 			continue;
 		}
 
 		if (qdf_unlikely(!vdev)) {
-			tid_stats->fail_cnt[INVALID_PEER_VDEV]++;
 			qdf_nbuf_free(nbuf);
 			nbuf = next;
 			DP_STATS_INC(soc, rx.err.invalid_vdev, 1);
@@ -1871,6 +1846,32 @@ done:
 			continue;
 		}
 
+		rx_pdev = vdev->pdev;
+		DP_RX_TID_SAVE(nbuf, tid);
+		if (qdf_unlikely(rx_pdev->delay_stats_flag))
+			qdf_nbuf_set_timestamp(nbuf);
+
+		ring_id = QDF_NBUF_CB_RX_CTX_ID(nbuf);
+		tid_stats =
+			&rx_pdev->stats.tid_stats.tid_rx_stats[ring_id][tid];
+
+		/*
+		 * Check if DMA completed -- msdu_done is the last bit
+		 * to be written
+		 */
+		if (qdf_unlikely(!qdf_nbuf_is_raw_frame(nbuf) &&
+				 !hal_rx_attn_msdu_done_get(rx_tlv_hdr))) {
+			dp_err("MSDU DONE failure");
+			DP_STATS_INC(soc, rx.err.msdu_done_fail, 1);
+			hal_rx_dump_pkt_tlvs(hal_soc, rx_tlv_hdr,
+					     QDF_TRACE_LEVEL_INFO);
+			tid_stats->fail_cnt[MSDU_DONE_FAILURE]++;
+			qdf_nbuf_free(nbuf);
+			qdf_assert(0);
+			nbuf = next;
+			continue;
+		}
+
 		DP_HIST_PACKET_COUNT_INC(vdev->pdev->pdev_id);
 		/*
 		 * First IF condition: