|
@@ -411,6 +411,42 @@ cm_fils_update_erp_seq_num(struct wlan_objmgr_vdev *vdev,
|
|
|
{}
|
|
|
#endif
|
|
|
|
|
|
+#ifdef WLAN_FEATURE_11BE_MLO
|
|
|
+static QDF_STATUS
|
|
|
+cm_fill_bssid_freq_info(uint8_t vdev_id,
|
|
|
+ struct roam_offload_synch_ind *roam_synch_data,
|
|
|
+ struct cm_vdev_join_rsp *rsp)
|
|
|
+{
|
|
|
+ uint8_t i;
|
|
|
+ struct ml_setup_link_param *ml_link;
|
|
|
+
|
|
|
+ for (i = 0; i < roam_synch_data->num_setup_links; i++) {
|
|
|
+ ml_link = &roam_synch_data->ml_link[i];
|
|
|
+ if (vdev_id == ml_link->vdev_id) {
|
|
|
+ qdf_copy_macaddr(&rsp->connect_rsp.bssid,
|
|
|
+ &ml_link->link_addr);
|
|
|
+ rsp->connect_rsp.freq = ml_link->channel.mhz;
|
|
|
+
|
|
|
+ return QDF_STATUS_SUCCESS;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ mlme_err("Failed to get vdev %u mlo link info");
|
|
|
+
|
|
|
+ return QDF_STATUS_E_FAILURE;
|
|
|
+}
|
|
|
+#else
|
|
|
+static QDF_STATUS
|
|
|
+cm_fill_bssid_freq_info(uint8_t vdev_id,
|
|
|
+ struct roam_offload_synch_ind *roam_synch_data,
|
|
|
+ struct cm_vdev_join_rsp *rsp)
|
|
|
+{
|
|
|
+ qdf_copy_macaddr(&rsp->connect_rsp.bssid, &roam_synch_data->bssid);
|
|
|
+ rsp->connect_rsp.freq = roam_synch_data->chan_freq;
|
|
|
+
|
|
|
+ return QDF_STATUS_SUCCESS;
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
static QDF_STATUS
|
|
|
cm_fill_roam_info(struct wlan_objmgr_vdev *vdev,
|
|
|
struct roam_offload_synch_ind *roam_synch_data,
|
|
@@ -423,7 +459,13 @@ cm_fill_roam_info(struct wlan_objmgr_vdev *vdev,
|
|
|
if (!rsp->connect_rsp.roaming_info)
|
|
|
return QDF_STATUS_E_NOMEM;
|
|
|
rsp->connect_rsp.vdev_id = wlan_vdev_get_id(vdev);
|
|
|
- qdf_copy_macaddr(&rsp->connect_rsp.bssid, &roam_synch_data->bssid);
|
|
|
+ status = cm_fill_bssid_freq_info(wlan_vdev_get_id(vdev),
|
|
|
+ roam_synch_data, rsp);
|
|
|
+ if (QDF_IS_STATUS_ERROR(status)) {
|
|
|
+ mlme_err(CM_PREFIX_FMT "Failed to get bssid and freq",
|
|
|
+ CM_PREFIX_REF(rsp->connect_rsp.vdev_id, cm_id));
|
|
|
+ return QDF_STATUS_E_FAILURE;
|
|
|
+ }
|
|
|
|
|
|
if (!util_scan_is_null_ssid(&roam_synch_data->ssid))
|
|
|
wlan_vdev_mlme_set_ssid(vdev,
|
|
@@ -442,7 +484,6 @@ cm_fill_roam_info(struct wlan_objmgr_vdev *vdev,
|
|
|
rsp->connect_rsp.is_reassoc = true;
|
|
|
rsp->connect_rsp.connect_status = QDF_STATUS_SUCCESS;
|
|
|
rsp->connect_rsp.cm_id = cm_id;
|
|
|
- rsp->connect_rsp.freq = roam_synch_data->chan_freq;
|
|
|
rsp->nss = roam_synch_data->nss;
|
|
|
|
|
|
if (roam_synch_data->ric_data_len) {
|
|
@@ -843,6 +884,7 @@ cm_fw_roam_sync_propagation(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
|
|
if (wlan_vdev_mlme_is_mlo_vdev(vdev))
|
|
|
policy_mgr_move_vdev_from_disabled_to_connection_tbl(psoc,
|
|
|
vdev_id);
|
|
|
+ mlo_roam_copy_partner_info(connect_rsp, roam_synch_data);
|
|
|
mlme_cm_osif_connect_complete(vdev, connect_rsp);
|
|
|
|
|
|
/**
|
|
@@ -867,7 +909,6 @@ cm_fw_roam_sync_propagation(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
|
|
}
|
|
|
wlan_cm_tgt_send_roam_sync_complete_cmd(psoc, vdev_id);
|
|
|
|
|
|
- mlo_roam_copy_partner_info(connect_rsp, roam_synch_data);
|
|
|
mlo_roam_update_connected_links(vdev, connect_rsp);
|
|
|
mlo_set_single_link_ml_roaming(psoc, vdev_id,
|
|
|
roam_synch_data, false);
|