#include <sys/cdefs.h>
#include <dev/isci/scil/scic_remote_device.h>
#include <dev/isci/scil/scif_sas_logger.h>
#include <dev/isci/scil/scif_sas_remote_device.h>
#include <dev/isci/scil/scif_sas_domain.h>
#include <dev/isci/scil/scif_sas_task_request.h>
#include <dev/isci/scil/scif_sas_internal_io_request.h>
static
SCI_STATUS scif_sas_remote_device_stopped_start_handler(
SCI_BASE_REMOTE_DEVICE_T * remote_device
)
{
SCIF_SAS_REMOTE_DEVICE_T * fw_device = (SCIF_SAS_REMOTE_DEVICE_T *)
remote_device;
sci_base_state_machine_change_state(
&fw_device->parent.state_machine, SCI_BASE_REMOTE_DEVICE_STATE_STARTING
);
if (sci_base_state_machine_get_state(&fw_device->parent.state_machine)
== SCI_BASE_REMOTE_DEVICE_STATE_FAILED)
{
SCIF_LOG_WARNING((
sci_base_object_get_logger(fw_device),
SCIF_LOG_OBJECT_REMOTE_DEVICE | SCIF_LOG_OBJECT_DOMAIN_DISCOVERY,
"Domain:0x%x Device:0x%x Status:0x%x failed to start\n",
fw_device->domain, fw_device, fw_device->operation_status
));
}
return fw_device->operation_status;
}
static
SCI_STATUS scif_sas_remote_device_stopped_destruct_handler(
SCI_BASE_REMOTE_DEVICE_T * remote_device
)
{
SCI_STATUS status;
SCIF_SAS_REMOTE_DEVICE_T * fw_device = (SCIF_SAS_REMOTE_DEVICE_T *)
remote_device;
SMP_DISCOVER_RESPONSE_PROTOCOLS_T dev_protocols;
scic_remote_device_get_protocols(fw_device->core_object, &dev_protocols);
if(dev_protocols.u.bits.attached_smp_target)
scif_sas_smp_remote_device_removed(fw_device);
status = scic_remote_device_destruct(fw_device->core_object);
if (status == SCI_SUCCESS)
{
sci_base_state_machine_change_state(
&fw_device->parent.state_machine, SCI_BASE_REMOTE_DEVICE_STATE_FINAL
);
scif_sas_remote_device_deinitialize_state_logging(fw_device);
}
else
{
SCIF_LOG_ERROR((
sci_base_object_get_logger(fw_device),
SCIF_LOG_OBJECT_REMOTE_DEVICE | SCIF_LOG_OBJECT_REMOTE_DEVICE_CONFIG,
"Device:0x%x Status:0x%x failed to destruct core device\n",
fw_device
));
}
return status;
}
static
void scif_sas_remote_device_stopping_stop_complete_handler(
SCIF_SAS_REMOTE_DEVICE_T * fw_device,
SCI_STATUS completion_status
)
{
sci_base_state_machine_change_state(
&fw_device->parent.state_machine,
SCI_BASE_REMOTE_DEVICE_STATE_STOPPED
);
if (completion_status != SCI_SUCCESS)
{
SCIF_LOG_ERROR((
sci_base_object_get_logger(fw_device),
SCIF_LOG_OBJECT_REMOTE_DEVICE | SCIF_LOG_OBJECT_REMOTE_DEVICE_CONFIG,
"Device:0x%x Status:0x%x failed to stop core device\n",
fw_device, completion_status
));
scif_cb_controller_error(fw_device->domain->controller,
SCI_CONTROLLER_REMOTE_DEVICE_ERROR);
}
}
static
SCI_STATUS scif_sas_remote_device_stopping_complete_high_priority_io_handler(
SCI_BASE_REMOTE_DEVICE_T * remote_device,
SCI_BASE_REQUEST_T * io_request,
void * response_data,
SCI_IO_STATUS completion_status
)
{
SCIF_SAS_REMOTE_DEVICE_T * fw_device = (SCIF_SAS_REMOTE_DEVICE_T *)
remote_device;
SCIF_SAS_REQUEST_T * fw_request = (SCIF_SAS_REQUEST_T *) io_request;
SCIF_LOG_TRACE((
sci_base_object_get_logger(remote_device),
SCIF_LOG_OBJECT_REMOTE_DEVICE | SCIF_LOG_OBJECT_IO_REQUEST,
"scif_sas_remote_device_stopping_complete_high_priority_io_handler(0x%x,0x%x,0x%x) enter\n",
remote_device, io_request, response_data
));
fw_device->request_count--;
if (fw_request->is_internal == TRUE)
{
scif_sas_internal_io_request_complete(
fw_device->domain->controller,
(SCIF_SAS_INTERNAL_IO_REQUEST_T *) io_request,
SCI_SUCCESS
);
}
return SCI_SUCCESS;
}
static
SCI_STATUS scif_sas_remote_device_failed_stop_handler(
SCI_BASE_REMOTE_DEVICE_T * remote_device
)
{
SCIF_SAS_REMOTE_DEVICE_T * fw_device = (SCIF_SAS_REMOTE_DEVICE_T *)
remote_device;
SCIF_LOG_WARNING((
sci_base_object_get_logger(fw_device),
SCIF_LOG_OBJECT_REMOTE_DEVICE,
"RemoteDevice:0x%x stopping failed device\n",
fw_device
));
sci_base_state_machine_change_state(
&fw_device->parent.state_machine, SCI_BASE_REMOTE_DEVICE_STATE_STOPPING
);
return SCI_FAILURE;
}
SCI_STATUS scif_sas_remote_device_default_start_handler(
SCI_BASE_REMOTE_DEVICE_T * remote_device
)
{
SCIF_LOG_WARNING((
sci_base_object_get_logger((SCIF_SAS_REMOTE_DEVICE_T *)remote_device),
SCIF_LOG_OBJECT_REMOTE_DEVICE | SCIF_LOG_OBJECT_REMOTE_DEVICE_CONFIG,
"RemoteDevice:0x%x State:0x%x invalid state to start\n",
remote_device,
sci_base_state_machine_get_state(
&((SCIF_SAS_REMOTE_DEVICE_T *)remote_device)->parent.state_machine)
));
return SCI_FAILURE_INVALID_STATE;
}
SCI_STATUS scif_sas_remote_device_default_stop_handler(
SCI_BASE_REMOTE_DEVICE_T * remote_device
)
{
SCIF_LOG_WARNING((
sci_base_object_get_logger((SCIF_SAS_REMOTE_DEVICE_T *)remote_device),
SCIF_LOG_OBJECT_REMOTE_DEVICE,
"RemoteDevice:0x%x State:0x%x invalid state to stop\n",
remote_device,
sci_base_state_machine_get_state(
&((SCIF_SAS_REMOTE_DEVICE_T *)remote_device)->parent.state_machine)
));
return SCI_FAILURE_INVALID_STATE;
}
static
SCI_STATUS scif_sas_remote_device_default_fail_handler(
SCI_BASE_REMOTE_DEVICE_T * remote_device
)
{
SCIF_LOG_WARNING((
sci_base_object_get_logger((SCIF_SAS_REMOTE_DEVICE_T *)remote_device),
SCIF_LOG_OBJECT_REMOTE_DEVICE,
"RemoteDevice:0x%x State:0x%x invalid state to fail device\n",
remote_device,
sci_base_state_machine_get_state(
&((SCIF_SAS_REMOTE_DEVICE_T *)remote_device)->parent.state_machine)
));
return SCI_FAILURE_INVALID_STATE;
}
SCI_STATUS scif_sas_remote_device_default_destruct_handler(
SCI_BASE_REMOTE_DEVICE_T * remote_device
)
{
SCIF_LOG_WARNING((
sci_base_object_get_logger((SCIF_SAS_REMOTE_DEVICE_T *)remote_device),
SCIF_LOG_OBJECT_REMOTE_DEVICE,
"RemoteDevice:0x%x State:0x%x invalid state to destruct.\n",
remote_device,
sci_base_state_machine_get_state(
&((SCIF_SAS_REMOTE_DEVICE_T *)remote_device)->parent.state_machine)
));
return SCI_FAILURE_INVALID_STATE;
}
SCI_STATUS scif_sas_remote_device_default_reset_handler(
SCI_BASE_REMOTE_DEVICE_T * remote_device
)
{
SCIF_LOG_WARNING((
sci_base_object_get_logger((SCIF_SAS_REMOTE_DEVICE_T *)remote_device),
SCIF_LOG_OBJECT_REMOTE_DEVICE,
"RemoteDevice:0x%x State:0x%x invalid state to reset.\n",
remote_device,
sci_base_state_machine_get_state(
&((SCIF_SAS_REMOTE_DEVICE_T *)remote_device)->parent.state_machine)
));
return SCI_FAILURE_INVALID_STATE;
}
SCI_STATUS scif_sas_remote_device_default_reset_complete_handler(
SCI_BASE_REMOTE_DEVICE_T * remote_device
)
{
SCIF_LOG_WARNING((
sci_base_object_get_logger((SCIF_SAS_REMOTE_DEVICE_T *)remote_device),
SCIF_LOG_OBJECT_REMOTE_DEVICE,
"RemoteDevice:0x%x State:0x%x invalid state to complete reset.\n",
remote_device,
sci_base_state_machine_get_state(
&((SCIF_SAS_REMOTE_DEVICE_T *)remote_device)->parent.state_machine)
));
return SCI_FAILURE_INVALID_STATE;
}
SCI_STATUS scif_sas_remote_device_default_start_io_handler(
SCI_BASE_REMOTE_DEVICE_T * remote_device,
SCI_BASE_REQUEST_T * io_request
)
{
SCIF_LOG_WARNING((
sci_base_object_get_logger((SCIF_SAS_REMOTE_DEVICE_T *)remote_device),
SCIF_LOG_OBJECT_REMOTE_DEVICE,
"RemoteDevice:0x%x State:0x%x invalid state to start IO.\n",
remote_device,
sci_base_state_machine_get_state(
&((SCIF_SAS_REMOTE_DEVICE_T *)remote_device)->parent.state_machine)
));
return SCI_FAILURE_INVALID_STATE;
}
SCI_STATUS scif_sas_remote_device_default_complete_io_handler(
SCI_BASE_REMOTE_DEVICE_T * remote_device,
SCI_BASE_REQUEST_T * io_request
)
{
SCIF_LOG_WARNING((
sci_base_object_get_logger((SCIF_SAS_REMOTE_DEVICE_T *)remote_device),
SCIF_LOG_OBJECT_REMOTE_DEVICE,
"RemoteDevice:0x%x State:0x%x invalid state to complete IO\n",
remote_device,
sci_base_state_machine_get_state(
&((SCIF_SAS_REMOTE_DEVICE_T *)remote_device)->parent.state_machine)
));
return SCI_FAILURE_INVALID_STATE;
}
SCI_STATUS scif_sas_remote_device_default_complete_high_priority_io_handler(
SCI_BASE_REMOTE_DEVICE_T * remote_device,
SCI_BASE_REQUEST_T * io_request,
void * response_data,
SCI_IO_STATUS completion_status
)
{
SCIF_LOG_WARNING((
sci_base_object_get_logger((SCIF_SAS_REMOTE_DEVICE_T *)remote_device),
SCIF_LOG_OBJECT_REMOTE_DEVICE,
"RemoteDevice:0x%x State:0x%x invalid state to complete high priority IO\n",
remote_device,
sci_base_state_machine_get_state(
&((SCIF_SAS_REMOTE_DEVICE_T *)remote_device)->parent.state_machine)
));
return SCI_FAILURE_INVALID_STATE;
}
SCI_STATUS scif_sas_remote_device_default_continue_io_handler(
SCI_BASE_REMOTE_DEVICE_T * remote_device,
SCI_BASE_REQUEST_T * io_request
)
{
SCIF_LOG_WARNING((
sci_base_object_get_logger((SCIF_SAS_REMOTE_DEVICE_T *)remote_device),
SCIF_LOG_OBJECT_REMOTE_DEVICE,
"RemoteDevice:0x%x State:0x%x invalid state to continue IO\n",
remote_device,
sci_base_state_machine_get_state(
&((SCIF_SAS_REMOTE_DEVICE_T *)remote_device)->parent.state_machine)
));
return SCI_FAILURE_INVALID_STATE;
}
SCI_STATUS scif_sas_remote_device_default_start_task_handler(
SCI_BASE_REMOTE_DEVICE_T * remote_device,
SCI_BASE_REQUEST_T * task_request
)
{
SCIF_LOG_WARNING((
sci_base_object_get_logger((SCIF_SAS_REMOTE_DEVICE_T *)remote_device),
SCIF_LOG_OBJECT_REMOTE_DEVICE | SCIF_LOG_OBJECT_TASK_MANAGEMENT,
"RemoteDevice:0x%x State:0x%x invalid state to start task\n",
remote_device,
sci_base_state_machine_get_state(
&((SCIF_SAS_REMOTE_DEVICE_T *)remote_device)->parent.state_machine)
));
return SCI_FAILURE_INVALID_STATE;
}
SCI_STATUS scif_sas_remote_device_default_complete_task_handler(
SCI_BASE_REMOTE_DEVICE_T * remote_device,
SCI_BASE_REQUEST_T * task_request
)
{
SCIF_LOG_WARNING((
sci_base_object_get_logger((SCIF_SAS_REMOTE_DEVICE_T *)remote_device),
SCIF_LOG_OBJECT_REMOTE_DEVICE | SCIF_LOG_OBJECT_TASK_MANAGEMENT,
"RemoteDevice:0x%x State:0x%x invalid state to complete task\n",
remote_device,
sci_base_state_machine_get_state(
&((SCIF_SAS_REMOTE_DEVICE_T *)remote_device)->parent.state_machine)
));
return SCI_FAILURE_INVALID_STATE;
}
void scif_sas_remote_device_default_start_complete_handler(
SCIF_SAS_REMOTE_DEVICE_T * fw_device,
SCI_STATUS completion_status
)
{
SCIF_LOG_WARNING((
sci_base_object_get_logger(fw_device),
SCIF_LOG_OBJECT_REMOTE_DEVICE,
"RemoteDevice:0x%x State:0x%x invalid state to start complete\n",
fw_device,
sci_base_state_machine_get_state(&fw_device->parent.state_machine)
));
}
void scif_sas_remote_device_default_stop_complete_handler(
SCIF_SAS_REMOTE_DEVICE_T * fw_device,
SCI_STATUS completion_status
)
{
SCIF_LOG_WARNING((
sci_base_object_get_logger(fw_device),
SCIF_LOG_OBJECT_REMOTE_DEVICE,
"RemoteDevice:0x%x State:0x%x invalid state to stop complete\n",
fw_device,
sci_base_state_machine_get_state(&fw_device->parent.state_machine)
));
}
void scif_sas_remote_device_default_ready_handler(
SCIF_SAS_REMOTE_DEVICE_T * fw_device
)
{
SCIF_LOG_WARNING((
sci_base_object_get_logger(fw_device),
SCIF_LOG_OBJECT_REMOTE_DEVICE,
"RemoteDevice:0x%x State:0x%x invalid state to handle ready\n",
fw_device,
sci_base_state_machine_get_state(&fw_device->parent.state_machine)
));
}
void scif_sas_remote_device_default_not_ready_handler(
SCIF_SAS_REMOTE_DEVICE_T * fw_device,
U32 reason_code
)
{
SCIF_LOG_WARNING((
sci_base_object_get_logger(fw_device),
SCIF_LOG_OBJECT_REMOTE_DEVICE,
"RemoteDevice:0x%x State:0x%x invalid state to handle not ready\n",
fw_device,
sci_base_state_machine_get_state(&fw_device->parent.state_machine)
));
}
#if !defined(DISABLE_WIDE_PORTED_TARGETS)
static
SCI_STATUS scif_sas_remote_device_updating_port_width_state_complete_io_handler(
SCI_BASE_REMOTE_DEVICE_T * remote_device,
SCI_BASE_REQUEST_T * io_request
)
{
SCIF_SAS_REMOTE_DEVICE_T * fw_device = (SCIF_SAS_REMOTE_DEVICE_T*)
remote_device;
fw_device->request_count--;
if (fw_device->request_count == 0 )
{
if (fw_device->destination_state == SCIF_SAS_REMOTE_DEVICE_DESTINATION_STATE_STOPPING)
{
sci_base_state_machine_change_state(
&fw_device->parent.state_machine,
SCI_BASE_REMOTE_DEVICE_STATE_STOPPING
);
}
else
{
scic_remote_device_stop(
fw_device->core_object, SCIF_SAS_REMOTE_DEVICE_CORE_OP_TIMEOUT);
}
}
return SCI_SUCCESS;
}
static
void scif_sas_remote_device_updating_port_width_state_start_complete_handler(
SCIF_SAS_REMOTE_DEVICE_T * fw_device,
SCI_STATUS completion_status
)
{
SCIF_LOG_INFO((
sci_base_object_get_logger(fw_device),
SCIF_LOG_OBJECT_REMOTE_DEVICE,
"RemoteDevice:0x%x updating port width state start complete handler\n",
fw_device,
sci_base_state_machine_get_state(&fw_device->parent.state_machine)
));
if ( fw_device->destination_state
== SCIF_SAS_REMOTE_DEVICE_DESTINATION_STATE_STOPPING )
{
sci_base_state_machine_change_state(
&fw_device->parent.state_machine,
SCI_BASE_REMOTE_DEVICE_STATE_STOPPING
);
}
else if ( scic_remote_device_get_port_width(fw_device->core_object)
!= fw_device->device_port_width
&& fw_device->device_port_width != 0)
{
scic_remote_device_stop(
fw_device->core_object,
SCIF_SAS_REMOTE_DEVICE_CORE_OP_TIMEOUT
);
}
else
{
sci_base_state_machine_change_state(
&fw_device->parent.state_machine,
SCI_BASE_REMOTE_DEVICE_STATE_READY
);
}
}
static
void scif_sas_remote_device_updating_port_width_state_stop_complete_handler(
SCIF_SAS_REMOTE_DEVICE_T * fw_device,
SCI_STATUS completion_status
)
{
SCIF_LOG_INFO((
sci_base_object_get_logger(fw_device),
SCIF_LOG_OBJECT_REMOTE_DEVICE,
"RemoteDevice:0x%x updating port width state stop complete handler\n",
fw_device,
sci_base_state_machine_get_state(&fw_device->parent.state_machine)
));
if ( fw_device->destination_state
== SCIF_SAS_REMOTE_DEVICE_DESTINATION_STATE_STOPPING )
{
fw_device->domain->device_start_count--;
sci_base_state_machine_change_state(
&fw_device->parent.state_machine,
SCI_BASE_REMOTE_DEVICE_STATE_STOPPED
);
}
else
{
scic_remote_device_set_port_width(
fw_device->core_object,
fw_device->device_port_width
);
scic_remote_device_start(
fw_device->core_object, SCIF_SAS_REMOTE_DEVICE_CORE_OP_TIMEOUT);
}
}
static
SCI_STATUS scif_sas_remote_device_updating_port_width_state_stop_handler(
SCI_BASE_REMOTE_DEVICE_T * remote_device
)
{
SCIF_SAS_REMOTE_DEVICE_T * fw_device =
(SCIF_SAS_REMOTE_DEVICE_T *)remote_device;
SCIF_LOG_INFO((
sci_base_object_get_logger(fw_device),
SCIF_LOG_OBJECT_REMOTE_DEVICE,
"RemoteDevice:0x%x updating port width state stop handler\n",
fw_device,
sci_base_state_machine_get_state(&fw_device->parent.state_machine)
));
fw_device->destination_state =
SCIF_SAS_REMOTE_DEVICE_DESTINATION_STATE_STOPPING;
return SCI_SUCCESS;
}
#endif
#define scif_sas_remote_device_stopping_complete_io_handler \
scif_sas_remote_device_ready_operational_complete_io_handler
#define scif_sas_remote_device_stopping_complete_task_handler \
scif_sas_remote_device_ready_operational_complete_task_handler
SCIF_SAS_REMOTE_DEVICE_STATE_HANDLER_T
scif_sas_remote_device_state_handler_table[SCI_BASE_REMOTE_DEVICE_MAX_STATES] =
{
{
{
scif_sas_remote_device_default_start_handler,
scif_sas_remote_device_default_stop_handler,
scif_sas_remote_device_default_fail_handler,
scif_sas_remote_device_default_destruct_handler,
scif_sas_remote_device_default_reset_handler,
scif_sas_remote_device_default_reset_complete_handler,
scif_sas_remote_device_default_start_io_handler,
scif_sas_remote_device_default_complete_io_handler,
scif_sas_remote_device_default_continue_io_handler,
scif_sas_remote_device_default_start_task_handler,
scif_sas_remote_device_default_complete_task_handler
},
scif_sas_remote_device_default_start_complete_handler,
scif_sas_remote_device_default_stop_complete_handler,
scif_sas_remote_device_default_ready_handler,
scif_sas_remote_device_default_not_ready_handler,
scif_sas_remote_device_default_start_io_handler,
scif_sas_remote_device_default_complete_high_priority_io_handler
},
{
{
scif_sas_remote_device_stopped_start_handler,
scif_sas_remote_device_default_stop_handler,
scif_sas_remote_device_default_fail_handler,
scif_sas_remote_device_stopped_destruct_handler,
scif_sas_remote_device_default_reset_handler,
scif_sas_remote_device_default_reset_complete_handler,
scif_sas_remote_device_default_start_io_handler,
scif_sas_remote_device_default_complete_io_handler,
scif_sas_remote_device_default_continue_io_handler,
scif_sas_remote_device_default_start_task_handler,
scif_sas_remote_device_default_complete_task_handler
},
scif_sas_remote_device_default_start_complete_handler,
scif_sas_remote_device_default_stop_complete_handler,
scif_sas_remote_device_default_ready_handler,
scif_sas_remote_device_default_not_ready_handler,
scif_sas_remote_device_default_start_io_handler,
scif_sas_remote_device_default_complete_high_priority_io_handler
},
{
{
scif_sas_remote_device_default_start_handler,
scif_sas_remote_device_default_stop_handler,
scif_sas_remote_device_default_fail_handler,
scif_sas_remote_device_default_destruct_handler,
scif_sas_remote_device_default_reset_handler,
scif_sas_remote_device_default_reset_complete_handler,
scif_sas_remote_device_default_start_io_handler,
scif_sas_remote_device_default_complete_io_handler,
scif_sas_remote_device_default_continue_io_handler,
scif_sas_remote_device_default_start_task_handler,
scif_sas_remote_device_default_complete_task_handler
},
scif_sas_remote_device_default_start_complete_handler,
scif_sas_remote_device_default_stop_complete_handler,
scif_sas_remote_device_default_ready_handler,
scif_sas_remote_device_default_not_ready_handler,
scif_sas_remote_device_default_start_io_handler,
scif_sas_remote_device_default_complete_high_priority_io_handler
},
{
{
scif_sas_remote_device_default_start_handler,
scif_sas_remote_device_default_stop_handler,
scif_sas_remote_device_default_fail_handler,
scif_sas_remote_device_default_destruct_handler,
scif_sas_remote_device_default_reset_handler,
scif_sas_remote_device_default_reset_complete_handler,
scif_sas_remote_device_default_start_io_handler,
scif_sas_remote_device_default_complete_io_handler,
scif_sas_remote_device_default_continue_io_handler,
scif_sas_remote_device_default_start_task_handler,
scif_sas_remote_device_default_complete_task_handler
},
scif_sas_remote_device_default_start_complete_handler,
scif_sas_remote_device_default_stop_complete_handler,
scif_sas_remote_device_default_ready_handler,
scif_sas_remote_device_default_not_ready_handler,
scif_sas_remote_device_default_start_io_handler,
scif_sas_remote_device_default_complete_high_priority_io_handler
},
{
{
scif_sas_remote_device_default_start_handler,
scif_sas_remote_device_default_stop_handler,
scif_sas_remote_device_default_fail_handler,
scif_sas_remote_device_default_destruct_handler,
scif_sas_remote_device_default_reset_handler,
scif_sas_remote_device_default_reset_complete_handler,
scif_sas_remote_device_default_start_io_handler,
scif_sas_remote_device_stopping_complete_io_handler,
scif_sas_remote_device_default_continue_io_handler,
scif_sas_remote_device_default_start_task_handler,
scif_sas_remote_device_stopping_complete_task_handler
},
scif_sas_remote_device_default_start_complete_handler,
scif_sas_remote_device_stopping_stop_complete_handler,
scif_sas_remote_device_default_ready_handler,
scif_sas_remote_device_default_not_ready_handler,
scif_sas_remote_device_default_start_io_handler,
scif_sas_remote_device_stopping_complete_high_priority_io_handler
},
{
{
scif_sas_remote_device_default_start_handler,
scif_sas_remote_device_failed_stop_handler,
scif_sas_remote_device_default_fail_handler,
scif_sas_remote_device_default_destruct_handler,
scif_sas_remote_device_default_reset_handler,
scif_sas_remote_device_default_reset_complete_handler,
scif_sas_remote_device_default_start_io_handler,
scif_sas_remote_device_default_complete_io_handler,
scif_sas_remote_device_default_continue_io_handler,
scif_sas_remote_device_default_start_task_handler,
scif_sas_remote_device_default_complete_task_handler
},
scif_sas_remote_device_default_start_complete_handler,
scif_sas_remote_device_default_stop_complete_handler,
scif_sas_remote_device_default_ready_handler,
scif_sas_remote_device_default_not_ready_handler,
scif_sas_remote_device_default_start_io_handler,
scif_sas_remote_device_default_complete_high_priority_io_handler
},
{
{
scif_sas_remote_device_default_start_handler,
scif_sas_remote_device_default_stop_handler,
scif_sas_remote_device_default_fail_handler,
scif_sas_remote_device_default_destruct_handler,
scif_sas_remote_device_default_reset_handler,
scif_sas_remote_device_default_reset_complete_handler,
scif_sas_remote_device_default_start_io_handler,
scif_sas_remote_device_default_complete_io_handler,
scif_sas_remote_device_default_continue_io_handler,
scif_sas_remote_device_default_start_task_handler,
scif_sas_remote_device_default_complete_task_handler
},
scif_sas_remote_device_default_start_complete_handler,
scif_sas_remote_device_default_stop_complete_handler,
scif_sas_remote_device_default_ready_handler,
scif_sas_remote_device_default_not_ready_handler,
scif_sas_remote_device_default_start_io_handler,
scif_sas_remote_device_default_complete_high_priority_io_handler
},
#if !defined(DISABLE_WIDE_PORTED_TARGETS)
{
{
scif_sas_remote_device_default_start_handler,
scif_sas_remote_device_updating_port_width_state_stop_handler,
scif_sas_remote_device_default_fail_handler,
scif_sas_remote_device_default_destruct_handler,
scif_sas_remote_device_default_reset_handler,
scif_sas_remote_device_default_reset_complete_handler,
scif_sas_remote_device_default_start_io_handler,
scif_sas_remote_device_updating_port_width_state_complete_io_handler,
scif_sas_remote_device_default_continue_io_handler,
scif_sas_remote_device_default_start_task_handler,
scif_sas_remote_device_default_complete_task_handler
},
scif_sas_remote_device_updating_port_width_state_start_complete_handler,
scif_sas_remote_device_updating_port_width_state_stop_complete_handler,
scif_sas_remote_device_default_ready_handler,
scif_sas_remote_device_default_not_ready_handler,
scif_sas_remote_device_default_start_io_handler,
scif_sas_remote_device_default_complete_high_priority_io_handler
},
#endif
{
{
scif_sas_remote_device_default_start_handler,
scif_sas_remote_device_default_stop_handler,
scif_sas_remote_device_default_fail_handler,
scif_sas_remote_device_default_destruct_handler,
scif_sas_remote_device_default_reset_handler,
scif_sas_remote_device_default_reset_complete_handler,
scif_sas_remote_device_default_start_io_handler,
scif_sas_remote_device_default_complete_io_handler,
scif_sas_remote_device_default_continue_io_handler,
scif_sas_remote_device_default_start_task_handler,
scif_sas_remote_device_default_complete_task_handler
},
scif_sas_remote_device_default_start_complete_handler,
scif_sas_remote_device_default_stop_complete_handler,
scif_sas_remote_device_default_ready_handler,
scif_sas_remote_device_default_not_ready_handler,
scif_sas_remote_device_default_start_io_handler,
scif_sas_remote_device_default_complete_high_priority_io_handler
}
};