diff options
| author | Edhar, Mahesh Kumar <c_medhar@qti.qualcomm.com> | 2014-10-14 12:00:34 +0530 |
|---|---|---|
| committer | AnjaneeDevi Kapparapu <c_akappa@qti.qualcomm.com> | 2014-10-17 12:46:59 +0530 |
| commit | 31dbef0036990f6e585e3f0e292aede4ef5bf816 (patch) | |
| tree | 27c93e439146256188b1220ffcd3cab6d340273e | |
| parent | bce67f98a42c1f8277dec1e5bc5d1b8a554985ed (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.c | 5 | ||||
| -rw-r--r-- | CORE/SERVICES/BMI/bmi.c | 4 | ||||
| -rw-r--r-- | CORE/SERVICES/BMI/ol_fw.c | 13 | ||||
| -rw-r--r-- | CORE/SERVICES/BMI/ol_fw.h | 4 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/bmi.h | 2 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/ol_cfg.h | 2 | ||||
| -rw-r--r-- | CORE/VOSS/src/vos_api.c | 2 |
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); |
