Clear the DMA pointer reload interrupt bits in the IOASIC_INTR
register to prevent interrups from looping on the Alpha. From Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>.
This commit is contained in:
parent
ec726f07ca
commit
5e275d7012
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: bba.c,v 1.9 2000/07/17 04:37:27 thorpej Exp $ */
|
/* $NetBSD: bba.c,v 1.10 2000/07/17 17:43:16 thorpej Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000 The NetBSD Foundation, Inc.
|
* Copyright (c) 2000 The NetBSD Foundation, Inc.
|
||||||
|
@ -599,6 +599,7 @@ bba_intr(addr)
|
||||||
mask = bus_space_read_4(sc->sc_bst, sc->sc_bsh, IOASIC_INTR);
|
mask = bus_space_read_4(sc->sc_bst, sc->sc_bsh, IOASIC_INTR);
|
||||||
|
|
||||||
if (mask & IOASIC_INTR_ISDN_TXLOAD) {
|
if (mask & IOASIC_INTR_ISDN_TXLOAD) {
|
||||||
|
mask &= ~IOASIC_INTR_ISDN_TXLOAD;
|
||||||
d = &sc->sc_tx_dma_state;
|
d = &sc->sc_tx_dma_state;
|
||||||
d->curseg = (d->curseg+1) % d->dmam->dm_nsegs;
|
d->curseg = (d->curseg+1) % d->dmam->dm_nsegs;
|
||||||
nphys = (tc_addr_t)d->dmam->dm_segs[d->curseg].ds_addr;
|
nphys = (tc_addr_t)d->dmam->dm_segs[d->curseg].ds_addr;
|
||||||
|
@ -608,6 +609,7 @@ bba_intr(addr)
|
||||||
(*d->intr)(d->intr_arg);
|
(*d->intr)(d->intr_arg);
|
||||||
}
|
}
|
||||||
if (mask & IOASIC_INTR_ISDN_RXLOAD) {
|
if (mask & IOASIC_INTR_ISDN_RXLOAD) {
|
||||||
|
mask &= ~IOASIC_INTR_ISDN_RXLOAD;
|
||||||
d = &sc->sc_rx_dma_state;
|
d = &sc->sc_rx_dma_state;
|
||||||
d->curseg = (d->curseg+1) % d->dmam->dm_nsegs;
|
d->curseg = (d->curseg+1) % d->dmam->dm_nsegs;
|
||||||
nphys = (tc_addr_t)d->dmam->dm_segs[d->curseg].ds_addr;
|
nphys = (tc_addr_t)d->dmam->dm_segs[d->curseg].ds_addr;
|
||||||
|
@ -616,6 +618,7 @@ bba_intr(addr)
|
||||||
if (d->intr != NULL)
|
if (d->intr != NULL)
|
||||||
(*d->intr)(d->intr_arg);
|
(*d->intr)(d->intr_arg);
|
||||||
}
|
}
|
||||||
|
bus_space_write_4(sc->sc_bst, sc->sc_bsh, IOASIC_INTR, mask);
|
||||||
|
|
||||||
splx(s);
|
splx(s);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue