|
@@ -20023,24 +20023,9 @@ void csr_roam_fill_tdls_info(tpAniSirGlobal mac_ctx, tCsrRoamInfo *roam_info,
|
|
|
#endif
|
|
|
|
|
|
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
|
|
-/**
|
|
|
- * csr_roam_synch_callback() - SME level callback for roam synch propagation
|
|
|
- * @mac_ctx: MAC Context
|
|
|
- * @roam_synch_data: Roam synch data buffer pointer
|
|
|
- * @bss_desc: BSS descriptor pointer
|
|
|
- * @reason: Reason for calling the callback
|
|
|
- *
|
|
|
- * This callback is registered with WMA and used after roaming happens in
|
|
|
- * firmware and the call to this routine completes the roam synch
|
|
|
- * propagation at both CSR and HDD levels. The HDD level propagation
|
|
|
- * is achieved through the already defined callback for assoc completion
|
|
|
- * handler.
|
|
|
- *
|
|
|
- * Return: Success or Failure.
|
|
|
- */
|
|
|
-QDF_STATUS csr_roam_synch_callback(tpAniSirGlobal mac_ctx,
|
|
|
+static QDF_STATUS csr_process_roam_sync_callback(tpAniSirGlobal mac_ctx,
|
|
|
roam_offload_synch_ind *roam_synch_data,
|
|
|
- tpSirBssDescription bss_desc, enum sir_roam_op_code reason)
|
|
|
+ tpSirBssDescription bss_desc, enum sir_roam_op_code reason)
|
|
|
{
|
|
|
uint8_t session_id = roam_synch_data->roamedVdevId;
|
|
|
tCsrRoamSession *session = CSR_GET_SESSION(mac_ctx, session_id);
|
|
@@ -20057,14 +20042,8 @@ QDF_STATUS csr_roam_synch_callback(tpAniSirGlobal mac_ctx,
|
|
|
tCsrRoamHTProfile *dst_profile = NULL;
|
|
|
#endif
|
|
|
|
|
|
- status = sme_acquire_global_lock(&mac_ctx->sme);
|
|
|
- if (!QDF_IS_STATUS_SUCCESS(status)) {
|
|
|
- sme_err("LFR3: Locking failed, bailing out");
|
|
|
- return status;
|
|
|
- }
|
|
|
if (!session) {
|
|
|
sme_err("LFR3: Session not found");
|
|
|
- sme_release_global_lock(&mac_ctx->sme);
|
|
|
return QDF_STATUS_E_FAILURE;
|
|
|
}
|
|
|
|
|
@@ -20084,7 +20063,6 @@ QDF_STATUS csr_roam_synch_callback(tpAniSirGlobal mac_ctx,
|
|
|
}
|
|
|
csr_roam_call_callback(mac_ctx, session_id, NULL, 0,
|
|
|
eCSR_ROAM_FT_START, eSIR_SME_SUCCESS);
|
|
|
- sme_release_global_lock(&mac_ctx->sme);
|
|
|
return status;
|
|
|
case SIR_ROAMING_START:
|
|
|
csr_roam_roaming_offload_timer_action(mac_ctx,
|
|
@@ -20092,19 +20070,16 @@ QDF_STATUS csr_roam_synch_callback(tpAniSirGlobal mac_ctx,
|
|
|
ROAMING_OFFLOAD_TIMER_START);
|
|
|
csr_roam_call_callback(mac_ctx, session_id, NULL, 0,
|
|
|
eCSR_ROAM_START, eSIR_SME_SUCCESS);
|
|
|
- sme_release_global_lock(&mac_ctx->sme);
|
|
|
return status;
|
|
|
case SIR_ROAMING_ABORT:
|
|
|
csr_roam_roaming_offload_timer_action(mac_ctx,
|
|
|
0, session_id, ROAMING_OFFLOAD_TIMER_STOP);
|
|
|
csr_roam_call_callback(mac_ctx, session_id, NULL, 0,
|
|
|
eCSR_ROAM_ABORT, eSIR_SME_SUCCESS);
|
|
|
- sme_release_global_lock(&mac_ctx->sme);
|
|
|
return status;
|
|
|
case SIR_ROAM_SYNCH_NAPI_OFF:
|
|
|
csr_roam_call_callback(mac_ctx, session_id, NULL, 0,
|
|
|
eCSR_ROAM_NAPI_OFF, eSIR_SME_SUCCESS);
|
|
|
- sme_release_global_lock(&mac_ctx->sme);
|
|
|
return status;
|
|
|
case SIR_ROAMING_INVOKE_FAIL:
|
|
|
csr_roam_call_callback(mac_ctx, session_id, NULL, 0,
|
|
@@ -20140,14 +20115,12 @@ QDF_STATUS csr_roam_synch_callback(tpAniSirGlobal mac_ctx,
|
|
|
mac_ctx->sme.set_connection_info_cb(false);
|
|
|
session->roam_synch_in_progress = false;
|
|
|
policy_mgr_check_concurrent_intf_and_restart_sap(mac_ctx->psoc);
|
|
|
- sme_release_global_lock(&mac_ctx->sme);
|
|
|
csr_roam_offload_scan(mac_ctx, session_id,
|
|
|
ROAM_SCAN_OFFLOAD_START,
|
|
|
REASON_CONNECT);
|
|
|
return status;
|
|
|
default:
|
|
|
sme_err("LFR3: callback reason %d", reason);
|
|
|
- sme_release_global_lock(&mac_ctx->sme);
|
|
|
return QDF_STATUS_E_FAILURE;
|
|
|
}
|
|
|
session->roam_synch_in_progress = true;
|
|
@@ -20157,7 +20130,6 @@ QDF_STATUS csr_roam_synch_callback(tpAniSirGlobal mac_ctx,
|
|
|
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
|
|
sme_err("LFR3: fail to parse IEs");
|
|
|
session->roam_synch_in_progress = false;
|
|
|
- sme_release_global_lock(&mac_ctx->sme);
|
|
|
return status;
|
|
|
}
|
|
|
conn_profile = &session->connectedProfile;
|
|
@@ -20173,7 +20145,6 @@ QDF_STATUS csr_roam_synch_callback(tpAniSirGlobal mac_ctx,
|
|
|
FL("LFR3: Mem Alloc failed for roam info"));
|
|
|
session->roam_synch_in_progress = false;
|
|
|
qdf_mem_free(ies_local);
|
|
|
- sme_release_global_lock(&mac_ctx->sme);
|
|
|
return QDF_STATUS_E_NOMEM;
|
|
|
}
|
|
|
csr_scan_save_roam_offload_ap_to_scan_cache(mac_ctx, roam_synch_data,
|
|
@@ -20246,7 +20217,6 @@ QDF_STATUS csr_roam_synch_callback(tpAniSirGlobal mac_ctx,
|
|
|
if (roam_info)
|
|
|
qdf_mem_free(roam_info);
|
|
|
qdf_mem_free(ies_local);
|
|
|
- sme_release_global_lock(&mac_ctx->sme);
|
|
|
return QDF_STATUS_E_NOMEM;
|
|
|
}
|
|
|
qdf_mem_copy(roam_info->pbFrames,
|
|
@@ -20387,6 +20357,40 @@ QDF_STATUS csr_roam_synch_callback(tpAniSirGlobal mac_ctx,
|
|
|
qdf_mem_free(roam_info->pbFrames);
|
|
|
qdf_mem_free(roam_info);
|
|
|
qdf_mem_free(ies_local);
|
|
|
+
|
|
|
+ return status;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * csr_roam_synch_callback() - SME level callback for roam synch propagation
|
|
|
+ * @mac_ctx: MAC Context
|
|
|
+ * @roam_synch_data: Roam synch data buffer pointer
|
|
|
+ * @bss_desc: BSS descriptor pointer
|
|
|
+ * @reason: Reason for calling the callback
|
|
|
+ *
|
|
|
+ * This callback is registered with WMA and used after roaming happens in
|
|
|
+ * firmware and the call to this routine completes the roam synch
|
|
|
+ * propagation at both CSR and HDD levels. The HDD level propagation
|
|
|
+ * is achieved through the already defined callback for assoc completion
|
|
|
+ * handler.
|
|
|
+ *
|
|
|
+ * Return: Success or Failure.
|
|
|
+ */
|
|
|
+QDF_STATUS csr_roam_synch_callback(tpAniSirGlobal mac_ctx,
|
|
|
+ roam_offload_synch_ind *roam_synch_data,
|
|
|
+ tpSirBssDescription bss_desc, enum sir_roam_op_code reason)
|
|
|
+{
|
|
|
+ QDF_STATUS status;
|
|
|
+
|
|
|
+ status = sme_acquire_global_lock(&mac_ctx->sme);
|
|
|
+ if (!QDF_IS_STATUS_SUCCESS(status)) {
|
|
|
+ sme_err("LFR3: Locking failed, bailing out");
|
|
|
+ return status;
|
|
|
+ }
|
|
|
+
|
|
|
+ status = csr_process_roam_sync_callback(mac_ctx, roam_synch_data,
|
|
|
+ bss_desc, reason);
|
|
|
+
|
|
|
sme_release_global_lock(&mac_ctx->sme);
|
|
|
|
|
|
return status;
|