The branch main has been updated by jhibbits:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=ac8e2243b88c95642a5e3f409edc52a859938c00

commit ac8e2243b88c95642a5e3f409edc52a859938c00
Author:     Justin Hibbits <[email protected]>
AuthorDate: 2022-03-01 19:21:11 +0000
Commit:     Justin Hibbits <[email protected]>
CommitDate: 2023-02-06 17:32:08 +0000

    Mechanically convert if_rl(4) to IfAPI
    
    Sponsored by:   Juniper Networks, Inc.
    Differential Revision: https://reviews.freebsd.org/D37803
---
 sys/dev/rl/if_rl.c    | 205 +++++++++++++++++++++++++-------------------------
 sys/dev/rl/if_rlreg.h |   2 +-
 2 files changed, 103 insertions(+), 104 deletions(-)

diff --git a/sys/dev/rl/if_rl.c b/sys/dev/rl/if_rl.c
index a53bc7d6eb1a..ec680b632995 100644
--- a/sys/dev/rl/if_rl.c
+++ b/sys/dev/rl/if_rl.c
@@ -185,9 +185,9 @@ static void rl_eeprom_getword(struct rl_softc *, int, 
uint16_t *);
 static int rl_encap(struct rl_softc *, struct mbuf **);
 static int rl_list_tx_init(struct rl_softc *);
 static int rl_list_rx_init(struct rl_softc *);
-static int rl_ifmedia_upd(struct ifnet *);
-static void rl_ifmedia_sts(struct ifnet *, struct ifmediareq *);
-static int rl_ioctl(struct ifnet *, u_long, caddr_t);
+static int rl_ifmedia_upd(if_t);
+static void rl_ifmedia_sts(if_t, struct ifmediareq *);
+static int rl_ioctl(if_t, u_long, caddr_t);
 static void rl_intr(void *);
 static void rl_init(void *);
 static void rl_init_locked(struct rl_softc *sc);
@@ -195,8 +195,8 @@ static int rl_miibus_readreg(device_t, int, int);
 static void rl_miibus_statchg(device_t);
 static int rl_miibus_writereg(device_t, int, int, int);
 #ifdef DEVICE_POLLING
-static int rl_poll(struct ifnet *ifp, enum poll_cmd cmd, int count);
-static int rl_poll_locked(struct ifnet *ifp, enum poll_cmd cmd, int count);
+static int rl_poll(if_t ifp, enum poll_cmd cmd, int count);
+static int rl_poll_locked(if_t ifp, enum poll_cmd cmd, int count);
 #endif
 static int rl_probe(device_t);
 static void rl_read_eeprom(struct rl_softc *, uint8_t *, int, int, int);
@@ -205,8 +205,8 @@ static int rl_resume(device_t);
 static int rl_rxeof(struct rl_softc *);
 static void rl_rxfilter(struct rl_softc *);
 static int rl_shutdown(device_t);
-static void rl_start(struct ifnet *);
-static void rl_start_locked(struct ifnet *);
+static void rl_start(if_t);
+static void rl_start_locked(if_t);
 static void rl_stop(struct rl_softc *);
 static int rl_suspend(device_t);
 static void rl_tick(void *);
@@ -478,14 +478,14 @@ static void
 rl_miibus_statchg(device_t dev)
 {
        struct rl_softc         *sc;
-       struct ifnet            *ifp;
+       if_t                    ifp;
        struct mii_data         *mii;
 
        sc = device_get_softc(dev);
        mii = device_get_softc(sc->rl_miibus);
        ifp = sc->rl_ifp;
        if (mii == NULL || ifp == NULL ||
-           (ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
+           (if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0)
                return;
 
        sc->rl_flags &= ~RL_FLAG_LINK;
@@ -528,7 +528,7 @@ rl_hash_maddr(void *arg, struct sockaddr_dl *sdl, u_int cnt)
 static void
 rl_rxfilter(struct rl_softc *sc)
 {
-       struct ifnet            *ifp = sc->rl_ifp;
+       if_t                    ifp = sc->rl_ifp;
        uint32_t                hashes[2] = { 0, 0 };
        uint32_t                rxfilt;
 
@@ -540,11 +540,11 @@ rl_rxfilter(struct rl_softc *sc)
        /* Always accept frames destined for this host. */
        rxfilt |= RL_RXCFG_RX_INDIV;
        /* Set capture broadcast bit to capture broadcast frames. */
-       if (ifp->if_flags & IFF_BROADCAST)
+       if (if_getflags(ifp) & IFF_BROADCAST)
                rxfilt |= RL_RXCFG_RX_BROAD;
-       if (ifp->if_flags & IFF_ALLMULTI || ifp->if_flags & IFF_PROMISC) {
+       if (if_getflags(ifp) & IFF_ALLMULTI || if_getflags(ifp) & IFF_PROMISC) {
                rxfilt |= RL_RXCFG_RX_MULTI;
-               if (ifp->if_flags & IFF_PROMISC)
+               if (if_getflags(ifp) & IFF_PROMISC)
                        rxfilt |= RL_RXCFG_RX_ALLPHYS;
                hashes[0] = 0xFFFFFFFF;
                hashes[1] = 0xFFFFFFFF;
@@ -637,7 +637,7 @@ rl_attach(device_t dev)
 {
        uint8_t                 eaddr[ETHER_ADDR_LEN];
        uint16_t                as[3];
-       struct ifnet            *ifp;
+       if_t                    ifp;
        struct rl_softc         *sc;
        const struct rl_type    *t;
        struct sysctl_ctx_list  *ctx;
@@ -801,14 +801,14 @@ rl_attach(device_t dev)
                goto fail;
        }
 
-       ifp->if_softc = sc;
+       if_setsoftc(ifp, sc);
        if_initname(ifp, device_get_name(dev), device_get_unit(dev));
-       ifp->if_mtu = ETHERMTU;
-       ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
-       ifp->if_ioctl = rl_ioctl;
-       ifp->if_start = rl_start;
-       ifp->if_init = rl_init;
-       ifp->if_capabilities = IFCAP_VLAN_MTU;
+       if_setmtu(ifp, ETHERMTU);
+       if_setflags(ifp, IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST);
+       if_setioctlfn(ifp, rl_ioctl);
+       if_setstartfn(ifp, rl_start);
+       if_setinitfn(ifp, rl_init);
+       if_setcapabilities(ifp, IFCAP_VLAN_MTU);
        /* Check WOL for RTL8139B or newer controllers. */
        if (sc->rl_type == RL_8139 &&
            pci_find_cap(sc->rl_dev, PCIY_PMG, &pmc) == 0) {
@@ -820,7 +820,7 @@ rl_attach(device_t dev)
                case RL_HWREV_8139D:
                case RL_HWREV_8101:
                case RL_HWREV_8100:
-                       ifp->if_capabilities |= IFCAP_WOL;
+                       if_setcapabilitiesbit(ifp, IFCAP_WOL, 0);
                        /* Disable WOL. */
                        rl_clrwol(sc);
                        break;
@@ -828,14 +828,13 @@ rl_attach(device_t dev)
                        break;
                }
        }
-       ifp->if_capenable = ifp->if_capabilities;
-       ifp->if_capenable &= ~(IFCAP_WOL_UCAST | IFCAP_WOL_MCAST);
+       if_setcapenable(ifp, if_getcapabilities(ifp));
+       if_setcapenablebit(ifp, 0, (IFCAP_WOL_UCAST | IFCAP_WOL_MCAST));
 #ifdef DEVICE_POLLING
-       ifp->if_capabilities |= IFCAP_POLLING;
+       if_setcapabilitiesbit(ifp, IFCAP_POLLING, 0);
 #endif
-       IFQ_SET_MAXLEN(&ifp->if_snd, ifqmaxlen);
-       ifp->if_snd.ifq_drv_maxlen = ifqmaxlen;
-       IFQ_SET_READY(&ifp->if_snd);
+       if_setsendqlen(ifp, ifqmaxlen);
+       if_setsendqready(ifp);
 
        /*
         * Call MI attach routine.
@@ -868,7 +867,7 @@ static int
 rl_detach(device_t dev)
 {
        struct rl_softc         *sc;
-       struct ifnet            *ifp;
+       if_t                    ifp;
 
        sc = device_get_softc(dev);
        ifp = sc->rl_ifp;
@@ -876,7 +875,7 @@ rl_detach(device_t dev)
        KASSERT(mtx_initialized(&sc->rl_mtx), ("rl mutex not initialized"));
 
 #ifdef DEVICE_POLLING
-       if (ifp->if_capenable & IFCAP_POLLING)
+       if (if_getcapenable(ifp) & IFCAP_POLLING)
                ether_poll_deregister(ifp);
 #endif
        /* These should only be active if attach succeeded */
@@ -1116,7 +1115,7 @@ static int
 rl_rxeof(struct rl_softc *sc)
 {
        struct mbuf             *m;
-       struct ifnet            *ifp = sc->rl_ifp;
+       if_t                    ifp = sc->rl_ifp;
        uint8_t                 *rxbufpos;
        int                     total_len = 0;
        int                     wrap = 0;
@@ -1143,7 +1142,7 @@ rl_rxeof(struct rl_softc *sc)
 
        while((CSR_READ_1(sc, RL_COMMAND) & RL_CMD_EMPTY_RXBUF) == 0) {
 #ifdef DEVICE_POLLING
-               if (ifp->if_capenable & IFCAP_POLLING) {
+               if (if_getcapenable(ifp) & IFCAP_POLLING) {
                        if (sc->rxcycles <= 0)
                                break;
                        sc->rxcycles--;
@@ -1168,7 +1167,7 @@ rl_rxeof(struct rl_softc *sc)
                    total_len < ETHER_MIN_LEN ||
                    total_len > ETHER_MAX_LEN + ETHER_VLAN_ENCAP_LEN) {
                        if_inc_counter(ifp, IFCOUNTER_IERRORS, 1);
-                       ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+                       if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
                        rl_init_locked(sc);
                        return (rx_npkts);
                }
@@ -1222,7 +1221,7 @@ rl_rxeof(struct rl_softc *sc)
 
                if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1);
                RL_UNLOCK(sc);
-               (*ifp->if_input)(ifp, m);
+               if_input(ifp, m);
                RL_LOCK(sc);
                rx_npkts++;
        }
@@ -1238,7 +1237,7 @@ rl_rxeof(struct rl_softc *sc)
 static void
 rl_txeof(struct rl_softc *sc)
 {
-       struct ifnet            *ifp = sc->rl_ifp;
+       if_t                    ifp = sc->rl_ifp;
        uint32_t                txstat;
 
        RL_LOCK_ASSERT(sc);
@@ -1280,14 +1279,14 @@ rl_txeof(struct rl_softc *sc)
                                CSR_WRITE_4(sc, RL_TXCFG, RL_TXCFG_CONFIG);
                        oldthresh = sc->rl_txthresh;
                        /* error recovery */
-                       ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+                       if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
                        rl_init_locked(sc);
                        /* restore original threshold */
                        sc->rl_txthresh = oldthresh;
                        return;
                }
                RL_INC(sc->rl_cdata.last_tx);
-               ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
+               if_setdrvflagbits(ifp, 0, IFF_DRV_OACTIVE);
        } while (sc->rl_cdata.last_tx != sc->rl_cdata.cur_tx);
 
        if (RL_LAST_TXMBUF(sc) == NULL)
@@ -1435,22 +1434,22 @@ rl_tick(void *xsc)
 
 #ifdef DEVICE_POLLING
 static int
-rl_poll(struct ifnet *ifp, enum poll_cmd cmd, int count)
+rl_poll(if_t ifp, enum poll_cmd cmd, int count)
 {
-       struct rl_softc *sc = ifp->if_softc;
+       struct rl_softc *sc = if_getsoftc(ifp);
        int rx_npkts = 0;
 
        RL_LOCK(sc);
-       if (ifp->if_drv_flags & IFF_DRV_RUNNING)
+       if (if_getdrvflags(ifp) & IFF_DRV_RUNNING)
                rx_npkts = rl_poll_locked(ifp, cmd, count);
        RL_UNLOCK(sc);
        return (rx_npkts);
 }
 
 static int
-rl_poll_locked(struct ifnet *ifp, enum poll_cmd cmd, int count)
+rl_poll_locked(if_t ifp, enum poll_cmd cmd, int count)
 {
-       struct rl_softc *sc = ifp->if_softc;
+       struct rl_softc *sc = if_getsoftc(ifp);
        int rx_npkts;
 
        RL_LOCK_ASSERT(sc);
@@ -1459,7 +1458,7 @@ rl_poll_locked(struct ifnet *ifp, enum poll_cmd cmd, int 
count)
        rx_npkts = rl_rxeof(sc);
        rl_txeof(sc);
 
-       if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
+       if (!if_sendq_empty(ifp))
                rl_start_locked(ifp);
 
        if (cmd == POLL_AND_CHECK_STATUS) {
@@ -1475,7 +1474,7 @@ rl_poll_locked(struct ifnet *ifp, enum poll_cmd cmd, int 
count)
                /* XXX We should check behaviour on receiver stalls. */
 
                if (status & RL_ISR_SYSTEM_ERR) {
-                       ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+                       if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
                        rl_init_locked(sc);
                }
        }
@@ -1487,7 +1486,7 @@ static void
 rl_intr(void *arg)
 {
        struct rl_softc         *sc = arg;
-       struct ifnet            *ifp = sc->rl_ifp;
+       if_t                    ifp = sc->rl_ifp;
        uint16_t                status;
        int                     count;
 
@@ -1497,11 +1496,11 @@ rl_intr(void *arg)
                goto done_locked;
 
 #ifdef DEVICE_POLLING
-       if  (ifp->if_capenable & IFCAP_POLLING)
+       if  (if_getcapenable(ifp) & IFCAP_POLLING)
                goto done_locked;
 #endif
 
-       if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
+       if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0)
                goto done_locked2;
        status = CSR_READ_2(sc, RL_ISR);
        if (status == 0xffff || (status & RL_INTRS) == 0)
@@ -1512,13 +1511,13 @@ rl_intr(void *arg)
        CSR_WRITE_2(sc, RL_IMR, 0);
        for (count = 16; count > 0; count--) {
                CSR_WRITE_2(sc, RL_ISR, status);
-               if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
+               if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) {
                        if (status & (RL_ISR_RX_OK | RL_ISR_RX_ERR))
                                rl_rxeof(sc);
                        if (status & (RL_ISR_TX_OK | RL_ISR_TX_ERR))
                                rl_txeof(sc);
                        if (status & RL_ISR_SYSTEM_ERR) {
-                               ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+                               if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
                                rl_init_locked(sc);
                                RL_UNLOCK(sc);
                                return;
@@ -1530,11 +1529,11 @@ rl_intr(void *arg)
                        break;
        }
 
-       if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
+       if (!if_sendq_empty(ifp))
                rl_start_locked(ifp);
 
 done_locked2:
-       if (ifp->if_drv_flags & IFF_DRV_RUNNING)
+       if (if_getdrvflags(ifp) & IFF_DRV_RUNNING)
                CSR_WRITE_2(sc, RL_IMR, RL_INTRS);
 done_locked:
        RL_UNLOCK(sc);
@@ -1611,9 +1610,9 @@ rl_encap(struct rl_softc *sc, struct mbuf **m_head)
  * Main transmit routine.
  */
 static void
-rl_start(struct ifnet *ifp)
+rl_start(if_t ifp)
 {
-       struct rl_softc         *sc = ifp->if_softc;
+       struct rl_softc         *sc = if_getsoftc(ifp);
 
        RL_LOCK(sc);
        rl_start_locked(ifp);
@@ -1621,19 +1620,19 @@ rl_start(struct ifnet *ifp)
 }
 
 static void
-rl_start_locked(struct ifnet *ifp)
+rl_start_locked(if_t ifp)
 {
-       struct rl_softc         *sc = ifp->if_softc;
+       struct rl_softc         *sc = if_getsoftc(ifp);
        struct mbuf             *m_head = NULL;
 
        RL_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->rl_flags & RL_FLAG_LINK) == 0)
                return;
 
        while (RL_CUR_TXMBUF(sc) == NULL) {
-               IFQ_DRV_DEQUEUE(&ifp->if_snd, m_head);
+               m_head = if_dequeue(ifp);
 
                if (m_head == NULL)
                        break;
@@ -1641,8 +1640,8 @@ rl_start_locked(struct ifnet *ifp)
                if (rl_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;
                }
 
@@ -1666,7 +1665,7 @@ rl_start_locked(struct ifnet *ifp)
         * packets from the queue.
         */
        if (RL_CUR_TXMBUF(sc) != NULL)
-               ifp->if_drv_flags |= IFF_DRV_OACTIVE;
+               if_setdrvflagbits(ifp, IFF_DRV_OACTIVE, 0);
 }
 
 static void
@@ -1682,7 +1681,7 @@ rl_init(void *xsc)
 static void
 rl_init_locked(struct rl_softc *sc)
 {
-       struct ifnet            *ifp = sc->rl_ifp;
+       if_t                    ifp = sc->rl_ifp;
        struct mii_data         *mii;
        uint32_t                eaddr[2];
 
@@ -1690,7 +1689,7 @@ rl_init_locked(struct rl_softc *sc)
 
        mii = device_get_softc(sc->rl_miibus);
 
-       if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0)
+       if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0)
                return;
 
        /*
@@ -1716,7 +1715,7 @@ rl_init_locked(struct rl_softc *sc)
         */
        CSR_WRITE_1(sc, RL_EECMD, RL_EEMODE_WRITECFG);
        bzero(eaddr, sizeof(eaddr));
-       bcopy(IF_LLADDR(sc->rl_ifp), eaddr, ETHER_ADDR_LEN);
+       bcopy(if_getlladdr(sc->rl_ifp), eaddr, ETHER_ADDR_LEN);
        CSR_WRITE_STREAM_4(sc, RL_IDR0, eaddr[0]);
        CSR_WRITE_STREAM_4(sc, RL_IDR4, eaddr[1]);
        CSR_WRITE_1(sc, RL_EECMD, RL_EEMODE_OFF);
@@ -1745,7 +1744,7 @@ rl_init_locked(struct rl_softc *sc)
 
 #ifdef DEVICE_POLLING
        /* Disable interrupts if we are polling. */
-       if (ifp->if_capenable & IFCAP_POLLING)
+       if (if_getcapenable(ifp) & IFCAP_POLLING)
                CSR_WRITE_2(sc, RL_IMR, 0);
        else
 #endif
@@ -1766,8 +1765,8 @@ rl_init_locked(struct rl_softc *sc)
 
        CSR_WRITE_1(sc, sc->rl_cfg1, RL_CFG1_DRVLOAD|RL_CFG1_FULLDUPLEX);
 
-       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);
 
        callout_reset(&sc->rl_stat_callout, hz, rl_tick, sc);
 }
@@ -1776,9 +1775,9 @@ rl_init_locked(struct rl_softc *sc)
  * Set media options.
  */
 static int
-rl_ifmedia_upd(struct ifnet *ifp)
+rl_ifmedia_upd(if_t ifp)
 {
-       struct rl_softc         *sc = ifp->if_softc;
+       struct rl_softc         *sc = if_getsoftc(ifp);
        struct mii_data         *mii;
 
        mii = device_get_softc(sc->rl_miibus);
@@ -1794,9 +1793,9 @@ rl_ifmedia_upd(struct ifnet *ifp)
  * Report current media status.
  */
 static void
-rl_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr)
+rl_ifmedia_sts(if_t ifp, struct ifmediareq *ifmr)
 {
-       struct rl_softc         *sc = ifp->if_softc;
+       struct rl_softc         *sc = if_getsoftc(ifp);
        struct mii_data         *mii;
 
        mii = device_get_softc(sc->rl_miibus);
@@ -1809,26 +1808,26 @@ rl_ifmedia_sts(struct ifnet *ifp, struct ifmediareq 
*ifmr)
 }
 
 static int
-rl_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
+rl_ioctl(if_t ifp, u_long command, caddr_t data)
 {
        struct ifreq            *ifr = (struct ifreq *)data;
        struct mii_data         *mii;
-       struct rl_softc         *sc = ifp->if_softc;
+       struct rl_softc         *sc = if_getsoftc(ifp);
        int                     error = 0, mask;
 
        switch (command) {
        case SIOCSIFFLAGS:
                RL_LOCK(sc);
-               if (ifp->if_flags & IFF_UP) {
-                       if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
-                           ((ifp->if_flags ^ sc->rl_if_flags) &
+               if (if_getflags(ifp) & IFF_UP) {
+                       if (if_getdrvflags(ifp) & IFF_DRV_RUNNING &&
+                           ((if_getflags(ifp) ^ sc->rl_if_flags) &
                             (IFF_PROMISC | IFF_ALLMULTI)))
                                rl_rxfilter(sc);
                         else
                                rl_init_locked(sc);
-                } else if (ifp->if_drv_flags & IFF_DRV_RUNNING)
+                } else if (if_getdrvflags(ifp) & IFF_DRV_RUNNING)
                        rl_stop(sc);
-               sc->rl_if_flags = ifp->if_flags;
+               sc->rl_if_flags = if_getflags(ifp);
                RL_UNLOCK(sc);
                break;
        case SIOCADDMULTI:
@@ -1843,40 +1842,40 @@ rl_ioctl(struct ifnet *ifp, u_long command, caddr_t 
data)
                error = ifmedia_ioctl(ifp, ifr, &mii->mii_media, command);
                break;
        case SIOCSIFCAP:
-               mask = ifr->ifr_reqcap ^ ifp->if_capenable;
+               mask = ifr->ifr_reqcap ^ if_getcapenable(ifp);
 #ifdef DEVICE_POLLING
                if (ifr->ifr_reqcap & IFCAP_POLLING &&
-                   !(ifp->if_capenable & IFCAP_POLLING)) {
+                   !(if_getcapenable(ifp) & IFCAP_POLLING)) {
                        error = ether_poll_register(rl_poll, ifp);
                        if (error)
                                return(error);
                        RL_LOCK(sc);
                        /* Disable interrupts */
                        CSR_WRITE_2(sc, RL_IMR, 0x0000);
-                       ifp->if_capenable |= IFCAP_POLLING;
+                       if_setcapenablebit(ifp, IFCAP_POLLING, 0);
                        RL_UNLOCK(sc);
                        return (error);
                        
                }
                if (!(ifr->ifr_reqcap & IFCAP_POLLING) &&
-                   ifp->if_capenable & IFCAP_POLLING) {
+                   if_getcapenable(ifp) & IFCAP_POLLING) {
                        error = ether_poll_deregister(ifp);
                        /* Enable interrupts. */
                        RL_LOCK(sc);
                        CSR_WRITE_2(sc, RL_IMR, RL_INTRS);
-                       ifp->if_capenable &= ~IFCAP_POLLING;
+                       if_setcapenablebit(ifp, 0, IFCAP_POLLING);
                        RL_UNLOCK(sc);
                        return (error);
                }
 #endif /* DEVICE_POLLING */
                if ((mask & IFCAP_WOL) != 0 &&
-                   (ifp->if_capabilities & IFCAP_WOL) != 0) {
+                   (if_getcapabilities(ifp) & IFCAP_WOL) != 0) {
                        if ((mask & IFCAP_WOL_UCAST) != 0)
-                               ifp->if_capenable ^= IFCAP_WOL_UCAST;
+                               if_togglecapenable(ifp, IFCAP_WOL_UCAST);
                        if ((mask & IFCAP_WOL_MCAST) != 0)
-                               ifp->if_capenable ^= IFCAP_WOL_MCAST;
+                               if_togglecapenable(ifp, IFCAP_WOL_MCAST);
                        if ((mask & IFCAP_WOL_MAGIC) != 0)
-                               ifp->if_capenable ^= IFCAP_WOL_MAGIC;
+                               if_togglecapenable(ifp, IFCAP_WOL_MAGIC);
                }
                break;
        default:
@@ -1901,7 +1900,7 @@ rl_watchdog(struct rl_softc *sc)
 
        rl_txeof(sc);
        rl_rxeof(sc);
-       sc->rl_ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+       if_setdrvflagbits(sc->rl_ifp, 0, IFF_DRV_RUNNING);
        rl_init_locked(sc);
 }
 
@@ -1913,13 +1912,13 @@ static void
 rl_stop(struct rl_softc *sc)
 {
        int                     i;
-       struct ifnet            *ifp = sc->rl_ifp;
+       if_t                    ifp = sc->rl_ifp;
 
        RL_LOCK_ASSERT(sc);
 
        sc->rl_watchdog_timer = 0;
        callout_stop(&sc->rl_stat_callout);
-       ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
+       if_setdrvflagbits(ifp, 0, (IFF_DRV_RUNNING | IFF_DRV_OACTIVE));
        sc->rl_flags &= ~RL_FLAG_LINK;
 
        CSR_WRITE_1(sc, RL_COMMAND, 0x00);
@@ -1981,7 +1980,7 @@ static int
 rl_resume(device_t dev)
 {
        struct rl_softc         *sc;
-       struct ifnet            *ifp;
+       if_t                    ifp;
        int                     pmc;
        uint16_t                pmstat;
 
@@ -1990,7 +1989,7 @@ rl_resume(device_t dev)
 
        RL_LOCK(sc);
 
-       if ((ifp->if_capabilities & IFCAP_WOL) != 0 &&
+       if ((if_getcapabilities(ifp) & IFCAP_WOL) != 0 &&
            pci_find_cap(sc->rl_dev, PCIY_PMG, &pmc) == 0) {
                /* Disable PME and clear PME status. */
                pmstat = pci_read_config(sc->rl_dev,
@@ -2008,7 +2007,7 @@ rl_resume(device_t dev)
        }
 
        /* reinitialize interface if necessary */
-       if (ifp->if_flags & IFF_UP)
+       if (if_getflags(ifp) & IFF_UP)
                rl_init_locked(sc);
 
        sc->suspended = 0;
@@ -2036,7 +2035,7 @@ rl_shutdown(device_t dev)
         * interrupt comes in later on, which can happen in some
         * cases.
         */
-       sc->rl_ifp->if_flags &= ~IFF_UP;
+       if_setflagbits(sc->rl_ifp, 0, IFF_UP);
        rl_setwol(sc);
        RL_UNLOCK(sc);
 
@@ -2046,7 +2045,7 @@ rl_shutdown(device_t dev)
 static void
 rl_setwol(struct rl_softc *sc)
 {
-       struct ifnet            *ifp;
+       if_t                    ifp;
        int                     pmc;
        uint16_t                pmstat;
        uint8_t                 v;
@@ -2054,7 +2053,7 @@ rl_setwol(struct rl_softc *sc)
        RL_LOCK_ASSERT(sc);
 
        ifp = sc->rl_ifp;
-       if ((ifp->if_capabilities & IFCAP_WOL) == 0)
+       if ((if_getcapabilities(ifp) & IFCAP_WOL) == 0)
                return;
        if (pci_find_cap(sc->rl_dev, PCIY_PMG, &pmc) != 0)
                return;
@@ -2065,24 +2064,24 @@ rl_setwol(struct rl_softc *sc)
        /* Enable PME. */
        v = CSR_READ_1(sc, sc->rl_cfg1);
        v &= ~RL_CFG1_PME;
-       if ((ifp->if_capenable & IFCAP_WOL) != 0)
+       if ((if_getcapenable(ifp) & IFCAP_WOL) != 0)
                v |= RL_CFG1_PME;
        CSR_WRITE_1(sc, sc->rl_cfg1, v);
 
        v = CSR_READ_1(sc, sc->rl_cfg3);
        v &= ~(RL_CFG3_WOL_LINK | RL_CFG3_WOL_MAGIC);
-       if ((ifp->if_capenable & IFCAP_WOL_MAGIC) != 0)
+       if ((if_getcapenable(ifp) & IFCAP_WOL_MAGIC) != 0)
                v |= RL_CFG3_WOL_MAGIC;
        CSR_WRITE_1(sc, sc->rl_cfg3, v);
 
        v = CSR_READ_1(sc, sc->rl_cfg5);
        v &= ~(RL_CFG5_WOL_BCAST | RL_CFG5_WOL_MCAST | RL_CFG5_WOL_UCAST);
        v &= ~RL_CFG5_WOL_LANWAKE;
-       if ((ifp->if_capenable & IFCAP_WOL_UCAST) != 0)
+       if ((if_getcapenable(ifp) & IFCAP_WOL_UCAST) != 0)
                v |= RL_CFG5_WOL_UCAST;
-       if ((ifp->if_capenable & IFCAP_WOL_MCAST) != 0)
+       if ((if_getcapenable(ifp) & IFCAP_WOL_MCAST) != 0)
                v |= RL_CFG5_WOL_MCAST | RL_CFG5_WOL_BCAST;
-       if ((ifp->if_capenable & IFCAP_WOL) != 0)
+       if ((if_getcapenable(ifp) & IFCAP_WOL) != 0)
                v |= RL_CFG5_WOL_LANWAKE;
        CSR_WRITE_1(sc, sc->rl_cfg5, v);
 
@@ -2092,7 +2091,7 @@ rl_setwol(struct rl_softc *sc)
        /* Request PME if WOL is requested. */
        pmstat = pci_read_config(sc->rl_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->rl_dev, pmc + PCIR_POWER_STATUS, pmstat, 2);
 }
@@ -2100,11 +2099,11 @@ rl_setwol(struct rl_softc *sc)
 static void
 rl_clrwol(struct rl_softc *sc)
 {
-       struct ifnet            *ifp;
+       if_t                    ifp;
        uint8_t                 v;
 
        ifp = sc->rl_ifp;
-       if ((ifp->if_capabilities & IFCAP_WOL) == 0)
+       if ((if_getcapabilities(ifp) & IFCAP_WOL) == 0)
                return;
 
        /* Enable config register write. */
diff --git a/sys/dev/rl/if_rlreg.h b/sys/dev/rl/if_rlreg.h
index 8bb8822d0a7d..71db25e765ee 100644
--- a/sys/dev/rl/if_rlreg.h
+++ b/sys/dev/rl/if_rlreg.h
@@ -863,7 +863,7 @@ struct rl_list_data {
 enum rl_twist { DONE, CHK_LINK, FIND_ROW, SET_PARAM, RECHK_LONG, RETUNE };
 
 struct rl_softc {
-       struct ifnet            *rl_ifp;        /* interface info */
+       if_t                    rl_ifp; /* interface info */
        bus_space_handle_t      rl_bhandle;     /* bus space handle */
        bus_space_tag_t         rl_btag;        /* bus space tag */
        device_t                rl_dev;

Reply via email to