summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeo Chang <schang@qca.qualcomm.com>2014-06-05 14:07:32 -0700
committerAkash Patel <c_akashp@qca.qualcomm.com>2014-07-11 14:51:37 -0700
commitfd68f0b175ff56c44c67b48ad8e1f87defc393a4 (patch)
tree6b45f5bd6111e6a895c2ce923d0139c07735e13c
parent2aa8582a3dc25bc5ac5e2afc6e57de3ab6581228 (diff)
qca-cld: ipa uc: cfg, data path feature implementation
softap mode, if LTE backhaul, wlan data path will be offloaded to IPA micro controller. And IPA micro controller will push/pull data directly from/to MODEM. Change-Id: I3bd57acf823f2d0bd661c676429854ab2dec8ffc Crs-fixed: 681560
-rw-r--r--CORE/MAC/inc/aniGlobal.h13
-rw-r--r--CORE/SERVICES/WMA/wma.c7
-rw-r--r--CORE/VOSS/src/vos_api.c22
3 files changed, 42 insertions, 0 deletions
diff --git a/CORE/MAC/inc/aniGlobal.h b/CORE/MAC/inc/aniGlobal.h
index 208f21c783ed..6f9fe2f63d49 100644
--- a/CORE/MAC/inc/aniGlobal.h
+++ b/CORE/MAC/inc/aniGlobal.h
@@ -1037,6 +1037,19 @@ typedef struct sMacOpenParameters
/* dfs radar pri multiplier */
tANI_S32 dfsRadarPriMultiplier;
+#ifdef IPA_UC_OFFLOAD
+ /* IPA Micro controller data path offload enable flag */
+ tANI_U8 ucOffloadEnabled;
+ /* IPA Micro controller data path offload TX buffer count */
+ tANI_U32 ucTxBufCount;
+ /* IPA Micro controller data path offload TX buffer size */
+ tANI_U32 ucTxBufSize;
+ /* IPA Micro controller data path offload RX indication ring count */
+ tANI_U32 ucRxIndRingCount;
+ /* IPA Micro controller data path offload TX partition base */
+ tANI_U32 ucTxPartitionBase;
+#endif /* IPA_UC_OFFLOAD */
+
} tMacOpenParameters;
typedef struct sHalMacStartParameters
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index c815dad1ed08..60a23f18d116 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -4303,6 +4303,13 @@ VOS_STATUS WDA_open(v_VOID_t *vos_context, v_VOID_t *os_ctx,
/* initialize default target config */
wma_set_default_tgt_config(wma_handle);
+#ifdef IPA_UC_OFFLOAD
+ olCfg.is_uc_offload_enabled = mac_params->ucOffloadEnabled;
+ olCfg.uc_tx_buffer_count = mac_params->ucTxBufCount;
+ olCfg.uc_tx_buffer_size = mac_params->ucTxBufSize;
+ olCfg.uc_rx_indication_ring_count = mac_params->ucRxIndRingCount;
+ olCfg.uc_tx_partition_base = mac_params->ucTxPartitionBase;
+#endif /* IPA_UC_OFFLOAD*/
/* Allocate cfg handle */
olCfg.is_full_reorder_offload = mac_params->reorderOffload;
((pVosContextType) vos_context)->cfg_ctx =
diff --git a/CORE/VOSS/src/vos_api.c b/CORE/VOSS/src/vos_api.c
index 650fdb1f29ea..e66ad493435e 100644
--- a/CORE/VOSS/src/vos_api.c
+++ b/CORE/VOSS/src/vos_api.c
@@ -454,6 +454,15 @@ VOS_STATUS vos_open( v_CONTEXT_t *pVosContext, v_SIZE_t hddContextSize )
macOpenParms.reorderOffload = pHddCtx->cfg_ini->reorderOffloadSupport;
#endif
+#ifdef IPA_UC_OFFLOAD
+ /* IPA micro controller data path offload resource config item */
+ macOpenParms.ucOffloadEnabled = pHddCtx->cfg_ini->IpaUcOffloadEnabled;
+ macOpenParms.ucTxBufCount = pHddCtx->cfg_ini->IpaUcTxBufCount;
+ macOpenParms.ucTxBufSize = pHddCtx->cfg_ini->IpaUcTxBufSize;
+ macOpenParms.ucRxIndRingCount = pHddCtx->cfg_ini->IpaUcRxIndRingCount;
+ macOpenParms.ucTxPartitionBase = pHddCtx->cfg_ini->IpaUcTxPartitionBase;
+#endif /* IPA_UC_OFFLOAD */
+
vStatus = WDA_open( gpVosContext, gpVosContext->pHDDContext,
#if defined (QCA_WIFI_2_0) && \
!defined (QCA_WIFI_ISOC)
@@ -582,6 +591,19 @@ VOS_STATUS vos_open( v_CONTEXT_t *pVosContext, v_SIZE_t hddContextSize )
goto err_sme_close;
}
+#ifdef IPA_UC_OFFLOAD
+ WLANTL_GetIpaUcResource(gpVosContext,
+ &((hdd_context_t*)(gpVosContext->pHDDContext))->ce_sr_base_paddr,
+ &((hdd_context_t*)(gpVosContext->pHDDContext))->ce_sr_ring_size,
+ &((hdd_context_t*)(gpVosContext->pHDDContext))->ce_reg_paddr,
+ &((hdd_context_t*)(gpVosContext->pHDDContext))->tx_comp_ring_base_paddr,
+ &((hdd_context_t*)(gpVosContext->pHDDContext))->tx_comp_ring_size,
+ &((hdd_context_t*)(gpVosContext->pHDDContext))->tx_num_alloc_buffer,
+ &((hdd_context_t*)(gpVosContext->pHDDContext))->rx_rdy_ring_base_paddr,
+ &((hdd_context_t*)(gpVosContext->pHDDContext))->rx_rdy_ring_size,
+ &((hdd_context_t*)(gpVosContext->pHDDContext))->rx_proc_done_idx_paddr);
+#endif /* IPA_UC_OFFLOAD */
+
VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO_HIGH,
"%s: VOSS successfully Opened", __func__);