Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c845ae96 authored by Dan Williams's avatar Dan Williams
Browse files

isci: unify rnc destruct handlers



Unify rnc destruct handlers and delete the state handler.

Reported-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
parent 338e386d
Loading
Loading
Loading
Loading
+36 −70
Original line number Original line Diff line number Diff line
@@ -218,26 +218,6 @@ static enum sci_status scic_sds_remote_node_context_continue_to_resume_handler(
	return SCI_FAILURE_INVALID_STATE;
	return SCI_FAILURE_INVALID_STATE;
}
}


/* --------------------------------------------------------------------------- */

static enum sci_status scic_sds_remote_node_context_default_destruct_handler(
	struct scic_sds_remote_node_context *sci_rnc,
	scics_sds_remote_node_context_callback callback,
	void *callback_parameter)
{
	dev_warn(scirdev_to_dev(rnc_to_dev(sci_rnc)),
		 "%s: SCIC Remote Node Context 0x%p requested to stop while "
		 "in unexpected state %d\n",
		 __func__,
		 sci_rnc,
		 sci_base_state_machine_get_state(&sci_rnc->state_machine));

	/*
	 * We have decided that the destruct request on the remote node context can not fail
	 * since it is either in the initial/destroyed state or is can be destroyed. */
	return SCI_SUCCESS;
}

static enum sci_status scic_sds_remote_node_context_default_suspend_handler(
static enum sci_status scic_sds_remote_node_context_default_suspend_handler(
	struct scic_sds_remote_node_context *sci_rnc,
	struct scic_sds_remote_node_context *sci_rnc,
	u32 suspend_type,
	u32 suspend_type,
@@ -315,36 +295,6 @@ static enum sci_status scic_sds_remote_node_context_success_start_task_handler(
	return SCI_SUCCESS;
	return SCI_SUCCESS;
}
}


/**
 *
 * @sci_rnc:
 * @callback:
 * @callback_parameter:
 *
 * This method handles destruct calls from the various state handlers.  The
 * remote node context can be requested to destroy from any state. If there was
 * a user callback it is always replaced with the request to destroy user
 * callback. enum sci_status
 */
static enum sci_status scic_sds_remote_node_context_general_destruct_handler(
	struct scic_sds_remote_node_context *sci_rnc,
	scics_sds_remote_node_context_callback callback,
	void *callback_parameter)
{
	scic_sds_remote_node_context_setup_to_destory(
		sci_rnc, callback, callback_parameter
		);

	sci_base_state_machine_change_state(
		&sci_rnc->state_machine,
		SCIC_SDS_REMOTE_NODE_CONTEXT_INVALIDATING_STATE
		);

	return SCI_SUCCESS;
}

/* --------------------------------------------------------------------------- */

static enum sci_status scic_sds_remote_node_context_initial_state_resume_handler(
static enum sci_status scic_sds_remote_node_context_initial_state_resume_handler(
	struct scic_sds_remote_node_context *sci_rnc,
	struct scic_sds_remote_node_context *sci_rnc,
	scics_sds_remote_node_context_callback callback,
	scics_sds_remote_node_context_callback callback,
@@ -368,18 +318,6 @@ static enum sci_status scic_sds_remote_node_context_initial_state_resume_handler
	return SCI_FAILURE_INVALID_STATE;
	return SCI_FAILURE_INVALID_STATE;
}
}


static enum sci_status scic_sds_remote_node_context_invalidating_state_destruct_handler(
	struct scic_sds_remote_node_context *sci_rnc,
	scics_sds_remote_node_context_callback callback,
	void *callback_parameter)
{
	scic_sds_remote_node_context_setup_to_destory(
		sci_rnc, callback, callback_parameter
		);

	return SCI_SUCCESS;
}

/**
/**
 *
 *
 * @sci_rnc: The remote node context object being suspended.
 * @sci_rnc: The remote node context object being suspended.
@@ -539,56 +477,48 @@ static enum sci_status scic_sds_remote_node_context_await_suspension_state_start


static struct scic_sds_remote_node_context_handlers scic_sds_remote_node_context_state_handler_table[] = {
static struct scic_sds_remote_node_context_handlers scic_sds_remote_node_context_state_handler_table[] = {
	[SCIC_SDS_REMOTE_NODE_CONTEXT_INITIAL_STATE] = {
	[SCIC_SDS_REMOTE_NODE_CONTEXT_INITIAL_STATE] = {
		.destruct_handler	= scic_sds_remote_node_context_default_destruct_handler,
		.suspend_handler	= scic_sds_remote_node_context_default_suspend_handler,
		.suspend_handler	= scic_sds_remote_node_context_default_suspend_handler,
		.resume_handler		= scic_sds_remote_node_context_initial_state_resume_handler,
		.resume_handler		= scic_sds_remote_node_context_initial_state_resume_handler,
		.start_io_handler	= scic_sds_remote_node_context_default_start_io_handler,
		.start_io_handler	= scic_sds_remote_node_context_default_start_io_handler,
		.start_task_handler	= scic_sds_remote_node_context_default_start_task_handler,
		.start_task_handler	= scic_sds_remote_node_context_default_start_task_handler,
	},
	},
	[SCIC_SDS_REMOTE_NODE_CONTEXT_POSTING_STATE] = {
	[SCIC_SDS_REMOTE_NODE_CONTEXT_POSTING_STATE] = {
		.destruct_handler	= scic_sds_remote_node_context_general_destruct_handler,
		.suspend_handler	= scic_sds_remote_node_context_default_suspend_handler,
		.suspend_handler	= scic_sds_remote_node_context_default_suspend_handler,
		.resume_handler		= scic_sds_remote_node_context_continue_to_resume_handler,
		.resume_handler		= scic_sds_remote_node_context_continue_to_resume_handler,
		.start_io_handler	= scic_sds_remote_node_context_default_start_io_handler,
		.start_io_handler	= scic_sds_remote_node_context_default_start_io_handler,
		.start_task_handler	= scic_sds_remote_node_context_default_start_task_handler,
		.start_task_handler	= scic_sds_remote_node_context_default_start_task_handler,
	},
	},
	[SCIC_SDS_REMOTE_NODE_CONTEXT_INVALIDATING_STATE] = {
	[SCIC_SDS_REMOTE_NODE_CONTEXT_INVALIDATING_STATE] = {
		.destruct_handler	= scic_sds_remote_node_context_invalidating_state_destruct_handler,
		.suspend_handler	= scic_sds_remote_node_context_default_suspend_handler,
		.suspend_handler	= scic_sds_remote_node_context_default_suspend_handler,
		.resume_handler		= scic_sds_remote_node_context_continue_to_resume_handler,
		.resume_handler		= scic_sds_remote_node_context_continue_to_resume_handler,
		.start_io_handler	= scic_sds_remote_node_context_default_start_io_handler,
		.start_io_handler	= scic_sds_remote_node_context_default_start_io_handler,
		.start_task_handler	= scic_sds_remote_node_context_default_start_task_handler,
		.start_task_handler	= scic_sds_remote_node_context_default_start_task_handler,
	},
	},
	[SCIC_SDS_REMOTE_NODE_CONTEXT_RESUMING_STATE] = {
	[SCIC_SDS_REMOTE_NODE_CONTEXT_RESUMING_STATE] = {
		.destruct_handler	= scic_sds_remote_node_context_general_destruct_handler,
		.suspend_handler	= scic_sds_remote_node_context_default_suspend_handler,
		.suspend_handler	= scic_sds_remote_node_context_default_suspend_handler,
		.resume_handler		= scic_sds_remote_node_context_continue_to_resume_handler,
		.resume_handler		= scic_sds_remote_node_context_continue_to_resume_handler,
		.start_io_handler	= scic_sds_remote_node_context_default_start_io_handler,
		.start_io_handler	= scic_sds_remote_node_context_default_start_io_handler,
		.start_task_handler	= scic_sds_remote_node_context_success_start_task_handler,
		.start_task_handler	= scic_sds_remote_node_context_success_start_task_handler,
	},
	},
	[SCIC_SDS_REMOTE_NODE_CONTEXT_READY_STATE] = {
	[SCIC_SDS_REMOTE_NODE_CONTEXT_READY_STATE] = {
		.destruct_handler	= scic_sds_remote_node_context_general_destruct_handler,
		.suspend_handler	= scic_sds_remote_node_context_ready_state_suspend_handler,
		.suspend_handler	= scic_sds_remote_node_context_ready_state_suspend_handler,
		.resume_handler		= scic_sds_remote_node_context_default_resume_handler,
		.resume_handler		= scic_sds_remote_node_context_default_resume_handler,
		.start_io_handler	= scic_sds_remote_node_context_ready_state_start_io_handler,
		.start_io_handler	= scic_sds_remote_node_context_ready_state_start_io_handler,
		.start_task_handler	= scic_sds_remote_node_context_success_start_task_handler,
		.start_task_handler	= scic_sds_remote_node_context_success_start_task_handler,
	},
	},
	[SCIC_SDS_REMOTE_NODE_CONTEXT_TX_SUSPENDED_STATE] = {
	[SCIC_SDS_REMOTE_NODE_CONTEXT_TX_SUSPENDED_STATE] = {
		.destruct_handler	= scic_sds_remote_node_context_general_destruct_handler,
		.suspend_handler	= scic_sds_remote_node_context_default_suspend_handler,
		.suspend_handler	= scic_sds_remote_node_context_default_suspend_handler,
		.resume_handler		= scic_sds_remote_node_context_tx_suspended_state_resume_handler,
		.resume_handler		= scic_sds_remote_node_context_tx_suspended_state_resume_handler,
		.start_io_handler	= scic_sds_remote_node_context_default_start_io_handler,
		.start_io_handler	= scic_sds_remote_node_context_default_start_io_handler,
		.start_task_handler	= scic_sds_remote_node_context_suspended_start_task_handler,
		.start_task_handler	= scic_sds_remote_node_context_suspended_start_task_handler,
	},
	},
	[SCIC_SDS_REMOTE_NODE_CONTEXT_TX_RX_SUSPENDED_STATE] = {
	[SCIC_SDS_REMOTE_NODE_CONTEXT_TX_RX_SUSPENDED_STATE] = {
		.destruct_handler	= scic_sds_remote_node_context_general_destruct_handler,
		.suspend_handler	= scic_sds_remote_node_context_default_suspend_handler,
		.suspend_handler	= scic_sds_remote_node_context_default_suspend_handler,
		.resume_handler		= scic_sds_remote_node_context_tx_rx_suspended_state_resume_handler,
		.resume_handler		= scic_sds_remote_node_context_tx_rx_suspended_state_resume_handler,
		.start_io_handler	= scic_sds_remote_node_context_default_start_io_handler,
		.start_io_handler	= scic_sds_remote_node_context_default_start_io_handler,
		.start_task_handler	= scic_sds_remote_node_context_suspended_start_task_handler,
		.start_task_handler	= scic_sds_remote_node_context_suspended_start_task_handler,
	},
	},
	[SCIC_SDS_REMOTE_NODE_CONTEXT_AWAIT_SUSPENSION_STATE] = {
	[SCIC_SDS_REMOTE_NODE_CONTEXT_AWAIT_SUSPENSION_STATE] = {
		.destruct_handler	= scic_sds_remote_node_context_general_destruct_handler,
		.suspend_handler	= scic_sds_remote_node_context_default_suspend_handler,
		.suspend_handler	= scic_sds_remote_node_context_default_suspend_handler,
		.resume_handler		= scic_sds_remote_node_context_await_suspension_state_resume_handler,
		.resume_handler		= scic_sds_remote_node_context_await_suspension_state_resume_handler,
		.start_io_handler	= scic_sds_remote_node_context_default_start_io_handler,
		.start_io_handler	= scic_sds_remote_node_context_default_start_io_handler,
@@ -1023,3 +953,39 @@ enum sci_status scic_sds_remote_node_context_event_handler(struct scic_sds_remot
	return SCI_FAILURE;
	return SCI_FAILURE;


}
}

enum sci_status scic_sds_remote_node_context_destruct(struct scic_sds_remote_node_context *sci_rnc,
						      scics_sds_remote_node_context_callback cb_fn,
						      void *cb_p)
{
	enum scis_sds_remote_node_context_states state;

	state = sci_rnc->state_machine.current_state_id;
	switch (state) {
	case SCIC_SDS_REMOTE_NODE_CONTEXT_INVALIDATING_STATE:
		scic_sds_remote_node_context_setup_to_destory(sci_rnc, cb_fn, cb_p);
		return SCI_SUCCESS;
	case SCIC_SDS_REMOTE_NODE_CONTEXT_POSTING_STATE:
	case SCIC_SDS_REMOTE_NODE_CONTEXT_RESUMING_STATE:
	case SCIC_SDS_REMOTE_NODE_CONTEXT_READY_STATE:
	case SCIC_SDS_REMOTE_NODE_CONTEXT_TX_SUSPENDED_STATE:
	case SCIC_SDS_REMOTE_NODE_CONTEXT_TX_RX_SUSPENDED_STATE:
	case SCIC_SDS_REMOTE_NODE_CONTEXT_AWAIT_SUSPENSION_STATE:
		scic_sds_remote_node_context_setup_to_destory(sci_rnc, cb_fn, cb_p);
		sci_base_state_machine_change_state(&sci_rnc->state_machine,
						    SCIC_SDS_REMOTE_NODE_CONTEXT_INVALIDATING_STATE);
		return SCI_SUCCESS;
	case SCIC_SDS_REMOTE_NODE_CONTEXT_INITIAL_STATE:
		dev_warn(scirdev_to_dev(rnc_to_dev(sci_rnc)),
			 "%s: invalid state %d\n", __func__, state);
		/* We have decided that the destruct request on the remote node context
		 * can not fail since it is either in the initial/destroyed state or is
		 * can be destroyed.
		 */
		return SCI_SUCCESS;
	default:
		dev_warn(scirdev_to_dev(rnc_to_dev(sci_rnc)),
			 "%s: invalid state %d\n", __func__, state);
		return SCI_FAILURE_INVALID_STATE;
	}
}
+3 −10
Original line number Original line Diff line number Diff line
@@ -103,12 +103,6 @@ typedef enum sci_status (*scic_sds_remote_node_context_io_request)(
	);
	);


struct scic_sds_remote_node_context_handlers {
struct scic_sds_remote_node_context_handlers {
	/**
	 * This handle is invoked to stop the RNC.  The callback is invoked when after
	 * the hardware notification that the RNC has been invalidated.
	 */
	scic_sds_remote_node_context_operation destruct_handler;

	/**
	/**
	 * This handler is invoked when there is a request to suspend  the RNC.  The
	 * This handler is invoked when there is a request to suspend  the RNC.  The
	 * callback is invoked after the hardware notification that the remote node is
	 * callback is invoked after the hardware notification that the remote node is
@@ -260,19 +254,18 @@ bool scic_sds_remote_node_context_is_ready(
#define scic_sds_remote_node_context_get_remote_node_index(rcn)	\
#define scic_sds_remote_node_context_get_remote_node_index(rcn)	\
	((rnc)->remote_node_index)
	((rnc)->remote_node_index)



enum sci_status scic_sds_remote_node_context_event_handler(struct scic_sds_remote_node_context *sci_rnc,
enum sci_status scic_sds_remote_node_context_event_handler(struct scic_sds_remote_node_context *sci_rnc,
							   u32 event_code);
							   u32 event_code);


enum sci_status scic_sds_remote_node_context_destruct(struct scic_sds_remote_node_context *sci_rnc,
						      scics_sds_remote_node_context_callback callback,
						      void *callback_parameter);
#define scic_sds_remote_node_context_resume(rnc, callback, parameter) \
#define scic_sds_remote_node_context_resume(rnc, callback, parameter) \
	((rnc)->state_handlers->resume_handler(rnc, callback, parameter))
	((rnc)->state_handlers->resume_handler(rnc, callback, parameter))


#define scic_sds_remote_node_context_suspend(rnc, suspend_type, callback, parameter) \
#define scic_sds_remote_node_context_suspend(rnc, suspend_type, callback, parameter) \
	((rnc)->state_handlers->suspend_handler(rnc, suspend_type, callback, parameter))
	((rnc)->state_handlers->suspend_handler(rnc, suspend_type, callback, parameter))


#define scic_sds_remote_node_context_destruct(rnc, callback, parameter)	\
	((rnc)->state_handlers->destruct_handler(rnc, callback, parameter))

#define scic_sds_remote_node_context_start_io(rnc, request) \
#define scic_sds_remote_node_context_start_io(rnc, request) \
	((rnc)->state_handlers->start_io_handler(rnc, request))
	((rnc)->state_handlers->start_io_handler(rnc, request))