Lines Matching refs:qc
1518 static void ata_qc_complete_internal(struct ata_queued_cmd *qc) in ata_qc_complete_internal() argument
1520 struct completion *waiting = qc->private_data; in ata_qc_complete_internal()
1556 struct ata_queued_cmd *qc; in ata_exec_internal_sg() local
1575 qc = __ata_qc_from_tag(ap, ATA_TAG_INTERNAL); in ata_exec_internal_sg()
1577 qc->tag = ATA_TAG_INTERNAL; in ata_exec_internal_sg()
1578 qc->hw_tag = 0; in ata_exec_internal_sg()
1579 qc->scsicmd = NULL; in ata_exec_internal_sg()
1580 qc->ap = ap; in ata_exec_internal_sg()
1581 qc->dev = dev; in ata_exec_internal_sg()
1582 ata_qc_reinit(qc); in ata_exec_internal_sg()
1594 qc->tf = *tf; in ata_exec_internal_sg()
1596 memcpy(qc->cdb, cdb, ATAPI_CDB_LEN); in ata_exec_internal_sg()
1601 qc->tf.feature |= ATAPI_DMADIR; in ata_exec_internal_sg()
1603 qc->flags |= ATA_QCFLAG_RESULT_TF; in ata_exec_internal_sg()
1604 qc->dma_dir = dma_dir; in ata_exec_internal_sg()
1612 ata_sg_init(qc, sgl, n_elem); in ata_exec_internal_sg()
1613 qc->nbytes = buflen; in ata_exec_internal_sg()
1616 qc->private_data = &wait; in ata_exec_internal_sg()
1617 qc->complete_fn = ata_qc_complete_internal; in ata_exec_internal_sg()
1619 ata_qc_issue(qc); in ata_exec_internal_sg()
1650 if (qc->flags & ATA_QCFLAG_ACTIVE) { in ata_exec_internal_sg()
1651 qc->err_mask |= AC_ERR_TIMEOUT; in ata_exec_internal_sg()
1656 ata_qc_complete(qc); in ata_exec_internal_sg()
1668 ap->ops->post_internal_cmd(qc); in ata_exec_internal_sg()
1671 if (qc->flags & ATA_QCFLAG_FAILED) { in ata_exec_internal_sg()
1672 if (qc->result_tf.command & (ATA_ERR | ATA_DF)) in ata_exec_internal_sg()
1673 qc->err_mask |= AC_ERR_DEV; in ata_exec_internal_sg()
1675 if (!qc->err_mask) in ata_exec_internal_sg()
1676 qc->err_mask |= AC_ERR_OTHER; in ata_exec_internal_sg()
1678 if (qc->err_mask & ~AC_ERR_OTHER) in ata_exec_internal_sg()
1679 qc->err_mask &= ~AC_ERR_OTHER; in ata_exec_internal_sg()
1680 } else if (qc->tf.command == ATA_CMD_REQ_SENSE_DATA) { in ata_exec_internal_sg()
1681 qc->result_tf.command |= ATA_SENSE; in ata_exec_internal_sg()
1687 *tf = qc->result_tf; in ata_exec_internal_sg()
1688 err_mask = qc->err_mask; in ata_exec_internal_sg()
1690 ata_qc_free(qc); in ata_exec_internal_sg()
4936 int atapi_check_dma(struct ata_queued_cmd *qc) in atapi_check_dma() argument
4938 struct ata_port *ap = qc->ap; in atapi_check_dma()
4943 if (!(qc->dev->horkage & ATA_HORKAGE_ATAPI_MOD16_DMA) && in atapi_check_dma()
4944 unlikely(qc->nbytes & 15)) in atapi_check_dma()
4948 return ap->ops->check_atapi_dma(qc); in atapi_check_dma()
4968 int ata_std_qc_defer(struct ata_queued_cmd *qc) in ata_std_qc_defer() argument
4970 struct ata_link *link = qc->dev->link; in ata_std_qc_defer()
4972 if (ata_is_ncq(qc->tf.protocol)) { in ata_std_qc_defer()
4983 void ata_noop_qc_prep(struct ata_queued_cmd *qc) { } in ata_noop_qc_prep() argument
4998 void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg, in ata_sg_init() argument
5001 qc->sg = sg; in ata_sg_init()
5002 qc->n_elem = n_elem; in ata_sg_init()
5003 qc->cursg = qc->sg; in ata_sg_init()
5017 static void ata_sg_clean(struct ata_queued_cmd *qc) in ata_sg_clean() argument
5019 struct ata_port *ap = qc->ap; in ata_sg_clean()
5020 struct scatterlist *sg = qc->sg; in ata_sg_clean()
5021 int dir = qc->dma_dir; in ata_sg_clean()
5025 VPRINTK("unmapping %u sg elements\n", qc->n_elem); in ata_sg_clean()
5027 if (qc->n_elem) in ata_sg_clean()
5028 dma_unmap_sg(ap->dev, sg, qc->orig_n_elem, dir); in ata_sg_clean()
5030 qc->flags &= ~ATA_QCFLAG_DMAMAP; in ata_sg_clean()
5031 qc->sg = NULL; in ata_sg_clean()
5047 static int ata_sg_setup(struct ata_queued_cmd *qc) in ata_sg_setup() argument
5049 struct ata_port *ap = qc->ap; in ata_sg_setup()
5054 n_elem = dma_map_sg(ap->dev, qc->sg, qc->n_elem, qc->dma_dir); in ata_sg_setup()
5059 qc->orig_n_elem = qc->n_elem; in ata_sg_setup()
5060 qc->n_elem = n_elem; in ata_sg_setup()
5061 qc->flags |= ATA_QCFLAG_DMAMAP; in ata_sg_setup()
5068 static inline void ata_sg_clean(struct ata_queued_cmd *qc) {} in ata_sg_clean() argument
5069 static inline int ata_sg_setup(struct ata_queued_cmd *qc) { return -1; } in ata_sg_setup() argument
5107 struct ata_queued_cmd *qc; in ata_qc_new_init() local
5120 qc = __ata_qc_from_tag(ap, tag); in ata_qc_new_init()
5121 qc->tag = qc->hw_tag = tag; in ata_qc_new_init()
5122 qc->scsicmd = NULL; in ata_qc_new_init()
5123 qc->ap = ap; in ata_qc_new_init()
5124 qc->dev = dev; in ata_qc_new_init()
5126 ata_qc_reinit(qc); in ata_qc_new_init()
5128 return qc; in ata_qc_new_init()
5141 void ata_qc_free(struct ata_queued_cmd *qc) in ata_qc_free() argument
5146 WARN_ON_ONCE(qc == NULL); /* ata_qc_from_tag _might_ return NULL */ in ata_qc_free()
5147 ap = qc->ap; in ata_qc_free()
5149 qc->flags = 0; in ata_qc_free()
5150 tag = qc->tag; in ata_qc_free()
5152 qc->tag = ATA_TAG_POISON; in ata_qc_free()
5158 void __ata_qc_complete(struct ata_queued_cmd *qc) in __ata_qc_complete() argument
5163 WARN_ON_ONCE(qc == NULL); /* ata_qc_from_tag _might_ return NULL */ in __ata_qc_complete()
5164 WARN_ON_ONCE(!(qc->flags & ATA_QCFLAG_ACTIVE)); in __ata_qc_complete()
5165 ap = qc->ap; in __ata_qc_complete()
5166 link = qc->dev->link; in __ata_qc_complete()
5168 if (likely(qc->flags & ATA_QCFLAG_DMAMAP)) in __ata_qc_complete()
5169 ata_sg_clean(qc); in __ata_qc_complete()
5172 if (ata_is_ncq(qc->tf.protocol)) { in __ata_qc_complete()
5173 link->sactive &= ~(1 << qc->hw_tag); in __ata_qc_complete()
5182 if (unlikely(qc->flags & ATA_QCFLAG_CLEAR_EXCL && in __ata_qc_complete()
5190 qc->flags &= ~ATA_QCFLAG_ACTIVE; in __ata_qc_complete()
5191 ap->qc_active &= ~(1ULL << qc->tag); in __ata_qc_complete()
5194 qc->complete_fn(qc); in __ata_qc_complete()
5197 static void fill_result_tf(struct ata_queued_cmd *qc) in fill_result_tf() argument
5199 struct ata_port *ap = qc->ap; in fill_result_tf()
5201 qc->result_tf.flags = qc->tf.flags; in fill_result_tf()
5202 ap->ops->qc_fill_rtf(qc); in fill_result_tf()
5205 static void ata_verify_xfer(struct ata_queued_cmd *qc) in ata_verify_xfer() argument
5207 struct ata_device *dev = qc->dev; in ata_verify_xfer()
5209 if (!ata_is_data(qc->tf.protocol)) in ata_verify_xfer()
5212 if ((dev->mwdma_mask || dev->udma_mask) && ata_is_pio(qc->tf.protocol)) in ata_verify_xfer()
5233 void ata_qc_complete(struct ata_queued_cmd *qc) in ata_qc_complete() argument
5235 struct ata_port *ap = qc->ap; in ata_qc_complete()
5238 ledtrig_disk_activity(!!(qc->tf.flags & ATA_TFLAG_WRITE)); in ata_qc_complete()
5254 struct ata_device *dev = qc->dev; in ata_qc_complete()
5257 if (unlikely(qc->err_mask)) in ata_qc_complete()
5258 qc->flags |= ATA_QCFLAG_FAILED; in ata_qc_complete()
5264 if (unlikely(ata_tag_internal(qc->tag))) { in ata_qc_complete()
5265 fill_result_tf(qc); in ata_qc_complete()
5266 trace_ata_qc_complete_internal(qc); in ata_qc_complete()
5267 __ata_qc_complete(qc); in ata_qc_complete()
5275 if (unlikely(qc->flags & ATA_QCFLAG_FAILED)) { in ata_qc_complete()
5276 fill_result_tf(qc); in ata_qc_complete()
5277 trace_ata_qc_complete_failed(qc); in ata_qc_complete()
5278 ata_qc_schedule_eh(qc); in ata_qc_complete()
5285 if (qc->flags & ATA_QCFLAG_RESULT_TF) in ata_qc_complete()
5286 fill_result_tf(qc); in ata_qc_complete()
5288 trace_ata_qc_complete_done(qc); in ata_qc_complete()
5292 switch (qc->tf.command) { in ata_qc_complete()
5294 if (qc->tf.feature != SETFEATURES_WC_ON && in ata_qc_complete()
5295 qc->tf.feature != SETFEATURES_WC_OFF && in ata_qc_complete()
5296 qc->tf.feature != SETFEATURES_RA_ON && in ata_qc_complete()
5297 qc->tf.feature != SETFEATURES_RA_OFF) in ata_qc_complete()
5313 ata_verify_xfer(qc); in ata_qc_complete()
5315 __ata_qc_complete(qc); in ata_qc_complete()
5317 if (qc->flags & ATA_QCFLAG_EH_SCHEDULED) in ata_qc_complete()
5321 if (qc->err_mask || qc->flags & ATA_QCFLAG_RESULT_TF) in ata_qc_complete()
5322 fill_result_tf(qc); in ata_qc_complete()
5324 __ata_qc_complete(qc); in ata_qc_complete()
5372 struct ata_queued_cmd *qc; in ata_qc_complete_multiple() local
5375 qc = ata_qc_from_tag(ap, tag); in ata_qc_complete_multiple()
5376 if (qc) { in ata_qc_complete_multiple()
5377 ata_qc_complete(qc); in ata_qc_complete_multiple()
5398 void ata_qc_issue(struct ata_queued_cmd *qc) in ata_qc_issue() argument
5400 struct ata_port *ap = qc->ap; in ata_qc_issue()
5401 struct ata_link *link = qc->dev->link; in ata_qc_issue()
5402 u8 prot = qc->tf.protocol; in ata_qc_issue()
5411 WARN_ON_ONCE(link->sactive & (1 << qc->hw_tag)); in ata_qc_issue()
5415 link->sactive |= 1 << qc->hw_tag; in ata_qc_issue()
5420 link->active_tag = qc->tag; in ata_qc_issue()
5423 qc->flags |= ATA_QCFLAG_ACTIVE; in ata_qc_issue()
5424 ap->qc_active |= 1ULL << qc->tag; in ata_qc_issue()
5430 if (ata_is_data(prot) && (!qc->sg || !qc->n_elem || !qc->nbytes)) in ata_qc_issue()
5435 if (ata_sg_setup(qc)) in ata_qc_issue()
5439 if (unlikely(qc->dev->flags & ATA_DFLAG_SLEEPING)) { in ata_qc_issue()
5446 ap->ops->qc_prep(qc); in ata_qc_issue()
5447 trace_ata_qc_issue(qc); in ata_qc_issue()
5448 qc->err_mask |= ap->ops->qc_issue(qc); in ata_qc_issue()
5449 if (unlikely(qc->err_mask)) in ata_qc_issue()
5454 qc->err_mask |= AC_ERR_SYSTEM; in ata_qc_issue()
5456 ata_qc_complete(qc); in ata_qc_issue()
7185 static unsigned int ata_dummy_qc_issue(struct ata_queued_cmd *qc) in ata_dummy_qc_issue() argument