|
@@ -461,11 +461,17 @@ void osif_update_partner_vdev_info(struct wlan_objmgr_vdev *vdev,
|
|
struct mlo_partner_info partner_info)
|
|
struct mlo_partner_info partner_info)
|
|
{
|
|
{
|
|
struct wlan_objmgr_vdev *tmp_vdev;
|
|
struct wlan_objmgr_vdev *tmp_vdev;
|
|
|
|
+ struct wlan_mlo_dev_context *ml_dev = NULL;
|
|
uint8_t i;
|
|
uint8_t i;
|
|
|
|
+ uint8_t link_id;
|
|
|
|
|
|
if (!vdev)
|
|
if (!vdev)
|
|
return;
|
|
return;
|
|
|
|
|
|
|
|
+ ml_dev = vdev->mlo_dev_ctx;
|
|
|
|
+ if (!ml_dev)
|
|
|
|
+ return;
|
|
|
|
+
|
|
for (i = 0; i < partner_info.num_partner_links; i++) {
|
|
for (i = 0; i < partner_info.num_partner_links; i++) {
|
|
tmp_vdev = mlo_get_ml_vdev_by_mac(
|
|
tmp_vdev = mlo_get_ml_vdev_by_mac(
|
|
vdev,
|
|
vdev,
|
|
@@ -474,9 +480,14 @@ void osif_update_partner_vdev_info(struct wlan_objmgr_vdev *vdev,
|
|
mlo_update_connect_req_links(tmp_vdev, 1);
|
|
mlo_update_connect_req_links(tmp_vdev, 1);
|
|
wlan_vdev_mlme_set_mlo_vdev(tmp_vdev);
|
|
wlan_vdev_mlme_set_mlo_vdev(tmp_vdev);
|
|
wlan_vdev_mlme_set_mlo_link_vdev(tmp_vdev);
|
|
wlan_vdev_mlme_set_mlo_link_vdev(tmp_vdev);
|
|
- wlan_vdev_set_link_id(
|
|
|
|
- tmp_vdev,
|
|
|
|
- partner_info.partner_link_info[i].link_id);
|
|
|
|
|
|
+ /* Set link id for bridge sta vap */
|
|
|
|
+ if (mlo_is_sta_bridge_vdev(tmp_vdev)) {
|
|
|
|
+ link_id = ml_dev->bridge_sta_ctx->bridge_link_id;
|
|
|
|
+ wlan_vdev_set_link_id(tmp_vdev, link_id);
|
|
|
|
+ } else
|
|
|
|
+ wlan_vdev_set_link_id(
|
|
|
|
+ tmp_vdev,
|
|
|
|
+ partner_info.partner_link_info[i].link_id);
|
|
osif_debug("link id %d",
|
|
osif_debug("link id %d",
|
|
tmp_vdev->vdev_mlme.mlo_link_id);
|
|
tmp_vdev->vdev_mlme.mlo_link_id);
|
|
}
|
|
}
|
|
@@ -501,11 +512,13 @@ QDF_STATUS osif_update_mlo_partner_info(
|
|
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
|
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
|
struct wlan_objmgr_pdev *pdev = NULL;
|
|
struct wlan_objmgr_pdev *pdev = NULL;
|
|
struct wlan_objmgr_psoc *psoc;
|
|
struct wlan_objmgr_psoc *psoc;
|
|
|
|
+ struct wlan_mlo_dev_context *ml_dev = NULL;
|
|
|
|
|
|
if (!vdev || !connect_req || !req)
|
|
if (!vdev || !connect_req || !req)
|
|
return status;
|
|
return status;
|
|
|
|
|
|
- if (!vdev->mlo_dev_ctx) {
|
|
|
|
|
|
+ ml_dev = vdev->mlo_dev_ctx;
|
|
|
|
+ if (!ml_dev) {
|
|
osif_debug("ML ctx is NULL, ignore ML IE");
|
|
osif_debug("ML ctx is NULL, ignore ML IE");
|
|
return QDF_STATUS_SUCCESS;
|
|
return QDF_STATUS_SUCCESS;
|
|
}
|
|
}
|
|
@@ -591,6 +604,10 @@ QDF_STATUS osif_update_mlo_partner_info(
|
|
osif_err("Topology check failed prevent association\n");
|
|
osif_err("Topology check failed prevent association\n");
|
|
return QDF_STATUS_E_FAILURE;
|
|
return QDF_STATUS_E_FAILURE;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ if (mlo_sta_bridge_exists(vdev))
|
|
|
|
+ mlo_update_partner_bridge_info(ml_dev, &partner_info);
|
|
|
|
+
|
|
mlo_update_connect_req_links(vdev, 1);
|
|
mlo_update_connect_req_links(vdev, 1);
|
|
osif_update_partner_vdev_info(vdev, partner_info);
|
|
osif_update_partner_vdev_info(vdev, partner_info);
|
|
mlo_mlme_sta_op_class(vdev, ml_ie);
|
|
mlo_mlme_sta_op_class(vdev, ml_ie);
|