|
@@ -27,6 +27,7 @@
|
|
|
#include "qdf_platform.h"
|
|
|
|
|
|
static bool g_ipa_is_ready;
|
|
|
+static qdf_mutex_t g_init_deinit_lock;
|
|
|
bool ipa_cb_is_ready(void)
|
|
|
{
|
|
|
return g_ipa_is_ready;
|
|
@@ -38,6 +39,16 @@ void ipa_disable_register_cb(void)
|
|
|
g_ipa_is_ready = false;
|
|
|
}
|
|
|
|
|
|
+void ipa_init_deinit_lock(void)
|
|
|
+{
|
|
|
+ qdf_mutex_acquire(&g_init_deinit_lock);
|
|
|
+}
|
|
|
+
|
|
|
+void ipa_init_deinit_unlock(void)
|
|
|
+{
|
|
|
+ qdf_mutex_release(&g_init_deinit_lock);
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* ipa_pdev_obj_destroy_notification() - IPA pdev object destroy notification
|
|
|
* @pdev: pdev handle
|
|
@@ -71,7 +82,6 @@ ipa_pdev_obj_destroy_notification(struct wlan_objmgr_pdev *pdev,
|
|
|
ipa_err("Failed to detatch ipa pdev object");
|
|
|
|
|
|
ipa_obj_cleanup(ipa_obj);
|
|
|
- qdf_mutex_destroy(&ipa_obj->init_deinit_lock);
|
|
|
qdf_mem_free(ipa_obj);
|
|
|
ipa_disable_register_cb();
|
|
|
|
|
@@ -103,7 +113,6 @@ ipa_pdev_obj_create_notification(struct wlan_objmgr_pdev *pdev,
|
|
|
if (!ipa_obj)
|
|
|
return QDF_STATUS_E_NOMEM;
|
|
|
|
|
|
- qdf_mutex_create(&ipa_obj->init_deinit_lock);
|
|
|
status = wlan_objmgr_pdev_component_obj_attach(pdev,
|
|
|
WLAN_UMAC_COMP_IPA,
|
|
|
(void *)ipa_obj,
|
|
@@ -146,7 +155,8 @@ static void ipa_register_ready_cb(void *user_data)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- qdf_mutex_acquire(&ipa_obj->init_deinit_lock);
|
|
|
+ ipa_init_deinit_lock();
|
|
|
+
|
|
|
/*
|
|
|
* Meanwhile acquiring lock, driver stop modules can happen in parallel,
|
|
|
* validate driver state once again to proceed with IPA init.
|
|
@@ -180,7 +190,7 @@ static void ipa_register_ready_cb(void *user_data)
|
|
|
}
|
|
|
|
|
|
out:
|
|
|
- qdf_mutex_release(&ipa_obj->init_deinit_lock);
|
|
|
+ ipa_init_deinit_unlock();
|
|
|
}
|
|
|
|
|
|
QDF_STATUS ipa_register_is_ipa_ready(struct wlan_objmgr_pdev *pdev)
|
|
@@ -239,6 +249,8 @@ QDF_STATUS ipa_init(void)
|
|
|
goto fail_delete_pdev;
|
|
|
}
|
|
|
|
|
|
+ qdf_mutex_create(&g_init_deinit_lock);
|
|
|
+
|
|
|
return status;
|
|
|
|
|
|
fail_delete_pdev:
|
|
@@ -264,6 +276,8 @@ QDF_STATUS ipa_deinit(void)
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
+ qdf_mutex_destroy(&g_init_deinit_lock);
|
|
|
+
|
|
|
status = wlan_objmgr_unregister_pdev_destroy_handler(WLAN_UMAC_COMP_IPA,
|
|
|
ipa_pdev_obj_destroy_notification, NULL);
|
|
|
if (QDF_IS_STATUS_ERROR(status))
|