qcacmn: Use txrx_intr_attach function to attach to poll and interrupt

Use appropriate reo dst ring size based on target type

Change-Id: I6e26537d25b4b8d4507acc689b9d17c83aa4d27e
This commit is contained in:
Balamurugan Mahalingam
2018-06-25 17:08:08 +05:30
committed by nshrivas
parent 1b4476e7b6
commit 54d16a9371
4 changed files with 73 additions and 16 deletions

View File

@@ -21,6 +21,7 @@
#include <qdf_net_types.h>
#include <qdf_lro.h>
#include <qdf_module.h>
#include <hal_hw_headers.h>
#include <hal_api.h>
#include <hif.h>
#include <htt.h>
@@ -1044,7 +1045,7 @@ static void dp_interrupt_timer(void *arg)
*
* Return: 0 for success. nonzero for failure.
*/
static QDF_STATUS dp_soc_interrupt_attach_poll(void *txrx_soc)
static QDF_STATUS dp_soc_attach_poll(void *txrx_soc)
{
struct dp_soc *soc = (struct dp_soc *)txrx_soc;
int i;
@@ -1077,10 +1078,16 @@ static QDF_STATUS dp_soc_interrupt_attach_poll(void *txrx_soc)
return QDF_STATUS_SUCCESS;
}
#else
static QDF_STATUS dp_soc_attach_poll(void *txrx_soc)
{
return -QDF_STATUS_E_NOSUPPORT;
}
#endif
static QDF_STATUS dp_soc_interrupt_attach(void *txrx_soc);
#if defined(CONFIG_MCL)
extern int con_mode_monitor;
static QDF_STATUS dp_soc_interrupt_attach(void *txrx_soc);
/*
* dp_soc_interrupt_attach_wrapper() - Register handlers for DP interrupts
* @txrx_soc: DP SOC handle
@@ -1098,7 +1105,7 @@ static QDF_STATUS dp_soc_interrupt_attach_wrapper(void *txrx_soc)
con_mode_monitor == QDF_GLOBAL_MONITOR_MODE) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO,
"%s: Poll mode", __func__);
return dp_soc_interrupt_attach_poll(txrx_soc);
return dp_soc_attach_poll(txrx_soc);
} else {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO,
@@ -1109,10 +1116,14 @@ static QDF_STATUS dp_soc_interrupt_attach_wrapper(void *txrx_soc)
#else
static QDF_STATUS dp_soc_interrupt_attach_wrapper(void *txrx_soc)
{
return dp_soc_interrupt_attach_poll(txrx_soc);
struct dp_soc *soc = (struct dp_soc *)txrx_soc;
if (hif_is_polled_mode_enabled(soc->hif_handle))
return dp_soc_attach_poll(txrx_soc);
else
return dp_soc_interrupt_attach(txrx_soc);
}
#endif
#endif
static void dp_soc_interrupt_map_calculate_integrated(struct dp_soc *soc,
int intr_ctx_num, int *irq_id_map, int *num_irq_r)
@@ -1669,11 +1680,8 @@ static void dp_hw_link_desc_pool_cleanup(struct dp_soc *soc)
#define WBM_RELEASE_RING_SIZE 64
#define TCL_CMD_RING_SIZE 32
#define TCL_STATUS_RING_SIZE 32
#if defined(QCA_WIFI_QCA6290)
#define REO_DST_RING_SIZE 1024
#else
#define REO_DST_RING_SIZE 2048
#endif
#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
@@ -2074,6 +2082,7 @@ static int dp_soc_cmn_setup(struct dp_soc *soc)
struct hal_reo_params reo_params;
int tx_ring_size;
int tx_comp_ring_size;
int reo_dst_ring_size;
if (qdf_atomic_read(&soc->cmn_init_done))
return 0;
@@ -2146,6 +2155,7 @@ static int dp_soc_cmn_setup(struct dp_soc *soc)
goto fail1;
}
reo_dst_ring_size = wlan_cfg_get_reo_dst_ring_size(soc->wlan_cfg_ctx);
/* TBD: call dp_tx_init to setup Tx SW descriptors and MSDU extension
* descriptors
@@ -2160,7 +2170,7 @@ static int dp_soc_cmn_setup(struct dp_soc *soc)
FL("num_reo_dest_rings %d\n"), soc->num_reo_dest_rings);
for (i = 0; i < soc->num_reo_dest_rings; i++) {
if (dp_srng_setup(soc, &soc->reo_dest_ring[i], REO_DST,
i, 0, REO_DST_RING_SIZE)) {
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);
@@ -2638,6 +2648,7 @@ 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;
struct dp_soc *soc = (struct dp_soc *)txrx_soc;
struct dp_pdev *pdev = qdf_mem_malloc(sizeof(*pdev));
@@ -2713,10 +2724,11 @@ static struct cdp_pdev *dp_pdev_attach_wifi3(struct cdp_soc_t *txrx_soc,
goto fail1;
}
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 (dp_srng_setup(soc, &soc->reo_dest_ring[pdev_id], REO_DST,
pdev_id, pdev_id, REO_DST_RING_SIZE)) {
pdev_id, pdev_id, reo_dst_ring_size)) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
FL("dp_srng_setup failed for reo_dest_ringn"));
goto fail1;
@@ -7148,11 +7160,7 @@ static struct cdp_cmn_ops dp_ops_cmn = {
.display_stats = dp_txrx_dump_stats,
.txrx_soc_set_nss_cfg = dp_soc_set_nss_cfg_wifi3,
.txrx_soc_get_nss_cfg = dp_soc_get_nss_cfg_wifi3,
#ifdef DP_INTR_POLL_BASED
.txrx_intr_attach = dp_soc_interrupt_attach_wrapper,
#else
.txrx_intr_attach = dp_soc_interrupt_attach,
#endif
.txrx_intr_detach = dp_soc_interrupt_detach,
.set_pn_check = dp_set_pn_check_wifi3,
.update_config_parameters = dp_update_config_parameters,
@@ -7499,6 +7507,7 @@ void *dp_soc_attach_wifi3(void *ctrl_psoc, void *hif_handle,
struct ol_if_ops *ol_ops)
{
struct dp_soc *soc = qdf_mem_malloc(sizeof(*soc));
int target_type;
if (!soc) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
@@ -7527,6 +7536,22 @@ void *dp_soc_attach_wifi3(void *ctrl_psoc, void *hif_handle,
FL("wlan_cfg_soc_attach failed"));
goto fail2;
}
target_type = hal_get_target_type(soc->hal_soc);
switch (target_type) {
case TARGET_TYPE_QCA6290:
case TARGET_TYPE_QCA6390:
wlan_cfg_set_reo_dst_ring_size(soc->wlan_cfg_ctx,
REO_DST_RING_SIZE_QCA6290);
break;
case TARGET_TYPE_QCA8074:
wlan_cfg_set_reo_dst_ring_size(soc->wlan_cfg_ctx,
REO_DST_RING_SIZE_QCA8074);
break;
default:
qdf_print("%s: Unknown tgt type %d\n", __func__, target_type);
qdf_assert_always(0);
break;
}
wlan_cfg_set_rx_hash(soc->wlan_cfg_ctx, rx_hash);
soc->cce_disable = false;

View File

@@ -1501,6 +1501,8 @@ bool hif_is_polled_mode_enabled(struct hif_opaque_softc *hif_ctx)
return scn->polled_mode_on;
}
qdf_export_symbol(hif_is_polled_mode_enabled);
/**
* hif_get_ce_handle - API to get CE handle for FastPath mode
* @hif_ctx: HIF Context

View File

@@ -600,6 +600,17 @@ void wlan_cfg_set_num_tx_ext_desc_pool(struct wlan_cfg_dp_soc_ctxt *cfg, int num
cfg->num_tx_ext_desc_pool = num_pool;
}
int wlan_cfg_get_reo_dst_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg)
{
return cfg->reo_dst_ring_size;
}
void wlan_cfg_set_reo_dst_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg,
int reo_dst_ring_size)
{
cfg->reo_dst_ring_size = reo_dst_ring_size;
}
int wlan_cfg_get_num_tx_desc(struct wlan_cfg_dp_soc_ctxt *cfg)
{
return cfg->num_tx_desc;

View File

@@ -163,6 +163,7 @@ struct wlan_cfg_dp_soc_ctxt {
uint32_t tx_flow_start_queue_offset;
#endif
uint32_t rx_defrag_min_timeout;
int reo_dst_ring_size;
};
/**
@@ -484,6 +485,24 @@ void wlan_cfg_set_num_tx_desc_pool(struct wlan_cfg_dp_soc_ctxt *cfg, int num_poo
int wlan_cfg_get_num_tx_ext_desc_pool(
struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx);
/*
* wlan_cfg_get_reo_dst_ring_size() - Get REO destination ring size
*
* @wlan_cfg_ctx - Configuration Handle
*
* Return: reo_dst_ring_size
*/
int wlan_cfg_get_reo_dst_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg);
/*
* wlan_cfg_set_num_tx_desc_pool() - Set the REO Destination ring size
*
* @wlan_cfg_ctx - Configuration Handle
* @reo_dst_ring_size - REO Destination ring size
*/
void wlan_cfg_set_reo_dst_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg,
int reo_dst_ring_size);
/*
* wlan_cfg_set_num_tx_ext_desc_pool() - Set the number of Tx MSDU ext Descriptor
* pools