diff options
| author | Rajeev Kumar <rajekuma@codeaurora.org> | 2017-10-10 15:31:17 -0700 |
|---|---|---|
| committer | snandini <snandini@codeaurora.org> | 2017-10-10 19:58:26 -0700 |
| commit | 123770cd37ace6bfc0faab421ae6e522a0088da2 (patch) | |
| tree | 85cbc74061118e21d547247368cc7a28f4331192 | |
| parent | 94a711510b3a55386a5fa048cb7dd4a7f2a0a7f9 (diff) | |
qcacld-3.0: Add 1 second timed wake lock for 4 way handshake
Add 1 second wake lock for 4 way handshake to avoid APPS
power collapse in middle of eapol exchange which can delay
the association process.
Change-Id: Ife73dc00aa05b5a80d0a90afd18468bd033ebdd9
CRs-Fixed: 2118533
| -rw-r--r-- | core/wma/inc/wma.h | 3 | ||||
| -rw-r--r-- | core/wma/src/wma_main.c | 2 | ||||
| -rw-r--r-- | core/wma/src/wma_mgmt.c | 25 |
3 files changed, 29 insertions, 1 deletions
diff --git a/core/wma/inc/wma.h b/core/wma/inc/wma.h index e4ed8816b508..19e485fd0955 100644 --- a/core/wma/inc/wma.h +++ b/core/wma/inc/wma.h @@ -294,6 +294,7 @@ enum ds_mode { #define WMA_VDEV_STOP_REQUEST_TIMEOUT (6000) /* 6 seconds */ #define WMA_VDEV_HW_MODE_REQUEST_TIMEOUT (5000) /* 5 seconds */ #define WMA_VDEV_PLCY_MGR_CMD_TIMEOUT (3000) /* 3 seconds */ +#define WMA_VDEV_SET_KEY_REQUEST_TIMEOUT (1000) /* 1 second */ #define WMA_TGT_INVALID_SNR (0) @@ -1063,6 +1064,7 @@ typedef struct { * @in_bmps : Whether bmps for this interface has been enabled * @vdev_start_wakelock: wakelock to protect vdev start op with firmware * @vdev_stop_wakelock: wakelock to protect vdev stop op with firmware + * @vdev_set_key_wakelock: wakelock to protect vdev set key op with firmware */ struct wma_txrx_node { uint8_t addr[IEEE80211_ADDR_LEN]; @@ -1150,6 +1152,7 @@ struct wma_txrx_node { bool beacon_filter_enabled; qdf_wake_lock_t vdev_start_wakelock; qdf_wake_lock_t vdev_stop_wakelock; + qdf_wake_lock_t vdev_set_key_wakelock; }; #if defined(QCA_WIFI_FTM) diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index f4684f474c7e..0ebc79097db2 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -2210,12 +2210,14 @@ void wma_vdev_init(struct wma_txrx_node *vdev) { qdf_wake_lock_create(&vdev->vdev_start_wakelock, "vdev_start"); qdf_wake_lock_create(&vdev->vdev_stop_wakelock, "vdev_stop"); + qdf_wake_lock_create(&vdev->vdev_set_key_wakelock, "vdev_set_key"); } void wma_vdev_deinit(struct wma_txrx_node *vdev) { qdf_wake_lock_destroy(&vdev->vdev_start_wakelock); qdf_wake_lock_destroy(&vdev->vdev_stop_wakelock); + qdf_wake_lock_destroy(&vdev->vdev_set_key_wakelock); } /** diff --git a/core/wma/src/wma_mgmt.c b/core/wma/src/wma_mgmt.c index de01b191bc8b..df5d7d889bae 100644 --- a/core/wma/src/wma_mgmt.c +++ b/core/wma/src/wma_mgmt.c @@ -1232,8 +1232,13 @@ QDF_STATUS wma_send_peer_assoc(tp_wma_handle wma, #ifdef FEATURE_WLAN_WAPI || params->encryptType == eSIR_ED_WPI #endif /* FEATURE_WLAN_WAPI */ - ) + ) { cmd->peer_flags |= WMI_PEER_NEED_PTK_4_WAY; + WMA_LOGD("Acquire set key wake lock for %d ms", + WMA_VDEV_SET_KEY_REQUEST_TIMEOUT); + wma_acquire_wakelock(&intr->vdev_set_key_wakelock, + WMA_VDEV_SET_KEY_REQUEST_TIMEOUT); + } if (params->wpa_rsn >> 1) cmd->peer_flags |= WMI_PEER_NEED_GTK_2_WAY; @@ -1571,6 +1576,17 @@ static QDF_STATUS wma_setup_install_key_cmd(tp_wma_handle wma_handle, return QDF_STATUS_E_NOMEM; } + if (NULL == wma_handle) { + WMA_LOGE(FL("Invalid wma_handle for vdev_id: %d"), + key_params->vdev_id); + return QDF_STATUS_E_INVAL; + } + if (key_params->vdev_id >= wma_handle->max_bssid) { + WMA_LOGE(FL("Invalid vdev_id: %d"), key_params->vdev_id); + return QDF_STATUS_E_INVAL; + } + iface = &wma_handle->interfaces[key_params->vdev_id]; + params.vdev_id = key_params->vdev_id; params.key_idx = key_params->key_idx; qdf_mem_copy(params.peer_mac, key_params->peer_mac, IEEE80211_ADDR_LEN); @@ -1720,6 +1736,13 @@ static QDF_STATUS wma_setup_install_key_cmd(tp_wma_handle wma_handle, status = wmi_unified_setup_install_key_cmd(wma_handle->wmi_handle, ¶ms); + + if (!key_params->unicast) { + /* Its GTK release the wake lock */ + WMA_LOGD("Release set key wake lock"); + wma_release_wakelock(&iface->vdev_set_key_wakelock); + } + return status; } |
