Просмотр исходного кода

qcacld-3.0: Maintain chan_switch_in_progress flag for MLD also

Currently, chan_switch_in_progress flag is maintained per vdev.
This info is needed at MLD level also to differentiate between
current MLD STA and concurrent STA. This can be used to decide
whether to allow link switch or not.
Also, don't process session beacon if link switch is in
progress to avoid CSA upon detecting any change in the Operation
IEs(HT_INFO/VHT_OP/HE_OP/EHT_OP, etc..).

Change-Id: I9cca40f4953a390c71758896097c6a119951abe7
CRs-Fixed: 3660868
Srinivas Dasari 1 год назад
Родитель
Сommit
2332eb23d0

+ 3 - 0
components/mlme/core/src/wlan_mlme_vdev_mgr_interface.c

@@ -46,6 +46,7 @@
 #endif
 #include <wlan_lmac_if_def.h>
 #include "target_if_mlme.h"
+#include "wlan_mlo_mgr_sta.h"
 
 static struct vdev_mlme_ops sta_mlme_ops;
 static struct vdev_mlme_ops ap_mlme_ops;
@@ -867,6 +868,8 @@ QDF_STATUS mlme_set_chan_switch_in_progress(struct wlan_objmgr_vdev *vdev,
 	}
 
 	mlme_priv->chan_switch_in_progress = val;
+	mlo_set_chan_switch_in_progress(vdev, val);
+
 	mlme_legacy_info("Set chan_switch_in_progress: %d vdev %d",
 			 val, wlan_vdev_get_id(vdev));
 

+ 13 - 1
core/mac/src/pe/sch/sch_beacon_process.c

@@ -52,6 +52,7 @@
 #include "wlan_reg_services_api.h"
 #include "wlan_mlo_mgr_sta.h"
 #include "wlan_mlme_main.h"
+#include <wlan_mlo_mgr_link_switch.h>
 
 static void
 ap_beacon_process_5_ghz(struct mac_context *mac_ctx, uint8_t *rx_pkt_info,
@@ -1028,8 +1029,19 @@ sch_beacon_process(struct mac_context *mac_ctx, uint8_t *rx_pkt_info,
 	if (!session)
 		return;
 
+	/*
+	 * Drop the beacon/probe response from current connected AP in
+	 * below cases to avoid responding to the changes in beacon(e.g. doing
+	 * VDEV_RESTART to update to the latest capabilities),
+	 * 1. vdev is not in connected state: vdev might be transitioning
+	 * 2. Link switch is in progress: Current link or one of the partner
+	 *                                links are getting replaced.
+	 *
+	 * New beacons/probe rsps can be considered once post these operations.
+	 */
 	if (LIM_IS_STA_ROLE(session) &&
-	    !wlan_cm_is_vdev_connected(session->vdev)) {
+	    (!wlan_cm_is_vdev_connected(session->vdev) ||
+	     mlo_mgr_is_link_switch_in_progress(session->vdev))) {
 		pe_debug_rl("vdev %d, drop beacon", session->vdev_id);
 		return;
 	}