diff --git a/dp/wifi3.0/dp_tx_capture.c b/dp/wifi3.0/dp_tx_capture.c index 6cc839308f..ba80678a5d 100644 --- a/dp/wifi3.0/dp_tx_capture.c +++ b/dp/wifi3.0/dp_tx_capture.c @@ -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;