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