Browse Source

qcacmn: Update vlan tag in multipass received frames

All packets except TID 0 first come to REO error NULL queue.
This happens because only TID 0 queue is setup initially.
Added multipass specific code in NULL queue path.

Change-Id: I8103215ad3e28796c868caa3eec816b9d118da9d
CRs-Fixed: 3482796
Varsha Mishra 2 years ago
parent
commit
eadb65cdde
2 changed files with 26 additions and 2 deletions
  1. 13 1
      dp/wifi3.0/be/dp_be_rx.c
  2. 13 1
      dp/wifi3.0/li/dp_li_rx.c

+ 13 - 1
dp/wifi3.0/be/dp_be_rx.c

@@ -2065,6 +2065,7 @@ dp_rx_null_q_desc_handle_be(struct dp_soc *soc, qdf_nbuf_t nbuf,
 			      hal_rx_msdu_end_sa_is_valid_get(soc->hal_soc,
 							      rx_tlv_hdr));
 
+	tid = hal_rx_tid_get(soc->hal_soc, rx_tlv_hdr);
 	hal_rx_msdu_metadata_get(soc->hal_soc, rx_tlv_hdr, &msdu_metadata);
 	msdu_len = hal_rx_msdu_start_msdu_len_get(soc->hal_soc, rx_tlv_hdr);
 	pkt_len = msdu_len + msdu_metadata.l3_hdr_pad + soc->rx_pkt_tlv_size;
@@ -2218,7 +2219,6 @@ dp_rx_null_q_desc_handle_be(struct dp_soc *soc, qdf_nbuf_t nbuf,
 		struct dp_peer *peer;
 		struct dp_rx_tid *rx_tid;
 
-		tid = hal_rx_tid_get(soc->hal_soc, rx_tlv_hdr);
 		peer = dp_peer_get_ref_by_id(soc, txrx_peer->peer_id,
 					     DP_MOD_ID_RX_ERR);
 		if (peer) {
@@ -2313,6 +2313,18 @@ dp_rx_null_q_desc_handle_be(struct dp_soc *soc, qdf_nbuf_t nbuf,
 		}
 
 		qdf_nbuf_set_exc_frame(nbuf, 1);
+
+		if (qdf_unlikely(vdev->multipass_en)) {
+			if (dp_rx_multipass_process(txrx_peer, nbuf,
+						    tid) == false) {
+				DP_PEER_PER_PKT_STATS_INC
+					(txrx_peer,
+					 rx.multipass_rx_pkt_drop,
+					 1, link_id);
+				goto drop_nbuf;
+			}
+		}
+
 		dp_rx_deliver_to_osif_stack(soc, vdev, txrx_peer, nbuf, NULL,
 					    is_eapol);
 	}

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

@@ -1359,6 +1359,7 @@ dp_rx_null_q_desc_handle_li(struct dp_soc *soc, qdf_nbuf_t nbuf,
 			      hal_rx_msdu_end_sa_is_valid_get(soc->hal_soc,
 							      rx_tlv_hdr));
 
+	tid = hal_rx_tid_get(soc->hal_soc, rx_tlv_hdr);
 	hal_rx_msdu_metadata_get(soc->hal_soc, rx_tlv_hdr, &msdu_metadata);
 	msdu_len = hal_rx_msdu_start_msdu_len_get(soc->hal_soc, rx_tlv_hdr);
 	pkt_len = msdu_len + msdu_metadata.l3_hdr_pad + soc->rx_pkt_tlv_size;
@@ -1512,7 +1513,6 @@ dp_rx_null_q_desc_handle_li(struct dp_soc *soc, qdf_nbuf_t nbuf,
 		struct dp_peer *peer;
 		struct dp_rx_tid *rx_tid;
 
-		tid = hal_rx_tid_get(soc->hal_soc, rx_tlv_hdr);
 		peer = dp_peer_get_ref_by_id(soc, txrx_peer->peer_id,
 					     DP_MOD_ID_RX_ERR);
 		if (peer) {
@@ -1594,6 +1594,18 @@ dp_rx_null_q_desc_handle_li(struct dp_soc *soc, qdf_nbuf_t nbuf,
 		}
 
 		qdf_nbuf_set_exc_frame(nbuf, 1);
+
+		if (qdf_unlikely(vdev->multipass_en)) {
+			if (dp_rx_multipass_process(txrx_peer, nbuf,
+						    tid) == false) {
+				DP_PEER_PER_PKT_STATS_INC
+					(txrx_peer,
+					 rx.multipass_rx_pkt_drop,
+					 1, link_id);
+				goto drop_nbuf;
+			}
+		}
+
 		dp_rx_deliver_to_osif_stack(soc, vdev, txrx_peer, nbuf, NULL,
 					    is_eapol);
 	}