diff options
| -rw-r--r-- | core/sme/src/csr/csr_api_roam.c | 29 | ||||
| -rw-r--r-- | core/wma/src/wma_scan_roam.c | 25 |
2 files changed, 47 insertions, 7 deletions
diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 54599e059d03..4f601e5e0c0f 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -18930,6 +18930,7 @@ csr_create_roam_scan_offload_request(tpAniSirGlobal mac_ctx, * @mac_ctx: MAC context * @session: Pointer to the CSR Roam Session * @req_buffer: Pointer to the RSO Request buffer + * @enabled: 11k offload enabled/disabled. * * API to update 11k offload params to Roam Scan Offload request buffer * @@ -18937,7 +18938,8 @@ csr_create_roam_scan_offload_request(tpAniSirGlobal mac_ctx, */ static void csr_update_11k_offload_params(tpAniSirGlobal mac_ctx, tCsrRoamSession *session, - tSirRoamOffloadScanReq *req_buffer) + tSirRoamOffloadScanReq *req_buffer, + bool enabled) { struct wmi_11k_offload_params *params = &req_buffer->offload_11k_params; tCsrConfig *csr_config = &mac_ctx->roam.configParam; @@ -18945,7 +18947,15 @@ static void csr_update_11k_offload_params(tpAniSirGlobal mac_ctx, &csr_config->neighbor_report_offload; params->vdev_id = session->sessionId; - params->offload_11k_bitmask = csr_config->offload_11k_enable_bitmask; + + if (enabled) { + params->offload_11k_bitmask = + csr_config->offload_11k_enable_bitmask; + } else { + params->offload_11k_bitmask = 0; + sme_debug("11k offload disabled in RSO"); + return; + } /* * If none of the parameters are enabled, then set the @@ -18957,6 +18967,7 @@ static void csr_update_11k_offload_params(tpAniSirGlobal mac_ctx, sme_err("No valid neighbor report offload params %x", neighbor_report_offload->params_bitmask); params->offload_11k_bitmask = 0; + return; } /* @@ -19989,11 +20000,19 @@ csr_roam_offload_scan(tpAniSirGlobal mac_ctx, uint8_t session_id, csr_update_driver_assoc_ies(mac_ctx, session, req_buf); csr_update_fils_params_rso(mac_ctx, session, req_buf); csr_update_score_params(mac_ctx, req_buf); - if (reason == REASON_CTX_INIT) - csr_update_11k_offload_params(mac_ctx, session, - req_buf); } + /* + * 11k offload is enabled during RSO Start after connect indication and + * 11k offload is disabled during RSO Stop after disconnect indication + */ + if (command == ROAM_SCAN_OFFLOAD_START && + reason == REASON_CTX_INIT) + csr_update_11k_offload_params(mac_ctx, session, req_buf, TRUE); + else if (command == ROAM_SCAN_OFFLOAD_STOP && + reason == REASON_DISCONNECTED) + csr_update_11k_offload_params(mac_ctx, session, req_buf, FALSE); + QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG, "Assoc IE buffer:"); QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG, diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c index 2fa397555f93..a1d4e7350b02 100644 --- a/core/wma/src/wma_scan_roam.c +++ b/core/wma/src/wma_scan_roam.c @@ -1955,7 +1955,11 @@ QDF_STATUS wma_send_offload_11k_params(WMA_HANDLE handle, return QDF_STATUS_E_NOSUPPORT; } - if (!params->neighbor_report_params.ssid.length) { + /* + * If 11k enable command and ssid length is 0, drop it + */ + if (params->offload_11k_bitmask && + !params->neighbor_report_params.ssid.length) { WMA_LOGD("%s: SSID Len 0", __func__); return QDF_STATUS_E_INVAL; } @@ -2107,11 +2111,14 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle, break; } + /* + * Send 11k offload enable to FW as part of RSO Start + */ if (roam_req->reason == REASON_CTX_INIT) { qdf_status = wma_send_offload_11k_params(wma_handle, &roam_req->offload_11k_params); if (qdf_status != QDF_STATUS_SUCCESS) { - WMA_LOGE("11k offload params not sent, status %d", + WMA_LOGE("11k offload enable not sent, status %d", qdf_status); break; } @@ -2146,6 +2153,20 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle, WMA_LOGD("Dont send RSO stop during roam sync"); break; } + + /* + * Send 11k offload disable command to FW as part of RSO Stop + */ + if (roam_req->reason == REASON_DISCONNECTED) { + qdf_status = wma_send_offload_11k_params(wma_handle, + &roam_req->offload_11k_params); + if (qdf_status != QDF_STATUS_SUCCESS) { + WMA_LOGE("11k offload disable not sent, status %d", + qdf_status); + break; + } + } + wma_handle->suitable_ap_hb_failure = false; if (wma_handle->roam_offload_enabled) { uint32_t mode; |
