|
@@ -36,6 +36,12 @@
|
|
|
#include <wlan_scan_api.h>
|
|
|
|
|
|
#ifdef WLAN_FEATURE_11BE_MLO
|
|
|
+static QDF_STATUS mlo_disocnnect_req(struct wlan_objmgr_vdev *vdev,
|
|
|
+ enum wlan_cm_source source,
|
|
|
+ enum wlan_reason_code reason_code,
|
|
|
+ struct qdf_mac_addr *bssid,
|
|
|
+ bool validate_req);
|
|
|
+
|
|
|
static inline void
|
|
|
mlo_allocate_and_copy_ies(struct wlan_cm_connect_req *target,
|
|
|
struct wlan_cm_connect_req *source)
|
|
@@ -844,9 +850,9 @@ static QDF_STATUS ml_activate_pend_disconn_req_cb(struct scheduler_msg *msg)
|
|
|
|
|
|
mlo_dev_ctx = vdev->mlo_dev_ctx;
|
|
|
sta_ctx = mlo_dev_ctx->sta_ctx;
|
|
|
- mlo_disconnect(vdev, sta_ctx->disconn_req->source,
|
|
|
- sta_ctx->disconn_req->reason_code,
|
|
|
- &sta_ctx->disconn_req->bssid);
|
|
|
+ mlo_disocnnect_req(vdev, sta_ctx->disconn_req->source,
|
|
|
+ sta_ctx->disconn_req->reason_code,
|
|
|
+ &sta_ctx->disconn_req->bssid, false);
|
|
|
|
|
|
qdf_mem_free(sta_ctx->disconn_req);
|
|
|
sta_ctx->disconn_req = NULL;
|
|
@@ -1076,10 +1082,11 @@ mlo_send_link_disconnect_sync(struct wlan_mlo_dev_context *mlo_dev_ctx,
|
|
|
return QDF_STATUS_SUCCESS;
|
|
|
}
|
|
|
|
|
|
-QDF_STATUS mlo_disconnect(struct wlan_objmgr_vdev *vdev,
|
|
|
- enum wlan_cm_source source,
|
|
|
- enum wlan_reason_code reason_code,
|
|
|
- struct qdf_mac_addr *bssid)
|
|
|
+static QDF_STATUS mlo_disocnnect_req(struct wlan_objmgr_vdev *vdev,
|
|
|
+ enum wlan_cm_source source,
|
|
|
+ enum wlan_reason_code reason_code,
|
|
|
+ struct qdf_mac_addr *bssid,
|
|
|
+ bool validate_req)
|
|
|
{
|
|
|
struct wlan_mlo_dev_context *mlo_dev_ctx = NULL;
|
|
|
struct wlan_mlo_sta *sta_ctx = NULL;
|
|
@@ -1100,13 +1107,16 @@ QDF_STATUS mlo_disconnect(struct wlan_objmgr_vdev *vdev,
|
|
|
sta_ctx->connect_req = NULL;
|
|
|
}
|
|
|
|
|
|
- status = mlo_validate_disconn_req(vdev, source,
|
|
|
- reason_code, bssid);
|
|
|
- if (QDF_IS_STATUS_ERROR(status)) {
|
|
|
- mlo_debug("Connect in progress, deferring disconnect");
|
|
|
- mlo_dev_lock_release(mlo_dev_ctx);
|
|
|
- return status;
|
|
|
+ if (validate_req) {
|
|
|
+ status = mlo_validate_disconn_req(vdev, source,
|
|
|
+ reason_code, bssid);
|
|
|
+ if (QDF_IS_STATUS_ERROR(status)) {
|
|
|
+ mlo_debug("Connect in progress, deferring disconnect");
|
|
|
+ mlo_dev_lock_release(mlo_dev_ctx);
|
|
|
+ return status;
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
mlo_dev_lock_release(mlo_dev_ctx);
|
|
|
|
|
|
status = mlo_send_link_disconnect(vdev, source,
|
|
@@ -1124,6 +1134,14 @@ QDF_STATUS mlo_disconnect(struct wlan_objmgr_vdev *vdev,
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
+QDF_STATUS mlo_disconnect(struct wlan_objmgr_vdev *vdev,
|
|
|
+ enum wlan_cm_source source,
|
|
|
+ enum wlan_reason_code reason_code,
|
|
|
+ struct qdf_mac_addr *bssid)
|
|
|
+{
|
|
|
+ return mlo_disocnnect_req(vdev, source, reason_code, bssid, true);
|
|
|
+}
|
|
|
+
|
|
|
QDF_STATUS mlo_sync_disconnect(struct wlan_objmgr_vdev *vdev,
|
|
|
enum wlan_cm_source source,
|
|
|
enum wlan_reason_code reason_code,
|