qca-wifi: Fix non-QOS Tx frame capture

Fix for missing non-QOS frames in Tx capture.

Change-Id: I8f76130b894d72701e675f36caadb5b555bc2ed6
This commit is contained in:
Karunakar Dasineni
2019-09-27 15:31:49 -07:00
부모 9eedd30836
커밋 8b89b32689

파일 보기

@@ -667,7 +667,8 @@ static uint32_t dp_tx_update_80211_hdr(struct dp_pdev *pdev,
}
mpdu_buf_len = sizeof(struct ieee80211_frame) + LLC_SNAP_HDR_LEN;
mpdu_buf_len += sizeof(struct ieee80211_qoscntl);
if (qdf_likely(ppdu_desc->user[0].tid != DP_NON_QOS_TID))
mpdu_buf_len += sizeof(struct ieee80211_qoscntl);
nbuf->protocol = qdf_htons(ETH_P_802_2);
@@ -684,9 +685,11 @@ static uint32_t dp_tx_update_80211_hdr(struct dp_pdev *pdev,
ptr_hdr = ptr_hdr + (sizeof(struct ieee80211_frame));
/* update qoscntl header */
qdf_mem_copy(ptr_hdr, ptr_qoscntl, sizeof(struct ieee80211_qoscntl));
ptr_hdr = ptr_hdr + sizeof(struct ieee80211_qoscntl);
if (qdf_likely(ppdu_desc->user[0].tid != DP_NON_QOS_TID)) {
qdf_mem_copy(ptr_hdr, ptr_qoscntl,
sizeof(struct ieee80211_qoscntl));
ptr_hdr = ptr_hdr + sizeof(struct ieee80211_qoscntl);
}
/* update LLC */
*ptr_hdr = LLC_SNAP_LSAP;
@@ -1340,7 +1343,13 @@ free_ppdu_desc:
/* missed seq number */
seq_no = ppdu_desc->user[0].start_seq + i;
if (!(ppdu_desc->user[0].failed_bitmap[k] & 1 << i)) {
/* Fill failed MPDUs in AMPDU if they're available in
* subsequent PPDUs in current burst schedule. This
* is not applicable for non-QoS TIDs (no AMPDUs)
*/
if (qdf_likely(ppdu_desc->user[0].tid !=
DP_NON_QOS_TID) &&
!(ppdu_desc->user[0].failed_bitmap[k] & (1 << i))) {
QDF_TRACE(QDF_MODULE_ID_TX_CAPTURE,
QDF_TRACE_LEVEL_ERROR,
"%s: finding missing seq no: %d in other ppdu list cnt[%d]",
@@ -1619,9 +1628,18 @@ void dp_tx_ppdu_stats_process(void *context)
qdf_nbuf_free(nbuf);
continue;
}
dequeue_msdu_again:
tid = ppdu_desc->user[0].tid;
/* Non-QOS frames are being indicated with TID 0
* in WBM completion path, an hence we should
* TID 0 to reap MSDUs from completion path
*/
if (qdf_unlikely(ppdu_desc->user[0].tid ==
DP_NON_QOS_TID))
tid = 0;
else
tid = ppdu_desc->user[0].tid;
dequeue_msdu_again:
num_msdu = ppdu_desc->user[0].num_msdu;
start_tsf = ppdu_desc->ppdu_start_timestamp;
end_tsf = ppdu_desc->ppdu_end_timestamp;