diff --git a/sys/dev/age/if_age.c b/sys/dev/age/if_age.c --- a/sys/dev/age/if_age.c +++ b/sys/dev/age/if_age.c @@ -104,8 +104,8 @@ static int age_miibus_readreg(device_t, int, int); static int age_miibus_writereg(device_t, int, int, int); static void age_miibus_statchg(device_t); -static void age_mediastatus(struct ifnet *, struct ifmediareq *); -static int age_mediachange(struct ifnet *); +static void age_mediastatus(if_t, struct ifmediareq *); +static int age_mediachange(if_t); static int age_probe(device_t); static void age_get_macaddr(struct age_softc *); static void age_phy_reset(struct age_softc *); @@ -121,10 +121,10 @@ static int age_suspend(device_t); static int age_resume(device_t); static int age_encap(struct age_softc *, struct mbuf **); -static void age_start(struct ifnet *); -static void age_start_locked(struct ifnet *); +static void age_start(if_t); +static void age_start_locked(if_t); static void age_watchdog(struct age_softc *); -static int age_ioctl(struct ifnet *, u_long, caddr_t); +static int age_ioctl(if_t, u_long, caddr_t); static void age_mac_config(struct age_softc *); static void age_link_task(void *, int); static void age_stats_update(struct age_softc *); @@ -146,7 +146,7 @@ static void age_init_cmb_block(struct age_softc *); static void age_init_smb_block(struct age_softc *); #ifndef __NO_STRICT_ALIGNMENT -static struct mbuf *age_fixup_rx(struct ifnet *, struct mbuf *); +static struct mbuf *age_fixup_rx(if_t, struct mbuf *); #endif static int age_newbuf(struct age_softc *, struct age_rxdesc *); static void age_rxvlan(struct age_softc *); @@ -276,12 +276,12 @@ * Get the current interface media status. */ static void -age_mediastatus(struct ifnet *ifp, struct ifmediareq *ifmr) +age_mediastatus(if_t ifp, struct ifmediareq *ifmr) { struct age_softc *sc; struct mii_data *mii; - sc = ifp->if_softc; + sc = if_getsoftc(ifp); AGE_LOCK(sc); mii = device_get_softc(sc->age_miibus); @@ -295,14 +295,14 @@ * Set hardware to newly-selected media. */ static int -age_mediachange(struct ifnet *ifp) +age_mediachange(if_t ifp) { struct age_softc *sc; struct mii_data *mii; struct mii_softc *miisc; int error; - sc = ifp->if_softc; + sc = if_getsoftc(ifp); AGE_LOCK(sc); mii = device_get_softc(sc->age_miibus); LIST_FOREACH(miisc, &mii->mii_phys, mii_list) @@ -461,7 +461,7 @@ age_attach(device_t dev) { struct age_softc *sc; - struct ifnet *ifp; + if_t ifp; uint16_t burst; int error, i, msic, msixc, pmc; @@ -599,22 +599,21 @@ 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_ioctl = age_ioctl; - ifp->if_start = age_start; - ifp->if_init = age_init; - ifp->if_snd.ifq_drv_maxlen = AGE_TX_RING_CNT - 1; - IFQ_SET_MAXLEN(&ifp->if_snd, ifp->if_snd.ifq_drv_maxlen); - IFQ_SET_READY(&ifp->if_snd); - ifp->if_capabilities = IFCAP_HWCSUM | IFCAP_TSO4; - ifp->if_hwassist = AGE_CSUM_FEATURES | CSUM_TSO; + if_setflags(ifp, IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST); + if_setioctlfn(ifp, age_ioctl); + if_setstartfn(ifp, age_start); + if_setinitfn(ifp, age_init); + if_setsendqlen(ifp, AGE_TX_RING_CNT - 1); + if_setsendqready(ifp); + if_setcapabilities(ifp, IFCAP_HWCSUM | IFCAP_TSO4); + if_sethwassist(ifp, AGE_CSUM_FEATURES | CSUM_TSO); if (pci_find_cap(dev, PCIY_PMG, &pmc) == 0) { sc->age_flags |= AGE_FLAG_PMCAP; - ifp->if_capabilities |= IFCAP_WOL_MAGIC | IFCAP_WOL_MCAST; + if_setcapabilitiesbit(ifp, IFCAP_WOL_MAGIC | IFCAP_WOL_MCAST, 0); } - ifp->if_capenable = ifp->if_capabilities; + if_setcapenable(ifp, if_getcapabilities(ifp)); /* Set up MII bus. */ error = mii_attach(dev, &sc->age_miibus, ifp, age_mediachange, @@ -628,12 +627,12 @@ ether_ifattach(ifp, sc->age_eaddr); /* VLAN capability setup. */ - ifp->if_capabilities |= IFCAP_VLAN_MTU | IFCAP_VLAN_HWTAGGING | - IFCAP_VLAN_HWCSUM | IFCAP_VLAN_HWTSO; - ifp->if_capenable = ifp->if_capabilities; + if_setcapabilitiesbit(ifp, IFCAP_VLAN_MTU | IFCAP_VLAN_HWTAGGING | + IFCAP_VLAN_HWCSUM | IFCAP_VLAN_HWTSO, 0); + if_setcapenable(ifp, if_getcapabilities(ifp)); /* 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)); /* Create local taskq. */ sc->age_tq = taskqueue_create_fast("age_taskq", M_WAITOK, @@ -679,7 +678,7 @@ age_detach(device_t dev) { struct age_softc *sc; - struct ifnet *ifp; + if_t ifp; int i, msic; sc = device_get_softc(dev); @@ -1320,7 +1319,7 @@ static void age_setwol(struct age_softc *sc) { - struct ifnet *ifp; + if_t ifp; struct mii_data *mii; uint32_t reg, pmcs; uint16_t pmstat; @@ -1347,7 +1346,7 @@ } ifp = sc->age_ifp; - if ((ifp->if_capenable & IFCAP_WOL) != 0) { + if ((if_getcapenable(ifp) & IFCAP_WOL) != 0) { /* * Note, this driver resets the link speed to 10/100Mbps with * auto-negotiation but we don't know whether that operation @@ -1420,15 +1419,15 @@ got_link: pmcs = 0; - if ((ifp->if_capenable & IFCAP_WOL_MAGIC) != 0) + if ((if_getcapenable(ifp) & IFCAP_WOL_MAGIC) != 0) pmcs |= WOL_CFG_MAGIC | WOL_CFG_MAGIC_ENB; CSR_WRITE_4(sc, AGE_WOL_CFG, pmcs); reg = CSR_READ_4(sc, AGE_MAC_CFG); reg &= ~(MAC_CFG_DBG | MAC_CFG_PROMISC); reg &= ~(MAC_CFG_ALLMULTI | MAC_CFG_BCAST); - if ((ifp->if_capenable & IFCAP_WOL_MCAST) != 0) + if ((if_getcapenable(ifp) & IFCAP_WOL_MCAST) != 0) reg |= MAC_CFG_ALLMULTI | MAC_CFG_BCAST; - if ((ifp->if_capenable & IFCAP_WOL) != 0) { + if ((if_getcapenable(ifp) & IFCAP_WOL) != 0) { reg |= MAC_CFG_RX_ENB; CSR_WRITE_4(sc, AGE_MAC_CFG, reg); } @@ -1436,12 +1435,12 @@ /* Request PME. */ pmstat = pci_read_config(sc->age_dev, pmc + PCIR_POWER_STATUS, 2); pmstat &= ~(PCIM_PSTAT_PME | PCIM_PSTAT_PMEENABLE); - if ((ifp->if_capenable & IFCAP_WOL) != 0) + if ((if_getcapenable(ifp) & IFCAP_WOL) != 0) pmstat |= PCIM_PSTAT_PME | PCIM_PSTAT_PMEENABLE; pci_write_config(sc->age_dev, pmc + PCIR_POWER_STATUS, pmstat, 2); #ifdef notyet /* See above for powering down PHY issues. */ - if ((ifp->if_capenable & IFCAP_WOL) == 0) { + if ((if_getcapenable(ifp) & IFCAP_WOL) == 0) { /* No WOL, PHY power down. */ age_miibus_writereg(sc->age_dev, sc->age_phyaddr, MII_BMCR, BMCR_PDOWN); @@ -1468,14 +1467,14 @@ age_resume(device_t dev) { struct age_softc *sc; - struct ifnet *ifp; + if_t ifp; sc = device_get_softc(dev); AGE_LOCK(sc); age_phy_reset(sc); ifp = sc->age_ifp; - if ((ifp->if_flags & IFF_UP) != 0) + if ((if_getflags(ifp) & IFF_UP) != 0) age_init_locked(sc); AGE_UNLOCK(sc); @@ -1720,33 +1719,33 @@ } static void -age_start(struct ifnet *ifp) +age_start(if_t ifp) { struct age_softc *sc; - sc = ifp->if_softc; + sc = if_getsoftc(ifp); AGE_LOCK(sc); age_start_locked(ifp); AGE_UNLOCK(sc); } static void -age_start_locked(struct ifnet *ifp) +age_start_locked(if_t ifp) { struct age_softc *sc; struct mbuf *m_head; int enq; - sc = ifp->if_softc; + sc = if_getsoftc(ifp); AGE_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->age_flags & AGE_FLAG_LINK) == 0) return; - for (enq = 0; !IFQ_DRV_IS_EMPTY(&ifp->if_snd); ) { - IFQ_DRV_DEQUEUE(&ifp->if_snd, m_head); + for (enq = 0; !if_sendq_empty(ifp); ) { + m_head = if_dequeue(ifp); if (m_head == NULL) break; /* @@ -1757,8 +1756,8 @@ if (age_encap(sc, &m_head)) { if (m_head == NULL) break; - IFQ_DRV_PREPEND(&ifp->if_snd, m_head); - ifp->if_drv_flags |= IFF_DRV_OACTIVE; + if_sendq_prepend(ifp, m_head); + if_setdrvflagbits(ifp, IFF_DRV_OACTIVE, 0); break; } @@ -1781,7 +1780,7 @@ static void age_watchdog(struct age_softc *sc) { - struct ifnet *ifp; + if_t ifp; AGE_LOCK_ASSERT(sc); @@ -1792,27 +1791,27 @@ if ((sc->age_flags & AGE_FLAG_LINK) == 0) { if_printf(sc->age_ifp, "watchdog timeout (missed link)\n"); if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); - ifp->if_drv_flags &= ~IFF_DRV_RUNNING; + if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING); age_init_locked(sc); return; } if (sc->age_cdata.age_tx_cnt == 0) { if_printf(sc->age_ifp, "watchdog timeout (missed Tx interrupts) -- recovering\n"); - if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) + if (!if_sendq_empty(ifp)) age_start_locked(ifp); return; } if_printf(sc->age_ifp, "watchdog timeout\n"); if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); - ifp->if_drv_flags &= ~IFF_DRV_RUNNING; + if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING); age_init_locked(sc); - if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) + if (!if_sendq_empty(ifp)) age_start_locked(ifp); } static int -age_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) +age_ioctl(if_t ifp, u_long cmd, caddr_t data) { struct age_softc *sc; struct ifreq *ifr; @@ -1820,18 +1819,18 @@ uint32_t reg; int error, mask; - sc = ifp->if_softc; + sc = if_getsoftc(ifp); ifr = (struct ifreq *)data; error = 0; switch (cmd) { case SIOCSIFMTU: if (ifr->ifr_mtu < ETHERMIN || ifr->ifr_mtu > AGE_JUMBO_MTU) error = EINVAL; - else if (ifp->if_mtu != ifr->ifr_mtu) { + else if (if_getmtu(ifp) != ifr->ifr_mtu) { AGE_LOCK(sc); - ifp->if_mtu = ifr->ifr_mtu; - if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) { - ifp->if_drv_flags &= ~IFF_DRV_RUNNING; + if_setmtu(ifp, ifr->ifr_mtu); + if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0) { + if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING); age_init_locked(sc); } AGE_UNLOCK(sc); @@ -1839,9 +1838,9 @@ break; case SIOCSIFFLAGS: AGE_LOCK(sc); - if ((ifp->if_flags & IFF_UP) != 0) { - if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) { - if (((ifp->if_flags ^ sc->age_if_flags) + if ((if_getflags(ifp) & IFF_UP) != 0) { + if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0) { + if (((if_getflags(ifp) ^ sc->age_if_flags) & (IFF_PROMISC | IFF_ALLMULTI)) != 0) age_rxfilter(sc); } else { @@ -1849,16 +1848,16 @@ age_init_locked(sc); } } else { - if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) + if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0) age_stop(sc); } - sc->age_if_flags = ifp->if_flags; + sc->age_if_flags = if_getflags(ifp); AGE_UNLOCK(sc); break; case SIOCADDMULTI: case SIOCDELMULTI: AGE_LOCK(sc); - if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) + if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0) age_rxfilter(sc); AGE_UNLOCK(sc); break; @@ -1869,50 +1868,50 @@ break; case SIOCSIFCAP: AGE_LOCK(sc); - mask = ifr->ifr_reqcap ^ ifp->if_capenable; + mask = ifr->ifr_reqcap ^ if_getcapenable(ifp); if ((mask & IFCAP_TXCSUM) != 0 && - (ifp->if_capabilities & IFCAP_TXCSUM) != 0) { - ifp->if_capenable ^= IFCAP_TXCSUM; - if ((ifp->if_capenable & IFCAP_TXCSUM) != 0) - ifp->if_hwassist |= AGE_CSUM_FEATURES; + (if_getcapabilities(ifp) & IFCAP_TXCSUM) != 0) { + if_togglecapenable(ifp, IFCAP_TXCSUM); + if ((if_getcapenable(ifp) & IFCAP_TXCSUM) != 0) + if_sethwassistbits(ifp, AGE_CSUM_FEATURES, 0); else - ifp->if_hwassist &= ~AGE_CSUM_FEATURES; + if_sethwassistbits(ifp, 0, AGE_CSUM_FEATURES); } if ((mask & IFCAP_RXCSUM) != 0 && - (ifp->if_capabilities & IFCAP_RXCSUM) != 0) { - ifp->if_capenable ^= IFCAP_RXCSUM; + (if_getcapabilities(ifp) & IFCAP_RXCSUM) != 0) { + if_togglecapenable(ifp, IFCAP_RXCSUM); reg = CSR_READ_4(sc, AGE_MAC_CFG); reg &= ~MAC_CFG_RXCSUM_ENB; - if ((ifp->if_capenable & IFCAP_RXCSUM) != 0) + if ((if_getcapenable(ifp) & IFCAP_RXCSUM) != 0) reg |= MAC_CFG_RXCSUM_ENB; CSR_WRITE_4(sc, AGE_MAC_CFG, reg); } if ((mask & IFCAP_TSO4) != 0 && - (ifp->if_capabilities & IFCAP_TSO4) != 0) { - ifp->if_capenable ^= IFCAP_TSO4; - if ((ifp->if_capenable & IFCAP_TSO4) != 0) - ifp->if_hwassist |= CSUM_TSO; + (if_getcapabilities(ifp) & IFCAP_TSO4) != 0) { + if_togglecapenable(ifp, IFCAP_TSO4); + if ((if_getcapenable(ifp) & IFCAP_TSO4) != 0) + if_sethwassistbits(ifp, CSUM_TSO, 0); else - ifp->if_hwassist &= ~CSUM_TSO; + if_sethwassistbits(ifp, 0, CSUM_TSO); } if ((mask & IFCAP_WOL_MCAST) != 0 && - (ifp->if_capabilities & IFCAP_WOL_MCAST) != 0) - ifp->if_capenable ^= IFCAP_WOL_MCAST; + (if_getcapabilities(ifp) & IFCAP_WOL_MCAST) != 0) + if_togglecapenable(ifp, IFCAP_WOL_MCAST); if ((mask & IFCAP_WOL_MAGIC) != 0 && - (ifp->if_capabilities & IFCAP_WOL_MAGIC) != 0) - ifp->if_capenable ^= IFCAP_WOL_MAGIC; + (if_getcapabilities(ifp) & IFCAP_WOL_MAGIC) != 0) + if_togglecapenable(ifp, IFCAP_WOL_MAGIC); if ((mask & IFCAP_VLAN_HWCSUM) != 0 && - (ifp->if_capabilities & IFCAP_VLAN_HWCSUM) != 0) - ifp->if_capenable ^= IFCAP_VLAN_HWCSUM; + (if_getcapabilities(ifp) & IFCAP_VLAN_HWCSUM) != 0) + if_togglecapenable(ifp, IFCAP_VLAN_HWCSUM); if ((mask & IFCAP_VLAN_HWTSO) != 0 && - (ifp->if_capabilities & IFCAP_VLAN_HWTSO) != 0) - ifp->if_capenable ^= IFCAP_VLAN_HWTSO; + (if_getcapabilities(ifp) & IFCAP_VLAN_HWTSO) != 0) + if_togglecapenable(ifp, IFCAP_VLAN_HWTSO); if ((mask & IFCAP_VLAN_HWTAGGING) != 0 && - (ifp->if_capabilities & IFCAP_VLAN_HWTAGGING) != 0) { - ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING; - if ((ifp->if_capenable & IFCAP_VLAN_HWTAGGING) == 0) - ifp->if_capenable &= ~IFCAP_VLAN_HWTSO; + (if_getcapabilities(ifp) & IFCAP_VLAN_HWTAGGING) != 0) { + if_togglecapenable(ifp, IFCAP_VLAN_HWTAGGING); + if ((if_getcapenable(ifp) & IFCAP_VLAN_HWTAGGING) == 0) + if_setcapenablebit(ifp, 0, IFCAP_VLAN_HWTSO); age_rxvlan(sc); } AGE_UNLOCK(sc); @@ -1967,7 +1966,7 @@ { struct age_softc *sc; struct mii_data *mii; - struct ifnet *ifp; + if_t ifp; uint32_t reg; sc = (struct age_softc *)arg; @@ -1976,7 +1975,7 @@ mii = device_get_softc(sc->age_miibus); ifp = sc->age_ifp; if (mii == NULL || ifp == NULL || - (ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) { + (if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0) { AGE_UNLOCK(sc); return; } @@ -2017,7 +2016,7 @@ { struct age_stats *stat; struct smb *smb; - struct ifnet *ifp; + if_t ifp; AGE_LOCK_ASSERT(sc); @@ -2133,7 +2132,7 @@ age_int_task(void *arg, int pending) { struct age_softc *sc; - struct ifnet *ifp; + if_t ifp; struct cmb *cmb; uint32_t status; @@ -2162,7 +2161,7 @@ BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); ifp = sc->age_ifp; - if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) { + if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0) { if ((status & INTR_CMB_RX) != 0) sc->age_morework = age_rxintr(sc, sc->age_rr_prod, sc->age_process_limit); @@ -2175,10 +2174,10 @@ if ((status & INTR_DMA_WR_TO_RST) != 0) device_printf(sc->age_dev, "DMA write error! -- resetting\n"); - ifp->if_drv_flags &= ~IFF_DRV_RUNNING; + if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING); age_init_locked(sc); } - if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) + if (!if_sendq_empty(ifp)) age_start_locked(ifp); if ((status & INTR_SMB) != 0) age_stats_update(sc); @@ -2204,7 +2203,7 @@ static void age_txintr(struct age_softc *sc, int tpd_cons) { - struct ifnet *ifp; + if_t ifp; struct age_txdesc *txd; int cons, prog; @@ -2225,7 +2224,7 @@ if (sc->age_cdata.age_tx_cnt <= 0) break; prog++; - ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; + if_setdrvflagbits(ifp, 0, IFF_DRV_OACTIVE); sc->age_cdata.age_tx_cnt--; txd = &sc->age_cdata.age_txdesc[cons]; /* @@ -2263,7 +2262,7 @@ #ifndef __NO_STRICT_ALIGNMENT static struct mbuf * -age_fixup_rx(struct ifnet *ifp, struct mbuf *m) +age_fixup_rx(if_t ifp, struct mbuf *m) { struct mbuf *n; int i; @@ -2304,7 +2303,7 @@ age_rxeof(struct age_softc *sc, struct rx_rdesc *rxrd) { struct age_rxdesc *rxd; - struct ifnet *ifp; + if_t ifp; struct mbuf *mp, *m; uint32_t status, index, vtag; int count, nsegs; @@ -2407,7 +2406,7 @@ * assistance due to lack of data sheet. If it is * proven to work on L1 I'll enable it. */ - if ((ifp->if_capenable & IFCAP_RXCSUM) != 0 && + if ((if_getcapenable(ifp) & IFCAP_RXCSUM) != 0 && (status & AGE_RRD_IPV4) != 0) { if ((status & AGE_RRD_IPCSUM_NOK) == 0) m->m_pkthdr.csum_flags |= @@ -2426,7 +2425,7 @@ } /* Check for VLAN tagged frames. */ - if ((ifp->if_capenable & IFCAP_VLAN_HWTAGGING) != 0 && + if ((if_getcapenable(ifp) & IFCAP_VLAN_HWTAGGING) != 0 && (status & AGE_RRD_VLAN) != 0) { vtag = AGE_RX_VLAN(le32toh(rxrd->vtags)); m->m_pkthdr.ether_vtag = AGE_RX_VLAN_TAG(vtag); @@ -2439,7 +2438,7 @@ { /* Pass it on. */ AGE_UNLOCK(sc); - (*ifp->if_input)(ifp, m); + if_input(ifp, m); AGE_LOCK(sc); } } @@ -2563,7 +2562,7 @@ static void age_init_locked(struct age_softc *sc) { - struct ifnet *ifp; + if_t ifp; struct mii_data *mii; uint8_t eaddr[ETHER_ADDR_LEN]; bus_addr_t paddr; @@ -2576,7 +2575,7 @@ ifp = sc->age_ifp; mii = device_get_softc(sc->age_miibus); - if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) + if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0) return; /* @@ -2602,7 +2601,7 @@ age_init_smb_block(sc); /* Reprogram the station address. */ - bcopy(IF_LLADDR(ifp), eaddr, ETHER_ADDR_LEN); + bcopy(if_getlladdr(ifp), eaddr, ETHER_ADDR_LEN); CSR_WRITE_4(sc, AGE_PAR0, eaddr[2] << 24 | eaddr[3] << 16 | eaddr[4] << 8 | eaddr[5]); CSR_WRITE_4(sc, AGE_PAR1, eaddr[0] << 8 | eaddr[1]); @@ -2678,10 +2677,10 @@ CSR_WRITE_2(sc, AGE_INTR_CLR_TIMER, AGE_USECS(1000)); /* Set Maximum frame size but don't let MTU be lass than ETHER_MTU. */ - if (ifp->if_mtu < ETHERMTU) + if (if_getmtu(ifp) < ETHERMTU) sc->age_max_frame_size = ETHERMTU; else - sc->age_max_frame_size = ifp->if_mtu; + sc->age_max_frame_size = if_getmtu(ifp); sc->age_max_frame_size += ETHER_HDR_LEN + sizeof(struct ether_vlan_header) + ETHER_CRC_LEN; CSR_WRITE_4(sc, AGE_FRAME_SIZE, sc->age_max_frame_size); @@ -2822,7 +2821,7 @@ age_rxvlan(sc); reg = CSR_READ_4(sc, AGE_MAC_CFG); - if ((ifp->if_capenable & IFCAP_RXCSUM) != 0) + if ((if_getcapenable(ifp) & IFCAP_RXCSUM) != 0) reg |= MAC_CFG_RXCSUM_ENB; /* Ack all pending interrupts and clear it. */ @@ -2838,14 +2837,14 @@ callout_reset(&sc->age_tick_ch, hz, age_tick, sc); - 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); } static void age_stop(struct age_softc *sc) { - struct ifnet *ifp; + if_t ifp; struct age_txdesc *txd; struct age_rxdesc *rxd; uint32_t reg; @@ -2856,7 +2855,7 @@ * Mark the interface down and cancel the watchdog timer. */ ifp = sc->age_ifp; - ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE); + if_setdrvflagbits(ifp, 0, (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)); sc->age_flags &= ~AGE_FLAG_LINK; callout_stop(&sc->age_tick_ch); sc->age_watchdog_timer = 0; @@ -3123,7 +3122,7 @@ static void age_rxvlan(struct age_softc *sc) { - struct ifnet *ifp; + if_t ifp; uint32_t reg; AGE_LOCK_ASSERT(sc); @@ -3131,7 +3130,7 @@ ifp = sc->age_ifp; reg = CSR_READ_4(sc, AGE_MAC_CFG); reg &= ~MAC_CFG_VLAN_TAG_STRIP; - if ((ifp->if_capenable & IFCAP_VLAN_HWTAGGING) != 0) + if ((if_getcapenable(ifp) & IFCAP_VLAN_HWTAGGING) != 0) reg |= MAC_CFG_VLAN_TAG_STRIP; CSR_WRITE_4(sc, AGE_MAC_CFG, reg); } @@ -3151,7 +3150,7 @@ static void age_rxfilter(struct age_softc *sc) { - struct ifnet *ifp; + if_t ifp; uint32_t mchash[2]; uint32_t rxcfg; @@ -3161,12 +3160,12 @@ rxcfg = CSR_READ_4(sc, AGE_MAC_CFG); rxcfg &= ~(MAC_CFG_ALLMULTI | MAC_CFG_BCAST | MAC_CFG_PROMISC); - if ((ifp->if_flags & IFF_BROADCAST) != 0) + if ((if_getflags(ifp) & IFF_BROADCAST) != 0) rxcfg |= MAC_CFG_BCAST; - if ((ifp->if_flags & (IFF_PROMISC | IFF_ALLMULTI)) != 0) { - if ((ifp->if_flags & IFF_PROMISC) != 0) + if ((if_getflags(ifp) & (IFF_PROMISC | IFF_ALLMULTI)) != 0) { + if ((if_getflags(ifp) & IFF_PROMISC) != 0) rxcfg |= MAC_CFG_PROMISC; - if ((ifp->if_flags & IFF_ALLMULTI) != 0) + if ((if_getflags(ifp) & IFF_ALLMULTI) != 0) rxcfg |= MAC_CFG_ALLMULTI; CSR_WRITE_4(sc, AGE_MAR0, 0xFFFFFFFF); CSR_WRITE_4(sc, AGE_MAR1, 0xFFFFFFFF); diff --git a/sys/dev/age/if_agevar.h b/sys/dev/age/if_agevar.h --- a/sys/dev/age/if_agevar.h +++ b/sys/dev/age/if_agevar.h @@ -193,7 +193,7 @@ * Software state per device. */ struct age_softc { - struct ifnet *age_ifp; + if_t age_ifp; device_t age_dev; device_t age_miibus; struct resource *age_res[1]; diff --git a/sys/dev/alc/if_alc.c b/sys/dev/alc/if_alc.c --- a/sys/dev/alc/if_alc.c +++ b/sys/dev/alc/if_alc.c @@ -148,7 +148,7 @@ alc_find_ident(device_t); #ifndef __NO_STRICT_ALIGNMENT static struct mbuf * - alc_fixup_rx(struct ifnet *, struct mbuf *); + alc_fixup_rx(if_t, struct mbuf *); #endif static void alc_get_macaddr(struct alc_softc *); static void alc_get_macaddr_813x(struct alc_softc *); @@ -163,7 +163,7 @@ static void alc_init_tx_ring(struct alc_softc *); static void alc_int_task(void *, int); static int alc_intr(void *); -static int alc_ioctl(struct ifnet *, u_long, caddr_t); +static int alc_ioctl(if_t, u_long, caddr_t); static void alc_mac_config(struct alc_softc *); static uint32_t alc_mii_readreg_813x(struct alc_softc *, int, int); static uint32_t alc_mii_readreg_816x(struct alc_softc *, int, int); @@ -176,9 +176,9 @@ static uint32_t alc_miidbg_writereg(struct alc_softc *, int, int); static uint32_t alc_miiext_readreg(struct alc_softc *, int, int); static uint32_t alc_miiext_writereg(struct alc_softc *, int, int, int); -static int alc_mediachange(struct ifnet *); +static int alc_mediachange(if_t); static int alc_mediachange_locked(struct alc_softc *); -static void alc_mediastatus(struct ifnet *, struct ifmediareq *); +static void alc_mediastatus(if_t, struct ifmediareq *); static int alc_newbuf(struct alc_softc *, struct alc_rxdesc *); static void alc_osc_reset(struct alc_softc *); static void alc_phy_down(struct alc_softc *); @@ -197,8 +197,8 @@ static void alc_setwol_813x(struct alc_softc *); static void alc_setwol_816x(struct alc_softc *); static int alc_shutdown(device_t); -static void alc_start(struct ifnet *); -static void alc_start_locked(struct ifnet *); +static void alc_start(if_t); +static void alc_start_locked(if_t); static void alc_start_queue(struct alc_softc *); static void alc_start_tx(struct alc_softc *); static void alc_stats_clear(struct alc_softc *); @@ -408,7 +408,7 @@ { struct alc_softc *sc; struct mii_data *mii; - struct ifnet *ifp; + if_t ifp; uint32_t reg; sc = device_get_softc(dev); @@ -416,7 +416,7 @@ mii = device_get_softc(sc->alc_miibus); ifp = sc->alc_ifp; if (mii == NULL || ifp == NULL || - (ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) + (if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0) return; sc->alc_flags &= ~ALC_FLAG_LINK; @@ -603,14 +603,14 @@ } static void -alc_mediastatus(struct ifnet *ifp, struct ifmediareq *ifmr) +alc_mediastatus(if_t ifp, struct ifmediareq *ifmr) { struct alc_softc *sc; struct mii_data *mii; - sc = ifp->if_softc; + sc = if_getsoftc(ifp); ALC_LOCK(sc); - if ((ifp->if_flags & IFF_UP) == 0) { + if ((if_getflags(ifp) & IFF_UP) == 0) { ALC_UNLOCK(sc); return; } @@ -623,12 +623,12 @@ } static int -alc_mediachange(struct ifnet *ifp) +alc_mediachange(if_t ifp) { struct alc_softc *sc; int error; - sc = ifp->if_softc; + sc = if_getsoftc(ifp); ALC_LOCK(sc); error = alc_mediachange_locked(sc); ALC_UNLOCK(sc); @@ -1258,7 +1258,7 @@ if (init != 0) pmcfg |= PM_CFG_ASPM_L0S_ENB | PM_CFG_ASPM_L1_ENB | PM_CFG_MAC_ASPM_CHK; - else if ((sc->alc_ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) + else if ((if_getdrvflags(sc->alc_ifp) & IFF_DRV_RUNNING) != 0) pmcfg |= PM_CFG_ASPM_L1_ENB | PM_CFG_MAC_ASPM_CHK; } CSR_WRITE_4(sc, ALC_PM_CFG, pmcfg); @@ -1373,7 +1373,7 @@ alc_attach(device_t dev) { struct alc_softc *sc; - struct ifnet *ifp; + if_t ifp; int base, error, i, msic, msixc; uint16_t burst; @@ -1571,23 +1571,22 @@ 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_ioctl = alc_ioctl; - ifp->if_start = alc_start; - ifp->if_init = alc_init; - ifp->if_snd.ifq_drv_maxlen = ALC_TX_RING_CNT - 1; - IFQ_SET_MAXLEN(&ifp->if_snd, ifp->if_snd.ifq_drv_maxlen); - IFQ_SET_READY(&ifp->if_snd); - ifp->if_capabilities = IFCAP_TXCSUM | IFCAP_TSO4; - ifp->if_hwassist = ALC_CSUM_FEATURES | CSUM_TSO; + if_setflags(ifp, IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST); + if_setioctlfn(ifp, alc_ioctl); + if_setstartfn(ifp, alc_start); + if_setinitfn(ifp, alc_init); + if_setsendqlen(ifp, ALC_TX_RING_CNT - 1); + if_setsendqready(ifp); + if_setcapabilities(ifp, IFCAP_TXCSUM | IFCAP_TSO4); + if_sethwassist(ifp, ALC_CSUM_FEATURES | CSUM_TSO); if (pci_find_cap(dev, PCIY_PMG, &base) == 0) { - ifp->if_capabilities |= IFCAP_WOL_MAGIC | IFCAP_WOL_MCAST; + if_setcapabilitiesbit(ifp, IFCAP_WOL_MAGIC | IFCAP_WOL_MCAST, 0); sc->alc_flags |= ALC_FLAG_PM; sc->alc_pmcap = base; } - ifp->if_capenable = ifp->if_capabilities; + if_setcapenable(ifp, if_getcapabilities(ifp)); /* Set up MII bus. */ error = mii_attach(dev, &sc->alc_miibus, ifp, alc_mediachange, @@ -1601,9 +1600,9 @@ ether_ifattach(ifp, sc->alc_eaddr); /* VLAN capability setup. */ - ifp->if_capabilities |= IFCAP_VLAN_MTU | IFCAP_VLAN_HWTAGGING | - IFCAP_VLAN_HWCSUM | IFCAP_VLAN_HWTSO; - ifp->if_capenable = ifp->if_capabilities; + if_setcapabilitiesbit(ifp, IFCAP_VLAN_MTU | IFCAP_VLAN_HWTAGGING | + IFCAP_VLAN_HWCSUM | IFCAP_VLAN_HWTSO, 0); + if_setcapenable(ifp, if_getcapabilities(ifp)); /* * XXX * It seems enabling Tx checksum offloading makes more trouble. @@ -1617,12 +1616,12 @@ * seems to work. */ if ((sc->alc_flags & ALC_FLAG_AR816X_FAMILY) == 0) { - ifp->if_capenable &= ~IFCAP_TXCSUM; - ifp->if_hwassist &= ~ALC_CSUM_FEATURES; + if_setcapenablebit(ifp, 0, IFCAP_TXCSUM); + if_sethwassistbits(ifp, 0, ALC_CSUM_FEATURES); } /* 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)); /* Create local taskq. */ sc->alc_tq = taskqueue_create_fast("alc_taskq", M_WAITOK, @@ -1672,7 +1671,7 @@ alc_detach(device_t dev) { struct alc_softc *sc; - struct ifnet *ifp; + if_t ifp; int i, msic; sc = device_get_softc(dev); @@ -2526,7 +2525,7 @@ static void alc_setwol_813x(struct alc_softc *sc) { - struct ifnet *ifp; + if_t ifp; uint32_t reg, pmcs; uint16_t pmstat; @@ -2547,7 +2546,7 @@ return; } - if ((ifp->if_capenable & IFCAP_WOL) != 0) { + if ((if_getcapenable(ifp) & IFCAP_WOL) != 0) { if ((sc->alc_flags & ALC_FLAG_FASTETHER) == 0) alc_setlinkspeed(sc); CSR_WRITE_4(sc, ALC_MASTER_CFG, @@ -2555,22 +2554,22 @@ } pmcs = 0; - if ((ifp->if_capenable & IFCAP_WOL_MAGIC) != 0) + if ((if_getcapenable(ifp) & IFCAP_WOL_MAGIC) != 0) pmcs |= WOL_CFG_MAGIC | WOL_CFG_MAGIC_ENB; CSR_WRITE_4(sc, ALC_WOL_CFG, pmcs); reg = CSR_READ_4(sc, ALC_MAC_CFG); reg &= ~(MAC_CFG_DBG | MAC_CFG_PROMISC | MAC_CFG_ALLMULTI | MAC_CFG_BCAST); - if ((ifp->if_capenable & IFCAP_WOL_MCAST) != 0) + if ((if_getcapenable(ifp) & IFCAP_WOL_MCAST) != 0) reg |= MAC_CFG_ALLMULTI | MAC_CFG_BCAST; - if ((ifp->if_capenable & IFCAP_WOL) != 0) + if ((if_getcapenable(ifp) & IFCAP_WOL) != 0) reg |= MAC_CFG_RX_ENB; CSR_WRITE_4(sc, ALC_MAC_CFG, reg); reg = CSR_READ_4(sc, ALC_PCIE_PHYMISC); reg |= PCIE_PHYMISC_FORCE_RCV_DET; CSR_WRITE_4(sc, ALC_PCIE_PHYMISC, reg); - if ((ifp->if_capenable & IFCAP_WOL) == 0) { + if ((if_getcapenable(ifp) & IFCAP_WOL) == 0) { /* WOL disabled, PHY power down. */ alc_phy_down(sc); CSR_WRITE_4(sc, ALC_MASTER_CFG, @@ -2580,7 +2579,7 @@ pmstat = pci_read_config(sc->alc_dev, sc->alc_pmcap + PCIR_POWER_STATUS, 2); pmstat &= ~(PCIM_PSTAT_PME | PCIM_PSTAT_PMEENABLE); - if ((ifp->if_capenable & IFCAP_WOL) != 0) + if ((if_getcapenable(ifp) & IFCAP_WOL) != 0) pmstat |= PCIM_PSTAT_PME | PCIM_PSTAT_PMEENABLE; pci_write_config(sc->alc_dev, sc->alc_pmcap + PCIR_POWER_STATUS, pmstat, 2); @@ -2589,7 +2588,7 @@ static void alc_setwol_816x(struct alc_softc *sc) { - struct ifnet *ifp; + if_t ifp; uint32_t gphy, mac, master, pmcs, reg; uint16_t pmstat; @@ -2607,21 +2606,21 @@ gphy |= GPHY_CFG_PHY_IDDQ | GPHY_CFG_PWDOWN_HW; mac = CSR_READ_4(sc, ALC_MAC_CFG); } else { - if ((ifp->if_capenable & IFCAP_WOL) != 0) { + if ((if_getcapenable(ifp) & IFCAP_WOL) != 0) { gphy |= GPHY_CFG_EXT_RESET; if ((sc->alc_flags & ALC_FLAG_FASTETHER) == 0) alc_setlinkspeed(sc); } pmcs = 0; - if ((ifp->if_capenable & IFCAP_WOL_MAGIC) != 0) + if ((if_getcapenable(ifp) & IFCAP_WOL_MAGIC) != 0) pmcs |= WOL_CFG_MAGIC | WOL_CFG_MAGIC_ENB; CSR_WRITE_4(sc, ALC_WOL_CFG, pmcs); mac = CSR_READ_4(sc, ALC_MAC_CFG); mac &= ~(MAC_CFG_DBG | MAC_CFG_PROMISC | MAC_CFG_ALLMULTI | MAC_CFG_BCAST); - if ((ifp->if_capenable & IFCAP_WOL_MCAST) != 0) + if ((if_getcapenable(ifp) & IFCAP_WOL_MCAST) != 0) mac |= MAC_CFG_ALLMULTI | MAC_CFG_BCAST; - if ((ifp->if_capenable & IFCAP_WOL) != 0) + if ((if_getcapenable(ifp) & IFCAP_WOL) != 0) mac |= MAC_CFG_RX_ENB; alc_miiext_writereg(sc, MII_EXT_ANEG, MII_EXT_ANEG_S3DIG10, ANEG_S3DIG10_SL); @@ -2645,7 +2644,7 @@ pmstat = pci_read_config(sc->alc_dev, sc->alc_pmcap + PCIR_POWER_STATUS, 2); pmstat &= ~(PCIM_PSTAT_PME | PCIM_PSTAT_PMEENABLE); - if ((ifp->if_capenable & IFCAP_WOL) != 0) + if ((if_getcapenable(ifp) & IFCAP_WOL) != 0) pmstat |= PCIM_PSTAT_PME | PCIM_PSTAT_PMEENABLE; pci_write_config(sc->alc_dev, sc->alc_pmcap + PCIR_POWER_STATUS, pmstat, 2); @@ -2671,7 +2670,7 @@ alc_resume(device_t dev) { struct alc_softc *sc; - struct ifnet *ifp; + if_t ifp; uint16_t pmstat; sc = device_get_softc(dev); @@ -2690,8 +2689,8 @@ /* Reset PHY. */ alc_phy_reset(sc); ifp = sc->alc_ifp; - if ((ifp->if_flags & IFF_UP) != 0) { - ifp->if_drv_flags &= ~IFF_DRV_RUNNING; + if ((if_getflags(ifp) & IFF_UP) != 0) { + if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING); alc_init_locked(sc); } ALC_UNLOCK(sc); @@ -2932,24 +2931,24 @@ } static void -alc_start(struct ifnet *ifp) +alc_start(if_t ifp) { struct alc_softc *sc; - sc = ifp->if_softc; + sc = if_getsoftc(ifp); ALC_LOCK(sc); alc_start_locked(ifp); ALC_UNLOCK(sc); } static void -alc_start_locked(struct ifnet *ifp) +alc_start_locked(if_t ifp) { struct alc_softc *sc; struct mbuf *m_head; int enq; - sc = ifp->if_softc; + sc = if_getsoftc(ifp); ALC_LOCK_ASSERT(sc); @@ -2957,12 +2956,12 @@ if (sc->alc_cdata.alc_tx_cnt >= ALC_TX_DESC_HIWAT) alc_txeof(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->alc_flags & ALC_FLAG_LINK) == 0) return; - for (enq = 0; !IFQ_DRV_IS_EMPTY(&ifp->if_snd); ) { - IFQ_DRV_DEQUEUE(&ifp->if_snd, m_head); + for (enq = 0; !if_sendq_empty(ifp); ) { + m_head = if_dequeue(ifp); if (m_head == NULL) break; /* @@ -2973,8 +2972,8 @@ if (alc_encap(sc, &m_head)) { if (m_head == NULL) break; - IFQ_DRV_PREPEND(&ifp->if_snd, m_head); - ifp->if_drv_flags |= IFF_DRV_OACTIVE; + if_sendq_prepend(ifp, m_head); + if_setdrvflagbits(ifp, IFF_DRV_OACTIVE, 0); break; } @@ -3013,7 +3012,7 @@ static void alc_watchdog(struct alc_softc *sc) { - struct ifnet *ifp; + if_t ifp; ALC_LOCK_ASSERT(sc); @@ -3024,27 +3023,27 @@ if ((sc->alc_flags & ALC_FLAG_LINK) == 0) { if_printf(sc->alc_ifp, "watchdog timeout (lost link)\n"); if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); - ifp->if_drv_flags &= ~IFF_DRV_RUNNING; + if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING); alc_init_locked(sc); return; } if_printf(sc->alc_ifp, "watchdog timeout -- resetting\n"); if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); - ifp->if_drv_flags &= ~IFF_DRV_RUNNING; + if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING); alc_init_locked(sc); - if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) + if (!if_sendq_empty(ifp)) alc_start_locked(ifp); } static int -alc_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) +alc_ioctl(if_t ifp, u_long cmd, caddr_t data) { struct alc_softc *sc; struct ifreq *ifr; struct mii_data *mii; int error, mask; - sc = ifp->if_softc; + sc = if_getsoftc(ifp); ifr = (struct ifreq *)data; error = 0; switch (cmd) { @@ -3055,14 +3054,14 @@ ((sc->alc_flags & ALC_FLAG_JUMBO) == 0 && ifr->ifr_mtu > ETHERMTU)) error = EINVAL; - else if (ifp->if_mtu != ifr->ifr_mtu) { + else if (if_getmtu(ifp) != ifr->ifr_mtu) { ALC_LOCK(sc); - ifp->if_mtu = ifr->ifr_mtu; + if_setmtu(ifp, ifr->ifr_mtu); /* AR81[3567]x has 13 bits MSS field. */ - if (ifp->if_mtu > ALC_TSO_MTU && - (ifp->if_capenable & IFCAP_TSO4) != 0) { - ifp->if_capenable &= ~IFCAP_TSO4; - ifp->if_hwassist &= ~CSUM_TSO; + if (if_getmtu(ifp) > ALC_TSO_MTU && + (if_getcapenable(ifp) & IFCAP_TSO4) != 0) { + if_setcapenablebit(ifp, 0, IFCAP_TSO4); + if_sethwassistbits(ifp, 0, CSUM_TSO); VLAN_CAPABILITIES(ifp); } ALC_UNLOCK(sc); @@ -3070,22 +3069,22 @@ break; case SIOCSIFFLAGS: ALC_LOCK(sc); - if ((ifp->if_flags & IFF_UP) != 0) { - if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0 && - ((ifp->if_flags ^ sc->alc_if_flags) & + if ((if_getflags(ifp) & IFF_UP) != 0) { + if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0 && + ((if_getflags(ifp) ^ sc->alc_if_flags) & (IFF_PROMISC | IFF_ALLMULTI)) != 0) alc_rxfilter(sc); else alc_init_locked(sc); - } else if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) + } else if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0) alc_stop(sc); - sc->alc_if_flags = ifp->if_flags; + sc->alc_if_flags = if_getflags(ifp); ALC_UNLOCK(sc); break; case SIOCADDMULTI: case SIOCDELMULTI: ALC_LOCK(sc); - if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) + if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0) alc_rxfilter(sc); ALC_UNLOCK(sc); break; @@ -3096,48 +3095,48 @@ break; case SIOCSIFCAP: ALC_LOCK(sc); - mask = ifr->ifr_reqcap ^ ifp->if_capenable; + mask = ifr->ifr_reqcap ^ if_getcapenable(ifp); if ((mask & IFCAP_TXCSUM) != 0 && - (ifp->if_capabilities & IFCAP_TXCSUM) != 0) { - ifp->if_capenable ^= IFCAP_TXCSUM; - if ((ifp->if_capenable & IFCAP_TXCSUM) != 0) - ifp->if_hwassist |= ALC_CSUM_FEATURES; + (if_getcapabilities(ifp) & IFCAP_TXCSUM) != 0) { + if_togglecapenable(ifp, IFCAP_TXCSUM); + if ((if_getcapenable(ifp) & IFCAP_TXCSUM) != 0) + if_sethwassistbits(ifp, ALC_CSUM_FEATURES, 0); else - ifp->if_hwassist &= ~ALC_CSUM_FEATURES; + if_sethwassistbits(ifp, 0, ALC_CSUM_FEATURES); } if ((mask & IFCAP_TSO4) != 0 && - (ifp->if_capabilities & IFCAP_TSO4) != 0) { - ifp->if_capenable ^= IFCAP_TSO4; - if ((ifp->if_capenable & IFCAP_TSO4) != 0) { + (if_getcapabilities(ifp) & IFCAP_TSO4) != 0) { + if_togglecapenable(ifp, IFCAP_TSO4); + if ((if_getcapenable(ifp) & IFCAP_TSO4) != 0) { /* AR81[3567]x has 13 bits MSS field. */ - if (ifp->if_mtu > ALC_TSO_MTU) { - ifp->if_capenable &= ~IFCAP_TSO4; - ifp->if_hwassist &= ~CSUM_TSO; + if (if_getmtu(ifp) > ALC_TSO_MTU) { + if_setcapenablebit(ifp, 0, IFCAP_TSO4); + if_sethwassistbits(ifp, 0, CSUM_TSO); } else - ifp->if_hwassist |= CSUM_TSO; + if_sethwassistbits(ifp, CSUM_TSO, 0); } else - ifp->if_hwassist &= ~CSUM_TSO; + if_sethwassistbits(ifp, 0, CSUM_TSO); } if ((mask & IFCAP_WOL_MCAST) != 0 && - (ifp->if_capabilities & IFCAP_WOL_MCAST) != 0) - ifp->if_capenable ^= IFCAP_WOL_MCAST; + (if_getcapabilities(ifp) & IFCAP_WOL_MCAST) != 0) + if_togglecapenable(ifp, IFCAP_WOL_MCAST); if ((mask & IFCAP_WOL_MAGIC) != 0 && - (ifp->if_capabilities & IFCAP_WOL_MAGIC) != 0) - ifp->if_capenable ^= IFCAP_WOL_MAGIC; + (if_getcapabilities(ifp) & IFCAP_WOL_MAGIC) != 0) + if_togglecapenable(ifp, IFCAP_WOL_MAGIC); if ((mask & IFCAP_VLAN_HWTAGGING) != 0 && - (ifp->if_capabilities & IFCAP_VLAN_HWTAGGING) != 0) { - ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING; + (if_getcapabilities(ifp) & IFCAP_VLAN_HWTAGGING) != 0) { + if_togglecapenable(ifp, IFCAP_VLAN_HWTAGGING); alc_rxvlan(sc); } if ((mask & IFCAP_VLAN_HWCSUM) != 0 && - (ifp->if_capabilities & IFCAP_VLAN_HWCSUM) != 0) - ifp->if_capenable ^= IFCAP_VLAN_HWCSUM; + (if_getcapabilities(ifp) & IFCAP_VLAN_HWCSUM) != 0) + if_togglecapenable(ifp, IFCAP_VLAN_HWCSUM); if ((mask & IFCAP_VLAN_HWTSO) != 0 && - (ifp->if_capabilities & IFCAP_VLAN_HWTSO) != 0) - ifp->if_capenable ^= IFCAP_VLAN_HWTSO; - if ((ifp->if_capenable & IFCAP_VLAN_HWTAGGING) == 0) - ifp->if_capenable &= - ~(IFCAP_VLAN_HWTSO | IFCAP_VLAN_HWCSUM); + (if_getcapabilities(ifp) & IFCAP_VLAN_HWTSO) != 0) + if_togglecapenable(ifp, IFCAP_VLAN_HWTSO); + if ((if_getcapenable(ifp) & IFCAP_VLAN_HWTAGGING) == 0) + if_setcapenablebit(ifp, 0, + IFCAP_VLAN_HWTSO | IFCAP_VLAN_HWCSUM); ALC_UNLOCK(sc); VLAN_CAPABILITIES(ifp); break; @@ -3223,7 +3222,7 @@ { struct alc_hw_stats *stat; struct smb sb, *smb; - struct ifnet *ifp; + if_t ifp; uint32_t *reg; int i; @@ -3361,7 +3360,7 @@ alc_int_task(void *arg, int pending) { struct alc_softc *sc; - struct ifnet *ifp; + if_t ifp; uint32_t status; int more; @@ -3381,13 +3380,13 @@ CSR_WRITE_4(sc, ALC_INTR_STATUS, status | INTR_DIS_INT); more = 0; - if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) { + if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0) { if ((status & INTR_RX_PKT) != 0) { more = alc_rxintr(sc, sc->alc_process_limit); if (more == EAGAIN) sc->alc_morework = 1; else if (more == EIO) { - ifp->if_drv_flags &= ~IFF_DRV_RUNNING; + if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING); alc_init_locked(sc); ALC_UNLOCK(sc); return; @@ -3404,13 +3403,13 @@ if ((status & INTR_TXQ_TO_RST) != 0) device_printf(sc->alc_dev, "TxQ reset! -- resetting\n"); - ifp->if_drv_flags &= ~IFF_DRV_RUNNING; + if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING); alc_init_locked(sc); ALC_UNLOCK(sc); return; } - if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0 && - !IFQ_DRV_IS_EMPTY(&ifp->if_snd)) + if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0 && + !if_sendq_empty(ifp)) alc_start_locked(ifp); } @@ -3422,7 +3421,7 @@ } done: - if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) { + if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0) { /* Re-enable interrupts if we're running. */ if (sc->alc_flags & ALC_FLAG_MT) CSR_WRITE_4(sc, ALC_INTR_STATUS, 0); @@ -3435,7 +3434,7 @@ static void alc_txeof(struct alc_softc *sc) { - struct ifnet *ifp; + if_t ifp; struct alc_txdesc *txd; uint32_t cons, prod; @@ -3469,7 +3468,7 @@ for (; cons != prod; ALC_DESC_INC(cons, ALC_TX_RING_CNT)) { if (sc->alc_cdata.alc_tx_cnt <= 0) break; - ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; + if_setdrvflagbits(ifp, 0, IFF_DRV_OACTIVE); sc->alc_cdata.alc_tx_cnt--; txd = &sc->alc_cdata.alc_txdesc[cons]; if (txd->tx_m != NULL) { @@ -3536,7 +3535,7 @@ static int alc_rxintr(struct alc_softc *sc, int count) { - struct ifnet *ifp; + if_t ifp; struct rx_rdesc *rrd; uint32_t nsegs, status; int rr_cons, prog; @@ -3548,7 +3547,7 @@ sc->alc_cdata.alc_rx_ring_map, BUS_DMASYNC_POSTWRITE); rr_cons = sc->alc_cdata.alc_rr_cons; ifp = sc->alc_ifp; - for (prog = 0; (ifp->if_drv_flags & IFF_DRV_RUNNING) != 0;) { + for (prog = 0; (if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0;) { if (count-- <= 0) break; rrd = &sc->alc_rdata.alc_rr_ring[rr_cons]; @@ -3607,7 +3606,7 @@ #ifndef __NO_STRICT_ALIGNMENT static struct mbuf * -alc_fixup_rx(struct ifnet *ifp, struct mbuf *m) +alc_fixup_rx(if_t ifp, struct mbuf *m) { struct mbuf *n; int i; @@ -3648,7 +3647,7 @@ alc_rxeof(struct alc_softc *sc, struct rx_rdesc *rrd) { struct alc_rxdesc *rxd; - struct ifnet *ifp; + if_t ifp; struct mbuf *mp, *m; uint32_t rdinfo, status, vtag; int count, nsegs, rx_cons; @@ -3743,7 +3742,7 @@ * Due to hardware bugs, Rx checksum offloading * was intentionally disabled. */ - if ((ifp->if_capenable & IFCAP_VLAN_HWTAGGING) != 0 && + if ((if_getcapenable(ifp) & IFCAP_VLAN_HWTAGGING) != 0 && (status & RRD_VLAN_TAG) != 0) { vtag = RRD_VLAN(le32toh(rrd->vtag)); m->m_pkthdr.ether_vtag = ntohs(vtag); @@ -3756,7 +3755,7 @@ { /* Pass it on. */ ALC_UNLOCK(sc); - (*ifp->if_input)(ifp, m); + if_input(ifp, m); ALC_LOCK(sc); } } @@ -3927,7 +3926,7 @@ static void alc_init_locked(struct alc_softc *sc) { - struct ifnet *ifp; + if_t ifp; uint8_t eaddr[ETHER_ADDR_LEN]; bus_addr_t paddr; uint32_t reg, rxf_hi, rxf_lo; @@ -3936,7 +3935,7 @@ ifp = sc->alc_ifp; - if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) + if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0) return; /* * Cancel any pending I/O. @@ -3971,7 +3970,7 @@ CSR_WRITE_4(sc, ALC_CLK_GATING_CFG, 0); /* Reprogram the station address. */ - bcopy(IF_LLADDR(ifp), eaddr, ETHER_ADDR_LEN); + bcopy(if_getlladdr(ifp), eaddr, ETHER_ADDR_LEN); CSR_WRITE_4(sc, ALC_PAR0, eaddr[2] << 24 | eaddr[3] << 16 | eaddr[4] << 8 | eaddr[5]); CSR_WRITE_4(sc, ALC_PAR1, eaddr[0] << 8 | eaddr[1]); @@ -4305,8 +4304,8 @@ CSR_WRITE_4(sc, ALC_INTR_STATUS, 0xFFFFFFFF); CSR_WRITE_4(sc, ALC_INTR_STATUS, 0); - 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->alc_flags &= ~ALC_FLAG_LINK; /* Switch to the current media. */ @@ -4318,7 +4317,7 @@ static void alc_stop(struct alc_softc *sc) { - struct ifnet *ifp; + if_t ifp; struct alc_txdesc *txd; struct alc_rxdesc *rxd; uint32_t reg; @@ -4329,7 +4328,7 @@ * Mark the interface down and cancel the watchdog timer. */ ifp = sc->alc_ifp; - ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE); + if_setdrvflagbits(ifp, 0, (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)); sc->alc_flags &= ~ALC_FLAG_LINK; callout_stop(&sc->alc_tick_ch); sc->alc_watchdog_timer = 0; @@ -4573,14 +4572,14 @@ static void alc_rxvlan(struct alc_softc *sc) { - struct ifnet *ifp; + if_t ifp; uint32_t reg; ALC_LOCK_ASSERT(sc); ifp = sc->alc_ifp; reg = CSR_READ_4(sc, ALC_MAC_CFG); - if ((ifp->if_capenable & IFCAP_VLAN_HWTAGGING) != 0) + if ((if_getcapenable(ifp) & IFCAP_VLAN_HWTAGGING) != 0) reg |= MAC_CFG_VLAN_TAG_STRIP; else reg &= ~MAC_CFG_VLAN_TAG_STRIP; @@ -4602,7 +4601,7 @@ static void alc_rxfilter(struct alc_softc *sc) { - struct ifnet *ifp; + if_t ifp; uint32_t mchash[2]; uint32_t rxcfg; @@ -4613,12 +4612,12 @@ bzero(mchash, sizeof(mchash)); rxcfg = CSR_READ_4(sc, ALC_MAC_CFG); rxcfg &= ~(MAC_CFG_ALLMULTI | MAC_CFG_BCAST | MAC_CFG_PROMISC); - if ((ifp->if_flags & IFF_BROADCAST) != 0) + if ((if_getflags(ifp) & IFF_BROADCAST) != 0) rxcfg |= MAC_CFG_BCAST; - if ((ifp->if_flags & (IFF_PROMISC | IFF_ALLMULTI)) != 0) { - if ((ifp->if_flags & IFF_PROMISC) != 0) + if ((if_getflags(ifp) & (IFF_PROMISC | IFF_ALLMULTI)) != 0) { + if ((if_getflags(ifp) & IFF_PROMISC) != 0) rxcfg |= MAC_CFG_PROMISC; - if ((ifp->if_flags & IFF_ALLMULTI) != 0) + if ((if_getflags(ifp) & IFF_ALLMULTI) != 0) rxcfg |= MAC_CFG_ALLMULTI; mchash[0] = 0xFFFFFFFF; mchash[1] = 0xFFFFFFFF; @@ -4668,7 +4667,7 @@ #ifdef DEBUGNET static void -alc_debugnet_init(struct ifnet *ifp, int *nrxr, int *ncl, int *clsize) +alc_debugnet_init(if_t ifp, int *nrxr, int *ncl, int *clsize) { struct alc_softc *sc __diagused; @@ -4681,12 +4680,12 @@ } static void -alc_debugnet_event(struct ifnet *ifp __unused, enum debugnet_ev event __unused) +alc_debugnet_event(if_t ifp __unused, enum debugnet_ev event __unused) { } static int -alc_debugnet_transmit(struct ifnet *ifp, struct mbuf *m) +alc_debugnet_transmit(if_t ifp, struct mbuf *m) { struct alc_softc *sc; int error; @@ -4703,7 +4702,7 @@ } static int -alc_debugnet_poll(struct ifnet *ifp, int count) +alc_debugnet_poll(if_t ifp, int count) { struct alc_softc *sc; diff --git a/sys/dev/alc/if_alcvar.h b/sys/dev/alc/if_alcvar.h --- a/sys/dev/alc/if_alcvar.h +++ b/sys/dev/alc/if_alcvar.h @@ -204,7 +204,7 @@ * Software state per device. */ struct alc_softc { - struct ifnet *alc_ifp; + if_t alc_ifp; device_t alc_dev; device_t alc_miibus; struct resource *alc_res[1]; diff --git a/sys/dev/ale/if_ale.c b/sys/dev/ale/if_ale.c --- a/sys/dev/ale/if_ale.c +++ b/sys/dev/ale/if_ale.c @@ -117,13 +117,13 @@ static void ale_init_tx_ring(struct ale_softc *); static void ale_int_task(void *, int); static int ale_intr(void *); -static int ale_ioctl(struct ifnet *, u_long, caddr_t); +static int ale_ioctl(if_t, u_long, caddr_t); static void ale_mac_config(struct ale_softc *); static int ale_miibus_readreg(device_t, int, int); static void ale_miibus_statchg(device_t); static int ale_miibus_writereg(device_t, int, int, int); -static int ale_mediachange(struct ifnet *); -static void ale_mediastatus(struct ifnet *, struct ifmediareq *); +static int ale_mediachange(if_t); +static void ale_mediastatus(if_t, struct ifmediareq *); static void ale_phy_reset(struct ale_softc *); static int ale_probe(device_t); static void ale_reset(struct ale_softc *); @@ -137,8 +137,8 @@ static void ale_setlinkspeed(struct ale_softc *); static void ale_setwol(struct ale_softc *); static int ale_shutdown(device_t); -static void ale_start(struct ifnet *); -static void ale_start_locked(struct ifnet *); +static void ale_start(if_t); +static void ale_start_locked(if_t); static void ale_stats_clear(struct ale_softc *); static void ale_stats_update(struct ale_softc *); static void ale_stop(struct ale_softc *); @@ -256,14 +256,14 @@ { struct ale_softc *sc; struct mii_data *mii; - struct ifnet *ifp; + if_t ifp; uint32_t reg; sc = device_get_softc(dev); mii = device_get_softc(sc->ale_miibus); ifp = sc->ale_ifp; if (mii == NULL || ifp == NULL || - (ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) + (if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0) return; sc->ale_flags &= ~ALE_FLAG_LINK; @@ -297,14 +297,14 @@ } static void -ale_mediastatus(struct ifnet *ifp, struct ifmediareq *ifmr) +ale_mediastatus(if_t ifp, struct ifmediareq *ifmr) { struct ale_softc *sc; struct mii_data *mii; - sc = ifp->if_softc; + sc = if_getsoftc(ifp); ALE_LOCK(sc); - if ((ifp->if_flags & IFF_UP) == 0) { + if ((if_getflags(ifp) & IFF_UP) == 0) { ALE_UNLOCK(sc); return; } @@ -317,14 +317,14 @@ } static int -ale_mediachange(struct ifnet *ifp) +ale_mediachange(if_t ifp) { struct ale_softc *sc; struct mii_data *mii; struct mii_softc *miisc; int error; - sc = ifp->if_softc; + sc = if_getsoftc(ifp); ALE_LOCK(sc); mii = device_get_softc(sc->ale_miibus); LIST_FOREACH(miisc, &mii->mii_phys, mii_list) @@ -453,7 +453,7 @@ ale_attach(device_t dev) { struct ale_softc *sc; - struct ifnet *ifp; + if_t ifp; uint16_t burst; int error, i, msic, msixc, pmc; uint32_t rxf_len, txf_len; @@ -618,22 +618,21 @@ 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_ioctl = ale_ioctl; - ifp->if_start = ale_start; - ifp->if_init = ale_init; - ifp->if_snd.ifq_drv_maxlen = ALE_TX_RING_CNT - 1; - IFQ_SET_MAXLEN(&ifp->if_snd, ifp->if_snd.ifq_drv_maxlen); - IFQ_SET_READY(&ifp->if_snd); - ifp->if_capabilities = IFCAP_RXCSUM | IFCAP_TXCSUM | IFCAP_TSO4; - ifp->if_hwassist = ALE_CSUM_FEATURES | CSUM_TSO; + if_setflags(ifp, IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST); + if_setioctlfn(ifp, ale_ioctl); + if_setstartfn(ifp, ale_start); + if_setinitfn(ifp, ale_init); + if_setsendqlen(ifp, ALE_TX_RING_CNT - 1); + if_setsendqready(ifp); + if_setcapabilities(ifp, IFCAP_RXCSUM | IFCAP_TXCSUM | IFCAP_TSO4); + if_sethwassist(ifp, ALE_CSUM_FEATURES | CSUM_TSO); if (pci_find_cap(dev, PCIY_PMG, &pmc) == 0) { sc->ale_flags |= ALE_FLAG_PMCAP; - ifp->if_capabilities |= IFCAP_WOL_MAGIC | IFCAP_WOL_MCAST; + if_setcapabilitiesbit(ifp, IFCAP_WOL_MAGIC | IFCAP_WOL_MCAST, 0); } - ifp->if_capenable = ifp->if_capabilities; + if_setcapenable(ifp, if_getcapabilities(ifp)); /* Set up MII bus. */ error = mii_attach(dev, &sc->ale_miibus, ifp, ale_mediachange, @@ -647,9 +646,9 @@ ether_ifattach(ifp, sc->ale_eaddr); /* VLAN capability setup. */ - ifp->if_capabilities |= IFCAP_VLAN_MTU | IFCAP_VLAN_HWTAGGING | - IFCAP_VLAN_HWCSUM | IFCAP_VLAN_HWTSO; - ifp->if_capenable = ifp->if_capabilities; + if_setcapabilitiesbit(ifp, IFCAP_VLAN_MTU | IFCAP_VLAN_HWTAGGING | + IFCAP_VLAN_HWCSUM | IFCAP_VLAN_HWTSO, 0); + if_setcapenable(ifp, if_getcapabilities(ifp)); /* * Even though controllers supported by ale(3) have Rx checksum * offload bug the workaround for fragmented frames seemed to @@ -657,10 +656,10 @@ * work under certain conditions. So disable Rx checksum offload * until I find more clue about it but allow users to override it. */ - ifp->if_capenable &= ~IFCAP_RXCSUM; + if_setcapenablebit(ifp, 0, IFCAP_RXCSUM); /* 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)); /* Create local taskq. */ sc->ale_tq = taskqueue_create_fast("ale_taskq", M_WAITOK, @@ -706,7 +705,7 @@ ale_detach(device_t dev) { struct ale_softc *sc; - struct ifnet *ifp; + if_t ifp; int i, msic; sc = device_get_softc(dev); @@ -1485,7 +1484,7 @@ static void ale_setwol(struct ale_softc *sc) { - struct ifnet *ifp; + if_t ifp; uint32_t reg, pmcs; uint16_t pmstat; int pmc; @@ -1508,25 +1507,25 @@ } ifp = sc->ale_ifp; - if ((ifp->if_capenable & IFCAP_WOL) != 0) { + if ((if_getcapenable(ifp) & IFCAP_WOL) != 0) { if ((sc->ale_flags & ALE_FLAG_FASTETHER) == 0) ale_setlinkspeed(sc); } pmcs = 0; - if ((ifp->if_capenable & IFCAP_WOL_MAGIC) != 0) + if ((if_getcapenable(ifp) & IFCAP_WOL_MAGIC) != 0) pmcs |= WOL_CFG_MAGIC | WOL_CFG_MAGIC_ENB; CSR_WRITE_4(sc, ALE_WOL_CFG, pmcs); reg = CSR_READ_4(sc, ALE_MAC_CFG); reg &= ~(MAC_CFG_DBG | MAC_CFG_PROMISC | MAC_CFG_ALLMULTI | MAC_CFG_BCAST); - if ((ifp->if_capenable & IFCAP_WOL_MCAST) != 0) + if ((if_getcapenable(ifp) & IFCAP_WOL_MCAST) != 0) reg |= MAC_CFG_ALLMULTI | MAC_CFG_BCAST; - if ((ifp->if_capenable & IFCAP_WOL) != 0) + if ((if_getcapenable(ifp) & IFCAP_WOL) != 0) reg |= MAC_CFG_RX_ENB; CSR_WRITE_4(sc, ALE_MAC_CFG, reg); - if ((ifp->if_capenable & IFCAP_WOL) == 0) { + if ((if_getcapenable(ifp) & IFCAP_WOL) == 0) { /* WOL disabled, PHY power down. */ reg = CSR_READ_4(sc, ALE_PCIE_PHYMISC); reg |= PCIE_PHYMISC_FORCE_RCV_DET; @@ -1540,7 +1539,7 @@ /* Request PME. */ pmstat = pci_read_config(sc->ale_dev, pmc + PCIR_POWER_STATUS, 2); pmstat &= ~(PCIM_PSTAT_PME | PCIM_PSTAT_PMEENABLE); - if ((ifp->if_capenable & IFCAP_WOL) != 0) + if ((if_getcapenable(ifp) & IFCAP_WOL) != 0) pmstat |= PCIM_PSTAT_PME | PCIM_PSTAT_PMEENABLE; pci_write_config(sc->ale_dev, pmc + PCIR_POWER_STATUS, pmstat, 2); } @@ -1564,7 +1563,7 @@ ale_resume(device_t dev) { struct ale_softc *sc; - struct ifnet *ifp; + if_t ifp; int pmc; uint16_t pmstat; @@ -1584,8 +1583,8 @@ /* Reset PHY. */ ale_phy_reset(sc); ifp = sc->ale_ifp; - if ((ifp->if_flags & IFF_UP) != 0) { - ifp->if_drv_flags &= ~IFF_DRV_RUNNING; + if ((if_getflags(ifp) & IFF_UP) != 0) { + if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING); ale_init_locked(sc); } ALE_UNLOCK(sc); @@ -1869,24 +1868,24 @@ } static void -ale_start(struct ifnet *ifp) +ale_start(if_t ifp) { struct ale_softc *sc; - sc = ifp->if_softc; + sc = if_getsoftc(ifp); ALE_LOCK(sc); ale_start_locked(ifp); ALE_UNLOCK(sc); } static void -ale_start_locked(struct ifnet *ifp) +ale_start_locked(if_t ifp) { struct ale_softc *sc; struct mbuf *m_head; int enq; - sc = ifp->if_softc; + sc = if_getsoftc(ifp); ALE_LOCK_ASSERT(sc); @@ -1894,12 +1893,12 @@ if (sc->ale_cdata.ale_tx_cnt >= ALE_TX_DESC_HIWAT) ale_txeof(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->ale_flags & ALE_FLAG_LINK) == 0) return; - for (enq = 0; !IFQ_DRV_IS_EMPTY(&ifp->if_snd); ) { - IFQ_DRV_DEQUEUE(&ifp->if_snd, m_head); + for (enq = 0; !if_sendq_empty(ifp); ) { + m_head = if_dequeue(ifp); if (m_head == NULL) break; /* @@ -1910,8 +1909,8 @@ if (ale_encap(sc, &m_head)) { if (m_head == NULL) break; - IFQ_DRV_PREPEND(&ifp->if_snd, m_head); - ifp->if_drv_flags |= IFF_DRV_OACTIVE; + if_sendq_prepend(ifp, m_head); + if_setdrvflagbits(ifp, IFF_DRV_OACTIVE, 0); break; } @@ -1935,7 +1934,7 @@ static void ale_watchdog(struct ale_softc *sc) { - struct ifnet *ifp; + if_t ifp; ALE_LOCK_ASSERT(sc); @@ -1946,27 +1945,27 @@ if ((sc->ale_flags & ALE_FLAG_LINK) == 0) { if_printf(sc->ale_ifp, "watchdog timeout (lost link)\n"); if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); - ifp->if_drv_flags &= ~IFF_DRV_RUNNING; + if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING); ale_init_locked(sc); return; } if_printf(sc->ale_ifp, "watchdog timeout -- resetting\n"); if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); - ifp->if_drv_flags &= ~IFF_DRV_RUNNING; + if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING); ale_init_locked(sc); - if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) + if (!if_sendq_empty(ifp)) ale_start_locked(ifp); } static int -ale_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) +ale_ioctl(if_t ifp, u_long cmd, caddr_t data) { struct ale_softc *sc; struct ifreq *ifr; struct mii_data *mii; int error, mask; - sc = ifp->if_softc; + sc = if_getsoftc(ifp); ifr = (struct ifreq *)data; error = 0; switch (cmd) { @@ -1975,11 +1974,11 @@ ((sc->ale_flags & ALE_FLAG_JUMBO) == 0 && ifr->ifr_mtu > ETHERMTU)) error = EINVAL; - else if (ifp->if_mtu != ifr->ifr_mtu) { + else if (if_getmtu(ifp) != ifr->ifr_mtu) { ALE_LOCK(sc); - ifp->if_mtu = ifr->ifr_mtu; - if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) { - ifp->if_drv_flags &= ~IFF_DRV_RUNNING; + if_setmtu(ifp, ifr->ifr_mtu); + if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0) { + if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING); ale_init_locked(sc); } ALE_UNLOCK(sc); @@ -1987,25 +1986,25 @@ break; case SIOCSIFFLAGS: ALE_LOCK(sc); - if ((ifp->if_flags & IFF_UP) != 0) { - if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) { - if (((ifp->if_flags ^ sc->ale_if_flags) + if ((if_getflags(ifp) & IFF_UP) != 0) { + if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0) { + if (((if_getflags(ifp) ^ sc->ale_if_flags) & (IFF_PROMISC | IFF_ALLMULTI)) != 0) ale_rxfilter(sc); } else { ale_init_locked(sc); } } else { - if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) + if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0) ale_stop(sc); } - sc->ale_if_flags = ifp->if_flags; + sc->ale_if_flags = if_getflags(ifp); ALE_UNLOCK(sc); break; case SIOCADDMULTI: case SIOCDELMULTI: ALE_LOCK(sc); - if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) + if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0) ale_rxfilter(sc); ALE_UNLOCK(sc); break; @@ -2016,44 +2015,44 @@ break; case SIOCSIFCAP: ALE_LOCK(sc); - mask = ifr->ifr_reqcap ^ ifp->if_capenable; + mask = ifr->ifr_reqcap ^ if_getcapenable(ifp); if ((mask & IFCAP_TXCSUM) != 0 && - (ifp->if_capabilities & IFCAP_TXCSUM) != 0) { - ifp->if_capenable ^= IFCAP_TXCSUM; - if ((ifp->if_capenable & IFCAP_TXCSUM) != 0) - ifp->if_hwassist |= ALE_CSUM_FEATURES; + (if_getcapabilities(ifp) & IFCAP_TXCSUM) != 0) { + if_togglecapenable(ifp, IFCAP_TXCSUM); + if ((if_getcapenable(ifp) & IFCAP_TXCSUM) != 0) + if_sethwassistbits(ifp, ALE_CSUM_FEATURES, 0); else - ifp->if_hwassist &= ~ALE_CSUM_FEATURES; + if_sethwassistbits(ifp, 0, ALE_CSUM_FEATURES); } if ((mask & IFCAP_RXCSUM) != 0 && - (ifp->if_capabilities & IFCAP_RXCSUM) != 0) - ifp->if_capenable ^= IFCAP_RXCSUM; + (if_getcapabilities(ifp) & IFCAP_RXCSUM) != 0) + if_togglecapenable(ifp, IFCAP_RXCSUM); if ((mask & IFCAP_TSO4) != 0 && - (ifp->if_capabilities & IFCAP_TSO4) != 0) { - ifp->if_capenable ^= IFCAP_TSO4; - if ((ifp->if_capenable & IFCAP_TSO4) != 0) - ifp->if_hwassist |= CSUM_TSO; + (if_getcapabilities(ifp) & IFCAP_TSO4) != 0) { + if_togglecapenable(ifp, IFCAP_TSO4); + if ((if_getcapenable(ifp) & IFCAP_TSO4) != 0) + if_sethwassistbits(ifp, CSUM_TSO, 0); else - ifp->if_hwassist &= ~CSUM_TSO; + if_sethwassistbits(ifp, 0, CSUM_TSO); } if ((mask & IFCAP_WOL_MCAST) != 0 && - (ifp->if_capabilities & IFCAP_WOL_MCAST) != 0) - ifp->if_capenable ^= IFCAP_WOL_MCAST; + (if_getcapabilities(ifp) & IFCAP_WOL_MCAST) != 0) + if_togglecapenable(ifp, IFCAP_WOL_MCAST); if ((mask & IFCAP_WOL_MAGIC) != 0 && - (ifp->if_capabilities & IFCAP_WOL_MAGIC) != 0) - ifp->if_capenable ^= IFCAP_WOL_MAGIC; + (if_getcapabilities(ifp) & IFCAP_WOL_MAGIC) != 0) + if_togglecapenable(ifp, IFCAP_WOL_MAGIC); if ((mask & IFCAP_VLAN_HWCSUM) != 0 && - (ifp->if_capabilities & IFCAP_VLAN_HWCSUM) != 0) - ifp->if_capenable ^= IFCAP_VLAN_HWCSUM; + (if_getcapabilities(ifp) & IFCAP_VLAN_HWCSUM) != 0) + if_togglecapenable(ifp, IFCAP_VLAN_HWCSUM); if ((mask & IFCAP_VLAN_HWTSO) != 0 && - (ifp->if_capabilities & IFCAP_VLAN_HWTSO) != 0) - ifp->if_capenable ^= IFCAP_VLAN_HWTSO; + (if_getcapabilities(ifp) & IFCAP_VLAN_HWTSO) != 0) + if_togglecapenable(ifp, IFCAP_VLAN_HWTSO); if ((mask & IFCAP_VLAN_HWTAGGING) != 0 && - (ifp->if_capabilities & IFCAP_VLAN_HWTAGGING) != 0) { - ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING; - if ((ifp->if_capenable & IFCAP_VLAN_HWTAGGING) == 0) - ifp->if_capenable &= ~IFCAP_VLAN_HWTSO; + (if_getcapabilities(ifp) & IFCAP_VLAN_HWTAGGING) != 0) { + if_togglecapenable(ifp, IFCAP_VLAN_HWTAGGING); + if ((if_getcapenable(ifp) & IFCAP_VLAN_HWTAGGING) == 0) + if_setcapenablebit(ifp, 0, IFCAP_VLAN_HWTSO); ale_rxvlan(sc); } ALE_UNLOCK(sc); @@ -2122,7 +2121,7 @@ { struct ale_hw_stats *stat; struct smb sb, *smb; - struct ifnet *ifp; + if_t ifp; uint32_t *reg; int i; @@ -2237,7 +2236,7 @@ ale_int_task(void *arg, int pending) { struct ale_softc *sc; - struct ifnet *ifp; + if_t ifp; uint32_t status; int more; @@ -2255,13 +2254,13 @@ ifp = sc->ale_ifp; more = 0; - if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) { + if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0) { more = ale_rxeof(sc, sc->ale_process_limit); if (more == EAGAIN) sc->ale_morework = 1; else if (more == EIO) { sc->ale_stats.reset_brk_seq++; - ifp->if_drv_flags &= ~IFF_DRV_RUNNING; + if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING); ale_init_locked(sc); ALE_UNLOCK(sc); return; @@ -2274,12 +2273,12 @@ if ((status & INTR_DMA_WR_TO_RST) != 0) device_printf(sc->ale_dev, "DMA write error! -- resetting\n"); - ifp->if_drv_flags &= ~IFF_DRV_RUNNING; + if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING); ale_init_locked(sc); ALE_UNLOCK(sc); return; } - if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) + if (!if_sendq_empty(ifp)) ale_start_locked(ifp); } @@ -2300,7 +2299,7 @@ static void ale_txeof(struct ale_softc *sc) { - struct ifnet *ifp; + if_t ifp; struct ale_txdesc *txd; uint32_t cons, prod; int prog; @@ -2332,7 +2331,7 @@ if (sc->ale_cdata.ale_tx_cnt <= 0) break; prog++; - ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; + if_setdrvflagbits(ifp, 0, IFF_DRV_OACTIVE); sc->ale_cdata.ale_tx_cnt--; txd = &sc->ale_cdata.ale_txdesc[cons]; if (txd->tx_m != NULL) { @@ -2406,7 +2405,7 @@ static void ale_rxcsum(struct ale_softc *sc, struct mbuf *m, uint32_t status) { - struct ifnet *ifp; + if_t ifp; struct ip *ip; char *p; @@ -2430,7 +2429,7 @@ p += ETHER_HDR_LEN; if ((status & ALE_RD_802_3) != 0) p += LLC_SNAPFRAMELEN; - if ((ifp->if_capenable & IFCAP_VLAN_HWTAGGING) == 0 && + if ((if_getcapenable(ifp) & IFCAP_VLAN_HWTAGGING) == 0 && (status & ALE_RD_VLAN) != 0) p += ETHER_VLAN_ENCAP_LEN; ip = (struct ip *)p; @@ -2454,7 +2453,7 @@ { struct ale_rx_page *rx_page; struct rx_rs *rs; - struct ifnet *ifp; + if_t ifp; struct mbuf *m; uint32_t length, prod, seqno, status, vtags; int prog; @@ -2537,10 +2536,10 @@ ale_rx_update_page(sc, &rx_page, length, &prod); continue; } - if ((ifp->if_capenable & IFCAP_RXCSUM) != 0 && + if ((if_getcapenable(ifp) & IFCAP_RXCSUM) != 0 && (status & ALE_RD_IPV4) != 0) ale_rxcsum(sc, m, status); - if ((ifp->if_capenable & IFCAP_VLAN_HWTAGGING) != 0 && + if ((if_getcapenable(ifp) & IFCAP_VLAN_HWTAGGING) != 0 && (status & ALE_RD_VLAN) != 0) { vtags = ALE_RX_VLAN(le32toh(rs->vtags)); m->m_pkthdr.ether_vtag = ALE_RX_VLAN_TAG(vtags); @@ -2549,7 +2548,7 @@ /* Pass it to upper layer. */ ALE_UNLOCK(sc); - (*ifp->if_input)(ifp, m); + if_input(ifp, m); ALE_LOCK(sc); ale_rx_update_page(sc, &rx_page, length, &prod); @@ -2623,7 +2622,7 @@ static void ale_init_locked(struct ale_softc *sc) { - struct ifnet *ifp; + if_t ifp; struct mii_data *mii; uint8_t eaddr[ETHER_ADDR_LEN]; bus_addr_t paddr; @@ -2634,7 +2633,7 @@ ifp = sc->ale_ifp; mii = device_get_softc(sc->ale_miibus); - if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) + if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0) return; /* * Cancel any pending I/O. @@ -2649,7 +2648,7 @@ ale_init_tx_ring(sc); /* Reprogram the station address. */ - bcopy(IF_LLADDR(ifp), eaddr, ETHER_ADDR_LEN); + bcopy(if_getlladdr(ifp), eaddr, ETHER_ADDR_LEN); CSR_WRITE_4(sc, ALE_PAR0, eaddr[2] << 24 | eaddr[3] << 16 | eaddr[4] << 8 | eaddr[5]); CSR_WRITE_4(sc, ALE_PAR1, eaddr[0] << 8 | eaddr[1]); @@ -2720,10 +2719,10 @@ CSR_WRITE_2(sc, ALE_INTR_CLR_TIMER, ALE_USECS(1000)); /* Set Maximum frame size of controller. */ - if (ifp->if_mtu < ETHERMTU) + if (if_getmtu(ifp) < ETHERMTU) sc->ale_max_frame_size = ETHERMTU; else - sc->ale_max_frame_size = ifp->if_mtu; + sc->ale_max_frame_size = if_getmtu(ifp); sc->ale_max_frame_size += ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN + ETHER_CRC_LEN; CSR_WRITE_4(sc, ALE_FRAME_SIZE, sc->ale_max_frame_size); @@ -2746,9 +2745,9 @@ /* Configure Tx jumbo frame parameters. */ if ((sc->ale_flags & ALE_FLAG_JUMBO) != 0) { - if (ifp->if_mtu < ETHERMTU) + if (if_getmtu(ifp) < ETHERMTU) reg = sc->ale_max_frame_size; - else if (ifp->if_mtu < 6 * 1024) + else if (if_getmtu(ifp) < 6 * 1024) reg = (sc->ale_max_frame_size * 2) / 3; else reg = sc->ale_max_frame_size / 2; @@ -2841,8 +2840,8 @@ CSR_WRITE_4(sc, ALE_INTR_STATUS, 0xFFFFFFFF); CSR_WRITE_4(sc, ALE_INTR_STATUS, 0); - 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->ale_flags &= ~ALE_FLAG_LINK; /* Switch to the current media. */ @@ -2854,7 +2853,7 @@ static void ale_stop(struct ale_softc *sc) { - struct ifnet *ifp; + if_t ifp; struct ale_txdesc *txd; uint32_t reg; int i; @@ -2864,7 +2863,7 @@ * Mark the interface down and cancel the watchdog timer. */ ifp = sc->ale_ifp; - ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE); + if_setdrvflagbits(ifp, 0, (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)); sc->ale_flags &= ~ALE_FLAG_LINK; callout_stop(&sc->ale_tick_ch); sc->ale_watchdog_timer = 0; @@ -2984,7 +2983,7 @@ static void ale_rxvlan(struct ale_softc *sc) { - struct ifnet *ifp; + if_t ifp; uint32_t reg; ALE_LOCK_ASSERT(sc); @@ -2992,7 +2991,7 @@ ifp = sc->ale_ifp; reg = CSR_READ_4(sc, ALE_MAC_CFG); reg &= ~MAC_CFG_VLAN_TAG_STRIP; - if ((ifp->if_capenable & IFCAP_VLAN_HWTAGGING) != 0) + if ((if_getcapenable(ifp) & IFCAP_VLAN_HWTAGGING) != 0) reg |= MAC_CFG_VLAN_TAG_STRIP; CSR_WRITE_4(sc, ALE_MAC_CFG, reg); } @@ -3011,7 +3010,7 @@ static void ale_rxfilter(struct ale_softc *sc) { - struct ifnet *ifp; + if_t ifp; uint32_t mchash[2]; uint32_t rxcfg; @@ -3021,12 +3020,12 @@ rxcfg = CSR_READ_4(sc, ALE_MAC_CFG); rxcfg &= ~(MAC_CFG_ALLMULTI | MAC_CFG_BCAST | MAC_CFG_PROMISC); - if ((ifp->if_flags & IFF_BROADCAST) != 0) + if ((if_getflags(ifp) & IFF_BROADCAST) != 0) rxcfg |= MAC_CFG_BCAST; - if ((ifp->if_flags & (IFF_PROMISC | IFF_ALLMULTI)) != 0) { - if ((ifp->if_flags & IFF_PROMISC) != 0) + if ((if_getflags(ifp) & (IFF_PROMISC | IFF_ALLMULTI)) != 0) { + if ((if_getflags(ifp) & IFF_PROMISC) != 0) rxcfg |= MAC_CFG_PROMISC; - if ((ifp->if_flags & IFF_ALLMULTI) != 0) + if ((if_getflags(ifp) & IFF_ALLMULTI) != 0) rxcfg |= MAC_CFG_ALLMULTI; CSR_WRITE_4(sc, ALE_MAR0, 0xFFFFFFFF); CSR_WRITE_4(sc, ALE_MAR1, 0xFFFFFFFF); diff --git a/sys/dev/ale/if_alevar.h b/sys/dev/ale/if_alevar.h --- a/sys/dev/ale/if_alevar.h +++ b/sys/dev/ale/if_alevar.h @@ -183,7 +183,7 @@ * Software state per device. */ struct ale_softc { - struct ifnet *ale_ifp; + if_t ale_ifp; device_t ale_dev; device_t ale_miibus; struct resource *ale_res[1];