View | Details | Raw Unified | Return to bug 229260
Collapse All | Expand All

(-)linux-2.6.22/drivers/ata/libata-core.c (+18 lines)
Lines 3836-3841 static const struct ata_blacklist_entry Link Here
3836
3836
3837
	/* Weird ATAPI devices */
3837
	/* Weird ATAPI devices */
3838
	{ "TORiSAN DVD-ROM DRD-N216", NULL,	ATA_HORKAGE_MAX_SEC_128 },
3838
	{ "TORiSAN DVD-ROM DRD-N216", NULL,	ATA_HORKAGE_MAX_SEC_128 },
3839
	{ "TSSTcorpCD/DVDW SH-S162L", NULL,	ATA_HORKAGE_DMA_RW_ONLY },
3839
3840
3840
	/* Devices we expect to fail diagnostics */
3841
	/* Devices we expect to fail diagnostics */
3841
3842
Lines 4252-4257 int ata_check_atapi_dma(struct ata_queue Link Here
4252
{
4253
{
4253
	struct ata_port *ap = qc->ap;
4254
	struct ata_port *ap = qc->ap;
4254
4255
4256
	/* some drives can only do ATAPI DMA on read/write */
4257
	if (unlikely(qc->dev->horkage & ATA_HORKAGE_DMA_RW_ONLY)) {
4258
		switch (qc->cdb[0]) {
4259
		case READ_10:
4260
		case WRITE_10:
4261
		case READ_12:
4262
		case WRITE_12:
4263
		case READ_6:
4264
		case WRITE_6:
4265
			/* atapi dma maybe ok */
4266
			break;
4267
		default:
4268
			/* turn off atapi dma */
4269
			return 1;
4270
		}
4271
	}
4272
4255
	/* Don't allow DMA if it isn't multiple of 16 bytes.  Quite a
4273
	/* Don't allow DMA if it isn't multiple of 16 bytes.  Quite a
4256
	 * few ATAPI devices choke on such DMA requests.
4274
	 * few ATAPI devices choke on such DMA requests.
4257
	 */
4275
	 */
(-)linux-2.6.22/include/linux/libata.h (+1 lines)
Lines 327-332 enum { Link Here
327
	ATA_HORKAGE_MAX_SEC_128	= (1 << 3),	/* Limit max sects to 128 */
327
	ATA_HORKAGE_MAX_SEC_128	= (1 << 3),	/* Limit max sects to 128 */
328
	ATA_HORKAGE_SKIP_PM	= (1 << 4),	/* Skip PM operations */
328
	ATA_HORKAGE_SKIP_PM	= (1 << 4),	/* Skip PM operations */
329
	ATA_HORKAGE_BROKEN_HPA	= (1 << 5),	/* Broken HPA */
329
	ATA_HORKAGE_BROKEN_HPA	= (1 << 5),	/* Broken HPA */
330
	ATA_HORKAGE_DMA_RW_ONLY	= (1 << 6),	/* ATAPI DMA for RW only */
330
};
331
};
331
332
332
enum hsm_task_states {
333
enum hsm_task_states {

Return to bug 229260