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

qcacmn: Host Static Memory Optimization (in NSS offload mode)

Low memory profiles like 256M and 16M profiles support
only NSS Wi-Fi offload mode and HOST data path APIs are
not used in NSS offload mode

Disable HOST data path APIs which are not used in both
NSS Wi-Fi offload mode and in HOST mode (in NSS offload mode)

CRs-Fixed: 2831478
Change-Id: I6895054a6c96bd446c2df7761ce65feef662a3cc
phadiman 4 жил өмнө
parent
commit
d1bb528ae7

+ 53 - 3
dp/wifi3.0/dp_main.c

@@ -1957,6 +1957,8 @@ budget_done:
 	return total_budget - budget;
 }
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
+
 /*
  * dp_service_srngs() - Top level interrupt handler for DP Ring interrupts
  * @dp_ctx: DP SOC handle
@@ -2093,6 +2095,43 @@ budget_done:
 	return dp_budget - budget;
 }
 
+#else /* QCA_HOST_MODE_WIFI_DISABLED */
+
+/*
+ * dp_service_srngs() - Top level handler for DP Monitor Ring interrupts
+ * @dp_ctx: DP SOC handle
+ * @budget: Number of frames/descriptors that can be processed in one shot
+ *
+ * Return: remaining budget/quota for the soc device
+ */
+static uint32_t dp_service_srngs(void *dp_ctx, uint32_t dp_budget)
+{
+	struct dp_intr *int_ctx = (struct dp_intr *)dp_ctx;
+	struct dp_intr_stats *intr_stats = &int_ctx->intr_stats;
+	struct dp_soc *soc = int_ctx->soc;
+	uint32_t remaining_quota = dp_budget;
+	uint32_t work_done  = 0;
+	int budget = dp_budget;
+
+	if (qdf_unlikely(!(soc->mon_vdev_timer_state & MON_VDEV_TIMER_RUNNING))) {
+		work_done = dp_process_lmac_rings(int_ctx, remaining_quota);
+		if (work_done) {
+			budget -=  work_done;
+			if (budget <= 0)
+				goto budget_done;
+			remaining_quota = budget;
+		}
+	}
+
+	qdf_lro_flush(int_ctx->lro_ctx);
+	intr_stats->num_masks++;
+
+budget_done:
+	return dp_budget - budget;
+}
+
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */
+
 /* dp_mon_vdev_timer()- timer poll for interrupts
  *
  * @arg: SoC Handle
@@ -5564,6 +5603,7 @@ fail0:
 	return QDF_STATUS_E_FAILURE;
 }
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
 /**
  * dp_vdev_register_tx_handler() - Register Tx handler
  * @vdev: struct dp_vdev *
@@ -5575,7 +5615,6 @@ static inline void dp_vdev_register_tx_handler(struct dp_vdev *vdev,
 					       struct ol_txrx_ops *txrx_ops)
 {
 	/* Enable vdev_id check only for ap, if flag is enabled */
-
 	if (vdev->mesh_vdev)
 		txrx_ops->tx.tx = dp_tx_send_mesh;
 	else if ((wlan_cfg_is_tx_per_pkt_vdev_id_check_enabled(soc->wlan_cfg_ctx)) &&
@@ -5595,6 +5634,13 @@ static inline void dp_vdev_register_tx_handler(struct dp_vdev *vdev,
 		 wlan_cfg_is_tx_per_pkt_vdev_id_check_enabled(soc->wlan_cfg_ctx),
 		 vdev->opmode, vdev->vdev_id);
 }
+#else /* QCA_HOST_MODE_WIFI_DISABLED */
+static inline void dp_vdev_register_tx_handler(struct dp_vdev *vdev,
+					       struct dp_soc *soc,
+					       struct ol_txrx_ops *txrx_ops)
+{
+}
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */
 
 /**
  * dp_vdev_register_wifi3() - Register VDEV operations from osif layer
@@ -11021,8 +11067,12 @@ static struct cdp_cmn_ops dp_ops_cmn = {
 	.txrx_soc_detach = dp_soc_detach_wifi3,
 	.txrx_soc_deinit = dp_soc_deinit_wifi3,
 	.txrx_soc_init = dp_soc_init_wifi3,
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
 	.txrx_tso_soc_attach = dp_tso_soc_attach,
 	.txrx_tso_soc_detach = dp_tso_soc_detach,
+	.tx_send = dp_tx_send,
+	.tx_send_exc = dp_tx_send_exception,
+#endif
 	.txrx_pdev_init = dp_pdev_init_wifi3,
 	.txrx_get_vdev_mac_addr = dp_get_vdev_mac_addr_wifi3,
 	.txrx_get_mon_vdev_from_pdev = dp_get_mon_vdev_from_pdev_wifi3,
@@ -11060,7 +11110,6 @@ static struct cdp_cmn_ops dp_ops_cmn = {
 	.set_pdev_status_down = dp_soc_set_pdev_status_down,
 	.txrx_set_ba_aging_timeout = dp_set_ba_aging_timeout,
 	.txrx_get_ba_aging_timeout = dp_get_ba_aging_timeout,
-	.tx_send = dp_tx_send,
 	.txrx_peer_reset_ast = dp_wds_reset_ast_wifi3,
 	.txrx_peer_reset_ast_table = dp_wds_reset_ast_table_wifi3,
 	.txrx_peer_flush_ast_table = dp_wds_flush_ast_table_wifi3,
@@ -11085,7 +11134,6 @@ static struct cdp_cmn_ops dp_ops_cmn = {
 	.set_vlan_groupkey = dp_set_vlan_groupkey,
 #endif
 	.get_peer_mac_list = dp_get_peer_mac_list,
-	.tx_send_exc = dp_tx_send_exception,
 #ifdef QCA_SUPPORT_WDS_EXTENDED
 	.get_wds_ext_peer_id = dp_wds_ext_get_peer_id,
 	.set_wds_ext_peer_rx = dp_wds_ext_set_peer_rx,
@@ -11156,11 +11204,13 @@ static struct cdp_ctrl_ops dp_ops_ctrl = {
 };
 
 static struct cdp_me_ops dp_ops_me = {
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
 #ifdef ATH_SUPPORT_IQUE
 	.tx_me_alloc_descriptor = dp_tx_me_alloc_descriptor,
 	.tx_me_free_descriptor = dp_tx_me_free_descriptor,
 	.tx_me_convert_ucast = dp_tx_me_send_convert_ucast,
 #endif
+#endif
 };
 
 static struct cdp_mon_ops dp_ops_mon = {

+ 23 - 0
dp/wifi3.0/dp_rx.c

@@ -35,6 +35,8 @@
 #include "dp_hist.h"
 #include "dp_rx_buffer_pool.h"
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
+
 #ifdef ATH_RX_PRI_SAVE
 #define DP_RX_TID_SAVE(_nbuf, _tid) \
 	(qdf_nbuf_set_priority(_nbuf, _tid))
@@ -65,6 +67,8 @@ static inline bool dp_rx_check_ap_bridge(struct dp_vdev *vdev)
 	return vdev->ap_bridge_enabled;
 }
 
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */
+
 #ifdef DUP_RX_DESC_WAR
 void dp_rx_dump_info_and_assert(struct dp_soc *soc,
 				hal_ring_handle_t hal_ring,
@@ -91,6 +95,7 @@ void dp_rx_dump_info_and_assert(struct dp_soc *soc,
 }
 #endif
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
 #ifdef RX_DESC_SANITY_WAR
 static inline
 QDF_STATUS dp_rx_desc_sanity(struct dp_soc *soc, hal_soc_handle_t hal_soc,
@@ -136,6 +141,8 @@ QDF_STATUS dp_rx_desc_sanity(struct dp_soc *soc, hal_soc_handle_t hal_soc,
 }
 #endif
 
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */
+
 /**
  * dp_pdev_frag_alloc_and_map() - Allocate frag for desc buffer and map
  *
@@ -483,6 +490,8 @@ dp_rx_deliver_raw(struct dp_vdev *vdev, qdf_nbuf_t nbuf_list,
 	vdev->osif_rx(vdev->osif_vdev, deliver_list_head);
 }
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
+
 #ifndef FEATURE_WDS
 static void
 dp_rx_da_learn(struct dp_soc *soc,
@@ -652,6 +661,8 @@ end:
 	return false;
 }
 
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */
+
 #ifdef MESH_MODE_SUPPORT
 
 /**
@@ -1090,6 +1101,8 @@ void dp_rx_process_invalid_peer_wrapper(struct dp_soc *soc,
 }
 #endif
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
+
 #ifdef RECEIVE_OFFLOAD
 /**
  * dp_rx_print_offload_info() - Print offload info from RX TLV
@@ -1288,6 +1301,8 @@ qdf_nbuf_t dp_rx_sg_create(struct dp_soc *soc, qdf_nbuf_t nbuf)
 	return parent;
 }
 
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */
+
 #ifdef QCA_PEER_EXT_STATS
 /*
  * dp_rx_compute_tid_delay - Computer per TID delay stats
@@ -1696,6 +1711,8 @@ void dp_rx_deliver_to_stack(struct dp_soc *soc,
 	dp_rx_check_delivery_to_stack(soc, vdev, peer, nbuf_head);
 }
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
+
 /**
  * dp_rx_cksum_offload() - set the nbuf checksum as defined by hardware.
  * @nbuf: pointer to the first msdu of an amsdu.
@@ -2078,6 +2095,8 @@ uint32_t dp_rx_srng_get_num_pending(hal_soc_handle_t hal_soc,
 	return num_pending;
 }
 
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */
+
 #ifdef WLAN_SUPPORT_RX_FISA
 void dp_rx_skip_tlvs(qdf_nbuf_t nbuf, uint32_t l3_padding)
 {
@@ -2109,6 +2128,8 @@ void dp_rx_set_hdr_pad(qdf_nbuf_t nbuf, uint32_t l3_padding)
 }
 #endif
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
+
 #ifdef DP_RX_DROP_RAW_FRM
 /**
  * dp_rx_is_raw_frame_dropped() - if raw frame nbuf, free and drop
@@ -2904,6 +2925,8 @@ done:
 	return rx_bufs_used; /* Assume no scale factor for now */
 }
 
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */
+
 QDF_STATUS dp_rx_vdev_detach(struct dp_vdev *vdev)
 {
 	QDF_STATUS ret;

+ 39 - 1
dp/wifi3.0/dp_rx.h

@@ -73,6 +73,7 @@ enum dp_rx_desc_state {
 	RX_DESC_IN_FREELIST,
 };
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
 /**
  * struct dp_rx_desc_dbg_info
  *
@@ -91,6 +92,8 @@ struct dp_rx_desc_dbg_info {
 	uint64_t replenish_ts;
 };
 
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */
+
 /**
  * struct dp_rx_desc
  *
@@ -127,6 +130,8 @@ struct dp_rx_desc {
 	in_err_state:1;
 };
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
+
 /* RX Descriptor Multi Page memory alloc related */
 #define DP_RX_DESC_OFFSET_NUM_BITS 8
 #define DP_RX_DESC_PAGE_ID_NUM_BITS 8
@@ -151,6 +156,8 @@ struct dp_rx_desc {
 #define DP_RX_DESC_MULTI_PAGE_COOKIE_GET_OFFSET(_cookie)		\
 	((_cookie) & RX_DESC_MULTI_PAGE_COOKIE_OFFSET_MASK)
 
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */
+
 #define RX_DESC_COOKIE_INDEX_SHIFT		0
 #define RX_DESC_COOKIE_INDEX_MASK		0x3ffff /* 18 bits */
 #define RX_DESC_COOKIE_POOL_ID_SHIFT		18
@@ -246,6 +253,8 @@ bool dp_rx_deliver_special_frame(struct dp_soc *soc, struct dp_peer *peer,
  */
 #define DP_SKIP_VLAN		8
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
+
 /**
  * struct dp_rx_cached_buf - rx cached buffer
  * @list: linked list node
@@ -256,6 +265,8 @@ struct dp_rx_cached_buf {
 	qdf_nbuf_t buf;
 };
 
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */
+
 /*
  *dp_rx_xor_block() - xor block of data
  *@b: destination data block
@@ -540,6 +551,8 @@ void *dp_rx_cookie_2_va_mon_status(struct dp_soc *soc, uint32_t cookie)
 }
 #endif /* RX_DESC_MULTI_PAGE_ALLOC */
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
+
 #ifdef DP_RX_DESC_COOKIE_INVALIDATE
 static inline QDF_STATUS
 dp_rx_cookie_check_and_invalidate(hal_ring_desc_t ring_desc)
@@ -558,6 +571,8 @@ dp_rx_cookie_check_and_invalidate(hal_ring_desc_t ring_desc)
 }
 #endif
 
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */
+
 QDF_STATUS dp_rx_desc_pool_is_allocated(struct rx_desc_pool *rx_desc_pool);
 QDF_STATUS dp_rx_desc_pool_alloc(struct dp_soc *soc,
 				 uint32_t pool_size,
@@ -580,7 +595,6 @@ uint16_t dp_rx_get_free_desc_list(struct dp_soc *soc, uint32_t pool_id,
 				union dp_rx_desc_list_elem_t **desc_list,
 				union dp_rx_desc_list_elem_t **tail);
 
-
 QDF_STATUS dp_rx_pdev_desc_pool_alloc(struct dp_pdev *pdev);
 void dp_rx_pdev_desc_pool_free(struct dp_pdev *pdev);
 
@@ -606,6 +620,8 @@ void dp_print_napi_stats(struct dp_soc *soc);
  */
 QDF_STATUS dp_rx_vdev_detach(struct dp_vdev *vdev);
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
+
 uint32_t
 dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl,
 	      uint8_t reo_ring_num,
@@ -669,6 +685,8 @@ qdf_nbuf_t dp_rx_sg_create(struct dp_soc *soc, qdf_nbuf_t nbuf);
 void dp_rx_desc_nbuf_and_pool_free(struct dp_soc *soc, uint32_t pool_id,
 				   struct rx_desc_pool *rx_desc_pool);
 
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */
+
 /*
  * dp_rx_desc_nbuf_free() - free the sw rx desc nbufs called during
  *			    de-initialization of wifi module.
@@ -1017,6 +1035,8 @@ void *dp_rx_cookie_2_mon_link_desc_va(struct dp_pdev *pdev,
 	return link_desc_va;
 }
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
+
 /**
  * dp_rx_defrag_concat() - Concatenate the fragments
  *
@@ -1047,6 +1067,8 @@ static inline QDF_STATUS dp_rx_defrag_concat(qdf_nbuf_t dst, qdf_nbuf_t src)
 	return QDF_STATUS_E_DEFRAG_ERROR;
 }
 
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */
+
 #ifndef FEATURE_WDS
 static inline QDF_STATUS dp_rx_ast_set_active(struct dp_soc *soc, uint16_t sa_idx, bool is_active)
 {
@@ -1075,6 +1097,8 @@ static inline void dp_rx_desc_dump(struct dp_rx_desc *rx_desc)
 		rx_desc->in_use, rx_desc->unmapped);
 }
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
+
 /*
  * check_qwrap_multicast_loopback() - Check if rx packet is a loopback packet.
  *					In qwrap mode, packets originated from
@@ -1120,6 +1144,8 @@ static inline bool check_qwrap_multicast_loopback(struct dp_vdev *vdev,
 }
 #endif
 
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */
+
 #if defined(WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG) ||\
 	defined(WLAN_SUPPORT_RX_TAG_STATISTICS) ||\
 	defined(WLAN_SUPPORT_RX_FLOW_TAG)
@@ -1415,6 +1441,8 @@ bool dp_rx_multipass_process(struct dp_peer *peer, qdf_nbuf_t nbuf,
 			     uint8_t tid);
 #endif
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
+
 #ifndef WLAN_RX_PKT_CAPTURE_ENH
 static inline
 QDF_STATUS dp_peer_set_rx_capture_enabled(struct dp_pdev *pdev,
@@ -1425,6 +1453,8 @@ QDF_STATUS dp_peer_set_rx_capture_enabled(struct dp_pdev *pdev,
 }
 #endif
 
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */
+
 /**
  * dp_rx_deliver_to_stack() - deliver pkts to network stack
  * Caller to hold peer refcount and check for valid peer
@@ -1442,6 +1472,8 @@ void dp_rx_deliver_to_stack(struct dp_soc *soc,
 			    qdf_nbuf_t nbuf_head,
 			    qdf_nbuf_t nbuf_tail);
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
+
 #ifdef QCA_OL_RX_LOCK_LESS_ACCESS
 /*
  * dp_rx_ring_access_start()- Wrapper function to log access start of a hal ring
@@ -1488,6 +1520,8 @@ dp_rx_srng_access_end(struct dp_intr *int_ctx, struct dp_soc *soc,
 }
 #endif
 
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */
+
 /*
  * dp_rx_wbm_sg_list_reset() - Initialize sg list
  *
@@ -1520,6 +1554,8 @@ static inline void dp_rx_wbm_sg_list_deinit(struct dp_soc *soc)
 	}
 }
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
+
 #ifdef WLAN_FEATURE_RX_PREALLOC_BUFFER_POOL
 #define DP_RX_PROCESS_NBUF(soc, head, tail, ebuf_head, ebuf_tail, rx_desc) \
 	do {								   \
@@ -1542,6 +1578,8 @@ static inline void dp_rx_wbm_sg_list_deinit(struct dp_soc *soc)
 	DP_RX_LIST_APPEND(head, tail, rx_desc->nbuf)
 #endif /* WLAN_FEATURE_RX_PREALLOC_BUFFER_POOL */
 
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */
+
 /*
  * dp_rx_link_desc_refill_duplicate_check() - check if link desc duplicate
 					      to refill

+ 20 - 0
dp/wifi3.0/dp_rx_err.c

@@ -33,6 +33,8 @@
 #include "qdf_net_types.h"
 #include "dp_rx_buffer_pool.h"
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
+
 /* Max buffer in invalid peer SG list*/
 #define DP_MAX_INVALID_BUFFERS 10
 
@@ -158,6 +160,8 @@ static inline bool dp_rx_mcast_echo_check(struct dp_soc *soc,
 	return false;
 }
 
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */
+
 void dp_rx_link_desc_refill_duplicate_check(
 				struct dp_soc *soc,
 				struct hal_buf_info *buf_info,
@@ -268,6 +272,8 @@ dp_rx_link_desc_return(struct dp_soc *soc, hal_ring_desc_t ring_desc,
 	return dp_rx_link_desc_return_by_addr(soc, buf_addr_info, bm_action);
 }
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
+
 /**
  * dp_rx_msdus_drop() - Drops all MSDU's per MPDU
  *
@@ -889,6 +895,8 @@ next:
 	qdf_nbuf_free(nbuf);
 }
 
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */
+
 /**
  * dp_2k_jump_handle() - Function to handle 2k jump exception
  *                        on WBM ring
@@ -1066,6 +1074,8 @@ bool dp_rx_check_pkt_len(struct dp_soc *soc, uint32_t pkt_len)
 
 #endif
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
+
 /**
  * dp_rx_null_q_desc_handle() - Function to handle NULL Queue
  *                              descriptor violation on either a
@@ -1297,6 +1307,8 @@ drop_nbuf:
 	return QDF_STATUS_E_FAILURE;
 }
 
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */
+
 /**
  * dp_rx_process_rxdma_err() - Function to deliver rxdma unencrypted_err
  *			       frames to OS or wifi parse errors.
@@ -1553,6 +1565,8 @@ fail:
 	return;
 }
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
+
 #ifdef DP_RX_DESC_COOKIE_INVALIDATE
 /**
  * dp_rx_link_cookie_check() - Validate link desc cookie
@@ -2344,6 +2358,8 @@ done:
 	return rx_bufs_used; /* Assume no scale factor for now */
 }
 
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */
+
 /**
  * dup_desc_dbg() - dump and assert if duplicate rx desc found
  *
@@ -2588,6 +2604,8 @@ dp_rxdma_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
 	return work_done;
 }
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
+
 static inline uint32_t
 dp_wbm_int_err_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
 			hal_rxdma_desc_t rxdma_dst_ring_desc,
@@ -2744,3 +2762,5 @@ dp_handle_wbm_internal_error(struct dp_soc *soc, void *hal_desc,
 					&head, &tail);
 	}
 }
+
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */

+ 4 - 153
dp/wifi3.0/dp_tx.c

@@ -310,6 +310,7 @@ static void dp_tx_tso_desc_release(struct dp_soc *soc,
 {
 }
 #endif
+
 /**
  * dp_tx_desc_release() - Release Tx Descriptor
  * @tx_desc : Tx Descriptor
@@ -3355,133 +3356,6 @@ static void dp_tx_inspect_handler(struct dp_soc *soc,
 	dp_tx_desc_release(tx_desc, tx_desc->pool_id);
 }
 
-#ifdef FEATURE_PERPKT_INFO
-/**
- * dp_get_completion_indication_for_stack() - send completion to stack
- * @soc : dp_soc handle
- * @pdev: dp_pdev handle
- * @peer: dp peer handle
- * @ts: transmit completion status structure
- * @netbuf: Buffer pointer for free
- *
- * This function is used for indication whether buffer needs to be
- * sent to stack for freeing or not
-*/
-QDF_STATUS
-dp_get_completion_indication_for_stack(struct dp_soc *soc,
-				       struct dp_pdev *pdev,
-				       struct dp_peer *peer,
-				       struct hal_tx_completion_status *ts,
-				       qdf_nbuf_t netbuf,
-				       uint64_t time_latency)
-{
-	struct tx_capture_hdr *ppdu_hdr;
-	uint16_t peer_id = ts->peer_id;
-	uint32_t ppdu_id = ts->ppdu_id;
-	uint8_t first_msdu = ts->first_msdu;
-	uint8_t last_msdu = ts->last_msdu;
-	uint32_t txcap_hdr_size = sizeof(struct tx_capture_hdr);
-
-	if (qdf_unlikely(!pdev->tx_sniffer_enable && !pdev->mcopy_mode &&
-			 !pdev->latency_capture_enable))
-		return QDF_STATUS_E_NOSUPPORT;
-
-	if (!peer) {
-		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
-				FL("Peer Invalid"));
-		return QDF_STATUS_E_INVAL;
-	}
-
-	if (pdev->mcopy_mode) {
-		/* If mcopy is enabled and mcopy_mode is M_COPY deliver 1st MSDU
-		 * per PPDU. If mcopy_mode is M_COPY_EXTENDED deliver 1st MSDU
-		 * for each MPDU
-		 */
-		if (pdev->mcopy_mode == M_COPY) {
-			if ((pdev->m_copy_id.tx_ppdu_id == ppdu_id) &&
-			    (pdev->m_copy_id.tx_peer_id == peer_id)) {
-				return QDF_STATUS_E_INVAL;
-			}
-		}
-
-		if (!first_msdu)
-			return QDF_STATUS_E_INVAL;
-
-		pdev->m_copy_id.tx_ppdu_id = ppdu_id;
-		pdev->m_copy_id.tx_peer_id = peer_id;
-	}
-
-	if (qdf_unlikely(qdf_nbuf_headroom(netbuf) < txcap_hdr_size)) {
-		netbuf = qdf_nbuf_realloc_headroom(netbuf, txcap_hdr_size);
-		if (!netbuf) {
-			QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
-				  FL("No headroom"));
-			return QDF_STATUS_E_NOMEM;
-		}
-	}
-
-	if (!qdf_nbuf_push_head(netbuf, txcap_hdr_size)) {
-		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
-				FL("No headroom"));
-		return QDF_STATUS_E_NOMEM;
-	}
-
-	ppdu_hdr = (struct tx_capture_hdr *)qdf_nbuf_data(netbuf);
-	qdf_mem_copy(ppdu_hdr->ta, peer->vdev->mac_addr.raw,
-		     QDF_MAC_ADDR_SIZE);
-	qdf_mem_copy(ppdu_hdr->ra, peer->mac_addr.raw,
-		     QDF_MAC_ADDR_SIZE);
-	ppdu_hdr->ppdu_id = ppdu_id;
-	ppdu_hdr->peer_id = peer_id;
-	ppdu_hdr->first_msdu = first_msdu;
-	ppdu_hdr->last_msdu = last_msdu;
-	if (qdf_unlikely(pdev->latency_capture_enable)) {
-		ppdu_hdr->tsf = ts->tsf;
-		ppdu_hdr->time_latency = time_latency;
-	}
-
-	return QDF_STATUS_SUCCESS;
-}
-
-
-/**
- * dp_send_completion_to_stack() - send completion to stack
- * @soc :  dp_soc handle
- * @pdev:  dp_pdev handle
- * @peer_id: peer_id of the peer for which completion came
- * @ppdu_id: ppdu_id
- * @netbuf: Buffer pointer for free
- *
- * This function is used to send completion to stack
- * to free buffer
-*/
-void  dp_send_completion_to_stack(struct dp_soc *soc,  struct dp_pdev *pdev,
-					uint16_t peer_id, uint32_t ppdu_id,
-					qdf_nbuf_t netbuf)
-{
-	dp_wdi_event_handler(WDI_EVENT_TX_DATA, soc,
-				netbuf, peer_id,
-				WDI_NO_VAL, pdev->pdev_id);
-}
-#else
-static QDF_STATUS
-dp_get_completion_indication_for_stack(struct dp_soc *soc,
-				       struct dp_pdev *pdev,
-				       struct dp_peer *peer,
-				       struct hal_tx_completion_status *ts,
-				       qdf_nbuf_t netbuf,
-				       uint64_t time_latency)
-{
-	return QDF_STATUS_E_NOSUPPORT;
-}
-
-static void
-dp_send_completion_to_stack(struct dp_soc *soc,  struct dp_pdev *pdev,
-	uint16_t peer_id, uint32_t ppdu_id, qdf_nbuf_t netbuf)
-{
-}
-#endif
-
 #ifdef MESH_MODE_SUPPORT
 /**
  * dp_tx_comp_fill_tx_completion_stats() - Fill per packet Tx completion stats
@@ -4178,6 +4052,7 @@ void dp_tx_comp_process_tx_status(struct dp_soc *soc,
 out:
 	return;
 }
+
 /**
  * dp_tx_comp_process_desc_list() - Tx complete software descriptor handler
  * @soc: core txrx main context
@@ -4739,10 +4614,10 @@ QDF_STATUS dp_tx_vdev_attach(struct dp_vdev *vdev)
 	 * Fill HTT TCL Metadata with Vdev ID and MAC ID
 	 */
 	HTT_TX_TCL_METADATA_TYPE_SET(vdev->htt_tcl_metadata,
-			HTT_TCL_METADATA_TYPE_VDEV_BASED);
+				     HTT_TCL_METADATA_TYPE_VDEV_BASED);
 
 	HTT_TX_TCL_METADATA_VDEV_ID_SET(vdev->htt_tcl_metadata,
-			vdev->vdev_id);
+					vdev->vdev_id);
 
 	pdev_id =
 		dp_get_target_pdev_id_for_host_pdev_id(vdev->pdev->soc,
@@ -4993,29 +4868,6 @@ QDF_STATUS dp_tx_vdev_detach(struct dp_vdev *vdev)
 	return QDF_STATUS_SUCCESS;
 }
 
-/**
- * dp_tx_pdev_attach() - attach pdev to dp tx
- * @pdev: physical device instance
- *
- * Return: QDF_STATUS_SUCCESS: success
- *         QDF_STATUS_E_RESOURCES: Error return
- */
-QDF_STATUS dp_tx_pdev_init(struct dp_pdev *pdev)
-{
-	struct dp_soc *soc = pdev->soc;
-
-	/* Initialize Flow control counters */
-	qdf_atomic_init(&pdev->num_tx_outstanding);
-	pdev->tx_descs_max = 0;
-	if (wlan_cfg_per_pdev_tx_ring(soc->wlan_cfg_ctx)) {
-		/* Initialize descriptors in TCL Ring */
-		hal_tx_init_data_ring(soc->hal_soc,
-				soc->tcl_data_ring[pdev->pdev_id].hal_srng);
-	}
-
-	return QDF_STATUS_SUCCESS;
-}
-
 #ifdef QCA_LL_TX_FLOW_CONTROL_V2
 /* Pools will be allocated dynamically */
 static QDF_STATUS dp_tx_alloc_static_pools(struct dp_soc *soc, int num_pool,
@@ -5368,4 +5220,3 @@ QDF_STATUS dp_tso_soc_detach(struct cdp_soc_t *txrx_soc)
 
 	return QDF_STATUS_SUCCESS;
 }
-

+ 131 - 34
dp/wifi3.0/dp_tx.h

@@ -21,7 +21,10 @@
 #include <qdf_types.h>
 #include <qdf_nbuf.h>
 #include "dp_types.h"
-
+#if defined(MESH_MODE_SUPPORT) || defined(FEATURE_PERPKT_INFO)
+#include "if_meta_hdr.h"
+#endif
+#include "dp_internal.h"
 
 #define DP_INVALID_VDEV_ID 0xFF
 
@@ -71,6 +74,8 @@ do {                                                           \
 /* number of dwords for htt_tx_msdu_desc_ext2_t */
 #define DP_TX_MSDU_INFO_META_DATA_DWORDS 7
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
+
 /**
  * struct dp_tx_frag_info_s
  * @vaddr: hlos vritual address for buffer
@@ -101,6 +106,8 @@ struct dp_tx_seg_info_s  {
 	struct dp_tx_seg_info_s *next;
 };
 
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */
+
 /**
  * struct dp_tx_sg_info_s - Scatter Gather Descriptor
  * @num_segs: Number of segments (TSO/ME) in the frame
@@ -167,6 +174,7 @@ struct dp_tx_msdu_info_s {
 	uint16_t ppdu_cookie;
 };
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
 /**
  * dp_tx_deinit_pair_by_index() - Deinit TX rings based on index
  * @soc: core txrx context
@@ -180,10 +188,8 @@ struct dp_tx_msdu_info_s {
  * Return: none
  */
 void dp_tx_deinit_pair_by_index(struct dp_soc *soc, int index);
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */
 
-QDF_STATUS dp_tx_vdev_attach(struct dp_vdev *vdev);
-QDF_STATUS dp_tx_vdev_detach(struct dp_vdev *vdev);
-void dp_tx_vdev_update_search_flags(struct dp_vdev *vdev);
 void dp_tx_tso_cmn_desc_pool_deinit(struct dp_soc *soc, uint8_t num_pool);
 void dp_tx_tso_cmn_desc_pool_free(struct dp_soc *soc, uint8_t num_pool);
 QDF_STATUS dp_tx_tso_cmn_desc_pool_alloc(struct dp_soc *soc,
@@ -195,17 +201,14 @@ QDF_STATUS dp_tx_tso_cmn_desc_pool_init(struct dp_soc *soc,
 
 void dp_tx_tso_cmn_desc_pool_deinit(struct dp_soc *soc, uint8_t num_pool);
 void dp_tx_tso_cmn_desc_pool_free(struct dp_soc *soc, uint8_t num_pool);
-void dp_soc_tx_desc_sw_pools_free(struct dp_soc *soc);
-void dp_soc_tx_desc_sw_pools_deinit(struct dp_soc *soc);
 QDF_STATUS dp_tx_tso_cmn_desc_pool_alloc(struct dp_soc *soc,
 					 uint8_t num_pool,
 					 uint16_t num_desc);
 QDF_STATUS dp_tx_tso_cmn_desc_pool_init(struct dp_soc *soc,
 					uint8_t num_pool,
 					uint16_t num_desc);
-QDF_STATUS dp_soc_tx_desc_sw_pools_alloc(struct dp_soc *soc);
-QDF_STATUS dp_soc_tx_desc_sw_pools_init(struct dp_soc *soc);
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
 /**
  * dp_tso_attach() - TSO Attach handler
  * @txrx_soc: Opaque Dp handle
@@ -228,8 +231,6 @@ QDF_STATUS dp_tso_soc_attach(struct cdp_soc_t *txrx_soc);
  */
 QDF_STATUS dp_tso_soc_detach(struct cdp_soc_t *txrx_soc);
 
-QDF_STATUS dp_tx_pdev_init(struct dp_pdev *pdev);
-
 qdf_nbuf_t dp_tx_send(struct cdp_soc_t *soc, uint8_t vdev_id, qdf_nbuf_t nbuf);
 
 qdf_nbuf_t dp_tx_send_vdev_id_check(struct cdp_soc_t *soc, uint8_t vdev_id,
@@ -299,15 +300,41 @@ dp_tx_prepare_send_me(struct dp_vdev *vdev, qdf_nbuf_t nbuf);
 QDF_STATUS
 dp_tx_prepare_send_igmp_me(struct dp_vdev *vdev, qdf_nbuf_t nbuf);
 
-#ifndef FEATURE_WDS
-static inline void dp_tx_mec_handler(struct dp_vdev *vdev, uint8_t *status)
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */
+
+#if defined(QCA_HOST_MODE_WIFI_DISABLED) || !defined(ATH_SUPPORT_IQUE)
+static inline void dp_tx_me_exit(struct dp_pdev *pdev)
 {
 	return;
 }
 #endif
 
-#ifndef ATH_SUPPORT_IQUE
-static inline void dp_tx_me_exit(struct dp_pdev *pdev)
+/**
+ * dp_tx_pdev_init() - dp tx pdev init
+ * @pdev: physical device instance
+ *
+ * Return: QDF_STATUS_SUCCESS: success
+ *         QDF_STATUS_E_RESOURCES: Error return
+ */
+static inline QDF_STATUS dp_tx_pdev_init(struct dp_pdev *pdev)
+{
+	struct dp_soc *soc = pdev->soc;
+
+	/* Initialize Flow control counters */
+	qdf_atomic_init(&pdev->num_tx_outstanding);
+	pdev->tx_descs_max = 0;
+	if (wlan_cfg_per_pdev_tx_ring(soc->wlan_cfg_ctx)) {
+		/* Initialize descriptors in TCL Ring */
+		hal_tx_init_data_ring(soc->hal_soc,
+				soc->tcl_data_ring[pdev->pdev_id].hal_srng);
+	}
+
+	return QDF_STATUS_SUCCESS;
+}
+
+
+#ifndef FEATURE_WDS
+static inline void dp_tx_mec_handler(struct dp_vdev *vdev, uint8_t *status)
 {
 	return;
 }
@@ -356,6 +383,7 @@ static inline enum qdf_dp_tx_rx_status dp_tx_hw_to_qdf(uint16_t status)
 	}
 }
 
+#ifndef QCA_HOST_MODE_WIFI_DISABLED
 /**
  * dp_tx_get_queue() - Returns Tx queue IDs to be used for this Tx frame
  * @vdev: DP Virtual device handle
@@ -504,20 +532,6 @@ static inline void dp_tx_hal_ring_access_end_reap(struct dp_soc *soc,
 }
 #endif
 
-#ifdef FEATURE_PERPKT_INFO
-QDF_STATUS
-dp_get_completion_indication_for_stack(struct dp_soc *soc,
-				       struct dp_pdev *pdev,
-				       struct dp_peer *peer,
-				       struct hal_tx_completion_status *ts,
-				       qdf_nbuf_t netbuf,
-				       uint64_t time_latency);
-
-void  dp_send_completion_to_stack(struct dp_soc *soc,  struct dp_pdev *pdev,
-		uint16_t peer_id, uint32_t ppdu_id,
-		qdf_nbuf_t netbuf);
-#endif
-
 void  dp_iterate_update_peer_list(struct cdp_pdev *pdev_hdl);
 
 #ifdef ATH_TX_PRI_OVERRIDE
@@ -527,10 +541,6 @@ void  dp_iterate_update_peer_list(struct cdp_pdev *pdev_hdl);
 #define DP_TX_TID_OVERRIDE(_msdu_info, _nbuf)
 #endif
 
-void
-dp_handle_wbm_internal_error(struct dp_soc *soc, void *hal_desc,
-			     uint32_t buf_type);
-
 /* TODO TX_FEATURE_NOT_YET */
 static inline void dp_tx_comp_process_exception(struct dp_tx_desc_s *tx_desc)
 {
@@ -538,6 +548,94 @@ static inline void dp_tx_comp_process_exception(struct dp_tx_desc_s *tx_desc)
 }
 /* TODO TX_FEATURE_NOT_YET */
 
+void dp_tx_desc_flush(struct dp_pdev *pdev, struct dp_vdev *vdev,
+		      bool force_free);
+QDF_STATUS dp_tx_vdev_attach(struct dp_vdev *vdev);
+QDF_STATUS dp_tx_vdev_detach(struct dp_vdev *vdev);
+void dp_tx_vdev_update_search_flags(struct dp_vdev *vdev);
+QDF_STATUS dp_soc_tx_desc_sw_pools_alloc(struct dp_soc *soc);
+QDF_STATUS dp_soc_tx_desc_sw_pools_init(struct dp_soc *soc);
+void dp_soc_tx_desc_sw_pools_free(struct dp_soc *soc);
+void dp_soc_tx_desc_sw_pools_deinit(struct dp_soc *soc);
+void
+dp_handle_wbm_internal_error(struct dp_soc *soc, void *hal_desc,
+			     uint32_t buf_type);
+#else /* QCA_HOST_MODE_WIFI_DISABLED */
+
+static inline
+QDF_STATUS dp_soc_tx_desc_sw_pools_alloc(struct dp_soc *soc)
+{
+	return QDF_STATUS_SUCCESS;
+}
+
+static inline
+QDF_STATUS dp_soc_tx_desc_sw_pools_init(struct dp_soc *soc)
+{
+	return QDF_STATUS_SUCCESS;
+}
+
+static inline void dp_soc_tx_desc_sw_pools_free(struct dp_soc *soc)
+{
+}
+
+static inline void dp_soc_tx_desc_sw_pools_deinit(struct dp_soc *soc)
+{
+}
+
+static inline
+void dp_tx_desc_flush(struct dp_pdev *pdev, struct dp_vdev *vdev,
+		      bool force_free)
+{
+}
+
+static inline QDF_STATUS dp_tx_vdev_attach(struct dp_vdev *vdev)
+{
+	return QDF_STATUS_SUCCESS;
+}
+
+static inline QDF_STATUS dp_tx_vdev_detach(struct dp_vdev *vdev)
+{
+	return QDF_STATUS_SUCCESS;
+}
+
+static inline void dp_tx_vdev_update_search_flags(struct dp_vdev *vdev)
+{
+}
+
+#endif /* QCA_HOST_MODE_WIFI_DISABLED */
+
+#ifdef FEATURE_PERPKT_INFO
+QDF_STATUS
+dp_get_completion_indication_for_stack(struct dp_soc *soc,
+				       struct dp_pdev *pdev,
+				       struct dp_peer *peer,
+				       struct hal_tx_completion_status *ts,
+				       qdf_nbuf_t netbuf,
+				       uint64_t time_latency);
+
+void dp_send_completion_to_stack(struct dp_soc *soc,  struct dp_pdev *pdev,
+			    uint16_t peer_id, uint32_t ppdu_id,
+			    qdf_nbuf_t netbuf);
+#else
+static inline
+QDF_STATUS dp_get_completion_indication_for_stack(struct dp_soc *soc,
+				       struct dp_pdev *pdev,
+				       struct dp_peer *peer,
+				       struct hal_tx_completion_status *ts,
+				       qdf_nbuf_t netbuf,
+				       uint64_t time_latency)
+{
+	return QDF_STATUS_E_NOSUPPORT;
+}
+
+static inline
+void dp_send_completion_to_stack(struct dp_soc *soc,  struct dp_pdev *pdev,
+			    uint16_t peer_id, uint32_t ppdu_id,
+			    qdf_nbuf_t netbuf)
+{
+}
+#endif
+
 #ifndef WLAN_TX_PKT_CAPTURE_ENH
 static inline
 QDF_STATUS dp_peer_set_tx_capture_enabled(struct dp_pdev *pdev,
@@ -547,6 +645,5 @@ QDF_STATUS dp_peer_set_tx_capture_enabled(struct dp_pdev *pdev,
 	return QDF_STATUS_SUCCESS;
 }
 #endif
-void dp_tx_desc_flush(struct dp_pdev *pdev, struct dp_vdev *vdev,
-		      bool force_free);
+
 #endif