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

(-)a/drivers/ata/libata-core.c (-5 / +20 lines)
Lines 52-57 Link Here
52
#include <scsi/scsi.h>
52
#include <scsi/scsi.h>
53
#include <scsi/scsi_cmnd.h>
53
#include <scsi/scsi_cmnd.h>
54
#include <scsi/scsi_host.h>
54
#include <scsi/scsi_host.h>
55
#include <linux/cdrom.h>
55
#include <linux/libata.h>
56
#include <linux/libata.h>
56
#include <asm/io.h>
57
#include <asm/io.h>
57
#include <asm/semaphore.h>
58
#include <asm/semaphore.h>
Lines 4446-4457 static void ata_fill_sg_dumb(struct ata_queued_cmd *qc) Link Here
4446
int ata_check_atapi_dma(struct ata_queued_cmd *qc)
4447
int ata_check_atapi_dma(struct ata_queued_cmd *qc)
4447
{
4448
{
4448
	struct ata_port *ap = qc->ap;
4449
	struct ata_port *ap = qc->ap;
4449
4450
	struct scsi_cmnd *cmd = qc->scsicmd;
4450
	/* Don't allow DMA if it isn't multiple of 16 bytes.  Quite a
4451
	u8 *cdb = cmd->cmnd;
4451
	 * few ATAPI devices choke on such DMA requests.
4452
4452
	 */
4453
	/* some drives can only do ATAPI DMA on read/write */
4453
	if (unlikely(qc->nbytes & 15))
4454
	switch (cdb[0]) {
4455
	case READ_10:
4456
	case WRITE_10:
4457
	case READ_12:
4458
	case WRITE_12:
4459
	case READ_6:
4460
	case WRITE_6:
4461
	case GPCMD_READ_CD:
4462
	case GPCMD_READ_CD_MSF:
4463
	case GPCMD_WRITE_AND_VERIFY_10:
4464
		/* atapi dma maybe ok */
4465
		break;
4466
	default:
4467
		/* turn off atapi dma */
4454
		return 1;
4468
		return 1;
4469
	}
4455
4470
4456
	if (ap->ops->check_atapi_dma)
4471
	if (ap->ops->check_atapi_dma)
4457
		return ap->ops->check_atapi_dma(qc);
4472
		return ap->ops->check_atapi_dma(qc);

Return to bug 278533