summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYun Park <yunp@qca.qualcomm.com>2015-11-25 07:48:07 -0800
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2015-12-02 16:50:04 +0530
commitf7d460754867d158ee712d62d304ba5bd0fa7101 (patch)
treeaa21730dfe8160b37ff51c29cc68099499a83bab
parent648abdb8ed56bdffaa0efd220a895f52eb90bdf0 (diff)
qcacld: send CLIENT_CONNECT message to IPA after enable WDI pipes
Since CLIENT_CONNECT message is sent to IPA before enabling WDI pipes, CLIENT_CONNECT message count could be more than CLIENT_DISCONNECT count, and this could cause an abnormal behavior in the IPACM. Change-Id: I03d30c7f82aadf83979084b7e65b8ed14565588d CRs-fixed: 941894
-rw-r--r--CORE/HDD/src/wlan_hdd_ipa.c48
1 files changed, 23 insertions, 25 deletions
diff --git a/CORE/HDD/src/wlan_hdd_ipa.c b/CORE/HDD/src/wlan_hdd_ipa.c
index 7f2edef373f3..41840ce4027c 100644
--- a/CORE/HDD/src/wlan_hdd_ipa.c
+++ b/CORE/HDD/src/wlan_hdd_ipa.c
@@ -4325,8 +4325,30 @@ int hdd_ipa_wlan_evt(hdd_adapter_t *adapter, uint8_t sta_id,
vos_lock_release(&hdd_ipa->event_lock);
return 0;
}
- vos_lock_release(&hdd_ipa->event_lock);
+
+ /* Enable IPA UC Data PIPEs when first STA connected */
+ if ((0 == hdd_ipa->sap_num_connected_sta)
+#ifdef IPA_UC_STA_OFFLOAD
+ && (!hdd_ipa_uc_sta_is_enabled(hdd_ipa)
+ || !hdd_ipa->sta_connected)
#endif
+ && (VOS_TRUE == hdd_ipa->uc_loaded)
+ ) {
+ ret = hdd_ipa_uc_handle_first_con(hdd_ipa);
+ if (ret) {
+ vos_lock_release(&hdd_ipa->event_lock);
+ HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR,
+ "%s: handle 1st con ret %d",
+ adapter->dev->name, ret);
+ return ret;
+ }
+ }
+
+ hdd_ipa->sap_num_connected_sta++;
+ hdd_ipa->pending_cons_req = VOS_FALSE;
+
+ vos_lock_release(&hdd_ipa->event_lock);
+#endif /* IPA_UC_OFFLOAD */
meta.msg_type = type;
meta.msg_len = (sizeof(struct ipa_wlan_msg_ex) +
@@ -4364,31 +4386,7 @@ int hdd_ipa_wlan_evt(hdd_adapter_t *adapter, uint8_t sta_id,
return ret;
}
hdd_ipa->stats.num_send_msg++;
-#ifdef IPA_UC_OFFLOAD
- vos_lock_acquire(&hdd_ipa->event_lock);
- /* Enable IPA UC Data PIPEs when first STA connected */
- if ((0 == hdd_ipa->sap_num_connected_sta)
-#ifdef IPA_UC_STA_OFFLOAD
- && (!hdd_ipa_uc_sta_is_enabled(hdd_ipa)
- || !hdd_ipa->sta_connected)
-#endif
- && (VOS_TRUE == hdd_ipa->uc_loaded)
- ) {
- ret = hdd_ipa_uc_handle_first_con(hdd_ipa);
- if (ret) {
- vos_lock_release(&hdd_ipa->event_lock);
- HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR,
- "%s: handle 1st con ret %d",
- adapter->dev->name, ret);
- return ret;
- }
- }
-
- hdd_ipa->sap_num_connected_sta++;
- hdd_ipa->pending_cons_req = VOS_FALSE;
- vos_lock_release(&hdd_ipa->event_lock);
-#endif /* IPA_UC_OFFLOAD */
return ret;
case WLAN_CLIENT_DISCONNECT: