Explorar o código

qcacmn: Handle SG case with multiple MSDUs in MPDU

In case of where multiple scatter gather frames are
part of same MPDU last_mpdu_in_msdu will be set only
for last buffer of last scatter frame in MPDU.

Below is the hw descriptors bits when 2 scatter frames
are part of a MPDU

 -----------------------------------------------------------
|Buffer_num | MSDU_NUM | first_in_mpdu | cont | last_in_mpdu |
 -----------------------------------------------------------
|    1     |     1    |       1       |  1   |      0       |
 -----------------------------------------------------------
|    2     |     1    |       0       |  0   |      0       |
 -----------------------------------------------------------
|    3     |     2    |       0       |  1   |      0       |
 -----------------------------------------------------------
|    4     |     2    |       0       |  0   |      1       |
 -----------------------------------------------------------

In above case scatter MSDU boundary checks can be done only
based on continuation bit. So while reaping use continuation
bit instead of last_in_mpdu bit to detect boundary

Change-Id: I42e7360d6a1b7d0cfd9a6688cae51e3854d430ec
CRs-Fixed: 3388668
Chaithanya Garrepalli %!s(int64=2) %!d(string=hai) anos
pai
achega
97fcc90a7e
Modificáronse 1 ficheiros con 1 adicións e 1 borrados
  1. 1 1
      dp/wifi3.0/li/dp_li_rx.c

+ 1 - 1
dp/wifi3.0/li/dp_li_rx.c

@@ -438,7 +438,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->pool_id]++;