فهرست منبع

qcacmn: Handling of scatter gather frames

Update the last msdu flag properly in nbuf cb
to handle SG frames.

Change-Id: I2fe0904bdf0d447d57354c207588519816085f63
CRs-Fixed: 3284984
Sai Rupesh Chevuru 2 سال پیش
والد
کامیت
0991ec65e2
1فایلهای تغییر یافته به همراه11 افزوده شده و 4 حذف شده
  1. 11 4
      dp/wifi3.0/be/dp_be_rx.c

+ 11 - 4
dp/wifi3.0/be/dp_be_rx.c

@@ -379,8 +379,18 @@ more_data:
 		/* Get MSDU DESC info */
 		hal_rx_msdu_desc_info_get_be(ring_desc, &msdu_desc_info);
 
+		/* Set the end bit to identify the last buffer in MPDU */
+		if (msdu_desc_info.msdu_flags & HAL_MSDU_F_LAST_MSDU_IN_MPDU)
+			qdf_nbuf_set_rx_chfrag_end(rx_desc->nbuf, 1);
+
 		if (qdf_unlikely(msdu_desc_info.msdu_flags &
 				 HAL_MSDU_F_MSDU_CONTINUATION)) {
+			/* In dp_rx_sg_create() until the last buffer,
+			 * end bit should not be set. As continuation bit set,
+			 * this is not a last buffer.
+			 */
+			qdf_nbuf_set_rx_chfrag_end(rx_desc->nbuf, 0);
+
 			/* previous msdu has end bit set, so current one is
 			 * the new MPDU
 			 */
@@ -426,7 +436,7 @@ more_data:
 			qdf_nbuf_set_raw_frame(rx_desc->nbuf, 1);
 
 		if (!is_prev_msdu_last &&
-		    msdu_desc_info.msdu_flags & HAL_MSDU_F_LAST_MSDU_IN_MPDU)
+		    !(msdu_desc_info.msdu_flags & HAL_MSDU_F_MSDU_CONTINUATION))
 			is_prev_msdu_last = true;
 
 		rx_bufs_reaped[rx_desc->chip_id][rx_desc->pool_id]++;
@@ -456,9 +466,6 @@ more_data:
 		if (msdu_desc_info.msdu_flags & HAL_MSDU_F_MSDU_CONTINUATION)
 			qdf_nbuf_set_rx_chfrag_cont(rx_desc->nbuf, 1);
 
-		if (msdu_desc_info.msdu_flags & HAL_MSDU_F_LAST_MSDU_IN_MPDU)
-			qdf_nbuf_set_rx_chfrag_end(rx_desc->nbuf, 1);
-
 		if (msdu_desc_info.msdu_flags & HAL_MSDU_F_DA_IS_MCBC)
 			qdf_nbuf_set_da_mcbc(rx_desc->nbuf, 1);