/** * @brief This user callback will inform the user that an IO request has * completed. * * @param[in] controller This parameter specifies the controller on * which the IO request is completing. * @param[in] remote_device This parameter specifies the remote device on * which this request is completing. * @param[in] io_request This parameter specifies the IO request that has * completed. * @param[in] completion_status This parameter specifies the results of * the IO request operation. SCI_IO_SUCCESS indicates * successful completion. * * @return none */ void scif_cb_io_request_complete(SCI_CONTROLLER_HANDLE_T scif_controller, SCI_REMOTE_DEVICE_HANDLE_T remote_device, SCI_IO_REQUEST_HANDLE_T io_request, SCI_IO_STATUS completion_status) { struct ISCI_IO_REQUEST *isci_request = (struct ISCI_IO_REQUEST *)sci_object_get_association(io_request); scif_controller_complete_io(scif_controller, remote_device, io_request); isci_io_request_complete(scif_controller, remote_device, isci_request, completion_status); }
/** * @brief This method continues a scif sas request. * * @param[in] fw_controller The framework controller * @param[in] fw_device The device that the IO request targets to. * @param[in] fw_request The IO request to be continued. * * @return Indicate if the internal io was successfully constructed. * @retval SCI_SUCCESS This value is returned if the internal io was * successfully continued. * @retval SCI_FAILURE This value is returned if the io was failed to * be continued. */ SCI_STATUS scif_sas_io_request_continue( SCIF_SAS_CONTROLLER_T * fw_controller, SCIF_SAS_REMOTE_DEVICE_T * fw_device, SCIF_SAS_REQUEST_T * fw_request ) { SCI_IO_REQUEST_HANDLE_T dummy_handle; SCIF_LOG_TRACE(( sci_base_object_get_logger(fw_request), SCIF_LOG_OBJECT_IO_REQUEST, "scif_sas_io_request_continue(0x%x, 0x%x, 0x%x) enter\n", fw_controller, fw_device, fw_request )); //complete this io request in framework and core. scif_controller_complete_io(fw_controller, fw_device, fw_request); //construct next command in the sequence using the same memory. We pass //a dummy pointer to let the framework user keep the pointer to this IO //request untouched. scif_sas_io_request_construct( fw_device, (SCIF_SAS_IO_REQUEST_T*)fw_request, SCI_CONTROLLER_INVALID_IO_TAG, (void *)sci_object_get_association(fw_request), &dummy_handle, FALSE ); //start the new constructed IO. return (SCI_STATUS)scif_controller_start_io( (SCI_CONTROLLER_HANDLE_T) fw_controller, (SCI_REMOTE_DEVICE_HANDLE_T) fw_device, (SCI_IO_REQUEST_HANDLE_T) fw_request, SCI_CONTROLLER_INVALID_IO_TAG ); }