|
@@ -87,6 +87,26 @@ tdls_mlo_get_tdls_link_vdev(struct wlan_objmgr_vdev *vdev)
|
|
|
return wlan_mlo_get_tdls_link_vdev(vdev);
|
|
|
}
|
|
|
|
|
|
+void
|
|
|
+tdls_set_remain_links_unforce(struct wlan_objmgr_vdev *vdev)
|
|
|
+{
|
|
|
+ struct wlan_mlo_dev_context *mlo_dev_ctx;
|
|
|
+ struct wlan_objmgr_vdev *mlo_vdev;
|
|
|
+ int i;
|
|
|
+
|
|
|
+ /* TDLS link is selected, unforce link for other vdevs */
|
|
|
+ mlo_dev_ctx = vdev->mlo_dev_ctx;
|
|
|
+ for (i = 0; i < WLAN_UMAC_MLO_MAX_VDEVS; i++) {
|
|
|
+ mlo_vdev = mlo_dev_ctx->wlan_vdev_list[i];
|
|
|
+ if (!mlo_vdev || mlo_vdev == vdev)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ tdls_debug("try to set vdev %d to unforce",
|
|
|
+ wlan_vdev_get_id(mlo_vdev));
|
|
|
+ tdls_set_link_unforce(mlo_vdev);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
QDF_STATUS
|
|
|
tdls_process_mlo_cal_tdls_link_score(struct wlan_objmgr_vdev *vdev)
|
|
|
{
|
|
@@ -425,6 +445,11 @@ tdls_mlo_get_tdls_link_vdev(struct wlan_objmgr_vdev *vdev)
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
+void
|
|
|
+tdls_set_remain_links_unforce(struct wlan_objmgr_vdev *vdev)
|
|
|
+{
|
|
|
+}
|
|
|
+
|
|
|
QDF_STATUS
|
|
|
tdls_process_mlo_cal_tdls_link_score(struct wlan_objmgr_vdev *vdev)
|
|
|
{
|
|
@@ -852,7 +877,7 @@ tdls_send_mgmt_serialize_callback(struct wlan_serialization_command *cmd,
|
|
|
}
|
|
|
|
|
|
#ifdef WLAN_FEATURE_11BE_MLO
|
|
|
-static QDF_STATUS tdls_set_link_mode(struct tdls_action_frame_request *req)
|
|
|
+QDF_STATUS tdls_set_link_mode(struct tdls_action_frame_request *req)
|
|
|
{
|
|
|
uint8_t mlo_vdev_lst[WLAN_UMAC_MLO_MAX_VDEVS] = {-1};
|
|
|
struct wlan_objmgr_psoc *psoc;
|
|
@@ -865,10 +890,6 @@ static QDF_STATUS tdls_set_link_mode(struct tdls_action_frame_request *req)
|
|
|
if (!is_mlo_vdev)
|
|
|
return status;
|
|
|
|
|
|
- mlo_tdls_vdev = wlan_mlo_get_tdls_link_vdev(req->vdev);
|
|
|
- if (mlo_tdls_vdev)
|
|
|
- return status;
|
|
|
-
|
|
|
psoc = wlan_vdev_get_psoc(req->vdev);
|
|
|
if (!psoc) {
|
|
|
tdls_err("psoc is NULL");
|
|
@@ -877,6 +898,10 @@ static QDF_STATUS tdls_set_link_mode(struct tdls_action_frame_request *req)
|
|
|
|
|
|
if (req->tdls_mgmt.frame_type == TDLS_DISCOVERY_RESPONSE ||
|
|
|
req->tdls_mgmt.frame_type == TDLS_DISCOVERY_REQUEST) {
|
|
|
+ mlo_tdls_vdev = wlan_mlo_get_tdls_link_vdev(req->vdev);
|
|
|
+ if (mlo_tdls_vdev)
|
|
|
+ return status;
|
|
|
+
|
|
|
mlo_vdev_lst[0] = wlan_vdev_get_id(req->vdev);
|
|
|
vdev_count = 1;
|
|
|
|
|
@@ -886,12 +911,20 @@ static QDF_STATUS tdls_set_link_mode(struct tdls_action_frame_request *req)
|
|
|
vdev_count, mlo_vdev_lst);
|
|
|
if (status == QDF_STATUS_SUCCESS)
|
|
|
req->link_active = true;
|
|
|
+ } else if (req->tdls_mgmt.frame_type == TDLS_MAX_ACTION_CODE) {
|
|
|
+ mlo_vdev_lst[0] = wlan_vdev_get_id(req->vdev);
|
|
|
+ vdev_count = 1;
|
|
|
+ status =
|
|
|
+ policy_mgr_mlo_sta_set_link(psoc,
|
|
|
+ MLO_LINK_FORCE_REASON_TDLS,
|
|
|
+ MLO_LINK_FORCE_MODE_NO_FORCE,
|
|
|
+ vdev_count, mlo_vdev_lst);
|
|
|
}
|
|
|
|
|
|
return status;
|
|
|
}
|
|
|
#else
|
|
|
-static QDF_STATUS tdls_set_link_mode(struct tdls_action_frame_request *req)
|
|
|
+QDF_STATUS tdls_set_link_mode(struct tdls_action_frame_request *req)
|
|
|
{
|
|
|
return QDF_STATUS_SUCCESS;
|
|
|
}
|