Browse Source

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

Add new code to implement below functions for connection manager
roam part:

Filling below WMI cmd parameters related process:
WMI_ROAM_BTM_CONFIG_CMDID
WMI_ROAM_SCAN_STOP_CMD
WMI_ROAM_PER_CONFIG_CMDID

And RSO command:
ROAM_SCAN_OFFLOAD_RESTART

Change-Id: I18480941980a55957abd48e0329fe4ef213a1243
CRs-Fixed: 2747578
hqu 4 years ago
parent
commit
ed6c27c858
30 changed files with 1092 additions and 372 deletions
  1. 4 0
      components/mlme/core/inc/wlan_mlme_main.h
  2. 35 0
      components/mlme/core/inc/wlan_mlme_vdev_mgr_interface.h
  3. 59 0
      components/mlme/core/src/wlan_mlme_vdev_mgr_interface.c
  4. 124 4
      components/target_if/connection_mgr/src/target_if_cm_roam_offload.c
  5. 237 47
      components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c
  6. 24 14
      components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_api.h
  7. 200 0
      components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_srtuct.h
  8. 4 4
      components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_ucfg_api.h
  9. 50 4
      components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_tgt_if_tx_api.h
  10. 1 1
      components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_ucfg_api.c
  11. 125 2
      components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_tgt_if_tx_api.c
  12. 10 9
      components/wmi/inc/wmi_unified_roam_api.h
  13. 0 141
      components/wmi/inc/wmi_unified_roam_param.h
  14. 7 7
      components/wmi/src/wmi_unified_roam_api.c
  15. 10 10
      components/wmi/src/wmi_unified_roam_tlv.c
  16. 3 3
      core/mac/inc/sir_api.h
  17. 2 0
      core/mac/inc/wni_api.h
  18. 5 0
      core/mac/src/include/sir_params.h
  19. 3 1
      core/mac/src/pe/lim/lim_process_message_queue.c
  20. 11 6
      core/mac/src/pe/lim/lim_process_sme_req_messages.c
  21. 4 0
      core/mac/src/sys/legacy/src/utils/src/mac_trace.c
  22. 121 92
      core/sme/src/csr/csr_api_roam.c
  23. 0 5
      core/wma/inc/wma.h
  24. 2 1
      core/wma/inc/wma_api.h
  25. 3 2
      core/wma/inc/wma_internal.h
  26. 4 0
      core/wma/inc/wma_types.h
  27. 5 1
      core/wma/src/wma_main.c
  28. 15 0
      core/wma/src/wma_mgmt.c
  29. 22 18
      core/wma/src/wma_scan_roam.c
  30. 2 0
      core/wma/src/wma_utils.c

+ 4 - 0
components/mlme/core/inc/wlan_mlme_main.h

@@ -160,6 +160,8 @@ struct wlan_mlme_roam {
  * @cm_roam: Roaming configuration
  * @bigtk_vdev_support: BIGTK feature support for this vdev (SAP)
  * @sae_auth_retry: SAE auth retry information
+ * @roam_reason_better_ap: roam due to better AP found
+ * @better_ap_hb_failure_rssi: heartbeat failure AP RSSI
  */
 struct mlme_legacy_priv {
 	bool chan_switch_in_progress;
@@ -180,6 +182,8 @@ struct mlme_legacy_priv {
 	struct wlan_cm_roam cm_roam;
 	bool bigtk_vdev_support;
 	struct sae_auth_retry sae_retry;
+	bool roam_reason_better_ap;
+	uint32_t hb_failure_rssi;
 };
 
 /**

+ 35 - 0
components/mlme/core/inc/wlan_mlme_vdev_mgr_interface.h

@@ -115,6 +115,41 @@ QDF_STATUS mlme_set_bigtk_support(struct wlan_objmgr_vdev *vdev, bool val);
 
 bool mlme_get_bigtk_support(struct wlan_objmgr_vdev *vdev);
 
+/**
+ * mlme_set_roam_reason_better_ap() - set roam reason better AP
+ * @vdev: vdev pointer
+ * @val: value to be set
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS
+mlme_set_roam_reason_better_ap(struct wlan_objmgr_vdev *vdev, bool val);
+
+/**
+ * mlme_get_roam_reason_better_ap() - get roam reason better AP
+ * @vdev: vdev pointer
+ *
+ * Return: bool
+ */
+bool mlme_get_roam_reason_better_ap(struct wlan_objmgr_vdev *vdev);
+
+/**
+ * mlme_set_hb_ap_rssi() - set hb ap RSSI
+ * @vdev: vdev pointer
+ * @val: value to be set
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS mlme_set_hb_ap_rssi(struct wlan_objmgr_vdev *vdev, uint32_t val);
+
+/**
+ * mlme_get_hb_ap_rssi() - get HB AP RSSIc
+ * @vdev: vdev pointer
+ *
+ * Return: rssi value
+ */
+uint32_t mlme_get_hb_ap_rssi(struct wlan_objmgr_vdev *vdev);
+
 /**
  * mlme_set_connection_fail() - set connection failure flag
  * @vdev: vdev pointer

+ 59 - 0
components/mlme/core/src/wlan_mlme_vdev_mgr_interface.c

@@ -657,6 +657,65 @@ bool mlme_get_bigtk_support(struct wlan_objmgr_vdev *vdev)
 	return mlme_priv->bigtk_vdev_support;
 }
 
+QDF_STATUS
+mlme_set_roam_reason_better_ap(struct wlan_objmgr_vdev *vdev, bool val)
+{
+	struct mlme_legacy_priv *mlme_priv;
+
+	mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
+	if (!mlme_priv) {
+		mlme_legacy_err("vdev legacy private object is NULL");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	mlme_priv->roam_reason_better_ap = val;
+
+	return QDF_STATUS_SUCCESS;
+}
+
+bool mlme_get_roam_reason_better_ap(struct wlan_objmgr_vdev *vdev)
+{
+	struct mlme_legacy_priv *mlme_priv;
+
+	mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
+	if (!mlme_priv) {
+		mlme_legacy_err("vdev legacy private object is NULL");
+		return false;
+	}
+
+	return mlme_priv->roam_reason_better_ap;
+}
+
+QDF_STATUS
+mlme_set_hb_ap_rssi(struct wlan_objmgr_vdev *vdev, uint32_t val)
+{
+	struct mlme_legacy_priv *mlme_priv;
+
+	mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
+	if (!mlme_priv) {
+		mlme_legacy_err("vdev legacy private object is NULL");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	mlme_priv->hb_failure_rssi = val;
+
+	return QDF_STATUS_SUCCESS;
+}
+
+uint32_t mlme_get_hb_ap_rssi(struct wlan_objmgr_vdev *vdev)
+{
+	struct mlme_legacy_priv *mlme_priv;
+
+	mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
+	if (!mlme_priv) {
+		mlme_legacy_err("vdev legacy private object is NULL");
+		return 0;
+	}
+
+	return mlme_priv->hb_failure_rssi;
+}
+
+
 QDF_STATUS mlme_set_connection_fail(struct wlan_objmgr_vdev *vdev, bool val)
 {
 	struct mlme_legacy_priv *mlme_priv;

+ 124 - 4
components/target_if/connection_mgr/src/target_if_cm_roam_offload.c

@@ -565,6 +565,26 @@ target_if_cm_roam_scan_filter(wmi_unified_t wmi_handle, uint8_t command,
 	return status;
 }
 
+/**
+ * target_if_cm_roam_scan_btm_offload() - send roam scan btm offload to firmware
+ * @wmi_handle: wmi handle
+ * @req: roam scan btm offload parameters
+ *
+ * Send WMI_ROAM_BTM_CONFIG_CMDID parameters to firmware
+ *
+ * Return: QDF status
+ */
+static QDF_STATUS
+target_if_cm_roam_scan_btm_offload(wmi_unified_t wmi_handle,
+				   struct wlan_roam_btm_config *req)
+{
+	target_if_debug("vdev %u btm_offload:%u btm_query_bitmask:%u btm_candidate_min_score:%d",
+			req->vdev_id, req->btm_offload_config,
+			req->btm_query_bitmask, req->btm_candidate_min_score);
+
+	return wmi_unified_send_btm_config(wmi_handle, req);
+}
+
 static uint32_t
 target_if_get_wmi_roam_offload_flag(uint32_t flag)
 {
@@ -613,7 +633,7 @@ target_if_cm_roam_send_roam_init(struct wlan_objmgr_vdev *vdev,
 }
 
 /**
- * target_if_cm_roam_send_roam_start() - Send roam start related commands
+ * target_if_cm_roam_send_start() - Send roam start related commands
  * to wmi
  * @vdev: vdev object
  * @req: roam start config parameters
@@ -623,8 +643,8 @@ target_if_cm_roam_send_roam_init(struct wlan_objmgr_vdev *vdev,
  * Return: QDF_STATUS
  */
 static QDF_STATUS
-target_if_cm_roam_send_roam_start(struct wlan_objmgr_vdev *vdev,
-				  struct wlan_roam_start_config *req)
+target_if_cm_roam_send_start(struct wlan_objmgr_vdev *vdev,
+			     struct wlan_roam_start_config *req)
 {
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
 	wmi_unified_t wmi_handle;
@@ -678,11 +698,107 @@ target_if_cm_roam_send_roam_start(struct wlan_objmgr_vdev *vdev,
 		goto end;
 	}
 
+	status = target_if_cm_roam_scan_btm_offload(wmi_handle,
+						    &req->btm_config);
+	if (QDF_IS_STATUS_ERROR(status)) {
+		target_if_err("Sending BTM config to fw failed");
+	}
+
 	/* add other wmi commands */
 end:
 	return status;
 }
 
+/**
+ * target_if_cm_roam_send_stop() - Send roam stop related commands
+ * to wmi
+ * @vdev: vdev object
+ * @req: roam stop config parameters
+ *
+ * This function is used to Send roam start related commands to wmi
+ *
+ * Return: QDF_STATUS
+ */
+static QDF_STATUS
+target_if_cm_roam_send_stop(struct wlan_objmgr_vdev *vdev,
+			    struct wlan_roam_stop_config *req)
+{
+	wmi_unified_t wmi_handle;
+
+	wmi_handle = target_if_cm_roam_get_wmi_handle_from_vdev(vdev);
+	if (!wmi_handle)
+		return QDF_STATUS_E_FAILURE;
+
+	return QDF_STATUS_SUCCESS;
+}
+
+/**
+ * target_if_cm_roam_send_update_config() - Send roam update config related
+ * commands to wmi
+ * @vdev: vdev object
+ * @req: roam update config parameters
+ *
+ * Return: QDF_STATUS
+ */
+static QDF_STATUS
+target_if_cm_roam_send_update_config(struct wlan_objmgr_vdev *vdev,
+				     struct wlan_roam_update_config *req)
+{
+	wmi_unified_t wmi_handle;
+
+	wmi_handle = target_if_cm_roam_get_wmi_handle_from_vdev(vdev);
+	if (!wmi_handle)
+		return QDF_STATUS_E_FAILURE;
+
+	return QDF_STATUS_SUCCESS;
+}
+
+/**
+ * target_if_cm_roam_abort() - Send roam abort to wmi
+ * @vdev: vdev object
+ * @vdev_id: vdev id
+ *
+ * Return: QDF_STATUS
+ */
+static QDF_STATUS
+target_if_cm_roam_abort(struct wlan_objmgr_vdev *vdev, uint8_t vdev_id)
+{
+	wmi_unified_t wmi_handle;
+
+	wmi_handle = target_if_cm_roam_get_wmi_handle_from_vdev(vdev);
+	if (!wmi_handle)
+		return QDF_STATUS_E_FAILURE;
+
+	if (!target_if_is_vdev_valid(vdev_id)) {
+		target_if_err("Invalid vdev id:%d", vdev_id);
+		return QDF_STATUS_E_FAILURE;
+	}
+	return wmi_unified_roam_scan_offload_cmd(wmi_handle,
+						 WMI_ROAM_SCAN_STOP_CMD,
+						 vdev_id);
+}
+
+/**
+ * target_if_cm_roam_send_update_config() - Send roam update config related
+ * commands to wmi
+ * @vdev: vdev object
+ * @req: roam per config parameters
+ *
+ * Return: QDF_STATUS
+ */
+static QDF_STATUS
+target_if_cm_roam_per_config(struct wlan_objmgr_vdev *vdev,
+			     struct wlan_per_roam_config_req *req)
+{
+	wmi_unified_t wmi_handle;
+
+	wmi_handle = target_if_cm_roam_get_wmi_handle_from_vdev(vdev);
+	if (!wmi_handle)
+		return QDF_STATUS_E_FAILURE;
+
+	return wmi_unified_set_per_roam_config(wmi_handle, req);
+}
+
 /**
  * target_if_cm_roam_register_rso_req_ops() - Register rso req tx ops fucntions
  * @tx_ops: tx ops
@@ -695,7 +811,11 @@ static void
 target_if_cm_roam_register_rso_req_ops(struct wlan_cm_roam_tx_ops *tx_ops)
 {
 	tx_ops->send_roam_offload_init_req = target_if_cm_roam_send_roam_init;
-	tx_ops->send_roam_start_req = target_if_cm_roam_send_roam_start;
+	tx_ops->send_roam_start_req = target_if_cm_roam_send_start;
+	tx_ops->send_roam_stop_offload = target_if_cm_roam_send_stop;
+	tx_ops->send_roam_update_config = target_if_cm_roam_send_update_config;
+	tx_ops->send_roam_abort = target_if_cm_roam_abort;
+	tx_ops->send_roam_per_config = target_if_cm_roam_per_config;
 }
 #else
 static void

+ 237 - 47
components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c

@@ -22,12 +22,14 @@
  * Implementation for the common roaming offload api interfaces.
  */
 
+#include "wlan_mlme_main.h"
 #include "wlan_cm_roam_offload.h"
 #include "wlan_cm_tgt_if_tx_api.h"
 #include "wlan_cm_roam_api.h"
+#include "wlan_mlme_vdev_mgr_interface.h"
 
 /**
- * wlan_cm_roam_scan_bmiss_cnt() - set roam beacon miss count
+ * cm_roam_scan_bmiss_cnt() - set roam beacon miss count
  * @psoc: psoc pointer
  * @vdev_id: vdev id
  * @params: roam beacon miss count parameters
@@ -37,9 +39,8 @@
  * Return: None
  */
 static void
-wlan_cm_roam_scan_bmiss_cnt(struct wlan_objmgr_psoc *psoc,
-			    uint8_t vdev_id,
-			    struct wlan_roam_beacon_miss_cnt *params)
+cm_roam_scan_bmiss_cnt(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
+		       struct wlan_roam_beacon_miss_cnt *params)
 {
 	uint8_t beacon_miss_count;
 
@@ -64,9 +65,8 @@ wlan_cm_roam_scan_bmiss_cnt(struct wlan_objmgr_psoc *psoc,
  * Return: None
  */
 static void
-wlan_cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc,
-			 uint8_t vdev_id,
-			 struct wlan_roam_reason_vsie_enable *params)
+cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
+		    struct wlan_roam_reason_vsie_enable *params)
 {
 	uint8_t enable_roam_reason_vsie;
 
@@ -87,9 +87,8 @@ wlan_cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc,
  * Return: None
  */
 static void
-wlan_cm_roam_triggers(struct wlan_objmgr_psoc *psoc,
-		      uint8_t vdev_id,
-		      struct wlan_roam_triggers *params)
+cm_roam_triggers(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
+		 struct wlan_roam_triggers *params)
 {
 	params->vdev_id = vdev_id;
 	params->trigger_bitmap =
@@ -98,17 +97,15 @@ wlan_cm_roam_triggers(struct wlan_objmgr_psoc *psoc,
 					   &params->vendor_btm_param);
 }
 #else
-static void
-wlan_cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc,
-			 uint8_t vdev_id,
-			 struct wlan_roam_reason_vsie_enable *params)
+static inline void
+cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
+		    struct wlan_roam_reason_vsie_enable *params)
 {
 }
 
-static void
-wlan_cm_roam_triggers(struct wlan_objmgr_psoc *psoc,
-		      uint8_t vdev_id,
-		      struct wlan_roam_triggers *params)
+static inline void
+cm_roam_triggers(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
+		 struct wlan_roam_triggers *params)
 {
 }
 #endif
@@ -127,6 +124,19 @@ cm_roam_init_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, bool enable)
 	return wlan_cm_tgt_send_roam_offload_init(psoc, vdev_id, enable);
 }
 
+static void cm_roam_set_roam_reason_better_ap(struct wlan_objmgr_psoc *psoc,
+					      uint8_t vdev_id, bool set)
+{
+	struct wlan_objmgr_vdev *vdev;
+
+	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
+						    WLAN_MLME_NB_ID);
+	if (!vdev)
+		return;
+	mlme_set_roam_reason_better_ap(vdev, set);
+	wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
+}
+
 /**
  * cm_roam_start_req() - roam start request handling
  * @psoc: psoc pointer
@@ -136,8 +146,7 @@ cm_roam_init_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, bool enable)
  * Return: QDF_STATUS
  */
 static QDF_STATUS
-cm_roam_start_req(struct wlan_objmgr_psoc *psoc,
-		  uint8_t vdev_id,
+cm_roam_start_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
 		  uint8_t reason)
 {
 	struct wlan_roam_start_config *start_req;
@@ -147,11 +156,11 @@ cm_roam_start_req(struct wlan_objmgr_psoc *psoc,
 	if (!start_req)
 		return QDF_STATUS_E_NOMEM;
 
+	cm_roam_set_roam_reason_better_ap(psoc, vdev_id, false);
 	/* fill from mlme directly */
-	wlan_cm_roam_scan_bmiss_cnt(psoc, vdev_id,
-				    &start_req->beacon_miss_cnt);
-	wlan_cm_roam_reason_vsie(psoc, vdev_id, &start_req->reason_vsie_enable);
-	wlan_cm_roam_triggers(psoc, vdev_id, &start_req->roam_triggers);
+	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);
 
 	/* fill from legacy through this API */
 	wlan_cm_roam_fill_start_req(psoc, vdev_id, start_req, reason);
@@ -174,13 +183,201 @@ cm_roam_start_req(struct wlan_objmgr_psoc *psoc,
  * Return: QDF_STATUS
  */
 static QDF_STATUS
-cm_roam_update_config_req(struct wlan_objmgr_psoc *psoc,
-			  uint8_t vdev_id,
+cm_roam_update_config_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
 			  uint8_t reason)
 {
+	struct wlan_roam_update_config *update_req;
+	QDF_STATUS status;
+
+	cm_roam_set_roam_reason_better_ap(psoc, vdev_id, false);
+
+	update_req = qdf_mem_malloc(sizeof(*update_req));
+	if (!update_req)
+		return QDF_STATUS_E_NOMEM;
+
+	status = wlan_cm_tgt_send_roam_update_req(psoc, vdev_id, update_req);
+	if (QDF_IS_STATUS_ERROR(status))
+		mlme_debug("fail to send update config");
+
+	qdf_mem_free(update_req);
+
+	return status;
+}
+
+/**
+ * cm_roam_restart_req() - roam restart req for LFR2
+ * @psoc: psoc pointer
+ * @vdev_id: vdev id
+ * @reason: reason for changing roam state for the requested vdev id
+ *
+ * Return: QDF_STATUS
+ */
+static QDF_STATUS
+cm_roam_restart_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
+		    uint8_t reason)
+{
+
+	struct wlan_objmgr_vdev *vdev;
+
+	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
+						    WLAN_MLME_NB_ID);
+	if (!vdev)
+		return QDF_STATUS_E_INVAL;
+
+	/* Rome offload engine does not stop after any scan.
+	 * If this command is sent because all preauth attempts failed
+	 * and WMI_ROAM_REASON_SUITABLE_AP event was received earlier,
+	 * now it is time to call it heartbeat failure.
+	 */
+	if (reason == REASON_PREAUTH_FAILED_FOR_ALL
+	    && mlme_get_roam_reason_better_ap(vdev)) {
+		mlme_err("Sending heartbeat failure after preauth failures");
+		wlan_cm_send_beacon_miss(vdev_id, mlme_get_hb_ap_rssi(vdev));
+		mlme_set_roam_reason_better_ap(vdev, false);
+	}
+
+	wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
+
 	return QDF_STATUS_SUCCESS;
 }
 
+/**
+ * cm_roam_abort_req() - roam scan abort req
+ * @psoc: psoc pointer
+ * @vdev_id: vdev id
+ * @reason: reason for changing roam state for the requested vdev id
+ *
+ * Return: QDF_STATUS
+ */
+static QDF_STATUS
+cm_roam_abort_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
+		  uint8_t reason)
+{
+	QDF_STATUS status;
+
+	status = wlan_cm_tgt_send_roam_abort_req(psoc, vdev_id);
+	if (QDF_IS_STATUS_ERROR(status))
+		mlme_debug("fail to send abort start");
+
+	return status;
+}
+
+/**
+ * cm_roam_stop_req() - roam stop request handling
+ * @psoc: psoc pointer
+ * @vdev_id: vdev id
+ * @reason: reason for changing roam state for the requested vdev id
+ *
+ * Return: QDF_STATUS
+ */
+static QDF_STATUS
+cm_roam_stop_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
+		 uint8_t reason)
+{
+	struct wlan_roam_stop_config *stop_req;
+	QDF_STATUS status;
+
+	cm_roam_set_roam_reason_better_ap(psoc, vdev_id, false);
+
+	stop_req = qdf_mem_malloc(sizeof(*stop_req));
+	if (!stop_req)
+		return QDF_STATUS_E_NOMEM;
+	/* do the filling as csr_post_rso_stop */
+
+	status = wlan_cm_tgt_send_roam_stop_req(psoc, vdev_id, stop_req);
+	if (QDF_IS_STATUS_ERROR(status))
+		mlme_debug("fail to send roam stop");
+
+	qdf_mem_free(stop_req);
+
+	return status;
+}
+
+/**
+ * cm_roam_fill_per_roam_request() - create PER roam offload config request
+ * @psoc: psoc context
+ * @vdev_id: vdev id
+ *
+ * Return: QDF_STATUS
+ */
+static QDF_STATUS
+cm_roam_fill_per_roam_request(struct wlan_objmgr_psoc *psoc,
+			      struct wlan_per_roam_config_req *req)
+{
+	struct wlan_mlme_psoc_ext_obj *mlme_obj;
+
+	mlme_obj = mlme_get_psoc_ext_obj(psoc);
+	if (!mlme_obj)
+		return QDF_STATUS_E_FAILURE;
+
+	req->per_config.enable = mlme_obj->cfg.lfr.per_roam_enable;
+	req->per_config.tx_high_rate_thresh =
+		mlme_obj->cfg.lfr.per_roam_config_high_rate_th;
+	req->per_config.rx_high_rate_thresh =
+		mlme_obj->cfg.lfr.per_roam_config_high_rate_th;
+	req->per_config.tx_low_rate_thresh =
+		mlme_obj->cfg.lfr.per_roam_config_low_rate_th;
+	req->per_config.rx_low_rate_thresh =
+		mlme_obj->cfg.lfr.per_roam_config_low_rate_th;
+	req->per_config.per_rest_time = mlme_obj->cfg.lfr.per_roam_rest_time;
+	req->per_config.tx_per_mon_time =
+		mlme_obj->cfg.lfr.per_roam_monitor_time;
+	req->per_config.rx_per_mon_time =
+		mlme_obj->cfg.lfr.per_roam_monitor_time;
+	req->per_config.tx_rate_thresh_percnt =
+		mlme_obj->cfg.lfr.per_roam_config_rate_th_percent;
+	req->per_config.rx_rate_thresh_percnt =
+		mlme_obj->cfg.lfr.per_roam_config_rate_th_percent;
+	req->per_config.min_candidate_rssi =
+		mlme_obj->cfg.lfr.per_roam_min_candidate_rssi;
+
+	mlme_debug("PER based roaming configuaration enable: %d vdev: %d high_rate_thresh: %d low_rate_thresh: %d rate_thresh_percnt: %d per_rest_time: %d monitor_time: %d min cand rssi: %d",
+		   req->per_config.enable, req->vdev_id,
+		   req->per_config.tx_high_rate_thresh,
+		   req->per_config.tx_low_rate_thresh,
+		   req->per_config.tx_rate_thresh_percnt,
+		   req->per_config.per_rest_time,
+		   req->per_config.tx_per_mon_time,
+		   req->per_config.min_candidate_rssi);
+
+	return QDF_STATUS_SUCCESS;
+}
+
+/**
+ * cm_roam_offload_per_scan() - populates roam offload scan request and sends
+ * to fw
+ * @psoc: psoc context
+ * @vdev_id: vdev id
+ *
+ * Return: QDF_STATUS
+ */
+static QDF_STATUS
+cm_roam_offload_per_config(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
+{
+	struct wlan_per_roam_config_req *req = NULL;
+	QDF_STATUS status;
+
+	req = qdf_mem_malloc(sizeof(*req));
+	if (!req)
+		return QDF_STATUS_E_NOMEM;
+
+	req->vdev_id = vdev_id;
+	status = cm_roam_fill_per_roam_request(psoc, req);
+	if (QDF_IS_STATUS_ERROR(status)) {
+		qdf_mem_free(req);
+		mlme_debug("fail to fill per config");
+		return status;
+	}
+
+	status = wlan_cm_tgt_send_roam_per_config(psoc, vdev_id, req);
+	if (QDF_IS_STATUS_ERROR(status))
+		mlme_debug("fail to send roam stop");
+
+	qdf_mem_free(req);
+
+	return status;
+}
+
 /*
  * similar to csr_roam_offload_scan, will be used from many legacy
  * process directly, generate a new function wlan_cm_roam_send_rso_cmd
@@ -200,35 +397,28 @@ QDF_STATUS cm_roam_send_rso_cmd(struct wlan_objmgr_psoc *psoc,
 		mlme_debug("ROAM: not allowed");
 		return status;
 	}
+
+	/*
+	 * Update PER config to FW. No need to update in case of stop command,
+	 * FW takes care of stopping this internally
+	 */
+	if (rso_command != ROAM_SCAN_OFFLOAD_STOP)
+		cm_roam_offload_per_config(psoc, vdev_id);
+
 	if (rso_command == ROAM_SCAN_OFFLOAD_START)
 		status = cm_roam_start_req(psoc, vdev_id, reason);
 	else if (rso_command == ROAM_SCAN_OFFLOAD_UPDATE_CFG)
 		status = cm_roam_update_config_req(psoc, vdev_id, reason);
-//	else if (rso_command == ROAM_SCAN_OFFLOAD_RESTART)
-		/* RESTART API */
-//	else
-		/* ABORT SCAN API */
+	else if (rso_command == ROAM_SCAN_OFFLOAD_RESTART)
+		status = cm_roam_restart_req(psoc, vdev_id, reason);
+	else if (rso_command == ROAM_SCAN_OFFLOAD_ABORT_SCAN)
+		status = cm_roam_abort_req(psoc, vdev_id, reason);
+	else
+		mlme_debug("ROAM: invalid RSO command %d", rso_command);
 
 	return status;
 }
 
-/**
- * cm_roam_stop_req() - roam stop request handling
- * @psoc: psoc pointer
- * @vdev_id: vdev id
- * @reason: reason for changing roam state for the requested vdev id
- *
- * Return: QDF_STATUS
- */
-static QDF_STATUS
-cm_roam_stop_req(struct wlan_objmgr_psoc *psoc,
-		 uint8_t vdev_id,
-		 uint8_t reason)
-{
-	/* do the filling as csr_post_rso_stop */
-	return QDF_STATUS_SUCCESS;
-}
-
 /**
  * cm_roam_switch_to_rso_stop() - roam state handling for rso stop
  * @pdev: pdev pointer

+ 24 - 14
components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_api.h

@@ -78,6 +78,16 @@ wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc,
 			    uint8_t vdev_id,
 			    struct wlan_roam_start_config *req,
 			    uint8_t reason);
+
+/**
+ * wlan_cm_send_beacon_miss() - initiate beacon miss
+ * @vdev_id: vdev id
+ * @rssi: AP rssi
+ *
+ * Return: void
+ */
+void wlan_cm_send_beacon_miss(uint8_t vdev_id, int32_t rssi);
+
 #else
 static inline QDF_STATUS
 wlan_cm_enable_roaming_on_connected_sta(struct wlan_objmgr_pdev *pdev,
@@ -88,21 +98,21 @@ wlan_cm_enable_roaming_on_connected_sta(struct wlan_objmgr_pdev *pdev,
 #endif
 
 /**
- * cm_roam_acquire_lock  - Wrapper for sme_acquire_global_lock.
+ * cm_roam_acquire_lock() - Wrapper for sme_acquire_global_lock.
  *
  * Return: QDF_STATUS
  */
 QDF_STATUS cm_roam_acquire_lock(void);
 
 /**
- * cm_roam_release_lock  - Wrapper for sme_release_global_lock()
+ * cm_roam_release_lock() - Wrapper for sme_release_global_lock()
  *
  * Return: QDF_STATUS
  */
 QDF_STATUS cm_roam_release_lock(void);
 
 /**
- * cm_roam_get_requestor_string  - RSO control requestor to string api
+ * cm_roam_get_requestor_string() - RSO control requestor to string api
  * @requestor: Requestor of type enum wlan_cm_rso_control_requestor
  *
  * Return: Pointer to converted string
@@ -111,7 +121,7 @@ char
 *cm_roam_get_requestor_string(enum wlan_cm_rso_control_requestor requestor);
 
 /**
- * ucfg_cm_rso_init_deinit  - Init or Deinit roaming module at firmware
+ * ucfg_cm_rso_init_deinit() - Init or Deinit roaming module at firmware
  * @pdev: Pointer to pdev
  * @vdev_id: vdev id
  * @enable: true: Send RSO init and RSO enable
@@ -123,7 +133,7 @@ QDF_STATUS wlan_cm_rso_init_deinit(struct wlan_objmgr_pdev *pdev,
 				   uint8_t vdev_id, bool enable);
 
 /**
- * wlan_cm_disable_rso  - Disable roam scan offload to firmware
+ * wlan_cm_disable_rso() - Disable roam scan offload to firmware
  * @pdev: Pointer to pdev
  * @vdev_id: vdev id
  * @requestor: RSO disable requestor
@@ -136,7 +146,7 @@ QDF_STATUS wlan_cm_disable_rso(struct wlan_objmgr_pdev *pdev, uint32_t vdev_id,
 			       uint8_t reason);
 
 /**
- * ucfg_cm_enable_rso  - Enable roam scan offload to firmware
+ * ucfg_cm_enable_rso() - Enable roam scan offload to firmware
  * @pdev: Pointer to pdev
  * @vdev_id: vdev id
  * @requestor: RSO disable requestor
@@ -212,7 +222,7 @@ wlan_cm_roam_extract_roam_initial_info(wmi_unified_t wmi, void *evt_buf,
 				       uint8_t idx);
 
 /**
- * wlan_cm_roam_activate_pcl_per_vdev  - Set the PCL command to be sent per
+ * wlan_cm_roam_activate_pcl_per_vdev() - Set the PCL command to be sent per
  * vdev instead of pdev.
  * @psoc: PSOC pointer
  * @vdev_id: VDEV id
@@ -232,8 +242,8 @@ void wlan_cm_roam_activate_pcl_per_vdev(struct wlan_objmgr_psoc *psoc,
 					bool pcl_per_vdev);
 
 /**
- * wlan_cm_roam_is_pcl_per_vdev_active  - API to know if the pcl command needs to be
- * sent per vdev or not
+ * wlan_cm_roam_is_pcl_per_vdev_active() - API to know if the pcl command needs
+ * to be sent per vdev or not
  * @psoc: PSOC pointer
  * @vdev_id: VDEV id
  *
@@ -243,7 +253,7 @@ bool wlan_cm_roam_is_pcl_per_vdev_active(struct wlan_objmgr_psoc *psoc,
 					 uint8_t vdev_id);
 
 /**
- * wlan_cm_dual_sta_is_freq_allowed  - This API is used to check if the
+ * wlan_cm_dual_sta_is_freq_allowed() - This API is used to check if the
  * provided frequency is allowed for the 2nd STA vdev for connection.
  * @psoc:   Pointer to PSOC object
  * @freq:   Frequency in the given frequency list for the STA that is about to
@@ -260,7 +270,7 @@ wlan_cm_dual_sta_is_freq_allowed(struct wlan_objmgr_psoc *psoc, uint32_t freq,
 				 enum QDF_OPMODE opmode);
 
 /**
- * wlan_cm_dual_sta_roam_update_connect_channels  - Fill the allowed channels
+ * wlan_cm_dual_sta_roam_update_connect_channels() - Fill the allowed channels
  * for connection of the 2nd STA based on the 1st STA connected band if dual
  * sta roaming is enabled.
  * @psoc:   Pointer to PSOC object
@@ -272,7 +282,7 @@ void
 wlan_cm_dual_sta_roam_update_connect_channels(struct wlan_objmgr_psoc *psoc,
 					      struct scan_filter *filter);
 /**
- * wlan_cm_roam_set_vendor_btm_params  - API to set vendor btm params
+ * wlan_cm_roam_set_vendor_btm_params() - API to set vendor btm params
  * @psoc: PSOC pointer
  * @vdev_id: VDEV id
  * @param: vendor configured roam trigger param
@@ -285,7 +295,7 @@ wlan_cm_roam_set_vendor_btm_params(struct wlan_objmgr_psoc *psoc,
 				   struct wlan_cm_roam_vendor_btm_params
 								*param);
 /**
- * wlan_cm_roam_disable_vendor_btm  - API to disable vendor btm by default
+ * wlan_cm_roam_disable_vendor_btm() - API to disable vendor btm by default
  * reason
  * @psoc: PSOC pointer
  * @vdev_id: VDEV id
@@ -296,7 +306,7 @@ void
 wlan_cm_roam_disable_vendor_btm(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id);
 
 /**
- * wlan_cm_roam_get_vendor_btm_params - API to get vendor btm param
+ * wlan_cm_roam_get_vendor_btm_params() - API to get vendor btm param
  * @psoc: PSOC pointer
  * @vdev_id: VDEV id
  * @param: vendor configured roam trigger param

+ 200 - 0
components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_srtuct.h

@@ -418,6 +418,149 @@ struct wlan_roam_scan_filter_params {
 	struct roam_scan_filter_params filter_params;
 };
 
+/**
+ * struct wlan_roam_btm_config - BSS Transition Management offload params
+ * @vdev_id: VDEV on which the parameters should be applied
+ * @btm_offload_config: BTM config
+ * @btm_solicited_timeout: Timeout value for waiting BTM request
+ * @btm_max_attempt_cnt: Maximum attempt for sending BTM query to ESS
+ * @btm_sticky_time: Stick time after roaming to new AP by BTM
+ * @disassoc_timer_threshold: threshold value till which the firmware can
+ * wait before triggering the roam scan after receiving the disassoc iminent
+ * @btm_query_bitmask: bitmask to btm query with candidate list
+ * @btm_candidate_min_score: Minimum score of the AP to consider it as a
+ * candidate if the roam trigger is BTM kickout.
+ */
+struct wlan_roam_btm_config {
+	uint8_t vdev_id;
+	uint32_t btm_offload_config;
+	uint32_t btm_solicited_timeout;
+	uint32_t btm_max_attempt_cnt;
+	uint32_t btm_sticky_time;
+	uint32_t disassoc_timer_threshold;
+	uint32_t btm_query_bitmask;
+	uint32_t btm_candidate_min_score;
+};
+
+
+/**
+ * struct wlan_roam_neighbor_report_params -neighbour report params
+ * @time_offset: time offset after 11k offload command to trigger a neighbor
+ *	report request (in seconds)
+ * @low_rssi_offset: Offset from rssi threshold to trigger a neighbor
+ *	report request (in dBm)
+ * @bmiss_count_trigger: Number of beacon miss events to trigger neighbor
+ *	report request
+ * @per_threshold_offset: offset from PER threshold to trigger neighbor
+ *	report request (in %)
+ * @neighbor_report_cache_timeout: timeout after which new trigger can enable
+ *	sending of a neighbor report request (in seconds)
+ * @max_neighbor_report_req_cap: max number of neighbor report requests that
+ *	can be sent to the peer in the current session
+ * @ssid: Current connect SSID info
+ */
+struct wlan_roam_neighbor_report_params {
+	uint32_t time_offset;
+	uint32_t low_rssi_offset;
+	uint32_t bmiss_count_trigger;
+	uint32_t per_threshold_offset;
+	uint32_t neighbor_report_cache_timeout;
+	uint32_t max_neighbor_report_req_cap;
+	struct wlan_ssid ssid;
+};
+
+/**
+ * struct wlan_roam_11k_offload_params - offload 11k features to FW
+ * @vdev_id: vdev id
+ * @offload_11k_bitmask: bitmask to specify offloaded features
+ *	B0: Neighbor Report Request offload
+ *	B1-B31: Reserved
+ * @neighbor_report_params: neighbor report offload params
+ */
+struct wlan_roam_11k_offload_params {
+	uint32_t vdev_id;
+	uint32_t offload_11k_bitmask;
+	struct wlan_roam_neighbor_report_params neighbor_report_params;
+};
+
+/**
+ * struct wlan_roam_disconnect_params - Emergency deauth/disconnect roam params
+ * @vdev_id: VDEV on which the parameters should be applied
+ * @enable: Enable or disable disconnect roaming.
+ */
+struct wlan_roam_disconnect_params {
+	uint32_t vdev_id;
+	bool enable;
+};
+
+/**
+ * struct wlan_roam_idle_params - Idle roam trigger parameters
+ * @vdev_id: VDEV on which the parameters should be applied
+ * @enable: Enable/Disable Idle roaming
+ * @band: Connected AP band
+ * @conn_ap_rssi_delta: Rssi change of connected AP in dBm
+ * @conn_ap_min_rssi: If connected AP rssi is less than min rssi trigger roam
+ * @inactive_time: Connected AP idle time
+ * @data_pkt_count: Data packet count allowed during idle time
+ */
+struct wlan_roam_idle_params {
+	uint32_t vdev_id;
+	bool enable;
+	uint32_t band;
+	uint32_t conn_ap_rssi_delta;
+	int32_t conn_ap_min_rssi;
+	uint32_t inactive_time;
+	uint32_t data_pkt_count;
+};
+
+/**
+ * struct wlan_per_roam_config - per based roaming parameters
+ * @enable: if PER based roaming is enabled/disabled
+ * @tx_high_rate_thresh: high rate threshold at which PER based
+ *     roam will stop in tx path
+ * @rx_high_rate_thresh: high rate threshold at which PER based
+ *     roam will stop in rx path
+ * @tx_low_rate_thresh: rate below which traffic will be considered
+ *     for PER based roaming in Tx path
+ * @rx_low_rate_thresh: rate below which traffic will be considered
+ *     for PER based roaming in Tx path
+ * @tx_rate_thresh_percnt: % above which when traffic is below low_rate_thresh
+ *     will be considered for PER based scan in tx path
+ * @rx_rate_thresh_percnt: % above which when traffic is below low_rate_thresh
+ *     will be considered for PER based scan in rx path
+ * @per_rest_time: time for which PER based roam will wait once it
+ *     issues a roam scan.
+ * @tx_per_mon_time: Minimum time required to be considered as valid scenario
+ *     for PER based roam in tx path
+ * @rx_per_mon_time: Minimum time required to be considered as valid scenario
+ *     for PER based roam in rx path
+ * @min_candidate_rssi: Minimum RSSI threshold for candidate AP to be used for
+ *     PER based roaming
+ */
+struct wlan_per_roam_config {
+	uint32_t enable;
+	uint32_t tx_high_rate_thresh;
+	uint32_t rx_high_rate_thresh;
+	uint32_t tx_low_rate_thresh;
+	uint32_t rx_low_rate_thresh;
+	uint32_t tx_rate_thresh_percnt;
+	uint32_t rx_rate_thresh_percnt;
+	uint32_t per_rest_time;
+	uint32_t tx_per_mon_time;
+	uint32_t rx_per_mon_time;
+	uint32_t min_candidate_rssi;
+};
+
+/**
+ * struct wlan_per_roam_config_req: PER based roaming config request
+ * @vdev_id: vdev id on which config needs to be set
+ * @per_config: PER config
+ */
+struct wlan_per_roam_config_req {
+	uint8_t vdev_id;
+	struct wlan_per_roam_config per_config;
+};
+
 #ifdef ROAM_OFFLOAD_V1
 #define NOISE_FLOOR_DBM_DEFAULT          (-96)
 #define RSSI_MIN_VALUE                   (-128)
@@ -543,6 +686,10 @@ struct wlan_roam_scan_period_params {
  * @scan_period_params: roam scan period parameters
  * @profile_params: ap profile parameters
  * @scan_filter_params: roam scan filter parameters
+ * @btm_config: btm configuration
+ * @roam_11k_params: 11k params
+ * @disconnect_params: disconnect params
+ * @idle_params: idle params
  */
 struct wlan_roam_start_config {
 	struct wlan_roam_offload_scan_rssi_params rssi_params;
@@ -552,9 +699,53 @@ struct wlan_roam_start_config {
 	struct wlan_roam_scan_period_params scan_period_params;
 	struct ap_profile_params profile_params;
 	struct wlan_roam_scan_filter_params scan_filter_params;
+	struct wlan_roam_btm_config btm_config;
+	struct wlan_roam_11k_offload_params roam_11k_params;
+	struct wlan_roam_disconnect_params disconnect_params;
+	struct wlan_roam_idle_params idle_params;
 	/* other wmi cmd structures */
 };
 
+/**
+ * struct wlan_roam_stop_config - structure containing parameters for
+ * roam stop
+ * @roam_11k_params: 11k params
+ * @btm_config: btm configuration
+ * @scan_filter_params: roam scan filter parameters
+ * @disconnect_params: disconnect params
+ * @idle_params: idle params
+ * @roam_triggers: roam triggers parameters
+ * @rssi_params: roam scan rssi threshold parameters
+ */
+struct wlan_roam_stop_config {
+	struct wlan_roam_11k_offload_params roam_11k_params;
+	struct wlan_roam_btm_config btm_config;
+	struct wlan_roam_scan_filter_params scan_filter_params;
+	struct wlan_roam_disconnect_params disconnect_params;
+	struct wlan_roam_idle_params idle_params;
+	struct wlan_roam_triggers roam_triggers;
+	struct wlan_roam_offload_scan_rssi_params rssi_params;
+};
+
+/**
+ * struct wlan_roam_update_config - structure containing parameters for
+ * roam update config
+ * @beacon_miss_cnt: roam beacon miss count parameters
+ * @scan_filter_params: roam scan filter parameters
+ * @scan_period_params: roam scan period parameters
+ * @rssi_params: roam scan rssi threshold parameters
+ * @disconnect_params: disconnect params
+ * @idle_params: idle params
+ */
+struct wlan_roam_update_config {
+	struct wlan_roam_beacon_miss_cnt beacon_miss_cnt;
+	struct wlan_roam_scan_filter_params scan_filter_params;
+	struct wlan_roam_scan_period_params scan_period_params;
+	struct wlan_roam_offload_scan_rssi_params rssi_params;
+	struct wlan_roam_disconnect_params disconnect_params;
+	struct wlan_roam_idle_params idle_params;
+};
+
 #endif
 
 #if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
@@ -658,6 +849,7 @@ struct set_pcl_req {
  * module initialize request
  * @send_roam_start_req: TX ops function pointer to send roam start related
  * commands
+ * @send_roam_abort: send roam abort
  */
 struct wlan_cm_roam_tx_ops {
 	QDF_STATUS (*send_vdev_set_pcl_cmd) (struct wlan_objmgr_vdev *vdev,
@@ -669,6 +861,14 @@ struct wlan_cm_roam_tx_ops {
 
 	QDF_STATUS (*send_roam_start_req)(struct wlan_objmgr_vdev *vdev,
 					  struct wlan_roam_start_config *req);
+	QDF_STATUS (*send_roam_stop_offload)(struct wlan_objmgr_vdev *vdev,
+					     struct wlan_roam_stop_config *req);
+	QDF_STATUS (*send_roam_update_config)(struct wlan_objmgr_vdev *vdev,
+					   struct wlan_roam_update_config *req);
+	QDF_STATUS (*send_roam_abort)(struct wlan_objmgr_vdev *vdev,
+				      uint8_t vdev_id);
+	QDF_STATUS (*send_roam_per_config)(struct wlan_objmgr_vdev *vdev,
+					  struct wlan_per_roam_config_req *req);
 #endif
 };
 

+ 4 - 4
components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_ucfg_api.h

@@ -28,7 +28,7 @@
 #ifdef ROAM_OFFLOAD_V1
 
 /**
- * ucfg_user_space_enable_disable_rso  - Enable/Disable Roam Scan offload
+ * ucfg_user_space_enable_disable_rso() - Enable/Disable Roam Scan offload
  * to firmware.
  * @pdev: Pointer to pdev
  * @vdev_id: vdev id
@@ -55,7 +55,7 @@ QDF_STATUS ucfg_cm_abort_roam_scan(struct wlan_objmgr_pdev *pdev,
 				   uint8_t vdev_id);
 
 /**
- * ucfg_cm_rso_init_deinit  - Init or Deinit roaming module at firmware
+ * ucfg_cm_rso_init_deinit() - Init or Deinit roaming module at firmware
  * @pdev: Pointer to pdev
  * @vdev_id: vdev id
  * @enable: true: Send RSO init and RSO enable
@@ -71,7 +71,7 @@ ucfg_cm_rso_init_deinit(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
 }
 
 /**
- * ucfg_cm_disable_rso  - Disable roam scan offload to firmware
+ * ucfg_cm_disable_rso() - Disable roam scan offload to firmware
  * @pdev: Pointer to pdev
  * @vdev_id: vdev id
  * @requestor: RSO disable requestor
@@ -88,7 +88,7 @@ QDF_STATUS ucfg_cm_disable_rso(struct wlan_objmgr_pdev *pdev, uint32_t vdev_id,
 }
 
 /**
- * ucfg_cm_enable_rso  - Enable roam scan offload to firmware
+ * ucfg_cm_enable_rso() - Enable roam scan offload to firmware
  * @pdev: Pointer to pdev
  * @vdev_id: vdev id
  * @requestor: RSO disable requestor

+ 50 - 4
components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_tgt_if_tx_api.h

@@ -30,7 +30,7 @@
 
 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
 /**
- * wlan_cm_roam_send_set_vdev_pcl  - Send vdev set pcl command to firmware
+ * wlan_cm_roam_send_set_vdev_pcl()  - Send vdev set pcl command to firmware
  * @psoc:     PSOC pointer
  * @pcl_req:  Set pcl request structure pointer
  *
@@ -51,8 +51,8 @@ wlan_cm_roam_send_set_vdev_pcl(struct wlan_objmgr_psoc *psoc,
 #ifdef ROAM_OFFLOAD_V1
 #if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
 /**
- * wlan_cm_tgt_send_roam_offload_init  - Send WMI_VDEV_PARAM_ROAM_FW_OFFLOAD to
- * init/deinit roaming module at firmware
+ * wlan_cm_tgt_send_roam_offload_init()  - Send WMI_VDEV_PARAM_ROAM_FW_OFFLOAD
+ * to init/deinit roaming module at firmware
  * @psoc: PSOC pointer
  * @vdev_id: vdev id
  * @is_init: true if roam module is to be initialized else false for deinit
@@ -63,7 +63,7 @@ QDF_STATUS wlan_cm_tgt_send_roam_offload_init(struct wlan_objmgr_psoc *psoc,
 					      uint8_t vdev_id, bool is_init);
 
 /**
- * wlan_cm_tgt_send_roam_start_req  - Send roam start command to firmware
+ * wlan_cm_tgt_send_roam_start_req()  - Send roam start command to firmware
  * @psoc:    psoc pointer
  * @vdev_id: vdev id
  * @req: roam start config parameter
@@ -73,6 +73,52 @@ QDF_STATUS wlan_cm_tgt_send_roam_offload_init(struct wlan_objmgr_psoc *psoc,
 QDF_STATUS wlan_cm_tgt_send_roam_start_req(struct wlan_objmgr_psoc *psoc,
 					   uint8_t vdev_id,
 					   struct wlan_roam_start_config *req);
+
+/**
+ * wlan_cm_tgt_send_roam_stop_req()  - Send roam stop command to firmware
+ * @psoc:    psoc pointer
+ * @vdev_id: vdev id
+ * @req: roam stop config parameter
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS wlan_cm_tgt_send_roam_stop_req(struct wlan_objmgr_psoc *psoc,
+					 uint8_t vdev_id,
+					 struct wlan_roam_stop_config *req);
+
+/**
+ * wlan_cm_tgt_send_roam_start_req()  - Send roam update command to firmware
+ * @psoc:    psoc pointer
+ * @vdev_id: vdev id
+ * @req: roam update config parameter
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS wlan_cm_tgt_send_roam_update_req(struct wlan_objmgr_psoc *psoc,
+					   uint8_t vdev_id,
+					   struct wlan_roam_update_config *req);
+
+/**
+ * wlan_cm_tgt_send_roam_abort_req()  - Send roam abort command to firmware
+ * @psoc:    psoc pointer
+ * @vdev_id: vdev id
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS wlan_cm_tgt_send_roam_abort_req(struct wlan_objmgr_psoc *psoc,
+					   uint8_t vdev_id);
+
+/**
+ * wlan_cm_tgt_send_roam_per_config()  - Send roam per config command to FW
+ * @psoc:    psoc pointer
+ * @vdev_id: vdev id
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS wlan_cm_tgt_send_roam_per_config(struct wlan_objmgr_psoc *psoc,
+					  uint8_t vdev_id,
+					  struct wlan_per_roam_config_req *req);
+
 #endif
 #endif
 #endif /* CM_TGT_IF_TX_API_H__ */

+ 1 - 1
components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_ucfg_api.c

@@ -92,7 +92,7 @@ QDF_STATUS ucfg_cm_abort_roam_scan(struct wlan_objmgr_pdev *pdev,
 	if (QDF_IS_STATUS_ERROR(status))
 		return status;
 
-	status = cm_roam_state_change(pdev, vdev_id,
+	status = cm_roam_send_rso_cmd(psoc, vdev_id,
 				      ROAM_SCAN_OFFLOAD_ABORT_SCAN,
 				      REASON_ROAM_ABORT_ROAM_SCAN);
 	cm_roam_release_lock();

+ 125 - 2
components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_tgt_if_tx_api.c

@@ -169,6 +169,8 @@ QDF_STATUS wlan_cm_tgt_send_roam_offload_init(struct wlan_objmgr_psoc *psoc,
 			init_msg.roam_offload_flag |=
 				WLAN_ROAM_BMISS_FINAL_SCAN_TYPE;
 	}
+	mlme_debug("vdev_id:%d, is_init:%d, flag:%d",  vdev_id, is_init,
+		   init_msg.roam_offload_flag);
 
 	status = roam_tx_ops.send_roam_offload_init_req(vdev, &init_msg);
 	if (QDF_IS_STATUS_ERROR(status))
@@ -194,17 +196,138 @@ QDF_STATUS wlan_cm_tgt_send_roam_start_req(struct wlan_objmgr_psoc *psoc,
 
 	roam_tx_ops = GET_CM_ROAM_TX_OPS_FROM_VDEV(vdev);
 	if (!roam_tx_ops.send_roam_start_req) {
-		mlme_err("CM_RSO: vdev%d send_roam_start_req is NULL", vdev_id);
+		mlme_err("CM_RSO: vdev %d send_roam_start_req is NULL",
+			 vdev_id);
 		wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
 		return QDF_STATUS_E_INVAL;
 	}
 
 	status = roam_tx_ops.send_roam_start_req(vdev, req);
 	if (QDF_IS_STATUS_ERROR(status))
-		mlme_debug("CM_RSO: vdev%d fail to send roam start", vdev_id);
+		mlme_debug("CM_RSO: vdev %d fail to send roam start", vdev_id);
+
+	wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
+
+	return status;
+}
+
+QDF_STATUS wlan_cm_tgt_send_roam_stop_req(struct wlan_objmgr_psoc *psoc,
+					 uint8_t vdev_id,
+					 struct wlan_roam_stop_config *req)
+{
+	QDF_STATUS status;
+	struct wlan_cm_roam_tx_ops roam_tx_ops;
+	struct wlan_objmgr_vdev *vdev;
+
+	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
+						    WLAN_MLME_NB_ID);
+	if (!vdev)
+		return QDF_STATUS_E_INVAL;
+
+	roam_tx_ops = GET_CM_ROAM_TX_OPS_FROM_VDEV(vdev);
+	if (!roam_tx_ops.send_roam_stop_offload) {
+		mlme_err("CM_RSO: vdev %d send_roam_stop_offload is NULL",
+			 vdev_id);
+		wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
+		return QDF_STATUS_E_INVAL;
+	}
+
+	status = roam_tx_ops.send_roam_stop_offload(vdev, req);
+	if (QDF_IS_STATUS_ERROR(status))
+		mlme_debug("CM_RSO: vdev %d fail to send roam stop", vdev_id);
 
 	wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
+
+	return status;
+}
+
+QDF_STATUS wlan_cm_tgt_send_roam_update_req(struct wlan_objmgr_psoc *psoc,
+					    uint8_t vdev_id,
+					    struct wlan_roam_update_config *req)
+{
+	QDF_STATUS status;
+	struct wlan_cm_roam_tx_ops roam_tx_ops;
+	struct wlan_objmgr_vdev *vdev;
+
+	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
+						    WLAN_MLME_NB_ID);
+	if (!vdev)
+		return QDF_STATUS_E_INVAL;
+
+	roam_tx_ops = GET_CM_ROAM_TX_OPS_FROM_VDEV(vdev);
+	if (!roam_tx_ops.send_roam_update_config) {
+		mlme_err("CM_RSO: vdev %d send_roam_update_config is NULL",
+			 vdev_id);
+		wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
+		return QDF_STATUS_E_INVAL;
+	}
+
+	status = roam_tx_ops.send_roam_update_config(vdev, req);
+	if (QDF_IS_STATUS_ERROR(status))
+		mlme_debug("CM_RSO: vdev %d fail to send roam update", vdev_id);
+
+	wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
+
 	return status;
 }
+
+QDF_STATUS wlan_cm_tgt_send_roam_abort_req(struct wlan_objmgr_psoc *psoc,
+					   uint8_t vdev_id)
+{
+	QDF_STATUS status;
+	struct wlan_cm_roam_tx_ops roam_tx_ops;
+	struct wlan_objmgr_vdev *vdev;
+
+	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
+						    WLAN_MLME_NB_ID);
+	if (!vdev)
+		return QDF_STATUS_E_INVAL;
+
+	roam_tx_ops = GET_CM_ROAM_TX_OPS_FROM_VDEV(vdev);
+	if (!roam_tx_ops.send_roam_abort) {
+		mlme_err("CM_RSO: vdev %d send_roam_abort is NULL", vdev_id);
+		wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
+		return QDF_STATUS_E_INVAL;
+	}
+
+	status = roam_tx_ops.send_roam_abort(vdev, vdev_id);
+	if (QDF_IS_STATUS_ERROR(status))
+		mlme_debug("CM_RSO: vdev %d fail to send roam abort", vdev_id);
+
+	wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
+
+	return status;
+}
+
+QDF_STATUS wlan_cm_tgt_send_roam_per_config(struct wlan_objmgr_psoc *psoc,
+					   uint8_t vdev_id,
+					   struct wlan_per_roam_config_req *req)
+{
+	QDF_STATUS status;
+	struct wlan_cm_roam_tx_ops roam_tx_ops;
+	struct wlan_objmgr_vdev *vdev;
+
+	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
+						    WLAN_MLME_NB_ID);
+	if (!vdev)
+		return QDF_STATUS_E_INVAL;
+
+	roam_tx_ops = GET_CM_ROAM_TX_OPS_FROM_VDEV(vdev);
+	if (!roam_tx_ops.send_roam_per_config) {
+		mlme_err("CM_RSO: vdev %d send_roam_per_config is NULL",
+			 vdev_id);
+		wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
+		return QDF_STATUS_E_INVAL;
+	}
+
+	status = roam_tx_ops.send_roam_per_config(vdev, req);
+	if (QDF_IS_STATUS_ERROR(status))
+		mlme_debug("CM_RSO: vdev %d fail to send per config", vdev_id);
+
+	wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
+
+	return status;
+}
+
 #endif
 #endif

+ 10 - 9
components/wmi/inc/wmi_unified_roam_api.h

@@ -225,24 +225,24 @@ QDF_STATUS wmi_unified_set_roam_triggers(wmi_unified_t wmi_handle,
  * wmi_unified_send_disconnect_roam_params() - Send disconnect roam trigger
  * parameters to firmware
  * @wmi_hdl:  wmi handle
- * @params: pointer to wmi_disconnect_roam_params
+ * @params: pointer to wlan_roam_disconnect_params
  *
  * Return: QDF_STATUS
  */
 QDF_STATUS
 wmi_unified_send_disconnect_roam_params(wmi_unified_t wmi_handle,
-					struct wmi_disconnect_roam_params *req);
+				struct wlan_roam_disconnect_params *req);
 
 /**
  * wmi_unified_send_idle_roam_params() - Send idle roam trigger params to fw
  * @wmi_hdl:  wmi handle
- * @params: pointer to wmi_idle_roam_params
+ * @params: pointer to wlan_roam_idle_params
  *
  * Return: QDF_STATUS
  */
 QDF_STATUS
 wmi_unified_send_idle_roam_params(wmi_unified_t wmi_handle,
-				  struct wmi_idle_roam_params *req);
+				  struct wlan_roam_idle_params *req);
 
 /**
  * wmi_unified_send_roam_preauth_status() - Send roam preauthentication status
@@ -359,7 +359,7 @@ wmi_unified_roam_scan_offload_rssi_change_cmd(wmi_unified_t wmi_handle,
  */
 QDF_STATUS
 wmi_unified_set_per_roam_config(wmi_unified_t wmi_handle,
-				struct wmi_per_roam_config_req *req_buf);
+				struct wlan_per_roam_config_req *req_buf);
 
 /**
  * wmi_unified_send_limit_off_chan_cmd() - send wmi cmd of limit off channel
@@ -388,12 +388,12 @@ QDF_STATUS wmi_unified_roam_send_hlp_cmd(wmi_unified_t wmi_handle,
 /**
  * wmi_unified_send_btm_config() - Send BTM config to fw
  * @wmi_handle:  wmi handle
- * @params: pointer to wmi_btm_config
+ * @params: pointer to wlan_roam_btm_config
  *
  * Return: QDF_STATUS
  */
 QDF_STATUS wmi_unified_send_btm_config(wmi_unified_t wmi_handle,
-				       struct wmi_btm_config *params);
+				       struct wlan_roam_btm_config *params);
 
 /**
  * wmi_unified_send_bss_load_config() - Send bss load trigger params to fw
@@ -414,8 +414,9 @@ QDF_STATUS wmi_unified_send_bss_load_config(wmi_unified_t wmi_handle,
  *
  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  */
-QDF_STATUS wmi_unified_offload_11k_cmd(wmi_unified_t wmi_handle,
-				       struct wmi_11k_offload_params *params);
+QDF_STATUS
+wmi_unified_offload_11k_cmd(wmi_unified_t wmi_handle,
+			    struct wlan_roam_11k_offload_params *params);
 /**
  * wmi_unified_invoke_neighbor_report_cmd() - send invoke neighbor report cmd
  * @wmi_handle: wmi handle

+ 0 - 141
components/wmi/inc/wmi_unified_roam_param.h

@@ -234,54 +234,6 @@ struct wmi_roam_invoke_cmd {
 	bool forced_roaming;
 };
 
-/**
- * struct wmi_per_roam_config - per based roaming parameters
- * @enable: if PER based roaming is enabled/disabled
- * @tx_high_rate_thresh: high rate threshold at which PER based
- *     roam will stop in tx path
- * @rx_high_rate_thresh: high rate threshold at which PER based
- *     roam will stop in rx path
- * @tx_low_rate_thresh: rate below which traffic will be considered
- *     for PER based roaming in Tx path
- * @rx_low_rate_thresh: rate below which traffic will be considered
- *     for PER based roaming in Tx path
- * @tx_rate_thresh_percnt: % above which when traffic is below low_rate_thresh
- *     will be considered for PER based scan in tx path
- * @rx_rate_thresh_percnt: % above which when traffic is below low_rate_thresh
- *     will be considered for PER based scan in rx path
- * @per_rest_time: time for which PER based roam will wait once it
- *     issues a roam scan.
- * @tx_per_mon_time: Minimum time required to be considered as valid scenario
- *     for PER based roam in tx path
- * @rx_per_mon_time: Minimum time required to be considered as valid scenario
- *     for PER based roam in rx path
- * @min_candidate_rssi: Minimum RSSI threshold for candidate AP to be used for
- *     PER based roaming
- */
-struct wmi_per_roam_config {
-	uint32_t enable;
-	uint32_t tx_high_rate_thresh;
-	uint32_t rx_high_rate_thresh;
-	uint32_t tx_low_rate_thresh;
-	uint32_t rx_low_rate_thresh;
-	uint32_t tx_rate_thresh_percnt;
-	uint32_t rx_rate_thresh_percnt;
-	uint32_t per_rest_time;
-	uint32_t tx_per_mon_time;
-	uint32_t rx_per_mon_time;
-	uint32_t min_candidate_rssi;
-};
-
-/**
- * struct wmi_per_roam_config_req: PER based roaming config request
- * @vdev_id: vdev id on which config needs to be set
- * @per_config: PER config
- */
-struct wmi_per_roam_config_req {
-	uint8_t vdev_id;
-	struct wmi_per_roam_config per_config;
-};
-
 /**
  * struct wmi_limit_off_chan_param - limit off channel parameters
  * @vdev_id: vdev id
@@ -311,30 +263,6 @@ struct hlp_params {
 	uint8_t hlp_ie[WMI_MAX_HLP_IE_LEN];
 };
 
-/**
- * struct wmi_btm_config - BSS Transition Management offload params
- * @vdev_id: VDEV on which the parameters should be applied
- * @btm_offload_config: BTM config
- * @btm_solicited_timeout: Timeout value for waiting BTM request
- * @btm_max_attempt_cnt: Maximum attempt for sending BTM query to ESS
- * @btm_sticky_time: Stick time after roaming to new AP by BTM
- * @disassoc_timer_threshold: threshold value till which the firmware can
- * wait before triggering the roam scan after receiving the disassoc iminent
- * @btm_query_bitmask: bitmask to btm query with candidate list
- * @btm_candidate_min_score: Minimum score of the AP to consider it as a
- * candidate if the roam trigger is BTM kickout.
- */
-struct wmi_btm_config {
-	uint8_t vdev_id;
-	uint32_t btm_offload_config;
-	uint32_t btm_solicited_timeout;
-	uint32_t btm_max_attempt_cnt;
-	uint32_t btm_sticky_time;
-	uint32_t disassoc_timer_threshold;
-	uint32_t btm_query_bitmask;
-	uint32_t btm_candidate_min_score;
-};
-
 /**
  * struct wmi_bss_load_config - BSS load trigger parameters
  * @vdev_id: VDEV on which the parameters should be applied
@@ -356,36 +284,6 @@ struct wmi_bss_load_config {
 	int32_t rssi_threshold_24ghz;
 };
 
-/**
- * struct wmi_idle_roam_params - Idle roam trigger parameters
- * @vdev_id: VDEV on which the parameters should be applied
- * @enable: Enable/Disable Idle roaming
- * @band: Connected AP band
- * @conn_ap_rssi_delta: Rssi change of connected AP in dBm
- * @conn_ap_min_rssi: If connected AP rssi is less than min rssi trigger roam
- * @inactive_time: Connected AP idle time
- * @data_pkt_count: Data packet count allowed during idle time
- */
-struct wmi_idle_roam_params {
-	uint32_t vdev_id;
-	bool enable;
-	uint32_t band;
-	uint32_t conn_ap_rssi_delta;
-	int32_t conn_ap_min_rssi;
-	uint32_t inactive_time;
-	uint32_t data_pkt_count;
-};
-
-/**
- * struct wmi_disconnect_roam_params - Emergency deauth/disconnect roam params
- * @vdev_id: VDEV on which the parameters should be applied
- * @enable: Enable or disable disconnect roaming.
- */
-struct wmi_disconnect_roam_params {
-	uint32_t vdev_id;
-	bool enable;
-};
-
 /**
  * struct wmi_roam_auth_status_params - WPA3 roam auth response status
  * parameters
@@ -404,45 +302,6 @@ struct wmi_roam_auth_status_params {
 	uint8_t pmkid[PMKID_LEN];
 };
 
-/**
- * @time_offset: time offset after 11k offload command to trigger a neighbor
- *	report request (in seconds)
- * @low_rssi_offset: Offset from rssi threshold to trigger a neighbor
- *	report request (in dBm)
- * @bmiss_count_trigger: Number of beacon miss events to trigger neighbor
- *	report request
- * @per_threshold_offset: offset from PER threshold to trigger neighbor
- *	report request (in %)
- * @neighbor_report_cache_timeout: timeout after which new trigger can enable
- *	sending of a neighbor report request (in seconds)
- * @max_neighbor_report_req_cap: max number of neighbor report requests that
- *	can be sent to the peer in the current session
- * @ssid: Current connect SSID info
- */
-struct wmi_11k_offload_neighbor_report_params {
-	uint32_t time_offset;
-	uint32_t low_rssi_offset;
-	uint32_t bmiss_count_trigger;
-	uint32_t per_threshold_offset;
-	uint32_t neighbor_report_cache_timeout;
-	uint32_t max_neighbor_report_req_cap;
-	struct wlan_ssid ssid;
-};
-
-/**
- * struct wmi_11k_offload_params - offload 11k features to FW
- * @vdev_id: vdev id
- * @offload_11k_bitmask: bitmask to specify offloaded features
- *	B0: Neighbor Report Request offload
- *	B1-B31: Reserved
- * @neighbor_report_params: neighbor report offload params
- */
-struct wmi_11k_offload_params {
-	uint32_t vdev_id;
-	uint32_t offload_11k_bitmask;
-	struct wmi_11k_offload_neighbor_report_params neighbor_report_params;
-};
-
 /**
  * struct wmi_invoke_neighbor_report_params - Invoke neighbor report request
  *	from IW to FW

+ 7 - 7
components/wmi/src/wmi_unified_roam_api.c

@@ -170,7 +170,7 @@ QDF_STATUS wmi_unified_roam_invoke_cmd(wmi_unified_t wmi_handle,
 
 QDF_STATUS
 wmi_unified_send_disconnect_roam_params(wmi_unified_t wmi_handle,
-					struct wmi_disconnect_roam_params *req)
+					struct wlan_roam_disconnect_params *req)
 {
 	if (wmi_handle->ops->send_disconnect_roam_params)
 		return wmi_handle->ops->send_disconnect_roam_params(wmi_handle,
@@ -180,7 +180,7 @@ wmi_unified_send_disconnect_roam_params(wmi_unified_t wmi_handle,
 
 QDF_STATUS
 wmi_unified_send_idle_roam_params(wmi_unified_t wmi_handle,
-				  struct wmi_idle_roam_params *req)
+				  struct wlan_roam_idle_params *req)
 {
 	if (wmi_handle->ops->send_idle_roam_params)
 		return wmi_handle->ops->send_idle_roam_params(wmi_handle,
@@ -276,7 +276,7 @@ wmi_unified_roam_scan_offload_rssi_change_cmd(wmi_unified_t wmi_handle,
 
 QDF_STATUS
 wmi_unified_set_per_roam_config(wmi_unified_t wmi_handle,
-				struct wmi_per_roam_config_req *req_buf)
+				struct wlan_per_roam_config_req *req_buf)
 {
 	if (wmi_handle->ops->send_per_roam_config_cmd)
 		return wmi_handle->ops->send_per_roam_config_cmd(wmi_handle,
@@ -309,7 +309,7 @@ QDF_STATUS wmi_unified_roam_send_hlp_cmd(wmi_unified_t wmi_handle,
 #endif /* WLAN_FEATURE_FILS_SK */
 
 QDF_STATUS wmi_unified_send_btm_config(wmi_unified_t wmi_handle,
-				       struct wmi_btm_config *params)
+				       struct wlan_roam_btm_config *params)
 {
 	if (wmi_handle->ops->send_btm_config)
 		return wmi_handle->ops->send_btm_config(wmi_handle,
@@ -328,9 +328,9 @@ QDF_STATUS wmi_unified_send_bss_load_config(wmi_unified_t wmi_handle,
 	return QDF_STATUS_E_FAILURE;
 }
 
-
-QDF_STATUS wmi_unified_offload_11k_cmd(wmi_unified_t wmi_handle,
-				       struct wmi_11k_offload_params *params)
+QDF_STATUS
+wmi_unified_offload_11k_cmd(wmi_unified_t wmi_handle,
+			    struct wlan_roam_11k_offload_params *params)
 {
 	if (wmi_handle->ops->send_offload_11k_cmd)
 		return wmi_handle->ops->send_offload_11k_cmd(wmi_handle,

+ 10 - 10
components/wmi/src/wmi_unified_roam_tlv.c

@@ -2613,7 +2613,7 @@ error:
  */
 static QDF_STATUS
 send_per_roam_config_cmd_tlv(wmi_unified_t wmi_handle,
-			     struct wmi_per_roam_config_req *req_buf)
+			     struct wlan_per_roam_config_req *req_buf)
 {
 	wmi_buf_t buf = NULL;
 	QDF_STATUS status;
@@ -2785,12 +2785,12 @@ void wmi_fils_sk_attach_tlv(wmi_unified_t wmi_handle)
 /*
  * send_btm_config_cmd_tlv() - Send wmi cmd for BTM config
  * @wmi_handle: wmi handle
- * @params: pointer to wmi_btm_config
+ * @params: pointer to wlan_roam_btm_config
  *
  * Return: QDF_STATUS
  */
 static QDF_STATUS send_btm_config_cmd_tlv(wmi_unified_t wmi_handle,
-					  struct wmi_btm_config *params)
+					  struct wlan_roam_btm_config *params)
 {
 	wmi_btm_config_fixed_param *cmd;
 	wmi_buf_t buf;
@@ -2883,7 +2883,7 @@ send_roam_bss_load_config_tlv(wmi_unified_t wmi_handle,
 /**
  * send_disconnect_roam_params_tlv() - send disconnect roam trigger parameters
  * @wmi_handle: wmi handle
- * @disconnect_roam: pointer to wmi_disconnect_roam_params which carries the
+ * @disconnect_roam: pointer to wlan_roam_disconnect_params which carries the
  * disconnect_roam_trigger parameters from CSR
  *
  * This function sends the disconnect roam trigger parameters to fw.
@@ -2892,7 +2892,7 @@ send_roam_bss_load_config_tlv(wmi_unified_t wmi_handle,
  */
 static QDF_STATUS
 send_disconnect_roam_params_tlv(wmi_unified_t wmi_handle,
-				struct wmi_disconnect_roam_params *req)
+				struct wlan_roam_disconnect_params *req)
 {
 	wmi_roam_deauth_config_cmd_fixed_param *cmd;
 	wmi_buf_t buf;
@@ -2929,7 +2929,7 @@ send_disconnect_roam_params_tlv(wmi_unified_t wmi_handle,
 /**
  * send_idle_roam_params_tlv() - send idle roam trigger parameters
  * @wmi_handle: wmi handle
- * @idle_roam_params: pointer to wmi_idle_roam_params which carries the
+ * @idle_roam_params: pointer to wlan_roam_idle_params which carries the
  * idle roam parameters from CSR
  *
  * This function sends the idle roam trigger parameters to fw.
@@ -2938,7 +2938,7 @@ send_disconnect_roam_params_tlv(wmi_unified_t wmi_handle,
  */
 static QDF_STATUS
 send_idle_roam_params_tlv(wmi_unified_t wmi_handle,
-			  struct wmi_idle_roam_params *idle_roam_params)
+			  struct wlan_roam_idle_params *idle_roam_params)
 {
 	wmi_roam_idle_config_cmd_fixed_param *cmd;
 	wmi_buf_t buf;
@@ -3036,14 +3036,14 @@ send_roam_preauth_status_tlv(wmi_unified_t wmi_handle,
 #else
 static inline QDF_STATUS
 send_disconnect_roam_params_tlv(wmi_unified_t wmi_handle,
-				struct wmi_disconnect_roam_params *req)
+				struct wlan_roam_disconnect_params *req)
 {
 	return QDF_STATUS_E_FAILURE;
 }
 
 static inline QDF_STATUS
 send_idle_roam_params_tlv(wmi_unified_t wmi_handle,
-			  struct wmi_idle_roam_params *idle_roam_params)
+			  struct wlan_roam_idle_params *idle_roam_params)
 {
 	return QDF_STATUS_E_FAILURE;
 }
@@ -3065,7 +3065,7 @@ send_roam_preauth_status_tlv(wmi_unified_t wmi_handle,
  */
 static QDF_STATUS
 send_offload_11k_cmd_tlv(wmi_unified_t wmi_handle,
-			 struct wmi_11k_offload_params *params)
+			 struct wlan_roam_11k_offload_params *params)
 {
 	wmi_11k_offload_report_fixed_param *cmd;
 	wmi_buf_t buf;

+ 3 - 3
core/mac/inc/sir_api.h

@@ -2211,8 +2211,8 @@ struct roam_offload_scan_req {
 	bool is_sae_single_pmk;
 	bool enable_ft_im_roaming;
 	/* Idle/Disconnect roam parameters */
-	struct wmi_idle_roam_params idle_roam_params;
-	struct wmi_disconnect_roam_params disconnect_roam_params;
+	struct wlan_roam_idle_params idle_roam_params;
+	struct wlan_roam_disconnect_params disconnect_roam_params;
 #endif
 	struct roam_ext_params roam_params;
 	struct wlan_roam_triggers roam_triggers;
@@ -2239,7 +2239,7 @@ struct roam_offload_scan_req {
 	uint32_t rct_validity_timer;
 	uint32_t disassoc_timer_threshold;
 	uint32_t btm_trig_min_candidate_score;
-	struct wmi_11k_offload_params offload_11k_params;
+	struct wlan_roam_11k_offload_params offload_11k_params;
 	uint32_t ho_delay_for_rx;
 	uint32_t roam_preauth_retry_count;
 	uint32_t roam_preauth_no_ack_timeout;

+ 2 - 0
core/mac/inc/wni_api.h

@@ -237,8 +237,10 @@ enum eWniMsgTypes {
 	eWNI_SME_ANTENNA_ISOLATION_RSP = SIR_SME_MSG_TYPES_BEGIN + 155,
 	eWNI_SME_MON_DEINIT_SESSION = SIR_SME_MSG_TYPES_BEGIN + 156,
 	eWNI_SME_VDEV_DELETE_RSP = SIR_SME_MSG_TYPES_BEGIN + 157,
+#ifndef ROAM_OFFLOAD_V1
 	eWNI_SME_ROAM_INIT_PARAM = SIR_SME_MSG_TYPES_BEGIN + 158,
 	eWNI_SME_ROAM_SEND_PER_REQ = SIR_SME_MSG_TYPES_BEGIN + 159,
+#endif
 	eWNI_SME_GET_ROAM_SCAN_CH_LIST_EVENT =
 				SIR_SME_MSG_TYPES_BEGIN + 160,
 	eWNI_SME_MONITOR_MODE_VDEV_UP = SIR_SME_MSG_TYPES_BEGIN + 161,

+ 5 - 0
core/mac/src/include/sir_params.h

@@ -576,7 +576,9 @@ struct sir_cfg_action_frm_tb_ppdu {
 
 /* (SIR_HAL_ITC_MSG_TYPES_BEGIN + 370) is unused */
 
+#ifndef ROAM_OFFLOAD_V1
 #define SIR_HAL_SET_PER_ROAM_CONFIG_CMD     (SIR_HAL_ITC_MSG_TYPES_BEGIN + 371)
+#endif
 #define SIR_HAL_RX_CHN_STATUS_EVENT         (SIR_HAL_ITC_MSG_TYPES_BEGIN + 372)
 
 #define SIR_HAL_GET_RCPI_REQ                (SIR_HAL_ITC_MSG_TYPES_BEGIN + 373)
@@ -588,7 +590,10 @@ struct sir_cfg_action_frm_tb_ppdu {
 
 #define SIR_HAL_HIDDEN_SSID_RESTART_RSP     (SIR_HAL_ITC_MSG_TYPES_BEGIN + 379)
 
+
+#ifndef ROAM_OFFLOAD_V1
 #define SIR_HAL_INIT_ROAM_OFFLOAD_PARAM     (SIR_HAL_ITC_MSG_TYPES_BEGIN + 380)
+#endif
 
 /*
  * Unused SIR_HAL_ITC_MSG_TYPES_BEGIN + 381 to

+ 3 - 1
core/mac/src/pe/lim/lim_process_message_queue.c

@@ -1761,9 +1761,11 @@ static void lim_process_messages(struct mac_context *mac_ctx,
 	case eWNI_SME_ROAM_INVOKE:
 		/* fall through */
 	case eWNI_SME_ROAM_SCAN_OFFLOAD_REQ:
-	case eWNI_SME_ROAM_INIT_PARAM:
 	case eWNI_SME_ROAM_SEND_SET_PCL_REQ:
+#ifndef ROAM_OFFLOAD_V1
+	case eWNI_SME_ROAM_INIT_PARAM:
 	case eWNI_SME_ROAM_SEND_PER_REQ:
+#endif
 	case eWNI_SME_SET_ADDBA_ACCEPT:
 	case eWNI_SME_UPDATE_EDCA_PROFILE:
 	case WNI_SME_UPDATE_MU_EDCA_PARAMS:

+ 11 - 6
core/mac/src/pe/lim/lim_process_sme_req_messages.c

@@ -3489,6 +3489,7 @@ static void __lim_process_roam_scan_offload_req(struct mac_context *mac_ctx,
 }
 
 #if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
+#ifndef ROAM_OFFLOAD_V1
 /**
  * lim_send_roam_offload_init() - Process Roam offload flag from csr
  * @mac_ctx: Pointer to Global MAC structure
@@ -3534,7 +3535,7 @@ static void lim_send_roam_per_command(struct mac_context *mac_ctx,
 		qdf_mem_free(msg_buf);
 	}
 }
-
+#endif
 /**
  * lim_send_roam_set_pcl() - Process Roam offload flag from csr
  * @mac_ctx: Pointer to Global MAC structure
@@ -3558,6 +3559,8 @@ static void lim_send_roam_set_pcl(struct mac_context *mac_ctx,
 	}
 }
 #else
+
+#ifndef ROAM_OFFLOAD_V1
 static void lim_send_roam_offload_init(struct mac_context *mac_ctx,
 				       uint32_t *msg_buf)
 {
@@ -3569,7 +3572,7 @@ static void lim_send_roam_per_command(struct mac_context *mac_ctx,
 {
 	qdf_mem_free(msg_buf);
 }
-
+#endif
 static inline void lim_send_roam_set_pcl(struct mac_context *mac_ctx,
 					 struct set_pcl_req *msg_buf)
 {
@@ -4644,18 +4647,20 @@ bool lim_process_sme_req_messages(struct mac_context *mac,
 		__lim_process_roam_scan_offload_req(mac, msg_buf);
 		bufConsumed = false;
 		break;
-	case eWNI_SME_ROAM_INIT_PARAM:
-		lim_send_roam_offload_init(mac, msg_buf);
-		bufConsumed = false;
-		break;
 	case eWNI_SME_ROAM_SEND_SET_PCL_REQ:
 		lim_send_roam_set_pcl(mac, (struct set_pcl_req *)msg_buf);
 		bufConsumed = false;
 		break;
+#ifndef ROAM_OFFLOAD_V1
+	case eWNI_SME_ROAM_INIT_PARAM:
+		lim_send_roam_offload_init(mac, msg_buf);
+		bufConsumed = false;
+		break;
 	case eWNI_SME_ROAM_SEND_PER_REQ:
 		lim_send_roam_per_command(mac, msg_buf);
 		bufConsumed = false;
 		break;
+#endif
 	case eWNI_SME_ROAM_INVOKE:
 		lim_process_roam_invoke(mac, msg_buf);
 		bufConsumed = false;

+ 4 - 0
core/mac/src/sys/legacy/src/utils/src/mac_trace.c

@@ -350,7 +350,9 @@ uint8_t *mac_trace_get_sme_msg_string(uint16_t sme_msg)
 		CASE_RETURN_STRING(eWNI_SME_UPDATE_ACCESS_POLICY_VENDOR_IE);
 		CASE_RETURN_STRING(eWNI_SME_DEFAULT_SCAN_IE);
 		CASE_RETURN_STRING(eWNI_SME_ROAM_SCAN_OFFLOAD_REQ);
+#ifndef ROAM_OFFLOAD_V1
 		CASE_RETURN_STRING(eWNI_SME_ROAM_INIT_PARAM);
+#endif
 		CASE_RETURN_STRING(eWNI_SME_LOST_LINK_INFO_IND);
 		CASE_RETURN_STRING(eWNI_SME_GET_PEER_INFO_EXT_IND);
 		CASE_RETURN_STRING(eWNI_SME_RSO_CMD_STATUS_IND);
@@ -600,7 +602,9 @@ uint8_t *mac_trace_get_wma_msg_string(uint16_t wma_msg)
 		CASE_RETURN_STRING(WMA_SET_RSSI_MONITOR_REQ);
 		CASE_RETURN_STRING(WMA_SET_WISA_PARAMS);
 		CASE_RETURN_STRING(WMA_SET_WOW_PULSE_CMD);
+#ifndef ROAM_OFFLOAD_V1
 		CASE_RETURN_STRING(WMA_SET_PER_ROAM_CONFIG_CMD);
+#endif
 		CASE_RETURN_STRING(WMA_GET_RCPI_REQ);
 		CASE_RETURN_STRING(WMA_SET_DBS_SCAN_SEL_CONF_PARAMS);
 		CASE_RETURN_STRING(WMA_GET_ROAM_SCAN_STATS);

+ 121 - 92
core/sme/src/csr/csr_api_roam.c

@@ -16998,6 +16998,64 @@ csr_update_roam_scan_offload_request(struct mac_context *mac_ctx,
 
 #if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
 
+/**
+ * csr_update_btm_offload_config() - Update btm config param to fw
+ * @mac_ctx: Global mac ctx
+ * @command: Roam offload command
+ * @btm_offload_config: btm offload config
+ * @session: roam session
+ *
+ * Return: None
+ */
+static void csr_update_btm_offload_config(struct mac_context *mac_ctx,
+					  uint8_t command,
+					  uint32_t *btm_offload_config,
+					  struct csr_roam_session *session)
+{
+	struct wlan_objmgr_peer *peer;
+	bool is_pmf_enabled;
+
+	*btm_offload_config =
+			mac_ctx->mlme_cfg->btm.btm_offload_config;
+
+	/* Return if INI is disabled */
+	if (!(*btm_offload_config))
+		return;
+
+	/* For RSO Stop Disable BTM offload to firmware */
+	if (command == ROAM_SCAN_OFFLOAD_STOP) {
+		*btm_offload_config = 0;
+		return;
+	}
+
+	if (!session->pConnectBssDesc) {
+		sme_err("Connected Bss Desc is NULL");
+		return;
+	}
+
+	peer = wlan_objmgr_get_peer(mac_ctx->psoc,
+				    wlan_objmgr_pdev_get_pdev_id(mac_ctx->pdev),
+				    session->pConnectBssDesc->bssId,
+				    WLAN_LEGACY_SME_ID);
+	if (!peer) {
+		sme_debug("Peer of peer_mac %pM not found",
+			  session->pConnectBssDesc->bssId);
+		return;
+	}
+
+	is_pmf_enabled = mlme_get_peer_pmf_status(peer);
+	wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_SME_ID);
+	sme_debug("get is_pmf_enabled %d for %pM", is_pmf_enabled,
+		  session->pConnectBssDesc->bssId);
+
+	/* If peer does not support PMF in case of OCE/MBO
+	 * Connection, Disable BTM offload to firmware.
+	 */
+	if (session->pConnectBssDesc->mbo_oce_enabled_ap &&
+	    !is_pmf_enabled)
+		*btm_offload_config = 0;
+}
+
 #ifndef ROAM_OFFLOAD_V1
 /**
  * csr_populate_roam_chan_list()
@@ -17334,64 +17392,6 @@ csr_rso_command_fill_rsn_caps(struct mac_context *mac_ctx, uint8_t vdev_id,
 	wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
 }
 
-/**
- * csr_update_btm_offload_config() - Update btm config param to fw
- * @mac_ctx: Global mac ctx
- * @command: Roam offload command
- * @req_buf: roam offload scan request
- * @session: roam session
- *
- * Return: None
- */
-static void csr_update_btm_offload_config(struct mac_context *mac_ctx,
-					  uint8_t command,
-					  struct roam_offload_scan_req *req_buf,
-					  struct csr_roam_session *session)
-{
-	struct wlan_objmgr_peer *peer;
-	bool is_pmf_enabled;
-
-	req_buf->btm_offload_config =
-			mac_ctx->mlme_cfg->btm.btm_offload_config;
-
-	/* Return if INI is disabled */
-	if (!req_buf->btm_offload_config)
-		return;
-
-	/* For RSO Stop Disable BTM offload to firmware */
-	if (command == ROAM_SCAN_OFFLOAD_STOP) {
-		req_buf->btm_offload_config = 0;
-		return;
-	}
-
-	if (!session->pConnectBssDesc) {
-		sme_err("Connected Bss Desc is NULL");
-		return;
-	}
-
-	peer = wlan_objmgr_get_peer(mac_ctx->psoc,
-				    wlan_objmgr_pdev_get_pdev_id(mac_ctx->pdev),
-				    session->pConnectBssDesc->bssId,
-				    WLAN_LEGACY_SME_ID);
-	if (!peer) {
-		sme_debug("Peer of peer_mac %pM not found",
-			  session->pConnectBssDesc->bssId);
-		return;
-	}
-
-	is_pmf_enabled = mlme_get_peer_pmf_status(peer);
-	wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_SME_ID);
-	sme_debug("get is_pmf_enabled %d for %pM", is_pmf_enabled,
-		  session->pConnectBssDesc->bssId);
-
-	/* If peer does not support PMF in case of OCE/MBO
-	 * Connection, Disable BTM offload to firmware.
-	 */
-	if (session->pConnectBssDesc->mbo_oce_enabled_ap &&
-	    !is_pmf_enabled)
-		req_buf->btm_offload_config = 0;
-}
-
 /**
  * csr_create_roam_scan_offload_request() - init roam offload scan request
  *
@@ -17664,7 +17664,8 @@ csr_create_roam_scan_offload_request(struct mac_context *mac_ctx,
 	req_buf->lca_config_params.num_disallowed_aps =
 		mac_ctx->mlme_cfg->lfr.lfr3_num_disallowed_aps;
 
-	csr_update_btm_offload_config(mac_ctx, command, req_buf, session);
+	csr_update_btm_offload_config(mac_ctx, command,
+				      &req_buf->btm_offload_config, session);
 
 	req_buf->btm_solicited_timeout =
 		mac_ctx->mlme_cfg->btm.btm_solicited_timeout;
@@ -17702,7 +17703,8 @@ csr_update_11k_offload_params(struct mac_context *mac_ctx,
 			      struct roam_offload_scan_req *req_buffer,
 			      bool enabled)
 {
-	struct wmi_11k_offload_params *params = &req_buffer->offload_11k_params;
+	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;
@@ -18129,13 +18131,13 @@ static void csr_update_driver_assoc_ies(struct mac_context *mac_ctx,
  *
  * Return: per roam config request packet buffer
  */
-static struct wmi_per_roam_config_req *
+static struct wlan_per_roam_config_req *
 csr_create_per_roam_request(struct mac_context *mac_ctx,
 		uint8_t session_id)
 {
-	struct wmi_per_roam_config_req *req_buf = NULL;
+	struct wlan_per_roam_config_req *req_buf = NULL;
 
-	req_buf = qdf_mem_malloc(sizeof(struct wmi_per_roam_config_req));
+	req_buf = qdf_mem_malloc(sizeof(struct wlan_per_roam_config_req));
 	if (!req_buf)
 		return NULL;
 
@@ -18188,7 +18190,7 @@ csr_create_per_roam_request(struct mac_context *mac_ctx,
 static QDF_STATUS
 csr_roam_offload_per_scan(struct mac_context *mac_ctx, uint8_t session_id)
 {
-	struct wmi_per_roam_config_req *req_buf;
+	struct wlan_per_roam_config_req *req_buf;
 	struct scheduler_msg msg = {0};
 	QDF_STATUS status;
 
@@ -19258,10 +19260,8 @@ csr_roam_offload_scan(struct mac_context *mac_ctx, uint8_t session_id,
 }
 
 QDF_STATUS
-wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc,
-			 uint8_t vdev_id,
-			 uint8_t command,
-			 uint8_t reason)
+wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
+			 uint8_t command, uint8_t reason)
 {
 	uint8_t *state = NULL;
 	struct csr_roam_session *session;
@@ -19407,7 +19407,7 @@ wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc,
 }
 
 /**
- * wlan_cm_roam_scan_offload_rssi_thresh() - set roam offload scan rssi
+ * csr_cm_roam_scan_offload_rssi_thresh() - set roam offload scan rssi
  * parameters
  * @mac_ctx: global mac ctx
  * @session: csr roam session
@@ -19418,8 +19418,7 @@ wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc,
  * Return: None
  */
 static void
-wlan_cm_roam_scan_offload_rssi_thresh(
-			struct mac_context *mac_ctx,
+csr_cm_roam_scan_offload_rssi_thresh(struct mac_context *mac_ctx,
 			struct csr_roam_session *session,
 			struct wlan_roam_offload_scan_rssi_params *params)
 {
@@ -19502,7 +19501,7 @@ wlan_cm_roam_scan_offload_rssi_thresh(
 }
 
 /**
- * wlan_cm_roam_scan_offload_scan_period() - set roam offload scan period
+ * csr_cm_roam_scan_offload_scan_period() - set roam offload scan period
  * parameters
  * @mac_ctx: global mac ctx
  * @vdev_id: vdev id
@@ -19513,10 +19512,9 @@ wlan_cm_roam_scan_offload_rssi_thresh(
  * Return: None
  */
 static void
-wlan_cm_roam_scan_offload_scan_period(
-				struct mac_context *mac_ctx,
-				uint8_t vdev_id,
-				struct wlan_roam_scan_period_params *params)
+csr_cm_roam_scan_offload_scan_period(struct mac_context *mac_ctx,
+				    uint8_t vdev_id,
+				    struct wlan_roam_scan_period_params *params)
 {
 	tpCsrNeighborRoamControlInfo roam_info =
 			&mac_ctx->roam.neighborRoamInfo[vdev_id];
@@ -19537,7 +19535,7 @@ wlan_cm_roam_scan_offload_scan_period(
 }
 
 /**
- * wlan_cm_roam_scan_offload_ap_profile() - set roam ap profile parameters
+ * csr_cm_roam_scan_offload_ap_profile() - set roam ap profile parameters
  * @mac_ctx: global mac ctx
  * @session: sme session
  * @params:  roam ap profile related parameters
@@ -19547,9 +19545,9 @@ wlan_cm_roam_scan_offload_scan_period(
  * Return: None
  */
 static void
-wlan_cm_roam_scan_offload_ap_profile(struct mac_context *mac_ctx,
-				     struct csr_roam_session *session,
-				     struct ap_profile_params *params)
+csr_cm_roam_scan_offload_ap_profile(struct mac_context *mac_ctx,
+				    struct csr_roam_session *session,
+				    struct ap_profile_params *params)
 {
 	struct ap_profile *profile = &params->profile;
 	struct roam_ext_params *roam_params_src =
@@ -19599,7 +19597,7 @@ wlan_cm_roam_scan_offload_ap_profile(struct mac_context *mac_ctx,
 }
 
 /**
- * wlan_cm_roam_scan_filter() - set roam scan filter parameters
+ * csr_cm_roam_scan_filter() - set roam scan filter parameters
  * @mac_ctx: global mac ctx
  * @vdev_id: vdev id
  * @command: rso command
@@ -19613,12 +19611,9 @@ wlan_cm_roam_scan_offload_ap_profile(struct mac_context *mac_ctx,
  * Return: None
  */
 static void
-wlan_cm_roam_scan_filter(
-		struct mac_context *mac_ctx,
-		uint8_t vdev_id,
-		uint8_t command,
-		uint8_t reason,
-		struct wlan_roam_scan_filter_params *scan_filter_params)
+csr_cm_roam_scan_filter(struct mac_context *mac_ctx, uint8_t vdev_id,
+			uint8_t command, uint8_t reason,
+			struct wlan_roam_scan_filter_params *scan_filter_params)
 {
 	int i;
 	uint32_t num_bssid_black_list = 0, num_ssid_white_list = 0,
@@ -19725,6 +19720,38 @@ wlan_cm_roam_scan_filter(
 	}
 }
 
+/**
+ * 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
+ *
+ * This function is used to set roam scan btm offload related parameters
+ *
+ * Return: None
+ */
+static void
+csr_cm_roam_scan_btm_offload(struct mac_context *mac_ctx,
+			     struct csr_roam_session *session,
+			     struct wlan_roam_btm_config *params)
+{
+	params->vdev_id = session->vdev_id;
+	csr_update_btm_offload_config(mac_ctx, ROAM_SCAN_OFFLOAD_START,
+				      &params->btm_offload_config, session);
+	params->btm_solicited_timeout =
+			mac_ctx->mlme_cfg->btm.btm_solicited_timeout;
+	params->btm_max_attempt_cnt =
+			mac_ctx->mlme_cfg->btm.btm_max_attempt_cnt;
+	params->btm_sticky_time =
+			mac_ctx->mlme_cfg->btm.btm_sticky_time;
+	params->disassoc_timer_threshold =
+			mac_ctx->mlme_cfg->btm.disassoc_timer_threshold;
+	params->btm_query_bitmask =
+			mac_ctx->mlme_cfg->btm.btm_query_bitmask;
+	params->btm_candidate_min_score =
+			mac_ctx->mlme_cfg->btm.btm_trig_min_candidate_score;
+}
+
 QDF_STATUS
 wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc,
 			    uint8_t vdev_id,
@@ -19748,18 +19775,20 @@ wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc,
 		return QDF_STATUS_E_FAILURE;
 	}
 
-	wlan_cm_roam_scan_offload_rssi_thresh(mac_ctx, session,
-					      &req->rssi_params);
+	csr_cm_roam_scan_offload_rssi_thresh(mac_ctx, session,
+					     &req->rssi_params);
 
-	wlan_cm_roam_scan_offload_scan_period(mac_ctx, session->vdev_id,
+	csr_cm_roam_scan_offload_scan_period(mac_ctx, session->vdev_id,
 					      &req->scan_period_params);
 
-	wlan_cm_roam_scan_offload_ap_profile(mac_ctx, session,
+	csr_cm_roam_scan_offload_ap_profile(mac_ctx, session,
 					     &req->profile_params);
 
-	wlan_cm_roam_scan_filter(mac_ctx, vdev_id, ROAM_SCAN_OFFLOAD_START,
+	csr_cm_roam_scan_filter(mac_ctx, vdev_id, ROAM_SCAN_OFFLOAD_START,
 				 reason, &req->scan_filter_params);
 
+	csr_cm_roam_scan_btm_offload(mac_ctx, session, &req->btm_config);
+
 	/* fill other struct similar to wlan_roam_offload_scan_rssi_params */
 
 	return status;

+ 0 - 5
core/wma/inc/wma.h

@@ -848,9 +848,6 @@ struct wma_wlm_stats_data {
  * @roam_ho_wl: wake lock for roam handoff req
  * @wow_nack: wow negative ack flag
  * @is_wow_bus_suspended: is wow bus suspended flag
- * @suitable_ap_hb_failure: better ap found
- * @suitable_ap_hb_failure_rssi: RSSI when suitable_ap_hb_failure
- *   triggered for later usage to report RSSI at beacon miss scenario
  * @IsRArateLimitEnabled: RA rate limiti s enabled or not
  * @RArateLimitInterval: RA rate limit interval
  * @is_lpass_enabled: Flag to indicate if LPASS feature is enabled or not
@@ -974,8 +971,6 @@ typedef struct {
 	qdf_wake_lock_t roam_preauth_wl;
 	int wow_nack;
 	qdf_atomic_t is_wow_bus_suspended;
-	bool suitable_ap_hb_failure;
-	uint32_t suitable_ap_hb_failure_rssi;
 #ifdef WLAN_FEATURE_LPSS
 	bool is_lpass_enabled;
 #endif

+ 2 - 1
core/wma/inc/wma_api.h

@@ -817,6 +817,7 @@ int wma_wlm_stats_req(int vdev_id, uint32_t bitmask, uint32_t max_size,
 int wma_wlm_stats_rsp(void *wma_ctx, uint8_t *event, uint32_t len);
 #endif /* FEATURE_WLM_STATS */
 
+#ifndef ROAM_OFFLOAD_V1
 /**
  * wma_update_roam_offload_flag() -  update roam offload flag to fw
  * @wma:     wma handle
@@ -826,7 +827,7 @@ int wma_wlm_stats_rsp(void *wma_ctx, uint8_t *event, uint32_t len);
  */
 void wma_update_roam_offload_flag(void *handle,
 				  struct roam_init_params *params);
-
+#endif
 /**
  * wma_self_peer_create() - create self peer in objmgr
  * @vdev_mlme: vdev mlme component private object

+ 3 - 2
core/wma/inc/wma_internal.h

@@ -350,6 +350,7 @@ wma_roam_scan_chan_list_event_handler(WMA_HANDLE handle, uint8_t *event,
 }
 #endif
 
+#ifndef ROAM_OFFLOAD_V1
 /**
  * wma_update_per_roam_config() -per roam config parameter updation to FW
  * @handle: wma handle
@@ -358,8 +359,8 @@ wma_roam_scan_chan_list_event_handler(WMA_HANDLE handle, uint8_t *event,
  * Return: none
  */
 void wma_update_per_roam_config(WMA_HANDLE handle,
-				 struct wmi_per_roam_config_req *req_buf);
-
+				 struct wlan_per_roam_config_req *req_buf);
+#endif
 QDF_STATUS wma_update_channel_list(WMA_HANDLE handle,
 				   tSirUpdateChanList *chan_list);
 

+ 4 - 0
core/wma/inc/wma_types.h

@@ -398,7 +398,9 @@
 
 #define WMA_SET_WOW_PULSE_CMD                SIR_HAL_SET_WOW_PULSE_CMD
 
+#ifndef ROAM_OFFLOAD_V1
 #define WMA_SET_PER_ROAM_CONFIG_CMD          SIR_HAL_SET_PER_ROAM_CONFIG_CMD
+#endif
 
 #define WMA_SEND_AP_VDEV_UP                  SIR_HAL_SEND_AP_VDEV_UP
 
@@ -433,7 +435,9 @@
 #endif
 #define WMA_SET_ROAM_TRIGGERS                SIR_HAL_SET_ROAM_TRIGGERS
 
+#ifndef ROAM_OFFLOAD_V1
 #define WMA_ROAM_INIT_PARAM                  SIR_HAL_INIT_ROAM_OFFLOAD_PARAM
+#endif
 
 #define WMA_DATA_STALL_TRIGGER 6
 

+ 5 - 1
core/wma/src/wma_main.c

@@ -8656,11 +8656,13 @@ static QDF_STATUS wma_mc_process_msg(struct scheduler_msg *msg)
 		qdf_mem_free(msg->bodyptr);
 		break;
 #endif /* FEATURE_WLAN_EXTSCAN */
+#ifndef ROAM_OFFLOAD_V1
 	case WMA_SET_PER_ROAM_CONFIG_CMD:
 		wma_update_per_roam_config(wma_handle,
-			(struct wmi_per_roam_config_req *)msg->bodyptr);
+			(struct wlan_per_roam_config_req *)msg->bodyptr);
 		qdf_mem_free(msg->bodyptr);
 		break;
+#endif
 	case WMA_SET_SCAN_MAC_OUI_REQ:
 		wma_scan_probe_setoui(wma_handle, msg->bodyptr);
 		qdf_mem_free(msg->bodyptr);
@@ -8969,10 +8971,12 @@ static QDF_STATUS wma_mc_process_msg(struct scheduler_msg *msg)
 		wma_set_roam_triggers(wma_handle, msg->bodyptr);
 		qdf_mem_free(msg->bodyptr);
 		break;
+#ifndef ROAM_OFFLOAD_V1
 	case WMA_ROAM_INIT_PARAM:
 		wma_update_roam_offload_flag(wma_handle, msg->bodyptr);
 		qdf_mem_free(msg->bodyptr);
 		break;
+#endif
 	case WMA_ROAM_SCAN_CH_REQ:
 		wma_get_roam_scan_ch(wma_handle->wmi_handle, msg->bodyval);
 		break;

+ 15 - 0
core/wma/src/wma_mgmt.c

@@ -84,6 +84,7 @@
 #if !defined(REMOVE_PKT_LOG)
 #include <wlan_logging_sock_svc.h>
 #endif
+#include "wlan_cm_roam_api.h"
 
 /**
  * wma_send_bcn_buf_ll() - prepare and send beacon buffer to fw for LL
@@ -2411,6 +2412,20 @@ void wma_beacon_miss_handler(tp_wma_handle wma, uint32_t vdev_id, int32_t rssi)
 	wma_lost_link_info_handler(wma, vdev_id, rssi);
 }
 
+#ifdef ROAM_OFFLOAD_V1
+void wlan_cm_send_beacon_miss(uint8_t vdev_id, int32_t rssi)
+{
+	tp_wma_handle wma;
+
+	wma = cds_get_context(QDF_MODULE_ID_WMA);
+	if (!wma) {
+		wma_err("Invalid wma");
+		return;
+	}
+
+	wma_beacon_miss_handler(wma, vdev_id, rssi);
+}
+#endif
 /**
  * wma_get_status_str() - get string of tx status from firmware
  * @status: tx status

+ 22 - 18
core/wma/src/wma_scan_roam.c

@@ -1633,10 +1633,10 @@ static QDF_STATUS
 wma_roam_scan_btm_offload(tp_wma_handle wma_handle,
 			  struct roam_offload_scan_req *roam_req)
 {
-	struct wmi_btm_config *params;
+	struct wlan_roam_btm_config *params;
 	QDF_STATUS status;
 
-	params = qdf_mem_malloc(sizeof(struct wmi_btm_config));
+	params = qdf_mem_malloc(sizeof(struct wlan_roam_btm_config));
 	if (!params)
 		return QDF_STATUS_E_FAILURE;
 
@@ -1711,7 +1711,7 @@ void wma_send_roam_bss_load_config(WMA_HANDLE handle,
  */
 static
 QDF_STATUS wma_send_offload_11k_params(WMA_HANDLE handle,
-				    struct wmi_11k_offload_params *params)
+				    struct wlan_roam_11k_offload_params *params)
 {
 	QDF_STATUS status;
 	tp_wma_handle wma_handle = (tp_wma_handle) handle;
@@ -1758,7 +1758,7 @@ wma_send_disconnect_roam_params(tp_wma_handle wma_handle,
 				struct roam_offload_scan_req *roam_req)
 {
 	QDF_STATUS status;
-	struct wmi_disconnect_roam_params *params =
+	struct wlan_roam_disconnect_params *params =
 				&roam_req->disconnect_roam_params;
 
 	if (!wma_handle || !wma_handle->wmi_handle) {
@@ -1920,10 +1920,10 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle,
 		  roam_req->Command, roam_req->reason, roam_req->sessionId,
 		  roam_req->RoamScanOffloadEnabled,
 		  roam_req->offload_11k_params.offload_11k_bitmask);
-	wma_handle->interfaces[roam_req->sessionId].roaming_in_progress = false;
+	intr = &wma_handle->interfaces[roam_req->sessionId];
+	intr->roaming_in_progress = false;
 	switch (roam_req->Command) {
 	case ROAM_SCAN_OFFLOAD_START:
-		intr = &wma_handle->interfaces[roam_req->sessionId];
 		intr->delay_before_vdev_stop = roam_req->delay_before_vdev_stop;
 		/*
 		 * Scan/Roam threshold parameters are translated from
@@ -1935,8 +1935,7 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle,
 		/* First param is positive rssi value to trigger rssi based scan
 		 * Opportunistic scan is started at 30dB > trigger rssi.
 		 */
-		wma_handle->suitable_ap_hb_failure = false;
-
+		mlme_set_roam_reason_better_ap(intr->vdev, false);
 		qdf_status = wma_roam_scan_offload_rssi_thresh(wma_handle,
 								roam_req);
 		if (qdf_status != QDF_STATUS_SUCCESS)
@@ -2104,8 +2103,7 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle,
 			break;
 		}
 
-		wma_handle->suitable_ap_hb_failure = false;
-
+		mlme_set_roam_reason_better_ap(intr->vdev, false);
 		wma_roam_scan_fill_scan_params(wma_handle, mac,
 					       NULL, &scan_params);
 
@@ -2207,17 +2205,17 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle,
 		 * now it is time to call it heartbeat failure.
 		 */
 		if ((roam_req->reason == REASON_PREAUTH_FAILED_FOR_ALL)
-		    && wma_handle->suitable_ap_hb_failure) {
+		    && mlme_get_roam_reason_better_ap(intr->vdev)) {
 			wma_err("Sending heartbeat failure after preauth failures");
 			wma_beacon_miss_handler(wma_handle,
 				roam_req->sessionId,
-				wma_handle->suitable_ap_hb_failure_rssi);
-			wma_handle->suitable_ap_hb_failure = false;
+				mlme_get_hb_ap_rssi(intr->vdev));
+			mlme_set_roam_reason_better_ap(intr->vdev, false);
 		}
 		break;
 
 	case ROAM_SCAN_OFFLOAD_UPDATE_CFG:
-		wma_handle->suitable_ap_hb_failure = false;
+		mlme_set_roam_reason_better_ap(intr->vdev, false);
 
 		qdf_status = wma_roam_scan_bmiss_cnt(wma_handle,
 					     roam_req->RoamBmissFirstBcnt,
@@ -2307,8 +2305,9 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle,
 	return qdf_status;
 }
 
+#ifndef ROAM_OFFLOAD_V1
 void wma_update_per_roam_config(WMA_HANDLE handle,
-				struct wmi_per_roam_config_req *req_buf)
+				struct wlan_per_roam_config_req *req_buf)
 {
 	QDF_STATUS status;
 	tp_wma_handle wma_handle = (tp_wma_handle) handle;
@@ -2323,6 +2322,7 @@ void wma_update_per_roam_config(WMA_HANDLE handle,
 	if (QDF_IS_STATUS_ERROR(status))
 		wma_err("failed to set per roam config to FW");
 }
+#endif
 
 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
 
@@ -6205,7 +6205,8 @@ int wma_roam_event_callback(WMA_HANDLE handle, uint8_t *event_buf,
 		 */
 		wma_debug("Better AP found for vdevid %x, rssi %d",
 			 wmi_event->vdev_id, wmi_event->rssi);
-		wma_handle->suitable_ap_hb_failure = false;
+		mlme_set_roam_reason_better_ap(
+			wma_handle->interfaces[wmi_event->vdev_id].vdev, false);
 		wma_roam_better_ap_handler(wma_handle, wmi_event->vdev_id);
 		break;
 	case WMI_ROAM_REASON_SUITABLE_AP:
@@ -6213,8 +6214,11 @@ int wma_roam_event_callback(WMA_HANDLE handle, uint8_t *event_buf,
 		 * WMI_ROAM_REASON_SUITABLE_AP can get called in soft IRQ
 		 * context, so avoid using CSR/PE structure directly.
 		 */
-		wma_handle->suitable_ap_hb_failure = true;
-		wma_handle->suitable_ap_hb_failure_rssi = wmi_event->rssi;
+		mlme_set_roam_reason_better_ap(
+			wma_handle->interfaces[wmi_event->vdev_id].vdev, true);
+		mlme_set_hb_ap_rssi(
+			wma_handle->interfaces[wmi_event->vdev_id].vdev,
+			wmi_event->rssi);
 		wma_debug("Bmiss scan AP found for vdevid %x, rssi %d",
 			 wmi_event->vdev_id, wmi_event->rssi);
 		wma_roam_better_ap_handler(wma_handle, wmi_event->vdev_id);

+ 2 - 0
core/wma/src/wma_utils.c

@@ -4025,6 +4025,7 @@ int wma_rcpi_event_handler(void *handle, uint8_t *cmd_param_info,
 	return 0;
 }
 
+#ifndef ROAM_OFFLOAD_V1
 /**
  * wma_set_roam_offload_flag() -  Set roam offload flag to fw
  * @wma:     wma handle
@@ -4094,6 +4095,7 @@ void wma_update_roam_offload_flag(void *handle,
 
 	wma_set_roam_offload_flag(wma, params->vdev_id, params->enable);
 }
+#endif
 
 QDF_STATUS wma_send_vdev_down_to_fw(t_wma_handle *wma, uint8_t vdev_id)
 {