|
@@ -1425,6 +1425,38 @@ QDF_STATUS vdevmgr_mlme_ext_hdl_create(struct vdev_mlme_obj *vdev_mlme)
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
+static void
|
|
|
+mlme_wma_vdev_detach_post_cb(struct scheduler_msg *msg)
|
|
|
+{
|
|
|
+ struct vdev_delete_response rsp = {0};
|
|
|
+
|
|
|
+ if (!msg) {
|
|
|
+ mlme_err("Msg is NULL");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ rsp.vdev_id = msg->bodyval;
|
|
|
+ wma_vdev_detach_callback(&rsp);
|
|
|
+}
|
|
|
+
|
|
|
+static void mlme_wma_vdev_detach_handler(uint8_t vdev_id)
|
|
|
+{
|
|
|
+ struct scheduler_msg msg = {0};
|
|
|
+
|
|
|
+ msg.bodyptr = NULL;
|
|
|
+ msg.bodyval = vdev_id;
|
|
|
+ msg.callback = (scheduler_msg_process_fn_t)
|
|
|
+ mlme_wma_vdev_detach_post_cb;
|
|
|
+
|
|
|
+ if (scheduler_post_message(QDF_MODULE_ID_MLME,
|
|
|
+ QDF_MODULE_ID_TARGET_IF,
|
|
|
+ QDF_MODULE_ID_TARGET_IF, &msg) ==
|
|
|
+ QDF_STATUS_SUCCESS)
|
|
|
+ return;
|
|
|
+
|
|
|
+ mlme_err("Failed to post wma vdev detach");
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* vdevmgr_mlme_ext_hdl_destroy () - Destroy mlme legacy priv object
|
|
|
* @vdev_mlme: vdev mlme object
|
|
@@ -1435,7 +1467,6 @@ static
|
|
|
QDF_STATUS vdevmgr_mlme_ext_hdl_destroy(struct vdev_mlme_obj *vdev_mlme)
|
|
|
{
|
|
|
QDF_STATUS status = QDF_STATUS_E_FAILURE;
|
|
|
- struct vdev_delete_response rsp;
|
|
|
uint8_t vdev_id;
|
|
|
|
|
|
vdev_id = vdev_mlme->vdev->vdev_objmgr.vdev_id;
|
|
@@ -1448,8 +1479,7 @@ QDF_STATUS vdevmgr_mlme_ext_hdl_destroy(struct vdev_mlme_obj *vdev_mlme)
|
|
|
status = vdev_mgr_delete_send(vdev_mlme);
|
|
|
if (QDF_IS_STATUS_ERROR(status)) {
|
|
|
mlme_err("Failed to send vdev delete to firmware");
|
|
|
- rsp.vdev_id = vdev_id;
|
|
|
- wma_vdev_detach_callback(&rsp);
|
|
|
+ mlme_wma_vdev_detach_handler(vdev_id);
|
|
|
}
|
|
|
|
|
|
mlme_ext_handler_destroy(vdev_mlme);
|