diff --git a/dp/inc/cdp_txrx_cmn_struct.h b/dp/inc/cdp_txrx_cmn_struct.h index 6de0fa1216..2ceddcd0b5 100644 --- a/dp/inc/cdp_txrx_cmn_struct.h +++ b/dp/inc/cdp_txrx_cmn_struct.h @@ -3009,6 +3009,18 @@ struct cdp_peer_cookie { uint8_t cookie; }; +/** + * enum cdp_fisa_stats_id - ID to query FISA stats + * @CDP_FISA_STATS_ID_ERR_STATS: FISA error stats + * @CDP_FISA_STATS_ID_DUMP_HW_FST: HW FST dump + * @CDP_FISA_STATS_ID_DUMP_SW_FST: SW FST dump + */ +enum cdp_fisa_stats_id { + CDP_FISA_STATS_ID_ERR_STATS, + CDP_FISA_STATS_ID_DUMP_HW_FST, + CDP_FISA_STATS_ID_DUMP_SW_FST, +}; + #ifdef WLAN_SUPPORT_RX_FISA struct cdp_flow_stats { uint32_t aggr_count; diff --git a/dp/inc/cdp_txrx_ops.h b/dp/inc/cdp_txrx_ops.h index d94948348e..e51d80e286 100644 --- a/dp/inc/cdp_txrx_ops.h +++ b/dp/inc/cdp_txrx_ops.h @@ -1700,6 +1700,7 @@ void (*peer_send_wds_disconnect)(struct cdp_ctrl_objmgr_psoc *psoc, #ifdef CONFIG_SAWF_DEF_QUEUES int (*disable_sawf_svc)(uint8_t svc_id); #endif + void (*dp_print_fisa_stats)(enum cdp_fisa_stats_id stats_id); }; #ifdef DP_PEER_EXTENDED_API diff --git a/dp/wifi3.0/dp_internal.h b/dp/wifi3.0/dp_internal.h index 1d907fbefe..3153d22b14 100644 --- a/dp/wifi3.0/dp_internal.h +++ b/dp/wifi3.0/dp_internal.h @@ -4114,16 +4114,6 @@ void dp_update_num_mac_rings_for_dbs(struct dp_soc *soc, #if defined(WLAN_SUPPORT_RX_FISA) -void dp_rx_dump_fisa_table(struct dp_soc *soc); - -/** - * dp_print_fisa_stats() - Print FISA stats - * @soc: DP soc handle - * - * Return: None - */ -void dp_print_fisa_stats(struct dp_soc *soc); - /** * dp_rx_fst_update_cmem_params() - Update CMEM FST params * @soc: DP SoC context @@ -4141,19 +4131,6 @@ dp_rx_fst_update_cmem_params(struct dp_soc *soc, uint16_t num_entries, uint32_t cmem_ba_lo, uint32_t cmem_ba_hi) { } - -static inline void dp_print_fisa_stats(struct dp_soc *soc) -{ -} - -static QDF_STATUS dp_rx_dump_fisa_stats(struct dp_soc *soc) -{ - return QDF_STATUS_SUCCESS; -} - -static void dp_rx_dump_fisa_table(struct dp_soc *soc) -{ -} #endif /* WLAN_SUPPORT_RX_FISA */ #ifdef MAX_ALLOC_PAGE_SIZE diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index f71b8d9c70..685501aa25 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -6830,7 +6830,9 @@ dp_print_host_stats(struct dp_vdev *vdev, dp_print_soc_interrupt_stats(pdev->soc); break; case TXRX_SOC_FSE_STATS: - dp_rx_dump_fisa_table(pdev->soc); + if (soc->cdp_soc.ol_ops->dp_print_fisa_stats) + soc->cdp_soc.ol_ops->dp_print_fisa_stats( + CDP_FISA_STATS_ID_DUMP_HW_FST); break; case TXRX_HAL_REG_WRITE_STATS: hal_dump_reg_write_stats(pdev->soc->hal_soc); @@ -9005,7 +9007,9 @@ static QDF_STATUS dp_txrx_dump_stats(struct cdp_soc_t *psoc, uint16_t value, dp_pdev_print_tx_delay_stats(soc); /* Dump usage watermark stats for core TX/RX SRNGs */ dp_dump_srng_high_wm_stats(soc, (1 << REO_DST)); - dp_print_fisa_stats(soc); + if (soc->cdp_soc.ol_ops->dp_print_fisa_stats) + soc->cdp_soc.ol_ops->dp_print_fisa_stats( + CDP_FISA_STATS_ID_ERR_STATS); break; case CDP_RX_RING_STATS: @@ -9032,7 +9036,9 @@ static QDF_STATUS dp_txrx_dump_stats(struct cdp_soc_t *psoc, uint16_t value, break; case CDP_DP_RX_FISA_STATS: - dp_rx_dump_fisa_stats(soc); + if (soc->cdp_soc.ol_ops->dp_print_fisa_stats) + soc->cdp_soc.ol_ops->dp_print_fisa_stats( + CDP_FISA_STATS_ID_DUMP_SW_FST); break; case CDP_DP_SWLM_STATS: diff --git a/dp/wifi3.0/dp_types.h b/dp/wifi3.0/dp_types.h index 42417d22b6..66dccbd1f8 100644 --- a/dp/wifi3.0/dp_types.h +++ b/dp/wifi3.0/dp_types.h @@ -162,10 +162,6 @@ #define DP_TX_MESH_ENABLED 0x4 #define DP_TX_INVALID_QOS_TAG 0xf -#ifdef WLAN_SUPPORT_RX_FISA -#define FISA_FLOW_MAX_AGGR_COUNT 16 /* max flow aggregate count */ -#endif - #ifdef WLAN_FEATURE_RX_PREALLOC_BUFFER_POOL #define DP_RX_REFILL_BUFF_POOL_SIZE 2048 #define DP_RX_REFILL_BUFF_POOL_BURST 64 @@ -2975,32 +2971,14 @@ struct dp_soc { * invalidation bug is enabled or not */ bool is_rx_fse_full_cache_invalidate_war_enabled; -#if defined(WLAN_SUPPORT_RX_FLOW_TAG) || defined(WLAN_SUPPORT_RX_FISA) +#if defined(WLAN_SUPPORT_RX_FLOW_TAG) /** * Pointer to DP RX Flow FST at SOC level if * is_rx_flow_search_table_per_pdev is false * TBD: rx_fst[num_macs] if we decide to have per mac FST */ struct dp_rx_fst *rx_fst; -#ifdef WLAN_SUPPORT_RX_FISA - uint8_t fisa_enable; - uint8_t fisa_lru_del_enable; - /** - * Params used for controlling the fisa aggregation dynamically - */ - struct { - qdf_atomic_t skip_fisa; - uint8_t fisa_force_flush[MAX_REO_DEST_RINGS]; - } skip_fisa_param; - - /** - * CMEM address and size for FST in CMEM, This is the address - * shared during init time. - */ - uint64_t fst_cmem_base; - uint64_t fst_cmem_size; -#endif -#endif /* WLAN_SUPPORT_RX_FLOW_TAG || WLAN_SUPPORT_RX_FISA */ +#endif /* WLAN_SUPPORT_RX_FLOW_TAG */ /* SG supported for msdu continued packets from wbm release ring */ bool wbm_release_desc_rx_sg_support; bool peer_map_attach_success; @@ -4957,6 +4935,7 @@ struct dp_tx_me_buf_t { #if defined(WLAN_SUPPORT_RX_FLOW_TAG) || defined(WLAN_SUPPORT_RX_FISA) struct hal_rx_fst; +#endif /* WLAN_SUPPORT_RX_FLOW_TAG || WLAN_SUPPORT_RX_FISA */ #ifdef WLAN_SUPPORT_RX_FLOW_TAG struct dp_rx_fse { @@ -5003,161 +4982,8 @@ struct dp_rx_fst { }; #define DP_RX_GET_SW_FT_ENTRY_SIZE sizeof(struct dp_rx_fse) -#elif WLAN_SUPPORT_RX_FISA -/** - * struct dp_fisa_reo_mismatch_stats - reo mismatch sub-case stats for FISA - * @allow_cce_match: packet allowed due to cce mismatch - * @allow_fse_metdata_mismatch: packet allowed since it belongs to same flow, - * only fse_metadata is not same. - * @allow_non_aggr: packet allowed due to any other reason. - */ -struct dp_fisa_reo_mismatch_stats { - uint32_t allow_cce_match; - uint32_t allow_fse_metdata_mismatch; - uint32_t allow_non_aggr; -}; - -struct dp_fisa_stats { - /* flow index invalid from RX HW TLV */ - uint32_t invalid_flow_index; - /* workqueue deferred due to suspend */ - uint32_t update_deferred; - struct dp_fisa_reo_mismatch_stats reo_mismatch; - uint32_t incorrect_rdi; -}; - -enum fisa_aggr_ret { - FISA_AGGR_DONE, - FISA_AGGR_NOT_ELIGIBLE, - FISA_FLUSH_FLOW -}; - -/** - * struct fisa_pkt_hist - FISA Packet history structure - * @tlv_hist: array of TLV history - * @ts_hist: array of timestamps of fisa packets - * @idx: index indicating the next location to be used in the array. - */ -struct fisa_pkt_hist { - uint8_t *tlv_hist; - qdf_time_t ts_hist[FISA_FLOW_MAX_AGGR_COUNT]; - uint32_t idx; -}; - -struct dp_fisa_rx_sw_ft { - /* HAL Rx Flow Search Entry which matches HW definition */ - void *hw_fse; - /* hash value */ - uint32_t flow_hash; - /* toeplitz hash value*/ - uint32_t flow_id_toeplitz; - /* Flow index, equivalent to hash value truncated to FST size */ - uint32_t flow_id; - /* Stats tracking for this flow */ - struct cdp_flow_stats stats; - /* Flag indicating whether flow is IPv4 address tuple */ - uint8_t is_ipv4_addr_entry; - /* Flag indicating whether flow is valid */ - uint8_t is_valid; - uint8_t is_populated; - uint8_t is_flow_udp; - uint8_t is_flow_tcp; - qdf_nbuf_t head_skb; - uint16_t cumulative_l4_checksum; - uint16_t adjusted_cumulative_ip_length; - uint16_t cur_aggr; - uint16_t napi_flush_cumulative_l4_checksum; - uint16_t napi_flush_cumulative_ip_length; - qdf_nbuf_t last_skb; - uint32_t head_skb_ip_hdr_offset; - uint32_t head_skb_l4_hdr_offset; - struct cdp_rx_flow_tuple_info rx_flow_tuple_info; - uint8_t napi_id; - struct dp_vdev *vdev; - uint64_t bytes_aggregated; - uint32_t flush_count; - uint32_t aggr_count; - uint8_t do_not_aggregate; - uint16_t hal_cumultive_ip_len; - struct dp_soc *soc_hdl; - /* last aggregate count fetched from RX PKT TLV */ - uint32_t last_hal_aggr_count; - uint32_t cur_aggr_gso_size; - qdf_net_udphdr_t *head_skb_udp_hdr; - uint16_t frags_cumulative_len; - /* CMEM parameters */ - uint32_t cmem_offset; - uint32_t metadata; - uint32_t reo_dest_indication; - qdf_time_t flow_init_ts; - qdf_time_t last_accessed_ts; -#ifdef WLAN_SUPPORT_RX_FISA_HIST - struct fisa_pkt_hist pkt_hist; -#endif -}; - -#define DP_RX_GET_SW_FT_ENTRY_SIZE sizeof(struct dp_fisa_rx_sw_ft) -#define MAX_FSE_CACHE_FL_HST 10 -/** - * struct fse_cache_flush_history - Debug history cache flush - * @timestamp: Entry update timestamp - * @flows_added: Number of flows added for this flush - * @flows_deleted: Number of flows deleted for this flush - */ -struct fse_cache_flush_history { - uint64_t timestamp; - uint32_t flows_added; - uint32_t flows_deleted; -}; - -struct dp_rx_fst { - /* Software (DP) FST */ - uint8_t *base; - /* Pointer to HAL FST */ - struct hal_rx_fst *hal_rx_fst; - /* Base physical address of HAL RX HW FST */ - uint64_t hal_rx_fst_base_paddr; - /* Maximum number of flows FSE supports */ - uint16_t max_entries; - /* Num entries in flow table */ - uint16_t num_entries; - /* SKID Length */ - uint16_t max_skid_length; - /* Hash mask to obtain legitimate hash entry */ - uint32_t hash_mask; - /* Lock for adding/deleting entries of FST */ - qdf_spinlock_t dp_rx_fst_lock; - uint32_t add_flow_count; - uint32_t del_flow_count; - uint32_t hash_collision_cnt; - struct dp_soc *soc_hdl; - qdf_atomic_t fse_cache_flush_posted; - qdf_timer_t fse_cache_flush_timer; - /* Allow FSE cache flush cmd to FW */ - bool fse_cache_flush_allow; - struct fse_cache_flush_history cache_fl_rec[MAX_FSE_CACHE_FL_HST]; - /* FISA DP stats */ - struct dp_fisa_stats stats; - - /* CMEM params */ - qdf_work_t fst_update_work; - qdf_workqueue_t *fst_update_wq; - qdf_list_t fst_update_list; - uint32_t meta_counter; - uint32_t cmem_ba; - qdf_spinlock_t dp_rx_sw_ft_lock[MAX_REO_DEST_RINGS]; - qdf_event_t cmem_resp_event; - bool flow_deletion_supported; - bool fst_in_cmem; - qdf_atomic_t pm_suspended; - bool fst_wq_defer; - /* Hash based routing supported */ - bool rx_hash_enabled; -}; - -#endif /* WLAN_SUPPORT_RX_FISA */ -#endif /* WLAN_SUPPORT_RX_FLOW_TAG || WLAN_SUPPORT_RX_FISA */ +#endif /* WLAN_SUPPORT_RX_FLOW_TAG */ #ifdef WLAN_FEATURE_STATS_EXT /** diff --git a/target_if/init_deinit/src/init_event_handler.c b/target_if/init_deinit/src/init_event_handler.c index 8221c956b9..8b4112457a 100644 --- a/target_if/init_deinit/src/init_event_handler.c +++ b/target_if/init_deinit/src/init_event_handler.c @@ -429,11 +429,6 @@ static int init_deinit_service_ready_event_handler(ol_scn_t scn_handle, DP_SOC_PARAM_MSDU_EXCEPTION_DESC, tgt_hdl->info.target_caps.num_msdu_desc); - /* Send CMEM FSE support to DP layer */ - if (wmi_service_enabled(wmi_handle, wmi_service_fse_cmem_alloc_support)) - cdp_soc_set_param(wlan_psoc_get_dp_handle(psoc), - DP_SOC_PARAM_CMEM_FSE_SUPPORT, 1); - /* Send multi_peer_group support to DP layer */ if (wmi_service_enabled(wmi_handle, wmi_service_multi_peer_group_cmd_support))