+enum sci_status
+scic_sds_io_request_tc_completion(struct scic_sds_request *sci_req, u32 completion_code)
+{
+ enum sci_base_request_states state;
+ struct scic_sds_controller *scic = sci_req->owning_controller;
+
+ state = sci_req->state_machine.current_state_id;
+
+ switch (state) {
+ case SCI_BASE_REQUEST_STATE_STARTED:
+ return request_started_state_tc_event(sci_req, completion_code);
+ case SCIC_SDS_IO_REQUEST_STARTED_TASK_MGMT_SUBSTATE_AWAIT_TC_COMPLETION:
+ return ssp_task_request_await_tc_event(sci_req, completion_code);
+ case SCIC_SDS_SMP_REQUEST_STARTED_SUBSTATE_AWAIT_RESPONSE:
+ return smp_request_await_response_tc_event(sci_req, completion_code);
+ case SCIC_SDS_SMP_REQUEST_STARTED_SUBSTATE_AWAIT_TC_COMPLETION:
+ return smp_request_await_tc_event(sci_req, completion_code);
+ case SCIC_SDS_STP_REQUEST_STARTED_UDMA_AWAIT_TC_COMPLETION_SUBSTATE:
+ return stp_request_udma_await_tc_event(sci_req, completion_code);
+ case SCIC_SDS_STP_REQUEST_STARTED_NON_DATA_AWAIT_H2D_COMPLETION_SUBSTATE:
+ return stp_request_non_data_await_h2d_tc_event(sci_req, completion_code);
+ case SCIC_SDS_STP_REQUEST_STARTED_PIO_AWAIT_H2D_COMPLETION_SUBSTATE:
+ return stp_request_pio_await_h2d_completion_tc_event(sci_req, completion_code);
+ case SCIC_SDS_STP_REQUEST_STARTED_PIO_DATA_OUT_TRANSMIT_DATA_SUBSTATE:
+ return pio_data_out_tx_done_tc_event(sci_req, completion_code);
+ case SCIC_SDS_STP_REQUEST_STARTED_SOFT_RESET_AWAIT_H2D_ASSERTED_COMPLETION_SUBSTATE:
+ return stp_request_soft_reset_await_h2d_asserted_tc_event(sci_req, completion_code);
+ case SCIC_SDS_STP_REQUEST_STARTED_SOFT_RESET_AWAIT_H2D_DIAGNOSTIC_COMPLETION_SUBSTATE:
+ return stp_request_soft_reset_await_h2d_diagnostic_tc_event(sci_req, completion_code);
+ case SCI_BASE_REQUEST_STATE_ABORTING:
+ return request_aborting_state_tc_event(sci_req, completion_code);
+ default:
+ dev_warn(scic_to_dev(scic),
+ "%s: SCIC IO Request given task completion notification %x "
+ "while in wrong state %d\n", __func__, completion_code,
+ state);
+ return SCI_FAILURE_INVALID_STATE;
+ }
+}
+
+
+