diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 7d795ca095..120438d76c 100644 --- a/dp/wifi3.0/dp_main.c +++ b/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 = { diff --git a/dp/wifi3.0/dp_rx.c b/dp/wifi3.0/dp_rx.c index b8f7bc4de9..2c8bcc0c0d 100644 --- a/dp/wifi3.0/dp_rx.c +++ b/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; diff --git a/dp/wifi3.0/dp_rx.h b/dp/wifi3.0/dp_rx.h index 4fd1baa7af..5a666c419e 100644 --- a/dp/wifi3.0/dp_rx.h +++ b/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 diff --git a/dp/wifi3.0/dp_rx_err.c b/dp/wifi3.0/dp_rx_err.c index be787e8716..8e645c159f 100644 --- a/dp/wifi3.0/dp_rx_err.c +++ b/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 */ diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c index bdbab25d2c..53dc9d16cc 100644 --- a/dp/wifi3.0/dp_tx.c +++ b/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; } - diff --git a/dp/wifi3.0/dp_tx.h b/dp/wifi3.0/dp_tx.h index 681345a502..11498078e9 100644 --- a/dp/wifi3.0/dp_tx.h +++ b/dp/wifi3.0/dp_tx.h @@ -21,7 +21,10 @@ #include #include #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