qcacld-3.0: Fix is_waiting_for_key usage for waking up host

Fix usage of flag is_waiting_for_key such that it programs wake
timer only for secure STA connected state.

Change-Id: I336696f15c5fc932a4eedf5534c2182bda3d2e27
CRs-Fixed: 2214809
Dieser Commit ist enthalten in:
Naveen Rawat
2018-03-29 13:41:18 -07:00
committet von nshrivas
Ursprung 048239934a
Commit a600b2e226
2 geänderte Dateien mit 30 neuen und 3 gelöschten Zeilen

Datei anzeigen

@@ -2028,6 +2028,10 @@ int wma_vdev_stop_resp_handler(void *handle, uint8_t *cmd_param_info,
}
iface = &wma->interfaces[resp_event->vdev_id];
/* vdev in stopped state, no more waiting for key */
iface->is_waiting_for_key = false;
wma_release_wakelock(&iface->vdev_stop_wakelock);
req_msg = wma_find_vdev_req(wma, resp_event->vdev_id,
@@ -4181,7 +4185,10 @@ static void wma_add_bss_sta_mode(tp_wma_handle wma, tpAddBssParams add_bss)
wma_send_peer_assoc(wma, add_bss->nwType,
&add_bss->staContext);
/* we just had peer assoc, so install key will be done later */
iface->is_waiting_for_key = true;
if (add_bss->staContext.encryptType != eSIR_ED_NONE)
iface->is_waiting_for_key = true;
peer_assoc_sent = true;
if (add_bss->rmfEnabled)

Datei anzeigen

@@ -2575,6 +2575,11 @@ static int wma_wake_event_piggybacked(
uint32_t pb_event_len;
uint32_t wake_reason;
uint32_t event_id;
uint8_t *bssid;
uint8_t peer_id;
void *peer, *pdev;
tpDeleteStaContext del_sta_ctx;
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
/*
* There are "normal" cases where a wake reason that usually contains a
@@ -2588,6 +2593,9 @@ static int wma_wake_event_piggybacked(
return 0;
}
pdev = cds_get_context(QDF_MODULE_ID_TXRX);
bssid = wma->interfaces[event_param->fixed_param->vdev_id].bssid;
peer = cdp_peer_find_by_addr(soc, pdev, bssid, &peer_id);
wake_reason = event_param->fixed_param->wake_reason;
/* parse piggybacked event from param buffer */
@@ -2710,8 +2718,20 @@ static int wma_wake_event_piggybacked(
* programmed. So do not check for cookie.
*/
WMA_LOGE("WOW_REASON_TIMER_INTR_RECV received, indicating key exchange did not finish. Initiate disconnect");
errno = wma_peer_sta_kickout_event_handler(wma, pb_event,
pb_event_len);
del_sta_ctx = (tpDeleteStaContext) qdf_mem_malloc(
sizeof(*del_sta_ctx));
if (!del_sta_ctx) {
WMA_LOGE("%s: mem alloc failed ", __func__);
break;
}
del_sta_ctx->is_tdls = false;
del_sta_ctx->vdev_id = event_param->fixed_param->vdev_id;
del_sta_ctx->staId = peer_id;
qdf_mem_copy(del_sta_ctx->addr2, bssid, IEEE80211_ADDR_LEN);
qdf_mem_copy(del_sta_ctx->bssId, bssid, IEEE80211_ADDR_LEN);
del_sta_ctx->reasonCode = HAL_DEL_STA_REASON_CODE_KEEP_ALIVE;
wma_send_msg(wma, SIR_LIM_DELETE_STA_CONTEXT_IND, del_sta_ctx,
0);
break;
default: