summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/mac/src/pe/lim/lim_process_action_frame.c11
-rw-r--r--core/mac/src/pe/sch/sch_beacon_process.c21
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);