Keep track of what we set the interrupt mask to, rather than reading it from

the chip.
This commit is contained in:
mycroft 2004-07-09 05:08:22 +00:00
parent e3694d0dc1
commit 673c114d25
1 changed files with 8 additions and 7 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: if_bce.c,v 1.4 2004/04/23 16:03:33 joda Exp $ */
/* $NetBSD: if_bce.c,v 1.5 2004/07/09 05:08:22 mycroft Exp $ */
/*
* Copyright (c) 2003 Clifford Wright. All rights reserved.
@ -130,6 +130,7 @@ struct bce_softc {
struct bce_dma_slot *bce_tx_ring; /* transmit ring */
struct bce_chain_data bce_cdata; /* mbufs */
bus_dmamap_t bce_ring_map;
u_int32_t bce_intmask; /* current intr mask */
u_int32_t bce_rxin; /* last rx descriptor seen */
u_int32_t bce_txin; /* last tx descriptor seen */
int bce_txsfree; /* no. tx slots available */
@ -679,7 +680,6 @@ bce_intr(xsc)
struct bce_softc *sc;
struct ifnet *ifp;
u_int32_t intstatus;
u_int32_t intmask;
int wantinit;
int handled = 0;
@ -690,11 +690,9 @@ bce_intr(xsc)
for (wantinit = 0; wantinit == 0;) {
intstatus = bus_space_read_4(sc->bce_btag, sc->bce_bhandle,
BCE_INT_STS);
intmask = bus_space_read_4(sc->bce_btag, sc->bce_bhandle,
BCE_INT_MASK);
/* ignore if not ours, or unsolicited interrupts */
intstatus &= intmask;
intstatus &= sc->bce_intmask;
if (intstatus == 0)
break;
@ -1000,8 +998,10 @@ bce_init(ifp)
}
/* Enable interrupts */
sc->bce_intmask =
I_XI | I_RI | I_XU | I_RO | I_RU | I_DE | I_PD | I_PC | I_TO;
bus_space_write_4(sc->bce_btag, sc->bce_bhandle, BCE_INT_MASK,
I_XI | I_RI | I_XU | I_RO | I_RU | I_DE | I_PD | I_PC | I_TO);
sc->bce_intmask);
/* start the receive dma */
bus_space_write_4(sc->bce_btag, sc->bce_bhandle, BCE_DMA_RXDPTR,
@ -1129,7 +1129,8 @@ bce_stop(ifp, disable)
/* Disable interrupts. */
bus_space_write_4(sc->bce_btag, sc->bce_bhandle, BCE_INT_MASK, 0);
bus_space_read_4(sc->bce_btag, sc->bce_bhandle, BCE_INT_MASK);
sc->bce_intmask = 0;
delay(10);
/* Disable emac */
bus_space_write_4(sc->bce_btag, sc->bce_bhandle, BCE_ENET_CTL, EC_ED);