diff --git a/cfg/inc/cfg_converged.h b/cfg/inc/cfg_converged.h index 7b46f39872ab..cc61bcf4ba5e 100644 --- a/cfg/inc/cfg_converged.h +++ b/cfg/inc/cfg_converged.h @@ -24,9 +24,11 @@ #define __CFG_CONVERGED_H #include +#include "cfg_dp.h" #define CFG_CONVERGED_ALL \ - CFG_SCAN_ALL + CFG_SCAN_ALL \ + CFG_DP #endif /* __CFG_CONVERGED_H */ diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index bdace54570a7..f7da3c918afd 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -42,6 +42,7 @@ #include "dp_rx_mon.h" #include "htt_stats.h" #include "qdf_mem.h" /* qdf_mem_malloc,free */ +#include "cfg_ucfg_api.h" #ifdef QCA_LL_TX_FLOW_CONTROL_V2 #include "cdp_txrx_flow_ctrl_v2.h" #else @@ -85,9 +86,6 @@ static void dp_peer_delete_wifi3(void *peer_handle, uint32_t bitmap); #define RX_RING_MASK_VAL 0xF #endif -bool rx_hash = 1; -qdf_declare_param(rx_hash, bool); - #define STR_MAXLEN 64 #define DP_PPDU_STATS_CFG_ALL 0xFFFF @@ -105,6 +103,7 @@ qdf_declare_param(rx_hash, bool); #define DP_PPDU_STATS_CFG_BPR_PKTLOG (DP_PPDU_STATS_CFG_BPR | \ DP_PPDU_TXLITE_STATS_BITMASK_CFG) +#define RNG_ERR "SRNG setup failed for" /** * default_dscp_tid_map - Default DSCP-TID mapping * @@ -1812,24 +1811,8 @@ static void dp_hw_link_desc_pool_cleanup(struct dp_soc *soc) } } -/* TODO: Following should be configurable */ -#define WBM_RELEASE_RING_SIZE 64 -#define TCL_CMD_RING_SIZE 32 -#define TCL_STATUS_RING_SIZE 32 #define REO_DST_RING_SIZE_QCA6290 1024 #define REO_DST_RING_SIZE_QCA8074 2048 -#define REO_REINJECT_RING_SIZE 32 -#define RX_RELEASE_RING_SIZE 1024 -#define REO_EXCEPTION_RING_SIZE 128 -#define REO_CMD_RING_SIZE 64 -#define REO_STATUS_RING_SIZE 128 -#define RXDMA_BUF_RING_SIZE 1024 -#define RXDMA_REFILL_RING_SIZE 4096 -#define RXDMA_MONITOR_BUF_RING_SIZE 4096 -#define RXDMA_MONITOR_DST_RING_SIZE 2048 -#define RXDMA_MONITOR_STATUS_RING_SIZE 1024 -#define RXDMA_MONITOR_DESC_RING_SIZE 4096 -#define RXDMA_ERR_DST_RING_SIZE 1024 /* * dp_wds_aging_timer_fn() - Timer callback function for WDS aging @@ -2219,6 +2202,8 @@ static int dp_soc_cmn_setup(struct dp_soc *soc) int tx_ring_size; int tx_comp_ring_size; int reo_dst_ring_size; + uint32_t entries; + struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx; if (qdf_atomic_read(&soc->cmn_init_done)) return 0; @@ -2226,10 +2211,11 @@ static int dp_soc_cmn_setup(struct dp_soc *soc) if (dp_hw_link_desc_pool_setup(soc)) goto fail1; + soc_cfg_ctx = soc->wlan_cfg_ctx; /* Setup SRNG rings */ /* Common rings */ if (dp_srng_setup(soc, &soc->wbm_desc_rel_ring, SW2WBM_RELEASE, 0, 0, - WBM_RELEASE_RING_SIZE)) { + wlan_cfg_get_dp_soc_wbm_release_ring_size(soc_cfg_ctx))) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, FL("dp_srng_setup failed for wbm_desc_rel_ring")); goto fail1; @@ -2238,13 +2224,13 @@ static int dp_soc_cmn_setup(struct dp_soc *soc) soc->num_tcl_data_rings = 0; /* Tx data rings */ - if (!wlan_cfg_per_pdev_tx_ring(soc->wlan_cfg_ctx)) { + if (!wlan_cfg_per_pdev_tx_ring(soc_cfg_ctx)) { soc->num_tcl_data_rings = - wlan_cfg_num_tcl_data_rings(soc->wlan_cfg_ctx); + wlan_cfg_num_tcl_data_rings(soc_cfg_ctx); tx_comp_ring_size = - wlan_cfg_tx_comp_ring_size(soc->wlan_cfg_ctx); + wlan_cfg_tx_comp_ring_size(soc_cfg_ctx); tx_ring_size = - wlan_cfg_tx_ring_size(soc->wlan_cfg_ctx); + wlan_cfg_tx_ring_size(soc_cfg_ctx); for (i = 0; i < soc->num_tcl_data_rings; i++) { if (dp_srng_setup(soc, &soc->tcl_data_ring[i], TCL_DATA, i, 0, tx_ring_size)) { @@ -2276,16 +2262,18 @@ static int dp_soc_cmn_setup(struct dp_soc *soc) goto fail1; } + entries = wlan_cfg_get_dp_soc_tcl_cmd_ring_size(soc_cfg_ctx); /* TCL command and status rings */ if (dp_srng_setup(soc, &soc->tcl_cmd_ring, TCL_CMD, 0, 0, - TCL_CMD_RING_SIZE)) { + entries)) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, FL("dp_srng_setup failed for tcl_cmd_ring")); goto fail1; } + entries = wlan_cfg_get_dp_soc_tcl_status_ring_size(soc_cfg_ctx); if (dp_srng_setup(soc, &soc->tcl_status_ring, TCL_STATUS, 0, 0, - TCL_STATUS_RING_SIZE)) { + entries)) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, FL("dp_srng_setup failed for tcl_status_ring")); goto fail1; @@ -2298,9 +2286,9 @@ static int dp_soc_cmn_setup(struct dp_soc *soc) */ /* Rx data rings */ - if (!wlan_cfg_per_pdev_rx_ring(soc->wlan_cfg_ctx)) { + if (!wlan_cfg_per_pdev_rx_ring(soc_cfg_ctx)) { soc->num_reo_dest_rings = - wlan_cfg_num_reo_dest_rings(soc->wlan_cfg_ctx); + wlan_cfg_num_reo_dest_rings(soc_cfg_ctx); QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, FL("num_reo_dest_rings %d\n"), soc->num_reo_dest_rings); @@ -2308,8 +2296,8 @@ static int dp_soc_cmn_setup(struct dp_soc *soc) if (dp_srng_setup(soc, &soc->reo_dest_ring[i], REO_DST, i, 0, reo_dst_ring_size)) { QDF_TRACE(QDF_MODULE_ID_DP, - QDF_TRACE_LEVEL_ERROR, - FL("dp_srng_setup failed for reo_dest_ring[%d]"), i); + QDF_TRACE_LEVEL_ERROR, + FL(RNG_ERR "reo_dest_ring [%d]"), i); goto fail1; } } @@ -2318,17 +2306,19 @@ static int dp_soc_cmn_setup(struct dp_soc *soc) soc->num_reo_dest_rings = 0; } + entries = wlan_cfg_get_dp_soc_rxdma_err_dst_ring_size(soc_cfg_ctx); /* LMAC RxDMA to SW Rings configuration */ - if (!wlan_cfg_per_pdev_lmac_ring(soc->wlan_cfg_ctx)) { + if (!wlan_cfg_per_pdev_lmac_ring(soc_cfg_ctx)) { /* Only valid for MCL */ struct dp_pdev *pdev = soc->pdev_list[0]; for (i = 0; i < MAX_RX_MAC_RINGS; i++) { if (dp_srng_setup(soc, &pdev->rxdma_err_dst_ring[i], - RXDMA_DST, 0, i, RXDMA_ERR_DST_RING_SIZE)) { + RXDMA_DST, 0, i, + entries)) { QDF_TRACE(QDF_MODULE_ID_DP, - QDF_TRACE_LEVEL_ERROR, - FL("dp_srng_setup failed for rxdma_err_dst_ring")); + QDF_TRACE_LEVEL_ERROR, + FL(RNG_ERR "rxdma_err_dst_ring")); goto fail1; } } @@ -2336,35 +2326,37 @@ static int dp_soc_cmn_setup(struct dp_soc *soc) /* TBD: call dp_rx_init to setup Rx SW descriptors */ /* REO reinjection ring */ + entries = wlan_cfg_get_dp_soc_reo_reinject_ring_size(soc_cfg_ctx); if (dp_srng_setup(soc, &soc->reo_reinject_ring, REO_REINJECT, 0, 0, - REO_REINJECT_RING_SIZE)) { + entries)) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, - FL("dp_srng_setup failed for reo_reinject_ring")); + FL("dp_srng_setup failed for reo_reinject_ring")); goto fail1; } /* Rx release ring */ if (dp_srng_setup(soc, &soc->rx_rel_ring, WBM2SW_RELEASE, 3, 0, - RX_RELEASE_RING_SIZE)) { + wlan_cfg_get_dp_soc_rx_release_ring_size(soc_cfg_ctx))) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, - FL("dp_srng_setup failed for rx_rel_ring")); + FL("dp_srng_setup failed for rx_rel_ring")); goto fail1; } /* Rx exception ring */ - if (dp_srng_setup(soc, &soc->reo_exception_ring, REO_EXCEPTION, 0, - MAX_REO_DEST_RINGS, REO_EXCEPTION_RING_SIZE)) { + entries = wlan_cfg_get_dp_soc_reo_exception_ring_size(soc_cfg_ctx); + if (dp_srng_setup(soc, &soc->reo_exception_ring, + REO_EXCEPTION, 0, MAX_REO_DEST_RINGS, entries)) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, - FL("dp_srng_setup failed for reo_exception_ring")); + FL("dp_srng_setup failed for reo_exception_ring")); goto fail1; } /* REO command and status rings */ if (dp_srng_setup(soc, &soc->reo_cmd_ring, REO_CMD, 0, 0, - REO_CMD_RING_SIZE)) { + wlan_cfg_get_dp_soc_reo_cmd_ring_size(soc_cfg_ctx))) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, FL("dp_srng_setup failed for reo_cmd_ring")); goto fail1; @@ -2375,7 +2367,7 @@ static int dp_soc_cmn_setup(struct dp_soc *soc) qdf_spinlock_create(&soc->rx.reo_cmd_lock); if (dp_srng_setup(soc, &soc->reo_status_ring, REO_STATUS, 0, 0, - REO_STATUS_RING_SIZE)) { + wlan_cfg_get_dp_soc_reo_status_ring_size(soc_cfg_ctx))) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, FL("dp_srng_setup failed for reo_status_ring")); goto fail1; @@ -2385,7 +2377,7 @@ static int dp_soc_cmn_setup(struct dp_soc *soc) dp_soc_wds_attach(soc); /* Reset the cpu ring map if radio is NSS offloaded */ - if (wlan_cfg_get_dp_soc_nss_cfg(soc->wlan_cfg_ctx)) { + if (wlan_cfg_get_dp_soc_nss_cfg(soc_cfg_ctx)) { dp_soc_reset_cpu_ring_map(soc); dp_soc_reset_intr_mask(soc); } @@ -2393,7 +2385,7 @@ static int dp_soc_cmn_setup(struct dp_soc *soc) /* Setup HW REO */ qdf_mem_zero(&reo_params, sizeof(reo_params)); - if (wlan_cfg_is_rx_hash_enabled(soc->wlan_cfg_ctx)) { + if (wlan_cfg_is_rx_hash_enabled(soc_cfg_ctx)) { /* * Reo ring remap is not required if both radios @@ -2410,9 +2402,9 @@ static int dp_soc_cmn_setup(struct dp_soc *soc) /* setup the global rx defrag waitlist */ TAILQ_INIT(&soc->rx.defrag.waitlist); soc->rx.defrag.timeout_ms = - wlan_cfg_get_rx_defrag_min_timeout(soc->wlan_cfg_ctx); + wlan_cfg_get_rx_defrag_min_timeout(soc_cfg_ctx); soc->rx.flags.defrag_timeout_check = - wlan_cfg_get_defrag_timeout_check(soc->wlan_cfg_ctx); + wlan_cfg_get_defrag_timeout_check(soc_cfg_ctx); qdf_spinlock_create(&soc->rx.defrag.defrag_lock); out: @@ -2500,17 +2492,20 @@ static void dp_lro_hash_setup(struct dp_soc *soc) static int dp_rxdma_ring_setup(struct dp_soc *soc, struct dp_pdev *pdev) { - int max_mac_rings = - wlan_cfg_get_num_mac_rings - (pdev->wlan_cfg_ctx); + struct wlan_cfg_dp_pdev_ctxt *pdev_cfg_ctx; + int max_mac_rings; int i; + pdev_cfg_ctx = pdev->wlan_cfg_ctx; + max_mac_rings = wlan_cfg_get_num_mac_rings(pdev_cfg_ctx); + for (i = 0; i < max_mac_rings; i++) { QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR, "%s: pdev_id %d mac_id %d\n", __func__, pdev->pdev_id, i); if (dp_srng_setup(soc, &pdev->rx_mac_buf_ring[i], - RXDMA_BUF, 1, i, RXDMA_BUF_RING_SIZE)) { + RXDMA_BUF, 1, i, + wlan_cfg_get_rx_dma_buf_ring_size(pdev_cfg_ctx))) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, FL("failed rx mac ring setup")); @@ -2679,10 +2674,17 @@ void dp_free_inact_timer(struct dp_soc *soc) static int dp_setup_ipa_rx_refill_buf_ring(struct dp_soc *soc, struct dp_pdev *pdev) { + struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx; + int entries; + + soc_cfg_ctx = soc->wlan_cfg_ctx; + entries = wlan_cfg_get_dp_soc_rxdma_refill_ring_size(soc_cfg_ctx); + /* Setup second Rx refill buffer ring */ if (dp_srng_setup(soc, &pdev->rx_refill_buf_ring2, RXDMA_BUF, IPA_RX_REFILL_BUF_RING_IDX, - pdev->pdev_id, RXDMA_REFILL_RING_SIZE)) { + pdev->pdev_id, + entries)) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, FL("dp_srng_setup failed second rx refill ring")); return QDF_STATUS_E_FAILURE; @@ -2723,39 +2725,47 @@ QDF_STATUS dp_mon_rings_setup(struct dp_soc *soc, struct dp_pdev *pdev) { int mac_id = 0; int pdev_id = pdev->pdev_id; + int entries; + struct wlan_cfg_dp_pdev_ctxt *pdev_cfg_ctx; + + pdev_cfg_ctx = pdev->wlan_cfg_ctx; for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) { int mac_for_pdev = dp_get_mac_id_for_pdev(mac_id, pdev_id); + entries = wlan_cfg_get_dma_mon_buf_ring_size(pdev_cfg_ctx); if (dp_srng_setup(soc, &pdev->rxdma_mon_buf_ring[mac_id], RXDMA_MONITOR_BUF, 0, mac_for_pdev, - RXDMA_MONITOR_BUF_RING_SIZE)) { + entries)) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, - FL("Srng setup failed for rxdma_mon_buf_ring")); + FL(RNG_ERR "rxdma_mon_buf_ring ")); return QDF_STATUS_E_NOMEM; } + entries = wlan_cfg_get_dma_mon_dest_ring_size(pdev_cfg_ctx); if (dp_srng_setup(soc, &pdev->rxdma_mon_dst_ring[mac_id], RXDMA_MONITOR_DST, 0, mac_for_pdev, - RXDMA_MONITOR_DST_RING_SIZE)) { + entries)) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, - FL("Srng setup failed for rxdma_mon_dst_ring")); + FL(RNG_ERR "rxdma_mon_dst_ring")); return QDF_STATUS_E_NOMEM; } + entries = wlan_cfg_get_dma_mon_stat_ring_size(pdev_cfg_ctx); if (dp_srng_setup(soc, &pdev->rxdma_mon_status_ring[mac_id], RXDMA_MONITOR_STATUS, 0, mac_for_pdev, - RXDMA_MONITOR_STATUS_RING_SIZE)) { + entries)) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, - FL("Srng setup failed for rxdma_mon_status_ring")); + FL(RNG_ERR "rxdma_mon_status_ring")); return QDF_STATUS_E_NOMEM; } + entries = wlan_cfg_get_dma_mon_desc_ring_size(pdev_cfg_ctx); if (dp_srng_setup(soc, &pdev->rxdma_mon_desc_ring[mac_id], RXDMA_MONITOR_DESC, 0, mac_for_pdev, - RXDMA_MONITOR_DESC_RING_SIZE)) { + entries)) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, - "Srng setup failed for rxdma_mon_desc_ring\n"); + FL(RNG_ERR "rxdma_mon_desc_ring")); return QDF_STATUS_E_NOMEM; } } @@ -2785,6 +2795,9 @@ static struct cdp_pdev *dp_pdev_attach_wifi3(struct cdp_soc_t *txrx_soc, int tx_ring_size; int tx_comp_ring_size; int reo_dst_ring_size; + int entries; + struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx; + int nss_cfg; struct dp_soc *soc = (struct dp_soc *)txrx_soc; struct dp_pdev *pdev = qdf_mem_malloc(sizeof(*pdev)); @@ -2795,7 +2808,8 @@ static struct cdp_pdev *dp_pdev_attach_wifi3(struct cdp_soc_t *txrx_soc, goto fail0; } - pdev->wlan_cfg_ctx = wlan_cfg_pdev_attach(); + soc_cfg_ctx = soc->wlan_cfg_ctx; + pdev->wlan_cfg_ctx = wlan_cfg_pdev_attach(soc->ctrl_psoc); if (!pdev->wlan_cfg_ctx) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, @@ -2808,8 +2822,9 @@ static struct cdp_pdev *dp_pdev_attach_wifi3(struct cdp_soc_t *txrx_soc, /* * set nss pdev config based on soc config */ + nss_cfg = wlan_cfg_get_dp_soc_nss_cfg(soc_cfg_ctx); wlan_cfg_set_dp_pdev_nss_enabled(pdev->wlan_cfg_ctx, - (wlan_cfg_get_dp_soc_nss_cfg(soc->wlan_cfg_ctx) & (1 << pdev_id))); + (nss_cfg & (1 << pdev_id))); pdev->soc = soc; pdev->ctrl_pdev = ctrl_pdev; @@ -2834,9 +2849,9 @@ static struct cdp_pdev *dp_pdev_attach_wifi3(struct cdp_soc_t *txrx_soc, /* Setup per PDEV TCL rings if configured */ if (wlan_cfg_per_pdev_tx_ring(soc->wlan_cfg_ctx)) { tx_ring_size = - wlan_cfg_tx_ring_size(soc->wlan_cfg_ctx); + wlan_cfg_tx_ring_size(soc_cfg_ctx); tx_comp_ring_size = - wlan_cfg_tx_comp_ring_size(soc->wlan_cfg_ctx); + wlan_cfg_tx_comp_ring_size(soc_cfg_ctx); if (dp_srng_setup(soc, &soc->tcl_data_ring[pdev_id], TCL_DATA, pdev_id, pdev_id, tx_ring_size)) { @@ -2862,7 +2877,7 @@ static struct cdp_pdev *dp_pdev_attach_wifi3(struct cdp_soc_t *txrx_soc, reo_dst_ring_size = wlan_cfg_get_reo_dst_ring_size(soc->wlan_cfg_ctx); /* Setup per PDEV REO rings if configured */ - if (wlan_cfg_per_pdev_rx_ring(soc->wlan_cfg_ctx)) { + if (wlan_cfg_per_pdev_rx_ring(soc_cfg_ctx)) { if (dp_srng_setup(soc, &soc->reo_dest_ring[pdev_id], REO_DST, pdev_id, pdev_id, reo_dst_ring_size)) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, @@ -2873,7 +2888,7 @@ static struct cdp_pdev *dp_pdev_attach_wifi3(struct cdp_soc_t *txrx_soc, } if (dp_srng_setup(soc, &pdev->rx_refill_buf_ring, RXDMA_BUF, 0, pdev_id, - RXDMA_REFILL_RING_SIZE)) { + wlan_cfg_get_dp_soc_rxdma_refill_ring_size(soc_cfg_ctx))) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, FL("dp_srng_setup failed rx refill ring")); goto fail1; @@ -2891,11 +2906,13 @@ static struct cdp_pdev *dp_pdev_attach_wifi3(struct cdp_soc_t *txrx_soc, goto fail1; } + entries = wlan_cfg_get_dp_soc_rxdma_err_dst_ring_size(soc_cfg_ctx); if (wlan_cfg_per_pdev_lmac_ring(soc->wlan_cfg_ctx)) { if (dp_srng_setup(soc, &pdev->rxdma_err_dst_ring[0], RXDMA_DST, - 0, pdev_id, RXDMA_ERR_DST_RING_SIZE)) { + 0, pdev_id, + entries)) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, - FL("dp_srng_setup failed for rxdma_err_dst_ring")); + FL(RNG_ERR "rxdma_err_dst_ring")); goto fail1; } } @@ -7000,7 +7017,6 @@ QDF_STATUS dp_update_config_parameters(struct cdp_soc *psoc, soc->wlan_cfg_ctx->tcp_udp_checksumoffload = params->tcp_udp_checksumoffload; soc->wlan_cfg_ctx->napi_enabled = params->napi_enable; - dp_update_flow_control_parameters(soc, params); return QDF_STATUS_SUCCESS; @@ -7665,10 +7681,10 @@ void *dp_soc_attach_wifi3(void *ctrl_psoc, void *hif_handle, goto fail1; } - soc->wlan_cfg_ctx = wlan_cfg_soc_attach(); + soc->wlan_cfg_ctx = wlan_cfg_soc_attach(soc->ctrl_psoc); if (!soc->wlan_cfg_ctx) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, - FL("wlan_cfg_soc_attach failed")); + FL("wlan_cfg_soc_attach failed")); goto fail2; } target_type = hal_get_target_type(soc->hal_soc); @@ -7690,7 +7706,8 @@ void *dp_soc_attach_wifi3(void *ctrl_psoc, void *hif_handle, break; } - wlan_cfg_set_rx_hash(soc->wlan_cfg_ctx, rx_hash); + wlan_cfg_set_rx_hash(soc->wlan_cfg_ctx, + cfg_get(ctrl_psoc, CFG_DP_RX_HASH)); soc->cce_disable = false; if (soc->cdp_soc.ol_ops->get_dp_cfg_param) { diff --git a/wlan_cfg/cfg_dp.h b/wlan_cfg/cfg_dp.h new file mode 100644 index 000000000000..0d775a9bbc0e --- /dev/null +++ b/wlan_cfg/cfg_dp.h @@ -0,0 +1,600 @@ +/* + * Copyright (c) 2018 The Linux Foundation. All rights reserved. + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/** + * DOC: This file contains definitions of Data Path configuration. + */ + +#ifndef _CFG_DP_H_ +#define _CFG_DP_H_ + +#include "cfg_define.h" + +#define WLAN_CFG_MAX_CLIENTS 64 +#define WLAN_CFG_MAX_CLIENTS_MIN 64 +#define WLAN_CFG_MAX_CLIENTS_MAX 64 + +/* Change this to a lower value to enforce scattered idle list mode */ +#define WLAN_CFG_MAX_ALLOC_SIZE 0x200000 +#define WLAN_CFG_MAX_ALLOC_SIZE_MIN 0x200000 +#define WLAN_CFG_MAX_ALLOC_SIZE_MAX 0x200000 + +#define WLAN_CFG_NUM_TCL_DATA_RINGS 3 +#define WLAN_CFG_NUM_TCL_DATA_RINGS_MIN 3 +#define WLAN_CFG_NUM_TCL_DATA_RINGS_MAX 3 + +#ifdef CONFIG_MCL +#ifdef IPA_OFFLOAD +#define WLAN_CFG_PER_PDEV_TX_RING 0 +#else +#define WLAN_CFG_PER_PDEV_TX_RING 1 +#endif +#else +#define WLAN_CFG_PER_PDEV_TX_RING 0 +#endif + +#define WLAN_CFG_PER_PDEV_TX_RING_MIN 0 +#define WLAN_CFG_PER_PDEV_TX_RING_MAX 1 + +#ifdef CONFIG_MCL +#define WLAN_CFG_PER_PDEV_RX_RING 0 +#define WLAN_CFG_PER_PDEV_LMAC_RING 0 +#define WLAN_LRO_ENABLE 1 +#ifdef IPA_OFFLOAD +#define WLAN_CFG_TX_RING_SIZE 2048 +#else +#define WLAN_CFG_TX_RING_SIZE 512 +#endif +#define WLAN_CFG_TX_COMP_RING_SIZE 1024 + +/* Tx Descriptor and Tx Extension Descriptor pool sizes */ +#define WLAN_CFG_NUM_TX_DESC 1024 +#define WLAN_CFG_NUM_TX_EXT_DESC 1024 + +/* Interrupt Mitigation - Batch threshold in terms of number of frames */ +#define WLAN_CFG_INT_BATCH_THRESHOLD_TX 1 +#define WLAN_CFG_INT_BATCH_THRESHOLD_RX 1 +#define WLAN_CFG_INT_BATCH_THRESHOLD_OTHER 1 + +/* Interrupt Mitigation - Timer threshold in us */ +#define WLAN_CFG_INT_TIMER_THRESHOLD_TX 8 +#define WLAN_CFG_INT_TIMER_THRESHOLD_RX 8 +#define WLAN_CFG_INT_TIMER_THRESHOLD_OTHER 8 +#endif + +#ifdef CONFIG_WIN +#define WLAN_CFG_PER_PDEV_RX_RING 0 +#define WLAN_CFG_PER_PDEV_LMAC_RING 1 +#define WLAN_LRO_ENABLE 0 + +/* Tx Descriptor and Tx Extension Descriptor pool sizes */ +#define WLAN_CFG_NUM_TX_DESC 0x320000 +#define WLAN_CFG_NUM_TX_EXT_DESC 0x80000 + +/* Interrupt Mitigation - Batch threshold in terms of number of frames */ +#define WLAN_CFG_INT_BATCH_THRESHOLD_TX 256 +#define WLAN_CFG_INT_BATCH_THRESHOLD_RX 128 +#define WLAN_CFG_INT_BATCH_THRESHOLD_OTHER 1 + +/* Interrupt Mitigation - Timer threshold in us */ +#define WLAN_CFG_INT_TIMER_THRESHOLD_TX 1000 +#define WLAN_CFG_INT_TIMER_THRESHOLD_RX 500 +#define WLAN_CFG_INT_TIMER_THRESHOLD_OTHER 1000 + +#define WLAN_CFG_TX_RING_SIZE 512 + +/* Size the completion ring using following 2 parameters + * - NAPI schedule latency (assuming 1 netdev competing for CPU) + * = 20 ms (2 jiffies) + * - Worst case PPS requirement = 400K PPS + * + * Ring size = 20 * 400 = 8000 + * 8192 is nearest power of 2 + */ +#define WLAN_CFG_TX_COMP_RING_SIZE 0x80000 +#endif + +#define WLAN_CFG_PER_PDEV_RX_RING_MIN 0 +#define WLAN_CFG_PER_PDEV_RX_RING_MAX 0 + +#define WLAN_CFG_PER_PDEV_LMAC_RING_MIN 0 +#define WLAN_CFG_PER_PDEV_LMAC_RING_MAX 1 + +#define WLAN_CFG_TX_RING_SIZE_MIN 512 +#define WLAN_CFG_TX_RING_SIZE_MAX 2048 + +#define WLAN_CFG_TX_COMP_RING_SIZE_MIN 1024 +#define WLAN_CFG_TX_COMP_RING_SIZE_MAX 0x80000 + +#define WLAN_CFG_NUM_TX_DESC_MIN 1024 +#define WLAN_CFG_NUM_TX_DESC_MAX 0x320000 + +#define WLAN_CFG_NUM_TX_EXT_DESC_MIN 1024 +#define WLAN_CFG_NUM_TX_EXT_DESC_MAX 0x80000 + +#define WLAN_CFG_INT_BATCH_THRESHOLD_TX_MIN 1 +#define WLAN_CFG_INT_BATCH_THRESHOLD_TX_MAX 256 + +#define WLAN_CFG_INT_BATCH_THRESHOLD_RX_MIN 1 +#define WLAN_CFG_INT_BATCH_THRESHOLD_RX_MAX 128 + +#define WLAN_CFG_INT_BATCH_THRESHOLD_OTHER_MIN 1 +#define WLAN_CFG_INT_BATCH_THRESHOLD_OTHER_MAX 1 + +#define WLAN_CFG_INT_TIMER_THRESHOLD_TX_MIN 8 +#define WLAN_CFG_INT_TIMER_THRESHOLD_TX_MAX 100 + +#define WLAN_CFG_INT_TIMER_THRESHOLD_RX_MIN 8 +#define WLAN_CFG_INT_TIMER_THRESHOLD_RX_MAX 500 + +#define WLAN_CFG_INT_TIMER_THRESHOLD_OTHER_MIN 8 +#define WLAN_CFG_INT_TIMER_THRESHOLD_OTHER_MAX 1000 + +#define WLAN_CFG_NSS_TX_COMP_RING_SIZE 0x1000 +#define WLAN_CFG_NSS_TX_COMP_RING_SIZE_MIN 0x1000 +#define WLAN_CFG_NSS_TX_COMP_RING_SIZE_MAX 0x1000 + +#ifdef QCA_LL_TX_FLOW_CONTROL_V2 + +/* Per vdev pools */ +#define WLAN_CFG_NUM_TX_DESC_POOL 3 +#define WLAN_CFG_NUM_TXEXT_DESC_POOL 3 + +#else /* QCA_LL_TX_FLOW_CONTROL_V2 */ + +#ifdef TX_PER_PDEV_DESC_POOL +#define WLAN_CFG_NUM_TX_DESC_POOL MAX_PDEV_CNT +#define WLAN_CFG_NUM_TXEXT_DESC_POOL MAX_PDEV_CNT + +#else /* TX_PER_PDEV_DESC_POOL */ + +#define WLAN_CFG_NUM_TX_DESC_POOL 3 +#define WLAN_CFG_NUM_TXEXT_DESC_POOL 3 + +#endif /* TX_PER_PDEV_DESC_POOL */ +#endif /* QCA_LL_TX_FLOW_CONTROL_V2 */ + +#define WLAN_CFG_NUM_TXEXT_DESC_POOL_MIN 1 +#define WLAN_CFG_NUM_TXEXT_DESC_POOL_MAX 4 + +#define WLAN_CFG_HTT_PKT_TYPE 2 +#define WLAN_CFG_HTT_PKT_TYPE_MIN 2 +#define WLAN_CFG_HTT_PKT_TYPE_MAX 2 + +#define WLAN_CFG_MAX_PEER_ID 64 +#define WLAN_CFG_MAX_PEER_ID_MIN 64 +#define WLAN_CFG_MAX_PEER_ID_MAX 64 + +#define WLAN_CFG_RX_DEFRAG_TIMEOUT 100 +#define WLAN_CFG_RX_DEFRAG_TIMEOUT_MIN 100 +#define WLAN_CFG_RX_DEFRAG_TIMEOUT_MAX 100 + +#define WLAN_CFG_NUM_TCL_DATA_RINGS 3 +#define WLAN_CFG_NUM_TCL_DATA_RINGS_MIN 3 +#define WLAN_CFG_NUM_TCL_DATA_RINGS_MAX 3 + +#define WLAN_CFG_NUM_REO_DEST_RING 4 +#define WLAN_CFG_NUM_REO_DEST_RING_MIN 4 +#define WLAN_CFG_NUM_REO_DEST_RING_MAX 4 + +#define WLAN_CFG_WBM_RELEASE_RING_SIZE 64 +#define WLAN_CFG_WBM_RELEASE_RING_SIZE_MIN 64 +#define WLAN_CFG_WBM_RELEASE_RING_SIZE_MAX 64 + +#define WLAN_CFG_TCL_CMD_RING_SIZE 32 +#define WLAN_CFG_TCL_CMD_RING_SIZE_MIN 32 +#define WLAN_CFG_TCL_CMD_RING_SIZE_MAX 32 + +#define WLAN_CFG_TCL_STATUS_RING_SIZE 32 +#define WLAN_CFG_TCL_STATUS_RING_SIZE_MIN 32 +#define WLAN_CFG_TCL_STATUS_RING_SIZE_MAX 32 + +#if defined(QCA_WIFI_QCA6290) +#define WLAN_CFG_REO_DST_RING_SIZE 1024 +#else +#define WLAN_CFG_REO_DST_RING_SIZE 2048 +#endif + +#define WLAN_CFG_REO_DST_RING_SIZE_MIN 1024 +#define WLAN_CFG_REO_DST_RING_SIZE_MAX 2048 + +#define WLAN_CFG_REO_REINJECT_RING_SIZE 32 +#define WLAN_CFG_REO_REINJECT_RING_SIZE_MIN 32 +#define WLAN_CFG_REO_REINJECT_RING_SIZE_MAX 32 + +#define WLAN_CFG_RX_RELEASE_RING_SIZE 1024 +#define WLAN_CFG_RX_RELEASE_RING_SIZE_MIN 1024 +#define WLAN_CFG_RX_RELEASE_RING_SIZE_MAX 1024 + +#define WLAN_CFG_REO_EXCEPTION_RING_SIZE 128 +#define WLAN_CFG_REO_EXCEPTION_RING_SIZE_MIN 128 +#define WLAN_CFG_REO_EXCEPTION_RING_SIZE_MAX 128 + +#define WLAN_CFG_REO_CMD_RING_SIZE 64 +#define WLAN_CFG_REO_CMD_RING_SIZE_MIN 64 +#define WLAN_CFG_REO_CMD_RING_SIZE_MAX 64 + +#define WLAN_CFG_REO_STATUS_RING_SIZE 128 +#define WLAN_CFG_REO_STATUS_RING_SIZE_MIN 128 +#define WLAN_CFG_REO_STATUS_RING_SIZE_MAX 128 + +#define WLAN_CFG_RXDMA_BUF_RING_SIZE 1024 +#define WLAN_CFG_RXDMA_BUF_RING_SIZE_MIN 1024 +#define WLAN_CFG_RXDMA_BUF_RING_SIZE_MAX 1024 + +#define WLAN_CFG_RXDMA_REFILL_RING_SIZE 4096 +#define WLAN_CFG_RXDMA_REFILL_RING_SIZE_MIN 4096 +#define WLAN_CFG_RXDMA_REFILL_RING_SIZE_MAX 4096 + +#define WLAN_CFG_RXDMA_MONITOR_BUF_RING_SIZE 4096 +#define WLAN_CFG_RXDMA_MONITOR_BUF_RING_SIZE_MIN 4096 +#define WLAN_CFG_RXDMA_MONITOR_BUF_RING_SIZE_MAX 4096 + +#define WLAN_CFG_RXDMA_MONITOR_DST_RING_SIZE 2048 +#define WLAN_CFG_RXDMA_MONITOR_DST_RING_SIZE_MIN 2048 +#define WLAN_CFG_RXDMA_MONITOR_DST_RING_SIZE_MAX 2048 + +#define WLAN_CFG_RXDMA_MONITOR_STATUS_RING_SIZE 1024 +#define WLAN_CFG_RXDMA_MONITOR_STATUS_RING_SIZE_MIN 1024 +#define WLAN_CFG_RXDMA_MONITOR_STATUS_RING_SIZE_MAX 1024 + +#define WLAN_CFG_RXDMA_MONITOR_DESC_RING_SIZE 4096 +#define WLAN_CFG_RXDMA_MONITOR_DESC_RING_SIZE_MIN 4096 +#define WLAN_CFG_RXDMA_MONITOR_DESC_RING_SIZE_MAX 4096 + +#define WLAN_CFG_RXDMA_ERR_DST_RING_SIZE 1024 +#define WLAN_CFG_RXDMA_ERR_DST_RING_SIZE_MIN 1024 +#define WLAN_CFG_RXDMA_ERR_DST_RING_SIZE_MAX 1024 + +/* DP INI Declerations */ +#define CFG_DP_HTT_PACKET_TYPE \ + CFG_INI_UINT("dp_htt_packet_type", \ + WLAN_CFG_HTT_PKT_TYPE_MIN, \ + WLAN_CFG_HTT_PKT_TYPE_MAX, \ + WLAN_CFG_HTT_PKT_TYPE, \ + CFG_VALUE_OR_DEFAULT, "DP HTT packet type") + +#define CFG_DP_INT_BATCH_THRESHOLD_OTHER \ + CFG_INI_UINT("dp_int_batch_threshold_other", \ + WLAN_CFG_INT_TIMER_THRESHOLD_OTHER_MIN, \ + WLAN_CFG_INT_TIMER_THRESHOLD_OTHER_MAX, \ + WLAN_CFG_INT_TIMER_THRESHOLD_OTHER, \ + CFG_VALUE_OR_DEFAULT, "DP INT threshold Other") + +#define CFG_DP_INT_BATCH_THRESHOLD_RX \ + CFG_INI_UINT("dp_int_batch_threshold_rx", \ + WLAN_CFG_INT_BATCH_THRESHOLD_RX_MIN, \ + WLAN_CFG_INT_BATCH_THRESHOLD_RX_MAX, \ + WLAN_CFG_INT_BATCH_THRESHOLD_RX, \ + CFG_VALUE_OR_DEFAULT, "DP INT threshold Rx") + +#define CFG_DP_INT_BATCH_THRESHOLD_TX \ + CFG_INI_UINT("dp_int_batch_threshold_tx", \ + WLAN_CFG_INT_BATCH_THRESHOLD_TX_MIN, \ + WLAN_CFG_INT_BATCH_THRESHOLD_TX_MAX, \ + WLAN_CFG_INT_BATCH_THRESHOLD_TX, \ + CFG_VALUE_OR_DEFAULT, "DP INT threshold Tx") + +#define CFG_DP_INT_TIMER_THRESHOLD_OTHER \ + CFG_INI_UINT("dp_int_timer_threshold_other", \ + WLAN_CFG_INT_TIMER_THRESHOLD_OTHER_MIN, \ + WLAN_CFG_INT_TIMER_THRESHOLD_OTHER_MAX, \ + WLAN_CFG_INT_TIMER_THRESHOLD_OTHER, \ + CFG_VALUE_OR_DEFAULT, "DP INT timer threshold Other") + +#define CFG_DP_INT_TIMER_THRESHOLD_RX \ + CFG_INI_UINT("dp_int_timer_threshold_rx", \ + WLAN_CFG_INT_TIMER_THRESHOLD_RX_MIN, \ + WLAN_CFG_INT_TIMER_THRESHOLD_RX_MAX, \ + WLAN_CFG_INT_TIMER_THRESHOLD_RX, \ + CFG_VALUE_OR_DEFAULT, "DP INT timer threshold Rx") + +#define CFG_DP_INT_TIMER_THRESHOLD_TX \ + CFG_INI_UINT("dp_int_timer_threshold_tx", \ + WLAN_CFG_INT_TIMER_THRESHOLD_TX_MIN, \ + WLAN_CFG_INT_TIMER_THRESHOLD_TX_MAX, \ + WLAN_CFG_INT_TIMER_THRESHOLD_TX, \ + CFG_VALUE_OR_DEFAULT, "DP INT timer threshold Tx") + +#define CFG_DP_MAX_ALLOC_SIZE \ + CFG_INI_UINT("dp_max_alloc_size", \ + WLAN_CFG_MAX_ALLOC_SIZE_MIN, \ + WLAN_CFG_MAX_ALLOC_SIZE_MAX, \ + WLAN_CFG_MAX_ALLOC_SIZE, \ + CFG_VALUE_OR_DEFAULT, "DP Max Alloc Size") + +#define CFG_DP_MAX_CLIENTS \ + CFG_INI_UINT("dp_max_clients", \ + WLAN_CFG_MAX_CLIENTS_MIN, \ + WLAN_CFG_MAX_CLIENTS_MAX, \ + WLAN_CFG_MAX_CLIENTS, \ + CFG_VALUE_OR_DEFAULT, "DP Max Clients") + +#define CFG_DP_MAX_PEER_ID \ + CFG_INI_UINT("dp_max_peer_id", \ + WLAN_CFG_MAX_PEER_ID_MIN, \ + WLAN_CFG_MAX_PEER_ID_MAX, \ + WLAN_CFG_MAX_PEER_ID, \ + CFG_VALUE_OR_DEFAULT, "DP Max Peer ID") + +#define CFG_DP_REO_DEST_RINGS \ + CFG_INI_UINT("dp_reo_dest_rings", \ + WLAN_CFG_NUM_REO_DEST_RING_MIN, \ + WLAN_CFG_NUM_REO_DEST_RING_MAX, \ + WLAN_CFG_NUM_REO_DEST_RING, \ + CFG_VALUE_OR_DEFAULT, "DP REO Destination Rings") + +#define CFG_DP_TCL_DATA_RINGS \ + CFG_INI_UINT("dp_tcl_data_rings", \ + WLAN_CFG_NUM_TCL_DATA_RINGS_MIN, \ + WLAN_CFG_NUM_TCL_DATA_RINGS_MAX, \ + WLAN_CFG_NUM_TCL_DATA_RINGS, \ + CFG_VALUE_OR_DEFAULT, "DP TCL Data Rings") + +#define CFG_DP_TX_DESC \ + CFG_INI_UINT("dp_tx_desc", \ + WLAN_CFG_NUM_TX_DESC_MIN, \ + WLAN_CFG_NUM_TX_DESC_MAX, \ + WLAN_CFG_NUM_TX_DESC, \ + CFG_VALUE_OR_DEFAULT, "DP Tx Descriptors") + +#define CFG_DP_TX_EXT_DESC \ + CFG_INI_UINT("dp_tx_ext_desc", \ + WLAN_CFG_NUM_TX_EXT_DESC_MIN, \ + WLAN_CFG_NUM_TX_EXT_DESC_MAX, \ + WLAN_CFG_NUM_TX_EXT_DESC, \ + CFG_VALUE_OR_DEFAULT, "DP Tx Ext Descriptors") + +#define CFG_DP_TX_EXT_DESC_POOLS \ + CFG_INI_UINT("dp_tx_ext_desc_pool", \ + WLAN_CFG_NUM_TXEXT_DESC_POOL_MIN, \ + WLAN_CFG_NUM_TXEXT_DESC_POOL_MAX, \ + WLAN_CFG_NUM_TXEXT_DESC_POOL, \ + CFG_VALUE_OR_DEFAULT, "DP Tx Ext Descriptors Pool") + +#define CFG_DP_PDEV_RX_RING \ + CFG_INI_UINT("dp_pdev_rx_ring", \ + WLAN_CFG_PER_PDEV_RX_RING_MIN, \ + WLAN_CFG_PER_PDEV_RX_RING_MAX, \ + WLAN_CFG_PER_PDEV_RX_RING, \ + CFG_VALUE_OR_DEFAULT, "DP PDEV Rx Ring") + +#define CFG_DP_PDEV_TX_RING \ + CFG_INI_UINT("dp_pdev_tx_ring", \ + WLAN_CFG_PER_PDEV_TX_RING_MIN, \ + WLAN_CFG_PER_PDEV_TX_RING_MAX, \ + WLAN_CFG_PER_PDEV_TX_RING, \ + CFG_VALUE_OR_DEFAULT, \ + "DP PDEV Tx Ring") + +#define CFG_DP_RX_DEFRAG_TIMEOUT \ + CFG_INI_UINT("dp_rx_defrag_timeout", \ + WLAN_CFG_RX_DEFRAG_TIMEOUT_MIN, \ + WLAN_CFG_RX_DEFRAG_TIMEOUT_MAX, \ + WLAN_CFG_RX_DEFRAG_TIMEOUT, \ + CFG_VALUE_OR_DEFAULT, "DP Rx Defrag Timeout") + +#define CFG_DP_TX_COMPL_RING_SIZE \ + CFG_INI_UINT("dp_tx_compl_ring_size", \ + WLAN_CFG_TX_COMP_RING_SIZE_MIN, \ + WLAN_CFG_TX_COMP_RING_SIZE_MAX, \ + WLAN_CFG_TX_COMP_RING_SIZE, \ + CFG_VALUE_OR_DEFAULT, "DP Tx Completion Ring Size") + +#define CFG_DP_TX_RING_SIZE \ + CFG_INI_UINT("dp_tx_ring_size", \ + WLAN_CFG_TX_RING_SIZE_MIN,\ + WLAN_CFG_TX_RING_SIZE_MAX,\ + WLAN_CFG_TX_RING_SIZE,\ + CFG_VALUE_OR_DEFAULT, "DP Tx Ring Size") + +#define CFG_DP_NSS_COMP_RING_SIZE \ + CFG_INI_UINT("dp_nss_comp_ring_size", \ + WLAN_CFG_NSS_TX_COMP_RING_SIZE_MIN, \ + WLAN_CFG_NSS_TX_COMP_RING_SIZE_MAX, \ + WLAN_CFG_NSS_TX_COMP_RING_SIZE, \ + CFG_VALUE_OR_DEFAULT, "DP NSS completion Ring Size") + +#define CFG_DP_PDEV_LMAC_RING \ + CFG_INI_UINT("dp_pdev_lmac_ring", \ + WLAN_CFG_PER_PDEV_LMAC_RING_MIN, \ + WLAN_CFG_PER_PDEV_LMAC_RING_MAX, \ + WLAN_CFG_PER_PDEV_LMAC_RING, \ + CFG_VALUE_OR_DEFAULT, "DP pdev LMAC ring") + +#define CFG_DP_BASE_HW_MAC_ID \ + CFG_INI_UINT("dp_base_hw_macid", \ + 0, 1, 1, \ + CFG_VALUE_OR_DEFAULT, "DP Base HW Mac ID") + +#define CFG_DP_LRO \ + CFG_INI_BOOL("LROEnable", WLAN_LRO_ENABLE, \ + "DP LRO Enable") + +#define CFG_DP_RX_HASH \ + CFG_INI_BOOL("dp_rx_hash", true, \ + "DP Rx Hash") + +#define CFG_DP_TSO \ + CFG_INI_BOOL("TSOEnable", false, \ + "DP TSO Enabled") + +#define CFG_DP_NAPI \ + CFG_INI_BOOL("dp_napi_enabled", MCL_OR_WIN_VALUE(true, false), \ + "DP Napi Enabled") + +#define CFG_DP_TCP_UDP_CKSUM_OFFLOAD \ + CFG_INI_BOOL("dp_tcp_udp_checksumoffload", true, \ + "DP TCP UDP Checksum Offload") + +#define CFG_DP_DEFRAG_TIMEOUT_CHECK \ + CFG_INI_BOOL("dp_defrag_timeout_check", true, \ + "DP Defrag Timeout Check") + +#define CFG_DP_WBM_RELEASE_RING \ + CFG_INI_UINT("dp_wbm_release_ring", \ + WLAN_CFG_WBM_RELEASE_RING_SIZE_MIN, \ + WLAN_CFG_WBM_RELEASE_RING_SIZE_MAX, \ + WLAN_CFG_WBM_RELEASE_RING_SIZE, \ + CFG_VALUE_OR_DEFAULT, "DP WBM Release Ring") + +#define CFG_DP_TCL_CMD_RING \ + CFG_INI_UINT("dp_tcl_cmd_ring", \ + WLAN_CFG_TCL_CMD_RING_SIZE_MIN, \ + WLAN_CFG_TCL_CMD_RING_SIZE_MAX, \ + WLAN_CFG_TCL_CMD_RING_SIZE, \ + CFG_VALUE_OR_DEFAULT, "DP TCL command ring") + +#define CFG_DP_TCL_STATUS_RING \ + CFG_INI_UINT("dp_tcl_status_ring",\ + WLAN_CFG_TCL_STATUS_RING_SIZE_MIN, \ + WLAN_CFG_TCL_STATUS_RING_SIZE_MAX, \ + WLAN_CFG_TCL_STATUS_RING_SIZE, \ + CFG_VALUE_OR_DEFAULT, "DP TCL status ring") + +#define CFG_DP_REO_REINJECT_RING \ + CFG_INI_UINT("dp_reo_reinject_ring", \ + WLAN_CFG_REO_REINJECT_RING_SIZE_MIN, \ + WLAN_CFG_REO_REINJECT_RING_SIZE_MAX, \ + WLAN_CFG_REO_REINJECT_RING_SIZE, \ + CFG_VALUE_OR_DEFAULT, "DP REO reinject ring") + +#define CFG_DP_RX_RELEASE_RING \ + CFG_INI_UINT("dp_rx_release_ring", \ + WLAN_CFG_RX_RELEASE_RING_SIZE_MIN, \ + WLAN_CFG_RX_RELEASE_RING_SIZE_MAX, \ + WLAN_CFG_RX_RELEASE_RING_SIZE, \ + CFG_VALUE_OR_DEFAULT, "DP Rx release ring") + +#define CFG_DP_REO_EXCEPTION_RING \ + CFG_INI_UINT("dp_reo_exception_ring", \ + WLAN_CFG_REO_EXCEPTION_RING_SIZE_MIN, \ + WLAN_CFG_REO_EXCEPTION_RING_SIZE_MAX, \ + WLAN_CFG_REO_EXCEPTION_RING_SIZE, \ + CFG_VALUE_OR_DEFAULT, "DP REO exception ring") + +#define CFG_DP_REO_CMD_RING \ + CFG_INI_UINT("dp_reo_cmd_ring", \ + WLAN_CFG_REO_CMD_RING_SIZE_MIN, \ + WLAN_CFG_REO_CMD_RING_SIZE_MAX, \ + WLAN_CFG_REO_CMD_RING_SIZE, \ + CFG_VALUE_OR_DEFAULT, "DP REO command ring") + +#define CFG_DP_REO_STATUS_RING \ + CFG_INI_UINT("dp_reo_status_ring", \ + WLAN_CFG_REO_STATUS_RING_SIZE_MIN, \ + WLAN_CFG_REO_STATUS_RING_SIZE_MAX, \ + WLAN_CFG_REO_STATUS_RING_SIZE, \ + CFG_VALUE_OR_DEFAULT, "DP REO status ring") + +#define CFG_DP_RXDMA_BUF_RING \ + CFG_INI_UINT("dp_rxdma_buf_ring", \ + WLAN_CFG_RXDMA_BUF_RING_SIZE_MIN, \ + WLAN_CFG_RXDMA_BUF_RING_SIZE_MAX, \ + WLAN_CFG_RXDMA_BUF_RING_SIZE, \ + CFG_VALUE_OR_DEFAULT, "DP RXDMA buffer ring") + +#define CFG_DP_RXDMA_REFILL_RING \ + CFG_INI_UINT("dp_rxdma_refill_ring", \ + WLAN_CFG_RXDMA_REFILL_RING_SIZE_MIN, \ + WLAN_CFG_RXDMA_REFILL_RING_SIZE_MAX, \ + WLAN_CFG_RXDMA_REFILL_RING_SIZE, \ + CFG_VALUE_OR_DEFAULT, "DP RXDMA refilll ring") + +#define CFG_DP_RXDMA_MONITOR_BUF_RING \ + CFG_INI_UINT("dp_rxdma_monitor_buf_ring", \ + WLAN_CFG_RXDMA_MONITOR_BUF_RING_SIZE_MIN, \ + WLAN_CFG_RXDMA_MONITOR_BUF_RING_SIZE_MAX, \ + WLAN_CFG_RXDMA_MONITOR_BUF_RING_SIZE, \ + CFG_VALUE_OR_DEFAULT, "DP RXDMA monitor buffer ring") + +#define CFG_DP_RXDMA_MONITOR_DST_RING \ + CFG_INI_UINT("dp_rxdma_monitor_dst_ring", \ + WLAN_CFG_RXDMA_MONITOR_DST_RING_SIZE_MIN, \ + WLAN_CFG_RXDMA_MONITOR_DST_RING_SIZE_MAX, \ + WLAN_CFG_RXDMA_MONITOR_DST_RING_SIZE, \ + CFG_VALUE_OR_DEFAULT, "DP RXDMA monitor destination ring") + +#define CFG_DP_RXDMA_MONITOR_STATUS_RING \ + CFG_INI_UINT("dp_rxdma_monitor_status_ring", \ + WLAN_CFG_RXDMA_MONITOR_STATUS_RING_SIZE_MIN, \ + WLAN_CFG_RXDMA_MONITOR_STATUS_RING_SIZE_MAX, \ + WLAN_CFG_RXDMA_MONITOR_STATUS_RING_SIZE, \ + CFG_VALUE_OR_DEFAULT, "DP RXDMA monitor status ring") + +#define CFG_DP_RXDMA_MONITOR_DESC_RING \ + CFG_INI_UINT("dp_rxdma_monitor_desc_ring", \ + WLAN_CFG_RXDMA_MONITOR_DESC_RING_SIZE_MIN, \ + WLAN_CFG_RXDMA_MONITOR_DESC_RING_SIZE_MAX, \ + WLAN_CFG_RXDMA_MONITOR_DESC_RING_SIZE, \ + CFG_VALUE_OR_DEFAULT, "DP RXDMA monitor destination ring") + +#define CFG_DP_RXDMA_ERR_DST_RING \ + CFG_INI_UINT("dp_rxdma_err_dst_ring", \ + WLAN_CFG_RXDMA_ERR_DST_RING_SIZE_MIN, \ + WLAN_CFG_RXDMA_ERR_DST_RING_SIZE_MAX, \ + WLAN_CFG_RXDMA_ERR_DST_RING_SIZE, \ + CFG_VALUE_OR_DEFAULT, "RXDMA err destination ring") + +#define CFG_DP \ + CFG(CFG_DP_HTT_PACKET_TYPE) \ + CFG(CFG_DP_INT_BATCH_THRESHOLD_OTHER) \ + CFG(CFG_DP_INT_BATCH_THRESHOLD_RX) \ + CFG(CFG_DP_INT_BATCH_THRESHOLD_TX) \ + CFG(CFG_DP_INT_TIMER_THRESHOLD_OTHER) \ + CFG(CFG_DP_INT_TIMER_THRESHOLD_RX) \ + CFG(CFG_DP_INT_TIMER_THRESHOLD_TX) \ + CFG(CFG_DP_MAX_ALLOC_SIZE) \ + CFG(CFG_DP_MAX_CLIENTS) \ + CFG(CFG_DP_MAX_PEER_ID) \ + CFG(CFG_DP_REO_DEST_RINGS) \ + CFG(CFG_DP_TCL_DATA_RINGS) \ + CFG(CFG_DP_TX_DESC) \ + CFG(CFG_DP_TX_EXT_DESC) \ + CFG(CFG_DP_TX_EXT_DESC_POOLS) \ + CFG(CFG_DP_PDEV_RX_RING) \ + CFG(CFG_DP_PDEV_TX_RING) \ + CFG(CFG_DP_RX_DEFRAG_TIMEOUT) \ + CFG(CFG_DP_TX_COMPL_RING_SIZE) \ + CFG(CFG_DP_TX_RING_SIZE) \ + CFG(CFG_DP_NSS_COMP_RING_SIZE) \ + CFG(CFG_DP_PDEV_LMAC_RING) \ + CFG(CFG_DP_BASE_HW_MAC_ID) \ + CFG(CFG_DP_LRO) \ + CFG(CFG_DP_RX_HASH) \ + CFG(CFG_DP_TSO) \ + CFG(CFG_DP_NAPI) \ + CFG(CFG_DP_TCP_UDP_CKSUM_OFFLOAD) \ + CFG(CFG_DP_DEFRAG_TIMEOUT_CHECK) \ + CFG(CFG_DP_WBM_RELEASE_RING) \ + CFG(CFG_DP_TCL_CMD_RING) \ + CFG(CFG_DP_TCL_STATUS_RING) \ + CFG(CFG_DP_REO_REINJECT_RING) \ + CFG(CFG_DP_RX_RELEASE_RING) \ + CFG(CFG_DP_REO_EXCEPTION_RING) \ + CFG(CFG_DP_REO_CMD_RING) \ + CFG(CFG_DP_REO_STATUS_RING) \ + CFG(CFG_DP_RXDMA_BUF_RING) \ + CFG(CFG_DP_RXDMA_REFILL_RING) \ + CFG(CFG_DP_RXDMA_MONITOR_BUF_RING) \ + CFG(CFG_DP_RXDMA_MONITOR_DST_RING) \ + CFG(CFG_DP_RXDMA_MONITOR_STATUS_RING) \ + CFG(CFG_DP_RXDMA_MONITOR_DESC_RING) \ + CFG(CFG_DP_RXDMA_ERR_DST_RING) + +#endif /* _CFG_DP_H_ */ diff --git a/wlan_cfg/wlan_cfg.c b/wlan_cfg/wlan_cfg.c index 5960ea7b1972..007b9b9a6bd5 100644 --- a/wlan_cfg/wlan_cfg.c +++ b/wlan_cfg/wlan_cfg.c @@ -25,6 +25,7 @@ #include "qdf_trace.h" #include "qdf_mem.h" #include "wlan_cfg.h" +#include "cfg_ucfg_api.h" /* * FIX THIS - @@ -32,96 +33,12 @@ * Many of these should actually be coming from dts file/ini file */ -#ifdef CONFIG_MCL -#define WLAN_CFG_PER_PDEV_RX_RING 0 -#define WLAN_CFG_PER_PDEV_LMAC_RING 0 -#define WLAN_LRO_ENABLE 1 -#ifdef IPA_OFFLOAD -#define WLAN_CFG_TX_RING_SIZE 2048 -#else -#define WLAN_CFG_TX_RING_SIZE 512 -#endif -#define WLAN_CFG_TX_COMP_RING_SIZE 1024 - -/* Tx Descriptor and Tx Extension Descriptor pool sizes */ -#define WLAN_CFG_NUM_TX_DESC 1024 -#define WLAN_CFG_NUM_TX_EXT_DESC 1024 - -/* Interrupt Mitigation - Batch threshold in terms of number of frames */ -#define WLAN_CFG_INT_BATCH_THRESHOLD_TX 1 -#define WLAN_CFG_INT_BATCH_THRESHOLD_RX 1 -#define WLAN_CFG_INT_BATCH_THRESHOLD_OTHER 1 - -/* Interrupt Mitigation - Timer threshold in us */ -#define WLAN_CFG_INT_TIMER_THRESHOLD_TX 8 -#define WLAN_CFG_INT_TIMER_THRESHOLD_RX 8 -#define WLAN_CFG_INT_TIMER_THRESHOLD_OTHER 8 -#endif - -#ifdef CONFIG_WIN -#define WLAN_CFG_PER_PDEV_RX_RING 0 -#define WLAN_CFG_PER_PDEV_LMAC_RING 1 -#define WLAN_LRO_ENABLE 0 - -/* Tx Descriptor and Tx Extension Descriptor pool sizes */ -#define WLAN_CFG_NUM_TX_DESC (32 << 10) -#define WLAN_CFG_NUM_TX_EXT_DESC (8 << 10) - - -/* Interrupt Mitigation - Batch threshold in terms of number of frames */ -#define WLAN_CFG_INT_BATCH_THRESHOLD_TX 256 -#define WLAN_CFG_INT_BATCH_THRESHOLD_RX 128 -#define WLAN_CFG_INT_BATCH_THRESHOLD_OTHER 1 - -/* Interrupt Mitigation - Timer threshold in us */ -#define WLAN_CFG_INT_TIMER_THRESHOLD_TX 1000 -#define WLAN_CFG_INT_TIMER_THRESHOLD_RX 500 -#define WLAN_CFG_INT_TIMER_THRESHOLD_OTHER 1000 - -#define WLAN_CFG_TX_RING_SIZE 512 - -/* Size the completion ring using following 2 parameters - * - NAPI schedule latency (assuming 1 netdev competing for CPU) = 20 ms (2 jiffies) - * - Worst case PPS requirement = 400K PPS - * - * Ring size = 20 * 400 = 8000 - * 8192 is nearest power of 2 - */ -#define WLAN_CFG_TX_COMP_RING_SIZE (8 << 10) -#endif - /* * The max allowed size for tx comp ring is 8191. * This is limitted by h/w ring max size. * As this is not a power of 2 it does not work with nss offload so the * nearest available size which is power of 2 is 4096 chosen for nss */ -#define NSS_TX_COMP_RING_SIZE (4 << 10) - -#define RXDMA_BUF_RING_SIZE 2048 -#define RXDMA_MONITOR_BUF_RING_SIZE 2048 -#define RXDMA_MONITOR_DEST_RING_SIZE 2048 -#define RXDMA_MONITOR_STATUS_RING_SIZE 2048 - -#ifdef QCA_LL_TX_FLOW_CONTROL_V2 - -/* Per vdev pools */ -#define WLAN_CFG_NUM_TX_DESC_POOL 3 -#define WLAN_CFG_NUM_TXEXT_DESC_POOL 3 - -#else /* QCA_LL_TX_FLOW_CONTROL_V2 */ - -#ifdef TX_PER_PDEV_DESC_POOL -#define WLAN_CFG_NUM_TX_DESC_POOL MAX_PDEV_CNT -#define WLAN_CFG_NUM_TXEXT_DESC_POOL MAX_PDEV_CNT - -#else /* TX_PER_PDEV_DESC_POOL */ - -#define WLAN_CFG_NUM_TX_DESC_POOL 3 -#define WLAN_CFG_NUM_TXEXT_DESC_POOL 3 - -#endif /* TX_PER_PDEV_DESC_POOL */ -#endif /* QCA_LL_TX_FLOW_CONTROL_V2 */ #define WLAN_CFG_TX_RING_MASK_0 0x1 #define WLAN_CFG_TX_RING_MASK_1 0x2 @@ -163,30 +80,6 @@ #define WLAN_CFG_HOST2RXDMA_RING_MASK_2 0x4 #define WLAN_CFG_HOST2RXDMA_RING_MASK_3 0x0 -#define WLAN_CFG_DP_TX_NUM_POOLS 3 -/* Change this to a lower value to enforce scattered idle list mode */ -#define WLAN_CFG_MAX_ALLOC_SIZE (2 << 20) - -#define WLAN_CFG_MAX_CLIENTS 64 - -#ifdef CONFIG_MCL -#ifdef IPA_OFFLOAD -#define WLAN_CFG_PER_PDEV_TX_RING 0 -#else -#define WLAN_CFG_PER_PDEV_TX_RING 1 -#endif -#else -#define WLAN_CFG_PER_PDEV_TX_RING 0 -#endif - -#define WLAN_CFG_NUM_TCL_DATA_RINGS 3 -#define WLAN_CFG_NUM_REO_DEST_RING 4 - -#define WLAN_CFG_HTT_PKT_TYPE 2 -#define WLAN_CFG_MAX_PEER_ID 64 - -#define WLAN_CFG_RX_DEFRAG_TIMEOUT 100 - #ifdef CONFIG_MCL static const int tx_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = { 0, @@ -274,22 +167,24 @@ static const int host2rxdma_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = { * @dma_mon_buf_ring_size - Size of RxDMA Monitor buffer ring * @dma_mon_dest_ring_size - Size of RxDMA Monitor Destination ring * @dma_mon_status_ring_size - Size of RxDMA Monitor Status ring + * @rxdma_monitor_desc_ring - rxdma monitor desc ring size */ struct wlan_cfg_dp_pdev_ctxt { int rx_dma_buf_ring_size; int dma_mon_buf_ring_size; int dma_mon_dest_ring_size; int dma_mon_status_ring_size; + int rxdma_monitor_desc_ring; int num_mac_rings; int nss_enabled; }; /** * wlan_cfg_soc_attach() - Allocate and prepare SoC configuration - * + * @psoc - Object manager psoc * Return: wlan_cfg_ctx - Handle to Configuration context */ -struct wlan_cfg_dp_soc_ctxt *wlan_cfg_soc_attach() +struct wlan_cfg_dp_soc_ctxt *wlan_cfg_soc_attach(void *psoc) { int i = 0; @@ -300,31 +195,39 @@ struct wlan_cfg_dp_soc_ctxt *wlan_cfg_soc_attach() return NULL; wlan_cfg_ctx->num_int_ctxts = WLAN_CFG_INT_NUM_CONTEXTS; - wlan_cfg_ctx->max_clients = WLAN_CFG_MAX_CLIENTS; - wlan_cfg_ctx->max_alloc_size = WLAN_CFG_MAX_ALLOC_SIZE; - wlan_cfg_ctx->per_pdev_tx_ring = WLAN_CFG_PER_PDEV_TX_RING; - wlan_cfg_ctx->num_tcl_data_rings = WLAN_CFG_NUM_TCL_DATA_RINGS; - wlan_cfg_ctx->per_pdev_rx_ring = WLAN_CFG_PER_PDEV_RX_RING; - wlan_cfg_ctx->per_pdev_lmac_ring = WLAN_CFG_PER_PDEV_LMAC_RING; - wlan_cfg_ctx->num_reo_dest_rings = WLAN_CFG_NUM_REO_DEST_RING; + wlan_cfg_ctx->max_clients = cfg_get(psoc, CFG_DP_MAX_CLIENTS); + wlan_cfg_ctx->max_alloc_size = cfg_get(psoc, CFG_DP_MAX_ALLOC_SIZE); + wlan_cfg_ctx->per_pdev_tx_ring = cfg_get(psoc, CFG_DP_PDEV_TX_RING); + wlan_cfg_ctx->num_tcl_data_rings = cfg_get(psoc, CFG_DP_TCL_DATA_RINGS); + wlan_cfg_ctx->per_pdev_rx_ring = cfg_get(psoc, CFG_DP_PDEV_RX_RING); + wlan_cfg_ctx->per_pdev_lmac_ring = cfg_get(psoc, CFG_DP_PDEV_LMAC_RING); + wlan_cfg_ctx->num_reo_dest_rings = cfg_get(psoc, CFG_DP_REO_DEST_RINGS); wlan_cfg_ctx->num_tx_desc_pool = MAX_TXDESC_POOLS; - wlan_cfg_ctx->num_tx_ext_desc_pool = WLAN_CFG_NUM_TXEXT_DESC_POOL; - wlan_cfg_ctx->num_tx_desc = WLAN_CFG_NUM_TX_DESC; - wlan_cfg_ctx->num_tx_ext_desc = WLAN_CFG_NUM_TX_EXT_DESC; - wlan_cfg_ctx->htt_packet_type = WLAN_CFG_HTT_PKT_TYPE; - wlan_cfg_ctx->max_peer_id = WLAN_CFG_MAX_PEER_ID; + wlan_cfg_ctx->num_tx_ext_desc_pool = cfg_get(psoc, + CFG_DP_TX_EXT_DESC_POOLS); + wlan_cfg_ctx->num_tx_desc = cfg_get(psoc, CFG_DP_TX_DESC); + wlan_cfg_ctx->num_tx_ext_desc = cfg_get(psoc, CFG_DP_TX_EXT_DESC); + wlan_cfg_ctx->htt_packet_type = cfg_get(psoc, CFG_DP_HTT_PACKET_TYPE); + wlan_cfg_ctx->max_peer_id = cfg_get(psoc, CFG_DP_MAX_PEER_ID); - wlan_cfg_ctx->tx_ring_size = WLAN_CFG_TX_RING_SIZE; - wlan_cfg_ctx->tx_comp_ring_size = WLAN_CFG_TX_COMP_RING_SIZE; + wlan_cfg_ctx->tx_ring_size = cfg_get(psoc, CFG_DP_TX_RING_SIZE); + wlan_cfg_ctx->tx_comp_ring_size = cfg_get(psoc, + CFG_DP_TX_COMPL_RING_SIZE); - wlan_cfg_ctx->int_batch_threshold_tx = WLAN_CFG_INT_BATCH_THRESHOLD_TX; - wlan_cfg_ctx->int_timer_threshold_tx = WLAN_CFG_INT_TIMER_THRESHOLD_TX; - wlan_cfg_ctx->int_batch_threshold_rx = WLAN_CFG_INT_BATCH_THRESHOLD_RX; - wlan_cfg_ctx->int_timer_threshold_rx = WLAN_CFG_INT_TIMER_THRESHOLD_RX; + wlan_cfg_ctx->tx_comp_ring_size_nss = + cfg_get(psoc, CFG_DP_NSS_COMP_RING_SIZE); + wlan_cfg_ctx->int_batch_threshold_tx = + cfg_get(psoc, CFG_DP_INT_BATCH_THRESHOLD_TX); + wlan_cfg_ctx->int_timer_threshold_tx = + cfg_get(psoc, CFG_DP_INT_TIMER_THRESHOLD_TX); + wlan_cfg_ctx->int_batch_threshold_rx = + cfg_get(psoc, CFG_DP_INT_BATCH_THRESHOLD_RX); + wlan_cfg_ctx->int_timer_threshold_rx = + cfg_get(psoc, CFG_DP_INT_TIMER_THRESHOLD_RX); wlan_cfg_ctx->int_batch_threshold_other = - WLAN_CFG_INT_BATCH_THRESHOLD_OTHER; + cfg_get(psoc, CFG_DP_INT_BATCH_THRESHOLD_OTHER); wlan_cfg_ctx->int_timer_threshold_other = - WLAN_CFG_INT_TIMER_THRESHOLD_OTHER; + cfg_get(psoc, CFG_DP_INT_TIMER_THRESHOLD_OTHER); for (i = 0; i < WLAN_CFG_INT_NUM_CONTEXTS; i++) { wlan_cfg_ctx->int_tx_ring_mask[i] = tx_ring_mask[i]; @@ -349,12 +252,43 @@ struct wlan_cfg_dp_soc_ctxt *wlan_cfg_soc_attach() if (MAX_PDEV_CNT > 2) wlan_cfg_set_hw_macid(wlan_cfg_ctx, 2, 2); - wlan_cfg_ctx->base_hw_macid = 1; - /*Enable checksum offload by default*/ - wlan_cfg_ctx->tcp_udp_checksumoffload = 1; + wlan_cfg_ctx->base_hw_macid = cfg_get(psoc, CFG_DP_BASE_HW_MAC_ID); - wlan_cfg_ctx->defrag_timeout_check = 1; - wlan_cfg_ctx->rx_defrag_min_timeout = WLAN_CFG_RX_DEFRAG_TIMEOUT; + wlan_cfg_ctx->lro_enabled = cfg_get(psoc, CFG_DP_LRO); + wlan_cfg_ctx->rx_hash = cfg_get(psoc, CFG_DP_RX_HASH); + wlan_cfg_ctx->tso_enabled = cfg_get(psoc, CFG_DP_TSO); + wlan_cfg_ctx->napi_enabled = cfg_get(psoc, CFG_DP_NAPI); + /*Enable checksum offload by default*/ + wlan_cfg_ctx->tcp_udp_checksumoffload = + cfg_get(psoc, CFG_DP_TCP_UDP_CKSUM_OFFLOAD); + + wlan_cfg_ctx->defrag_timeout_check = + cfg_get(psoc, CFG_DP_DEFRAG_TIMEOUT_CHECK); + wlan_cfg_ctx->rx_defrag_min_timeout = + cfg_get(psoc, CFG_DP_RX_DEFRAG_TIMEOUT); + + wlan_cfg_ctx->wbm_release_ring = cfg_get(psoc, + CFG_DP_WBM_RELEASE_RING); + wlan_cfg_ctx->tcl_cmd_ring = cfg_get(psoc, + CFG_DP_TCL_CMD_RING); + wlan_cfg_ctx->tcl_status_ring = cfg_get(psoc, + CFG_DP_TCL_STATUS_RING); + wlan_cfg_ctx->reo_reinject_ring = cfg_get(psoc, + CFG_DP_REO_REINJECT_RING); + wlan_cfg_ctx->rx_release_ring = cfg_get(psoc, + CFG_DP_RX_RELEASE_RING); + wlan_cfg_ctx->reo_exception_ring = cfg_get(psoc, + CFG_DP_REO_EXCEPTION_RING); + wlan_cfg_ctx->reo_cmd_ring = cfg_get(psoc, + CFG_DP_REO_CMD_RING); + wlan_cfg_ctx->reo_status_ring = cfg_get(psoc, + CFG_DP_REO_STATUS_RING); + + wlan_cfg_ctx->rxdma_refill_ring = cfg_get(psoc, + CFG_DP_RXDMA_REFILL_RING); + + wlan_cfg_ctx->rxdma_err_dst_ring = cfg_get(psoc, + CFG_DP_RXDMA_ERR_DST_RING); return wlan_cfg_ctx; } @@ -364,7 +298,7 @@ void wlan_cfg_soc_detach(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx) qdf_mem_free(wlan_cfg_ctx); } -struct wlan_cfg_dp_pdev_ctxt *wlan_cfg_pdev_attach(void) +struct wlan_cfg_dp_pdev_ctxt *wlan_cfg_pdev_attach(void *psoc) { struct wlan_cfg_dp_pdev_ctxt *wlan_cfg_ctx = qdf_mem_malloc(sizeof(struct wlan_cfg_dp_pdev_ctxt)); @@ -372,10 +306,16 @@ struct wlan_cfg_dp_pdev_ctxt *wlan_cfg_pdev_attach(void) if (wlan_cfg_ctx == NULL) return NULL; - wlan_cfg_ctx->rx_dma_buf_ring_size = RXDMA_BUF_RING_SIZE; - wlan_cfg_ctx->dma_mon_buf_ring_size = RXDMA_MONITOR_BUF_RING_SIZE; - wlan_cfg_ctx->dma_mon_dest_ring_size = RXDMA_MONITOR_DEST_RING_SIZE; - wlan_cfg_ctx->dma_mon_status_ring_size = RXDMA_MONITOR_STATUS_RING_SIZE; + wlan_cfg_ctx->rx_dma_buf_ring_size = cfg_get(psoc, + CFG_DP_RXDMA_BUF_RING); + wlan_cfg_ctx->dma_mon_buf_ring_size = cfg_get(psoc, + CFG_DP_RXDMA_MONITOR_BUF_RING); + wlan_cfg_ctx->dma_mon_dest_ring_size = cfg_get(psoc, + CFG_DP_RXDMA_MONITOR_DST_RING); + wlan_cfg_ctx->dma_mon_status_ring_size = cfg_get(psoc, + CFG_DP_RXDMA_MONITOR_STATUS_RING); + wlan_cfg_ctx->rxdma_monitor_desc_ring = cfg_get(psoc, + CFG_DP_RXDMA_MONITOR_DESC_RING); wlan_cfg_ctx->num_mac_rings = NUM_RXDMA_RINGS_PER_PDEV; return wlan_cfg_ctx; @@ -652,6 +592,12 @@ int wlan_cfg_get_dma_mon_stat_ring_size(struct wlan_cfg_dp_pdev_ctxt *cfg) return cfg->dma_mon_status_ring_size; } +int +wlan_cfg_get_dma_mon_desc_ring_size(struct wlan_cfg_dp_pdev_ctxt *cfg) +{ + return cfg->rxdma_monitor_desc_ring; +} + int wlan_cfg_get_rx_dma_buf_ring_size(struct wlan_cfg_dp_pdev_ctxt *cfg) { return cfg->rx_dma_buf_ring_size; @@ -696,7 +642,7 @@ void wlan_cfg_set_dp_soc_nss_cfg(struct wlan_cfg_dp_soc_ctxt *cfg, int nss_cfg) { cfg->nss_cfg = nss_cfg; if (cfg->nss_cfg) - cfg->tx_comp_ring_size = NSS_TX_COMP_RING_SIZE; + cfg->tx_comp_ring_size = cfg->tx_comp_ring_size_nss; } int wlan_cfg_get_int_batch_threshold_tx(struct wlan_cfg_dp_soc_ctxt *cfg) @@ -744,6 +690,66 @@ int wlan_cfg_get_defrag_timeout_check(struct wlan_cfg_dp_soc_ctxt *cfg) return cfg->defrag_timeout_check; } +int +wlan_cfg_get_dp_soc_wbm_release_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->wbm_release_ring; +} + +int +wlan_cfg_get_dp_soc_tcl_cmd_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->tcl_cmd_ring; +} + +int +wlan_cfg_get_dp_soc_tcl_status_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->tcl_status_ring; +} + +int +wlan_cfg_get_dp_soc_reo_reinject_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->reo_reinject_ring; +} + +int +wlan_cfg_get_dp_soc_rx_release_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->rx_release_ring; +} + +int +wlan_cfg_get_dp_soc_reo_exception_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->reo_exception_ring; +} + +int +wlan_cfg_get_dp_soc_reo_cmd_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->reo_cmd_ring; +} + +int +wlan_cfg_get_dp_soc_reo_status_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->reo_status_ring; +} + +int +wlan_cfg_get_dp_soc_rxdma_refill_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->rxdma_refill_ring; +} + +int +wlan_cfg_get_dp_soc_rxdma_err_dst_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->rxdma_err_dst_ring; +} + #ifdef QCA_LL_TX_FLOW_CONTROL_V2 /** * wlan_cfg_get_tx_flow_stop_queue_th() - Get flow control stop threshold diff --git a/wlan_cfg/wlan_cfg.h b/wlan_cfg/wlan_cfg.h index 8127f597c03e..5f9e24d60e5f 100644 --- a/wlan_cfg/wlan_cfg.h +++ b/wlan_cfg/wlan_cfg.h @@ -116,6 +116,17 @@ struct wlan_cfg_dp_pdev_ctxt; * @napi_enabled - enable/disable interrupt mode for reaping tx and rx packets * @tcp_Udp_Checksumoffload - enable/disable checksum offload * @nss_cfg - nss configuration + * @rx_defrag_min_timeout - rx defrag minimum timeout + * @wbm_release_ring - wbm release ring size + * @tcl_cmd_ring - tcl cmd ring size + * @tcl_status_ring - tcl status ring size + * @reo_reinject_ring - reo reinject ring + * @rx_release_ring - rx release ring size + * @reo_exception_ring - reo exception ring size + * @reo_cmd_ring - reo cmd ring size + * @reo_status_ring - reo status ting size + * @rxdma_refill_ring - rxdma refill ring size + * @rxdma_err_dst_ring - rxdma error detination ring size */ struct wlan_cfg_dp_soc_ctxt { int num_int_ctxts; @@ -140,6 +151,7 @@ struct wlan_cfg_dp_soc_ctxt { int int_timer_threshold_other; int tx_ring_size; int tx_comp_ring_size; + int tx_comp_ring_size_nss; int int_tx_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS]; int int_rx_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS]; int int_rx_mon_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS]; @@ -162,12 +174,24 @@ struct wlan_cfg_dp_soc_ctxt { uint32_t tx_flow_stop_queue_threshold; uint32_t tx_flow_start_queue_offset; #endif - uint32_t rx_defrag_min_timeout; + int rx_defrag_min_timeout; int reo_dst_ring_size; + int wbm_release_ring; + int tcl_cmd_ring; + int tcl_status_ring; + int reo_reinject_ring; + int rx_release_ring; + int reo_exception_ring; + int reo_cmd_ring; + int reo_status_ring; + + int rxdma_refill_ring; + int rxdma_err_dst_ring; }; /** * wlan_cfg_soc_attach() - Attach configuration interface for SoC + * @ctrl_obj - PSOC object * * Allocates context for Soc configuration parameters, * Read configuration information from device tree/ini file and @@ -175,7 +199,7 @@ struct wlan_cfg_dp_soc_ctxt { * * Return: Handle to configuration context */ -struct wlan_cfg_dp_soc_ctxt *wlan_cfg_soc_attach(void); +struct wlan_cfg_dp_soc_ctxt *wlan_cfg_soc_attach(void *ctrl_obj); /** * wlan_cfg_soc_detach() - Detach soc configuration handle @@ -189,6 +213,7 @@ void wlan_cfg_soc_detach(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx); /** * wlan_cfg_pdev_attach() Attach configuration interface for pdev + * @ctrl_obj - PSOC object * * Allocates context for pdev configuration parameters, * Read configuration information from device tree/ini file and @@ -196,7 +221,7 @@ void wlan_cfg_soc_detach(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx); * * Return: Handle to configuration context */ -struct wlan_cfg_dp_pdev_ctxt *wlan_cfg_pdev_attach(void); +struct wlan_cfg_dp_pdev_ctxt *wlan_cfg_pdev_attach(void *ctrl_obj); /** * wlan_cfg_pdev_detach() Detach and free pdev configuration handle @@ -580,6 +605,15 @@ int wlan_cfg_get_dma_mon_dest_ring_size( int wlan_cfg_get_dma_mon_stat_ring_size( struct wlan_cfg_dp_pdev_ctxt *wlan_cfg_pdev_ctx); +/* + * wlan_cfg_get_dma_mon_desc_ring_size - Get rxdma monitor size + * @wlan_cfg_soc_ctx + * + * Return: rxdma monitor desc ring size + */ +int +wlan_cfg_get_dma_mon_desc_ring_size(struct wlan_cfg_dp_pdev_ctxt *cfg); + /* * wlan_cfg_get_rx_dma_buf_ring_size() - Return Size of RxDMA buffer ring * @wlan_cfg_pdev_ctx @@ -721,6 +755,97 @@ int wlan_cfg_tx_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg); * Return: Tx Completion ring size */ int wlan_cfg_tx_comp_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg); + +/* + * wlan_cfg_get_dp_soc_wbm_release_ring_size - Get wbm_release_ring size + * @wlan_cfg_soc_ctx + * + * Return: wbm_release_ring size + */ +int +wlan_cfg_get_dp_soc_wbm_release_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg); + +/* + * wlan_cfg_get_dp_soc_tcl_cmd_ring_size - Get tcl_cmd_ring size + * @wlan_cfg_soc_ctx + * + * Return: tcl_cmd_ring size + */ +int +wlan_cfg_get_dp_soc_tcl_cmd_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg); + +/* + * wlan_cfg_get_dp_soc_tcl_status_ring_size - Get tcl_status_ring size + * @wlan_cfg_soc_ctx + * + * Return: tcl_status_ring size + */ +int +wlan_cfg_get_dp_soc_tcl_status_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg); + +/* + * wlan_cfg_get_dp_soc_reo_reinject_ring_size - Get reo_reinject_ring size + * @wlan_cfg_soc_ctx + * + * Return: reo_reinject_ring size + */ +int +wlan_cfg_get_dp_soc_reo_reinject_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg); + +/* + * wlan_cfg_get_dp_soc_rx_release_ring_size - Get rx_release_ring size + * @wlan_cfg_soc_ctx + * + * Return: rx_release_ring size + */ +int +wlan_cfg_get_dp_soc_rx_release_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg); + +/* + * wlan_cfg_get_dp_soc_reo_exception_ring_size - Get reo_exception_ring size + * @wlan_cfg_soc_ctx + * + * Return: reo_exception_ring size + */ +int +wlan_cfg_get_dp_soc_reo_exception_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg); + +/* + * wlan_cfg_get_dp_soc_reo_cmd_ring_size - Get reo_cmd_ring size + * @wlan_cfg_soc_ctx + * + * Return: reo_cmd_ring size + */ +int +wlan_cfg_get_dp_soc_reo_cmd_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg); + +/* + * wlan_cfg_get_dp_soc_reo_status_ring_size - Get reo_status_ring size + * @wlan_cfg_soc_ctx + * + * Return: reo_status_ring size + */ +int +wlan_cfg_get_dp_soc_reo_status_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg); + +/* + * wlan_cfg_get_dp_soc_rxdma_refill_ring_size - Get rxdma refill ring size + * @wlan_cfg_soc_ctx + * + * Return: rxdma refill ring size + */ +int +wlan_cfg_get_dp_soc_rxdma_refill_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg); + +/* + * wlan_cfg_get_dp_soc_rxdma_err_dst_ring_size - Get rxdma dst ring size + * @wlan_cfg_soc_ctx + * + * Return: rxdma error dst ring size + */ +int +wlan_cfg_get_dp_soc_rxdma_err_dst_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg); + #ifdef QCA_LL_TX_FLOW_CONTROL_V2 int wlan_cfg_get_tx_flow_stop_queue_th(struct wlan_cfg_dp_soc_ctxt *cfg);