Преглед на файлове

qcacmn: Avoid fetching of addr4 from the RX TLV

In defrag path will be receiving raw frames with wifi header,
instead of fetching the addr4 from the tlv, use it from wifi header

Change-Id: I516295660f39135225efd79c6b1bb0b93b1d81d3
CRs-Fixed: 3303206
Sai Rupesh Chevuru преди 2 години
родител
ревизия
136869a4c0
променени са 1 файла, в които са добавени 8 реда и са изтрити 4 реда
  1. 8 4
      dp/wifi3.0/dp_rx_defrag.c

+ 8 - 4
dp/wifi3.0/dp_rx_defrag.c

@@ -1048,6 +1048,7 @@ dp_rx_defrag_nwifi_to_8023(struct dp_soc *soc, struct dp_txrx_peer *txrx_peer,
 	union dp_align_mac_addr mac_addr;
 	uint8_t *rx_desc_info = qdf_mem_malloc(soc->rx_pkt_tlv_size);
 	struct dp_rx_tid_defrag *rx_tid = &txrx_peer->rx_tid[tid];
+	struct ieee80211_frame_addr4 wh = {0};
 
 	hal_rx_tlv_get_pn_num(soc->hal_soc, qdf_nbuf_data(nbuf), rx_tid->pn128);
 
@@ -1060,6 +1061,11 @@ dp_rx_defrag_nwifi_to_8023(struct dp_soc *soc, struct dp_txrx_peer *txrx_peer,
 		return;
 	}
 
+	qdf_mem_zero(&wh, sizeof(struct ieee80211_frame_addr4));
+	if (hal_rx_get_mpdu_mac_ad4_valid(soc->hal_soc, qdf_nbuf_data(nbuf)))
+		qdf_mem_copy(&wh, qdf_nbuf_data(nbuf) + soc->rx_pkt_tlv_size,
+			     hdrsize);
+
 	qdf_mem_copy(rx_desc_info, qdf_nbuf_data(nbuf), soc->rx_pkt_tlv_size);
 
 	llchdr = (struct llc_snap_hdr_t *)(qdf_nbuf_data(nbuf) +
@@ -1115,10 +1121,8 @@ dp_rx_defrag_nwifi_to_8023(struct dp_soc *soc, struct dp_txrx_peer *txrx_peer,
 				      &mac_addr.raw[0]);
 		qdf_mem_copy(eth_hdr->dest_addr, &mac_addr.raw[0],
 			QDF_MAC_ADDR_SIZE);
-		hal_rx_mpdu_get_addr4(soc->hal_soc, rx_desc_info,
-				      &mac_addr.raw[0]);
-		qdf_mem_copy(eth_hdr->src_addr, &mac_addr.raw[0],
-			QDF_MAC_ADDR_SIZE);
+		qdf_mem_copy(eth_hdr->src_addr, &wh.i_addr4[0],
+			     QDF_MAC_ADDR_SIZE);
 		break;
 
 	default: