Эх сурвалжийг харах

qcacmn: Move lithium specific code into 1.0 files

Move lithium specific monitor code into monitor 1.0 files.
Donot include 1.0 specific files when CONFIG_LITHIUM is not defined.

Change-Id: I3504052e7d717bb6e26af1b3980c2bb926df9a9b
CRs-Fixed: 3615746
Nandha Kishore Easwaran 1 жил өмнө
parent
commit
c779207718

+ 1 - 1
dp/wifi3.0/dp_rx_defrag.c

@@ -19,7 +19,7 @@
 
 #include "hal_hw_headers.h"
 #ifndef RX_DEFRAG_DO_NOT_REINJECT
-#ifndef DP_BE_WAR
+#if !defined(DP_BE_WAR) && defined(CONFIG_LITHIUM)
 #include "li/hal_li_rx.h"
 #endif
 #endif

+ 74 - 2
dp/wifi3.0/monitor/1.0/dp_mon_1.0.c

@@ -171,7 +171,7 @@ dp_soc_config_full_mon_mode(struct cdp_pdev *cdp_pdev,
 }
 #endif
 
-#if !defined(DISABLE_MON_CONFIG)
+#if !defined(DISABLE_MON_CONFIG) && defined(CONFIG_LITHIUM)
 void dp_flush_monitor_rings(struct dp_soc *soc)
 {
 	struct dp_pdev *pdev = soc->pdev_list[0];
@@ -773,7 +773,7 @@ static void dp_mon_neighbour_peer_add_ast(struct dp_pdev *pdev,
 	}
 }
 
-#if !defined(DISABLE_MON_CONFIG)
+#if !defined(DISABLE_MON_CONFIG) && defined(CONFIG_LITHIUM)
 #if defined(DP_CON_MON)
 QDF_STATUS dp_mon_htt_srng_setup_1_0(struct dp_soc *soc,
 				     struct dp_pdev *pdev,
@@ -1304,6 +1304,76 @@ dp_config_for_nac_rssi(struct cdp_soc_t *cdp_soc,
 }
 #endif
 
+#ifdef FEATURE_NAC_RSSI
+/**
+ * dp_rx_nac_filter() - Function to perform filtering of non-associated
+ * clients
+ * @pdev: DP pdev handle
+ * @rx_pkt_hdr: Rx packet Header
+ *
+ * Return: dp_vdev*
+ */
+static
+struct dp_vdev *dp_rx_nac_filter(struct dp_pdev *pdev,
+				 uint8_t *rx_pkt_hdr)
+{
+	struct ieee80211_frame *wh;
+	struct dp_neighbour_peer *peer = NULL;
+	struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev;
+
+	wh = (struct ieee80211_frame *)rx_pkt_hdr;
+
+	if ((wh->i_fc[1] & IEEE80211_FC1_DIR_MASK) != IEEE80211_FC1_DIR_TODS)
+		return NULL;
+
+	qdf_spin_lock_bh(&mon_pdev->neighbour_peer_mutex);
+	TAILQ_FOREACH(peer, &mon_pdev->neighbour_peers_list,
+		      neighbour_peer_list_elem) {
+		if (qdf_mem_cmp(&peer->neighbour_peers_macaddr.raw[0],
+				wh->i_addr2, QDF_MAC_ADDR_SIZE) == 0) {
+			dp_rx_debug("%pK: NAC configuration matched for mac-%2x:%2x:%2x:%2x:%2x:%2x",
+				    pdev->soc,
+				    peer->neighbour_peers_macaddr.raw[0],
+				    peer->neighbour_peers_macaddr.raw[1],
+				    peer->neighbour_peers_macaddr.raw[2],
+				    peer->neighbour_peers_macaddr.raw[3],
+				    peer->neighbour_peers_macaddr.raw[4],
+				    peer->neighbour_peers_macaddr.raw[5]);
+
+			qdf_spin_unlock_bh(&mon_pdev->neighbour_peer_mutex);
+
+			return mon_pdev->mvdev;
+		}
+	}
+	qdf_spin_unlock_bh(&mon_pdev->neighbour_peer_mutex);
+
+	return NULL;
+}
+
+QDF_STATUS dp_filter_neighbour_peer(struct dp_pdev *pdev,
+				    uint8_t *rx_pkt_hdr)
+{
+	struct dp_vdev *vdev = NULL;
+	struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev;
+
+	if (mon_pdev->filter_neighbour_peers) {
+		/* Next Hop scenario not yet handle */
+		vdev = dp_rx_nac_filter(pdev, rx_pkt_hdr);
+		if (vdev) {
+			dp_rx_mon_deliver(pdev->soc, pdev->pdev_id,
+					  pdev->invalid_peer_head_msdu,
+					  pdev->invalid_peer_tail_msdu);
+
+			pdev->invalid_peer_head_msdu = NULL;
+			pdev->invalid_peer_tail_msdu = NULL;
+			return QDF_STATUS_SUCCESS;
+		}
+	}
+
+	return QDF_STATUS_E_FAILURE;
+}
+#endif
+
 /**
  * dp_mon_register_feature_ops_1_0() - register feature ops
  *
@@ -1558,6 +1628,7 @@ struct cdp_mon_ops dp_ops_mon_1_0 = {
 #endif /* WLAN_FEATURE_LOCAL_PKT_CAPTURE */
 };
 
+#ifdef CONFIG_LITHIUM
 #ifdef QCA_MONITOR_OPS_PER_SOC_SUPPORT
 void dp_mon_ops_register_1_0(struct dp_mon_soc *mon_soc)
 {
@@ -1609,3 +1680,4 @@ void dp_mon_cdp_ops_register_1_0(struct cdp_ops *ops)
 	ops->mon_ops = &dp_ops_mon_1_0;
 }
 #endif
+#endif

+ 0 - 71
dp/wifi3.0/monitor/1.0/dp_mon_1.0.h

@@ -26,77 +26,6 @@
 
 void dp_flush_monitor_rings(struct dp_soc *soc);
 
-#if !defined(DISABLE_MON_CONFIG)
-/**
- * dp_mon_htt_srng_setup_1_0() - Prepare HTT messages for Monitor rings
- * @soc: soc handle
- * @pdev: physical device handle
- * @mac_id: ring number
- * @mac_for_pdev: mac_id
- *
- * Return: non-zero for failure, zero for success
- */
-QDF_STATUS dp_mon_htt_srng_setup_1_0(struct dp_soc *soc,
-				     struct dp_pdev *pdev,
-				     int mac_id,
-				     int mac_for_pdev);
-
-/**
- * dp_mon_rings_alloc_1_0() - DP monitor rings allocation
- * @pdev: physical device handle
- *
- * Return: non-zero for failure, zero for success
- */
-QDF_STATUS dp_mon_rings_alloc_1_0(struct dp_pdev *pdev);
-
-/**
- * dp_mon_rings_free_1_0() - DP monitor rings deallocation
- * @pdev: physical device handle
- *
- * Return: non-zero for failure, zero for success
- */
-void dp_mon_rings_free_1_0(struct dp_pdev *pdev);
-
-/**
- * dp_mon_rings_init_1_0() - DP monitor rings initialization
- * @pdev: physical device handle
- *
- * Return: non-zero for failure, zero for success
- */
-QDF_STATUS dp_mon_rings_init_1_0(struct dp_pdev *pdev);
-
-/**
- * dp_mon_rings_deinit_1_0() - DP monitor rings deinitialization
- * @pdev: physical device handle
- *
- * Return: non-zero for failure, zero for success
- */
-void dp_mon_rings_deinit_1_0(struct dp_pdev *pdev);
-#else
-static inline
-void dp_mon_rings_deinit_1_0(struct dp_pdev *pdev)
-{
-}
-
-static inline
-void dp_mon_rings_free_1_0(struct dp_pdev *pdev)
-{
-}
-
-static inline
-QDF_STATUS dp_mon_rings_init_1_0(struct dp_pdev *pdev)
-{
-	return QDF_STATUS_SUCCESS;
-}
-
-static inline
-QDF_STATUS dp_mon_rings_alloc_1_0(struct dp_pdev *pdev)
-{
-	return QDF_STATUS_SUCCESS;
-}
-
-#endif
-
 /* MCL specific functions */
 #if defined(DP_CON_MON)
 

+ 89 - 0
dp/wifi3.0/monitor/1.0/dp_rx_mon_dest_1.0.c

@@ -645,6 +645,95 @@ dp_rx_mon_check_n_drop_mpdu(struct dp_pdev *pdev, uint32_t mac_id,
 }
 #endif
 
+QDF_STATUS dp_rx_mon_deliver(struct dp_soc *soc, uint32_t mac_id,
+			     qdf_nbuf_t head_msdu, qdf_nbuf_t tail_msdu)
+{
+	struct dp_pdev *pdev = dp_get_pdev_for_lmac_id(soc, mac_id);
+	struct cdp_mon_status *rs;
+	qdf_nbuf_t mon_skb, skb_next;
+	qdf_nbuf_t mon_mpdu = NULL;
+	struct dp_mon_vdev *mon_vdev;
+	struct dp_mon_pdev *mon_pdev;
+
+	if (!pdev)
+		goto mon_deliver_fail;
+
+	mon_pdev = pdev->monitor_pdev;
+	rs = &mon_pdev->rx_mon_recv_status;
+
+	if (!mon_pdev->mvdev && !mon_pdev->mcopy_mode &&
+	    !mon_pdev->rx_pktlog_cbf)
+		goto mon_deliver_fail;
+
+	/* restitch mon MPDU for delivery via monitor interface */
+	mon_mpdu = dp_rx_mon_restitch_mpdu(soc, mac_id, head_msdu,
+					   tail_msdu, rs);
+
+	/* If MPDU restitch fails, free buffers*/
+	if (!mon_mpdu) {
+		dp_info("MPDU restitch failed, free buffers");
+		goto mon_deliver_fail;
+	}
+
+	dp_rx_mon_process_dest_pktlog(soc, mac_id, mon_mpdu);
+
+	/* monitor vap cannot be present when mcopy is enabled
+	 * hence same skb can be consumed
+	 */
+	if (mon_pdev->mcopy_mode)
+		return dp_send_mgmt_packet_to_stack(soc, mon_mpdu, pdev);
+
+	if (mon_pdev->mvdev &&
+	    mon_pdev->mvdev->osif_vdev &&
+	    mon_pdev->mvdev->monitor_vdev &&
+	    mon_pdev->mvdev->monitor_vdev->osif_rx_mon) {
+		mon_vdev = mon_pdev->mvdev->monitor_vdev;
+
+		mon_pdev->ppdu_info.rx_status.ppdu_id =
+			mon_pdev->ppdu_info.com_info.ppdu_id;
+		mon_pdev->ppdu_info.rx_status.device_id = soc->device_id;
+		mon_pdev->ppdu_info.rx_status.chan_noise_floor =
+			pdev->chan_noise_floor;
+		dp_handle_tx_capture(soc, pdev, mon_mpdu);
+
+		if (!qdf_nbuf_update_radiotap(&mon_pdev->ppdu_info.rx_status,
+					      mon_mpdu,
+					      qdf_nbuf_headroom(mon_mpdu))) {
+			DP_STATS_INC(pdev, dropped.mon_radiotap_update_err, 1);
+			qdf_nbuf_free(mon_mpdu);
+			return QDF_STATUS_E_INVAL;
+		}
+
+		dp_rx_mon_update_pf_tag_to_buf_headroom(soc, mon_mpdu);
+		mon_vdev->osif_rx_mon(mon_pdev->mvdev->osif_vdev,
+				      mon_mpdu,
+				      &mon_pdev->ppdu_info.rx_status);
+	} else {
+		dp_rx_mon_dest_debug("%pK: mon_mpdu=%pK monitor_vdev %pK osif_vdev %pK"
+				     , soc, mon_mpdu, mon_pdev->mvdev,
+				     (mon_pdev->mvdev ? mon_pdev->mvdev->osif_vdev
+				     : NULL));
+		qdf_nbuf_free(mon_mpdu);
+		return QDF_STATUS_E_INVAL;
+	}
+
+	return QDF_STATUS_SUCCESS;
+
+mon_deliver_fail:
+	mon_skb = head_msdu;
+	while (mon_skb) {
+		skb_next = qdf_nbuf_next(mon_skb);
+
+		 dp_rx_mon_dest_debug("%pK: [%s][%d] mon_skb=%pK len %u",
+				      soc,  __func__, __LINE__,
+				      mon_skb, mon_skb->len);
+
+		qdf_nbuf_free(mon_skb);
+		mon_skb = skb_next;
+	}
+	return QDF_STATUS_E_INVAL;
+}
+
 void dp_rx_mon_dest_process(struct dp_soc *soc, struct dp_intr *int_ctx,
 			    uint32_t mac_id, uint32_t quota)
 {

+ 2 - 70
dp/wifi3.0/monitor/dp_mon.c

@@ -38,7 +38,9 @@
 #ifdef QCA_SUPPORT_LITE_MONITOR
 #include "dp_lite_mon.h"
 #endif
+#ifdef CONFIG_LITHIUM
 #include "dp_mon_1.0.h"
+#endif
 #ifdef WLAN_FEATURE_LOCAL_PKT_CAPTURE
 #include "dp_mon_2.0.h"
 #include "dp_mon_filter_2.0.h"
@@ -1531,76 +1533,6 @@ QDF_STATUS dp_peer_stats_notify(struct dp_pdev *dp_pdev, struct dp_peer *peer)
 }
 #endif
 
-#ifdef FEATURE_NAC_RSSI
-/**
- * dp_rx_nac_filter() - Function to perform filtering of non-associated
- * clients
- * @pdev: DP pdev handle
- * @rx_pkt_hdr: Rx packet Header
- *
- * Return: dp_vdev*
- */
-static
-struct dp_vdev *dp_rx_nac_filter(struct dp_pdev *pdev,
-				 uint8_t *rx_pkt_hdr)
-{
-	struct ieee80211_frame *wh;
-	struct dp_neighbour_peer *peer = NULL;
-	struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev;
-
-	wh = (struct ieee80211_frame *)rx_pkt_hdr;
-
-	if ((wh->i_fc[1] & IEEE80211_FC1_DIR_MASK) != IEEE80211_FC1_DIR_TODS)
-		return NULL;
-
-	qdf_spin_lock_bh(&mon_pdev->neighbour_peer_mutex);
-	TAILQ_FOREACH(peer, &mon_pdev->neighbour_peers_list,
-		      neighbour_peer_list_elem) {
-		if (qdf_mem_cmp(&peer->neighbour_peers_macaddr.raw[0],
-				wh->i_addr2, QDF_MAC_ADDR_SIZE) == 0) {
-			dp_rx_debug("%pK: NAC configuration matched for mac-%2x:%2x:%2x:%2x:%2x:%2x",
-				    pdev->soc,
-				    peer->neighbour_peers_macaddr.raw[0],
-				    peer->neighbour_peers_macaddr.raw[1],
-				    peer->neighbour_peers_macaddr.raw[2],
-				    peer->neighbour_peers_macaddr.raw[3],
-				    peer->neighbour_peers_macaddr.raw[4],
-				    peer->neighbour_peers_macaddr.raw[5]);
-
-				qdf_spin_unlock_bh(&mon_pdev->neighbour_peer_mutex);
-
-			return mon_pdev->mvdev;
-		}
-	}
-	qdf_spin_unlock_bh(&mon_pdev->neighbour_peer_mutex);
-
-	return NULL;
-}
-
-QDF_STATUS dp_filter_neighbour_peer(struct dp_pdev *pdev,
-				    uint8_t *rx_pkt_hdr)
-{
-	struct dp_vdev *vdev = NULL;
-	struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev;
-
-	if (mon_pdev->filter_neighbour_peers) {
-		/* Next Hop scenario not yet handle */
-		vdev = dp_rx_nac_filter(pdev, rx_pkt_hdr);
-		if (vdev) {
-			dp_rx_mon_deliver(pdev->soc, pdev->pdev_id,
-					  pdev->invalid_peer_head_msdu,
-					  pdev->invalid_peer_tail_msdu);
-
-			pdev->invalid_peer_head_msdu = NULL;
-			pdev->invalid_peer_tail_msdu = NULL;
-			return QDF_STATUS_SUCCESS;
-		}
-	}
-
-	return QDF_STATUS_E_FAILURE;
-}
-#endif
-
 /**
  * dp_update_mon_mac_filter() - Set/reset monitor mac filter
  * @soc_hdl: cdp soc handle

+ 90 - 0
dp/wifi3.0/monitor/dp_mon.h

@@ -122,6 +122,86 @@ static inline bool dp_is_monitor_mode_using_poll(struct dp_soc *soc)
 }
 #endif
 
+#if !defined(DISABLE_MON_CONFIG) && defined(CONFIG_LITHIUM)
+/**
+ * dp_mon_htt_srng_setup_1_0() - Prepare HTT messages for Monitor rings
+ * @soc: soc handle
+ * @pdev: physical device handle
+ * @mac_id: ring number
+ * @mac_for_pdev: mac_id
+ *
+ * Return: non-zero for failure, zero for success
+ */
+QDF_STATUS dp_mon_htt_srng_setup_1_0(struct dp_soc *soc,
+				     struct dp_pdev *pdev,
+				     int mac_id,
+				     int mac_for_pdev);
+
+/**
+ * dp_mon_rings_alloc_1_0() - DP monitor rings allocation
+ * @pdev: physical device handle
+ *
+ * Return: non-zero for failure, zero for success
+ */
+QDF_STATUS dp_mon_rings_alloc_1_0(struct dp_pdev *pdev);
+
+/**
+ * dp_mon_rings_free_1_0() - DP monitor rings deallocation
+ * @pdev: physical device handle
+ *
+ * Return: non-zero for failure, zero for success
+ */
+void dp_mon_rings_free_1_0(struct dp_pdev *pdev);
+
+/**
+ * dp_mon_rings_init_1_0() - DP monitor rings initialization
+ * @pdev: physical device handle
+ *
+ * Return: non-zero for failure, zero for success
+ */
+QDF_STATUS dp_mon_rings_init_1_0(struct dp_pdev *pdev);
+
+/**
+ * dp_mon_rings_deinit_1_0() - DP monitor rings deinitialization
+ * @pdev: physical device handle
+ *
+ * Return: non-zero for failure, zero for success
+ */
+void dp_mon_rings_deinit_1_0(struct dp_pdev *pdev);
+#else
+static inline
+void dp_mon_rings_deinit_1_0(struct dp_pdev *pdev)
+{
+}
+
+static inline
+void dp_mon_rings_free_1_0(struct dp_pdev *pdev)
+{
+}
+
+static inline
+QDF_STATUS dp_mon_rings_init_1_0(struct dp_pdev *pdev)
+{
+	return QDF_STATUS_SUCCESS;
+}
+
+static inline
+QDF_STATUS dp_mon_rings_alloc_1_0(struct dp_pdev *pdev)
+{
+	return QDF_STATUS_SUCCESS;
+}
+
+static inline
+QDF_STATUS dp_mon_htt_srng_setup_1_0(struct dp_soc *soc,
+				     struct dp_pdev *pdev,
+				     int mac_id,
+				     int mac_for_pdev)
+{
+	return QDF_STATUS_SUCCESS;
+}
+
+#endif
+
 /**
  * dp_mon_soc_attach() - DP monitor soc attach
  * @soc: Datapath SOC handle
@@ -4401,6 +4481,7 @@ dp_ppdu_desc_user_stats_update(struct dp_pdev *pdev,
 }
 #endif /* QCA_ENHANCED_STATS_SUPPORT */
 
+#ifdef CONFIG_LITHIUM
 /**
  * dp_mon_ops_register_1_0(): register legacy monitor ops
  * @mon_soc: monitor soc handle
@@ -4416,6 +4497,15 @@ void dp_mon_ops_register_1_0(struct dp_mon_soc *mon_soc);
  * return: void
  */
 void dp_mon_cdp_ops_register_1_0(struct cdp_ops *ops);
+#else
+static inline void dp_mon_cdp_ops_register_1_0(struct cdp_ops *ops)
+{
+}
+
+static inline void dp_mon_ops_register_1_0(struct dp_mon_soc *mon_soc)
+{
+}
+#endif
 
 #if defined(WLAN_CFR_ENABLE) && defined(WLAN_ENH_CFR_ENABLE)
 /**

+ 2 - 90
dp/wifi3.0/monitor/dp_rx_mon.c

@@ -1762,7 +1762,7 @@ dp_mon_process(struct dp_soc *soc, struct dp_intr *int_ctx,
  *         QDF_STATUS_E_INVAL in error
  */
 #ifdef QCA_MCOPY_SUPPORT
-static inline QDF_STATUS
+QDF_STATUS
 dp_send_mgmt_packet_to_stack(struct dp_soc *soc,
 			     qdf_nbuf_t nbuf,
 			     struct dp_pdev *pdev)
@@ -1807,7 +1807,7 @@ dp_send_mgmt_packet_to_stack(struct dp_soc *soc,
 	return QDF_STATUS_SUCCESS;
 }
 #else
-static inline QDF_STATUS
+QDF_STATUS
 dp_send_mgmt_packet_to_stack(struct dp_soc *soc,
 			     qdf_nbuf_t nbuf,
 			     struct dp_pdev *pdev)
@@ -1860,94 +1860,6 @@ QDF_STATUS dp_rx_mon_process_dest_pktlog(struct dp_soc *soc,
 	return QDF_STATUS_SUCCESS;
 }
 
-QDF_STATUS dp_rx_mon_deliver(struct dp_soc *soc, uint32_t mac_id,
-			     qdf_nbuf_t head_msdu, qdf_nbuf_t tail_msdu)
-{
-	struct dp_pdev *pdev = dp_get_pdev_for_lmac_id(soc, mac_id);
-	struct cdp_mon_status *rs;
-	qdf_nbuf_t mon_skb, skb_next;
-	qdf_nbuf_t mon_mpdu = NULL;
-	struct dp_mon_vdev *mon_vdev;
-	struct dp_mon_pdev *mon_pdev;
-
-	if (!pdev)
-		goto mon_deliver_fail;
-
-	mon_pdev = pdev->monitor_pdev;
-	rs = &mon_pdev->rx_mon_recv_status;
-
-	if (!mon_pdev->mvdev && !mon_pdev->mcopy_mode &&
-	    !mon_pdev->rx_pktlog_cbf)
-		goto mon_deliver_fail;
-
-	/* restitch mon MPDU for delivery via monitor interface */
-	mon_mpdu = dp_rx_mon_restitch_mpdu(soc, mac_id, head_msdu,
-					   tail_msdu, rs);
-
-	/* If MPDU restitch fails, free buffers*/
-	if (!mon_mpdu) {
-		dp_info("MPDU restitch failed, free buffers");
-		goto mon_deliver_fail;
-	}
-
-	dp_rx_mon_process_dest_pktlog(soc, mac_id, mon_mpdu);
-
-	/* monitor vap cannot be present when mcopy is enabled
-	 * hence same skb can be consumed
-	 */
-	if (mon_pdev->mcopy_mode)
-		return dp_send_mgmt_packet_to_stack(soc, mon_mpdu, pdev);
-
-	if (mon_pdev->mvdev &&
-	    mon_pdev->mvdev->osif_vdev &&
-	    mon_pdev->mvdev->monitor_vdev &&
-	    mon_pdev->mvdev->monitor_vdev->osif_rx_mon) {
-		mon_vdev = mon_pdev->mvdev->monitor_vdev;
-
-		mon_pdev->ppdu_info.rx_status.ppdu_id =
-			mon_pdev->ppdu_info.com_info.ppdu_id;
-		mon_pdev->ppdu_info.rx_status.device_id = soc->device_id;
-		mon_pdev->ppdu_info.rx_status.chan_noise_floor =
-			pdev->chan_noise_floor;
-		dp_handle_tx_capture(soc, pdev, mon_mpdu);
-
-		if (!qdf_nbuf_update_radiotap(&mon_pdev->ppdu_info.rx_status,
-					      mon_mpdu,
-					      qdf_nbuf_headroom(mon_mpdu))) {
-			DP_STATS_INC(pdev, dropped.mon_radiotap_update_err, 1);
-			qdf_nbuf_free(mon_mpdu);
-			return QDF_STATUS_E_INVAL;
-		}
-
-		dp_rx_mon_update_pf_tag_to_buf_headroom(soc, mon_mpdu);
-		mon_vdev->osif_rx_mon(mon_pdev->mvdev->osif_vdev,
-				      mon_mpdu,
-				      &mon_pdev->ppdu_info.rx_status);
-	} else {
-		dp_rx_mon_dest_debug("%pK: mon_mpdu=%pK monitor_vdev %pK osif_vdev %pK"
-				     , soc, mon_mpdu, mon_pdev->mvdev,
-				     (mon_pdev->mvdev ? mon_pdev->mvdev->osif_vdev
-				     : NULL));
-		qdf_nbuf_free(mon_mpdu);
-		return QDF_STATUS_E_INVAL;
-	}
-
-	return QDF_STATUS_SUCCESS;
-
-mon_deliver_fail:
-	mon_skb = head_msdu;
-	while (mon_skb) {
-		skb_next = qdf_nbuf_next(mon_skb);
-
-		 dp_rx_mon_dest_debug("%pK: [%s][%d] mon_skb=%pK len %u",
-				      soc,  __func__, __LINE__, mon_skb, mon_skb->len);
-
-		qdf_nbuf_free(mon_skb);
-		mon_skb = skb_next;
-	}
-	return QDF_STATUS_E_INVAL;
-}
-
 QDF_STATUS dp_rx_mon_deliver_non_std(struct dp_soc *soc,
 				     uint32_t mac_id)
 {

+ 13 - 0
dp/wifi3.0/monitor/dp_rx_mon.h

@@ -756,6 +756,19 @@ QDF_STATUS dp_rx_mon_process_dest_pktlog(struct dp_soc *soc,
 					 uint32_t mac_id,
 					 qdf_nbuf_t mpdu);
 
+/**
+ * dp_send_mgmt_packet_to_stack(): function to send mgmt packet to stack
+ * @soc: DP soc
+ * @nbuf: MPDU buf
+ * @pdev: Physical dev
+ *
+ * Return: status: 0 - Success, non-zero: Failure
+ */
+QDF_STATUS
+dp_send_mgmt_packet_to_stack(struct dp_soc *soc,
+			     qdf_nbuf_t nbuf,
+			     struct dp_pdev *pdev);
+
 #ifdef WLAN_TX_PKT_CAPTURE_ENH
 void
 dp_handle_tx_capture(struct dp_soc *soc, struct dp_pdev *pdev,