Przeglądaj źródła

qcacmn: Fix compilation errors for roaming in connection manager

Fix compilation errors for roaming in connection manager.

Change-Id: If154b1b0ca4adfe9f398b37f6d4485de40e2e351
CRs-Fixed: 2849276
gaurank kathpalia 4 lat temu
rodzic
commit
99e2ae6712

+ 14 - 35
umac/mlme/connection_mgr/core/src/wlan_cm_host_roam.c

@@ -17,7 +17,7 @@
 #include "wlan_cm_main.h"
 #include "wlan_cm_roam_sm.h"
 #include "wlan_cm_sm.h"
-#include <wlan_mlme_cmn.h>
+#include <include/wlan_mlme_cmn.h>
 #include "wlan_cm_main_api.h"
 #include <wlan_scan_api.h>
 #include <wlan_serialization_api.h>
@@ -162,10 +162,9 @@ static void cm_connect_prepare_scan_filter_for_roam(
 		filter->pmf_cap = WLAN_PMF_DISABLED;
 }
 
-QDF_STATUS cm_roam_get_candidates(
-		struct wlan_objmgr_pdev *pdev,
-		struct cnx_mgr *cm_ctx,
-		struct cm_roam_req *cm_req)
+static QDF_STATUS cm_roam_get_candidates(struct wlan_objmgr_pdev *pdev,
+					 struct cnx_mgr *cm_ctx,
+					 struct cm_roam_req *cm_req)
 {
 	struct scan_filter *filter;
 	uint32_t num_bss = 0;
@@ -213,22 +212,6 @@ QDF_STATUS cm_roam_get_candidates(
 	return QDF_STATUS_SUCCESS;
 }
 
-QDF_STATUS cm_start_roam_req(struct cnx_mgr *cm_ctx,
-			     struct cm_req *cm_req)
-{
-	cm_req->roam_req.cm_id =
-		cm_get_cm_id(cm_ctx, cm_req->roam_req.req.source);
-	cm_req->cm_id = cm_req->roam_req.cm_id;
-	cm_req->roam_req.req.vdev_id = wlan_vdev_get_id(cm_ctx->vdev);
-	cm_add_req_to_list_and_indicate_osif(cm_ctx, cm_req,
-					     cm_req->roam_req.req.source);
-
-	cm_sm_transition_to(cm_ctx, WLAN_CM_SS_PREAUTH);
-
-	return cm_sm_deliver_event_sync(cm_ctx, WLAN_CM_SM_EV_ROAM_START,
-					sizeof(*cm_req), cm_req);
-}
-
 QDF_STATUS cm_host_roam_start_req(struct cnx_mgr *cm_ctx,
 				  struct cm_req *cm_req)
 {
@@ -470,7 +453,7 @@ reassoc_fail:
 	return QDF_STATUS_SUCCESS;
 }
 
-void
+static void
 cm_reassoc_handle_event_post_fail(struct cnx_mgr *cm_ctx, wlan_cm_id cm_id)
 {
 	struct wlan_cm_roam_resp *resp;
@@ -740,6 +723,7 @@ QDF_STATUS cm_reassoc_rsp(struct wlan_objmgr_vdev *vdev,
 	QDF_STATUS qdf_status;
 	wlan_cm_id cm_id;
 	uint32_t prefix;
+	enum wlan_cm_sm_evt event;
 
 	cm_ctx = cm_get_cm_ctx(vdev);
 	if (!cm_ctx)
@@ -765,12 +749,15 @@ QDF_STATUS cm_reassoc_rsp(struct wlan_objmgr_vdev *vdev,
 		if (cm_is_cm_id_current_candidate_single_pmk(cm_ctx, cm_id))
 			wlan_crypto_selective_clear_sae_single_pmk_entries(
 					vdev, &resp->bssid);
-		qdf_status = cm_sm_deliver_event(vdev,
-						 WLAN_CM_SM_EV_REASSOC_DONE,
-						 sizeof(*resp), resp);
-		if (QDF_IS_STATUS_SUCCESS(qdf_status))
-			return qdf_status;
+		event = WLAN_CM_SM_EV_REASSOC_DONE;
+	} else {
+		event = WLAN_CM_SM_EV_REASSOC_FAILURE;
 	}
+
+	qdf_status = cm_sm_deliver_event(cm_ctx->vdev, event, sizeof(*resp),
+					 resp);
+	if (QDF_IS_STATUS_SUCCESS(qdf_status))
+		return qdf_status;
 post_err:
 	cm_reassoc_complete(cm_ctx, resp);
 
@@ -856,11 +843,3 @@ disconnect_complete:
 	cm_reassoc_handle_event_post_fail(cm_ctx, cm_id);
 	return qdf_status;
 }
-
-void cm_start_roam_invoke(struct cnx_mgr *cm_ctx)
-{
-}
-
-void cm_fw_roam_start(struct cnx_mgr *cm_ctx)
-{
-}

+ 78 - 60
umac/mlme/connection_mgr/core/src/wlan_cm_roam.h

@@ -23,22 +23,7 @@
 #ifndef __WLAN_CM_ROAM_H__
 #define __WLAN_CM_ROAM_H__
 
-/**
- * cm_check_and_prepare_roam_req() - Initiate roam request
- * @cm_ctx: connection manager context
- * @connect_req: connection manager request
- * @roam_req: Roam request
- *
- * Context: Can be called only while handling connection manager event
- *          ie holding state machine lock
- *
- * Return: QDF_STATUS
- */
-QDF_STATUS
-cm_check_and_prepare_roam_req(struct cnx_mgr *cm_ctx,
-			      struct cm_connect_req *connect_req,
-			      struct cm_req **roam_req);
-
+#ifdef WLAN_FEATURE_HOST_ROAM
 /**
  * cm_roam_bss_peer_create_rsp() - handle bss peer create response for roam
  * @vdev: vdev
@@ -83,25 +68,8 @@ QDF_STATUS cm_roam_disconnect_rsp(struct wlan_objmgr_vdev *vdev,
  *
  * Return: QDF status
  */
-#ifdef WLAN_FEATURE_HOST_ROAM
 QDF_STATUS cm_reassoc_complete(struct cnx_mgr *cm_ctx,
 			       struct wlan_cm_roam_resp *resp);
-#else
-static inline QDF_STATUS cm_reassoc_complete(struct cnx_mgr *cm_ctx,
-					     struct wlan_cm_roam_resp *resp)
-{
-	return QDF_STATUS_SUCCESS;
-}
-#endif
-
-/**
- * cm_free_roam_req_mem() - free croam req internal memory, to be called
- * before cm_req is freed
- * @roam_req: roam req
- *
- * Return: void
- */
-void cm_free_roam_req_mem(struct cm_roam_req *roam_req);
 
 /**
  * cm_get_active_reassoc_req() - Get copy of active reassoc request
@@ -116,17 +84,6 @@ void cm_free_roam_req_mem(struct cm_roam_req *roam_req);
 bool cm_get_active_reassoc_req(struct wlan_objmgr_vdev *vdev,
 			       struct wlan_cm_vdev_reassoc_req *req);
 
-/**
- * cm_start_roam_req() - Initiate roam request
- * @cm_ctx: Connection manager context
- * @cm_req: Struct containing the roam request
- *
- * Return: QDF_STATUS_SUCCESS if roam initiation delivers the event
- * to connection state machine else error value.
- */
-QDF_STATUS cm_start_roam_req(struct cnx_mgr *cm_ctx,
-			     struct cm_req *cm_req);
-
 /**
  * cm_host_roam_start_req() - Start host roam request
  * @cm_ctx: Connection manager context
@@ -138,22 +95,6 @@ QDF_STATUS cm_start_roam_req(struct cnx_mgr *cm_ctx,
 QDF_STATUS cm_host_roam_start_req(struct cnx_mgr *cm_ctx,
 				  struct cm_req *cm_req);
 
-/**
- * cm_start_roam_invoke() - Start roam request
- * @cm_ctx: Connection manager context
- *
- * Return: void
- */
-void cm_start_roam_invoke(struct cnx_mgr *cm_ctx);
-
-/**
- * cm_fw_roam_start() - Initiate FW roam request
- * @cm_ctx: Connection manager context
- *
- * Return: void
- */
-void cm_fw_roam_start(struct cnx_mgr *cm_ctx);
-
 /**
  * cm_reassoc_start() - This API will be called to initiate the reassoc
  * process
@@ -222,6 +163,64 @@ cm_send_reassoc_start_fail(struct cnx_mgr *cm_ctx,
 			   wlan_cm_id cm_id,
 			   enum wlan_cm_connect_fail_reason reason);
 
+#else
+static inline QDF_STATUS cm_reassoc_complete(struct cnx_mgr *cm_ctx,
+					     struct wlan_cm_roam_resp *resp)
+{
+	return QDF_STATUS_SUCCESS;
+}
+
+static inline
+QDF_STATUS cm_roam_disconnect_rsp(struct wlan_objmgr_vdev *vdev,
+				  struct wlan_cm_discon_rsp *resp)
+{
+	return QDF_STATUS_SUCCESS;
+}
+
+static inline
+QDF_STATUS cm_roam_bss_peer_create_rsp(struct wlan_objmgr_vdev *vdev,
+				       QDF_STATUS status,
+				       struct qdf_mac_addr *peer_mac)
+{
+	return QDF_STATUS_SUCCESS;
+}
+#endif
+
+/**
+ * cm_check_and_prepare_roam_req() - Initiate roam request
+ * @cm_ctx: connection manager context
+ * @connect_req: connection manager request
+ * @roam_req: Roam request
+ *
+ * Context: Can be called only while handling connection manager event
+ *          ie holding state machine lock
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS
+cm_check_and_prepare_roam_req(struct cnx_mgr *cm_ctx,
+			      struct cm_connect_req *connect_req,
+			      struct cm_req **roam_req);
+/**
+ * cm_free_roam_req_mem() - free croam req internal memory, to be called
+ * before cm_req is freed
+ * @roam_req: roam req
+ *
+ * Return: void
+ */
+void cm_free_roam_req_mem(struct cm_roam_req *roam_req);
+
+/**
+ * cm_add_roam_req_to_list() - add connect req to the connection manager
+ * req list
+ * @vdev: vdev on which connect is received
+ * @cm_req: Roam req provided
+ *
+ * Return: QDF status
+ */
+QDF_STATUS cm_add_roam_req_to_list(struct cnx_mgr *cm_ctx,
+				   struct cm_req *cm_req);
+
 /**
  * cm_fill_bss_info_in_roam_rsp_by_cm_id() - fill bss info for the cm id
  * @cm_ctx: connection manager context
@@ -235,4 +234,23 @@ cm_fill_bss_info_in_roam_rsp_by_cm_id(struct cnx_mgr *cm_ctx,
 				      wlan_cm_id cm_id,
 				      struct wlan_cm_roam_resp *resp);
 
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+/**
+ * cm_roam_offload_enabled() - check if roam offload(LFR3) is enabled
+ * @psoc: psoc pointer to get the INI
+ *
+ * Return: bool
+ */
+static inline bool cm_roam_offload_enabled(struct wlan_objmgr_psoc *psoc)
+{
+	/* use INI CFG_LFR3_ROAMING_OFFLOAD,return true for now */
+	return true;
+}
+#else
+static inline bool cm_roam_offload_enabled(struct wlan_objmgr_psoc *psoc)
+{
+	return false;
+}
+#endif
+
 #endif /* __WLAN_CM_ROAM_H__ */

+ 21 - 5
umac/mlme/connection_mgr/core/src/wlan_cm_roam_sm.c

@@ -40,18 +40,34 @@ bool cm_state_roaming_event(void *ctx, uint16_t event,
 {
 	struct cnx_mgr *cm_ctx = ctx;
 	bool event_handled = true;
+	struct wlan_objmgr_psoc *psoc;
 
 	switch (event) {
 	case WLAN_CM_SM_EV_ROAM_REQ:
-		cm_start_roam_req(cm_ctx, data);
+		psoc = wlan_vdev_get_psoc(cm_ctx->vdev);
+		if (!psoc) {
+			event_handled = false;
+			break;
+		}
+		if (cm_roam_offload_enabled(psoc)) {
+			cm_sm_deliver_event_sync(cm_ctx,
+						 WLAN_CM_SM_EV_ROAM_INVOKE,
+						 data_len, data);
+		} else {
+			cm_add_roam_req_to_list(cm_ctx, data);
+			cm_sm_transition_to(cm_ctx, WLAN_CM_SS_PREAUTH);
+			cm_sm_deliver_event_sync(cm_ctx,
+						 WLAN_CM_SM_EV_ROAM_START,
+						 data_len, data);
+		}
 		break;
 	case WLAN_CM_SM_EV_ROAM_INVOKE:
-		cm_add_connect_req_to_list(cm_ctx, data);
-		cm_start_roam_invoke(cm_ctx);
+		cm_add_roam_req_to_list(cm_ctx, data);
+		/* cm_start_roam_invoke(cm_ctx); define in LFR3/FW roam file */
 		break;
 	case WLAN_CM_SM_EV_ROAM_START:
-		cm_add_connect_req_to_list(cm_ctx, data);
-		cm_fw_roam_start(cm_ctx);
+		cm_add_roam_req_to_list(cm_ctx, data);
+		/* cm_fw_roam_start(cm_ctx); define in LFR3/FW roam file */
 		break;
 	default:
 		event_handled = false;

+ 22 - 0
umac/mlme/connection_mgr/core/src/wlan_cm_roam_util.c

@@ -25,6 +25,12 @@
 #include "wlan_cm_roam.h"
 #include <wlan_scan_api.h>
 
+void cm_free_roam_req_mem(struct cm_roam_req *roam_req)
+{
+	if (roam_req->candidate_list)
+		wlan_scan_purge_results(roam_req->candidate_list);
+}
+
 QDF_STATUS cm_check_and_prepare_roam_req(struct cnx_mgr *cm_ctx,
 					 struct cm_connect_req *connect_req,
 					 struct cm_req **roam_req)
@@ -86,6 +92,22 @@ QDF_STATUS cm_check_and_prepare_roam_req(struct cnx_mgr *cm_ctx,
 	return QDF_STATUS_SUCCESS;
 }
 
+QDF_STATUS cm_add_roam_req_to_list(struct cnx_mgr *cm_ctx,
+				   struct cm_req *cm_req)
+{
+	QDF_STATUS status;
+
+	cm_req->roam_req.cm_id =
+			cm_get_cm_id(cm_ctx, cm_req->roam_req.req.source);
+	cm_req->cm_id = cm_req->roam_req.cm_id;
+	cm_req->roam_req.req.vdev_id = wlan_vdev_get_id(cm_ctx->vdev);
+	status =
+	    cm_add_req_to_list_and_indicate_osif(cm_ctx, cm_req,
+						 cm_req->roam_req.req.source);
+
+	return status;
+}
+
 #ifdef WLAN_FEATURE_HOST_ROAM
 bool cm_get_active_reassoc_req(struct wlan_objmgr_vdev *vdev,
 			       struct wlan_cm_vdev_reassoc_req *req)

+ 4 - 6
umac/mlme/connection_mgr/core/src/wlan_cm_util.c

@@ -23,6 +23,10 @@
 #include "wlan_cm_public_struct.h"
 #include "wlan_serialization_api.h"
 #include "wlan_cm_bss_score_param.h"
+#ifdef WLAN_POLICY_MGR_ENABLE
+#include <wlan_policy_mgr_api.h>
+#endif
+#include "wlan_cm_roam.h"
 
 static uint32_t cm_get_prefix_for_cm_id(enum wlan_cm_source source) {
 	switch (source) {
@@ -660,12 +664,6 @@ void cm_free_connect_req_mem(struct cm_connect_req *connect_req)
 	qdf_mem_zero(connect_req, sizeof(*connect_req));
 }
 
-void cm_free_roam_req_mem(struct cm_roam_req *roam_req)
-{
-	if (roam_req->candidate_list)
-		wlan_scan_purge_results(roam_req->candidate_list);
-}
-
 QDF_STATUS
 cm_delete_req_from_list(struct cnx_mgr *cm_ctx, wlan_cm_id cm_id)
 {