static void ed_pccard_tick(struct ed_softc *sc) { struct mii_data *mii; int media = 0; ED_ASSERT_LOCKED(sc); if (sc->miibus != NULL) { mii = device_get_softc(sc->miibus); media = mii->mii_media_status; mii_tick(mii); if (mii->mii_media_status & IFM_ACTIVE && media != mii->mii_media_status) { if (sc->chip_type == ED_CHIP_TYPE_DL10022) { ed_asic_outb(sc, ED_DL10022_DIAG, (mii->mii_media_active & IFM_FDX) ? ED_DL10022_COLLISON_DIS : 0); #ifdef notyet } else if (sc->chip_type == ED_CHIP_TYPE_DL10019) { write_asic(sc, ED_DL10019_MAGIC, (mii->mii_media_active & IFM_FDX) ? DL19FDUPLX : 0); #endif } } } }
/* * octeon_eth_tick_misc * * => collect statistics * => check link status * => called at softclock */ void octeon_eth_tick_misc(void *arg) { struct octeon_eth_softc *sc = arg; struct ifnet *ifp; u_quad_t iqdrops, delta; int s; s = splnet(); ifp = &sc->sc_arpcom.ac_if; iqdrops = ifp->if_iqdrops; cn30xxgmx_stats(sc->sc_gmx_port); #ifdef OCTEON_ETH_DEBUG delta = ifp->if_iqdrops - iqdrops; printf("%s: %qu packets dropped at GMX FIFO\n", ifp->if_xname, delta); #endif cn30xxpip_stats(sc->sc_pip, ifp, sc->sc_port); delta = ifp->if_iqdrops - iqdrops; #ifdef OCTEON_ETH_DEBUG printf("%s: %qu packets dropped at PIP + GMX FIFO\n", ifp->if_xname, delta); #endif mii_tick(&sc->sc_mii); splx(s); timeout_add_sec(&sc->sc_tick_misc_ch, 1); }
void mec_tick(void *arg) { struct mec_softc *sc = arg; int s; s = splnet(); mii_tick(&sc->sc_mii); splx(s); timeout_add(&sc->sc_tick_ch, hz); }
/* One second timer, checks link status */ void bce_tick(void *v) { struct bce_softc *sc = v; int s; s = splnet(); mii_tick(&sc->bce_mii); splx(s); timeout_add(&sc->bce_timeout, hz); }
static void kr_tick(void *xsc) { struct kr_softc *sc = xsc; struct mii_data *mii; KR_LOCK_ASSERT(sc); mii = device_get_softc(sc->kr_miibus); mii_tick(mii); callout_reset(&sc->kr_stat_callout, hz, kr_tick, sc); }
void nep_tick(void *arg) { struct nep_softc *sc = arg; int s; s = splnet(); mii_tick(&sc->sc_mii); splx(s); timeout_add_sec(&sc->sc_tick_ch, 1); }
void bmac_mii_tick(void *v) { struct bmac_softc *sc = v; int s; s = splnet(); mii_tick(&sc->sc_mii); splx(s); timeout_add_sec(&sc->sc_tick_ch, 1); }
void cpsw_tick(void *arg) { struct cpsw_softc *sc = arg; int s; s = splnet(); mii_tick(&sc->sc_mii); splx(s); timeout_add_sec(&sc->sc_tick, 1); }
/* * octeon_eth_tick_misc * * => collect statistics * => check link status * => called at softclock */ void octeon_eth_tick_misc(void *arg) { struct octeon_eth_softc *sc = arg; struct ifnet *ifp; u_quad_t iqdrops, delta; int s; s = splnet(); ifp = &sc->sc_arpcom.ac_if; iqdrops = ifp->if_iqdrops; cn30xxgmx_stats(sc->sc_gmx_port); #ifdef OCTEON_ETH_DEBUG delta = ifp->if_iqdrops - iqdrops; printf("%s: %qu packets dropped at GMX FIFO\n", ifp->if_xname, delta); #endif cn30xxpip_stats(sc->sc_pip, ifp, sc->sc_port); delta = ifp->if_iqdrops - iqdrops; #ifdef OCTEON_ETH_DEBUG printf("%s: %qu packets dropped at PIP + GMX FIFO\n", ifp->if_xname, delta); #endif mii_tick(&sc->sc_mii); #ifdef OCTEON_ETH_FIXUP_ODD_NIBBLE_DYNAMIC if (sc->sc_gmx_port->sc_proc_nibble_by_soft && sc->sc_gmx_port->sc_even_nibble_cnt > PROC_NIBBLE_SOFT_THRESHOLD) { #ifdef OCTEON_ETH_DEBUG log(LOG_DEBUG, "%s: even nibble preamble count %d\n", sc->sc_dev.dv_xname, sc->sc_gmx_port->sc_even_nibble_cnt); #endif if (OCTEON_ETH_FIXUP_ODD_NIBBLE_MODEL_P(sc) && OCTEON_ETH_FIXUP_ODD_NIBBLE_DYNAMIC_SPEED_P(sc->sc_gmx_port, ifp)) { log(LOG_NOTICE, "%s: the preamble processing switched to hardware\n", sc->sc_dev.dv_xname); } sc->sc_gmx_port->sc_proc_nibble_by_soft = 0; octeon_eth_mii_statchg((struct device *)sc); sc->sc_gmx_port->sc_even_nibble_cnt = 0; } #endif splx(s); timeout_add_sec(&sc->sc_tick_misc_ch, 1); }
static void dtsec_if_tick(void *arg) { struct dtsec_softc *sc; sc = arg; /* TODO */ DTSEC_LOCK(sc); mii_tick(sc->sc_mii); callout_reset(&sc->sc_tick_callout, hz, dtsec_if_tick, sc); DTSEC_UNLOCK(sc); }
Static void url_tick_task(void *xsc) { struct url_softc *sc = xsc; struct ifnet *ifp; struct mii_data *mii; int s; if (sc == NULL) return; DPRINTFN(0xff, ("%s: %s: enter\n", USBDEVNAME(sc->sc_dev), __func__)); if (sc->sc_dying) return; ifp = GET_IFP(sc); mii = GET_MII(sc); if (mii == NULL) return; s = splnet(); mii_tick(mii); if (!sc->sc_link) { mii_pollstat(mii); if (mii->mii_media_status & IFM_ACTIVE && IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE) { DPRINTF(("%s: %s: got link\n", USBDEVNAME(sc->sc_dev), __func__)); sc->sc_link++; if (IFQ_IS_EMPTY(&ifp->if_snd) == 0) url_start(ifp); } } usb_callout(sc->sc_stat_ch, hz, url_tick, sc); splx(s); }
void cas_tick(void *arg) { struct cas_softc *sc = arg; struct ifnet *ifp = &sc->sc_arpcom.ac_if; bus_space_tag_t t = sc->sc_memt; bus_space_handle_t mac = sc->sc_memh; int s; u_int32_t v; /* unload collisions counters */ v = bus_space_read_4(t, mac, CAS_MAC_EXCESS_COLL_CNT) + bus_space_read_4(t, mac, CAS_MAC_LATE_COLL_CNT); ifp->if_collisions += v + bus_space_read_4(t, mac, CAS_MAC_NORM_COLL_CNT) + bus_space_read_4(t, mac, CAS_MAC_FIRST_COLL_CNT); ifp->if_oerrors += v; /* read error counters */ ifp->if_ierrors += bus_space_read_4(t, mac, CAS_MAC_RX_LEN_ERR_CNT) + bus_space_read_4(t, mac, CAS_MAC_RX_ALIGN_ERR) + bus_space_read_4(t, mac, CAS_MAC_RX_CRC_ERR_CNT) + bus_space_read_4(t, mac, CAS_MAC_RX_CODE_VIOL); /* clear the hardware counters */ bus_space_write_4(t, mac, CAS_MAC_NORM_COLL_CNT, 0); bus_space_write_4(t, mac, CAS_MAC_FIRST_COLL_CNT, 0); bus_space_write_4(t, mac, CAS_MAC_EXCESS_COLL_CNT, 0); bus_space_write_4(t, mac, CAS_MAC_LATE_COLL_CNT, 0); bus_space_write_4(t, mac, CAS_MAC_RX_LEN_ERR_CNT, 0); bus_space_write_4(t, mac, CAS_MAC_RX_ALIGN_ERR, 0); bus_space_write_4(t, mac, CAS_MAC_RX_CRC_ERR_CNT, 0); bus_space_write_4(t, mac, CAS_MAC_RX_CODE_VIOL, 0); s = splnet(); mii_tick(&sc->sc_mii); splx(s); timeout_add(&sc->sc_tick_ch, hz); }
static void ffec_tick(void *arg) { struct ffec_softc *sc; struct ifnet *ifp; int link_was_up; sc = arg; FFEC_ASSERT_LOCKED(sc); ifp = sc->ifp; if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) return; /* * Typical tx watchdog. If this fires it indicates that we enqueued * packets for output and never got a txdone interrupt for them. Maybe * it's a missed interrupt somehow, just pretend we got one. */ if (sc->tx_watchdog_count > 0) { if (--sc->tx_watchdog_count == 0) { ffec_txfinish_locked(sc); } } /* Gather stats from hardware counters. */ ffec_harvest_stats(sc); /* Check the media status. */ link_was_up = sc->link_is_up; mii_tick(sc->mii_softc); if (sc->link_is_up && !link_was_up) ffec_txstart_locked(sc); /* Schedule another check one second from now. */ callout_reset(&sc->ffec_callout, hz, ffec_tick, sc); }
static void awg_tick(void *softc) { struct awg_softc *sc; struct mii_data *mii; if_t ifp; int link; sc = softc; ifp = sc->ifp; mii = device_get_softc(sc->miibus); AWG_ASSERT_LOCKED(sc); if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0) return; link = sc->link; mii_tick(mii); if (sc->link && !link) awg_start_locked(sc); callout_reset(&sc->stat_ch, hz, awg_tick, sc); }