diff options
| -rw-r--r-- | core/mac/src/pe/lim/lim_process_action_frame.c | 11 | ||||
| -rw-r--r-- | core/mac/src/pe/sch/sch_beacon_process.c | 21 |
2 files changed, 30 insertions, 2 deletions
diff --git a/core/mac/src/pe/lim/lim_process_action_frame.c b/core/mac/src/pe/lim/lim_process_action_frame.c index 2153e605690f..402f42b04e46 100644 --- a/core/mac/src/pe/lim/lim_process_action_frame.c +++ b/core/mac/src/pe/lim/lim_process_action_frame.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2018, 2020 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 @@ -455,6 +455,15 @@ static void __lim_process_operating_mode_action_frame(tpAniSirGlobal mac_ctx, frame_len = WMA_GET_RX_PAYLOAD_LEN(rx_pkt_info); pe_debug("Received Operating Mode action frame"); + + /* + * Ignore opmode change during channel change The opmode will be updated + * with the beacons on new channel once the AP move to new channel. + */ + if (session->ch_switch_in_progress) { + pe_debug("Ignore opmode change as channel switch is in progress"); + return; + } operating_mode_frm = qdf_mem_malloc(sizeof(*operating_mode_frm)); if (NULL == operating_mode_frm) { pe_err("AllocateMemory failed"); diff --git a/core/mac/src/pe/sch/sch_beacon_process.c b/core/mac/src/pe/sch/sch_beacon_process.c index be88a0a11551..37cec83f8ca8 100644 --- a/core/mac/src/pe/sch/sch_beacon_process.c +++ b/core/mac/src/pe/sch/sch_beacon_process.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2019 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2020 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 @@ -377,6 +377,16 @@ sch_bcn_process_sta(tpAniSirGlobal mac_ctx, bcn->channelNumber); return false; } + + /* + * Ignore bcn as channel switch IE present and csa offload is enabled, + * as in CSA offload enabled case FW will send Event to switch channel + */ + if (bcn->channelSwitchPresent && wma_is_csa_offload_enabled()) { + pe_debug("Ignore bcn as channel switch IE present and csa offload is enabled"); + return false; + } + lim_detect_change_in_ap_capabilities(mac_ctx, bcn, session); if (lim_get_sta_hash_bssidx(mac_ctx, DPH_STA_HASH_INDEX_PEER, bssIdx, session) != eSIR_SUCCESS) @@ -540,6 +550,15 @@ sch_bcn_process_sta_ibss(tpAniSirGlobal mac_ctx, (STA_INVALID_IDX == pStaDs->staIndex))) return; + /* + * Ignore opmode change during channel change The opmode will be updated + * with the beacons on new channel once the AP move to new channel. + */ + if (session->ch_switch_in_progress) { + pe_debug("Ignore opmode change as channel switch is in progress"); + return; + } + if (session->vhtCapability && bcn->OperatingMode.present) { update_nss(mac_ctx, pStaDs, bcn, session, pMh); operMode = get_operating_channel_width(pStaDs); |
