Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/cas/if_cas.c
Show First 20 Lines • Show All 1,607 Lines • ▼ Show 20 Lines | CTR3(KTR_CAS, "%s: %s: watchdog %d", | ||||
device_get_name(sc->sc_dev), __func__, sc->sc_wdog_timer); | device_get_name(sc->sc_dev), __func__, sc->sc_wdog_timer); | ||||
#endif | #endif | ||||
} | } | ||||
static void | static void | ||||
cas_rint_timeout(void *arg) | cas_rint_timeout(void *arg) | ||||
{ | { | ||||
struct cas_softc *sc = arg; | struct cas_softc *sc = arg; | ||||
struct epoch_tracker et; | |||||
CAS_LOCK_ASSERT(sc, MA_OWNED); | CAS_LOCK_ASSERT(sc, MA_OWNED); | ||||
NET_EPOCH_ENTER(et); | |||||
cas_rint(sc); | cas_rint(sc); | ||||
NET_EPOCH_EXIT(et); | |||||
} | } | ||||
static void | static void | ||||
cas_rint(struct cas_softc *sc) | cas_rint(struct cas_softc *sc) | ||||
{ | { | ||||
struct cas_rxdsoft *rxds, *rxds2; | struct cas_rxdsoft *rxds, *rxds2; | ||||
struct ifnet *ifp = sc->sc_ifp; | struct ifnet *ifp = sc->sc_ifp; | ||||
struct mbuf *m, *m2; | struct mbuf *m, *m2; | ||||
▲ Show 20 Lines • Show All 331 Lines • ▼ Show 20 Lines | cas_intr(void *v) | ||||
taskqueue_enqueue(sc->sc_tq, &sc->sc_intr_task); | taskqueue_enqueue(sc->sc_tq, &sc->sc_intr_task); | ||||
return (FILTER_HANDLED); | return (FILTER_HANDLED); | ||||
} | } | ||||
static void | static void | ||||
cas_intr_task(void *arg, int pending __unused) | cas_intr_task(void *arg, int pending __unused) | ||||
{ | { | ||||
struct epoch_tracker et; | |||||
struct cas_softc *sc = arg; | struct cas_softc *sc = arg; | ||||
struct ifnet *ifp = sc->sc_ifp; | struct ifnet *ifp = sc->sc_ifp; | ||||
uint32_t status, status2; | uint32_t status, status2; | ||||
CAS_LOCK_ASSERT(sc, MA_NOTOWNED); | CAS_LOCK_ASSERT(sc, MA_NOTOWNED); | ||||
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) | if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) | ||||
return; | return; | ||||
▲ Show 20 Lines • Show All 63 Lines • ▼ Show 20 Lines | if (__predict_false(status & CAS_INTR_RX_MAC_INT)) { | ||||
else if ((status2 & ~CAS_MAC_RX_FRAME_RCVD) != 0) | else if ((status2 & ~CAS_MAC_RX_FRAME_RCVD) != 0) | ||||
device_printf(sc->sc_dev, | device_printf(sc->sc_dev, | ||||
"MAC RX fault, status %x\n", status2); | "MAC RX fault, status %x\n", status2); | ||||
} | } | ||||
if ((status & | if ((status & | ||||
(CAS_INTR_RX_DONE | CAS_INTR_RX_BUF_NA | CAS_INTR_RX_COMP_FULL | | (CAS_INTR_RX_DONE | CAS_INTR_RX_BUF_NA | CAS_INTR_RX_COMP_FULL | | ||||
CAS_INTR_RX_BUF_AEMPTY | CAS_INTR_RX_COMP_AFULL)) != 0) { | CAS_INTR_RX_BUF_AEMPTY | CAS_INTR_RX_COMP_AFULL)) != 0) { | ||||
NET_EPOCH_ENTER(et); | |||||
cas_rint(sc); | cas_rint(sc); | ||||
NET_EPOCH_EXIT(et); | |||||
#ifdef CAS_DEBUG | #ifdef CAS_DEBUG | ||||
if (__predict_false((status & | if (__predict_false((status & | ||||
(CAS_INTR_RX_BUF_NA | CAS_INTR_RX_COMP_FULL | | (CAS_INTR_RX_BUF_NA | CAS_INTR_RX_COMP_FULL | | ||||
CAS_INTR_RX_BUF_AEMPTY | CAS_INTR_RX_COMP_AFULL)) != 0)) | CAS_INTR_RX_BUF_AEMPTY | CAS_INTR_RX_COMP_AFULL)) != 0)) | ||||
device_printf(sc->sc_dev, | device_printf(sc->sc_dev, | ||||
"RX fault, status %x\n", status); | "RX fault, status %x\n", status); | ||||
#endif | #endif | ||||
} | } | ||||
▲ Show 20 Lines • Show All 867 Lines • Show Last 20 Lines |