diff options
author | sos <sos@FreeBSD.org> | 2006-01-24 12:34:56 +0000 |
---|---|---|
committer | sos <sos@FreeBSD.org> | 2006-01-24 12:34:56 +0000 |
commit | cccf088ae774e9039fb260bbfd949014bb44a76e (patch) | |
tree | 416b1d717cabca3d4ccd98c05993eb04efe433fc | |
parent | d9cbe01472a3c8e7b2e2261f8c9bfea443a3ef61 (diff) | |
download | FreeBSD-src-cccf088ae774e9039fb260bbfd949014bb44a76e.zip FreeBSD-src-cccf088ae774e9039fb260bbfd949014bb44a76e.tar.gz |
Do not test for DMA status on legacy ATA devices. This has the unfortunate
side effect that legacy ATA controllers at irq14 and irq15 cannot share
interrupts with anything else without major problems.
This fixes the ATAPI DMA problems some systems/devices have seen.
-rw-r--r-- | sys/dev/ata/ata-pci.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/dev/ata/ata-pci.c b/sys/dev/ata/ata-pci.c index 535a8cf..896094d 100644 --- a/sys/dev/ata/ata-pci.c +++ b/sys/dev/ata/ata-pci.c @@ -439,7 +439,8 @@ ata_pci_status(device_t dev) { struct ata_channel *ch = device_get_softc(dev); - if (ch->dma && ((ch->flags & ATA_ALWAYS_DMASTAT) || + if (!ata_legacy(device_get_parent(dev)) && + ch->dma && ((ch->flags & ATA_ALWAYS_DMASTAT) || (ch->dma->flags & ATA_DMA_ACTIVE))) { int bmstat = ATA_IDX_INB(ch, ATA_BMSTAT_PORT) & ATA_BMSTAT_MASK; |