|
@@ -147,6 +147,33 @@ bool mlo_vdevs_check_single_soc(struct wlan_objmgr_vdev **wlan_vdev_list,
|
|
|
|
|
|
qdf_export_symbol(mlo_vdevs_check_single_soc);
|
|
qdf_export_symbol(mlo_vdevs_check_single_soc);
|
|
|
|
|
|
|
|
+void mlo_setup_init(void)
|
|
|
|
+{
|
|
|
|
+ struct mlo_mgr_context *mlo_ctx = wlan_objmgr_get_mlo_ctx();
|
|
|
|
+
|
|
|
|
+ if (!mlo_ctx)
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+ if (qdf_event_create(&mlo_ctx->setup_info.event) !=
|
|
|
|
+ QDF_STATUS_SUCCESS) {
|
|
|
|
+ mlo_err("Unable to create teardown event");
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+qdf_export_symbol(mlo_setup_init);
|
|
|
|
+
|
|
|
|
+void mlo_setup_deinit(void)
|
|
|
|
+{
|
|
|
|
+ struct mlo_mgr_context *mlo_ctx = wlan_objmgr_get_mlo_ctx();
|
|
|
|
+
|
|
|
|
+ if (!mlo_ctx)
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+ qdf_event_destroy(&mlo_ctx->setup_info.event);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+qdf_export_symbol(mlo_setup_deinit);
|
|
|
|
+
|
|
void mlo_setup_update_num_links(struct wlan_objmgr_psoc *psoc,
|
|
void mlo_setup_update_num_links(struct wlan_objmgr_psoc *psoc,
|
|
uint8_t num_links)
|
|
uint8_t num_links)
|
|
{
|
|
{
|
|
@@ -472,9 +499,6 @@ QDF_STATUS mlo_link_teardown_link(struct wlan_objmgr_psoc *psoc,
|
|
if (!mlo_check_all_pdev_state(psoc, MLO_LINK_TEARDOWN))
|
|
if (!mlo_check_all_pdev_state(psoc, MLO_LINK_TEARDOWN))
|
|
return QDF_STATUS_SUCCESS;
|
|
return QDF_STATUS_SUCCESS;
|
|
|
|
|
|
- if (qdf_event_create(&mlo_ctx->setup_info.event) != QDF_STATUS_SUCCESS)
|
|
|
|
- return QDF_STATUS_E_FAULT;
|
|
|
|
-
|
|
|
|
tx_ops = wlan_psoc_get_lmac_if_txops(psoc);
|
|
tx_ops = wlan_psoc_get_lmac_if_txops(psoc);
|
|
/* Trigger MLO teardown */
|
|
/* Trigger MLO teardown */
|
|
if (tx_ops && tx_ops->mops.target_if_mlo_teardown_req) {
|
|
if (tx_ops && tx_ops->mops.target_if_mlo_teardown_req) {
|
|
@@ -484,15 +508,14 @@ QDF_STATUS mlo_link_teardown_link(struct wlan_objmgr_psoc *psoc,
|
|
reason);
|
|
reason);
|
|
}
|
|
}
|
|
|
|
|
|
- status = qdf_wait_for_event_completion(&mlo_ctx->setup_info.event,
|
|
|
|
- MLO_MGR_TEARDOWN_TIMEOUT);
|
|
|
|
|
|
+ status = qdf_wait_for_event_completion(
|
|
|
|
+ &mlo_ctx->setup_info.event,
|
|
|
|
+ MLO_MGR_TEARDOWN_TIMEOUT);
|
|
if (status != QDF_STATUS_SUCCESS) {
|
|
if (status != QDF_STATUS_SUCCESS) {
|
|
qdf_info("Teardown timeout");
|
|
qdf_info("Teardown timeout");
|
|
mlo_force_teardown();
|
|
mlo_force_teardown();
|
|
}
|
|
}
|
|
|
|
|
|
- qdf_event_destroy(&mlo_ctx->setup_info.event);
|
|
|
|
-
|
|
|
|
return status;
|
|
return status;
|
|
}
|
|
}
|
|
|
|
|