Lines Matching +full:build +full:- +full:tci

7  * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
20 * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
26 * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
68 * isci_task_refuse() - complete the request to the upper layer driver in
84 dev_dbg(&ihost->pdev->dev, "%s: task = %p, response=%d, status=%d\n", in isci_task_refuse()
87 spin_lock_irqsave(&task->task_state_lock, flags); in isci_task_refuse()
89 task->task_status.resp = response; in isci_task_refuse()
90 task->task_status.stat = status; in isci_task_refuse()
93 task->task_state_flags |= SAS_TASK_STATE_DONE; in isci_task_refuse()
94 task->task_state_flags &= ~SAS_TASK_STATE_PENDING; in isci_task_refuse()
95 task->lldd_task = NULL; in isci_task_refuse()
96 spin_unlock_irqrestore(&task->task_state_lock, flags); in isci_task_refuse()
98 task->task_done(task); in isci_task_refuse()
102 for (; num > 0; num--,\
103 task = list_entry(task->list.next, struct sas_task, list))
109 return idev ? test_bit(IDEV_IO_READY, &idev->flags) || in isci_device_io_ready()
110 (test_bit(IDEV_IO_NCQERROR, &idev->flags) && in isci_device_io_ready()
115 * isci_task_execute_task() - This function is one of the SAS Domain Template
125 struct isci_host *ihost = dev_to_ihost(task->dev); in isci_task_execute_task()
132 spin_lock_irqsave(&ihost->scic_lock, flags); in isci_task_execute_task()
133 idev = isci_lookup_device(task->dev); in isci_task_execute_task()
136 spin_unlock_irqrestore(&ihost->scic_lock, flags); in isci_task_execute_task()
138 dev_dbg(&ihost->pdev->dev, in isci_task_execute_task()
140 task, task->dev, idev, idev ? idev->flags : 0, in isci_task_execute_task()
141 task->uldd_task); in isci_task_execute_task()
154 spin_lock_irqsave(&task->task_state_lock, flags); in isci_task_execute_task()
156 if (task->task_state_flags & SAS_TASK_STATE_ABORTED) { in isci_task_execute_task()
158 spin_unlock_irqrestore(&task->task_state_lock, flags); in isci_task_execute_task()
168 spin_unlock_irqrestore(&task->task_state_lock, flags); in isci_task_execute_task()
170 /* build and send the request. */ in isci_task_execute_task()
175 if (test_bit(IDEV_GONE, &idev->flags)) { in isci_task_execute_task()
200 spin_lock_irqsave(&ihost->scic_lock, flags); in isci_task_execute_task()
202 * the tci and skip the sequence increment in isci_task_execute_task()
205 spin_unlock_irqrestore(&ihost->scic_lock, flags); in isci_task_execute_task()
220 dev_dbg(&ihost->pdev->dev, in isci_task_request_build()
223 dev = idev->domain_dev; in isci_task_request_build()
235 dev_warn(&ihost->pdev->dev, in isci_task_request_build()
236 "%s: sci_task_request_construct failed - " in isci_task_request_build()
243 /* XXX convert to get this from task->tproto like other drivers */ in isci_task_request_build()
244 if (dev->dev_type == SAS_END_DEVICE) { in isci_task_request_build()
245 isci_tmf->proto = SAS_PROTOCOL_SSP; in isci_task_request_build()
266 spin_lock_irqsave(&ihost->scic_lock, flags); in isci_task_execute_tmf()
268 spin_unlock_irqrestore(&ihost->scic_lock, flags); in isci_task_execute_tmf()
277 (!test_bit(IDEV_IO_READY, &idev->flags) && in isci_task_execute_tmf()
278 !test_bit(IDEV_IO_NCQERROR, &idev->flags))) { in isci_task_execute_tmf()
279 dev_dbg(&ihost->pdev->dev, in isci_task_execute_tmf()
282 idev, idev ? idev->flags : 0); in isci_task_execute_tmf()
285 dev_dbg(&ihost->pdev->dev, in isci_task_execute_tmf()
290 tmf->complete = &completion; in isci_task_execute_tmf()
291 tmf->status = SCI_FAILURE_TIMEOUT; in isci_task_execute_tmf()
297 spin_lock_irqsave(&ihost->scic_lock, flags); in isci_task_execute_tmf()
303 dev_dbg(&ihost->pdev->dev, in isci_task_execute_tmf()
304 "%s: start_io failed - status = 0x%x, request = %p\n", in isci_task_execute_tmf()
308 spin_unlock_irqrestore(&ihost->scic_lock, flags); in isci_task_execute_tmf()
311 spin_unlock_irqrestore(&ihost->scic_lock, flags); in isci_task_execute_tmf()
321 /* The TMF did not complete - this could be because in isci_task_execute_tmf()
329 if (tmf->status == SCI_SUCCESS) in isci_task_execute_tmf()
331 else if (tmf->status == SCI_FAILURE_IO_RESPONSE_VALID) { in isci_task_execute_tmf()
332 dev_dbg(&ihost->pdev->dev, in isci_task_execute_tmf()
338 /* Else - leave the default "failed" status alone. */ in isci_task_execute_tmf()
340 dev_dbg(&ihost->pdev->dev, in isci_task_execute_tmf()
348 spin_lock_irqsave(&ihost->scic_lock, flags); in isci_task_execute_tmf()
350 spin_unlock_irqrestore(&ihost->scic_lock, flags); in isci_task_execute_tmf()
359 tmf->tmf_code = code; in isci_task_build_tmf()
367 tmf->io_tag = old_request->io_tag; in isci_task_build_abort_task_tmf()
371 * isci_task_send_lu_reset_sas() - This function is called by of the SAS Domain
385 dev_dbg(&isci_host->pdev->dev, in isci_task_send_lu_reset_sas()
390 * value is "TMF_RESP_FUNC_COMPLETE", or the request timed-out (or in isci_task_send_lu_reset_sas()
399 dev_dbg(&isci_host->pdev->dev, in isci_task_send_lu_reset_sas()
403 dev_dbg(&isci_host->pdev->dev, in isci_task_send_lu_reset_sas()
417 spin_lock_irqsave(&ihost->scic_lock, flags); in isci_task_lu_reset()
418 idev = isci_get_device(dev->lldd_dev); in isci_task_lu_reset()
419 spin_unlock_irqrestore(&ihost->scic_lock, flags); in isci_task_lu_reset()
421 dev_dbg(&ihost->pdev->dev, in isci_task_lu_reset()
427 dev_dbg(&ihost->pdev->dev, "%s: No dev\n", __func__); in isci_task_lu_reset()
441 if (!test_bit(IDEV_GONE, &idev->flags)) { in isci_task_lu_reset()
470 * isci_task_abort_task() - This function is one of the SAS Domain Template
478 struct isci_host *ihost = dev_to_ihost(task->dev); in isci_task_abort_task()
492 spin_lock_irqsave(&ihost->scic_lock, flags); in isci_task_abort_task()
493 spin_lock(&task->task_state_lock); in isci_task_abort_task()
495 old_request = task->lldd_task; in isci_task_abort_task()
498 if (!(task->task_state_flags & SAS_TASK_STATE_DONE) && in isci_task_abort_task()
500 idev = isci_get_device(task->dev->lldd_dev); in isci_task_abort_task()
502 &old_request->flags); in isci_task_abort_task()
504 spin_unlock(&task->task_state_lock); in isci_task_abort_task()
505 spin_unlock_irqrestore(&ihost->scic_lock, flags); in isci_task_abort_task()
507 dev_warn(&ihost->pdev->dev, in isci_task_abort_task()
510 (dev_is_sata(task->dev) ? "STP/SATA" in isci_task_abort_task()
511 : ((dev_is_expander(task->dev->dev_type)) in isci_task_abort_task()
514 ((idev) ? ((test_bit(IDEV_GONE, &idev->flags)) in isci_task_abort_task()
530 spin_lock_irqsave(&task->task_state_lock, flags); in isci_task_abort_task()
531 task->task_state_flags |= SAS_TASK_STATE_DONE; in isci_task_abort_task()
532 task->task_state_flags &= ~SAS_TASK_STATE_PENDING; in isci_task_abort_task()
533 spin_unlock_irqrestore(&task->task_state_lock, flags); in isci_task_abort_task()
537 dev_warn(&ihost->pdev->dev, in isci_task_abort_task()
545 dev_warn(&ihost->pdev->dev, in isci_task_abort_task()
552 spin_lock_irqsave(&ihost->scic_lock, flags); in isci_task_abort_task()
554 if (task->task_proto == SAS_PROTOCOL_SMP || in isci_task_abort_task()
555 sas_protocol_ata(task->task_proto) || in isci_task_abort_task()
557 test_bit(IDEV_GONE, &idev->flags)) { in isci_task_abort_task()
559 spin_unlock_irqrestore(&ihost->scic_lock, flags); in isci_task_abort_task()
564 dev_warn(&ihost->pdev->dev, in isci_task_abort_task()
569 ((task->task_proto == SAS_PROTOCOL_SMP) in isci_task_abort_task()
571 : (sas_protocol_ata(task->task_proto) in isci_task_abort_task()
576 &old_request->flags), in isci_task_abort_task()
577 test_bit(IDEV_GONE, &idev->flags)); in isci_task_abort_task()
579 spin_lock_irqsave(&task->task_state_lock, flags); in isci_task_abort_task()
580 task->task_state_flags &= ~SAS_TASK_STATE_PENDING; in isci_task_abort_task()
581 task->task_state_flags |= SAS_TASK_STATE_DONE; in isci_task_abort_task()
582 spin_unlock_irqrestore(&task->task_state_lock, flags); in isci_task_abort_task()
590 spin_unlock_irqrestore(&ihost->scic_lock, flags); in isci_task_abort_task()
598 dev_warn(&ihost->pdev->dev, in isci_task_abort_task()
606 * isci_task_abort_task_set() - This function is one of the SAS Domain Template
624 * isci_task_clear_task_set() - This function is one of the SAS Domain Template
641 * isci_task_query_task() - This function is implemented to cause libsas to
655 if (task->task_state_flags & SAS_TASK_NEED_DEV_RESET) in isci_task_query_task()
662 * isci_task_request_complete() - This function is called by the sci core when
679 dev_dbg(&ihost->pdev->dev, in isci_task_request_complete()
683 set_bit(IREQ_COMPLETE_IN_TARGET, &ireq->flags); in isci_task_request_complete()
686 tmf->status = completion_status; in isci_task_request_complete()
688 if (tmf->proto == SAS_PROTOCOL_SSP) { in isci_task_request_complete()
689 memcpy(tmf->resp.rsp_buf, in isci_task_request_complete()
690 ireq->ssp.rsp_buf, in isci_task_request_complete()
692 } else if (tmf->proto == SAS_PROTOCOL_SATA) { in isci_task_request_complete()
693 memcpy(&tmf->resp.d2h_fis, in isci_task_request_complete()
694 &ireq->stp.rsp, in isci_task_request_complete()
697 /* PRINT_TMF( ((struct isci_tmf *)request->task)); */ in isci_task_request_complete()
698 tmf_complete = tmf->complete; in isci_task_request_complete()
700 sci_controller_complete_io(ihost, ireq->target_device, ireq); in isci_task_request_complete()
704 set_bit(IREQ_TERMINATED, &ireq->flags); in isci_task_request_complete()
706 if (test_and_clear_bit(IREQ_ABORT_PATH_ACTIVE, &ireq->flags)) in isci_task_request_complete()
707 wake_up_all(&ihost->eventq); in isci_task_request_complete()
709 if (!test_bit(IREQ_NO_AUTO_FREE_TAG, &ireq->flags)) in isci_task_request_complete()
710 isci_free_tag(ihost, ireq->io_tag); in isci_task_request_complete()
721 int rc = TMF_RESP_FUNC_COMPLETE, reset_stat = -1; in isci_reset_device()
723 struct isci_port *iport = dev->port->lldd_port; in isci_reset_device()
725 dev_dbg(&ihost->pdev->dev, "%s: idev %p\n", __func__, idev); in isci_reset_device()
739 if (!test_bit(IDEV_GONE, &idev->flags)) { in isci_reset_device()
741 struct isci_phy *iphy = &ihost->phys[phy->number]; in isci_reset_device()
751 dev_dbg(&ihost->pdev->dev, "%s: idev %p complete, reset_stat=%d.\n", in isci_reset_device()
765 spin_lock_irqsave(&ihost->scic_lock, flags); in isci_task_I_T_nexus_reset()
766 idev = isci_get_device(dev->lldd_dev); in isci_task_I_T_nexus_reset()
767 spin_unlock_irqrestore(&ihost->scic_lock, flags); in isci_task_I_T_nexus_reset()
773 ret = -ENODEV; in isci_task_I_T_nexus_reset()