summaryrefslogtreecommitdiff
path: root/core/mac/src
diff options
context:
space:
mode:
authorDeepak Dhamdhere <ddhamdhe@codeaurora.org>2016-10-27 10:58:29 -0700
committerqcabuildsw <qcabuildsw@localhost>2016-11-01 20:52:21 -0700
commit70229e56bfbc49893907dcd26902de94e302849c (patch)
tree8845964c150c1f486ba23cb60a0f3caaa7863706 /core/mac/src
parent88d2b7daf159da42a65d7b623f9ae84dd0841896 (diff)
qcacld-3.0: Do not send WMI commands in ROAM_HO_FAIL handling
When firmware sends WMI_ROAM_REASON_HO_FAILED event to host, it has already deleted the peer. Host should not send peer and vdev cleanup commands to firmware. Add disassoc_reason field to roamCmd to indicate that CSR wants to disconnect because of ROAM_HO_FAIL. Copy that information to PE session, send it to WMA using WMA_DELETE_BSS_HO_FAIL_REQ. Add wma_delete_bss_ho_fail() to take care of driver state cleanup without sending commands to firmware. CRs-Fixed: 1083649 Change-Id: Icdd7571214ea5510c0cdbc44c69d6b5060f5892c
Diffstat (limited to 'core/mac/src')
-rw-r--r--core/mac/src/include/sir_params.h4
-rw-r--r--core/mac/src/pe/include/lim_session.h1
-rw-r--r--core/mac/src/pe/lim/lim_assoc_utils.c7
-rw-r--r--core/mac/src/pe/lim/lim_process_message_queue.c2
-rw-r--r--core/mac/src/pe/lim/lim_process_sme_req_messages.c2
-rw-r--r--core/mac/src/pe/lim/lim_send_sme_rsp_messages.c7
-rw-r--r--core/mac/src/sys/legacy/src/utils/src/mac_trace.c2
7 files changed, 23 insertions, 2 deletions
diff --git a/core/mac/src/include/sir_params.h b/core/mac/src/include/sir_params.h
index 738fbd93e0ab..b050354d6501 100644
--- a/core/mac/src/include/sir_params.h
+++ b/core/mac/src/include/sir_params.h
@@ -253,9 +253,11 @@ typedef struct sSirMbMsgP2p {
#define SIR_HAL_TIMER_ADJUST_ADAPTIVE_THRESHOLD_IND \
(SIR_HAL_ITC_MSG_TYPES_BEGIN + 44)
#define SIR_HAL_SET_LINK_STATE (SIR_HAL_ITC_MSG_TYPES_BEGIN + 45)
+#define SIR_HAL_DELETE_BSS_HO_FAIL_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 46)
+#define SIR_HAL_DELETE_BSS_HO_FAIL_RSP (SIR_HAL_ITC_MSG_TYPES_BEGIN + 47)
/*
- * (SIR_HAL_ITC_MSG_TYPES_BEGIN + 46) to
+ * (SIR_HAL_ITC_MSG_TYPES_BEGIN + 48) to
* (SIR_HAL_ITC_MSG_TYPES_BEGIN + 57) are unused
*/
diff --git a/core/mac/src/pe/include/lim_session.h b/core/mac/src/pe/include/lim_session.h
index c0d7398e642c..4a3b40add9eb 100644
--- a/core/mac/src/pe/include/lim_session.h
+++ b/core/mac/src/pe/include/lim_session.h
@@ -485,6 +485,7 @@ typedef struct sPESession /* Added to Support BT-AMP */
uint8_t *access_policy_vendor_ie;
uint8_t access_policy;
bool ignore_assoc_disallowed;
+ bool process_ho_fail;
} tPESession, *tpPESession;
/*-------------------------------------------------------------------------
diff --git a/core/mac/src/pe/lim/lim_assoc_utils.c b/core/mac/src/pe/lim/lim_assoc_utils.c
index b16c83e4e82b..d859282617ed 100644
--- a/core/mac/src/pe/lim/lim_assoc_utils.c
+++ b/core/mac/src/pe/lim/lim_assoc_utils.c
@@ -3396,7 +3396,12 @@ lim_del_bss(tpAniSirGlobal pMac, tpDphHashNode pStaDs, uint16_t bssIdx,
/* we need to defer the message until we get the response back from HAL. */
SET_LIM_PROCESS_DEFD_MESGS(pMac, false);
- msgQ.type = WMA_DELETE_BSS_REQ;
+ lim_log(pMac, LOGW, FL("process_ho_fail = %d"),
+ psessionEntry->process_ho_fail);
+ if (psessionEntry->process_ho_fail)
+ msgQ.type = WMA_DELETE_BSS_HO_FAIL_REQ;
+ else
+ msgQ.type = WMA_DELETE_BSS_REQ;
msgQ.reserved = 0;
msgQ.bodyptr = pDelBssParams;
msgQ.bodyval = 0;
diff --git a/core/mac/src/pe/lim/lim_process_message_queue.c b/core/mac/src/pe/lim/lim_process_message_queue.c
index 381e186d5bb8..b3c3f44723ae 100644
--- a/core/mac/src/pe/lim/lim_process_message_queue.c
+++ b/core/mac/src/pe/lim/lim_process_message_queue.c
@@ -446,6 +446,7 @@ uint8_t static def_msg_decision(tpAniSirGlobal pMac, tpSirMsgQ limMsg)
&& !pMac->lim.gLimSystemInScanLearnMode) {
if ((limMsg->type != WMA_ADD_BSS_RSP)
&& (limMsg->type != WMA_DELETE_BSS_RSP)
+ && (limMsg->type != WMA_DELETE_BSS_HO_FAIL_RSP)
&& (limMsg->type != WMA_ADD_STA_RSP)
&& (limMsg->type != WMA_DELETE_STA_RSP)
&& (limMsg->type != WMA_SET_BSSKEY_RSP)
@@ -1763,6 +1764,7 @@ static void lim_process_messages(tpAniSirGlobal mac_ctx, tpSirMsgQ msg)
lim_process_mlm_del_sta_rsp(mac_ctx, msg);
break;
case WMA_DELETE_BSS_RSP:
+ case WMA_DELETE_BSS_HO_FAIL_RSP:
lim_handle_delete_bss_rsp(mac_ctx, msg);
break;
case WMA_CSA_OFFLOAD_EVENT:
diff --git a/core/mac/src/pe/lim/lim_process_sme_req_messages.c b/core/mac/src/pe/lim/lim_process_sme_req_messages.c
index ace88d8a89d0..37a9806dd293 100644
--- a/core/mac/src/pe/lim/lim_process_sme_req_messages.c
+++ b/core/mac/src/pe/lim/lim_process_sme_req_messages.c
@@ -2450,6 +2450,8 @@ static void __lim_process_sme_disassoc_req(tpAniSirGlobal pMac, uint32_t *pMsgBu
psessionEntry->smeSessionId = smesessionId;
psessionEntry->transactionId = smetransactionId;
+ lim_log(pMac, LOGW, FL("ho_fail: %d "), smeDisassocReq.process_ho_fail);
+ psessionEntry->process_ho_fail = smeDisassocReq.process_ho_fail;
switch (GET_LIM_SYSTEM_ROLE(psessionEntry)) {
case eLIM_STA_ROLE:
diff --git a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c
index 4eae32115abf..7db0325fd3b9 100644
--- a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c
+++ b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c
@@ -2284,6 +2284,13 @@ void lim_handle_delete_bss_rsp(tpAniSirGlobal pMac, tpSirMsgQ MsgQ)
qdf_mem_free(MsgQ->bodyptr);
return;
}
+ /*
+ * During DEL BSS handling, the PE Session will be deleted, but it is
+ * better to clear this flag if the session is hanging around due
+ * to some error conditions so that the next DEL_BSS request does
+ * not take the HO_FAIL path
+ */
+ psessionEntry->process_ho_fail = false;
if (LIM_IS_IBSS_ROLE(psessionEntry))
lim_ibss_del_bss_rsp(pMac, MsgQ->bodyptr, psessionEntry);
else if (LIM_IS_UNKNOWN_ROLE(psessionEntry))
diff --git a/core/mac/src/sys/legacy/src/utils/src/mac_trace.c b/core/mac/src/sys/legacy/src/utils/src/mac_trace.c
index a76e2b49b6e9..63acd730a64f 100644
--- a/core/mac/src/sys/legacy/src/utils/src/mac_trace.c
+++ b/core/mac/src/sys/legacy/src/utils/src/mac_trace.c
@@ -394,7 +394,9 @@ uint8_t *mac_trace_get_wma_msg_string(uint16_t wma_msg)
CASE_RETURN_STRING(WMA_ADD_BSS_REQ);
CASE_RETURN_STRING(WMA_ADD_BSS_RSP);
CASE_RETURN_STRING(WMA_DELETE_BSS_REQ);
+ CASE_RETURN_STRING(WMA_DELETE_BSS_HO_FAIL_REQ);
CASE_RETURN_STRING(WMA_DELETE_BSS_RSP);
+ CASE_RETURN_STRING(WMA_DELETE_BSS_HO_FAIL_RSP);
CASE_RETURN_STRING(WMA_SEND_BEACON_REQ);
CASE_RETURN_STRING(WMA_SET_BSSKEY_REQ);
CASE_RETURN_STRING(WMA_SET_BSSKEY_RSP);