Эх сурвалжийг харах

qcacmn: Update the connect ies to prevent 40 MHz roam

If "override_ht20_40_24g" ini is set, the host driver disables
the HT40/HE40 caps for 2.4 GHz after connection via SET IE. The
firmware uses this for roam. However, if reassoc comes from userspace
with the HT40 cap different from the initial connect, then host
does not update the IEs based on new cap. This leads to mismatch
between user configuration and firmware roam.

To fix this, modify and send the HE40/HT40 caps via SET IE for
every connect request. Reset it after disconnection to the default
self cap.

Change-Id: I3de73d2ff2e5ebbbda530c29371edc0295ec608f
CRs-Fixed: 3655893
Surya Prakash Sivaraj 1 жил өмнө
parent
commit
310d434001

+ 16 - 2
umac/mlme/connection_mgr/core/src/wlan_cm_connect.c

@@ -1308,6 +1308,16 @@ static void cm_teardown_tdls(struct wlan_objmgr_vdev *vdev)
 	wlan_tdls_check_and_teardown_links_sync(psoc, vdev);
 }
 
+static void cm_handle_connect_start_req(struct wlan_objmgr_vdev *vdev,
+					struct wlan_cm_connect_req *req)
+{
+	if (!wlan_vdev_mlme_is_mlo_link_vdev(vdev))
+		cm_teardown_tdls(vdev);
+
+	wlan_cm_set_force_20mhz_in_24ghz(vdev,
+					 req->ht_caps & WLAN_HTCAP_C_CHWIDTH40);
+}
+
 #else
 static inline bool
 cm_is_any_other_vdev_connecting_disconnecting(struct cnx_mgr *cm_ctx,
@@ -1443,6 +1453,11 @@ post_err:
 
 static inline void cm_teardown_tdls(struct wlan_objmgr_vdev *vdev) {}
 
+static inline void cm_handle_connect_start_req(struct wlan_objmgr_vdev *vdev,
+					       struct wlan_cm_connect_req *req)
+{
+}
+
 #endif /* CONN_MGR_ADV_FEATURE */
 
 static void cm_connect_prepare_scan_filter(struct wlan_objmgr_pdev *pdev,
@@ -3461,8 +3476,7 @@ QDF_STATUS cm_connect_start_req(struct wlan_objmgr_vdev *vdev,
 
 	cm_set_crypto_params_from_ie(&connect_req->req);
 
-	if (!wlan_vdev_mlme_is_mlo_link_vdev(vdev))
-		cm_teardown_tdls(vdev);
+	cm_handle_connect_start_req(vdev, req);
 
 	status = cm_sm_deliver_event(vdev, WLAN_CM_SM_EV_CONNECT_REQ,
 				     sizeof(*connect_req), connect_req);