Merge 77c9691f3a09c34a3f57e56a719a728f96a58755 on remote branch
Change-Id: I495841f2bdf101981df9f7a12ae752feee40b377
diff --git a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h
index 9f2c4dc..d19b267 100644
--- a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h
+++ b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h
@@ -4114,4 +4114,15 @@
}
#endif
+
+/**
+ * ucfg_is_roaming_enabled() - Check if roaming enabled
+ * to firmware.
+ * @psoc: psoc context
+ * @vdev_id: vdev id
+ *
+ * Return: True if Roam state machine is in
+ * WLAN_ROAM_RSO_ENABLED/WLAN_ROAMING_IN_PROG/WLAN_ROAM_SYNCH_IN_PROG
+ */
+bool ucfg_is_roaming_enabled(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id);
#endif /* _WLAN_MLME_UCFG_API_H_ */
diff --git a/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c b/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c
index b511cf4..19910b2 100644
--- a/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c
+++ b/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c
@@ -1911,3 +1911,13 @@
return is_valid;
}
+
+bool ucfg_is_roaming_enabled(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id)
+{
+ struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
+
+ if (mlme_get_roam_state(psoc, vdev_id) == ROAM_RSO_STARTED)
+ return true;
+
+ return false;
+}
diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c
index 53e0745..bba9368 100644
--- a/core/hdd/src/wlan_hdd_cfg80211.c
+++ b/core/hdd/src/wlan_hdd_cfg80211.c
@@ -13157,6 +13157,7 @@
struct hdd_station_ctx *hdd_sta_ctx =
WLAN_HDD_GET_STATION_CTX_PTR(adapter);
mac_handle_t mac_handle;
+ bool roaming_enabled;
hdd_enter_dev(dev);
@@ -13187,6 +13188,13 @@
tb[QCA_WLAN_VENDOR_ATTR_ROAMING_POLICY]);
hdd_debug("isFastRoamEnabled %d", is_fast_roam_enabled);
+ /*
+ * Get current roaming state and decide whether to wait for RSO_STOP
+ * response or not.
+ */
+ roaming_enabled = ucfg_is_roaming_enabled(hdd_ctx->pdev,
+ adapter->vdev_id);
+
/* Update roaming */
mac_handle = hdd_ctx->mac_handle;
qdf_status = sme_config_fast_roaming(mac_handle, adapter->vdev_id,
@@ -13197,6 +13205,7 @@
ret = qdf_status_to_os_return(qdf_status);
if (eConnectionState_Associated == hdd_sta_ctx->conn_info.conn_state &&
+ roaming_enabled &&
QDF_IS_STATUS_SUCCESS(qdf_status) && !is_fast_roam_enabled) {
INIT_COMPLETION(adapter->lfr_fw_status.disable_lfr_event);
diff --git a/core/mac/inc/ani_system_defs.h b/core/mac/inc/ani_system_defs.h
index f47ad23..63a1b77 100644
--- a/core/mac/inc/ani_system_defs.h
+++ b/core/mac/inc/ani_system_defs.h
@@ -71,10 +71,8 @@
ANI_AKM_TYPE_FT_RSN_PSK,
ANI_AKM_TYPE_RSN_PSK_SHA256,
ANI_AKM_TYPE_RSN_8021X_SHA256,
-#ifdef WLAN_FEATURE_SAE
ANI_AKM_TYPE_SAE,
ANI_AKM_TYPE_FT_SAE,
-#endif
ANI_AKM_TYPE_SUITEB_EAP_SHA256,
ANI_AKM_TYPE_SUITEB_EAP_SHA384,
ANI_AKM_TYPE_FT_SUITEB_EAP_SHA384,
diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h
index e66c82a..7976935 100644
--- a/core/mac/inc/qwlan_version.h
+++ b/core/mac/inc/qwlan_version.h
@@ -32,9 +32,9 @@
#define QWLAN_VERSION_MAJOR 5
#define QWLAN_VERSION_MINOR 2
#define QWLAN_VERSION_PATCH 022
-#define QWLAN_VERSION_EXTRA "B"
+#define QWLAN_VERSION_EXTRA "F"
#define QWLAN_VERSION_BUILD 7
-#define QWLAN_VERSIONSTR "5.2.022.7B"
+#define QWLAN_VERSIONSTR "5.2.022.7F"
#endif /* QWLAN_VERSION_H */
diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h
index 70c9d6a..8f2eae6 100644
--- a/core/mac/inc/sir_api.h
+++ b/core/mac/inc/sir_api.h
@@ -3023,6 +3023,7 @@
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
struct handoff_failure_ind {
uint8_t vdev_id;
+ struct qdf_mac_addr bssid;
};
struct roam_offload_synch_fail {
diff --git a/core/mac/src/include/parser_api.h b/core/mac/src/include/parser_api.h
index 32079b1..7c98e42 100644
--- a/core/mac/src/include/parser_api.h
+++ b/core/mac/src/include/parser_api.h
@@ -1229,6 +1229,20 @@
#endif
/**
+ * populate_dot11f_btm_caps() - populate btm extended capabilities
+ * @mac_ctx: Global MAC context.
+ * @pe_session: Pointer to the PE session.
+ * @dot11f: Pointer to the extended capabilities of the session.
+ *
+ * Disable btm for SAE types for Helium firmware limit
+ *
+ * Return: QDF_STATUS Success or Failure
+ */
+QDF_STATUS populate_dot11f_btm_caps(struct mac_context *mac_ctx,
+ struct pe_session *pe_session,
+ struct sDot11fIEExtCap *dot11f);
+
+/**
* lim_truncate_ppet: truncates ppet of trailling zeros
* @ppet: ppet to truncate
* max_len: max length of ppet
diff --git a/core/mac/src/pe/lim/lim_process_message_queue.c b/core/mac/src/pe/lim/lim_process_message_queue.c
index 381bcbd..3e7dd69 100644
--- a/core/mac/src/pe/lim/lim_process_message_queue.c
+++ b/core/mac/src/pe/lim/lim_process_message_queue.c
@@ -524,8 +524,7 @@
if (mac_ctx->lim.gLimSmeState == eLIM_SME_OFFLINE_STATE) {
/* Defer processing this message */
if (lim_defer_msg(mac_ctx, lim_msg) != TX_SUCCESS) {
- QDF_TRACE(QDF_MODULE_ID_PE, LOGE,
- FL("Unable to Defer Msg"));
+ pe_err_rl("Unable to Defer Msg");
lim_log_session_states(mac_ctx);
lim_handle_defer_msg_error(mac_ctx, lim_msg);
}
@@ -1012,7 +1011,8 @@
(mac, NO_SESSION,
LIM_TRACE_MAKE_RXMSG(pMsg->type, LIM_MSG_DEFERRED)));
} else {
- pe_err("Dropped lim message (0x%X) Message %s", pMsg->type, lim_msg_str(pMsg->type));
+ pe_err_rl("Dropped lim message (0x%X) Message %s", pMsg->type,
+ lim_msg_str(pMsg->type));
MTRACE(mac_trace_msg_rx
(mac, NO_SESSION,
LIM_TRACE_MAKE_RXMSG(pMsg->type, LIM_MSG_DROPPED)));
diff --git a/core/mac/src/pe/lim/lim_send_management_frames.c b/core/mac/src/pe/lim/lim_send_management_frames.c
index d4126d0..c4f0fd8 100644
--- a/core/mac/src/pe/lim/lim_send_management_frames.c
+++ b/core/mac/src/pe/lim/lim_send_management_frames.c
@@ -2204,6 +2204,8 @@
lim_merge_extcap_struct(&frm->ExtCap, &bcn_ext_cap,
false);
}
+
+ populate_dot11f_btm_caps(mac_ctx, pe_session, &frm->ExtCap);
/*
* TWT extended capabilities should be populated after the
* intersection of beacon caps and self caps is done because
diff --git a/core/mac/src/pe/lim/lim_utils.c b/core/mac/src/pe/lim/lim_utils.c
index 97962ae..3bdc69a 100644
--- a/core/mac/src/pe/lim/lim_utils.c
+++ b/core/mac/src/pe/lim/lim_utils.c
@@ -769,8 +769,8 @@
* We reach the quota for management frames,
* drop this one
*/
- pe_warn("Too many queue->MsgQ Msg: %d count: %d",
- lim_msg->type, count);
+ pe_warn_rl("Too many queue->MsgQ Msg: %d count: %d",
+ lim_msg->type, count);
/* Return error, caller knows what to do */
return TX_QUEUE_FULL;
}
diff --git a/core/mac/src/sys/legacy/src/utils/src/parser_api.c b/core/mac/src/sys/legacy/src/utils/src/parser_api.c
index 8c35a9d..b17c583 100644
--- a/core/mac/src/sys/legacy/src/utils/src/parser_api.c
+++ b/core/mac/src/sys/legacy/src/utils/src/parser_api.c
@@ -45,6 +45,7 @@
#include "wlan_mlme_public_struct.h"
#include "wlan_mlme_ucfg_api.h"
#include "wlan_mlme_api.h"
+#include "wlan_crypto_global_api.h"
#define RSN_OUI_SIZE 4
/* ////////////////////////////////////////////////////////////////////// */
@@ -6246,4 +6247,28 @@
}
#endif
+QDF_STATUS populate_dot11f_btm_caps(struct mac_context *mac_ctx,
+ struct pe_session *pe_session,
+ struct sDot11fIEExtCap *dot11f)
+{
+ struct s_ext_cap *p_ext_cap;
+ uint32_t fw_akm_bitmap;
+ bool sae_can_roam;
+
+ dot11f->num_bytes = DOT11F_IE_EXTCAP_MAX_LEN;
+ p_ext_cap = (struct s_ext_cap *)dot11f->bytes;
+ fw_akm_bitmap = mac_ctx->mlme_cfg->lfr.fw_akm_bitmap;
+ sae_can_roam = (((fw_akm_bitmap) & (1 << AKM_SAE)) ? true : false);
+
+ if (pe_session->connected_akm == ANI_AKM_TYPE_SAE &&
+ !sae_can_roam) {
+ p_ext_cap->bss_transition = 0;
+ pe_debug("Disable btm cap for SAE roam not supported");
+ }
+
+ dot11f->num_bytes = lim_compute_ext_cap_ie_length(dot11f);
+
+ return QDF_STATUS_SUCCESS;
+}
+
/* parser_api.c ends here. */
diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c
index 079ad4b..4b94317 100644
--- a/core/sme/src/csr/csr_api_roam.c
+++ b/core/sme/src/csr/csr_api_roam.c
@@ -21195,6 +21195,7 @@
struct handoff_failure_ind *pSmeHOFailInd = msg_buf;
struct mlme_roam_after_data_stall *vdev_roam_params;
struct wlan_objmgr_vdev *vdev;
+ struct reject_ap_info ap_info;
uint32_t sessionId;
if (!pSmeHOFailInd) {
@@ -21203,6 +21204,12 @@
}
sessionId = pSmeHOFailInd->vdev_id;
+ ap_info.bssid = pSmeHOFailInd->bssid;
+ ap_info.reject_ap_type = DRIVER_AVOID_TYPE;
+ ap_info.reject_reason = REASON_ROAM_HO_FAILURE;
+ ap_info.source = ADDED_BY_DRIVER;
+ wlan_blm_add_bssid_to_reject_list(mac_ctx->pdev, &ap_info);
+
/* Roaming is supported only on Infra STA Mode. */
if (!csr_roam_is_sta_mode(mac_ctx, sessionId)) {
diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c
index c822713..b97be88 100644
--- a/core/wma/src/wma_scan_roam.c
+++ b/core/wma/src/wma_scan_roam.c
@@ -4167,19 +4167,14 @@
struct handoff_failure_ind *ho_failure_ind;
struct scheduler_msg sme_msg = { 0 };
QDF_STATUS qdf_status;
- struct reject_ap_info ap_info;
-
- ap_info.bssid = bssid;
- ap_info.reject_ap_type = DRIVER_AVOID_TYPE;
- ap_info.reject_reason = REASON_ROAM_HO_FAILURE;
- ap_info.source = ADDED_BY_DRIVER;
- wlan_blm_add_bssid_to_reject_list(wma->pdev, &ap_info);
ho_failure_ind = qdf_mem_malloc(sizeof(*ho_failure_ind));
if (!ho_failure_ind)
return;
ho_failure_ind->vdev_id = vdev_id;
+ ho_failure_ind->bssid = bssid;
+
sme_msg.type = eWNI_SME_HO_FAIL_IND;
sme_msg.bodyptr = ho_failure_ind;
sme_msg.bodyval = 0;