Lines Matching refs:qc
228 static int ata_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc,
234 static unsigned int ata_qc_issue_prot(struct ata_queued_cmd *qc);
239 static void ata_qc_issue(struct ata_queued_cmd *qc);
247 static void ata_qc_complete(struct ata_queued_cmd *qc);
248 static void __ata_qc_complete(struct ata_queued_cmd *qc);
249 static void fill_result_tf(struct ata_queued_cmd *qc);
257 static void ata_qc_free(struct ata_queued_cmd *qc);
258 static void ata_pio_sectors(struct ata_queued_cmd *qc);
259 static void ata_pio_sector(struct ata_queued_cmd *qc);
262 static void ata_hsm_qc_complete(struct ata_queued_cmd *qc, int in_wq);
935 static void ata_qc_reinit(struct ata_queued_cmd *qc) in ata_qc_reinit() argument
937 qc->dma_dir = DMA_NONE; in ata_qc_reinit()
938 qc->flags = 0; in ata_qc_reinit()
939 qc->nbytes = qc->extrabytes = qc->curbytes = 0; in ata_qc_reinit()
940 qc->n_elem = 0; in ata_qc_reinit()
941 qc->err_mask = 0; in ata_qc_reinit()
942 qc->sect_size = ATA_SECT_SIZE; in ata_qc_reinit()
943 qc->nbytes = ATA_SECT_SIZE * temp_n_block; in ata_qc_reinit()
945 memset(&qc->tf, 0, sizeof(qc->tf)); in ata_qc_reinit()
946 qc->tf.ctl = 0; in ata_qc_reinit()
947 qc->tf.device = ATA_DEVICE_OBS; in ata_qc_reinit()
949 qc->result_tf.command = ATA_DRDY; in ata_qc_reinit()
950 qc->result_tf.feature = 0; in ata_qc_reinit()
980 struct ata_queued_cmd *qc; in ata_exec_internal() local
1005 qc = __ata_qc_from_tag(ap, tag); in ata_exec_internal()
1006 qc->tag = tag; in ata_exec_internal()
1007 qc->ap = ap; in ata_exec_internal()
1008 qc->dev = dev; in ata_exec_internal()
1010 ata_qc_reinit(qc); in ata_exec_internal()
1021 qc->tf = *tf; in ata_exec_internal()
1023 memcpy(qc->cdb, cdb, ATAPI_CDB_LEN); in ata_exec_internal()
1024 qc->flags |= ATA_QCFLAG_RESULT_TF; in ata_exec_internal()
1025 qc->dma_dir = dma_dir; in ata_exec_internal()
1026 qc->private_data = 0; in ata_exec_internal()
1028 ata_qc_issue(qc); in ata_exec_internal()
1037 qc->err_mask |= AC_ERR_OTHER; in ata_exec_internal()
1038 return qc->err_mask; in ata_exec_internal()
1049 qc->tf.command == ATA_CMD_PIO_READ_EXT){ in ata_exec_internal()
1052 qc->err_mask |= AC_ERR_OTHER; in ata_exec_internal()
1053 return qc->err_mask; in ata_exec_internal()
1056 qc->err_mask |= AC_ERR_OTHER; in ata_exec_internal()
1057 return qc->err_mask; in ata_exec_internal()
1063 qc->err_mask |= AC_ERR_OTHER; in ata_exec_internal()
1064 return qc->err_mask; in ata_exec_internal()
1070 if (qc->flags & ATA_QCFLAG_ACTIVE) { in ata_exec_internal()
1071 qc->err_mask |= AC_ERR_TIMEOUT; in ata_exec_internal()
1076 if (qc->flags & ATA_QCFLAG_FAILED) { in ata_exec_internal()
1077 if (qc->result_tf.command & (ATA_ERR | ATA_DF)) in ata_exec_internal()
1078 qc->err_mask |= AC_ERR_DEV; in ata_exec_internal()
1080 if (!qc->err_mask) in ata_exec_internal()
1081 qc->err_mask |= AC_ERR_OTHER; in ata_exec_internal()
1083 if (qc->err_mask & ~AC_ERR_OTHER) in ata_exec_internal()
1084 qc->err_mask &= ~AC_ERR_OTHER; in ata_exec_internal()
1087 *tf = qc->result_tf; in ata_exec_internal()
1088 err_mask = qc->err_mask; in ata_exec_internal()
1089 ata_qc_free(qc); in ata_exec_internal()
1103 static void ata_qc_issue(struct ata_queued_cmd *qc) in ata_qc_issue() argument
1105 struct ata_port *ap = qc->ap; in ata_qc_issue()
1106 struct ata_link *link = qc->dev->link; in ata_qc_issue()
1107 u8 prot = qc->tf.protocol; in ata_qc_issue()
1112 link->sactive |= 1 << qc->tag; in ata_qc_issue()
1115 link->active_tag = qc->tag; in ata_qc_issue()
1118 qc->flags |= ATA_QCFLAG_ACTIVE; in ata_qc_issue()
1119 ap->qc_active |= 1 << qc->tag; in ata_qc_issue()
1121 if (qc->dev->flags & ATA_DFLAG_SLEEPING) { in ata_qc_issue()
1126 qc->err_mask |= ata_qc_issue_prot(qc); in ata_qc_issue()
1127 if (qc->err_mask) in ata_qc_issue()
1132 ata_qc_complete(qc); in ata_qc_issue()
1135 static unsigned int ata_qc_issue_prot(struct ata_queued_cmd *qc) in ata_qc_issue_prot() argument
1137 struct ata_port *ap = qc->ap; in ata_qc_issue_prot()
1140 switch (qc->tf.protocol) { in ata_qc_issue_prot()
1145 qc->tf.flags |= ATA_TFLAG_POLLING; in ata_qc_issue_prot()
1152 ata_dev_select(ap, qc->dev->devno, 1, 0); in ata_qc_issue_prot()
1154 switch (qc->tf.protocol) { in ata_qc_issue_prot()
1156 if (qc->tf.flags & ATA_TFLAG_POLLING) in ata_qc_issue_prot()
1157 qc->tf.ctl |= ATA_NIEN; in ata_qc_issue_prot()
1159 ata_tf_to_host(ap, &qc->tf); in ata_qc_issue_prot()
1163 if (qc->tf.flags & ATA_TFLAG_POLLING) in ata_qc_issue_prot()
1164 ata_pio_queue_task(ap, qc, 0); in ata_qc_issue_prot()
1253 struct ata_queued_cmd *qc = ap->port_task_data; in ata_pio_task() local
1270 ata_pio_queue_task(ap, qc, ATA_SHORT_PAUSE); in ata_pio_task()
1275 poll_next = ata_hsm_move(ap, qc, status, 1); in ata_pio_task()
1284 static int ata_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc, in ata_hsm_move() argument
1292 poll_next = (qc->tf.flags & ATA_TFLAG_POLLING); in ata_hsm_move()
1296 qc->err_mask |= AC_ERR_DEV; in ata_hsm_move()
1298 qc->err_mask |= AC_ERR_HSM; in ata_hsm_move()
1311 if (!(qc->dev->horkage & ATA_HORKAGE_STUCK_ERR)) { in ata_hsm_move()
1314 qc->err_mask |= AC_ERR_HSM; in ata_hsm_move()
1320 if (qc->tf.protocol == ATA_PROT_PIO) { in ata_hsm_move()
1329 ata_pio_sectors(qc); in ata_hsm_move()
1338 qc->err_mask |= AC_ERR_DEV; in ata_hsm_move()
1344 qc->err_mask |= AC_ERR_HSM | AC_ERR_NODEV_HINT; in ata_hsm_move()
1361 qc->err_mask |= AC_ERR_DEV; in ata_hsm_move()
1363 if (!(qc->tf.flags & ATA_TFLAG_WRITE)) { in ata_hsm_move()
1364 ata_pio_sectors(qc); in ata_hsm_move()
1369 qc->err_mask |= AC_ERR_HSM; in ata_hsm_move()
1379 ata_pio_sectors(qc); in ata_hsm_move()
1381 (!(qc->tf.flags & ATA_TFLAG_WRITE))) { in ata_hsm_move()
1391 qc->err_mask |= __ac_err_mask(status); in ata_hsm_move()
1398 ata_hsm_qc_complete(qc, in_wq); in ata_hsm_move()
1409 ata_hsm_qc_complete(qc, in_wq); in ata_hsm_move()
1420 static void ata_pio_sectors(struct ata_queued_cmd *qc) in ata_pio_sectors() argument
1424 qc->pdata = ap->pdata; in ata_pio_sectors()
1426 ata_pio_sector(qc); in ata_pio_sectors()
1428 readb(qc->ap->ioaddr.altstatus_addr); in ata_pio_sectors()
1432 static void ata_pio_sector(struct ata_queued_cmd *qc) in ata_pio_sector() argument
1434 int do_write = (qc->tf.flags & ATA_TFLAG_WRITE); in ata_pio_sector()
1435 struct ata_port *ap = qc->ap; in ata_pio_sector()
1440 if (qc->curbytes == qc->nbytes - qc->sect_size) in ata_pio_sector()
1443 offset = qc->curbytes; in ata_pio_sector()
1445 switch (qc->tf.command) { in ata_pio_sector()
1453 buf = qc->pdata + offset; in ata_pio_sector()
1459 ata_mmio_data_xfer(qc->dev, buf, qc->sect_size, do_write); in ata_pio_sector()
1461 qc->curbytes += qc->sect_size; in ata_pio_sector()
1497 static void ata_hsm_qc_complete(struct ata_queued_cmd *qc, int in_wq) in ata_hsm_qc_complete() argument
1499 struct ata_port *ap = qc->ap; in ata_hsm_qc_complete()
1505 qc = &ap->qcmd[qc->tag]; in ata_hsm_qc_complete()
1506 if (qc) { in ata_hsm_qc_complete()
1507 if (!(qc->err_mask & AC_ERR_HSM)) { in ata_hsm_qc_complete()
1509 ata_qc_complete(qc); in ata_hsm_qc_complete()
1515 if (!(qc->err_mask & AC_ERR_HSM)) { in ata_hsm_qc_complete()
1516 ata_qc_complete(qc); in ata_hsm_qc_complete()
1544 static void ata_qc_complete(struct ata_queued_cmd *qc) in ata_qc_complete() argument
1546 struct ata_device *dev = qc->dev; in ata_qc_complete()
1547 if (qc->err_mask) in ata_qc_complete()
1548 qc->flags |= ATA_QCFLAG_FAILED; in ata_qc_complete()
1550 if (qc->flags & ATA_QCFLAG_FAILED) { in ata_qc_complete()
1551 if (!ata_tag_internal(qc->tag)) { in ata_qc_complete()
1552 fill_result_tf(qc); in ata_qc_complete()
1556 if (qc->flags & ATA_QCFLAG_RESULT_TF) in ata_qc_complete()
1557 fill_result_tf(qc); in ata_qc_complete()
1562 switch (qc->tf.command) { in ata_qc_complete()
1564 if (qc->tf.feature != SETFEATURES_WC_ON && in ata_qc_complete()
1565 qc->tf.feature != SETFEATURES_WC_OFF) in ata_qc_complete()
1576 __ata_qc_complete(qc); in ata_qc_complete()
1579 static void fill_result_tf(struct ata_queued_cmd *qc) in fill_result_tf() argument
1581 struct ata_port *ap = qc->ap; in fill_result_tf()
1583 qc->result_tf.flags = qc->tf.flags; in fill_result_tf()
1584 ata_tf_read(ap, &qc->result_tf); in fill_result_tf()
1617 static void __ata_qc_complete(struct ata_queued_cmd *qc) in __ata_qc_complete() argument
1619 struct ata_port *ap = qc->ap; in __ata_qc_complete()
1620 struct ata_link *link = qc->dev->link; in __ata_qc_complete()
1625 if (qc->flags & ATA_QCFLAG_CLEAR_EXCL && ap->excl_link == link) in __ata_qc_complete()
1628 qc->flags &= ~ATA_QCFLAG_ACTIVE; in __ata_qc_complete()
1629 ap->qc_active &= ~(1 << qc->tag); in __ata_qc_complete()
1632 static void ata_qc_free(struct ata_queued_cmd *qc) in ata_qc_free() argument
1634 struct ata_port *ap = qc->ap; in ata_qc_free()
1636 qc->flags = 0; in ata_qc_free()
1637 tag = qc->tag; in ata_qc_free()
1639 qc->tag = ATA_TAG_POISON; in ata_qc_free()