فهرست منبع

qcacmn: Add configuration interace for Lithium Datapath

Add a generic framework (wlan_cfg) for all configuration parameters
(eg.number of tx/rx rings) used by DP. Define all the parameters
as macro constants. We will later enhance wlan_cfg framework to
read these parameters from device tree file or ini file and populate
in DP config structures.

CRs-Fixed: 1073253
Change-Id: I7e4ddadb64006d17399acb68f92cf17fe23a98e2
Vijay Pamidipati 8 سال پیش
والد
کامیت
d41d6d6a49
4فایلهای تغییر یافته به همراه635 افزوده شده و 42 حذف شده
  1. 23 40
      dp/wifi3.0/dp_main.c
  2. 1 2
      dp/wifi3.0/dp_types.h
  3. 351 0
      wlan_cfg/wlan_cfg.c
  4. 260 0
      wlan_cfg/wlan_cfg.h

+ 23 - 40
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;

+ 1 - 2
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];
 

+ 351 - 0
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;
+}

+ 260 - 0
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