Эх сурвалжийг харах

qcacld-3.0: Add sme session id to few SME APIs

Some SME APIs are not using session id eventhough it is available.
Add sme session id so that in future using this sme session id, vdev
object can be pulled.

Change-Id: I21bc4d16c7ae5cd48f4e5049f01ad3d3ec2763e5
CRs-Fixed: 2005532
Krunal Soni 8 жил өмнө
parent
commit
f35830237c

+ 64 - 44
core/sme/src/csr/csr_api_roam.c

@@ -189,7 +189,7 @@ static ePhyChanBondState csr_get_cb_mode_from_ies(tpAniSirGlobal pMac,
 						  tDot11fBeaconIEs *pIes);
 						  tDot11fBeaconIEs *pIes);
 
 
 static void csr_roaming_state_config_cnf_processor(tpAniSirGlobal pMac,
 static void csr_roaming_state_config_cnf_processor(tpAniSirGlobal pMac,
-						   uint32_t result);
+				uint32_t result, uint8_t session_id);
 QDF_STATUS csr_roam_open(tpAniSirGlobal pMac);
 QDF_STATUS csr_roam_open(tpAniSirGlobal pMac);
 QDF_STATUS csr_roam_close(tpAniSirGlobal pMac);
 QDF_STATUS csr_roam_close(tpAniSirGlobal pMac);
 void csr_roamMICErrorTimerHandler(void *pv);
 void csr_roamMICErrorTimerHandler(void *pv);
@@ -272,7 +272,6 @@ static QDF_STATUS csr_roam_issue_set_key_command(tpAniSirGlobal pMac,
 						 uint32_t roamId);
 						 uint32_t roamId);
 static QDF_STATUS csr_roam_get_qos_info_from_bss(tpAniSirGlobal pMac,
 static QDF_STATUS csr_roam_get_qos_info_from_bss(tpAniSirGlobal pMac,
 						 tSirBssDescription *pBssDesc);
 						 tSirBssDescription *pBssDesc);
-void csr_roam_reissue_roam_command(tpAniSirGlobal pMac);
 static void csr_ser_des_unpack_diassoc_rsp(uint8_t *pBuf,
 static void csr_ser_des_unpack_diassoc_rsp(uint8_t *pBuf,
 					   tSirSmeDisassocRsp *pRsp);
 					   tSirSmeDisassocRsp *pRsp);
 void csr_init_operating_classes(tHalHandle hHal);
 void csr_init_operating_classes(tHalHandle hHal);
@@ -1310,7 +1309,7 @@ void csr_release_command_set_key(tpAniSirGlobal pMac, tSmeCmd *pCommand)
  *
  *
  * Return: None
  * Return: None
  */
  */
-void csr_release_roc_req_cmd(tpAniSirGlobal mac_ctx)
+void csr_release_roc_req_cmd(tpAniSirGlobal mac_ctx, uint8_t session_id)
 {
 {
 	tListElem *entry;
 	tListElem *entry;
 	tSmeCmd *cmd = NULL;
 	tSmeCmd *cmd = NULL;
@@ -4728,7 +4727,8 @@ static void csr_set_cfg_rate_set_from_profile(tpAniSirGlobal pMac,
 			ProprietaryOperationalRatesLength);
 			ProprietaryOperationalRatesLength);
 }
 }
 
 
-void csr_roam_ccm_cfg_set_callback(tpAniSirGlobal pMac, int32_t result)
+void csr_roam_ccm_cfg_set_callback(tpAniSirGlobal pMac, int32_t result,
+					uint8_t session_id)
 {
 {
 	tListElem *pEntry =
 	tListElem *pEntry =
 		csr_ll_peek_head(&pMac->sme.smeCmdActiveList, LL_ACCESS_LOCK);
 		csr_ll_peek_head(&pMac->sme.smeCmdActiveList, LL_ACCESS_LOCK);
@@ -4753,7 +4753,8 @@ void csr_roam_ccm_cfg_set_callback(tpAniSirGlobal pMac, int32_t result)
 
 
 	if (CSR_IS_ROAM_JOINING(pMac, sessionId)
 	if (CSR_IS_ROAM_JOINING(pMac, sessionId)
 	    && CSR_IS_ROAM_SUBSTATE_CONFIG(pMac, sessionId)) {
 	    && CSR_IS_ROAM_SUBSTATE_CONFIG(pMac, sessionId)) {
-		csr_roaming_state_config_cnf_processor(pMac, (uint32_t) result);
+		csr_roaming_state_config_cnf_processor(pMac, (uint32_t) result,
+						session_id);
 	}
 	}
 }
 }
 
 
@@ -4844,7 +4845,7 @@ QDF_STATUS csr_roam_set_bss_config_cfg(tpAniSirGlobal pMac, uint32_t sessionId,
 	/* Join time out */
 	/* Join time out */
 	csr_roam_substate_change(pMac, eCSR_ROAM_SUBSTATE_CONFIG, sessionId);
 	csr_roam_substate_change(pMac, eCSR_ROAM_SUBSTATE_CONFIG, sessionId);
 
 
-	csr_roam_ccm_cfg_set_callback(pMac, status);
+	csr_roam_ccm_cfg_set_callback(pMac, status, sessionId);
 	return QDF_STATUS_SUCCESS;
 	return QDF_STATUS_SUCCESS;
 }
 }
 
 
@@ -5545,16 +5546,18 @@ static QDF_STATUS csr_roam(tpAniSirGlobal pMac, tSmeCmd *pCommand)
 			/* otherwise, we can complete the Roam command here. */
 			/* otherwise, we can complete the Roam command here. */
 			if (eCsrStopRoamingDueToConcurrency == RoamState)
 			if (eCsrStopRoamingDueToConcurrency == RoamState)
 				csr_roam_complete(pMac,
 				csr_roam_complete(pMac,
-					eCsrJoinFailureDueToConcurrency, NULL);
+					eCsrJoinFailureDueToConcurrency, NULL,
+					sessionId);
 			else
 			else
 				csr_roam_complete(pMac,
 				csr_roam_complete(pMac,
-					eCsrNothingToJoin, NULL);
+					eCsrNothingToJoin, NULL, sessionId);
 		}
 		}
 	} else if (eCsrReassocToSelfNoCapChange == RoamState) {
 	} else if (eCsrReassocToSelfNoCapChange == RoamState) {
 		csr_roam_complete(pMac, eCsrSilentlyStopRoamingSaveState,
 		csr_roam_complete(pMac, eCsrSilentlyStopRoamingSaveState,
-				NULL);
+				NULL, sessionId);
 	} else if (eCsrStartIbssSameIbss == RoamState) {
 	} else if (eCsrStartIbssSameIbss == RoamState) {
-		csr_roam_complete(pMac, eCsrSilentlyStopRoaming, NULL);
+		csr_roam_complete(pMac, eCsrSilentlyStopRoaming, NULL,
+				sessionId);
 	}
 	}
 
 
 	return status;
 	return status;
@@ -5580,7 +5583,7 @@ QDF_STATUS csr_process_ft_reassoc_roam_command(tpAniSirGlobal pMac,
 	if (CSR_IS_ROAMING(pSession) && pSession->fCancelRoaming) {
 	if (CSR_IS_ROAMING(pSession) && pSession->fCancelRoaming) {
 		/* the roaming is cancelled. Simply complete the command */
 		/* the roaming is cancelled. Simply complete the command */
 		sms_log(pMac, LOG1, FL("Roam command canceled"));
 		sms_log(pMac, LOG1, FL("Roam command canceled"));
-		csr_roam_complete(pMac, eCsrNothingToJoin, NULL);
+		csr_roam_complete(pMac, eCsrNothingToJoin, NULL, sessionId);
 		return QDF_STATUS_E_FAILURE;
 		return QDF_STATUS_E_FAILURE;
 	}
 	}
 	if (pCommand->u.roamCmd.pRoamBssEntry) {
 	if (pCommand->u.roamCmd.pRoamBssEntry) {
@@ -5591,7 +5594,7 @@ QDF_STATUS csr_process_ft_reassoc_roam_command(tpAniSirGlobal pMac,
 	} else {
 	} else {
 		/* the roaming is cancelled. Simply complete the command */
 		/* the roaming is cancelled. Simply complete the command */
 		sms_log(pMac, LOG1, FL("Roam command canceled"));
 		sms_log(pMac, LOG1, FL("Roam command canceled"));
-		csr_roam_complete(pMac, eCsrNothingToJoin, NULL);
+		csr_roam_complete(pMac, eCsrNothingToJoin, NULL, sessionId);
 		return QDF_STATUS_E_FAILURE;
 		return QDF_STATUS_E_FAILURE;
 	}
 	}
 	status = csr_roam_issue_reassociate(pMac, sessionId, pBssDesc,
 	status = csr_roam_issue_reassociate(pMac, sessionId, pBssDesc,
@@ -5813,7 +5816,7 @@ void csr_reinit_wm_status_change_cmd(tpAniSirGlobal pMac, tSmeCmd *pCommand)
 }
 }
 
 
 void csr_roam_complete(tpAniSirGlobal pMac, eCsrRoamCompleteResult Result,
 void csr_roam_complete(tpAniSirGlobal pMac, eCsrRoamCompleteResult Result,
-		       void *Context)
+		       void *Context, uint8_t session_id)
 {
 {
 	tListElem *pEntry;
 	tListElem *pEntry;
 	tSmeCmd *pCommand;
 	tSmeCmd *pCommand;
@@ -7652,7 +7655,8 @@ QDF_STATUS csr_roam_issue_reassoc(tpAniSirGlobal pMac, uint32_t sessionId,
 	return status;
 	return status;
 }
 }
 
 
-QDF_STATUS csr_dequeue_roam_command(tpAniSirGlobal pMac, eCsrRoamReason reason)
+QDF_STATUS csr_dequeue_roam_command(tpAniSirGlobal pMac, eCsrRoamReason reason,
+					uint8_t session_id)
 {
 {
 	tListElem *pEntry;
 	tListElem *pEntry;
 	tSmeCmd *pCommand;
 	tSmeCmd *pCommand;
@@ -8155,7 +8159,7 @@ QDF_STATUS csr_roam_process_disassoc_deauth(tpAniSirGlobal pMac, tSmeCmd *pComma
 		status = QDF_STATUS_E_FAILURE;
 		status = QDF_STATUS_E_FAILURE;
 	}
 	}
 	if (fComplete) {
 	if (fComplete) {
-		csr_roam_complete(pMac, eCsrNothingToJoin, NULL);
+		csr_roam_complete(pMac, eCsrNothingToJoin, NULL, sessionId);
 	}
 	}
 
 
 	if (QDF_IS_STATUS_SUCCESS(status)) {
 	if (QDF_IS_STATUS_SUCCESS(status)) {
@@ -8582,7 +8586,8 @@ static void csr_roam_join_rsp_processor(tpAniSirGlobal pMac,
 		 * the response to upper layers
 		 * the response to upper layers
 		 * */
 		 * */
 		session_ptr->join_bssid_count = 0;
 		session_ptr->join_bssid_count = 0;
-		csr_roam_complete(pMac, eCsrJoinSuccess, (void *)pSmeJoinRsp);
+		csr_roam_complete(pMac, eCsrJoinSuccess, (void *)pSmeJoinRsp,
+				pSmeJoinRsp->sessionId);
 	} else {
 	} else {
 		uint32_t roamId = 0;
 		uint32_t roamId = 0;
 		bool is_dis_pending;
 		bool is_dis_pending;
@@ -8641,7 +8646,8 @@ static void csr_roam_join_rsp_processor(tpAniSirGlobal pMac,
 					FL("disconnect is pending, complete roam"));
 					FL("disconnect is pending, complete roam"));
 
 
 			session_ptr->join_bssid_count = 0;
 			session_ptr->join_bssid_count = 0;
-			csr_roam_complete(pMac, eCsrNothingToJoin, NULL);
+			csr_roam_complete(pMac, eCsrNothingToJoin, NULL,
+					pSmeJoinRsp->sessionId);
 		}
 		}
 	} /*else: ( eSIR_SME_SUCCESS == pSmeJoinRsp->statusCode ) */
 	} /*else: ( eSIR_SME_SUCCESS == pSmeJoinRsp->statusCode ) */
 }
 }
@@ -8665,7 +8671,8 @@ static QDF_STATUS csr_roam_issue_join(tpAniSirGlobal pMac, uint32_t sessionId,
 	return status;
 	return status;
 }
 }
 
 
-void csr_roam_reissue_roam_command(tpAniSirGlobal pMac)
+static void
+csr_roam_reissue_roam_command(tpAniSirGlobal pMac, uint8_t session_id)
 {
 {
 	tListElem *pEntry;
 	tListElem *pEntry;
 	tSmeCmd *pCommand;
 	tSmeCmd *pCommand;
@@ -8708,7 +8715,8 @@ void csr_roam_reissue_roam_command(tpAniSirGlobal pMac)
 							      true)) {
 							      true)) {
 			sms_log(pMac, LOGW,
 			sms_log(pMac, LOGW,
 				FL("Failed to reissue join command"));
 				FL("Failed to reissue join command"));
-			csr_roam_complete(pMac, eCsrNothingToJoin, NULL);
+			csr_roam_complete(pMac, eCsrNothingToJoin, NULL,
+					session_id);
 		}
 		}
 		return;
 		return;
 	}
 	}
@@ -8726,7 +8734,7 @@ void csr_roam_reissue_roam_command(tpAniSirGlobal pMac)
 					eCSR_ROAM_SUBSTATE_STOP_BSS_REQ))) {
 					eCSR_ROAM_SUBSTATE_STOP_BSS_REQ))) {
 		sms_log(pMac, LOGE,
 		sms_log(pMac, LOGE,
 			FL("Failed to reissue stop_bss command for WDS"));
 			FL("Failed to reissue stop_bss command for WDS"));
-		csr_roam_complete(pMac, eCsrNothingToJoin, NULL);
+		csr_roam_complete(pMac, eCsrNothingToJoin, NULL, session_id);
 	}
 	}
 }
 }
 
 
@@ -8799,7 +8807,8 @@ bool csr_is_roam_command_waiting(tpAniSirGlobal pMac)
 	return fRet;
 	return fRet;
 }
 }
 
 
-bool csr_is_scan_for_roam_command_active(tpAniSirGlobal pMac)
+bool csr_is_scan_for_roam_command_active(tpAniSirGlobal pMac,
+					uint8_t session_id)
 {
 {
 	bool fRet = false;
 	bool fRet = false;
 	tListElem *pEntry;
 	tListElem *pEntry;
@@ -8821,7 +8830,7 @@ bool csr_is_scan_for_roam_command_active(tpAniSirGlobal pMac)
 
 
 static void
 static void
 csr_roaming_state_config_cnf_processor(tpAniSirGlobal mac_ctx,
 csr_roaming_state_config_cnf_processor(tpAniSirGlobal mac_ctx,
-				       uint32_t result)
+			uint32_t result, uint8_t sme_session_id)
 {
 {
 	tListElem *entry = csr_ll_peek_head(&mac_ctx->sme.smeCmdActiveList,
 	tListElem *entry = csr_ll_peek_head(&mac_ctx->sme.smeCmdActiveList,
 					     LL_ACCESS_LOCK);
 					     LL_ACCESS_LOCK);
@@ -8849,7 +8858,8 @@ csr_roaming_state_config_cnf_processor(tpAniSirGlobal mac_ctx,
 	if (CSR_IS_ROAMING(session) && session->fCancelRoaming) {
 	if (CSR_IS_ROAMING(session) && session->fCancelRoaming) {
 		/* the roaming is cancelled. Simply complete the command */
 		/* the roaming is cancelled. Simply complete the command */
 		sms_log(mac_ctx, LOGW, FL("Roam command canceled"));
 		sms_log(mac_ctx, LOGW, FL("Roam command canceled"));
-		csr_roam_complete(mac_ctx, eCsrNothingToJoin, NULL);
+		csr_roam_complete(mac_ctx, eCsrNothingToJoin, NULL,
+					sme_session_id);
 		return;
 		return;
 	}
 	}
 
 
@@ -8860,7 +8870,8 @@ csr_roaming_state_config_cnf_processor(tpAniSirGlobal mac_ctx,
 			FL("Roam cmd (reason %d) aborted(roaming completed)"),
 			FL("Roam cmd (reason %d) aborted(roaming completed)"),
 			cmd->u.roamCmd.roamReason);
 			cmd->u.roamCmd.roamReason);
 		csr_set_abort_roaming_command(mac_ctx, cmd);
 		csr_set_abort_roaming_command(mac_ctx, cmd);
-		csr_roam_complete(mac_ctx, eCsrNothingToJoin, NULL);
+		csr_roam_complete(mac_ctx, eCsrNothingToJoin, NULL,
+				sme_session_id);
 		return;
 		return;
 	}
 	}
 
 
@@ -8877,10 +8888,10 @@ csr_roaming_state_config_cnf_processor(tpAniSirGlobal mac_ctx,
 			if (csr_is_bss_type_ibss
 			if (csr_is_bss_type_ibss
 				    (cmd->u.roamCmd.roamProfile.BSSType)) {
 				    (cmd->u.roamCmd.roamProfile.BSSType)) {
 				csr_roam_complete(mac_ctx, eCsrStartBssFailure,
 				csr_roam_complete(mac_ctx, eCsrStartBssFailure,
-						  NULL);
+						  NULL, sme_session_id);
 			} else {
 			} else {
 				csr_roam_complete(mac_ctx, eCsrNothingToJoin,
 				csr_roam_complete(mac_ctx, eCsrNothingToJoin,
-						  NULL);
+						  NULL, sme_session_id);
 			}
 			}
 		}
 		}
 		return;
 		return;
@@ -8908,7 +8919,8 @@ csr_roaming_state_config_cnf_processor(tpAniSirGlobal mac_ctx,
 						cmd->u.roamCmd.roamId))) {
 						cmd->u.roamCmd.roamId))) {
 			sms_log(mac_ctx, LOGE, FL("CSR start BSS failed"));
 			sms_log(mac_ctx, LOGE, FL("CSR start BSS failed"));
 			/* We need to complete the command */
 			/* We need to complete the command */
-			csr_roam_complete(mac_ctx, eCsrStartBssFailure, NULL);
+			csr_roam_complete(mac_ctx, eCsrStartBssFailure, NULL,
+					sme_session_id);
 		}
 		}
 		return;
 		return;
 	}
 	}
@@ -8916,7 +8928,8 @@ csr_roaming_state_config_cnf_processor(tpAniSirGlobal mac_ctx,
 	if (!cmd->u.roamCmd.pRoamBssEntry) {
 	if (!cmd->u.roamCmd.pRoamBssEntry) {
 		sms_log(mac_ctx, LOGE, FL("pRoamBssEntry is NULL"));
 		sms_log(mac_ctx, LOGE, FL("pRoamBssEntry is NULL"));
 		/* We need to complete the command */
 		/* We need to complete the command */
-		csr_roam_complete(mac_ctx, eCsrJoinFailure, NULL);
+		csr_roam_complete(mac_ctx, eCsrJoinFailure, NULL,
+				sme_session_id);
 		return;
 		return;
 	}
 	}
 
 
@@ -9045,9 +9058,11 @@ static void csr_roam_roaming_state_reassoc_rsp_processor(tpAniSirGlobal pMac,
 			/* Need to dig more on indicating events to SME QoS module */
 			/* Need to dig more on indicating events to SME QoS module */
 			sme_qos_csr_event_ind(pMac, pSmeJoinRsp->sessionId,
 			sme_qos_csr_event_ind(pMac, pSmeJoinRsp->sessionId,
 					      SME_QOS_CSR_HANDOFF_COMPLETE, NULL);
 					      SME_QOS_CSR_HANDOFF_COMPLETE, NULL);
-			csr_roam_complete(pMac, result, pSmeJoinRsp);
+			csr_roam_complete(pMac, result, pSmeJoinRsp,
+					pSmeJoinRsp->sessionId);
 		} else {
 		} else {
-			csr_roam_complete(pMac, result, NULL);
+			csr_roam_complete(pMac, result, NULL,
+					pSmeJoinRsp->sessionId);
 		}
 		}
 	}
 	}
 	/* Should we handle this similar to handling the join failure? Is it ok
 	/* Should we handle this similar to handling the join failure? Is it ok
@@ -9085,7 +9100,8 @@ static void csr_roam_roaming_state_reassoc_rsp_processor(tpAniSirGlobal pMac,
 				 * disassoc to the AP with which we were trying
 				 * disassoc to the AP with which we were trying
 				 * to reassoc.
 				 * to reassoc.
 				 */
 				 */
-				csr_roam_complete(pMac, eCsrJoinFailure, NULL);
+				csr_roam_complete(pMac, eCsrJoinFailure, NULL,
+						pSmeJoinRsp->sessionId);
 				return;
 				return;
 			}
 			}
 		}
 		}
@@ -9097,7 +9113,8 @@ static void csr_roam_roaming_state_reassoc_rsp_processor(tpAniSirGlobal pMac,
 			    (csr_roam_issue_disassociate
 			    (csr_roam_issue_disassociate
 				    (pMac, pSmeJoinRsp->sessionId,
 				    (pMac, pSmeJoinRsp->sessionId,
 				    eCSR_ROAM_SUBSTATE_DISASSOC_REASSOC_FAILURE, false))) {
 				    eCSR_ROAM_SUBSTATE_DISASSOC_REASSOC_FAILURE, false))) {
-			csr_roam_complete(pMac, eCsrJoinFailure, NULL);
+			csr_roam_complete(pMac, eCsrJoinFailure, NULL,
+					pSmeJoinRsp->sessionId);
 		}
 		}
 	}
 	}
 }
 }
@@ -9132,10 +9149,10 @@ static void csr_roam_roaming_state_stop_bss_rsp_processor(tpAniSirGlobal pMac,
 			if (pSmeRsp->statusCode != eSIR_SME_SUCCESS)
 			if (pSmeRsp->statusCode != eSIR_SME_SUCCESS)
 				result_code = eCsrStopBssFailure;
 				result_code = eCsrStopBssFailure;
 		}
 		}
-		csr_roam_complete(pMac, result_code, NULL);
+		csr_roam_complete(pMac, result_code, NULL, pSmeRsp->sessionId);
 	} else if (CSR_IS_ROAM_SUBSTATE_DISCONNECT_CONTINUE(pMac,
 	} else if (CSR_IS_ROAM_SUBSTATE_DISCONNECT_CONTINUE(pMac,
 			pSmeRsp->sessionId)) {
 			pSmeRsp->sessionId)) {
-		csr_roam_reissue_roam_command(pMac);
+		csr_roam_reissue_roam_command(pMac, pSmeRsp->sessionId);
 	}
 	}
 }
 }
 
 
@@ -9230,7 +9247,7 @@ csr_post_roam_failure(tpAniSirGlobal mac_ctx,
 		sms_log(mac_ctx, LOGE,
 		sms_log(mac_ctx, LOGE,
 			FL("csr_roam_issue_disassociate failed, status %d"),
 			FL("csr_roam_issue_disassociate failed, status %d"),
 			status);
 			status);
-		csr_roam_complete(mac_ctx, eCsrJoinFailure, NULL);
+		csr_roam_complete(mac_ctx, eCsrJoinFailure, NULL, session_id);
 	}
 	}
 }
 }
 
 
@@ -9309,7 +9326,7 @@ void csr_roam_roaming_state_disassoc_rsp_processor(tpAniSirGlobal pMac,
 
 
 	if (CSR_IS_ROAM_SUBSTATE_DISASSOC_NO_JOIN(pMac, sessionId)) {
 	if (CSR_IS_ROAM_SUBSTATE_DISASSOC_NO_JOIN(pMac, sessionId)) {
 		sms_log(pMac, LOG2, "***eCsrNothingToJoin***");
 		sms_log(pMac, LOG2, "***eCsrNothingToJoin***");
-		csr_roam_complete(pMac, eCsrNothingToJoin, NULL);
+		csr_roam_complete(pMac, eCsrNothingToJoin, NULL, sessionId);
 	} else if (CSR_IS_ROAM_SUBSTATE_DISASSOC_FORCED(pMac, sessionId) ||
 	} else if (CSR_IS_ROAM_SUBSTATE_DISASSOC_FORCED(pMac, sessionId) ||
 		   CSR_IS_ROAM_SUBSTATE_DISASSOC_REQ(pMac, sessionId)) {
 		   CSR_IS_ROAM_SUBSTATE_DISASSOC_REQ(pMac, sessionId)) {
 		if (eSIR_SME_SUCCESS == SmeDisassocRsp.statusCode) {
 		if (eSIR_SME_SUCCESS == SmeDisassocRsp.statusCode) {
@@ -9320,7 +9337,7 @@ void csr_roam_roaming_state_disassoc_rsp_processor(tpAniSirGlobal pMac,
 			 * csr_roam_complete so no need to do anything here
 			 * csr_roam_complete so no need to do anything here
 			 */
 			 */
 		}
 		}
-		csr_roam_complete(pMac, eCsrNothingToJoin, NULL);
+		csr_roam_complete(pMac, eCsrNothingToJoin, NULL, sessionId);
 	} else if (CSR_IS_ROAM_SUBSTATE_DISASSOC_HO(pMac, sessionId)) {
 	} else if (CSR_IS_ROAM_SUBSTATE_DISASSOC_HO(pMac, sessionId)) {
 		QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG,
 		QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG,
 			  FL("CSR SmeDisassocReq due to HO on session %d"),
 			  FL("CSR SmeDisassocReq due to HO on session %d"),
@@ -9388,7 +9405,7 @@ POST_ROAM_FAILURE:
 	} /* else if ( CSR_IS_ROAM_SUBSTATE_DISASSOC_HO( pMac ) ) */
 	} /* else if ( CSR_IS_ROAM_SUBSTATE_DISASSOC_HO( pMac ) ) */
 	else if (CSR_IS_ROAM_SUBSTATE_REASSOC_FAIL(pMac, sessionId)) {
 	else if (CSR_IS_ROAM_SUBSTATE_REASSOC_FAIL(pMac, sessionId)) {
 		/* Disassoc due to Reassoc failure falls into this codepath */
 		/* Disassoc due to Reassoc failure falls into this codepath */
-		csr_roam_complete(pMac, eCsrJoinFailure, NULL);
+		csr_roam_complete(pMac, eCsrJoinFailure, NULL, sessionId);
 	} else {
 	} else {
 		if (eSIR_SME_SUCCESS == SmeDisassocRsp.statusCode) {
 		if (eSIR_SME_SUCCESS == SmeDisassocRsp.statusCode) {
 			/*
 			/*
@@ -9411,7 +9428,7 @@ POST_ROAM_FAILURE:
 				SmeDisassocRsp.statusCode);
 				SmeDisassocRsp.statusCode);
 		}
 		}
 		/* We are not done yet. Get the data and continue roaming */
 		/* We are not done yet. Get the data and continue roaming */
-		csr_roam_reissue_roam_command(pMac);
+		csr_roam_reissue_roam_command(pMac, sessionId);
 	}
 	}
 }
 }
 
 
@@ -9424,7 +9441,8 @@ static void csr_roam_roaming_state_deauth_rsp_processor(tpAniSirGlobal pMac,
 	statusCode = csr_get_de_auth_rsp_status_code(pSmeRsp);
 	statusCode = csr_get_de_auth_rsp_status_code(pSmeRsp);
 	pMac->roam.deauthRspStatus = statusCode;
 	pMac->roam.deauthRspStatus = statusCode;
 	if (CSR_IS_ROAM_SUBSTATE_DEAUTH_REQ(pMac, pSmeRsp->sessionId)) {
 	if (CSR_IS_ROAM_SUBSTATE_DEAUTH_REQ(pMac, pSmeRsp->sessionId)) {
-		csr_roam_complete(pMac, eCsrNothingToJoin, NULL);
+		csr_roam_complete(pMac, eCsrNothingToJoin, NULL,
+				pSmeRsp->sessionId);
 	} else {
 	} else {
 		if (eSIR_SME_SUCCESS == statusCode) {
 		if (eSIR_SME_SUCCESS == statusCode) {
 			/* Successfully deauth from the 'old' Bss... */
 			/* Successfully deauth from the 'old' Bss... */
@@ -9437,7 +9455,7 @@ static void csr_roam_roaming_state_deauth_rsp_processor(tpAniSirGlobal pMac,
 				statusCode);
 				statusCode);
 		}
 		}
 		/* We are not done yet. Get the data and continue roaming */
 		/* We are not done yet. Get the data and continue roaming */
-		csr_roam_reissue_roam_command(pMac);
+		csr_roam_reissue_roam_command(pMac, pSmeRsp->sessionId);
 	}
 	}
 }
 }
 
 
@@ -9457,7 +9475,8 @@ static void csr_roam_roaming_state_start_bss_rsp_processor(tpAniSirGlobal pMac,
 		/* Let csr_roam_complete decide what to do */
 		/* Let csr_roam_complete decide what to do */
 		result = eCsrStartBssFailure;
 		result = eCsrStartBssFailure;
 	}
 	}
-	csr_roam_complete(pMac, result, pSmeStartBssRsp);
+	csr_roam_complete(pMac, result, pSmeStartBssRsp,
+				pSmeStartBssRsp->sessionId);
 }
 }
 
 
 /**
 /**
@@ -11884,7 +11903,8 @@ QDF_STATUS csr_roam_lost_link(tpAniSirGlobal pMac, uint32_t sessionId,
 }
 }
 
 
 
 
-static void csr_roam_wm_status_change_complete(tpAniSirGlobal pMac)
+static void csr_roam_wm_status_change_complete(tpAniSirGlobal pMac,
+						uint8_t session_id)
 {
 {
 	tListElem *pEntry;
 	tListElem *pEntry;
 	tSmeCmd *pCommand;
 	tSmeCmd *pCommand;
@@ -11953,7 +11973,7 @@ void csr_roam_process_wm_status_change_command(tpAniSirGlobal pMac,
 	}
 	}
 	/* Lost Link just triggers a roaming sequence.  We can complte the Lost Link */
 	/* Lost Link just triggers a roaming sequence.  We can complte the Lost Link */
 	/* command here since there is nothing else to do. */
 	/* command here since there is nothing else to do. */
-	csr_roam_wm_status_change_complete(pMac);
+	csr_roam_wm_status_change_complete(pMac, pCommand->sessionId);
 }
 }
 
 
 
 

+ 1 - 1
core/sme/src/csr/csr_api_scan.c

@@ -6978,7 +6978,7 @@ QDF_STATUS csr_scan_abort_mac_scan_not_for_connect(tpAniSirGlobal pMac,
 						   uint8_t sessionId)
 						   uint8_t sessionId)
 {
 {
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
-	if (!csr_is_scan_for_roam_command_active(pMac)) {
+	if (!csr_is_scan_for_roam_command_active(pMac, sessionId)) {
 		/*
 		/*
 		 * Only abort the scan if it is not used for other roam/connect
 		 * Only abort the scan if it is not used for other roam/connect
 		 * purpose
 		 * purpose

+ 4 - 3
core/sme/src/csr/csr_cmd_process.c

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2011-2016 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2017 The Linux Foundation. All rights reserved.
  *
  *
  * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
  * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
  *
  *
@@ -151,13 +151,14 @@ QDF_STATUS csr_msg_processor(tpAniSirGlobal mac_ctx, void *msg_buf)
 					sms_log(mac_ctx, LOGE,
 					sms_log(mac_ctx, LOGE,
 						FL("Dequeue eSmeCommandRoam command with reason eCsrPerformPreauth"));
 						FL("Dequeue eSmeCommandRoam command with reason eCsrPerformPreauth"));
 					csr_dequeue_roam_command(mac_ctx,
 					csr_dequeue_roam_command(mac_ctx,
-						eCsrPerformPreauth);
+						eCsrPerformPreauth, session_id);
 				} else if (eWNI_SME_REASSOC_RSP ==
 				} else if (eWNI_SME_REASSOC_RSP ==
 						sme_rsp->messageType) {
 						sme_rsp->messageType) {
 					sms_log(mac_ctx, LOGE,
 					sms_log(mac_ctx, LOGE,
 						FL("Dequeue eSmeCommandRoam command with reason eCsrSmeIssuedFTReassoc"));
 						FL("Dequeue eSmeCommandRoam command with reason eCsrSmeIssuedFTReassoc"));
 					csr_dequeue_roam_command(mac_ctx,
 					csr_dequeue_roam_command(mac_ctx,
-						eCsrSmeIssuedFTReassoc);
+						eCsrSmeIssuedFTReassoc,
+						session_id);
 				}
 				}
 			}
 			}
 			break;
 			break;

+ 8 - 5
core/sme/src/csr/csr_inside_api.h

@@ -208,7 +208,7 @@ bool csr_scan_complete(tpAniSirGlobal pMac, tSirSmeScanRsp *pScanRsp);
 void csr_release_command_roam(tpAniSirGlobal pMac, tSmeCmd *pCommand);
 void csr_release_command_roam(tpAniSirGlobal pMac, tSmeCmd *pCommand);
 void csr_release_command_scan(tpAniSirGlobal pMac, tSmeCmd *pCommand);
 void csr_release_command_scan(tpAniSirGlobal pMac, tSmeCmd *pCommand);
 void csr_release_command_wm_status_change(tpAniSirGlobal pMac, tSmeCmd *pCommand);
 void csr_release_command_wm_status_change(tpAniSirGlobal pMac, tSmeCmd *pCommand);
-extern void csr_release_roc_req_cmd(tpAniSirGlobal mac_ctx);
+extern void csr_release_roc_req_cmd(tpAniSirGlobal mac_ctx, uint8_t session_id);
 
 
 bool csr_is_duplicate_bss_description(tpAniSirGlobal pMac,
 bool csr_is_duplicate_bss_description(tpAniSirGlobal pMac,
 				      tSirBssDescription *pSirBssDesc1,
 				      tSirBssDescription *pSirBssDesc1,
@@ -333,7 +333,7 @@ QDF_STATUS csr_roam_issue_reassoc(tpAniSirGlobal pMac, uint32_t sessionId,
 				  eCsrRoamReason reason, uint32_t roamId,
 				  eCsrRoamReason reason, uint32_t roamId,
 				  bool fImediate);
 				  bool fImediate);
 void csr_roam_complete(tpAniSirGlobal pMac, eCsrRoamCompleteResult Result,
 void csr_roam_complete(tpAniSirGlobal pMac, eCsrRoamCompleteResult Result,
-		       void *Context);
+		       void *Context, uint8_t session_id);
 QDF_STATUS csr_roam_issue_set_context_req(tpAniSirGlobal pMac, uint32_t sessionId,
 QDF_STATUS csr_roam_issue_set_context_req(tpAniSirGlobal pMac, uint32_t sessionId,
 					  eCsrEncryptionType EncryptType,
 					  eCsrEncryptionType EncryptType,
 					  tSirBssDescription *pBssDescription,
 					  tSirBssDescription *pBssDescription,
@@ -361,7 +361,8 @@ bool csr_is_same_profile(tpAniSirGlobal pMac, tCsrRoamConnectedProfile *pProfile
 			 tCsrRoamProfile *pProfile2);
 			 tCsrRoamProfile *pProfile2);
 bool csr_is_roam_command_waiting(tpAniSirGlobal pMac);
 bool csr_is_roam_command_waiting(tpAniSirGlobal pMac);
 bool csr_is_roam_command_waiting_for_session(tpAniSirGlobal pMac, uint32_t sessionId);
 bool csr_is_roam_command_waiting_for_session(tpAniSirGlobal pMac, uint32_t sessionId);
-bool csr_is_scan_for_roam_command_active(tpAniSirGlobal pMac);
+bool csr_is_scan_for_roam_command_active(tpAniSirGlobal pMac,
+					uint8_t session_id);
 eRoamCmdStatus csr_get_roam_complete_status(tpAniSirGlobal pMac,
 eRoamCmdStatus csr_get_roam_complete_status(tpAniSirGlobal pMac,
 					    uint32_t sessionId);
 					    uint32_t sessionId);
 /* pBand can be NULL if caller doesn't need to get it */
 /* pBand can be NULL if caller doesn't need to get it */
@@ -411,7 +412,8 @@ bool csr_roam_is_channel_valid(tpAniSirGlobal pMac, uint8_t channel);
 /* pNumChan is a caller allocated space with the sizeof pChannels */
 /* pNumChan is a caller allocated space with the sizeof pChannels */
 QDF_STATUS csr_get_cfg_valid_channels(tpAniSirGlobal pMac, uint8_t *pChannels,
 QDF_STATUS csr_get_cfg_valid_channels(tpAniSirGlobal pMac, uint8_t *pChannels,
 				      uint32_t *pNumChan);
 				      uint32_t *pNumChan);
-void csr_roam_ccm_cfg_set_callback(tpAniSirGlobal pMac, int32_t result);
+void csr_roam_ccm_cfg_set_callback(tpAniSirGlobal pMac, int32_t result,
+					uint8_t session_id);
 
 
 int8_t csr_get_cfg_max_tx_power(tpAniSirGlobal pMac, uint8_t channel);
 int8_t csr_get_cfg_max_tx_power(tpAniSirGlobal pMac, uint8_t channel);
 
 
@@ -1012,7 +1014,8 @@ void update_cckmtsf(uint32_t *timeStamp0, uint32_t *timeStamp1,
 QDF_STATUS csr_roam_enqueue_preauth(tpAniSirGlobal pMac, uint32_t sessionId,
 QDF_STATUS csr_roam_enqueue_preauth(tpAniSirGlobal pMac, uint32_t sessionId,
 				    tpSirBssDescription pBssDescription,
 				    tpSirBssDescription pBssDescription,
 				    eCsrRoamReason reason, bool fImmediate);
 				    eCsrRoamReason reason, bool fImmediate);
-QDF_STATUS csr_dequeue_roam_command(tpAniSirGlobal pMac, eCsrRoamReason reason);
+QDF_STATUS csr_dequeue_roam_command(tpAniSirGlobal pMac, eCsrRoamReason reason,
+					uint8_t session_id);
 void csr_init_occupied_channels_list(tpAniSirGlobal pMac, uint8_t sessionId);
 void csr_init_occupied_channels_list(tpAniSirGlobal pMac, uint8_t sessionId);
 bool csr_neighbor_roam_is_new_connected_profile(tpAniSirGlobal pMac,
 bool csr_neighbor_roam_is_new_connected_profile(tpAniSirGlobal pMac,
 						uint8_t sessionId);
 						uint8_t sessionId);

+ 1 - 1
core/sme/src/csr/csr_roam_preauth.c

@@ -394,7 +394,7 @@ ABORT_PREAUTH:
 	}
 	}
 
 
 DEQ_PREAUTH:
 DEQ_PREAUTH:
-	csr_dequeue_roam_command(mac_ctx, eCsrPerformPreauth);
+	csr_dequeue_roam_command(mac_ctx, eCsrPerformPreauth, session_id);
 	return preauth_processed;
 	return preauth_processed;
 }
 }
 
 

+ 13 - 5
core/sme/src/csr/csr_tdls_process.c

@@ -51,7 +51,7 @@
  * commands are removed after getting reponse from PE.
  * commands are removed after getting reponse from PE.
  */
  */
 static QDF_STATUS csr_tdls_remove_sme_cmd(tpAniSirGlobal pMac,
 static QDF_STATUS csr_tdls_remove_sme_cmd(tpAniSirGlobal pMac,
-					  eSmeCommandType cmdType)
+			eSmeCommandType cmdType, uint8_t session_id)
 {
 {
 	QDF_STATUS status = QDF_STATUS_E_FAILURE;
 	QDF_STATUS status = QDF_STATUS_E_FAILURE;
 	tListElem *pEntry;
 	tListElem *pEntry;
@@ -688,6 +688,7 @@ QDF_STATUS tdls_msg_processor(tpAniSirGlobal pMac, uint16_t msgType,
 {
 {
 	tCsrRoamInfo roamInfo = { 0 };
 	tCsrRoamInfo roamInfo = { 0 };
 	eCsrRoamResult roamResult;
 	eCsrRoamResult roamResult;
+	tSirSmeRsp *sme_rsp = pMsgBuf;
 	tSirTdlsAddStaRsp *addStaRsp = (tSirTdlsAddStaRsp *) pMsgBuf;
 	tSirTdlsAddStaRsp *addStaRsp = (tSirTdlsAddStaRsp *) pMsgBuf;
 	tSirTdlsDelStaRsp *delStaRsp = (tSirTdlsDelStaRsp *) pMsgBuf;
 	tSirTdlsDelStaRsp *delStaRsp = (tSirTdlsDelStaRsp *) pMsgBuf;
 	tpSirTdlsDelStaInd pSirTdlsDelStaInd = (tpSirTdlsDelStaInd) pMsgBuf;
 	tpSirTdlsDelStaInd pSirTdlsDelStaInd = (tpSirTdlsDelStaInd) pMsgBuf;
@@ -702,7 +703,11 @@ QDF_STATUS tdls_msg_processor(tpAniSirGlobal pMac, uint16_t msgType,
 	switch (msgType) {
 	switch (msgType) {
 	case eWNI_SME_TDLS_SEND_MGMT_RSP:
 	case eWNI_SME_TDLS_SEND_MGMT_RSP:
 		/* remove pending eSmeCommandTdlsDiscovery command */
 		/* remove pending eSmeCommandTdlsDiscovery command */
-		csr_tdls_remove_sme_cmd(pMac, eSmeCommandTdlsSendMgmt);
+		QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_INFO,
+			FL("sme_rsp->sessionId[%d] eSmeCommandTdlsSendMgmt"),
+			sme_rsp->sessionId);
+		csr_tdls_remove_sme_cmd(pMac, eSmeCommandTdlsSendMgmt,
+					sme_rsp->sessionId);
 		break;
 		break;
 	case eWNI_SME_TDLS_ADD_STA_RSP:
 	case eWNI_SME_TDLS_ADD_STA_RSP:
 		qdf_copy_macaddr(&roamInfo.peerMac, &addStaRsp->peermac);
 		qdf_copy_macaddr(&roamInfo.peerMac, &addStaRsp->peermac);
@@ -723,7 +728,8 @@ QDF_STATUS tdls_msg_processor(tpAniSirGlobal pMac, uint16_t msgType,
 				roamResult);
 				roamResult);
 
 
 		/* remove pending eSmeCommandTdlsDiscovery command */
 		/* remove pending eSmeCommandTdlsDiscovery command */
-		csr_tdls_remove_sme_cmd(pMac, eSmeCommandTdlsAddPeer);
+		csr_tdls_remove_sme_cmd(pMac, eSmeCommandTdlsAddPeer,
+					addStaRsp->sessionId);
 		break;
 		break;
 	case eWNI_SME_TDLS_DEL_STA_RSP:
 	case eWNI_SME_TDLS_DEL_STA_RSP:
 		qdf_copy_macaddr(&roamInfo.peerMac, &delStaRsp->peermac);
 		qdf_copy_macaddr(&roamInfo.peerMac, &delStaRsp->peermac);
@@ -738,7 +744,8 @@ QDF_STATUS tdls_msg_processor(tpAniSirGlobal pMac, uint16_t msgType,
 				eCSR_ROAM_TDLS_STATUS_UPDATE,
 				eCSR_ROAM_TDLS_STATUS_UPDATE,
 				eCSR_ROAM_RESULT_DELETE_TDLS_PEER);
 				eCSR_ROAM_RESULT_DELETE_TDLS_PEER);
 
 
-		csr_tdls_remove_sme_cmd(pMac, eSmeCommandTdlsDelPeer);
+		csr_tdls_remove_sme_cmd(pMac, eSmeCommandTdlsDelPeer,
+					delStaRsp->sessionId);
 		break;
 		break;
 	case eWNI_SME_TDLS_DEL_STA_IND:
 	case eWNI_SME_TDLS_DEL_STA_IND:
 		qdf_copy_macaddr(&roamInfo.peerMac,
 		qdf_copy_macaddr(&roamInfo.peerMac,
@@ -777,7 +784,8 @@ QDF_STATUS tdls_msg_processor(tpAniSirGlobal pMac, uint16_t msgType,
 				eCSR_ROAM_TDLS_STATUS_UPDATE,
 				eCSR_ROAM_TDLS_STATUS_UPDATE,
 				eCSR_ROAM_RESULT_LINK_ESTABLISH_REQ_RSP);
 				eCSR_ROAM_RESULT_LINK_ESTABLISH_REQ_RSP);
 		/* remove pending eSmeCommandTdlsLinkEstablish command */
 		/* remove pending eSmeCommandTdlsLinkEstablish command */
-		csr_tdls_remove_sme_cmd(pMac, eSmeCommandTdlsLinkEstablish);
+		csr_tdls_remove_sme_cmd(pMac, eSmeCommandTdlsLinkEstablish,
+				linkEstablishReqRsp->sessionId);
 		break;
 		break;
 	case eWNI_SME_TDLS_SHOULD_DISCOVER:
 	case eWNI_SME_TDLS_SHOULD_DISCOVER:
 		qdf_copy_macaddr(&roamInfo.peerMac, &tevent->peermac);
 		qdf_copy_macaddr(&roamInfo.peerMac, &tevent->peermac);

+ 1 - 1
core/sme/src/p2p/p2p_api.c

@@ -93,7 +93,7 @@ QDF_STATUS p2p_process_remain_on_channel_cmd(tpAniSirGlobal pMac,
 	}
 	}
 error:
 error:
 	if (QDF_STATUS_E_FAILURE == status)
 	if (QDF_STATUS_E_FAILURE == status)
-		csr_release_roc_req_cmd(pMac);
+		csr_release_roc_req_cmd(pMac, p2pRemainonChn->sessionId);
 	return status;
 	return status;
 }
 }