diff options
author | Nicolas Souchu <nsouch@FreeBSD.org> | 1999-02-14 12:03:35 +0000 |
---|---|---|
committer | Nicolas Souchu <nsouch@FreeBSD.org> | 1999-02-14 12:03:35 +0000 |
commit | 3ab971c14fe611c8d426161c4fa5bf95c3329036 (patch) | |
tree | 379481070c2b386e3b012f66402d85d8c57639a4 /sys/dev/ppc | |
parent | fdf94d1afe3c05f33e5dc919d603b75ccd9ed37b (diff) | |
download | src-3ab971c14fe611c8d426161c4fa5bf95c3329036.tar.gz src-3ab971c14fe611c8d426161c4fa5bf95c3329036.zip |
Fix interrupt handling with DMA. Bit nFault was tested in the control reg.
instead of the status reg. and check ECP mode before considering nFault.
Notes
Notes:
svn path=/head/; revision=43990
Diffstat (limited to 'sys/dev/ppc')
-rw-r--r-- | sys/dev/ppc/ppc.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/sys/dev/ppc/ppc.c b/sys/dev/ppc/ppc.c index 7301f979e1bc..59f55ca4cfba 100644 --- a/sys/dev/ppc/ppc.c +++ b/sys/dev/ppc/ppc.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: ppc.c,v 1.16 1999/01/30 15:35:38 nsouch Exp $ + * $Id: ppc.c,v 1.17 1999/01/31 11:52:04 nsouch Exp $ * */ #include "ppc.h" @@ -1328,13 +1328,14 @@ static void ppcintr(int unit) { struct ppc_data *ppc = ppcdata[unit]; - char ctr, ecr; + u_char ctr, ecr, str; + str = r_str(ppc); ctr = r_ctr(ppc); ecr = r_ecr(ppc); -#ifdef PPC_DEBUG - printf("!"); +#if PPC_DEBUG > 1 + printf("![%x/%x/%x]", ctr, ecr, str); #endif /* don't use ecp mode with IRQENABLE set */ @@ -1344,7 +1345,11 @@ ppcintr(int unit) return; } - if (ctr & nFAULT) { + /* interrupts are generated by nFault signal + * only in ECP mode */ + if ((str & nFAULT) && (ppc->ppc_mode & PPB_ECP)) { + /* check if ppc driver has programmed the + * nFault interrupt */ if (ppc->ppc_irqstat & PPC_IRQ_nFAULT) { w_ecr(ppc, ecr | PPC_nFAULT_INTR); |