From 09d09344ea9cd7194a1256050bb4a72fa67485e5 Mon Sep 17 00:00:00 2001 From: Ashish Kumar Dhanotiya Date: Thu, 7 Jan 2021 17:09:50 +0530 Subject: [PATCH] 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 --- core/hdd/inc/wlan_hdd_assoc.h | 17 +++++++++++++ core/hdd/src/wlan_hdd_assoc.c | 14 +---------- core/hdd/src/wlan_hdd_cm_connect.c | 35 +++++++++++++++++++++------ core/hdd/src/wlan_hdd_cm_disconnect.c | 3 ++- 4 files changed, 48 insertions(+), 21 deletions(-) diff --git a/core/hdd/inc/wlan_hdd_assoc.h b/core/hdd/inc/wlan_hdd_assoc.h index 63ce1e7ec5..1f732e175c 100644 --- a/core/hdd/inc/wlan_hdd_assoc.h +++ b/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 diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c index d521b05c74..286cd8c17a 100644 --- a/core/hdd/src/wlan_hdd_assoc.c +++ b/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 /** diff --git a/core/hdd/src/wlan_hdd_cm_connect.c b/core/hdd/src/wlan_hdd_cm_connect.c index 4921215f82..db9d46d036 100644 --- a/core/hdd/src/wlan_hdd_cm_connect.c +++ b/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); } diff --git a/core/hdd/src/wlan_hdd_cm_disconnect.c b/core/hdd/src/wlan_hdd_cm_disconnect.c index a3772471b8..3c8fad8151 100644 --- a/core/hdd/src/wlan_hdd_cm_disconnect.c +++ b/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);