Lines Matching refs:qc

1524 static void ata_qc_complete_internal(struct ata_queued_cmd *qc)  in ata_qc_complete_internal()  argument
1526 struct completion *waiting = qc->private_data; in ata_qc_complete_internal()
1562 struct ata_queued_cmd *qc; in ata_exec_internal_sg() local
1591 qc = __ata_qc_from_tag(ap, tag); in ata_exec_internal_sg()
1593 qc->tag = tag; in ata_exec_internal_sg()
1594 qc->scsicmd = NULL; in ata_exec_internal_sg()
1595 qc->ap = ap; in ata_exec_internal_sg()
1596 qc->dev = dev; in ata_exec_internal_sg()
1597 ata_qc_reinit(qc); in ata_exec_internal_sg()
1609 qc->tf = *tf; in ata_exec_internal_sg()
1611 memcpy(qc->cdb, cdb, ATAPI_CDB_LEN); in ata_exec_internal_sg()
1616 qc->tf.feature |= ATAPI_DMADIR; in ata_exec_internal_sg()
1618 qc->flags |= ATA_QCFLAG_RESULT_TF; in ata_exec_internal_sg()
1619 qc->dma_dir = dma_dir; in ata_exec_internal_sg()
1627 ata_sg_init(qc, sgl, n_elem); in ata_exec_internal_sg()
1628 qc->nbytes = buflen; in ata_exec_internal_sg()
1631 qc->private_data = &wait; in ata_exec_internal_sg()
1632 qc->complete_fn = ata_qc_complete_internal; in ata_exec_internal_sg()
1634 ata_qc_issue(qc); in ata_exec_internal_sg()
1665 if (qc->flags & ATA_QCFLAG_ACTIVE) { in ata_exec_internal_sg()
1666 qc->err_mask |= AC_ERR_TIMEOUT; in ata_exec_internal_sg()
1671 ata_qc_complete(qc); in ata_exec_internal_sg()
1683 ap->ops->post_internal_cmd(qc); in ata_exec_internal_sg()
1686 if (qc->flags & ATA_QCFLAG_FAILED) { in ata_exec_internal_sg()
1687 if (qc->result_tf.command & (ATA_ERR | ATA_DF)) in ata_exec_internal_sg()
1688 qc->err_mask |= AC_ERR_DEV; in ata_exec_internal_sg()
1690 if (!qc->err_mask) in ata_exec_internal_sg()
1691 qc->err_mask |= AC_ERR_OTHER; in ata_exec_internal_sg()
1693 if (qc->err_mask & ~AC_ERR_OTHER) in ata_exec_internal_sg()
1694 qc->err_mask &= ~AC_ERR_OTHER; in ata_exec_internal_sg()
1700 *tf = qc->result_tf; in ata_exec_internal_sg()
1701 err_mask = qc->err_mask; in ata_exec_internal_sg()
1703 ata_qc_free(qc); in ata_exec_internal_sg()
4598 void ata_sg_clean(struct ata_queued_cmd *qc) in ata_sg_clean() argument
4600 struct ata_port *ap = qc->ap; in ata_sg_clean()
4601 struct scatterlist *sg = qc->sg; in ata_sg_clean()
4602 int dir = qc->dma_dir; in ata_sg_clean()
4606 VPRINTK("unmapping %u sg elements\n", qc->n_elem); in ata_sg_clean()
4608 if (qc->n_elem) in ata_sg_clean()
4609 dma_unmap_sg(ap->dev, sg, qc->orig_n_elem, dir); in ata_sg_clean()
4611 qc->flags &= ~ATA_QCFLAG_DMAMAP; in ata_sg_clean()
4612 qc->sg = NULL; in ata_sg_clean()
4629 int atapi_check_dma(struct ata_queued_cmd *qc) in atapi_check_dma() argument
4631 struct ata_port *ap = qc->ap; in atapi_check_dma()
4636 if (!(qc->dev->horkage & ATA_HORKAGE_ATAPI_MOD16_DMA) && in atapi_check_dma()
4637 unlikely(qc->nbytes & 15)) in atapi_check_dma()
4641 return ap->ops->check_atapi_dma(qc); in atapi_check_dma()
4661 int ata_std_qc_defer(struct ata_queued_cmd *qc) in ata_std_qc_defer() argument
4663 struct ata_link *link = qc->dev->link; in ata_std_qc_defer()
4665 if (qc->tf.protocol == ATA_PROT_NCQ) { in ata_std_qc_defer()
4676 void ata_noop_qc_prep(struct ata_queued_cmd *qc) { } in ata_noop_qc_prep() argument
4691 void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg, in ata_sg_init() argument
4694 qc->sg = sg; in ata_sg_init()
4695 qc->n_elem = n_elem; in ata_sg_init()
4696 qc->cursg = qc->sg; in ata_sg_init()
4712 static int ata_sg_setup(struct ata_queued_cmd *qc) in ata_sg_setup() argument
4714 struct ata_port *ap = qc->ap; in ata_sg_setup()
4719 n_elem = dma_map_sg(ap->dev, qc->sg, qc->n_elem, qc->dma_dir); in ata_sg_setup()
4724 qc->orig_n_elem = qc->n_elem; in ata_sg_setup()
4725 qc->n_elem = n_elem; in ata_sg_setup()
4726 qc->flags |= ATA_QCFLAG_DMAMAP; in ata_sg_setup()
4765 struct ata_queued_cmd *qc; in ata_qc_new_init() local
4778 qc = __ata_qc_from_tag(ap, tag); in ata_qc_new_init()
4779 qc->tag = tag; in ata_qc_new_init()
4780 qc->scsicmd = NULL; in ata_qc_new_init()
4781 qc->ap = ap; in ata_qc_new_init()
4782 qc->dev = dev; in ata_qc_new_init()
4784 ata_qc_reinit(qc); in ata_qc_new_init()
4786 return qc; in ata_qc_new_init()
4799 void ata_qc_free(struct ata_queued_cmd *qc) in ata_qc_free() argument
4804 WARN_ON_ONCE(qc == NULL); /* ata_qc_from_tag _might_ return NULL */ in ata_qc_free()
4805 ap = qc->ap; in ata_qc_free()
4807 qc->flags = 0; in ata_qc_free()
4808 tag = qc->tag; in ata_qc_free()
4810 qc->tag = ATA_TAG_POISON; in ata_qc_free()
4816 void __ata_qc_complete(struct ata_queued_cmd *qc) in __ata_qc_complete() argument
4821 WARN_ON_ONCE(qc == NULL); /* ata_qc_from_tag _might_ return NULL */ in __ata_qc_complete()
4822 WARN_ON_ONCE(!(qc->flags & ATA_QCFLAG_ACTIVE)); in __ata_qc_complete()
4823 ap = qc->ap; in __ata_qc_complete()
4824 link = qc->dev->link; in __ata_qc_complete()
4826 if (likely(qc->flags & ATA_QCFLAG_DMAMAP)) in __ata_qc_complete()
4827 ata_sg_clean(qc); in __ata_qc_complete()
4830 if (qc->tf.protocol == ATA_PROT_NCQ) { in __ata_qc_complete()
4831 link->sactive &= ~(1 << qc->tag); in __ata_qc_complete()
4840 if (unlikely(qc->flags & ATA_QCFLAG_CLEAR_EXCL && in __ata_qc_complete()
4848 qc->flags &= ~ATA_QCFLAG_ACTIVE; in __ata_qc_complete()
4849 ap->qc_active &= ~(1 << qc->tag); in __ata_qc_complete()
4852 qc->complete_fn(qc); in __ata_qc_complete()
4855 static void fill_result_tf(struct ata_queued_cmd *qc) in fill_result_tf() argument
4857 struct ata_port *ap = qc->ap; in fill_result_tf()
4859 qc->result_tf.flags = qc->tf.flags; in fill_result_tf()
4860 ap->ops->qc_fill_rtf(qc); in fill_result_tf()
4863 static void ata_verify_xfer(struct ata_queued_cmd *qc) in ata_verify_xfer() argument
4865 struct ata_device *dev = qc->dev; in ata_verify_xfer()
4867 if (ata_is_nodata(qc->tf.protocol)) in ata_verify_xfer()
4870 if ((dev->mwdma_mask || dev->udma_mask) && ata_is_pio(qc->tf.protocol)) in ata_verify_xfer()
4891 void ata_qc_complete(struct ata_queued_cmd *qc) in ata_qc_complete() argument
4893 struct ata_port *ap = qc->ap; in ata_qc_complete()
4909 struct ata_device *dev = qc->dev; in ata_qc_complete()
4912 if (unlikely(qc->err_mask)) in ata_qc_complete()
4913 qc->flags |= ATA_QCFLAG_FAILED; in ata_qc_complete()
4919 if (unlikely(ata_tag_internal(qc->tag))) { in ata_qc_complete()
4920 fill_result_tf(qc); in ata_qc_complete()
4921 trace_ata_qc_complete_internal(qc); in ata_qc_complete()
4922 __ata_qc_complete(qc); in ata_qc_complete()
4930 if (unlikely(qc->flags & ATA_QCFLAG_FAILED)) { in ata_qc_complete()
4931 fill_result_tf(qc); in ata_qc_complete()
4932 trace_ata_qc_complete_failed(qc); in ata_qc_complete()
4933 ata_qc_schedule_eh(qc); in ata_qc_complete()
4940 if (qc->flags & ATA_QCFLAG_RESULT_TF) in ata_qc_complete()
4941 fill_result_tf(qc); in ata_qc_complete()
4943 trace_ata_qc_complete_done(qc); in ata_qc_complete()
4947 switch (qc->tf.command) { in ata_qc_complete()
4949 if (qc->tf.feature != SETFEATURES_WC_ON && in ata_qc_complete()
4950 qc->tf.feature != SETFEATURES_WC_OFF) in ata_qc_complete()
4966 ata_verify_xfer(qc); in ata_qc_complete()
4968 __ata_qc_complete(qc); in ata_qc_complete()
4970 if (qc->flags & ATA_QCFLAG_EH_SCHEDULED) in ata_qc_complete()
4974 if (qc->err_mask || qc->flags & ATA_QCFLAG_RESULT_TF) in ata_qc_complete()
4975 fill_result_tf(qc); in ata_qc_complete()
4977 __ata_qc_complete(qc); in ata_qc_complete()
5015 struct ata_queued_cmd *qc; in ata_qc_complete_multiple() local
5018 qc = ata_qc_from_tag(ap, tag); in ata_qc_complete_multiple()
5019 if (qc) { in ata_qc_complete_multiple()
5020 ata_qc_complete(qc); in ata_qc_complete_multiple()
5041 void ata_qc_issue(struct ata_queued_cmd *qc) in ata_qc_issue() argument
5043 struct ata_port *ap = qc->ap; in ata_qc_issue()
5044 struct ata_link *link = qc->dev->link; in ata_qc_issue()
5045 u8 prot = qc->tf.protocol; in ata_qc_issue()
5054 WARN_ON_ONCE(link->sactive & (1 << qc->tag)); in ata_qc_issue()
5058 link->sactive |= 1 << qc->tag; in ata_qc_issue()
5063 link->active_tag = qc->tag; in ata_qc_issue()
5066 qc->flags |= ATA_QCFLAG_ACTIVE; in ata_qc_issue()
5067 ap->qc_active |= 1 << qc->tag; in ata_qc_issue()
5074 (!qc->sg || !qc->n_elem || !qc->nbytes))) in ata_qc_issue()
5079 if (ata_sg_setup(qc)) in ata_qc_issue()
5083 if (unlikely(qc->dev->flags & ATA_DFLAG_SLEEPING)) { in ata_qc_issue()
5090 ap->ops->qc_prep(qc); in ata_qc_issue()
5091 trace_ata_qc_issue(qc); in ata_qc_issue()
5092 qc->err_mask |= ap->ops->qc_issue(qc); in ata_qc_issue()
5093 if (unlikely(qc->err_mask)) in ata_qc_issue()
5098 qc->err_mask |= AC_ERR_SYSTEM; in ata_qc_issue()
5100 ata_qc_complete(qc); in ata_qc_issue()
6787 static unsigned int ata_dummy_qc_issue(struct ata_queued_cmd *qc) in ata_dummy_qc_issue() argument