|
@@ -809,46 +809,10 @@ static void scic_sds_stp_remote_device_ready_idle_substate_resume_complete_handl
|
|
isci_remote_device_ready(scic->ihost, idev);
|
|
isci_remote_device_ready(scic->ihost, idev);
|
|
}
|
|
}
|
|
|
|
|
|
-static const struct scic_sds_remote_device_state_handler scic_sds_remote_device_state_handler_table[] = {
|
|
|
|
- [SCI_BASE_REMOTE_DEVICE_STATE_INITIAL] = {
|
|
|
|
- },
|
|
|
|
- [SCI_BASE_REMOTE_DEVICE_STATE_STOPPED] = {
|
|
|
|
- },
|
|
|
|
- [SCI_BASE_REMOTE_DEVICE_STATE_STARTING] = {
|
|
|
|
- },
|
|
|
|
- [SCI_BASE_REMOTE_DEVICE_STATE_READY] = {
|
|
|
|
- },
|
|
|
|
- [SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE] = {
|
|
|
|
- },
|
|
|
|
- [SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD] = {
|
|
|
|
- },
|
|
|
|
- [SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ] = {
|
|
|
|
- },
|
|
|
|
- [SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR] = {
|
|
|
|
- },
|
|
|
|
- [SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_AWAIT_RESET] = {
|
|
|
|
- },
|
|
|
|
- [SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE] = {
|
|
|
|
- },
|
|
|
|
- [SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_CMD] = {
|
|
|
|
- },
|
|
|
|
- [SCI_BASE_REMOTE_DEVICE_STATE_STOPPING] = {
|
|
|
|
- },
|
|
|
|
- [SCI_BASE_REMOTE_DEVICE_STATE_FAILED] = {
|
|
|
|
- },
|
|
|
|
- [SCI_BASE_REMOTE_DEVICE_STATE_RESETTING] = {
|
|
|
|
- },
|
|
|
|
- [SCI_BASE_REMOTE_DEVICE_STATE_FINAL] = {
|
|
|
|
- }
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
static void scic_sds_remote_device_initial_state_enter(void *object)
|
|
static void scic_sds_remote_device_initial_state_enter(void *object)
|
|
{
|
|
{
|
|
struct scic_sds_remote_device *sci_dev = object;
|
|
struct scic_sds_remote_device *sci_dev = object;
|
|
|
|
|
|
- SET_STATE_HANDLER(sci_dev, scic_sds_remote_device_state_handler_table,
|
|
|
|
- SCI_BASE_REMOTE_DEVICE_STATE_INITIAL);
|
|
|
|
-
|
|
|
|
/* Initial state is a transitional state to the stopped state */
|
|
/* Initial state is a transitional state to the stopped state */
|
|
sci_base_state_machine_change_state(&sci_dev->state_machine,
|
|
sci_base_state_machine_change_state(&sci_dev->state_machine,
|
|
SCI_BASE_REMOTE_DEVICE_STATE_STOPPED);
|
|
SCI_BASE_REMOTE_DEVICE_STATE_STOPPED);
|
|
@@ -953,9 +917,6 @@ static void scic_sds_remote_device_stopped_state_enter(void *object)
|
|
ihost = scic->ihost;
|
|
ihost = scic->ihost;
|
|
idev = sci_dev_to_idev(sci_dev);
|
|
idev = sci_dev_to_idev(sci_dev);
|
|
|
|
|
|
- SET_STATE_HANDLER(sci_dev, scic_sds_remote_device_state_handler_table,
|
|
|
|
- SCI_BASE_REMOTE_DEVICE_STATE_STOPPED);
|
|
|
|
-
|
|
|
|
/* If we are entering from the stopping state let the SCI User know that
|
|
/* If we are entering from the stopping state let the SCI User know that
|
|
* the stop operation has completed.
|
|
* the stop operation has completed.
|
|
*/
|
|
*/
|
|
@@ -973,9 +934,6 @@ static void scic_sds_remote_device_starting_state_enter(void *object)
|
|
struct isci_host *ihost = scic->ihost;
|
|
struct isci_host *ihost = scic->ihost;
|
|
struct isci_remote_device *idev = sci_dev_to_idev(sci_dev);
|
|
struct isci_remote_device *idev = sci_dev_to_idev(sci_dev);
|
|
|
|
|
|
- SET_STATE_HANDLER(sci_dev, scic_sds_remote_device_state_handler_table,
|
|
|
|
- SCI_BASE_REMOTE_DEVICE_STATE_STARTING);
|
|
|
|
-
|
|
|
|
isci_remote_device_not_ready(ihost, idev,
|
|
isci_remote_device_not_ready(ihost, idev,
|
|
SCIC_REMOTE_DEVICE_NOT_READY_START_REQUESTED);
|
|
SCIC_REMOTE_DEVICE_NOT_READY_START_REQUESTED);
|
|
}
|
|
}
|
|
@@ -986,10 +944,6 @@ static void scic_sds_remote_device_ready_state_enter(void *object)
|
|
struct scic_sds_controller *scic = sci_dev->owning_port->owning_controller;
|
|
struct scic_sds_controller *scic = sci_dev->owning_port->owning_controller;
|
|
struct domain_device *dev = sci_dev_to_domain(sci_dev);
|
|
struct domain_device *dev = sci_dev_to_domain(sci_dev);
|
|
|
|
|
|
- SET_STATE_HANDLER(sci_dev,
|
|
|
|
- scic_sds_remote_device_state_handler_table,
|
|
|
|
- SCI_BASE_REMOTE_DEVICE_STATE_READY);
|
|
|
|
-
|
|
|
|
scic->remote_device_sequence[sci_dev->rnc.remote_node_index]++;
|
|
scic->remote_device_sequence[sci_dev->rnc.remote_node_index]++;
|
|
|
|
|
|
if (dev->dev_type == SATA_DEV || (dev->tproto & SAS_PROTOCOL_SATA)) {
|
|
if (dev->dev_type == SATA_DEV || (dev->tproto & SAS_PROTOCOL_SATA)) {
|
|
@@ -1016,38 +970,10 @@ static void scic_sds_remote_device_ready_state_exit(void *object)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-static void scic_sds_remote_device_stopping_state_enter(void *object)
|
|
|
|
-{
|
|
|
|
- struct scic_sds_remote_device *sci_dev = object;
|
|
|
|
-
|
|
|
|
- SET_STATE_HANDLER(
|
|
|
|
- sci_dev,
|
|
|
|
- scic_sds_remote_device_state_handler_table,
|
|
|
|
- SCI_BASE_REMOTE_DEVICE_STATE_STOPPING
|
|
|
|
- );
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-static void scic_sds_remote_device_failed_state_enter(void *object)
|
|
|
|
-{
|
|
|
|
- struct scic_sds_remote_device *sci_dev = object;
|
|
|
|
-
|
|
|
|
- SET_STATE_HANDLER(
|
|
|
|
- sci_dev,
|
|
|
|
- scic_sds_remote_device_state_handler_table,
|
|
|
|
- SCI_BASE_REMOTE_DEVICE_STATE_FAILED
|
|
|
|
- );
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static void scic_sds_remote_device_resetting_state_enter(void *object)
|
|
static void scic_sds_remote_device_resetting_state_enter(void *object)
|
|
{
|
|
{
|
|
struct scic_sds_remote_device *sci_dev = object;
|
|
struct scic_sds_remote_device *sci_dev = object;
|
|
|
|
|
|
- SET_STATE_HANDLER(
|
|
|
|
- sci_dev,
|
|
|
|
- scic_sds_remote_device_state_handler_table,
|
|
|
|
- SCI_BASE_REMOTE_DEVICE_STATE_RESETTING
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
scic_sds_remote_node_context_suspend(
|
|
scic_sds_remote_node_context_suspend(
|
|
&sci_dev->rnc, SCI_SOFTWARE_SUSPENSION, NULL, NULL);
|
|
&sci_dev->rnc, SCI_SOFTWARE_SUSPENSION, NULL, NULL);
|
|
}
|
|
}
|
|
@@ -1059,24 +985,10 @@ static void scic_sds_remote_device_resetting_state_exit(void *object)
|
|
scic_sds_remote_node_context_resume(&sci_dev->rnc, NULL, NULL);
|
|
scic_sds_remote_node_context_resume(&sci_dev->rnc, NULL, NULL);
|
|
}
|
|
}
|
|
|
|
|
|
-static void scic_sds_remote_device_final_state_enter(void *object)
|
|
|
|
-{
|
|
|
|
- struct scic_sds_remote_device *sci_dev = object;
|
|
|
|
-
|
|
|
|
- SET_STATE_HANDLER(
|
|
|
|
- sci_dev,
|
|
|
|
- scic_sds_remote_device_state_handler_table,
|
|
|
|
- SCI_BASE_REMOTE_DEVICE_STATE_FINAL
|
|
|
|
- );
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static void scic_sds_stp_remote_device_ready_idle_substate_enter(void *object)
|
|
static void scic_sds_stp_remote_device_ready_idle_substate_enter(void *object)
|
|
{
|
|
{
|
|
struct scic_sds_remote_device *sci_dev = object;
|
|
struct scic_sds_remote_device *sci_dev = object;
|
|
|
|
|
|
- SET_STATE_HANDLER(sci_dev, scic_sds_remote_device_state_handler_table,
|
|
|
|
- SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE);
|
|
|
|
-
|
|
|
|
sci_dev->working_request = NULL;
|
|
sci_dev->working_request = NULL;
|
|
if (scic_sds_remote_node_context_is_ready(&sci_dev->rnc)) {
|
|
if (scic_sds_remote_node_context_is_ready(&sci_dev->rnc)) {
|
|
/*
|
|
/*
|
|
@@ -1097,51 +1009,26 @@ static void scic_sds_stp_remote_device_ready_cmd_substate_enter(void *object)
|
|
|
|
|
|
BUG_ON(sci_dev->working_request == NULL);
|
|
BUG_ON(sci_dev->working_request == NULL);
|
|
|
|
|
|
- SET_STATE_HANDLER(sci_dev, scic_sds_remote_device_state_handler_table,
|
|
|
|
- SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD);
|
|
|
|
-
|
|
|
|
isci_remote_device_not_ready(scic->ihost, sci_dev_to_idev(sci_dev),
|
|
isci_remote_device_not_ready(scic->ihost, sci_dev_to_idev(sci_dev),
|
|
SCIC_REMOTE_DEVICE_NOT_READY_SATA_REQUEST_STARTED);
|
|
SCIC_REMOTE_DEVICE_NOT_READY_SATA_REQUEST_STARTED);
|
|
}
|
|
}
|
|
|
|
|
|
-static void scic_sds_stp_remote_device_ready_ncq_substate_enter(void *object)
|
|
|
|
-{
|
|
|
|
- struct scic_sds_remote_device *sci_dev = object;
|
|
|
|
-
|
|
|
|
- SET_STATE_HANDLER(sci_dev, scic_sds_remote_device_state_handler_table,
|
|
|
|
- SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static void scic_sds_stp_remote_device_ready_ncq_error_substate_enter(void *object)
|
|
static void scic_sds_stp_remote_device_ready_ncq_error_substate_enter(void *object)
|
|
{
|
|
{
|
|
struct scic_sds_remote_device *sci_dev = object;
|
|
struct scic_sds_remote_device *sci_dev = object;
|
|
struct scic_sds_controller *scic = scic_sds_remote_device_get_controller(sci_dev);
|
|
struct scic_sds_controller *scic = scic_sds_remote_device_get_controller(sci_dev);
|
|
struct isci_remote_device *idev = sci_dev_to_idev(sci_dev);
|
|
struct isci_remote_device *idev = sci_dev_to_idev(sci_dev);
|
|
|
|
|
|
- SET_STATE_HANDLER(sci_dev, scic_sds_remote_device_state_handler_table,
|
|
|
|
- SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR);
|
|
|
|
-
|
|
|
|
if (sci_dev->not_ready_reason == SCIC_REMOTE_DEVICE_NOT_READY_SATA_SDB_ERROR_FIS_RECEIVED)
|
|
if (sci_dev->not_ready_reason == SCIC_REMOTE_DEVICE_NOT_READY_SATA_SDB_ERROR_FIS_RECEIVED)
|
|
isci_remote_device_not_ready(scic->ihost, idev,
|
|
isci_remote_device_not_ready(scic->ihost, idev,
|
|
sci_dev->not_ready_reason);
|
|
sci_dev->not_ready_reason);
|
|
}
|
|
}
|
|
|
|
|
|
-static void scic_sds_stp_remote_device_ready_await_reset_substate_enter(void *object)
|
|
|
|
-{
|
|
|
|
- struct scic_sds_remote_device *sci_dev = object;
|
|
|
|
-
|
|
|
|
- SET_STATE_HANDLER(sci_dev, scic_sds_remote_device_state_handler_table,
|
|
|
|
- SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_AWAIT_RESET);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static void scic_sds_smp_remote_device_ready_idle_substate_enter(void *object)
|
|
static void scic_sds_smp_remote_device_ready_idle_substate_enter(void *object)
|
|
{
|
|
{
|
|
struct scic_sds_remote_device *sci_dev = object;
|
|
struct scic_sds_remote_device *sci_dev = object;
|
|
struct scic_sds_controller *scic = scic_sds_remote_device_get_controller(sci_dev);
|
|
struct scic_sds_controller *scic = scic_sds_remote_device_get_controller(sci_dev);
|
|
|
|
|
|
- SET_STATE_HANDLER(sci_dev, scic_sds_remote_device_state_handler_table,
|
|
|
|
- SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE);
|
|
|
|
-
|
|
|
|
isci_remote_device_ready(scic->ihost, sci_dev_to_idev(sci_dev));
|
|
isci_remote_device_ready(scic->ihost, sci_dev_to_idev(sci_dev));
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1152,9 +1039,6 @@ static void scic_sds_smp_remote_device_ready_cmd_substate_enter(void *object)
|
|
|
|
|
|
BUG_ON(sci_dev->working_request == NULL);
|
|
BUG_ON(sci_dev->working_request == NULL);
|
|
|
|
|
|
- SET_STATE_HANDLER(sci_dev, scic_sds_remote_device_state_handler_table,
|
|
|
|
- SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_CMD);
|
|
|
|
-
|
|
|
|
isci_remote_device_not_ready(scic->ihost, sci_dev_to_idev(sci_dev),
|
|
isci_remote_device_not_ready(scic->ihost, sci_dev_to_idev(sci_dev),
|
|
SCIC_REMOTE_DEVICE_NOT_READY_SMP_REQUEST_STARTED);
|
|
SCIC_REMOTE_DEVICE_NOT_READY_SMP_REQUEST_STARTED);
|
|
}
|
|
}
|
|
@@ -1186,15 +1070,11 @@ static const struct sci_base_state scic_sds_remote_device_state_table[] = {
|
|
[SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD] = {
|
|
[SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD] = {
|
|
.enter_state = scic_sds_stp_remote_device_ready_cmd_substate_enter,
|
|
.enter_state = scic_sds_stp_remote_device_ready_cmd_substate_enter,
|
|
},
|
|
},
|
|
- [SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ] = {
|
|
|
|
- .enter_state = scic_sds_stp_remote_device_ready_ncq_substate_enter,
|
|
|
|
- },
|
|
|
|
|
|
+ [SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ] = { },
|
|
[SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR] = {
|
|
[SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR] = {
|
|
.enter_state = scic_sds_stp_remote_device_ready_ncq_error_substate_enter,
|
|
.enter_state = scic_sds_stp_remote_device_ready_ncq_error_substate_enter,
|
|
},
|
|
},
|
|
- [SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_AWAIT_RESET] = {
|
|
|
|
- .enter_state = scic_sds_stp_remote_device_ready_await_reset_substate_enter,
|
|
|
|
- },
|
|
|
|
|
|
+ [SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_AWAIT_RESET] = { },
|
|
[SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE] = {
|
|
[SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE] = {
|
|
.enter_state = scic_sds_smp_remote_device_ready_idle_substate_enter,
|
|
.enter_state = scic_sds_smp_remote_device_ready_idle_substate_enter,
|
|
},
|
|
},
|
|
@@ -1202,19 +1082,13 @@ static const struct sci_base_state scic_sds_remote_device_state_table[] = {
|
|
.enter_state = scic_sds_smp_remote_device_ready_cmd_substate_enter,
|
|
.enter_state = scic_sds_smp_remote_device_ready_cmd_substate_enter,
|
|
.exit_state = scic_sds_smp_remote_device_ready_cmd_substate_exit,
|
|
.exit_state = scic_sds_smp_remote_device_ready_cmd_substate_exit,
|
|
},
|
|
},
|
|
- [SCI_BASE_REMOTE_DEVICE_STATE_STOPPING] = {
|
|
|
|
- .enter_state = scic_sds_remote_device_stopping_state_enter,
|
|
|
|
- },
|
|
|
|
- [SCI_BASE_REMOTE_DEVICE_STATE_FAILED] = {
|
|
|
|
- .enter_state = scic_sds_remote_device_failed_state_enter,
|
|
|
|
- },
|
|
|
|
|
|
+ [SCI_BASE_REMOTE_DEVICE_STATE_STOPPING] = { },
|
|
|
|
+ [SCI_BASE_REMOTE_DEVICE_STATE_FAILED] = { },
|
|
[SCI_BASE_REMOTE_DEVICE_STATE_RESETTING] = {
|
|
[SCI_BASE_REMOTE_DEVICE_STATE_RESETTING] = {
|
|
.enter_state = scic_sds_remote_device_resetting_state_enter,
|
|
.enter_state = scic_sds_remote_device_resetting_state_enter,
|
|
.exit_state = scic_sds_remote_device_resetting_state_exit
|
|
.exit_state = scic_sds_remote_device_resetting_state_exit
|
|
},
|
|
},
|
|
- [SCI_BASE_REMOTE_DEVICE_STATE_FINAL] = {
|
|
|
|
- .enter_state = scic_sds_remote_device_final_state_enter,
|
|
|
|
- },
|
|
|
|
|
|
+ [SCI_BASE_REMOTE_DEVICE_STATE_FINAL] = { },
|
|
};
|
|
};
|
|
|
|
|
|
/**
|
|
/**
|