diff --git a/sys/dev/tsec/if_tsec.h b/sys/dev/tsec/if_tsec.h --- a/sys/dev/tsec/if_tsec.h +++ b/sys/dev/tsec/if_tsec.h @@ -55,7 +55,7 @@ struct tsec_softc { /* XXX MII bus requires that struct ifnet is first!!! */ - struct ifnet *tsec_ifp; + if_t tsec_ifp; struct mtx transmit_lock; /* transmitter lock */ struct mtx receive_lock; /* receiver lock */ diff --git a/sys/dev/tsec/if_tsec.c b/sys/dev/tsec/if_tsec.c --- a/sys/dev/tsec/if_tsec.c +++ b/sys/dev/tsec/if_tsec.c @@ -73,12 +73,12 @@ bus_dmamap_t *dmap, bus_size_t dsize, void **vaddr, void *raddr, const char *dname); static void tsec_dma_ctl(struct tsec_softc *sc, int state); -static void tsec_encap(struct ifnet *ifp, struct tsec_softc *sc, +static void tsec_encap(if_t ifp, struct tsec_softc *sc, struct mbuf *m0, uint16_t fcb_flags, int *start_tx); static void tsec_free_dma(struct tsec_softc *sc); static void tsec_free_dma_desc(bus_dma_tag_t dtag, bus_dmamap_t dmap, void *vaddr); -static int tsec_ifmedia_upd(struct ifnet *ifp); -static void tsec_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr); +static int tsec_ifmedia_upd(if_t ifp); +static void tsec_ifmedia_sts(if_t ifp, struct ifmediareq *ifmr); static int tsec_new_rxbuf(bus_dma_tag_t tag, bus_dmamap_t map, struct mbuf **mbufp, uint32_t *paddr); static void tsec_map_dma_addr(void *arg, bus_dma_segment_t *segs, @@ -86,12 +86,12 @@ static void tsec_intrs_ctl(struct tsec_softc *sc, int state); static void tsec_init(void *xsc); static void tsec_init_locked(struct tsec_softc *sc); -static int tsec_ioctl(struct ifnet *ifp, u_long command, caddr_t data); +static int tsec_ioctl(if_t ifp, u_long command, caddr_t data); static void tsec_reset_mac(struct tsec_softc *sc); static void tsec_setfilter(struct tsec_softc *sc); static void tsec_set_mac_address(struct tsec_softc *sc); -static void tsec_start(struct ifnet *ifp); -static void tsec_start_locked(struct ifnet *ifp); +static void tsec_start(if_t ifp); +static void tsec_start_locked(if_t ifp); static void tsec_stop(struct tsec_softc *sc); static void tsec_tick(void *arg); static void tsec_watchdog(struct tsec_softc *sc); @@ -119,7 +119,7 @@ tsec_attach(struct tsec_softc *sc) { uint8_t hwaddr[ETHER_ADDR_LEN]; - struct ifnet *ifp; + if_t ifp; int error = 0; int i; @@ -247,26 +247,25 @@ return (ENOMEM); } - ifp->if_softc = sc; + if_setsoftc(ifp, sc); if_initname(ifp, device_get_name(sc->dev), device_get_unit(sc->dev)); - ifp->if_flags = IFF_SIMPLEX | IFF_MULTICAST | IFF_BROADCAST; - ifp->if_init = tsec_init; - ifp->if_start = tsec_start; - ifp->if_ioctl = tsec_ioctl; + if_setflags(ifp, IFF_SIMPLEX | IFF_MULTICAST | IFF_BROADCAST); + if_setinitfn(ifp, tsec_init); + if_setstartfn(ifp, tsec_start); + if_setioctlfn(ifp, tsec_ioctl); - IFQ_SET_MAXLEN(&ifp->if_snd, TSEC_TX_NUM_DESC - 1); - ifp->if_snd.ifq_drv_maxlen = TSEC_TX_NUM_DESC - 1; - IFQ_SET_READY(&ifp->if_snd); + if_setsendqlen(ifp, TSEC_TX_NUM_DESC - 1); + if_setsendqready(ifp); - ifp->if_capabilities = IFCAP_VLAN_MTU; + if_setcapabilities(ifp, IFCAP_VLAN_MTU); if (sc->is_etsec) - ifp->if_capabilities |= IFCAP_HWCSUM; + if_setcapabilitiesbit(ifp, IFCAP_HWCSUM, 0); - ifp->if_capenable = ifp->if_capabilities; + if_setcapenable(ifp, if_getcapabilities(ifp)); #ifdef DEVICE_POLLING /* Advertise that polling is supported */ - ifp->if_capabilities |= IFCAP_POLLING; + if_setcapabilitiesbit(ifp, IFCAP_POLLING, 0); #endif /* Attach PHY(s) */ @@ -295,7 +294,7 @@ if (sc->tsec_ifp != NULL) { #ifdef DEVICE_POLLING - if (sc->tsec_ifp->if_capenable & IFCAP_POLLING) + if (sc->tsec_if_getcapenable(ifp) & IFCAP_POLLING) ether_poll_deregister(sc->tsec_ifp); #endif @@ -377,11 +376,11 @@ { struct tsec_desc *tx_desc = sc->tsec_tx_vaddr; struct tsec_desc *rx_desc = sc->tsec_rx_vaddr; - struct ifnet *ifp = sc->tsec_ifp; + if_t ifp = sc->tsec_ifp; uint32_t val, i; int timeout; - if (ifp->if_drv_flags & IFF_DRV_RUNNING) + if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) return; TSEC_GLOBAL_LOCK_ASSERT(sc); @@ -458,7 +457,7 @@ * ...only if polling is not turned on. Disable interrupts explicitly * if polling is enabled. */ - if (ifp->if_capenable & IFCAP_POLLING ) + if (if_getcapenable(ifp) & IFCAP_POLLING ) tsec_intrs_ctl(sc, 0); else #endif /* DEVICE_POLLING */ @@ -523,7 +522,7 @@ /* Step 19: Configure ethernet frame sizes */ TSEC_WRITE(sc, TSEC_REG_MINFLR, TSEC_MIN_FRAME_SIZE); - tsec_set_mtu(sc, ifp->if_mtu); + tsec_set_mtu(sc, if_getmtu(ifp)); /* Step 20: Enable Rx and RxBD sdata snooping */ TSEC_WRITE(sc, TSEC_REG_ATTR, TSEC_ATTR_RDSEN | TSEC_ATTR_RBDSEN); @@ -556,9 +555,9 @@ tsec_setup_multicast(sc); /* Step 27: Activate network interface */ - ifp->if_drv_flags |= IFF_DRV_RUNNING; - ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; - sc->tsec_if_flags = ifp->if_flags; + if_setdrvflagbits(ifp, IFF_DRV_RUNNING, 0); + if_setdrvflagbits(ifp, 0, IFF_DRV_OACTIVE); + sc->tsec_if_flags = if_getflags(ifp); sc->tsec_watchdog = 0; /* Schedule watchdog timeout */ @@ -579,7 +578,7 @@ sizeof(macbuf))); macbufp = (char *)macbuf; - curmac = (char *)IF_LLADDR(sc->tsec_ifp); + curmac = (char *)if_getlladdr(sc->tsec_ifp); /* Correct order of MAC address bytes */ for (i = 1; i <= ETHER_ADDR_LEN; i++) @@ -693,7 +692,7 @@ static void tsec_watchdog(struct tsec_softc *sc) { - struct ifnet *ifp; + if_t ifp; TSEC_GLOBAL_LOCK_ASSERT(sc); @@ -709,9 +708,9 @@ } static void -tsec_start(struct ifnet *ifp) +tsec_start(if_t ifp) { - struct tsec_softc *sc = ifp->if_softc; + struct tsec_softc *sc = if_getsoftc(ifp); TSEC_TRANSMIT_LOCK(sc); tsec_start_locked(ifp); @@ -719,7 +718,7 @@ } static void -tsec_start_locked(struct ifnet *ifp) +tsec_start_locked(if_t ifp) { struct tsec_softc *sc; struct mbuf *m0; @@ -728,7 +727,7 @@ int start_tx; uint16_t fcb_flags; - sc = ifp->if_softc; + sc = if_getsoftc(ifp); start_tx = 0; TSEC_TRANSMIT_LOCK_ASSERT(sc); @@ -742,12 +741,12 @@ for (;;) { if (TSEC_FREE_TX_DESC(sc) < TSEC_TX_MAX_DMA_SEGS) { /* No free descriptors */ - ifp->if_drv_flags |= IFF_DRV_OACTIVE; + if_setdrvflagbits(ifp, IFF_DRV_OACTIVE, 0); break; } /* Get packet from the queue */ - IFQ_DRV_DEQUEUE(&ifp->if_snd, m0); + m0 = if_dequeue(ifp); if (m0 == NULL) break; @@ -790,7 +789,7 @@ } static void -tsec_encap(struct ifnet *ifp, struct tsec_softc *sc, struct mbuf *m0, +tsec_encap(if_t ifp, struct tsec_softc *sc, struct mbuf *m0, uint16_t fcb_flags, int *start_tx) { bus_dma_segment_t segs[TSEC_TX_MAX_DMA_SEGS]; @@ -872,14 +871,14 @@ static void tsec_setfilter(struct tsec_softc *sc) { - struct ifnet *ifp; + if_t ifp; uint32_t flags; ifp = sc->tsec_ifp; flags = TSEC_READ(sc, TSEC_REG_RCTRL); /* Promiscuous mode */ - if (ifp->if_flags & IFF_PROMISC) + if (if_getflags(ifp) & IFF_PROMISC) flags |= TSEC_RCTRL_PROM; else flags &= ~TSEC_RCTRL_PROM; @@ -891,16 +890,16 @@ static poll_handler_t tsec_poll; static int -tsec_poll(struct ifnet *ifp, enum poll_cmd cmd, int count) +tsec_poll(if_t ifp, enum poll_cmd cmd, int count) { uint32_t ie; - struct tsec_softc *sc = ifp->if_softc; + struct tsec_softc *sc = if_getsoftc(ifp); int rx_npkts; rx_npkts = 0; TSEC_GLOBAL_LOCK(sc); - if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) { + if (!(if_getdrvflags(ifp) & IFF_DRV_RUNNING)) { TSEC_GLOBAL_UNLOCK(sc); return (rx_npkts); } @@ -926,9 +925,9 @@ #endif /* DEVICE_POLLING */ static int -tsec_ioctl(struct ifnet *ifp, u_long command, caddr_t data) +tsec_ioctl(if_t ifp, u_long command, caddr_t data) { - struct tsec_softc *sc = ifp->if_softc; + struct tsec_softc *sc = if_getsoftc(ifp); struct ifreq *ifr = (struct ifreq *)data; int mask, error = 0; @@ -936,33 +935,33 @@ case SIOCSIFMTU: TSEC_GLOBAL_LOCK(sc); if (tsec_set_mtu(sc, ifr->ifr_mtu)) - ifp->if_mtu = ifr->ifr_mtu; + if_setmtu(ifp, ifr->ifr_mtu); else error = EINVAL; TSEC_GLOBAL_UNLOCK(sc); break; case SIOCSIFFLAGS: TSEC_GLOBAL_LOCK(sc); - if (ifp->if_flags & IFF_UP) { - if (ifp->if_drv_flags & IFF_DRV_RUNNING) { - if ((sc->tsec_if_flags ^ ifp->if_flags) & + if (if_getflags(ifp) & IFF_UP) { + if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) { + if ((sc->tsec_if_flags ^ if_getflags(ifp)) & IFF_PROMISC) tsec_setfilter(sc); - if ((sc->tsec_if_flags ^ ifp->if_flags) & + if ((sc->tsec_if_flags ^ if_getflags(ifp)) & IFF_ALLMULTI) tsec_setup_multicast(sc); } else tsec_init_locked(sc); - } else if (ifp->if_drv_flags & IFF_DRV_RUNNING) + } else if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) tsec_stop(sc); - sc->tsec_if_flags = ifp->if_flags; + sc->tsec_if_flags = if_getflags(ifp); TSEC_GLOBAL_UNLOCK(sc); break; case SIOCADDMULTI: case SIOCDELMULTI: - if (ifp->if_drv_flags & IFF_DRV_RUNNING) { + if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) { TSEC_GLOBAL_LOCK(sc); tsec_setup_multicast(sc); TSEC_GLOBAL_UNLOCK(sc); @@ -973,11 +972,11 @@ command); break; case SIOCSIFCAP: - mask = ifp->if_capenable ^ ifr->ifr_reqcap; + mask = if_getcapenable(ifp) ^ ifr->ifr_reqcap; if ((mask & IFCAP_HWCSUM) && sc->is_etsec) { TSEC_GLOBAL_LOCK(sc); - ifp->if_capenable &= ~IFCAP_HWCSUM; - ifp->if_capenable |= IFCAP_HWCSUM & ifr->ifr_reqcap; + if_setcapenablebit(ifp, 0, IFCAP_HWCSUM); + if_setcapenablebit(ifp, IFCAP_HWCSUM & ifr->ifr_reqcap, 0); tsec_offload_setup(sc); TSEC_GLOBAL_UNLOCK(sc); } @@ -991,14 +990,14 @@ TSEC_GLOBAL_LOCK(sc); /* Disable interrupts */ tsec_intrs_ctl(sc, 0); - ifp->if_capenable |= IFCAP_POLLING; + if_setcapenablebit(ifp, IFCAP_POLLING, 0); TSEC_GLOBAL_UNLOCK(sc); } else { error = ether_poll_deregister(ifp); TSEC_GLOBAL_LOCK(sc); /* Enable interrupts */ tsec_intrs_ctl(sc, 1); - ifp->if_capenable &= ~IFCAP_POLLING; + if_setcapenablebit(ifp, 0, IFCAP_POLLING); TSEC_GLOBAL_UNLOCK(sc); } } @@ -1010,15 +1009,15 @@ } /* Flush buffers if not empty */ - if (ifp->if_flags & IFF_UP) + if (if_getflags(ifp) & IFF_UP) tsec_start(ifp); return (error); } static int -tsec_ifmedia_upd(struct ifnet *ifp) +tsec_ifmedia_upd(if_t ifp) { - struct tsec_softc *sc = ifp->if_softc; + struct tsec_softc *sc = if_getsoftc(ifp); struct mii_data *mii; TSEC_TRANSMIT_LOCK(sc); @@ -1031,9 +1030,9 @@ } static void -tsec_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr) +tsec_ifmedia_sts(if_t ifp, struct ifmediareq *ifmr) { - struct tsec_softc *sc = ifp->if_softc; + struct tsec_softc *sc = if_getsoftc(ifp); struct mii_data *mii; TSEC_TRANSMIT_LOCK(sc); @@ -1213,7 +1212,7 @@ static void tsec_stop(struct tsec_softc *sc) { - struct ifnet *ifp; + if_t ifp; uint32_t tmpval; TSEC_GLOBAL_LOCK_ASSERT(sc); @@ -1222,7 +1221,7 @@ /* Disable interface and watchdog timer */ callout_stop(&sc->tsec_callout); - ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE); + if_setdrvflagbits(ifp, 0, (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)); sc->tsec_watchdog = 0; /* Disable all interrupts and stop DMA */ @@ -1252,7 +1251,7 @@ tsec_tick(void *arg) { struct tsec_softc *sc = arg; - struct ifnet *ifp; + if_t ifp; int link; TSEC_GLOBAL_LOCK(sc); @@ -1265,7 +1264,7 @@ mii_tick(sc->tsec_mii); if (link == 0 && sc->tsec_link == 1 && - (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))) + (!if_sendq_empty(ifp))) tsec_start_locked(ifp); /* Schedule another timeout one second from now. */ @@ -1284,7 +1283,7 @@ tsec_receive_intr_locked(struct tsec_softc *sc, int count) { struct tsec_desc *rx_desc; - struct ifnet *ifp; + if_t ifp; struct rx_data_type *rx_data; struct mbuf *m; uint32_t i; @@ -1386,7 +1385,7 @@ tsec_offload_process_frame(sc, m); TSEC_RECEIVE_UNLOCK(sc); - (*ifp->if_input)(ifp, m); + if_input(ifp, m); TSEC_RECEIVE_LOCK(sc); rx_npkts++; } @@ -1415,7 +1414,7 @@ TSEC_RECEIVE_LOCK(sc); #ifdef DEVICE_POLLING - if (sc->tsec_ifp->if_capenable & IFCAP_POLLING) { + if (sc->tsec_if_getcapenable(ifp) & IFCAP_POLLING) { TSEC_RECEIVE_UNLOCK(sc); return; } @@ -1431,7 +1430,7 @@ static void tsec_transmit_intr_locked(struct tsec_softc *sc) { - struct ifnet *ifp; + if_t ifp; uint32_t tx_idx; TSEC_TRANSMIT_LOCK_ASSERT(sc); @@ -1481,7 +1480,7 @@ bus_dmamap_sync(sc->tsec_tx_dtag, sc->tsec_tx_dmap, BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); - ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; + if_setdrvflagbits(ifp, 0, IFF_DRV_OACTIVE); tsec_start_locked(ifp); if (sc->tx_idx_tail == sc->tx_idx_head) @@ -1496,7 +1495,7 @@ TSEC_TRANSMIT_LOCK(sc); #ifdef DEVICE_POLLING - if (sc->tsec_ifp->if_capenable & IFCAP_POLLING) { + if (sc->tsec_if_getcapenable(ifp) & IFCAP_POLLING) { TSEC_TRANSMIT_UNLOCK(sc); return; } @@ -1511,7 +1510,7 @@ static void tsec_error_intr_locked(struct tsec_softc *sc, int count) { - struct ifnet *ifp; + if_t ifp; uint32_t eflags; TSEC_GLOBAL_LOCK_ASSERT(sc); @@ -1541,7 +1540,7 @@ if_inc_counter(ifp, IFCOUNTER_IQDROPS, 1); } - if (ifp->if_flags & IFF_DEBUG) + if (if_getflags(ifp) & IFF_DEBUG) if_printf(ifp, "tsec_error_intr(): event flags: 0x%x\n", eflags); @@ -1817,7 +1816,7 @@ static void tsec_offload_setup(struct tsec_softc *sc) { - struct ifnet *ifp = sc->tsec_ifp; + if_t ifp = sc->tsec_ifp; uint32_t reg; TSEC_GLOBAL_LOCK_ASSERT(sc); @@ -1825,10 +1824,10 @@ reg = TSEC_READ(sc, TSEC_REG_TCTRL); reg |= TSEC_TCTRL_IPCSEN | TSEC_TCTRL_TUCSEN; - if (ifp->if_capenable & IFCAP_TXCSUM) - ifp->if_hwassist = TSEC_CHECKSUM_FEATURES; + if (if_getcapenable(ifp) & IFCAP_TXCSUM) + if_sethwassist(ifp, TSEC_CHECKSUM_FEATURES); else - ifp->if_hwassist = 0; + if_sethwassist(ifp, 0); TSEC_WRITE(sc, TSEC_REG_TCTRL, reg); @@ -1836,7 +1835,7 @@ reg &= ~(TSEC_RCTRL_IPCSEN | TSEC_RCTRL_TUCSEN | TSEC_RCTRL_PRSDEP); reg |= TSEC_RCTRL_PRSDEP_PARSE_L2 | TSEC_RCTRL_VLEX; - if (ifp->if_capenable & IFCAP_RXCSUM) + if (if_getcapenable(ifp) & IFCAP_RXCSUM) reg |= TSEC_RCTRL_IPCSEN | TSEC_RCTRL_TUCSEN | TSEC_RCTRL_PRSDEP_PARSE_L234; @@ -1895,12 +1894,12 @@ tsec_setup_multicast(struct tsec_softc *sc) { uint32_t hashtable[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; - struct ifnet *ifp = sc->tsec_ifp; + if_t ifp = sc->tsec_ifp; int i; TSEC_GLOBAL_LOCK_ASSERT(sc); - if (ifp->if_flags & IFF_ALLMULTI) { + if (if_getflags(ifp) & IFF_ALLMULTI) { for (i = 0; i < 8; i++) TSEC_WRITE(sc, TSEC_REG_GADDR(i), 0xFFFFFFFF);