diff options
| author | Yun Park <yunp@qca.qualcomm.com> | 2015-07-29 10:01:30 -0700 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2015-07-30 15:33:10 +0530 |
| commit | d0f6c8bb437fd37c72decc26fb0c50cde1b4115e (patch) | |
| tree | 14d92268538f42cd8467899e8a7f8d9992e498e8 | |
| parent | 25cda3e937d35ce0abc8e4d994317636d2699088 (diff) | |
qcacld: IPA uC: Fix build error when IPA_UC_OFFLOAD is disabled
This change is to fix a build error when IPA_UC_OFFLOAD is disabled,
due to hdd_ipa_setup_sys_pipe and hdd_ipa_teardown_sys_pipe is defined
in IPA_UC_OFFLOAD build flag.
Change-Id: If64e09c692c2f60a878dabc4a34751ad4110cfb9
CRs-Fixed: 879426
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_ipa.c | 228 |
1 files changed, 114 insertions, 114 deletions
diff --git a/CORE/HDD/src/wlan_hdd_ipa.c b/CORE/HDD/src/wlan_hdd_ipa.c index befe6555d33d..9b51233eb5f0 100644 --- a/CORE/HDD/src/wlan_hdd_ipa.c +++ b/CORE/HDD/src/wlan_hdd_ipa.c @@ -612,6 +612,120 @@ static bool hdd_ipa_can_send_to_ipa(hdd_adapter_t *adapter, struct hdd_ipa_priv return false; } +static int hdd_ipa_setup_sys_pipe(struct hdd_ipa_priv *hdd_ipa) +{ + int i, ret = 0; + struct ipa_sys_connect_params *ipa; + uint32_t desc_fifo_sz; + + /* The maximum number of descriptors that can be provided to a BAM at + * once is one less than the total number of descriptors that the buffer + * can contain. + * If max_num_of_descriptors = (BAM_PIPE_DESCRIPTOR_FIFO_SIZE / sizeof + * (SPS_DESCRIPTOR)), then (max_num_of_descriptors - 1) descriptors can + * be provided at once. + * Because of above requirement, one extra descriptor will be added to + * make sure hardware always has one descriptor. + */ + desc_fifo_sz = hdd_ipa->hdd_ctx->cfg_ini->IpaDescSize + + sizeof(struct sps_iovec); + + /*setup TX pipes */ + for (i = 0; i < HDD_IPA_MAX_IFACE; i++) { + ipa = &hdd_ipa->sys_pipe[i].ipa_sys_params; + + ipa->client = hdd_ipa_adapter_2_client[i].cons_client; + ipa->desc_fifo_sz = desc_fifo_sz; + ipa->priv = &hdd_ipa->iface_context[i]; + ipa->notify = hdd_ipa_i2w_cb; + +#ifdef IPA_UC_STA_OFFLOAD + ipa->ipa_ep_cfg.hdr.hdr_len = HDD_IPA_UC_WLAN_TX_HDR_LEN; + ipa->ipa_ep_cfg.nat.nat_en = IPA_BYPASS_NAT; + ipa->ipa_ep_cfg.hdr.hdr_ofst_pkt_size_valid = 1; + ipa->ipa_ep_cfg.hdr.hdr_ofst_pkt_size = 0; + ipa->ipa_ep_cfg.hdr.hdr_additional_const_len = + HDD_IPA_UC_WLAN_8023_HDR_SIZE; + ipa->ipa_ep_cfg.hdr_ext.hdr_little_endian = true; +#else + ipa->ipa_ep_cfg.hdr.hdr_len = HDD_IPA_WLAN_TX_HDR_LEN; +#endif + ipa->ipa_ep_cfg.mode.mode = IPA_BASIC; + + if (!hdd_ipa_is_rm_enabled(hdd_ipa)) + ipa->keep_ipa_awake = 1; + + ret = ipa_setup_sys_pipe(ipa, &(hdd_ipa->sys_pipe[i].conn_hdl)); + if (ret) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "Failed for pipe %d" + " ret: %d", i, ret); + goto setup_sys_pipe_fail; + } + hdd_ipa->sys_pipe[i].conn_hdl_valid = 1; + } + +#ifndef IPA_UC_STA_OFFLOAD + /* + * Hard code it here, this can be extended if in case PROD pipe is also + * per interface. Right now there is no advantage of doing this. + */ + hdd_ipa->prod_client = IPA_CLIENT_WLAN1_PROD; + + ipa = &hdd_ipa->sys_pipe[HDD_IPA_RX_PIPE].ipa_sys_params; + + ipa->client = hdd_ipa->prod_client; + + ipa->desc_fifo_sz = desc_fifo_sz; + ipa->priv = hdd_ipa; + ipa->notify = hdd_ipa_w2i_cb; + + ipa->ipa_ep_cfg.nat.nat_en = IPA_BYPASS_NAT; + ipa->ipa_ep_cfg.hdr.hdr_len = HDD_IPA_WLAN_RX_HDR_LEN; + ipa->ipa_ep_cfg.hdr.hdr_ofst_metadata_valid = 1; + ipa->ipa_ep_cfg.mode.mode = IPA_BASIC; + + if (!hdd_ipa_is_rm_enabled(hdd_ipa)) + ipa->keep_ipa_awake = 1; + + ret = ipa_setup_sys_pipe(ipa, &(hdd_ipa->sys_pipe[i].conn_hdl)); + if (ret) { + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "Failed for RX pipe: %d", + ret); + goto setup_sys_pipe_fail; + } + hdd_ipa->sys_pipe[HDD_IPA_RX_PIPE].conn_hdl_valid = 1; +#endif /* IPA_UC_STA_OFFLOAD */ + + return ret; + +setup_sys_pipe_fail: + + while (--i >= 0) { + ipa_teardown_sys_pipe(hdd_ipa->sys_pipe[i].conn_hdl); + adf_os_mem_zero(&hdd_ipa->sys_pipe[i], + sizeof(struct hdd_ipa_sys_pipe )); + } + + return ret; +} + +/* Disconnect all the Sys pipes */ +static void hdd_ipa_teardown_sys_pipe(struct hdd_ipa_priv *hdd_ipa) +{ + int ret = 0, i; + for (i = 0; i < HDD_IPA_MAX_SYSBAM_PIPE; i++) { + if (hdd_ipa->sys_pipe[i].conn_hdl_valid) { + ret = ipa_teardown_sys_pipe( + hdd_ipa->sys_pipe[i].conn_hdl); + if (ret) + HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "Failed: %d", + ret); + + hdd_ipa->sys_pipe[i].conn_hdl_valid = 0; + } + } +} + #ifdef IPA_UC_OFFLOAD void hdd_ipa_uc_stat_query(hdd_context_t *pHddCtx, uint32_t *ipa_tx_diff, uint32_t *ipa_rx_diff) @@ -733,120 +847,6 @@ static v_BOOL_t hdd_ipa_uc_find_add_assoc_sta( return sta_found; } -static int hdd_ipa_setup_sys_pipe(struct hdd_ipa_priv *hdd_ipa) -{ - int i, ret = 0; - struct ipa_sys_connect_params *ipa; - uint32_t desc_fifo_sz; - - /* The maximum number of descriptors that can be provided to a BAM at - * once is one less than the total number of descriptors that the buffer - * can contain. - * If max_num_of_descriptors = (BAM_PIPE_DESCRIPTOR_FIFO_SIZE / sizeof - * (SPS_DESCRIPTOR)), then (max_num_of_descriptors - 1) descriptors can - * be provided at once. - * Because of above requirement, one extra descriptor will be added to - * make sure hardware always has one descriptor. - */ - desc_fifo_sz = hdd_ipa->hdd_ctx->cfg_ini->IpaDescSize - + sizeof(struct sps_iovec); - - /*setup TX pipes */ - for (i = 0; i < HDD_IPA_MAX_IFACE; i++) { - ipa = &hdd_ipa->sys_pipe[i].ipa_sys_params; - - ipa->client = hdd_ipa_adapter_2_client[i].cons_client; - ipa->desc_fifo_sz = desc_fifo_sz; - ipa->priv = &hdd_ipa->iface_context[i]; - ipa->notify = hdd_ipa_i2w_cb; - -#ifdef IPA_UC_STA_OFFLOAD - ipa->ipa_ep_cfg.hdr.hdr_len = HDD_IPA_UC_WLAN_TX_HDR_LEN; - ipa->ipa_ep_cfg.nat.nat_en = IPA_BYPASS_NAT; - ipa->ipa_ep_cfg.hdr.hdr_ofst_pkt_size_valid = 1; - ipa->ipa_ep_cfg.hdr.hdr_ofst_pkt_size = 0; - ipa->ipa_ep_cfg.hdr.hdr_additional_const_len = - HDD_IPA_UC_WLAN_8023_HDR_SIZE; - ipa->ipa_ep_cfg.hdr_ext.hdr_little_endian = true; -#else - ipa->ipa_ep_cfg.hdr.hdr_len = HDD_IPA_WLAN_TX_HDR_LEN; -#endif - ipa->ipa_ep_cfg.mode.mode = IPA_BASIC; - - if (!hdd_ipa_is_rm_enabled(hdd_ipa)) - ipa->keep_ipa_awake = 1; - - ret = ipa_setup_sys_pipe(ipa, &(hdd_ipa->sys_pipe[i].conn_hdl)); - if (ret) { - HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "Failed for pipe %d" - " ret: %d", i, ret); - goto setup_sys_pipe_fail; - } - hdd_ipa->sys_pipe[i].conn_hdl_valid = 1; - } - -#ifndef IPA_UC_STA_OFFLOAD - /* - * Hard code it here, this can be extended if in case PROD pipe is also - * per interface. Right now there is no advantage of doing this. - */ - hdd_ipa->prod_client = IPA_CLIENT_WLAN1_PROD; - - ipa = &hdd_ipa->sys_pipe[HDD_IPA_RX_PIPE].ipa_sys_params; - - ipa->client = hdd_ipa->prod_client; - - ipa->desc_fifo_sz = desc_fifo_sz; - ipa->priv = hdd_ipa; - ipa->notify = hdd_ipa_w2i_cb; - - ipa->ipa_ep_cfg.nat.nat_en = IPA_BYPASS_NAT; - ipa->ipa_ep_cfg.hdr.hdr_len = HDD_IPA_WLAN_RX_HDR_LEN; - ipa->ipa_ep_cfg.hdr.hdr_ofst_metadata_valid = 1; - ipa->ipa_ep_cfg.mode.mode = IPA_BASIC; - - if (!hdd_ipa_is_rm_enabled(hdd_ipa)) - ipa->keep_ipa_awake = 1; - - ret = ipa_setup_sys_pipe(ipa, &(hdd_ipa->sys_pipe[i].conn_hdl)); - if (ret) { - HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "Failed for RX pipe: %d", - ret); - goto setup_sys_pipe_fail; - } - hdd_ipa->sys_pipe[HDD_IPA_RX_PIPE].conn_hdl_valid = 1; -#endif /* IPA_UC_STA_OFFLOAD */ - - return ret; - -setup_sys_pipe_fail: - - while (--i >= 0) { - ipa_teardown_sys_pipe(hdd_ipa->sys_pipe[i].conn_hdl); - adf_os_mem_zero(&hdd_ipa->sys_pipe[i], - sizeof(struct hdd_ipa_sys_pipe )); - } - - return ret; -} - -/* Disconnect all the Sys pipes */ -static void hdd_ipa_teardown_sys_pipe(struct hdd_ipa_priv *hdd_ipa) -{ - int ret = 0, i; - for (i = 0; i < HDD_IPA_MAX_SYSBAM_PIPE; i++) { - if (hdd_ipa->sys_pipe[i].conn_hdl_valid) { - ret = ipa_teardown_sys_pipe( - hdd_ipa->sys_pipe[i].conn_hdl); - if (ret) - HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR, "Failed: %d", - ret); - - hdd_ipa->sys_pipe[i].conn_hdl_valid = 0; - } - } -} - static int hdd_ipa_uc_enable_pipes(struct hdd_ipa_priv *hdd_ipa) { int result; |
