diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index bebed5a86c..7820a8f844 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -26,6 +26,8 @@ #include "dp_htt.h" #include "dp_types.h" #include "dp_internal.h" +#include "dp_tx.h" +#include "wlan_cfg.h" /** * dp_setup_srng - Internal function to setup SRNG rings used by data path @@ -172,43 +174,6 @@ fail0: return NULL; } -/* Temporary definitions to be moved to wlan_cfg */ -static inline uint32_t wlan_cfg_get_max_clients(void *wlan_cfg_ctx) -{ - return 512; -} - -static inline uint32_t wlan_cfg_max_alloc_size(void *wlan_cfg_ctx) -{ - /* Change this to a lower value to enforce scattered idle list mode */ - return 32 << 20; -} - -static inline int wlan_cfg_per_pdev_tx_ring(void *wlan_cfg_ctx) -{ - return 1; -} - -static inline int wlan_cfg_num_tcl_data_rings(void *wlan_cfg_ctx) -{ - return 1; -} - -static inline int wlan_cfg_per_pdev_rx_ring(void *wlan_cfg_ctx) -{ - return 1; -} - -static inline int wlan_cfg_num_reo_dest_rings(void *wlan_cfg_ctx) -{ - return 4; -} - -static inline int wlan_cfg_pkt_type(void *wlan_cfg_ctx) -{ - return htt_pkt_type_ethernet; -} - #define AVG_MAX_MPDUS_PER_TID 128 #define AVG_TIDS_PER_CLIENT 2 #define AVG_FLOWS_PER_TID 2 @@ -546,6 +511,14 @@ static int dp_soc_cmn_setup(struct dp_soc *soc) if (soc->cmn_init_done) return 0; + soc->wlan_cfg_ctx = wlan_cfg_soc_attach(); + + if (!soc->wlan_cfg_ctx) { + QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR, + "%s: wlan_cfg_soc_attach failed\n", __func__); + goto fail0; + } + if (dp_peer_find_attach(soc)) goto fail0; @@ -624,9 +597,6 @@ static int dp_soc_cmn_setup(struct dp_soc *soc) soc->num_reo_dest_rings = wlan_cfg_num_reo_dest_rings(soc->wlan_cfg_ctx); for (i = 0; i < soc->num_reo_dest_rings; i++) { - /* TODO: Get number of rings and ring sizes from - * wlan_cfg - */ if (dp_srng_setup(soc, &soc->reo_dest_ring[i], REO_DST, i, 0, REO_DST_RING_SIZE)) { QDF_TRACE(QDF_MODULE_ID_TXRX, @@ -729,6 +699,14 @@ void *dp_pdev_attach_wifi3(void *txrx_soc, void *ctrl_pdev, goto fail0; } + pdev->wlan_cfg_ctx = wlan_cfg_pdev_attach(); + + if (!pdev->wlan_cfg_ctx) { + QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR, + "%s: pdev cfg_attach failed\n", __func__); + goto fail0; + } + pdev->soc = soc; pdev->osif_pdev = ctrl_pdev; pdev->pdev_id = pdev_id; @@ -844,6 +822,8 @@ static void dp_pdev_detach_wifi3(void *txrx_pdev, int force) struct dp_pdev *pdev = (struct dp_pdev *)txrx_pdev; struct dp_soc *soc = pdev->soc; + dp_tx_pdev_detach(pdev); + if (wlan_cfg_per_pdev_tx_ring(soc->wlan_cfg_ctx)) { dp_srng_cleanup(soc, &soc->tcl_data_ring[pdev->pdev_id], TCL_DATA, pdev->pdev_id); @@ -904,6 +884,8 @@ void dp_soc_detach_wifi3(void *txrx_soc) /* Tx data rings */ if (!wlan_cfg_per_pdev_tx_ring(soc->wlan_cfg_ctx)) { + dp_tx_soc_detach(soc); + for (i = 0; i < soc->num_tcl_data_rings; i++) { dp_srng_cleanup(soc, &soc->tcl_data_ring[i], TCL_DATA, i); @@ -1008,6 +990,7 @@ void *dp_vdev_attach_wifi3(void *txrx_pdev, vdev->pdev = pdev; vdev->vdev_id = vdev_id; vdev->opmode = op_mode; + vdev->osdev = soc->osdev; vdev->osif_rx = NULL; vdev->osif_rx_mon = NULL; diff --git a/dp/wifi3.0/dp_types.h b/dp/wifi3.0/dp_types.h index 480cc87bd0..957af65e68 100644 --- a/dp/wifi3.0/dp_types.h +++ b/dp/wifi3.0/dp_types.h @@ -268,7 +268,7 @@ struct dp_soc { qdf_device_t osdev; /* WLAN config context */ - void *wlan_cfg_ctx; + struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx; /* HTT handle for host-fw interaction */ void *htt_handle; @@ -303,7 +303,6 @@ struct dp_soc { void *wbm_idle_scatter_buf_base_vaddr[MAX_IDLE_SCATTER_BUFS]; uint32_t wbm_idle_scatter_buf_size; - /* Tx SW descriptor pool */ /* Tx SW descriptor pool */ struct dp_tx_desc_pool_s tx_desc[MAX_TXDESC_POOLS]; diff --git a/wlan_cfg/wlan_cfg.c b/wlan_cfg/wlan_cfg.c new file mode 100644 index 0000000000..b253ea3282 --- /dev/null +++ b/wlan_cfg/wlan_cfg.c @@ -0,0 +1,351 @@ +/* + * Copyright (c) 2016 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. + */ + +#if defined(CONFIG_HL_SUPPORT) +#include "wlan_tgt_def_config_hl.h" +#else +#include "wlan_tgt_def_config.h" +#endif + +#include "qdf_trace.h" +#include "qdf_mem.h" +#include "wlan_cfg.h" + +/* + * FIX THIS - + * For now, all these configuration parameters are hardcoded. + * Many of these should actually be coming from dts file/ini file + */ +#define WLAN_CFG_INT_NUM_CONTEXTS 4 +#define RXDMA_BUF_RING_SIZE 8192 +#define RXDMA_MONITOR_BUF_RING_SIZE 8192 +#define RXDMA_MONITOR_DEST_RING_SIZE 8192 +#define RXDMA_MONITOR_STATUS_RING_SIZE 2048 + +#define WLAN_CFG_TX_RING_MASK_0 0x1 +#define WLAN_CFG_TX_RING_MASK_1 0x2 +#define WLAN_CFG_TX_RING_MASK_2 0x4 +#define WLAN_CFG_TX_RING_MASK_3 0x0 + +#define WLAN_CFG_RX_RING_MASK_0 0x1 +#define WLAN_CFG_RX_RING_MASK_1 0x2 +#define WLAN_CFG_RX_RING_MASK_2 0x4 +#define WLAN_CFG_RX_RING_MASK_3 0x8 + +#define WLAN_CFG_RX_MON_RING_MASK_0 0x1 +#define WLAN_CFG_RX_MON_RING_MASK_1 0x2 +#define WLAN_CFG_RX_MON_RING_MASK_2 0x4 +#define WLAN_CFG_RX_MON_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 (32 << 20) + +# define WLAN_CFG_MAX_CLIENTS 32 + +#define WLAN_CFG_PER_PDEV_TX_RING 16 +#define WLAN_CFG_NUM_TCL_DATA_RINGS 16 +#define WLAN_CFG_PER_PDEV_RX_RING 16 +#define WLAN_CFG_NUM_REO_DEST_RING 16 + +#define WLAN_CFG_NUM_TX_DESC 8192 +#define WLAN_CFG_NUM_TX_EXT_DESC 8192 +#define WLAN_CFG_NUM_TX_DESC_POOL 16 +#define WLAN_CFG_NUM_TXEXT_DESC_POOL 16 +#define WLAN_CFG_HTT_PKT_TYPE 2 +#define WLAN_CFG_MAX_PEER_ID 16 + +static const int tx_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = { + WLAN_CFG_TX_RING_MASK_0, + WLAN_CFG_TX_RING_MASK_1, + WLAN_CFG_TX_RING_MASK_2, + WLAN_CFG_TX_RING_MASK_3}; + +static const int rx_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = { + WLAN_CFG_RX_RING_MASK_0, + WLAN_CFG_RX_RING_MASK_1, + WLAN_CFG_RX_RING_MASK_2, + WLAN_CFG_RX_RING_MASK_3}; + +static const int rx_mon_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS] = { + WLAN_CFG_RX_MON_RING_MASK_0, + WLAN_CFG_RX_MON_RING_MASK_1, + WLAN_CFG_RX_MON_RING_MASK_2, + WLAN_CFG_RX_MON_RING_MASK_3}; + +/** + * struct wlan_cfg_dp_soc_ctxt - Configuration parameters for SoC (core TxRx) + * @num_int_ctxts - Number of NAPI/Interrupt contexts to be registered for DP + * @max_clients - Maximum number of peers/stations supported by device + * @max_alloc_size - Maximum allocation size for any dynamic memory + * allocation request for this device + * @per_pdev_tx_ring - 0 - TCL ring is not mapped per radio + * 1 - Each TCL ring is mapped to one radio/pdev + * @num_tcl_data_rings - Number of TCL Data rings supported by device + * @per_pdev_rx_ring - 0 - REO ring is not mapped per radio + * 1 - Each REO ring is mapped to one radio/pdev + * @num_tx_desc_pool - Number of Tx Descriptor pools + * @num_tx_ext_desc_pool - Number of Tx MSDU extension Descriptor pools + * @num_tx_desc - Number of Tx Descriptors per pool + * @num_tx_ext_desc - Number of Tx MSDU extension Descriptors per pool + * @max_peer_id - Maximum value of peer id that FW can assign for a client + * @htt_packet_type - Default 802.11 encapsulation type for any VAP created + * @int_tx_ring_mask - Bitmap of Tx interrupts mapped to each NAPI/Intr context + * @int_rx_ring_mask - Bitmap of Rx interrupts mapped to each NAPI/Intr context + * @int_rx_mon_ring_mask - Bitmap of Rx monitor ring interrupts mapped to each + * NAPI/Intr context + * @int_ce_ring_mask - Bitmap of CE interrupts mapped to each NAPI/Intr context + * + */ +struct wlan_cfg_dp_soc_ctxt { + int num_int_ctxts; + int max_clients; + int max_alloc_size; + int per_pdev_tx_ring; + int num_tcl_data_rings; + int per_pdev_rx_ring; + int num_reo_dest_rings; + int num_tx_desc_pool; + int num_tx_ext_desc_pool; + int num_tx_desc; + int num_tx_ext_desc; + int max_peer_id; + int htt_packet_type; + 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]; + int int_ce_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS]; +}; + +/** + * struct wlan_cfg_dp_pdev_ctxt - Configuration parameters for pdev (radio) + * @rx_dma_buf_ring_size - Size of RxDMA buffer ring + * @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 + */ +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; +}; + +/** + * wlan_cfg_soc_attach() - Allocate and prepare SoC configuration + * + * Return: wlan_cfg_ctx - Handle to Configuration context + */ +struct wlan_cfg_dp_soc_ctxt *wlan_cfg_soc_attach(void) +{ + int i = 0; + struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx = + qdf_mem_malloc(sizeof(struct wlan_cfg_dp_soc_ctxt)); + + if (wlan_cfg_ctx == NULL) + 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->num_reo_dest_rings = WLAN_CFG_NUM_REO_DEST_RING; + wlan_cfg_ctx->num_tx_desc_pool = WLAN_CFG_NUM_TX_DESC_POOL; + 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->max_peer_id = WLAN_CFG_MAX_PEER_ID; + wlan_cfg_ctx->htt_packet_type = WLAN_CFG_HTT_PKT_TYPE; + + for (i = 0; i < WLAN_CFG_INT_NUM_CONTEXTS; i++) { + wlan_cfg_ctx->int_tx_ring_mask[i] = tx_ring_mask[i]; + wlan_cfg_ctx->int_rx_ring_mask[i] = rx_ring_mask[i]; + wlan_cfg_ctx->int_rx_mon_ring_mask[i] = rx_mon_ring_mask[i]; + } + + return wlan_cfg_ctx; +} + +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_ctx = + qdf_mem_malloc(sizeof(struct wlan_cfg_dp_pdev_ctxt)); + + 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; + + return wlan_cfg_ctx; +} + +void wlan_cfg_pdev_detach(struct wlan_cfg_dp_pdev_ctxt *wlan_cfg_ctx) +{ + qdf_mem_free(wlan_cfg_ctx); +} + +void wlan_cfg_set_num_contexts(struct wlan_cfg_dp_soc_ctxt *cfg, int num) +{ + cfg->num_int_ctxts = num; +} + +void wlan_cfg_set_tx_ring_mask(struct wlan_cfg_dp_soc_ctxt *cfg, + int context, int mask) +{ + cfg->int_tx_ring_mask[context] = mask; +} + +void wlan_cfg_set_rx_ring_mask(struct wlan_cfg_dp_soc_ctxt *cfg, + int context, int mask) +{ + cfg->int_rx_ring_mask[context] = mask; +} + +void wlan_cfg_set_rx_mon_ring_mask(struct wlan_cfg_dp_soc_ctxt *cfg, + int context, int mask) +{ + cfg->int_rx_mon_ring_mask[context] = mask; +} + +void wlan_cfg_set_ce_ring_mask(struct wlan_cfg_dp_soc_ctxt *cfg, + int context, int mask) +{ + cfg->int_ce_ring_mask[context] = mask; +} + +void wlan_cfg_set_rxbuf_ring_mask(struct wlan_cfg_dp_soc_ctxt *cfg, int context, + int mask) +{ + cfg->int_rx_ring_mask[context] = mask; +} + +int wlan_cfg_get_num_contexts(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->num_int_ctxts; +} + +int wlan_cfg_get_tx_ring_mask(struct wlan_cfg_dp_soc_ctxt *cfg, int context) +{ + return cfg->int_tx_ring_mask[context]; +} + +int wlan_cfg_get_rx_ring_mask(struct wlan_cfg_dp_soc_ctxt *cfg, int context) +{ + return cfg->int_rx_ring_mask[context]; +} + +int wlan_cfg_get_rx_mon_ring_mask(struct wlan_cfg_dp_soc_ctxt *cfg, int context) +{ + return cfg->int_rx_mon_ring_mask[context]; +} + +int wlan_cfg_get_ce_ring_mask(struct wlan_cfg_dp_soc_ctxt *cfg, int context) +{ + return cfg->int_ce_ring_mask[context]; +} + +uint32_t wlan_cfg_get_max_clients(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->max_clients; +} + +uint32_t wlan_cfg_max_alloc_size(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->max_alloc_size; +} + +int wlan_cfg_per_pdev_tx_ring(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->per_pdev_tx_ring; +} + +int wlan_cfg_num_tcl_data_rings(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->num_tcl_data_rings; +} + +int wlan_cfg_per_pdev_rx_ring(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->per_pdev_rx_ring; +} + +int wlan_cfg_num_reo_dest_rings(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->num_reo_dest_rings; +} + +int wlan_cfg_pkt_type(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->htt_packet_type; /*htt_pkt_type_ethernet*/ +} + +int wlan_cfg_get_num_tx_desc_pool(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->num_tx_desc_pool; +} + +int wlan_cfg_get_num_tx_ext_desc_pool(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->num_tx_ext_desc_pool; +} + +int wlan_cfg_get_num_tx_desc(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->num_tx_desc; +} + +int wlan_cfg_get_num_tx_ext_desc(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->num_tx_ext_desc; +} + +uint32_t wlan_cfg_max_peer_id(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + /* TODO: This should be calculated based on target capabilities */ + return cfg->max_peer_id; +} + +int wlan_cfg_get_dma_mon_buf_ring_size(struct wlan_cfg_dp_pdev_ctxt *cfg) +{ + return cfg->dma_mon_buf_ring_size; +} + +int wlan_cfg_get_dma_mon_dest_ring_size(struct wlan_cfg_dp_pdev_ctxt *cfg) +{ + return cfg->dma_mon_dest_ring_size; +} + +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_rx_dma_buf_ring_size(struct wlan_cfg_dp_pdev_ctxt *cfg) +{ + return cfg->rx_dma_buf_ring_size; +} diff --git a/wlan_cfg/wlan_cfg.h b/wlan_cfg/wlan_cfg.h new file mode 100644 index 0000000000..de5d89cb54 --- /dev/null +++ b/wlan_cfg/wlan_cfg.h @@ -0,0 +1,260 @@ +/* + * Copyright (c) 2013-2016 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. + */ + +#ifndef __WLAN_CFG_H +#define __WLAN_CFG_H + +struct wlan_cfg_dp_pdev_ctxt; +struct wlan_cfg_dp_soc_ctxt; + +/** + * wlan_cfg_soc_attach() - Attach configuration interface for SoC + * + * Allocates context for Soc configuration parameters, + * Read configuration information from device tree/ini file and + * returns back handle + * + * Return: Handle to configuration context + */ +struct wlan_cfg_dp_soc_ctxt *wlan_cfg_soc_attach(void); + +/** + * wlan_cfg_soc_detach() - Detach soc configuration handle + * @wlan_cfg_ctx: soc configuration handle + * + * De-allocates memory allocated for SoC configuration + * + * Return:none + */ +void wlan_cfg_soc_detach(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx); + +/** + * wlan_cfg_pdev_attach() Attach configuration interface for pdev + * + * Allocates context for pdev configuration parameters, + * Read configuration information from device tree/ini file and + * returns back handle + * + * Return: Handle to configuration context + */ +struct wlan_cfg_dp_pdev_ctxt *wlan_cfg_pdev_attach(void); + +/** + * wlan_cfg_pdev_detach() Detach and free pdev configuration handle + * @wlan_cfg_pdev_ctx - PDEV Configuration Handle + * + * Return: void + */ +void wlan_cfg_pdev_detach(struct wlan_cfg_dp_pdev_ctxt *wlan_cfg_pdev_ctx); + +/** + * wlan_cfg_get_num_contexts() Number of interrupt contexts to be registered + * @wlan_cfg_ctx - Configuration Handle + * + * For WIN, DP_NUM_INTERRUPT_CONTEXTS will be equal to number of CPU cores. + * Each context (for linux it is a NAPI context) will have a tx_ring_mask, + * rx_ring_mask ,and rx_monitor_ring mask to indicate the rings + * that are processed by the handler. + * + * Return: num_contexts + */ +int wlan_cfg_get_num_contexts(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx); + +/** + * wlan_cfg_get_intr_tx_ring_mask() - Return Tx interrupt mask mapped to an + * interrupt context + * @wlan_cfg_ctx - Configuration Handle + * @context - Numerical ID identifying the Interrupt/NAPI context + * + * Return: int_tx_ring_mask[context] + */ +int wlan_cfg_get_tx_ring_mask(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx, + int context); + +/** + * wlan_cfg_get_intr_rx_ring_mask() - Return Rx interrupt mask mapped to an + * interrupt context + * @wlan_cfg_ctx - Configuration Handle + * @context - Numerical ID identifying the Interrupt/NAPI context + * + * Return: int_rx_ring_mask[context] + */ +int wlan_cfg_get_rx_ring_mask(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx, + int context); + +/** + * wlan_cfg_get_intr_rx_mon_ring_mask() - Return Rx monitor ring interrupt mask + * mapped to an interrupt context + * @wlan_cfg_ctx - Configuration Handle + * @context - Numerical ID identifying the Interrupt/NAPI context + * + * Return: int_rx_mon_ring_mask[context] + */ +int wlan_cfg_get_rx_mon_ring_mask(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx, + int context); + +/** + * wlan_cfg_get_intr_ce_ring_mask() - Return CE ring interrupt mask + * mapped to an interrupt context + * @wlan_cfg_ctx - Configuration Handle + * @context - Numerical ID identifying the Interrupt/NAPI context + * + * Return: int_ce_ring_mask[context] + */ +int wlan_cfg_get_ce_ring_mask(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx, + int context); + +/** + * wlan_cfg_get_num_tx_pools() - Return Number of Tx Descriptor pools for SoC + * @wlan_cfg_ctx - Configuration Handle + * + * Return: num_tx_pools + */ +int wlan_cfg_get_num_tx_pools(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx); + +/** + * wlan_cfg_get_max_clients() Return maximum number of peers/stations supported + * by device + * @wlan_cfg_ctx - Configuration Handle + * + * Return: max_clients + */ +uint32_t wlan_cfg_get_max_clients(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx); + +/** + * wlan_cfg_max_alloc_size() Return Maximum allocation size for any dynamic + * memory allocation request for this device + * @wlan_cfg_ctx - Configuration Handle + * + * Return: max_alloc_size + */ +uint32_t wlan_cfg_max_alloc_size(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx); + +/* + * wlan_cfg_per_pdev_tx_ring() Return true if Tx rings are mapped as + * one per radio + * @wlan_cfg_ctx - Configuration Handle + * + * Return: per_pdev_tx_ring + */ +int wlan_cfg_per_pdev_tx_ring(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx); + +/* + * wlan_cfg_num_tcl_data_rings() Number of TCL Data rings supported by device + * @wlan_cfg_ctx + * + * Return: num_tcl_data_rings + */ +int wlan_cfg_num_tcl_data_rings(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx); + +/* + * wlan_cfg_per_pdev_rx_ring() Return true if Rx rings are mapped as + * one per radio + * @wlan_cfg_ctx + * + * Return: per_pdev_rx_ring + */ +int wlan_cfg_per_pdev_rx_ring(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx); + +/* + * wlan_cfg_num_reo_dest_rings() Number of REO Data rings supported by device + * @wlan_cfg_ctx - Configuration Handle + * + * Return: num_reo_dest_rings + */ +int wlan_cfg_num_reo_dest_rings(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx); + +/* + * wlan_cfg_pkt_type() Default 802.11 encapsulation type + * @wlan_cfg_ctx - Configuration Handle + * + * Return: htt_pkt_type_ethernet + */ +int wlan_cfg_pkt_type(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx); + +/* + * wlan_cfg_get_num_tx_desc_pool() Number of Tx Descriptor pools for the device + * @wlan_cfg_ctx - Configuration Handle + * + * Return: num_tx_desc_pool + */ +int wlan_cfg_get_num_tx_desc_pool(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx); + +/* + * wlan_cfg_get_num_tx_ext_desc_pool Number of Tx MSDU ext Descriptor pools + * @wlan_cfg_ctx - Configuration Handle + * + * Return: num_tx_ext_desc_pool + */ +int wlan_cfg_get_num_tx_ext_desc_pool( + struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx); + +/* + * wlan_cfg_get_num_tx_desc Number of Tx Descriptors per pool + * @wlan_cfg_ctx - Configuration Handle + * + * Return: num_tx_desc + */ +int wlan_cfg_get_num_tx_desc(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx); + +/* + * wlan_cfg_get_num_tx_ext_desc Number of Tx MSDU extension Descriptors per pool + * @wlan_cfg_ctx - Configuration Handle + * + * Return: num_tx_ext_desc + */ +int wlan_cfg_get_num_tx_ext_desc(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx); + +/* + * wlan_cfg_get_dma_mon_buf_ring_size() - Return Size of monitor buffer ring + * @wlan_cfg_pdev_ctx + * + * Return: dma_mon_buf_ring_size + */ +int wlan_cfg_get_dma_mon_buf_ring_size( + struct wlan_cfg_dp_pdev_ctxt *wlan_cfg_pdev_ctx); + +/* + * wlan_cfg_get_dma_mon_dest_ring_size() - Return Size of RxDMA Monitor + * Destination ring + * @wlan_cfg_pdev_ctx + * + * Return: dma_mon_dest_size + */ +int wlan_cfg_get_dma_mon_dest_ring_size( + struct wlan_cfg_dp_pdev_ctxt *wlan_cfg_pdev_ctx); + +/* + * wlan_cfg_get_dma_mon_stat_ring_size - Return size of Monitor Status ring + * @wlan_cfg_pdev_ctx + * + * Return: dma_mon_stat_ring_size + */ +int wlan_cfg_get_dma_mon_stat_ring_size( + struct wlan_cfg_dp_pdev_ctxt *wlan_cfg_pdev_ctx); + +/* + * wlan_cfg_get_rx_dma_buf_ring_size - Return Size of RxDMA buffer ring + * @wlan_cfg_pdev_ctx + * + * Return: rx_dma_buf_ring_size + */ +int wlan_cfg_get_rx_dma_buf_ring_size( + struct wlan_cfg_dp_pdev_ctxt *wlan_cfg_pdev_ctx); + +#endif