static void igb_rel_hw_control(struct igb_softc *);
static void igb_enable_wol(device_t);
-static void igb_serialize_skipmain(struct igb_softc *);
-static void igb_deserialize_skipmain(struct igb_softc *);
-
static device_method_t igb_methods[] = {
/* Device interface */
DEVMETHOD(device_probe, igb_probe),
igb_timer(void *xsc)
{
struct igb_softc *sc = xsc;
- struct ifnet *ifp = &sc->arpcom.ac_if;
- ifnet_serialize_all(ifp);
+ lwkt_serialize_enter(&sc->main_serialize);
igb_update_link_status(sc);
igb_update_stats_counters(sc);
callout_reset(&sc->timer, hz, igb_timer, sc);
- ifnet_deserialize_all(ifp);
+ lwkt_serialize_exit(&sc->main_serialize);
}
static void
case POLL_AND_CHECK_STATUS:
reg_icr = E1000_READ_REG(&sc->hw, E1000_ICR);
if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
- igb_serialize_skipmain(sc);
sc->hw.mac.get_link_status = 1;
igb_update_link_status(sc);
- igb_deserialize_skipmain(sc);
}
/* FALL THROUGH */
case POLL_ONLY:
/* Link status change */
if (icr & E1000_ICR_LSC) {
- igb_serialize_skipmain(sc);
sc->hw.mac.get_link_status = 1;
igb_update_link_status(sc);
- igb_deserialize_skipmain(sc);
}
}
/* Link status change */
if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
- igb_serialize_skipmain(sc);
sc->hw.mac.get_link_status = 1;
igb_update_link_status(sc);
- igb_deserialize_skipmain(sc);
}
if (reg_icr & E1000_ICR_RXO)
sc->tx_serialize, sc->rx_serialize, slz);
}
-static void
-igb_serialize_skipmain(struct igb_softc *sc)
-{
- lwkt_serialize_array_enter(sc->serializes, sc->serialize_cnt, 1);
-}
-
-static void
-igb_deserialize_skipmain(struct igb_softc *sc)
-{
- lwkt_serialize_array_exit(sc->serializes, sc->serialize_cnt, 1);
-}
-
#ifdef INVARIANTS
static void