浏览代码

qcacld-3.0: Move sme_ft_api to connection manager ucfg api

Move sme_ft_api to connection manager ucfg apis.

Change-Id: If710be0d8a4a9d45d37f588389e40f66c62c7487
CRs-Fixed: 2990112
Utkarsh Bhatnagar 3 年之前
父节点
当前提交
7f9ad91112

+ 0 - 1
Kbuild

@@ -736,7 +736,6 @@ SME_CSR_OBJS := $(SME_SRC_DIR)/csr/csr_api_roam.o \
 SME_QOS_OBJS := $(SME_SRC_DIR)/qos/sme_qos.o
 
 SME_CMN_OBJS := $(SME_SRC_DIR)/common/sme_api.o \
-		$(SME_SRC_DIR)/common/sme_ft_api.o \
 		$(SME_SRC_DIR)/common/sme_power_save.o \
 		$(SME_SRC_DIR)/common/sme_trace.o
 

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

@@ -162,4 +162,75 @@ ucfg_cm_update_fils_config(struct wlan_objmgr_psoc *psoc,
 }
 #endif
 
+#ifdef WLAN_FEATURE_HOST_ROAM
+void ucfg_cm_ft_reset(struct wlan_objmgr_vdev *vdev);
+
+/**
+ * ucfg_cm_set_ft_ies() - to set FT IEs
+ * @pdev: pdev ctx
+ * @vdev_id: vdev identifier
+ * @ft_ies: pointer to FT IEs
+ * @ft_ies_length: length of FT IEs
+ *
+ * Each time the supplicant sends down the FT IEs to the driver. This function
+ * is called in SME. This function packages and sends the FT IEs to PE.
+ *
+ * Return: none
+ */
+void ucfg_cm_set_ft_ies(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
+			const uint8_t *ft_ies, uint16_t ft_ies_length);
+
+/**
+ * ucfg_cm_check_ft_status() - Check for key wait status in FT mode
+ * @pdev: pdev ctx
+ * @vdev_id: vdev identifier
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS ucfg_cm_check_ft_status(struct wlan_objmgr_pdev *pdev,
+				   uint8_t vdev_id);
+
+/**
+ * ucfg_cm_ft_key_ready_for_install() - API to check ft key ready for install
+ * @vdev: pdev handle
+ *
+ * It is only applicable for LFR2.0 enabled
+ *
+ * Return: true when ft key is ready otherwise false
+ */
+bool ucfg_cm_ft_key_ready_for_install(struct wlan_objmgr_vdev *vdev);
+void ucfg_cm_set_ft_pre_auth_state(struct wlan_objmgr_vdev *vdev, bool state);
+
+#else /* WLAN_FEATURE_HOST_ROAM */
+
+static inline void ucfg_cm_ft_reset(struct wlan_objmgr_vdev *vdev) {}
+static inline
+void ucfg_cm_set_ft_ies(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
+			const uint8_t *ft_ies, uint16_t ft_ies_length) {}
+
+static inline
+QDF_STATUS ucfg_cm_check_ft_status(struct wlan_objmgr_pdev *pdev,
+				   uint8_t vdev_id)
+{
+	return QDF_STATUS_E_FAILURE;
+}
+
+static inline void ucfg_cm_set_ft_pre_auth_state(struct wlan_objmgr_vdev *vdev,
+						 bool state) {}
+#endif /* WLAN_FEATURE_HOST_ROAM */
+
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+/**
+ * ucfg_cm_reset_key() -Reset key information
+ * @pdev: pdev handle
+ * @vdev_id: vdev identifier
+ *
+ * Return: None
+ */
+void ucfg_cm_reset_key(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id);
+#else
+static inline void
+ucfg_cm_reset_key(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id) {}
+#endif /* WLAN_FEATURE_ROAM_OFFLOAD */
+
 #endif /* _WLAN_CM_ROAM_UCFG_API_H_ */

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

@@ -260,3 +260,216 @@ ucfg_wlan_cm_roam_invoke(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
 {
 	return wlan_cm_roam_invoke(pdev, vdev_id, bssid, ch_freq, source);
 }
+
+#ifdef WLAN_FEATURE_HOST_ROAM
+void ucfg_cm_set_ft_pre_auth_state(struct wlan_objmgr_vdev *vdev, bool state)
+{
+	struct mlme_legacy_priv *mlme_priv;
+
+	mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
+	if (!mlme_priv)
+		return;
+
+	mlme_priv->connect_info.ft_info.set_ft_preauth_state = state;
+}
+
+static bool ucfg_cm_get_ft_pre_auth_state(struct wlan_objmgr_vdev *vdev)
+{
+	struct mlme_legacy_priv *mlme_priv;
+
+	mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
+	if (!mlme_priv)
+		return false;
+
+	return mlme_priv->connect_info.ft_info.set_ft_preauth_state;
+}
+
+void ucfg_cm_set_ft_ies(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
+			const uint8_t *ft_ies, uint16_t ft_ies_length)
+{
+	QDF_STATUS status = QDF_STATUS_E_FAILURE;
+	struct wlan_objmgr_vdev *vdev;
+	struct mlme_legacy_priv *mlme_priv;
+
+	if (!ft_ies) {
+		mlme_err("ft ies is NULL");
+		return;
+	}
+
+	vdev = wlan_objmgr_get_vdev_by_id_from_pdev(pdev, vdev_id,
+						    WLAN_MLME_CM_ID);
+	if (!vdev)
+		return;
+
+	mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
+	if (!mlme_priv)
+		goto end;
+
+	status = cm_roam_acquire_lock(vdev);
+	if (QDF_IS_STATUS_ERROR(status))
+		goto end;
+
+	mlme_debug("FT IEs Req is received in state %d",
+		  mlme_priv->connect_info.ft_info.ft_state);
+
+	/* Global Station FT State */
+	switch (mlme_priv->connect_info.ft_info.ft_state) {
+	case FT_START_READY:
+	case FT_AUTH_REQ_READY:
+		mlme_debug("ft_ies_length: %d", ft_ies_length);
+		ft_ies_length = QDF_MIN(ft_ies_length, MAX_FTIE_SIZE);
+		mlme_priv->connect_info.ft_info.auth_ie_len = ft_ies_length;
+		qdf_mem_copy(mlme_priv->connect_info.ft_info.auth_ft_ie,
+			     ft_ies, ft_ies_length);
+		mlme_priv->connect_info.ft_info.ft_state = FT_AUTH_REQ_READY;
+		break;
+
+	case FT_REASSOC_REQ_WAIT:
+		/*
+		 * We are done with pre-auth, hence now waiting for
+		 * reassoc req. This is the new FT Roaming in place At
+		 * this juncture we'r ready to start sending Reassoc req
+		 */
+
+		ft_ies_length = QDF_MIN(ft_ies_length, MAX_FTIE_SIZE);
+
+		mlme_debug("New Reassoc Req: %pK in state %d",
+			   ft_ies, mlme_priv->connect_info.ft_info.ft_state);
+		mlme_priv->connect_info.ft_info.reassoc_ie_len =
+							ft_ies_length;
+		qdf_mem_copy(mlme_priv->connect_info.ft_info.reassoc_ft_ie,
+				ft_ies, ft_ies_length);
+
+		mlme_priv->connect_info.ft_info.ft_state = FT_SET_KEY_WAIT;
+		mlme_debug("ft_ies_length: %d state: %d", ft_ies_length,
+			   mlme_priv->connect_info.ft_info.ft_state);
+		break;
+
+	default:
+		mlme_warn("Unhandled state: %d",
+			  mlme_priv->connect_info.ft_info.ft_state);
+		break;
+	}
+	cm_roam_release_lock(vdev);
+end:
+	wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_CM_ID);
+}
+
+QDF_STATUS ucfg_cm_check_ft_status(struct wlan_objmgr_pdev *pdev,
+				   uint8_t vdev_id)
+{
+	QDF_STATUS status = QDF_STATUS_E_FAILURE;
+	struct wlan_objmgr_vdev *vdev;
+	struct mlme_legacy_priv *mlme_priv;
+
+	vdev = wlan_objmgr_get_vdev_by_id_from_pdev(pdev, vdev_id,
+						    WLAN_MLME_CM_ID);
+	if (!vdev)
+		return status;
+
+	mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
+	if (!mlme_priv)
+		goto end;
+
+	status = cm_roam_acquire_lock(vdev);
+	if (QDF_IS_STATUS_ERROR(status))
+		goto end;
+
+	mlme_debug("FT update key is received in state %d",
+		   mlme_priv->connect_info.ft_info.ft_state);
+
+	/* Global Station FT State */
+	switch (mlme_priv->connect_info.ft_info.ft_state) {
+	case FT_SET_KEY_WAIT:
+		if (ucfg_cm_get_ft_pre_auth_state(vdev)) {
+			mlme_priv->connect_info.ft_info.ft_state = FT_START_READY;
+			mlme_debug("state changed to %d",
+				   mlme_priv->connect_info.ft_info.ft_state);
+			break;
+		}
+		/* fallthrough */
+	default:
+		mlme_debug("Unhandled state:%d",
+			   mlme_priv->connect_info.ft_info.ft_state);
+		status = QDF_STATUS_E_FAILURE;
+		break;
+	}
+	cm_roam_release_lock(vdev);
+end:
+	wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_CM_ID);
+
+	return status;
+}
+
+bool ucfg_cm_ft_key_ready_for_install(struct wlan_objmgr_vdev *vdev)
+{
+	bool ret = false;
+	struct mlme_legacy_priv *mlme_priv;
+
+	mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
+	if (!mlme_priv)
+		return ret;
+
+	if (ucfg_cm_get_ft_pre_auth_state(vdev) &&
+	    mlme_priv->connect_info.ft_info.ft_state == FT_START_READY) {
+		ret = true;
+		ucfg_cm_set_ft_pre_auth_state(vdev, false);
+	}
+
+	return ret;
+}
+
+void ucfg_cm_ft_reset(struct wlan_objmgr_vdev *vdev)
+{
+	struct mlme_legacy_priv *mlme_priv;
+
+	mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
+	if (!mlme_priv)
+		return;
+
+	qdf_mem_zero(&mlme_priv->connect_info.ft_info,
+		     sizeof(struct ft_context));
+
+	mlme_priv->connect_info.ft_info.ft_state = FT_START_READY;
+}
+#endif /* WLAN_FEATURE_HOST_ROAM */
+
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+#ifdef FEATURE_WLAN_ESE
+static void
+ucfg_cm_reset_esecckm_info(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id)
+{
+	struct wlan_objmgr_vdev *vdev;
+	struct rso_config *rso_cfg;
+
+	vdev = wlan_objmgr_get_vdev_by_id_from_pdev(pdev, vdev_id,
+						    WLAN_MLME_CM_ID);
+	if (!vdev) {
+		mlme_err("vdev object is NULL for vdev %d", vdev_id);
+		return;
+	}
+	rso_cfg = wlan_cm_get_rso_config(vdev);
+	if (!rso_cfg) {
+		wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_CM_ID);
+		return;
+	}
+
+	qdf_mem_zero(rso_cfg->krk, WMI_KRK_KEY_LEN);
+	qdf_mem_zero(rso_cfg->btk, WMI_BTK_KEY_LEN);
+	rso_cfg->is_ese_assoc = false;
+	wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_CM_ID);
+
+}
+#else
+static inline
+void ucfg_cm_reset_esecckm_info(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id)
+{
+}
+#endif
+
+void ucfg_cm_reset_key(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id)
+{
+	wlan_cm_set_psk_pmk(pdev, vdev_id, NULL, 0);
+	ucfg_cm_reset_esecckm_info(pdev, vdev_id);
+}
+#endif /* WLAN_FEATURE_ROAM_OFFLOAD */

+ 3 - 5
core/hdd/inc/wlan_hdd_assoc.h

@@ -525,16 +525,14 @@ bool hdd_is_roam_sync_in_progress(struct hdd_context *hdd_ctx, uint8_t vdev_id);
 #ifdef WLAN_FEATURE_HOST_ROAM
 /**
  * wlan_hdd_ft_set_key_delay() - hdd set key delayed for FT mode
- * @mac_handle: mac handler
- * @adapter: pointer to adapter context
+ * @vdev: vdev
  *
  * Return: void
  */
-void
-wlan_hdd_ft_set_key_delay(mac_handle_t mac_handle, struct hdd_adapter *adapter);
+void wlan_hdd_ft_set_key_delay(struct wlan_objmgr_vdev *vdev);
 #else
 static inline void
-wlan_hdd_ft_set_key_delay(mac_handle_t mac_handle, struct hdd_adapter *adapter)
+wlan_hdd_ft_set_key_delay(struct wlan_objmgr_vdev *vdev)
 {
 }
 #endif

+ 3 - 11
core/hdd/src/wlan_hdd_assoc.c

@@ -89,6 +89,7 @@
 #include "wlan_roam_debug.h"
 
 #include "wlan_hdd_twt.h"
+#include "wlan_cm_roam_ucfg_api.h"
 
 /* These are needed to recognize WPA and RSN suite types */
 #define HDD_WPA_OUI_SIZE 4
@@ -2056,24 +2057,15 @@ static void hdd_roam_channel_switch_handler(struct hdd_adapter *adapter,
 }
 
 #ifdef WLAN_FEATURE_HOST_ROAM
-void
-wlan_hdd_ft_set_key_delay(mac_handle_t mac_handle, struct hdd_adapter *adapter)
+void wlan_hdd_ft_set_key_delay(struct wlan_objmgr_vdev *vdev)
 {
 	int errno = 0;
-	uint32_t session_id = adapter->vdev_id;
-	struct wlan_objmgr_vdev *vdev;
-
-	vdev = hdd_objmgr_get_vdev_by_user(adapter, WLAN_OSIF_ID);
-	if (!vdev)
-		return;
 
-	if (sme_ft_key_ready_for_install(mac_handle, session_id))
+	if (ucfg_cm_ft_key_ready_for_install(vdev))
 		errno =
 		wlan_cfg80211_crypto_add_key(vdev,
 					     WLAN_CRYPTO_KEY_TYPE_UNICAST,
 					     0, false);
-	hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_ID);
-
 	if (errno)
 		hdd_err("ft set key failed");
 }

+ 8 - 11
core/hdd/src/wlan_hdd_cfg80211.c

@@ -18363,9 +18363,9 @@ static int wlan_hdd_add_key_sap(struct hdd_adapter *adapter,
 	return errno;
 }
 
-static int wlan_hdd_add_key_sta(struct hdd_adapter *adapter,
-				bool pairwise, u8 key_index,
-				mac_handle_t mac_handle, bool *ft_mode)
+static int wlan_hdd_add_key_sta(struct wlan_objmgr_pdev *pdev,
+				struct hdd_adapter *adapter,
+				bool pairwise, u8 key_index, bool *ft_mode)
 {
 	struct wlan_objmgr_vdev *vdev;
 	int errno;
@@ -18375,7 +18375,7 @@ static int wlan_hdd_add_key_sta(struct hdd_adapter *adapter,
 	 * pre-authentication is done. Save the key in the
 	 * UMAC and install it after association
 	 */
-	status = sme_check_ft_status(mac_handle, adapter->vdev_id);
+	status = ucfg_cm_check_ft_status(pdev, adapter->vdev_id);
 	if (status == QDF_STATUS_SUCCESS) {
 		*ft_mode = true;
 		return 0;
@@ -18482,8 +18482,8 @@ static int __wlan_hdd_cfg80211_add_key(struct wiphy *wiphy,
 		break;
 	case QDF_STA_MODE:
 	case QDF_P2P_CLIENT_MODE:
-		errno = wlan_hdd_add_key_sta(adapter, pairwise, key_index,
-					     mac_handle, &ft_mode);
+		errno = wlan_hdd_add_key_sta(hdd_ctx->pdev, adapter, pairwise,
+					     key_index, &ft_mode);
 		if (ft_mode)
 			return 0;
 		break;
@@ -20143,7 +20143,6 @@ __wlan_hdd_cfg80211_update_ft_ies(struct wiphy *wiphy,
 	struct hdd_adapter *adapter = WLAN_HDD_GET_PRIV_PTR(dev);
 	struct hdd_station_ctx *sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
 	int status;
-	mac_handle_t mac_handle;
 
 	hdd_enter();
 
@@ -20171,10 +20170,8 @@ __wlan_hdd_cfg80211_update_ft_ies(struct wiphy *wiphy,
 	}
 	hdd_debug("called with Ie of length = %zu", ftie->ie_len);
 
-	/* Pass the received FT IEs to SME */
-	mac_handle = hdd_ctx->mac_handle;
-	sme_set_ft_ies(mac_handle, adapter->vdev_id,
-		       (const u8 *)ftie->ie, ftie->ie_len);
+	ucfg_cm_set_ft_ies(hdd_ctx->pdev, adapter->vdev_id,
+			   (const u8 *)ftie->ie, ftie->ie_len);
 	hdd_exit();
 	return 0;
 }

+ 5 - 1
core/hdd/src/wlan_hdd_cm_api.h

@@ -26,6 +26,7 @@
 #include <net/cfg80211.h>
 #include "wlan_cm_public_struct.h"
 #include "osif_cm_util.h"
+#include "wlan_cm_roam_ucfg_api.h"
 
 /**
  * wlan_hdd_cm_connect() - cfg80211 connect api
@@ -191,10 +192,13 @@ void __hdd_cm_disconnect_handler_pre_user_update(struct hdd_adapter *adapter);
  * __hdd_cm_disconnect_handler_post_user_update() - Handle disconnect indication
  * after updating to user space
  * @adapter: Pointer to adapter
+ * @vdev: vdev ptr
  *
  * Return: None
  */
-void __hdd_cm_disconnect_handler_post_user_update(struct hdd_adapter *adapter);
+void
+__hdd_cm_disconnect_handler_post_user_update(struct hdd_adapter *adapter,
+					     struct wlan_objmgr_vdev *vdev);
 
 /**
  * hdd_cm_set_peer_authenticate() - set peer as authenticated

+ 3 - 3
core/hdd/src/wlan_hdd_cm_connect.c

@@ -480,7 +480,7 @@ hdd_cm_connect_failure_post_user_update(struct wlan_objmgr_vdev *vdev,
 	}
 
 	hdd_clear_roam_profile_ie(adapter);
-	sme_reset_key(hdd_ctx->mac_handle, adapter->vdev_id);
+	ucfg_cm_reset_key(hdd_ctx->pdev, adapter->vdev_id);
 	hdd_wmm_dscp_initial_state(adapter);
 	hdd_debug("Disabling queues");
 	wlan_hdd_netif_queue_control(adapter,
@@ -848,7 +848,7 @@ hdd_cm_connect_success_pre_user_update(struct wlan_objmgr_vdev *vdev,
 	sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
 	mac_handle = hdd_adapter_get_mac_handle(adapter);
 
-	wlan_hdd_ft_set_key_delay(mac_handle, adapter);
+	wlan_hdd_ft_set_key_delay(vdev);
 	hdd_cm_update_rssi_snr_by_bssid(adapter);
 	hdd_cm_save_connect_status(adapter, rsp->status_code);
 
@@ -1352,7 +1352,7 @@ QDF_STATUS hdd_cm_ft_preauth_complete(struct wlan_objmgr_vdev *vdev,
 		return QDF_STATUS_E_FAILURE;
 	}
 
-	sme_set_ft_pre_auth_state(mac_handle, wlan_vdev_get_id(vdev), true);
+	ucfg_cm_set_ft_pre_auth_state(vdev, true);
 
 	ft_event.target_ap = ft_ie;
 	ft_event.ies = (u8 *)(ft_ie + QDF_MAC_ADDR_SIZE);

+ 11 - 16
core/hdd/src/wlan_hdd_cm_disconnect.c

@@ -141,32 +141,27 @@ void __hdd_cm_disconnect_handler_pre_user_update(struct hdd_adapter *adapter)
 	hdd_place_marker(adapter, "DISCONNECTED", NULL);
 }
 
-void __hdd_cm_disconnect_handler_post_user_update(struct hdd_adapter *adapter)
+void __hdd_cm_disconnect_handler_post_user_update(struct hdd_adapter *adapter,
+						  struct wlan_objmgr_vdev *vdev)
 {
 	struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
 	struct hdd_station_ctx *sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
 	mac_handle_t mac_handle;
-	struct wlan_objmgr_vdev *vdev;
+
+	mac_handle = hdd_ctx->mac_handle;
 
 	/* update P2P connection status */
-	ucfg_p2p_status_disconnect(adapter->vdev);
+	ucfg_p2p_status_disconnect(vdev);
 
 	hdd_wmm_adapter_clear(adapter);
-	mac_handle = hdd_ctx->mac_handle;
-	sme_ft_reset(mac_handle, adapter->vdev_id);
-	sme_reset_key(mac_handle, adapter->vdev_id);
+	ucfg_cm_ft_reset(vdev);
+	ucfg_cm_reset_key(hdd_ctx->pdev, adapter->vdev_id);
 	hdd_clear_roam_profile_ie(adapter);
 
-	if (adapter->device_mode == QDF_STA_MODE) {
-		vdev = hdd_objmgr_get_vdev_by_user(adapter, WLAN_OSIF_ID);
-		if (vdev) {
-			wlan_crypto_reset_vdev_params(vdev);
-			hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_ID);
-		}
-	}
+	if (adapter->device_mode == QDF_STA_MODE)
+		wlan_crypto_reset_vdev_params(vdev);
 
 	hdd_remove_beacon_filter(adapter);
-
 	if (sme_is_beacon_report_started(mac_handle, adapter->vdev_id)) {
 		hdd_debug("Sending beacon pause indication to userspace");
 		hdd_beacon_recv_pause_indication((hdd_handle_t)hdd_ctx,
@@ -185,7 +180,7 @@ void __hdd_cm_disconnect_handler_post_user_update(struct hdd_adapter *adapter)
 		hdd_debug("Failed to set RTS_PROFILE");
 
 	hdd_init_scan_reject_params(hdd_ctx);
-	ucfg_pmo_flush_gtk_offload_req(adapter->vdev);
+	ucfg_pmo_flush_gtk_offload_req(vdev);
 
 	if ((QDF_STA_MODE == adapter->device_mode) ||
 	    (QDF_P2P_CLIENT_MODE == adapter->device_mode)) {
@@ -352,7 +347,7 @@ hdd_cm_disconnect_complete_post_user_update(struct wlan_objmgr_vdev *vdev,
 				adapter, FTM_TIME_SYNC_STA_DISCONNECTED);
 	}
 
-	__hdd_cm_disconnect_handler_post_user_update(adapter);
+	__hdd_cm_disconnect_handler_post_user_update(adapter, vdev);
 	wlan_twt_concurrency_update(hdd_ctx);
 
 	return QDF_STATUS_SUCCESS;

+ 2 - 2
core/hdd/src/wlan_hdd_wext.c

@@ -7807,8 +7807,8 @@ static int __iw_set_fties(struct net_device *dev, struct iw_request_info *info,
 	hdd_debug("called with Ie of length = %d", wrqu->data.length);
 
 	/* Pass the received FT IEs to SME */
-	sme_set_ft_ies(hdd_ctx->mac_handle, adapter->vdev_id,
-		       extra, wrqu->data.length);
+	ucfg_cm_set_ft_ies(hdd_ctx->pdev, adapter->vdev_id,
+			   extra, wrqu->data.length);
 	hdd_exit();
 	return 0;
 }

+ 0 - 1
core/mac/inc/ani_global.h

@@ -30,7 +30,6 @@
 #include "sir_api.h"
 
 #include "csr_api.h"
-#include "sme_ft_api.h"
 #include "csr_support.h"
 #include "sme_internal.h"
 #include "sap_api.h"

+ 0 - 105
core/sme/inc/sme_ft_api.h

@@ -1,105 +0,0 @@
-/*
- * Copyright (c) 2013-2016, 2018, 2019-2021 The Linux Foundation. All rights reserved.
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#if !defined(__SME_FTAPI_H)
-#define __SME_FTAPI_H
-
-#ifdef WLAN_FEATURE_HOST_ROAM
-
-void sme_ft_reset(mac_handle_t mac_handle, uint8_t sessionId);
-
-/**
- * sme_set_ft_ies() - to set FT IEs
- * @mac_handle: opaque handle to the global MAC context
- * @session_id: sme session id
- * @ft_ies: pointer to FT IEs
- * @ft_ies_length: length of FT IEs
- *
- * Each time the supplicant sends down the FT IEs to the driver. This function
- * is called in SME. This function packages and sends the FT IEs to PE.
- *
- * Return: none
- */
-void sme_set_ft_ies(mac_handle_t mac_handle, uint8_t sessionId,
-		    const uint8_t *ft_ies, uint16_t ft_ies_length);
-
-/**
- * sme_check_ft_status() - Check for key wait status in FT mode
- * @mac_handle: MAC handle
- * @session_id: vdev identifier
- *
- * Return: QDF_STATUS
- */
-QDF_STATUS sme_check_ft_status(mac_handle_t mac_handle, uint8_t session_id);
-
-/**
- * sme_ft_key_ready_for_install() - API to check ft key ready for install
- * @mac_handle: MAC handle
- * @session_id: vdev identifier
- *
- * It is only applicable for LFR2.0 enabled
- *
- * Return: true when ft key is ready otherwise false
- */
-bool sme_ft_key_ready_for_install(mac_handle_t mac_handle, uint8_t session_id);
-void sme_set_ft_pre_auth_state(mac_handle_t mac_handle, uint8_t sessionId,
-			       bool state);
-bool sme_get_ft_pre_auth_state(mac_handle_t mac_handle, uint8_t sessionId);
-
-#else /* WLAN_FEATURE_HOST_ROAM */
-
-static inline void sme_ft_reset(mac_handle_t mac_handle, uint8_t sessionId) {}
-static inline
-void sme_set_ft_ies(mac_handle_t mac_handle, uint8_t sessionId,
-		    const uint8_t *ft_ies, uint16_t ft_ies_length) {}
-
-static inline QDF_STATUS sme_check_ft_status(mac_handle_t mac_handle,
-					     uint8_t session_id)
-{
-	return QDF_STATUS_E_FAILURE;
-}
-
-static inline bool
-sme_ft_key_ready_for_install(mac_handle_t mac_handle, uint8_t session_id)
-{
-	return false;
-}
-
-static inline void sme_set_ft_pre_auth_state(mac_handle_t mac_handle,
-					     uint8_t sessionId, bool state) {}
-static inline bool sme_get_ft_pre_auth_state(mac_handle_t mac_handle,
-					     uint8_t sessionId)
-{
-	return false;
-}
-#endif /* WLAN_FEATURE_HOST_ROAM */
-
-#ifdef WLAN_FEATURE_ROAM_OFFLOAD
-/**
- * sme_reset_key() -Reset key information
- * @mac_handle: MAC handle
- * @vdev_id: vdev identifier
- *
- * Return: None
- */
-void sme_reset_key(mac_handle_t mac_handle, uint8_t vdev_id);
-#else
-static inline void sme_reset_key(mac_handle_t mac_handle, uint8_t vdev_id) {}
-#endif /* WLAN_FEATURE_ROAM_OFFLOAD */
-
-#endif

+ 0 - 289
core/sme/src/common/sme_ft_api.c

@@ -1,289 +0,0 @@
-/*
- * Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <sir_common.h>
-#include <ani_global.h>
-#include <csr_inside_api.h>
-#include "wlan_cm_roam_api.h"
-#include <sir_api.h>
-
-#ifdef WLAN_FEATURE_HOST_ROAM
-
-void sme_set_ft_pre_auth_state(mac_handle_t mac_handle, uint8_t sessionId,
-			       bool state)
-{
-	struct mac_context *mac = MAC_CONTEXT(mac_handle);
-	struct wlan_objmgr_vdev *vdev;
-	struct mlme_legacy_priv *mlme_priv;
-
-	vdev = wlan_objmgr_get_vdev_by_id_from_pdev(mac->pdev, sessionId,
-						    WLAN_LEGACY_SME_ID);
-	if (!vdev)
-		return;
-
-	mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
-	if (!mlme_priv)
-		goto end;
-
-	mlme_priv->connect_info.ft_info.set_ft_preauth_state = state;
-end:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
-}
-
-bool sme_get_ft_pre_auth_state(mac_handle_t mac_handle, uint8_t sessionId)
-{
-	struct mac_context *mac = MAC_CONTEXT(mac_handle);
-	struct wlan_objmgr_vdev *vdev;
-	struct mlme_legacy_priv *mlme_priv;
-	bool val = false;
-
-	vdev = wlan_objmgr_get_vdev_by_id_from_pdev(mac->pdev, sessionId,
-						    WLAN_LEGACY_SME_ID);
-	if (!vdev)
-		return val;
-
-	mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
-	if (!mlme_priv)
-		goto end;
-
-	val = mlme_priv->connect_info.ft_info.set_ft_preauth_state;
-end:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
-
-	return val;
-}
-
-void sme_set_ft_ies(mac_handle_t mac_handle, uint8_t session_id,
-		    const uint8_t *ft_ies, uint16_t ft_ies_length)
-{
-	struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle);
-	QDF_STATUS status = QDF_STATUS_E_FAILURE;
-	struct wlan_objmgr_vdev *vdev;
-	struct mlme_legacy_priv *mlme_priv;
-
-	if (!ft_ies) {
-		sme_err("ft ies is NULL");
-		return;
-	}
-
-	vdev = wlan_objmgr_get_vdev_by_id_from_pdev(mac_ctx->pdev, session_id,
-						    WLAN_LEGACY_SME_ID);
-	if (!vdev)
-		return;
-
-	mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
-	if (!mlme_priv)
-		goto end;
-
-	status = sme_acquire_global_lock(&mac_ctx->sme);
-	if (QDF_IS_STATUS_ERROR(status))
-		goto end;
-
-	sme_debug("FT IEs Req is received in state %d",
-		  mlme_priv->connect_info.ft_info.ft_state);
-
-	/* Global Station FT State */
-	switch (mlme_priv->connect_info.ft_info.ft_state) {
-	case FT_START_READY:
-	case FT_AUTH_REQ_READY:
-		sme_debug("ft_ies_length: %d", ft_ies_length);
-		ft_ies_length = QDF_MIN(ft_ies_length, MAX_FTIE_SIZE);
-		mlme_priv->connect_info.ft_info.auth_ie_len = ft_ies_length;
-		qdf_mem_copy(mlme_priv->connect_info.ft_info.auth_ft_ie,
-			     ft_ies, ft_ies_length);
-		mlme_priv->connect_info.ft_info.ft_state = FT_AUTH_REQ_READY;
-		break;
-
-	case FT_REASSOC_REQ_WAIT:
-		/*
-		 * We are done with pre-auth, hence now waiting for
-		 * reassoc req. This is the new FT Roaming in place At
-		 * this juncture we'r ready to start sending Reassoc req
-		 */
-
-		ft_ies_length = QDF_MIN(ft_ies_length, MAX_FTIE_SIZE);
-
-		sme_debug("New Reassoc Req: %pK in state %d",
-			ft_ies, mlme_priv->connect_info.ft_info.ft_state);
-		mlme_priv->connect_info.ft_info.reassoc_ie_len =
-							ft_ies_length;
-		qdf_mem_copy(mlme_priv->connect_info.ft_info.reassoc_ft_ie,
-				ft_ies, ft_ies_length);
-
-		mlme_priv->connect_info.ft_info.ft_state = FT_SET_KEY_WAIT;
-		sme_debug("ft_ies_length: %d state: %d", ft_ies_length,
-			  mlme_priv->connect_info.ft_info.ft_state);
-		break;
-
-	default:
-		sme_warn("Unhandled state: %d",
-			 mlme_priv->connect_info.ft_info.ft_state);
-		break;
-	}
-	sme_release_global_lock(&mac_ctx->sme);
-end:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
-}
-
-QDF_STATUS sme_check_ft_status(mac_handle_t mac_handle, uint8_t session_id)
-{
-	struct mac_context *mac = MAC_CONTEXT(mac_handle);
-	QDF_STATUS status = QDF_STATUS_E_FAILURE;
-	struct wlan_objmgr_vdev *vdev;
-	struct mlme_legacy_priv *mlme_priv;
-
-	vdev = wlan_objmgr_get_vdev_by_id_from_pdev(mac->pdev, session_id,
-						    WLAN_LEGACY_SME_ID);
-	if (!vdev)
-		return status;
-
-	mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
-	if (!mlme_priv)
-		goto end;
-
-	status = sme_acquire_global_lock(&mac->sme);
-	if (QDF_IS_STATUS_ERROR(status))
-		goto end;
-
-	sme_debug("FT update key is received in state %d",
-		  mlme_priv->connect_info.ft_info.ft_state);
-
-	/* Global Station FT State */
-	switch (mlme_priv->connect_info.ft_info.ft_state) {
-	case FT_SET_KEY_WAIT:
-		if (sme_get_ft_pre_auth_state(mac_handle, session_id)) {
-			mlme_priv->connect_info.ft_info.ft_state = FT_START_READY;
-			sme_debug("state changed to %d",
-				  mlme_priv->connect_info.ft_info.ft_state);
-			break;
-		}
-		/* fallthrough */
-	default:
-		sme_debug("Unhandled state:%d",
-			  mlme_priv->connect_info.ft_info.ft_state);
-		status = QDF_STATUS_E_FAILURE;
-		break;
-	}
-	sme_release_global_lock(&mac->sme);
-end:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
-
-	return status;
-}
-
-bool sme_ft_key_ready_for_install(mac_handle_t mac_handle, uint8_t session_id)
-{
-	bool ret = false;
-	struct mac_context *mac = MAC_CONTEXT(mac_handle);
-	struct wlan_objmgr_vdev *vdev;
-	struct mlme_legacy_priv *mlme_priv;
-
-	vdev = wlan_objmgr_get_vdev_by_id_from_pdev(mac->pdev, session_id,
-						    WLAN_LEGACY_SME_ID);
-	if (!vdev)
-		return ret;
-
-	mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
-	if (!mlme_priv)
-		goto end;
-
-	if (sme_get_ft_pre_auth_state(mac_handle, session_id) &&
-	    mlme_priv->connect_info.ft_info.ft_state == FT_START_READY) {
-		ret = true;
-		sme_set_ft_pre_auth_state(mac_handle, session_id, false);
-	}
-end:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
-
-	return ret;
-}
-
-/* Reset the FT context. */
-void sme_ft_reset(mac_handle_t mac_handle, uint8_t sessionId)
-{
-	struct mac_context *mac = MAC_CONTEXT(mac_handle);
-	struct csr_roam_session *pSession = NULL;
-	struct wlan_objmgr_vdev *vdev;
-	struct mlme_legacy_priv *mlme_priv;
-
-	pSession = CSR_GET_SESSION(mac, sessionId);
-	if (!pSession)
-		return;
-	vdev = wlan_objmgr_get_vdev_by_id_from_pdev(mac->pdev, sessionId,
-						    WLAN_LEGACY_SME_ID);
-	if (!vdev)
-		return;
-
-	mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
-	if (!mlme_priv)
-		goto end;
-
-	qdf_mem_zero(&mlme_priv->connect_info.ft_info,
-		     sizeof(struct ft_context));
-
-	mlme_priv->connect_info.ft_info.ft_state = FT_START_READY;
-end:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
-}
-
-#endif /* WLAN_FEATURE_HOST_ROAM */
-
-#ifdef WLAN_FEATURE_ROAM_OFFLOAD
-#ifdef FEATURE_WLAN_ESE
-static void sme_reset_esecckm_info(struct mac_context *mac, uint8_t vdev_id)
-{
-	struct wlan_objmgr_vdev *vdev;
-	struct rso_config *rso_cfg;
-
-	vdev = wlan_objmgr_get_vdev_by_id_from_pdev(mac->pdev, vdev_id,
-						    WLAN_LEGACY_SME_ID);
-	if (!vdev) {
-		sme_err("vdev object is NULL for vdev %d", vdev_id);
-		return;
-	}
-	rso_cfg = wlan_cm_get_rso_config(vdev);
-	if (!rso_cfg) {
-		wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
-		return;
-	}
-
-	qdf_mem_zero(rso_cfg->krk, WMI_KRK_KEY_LEN);
-	qdf_mem_zero(rso_cfg->btk, WMI_BTK_KEY_LEN);
-	rso_cfg->is_ese_assoc = false;
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
-
-}
-#else
-static void sme_reset_esecckm_info(struct mac_context *mac, uint8_t vdev_id)
-{
-}
-#endif
-
-void sme_reset_key(mac_handle_t mac_handle, uint8_t vdev_id)
-{
-	struct mac_context *mac = MAC_CONTEXT(mac_handle);
-
-	if (!mac) {
-		sme_err("mac is NULL");
-		return;
-	}
-
-	wlan_cm_set_psk_pmk(mac->pdev, vdev_id, NULL, 0);
-	sme_reset_esecckm_info(mac, vdev_id);
-}
-#endif /* WLAN_FEATURE_ROAM_OFFLOAD */