qcacmn: Avoid reference of peer object after peer_teardown

In API dp_peer_find_by_id return NULL if delete_in_progress
bit is set, this will avoid referencing peer memory which will
be free in peer_unmap event asynchronously.

Change-Id: Ieab559b9274a886809a9baa9bb348d348e924625
CRs-fixed: 2194265
diff --git a/dp/wifi3.0/dp_peer.h b/dp/wifi3.0/dp_peer.h
index b12f947..cfb2ce1 100644
--- a/dp/wifi3.0/dp_peer.h
+++ b/dp/wifi3.0/dp_peer.h
@@ -23,9 +23,8 @@
 #include "dp_types.h"
 
 #define DP_INVALID_PEER_ID 0xffff
-
 /**
- * dp_peer_find_by_id() - Returns peer object given the peer id
+ * __dp_peer_find_by_id() - Returns peer object given the peer id
  *
  * @soc		: core DP soc context
  * @peer_id	: peer id from peer object can be retrieved
@@ -33,7 +32,7 @@
  * Return: struct dp_peer*: Pointer to DP peer object
  */
 static inline struct dp_peer *
-dp_peer_find_by_id(struct dp_soc *soc,
+__dp_peer_find_by_id(struct dp_soc *soc,
 		   uint16_t peer_id)
 {
 	struct dp_peer *peer;
@@ -53,6 +52,30 @@
 	return peer;
 }
 
+/**
+ * dp_peer_find_by_id() - Returns peer object given the peer id
+ *                        if delete_in_progress in not set for peer
+ *
+ * @soc		: core DP soc context
+ * @peer_id	: peer id from peer object can be retrieved
+ *
+ * Return: struct dp_peer*: Pointer to DP peer object
+ */
+static inline struct dp_peer *
+dp_peer_find_by_id(struct dp_soc *soc,
+		   uint16_t peer_id)
+{
+	struct dp_peer *peer;
+
+	peer = __dp_peer_find_by_id (soc, peer_id);
+
+	if (peer && peer->delete_in_progress) {
+		return NULL;
+	}
+
+	return peer;
+}
+
 void dp_rx_peer_map_handler(void *soc_handle, uint16_t peer_id,
 	uint16_t hw_peer_id, uint8_t vdev_id, uint8_t *peer_mac_addr);
 void dp_rx_peer_unmap_handler(void *soc_handle, uint16_t peer_id);