|
@@ -73,26 +73,24 @@ void osif_copy_roamed_info(struct cfg80211_roam_info *info,
|
|
|
#endif
|
|
|
|
|
|
#if defined(CFG80211_SINGLE_NETDEV_MULTI_LINK_SUPPORT) && defined(WLAN_FEATURE_11BE_MLO)
|
|
|
-static
|
|
|
-void osif_populate_mlo_info_for_link(struct wlan_objmgr_vdev *vdev,
|
|
|
- struct cfg80211_roam_info *roam_info_params,
|
|
|
- uint8_t link_id,
|
|
|
- struct cfg80211_bss *bss)
|
|
|
+static void
|
|
|
+osif_populate_mlo_info_for_link(struct cfg80211_roam_info *roam_info_params,
|
|
|
+ uint8_t link_id, struct cfg80211_bss *bss,
|
|
|
+ uint8_t *self_link_addr)
|
|
|
{
|
|
|
osif_debug("Link_id :%d", link_id);
|
|
|
roam_info_params->valid_links |= BIT(link_id);
|
|
|
roam_info_params->links[link_id].bssid = bss->bssid;
|
|
|
roam_info_params->links[link_id].bss = bss;
|
|
|
- roam_info_params->links[link_id].addr =
|
|
|
- wlan_vdev_mlme_get_macaddr(vdev);
|
|
|
+ roam_info_params->links[link_id].addr = self_link_addr;
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-osif_populate_partner_links_roam_mlo_params(struct wlan_objmgr_pdev *pdev,
|
|
|
+osif_populate_partner_links_roam_mlo_params(struct wlan_objmgr_vdev *roamed_vdev,
|
|
|
struct wlan_cm_connect_resp *rsp,
|
|
|
struct cfg80211_roam_info *roam_info_params)
|
|
|
{
|
|
|
- struct wlan_objmgr_vdev *partner_vdev;
|
|
|
+ struct wlan_objmgr_pdev *pdev;
|
|
|
struct mlo_link_info *rsp_partner_info;
|
|
|
struct mlo_partner_info assoc_partner_info = {0};
|
|
|
struct cfg80211_bss *bss = NULL;
|
|
@@ -100,12 +98,17 @@ osif_populate_partner_links_roam_mlo_params(struct wlan_objmgr_pdev *pdev,
|
|
|
uint8_t link_id = 0, num_links;
|
|
|
int i;
|
|
|
|
|
|
+ pdev = wlan_vdev_get_pdev(roamed_vdev);
|
|
|
+ if (!pdev)
|
|
|
+ return;
|
|
|
+
|
|
|
qdf_status = osif_get_partner_info_from_mlie(rsp, &assoc_partner_info);
|
|
|
if (QDF_IS_STATUS_ERROR(qdf_status))
|
|
|
return;
|
|
|
|
|
|
num_links = rsp->ml_parnter_info.num_partner_links;
|
|
|
for (i = 0 ; i < num_links; i++) {
|
|
|
+ struct mlo_link_info *link_info;
|
|
|
rsp_partner_info = &rsp->ml_parnter_info.partner_link_info[i];
|
|
|
|
|
|
qdf_status = osif_get_link_id_from_assoc_ml_ie(rsp_partner_info,
|
|
@@ -114,24 +117,26 @@ osif_populate_partner_links_roam_mlo_params(struct wlan_objmgr_pdev *pdev,
|
|
|
if (QDF_IS_STATUS_ERROR(qdf_status))
|
|
|
continue;
|
|
|
|
|
|
- partner_vdev = wlan_objmgr_get_vdev_by_id_from_pdev(pdev,
|
|
|
- rsp_partner_info->vdev_id,
|
|
|
- WLAN_MLO_MGR_ID);
|
|
|
- if (!partner_vdev)
|
|
|
+ link_info = mlo_mgr_get_ap_link_by_link_id(roamed_vdev,
|
|
|
+ link_id);
|
|
|
+ if (!link_info) {
|
|
|
+ osif_debug("link info not found for link_id:%d",
|
|
|
+ link_id);
|
|
|
continue;
|
|
|
+ }
|
|
|
|
|
|
- bss = osif_get_chan_bss_from_kernel(partner_vdev,
|
|
|
+ bss = osif_get_chan_bss_from_kernel(roamed_vdev,
|
|
|
rsp_partner_info, rsp);
|
|
|
if (!bss) {
|
|
|
- wlan_objmgr_vdev_release_ref(partner_vdev,
|
|
|
- WLAN_MLO_MGR_ID);
|
|
|
+ osif_debug("kernel bss not found for link_id:%d",
|
|
|
+ link_id);
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- osif_populate_mlo_info_for_link(partner_vdev,
|
|
|
- roam_info_params,
|
|
|
- link_id, bss);
|
|
|
- wlan_objmgr_vdev_release_ref(partner_vdev, WLAN_MLO_MGR_ID);
|
|
|
+ osif_populate_mlo_info_for_link(roam_info_params,
|
|
|
+ link_id, bss,
|
|
|
+ link_info->link_addr.bytes);
|
|
|
+ mlo_mgr_osif_update_connect_info(roamed_vdev, link_id);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -173,12 +178,11 @@ static void osif_fill_mlo_roam_params(struct wlan_objmgr_vdev *vdev,
|
|
|
}
|
|
|
|
|
|
assoc_link_id = wlan_vdev_get_link_id(vdev);
|
|
|
- osif_populate_mlo_info_for_link(vdev, info,
|
|
|
- assoc_link_id, bss);
|
|
|
+ osif_populate_mlo_info_for_link(info,
|
|
|
+ assoc_link_id, bss,
|
|
|
+ wlan_vdev_mlme_get_macaddr(vdev));
|
|
|
|
|
|
- osif_populate_partner_links_roam_mlo_params(wlan_vdev_get_pdev(vdev),
|
|
|
- rsp,
|
|
|
- info);
|
|
|
+ osif_populate_partner_links_roam_mlo_params(vdev, rsp, info);
|
|
|
}
|
|
|
#else
|
|
|
static void osif_fill_mlo_roam_params(struct wlan_objmgr_vdev *vdev,
|