summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdhar, Mahesh Kumar <c_medhar@qti.qualcomm.com>2014-10-14 12:00:34 +0530
committerAnjaneeDevi Kapparapu <c_akappa@qti.qualcomm.com>2014-10-17 12:46:59 +0530
commit31dbef0036990f6e585e3f0e292aede4ef5bf816 (patch)
tree27c93e439146256188b1220ffcd3cab6d340273e
parentbce67f98a42c1f8277dec1e5bc5d1b8a554985ed (diff)
QCACLD: SDIO:Changes to enable reduced tx completion support.
Enable tx_free_at_download feature based on firmware capability to supports reduced tx completion. Change-Id: I784f2b4aad2ac4585b4b7751c33d1650340e43d3 CRs-Fixed: 738575
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_cfg.c5
-rw-r--r--CORE/SERVICES/BMI/bmi.c4
-rw-r--r--CORE/SERVICES/BMI/ol_fw.c13
-rw-r--r--CORE/SERVICES/BMI/ol_fw.h4
-rw-r--r--CORE/SERVICES/COMMON/bmi.h2
-rw-r--r--CORE/SERVICES/COMMON/ol_cfg.h2
-rw-r--r--CORE/VOSS/src/vos_api.c2
7 files changed, 23 insertions, 9 deletions
diff --git a/CORE/CLD_TXRX/TXRX/ol_cfg.c b/CORE/CLD_TXRX/TXRX/ol_cfg.c
index 32dff6f7ed22..7c1545381335 100644
--- a/CORE/CLD_TXRX/TXRX/ol_cfg.c
+++ b/CORE/CLD_TXRX/TXRX/ol_cfg.c
@@ -181,6 +181,11 @@ int ol_cfg_tx_free_at_download(ol_pdev_handle pdev)
return cfg->tx_free_at_download;
}
+void ol_cfg_set_tx_free_at_download(ol_pdev_handle pdev)
+{
+ struct txrx_pdev_cfg_t *cfg = (struct txrx_pdev_cfg_t *)pdev;
+ cfg->tx_free_at_download = 1;
+}
u_int16_t ol_cfg_target_tx_credit(ol_pdev_handle pdev)
{
struct txrx_pdev_cfg_t *cfg = (struct txrx_pdev_cfg_t *)pdev;
diff --git a/CORE/SERVICES/BMI/bmi.c b/CORE/SERVICES/BMI/bmi.c
index 02612feaab7b..d487d522dc25 100644
--- a/CORE/SERVICES/BMI/bmi.c
+++ b/CORE/SERVICES/BMI/bmi.c
@@ -233,9 +233,9 @@ A_STATUS bmi_done(struct ol_softc *scn)
return 0;
}
-void bmi_target_ready(struct ol_softc *scn)
+void bmi_target_ready(struct ol_softc *scn, void *cfg_ctx)
{
- ol_target_ready(scn);
+ ol_target_ready(scn, cfg_ctx);
}
#ifndef HIF_MESSAGE_BASED
diff --git a/CORE/SERVICES/BMI/ol_fw.c b/CORE/SERVICES/BMI/ol_fw.c
index 3a07d8b82ec2..2765cea879cc 100644
--- a/CORE/SERVICES/BMI/ol_fw.c
+++ b/CORE/SERVICES/BMI/ol_fw.c
@@ -2361,7 +2361,10 @@ u_int8_t ol_get_number_of_peers_supported(struct ol_softc *scn)
#ifdef HIF_SDIO
#define SDIO_SWAP_MAILBOX_FW_ACK 0x10000
+#define SDIO_REDUCE_TX_COMPL_FW_ACK 0X20000
#define SDIO_SWAP_MAILBOX_SET 0x1
+#define SDIO_REDUCE_TX_COMPL_SET 0x2
+
/*Setting SDIO block size, mbox ISR yield limit for SDIO based HIF*/
static A_STATUS
ol_sdio_extra_initialization(struct ol_softc *scn)
@@ -2443,7 +2446,7 @@ ol_sdio_extra_initialization(struct ol_softc *scn)
break;
}
- param |= SDIO_SWAP_MAILBOX_SET;
+ param |= (SDIO_SWAP_MAILBOX_SET|SDIO_REDUCE_TX_COMPL_SET);
BMIWriteMemory(scn->hif_hdl,
host_interest_item_address(scn->target_type,
offsetof(struct host_interest_s,
@@ -2456,7 +2459,7 @@ ol_sdio_extra_initialization(struct ol_softc *scn)
}
void
-ol_target_ready(struct ol_softc *scn)
+ol_target_ready(struct ol_softc *scn, void *cfg_ctx)
{
u_int32_t value = 0;
A_STATUS status = EOK;
@@ -2475,5 +2478,11 @@ ol_target_ready(struct ol_softc *scn)
printk("MAILBOX SWAP Service is enabled!\n");
HIFSetMailboxSwap(scn->hif_hdl);
}
+
+ if (value & SDIO_REDUCE_TX_COMPL_FW_ACK) {
+ printk("Reduced Tx Complete service is enabled!\n");
+ ol_cfg_set_tx_free_at_download(cfg_ctx);
+
+ }
}
#endif
diff --git a/CORE/SERVICES/BMI/ol_fw.h b/CORE/SERVICES/BMI/ol_fw.h
index 0284bf9a0167..509e3e5b7f13 100644
--- a/CORE/SERVICES/BMI/ol_fw.h
+++ b/CORE/SERVICES/BMI/ol_fw.h
@@ -125,9 +125,9 @@ void ol_target_failure(void *instance, A_STATUS status);
u_int8_t ol_get_number_of_peers_supported(struct ol_softc *scn);
#if defined(HIF_SDIO)
-void ol_target_ready(struct ol_softc *scn);
+void ol_target_ready(struct ol_softc *scn, void *cfg_ctx);
#else
-static inline void ol_target_ready(struct ol_softc *scn)
+static inline void ol_target_ready(struct ol_softc *scn, void *cfg_ctx)
{
}
diff --git a/CORE/SERVICES/COMMON/bmi.h b/CORE/SERVICES/COMMON/bmi.h
index 4e7aac2be59a..f33c4796aff3 100644
--- a/CORE/SERVICES/COMMON/bmi.h
+++ b/CORE/SERVICES/COMMON/bmi.h
@@ -46,7 +46,7 @@ extern "C" {
#include "ol_if_athvar.h"
A_STATUS bmi_download_firmware(struct ol_softc *scn);
-void bmi_target_ready(struct ol_softc *scn);
+void bmi_target_ready(struct ol_softc *scn, void *cfg_ctx);
void
BMICleanup(struct ol_softc *scn);
diff --git a/CORE/SERVICES/COMMON/ol_cfg.h b/CORE/SERVICES/COMMON/ol_cfg.h
index 1f76c3277221..af5448db9c32 100644
--- a/CORE/SERVICES/COMMON/ol_cfg.h
+++ b/CORE/SERVICES/COMMON/ol_cfg.h
@@ -265,7 +265,7 @@ int ol_cfg_netbuf_frags_max(ol_pdev_handle pdev);
* 1 -> free the tx frame as soon as the download completes
*/
int ol_cfg_tx_free_at_download(ol_pdev_handle pdev);
-
+void ol_cfg_set_tx_free_at_download(ol_pdev_handle pdev);
/**
* @brief Low water mark for target tx credit.
diff --git a/CORE/VOSS/src/vos_api.c b/CORE/VOSS/src/vos_api.c
index daf15abedb82..35bd4525f1bb 100644
--- a/CORE/VOSS/src/vos_api.c
+++ b/CORE/VOSS/src/vos_api.c
@@ -465,7 +465,7 @@ VOS_STATUS vos_open( v_CONTEXT_t *pVosContext, v_SIZE_t hddContextSize )
goto err_wda_close;
}
- bmi_target_ready(scn);
+ bmi_target_ready(scn, gpVosContext->cfg_ctx);
/* Open the SYS module */
vStatus = sysOpen(gpVosContext);