Przeglądaj źródła

qcacld-3.0: Add missing api calls for connection manager

There are few API calls missing for connection manager
connect, disconnect response handling.
Add these missing function calls for connection manager.

Change-Id: If3f4bf42d0979ac36a1413e5fc4176c41d5b8f8e
CRs-Fixed: 2851144
Ashish Kumar Dhanotiya 4 lat temu
rodzic
commit
09d09344ea

+ 17 - 0
core/hdd/inc/wlan_hdd_assoc.h

@@ -599,4 +599,21 @@ static inline void hdd_copy_he_operation(struct hdd_station_ctx *hdd_sta_ctx,
  */
 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
+ *
+ * Return: void
+ */
+void
+wlan_hdd_ft_set_key_delay(mac_handle_t mac_handle, struct hdd_adapter *adapter);
+#else
+static inline void
+wlan_hdd_ft_set_key_delay(mac_handle_t mac_handle, struct hdd_adapter *adapter)
+{
+}
+#endif
+
 #endif

+ 1 - 13
core/hdd/src/wlan_hdd_assoc.c

@@ -4048,14 +4048,7 @@ static void hdd_roam_channel_switch_handler(struct hdd_adapter *adapter,
 }
 
 #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
- *
- * Return: void
- */
-static void
+void
 wlan_hdd_ft_set_key_delay(mac_handle_t mac_handle, struct hdd_adapter *adapter)
 {
 	int errno = 0;
@@ -4077,11 +4070,6 @@ wlan_hdd_ft_set_key_delay(mac_handle_t mac_handle, struct hdd_adapter *adapter)
 	if (errno)
 		hdd_err("ft set key failed");
 }
-#else
-static void
-wlan_hdd_ft_set_key_delay(mac_handle_t mac_handle, struct hdd_adapter *adapter)
-{
-}
 #endif
 
 /**

+ 28 - 7
core/hdd/src/wlan_hdd_cm_connect.c

@@ -40,6 +40,7 @@
 #include "wlan_vdev_mgr_ucfg_api.h"
 #include "wlan_hdd_bootup_marker.h"
 #include "sme_qos_internal.h"
+#include "wlan_hdd_scan.h"
 
 void hdd_cm_update_rssi_snr_by_bssid(struct hdd_adapter *adapter)
 {
@@ -275,6 +276,7 @@ hdd_cm_connect_failure_pre_user_update(struct wlan_objmgr_vdev *vdev,
 {
 	struct hdd_context *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
 	struct hdd_adapter *adapter;
+	struct hdd_station_ctx *hdd_sta_ctx;
 
 	if (!hdd_ctx) {
 		hdd_err("hdd_ctx is NULL");
@@ -287,6 +289,15 @@ hdd_cm_connect_failure_pre_user_update(struct wlan_objmgr_vdev *vdev,
 		return;
 	}
 
+	hdd_sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
+	if (!hdd_sta_ctx) {
+		hdd_err("hdd_sta_ctx is NULL");
+		return;
+	}
+
+	hdd_init_scan_reject_params(hdd_ctx);
+	hdd_cm_save_connect_status(adapter, rsp->status_code);
+	hdd_conn_remove_connect_info(hdd_sta_ctx);
 	hdd_cm_update_rssi_snr_by_bssid(adapter);
 
 	hdd_debug("Invoking packetdump deregistration API");
@@ -303,6 +314,7 @@ hdd_cm_connect_failure_post_user_update(struct wlan_objmgr_vdev *vdev,
 
 	qdf_runtime_pm_allow_suspend(&hdd_ctx->runtime_context.connect);
 	hdd_allow_suspend(WIFI_POWER_EVENT_WAKELOCK_CONNECT);
+	sme_reset_key(hdd_ctx->mac_handle, adapter->vdev_id);
 	hdd_wmm_dscp_initial_state(adapter);
 	hdd_debug("Disabling queues");
 	wlan_hdd_netif_queue_control(adapter,
@@ -618,6 +630,7 @@ hdd_cm_connect_success_pre_user_update(struct wlan_objmgr_vdev *vdev,
 	unsigned long rc;
 	uint32_t ie_len;
 	uint8_t *ie_field;
+	mac_handle_t mac_handle;
 
 	hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
 	if (!hdd_ctx) {
@@ -637,9 +650,14 @@ hdd_cm_connect_success_pre_user_update(struct wlan_objmgr_vdev *vdev,
 		return;
 	}
 
+	mac_handle = hdd_adapter_get_mac_handle(adapter);
+
+	wlan_hdd_ft_set_key_delay(mac_handle, adapter);
 	hdd_cm_update_rssi_snr_by_bssid(adapter);
 	hdd_cm_save_connect_status(adapter, rsp->status_code);
 
+	hdd_init_scan_reject_params(hdd_ctx);
+
 	hdd_cm_save_connect_info(adapter, rsp);
 
 	if (hdd_add_beacon_filter(adapter) != 0)
@@ -656,12 +674,13 @@ hdd_cm_connect_success_pre_user_update(struct wlan_objmgr_vdev *vdev,
 				sizeof(struct wlan_frame_hdr) +
 				offsetof(struct wlan_bcn_frame, ie));
 
-	sta_ctx->ap_supports_immediate_power_save =
+	if (adapter->device_mode == QDF_STA_MODE) {
+		sta_ctx->ap_supports_immediate_power_save =
 				wlan_hdd_is_ap_supports_immediate_power_save(
 				     ie_field, ie_len);
-	hdd_debug("ap_supports_immediate_power_save flag [%d]",
-		  sta_ctx->ap_supports_immediate_power_save);
-
+		hdd_debug("ap_supports_immediate_power_save flag [%d]",
+			  sta_ctx->ap_supports_immediate_power_save);
+	}
 	hdd_green_ap_start_state_mc(hdd_ctx, adapter->device_mode, true);
 
 	hdd_cm_handle_assoc_event(vdev, rsp->bssid.bytes);
@@ -762,9 +781,11 @@ hdd_cm_connect_success_post_user_update(struct wlan_objmgr_vdev *vdev,
 
 	hdd_cm_clear_pmf_stats(adapter);
 
-	/* Inform FTM TIME SYNC about the connection with AP */
-	hdd_ftm_time_sync_sta_state_notify(adapter,
-					   FTM_TIME_SYNC_STA_CONNECTED);
+	if (adapter->device_mode == QDF_STA_MODE) {
+		/* Inform FTM TIME SYNC about the connection with AP */
+		hdd_ftm_time_sync_sta_state_notify(adapter,
+						   FTM_TIME_SYNC_STA_CONNECTED);
+	}
 	hdd_periodic_sta_stats_start(adapter);
 }
 

+ 2 - 1
core/hdd/src/wlan_hdd_cm_disconnect.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
+ * 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
@@ -191,6 +191,7 @@ void __hdd_cm_disconnect_handler_post_user_update(struct hdd_adapter *adapter)
 	 * the hdd_reassoc_scenario flag will not be reset if disconnection
 	 * happens before EAP/EAPOL at supplicant is complete.
 	 */
+	sta_ctx->ft_carrier_on = false;
 	sta_ctx->hdd_reassoc_scenario = false;
 
 	hdd_nud_reset_tracking(adapter);