Browse Source

qcacld-3.0: Move rso related process to connection manager [PART 5]

Add new code to implement below functions for connection manager
roam part:
Filling below WMI cmd parameters related process:
WMI_11K_OFFLOAD_REPORT_CMDID
WMI_ROAM_DEAUTH_CONFIG_CMDID
WMI_ROAM_IDLE_CONFIG_CMDID

Change-Id: I346b921a6f378e7c4d8860acd7c3bec45a0b9d3a
CRs-Fixed: 2749430
hqu 4 years ago
parent
commit
e6dec862e4

+ 75 - 0
components/mlme/dispatcher/inc/wlan_mlme_api.h

@@ -2516,6 +2516,81 @@ uint32_t wlan_mlme_get_roaming_triggers(struct wlan_objmgr_psoc *psoc);
 QDF_STATUS
 wlan_mlme_get_roaming_offload(struct wlan_objmgr_psoc *psoc,
 			      bool *val);
+
+/**
+ * wlan_mlme_get_enable_disconnect_roam_offload() - Get emergency roaming
+ * Enable/Disable status during deauth/disassoc
+ * @psoc: pointer to psoc object
+ * @val:  Pointer to emergency roaming Enable/Disable status
+ *        during deauth/disassoc
+ *
+ * Return: QDF Status
+ */
+QDF_STATUS
+wlan_mlme_get_enable_disconnect_roam_offload(struct wlan_objmgr_psoc *psoc,
+					     bool *val);
+
+/**
+ * wlan_mlme_get_enable_idle_roam() - Get Enable/Disable idle roaming status
+ * @psoc: pointer to psoc object
+ * @val:  Pointer to Enable/Disable idle roaming status
+ *
+ * Return: QDF Status
+ */
+QDF_STATUS
+wlan_mlme_get_enable_idle_roam(struct wlan_objmgr_psoc *psoc, bool *val);
+
+/**
+ * wlan_mlme_get_idle_roam_rssi_delta() - Get idle roam rssi delta
+ * @psoc: pointer to psoc object
+ * @val:  Pointer to idle roam rssi delta
+ *
+ * Return: QDF Status
+ */
+QDF_STATUS
+wlan_mlme_get_idle_roam_rssi_delta(struct wlan_objmgr_psoc *psoc,
+				   uint32_t *val);
+
+/**
+ * wlan_mlme_get_idle_roam_inactive_time() - Get idle roam inactive time
+ * @psoc: pointer to psoc object
+ * @val:  Pointer to idle roam inactive time
+ *
+ * Return: QDF Status
+ */
+QDF_STATUS
+wlan_mlme_get_idle_roam_inactive_time(struct wlan_objmgr_psoc *psoc,
+				      uint32_t *val);
+/**
+ * wlan_mlme_get_idle_data_packet_count() - Get idle data packet count
+ * @psoc: pointer to psoc object
+ * @val:  Pointer to idle data packet count
+ *
+ * Return: QDF Status
+ */
+QDF_STATUS
+wlan_mlme_get_idle_data_packet_count(struct wlan_objmgr_psoc *psoc,
+				     uint32_t *val);
+
+/**
+ * wlan_mlme_get_idle_roam_min_rssi() - Get idle roam min rssi
+ * @psoc: pointer to psoc object
+ * @val:  Pointer to idle roam min rssi
+ *
+ * Return: QDF Status
+ */
+QDF_STATUS
+wlan_mlme_get_idle_roam_min_rssi(struct wlan_objmgr_psoc *psoc, uint32_t *val);
+
+/**
+ * wlan_mlme_get_idle_roam_band() - Get idle roam band
+ * @psoc: pointer to psoc object
+ * @val:  Pointer to idle roam band
+ *
+ * Return: QDF Status
+ */
+QDF_STATUS
+wlan_mlme_get_idle_roam_band(struct wlan_objmgr_psoc *psoc, uint32_t *val);
 #else
 static inline QDF_STATUS
 wlan_mlme_get_roam_reason_vsie_status(struct wlan_objmgr_psoc *psoc,

+ 115 - 0
components/mlme/dispatcher/src/wlan_mlme_api.c

@@ -3932,6 +3932,121 @@ wlan_mlme_get_roaming_offload(struct wlan_objmgr_psoc *psoc,
 
 	return QDF_STATUS_SUCCESS;
 }
+
+QDF_STATUS
+wlan_mlme_get_enable_disconnect_roam_offload(struct wlan_objmgr_psoc *psoc,
+					     bool *val)
+{
+	struct wlan_mlme_psoc_ext_obj *mlme_obj;
+
+	mlme_obj = mlme_get_psoc_ext_obj(psoc);
+	if (!mlme_obj) {
+		*val = cfg_default(CFG_LFR_ENABLE_DISCONNECT_ROAM);
+		return QDF_STATUS_E_INVAL;
+	}
+
+	*val = mlme_obj->cfg.lfr.enable_disconnect_roam_offload;
+
+	return QDF_STATUS_SUCCESS;
+}
+
+QDF_STATUS
+wlan_mlme_get_enable_idle_roam(struct wlan_objmgr_psoc *psoc, bool *val)
+{
+	struct wlan_mlme_psoc_ext_obj *mlme_obj;
+
+	mlme_obj = mlme_get_psoc_ext_obj(psoc);
+	if (!mlme_obj) {
+		*val = cfg_default(CFG_LFR_ENABLE_IDLE_ROAM);
+		return QDF_STATUS_E_INVAL;
+	}
+
+	*val = mlme_obj->cfg.lfr.enable_idle_roam;
+
+	return QDF_STATUS_SUCCESS;
+}
+
+QDF_STATUS
+wlan_mlme_get_idle_roam_rssi_delta(struct wlan_objmgr_psoc *psoc, uint32_t *val)
+{
+	struct wlan_mlme_psoc_ext_obj *mlme_obj;
+
+	mlme_obj = mlme_get_psoc_ext_obj(psoc);
+	if (!mlme_obj) {
+		*val = cfg_default(CFG_LFR_IDLE_ROAM_RSSI_DELTA);
+		return QDF_STATUS_E_INVAL;
+	}
+
+	*val = mlme_obj->cfg.lfr.idle_roam_rssi_delta;
+
+	return QDF_STATUS_SUCCESS;
+}
+
+QDF_STATUS
+wlan_mlme_get_idle_roam_inactive_time(struct wlan_objmgr_psoc *psoc,
+				      uint32_t *val)
+{
+	struct wlan_mlme_psoc_ext_obj *mlme_obj;
+
+	mlme_obj = mlme_get_psoc_ext_obj(psoc);
+	if (!mlme_obj) {
+		*val = cfg_default(CFG_LFR_IDLE_ROAM_INACTIVE_TIME);
+		return QDF_STATUS_E_INVAL;
+	}
+
+	*val = mlme_obj->cfg.lfr.idle_roam_inactive_time;
+
+	return QDF_STATUS_SUCCESS;
+}
+
+QDF_STATUS
+wlan_mlme_get_idle_data_packet_count(struct wlan_objmgr_psoc *psoc,
+				     uint32_t *val)
+{
+	struct wlan_mlme_psoc_ext_obj *mlme_obj;
+
+	mlme_obj = mlme_get_psoc_ext_obj(psoc);
+	if (!mlme_obj) {
+		*val = cfg_default(CFG_LFR_IDLE_ROAM_PACKET_COUNT);
+		return QDF_STATUS_E_INVAL;
+	}
+
+	*val = mlme_obj->cfg.lfr.idle_data_packet_count;
+
+	return QDF_STATUS_SUCCESS;
+}
+
+QDF_STATUS
+wlan_mlme_get_idle_roam_min_rssi(struct wlan_objmgr_psoc *psoc, uint32_t *val)
+{
+	struct wlan_mlme_psoc_ext_obj *mlme_obj;
+
+	mlme_obj = mlme_get_psoc_ext_obj(psoc);
+	if (!mlme_obj) {
+		*val = cfg_default(CFG_LFR_IDLE_ROAM_MIN_RSSI);
+		return QDF_STATUS_E_INVAL;
+	}
+
+	*val = mlme_obj->cfg.lfr.idle_roam_min_rssi;
+
+	return QDF_STATUS_SUCCESS;
+}
+
+QDF_STATUS
+wlan_mlme_get_idle_roam_band(struct wlan_objmgr_psoc *psoc, uint32_t *val)
+{
+	struct wlan_mlme_psoc_ext_obj *mlme_obj;
+
+	mlme_obj = mlme_get_psoc_ext_obj(psoc);
+	if (!mlme_obj) {
+		*val = cfg_default(CFG_LFR_IDLE_ROAM_BAND);
+		return QDF_STATUS_E_INVAL;
+	}
+
+	*val = mlme_obj->cfg.lfr.idle_roam_band;
+
+	return QDF_STATUS_SUCCESS;
+}
 #endif
 
 QDF_STATUS

+ 136 - 0
components/target_if/connection_mgr/src/target_if_cm_roam_offload.c

@@ -242,6 +242,77 @@ target_if_cm_roam_scan_get_cckm_mode(struct wlan_objmgr_vdev *vdev,
 	else
 		return WMI_AUTH_CCKM;
 }
+
+/* target_if_cm_roam_disconnect_params(): Send the disconnect roam parameters
+ * to wmi
+ * @wmi_handle: handle to WMI
+ * @command: rso command
+ * @req: disconnect roam parameters
+ *
+ * Return: void
+ */
+static void
+target_if_cm_roam_disconnect_params(wmi_unified_t wmi_handle, uint8_t command,
+				    struct wlan_roam_disconnect_params *req)
+{
+	QDF_STATUS status;
+
+	switch (command) {
+	case ROAM_SCAN_OFFLOAD_START:
+	case ROAM_SCAN_OFFLOAD_UPDATE_CFG:
+		if (!req->enable)
+			return;
+		break;
+	case ROAM_SCAN_OFFLOAD_STOP:
+		req->enable = false;
+		break;
+	default:
+		break;
+	}
+
+	status = wmi_unified_send_disconnect_roam_params(wmi_handle, req);
+	if (QDF_IS_STATUS_ERROR(status))
+		target_if_err("failed to send disconnect roam parameters");
+}
+
+/* target_if_cm_roam_idle_params(): Send the roam idle parameters to wmi
+ * @wmi_handle: handle to WMI
+ * @command: rso command
+ * @req: roam idle parameters
+ *
+ * Return: void
+ */
+static void
+target_if_cm_roam_idle_params(wmi_unified_t wmi_handle, uint8_t command,
+			      struct wlan_roam_idle_params *req)
+{
+	QDF_STATUS status;
+	bool db2dbm_enabled;
+
+	switch (command) {
+	case ROAM_SCAN_OFFLOAD_START:
+	case ROAM_SCAN_OFFLOAD_UPDATE_CFG:
+		if (!req->enable)
+			return;
+		break;
+	case ROAM_SCAN_OFFLOAD_STOP:
+		req->enable = false;
+		break;
+	default:
+		break;
+	}
+
+	db2dbm_enabled = wmi_service_enabled(wmi_handle,
+					     wmi_service_hw_db2dbm_support);
+	if (!db2dbm_enabled) {
+		req->conn_ap_min_rssi -= NOISE_FLOOR_DBM_DEFAULT;
+		req->conn_ap_min_rssi &= 0x000000ff;
+	}
+
+	status = wmi_unified_send_idle_roam_params(wmi_handle, req);
+	if (QDF_IS_STATUS_ERROR(status))
+		target_if_err("failed to send idle roam parameters");
+}
 #else
 static void
 target_if_cm_roam_reason_vsie(wmi_unified_t wmi_handle,
@@ -262,6 +333,18 @@ target_if_cm_roam_scan_get_cckm_mode(struct wlan_objmgr_vdev *vdev,
 {
 	return WMI_AUTH_CCKM;
 }
+
+static void
+target_if_cm_roam_disconnect_params(wmi_unified_t wmi_handle, uint8_t command,
+				    struct wlan_roam_disconnect_params *req)
+{
+}
+
+static void
+target_if_cm_roam_idle_params(wmi_unified_t wmi_handle, uint8_t command,
+			      struct wlan_roam_idle_params *req)
+{
+}
 #endif
 /**
  * target_if_cm_roam_scan_offload_rssi_thresh() - Send roam scan rssi threshold
@@ -585,6 +668,42 @@ target_if_cm_roam_scan_btm_offload(wmi_unified_t wmi_handle,
 	return wmi_unified_send_btm_config(wmi_handle, req);
 }
 
+/**
+ * target_if_cm_roam_offload_11k_params() - send 11k offload params to firmware
+ * @wmi_handle: wmi handle
+ * @req: 11k offload parameters
+ *
+ * Send WMI_11K_OFFLOAD_REPORT_CMDID parameters to firmware
+ *
+ * Return: QDF status
+ */
+static QDF_STATUS
+target_if_cm_roam_offload_11k_params(wmi_unified_t wmi_handle,
+				     struct wlan_roam_11k_offload_params *req)
+{
+	QDF_STATUS status;
+
+	if (!wmi_service_enabled(wmi_handle,
+				 wmi_service_11k_neighbour_report_support)) {
+		target_if_err("FW doesn't support 11k offload");
+		return QDF_STATUS_E_NOSUPPORT;
+	}
+
+	/* If 11k enable command and ssid length is 0, drop it */
+	if (req->offload_11k_bitmask &&
+	    !req->neighbor_report_params.ssid.length) {
+		target_if_debug("SSID Len 0");
+		return QDF_STATUS_E_INVAL;
+	}
+
+	status = wmi_unified_offload_11k_cmd(wmi_handle, req);
+
+	if (status != QDF_STATUS_SUCCESS)
+		target_if_err("failed to send 11k offload command");
+
+	return status;
+}
+
 static uint32_t
 target_if_get_wmi_roam_offload_flag(uint32_t flag)
 {
@@ -702,8 +821,25 @@ target_if_cm_roam_send_start(struct wlan_objmgr_vdev *vdev,
 						    &req->btm_config);
 	if (QDF_IS_STATUS_ERROR(status)) {
 		target_if_err("Sending BTM config to fw failed");
+		goto end;
+	}
+
+	/*
+	 * Send 11k offload enable and bss load trigger parameters
+	 * to FW as part of RSO Start
+	 */
+	status = target_if_cm_roam_offload_11k_params(wmi_handle,
+						      &req->roam_11k_params);
+	if (QDF_IS_STATUS_ERROR(status)) {
+		target_if_err("11k offload enable not sent, status %d", status);
+		goto end;
 	}
 
+	target_if_cm_roam_disconnect_params(wmi_handle, ROAM_SCAN_OFFLOAD_START,
+					    &req->disconnect_params);
+
+	target_if_cm_roam_idle_params(wmi_handle, ROAM_SCAN_OFFLOAD_START,
+				      &req->idle_params);
 	/* add other wmi commands */
 end:
 	return status;

+ 57 - 2
components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c

@@ -55,7 +55,7 @@ cm_roam_scan_bmiss_cnt(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
 
 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
 /**
- * wlan_cm_roam_reason_vsie() - set roam reason vsie
+ * cm_roam_reason_vsie() - set roam reason vsie
  * @psoc: psoc pointer
  * @vdev_id: vdev id
  * @params: roam reason vsie parameters
@@ -77,7 +77,7 @@ cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
 }
 
 /**
- * wlan_cm_roam_triggers() - set roam triggers
+ * cm_roam_triggers() - set roam triggers
  * @psoc: psoc pointer
  * @vdev_id: vdev id
  * @params: roam triggers parameters
@@ -96,6 +96,47 @@ cm_roam_triggers(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
 	wlan_cm_roam_get_vendor_btm_params(psoc, vdev_id,
 					   &params->vendor_btm_param);
 }
+
+/**
+ * cm_roam_disconnect_params() - set disconnect roam parameters
+ * @psoc: psoc pointer
+ * @vdev_id: vdev id
+ * @params: disconnect roam parameters
+ *
+ * This function is used to set disconnect roam parameters
+ *
+ * Return: None
+ */
+static void
+cm_roam_disconnect_params(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
+			  struct wlan_roam_disconnect_params *params)
+{
+	params->vdev_id = vdev_id;
+	wlan_mlme_get_enable_disconnect_roam_offload(psoc, &params->enable);
+}
+
+/**
+ * cm_roam_idle_params() - set roam idle parameters
+ * @psoc: psoc pointer
+ * @vdev_id: vdev id
+ * @params: roam idle parameters
+ *
+ * This function is used to set roam idle parameters
+ *
+ * Return: None
+ */
+static void
+cm_roam_idle_params(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
+		    struct wlan_roam_idle_params *params)
+{
+	params->vdev_id = vdev_id;
+	wlan_mlme_get_enable_idle_roam(psoc, &params->enable);
+	wlan_mlme_get_idle_roam_rssi_delta(psoc, &params->conn_ap_rssi_delta);
+	wlan_mlme_get_idle_roam_inactive_time(psoc, &params->inactive_time);
+	wlan_mlme_get_idle_data_packet_count(psoc, &params->data_pkt_count);
+	wlan_mlme_get_idle_roam_min_rssi(psoc, &params->conn_ap_min_rssi);
+	wlan_mlme_get_idle_roam_band(psoc, &params->band);
+}
 #else
 static inline void
 cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
@@ -108,6 +149,18 @@ cm_roam_triggers(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
 		 struct wlan_roam_triggers *params)
 {
 }
+
+static void
+cm_roam_disconnect_params(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
+			  struct wlan_roam_disconnect_params *params)
+{
+}
+
+static void
+cm_roam_idle_params(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
+		    struct wlan_roam_idle_params *params)
+{
+}
 #endif
 
 /**
@@ -161,6 +214,8 @@ cm_roam_start_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
 	cm_roam_scan_bmiss_cnt(psoc, vdev_id, &start_req->beacon_miss_cnt);
 	cm_roam_reason_vsie(psoc, vdev_id, &start_req->reason_vsie_enable);
 	cm_roam_triggers(psoc, vdev_id, &start_req->roam_triggers);
+	cm_roam_disconnect_params(psoc, vdev_id, &start_req->disconnect_params);
+	cm_roam_idle_params(psoc, vdev_id, &start_req->idle_params);
 
 	/* fill from legacy through this API */
 	wlan_cm_roam_fill_start_req(psoc, vdev_id, start_req, reason);

+ 126 - 102
core/sme/src/csr/csr_api_roam.c

@@ -17689,25 +17689,115 @@ csr_create_roam_scan_offload_request(struct mac_context *mac_ctx,
 	return req_buf;
 }
 
+/**
+ * check_allowed_ssid_list() - Check the WhiteList
+ * @req_buffer:      Buffer which contains the connected profile SSID.
+ * @roam_params:     Buffer which contains the whitelist SSID's.
+ *
+ * Check if the connected profile SSID exists in the whitelist.
+ * It is assumed that the framework provides this also in the whitelist.
+ * If it exists there is no issue. Otherwise add it to the list.
+ *
+ * Return: None
+ */
+static void check_allowed_ssid_list(struct roam_offload_scan_req *req_buffer,
+				    struct roam_ext_params *roam_params)
+{
+	int i = 0;
+	bool match = false;
+
+	for (i = 0; i < roam_params->num_ssid_allowed_list; i++) {
+		if ((roam_params->ssid_allowed_list[i].length ==
+			req_buffer->ConnectedNetwork.ssId.length) &&
+			(!qdf_mem_cmp(roam_params->ssid_allowed_list[i].ssId,
+				req_buffer->ConnectedNetwork.ssId.ssId,
+				roam_params->ssid_allowed_list[i].length))) {
+			QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG,
+				  "Whitelist contains connected profile SSID");
+			match = true;
+			break;
+		}
+	}
+	if (!match) {
+		if (roam_params->num_ssid_allowed_list >=
+				MAX_SSID_ALLOWED_LIST) {
+			QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG,
+				 "Whitelist is FULL. Cannot Add another entry");
+			return;
+		}
+		QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG,
+			  "Adding Connected profile SSID to whitelist");
+		/* i is the next available index to add the entry.*/
+		i = roam_params->num_ssid_allowed_list;
+		qdf_mem_copy(roam_params->ssid_allowed_list[i].ssId,
+			     req_buffer->ConnectedNetwork.ssId.ssId,
+			     req_buffer->ConnectedNetwork.ssId.length);
+		roam_params->ssid_allowed_list[i].length =
+			req_buffer->ConnectedNetwork.ssId.length;
+		roam_params->num_ssid_allowed_list++;
+	}
+}
+
+/**
+ * csr_add_rssi_reject_ap_list() - add rssi reject AP list to the
+ * roam params
+ * @mac_ctx: mac ctx.
+ * @roam_params: roam params in which reject AP list needs
+ * to be populated.
+ *
+ * Return: None
+ */
+static void
+csr_add_rssi_reject_ap_list(struct mac_context *mac_ctx,
+			    struct roam_ext_params *roam_params)
+{
+	int i = 0;
+	struct reject_ap_config_params *reject_list;
+
+	reject_list = qdf_mem_malloc(sizeof(*reject_list) *
+				     MAX_RSSI_AVOID_BSSID_LIST);
+	if (!reject_list)
+		return;
+
+	roam_params->num_rssi_rejection_ap =
+		wlan_blm_get_bssid_reject_list(mac_ctx->pdev, reject_list,
+					       MAX_RSSI_AVOID_BSSID_LIST,
+					       DRIVER_RSSI_REJECT_TYPE);
+	if (!roam_params->num_rssi_rejection_ap) {
+		qdf_mem_free(reject_list);
+		return;
+	}
+
+	for (i = 0; i < roam_params->num_rssi_rejection_ap; i++) {
+		roam_params->rssi_reject_bssid_list[i] = reject_list[i];
+		sme_debug("BSSID %pM expected rssi %d remaining duration %d",
+			  roam_params->rssi_reject_bssid_list[i].bssid.bytes,
+			  roam_params->rssi_reject_bssid_list[i].expected_rssi,
+			  roam_params->rssi_reject_bssid_list[i].
+							reject_duration);
+	}
+
+	qdf_mem_free(reject_list);
+}
+#endif
+
 /**
  * csr_update_11k_offload_params - Update 11K offload params
  * @mac_ctx: MAC context
  * @session: Pointer to the CSR Roam Session
- * @req_buffer: Pointer to the RSO Request buffer
+ * @params: Pointer to the roam 11k offload params
  * @enabled: 11k offload enabled/disabled.
  *
- * API to update 11k offload params to Roam Scan Offload request buffer
+ * API to update 11k offload params
  *
  * Return: none
  */
 static void
 csr_update_11k_offload_params(struct mac_context *mac_ctx,
 			      struct csr_roam_session *session,
-			      struct roam_offload_scan_req *req_buffer,
+			      struct wlan_roam_11k_offload_params *params,
 			      bool enabled)
 {
-	struct wlan_roam_11k_offload_params *params =
-		&req_buffer->offload_11k_params;
 	struct csr_config *csr_config = &mac_ctx->roam.configParam;
 	struct csr_neighbor_report_offload_params *neighbor_report_offload =
 		&csr_config->neighbor_report_offload;
@@ -17789,97 +17879,6 @@ csr_update_11k_offload_params(struct mac_context *mac_ctx,
 			session->connectedProfile.SSID.length);
 }
 
-/**
- * check_allowed_ssid_list() - Check the WhiteList
- * @req_buffer:      Buffer which contains the connected profile SSID.
- * @roam_params:     Buffer which contains the whitelist SSID's.
- *
- * Check if the connected profile SSID exists in the whitelist.
- * It is assumed that the framework provides this also in the whitelist.
- * If it exists there is no issue. Otherwise add it to the list.
- *
- * Return: None
- */
-static void check_allowed_ssid_list(struct roam_offload_scan_req *req_buffer,
-				    struct roam_ext_params *roam_params)
-{
-	int i = 0;
-	bool match = false;
-
-	for (i = 0; i < roam_params->num_ssid_allowed_list; i++) {
-		if ((roam_params->ssid_allowed_list[i].length ==
-			req_buffer->ConnectedNetwork.ssId.length) &&
-			(!qdf_mem_cmp(roam_params->ssid_allowed_list[i].ssId,
-				req_buffer->ConnectedNetwork.ssId.ssId,
-				roam_params->ssid_allowed_list[i].length))) {
-			QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG,
-				"Whitelist contains connected profile SSID");
-			match = true;
-			break;
-		}
-	}
-	if (!match) {
-		if (roam_params->num_ssid_allowed_list >=
-				MAX_SSID_ALLOWED_LIST) {
-			QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG,
-				"Whitelist is FULL. Cannot Add another entry");
-			return;
-		}
-		QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG,
-				"Adding Connected profile SSID to whitelist");
-		/* i is the next available index to add the entry.*/
-		i = roam_params->num_ssid_allowed_list;
-		qdf_mem_copy(roam_params->ssid_allowed_list[i].ssId,
-				req_buffer->ConnectedNetwork.ssId.ssId,
-				req_buffer->ConnectedNetwork.ssId.length);
-		roam_params->ssid_allowed_list[i].length =
-			req_buffer->ConnectedNetwork.ssId.length;
-		roam_params->num_ssid_allowed_list++;
-	}
-}
-
-/**
- * csr_add_rssi_reject_ap_list() - add rssi reject AP list to the
- * roam params
- * @mac_ctx: mac ctx.
- * @roam_params: roam params in which reject AP list needs
- * to be populated.
- *
- * Return: None
- */
-static void
-csr_add_rssi_reject_ap_list(struct mac_context *mac_ctx,
-			    struct roam_ext_params *roam_params)
-{
-	int i = 0;
-	struct reject_ap_config_params *reject_list;
-
-	reject_list = qdf_mem_malloc(sizeof(*reject_list) *
-				     MAX_RSSI_AVOID_BSSID_LIST);
-	if (!reject_list)
-		return;
-
-	roam_params->num_rssi_rejection_ap =
-		wlan_blm_get_bssid_reject_list(mac_ctx->pdev, reject_list,
-					       MAX_RSSI_AVOID_BSSID_LIST,
-					       DRIVER_RSSI_REJECT_TYPE);
-	if (!roam_params->num_rssi_rejection_ap) {
-		qdf_mem_free(reject_list);
-		return;
-	}
-
-	for (i = 0; i < roam_params->num_rssi_rejection_ap; i++) {
-		roam_params->rssi_reject_bssid_list[i] = reject_list[i];
-		sme_debug("BSSID %pM expected rssi %d remaining duration %d",
-		   roam_params->rssi_reject_bssid_list[i].bssid.bytes,
-		   roam_params->rssi_reject_bssid_list[i].expected_rssi,
-		   roam_params->rssi_reject_bssid_list[i].reject_duration);
-	}
-
-	qdf_mem_free(reject_list);
-}
-#endif
-
 QDF_STATUS csr_invoke_neighbor_report_request(
 				uint8_t session_id,
 				struct sRrmNeighborReq *neighbor_report_req,
@@ -19214,9 +19213,11 @@ csr_roam_offload_scan(struct mac_context *mac_ctx, uint8_t session_id,
 	 * 11k offload is disabled during RSO Stop after disconnect indication
 	 */
 	if (command == ROAM_SCAN_OFFLOAD_START)
-		csr_update_11k_offload_params(mac_ctx, session, req_buf, TRUE);
+		csr_update_11k_offload_params(
+			mac_ctx, session, &req_buf->offload_11k_params, TRUE);
 	else if (command == ROAM_SCAN_OFFLOAD_STOP)
-		csr_update_11k_offload_params(mac_ctx, session, req_buf, FALSE);
+		csr_update_11k_offload_params(
+			mac_ctx, session, &req_buf->offload_11k_params, FALSE);
 
 	wlan_cm_roam_get_vendor_btm_params(mac_ctx->psoc, session_id,
 					   &req_buf->roam_triggers.
@@ -19727,7 +19728,7 @@ csr_cm_roam_scan_filter(struct mac_context *mac_ctx, uint8_t vdev_id,
  * csr_cm_roam_scan_btm_offload() - set roam scan btm offload parameters
  * @mac_ctx: global mac ctx
  * @session: sme session
- * @params:  roam roam scan btm offload parameters
+ * @params:  roam scan btm offload parameters
  *
  * This function is used to set roam scan btm offload related parameters
  *
@@ -19755,6 +19756,26 @@ csr_cm_roam_scan_btm_offload(struct mac_context *mac_ctx,
 			mac_ctx->mlme_cfg->btm.btm_trig_min_candidate_score;
 }
 
+/**
+ * csr_cm_roam_offload_11k_params() - set roam 11k offload parameters
+ * @mac_ctx: global mac ctx
+ * @session: sme session
+ * @params:  roam 11k offload parameters
+ * @enabled: 11k offload enabled/disabled
+ *
+ * This function is used to set roam 11k offload related parameters
+ *
+ * Return: None
+ */
+static void
+csr_cm_roam_offload_11k_params(struct mac_context *mac_ctx,
+			       struct csr_roam_session *session,
+			       struct wlan_roam_11k_offload_params *params,
+			       bool enabled)
+{
+	csr_update_11k_offload_params(mac_ctx, session, params, enabled);
+}
+
 QDF_STATUS
 wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc,
 			    uint8_t vdev_id,
@@ -19782,16 +19803,19 @@ wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc,
 					     &req->rssi_params);
 
 	csr_cm_roam_scan_offload_scan_period(mac_ctx, session->vdev_id,
-					      &req->scan_period_params);
+					     &req->scan_period_params);
 
 	csr_cm_roam_scan_offload_ap_profile(mac_ctx, session,
-					     &req->profile_params);
+					    &req->profile_params);
 
 	csr_cm_roam_scan_filter(mac_ctx, vdev_id, ROAM_SCAN_OFFLOAD_START,
-				 reason, &req->scan_filter_params);
+				reason, &req->scan_filter_params);
 
 	csr_cm_roam_scan_btm_offload(mac_ctx, session, &req->btm_config);
 
+	/* 11k offload is enabled during RSO Start after connect indication */
+	csr_cm_roam_offload_11k_params(mac_ctx, session,
+				       &req->roam_11k_params, TRUE);
 	/* fill other struct similar to wlan_roam_offload_scan_rssi_params */
 
 	return status;