summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsos <sos@FreeBSD.org>2006-01-24 12:34:56 +0000
committersos <sos@FreeBSD.org>2006-01-24 12:34:56 +0000
commitcccf088ae774e9039fb260bbfd949014bb44a76e (patch)
tree416b1d717cabca3d4ccd98c05993eb04efe433fc
parentd9cbe01472a3c8e7b2e2261f8c9bfea443a3ef61 (diff)
downloadFreeBSD-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.c3
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;
OpenPOWER on IntegriCloud