Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/my/if_my.c
Show First 20 Lines • Show All 1,258 Lines • ▼ Show 20 Lines | if (sc->my_cdata.my_tx_head == NULL) { | ||||
} | } | ||||
} | } | ||||
return; | return; | ||||
} | } | ||||
static void | static void | ||||
my_intr(void *arg) | my_intr(void *arg) | ||||
{ | { | ||||
struct epoch_tracker et; | |||||
struct my_softc *sc; | struct my_softc *sc; | ||||
struct ifnet *ifp; | struct ifnet *ifp; | ||||
u_int32_t status; | u_int32_t status; | ||||
sc = arg; | sc = arg; | ||||
MY_LOCK(sc); | MY_LOCK(sc); | ||||
ifp = sc->my_ifp; | ifp = sc->my_ifp; | ||||
if (!(ifp->if_flags & IFF_UP)) { | if (!(ifp->if_flags & IFF_UP)) { | ||||
MY_UNLOCK(sc); | MY_UNLOCK(sc); | ||||
return; | return; | ||||
} | } | ||||
/* Disable interrupts. */ | /* Disable interrupts. */ | ||||
CSR_WRITE_4(sc, MY_IMR, 0x00000000); | CSR_WRITE_4(sc, MY_IMR, 0x00000000); | ||||
for (;;) { | for (;;) { | ||||
status = CSR_READ_4(sc, MY_ISR); | status = CSR_READ_4(sc, MY_ISR); | ||||
status &= MY_INTRS; | status &= MY_INTRS; | ||||
if (status) | if (status) | ||||
CSR_WRITE_4(sc, MY_ISR, status); | CSR_WRITE_4(sc, MY_ISR, status); | ||||
else | else | ||||
break; | break; | ||||
if (status & MY_RI) /* receive interrupt */ | if (status & MY_RI) { /* receive interrupt */ | ||||
NET_EPOCH_ENTER(et); | |||||
my_rxeof(sc); | my_rxeof(sc); | ||||
NET_EPOCH_EXIT(et); | |||||
} | |||||
if ((status & MY_RBU) || (status & MY_RxErr)) { | if ((status & MY_RBU) || (status & MY_RxErr)) { | ||||
/* rx buffer unavailable or rx error */ | /* rx buffer unavailable or rx error */ | ||||
if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); | if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); | ||||
#ifdef foo | #ifdef foo | ||||
my_stop(sc); | my_stop(sc); | ||||
my_reset(sc); | my_reset(sc); | ||||
my_init_locked(sc); | my_init_locked(sc); | ||||
▲ Show 20 Lines • Show All 475 Lines • Show Last 20 Lines |