Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5f25843f authored by Borislav Petkov's avatar Borislav Petkov Committed by Bartlomiej Zolnierkiewicz
Browse files

ide-atapi: teach ide atapi about drive->waiting_for_dma



In addition, we wait for DRQ to be asserted by repeatedly polling
device status no matter what DRQ type each device implements.

Signed-off-by: default avatarBorislav Petkov <petkovbb@gmail.com>
Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent 392de1d5
Loading
Loading
Loading
Loading
+7 −0
Original line number Original line Diff line number Diff line
@@ -511,6 +511,11 @@ static ide_startstop_t ide_transfer_pc(ide_drive_t *drive)
		return startstop;
		return startstop;
	}
	}


	if (drive->atapi_flags & IDE_AFLAG_DRQ_INTERRUPT) {
		if (drive->dma)
			drive->waiting_for_dma = 1;
	}

	ireason = ide_read_ireason(drive);
	ireason = ide_read_ireason(drive);
	if (drive->media == ide_tape &&
	if (drive->media == ide_tape &&
	    (drive->dev_flags & IDE_DFLAG_SCSI) == 0)
	    (drive->dev_flags & IDE_DFLAG_SCSI) == 0)
@@ -605,6 +610,8 @@ ide_startstop_t ide_issue_pc(ide_drive_t *drive, unsigned int timeout,


	/* Issue the packet command */
	/* Issue the packet command */
	if (drive->atapi_flags & IDE_AFLAG_DRQ_INTERRUPT) {
	if (drive->atapi_flags & IDE_AFLAG_DRQ_INTERRUPT) {
		if (drive->dma)
			drive->waiting_for_dma = 0;
		ide_execute_command(drive, ATA_CMD_PACKET, ide_transfer_pc,
		ide_execute_command(drive, ATA_CMD_PACKET, ide_transfer_pc,
				    timeout, NULL);
				    timeout, NULL);
		return ide_started;
		return ide_started;