diff --git a/sys/dev/et/if_et.c b/sys/dev/et/if_et.c --- a/sys/dev/et/if_et.c +++ b/sys/dev/et/if_et.c @@ -99,14 +99,14 @@ static void et_init_locked(struct et_softc *); static void et_init(void *); -static int et_ioctl(struct ifnet *, u_long, caddr_t); -static void et_start_locked(struct ifnet *); -static void et_start(struct ifnet *); +static int et_ioctl(if_t, u_long, caddr_t); +static void et_start_locked(if_t); +static void et_start(if_t); static int et_watchdog(struct et_softc *); -static int et_ifmedia_upd_locked(struct ifnet *); -static int et_ifmedia_upd(struct ifnet *); -static void et_ifmedia_sts(struct ifnet *, struct ifmediareq *); -static uint64_t et_get_counter(struct ifnet *, ift_counter); +static int et_ifmedia_upd_locked(if_t); +static int et_ifmedia_upd(if_t); +static void et_ifmedia_sts(if_t, struct ifmediareq *); +static uint64_t et_get_counter(if_t, ift_counter); static void et_add_sysctls(struct et_softc *); static int et_sysctl_rx_intr_npkts(SYSCTL_HANDLER_ARGS); @@ -222,7 +222,7 @@ et_attach(device_t dev) { struct et_softc *sc; - struct ifnet *ifp; + if_t ifp; uint8_t eaddr[ETHER_ADDR_LEN]; uint32_t pmcfg; int cap, error, msic; @@ -321,18 +321,17 @@ if (error) goto fail; - ifp->if_softc = sc; + if_setsoftc(ifp, sc); if_initname(ifp, device_get_name(dev), device_get_unit(dev)); - ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; - ifp->if_init = et_init; - ifp->if_ioctl = et_ioctl; - ifp->if_start = et_start; - ifp->if_get_counter = et_get_counter; - ifp->if_capabilities = IFCAP_TXCSUM | IFCAP_VLAN_MTU; - ifp->if_capenable = ifp->if_capabilities; - ifp->if_snd.ifq_drv_maxlen = ET_TX_NDESC - 1; - IFQ_SET_MAXLEN(&ifp->if_snd, ET_TX_NDESC - 1); - IFQ_SET_READY(&ifp->if_snd); + if_setflags(ifp, IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST); + if_setinitfn(ifp, et_init); + if_setioctlfn(ifp, et_ioctl); + if_setstartfn(ifp, et_start); + if_setgetcounterfn(ifp, et_get_counter); + if_setcapabilities(ifp, IFCAP_TXCSUM | IFCAP_VLAN_MTU); + if_setcapenable(ifp, if_getcapabilities(ifp)); + if_setsendqlen(ifp, ET_TX_NDESC - 1); + if_setsendqready(ifp); et_chip_attach(sc); @@ -347,7 +346,7 @@ ether_ifattach(ifp, eaddr); /* Tell the upper layer(s) we support long frames. */ - ifp->if_hdrlen = sizeof(struct ether_vlan_header); + if_setifheaderlen(ifp, sizeof(struct ether_vlan_header)); error = bus_setup_intr(dev, sc->sc_irq_res, INTR_TYPE_NET | INTR_MPSAFE, NULL, et_intr, sc, &sc->sc_irq_handle); @@ -505,7 +504,7 @@ { struct et_softc *sc; struct mii_data *mii; - struct ifnet *ifp; + if_t ifp; uint32_t cfg1, cfg2, ctrl; int i; @@ -514,7 +513,7 @@ mii = device_get_softc(sc->sc_miibus); ifp = sc->ifp; if (mii == NULL || ifp == NULL || - (ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) + (if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0) return; sc->sc_flags &= ~ET_FLAG_LINK; @@ -600,13 +599,13 @@ } static int -et_ifmedia_upd_locked(struct ifnet *ifp) +et_ifmedia_upd_locked(if_t ifp) { struct et_softc *sc; struct mii_data *mii; struct mii_softc *miisc; - sc = ifp->if_softc; + sc = if_getsoftc(ifp); mii = device_get_softc(sc->sc_miibus); LIST_FOREACH(miisc, &mii->mii_phys, mii_list) PHY_RESET(miisc); @@ -614,12 +613,12 @@ } static int -et_ifmedia_upd(struct ifnet *ifp) +et_ifmedia_upd(if_t ifp) { struct et_softc *sc; int res; - sc = ifp->if_softc; + sc = if_getsoftc(ifp); ET_LOCK(sc); res = et_ifmedia_upd_locked(ifp); ET_UNLOCK(sc); @@ -628,14 +627,14 @@ } static void -et_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr) +et_ifmedia_sts(if_t ifp, struct ifmediareq *ifmr) { struct et_softc *sc; struct mii_data *mii; - sc = ifp->if_softc; + sc = if_getsoftc(ifp); ET_LOCK(sc); - if ((ifp->if_flags & IFF_UP) == 0) { + if ((if_getflags(ifp) & IFF_UP) == 0) { ET_UNLOCK(sc); return; } @@ -650,7 +649,7 @@ static void et_stop(struct et_softc *sc) { - struct ifnet *ifp; + if_t ifp; ET_LOCK_ASSERT(sc); @@ -675,7 +674,7 @@ sc->sc_flags &= ~ET_FLAG_TXRX_ENABLED; sc->watchdog_timer = 0; - ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE); + if_setdrvflagbits(ifp, 0, (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)); } static int @@ -1177,13 +1176,13 @@ et_intr(void *xsc) { struct et_softc *sc; - struct ifnet *ifp; + if_t ifp; uint32_t status; sc = xsc; ET_LOCK(sc); ifp = sc->ifp; - if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) + if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0) goto done; status = CSR_READ_4(sc, ET_INTR_STATUS); @@ -1196,7 +1195,7 @@ if (status & (ET_INTR_RXDMA_ERROR | ET_INTR_TXDMA_ERROR)) { device_printf(sc->dev, "DMA error(0x%08x) -- resetting\n", status); - ifp->if_drv_flags &= ~IFF_DRV_RUNNING; + if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING); et_init_locked(sc); ET_UNLOCK(sc); return; @@ -1207,9 +1206,9 @@ et_txeof(sc); if (status & ET_INTR_TIMER) CSR_WRITE_4(sc, ET_TIMER, sc->sc_timer); - if (ifp->if_drv_flags & IFF_DRV_RUNNING) { + if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) { CSR_WRITE_4(sc, ET_INTR_MASK, ~ET_INTRS); - if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) + if (!if_sendq_empty(ifp)) et_start_locked(ifp); } done: @@ -1219,13 +1218,13 @@ static void et_init_locked(struct et_softc *sc) { - struct ifnet *ifp; + if_t ifp; int error; ET_LOCK_ASSERT(sc); ifp = sc->ifp; - if (ifp->if_drv_flags & IFF_DRV_RUNNING) + if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) return; et_stop(sc); @@ -1256,8 +1255,8 @@ CSR_WRITE_4(sc, ET_TIMER, sc->sc_timer); - ifp->if_drv_flags |= IFF_DRV_RUNNING; - ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; + if_setdrvflagbits(ifp, IFF_DRV_RUNNING, 0); + if_setdrvflagbits(ifp, 0, IFF_DRV_OACTIVE); sc->sc_flags &= ~ET_FLAG_LINK; et_ifmedia_upd_locked(ifp); @@ -1280,14 +1279,14 @@ } static int -et_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) +et_ioctl(if_t ifp, u_long cmd, caddr_t data) { struct et_softc *sc; struct mii_data *mii; struct ifreq *ifr; int error, mask, max_framelen; - sc = ifp->if_softc; + sc = if_getsoftc(ifp); ifr = (struct ifreq *)data; error = 0; @@ -1295,19 +1294,19 @@ switch (cmd) { case SIOCSIFFLAGS: ET_LOCK(sc); - if (ifp->if_flags & IFF_UP) { - if (ifp->if_drv_flags & IFF_DRV_RUNNING) { - if ((ifp->if_flags ^ sc->sc_if_flags) & + if (if_getflags(ifp) & IFF_UP) { + if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) { + if ((if_getflags(ifp) ^ sc->sc_if_flags) & (IFF_ALLMULTI | IFF_PROMISC | IFF_BROADCAST)) et_setmulti(sc); } else { et_init_locked(sc); } } else { - if (ifp->if_drv_flags & IFF_DRV_RUNNING) + if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) et_stop(sc); } - sc->sc_if_flags = ifp->if_flags; + sc->sc_if_flags = if_getflags(ifp); ET_UNLOCK(sc); break; @@ -1319,7 +1318,7 @@ case SIOCADDMULTI: case SIOCDELMULTI: - if (ifp->if_drv_flags & IFF_DRV_RUNNING) { + if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) { ET_LOCK(sc); et_setmulti(sc); ET_UNLOCK(sc); @@ -1341,10 +1340,10 @@ break; } - if (ifp->if_mtu != ifr->ifr_mtu) { - ifp->if_mtu = ifr->ifr_mtu; - if (ifp->if_drv_flags & IFF_DRV_RUNNING) { - ifp->if_drv_flags &= ~IFF_DRV_RUNNING; + if (if_getmtu(ifp) != ifr->ifr_mtu) { + if_setmtu(ifp, ifr->ifr_mtu); + if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) { + if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING); et_init_locked(sc); } } @@ -1353,14 +1352,14 @@ case SIOCSIFCAP: ET_LOCK(sc); - mask = ifr->ifr_reqcap ^ ifp->if_capenable; + mask = ifr->ifr_reqcap ^ if_getcapenable(ifp); if ((mask & IFCAP_TXCSUM) != 0 && - (IFCAP_TXCSUM & ifp->if_capabilities) != 0) { - ifp->if_capenable ^= IFCAP_TXCSUM; - if ((IFCAP_TXCSUM & ifp->if_capenable) != 0) - ifp->if_hwassist |= ET_CSUM_FEATURES; + (IFCAP_TXCSUM & if_getcapabilities(ifp)) != 0) { + if_togglecapenable(ifp, IFCAP_TXCSUM); + if ((IFCAP_TXCSUM & if_getcapenable(ifp)) != 0) + if_sethwassistbits(ifp, ET_CSUM_FEATURES, 0); else - ifp->if_hwassist &= ~ET_CSUM_FEATURES; + if_sethwassistbits(ifp, 0, ET_CSUM_FEATURES); } ET_UNLOCK(sc); break; @@ -1373,7 +1372,7 @@ } static void -et_start_locked(struct ifnet *ifp) +et_start_locked(if_t ifp) { struct et_softc *sc; struct mbuf *m_head = NULL; @@ -1382,10 +1381,10 @@ uint32_t tx_ready_pos; int enq; - sc = ifp->if_softc; + sc = if_getsoftc(ifp); ET_LOCK_ASSERT(sc); - if ((ifp->if_drv_flags & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) != + if ((if_getdrvflags(ifp) & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) != IFF_DRV_RUNNING || (sc->sc_flags & (ET_FLAG_LINK | ET_FLAG_TXRX_ENABLED)) != (ET_FLAG_LINK | ET_FLAG_TXRX_ENABLED)) @@ -1403,13 +1402,13 @@ if (tbd->tbd_used > (ET_TX_NDESC * 2) / 3) et_txeof(sc); - for (enq = 0; !IFQ_DRV_IS_EMPTY(&ifp->if_snd); ) { + for (enq = 0; !if_sendq_empty(ifp); ) { if (tbd->tbd_used + ET_NSEG_SPARE >= ET_TX_NDESC) { - ifp->if_drv_flags |= IFF_DRV_OACTIVE; + if_setdrvflagbits(ifp, IFF_DRV_OACTIVE, 0); break; } - IFQ_DRV_DEQUEUE(&ifp->if_snd, m_head); + m_head = if_dequeue(ifp); if (m_head == NULL) break; @@ -1418,9 +1417,9 @@ if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); break; } - IFQ_DRV_PREPEND(&ifp->if_snd, m_head); + if_sendq_prepend(ifp, m_head); if (tbd->tbd_used > 0) - ifp->if_drv_flags |= IFF_DRV_OACTIVE; + if_setdrvflagbits(ifp, IFF_DRV_OACTIVE, 0); break; } enq++; @@ -1441,11 +1440,11 @@ } static void -et_start(struct ifnet *ifp) +et_start(if_t ifp) { struct et_softc *sc; - sc = ifp->if_softc; + sc = if_getsoftc(ifp); ET_LOCK(sc); et_start_locked(ifp); ET_UNLOCK(sc); @@ -1468,7 +1467,7 @@ status); if_inc_counter(sc->ifp, IFCOUNTER_OERRORS, 1); - sc->ifp->if_drv_flags &= ~IFF_DRV_RUNNING; + if_setdrvflagbits(sc->ifp, 0, IFF_DRV_RUNNING); et_init_locked(sc); return (EJUSTRETURN); } @@ -1581,7 +1580,7 @@ static void et_setmulti(struct et_softc *sc) { - struct ifnet *ifp; + if_t ifp; uint32_t hash[4] = { 0, 0, 0, 0 }; uint32_t rxmac_ctrl, pktfilt; int i, count; @@ -1593,7 +1592,7 @@ rxmac_ctrl = CSR_READ_4(sc, ET_RXMAC_CTRL); pktfilt &= ~(ET_PKTFILT_BCAST | ET_PKTFILT_MCAST | ET_PKTFILT_UCAST); - if (ifp->if_flags & (IFF_PROMISC | IFF_ALLMULTI)) { + if (if_getflags(ifp) & (IFF_PROMISC | IFF_ALLMULTI)) { rxmac_ctrl |= ET_RXMAC_CTRL_NO_PKTFILT; goto back; } @@ -1614,7 +1613,7 @@ static int et_chip_init(struct et_softc *sc) { - struct ifnet *ifp; + if_t ifp; uint32_t rxq_end; int error, frame_len, rxmem_size; @@ -1623,7 +1622,7 @@ * Split 16Kbytes internal memory between TX and RX * according to frame length. */ - frame_len = ET_FRAMELEN(ifp->if_mtu); + frame_len = ET_FRAMELEN(if_getmtu(ifp)); if (frame_len < 2048) { rxmem_size = ET_MEM_RXSIZE_DEFAULT; } else if (frame_len <= ET_RXMAC_CUT_THRU_FRMLEN) { @@ -1842,7 +1841,7 @@ static void et_init_mac(struct et_softc *sc) { - struct ifnet *ifp; + if_t ifp; const uint8_t *eaddr; uint32_t val; @@ -1880,14 +1879,14 @@ * Set MAC address */ ifp = sc->ifp; - eaddr = IF_LLADDR(ifp); + eaddr = if_getlladdr(ifp); val = eaddr[2] | (eaddr[3] << 8) | (eaddr[4] << 16) | (eaddr[5] << 24); CSR_WRITE_4(sc, ET_MAC_ADDR1, val); val = (eaddr[0] << 16) | (eaddr[1] << 24); CSR_WRITE_4(sc, ET_MAC_ADDR2, val); /* Set max frame length */ - CSR_WRITE_4(sc, ET_MAX_FRMLEN, ET_FRAMELEN(ifp->if_mtu)); + CSR_WRITE_4(sc, ET_MAX_FRMLEN, ET_FRAMELEN(if_getmtu(ifp))); /* Bring MAC out of reset state */ CSR_WRITE_4(sc, ET_MAC_CFG1, 0); @@ -1896,7 +1895,7 @@ static void et_init_rxmac(struct et_softc *sc) { - struct ifnet *ifp; + if_t ifp; const uint8_t *eaddr; uint32_t val; int i; @@ -1916,7 +1915,7 @@ * Set WOL source address. XXX is this necessary? */ ifp = sc->ifp; - eaddr = IF_LLADDR(ifp); + eaddr = if_getlladdr(ifp); val = (eaddr[2] << 24) | (eaddr[3] << 16) | (eaddr[4] << 8) | eaddr[5]; CSR_WRITE_4(sc, ET_WOL_SA_LO, val); val = (eaddr[0] << 8) | eaddr[1]; @@ -1930,7 +1929,7 @@ CSR_WRITE_4(sc, ET_UCAST_FILTADDR2, 0); CSR_WRITE_4(sc, ET_UCAST_FILTADDR3, 0); - if (ET_FRAMELEN(ifp->if_mtu) > ET_RXMAC_CUT_THRU_FRMLEN) { + if (ET_FRAMELEN(if_getmtu(ifp)) > ET_RXMAC_CUT_THRU_FRMLEN) { /* * In order to transmit jumbo packets greater than * ET_RXMAC_CUT_THRU_FRMLEN bytes, the FIFO between @@ -2036,7 +2035,7 @@ struct et_rxbuf_data *rbd; struct et_rxdesc_ring *rx_ring; struct et_rxstat *st; - struct ifnet *ifp; + if_t ifp; struct mbuf *m; uint32_t rxstat_pos, rxring_pos; uint32_t rxst_info1, rxst_info2, rxs_stat_ring; @@ -2065,7 +2064,7 @@ while (rxst_index != rxst_ring->rsr_index || rxst_wrap != rxst_ring->rsr_wrap) { - if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) + if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0) break; MPASS(rxst_ring->rsr_index < ET_RX_NSTAT); @@ -2117,7 +2116,7 @@ m->m_pkthdr.len = m->m_len = buflen; m->m_pkthdr.rcvif = ifp; ET_UNLOCK(sc); - ifp->if_input(ifp, m); + if_input(ifp, m); ET_LOCK(sc); } } @@ -2249,7 +2248,7 @@ struct et_txdesc_ring *tx_ring; struct et_txbuf_data *tbd; struct et_txbuf *tb; - struct ifnet *ifp; + if_t ifp; uint32_t tx_done; int end, wrap; @@ -2295,7 +2294,7 @@ if (tbd->tbd_used == 0) sc->watchdog_timer = 0; if (tbd->tbd_used + ET_NSEG_SPARE < ET_TX_NDESC) - ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; + if_setdrvflagbits(ifp, 0, IFF_DRV_OACTIVE); } static void @@ -2567,7 +2566,7 @@ et_sysctl_rx_intr_npkts(SYSCTL_HANDLER_ARGS) { struct et_softc *sc; - struct ifnet *ifp; + if_t ifp; int error, v; sc = arg1; @@ -2582,7 +2581,7 @@ } if (sc->sc_rx_intr_npkts != v) { - if (ifp->if_drv_flags & IFF_DRV_RUNNING) + if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) CSR_WRITE_4(sc, ET_RX_INTR_NPKTS, v); sc->sc_rx_intr_npkts = v; } @@ -2594,7 +2593,7 @@ et_sysctl_rx_intr_delay(SYSCTL_HANDLER_ARGS) { struct et_softc *sc; - struct ifnet *ifp; + if_t ifp; int error, v; sc = arg1; @@ -2609,7 +2608,7 @@ } if (sc->sc_rx_intr_delay != v) { - if (ifp->if_drv_flags & IFF_DRV_RUNNING) + if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) CSR_WRITE_4(sc, ET_RX_INTR_DELAY, v); sc->sc_rx_intr_delay = v; } @@ -2672,7 +2671,7 @@ } static uint64_t -et_get_counter(struct ifnet *ifp, ift_counter cnt) +et_get_counter(if_t ifp, ift_counter cnt) { struct et_softc *sc; struct et_hw_stats *stats; @@ -2708,7 +2707,7 @@ sc = device_get_softc(dev); ET_LOCK(sc); - if ((sc->ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) + if ((if_getdrvflags(sc->ifp) & IFF_DRV_RUNNING) != 0) et_stop(sc); /* Diable all clocks and put PHY into COMA. */ pmcfg = CSR_READ_4(sc, ET_PM); @@ -2733,7 +2732,7 @@ if ((sc->sc_flags & ET_FLAG_FASTETHER) == 0) pmcfg |= EM_PM_GIGEPHY_ENB; CSR_WRITE_4(sc, ET_PM, pmcfg); - if ((sc->ifp->if_flags & IFF_UP) != 0) + if ((if_getflags(sc->ifp) & IFF_UP) != 0) et_init_locked(sc); ET_UNLOCK(sc); return (0); diff --git a/sys/dev/et/if_etvar.h b/sys/dev/et/if_etvar.h --- a/sys/dev/et/if_etvar.h +++ b/sys/dev/et/if_etvar.h @@ -284,7 +284,7 @@ }; struct et_softc { - struct ifnet *ifp; + if_t ifp; device_t dev; struct mtx sc_mtx; device_t sc_miibus;