|
@@ -2943,6 +2943,14 @@ static int ata_dma_blacklisted(const struct ata_device *dev)
|
|
unsigned int nlen, rlen;
|
|
unsigned int nlen, rlen;
|
|
int i;
|
|
int i;
|
|
|
|
|
|
|
|
+ /* We don't support polling DMA.
|
|
|
|
+ * DMA blacklist those ATAPI devices with CDB-intr (and use PIO)
|
|
|
|
+ * if the LLDD handles only interrupts in the HSM_ST_LAST state.
|
|
|
|
+ */
|
|
|
|
+ if ((dev->ap->flags & ATA_FLAG_PIO_POLLING) &&
|
|
|
|
+ (dev->flags & ATA_DFLAG_CDB_INTR))
|
|
|
|
+ return 1;
|
|
|
|
+
|
|
ata_id_string(dev->id, model_num, ATA_ID_PROD_OFS,
|
|
ata_id_string(dev->id, model_num, ATA_ID_PROD_OFS,
|
|
sizeof(model_num));
|
|
sizeof(model_num));
|
|
ata_id_string(dev->id, model_rev, ATA_ID_FW_REV_OFS,
|
|
ata_id_string(dev->id, model_rev, ATA_ID_FW_REV_OFS,
|
|
@@ -3235,15 +3243,6 @@ int ata_check_atapi_dma(struct ata_queued_cmd *qc)
|
|
if (ap->ops->check_atapi_dma)
|
|
if (ap->ops->check_atapi_dma)
|
|
rc = ap->ops->check_atapi_dma(qc);
|
|
rc = ap->ops->check_atapi_dma(qc);
|
|
|
|
|
|
- /* We don't support polling DMA.
|
|
|
|
- * Use PIO if the LLDD handles only interrupts in
|
|
|
|
- * the HSM_ST_LAST state and the ATAPI device
|
|
|
|
- * generates CDB interrupts.
|
|
|
|
- */
|
|
|
|
- if ((ap->flags & ATA_FLAG_PIO_POLLING) &&
|
|
|
|
- (qc->dev->flags & ATA_DFLAG_CDB_INTR))
|
|
|
|
- rc = 1;
|
|
|
|
-
|
|
|
|
return rc;
|
|
return rc;
|
|
}
|
|
}
|
|
/**
|
|
/**
|
|
@@ -4551,7 +4550,7 @@ unsigned int ata_qc_issue_prot(struct ata_queued_cmd *qc)
|
|
break;
|
|
break;
|
|
case ATA_PROT_ATAPI_DMA:
|
|
case ATA_PROT_ATAPI_DMA:
|
|
if (qc->dev->flags & ATA_DFLAG_CDB_INTR)
|
|
if (qc->dev->flags & ATA_DFLAG_CDB_INTR)
|
|
- /* see ata_check_atapi_dma() */
|
|
|
|
|
|
+ /* see ata_dma_blacklisted() */
|
|
BUG();
|
|
BUG();
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|