diff options
author | bde <bde@FreeBSD.org> | 1998-07-19 04:22:55 +0000 |
---|---|---|
committer | bde <bde@FreeBSD.org> | 1998-07-19 04:22:55 +0000 |
commit | 39d6cd07510cbf302ddec744ac2c83e4f62e63c8 (patch) | |
tree | 15805b91f1e13757f092ef35d76e4702ee5df92c /sys | |
parent | 769444bdb4af6d54e79fb5d2e3b1fb9764bb1c80 (diff) | |
download | FreeBSD-src-39d6cd07510cbf302ddec744ac2c83e4f62e63c8.zip FreeBSD-src-39d6cd07510cbf302ddec744ac2c83e4f62e63c8.tar.gz |
Stop physical DMA for the non-auto case in isa_dmadone(). This fixes a
small part of a bug suite beginning in the SLICE probes but mostly in the
floppy driver. This is a quick fix: the auto case shouldn't be special;
DMA should also be stopped in isa_dma_release(); isa_dmastop() probably
shouldn't exist; common DMA registers should not be accessed without
locking.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/amd64/isa/isa.c | 4 | ||||
-rw-r--r-- | sys/i386/isa/isa.c | 4 |
2 files changed, 6 insertions, 2 deletions
diff --git a/sys/amd64/isa/isa.c b/sys/amd64/isa/isa.c index 9e67efc..f878655 100644 --- a/sys/amd64/isa/isa.c +++ b/sys/amd64/isa/isa.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)isa.c 7.2 (Berkeley) 5/13/91 - * $Id: isa.c,v 1.111 1998/02/06 12:13:17 eivind Exp $ + * $Id: isa.c,v 1.112 1998/04/17 22:36:36 des Exp $ */ /* @@ -868,6 +868,8 @@ isa_dmadone(int flags, caddr_t addr, int nbytes, int chan) (dma_auto_mode & (1 << chan)) == 0 ) printf("isa_dmadone: channel %d not busy\n", chan); + if ((dma_auto_mode & (1 << chan)) == 0) + outb(chan & 4 ? DMA2_SMSK : DMA1_SMSK, (chan & 3) | 4); if (dma_bounced & (1 << chan)) { /* copy bounce buffer on read */ diff --git a/sys/i386/isa/isa.c b/sys/i386/isa/isa.c index 9e67efc..f878655 100644 --- a/sys/i386/isa/isa.c +++ b/sys/i386/isa/isa.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)isa.c 7.2 (Berkeley) 5/13/91 - * $Id: isa.c,v 1.111 1998/02/06 12:13:17 eivind Exp $ + * $Id: isa.c,v 1.112 1998/04/17 22:36:36 des Exp $ */ /* @@ -868,6 +868,8 @@ isa_dmadone(int flags, caddr_t addr, int nbytes, int chan) (dma_auto_mode & (1 << chan)) == 0 ) printf("isa_dmadone: channel %d not busy\n", chan); + if ((dma_auto_mode & (1 << chan)) == 0) + outb(chan & 4 ? DMA2_SMSK : DMA1_SMSK, (chan & 3) | 4); if (dma_bounced & (1 << chan)) { /* copy bounce buffer on read */ |