diff options
author | Dan Williams <dan.j.williams@intel.com> | 2011-04-19 16:48:49 -0400 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2011-07-03 07:00:37 -0400 |
commit | 7ab92c9ed22b49a50d9a10bbfdf4ee8ffe62c324 (patch) | |
tree | 9dc0dbfeede0e24250fd0d596ff84ce09c14d283 /drivers/scsi/isci | |
parent | 31e824ed0d8c84c5232405167b2338ffc071ae8a (diff) |
isci: make a remote_node_context a proper member of a remote_device
A rnc object has the same lifetime as its associated remote_device. It might
get re-initialized, but a remote device always has an rnc member. Preparation
for unifying scic_sds_remote_device and isci_remote_device
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'drivers/scsi/isci')
-rw-r--r-- | drivers/scsi/isci/core/scic_sds_remote_device.c | 41 | ||||
-rw-r--r-- | drivers/scsi/isci/core/scic_sds_remote_device.h | 6 | ||||
-rw-r--r-- | drivers/scsi/isci/core/scic_sds_request.c | 2 | ||||
-rw-r--r-- | drivers/scsi/isci/core/scic_sds_smp_remote_device.c | 3 | ||||
-rw-r--r-- | drivers/scsi/isci/core/scic_sds_smp_request.c | 9 | ||||
-rw-r--r-- | drivers/scsi/isci/core/scic_sds_stp_remote_device.c | 39 |
6 files changed, 45 insertions, 55 deletions
diff --git a/drivers/scsi/isci/core/scic_sds_remote_device.c b/drivers/scsi/isci/core/scic_sds_remote_device.c index fa7828d4d975..04295274b71a 100644 --- a/drivers/scsi/isci/core/scic_sds_remote_device.c +++ b/drivers/scsi/isci/core/scic_sds_remote_device.c | |||
@@ -83,8 +83,7 @@ | |||
83 | 83 | ||
84 | u32 scic_remote_device_get_object_size(void) | 84 | u32 scic_remote_device_get_object_size(void) |
85 | { | 85 | { |
86 | return sizeof(struct scic_sds_remote_device) | 86 | return sizeof (struct scic_sds_remote_device); |
87 | + sizeof(struct scic_sds_remote_node_context); | ||
88 | } | 87 | } |
89 | 88 | ||
90 | enum sci_status scic_remote_device_da_construct( | 89 | enum sci_status scic_remote_device_da_construct( |
@@ -111,7 +110,7 @@ enum sci_status scic_remote_device_da_construct( | |||
111 | &remote_node_index); | 110 | &remote_node_index); |
112 | 111 | ||
113 | if (status == SCI_SUCCESS) { | 112 | if (status == SCI_SUCCESS) { |
114 | sci_dev->rnc->remote_node_index = remote_node_index; | 113 | sci_dev->rnc.remote_node_index = remote_node_index; |
115 | 114 | ||
116 | scic_sds_port_get_attached_sas_address( | 115 | scic_sds_port_get_attached_sas_address( |
117 | sci_dev->owning_port, &sci_dev->device_address); | 116 | sci_dev->owning_port, &sci_dev->device_address); |
@@ -176,7 +175,7 @@ enum sci_status scic_remote_device_ea_construct( | |||
176 | sci_dev, discover_response); | 175 | sci_dev, discover_response); |
177 | 176 | ||
178 | status = scic_sds_controller_allocate_remote_node_context( | 177 | status = scic_sds_controller_allocate_remote_node_context( |
179 | scic, sci_dev, &sci_dev->rnc->remote_node_index); | 178 | scic, sci_dev, &sci_dev->rnc.remote_node_index); |
180 | 179 | ||
181 | if (status == SCI_SUCCESS) { | 180 | if (status == SCI_SUCCESS) { |
182 | if (sci_dev->target_protocols.u.bits.attached_ssp_target) { | 181 | if (sci_dev->target_protocols.u.bits.attached_ssp_target) { |
@@ -694,7 +693,7 @@ static enum sci_status scic_sds_remote_device_core_event_handler( | |||
694 | case SCU_EVENT_TYPE_RNC_OPS_MISC: | 693 | case SCU_EVENT_TYPE_RNC_OPS_MISC: |
695 | case SCU_EVENT_TYPE_RNC_SUSPEND_TX: | 694 | case SCU_EVENT_TYPE_RNC_SUSPEND_TX: |
696 | case SCU_EVENT_TYPE_RNC_SUSPEND_TX_RX: | 695 | case SCU_EVENT_TYPE_RNC_SUSPEND_TX_RX: |
697 | status = scic_sds_remote_node_context_event_handler(sci_dev->rnc, event_code); | 696 | status = scic_sds_remote_node_context_event_handler(&sci_dev->rnc, event_code); |
698 | break; | 697 | break; |
699 | case SCU_EVENT_TYPE_PTX_SCHEDULE_EVENT: | 698 | case SCU_EVENT_TYPE_PTX_SCHEDULE_EVENT: |
700 | 699 | ||
@@ -702,7 +701,7 @@ static enum sci_status scic_sds_remote_device_core_event_handler( | |||
702 | status = SCI_SUCCESS; | 701 | status = SCI_SUCCESS; |
703 | 702 | ||
704 | /* Suspend the associated RNC */ | 703 | /* Suspend the associated RNC */ |
705 | scic_sds_remote_node_context_suspend(sci_dev->rnc, | 704 | scic_sds_remote_node_context_suspend(&sci_dev->rnc, |
706 | SCI_SOFTWARE_SUSPENSION, | 705 | SCI_SOFTWARE_SUSPENSION, |
707 | NULL, NULL); | 706 | NULL, NULL); |
708 | 707 | ||
@@ -889,7 +888,7 @@ static enum sci_status scic_sds_remote_device_stopped_state_start_handler( | |||
889 | { | 888 | { |
890 | enum sci_status status; | 889 | enum sci_status status; |
891 | 890 | ||
892 | status = scic_sds_remote_node_context_resume(sci_dev->rnc, | 891 | status = scic_sds_remote_node_context_resume(&sci_dev->rnc, |
893 | scic_sds_remote_device_resume_complete_handler, sci_dev); | 892 | scic_sds_remote_device_resume_complete_handler, sci_dev); |
894 | 893 | ||
895 | if (status == SCI_SUCCESS) | 894 | if (status == SCI_SUCCESS) |
@@ -923,8 +922,8 @@ static enum sci_status scic_sds_remote_device_stopped_state_destruct_handler( | |||
923 | 922 | ||
924 | scic = scic_sds_remote_device_get_controller(sci_dev); | 923 | scic = scic_sds_remote_device_get_controller(sci_dev); |
925 | scic_sds_controller_free_remote_node_context(scic, sci_dev, | 924 | scic_sds_controller_free_remote_node_context(scic, sci_dev, |
926 | sci_dev->rnc->remote_node_index); | 925 | sci_dev->rnc.remote_node_index); |
927 | sci_dev->rnc->remote_node_index = SCIC_SDS_REMOTE_NODE_CONTEXT_INVALID_INDEX; | 926 | sci_dev->rnc.remote_node_index = SCIC_SDS_REMOTE_NODE_CONTEXT_INVALID_INDEX; |
928 | 927 | ||
929 | sci_base_state_machine_change_state(&sci_dev->state_machine, | 928 | sci_base_state_machine_change_state(&sci_dev->state_machine, |
930 | SCI_BASE_REMOTE_DEVICE_STATE_FINAL); | 929 | SCI_BASE_REMOTE_DEVICE_STATE_FINAL); |
@@ -948,7 +947,7 @@ static enum sci_status scic_sds_remote_device_starting_state_stop_handler( | |||
948 | /* | 947 | /* |
949 | * Destroy the remote node context | 948 | * Destroy the remote node context |
950 | */ | 949 | */ |
951 | scic_sds_remote_node_context_destruct(sci_dev->rnc, | 950 | scic_sds_remote_node_context_destruct(&sci_dev->rnc, |
952 | scic_sds_cb_remote_device_rnc_destruct_complete, sci_dev); | 951 | scic_sds_cb_remote_device_rnc_destruct_complete, sci_dev); |
953 | 952 | ||
954 | /* | 953 | /* |
@@ -971,7 +970,7 @@ enum sci_status scic_sds_remote_device_ready_state_stop_handler( | |||
971 | SCI_BASE_REMOTE_DEVICE_STATE_STOPPING); | 970 | SCI_BASE_REMOTE_DEVICE_STATE_STOPPING); |
972 | 971 | ||
973 | if (sci_dev->started_request_count == 0) { | 972 | if (sci_dev->started_request_count == 0) { |
974 | scic_sds_remote_node_context_destruct(sci_dev->rnc, | 973 | scic_sds_remote_node_context_destruct(&sci_dev->rnc, |
975 | scic_sds_cb_remote_device_rnc_destruct_complete, | 974 | scic_sds_cb_remote_device_rnc_destruct_complete, |
976 | sci_dev); | 975 | sci_dev); |
977 | } else | 976 | } else |
@@ -1016,8 +1015,8 @@ static enum sci_status scic_sds_remote_device_ready_state_start_task_handler( | |||
1016 | scic_sds_remote_device_get_port(sci_dev), sci_dev, request); | 1015 | scic_sds_remote_device_get_port(sci_dev), sci_dev, request); |
1017 | 1016 | ||
1018 | if (result == SCI_SUCCESS) { | 1017 | if (result == SCI_SUCCESS) { |
1019 | result = scic_sds_remote_node_context_start_task( | 1018 | result = scic_sds_remote_node_context_start_task(&sci_dev->rnc, |
1020 | sci_dev->rnc, request); | 1019 | request); |
1021 | if (result == SCI_SUCCESS) | 1020 | if (result == SCI_SUCCESS) |
1022 | result = scic_sds_request_start(request); | 1021 | result = scic_sds_request_start(request); |
1023 | 1022 | ||
@@ -1046,8 +1045,7 @@ static enum sci_status scic_sds_remote_device_ready_state_start_io_handler( | |||
1046 | scic_sds_remote_device_get_port(sci_dev), sci_dev, request); | 1045 | scic_sds_remote_device_get_port(sci_dev), sci_dev, request); |
1047 | 1046 | ||
1048 | if (result == SCI_SUCCESS) { | 1047 | if (result == SCI_SUCCESS) { |
1049 | result = scic_sds_remote_node_context_start_io( | 1048 | result = scic_sds_remote_node_context_start_io(&sci_dev->rnc, request); |
1050 | sci_dev->rnc, request); | ||
1051 | if (result == SCI_SUCCESS) | 1049 | if (result == SCI_SUCCESS) |
1052 | result = scic_sds_request_start(request); | 1050 | result = scic_sds_request_start(request); |
1053 | 1051 | ||
@@ -1144,7 +1142,7 @@ static enum sci_status scic_sds_remote_device_stopping_state_complete_request_ha | |||
1144 | scic_sds_remote_device_decrement_request_count(sci_dev); | 1142 | scic_sds_remote_device_decrement_request_count(sci_dev); |
1145 | 1143 | ||
1146 | if (scic_sds_remote_device_get_request_count(sci_dev) == 0) | 1144 | if (scic_sds_remote_device_get_request_count(sci_dev) == 0) |
1147 | scic_sds_remote_node_context_destruct(sci_dev->rnc, | 1145 | scic_sds_remote_node_context_destruct(&sci_dev->rnc, |
1148 | scic_sds_cb_remote_device_rnc_destruct_complete, | 1146 | scic_sds_cb_remote_device_rnc_destruct_complete, |
1149 | sci_dev); | 1147 | sci_dev); |
1150 | return SCI_SUCCESS; | 1148 | return SCI_SUCCESS; |
@@ -1491,7 +1489,7 @@ static void scic_sds_remote_device_ready_state_enter(struct sci_base_object *obj | |||
1491 | scic_sds_remote_device_state_handler_table, | 1489 | scic_sds_remote_device_state_handler_table, |
1492 | SCI_BASE_REMOTE_DEVICE_STATE_READY); | 1490 | SCI_BASE_REMOTE_DEVICE_STATE_READY); |
1493 | 1491 | ||
1494 | scic->remote_device_sequence[sci_dev->rnc->remote_node_index]++; | 1492 | scic->remote_device_sequence[sci_dev->rnc.remote_node_index]++; |
1495 | 1493 | ||
1496 | if (sci_dev->has_ready_substate_machine) | 1494 | if (sci_dev->has_ready_substate_machine) |
1497 | sci_base_state_machine_start(&sci_dev->ready_substate_machine); | 1495 | sci_base_state_machine_start(&sci_dev->ready_substate_machine); |
@@ -1585,7 +1583,7 @@ static void scic_sds_remote_device_resetting_state_enter( | |||
1585 | ); | 1583 | ); |
1586 | 1584 | ||
1587 | scic_sds_remote_node_context_suspend( | 1585 | scic_sds_remote_node_context_suspend( |
1588 | sci_dev->rnc, SCI_SOFTWARE_SUSPENSION, NULL, NULL); | 1586 | &sci_dev->rnc, SCI_SOFTWARE_SUSPENSION, NULL, NULL); |
1589 | } | 1587 | } |
1590 | 1588 | ||
1591 | /** | 1589 | /** |
@@ -1601,7 +1599,7 @@ static void scic_sds_remote_device_resetting_state_exit( | |||
1601 | { | 1599 | { |
1602 | struct scic_sds_remote_device *sci_dev = (struct scic_sds_remote_device *)object; | 1600 | struct scic_sds_remote_device *sci_dev = (struct scic_sds_remote_device *)object; |
1603 | 1601 | ||
1604 | scic_sds_remote_node_context_resume(sci_dev->rnc, NULL, NULL); | 1602 | scic_sds_remote_node_context_resume(&sci_dev->rnc, NULL, NULL); |
1605 | } | 1603 | } |
1606 | 1604 | ||
1607 | /** | 1605 | /** |
@@ -1661,7 +1659,6 @@ void scic_remote_device_construct(struct scic_sds_port *sci_port, | |||
1661 | { | 1659 | { |
1662 | sci_dev->owning_port = sci_port; | 1660 | sci_dev->owning_port = sci_port; |
1663 | sci_dev->started_request_count = 0; | 1661 | sci_dev->started_request_count = 0; |
1664 | sci_dev->rnc = (struct scic_sds_remote_node_context *) &sci_dev[1]; | ||
1665 | sci_dev->parent.private = NULL; | 1662 | sci_dev->parent.private = NULL; |
1666 | 1663 | ||
1667 | sci_base_state_machine_construct( | 1664 | sci_base_state_machine_construct( |
@@ -1677,9 +1674,9 @@ void scic_remote_device_construct(struct scic_sds_port *sci_port, | |||
1677 | 1674 | ||
1678 | scic_sds_remote_node_context_construct( | 1675 | scic_sds_remote_node_context_construct( |
1679 | sci_dev, | 1676 | sci_dev, |
1680 | sci_dev->rnc, | 1677 | &sci_dev->rnc, |
1681 | SCIC_SDS_REMOTE_NODE_CONTEXT_INVALID_INDEX | 1678 | SCIC_SDS_REMOTE_NODE_CONTEXT_INVALID_INDEX |
1682 | ); | 1679 | ); |
1683 | 1680 | ||
1684 | sci_object_set_association(sci_dev->rnc, sci_dev); | 1681 | sci_object_set_association(&sci_dev->rnc, sci_dev); |
1685 | } | 1682 | } |
diff --git a/drivers/scsi/isci/core/scic_sds_remote_device.h b/drivers/scsi/isci/core/scic_sds_remote_device.h index 5d3df92212eb..7f43f3003e81 100644 --- a/drivers/scsi/isci/core/scic_sds_remote_device.h +++ b/drivers/scsi/isci/core/scic_sds_remote_device.h | |||
@@ -297,7 +297,7 @@ struct scic_sds_remote_device { | |||
297 | * This field contains the SCU silicon remote node context specific | 297 | * This field contains the SCU silicon remote node context specific |
298 | * information. | 298 | * information. |
299 | */ | 299 | */ |
300 | struct scic_sds_remote_node_context *rnc; | 300 | struct scic_sds_remote_node_context rnc; |
301 | 301 | ||
302 | /** | 302 | /** |
303 | * This field contains the stated request count for the remote device. The | 303 | * This field contains the stated request count for the remote device. The |
@@ -523,7 +523,7 @@ extern const struct sci_base_state scic_sds_smp_remote_device_ready_substate_tab | |||
523 | #define scic_sds_remote_device_get_sequence(sci_dev) \ | 523 | #define scic_sds_remote_device_get_sequence(sci_dev) \ |
524 | (\ | 524 | (\ |
525 | scic_sds_remote_device_get_controller(sci_dev)-> \ | 525 | scic_sds_remote_device_get_controller(sci_dev)-> \ |
526 | remote_device_sequence[(sci_dev)->rnc->remote_node_index] \ | 526 | remote_device_sequence[(sci_dev)->rnc.remote_node_index] \ |
527 | ) | 527 | ) |
528 | 528 | ||
529 | /** | 529 | /** |
@@ -554,7 +554,7 @@ extern const struct sci_base_state scic_sds_smp_remote_device_ready_substate_tab | |||
554 | * This macro returns the remote node index for this device object | 554 | * This macro returns the remote node index for this device object |
555 | */ | 555 | */ |
556 | #define scic_sds_remote_device_get_index(sci_dev) \ | 556 | #define scic_sds_remote_device_get_index(sci_dev) \ |
557 | ((sci_dev)->rnc->remote_node_index) | 557 | ((sci_dev)->rnc.remote_node_index) |
558 | 558 | ||
559 | /** | 559 | /** |
560 | * scic_sds_remote_device_build_command_context() - | 560 | * scic_sds_remote_device_build_command_context() - |
diff --git a/drivers/scsi/isci/core/scic_sds_request.c b/drivers/scsi/isci/core/scic_sds_request.c index 8a608f01ceda..63ebbf39dc90 100644 --- a/drivers/scsi/isci/core/scic_sds_request.c +++ b/drivers/scsi/isci/core/scic_sds_request.c | |||
@@ -1766,7 +1766,7 @@ enum sci_status scic_io_request_construct(struct scic_sds_controller *scic, | |||
1766 | scic_sds_general_request_construct(scic, sci_dev, io_tag, | 1766 | scic_sds_general_request_construct(scic, sci_dev, io_tag, |
1767 | user_io_request_object, sci_req); | 1767 | user_io_request_object, sci_req); |
1768 | 1768 | ||
1769 | if (sci_dev->rnc->remote_node_index == SCIC_SDS_REMOTE_NODE_CONTEXT_INVALID_INDEX) | 1769 | if (sci_dev->rnc.remote_node_index == SCIC_SDS_REMOTE_NODE_CONTEXT_INVALID_INDEX) |
1770 | return SCI_FAILURE_INVALID_REMOTE_DEVICE; | 1770 | return SCI_FAILURE_INVALID_REMOTE_DEVICE; |
1771 | 1771 | ||
1772 | scic_remote_device_get_protocols(sci_dev, &device_protocol); | 1772 | scic_remote_device_get_protocols(sci_dev, &device_protocol); |
diff --git a/drivers/scsi/isci/core/scic_sds_smp_remote_device.c b/drivers/scsi/isci/core/scic_sds_smp_remote_device.c index 471cb7d1142d..cd55c0a8dae3 100644 --- a/drivers/scsi/isci/core/scic_sds_smp_remote_device.c +++ b/drivers/scsi/isci/core/scic_sds_smp_remote_device.c | |||
@@ -87,8 +87,7 @@ static enum sci_status scic_sds_smp_remote_device_ready_idle_substate_start_io_h | |||
87 | device->owning_port, device, request); | 87 | device->owning_port, device, request); |
88 | 88 | ||
89 | if (status == SCI_SUCCESS) { | 89 | if (status == SCI_SUCCESS) { |
90 | status = scic_sds_remote_node_context_start_io( | 90 | status = scic_sds_remote_node_context_start_io(&device->rnc, request); |
91 | device->rnc, request); | ||
92 | 91 | ||
93 | if (status == SCI_SUCCESS) | 92 | if (status == SCI_SUCCESS) |
94 | status = scic_sds_request_start(request); | 93 | status = scic_sds_request_start(request); |
diff --git a/drivers/scsi/isci/core/scic_sds_smp_request.c b/drivers/scsi/isci/core/scic_sds_smp_request.c index f53f21b8b9c0..3274d62ac3b2 100644 --- a/drivers/scsi/isci/core/scic_sds_smp_request.c +++ b/drivers/scsi/isci/core/scic_sds_smp_request.c | |||
@@ -173,7 +173,7 @@ static void scu_smp_request_construct_task_context( | |||
173 | { | 173 | { |
174 | dma_addr_t dma_addr; | 174 | dma_addr_t dma_addr; |
175 | struct scic_sds_controller *controller; | 175 | struct scic_sds_controller *controller; |
176 | struct scic_sds_remote_device *target_device; | 176 | struct scic_sds_remote_device *sci_dev; |
177 | struct scic_sds_port *target_port; | 177 | struct scic_sds_port *target_port; |
178 | struct scu_task_context *task_context; | 178 | struct scu_task_context *task_context; |
179 | 179 | ||
@@ -185,7 +185,7 @@ static void scu_smp_request_construct_task_context( | |||
185 | task_context = scic_sds_request_get_task_context(sds_request); | 185 | task_context = scic_sds_request_get_task_context(sds_request); |
186 | 186 | ||
187 | controller = scic_sds_request_get_controller(sds_request); | 187 | controller = scic_sds_request_get_controller(sds_request); |
188 | target_device = scic_sds_request_get_device(sds_request); | 188 | sci_dev = scic_sds_request_get_device(sds_request); |
189 | target_port = scic_sds_request_get_port(sds_request); | 189 | target_port = scic_sds_request_get_port(sds_request); |
190 | 190 | ||
191 | /* | 191 | /* |
@@ -195,7 +195,7 @@ static void scu_smp_request_construct_task_context( | |||
195 | task_context->priority = 0; | 195 | task_context->priority = 0; |
196 | task_context->initiator_request = 1; | 196 | task_context->initiator_request = 1; |
197 | task_context->connection_rate = | 197 | task_context->connection_rate = |
198 | scic_remote_device_get_connection_rate(target_device); | 198 | scic_remote_device_get_connection_rate(sci_dev); |
199 | task_context->protocol_engine_index = | 199 | task_context->protocol_engine_index = |
200 | scic_sds_controller_get_protocol_engine_group(controller); | 200 | scic_sds_controller_get_protocol_engine_group(controller); |
201 | task_context->logical_port_index = | 201 | task_context->logical_port_index = |
@@ -206,8 +206,7 @@ static void scu_smp_request_construct_task_context( | |||
206 | task_context->context_type = SCU_TASK_CONTEXT_TYPE; | 206 | task_context->context_type = SCU_TASK_CONTEXT_TYPE; |
207 | 207 | ||
208 | /* 04h */ | 208 | /* 04h */ |
209 | task_context->remote_node_index = | 209 | task_context->remote_node_index = sci_dev->rnc.remote_node_index; |
210 | sds_request->target_device->rnc->remote_node_index; | ||
211 | task_context->command_code = 0; | 210 | task_context->command_code = 0; |
212 | task_context->task_type = SCU_TASK_TYPE_SMP_REQUEST; | 211 | task_context->task_type = SCU_TASK_TYPE_SMP_REQUEST; |
213 | 212 | ||
diff --git a/drivers/scsi/isci/core/scic_sds_stp_remote_device.c b/drivers/scsi/isci/core/scic_sds_stp_remote_device.c index b15357b2ce08..848cb4711b63 100644 --- a/drivers/scsi/isci/core/scic_sds_stp_remote_device.c +++ b/drivers/scsi/isci/core/scic_sds_stp_remote_device.c | |||
@@ -150,7 +150,7 @@ static enum sci_status scic_sds_stp_remote_device_ready_substate_start_request_h | |||
150 | if (status != SCI_SUCCESS) | 150 | if (status != SCI_SUCCESS) |
151 | return status; | 151 | return status; |
152 | 152 | ||
153 | status = scic_sds_remote_node_context_start_task(device->rnc, request); | 153 | status = scic_sds_remote_node_context_start_task(&device->rnc, request); |
154 | if (status != SCI_SUCCESS) | 154 | if (status != SCI_SUCCESS) |
155 | goto out; | 155 | goto out; |
156 | 156 | ||
@@ -173,9 +173,9 @@ static enum sci_status scic_sds_stp_remote_device_ready_substate_start_request_h | |||
173 | * remote node context state machine will take the correct action when | 173 | * remote node context state machine will take the correct action when |
174 | * the remote node context is suspended and later resumed. | 174 | * the remote node context is suspended and later resumed. |
175 | */ | 175 | */ |
176 | scic_sds_remote_node_context_suspend(device->rnc, | 176 | scic_sds_remote_node_context_suspend(&device->rnc, |
177 | SCI_SOFTWARE_SUSPENSION, NULL, NULL); | 177 | SCI_SOFTWARE_SUSPENSION, NULL, NULL); |
178 | scic_sds_remote_node_context_resume(device->rnc, | 178 | scic_sds_remote_node_context_resume(&device->rnc, |
179 | scic_sds_remote_device_continue_request, | 179 | scic_sds_remote_device_continue_request, |
180 | device); | 180 | device); |
181 | 181 | ||
@@ -220,7 +220,7 @@ static enum sci_status scic_sds_stp_remote_device_ready_idle_substate_start_io_h | |||
220 | if (status != SCI_SUCCESS) | 220 | if (status != SCI_SUCCESS) |
221 | return status; | 221 | return status; |
222 | 222 | ||
223 | status = scic_sds_remote_node_context_start_io(sci_dev->rnc, request); | 223 | status = scic_sds_remote_node_context_start_io(&sci_dev->rnc, request); |
224 | if (status != SCI_SUCCESS) | 224 | if (status != SCI_SUCCESS) |
225 | goto out; | 225 | goto out; |
226 | 226 | ||
@@ -263,7 +263,7 @@ static enum sci_status scic_sds_stp_remote_device_ready_idle_substate_event_hand | |||
263 | if (scu_get_event_type(event_code) == SCU_EVENT_TYPE_RNC_SUSPEND_TX | 263 | if (scu_get_event_type(event_code) == SCU_EVENT_TYPE_RNC_SUSPEND_TX |
264 | || scu_get_event_type(event_code) == SCU_EVENT_TYPE_RNC_SUSPEND_TX_RX) { | 264 | || scu_get_event_type(event_code) == SCU_EVENT_TYPE_RNC_SUSPEND_TX_RX) { |
265 | status = scic_sds_remote_node_context_resume( | 265 | status = scic_sds_remote_node_context_resume( |
266 | sci_dev->rnc, NULL, NULL); | 266 | &sci_dev->rnc, NULL, NULL); |
267 | } | 267 | } |
268 | } | 268 | } |
269 | 269 | ||
@@ -289,19 +289,16 @@ static enum sci_status scic_sds_stp_remote_device_ready_ncq_substate_start_io_ha | |||
289 | sci_dev->owning_port, | 289 | sci_dev->owning_port, |
290 | sci_dev, | 290 | sci_dev, |
291 | request); | 291 | request); |
292 | if (status != SCI_SUCCESS) | ||
293 | return status; | ||
292 | 294 | ||
293 | if (status == SCI_SUCCESS) { | 295 | status = scic_sds_remote_node_context_start_io(&sci_dev->rnc, request); |
294 | status = scic_sds_remote_node_context_start_io( | 296 | if (status != SCI_SUCCESS) |
295 | sci_dev->rnc, | 297 | return status; |
296 | request); | ||
297 | 298 | ||
298 | if (status == SCI_SUCCESS) | 299 | status = request->state_handlers->start_handler(request); |
299 | status = request->state_handlers->start_handler(request); | ||
300 | 300 | ||
301 | scic_sds_remote_device_start_request(sci_dev, | 301 | scic_sds_remote_device_start_request(sci_dev, request, status); |
302 | request, | ||
303 | status); | ||
304 | } | ||
305 | } else | 302 | } else |
306 | status = SCI_FAILURE_INVALID_STATE; | 303 | status = SCI_FAILURE_INVALID_STATE; |
307 | 304 | ||
@@ -398,9 +395,8 @@ static enum sci_status scic_sds_stp_remote_device_ready_cmd_substate_suspend_han | |||
398 | { | 395 | { |
399 | enum sci_status status; | 396 | enum sci_status status; |
400 | 397 | ||
401 | status = scic_sds_remote_node_context_suspend( | 398 | status = scic_sds_remote_node_context_suspend(&sci_dev->rnc, |
402 | sci_dev->rnc, suspend_type, NULL, NULL | 399 | suspend_type, NULL, NULL); |
403 | ); | ||
404 | 400 | ||
405 | return status; | 401 | return status; |
406 | } | 402 | } |
@@ -685,7 +681,7 @@ static void scic_sds_stp_remote_device_ready_idle_substate_enter( | |||
685 | 681 | ||
686 | sci_dev->working_request = NULL; | 682 | sci_dev->working_request = NULL; |
687 | 683 | ||
688 | if (scic_sds_remote_node_context_is_ready(sci_dev->rnc)) { | 684 | if (scic_sds_remote_node_context_is_ready(&sci_dev->rnc)) { |
689 | /* | 685 | /* |
690 | * Since the RNC is ready, it's alright to finish completion | 686 | * Since the RNC is ready, it's alright to finish completion |
691 | * processing (e.g. signal the remote device is ready). */ | 687 | * processing (e.g. signal the remote device is ready). */ |
@@ -694,10 +690,9 @@ static void scic_sds_stp_remote_device_ready_idle_substate_enter( | |||
694 | ); | 690 | ); |
695 | } else { | 691 | } else { |
696 | scic_sds_remote_node_context_resume( | 692 | scic_sds_remote_node_context_resume( |
697 | sci_dev->rnc, | 693 | &sci_dev->rnc, |
698 | scic_sds_stp_remote_device_ready_idle_substate_resume_complete_handler, | 694 | scic_sds_stp_remote_device_ready_idle_substate_resume_complete_handler, |
699 | sci_dev | 695 | sci_dev); |
700 | ); | ||
701 | } | 696 | } |
702 | } | 697 | } |
703 | 698 | ||