qcacmn: copy peer meta data from reo descriptor to RX TLV

Change-Id: Iecb573d457914a53753604487e89e399bb814c36
diff --git a/dp/wifi3.0/dp_rx.c b/dp/wifi3.0/dp_rx.c
index 862655d..a219791 100644
--- a/dp/wifi3.0/dp_rx.c
+++ b/dp/wifi3.0/dp_rx.c
@@ -290,6 +290,12 @@
 	}
 	return vdev;
 }
+/*
+ * In case of LFR, this is an empty inline function
+ */
+static inline void dp_rx_peer_validity_check(struct dp_peer *peer)
+{
+}
 #else
 static inline struct dp_vdev *
 dp_get_vdev_from_peer(struct dp_soc *soc,
@@ -307,6 +313,14 @@
 		return peer->vdev;
 	}
 }
+
+/*
+ * Assert if PEER is NULL
+ */
+static inline void dp_rx_peer_validity_check(struct dp_peer *peer)
+{
+	qdf_assert_always(peer);
+}
 #endif
 
 /**
@@ -846,7 +860,7 @@
 	struct hal_rx_mpdu_desc_info mpdu_desc_info;
 	struct hal_rx_msdu_desc_info msdu_desc_info;
 	enum hal_reo_error_status error;
-	static uint32_t peer_mdata;
+	uint32_t peer_mdata;
 	uint8_t *rx_tlv_hdr;
 	uint32_t rx_bufs_reaped[MAX_PDEV_CNT] = { 0 };
 	uint32_t sgi, mcs, tid, nss, bw, reception_type, pkt_type;
@@ -933,6 +947,9 @@
 		peer_id = DP_PEER_METADATA_PEER_ID_GET(
 				mpdu_desc_info.peer_meta_data);
 
+		hal_rx_mpdu_peer_meta_data_set(qdf_nbuf_data(rx_desc->nbuf),
+						mpdu_desc_info.peer_meta_data);
+
 		peer = dp_peer_find_by_id(soc, peer_id);
 
 		vdev = dp_get_vdev_from_peer(soc, peer_id, peer,
@@ -1089,33 +1106,19 @@
 				}
 			}
 
-			if (qdf_nbuf_is_chfrag_start(nbuf)) {
-				peer_mdata = hal_rx_mpdu_peer_meta_data_get
-								(rx_tlv_hdr);
-			}
-
+			peer_mdata = hal_rx_mpdu_peer_meta_data_get(rx_tlv_hdr);
 			peer_id = DP_PEER_METADATA_PEER_ID_GET(peer_mdata);
 			peer = dp_peer_find_by_id(soc, peer_id);
 
-			/* TODO */
 			/*
-			 * In case of roaming peer object may not be
-			 * immediately available -- need to handle this
-			 * Cannot drop these packets right away.
+			 * This is a redundant sanity check, Ideally peer
+			 * should never be NULL here. if for any reason it
+			 * is NULL we will assert.
+			 * Do nothing for LFR case.
 			 */
-			/* Peer lookup failed */
-			if (!peer && !vdev) {
-				dp_rx_process_invalid_peer(soc, nbuf);
-				DP_STATS_INC_PKT(soc, rx.err.rx_invalid_peer, 1,
-						qdf_nbuf_len(nbuf));
-				/* Drop & free packet */
-				qdf_nbuf_free(nbuf);
+			dp_rx_peer_validity_check(peer);
 
-				/* Statistics */
-				continue;
-			}
-
-			if (peer && qdf_unlikely(peer->bss_peer)) {
+			if (qdf_unlikely(peer->bss_peer)) {
 				QDF_TRACE(QDF_MODULE_ID_DP,
 					QDF_TRACE_LEVEL_INFO,
 					FL("received pkt with same src MAC"));
diff --git a/dp/wifi3.0/hal_rx.h b/dp/wifi3.0/hal_rx.h
index 51bc4bc..977de6d 100644
--- a/dp/wifi3.0/hal_rx.h
+++ b/dp/wifi3.0/hal_rx.h
@@ -687,6 +687,31 @@
 	return peer_meta_data;
 }
 
+#define HAL_RX_MPDU_PEER_META_DATA_SET(_rx_mpdu_info, peer_mdata)	\
+		((*(((uint32_t *)_rx_mpdu_info) +			\
+		(RX_MPDU_INFO_8_PEER_META_DATA_OFFSET >> 2))) =		\
+		(peer_mdata << RX_MPDU_INFO_8_PEER_META_DATA_LSB) &	\
+		RX_MPDU_INFO_8_PEER_META_DATA_MASK)
+
+/*
+ * @ hal_rx_mpdu_peer_meta_data_set: set peer meta data in RX mpdu start tlv
+ *
+ * @ buf: rx_tlv_hdr of the received packet
+ * @ peer_mdata: peer meta data to be set.
+ * @ Return: void
+ */
+static inline void
+hal_rx_mpdu_peer_meta_data_set(uint8_t *buf, uint32_t peer_mdata)
+{
+	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
+	struct rx_mpdu_start *mpdu_start =
+				 &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
+
+	struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details;
+
+	HAL_RX_MPDU_PEER_META_DATA_SET(mpdu_info, peer_mdata);
+}
+
 #if defined(WCSS_VERSION) && \
 	((defined(CONFIG_WIN) && (WCSS_VERSION > 81)) || \
 	 (defined(CONFIG_MCL) && (WCSS_VERSION >= 72)))