diff options
| author | Deepak Dhamdhere <ddhamdhe@codeaurora.org> | 2016-10-27 10:58:29 -0700 |
|---|---|---|
| committer | qcabuildsw <qcabuildsw@localhost> | 2016-11-01 20:52:21 -0700 |
| commit | 70229e56bfbc49893907dcd26902de94e302849c (patch) | |
| tree | 8845964c150c1f486ba23cb60a0f3caaa7863706 /core/mac/src | |
| parent | 88d2b7daf159da42a65d7b623f9ae84dd0841896 (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.h | 4 | ||||
| -rw-r--r-- | core/mac/src/pe/include/lim_session.h | 1 | ||||
| -rw-r--r-- | core/mac/src/pe/lim/lim_assoc_utils.c | 7 | ||||
| -rw-r--r-- | core/mac/src/pe/lim/lim_process_message_queue.c | 2 | ||||
| -rw-r--r-- | core/mac/src/pe/lim/lim_process_sme_req_messages.c | 2 | ||||
| -rw-r--r-- | core/mac/src/pe/lim/lim_send_sme_rsp_messages.c | 7 | ||||
| -rw-r--r-- | core/mac/src/sys/legacy/src/utils/src/mac_trace.c | 2 |
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); |
