|
@@ -8022,17 +8022,42 @@ QDF_STATUS sme_update_is_mawc_ini_feature_enabled(tHalHandle hHal,
|
|
|
--------------------------------------------------------------------------*/
|
|
|
QDF_STATUS sme_stop_roaming(tHalHandle hHal, uint8_t sessionId, uint8_t reason)
|
|
|
{
|
|
|
- tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
|
|
|
- QDF_STATUS status = QDF_STATUS_SUCCESS;
|
|
|
+ struct scheduler_msg wma_msg = {0};
|
|
|
+ tSirRetStatus status;
|
|
|
+ tSirRoamOffloadScanReq *req;
|
|
|
+ tpAniSirGlobal mac_ctx = PMAC_STRUCT(hHal);
|
|
|
|
|
|
- status = sme_acquire_global_lock(&pMac->sme);
|
|
|
- if (QDF_IS_STATUS_SUCCESS(status)) {
|
|
|
- csr_roam_offload_scan(pMac, sessionId, ROAM_SCAN_OFFLOAD_STOP,
|
|
|
- reason);
|
|
|
- sme_release_global_lock(&pMac->sme);
|
|
|
+ if (!CSR_IS_SESSION_VALID(mac_ctx, sessionId)) {
|
|
|
+ sme_err("incorrect session/vdev ID");
|
|
|
+ return QDF_STATUS_E_INVAL;
|
|
|
}
|
|
|
|
|
|
- return status;
|
|
|
+ req = qdf_mem_malloc(sizeof(*req));
|
|
|
+ if (!req) {
|
|
|
+ sme_err("failed to allocated memory");
|
|
|
+ return QDF_STATUS_E_NOMEM;
|
|
|
+ }
|
|
|
+
|
|
|
+ req->Command = ROAM_SCAN_OFFLOAD_STOP;
|
|
|
+ req->reason = REASON_ROAM_SYNCH_FAILED;
|
|
|
+ req->sessionId = sessionId;
|
|
|
+ if (csr_neighbor_middle_of_roaming(mac_ctx, sessionId))
|
|
|
+ req->middle_of_roaming = 1;
|
|
|
+ else
|
|
|
+ csr_roam_reset_roam_params(mac_ctx);
|
|
|
+
|
|
|
+ wma_msg.type = WMA_ROAM_SCAN_OFFLOAD_REQ;
|
|
|
+ wma_msg.bodyptr = req;
|
|
|
+
|
|
|
+ status = wma_post_ctrl_msg(mac_ctx, &wma_msg);
|
|
|
+ if (eSIR_SUCCESS != status) {
|
|
|
+ sme_err("WMA_ROAM_SCAN_OFFLOAD_REQ failed, session_id: %d",
|
|
|
+ sessionId);
|
|
|
+ qdf_mem_free(req);
|
|
|
+ return QDF_STATUS_E_FAULT;
|
|
|
+ }
|
|
|
+
|
|
|
+ return QDF_STATUS_SUCCESS;
|
|
|
}
|
|
|
|
|
|
/*--------------------------------------------------------------------------
|