Skip to content

Commit

Permalink
ide-cd: wait for DRQ to get set per default
Browse files Browse the repository at this point in the history
... instead of assuming it is set for accelerated DRQ type devices.

Signed-off-by: Borislav Petkov <petkovbb@gmail.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
  • Loading branch information
Borislav Petkov authored and Bartlomiej Zolnierkiewicz committed Jan 6, 2009
1 parent 744a82b commit 7a38f3c
Showing 1 changed file with 7 additions and 14 deletions.
21 changes: 7 additions & 14 deletions drivers/ide/ide-cd.c
Original file line number Diff line number Diff line change
Expand Up @@ -572,24 +572,17 @@ static ide_startstop_t cdrom_transfer_packet_command(ide_drive_t *drive)

ide_debug_log(IDE_DBG_PC, "Call %s\n", __func__);

if (drive->atapi_flags & IDE_AFLAG_DRQ_INTERRUPT) {
/*
* Here we should have been called after receiving an interrupt
* from the device. DRQ should how be set.
*/

/* check for errors */
if (cdrom_decode_status(drive, ATA_DRQ, NULL))
return ide_stopped;
/* we must wait for DRQ to get set */
if (ide_wait_stat(&startstop, drive, ATA_DRQ, ATA_BUSY, WAIT_READY)) {
printk(KERN_ERR "%s: timeout while waiting for DRQ to assert\n",
drive->name);
return startstop;
}

if (drive->atapi_flags & IDE_AFLAG_DRQ_INTERRUPT) {
/* ok, next interrupt will be DMA interrupt */
if (drive->dma)
drive->waiting_for_dma = 1;
} else {
/* otherwise, we must wait for DRQ to get set */
if (ide_wait_stat(&startstop, drive, ATA_DRQ,
ATA_BUSY, WAIT_READY))
return startstop;
}

/* arm the interrupt handler */
Expand Down

0 comments on commit 7a38f3c

Please sign in to comment.