Explorar o código

qcacld-3.0: Populate assoc link id in join request

Populate assoc link id in join request from scan entry self
link id

Also check if vdev is MLO vdev before copying partner info
to join req from connect request

Change-Id: I0ddff6e4b0b312e94e42977ea472ee94ac6e919e
CRs-Fixed: 3523640
Pragaspathi Thilagaraj hai 1 ano
pai
achega
98481d3bd6

+ 2 - 3
components/umac/mlme/connection_mgr/core/src/wlan_cm_vdev_api.h

@@ -753,10 +753,9 @@ cm_send_rso_stop(struct wlan_objmgr_vdev *vdev)
 
 #ifdef WLAN_FEATURE_11BE_MLO
 /**
- * cm_get_ml_partner_info() - Fill dst ML partner info
+ * cm_get_ml_partner_info() - Fill ML partner info from scan entry
  * @scan_entry: Scan entry
- * @src_partner_info: Source partner info
- * @dst_partner_info: Destination partner info
+ * @partner_info: Partner info to be filled
  *
  * Return: QDF_STATUS
  */

+ 21 - 8
components/umac/mlme/connection_mgr/core/src/wlan_cm_vdev_connect.c

@@ -1178,16 +1178,29 @@ cm_get_ml_partner_info(struct scan_cache_entry *scan_entry,
 	return QDF_STATUS_SUCCESS;
 }
 
-static void cm_copy_join_req_info_from_cm_connect_req(struct cm_vdev_join_req *join_req,
-						 struct wlan_cm_vdev_connect_req *req)
+static void
+cm_copy_join_req_info_from_cm_connect_req(struct wlan_objmgr_vdev *vdev,
+					  struct cm_vdev_join_req *join_req,
+					  struct wlan_cm_vdev_connect_req *req)
 {
-	qdf_mem_copy(&(join_req->partner_info), &(req->ml_parnter_info), sizeof(struct mlo_partner_info));
-	mlme_debug("Num of partner links %d", join_req->partner_info.num_partner_links);
-}
+	if (!wlan_vdev_mlme_is_mlo_vdev(vdev))
+		return;
 
+	qdf_mem_copy(&join_req->partner_info, &req->ml_parnter_info,
+		     sizeof(struct mlo_partner_info));
+
+	if (!wlan_vdev_mlme_is_mlo_link_vdev(vdev))
+		join_req->assoc_link_id = join_req->entry->ml_info.self_link_id;
+
+	mlme_debug("Num of partner links %d assoc_link_id:%d",
+		   join_req->partner_info.num_partner_links,
+		   join_req->assoc_link_id);
+}
 #else
-static void cm_copy_join_req_info_from_cm_connect_req(struct cm_vdev_join_req *join_req,
-						 struct wlan_cm_vdev_connect_req *req)
+static inline void
+cm_copy_join_req_info_from_cm_connect_req(struct wlan_objmgr_vdev *vdev,
+					  struct cm_vdev_join_req *join_req,
+					  struct wlan_cm_vdev_connect_req *req)
 {
 }
 #endif
@@ -1217,7 +1230,7 @@ cm_copy_join_params(struct wlan_objmgr_vdev *vdev,
 	if (!join_req->entry)
 		return QDF_STATUS_E_NOMEM;
 
-	cm_copy_join_req_info_from_cm_connect_req(join_req, req);
+	cm_copy_join_req_info_from_cm_connect_req(vdev, join_req, req);
 
 	if (req->owe_trans_ssid.length)
 		join_req->owe_trans_ssid = req->owe_trans_ssid;

+ 5 - 1
core/mac/src/pe/lim/lim_process_sme_req_messages.c

@@ -4204,7 +4204,11 @@ static void lim_fill_ml_info(struct cm_vdev_join_req *req,
 		pe_err("Partner link info not present");
 		return;
 	}
+
 	num_links = req->partner_info.num_partner_links;
+	if (num_links > WLAN_UMAC_MLO_MAX_VDEVS)
+		num_links = WLAN_UMAC_MLO_MAX_VDEVS;
+
 	partner_info->num_partner_links = num_links;
 	pe_debug("MLO: num_links:%d", num_links);
 
@@ -4427,7 +4431,7 @@ lim_fill_session_params(struct mac_context *mac_ctx,
 	}
 
 	wlan_psoc_mlme_get_11be_capab(mac_ctx->psoc, &eht_capab);
-	if (eht_capab)
+	if (eht_capab && wlan_vdev_mlme_is_mlo_vdev(session->vdev))
 		lim_fill_ml_info(req, pe_join_req);
 
 	return QDF_STATUS_SUCCESS;