|
Lines 2046-2055
int ata_dev_configure(struct ata_device *dev)
Link Here
|
| 2046 |
dev->max_sectors = min_t(unsigned int, ATA_MAX_SECTORS_128, |
2046 |
dev->max_sectors = min_t(unsigned int, ATA_MAX_SECTORS_128, |
| 2047 |
dev->max_sectors); |
2047 |
dev->max_sectors); |
| 2048 |
|
2048 |
|
| 2049 |
/* limit ATAPI DMA to R/W commands only */ |
|
|
| 2050 |
if (ata_device_blacklisted(dev) & ATA_HORKAGE_DMA_RW_ONLY) |
| 2051 |
dev->horkage |= ATA_HORKAGE_DMA_RW_ONLY; |
| 2052 |
|
| 2053 |
if (ap->ops->dev_config) |
2049 |
if (ap->ops->dev_config) |
| 2054 |
ap->ops->dev_config(dev); |
2050 |
ap->ops->dev_config(dev); |
| 2055 |
|
2051 |
|
|
Lines 3780-3787
static const struct ata_blacklist_entry ata_device_blacklist [] = {
Link Here
|
| 3780 |
{ "IOMEGA ZIP 250 ATAPI", NULL, ATA_HORKAGE_NODMA }, /* temporary fix */ |
3776 |
{ "IOMEGA ZIP 250 ATAPI", NULL, ATA_HORKAGE_NODMA }, /* temporary fix */ |
| 3781 |
|
3777 |
|
| 3782 |
/* Weird ATAPI devices */ |
3778 |
/* Weird ATAPI devices */ |
| 3783 |
{ "TORiSAN DVD-ROM DRD-N216", NULL, ATA_HORKAGE_MAX_SEC_128 | |
3779 |
{ "TORiSAN DVD-ROM DRD-N216", NULL, ATA_HORKAGE_MAX_SEC_128 }, |
| 3784 |
ATA_HORKAGE_DMA_RW_ONLY }, |
|
|
| 3785 |
|
3780 |
|
| 3786 |
/* Devices we expect to fail diagnostics */ |
3781 |
/* Devices we expect to fail diagnostics */ |
| 3787 |
|
3782 |
|
|
Lines 4107-4112
static void ata_fill_sg(struct ata_queued_cmd *qc)
Link Here
|
| 4107 |
if (idx) |
4102 |
if (idx) |
| 4108 |
ap->prd[idx - 1].flags_len |= cpu_to_le32(ATA_PRD_EOT); |
4103 |
ap->prd[idx - 1].flags_len |= cpu_to_le32(ATA_PRD_EOT); |
| 4109 |
} |
4104 |
} |
|
|
4105 |
|
| 4110 |
/** |
4106 |
/** |
| 4111 |
* ata_check_atapi_dma - Check whether ATAPI DMA can be supported |
4107 |
* ata_check_atapi_dma - Check whether ATAPI DMA can be supported |
| 4112 |
* @qc: Metadata associated with taskfile to check |
4108 |
* @qc: Metadata associated with taskfile to check |
|
Lines 4124-4156
static void ata_fill_sg(struct ata_queued_cmd *qc)
Link Here
|
| 4124 |
int ata_check_atapi_dma(struct ata_queued_cmd *qc) |
4120 |
int ata_check_atapi_dma(struct ata_queued_cmd *qc) |
| 4125 |
{ |
4121 |
{ |
| 4126 |
struct ata_port *ap = qc->ap; |
4122 |
struct ata_port *ap = qc->ap; |
| 4127 |
int rc = 0; /* Assume ATAPI DMA is OK by default */ |
4123 |
|
| 4128 |
|
4124 |
/* Don't allow DMA if it isn't multiple of 16 bytes. Quite a |
| 4129 |
/* some drives can only do ATAPI DMA on read/write */ |
4125 |
* few ATAPI devices choke on such DMA requests. |
| 4130 |
if (unlikely(qc->dev->horkage & ATA_HORKAGE_DMA_RW_ONLY)) { |
4126 |
*/ |
| 4131 |
struct scsi_cmnd *cmd = qc->scsicmd; |
4127 |
if (unlikely(qc->nbytes & 15)) |
| 4132 |
u8 *scsicmd = cmd->cmnd; |
4128 |
return 1; |
| 4133 |
|
|
|
| 4134 |
switch (scsicmd[0]) { |
| 4135 |
case READ_10: |
| 4136 |
case WRITE_10: |
| 4137 |
case READ_12: |
| 4138 |
case WRITE_12: |
| 4139 |
case READ_6: |
| 4140 |
case WRITE_6: |
| 4141 |
/* atapi dma maybe ok */ |
| 4142 |
break; |
| 4143 |
default: |
| 4144 |
/* turn off atapi dma */ |
| 4145 |
return 1; |
| 4146 |
} |
| 4147 |
} |
| 4148 |
|
4129 |
|
| 4149 |
if (ap->ops->check_atapi_dma) |
4130 |
if (ap->ops->check_atapi_dma) |
| 4150 |
rc = ap->ops->check_atapi_dma(qc); |
4131 |
return ap->ops->check_atapi_dma(qc); |
| 4151 |
|
4132 |
|
| 4152 |
return rc; |
4133 |
return 0; |
| 4153 |
} |
4134 |
} |
|
|
4135 |
|
| 4154 |
/** |
4136 |
/** |
| 4155 |
* ata_qc_prep - Prepare taskfile for submission |
4137 |
* ata_qc_prep - Prepare taskfile for submission |
| 4156 |
* @qc: Metadata associated with taskfile to be prepared |
4138 |
* @qc: Metadata associated with taskfile to be prepared |