Quellcode durchsuchen

Merge "qca-wifi: Add QoS NULL Check for Data Frames"

Linux Build Service Account vor 5 Jahren
Ursprung
Commit
d99bbeb26f
1 geänderte Dateien mit 22 neuen und 7 gelöschten Zeilen
  1. 22 7
      dp/wifi3.0/dp_tx_capture.c

+ 22 - 7
dp/wifi3.0/dp_tx_capture.c

@@ -2936,10 +2936,10 @@ dp_check_ppdu_and_deliver(struct dp_pdev *pdev,
 			continue;
 		}
 
-		if (ppdu_desc->frame_type == CDP_PPDU_FTYPE_CTRL ||
-		    ppdu_desc->htt_frame_type ==
-		    HTT_STATS_FTYPE_SGEN_QOS_NULL ||
-		    type != FRAME_CTRL_TYPE_DATA) {
+		if ((ppdu_desc->frame_type == CDP_PPDU_FTYPE_CTRL) ||
+		    (ppdu_desc->htt_frame_type ==
+		     HTT_STATS_FTYPE_SGEN_QOS_NULL) ||
+		    (type != FRAME_CTRL_TYPE_DATA)) {
 			qdf_nbuf_t nbuf_ppdu = nbuf_ppdu_desc_list[desc_cnt];
 
 			if (dp_check_mgmt_ctrl_ppdu(pdev, nbuf_ppdu)) {
@@ -3235,6 +3235,7 @@ void dp_tx_ppdu_stats_process(void *context)
 			uint32_t num_msdu = 0;
 			uint32_t qlen = 0;
 			uint16_t peer_id;
+			uint8_t type, subtype;
 
 			qdf_nbuf_queue_init(&head_msdu);
 			qdf_nbuf_queue_init(&head_xretries);
@@ -3257,6 +3258,18 @@ void dp_tx_ppdu_stats_process(void *context)
 
 			ppdu_desc = (struct cdp_tx_completion_ppdu *)
 				qdf_nbuf_data(nbuf);
+			type = (ppdu_desc->frame_ctrl &
+				IEEE80211_FC0_TYPE_MASK);
+			subtype = (ppdu_desc->frame_ctrl &
+				   IEEE80211_FC0_SUBTYPE_MASK);
+
+			if ((type == IEEE80211_FC0_TYPE_DATA) &&
+			    (subtype == IEEE80211_FC0_SUBTYPE_QOS_NULL) &&
+			    (ppdu_desc->htt_frame_type ==
+			     HTT_STATS_FTYPE_TIDQ_DATA_SU)) {
+				ppdu_desc->htt_frame_type =
+					HTT_STATS_FTYPE_SGEN_QOS_NULL;
+			}
 
 			/* send WDI event */
 			if (pdev->tx_capture_enabled ==
@@ -3301,9 +3314,11 @@ void dp_tx_ppdu_stats_process(void *context)
 				continue;
 			}
 
-			if ((ppdu_desc->frame_type == CDP_PPDU_FTYPE_DATA) ||
-			    (ppdu_desc->num_mpdu &&
-			     ppdu_desc->frame_type == CDP_PPDU_FTYPE_BAR)) {
+			if (((ppdu_desc->frame_type == CDP_PPDU_FTYPE_DATA) &&
+			     (ppdu_desc->htt_frame_type !=
+			      HTT_STATS_FTYPE_SGEN_QOS_NULL)) ||
+			    ((ppdu_desc->num_mpdu) &&
+			     (ppdu_desc->frame_type == CDP_PPDU_FTYPE_BAR))) {
 				peer_id = ppdu_desc->user[0].peer_id;
 				peer = dp_peer_find_by_id(pdev->soc, peer_id);
 				/**