summaryrefslogtreecommitdiffstats
path: root/sys
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 /sys
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.
Diffstat (limited to 'sys')
-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