Mechanically convert mge(4) to IfAPI

Sponsored by:	Juniper Networks, Inc.
Differential Revision: https://reviews.freebsd.org/D37833
This commit is contained in:
Justin Hibbits 2022-08-19 12:04:55 -04:00
parent b7459fb0ad
commit 98fe10c8fc
2 changed files with 76 additions and 77 deletions

View file

@ -100,15 +100,15 @@ static int mge_miibus_writereg(device_t dev, int phy, int reg, int value);
static int mge_mdio_readreg(device_t dev, int phy, int reg); static int mge_mdio_readreg(device_t dev, int phy, int reg);
static int mge_mdio_writereg(device_t dev, int phy, int reg, int value); static int mge_mdio_writereg(device_t dev, int phy, int reg, int value);
static int mge_ifmedia_upd(struct ifnet *ifp); static int mge_ifmedia_upd(if_t ifp);
static void mge_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr); static void mge_ifmedia_sts(if_t ifp, struct ifmediareq *ifmr);
static void mge_init(void *arg); static void mge_init(void *arg);
static void mge_init_locked(void *arg); static void mge_init_locked(void *arg);
static void mge_start(struct ifnet *ifp); static void mge_start(if_t ifp);
static void mge_start_locked(struct ifnet *ifp); static void mge_start_locked(if_t ifp);
static void mge_watchdog(struct mge_softc *sc); static void mge_watchdog(struct mge_softc *sc);
static int mge_ioctl(struct ifnet *ifp, u_long command, caddr_t data); static int mge_ioctl(if_t ifp, u_long command, caddr_t data);
static uint32_t mge_tfut_ipg(uint32_t val, int ver); static uint32_t mge_tfut_ipg(uint32_t val, int ver);
static uint32_t mge_rx_ipg(uint32_t val, int ver); static uint32_t mge_rx_ipg(uint32_t val, int ver);
@ -144,7 +144,7 @@ static void mge_get_dma_addr(void *arg, bus_dma_segment_t *segs, int nseg,
static void mge_free_dma(struct mge_softc *sc); static void mge_free_dma(struct mge_softc *sc);
static void mge_free_desc(struct mge_softc *sc, struct mge_desc_wrapper* tab, static void mge_free_desc(struct mge_softc *sc, struct mge_desc_wrapper* tab,
uint32_t size, bus_dma_tag_t buffer_tag, uint8_t free_mbufs); uint32_t size, bus_dma_tag_t buffer_tag, uint8_t free_mbufs);
static void mge_offload_process_frame(struct ifnet *ifp, struct mbuf *frame, static void mge_offload_process_frame(if_t ifp, struct mbuf *frame,
uint32_t status, uint16_t bufsize); uint32_t status, uint16_t bufsize);
static void mge_offload_setup_descriptor(struct mge_softc *sc, static void mge_offload_setup_descriptor(struct mge_softc *sc,
struct mge_desc_wrapper *dw); struct mge_desc_wrapper *dw);
@ -441,7 +441,7 @@ mge_set_mac_address(struct mge_softc *sc)
MGE_GLOBAL_LOCK_ASSERT(sc); MGE_GLOBAL_LOCK_ASSERT(sc);
if_mac = (char *)IF_LLADDR(sc->ifp); if_mac = (char *)if_getlladdr(sc->ifp);
mac_l = (if_mac[4] << 8) | (if_mac[5]); mac_l = (if_mac[4] << 8) | (if_mac[5]);
mac_h = (if_mac[0] << 24)| (if_mac[1] << 16) | mac_h = (if_mac[0] << 24)| (if_mac[1] << 16) |
@ -478,7 +478,7 @@ mge_set_prom_mode(struct mge_softc *sc, uint8_t queue)
uint32_t reg_val, i; uint32_t reg_val, i;
/* Enable or disable promiscuous mode as needed */ /* Enable or disable promiscuous mode as needed */
if (sc->ifp->if_flags & IFF_PROMISC) { if (sc->if_getflags(ifp) & IFF_PROMISC) {
port_config = MGE_READ(sc, MGE_PORT_CONFIG); port_config = MGE_READ(sc, MGE_PORT_CONFIG);
port_config |= PORT_CONFIG_UPM; port_config |= PORT_CONFIG_UPM;
MGE_WRITE(sc, MGE_PORT_CONFIG, port_config); MGE_WRITE(sc, MGE_PORT_CONFIG, port_config);
@ -739,15 +739,15 @@ mge_reinit_rx(struct mge_softc *sc)
static poll_handler_t mge_poll; static poll_handler_t mge_poll;
static int static int
mge_poll(struct ifnet *ifp, enum poll_cmd cmd, int count) mge_poll(if_t ifp, enum poll_cmd cmd, int count)
{ {
struct mge_softc *sc = ifp->if_softc; struct mge_softc *sc = if_getsoftc(ifp);
uint32_t int_cause, int_cause_ext; uint32_t int_cause, int_cause_ext;
int rx_npkts = 0; int rx_npkts = 0;
MGE_RECEIVE_LOCK(sc); MGE_RECEIVE_LOCK(sc);
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) { if (!(if_getdrvflags(ifp) & IFF_DRV_RUNNING)) {
MGE_RECEIVE_UNLOCK(sc); MGE_RECEIVE_UNLOCK(sc);
return (rx_npkts); return (rx_npkts);
} }
@ -782,7 +782,7 @@ mge_attach(device_t dev)
{ {
struct mge_softc *sc; struct mge_softc *sc;
struct mii_softc *miisc; struct mii_softc *miisc;
struct ifnet *ifp; if_t ifp;
uint8_t hwaddr[ETHER_ADDR_LEN]; uint8_t hwaddr[ETHER_ADDR_LEN];
int i, error, phy; int i, error, phy;
@ -857,27 +857,26 @@ mge_attach(device_t dev)
} }
if_initname(ifp, device_get_name(dev), device_get_unit(dev)); if_initname(ifp, device_get_name(dev), device_get_unit(dev));
ifp->if_softc = sc; if_setsoftc(ifp, sc);
ifp->if_flags = IFF_SIMPLEX | IFF_MULTICAST | IFF_BROADCAST; if_setflags(ifp, IFF_SIMPLEX | IFF_MULTICAST | IFF_BROADCAST);
ifp->if_capabilities = IFCAP_VLAN_MTU; if_setcapabilities(ifp, IFCAP_VLAN_MTU);
if (sc->mge_hw_csum) { if (sc->mge_hw_csum) {
ifp->if_capabilities |= IFCAP_HWCSUM; if_setcapabilitiesbit(ifp, IFCAP_HWCSUM, 0);
ifp->if_hwassist = MGE_CHECKSUM_FEATURES; if_sethwassist(ifp, MGE_CHECKSUM_FEATURES);
} }
ifp->if_capenable = ifp->if_capabilities; if_setcapenable(ifp, if_getcapabilities(ifp));
#ifdef DEVICE_POLLING #ifdef DEVICE_POLLING
/* Advertise that polling is supported */ /* Advertise that polling is supported */
ifp->if_capabilities |= IFCAP_POLLING; if_setcapabilitiesbit(ifp, IFCAP_POLLING, 0);
#endif #endif
ifp->if_init = mge_init; if_setinitfn(ifp, mge_init);
ifp->if_start = mge_start; if_setstartfn(ifp, mge_start);
ifp->if_ioctl = mge_ioctl; if_setioctlfn(ifp, mge_ioctl);
ifp->if_snd.ifq_drv_maxlen = MGE_TX_DESC_NUM - 1; if_setsendqlen(ifp, MGE_TX_DESC_NUM - 1);
IFQ_SET_MAXLEN(&ifp->if_snd, ifp->if_snd.ifq_drv_maxlen); if_setsendqready(ifp);
IFQ_SET_READY(&ifp->if_snd);
mge_get_mac_address(sc, hwaddr); mge_get_mac_address(sc, hwaddr);
ether_ifattach(ifp, hwaddr); ether_ifattach(ifp, hwaddr);
@ -985,12 +984,12 @@ mge_detach(device_t dev)
} }
static void static void
mge_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr) mge_ifmedia_sts(if_t ifp, struct ifmediareq *ifmr)
{ {
struct mge_softc *sc; struct mge_softc *sc;
struct mii_data *mii; struct mii_data *mii;
sc = ifp->if_softc; sc = if_getsoftc(ifp);
MGE_GLOBAL_LOCK(sc); MGE_GLOBAL_LOCK(sc);
if (!sc->phy_attached) { if (!sc->phy_attached) {
@ -1044,9 +1043,9 @@ mge_set_port_serial_control(uint32_t media)
} }
static int static int
mge_ifmedia_upd(struct ifnet *ifp) mge_ifmedia_upd(if_t ifp)
{ {
struct mge_softc *sc = ifp->if_softc; struct mge_softc *sc = if_getsoftc(ifp);
/* /*
* Do not do anything for switch here, as updating media between * Do not do anything for switch here, as updating media between
@ -1055,7 +1054,7 @@ mge_ifmedia_upd(struct ifnet *ifp)
*/ */
if (sc->phy_attached) { if (sc->phy_attached) {
MGE_GLOBAL_LOCK(sc); MGE_GLOBAL_LOCK(sc);
if (ifp->if_flags & IFF_UP) { if (if_getflags(ifp) & IFF_UP) {
sc->mge_media_status = sc->mii->mii_media.ifm_media; sc->mge_media_status = sc->mii->mii_media.ifm_media;
mii_mediachg(sc->mii); mii_mediachg(sc->mii);
@ -1201,15 +1200,15 @@ mge_init_locked(void *arg)
* * ...only if polling is not turned on. Disable interrupts explicitly * * ...only if polling is not turned on. Disable interrupts explicitly
* if polling is enabled. * if polling is enabled.
*/ */
if (sc->ifp->if_capenable & IFCAP_POLLING) if (sc->if_getcapenable(ifp) & IFCAP_POLLING)
mge_intrs_ctrl(sc, 0); mge_intrs_ctrl(sc, 0);
else else
#endif /* DEVICE_POLLING */ #endif /* DEVICE_POLLING */
mge_intrs_ctrl(sc, 1); mge_intrs_ctrl(sc, 1);
/* Activate network interface */ /* Activate network interface */
sc->ifp->if_drv_flags |= IFF_DRV_RUNNING; if_setdrvflagbits(ifp, IFF_DRV_RUNNING, 0);
sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; if_setdrvflagbits(ifp, 0, IFF_DRV_OACTIVE);
sc->wd_timer = 0; sc->wd_timer = 0;
/* Schedule watchdog timeout */ /* Schedule watchdog timeout */
@ -1227,7 +1226,7 @@ mge_intr_rxtx(void *arg)
MGE_GLOBAL_LOCK(sc); MGE_GLOBAL_LOCK(sc);
#ifdef DEVICE_POLLING #ifdef DEVICE_POLLING
if (sc->ifp->if_capenable & IFCAP_POLLING) { if (sc->if_getcapenable(ifp) & IFCAP_POLLING) {
MGE_GLOBAL_UNLOCK(sc); MGE_GLOBAL_UNLOCK(sc);
return; return;
} }
@ -1257,7 +1256,7 @@ static void
mge_intr_err(void *arg) mge_intr_err(void *arg)
{ {
struct mge_softc *sc; struct mge_softc *sc;
struct ifnet *ifp; if_t ifp;
sc = arg; sc = arg;
ifp = sc->ifp; ifp = sc->ifp;
@ -1268,7 +1267,7 @@ static void
mge_intr_misc(void *arg) mge_intr_misc(void *arg)
{ {
struct mge_softc *sc; struct mge_softc *sc;
struct ifnet *ifp; if_t ifp;
sc = arg; sc = arg;
ifp = sc->ifp; ifp = sc->ifp;
@ -1284,7 +1283,7 @@ mge_intr_rx(void *arg) {
MGE_RECEIVE_LOCK(sc); MGE_RECEIVE_LOCK(sc);
#ifdef DEVICE_POLLING #ifdef DEVICE_POLLING
if (sc->ifp->if_capenable & IFCAP_POLLING) { if (sc->if_getcapenable(ifp) & IFCAP_POLLING) {
MGE_RECEIVE_UNLOCK(sc); MGE_RECEIVE_UNLOCK(sc);
return; return;
} }
@ -1323,7 +1322,7 @@ mge_intr_rx_check(struct mge_softc *sc, uint32_t int_cause,
static int static int
mge_intr_rx_locked(struct mge_softc *sc, int count) mge_intr_rx_locked(struct mge_softc *sc, int count)
{ {
struct ifnet *ifp = sc->ifp; if_t ifp = sc->ifp;
uint32_t status; uint32_t status;
uint16_t bufsize; uint16_t bufsize;
struct mge_desc_wrapper* dw; struct mge_desc_wrapper* dw;
@ -1367,7 +1366,7 @@ mge_intr_rx_locked(struct mge_softc *sc, int count)
bufsize); bufsize);
MGE_RECEIVE_UNLOCK(sc); MGE_RECEIVE_UNLOCK(sc);
(*ifp->if_input)(ifp, mb); if_input(ifp, mb);
MGE_RECEIVE_LOCK(sc); MGE_RECEIVE_LOCK(sc);
rx_npkts++; rx_npkts++;
} }
@ -1391,7 +1390,7 @@ static void
mge_intr_sum(void *arg) mge_intr_sum(void *arg)
{ {
struct mge_softc *sc = arg; struct mge_softc *sc = arg;
struct ifnet *ifp; if_t ifp;
ifp = sc->ifp; ifp = sc->ifp;
if_printf(ifp, "%s\n", __FUNCTION__); if_printf(ifp, "%s\n", __FUNCTION__);
@ -1406,7 +1405,7 @@ mge_intr_tx(void *arg)
MGE_TRANSMIT_LOCK(sc); MGE_TRANSMIT_LOCK(sc);
#ifdef DEVICE_POLLING #ifdef DEVICE_POLLING
if (sc->ifp->if_capenable & IFCAP_POLLING) { if (sc->if_getcapenable(ifp) & IFCAP_POLLING) {
MGE_TRANSMIT_UNLOCK(sc); MGE_TRANSMIT_UNLOCK(sc);
return; return;
} }
@ -1425,7 +1424,7 @@ mge_intr_tx(void *arg)
static void static void
mge_intr_tx_locked(struct mge_softc *sc) mge_intr_tx_locked(struct mge_softc *sc)
{ {
struct ifnet *ifp = sc->ifp; if_t ifp = sc->ifp;
struct mge_desc_wrapper *dw; struct mge_desc_wrapper *dw;
struct mge_desc *desc; struct mge_desc *desc;
uint32_t status; uint32_t status;
@ -1473,14 +1472,14 @@ mge_intr_tx_locked(struct mge_softc *sc)
if (send) { if (send) {
/* Now send anything that was pending */ /* Now send anything that was pending */
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; if_setdrvflagbits(ifp, 0, IFF_DRV_OACTIVE);
mge_start_locked(ifp); mge_start_locked(ifp);
} }
} }
static int static int
mge_ioctl(struct ifnet *ifp, u_long command, caddr_t data) mge_ioctl(if_t ifp, u_long command, caddr_t data)
{ {
struct mge_softc *sc = ifp->if_softc; struct mge_softc *sc = if_getsoftc(ifp);
struct ifreq *ifr = (struct ifreq *)data; struct ifreq *ifr = (struct ifreq *)data;
int mask, error; int mask, error;
uint32_t flags; uint32_t flags;
@ -1491,9 +1490,9 @@ mge_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
case SIOCSIFFLAGS: case SIOCSIFFLAGS:
MGE_GLOBAL_LOCK(sc); MGE_GLOBAL_LOCK(sc);
if (ifp->if_flags & IFF_UP) { if (if_getflags(ifp) & IFF_UP) {
if (ifp->if_drv_flags & IFF_DRV_RUNNING) { if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) {
flags = ifp->if_flags ^ sc->mge_if_flags; flags = if_getflags(ifp) ^ sc->mge_if_flags;
if (flags & IFF_PROMISC) if (flags & IFF_PROMISC)
mge_set_prom_mode(sc, mge_set_prom_mode(sc,
MGE_RX_DEFAULT_QUEUE); MGE_RX_DEFAULT_QUEUE);
@ -1503,29 +1502,29 @@ mge_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
} else } else
mge_init_locked(sc); mge_init_locked(sc);
} }
else if (ifp->if_drv_flags & IFF_DRV_RUNNING) else if (if_getdrvflags(ifp) & IFF_DRV_RUNNING)
mge_stop(sc); mge_stop(sc);
sc->mge_if_flags = ifp->if_flags; sc->mge_if_flags = if_getflags(ifp);
MGE_GLOBAL_UNLOCK(sc); MGE_GLOBAL_UNLOCK(sc);
break; break;
case SIOCADDMULTI: case SIOCADDMULTI:
case SIOCDELMULTI: case SIOCDELMULTI:
if (ifp->if_drv_flags & IFF_DRV_RUNNING) { if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) {
MGE_GLOBAL_LOCK(sc); MGE_GLOBAL_LOCK(sc);
mge_setup_multicast(sc); mge_setup_multicast(sc);
MGE_GLOBAL_UNLOCK(sc); MGE_GLOBAL_UNLOCK(sc);
} }
break; break;
case SIOCSIFCAP: case SIOCSIFCAP:
mask = ifp->if_capenable ^ ifr->ifr_reqcap; mask = if_getcapenable(ifp) ^ ifr->ifr_reqcap;
if (mask & IFCAP_HWCSUM) { if (mask & IFCAP_HWCSUM) {
ifp->if_capenable &= ~IFCAP_HWCSUM; if_setcapenablebit(ifp, 0, IFCAP_HWCSUM);
ifp->if_capenable |= IFCAP_HWCSUM & ifr->ifr_reqcap; if_setcapenablebit(ifp, IFCAP_HWCSUM & ifr->ifr_reqcap, 0);
if (ifp->if_capenable & IFCAP_TXCSUM) if (if_getcapenable(ifp) & IFCAP_TXCSUM)
ifp->if_hwassist = MGE_CHECKSUM_FEATURES; if_sethwassist(ifp, MGE_CHECKSUM_FEATURES);
else else
ifp->if_hwassist = 0; if_sethwassist(ifp, 0);
} }
#ifdef DEVICE_POLLING #ifdef DEVICE_POLLING
if (mask & IFCAP_POLLING) { if (mask & IFCAP_POLLING) {
@ -1536,13 +1535,13 @@ mge_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
MGE_GLOBAL_LOCK(sc); MGE_GLOBAL_LOCK(sc);
mge_intrs_ctrl(sc, 0); mge_intrs_ctrl(sc, 0);
ifp->if_capenable |= IFCAP_POLLING; if_setcapenablebit(ifp, IFCAP_POLLING, 0);
MGE_GLOBAL_UNLOCK(sc); MGE_GLOBAL_UNLOCK(sc);
} else { } else {
error = ether_poll_deregister(ifp); error = ether_poll_deregister(ifp);
MGE_GLOBAL_LOCK(sc); MGE_GLOBAL_LOCK(sc);
mge_intrs_ctrl(sc, 1); mge_intrs_ctrl(sc, 1);
ifp->if_capenable &= ~IFCAP_POLLING; if_setcapenablebit(ifp, 0, IFCAP_POLLING);
MGE_GLOBAL_UNLOCK(sc); MGE_GLOBAL_UNLOCK(sc);
} }
} }
@ -1626,7 +1625,7 @@ mge_shutdown(device_t dev)
MGE_GLOBAL_LOCK(sc); MGE_GLOBAL_LOCK(sc);
#ifdef DEVICE_POLLING #ifdef DEVICE_POLLING
if (sc->ifp->if_capenable & IFCAP_POLLING) if (sc->if_getcapenable(ifp) & IFCAP_POLLING)
ether_poll_deregister(sc->ifp); ether_poll_deregister(sc->ifp);
#endif #endif
@ -1719,7 +1718,7 @@ mge_tick(void *msc)
static void static void
mge_watchdog(struct mge_softc *sc) mge_watchdog(struct mge_softc *sc)
{ {
struct ifnet *ifp; if_t ifp;
ifp = sc->ifp; ifp = sc->ifp;
@ -1735,9 +1734,9 @@ mge_watchdog(struct mge_softc *sc)
} }
static void static void
mge_start(struct ifnet *ifp) mge_start(if_t ifp)
{ {
struct mge_softc *sc = ifp->if_softc; struct mge_softc *sc = if_getsoftc(ifp);
MGE_TRANSMIT_LOCK(sc); MGE_TRANSMIT_LOCK(sc);
@ -1747,23 +1746,23 @@ mge_start(struct ifnet *ifp)
} }
static void static void
mge_start_locked(struct ifnet *ifp) mge_start_locked(if_t ifp)
{ {
struct mge_softc *sc; struct mge_softc *sc;
struct mbuf *m0, *mtmp; struct mbuf *m0, *mtmp;
uint32_t reg_val, queued = 0; uint32_t reg_val, queued = 0;
sc = ifp->if_softc; sc = if_getsoftc(ifp);
MGE_TRANSMIT_LOCK_ASSERT(sc); MGE_TRANSMIT_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) IFF_DRV_RUNNING)
return; return;
for (;;) { for (;;) {
/* Get packet from the queue */ /* Get packet from the queue */
IF_DEQUEUE(&ifp->if_snd, m0); m0 = if_dequeue(ifp);
if (m0 == NULL) if (m0 == NULL)
break; break;
@ -1786,8 +1785,8 @@ mge_start_locked(struct ifnet *ifp)
/* Check for free descriptors */ /* Check for free descriptors */
if (sc->tx_desc_used_count + 1 >= MGE_TX_DESC_NUM) { if (sc->tx_desc_used_count + 1 >= MGE_TX_DESC_NUM) {
IF_PREPEND(&ifp->if_snd, m0); if_sendq_prepend(ifp, m0);
ifp->if_drv_flags |= IFF_DRV_OACTIVE; if_setdrvflagbits(ifp, IFF_DRV_OACTIVE, 0);
break; break;
} }
@ -1809,7 +1808,7 @@ mge_start_locked(struct ifnet *ifp)
static void static void
mge_stop(struct mge_softc *sc) mge_stop(struct mge_softc *sc)
{ {
struct ifnet *ifp; if_t ifp;
volatile uint32_t reg_val, status; volatile uint32_t reg_val, status;
struct mge_desc_wrapper *dw; struct mge_desc_wrapper *dw;
struct mge_desc *desc; struct mge_desc *desc;
@ -1817,14 +1816,14 @@ mge_stop(struct mge_softc *sc)
ifp = sc->ifp; ifp = sc->ifp;
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0)
return; return;
/* Stop tick engine */ /* Stop tick engine */
callout_stop(&sc->wd_callout); callout_stop(&sc->wd_callout);
/* Disable interface */ /* Disable interface */
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE); if_setdrvflagbits(ifp, 0, (IFF_DRV_RUNNING | IFF_DRV_OACTIVE));
sc->wd_timer = 0; sc->wd_timer = 0;
/* Disable interrupts */ /* Disable interrupts */
@ -1891,12 +1890,12 @@ mge_suspend(device_t dev)
} }
static void static void
mge_offload_process_frame(struct ifnet *ifp, struct mbuf *frame, mge_offload_process_frame(if_t ifp, struct mbuf *frame,
uint32_t status, uint16_t bufsize) uint32_t status, uint16_t bufsize)
{ {
int csum_flags = 0; int csum_flags = 0;
if (ifp->if_capenable & IFCAP_RXCSUM) { if (if_getcapenable(ifp) & IFCAP_RXCSUM) {
if ((status & MGE_RX_L3_IS_IP) && (status & MGE_RX_IP_OK)) if ((status & MGE_RX_L3_IS_IP) && (status & MGE_RX_IP_OK))
csum_flags |= CSUM_IP_CHECKED | CSUM_IP_VALID; csum_flags |= CSUM_IP_CHECKED | CSUM_IP_VALID;
@ -2051,11 +2050,11 @@ static void
mge_setup_multicast(struct mge_softc *sc) mge_setup_multicast(struct mge_softc *sc)
{ {
struct mge_hash_maddr_ctx ctx; struct mge_hash_maddr_ctx ctx;
struct ifnet *ifp = sc->ifp; if_t ifp = sc->ifp;
static const uint8_t v = (MGE_RX_DEFAULT_QUEUE << 1) | 1; static const uint8_t v = (MGE_RX_DEFAULT_QUEUE << 1) | 1;
int i; int i;
if (ifp->if_flags & IFF_ALLMULTI) { if (if_getflags(ifp) & IFF_ALLMULTI) {
for (i = 0; i < MGE_MCAST_REG_NUMBER; i++) for (i = 0; i < MGE_MCAST_REG_NUMBER; i++)
ctx.smt[i] = ctx.omt[i] = ctx.smt[i] = ctx.omt[i] =
(v << 24) | (v << 16) | (v << 8) | v; (v << 24) | (v << 16) | (v << 8) | v;

View file

@ -67,7 +67,7 @@ struct mge_desc_wrapper {
}; };
struct mge_softc { struct mge_softc {
struct ifnet *ifp; /* per-interface network data */ if_t ifp; /* per-interface network data */
phandle_t node; phandle_t node;