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
2023-03-01 15:10:54 +05:30
提交者 Madan Koyyalamudi
父節點 09c1bea86c
當前提交 97fcc90a7e

查看文件

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