summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/sme/src/csr/csr_api_roam.c29
-rw-r--r--core/wma/src/wma_scan_roam.c25
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;