• Home
  • Raw
  • Download

Lines Matching refs:idev

75 enum sci_status sci_remote_device_suspend(struct isci_remote_device *idev,  in sci_remote_device_suspend()  argument
78 return sci_remote_node_context_suspend(&idev->rnc, reason, in sci_remote_device_suspend()
90 static void isci_remote_device_ready(struct isci_host *ihost, struct isci_remote_device *idev) in isci_remote_device_ready() argument
93 "%s: idev = %p\n", __func__, idev); in isci_remote_device_ready()
95 clear_bit(IDEV_IO_NCQERROR, &idev->flags); in isci_remote_device_ready()
96 set_bit(IDEV_IO_READY, &idev->flags); in isci_remote_device_ready()
97 if (test_and_clear_bit(IDEV_START_PENDING, &idev->flags)) in isci_remote_device_ready()
103 struct isci_remote_device *idev, in sci_remote_device_terminate_req() argument
108 (ireq->target_device != idev) || in sci_remote_device_terminate_req()
114 __func__, idev, idev->flags, ireq, ireq->target_device); in sci_remote_device_terminate_req()
118 return sci_controller_terminate_request(ihost, idev, ireq); in sci_remote_device_terminate_req()
122 struct isci_remote_device *idev, in sci_remote_device_terminate_reqs_checkabort() argument
125 struct isci_host *ihost = idev->owning_port->owning_controller; in sci_remote_device_terminate_reqs_checkabort()
133 s = sci_remote_device_terminate_req(ihost, idev, chk, ireq); in sci_remote_device_terminate_reqs_checkabort()
141 struct isci_remote_device *idev, in isci_compare_suspendcount() argument
149 return (localcount != idev->rnc.suspend_count) in isci_compare_suspendcount()
150 || sci_remote_node_context_is_being_destroyed(&idev->rnc); in isci_compare_suspendcount()
155 struct isci_remote_device *idev, in isci_check_reqterm() argument
163 res = isci_compare_suspendcount(idev, localcount) in isci_check_reqterm()
172 struct isci_remote_device *idev, in isci_check_devempty() argument
179 res = isci_compare_suspendcount(idev, localcount) in isci_check_devempty()
180 && idev->started_request_count == 0; in isci_check_devempty()
188 struct isci_remote_device *idev, in isci_remote_device_terminate_requests() argument
197 if (isci_get_device(idev) == NULL) { in isci_remote_device_terminate_requests()
199 __func__, idev); in isci_remote_device_terminate_requests()
206 = sci_remote_node_context_is_suspended(&idev->rnc) in isci_remote_device_terminate_requests()
207 ? 0 : idev->rnc.suspend_count; in isci_remote_device_terminate_requests()
213 __func__, idev, ireq, idev->started_request_count, in isci_remote_device_terminate_requests()
214 rnc_suspend_count, idev->rnc.suspend_count); in isci_remote_device_terminate_requests()
220 sci_remote_device_terminate_req(ihost, idev, 0, ireq); in isci_remote_device_terminate_requests()
223 isci_check_reqterm(ihost, idev, ireq, in isci_remote_device_terminate_requests()
237 __func__, idev, in isci_remote_device_terminate_requests()
238 dev_state_name(idev->sm.current_state_id), in isci_remote_device_terminate_requests()
239 idev->started_request_count, idev->flags, in isci_remote_device_terminate_requests()
240 rnc_suspend_count, idev->rnc.suspend_count, in isci_remote_device_terminate_requests()
241 rnc_state_name(idev->rnc.sm.current_state_id), in isci_remote_device_terminate_requests()
242 idev->rnc.suspend_type, in isci_remote_device_terminate_requests()
243 idev->rnc.destination_state, in isci_remote_device_terminate_requests()
253 sci_remote_device_terminate_requests(idev); in isci_remote_device_terminate_requests()
256 isci_check_devempty(ihost, idev, in isci_remote_device_terminate_requests()
270 __func__, idev, in isci_remote_device_terminate_requests()
271 dev_state_name(idev->sm.current_state_id), in isci_remote_device_terminate_requests()
272 idev->started_request_count, idev->flags, in isci_remote_device_terminate_requests()
274 rnc_state_name(idev->rnc.sm.current_state_id), in isci_remote_device_terminate_requests()
275 idev->rnc.suspend_count, in isci_remote_device_terminate_requests()
276 idev->rnc.suspend_type, in isci_remote_device_terminate_requests()
277 idev->rnc.destination_state); in isci_remote_device_terminate_requests()
281 __func__, idev); in isci_remote_device_terminate_requests()
282 isci_put_device(idev); in isci_remote_device_terminate_requests()
297 struct isci_remote_device *idev, in isci_remote_device_not_ready() argument
301 "%s: isci_device = %p; reason = %d\n", __func__, idev, reason); in isci_remote_device_not_ready()
305 set_bit(IDEV_IO_NCQERROR, &idev->flags); in isci_remote_device_not_ready()
308 sci_remote_device_suspend(idev, SCI_SW_SUSPEND_NORMAL); in isci_remote_device_not_ready()
311 sci_remote_device_terminate_requests(idev); in isci_remote_device_not_ready()
315 clear_bit(IDEV_IO_READY, &idev->flags); in isci_remote_device_not_ready()
325 struct isci_remote_device *idev = _dev; in rnc_destruct_done() local
327 BUG_ON(idev->started_request_count != 0); in rnc_destruct_done()
328 sci_change_state(&idev->sm, SCI_DEV_STOPPED); in rnc_destruct_done()
332 struct isci_remote_device *idev) in sci_remote_device_terminate_requests() argument
334 return sci_remote_device_terminate_reqs_checkabort(idev, 0); in sci_remote_device_terminate_requests()
337 enum sci_status sci_remote_device_stop(struct isci_remote_device *idev, in sci_remote_device_stop() argument
340 struct sci_base_state_machine *sm = &idev->sm; in sci_remote_device_stop()
348 dev_warn(scirdev_to_dev(idev), "%s: in wrong state: %s\n", in sci_remote_device_stop()
355 BUG_ON(idev->started_request_count != 0); in sci_remote_device_stop()
356 sci_remote_node_context_destruct(&idev->rnc, in sci_remote_device_stop()
357 rnc_destruct_done, idev); in sci_remote_device_stop()
372 if (idev->started_request_count == 0) in sci_remote_device_stop()
373 sci_remote_node_context_destruct(&idev->rnc, in sci_remote_device_stop()
375 idev); in sci_remote_device_stop()
378 idev, SCI_SW_SUSPEND_LINKHANG_DETECT); in sci_remote_device_stop()
379 sci_remote_device_terminate_requests(idev); in sci_remote_device_stop()
387 return sci_remote_device_terminate_requests(idev); in sci_remote_device_stop()
394 enum sci_status sci_remote_device_reset(struct isci_remote_device *idev) in sci_remote_device_reset() argument
396 struct sci_base_state_machine *sm = &idev->sm; in sci_remote_device_reset()
410 dev_warn(scirdev_to_dev(idev), "%s: in wrong state: %s\n", in sci_remote_device_reset()
424 enum sci_status sci_remote_device_reset_complete(struct isci_remote_device *idev) in sci_remote_device_reset_complete() argument
426 struct sci_base_state_machine *sm = &idev->sm; in sci_remote_device_reset_complete()
430 dev_warn(scirdev_to_dev(idev), "%s: in wrong state: %s\n", in sci_remote_device_reset_complete()
439 enum sci_status sci_remote_device_frame_handler(struct isci_remote_device *idev, in sci_remote_device_frame_handler() argument
442 struct sci_base_state_machine *sm = &idev->sm; in sci_remote_device_frame_handler()
444 struct isci_host *ihost = idev->owning_port->owning_controller; in sci_remote_device_frame_handler()
455 dev_warn(scirdev_to_dev(idev), "%s: in wrong state: %s\n", in sci_remote_device_frame_handler()
481 if (ireq && ireq->target_device == idev) { in sci_remote_device_frame_handler()
503 idev->not_ready_reason = SCIC_REMOTE_DEVICE_NOT_READY_SATA_SDB_ERROR_FIS_RECEIVED; in sci_remote_device_frame_handler()
513 idev->not_ready_reason = SCIC_REMOTE_DEVICE_NOT_READY_SATA_SDB_ERROR_FIS_RECEIVED; in sci_remote_device_frame_handler()
514 sci_change_state(&idev->sm, SCI_STP_DEV_NCQ_ERROR); in sci_remote_device_frame_handler()
527 status = sci_io_request_frame_handler(idev->working_request, frame_index); in sci_remote_device_frame_handler()
534 static bool is_remote_device_ready(struct isci_remote_device *idev) in is_remote_device_ready() argument
537 struct sci_base_state_machine *sm = &idev->sm; in is_remote_device_ready()
561 struct isci_remote_device *idev = _dev; in atapi_remote_device_resume_done() local
562 struct isci_request *ireq = idev->working_request; in atapi_remote_device_resume_done()
567 enum sci_status sci_remote_device_event_handler(struct isci_remote_device *idev, in sci_remote_device_event_handler() argument
571 struct sci_base_state_machine *sm = &idev->sm; in sci_remote_device_event_handler()
578 status = sci_remote_node_context_event_handler(&idev->rnc, event_code); in sci_remote_device_event_handler()
585 sci_remote_device_suspend(idev, SCI_SW_SUSPEND_NORMAL); in sci_remote_device_event_handler()
587 dev_dbg(scirdev_to_dev(idev), in sci_remote_device_event_handler()
589 __func__, idev, event_code, in sci_remote_device_event_handler()
590 is_remote_device_ready(idev) in sci_remote_device_event_handler()
598 dev_dbg(scirdev_to_dev(idev), in sci_remote_device_event_handler()
600 __func__, idev, event_code, in sci_remote_device_event_handler()
601 is_remote_device_ready(idev) in sci_remote_device_event_handler()
619 return sci_remote_node_context_resume(&idev->rnc, in sci_remote_device_event_handler()
621 idev); in sci_remote_device_event_handler()
632 status = sci_remote_node_context_resume(&idev->rnc, NULL, NULL); in sci_remote_device_event_handler()
638 static void sci_remote_device_start_request(struct isci_remote_device *idev, in sci_remote_device_start_request() argument
642 struct isci_port *iport = idev->owning_port; in sci_remote_device_start_request()
646 sci_port_complete_io(iport, idev, ireq); in sci_remote_device_start_request()
648 kref_get(&idev->kref); in sci_remote_device_start_request()
649 idev->started_request_count++; in sci_remote_device_start_request()
654 struct isci_remote_device *idev, in sci_remote_device_start_io() argument
657 struct sci_base_state_machine *sm = &idev->sm; in sci_remote_device_start_io()
659 struct isci_port *iport = idev->owning_port; in sci_remote_device_start_io()
672 dev_warn(scirdev_to_dev(idev), "%s: in wrong state: %s\n", in sci_remote_device_start_io()
681 status = sci_port_start_io(iport, idev, ireq); in sci_remote_device_start_io()
685 status = sci_remote_node_context_start_io(&idev->rnc, ireq); in sci_remote_device_start_io()
703 status = sci_port_start_io(iport, idev, ireq); in sci_remote_device_start_io()
707 status = sci_remote_node_context_start_io(&idev->rnc, ireq); in sci_remote_device_start_io()
718 idev->working_request = ireq; in sci_remote_device_start_io()
728 status = sci_port_start_io(iport, idev, ireq); in sci_remote_device_start_io()
732 status = sci_remote_node_context_start_io(&idev->rnc, ireq); in sci_remote_device_start_io()
744 status = sci_port_start_io(iport, idev, ireq); in sci_remote_device_start_io()
748 status = sci_remote_node_context_start_io(&idev->rnc, ireq); in sci_remote_device_start_io()
756 idev->working_request = ireq; in sci_remote_device_start_io()
757 sci_change_state(&idev->sm, SCI_SMP_DEV_CMD); in sci_remote_device_start_io()
767 sci_remote_device_start_request(idev, ireq, status); in sci_remote_device_start_io()
772 struct isci_remote_device *idev, in common_complete_io() argument
781 status = sci_port_complete_io(iport, idev, ireq); in common_complete_io()
785 sci_remote_device_decrement_request_count(idev); in common_complete_io()
790 struct isci_remote_device *idev, in sci_remote_device_complete_io() argument
793 struct sci_base_state_machine *sm = &idev->sm; in sci_remote_device_complete_io()
795 struct isci_port *iport = idev->owning_port; in sci_remote_device_complete_io()
807 dev_warn(scirdev_to_dev(idev), "%s: in wrong state: %s\n", in sci_remote_device_complete_io()
813 status = common_complete_io(iport, idev, ireq); in sci_remote_device_complete_io()
819 status = common_complete_io(iport, idev, ireq); in sci_remote_device_complete_io()
830 } else if (idev->started_request_count == 0) in sci_remote_device_complete_io()
834 status = common_complete_io(iport, idev, ireq); in sci_remote_device_complete_io()
840 status = common_complete_io(iport, idev, ireq); in sci_remote_device_complete_io()
844 if (idev->started_request_count == 0) in sci_remote_device_complete_io()
845 sci_remote_node_context_destruct(&idev->rnc, in sci_remote_device_complete_io()
847 idev); in sci_remote_device_complete_io()
852 dev_err(scirdev_to_dev(idev), in sci_remote_device_complete_io()
855 idev, ireq, status); in sci_remote_device_complete_io()
857 isci_put_device(idev); in sci_remote_device_complete_io()
864 struct isci_remote_device *idev = dev; in sci_remote_device_continue_request() local
867 if (idev->working_request) in sci_remote_device_continue_request()
868 sci_controller_continue_io(idev->working_request); in sci_remote_device_continue_request()
872 struct isci_remote_device *idev, in sci_remote_device_start_task() argument
875 struct sci_base_state_machine *sm = &idev->sm; in sci_remote_device_start_task()
877 struct isci_port *iport = idev->owning_port; in sci_remote_device_start_task()
891 dev_warn(scirdev_to_dev(idev), "%s: in wrong state: %s\n", in sci_remote_device_start_task()
899 status = sci_port_start_io(iport, idev, ireq); in sci_remote_device_start_task()
911 idev->working_request = ireq; in sci_remote_device_start_task()
921 sci_remote_device_suspend(idev, in sci_remote_device_start_task()
924 status = sci_remote_node_context_start_task(&idev->rnc, ireq, in sci_remote_device_start_task()
925 sci_remote_device_continue_request, idev); in sci_remote_device_start_task()
928 sci_remote_device_start_request(idev, ireq, status); in sci_remote_device_start_task()
935 status = sci_port_start_io(iport, idev, ireq); in sci_remote_device_start_task()
940 status = sci_remote_node_context_start_task(&idev->rnc, ireq, in sci_remote_device_start_task()
948 sci_remote_device_start_request(idev, ireq, status); in sci_remote_device_start_task()
953 void sci_remote_device_post_request(struct isci_remote_device *idev, u32 request) in sci_remote_device_post_request() argument
955 struct isci_port *iport = idev->owning_port; in sci_remote_device_post_request()
961 idev->rnc.remote_node_index; in sci_remote_device_post_request()
972 struct isci_remote_device *idev = _dev; in remote_device_resume_done() local
974 if (is_remote_device_ready(idev)) in remote_device_resume_done()
978 sci_change_state(&idev->sm, SCI_DEV_READY); in remote_device_resume_done()
983 struct isci_remote_device *idev = _dev; in sci_stp_remote_device_ready_idle_substate_resume_complete_handler() local
984 struct isci_host *ihost = idev->owning_port->owning_controller; in sci_stp_remote_device_ready_idle_substate_resume_complete_handler()
989 if (idev->sm.previous_state_id != SCI_STP_DEV_NCQ) in sci_stp_remote_device_ready_idle_substate_resume_complete_handler()
990 isci_remote_device_ready(ihost, idev); in sci_stp_remote_device_ready_idle_substate_resume_complete_handler()
995 struct isci_remote_device *idev = container_of(sm, typeof(*idev), sm); in sci_remote_device_initial_state_enter() local
998 sci_change_state(&idev->sm, SCI_DEV_STOPPED); in sci_remote_device_initial_state_enter()
1014 static enum sci_status sci_remote_device_destruct(struct isci_remote_device *idev) in sci_remote_device_destruct() argument
1016 struct sci_base_state_machine *sm = &idev->sm; in sci_remote_device_destruct()
1021 dev_warn(scirdev_to_dev(idev), "%s: in wrong state: %s\n", in sci_remote_device_destruct()
1026 ihost = idev->owning_port->owning_controller; in sci_remote_device_destruct()
1027 sci_controller_free_remote_node_context(ihost, idev, in sci_remote_device_destruct()
1028 idev->rnc.remote_node_index); in sci_remote_device_destruct()
1029 idev->rnc.remote_node_index = SCIC_SDS_REMOTE_NODE_CONTEXT_INVALID_INDEX; in sci_remote_device_destruct()
1041 static void isci_remote_device_deconstruct(struct isci_host *ihost, struct isci_remote_device *idev) in isci_remote_device_deconstruct() argument
1044 "%s: isci_device = %p\n", __func__, idev); in isci_remote_device_deconstruct()
1050 BUG_ON(idev->started_request_count > 0); in isci_remote_device_deconstruct()
1052 sci_remote_device_destruct(idev); in isci_remote_device_deconstruct()
1053 list_del_init(&idev->node); in isci_remote_device_deconstruct()
1054 isci_put_device(idev); in isci_remote_device_deconstruct()
1059 struct isci_remote_device *idev = container_of(sm, typeof(*idev), sm); in sci_remote_device_stopped_state_enter() local
1060 struct isci_host *ihost = idev->owning_port->owning_controller; in sci_remote_device_stopped_state_enter()
1066 prev_state = idev->sm.previous_state_id; in sci_remote_device_stopped_state_enter()
1068 isci_remote_device_deconstruct(ihost, idev); in sci_remote_device_stopped_state_enter()
1070 sci_controller_remote_device_stopped(ihost, idev); in sci_remote_device_stopped_state_enter()
1075 struct isci_remote_device *idev = container_of(sm, typeof(*idev), sm); in sci_remote_device_starting_state_enter() local
1076 struct isci_host *ihost = idev->owning_port->owning_controller; in sci_remote_device_starting_state_enter()
1078 isci_remote_device_not_ready(ihost, idev, in sci_remote_device_starting_state_enter()
1084 struct isci_remote_device *idev = container_of(sm, typeof(*idev), sm); in sci_remote_device_ready_state_enter() local
1085 struct isci_host *ihost = idev->owning_port->owning_controller; in sci_remote_device_ready_state_enter()
1086 struct domain_device *dev = idev->domain_dev; in sci_remote_device_ready_state_enter()
1089 sci_change_state(&idev->sm, SCI_STP_DEV_IDLE); in sci_remote_device_ready_state_enter()
1091 sci_change_state(&idev->sm, SCI_SMP_DEV_IDLE); in sci_remote_device_ready_state_enter()
1093 isci_remote_device_ready(ihost, idev); in sci_remote_device_ready_state_enter()
1098 struct isci_remote_device *idev = container_of(sm, typeof(*idev), sm); in sci_remote_device_ready_state_exit() local
1099 struct domain_device *dev = idev->domain_dev; in sci_remote_device_ready_state_exit()
1102 struct isci_host *ihost = idev->owning_port->owning_controller; in sci_remote_device_ready_state_exit()
1104 isci_remote_device_not_ready(ihost, idev, in sci_remote_device_ready_state_exit()
1111 struct isci_remote_device *idev = container_of(sm, typeof(*idev), sm); in sci_remote_device_resetting_state_enter() local
1112 struct isci_host *ihost = idev->owning_port->owning_controller; in sci_remote_device_resetting_state_enter()
1115 "%s: isci_device = %p\n", __func__, idev); in sci_remote_device_resetting_state_enter()
1117 sci_remote_device_suspend(idev, SCI_SW_SUSPEND_LINKHANG_DETECT); in sci_remote_device_resetting_state_enter()
1122 struct isci_remote_device *idev = container_of(sm, typeof(*idev), sm); in sci_remote_device_resetting_state_exit() local
1123 struct isci_host *ihost = idev->owning_port->owning_controller; in sci_remote_device_resetting_state_exit()
1126 "%s: isci_device = %p\n", __func__, idev); in sci_remote_device_resetting_state_exit()
1128 sci_remote_node_context_resume(&idev->rnc, NULL, NULL); in sci_remote_device_resetting_state_exit()
1133 struct isci_remote_device *idev = container_of(sm, typeof(*idev), sm); in sci_stp_remote_device_ready_idle_substate_enter() local
1135 idev->working_request = NULL; in sci_stp_remote_device_ready_idle_substate_enter()
1136 if (sci_remote_node_context_is_ready(&idev->rnc)) { in sci_stp_remote_device_ready_idle_substate_enter()
1140 sci_stp_remote_device_ready_idle_substate_resume_complete_handler(idev); in sci_stp_remote_device_ready_idle_substate_enter()
1142 sci_remote_node_context_resume(&idev->rnc, in sci_stp_remote_device_ready_idle_substate_enter()
1144 idev); in sci_stp_remote_device_ready_idle_substate_enter()
1150 struct isci_remote_device *idev = container_of(sm, typeof(*idev), sm); in sci_stp_remote_device_ready_cmd_substate_enter() local
1151 struct isci_host *ihost = idev->owning_port->owning_controller; in sci_stp_remote_device_ready_cmd_substate_enter()
1153 BUG_ON(idev->working_request == NULL); in sci_stp_remote_device_ready_cmd_substate_enter()
1155 isci_remote_device_not_ready(ihost, idev, in sci_stp_remote_device_ready_cmd_substate_enter()
1161 struct isci_remote_device *idev = container_of(sm, typeof(*idev), sm); in sci_stp_remote_device_ready_ncq_error_substate_enter() local
1162 struct isci_host *ihost = idev->owning_port->owning_controller; in sci_stp_remote_device_ready_ncq_error_substate_enter()
1164 if (idev->not_ready_reason == SCIC_REMOTE_DEVICE_NOT_READY_SATA_SDB_ERROR_FIS_RECEIVED) in sci_stp_remote_device_ready_ncq_error_substate_enter()
1165 isci_remote_device_not_ready(ihost, idev, in sci_stp_remote_device_ready_ncq_error_substate_enter()
1166 idev->not_ready_reason); in sci_stp_remote_device_ready_ncq_error_substate_enter()
1171 struct isci_remote_device *idev = container_of(sm, typeof(*idev), sm); in sci_smp_remote_device_ready_idle_substate_enter() local
1172 struct isci_host *ihost = idev->owning_port->owning_controller; in sci_smp_remote_device_ready_idle_substate_enter()
1174 isci_remote_device_ready(ihost, idev); in sci_smp_remote_device_ready_idle_substate_enter()
1179 struct isci_remote_device *idev = container_of(sm, typeof(*idev), sm); in sci_smp_remote_device_ready_cmd_substate_enter() local
1180 struct isci_host *ihost = idev->owning_port->owning_controller; in sci_smp_remote_device_ready_cmd_substate_enter()
1182 BUG_ON(idev->working_request == NULL); in sci_smp_remote_device_ready_cmd_substate_enter()
1184 isci_remote_device_not_ready(ihost, idev, in sci_smp_remote_device_ready_cmd_substate_enter()
1190 struct isci_remote_device *idev = container_of(sm, typeof(*idev), sm); in sci_smp_remote_device_ready_cmd_substate_exit() local
1192 idev->working_request = NULL; in sci_smp_remote_device_ready_cmd_substate_exit()
1248 struct isci_remote_device *idev) in sci_remote_device_construct() argument
1250 idev->owning_port = iport; in sci_remote_device_construct()
1251 idev->started_request_count = 0; in sci_remote_device_construct()
1253 sci_init_sm(&idev->sm, sci_remote_device_state_table, SCI_DEV_INITIAL); in sci_remote_device_construct()
1255 sci_remote_node_context_construct(&idev->rnc, in sci_remote_device_construct()
1274 struct isci_remote_device *idev) in sci_remote_device_da_construct() argument
1279 sci_remote_device_construct(iport, idev); in sci_remote_device_da_construct()
1283 idev->device_port_width = hweight32(properties.phy_mask); in sci_remote_device_da_construct()
1286 idev, in sci_remote_device_da_construct()
1287 &idev->rnc.remote_node_index); in sci_remote_device_da_construct()
1292 idev->connection_rate = sci_port_get_max_allowed_speed(iport); in sci_remote_device_da_construct()
1310 struct isci_remote_device *idev) in sci_remote_device_ea_construct() argument
1312 struct domain_device *dev = idev->domain_dev; in sci_remote_device_ea_construct()
1315 sci_remote_device_construct(iport, idev); in sci_remote_device_ea_construct()
1318 idev, in sci_remote_device_ea_construct()
1319 &idev->rnc.remote_node_index); in sci_remote_device_ea_construct()
1330 idev->connection_rate = min_t(u16, sci_port_get_max_allowed_speed(iport), in sci_remote_device_ea_construct()
1334 idev->device_port_width = 1; in sci_remote_device_ea_construct()
1340 struct isci_remote_device *idev, in sci_remote_device_resume() argument
1346 status = sci_remote_node_context_resume(&idev->rnc, cb_fn, cb_p); in sci_remote_device_resume()
1348 dev_dbg(scirdev_to_dev(idev), "%s: failed to resume: %d\n", in sci_remote_device_resume()
1355 struct isci_remote_device *idev = cbparam; in isci_remote_device_resume_from_abort_complete() local
1356 struct isci_host *ihost = idev->owning_port->owning_controller; in isci_remote_device_resume_from_abort_complete()
1358 idev->abort_resume_cb; in isci_remote_device_resume_from_abort_complete()
1360 dev_dbg(scirdev_to_dev(idev), "%s: passing-along resume: %p\n", in isci_remote_device_resume_from_abort_complete()
1364 idev->abort_resume_cb = NULL; in isci_remote_device_resume_from_abort_complete()
1365 abort_resume_cb(idev->abort_resume_cbparam); in isci_remote_device_resume_from_abort_complete()
1367 clear_bit(IDEV_ABORT_PATH_RESUME_PENDING, &idev->flags); in isci_remote_device_resume_from_abort_complete()
1373 struct isci_remote_device *idev) in isci_remote_device_test_resume_done() argument
1379 done = !test_bit(IDEV_ABORT_PATH_RESUME_PENDING, &idev->flags) in isci_remote_device_test_resume_done()
1380 || test_bit(IDEV_STOP_PENDING, &idev->flags) in isci_remote_device_test_resume_done()
1381 || sci_remote_node_context_is_being_destroyed(&idev->rnc); in isci_remote_device_test_resume_done()
1389 struct isci_remote_device *idev) in isci_remote_device_wait_for_resume_from_abort() argument
1392 __func__, idev); in isci_remote_device_wait_for_resume_from_abort()
1396 isci_remote_device_test_resume_done(ihost, idev), in isci_remote_device_wait_for_resume_from_abort()
1400 "resume: %p\n", __func__, idev); in isci_remote_device_wait_for_resume_from_abort()
1402 clear_bit(IDEV_ABORT_PATH_RESUME_PENDING, &idev->flags); in isci_remote_device_wait_for_resume_from_abort()
1405 __func__, idev); in isci_remote_device_wait_for_resume_from_abort()
1410 struct isci_remote_device *idev) in isci_remote_device_resume_from_abort() argument
1420 idev->abort_resume_cb = idev->rnc.user_callback; in isci_remote_device_resume_from_abort()
1421 idev->abort_resume_cbparam = idev->rnc.user_cookie; in isci_remote_device_resume_from_abort()
1422 set_bit(IDEV_ABORT_PATH_RESUME_PENDING, &idev->flags); in isci_remote_device_resume_from_abort()
1423 clear_bit(IDEV_ABORT_PATH_ACTIVE, &idev->flags); in isci_remote_device_resume_from_abort()
1424 destroyed = sci_remote_node_context_is_being_destroyed(&idev->rnc); in isci_remote_device_resume_from_abort()
1427 idev, isci_remote_device_resume_from_abort_complete, in isci_remote_device_resume_from_abort()
1428 idev); in isci_remote_device_resume_from_abort()
1431 isci_remote_device_wait_for_resume_from_abort(ihost, idev); in isci_remote_device_resume_from_abort()
1433 clear_bit(IDEV_ABORT_PATH_RESUME_PENDING, &idev->flags); in isci_remote_device_resume_from_abort()
1451 static enum sci_status sci_remote_device_start(struct isci_remote_device *idev, in sci_remote_device_start() argument
1454 struct sci_base_state_machine *sm = &idev->sm; in sci_remote_device_start()
1459 dev_warn(scirdev_to_dev(idev), "%s: in wrong state: %s\n", in sci_remote_device_start()
1464 status = sci_remote_device_resume(idev, remote_device_resume_done, in sci_remote_device_start()
1465 idev); in sci_remote_device_start()
1475 struct isci_remote_device *idev) in isci_remote_device_construct() argument
1478 struct domain_device *dev = idev->domain_dev; in isci_remote_device_construct()
1482 status = sci_remote_device_ea_construct(iport, idev); in isci_remote_device_construct()
1484 status = sci_remote_device_da_construct(iport, idev); in isci_remote_device_construct()
1494 status = sci_remote_device_start(idev, ISCI_REMOTE_DEVICE_START_TIMEOUT); in isci_remote_device_construct()
1514 struct isci_remote_device *idev; in isci_remote_device_alloc() local
1518 idev = &ihost->devices[i]; in isci_remote_device_alloc()
1519 if (!test_and_set_bit(IDEV_ALLOCATED, &idev->flags)) in isci_remote_device_alloc()
1527 if (WARN_ONCE(!list_empty(&idev->node), "found non-idle remote device\n")) in isci_remote_device_alloc()
1530 return idev; in isci_remote_device_alloc()
1535 struct isci_remote_device *idev = container_of(kref, typeof(*idev), kref); in isci_remote_device_release() local
1536 struct isci_host *ihost = idev->isci_port->isci_host; in isci_remote_device_release()
1538 idev->domain_dev = NULL; in isci_remote_device_release()
1539 idev->isci_port = NULL; in isci_remote_device_release()
1540 clear_bit(IDEV_START_PENDING, &idev->flags); in isci_remote_device_release()
1541 clear_bit(IDEV_STOP_PENDING, &idev->flags); in isci_remote_device_release()
1542 clear_bit(IDEV_IO_READY, &idev->flags); in isci_remote_device_release()
1543 clear_bit(IDEV_GONE, &idev->flags); in isci_remote_device_release()
1545 clear_bit(IDEV_ALLOCATED, &idev->flags); in isci_remote_device_release()
1557 enum sci_status isci_remote_device_stop(struct isci_host *ihost, struct isci_remote_device *idev) in isci_remote_device_stop() argument
1563 "%s: isci_device = %p\n", __func__, idev); in isci_remote_device_stop()
1566 idev->domain_dev->lldd_dev = NULL; /* disable new lookups */ in isci_remote_device_stop()
1567 set_bit(IDEV_GONE, &idev->flags); in isci_remote_device_stop()
1569 set_bit(IDEV_STOP_PENDING, &idev->flags); in isci_remote_device_stop()
1570 status = sci_remote_device_stop(idev, 50); in isci_remote_device_stop()
1577 wait_for_device_stop(ihost, idev); in isci_remote_device_stop()
1580 "%s: isci_device = %p, waiting done.\n", __func__, idev); in isci_remote_device_stop()
1594 struct isci_remote_device *idev = dev->lldd_dev; in isci_remote_device_gone() local
1598 __func__, dev, idev, idev->isci_port); in isci_remote_device_gone()
1600 isci_remote_device_stop(ihost, idev); in isci_remote_device_gone()
1660 struct isci_remote_device *idev, in isci_remote_device_suspend_terminate() argument
1668 set_bit(IDEV_ABORT_PATH_ACTIVE, &idev->flags); in isci_remote_device_suspend_terminate()
1669 sci_remote_device_suspend(idev, SCI_SW_SUSPEND_LINKHANG_DETECT); in isci_remote_device_suspend_terminate()
1673 status = isci_remote_device_terminate_requests(ihost, idev, ireq); in isci_remote_device_suspend_terminate()
1678 __func__, idev, status); in isci_remote_device_suspend_terminate()
1685 struct isci_remote_device *idev) in isci_remote_device_is_safe_to_abort() argument
1687 return sci_remote_node_context_is_safe_to_abort(&idev->rnc); in isci_remote_device_is_safe_to_abort()
1691 struct isci_remote_device *idev) in sci_remote_device_abort_requests_pending_abort() argument
1693 return sci_remote_device_terminate_reqs_checkabort(idev, 1); in sci_remote_device_abort_requests_pending_abort()
1698 struct isci_remote_device *idev) in isci_remote_device_reset_complete() argument
1704 status = sci_remote_device_reset_complete(idev); in isci_remote_device_reset_complete()
1711 struct isci_remote_device *idev, in isci_dev_set_hang_detection_timeout() argument
1714 if (dev_is_sata(idev->domain_dev)) { in isci_dev_set_hang_detection_timeout()
1717 &idev->flags)) in isci_dev_set_hang_detection_timeout()
1720 &idev->flags)) in isci_dev_set_hang_detection_timeout()
1723 sci_port_set_hang_detection_timeout(idev->owning_port, in isci_dev_set_hang_detection_timeout()