From 2df44799a560dceba42f5cf7bd1c0c3f50bb9870 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Sat, 26 May 2018 13:19:31 +0200 Subject: [PATCH] rdc: sync with FreeBSD 11.1. --- .../drivers/network/rdc/dev/mii/Jamfile | 6 +- .../drivers/network/rdc/dev/mii/rdcphy.c | 6 -- .../drivers/network/rdc/dev/vte/Jamfile | 4 +- .../drivers/network/rdc/dev/vte/if_vte.c | 57 ++++++++++++------- 4 files changed, 42 insertions(+), 31 deletions(-) diff --git a/src/add-ons/kernel/drivers/network/rdc/dev/mii/Jamfile b/src/add-ons/kernel/drivers/network/rdc/dev/mii/Jamfile index ebbbf7434d..f3121265db 100644 --- a/src/add-ons/kernel/drivers/network/rdc/dev/mii/Jamfile +++ b/src/add-ons/kernel/drivers/network/rdc/dev/mii/Jamfile @@ -1,7 +1,7 @@ SubDir HAIKU_TOP src add-ons kernel drivers network rdc dev mii ; UseHeaders [ FDirName $(SUBDIR) .. .. ] : true ; -UseHeaders [ FDirName $(HAIKU_TOP) src libs compat freebsd_network compat ] : true ; +UseHeaders [ FDirName $(HAIKU_TOP) src libs compat freebsd11_network compat ] : true ; UsePrivateHeaders net ; UsePrivateKernelHeaders ; @@ -15,5 +15,5 @@ KernelStaticLibrary rdc_mii.a ObjectHdrs [ FGristFiles rdcphy$(SUFOBJ) ] : [ FDirName $(TARGET_COMMON_DEBUG_OBJECT_DIR_$(TARGET_PACKAGING_ARCH)) libs - compat freebsd_network ] ; -Includes [ FGristFiles rdcphy.c ] : miidevs.h ; + compat freebsd11_network ] ; +Includes [ FGristFiles rdcphy.c ] : miidevs.h ; diff --git a/src/add-ons/kernel/drivers/network/rdc/dev/mii/rdcphy.c b/src/add-ons/kernel/drivers/network/rdc/dev/mii/rdcphy.c index 6f7f98d5f9..c411eaecfa 100644 --- a/src/add-ons/kernel/drivers/network/rdc/dev/mii/rdcphy.c +++ b/src/add-ons/kernel/drivers/network/rdc/dev/mii/rdcphy.c @@ -121,12 +121,6 @@ rdcphy_service(struct mii_softc *sc, struct mii_data *mii, int cmd) break; case MII_MEDIACHG: - /* - * If the interface is not up, don't do anything. - */ - if ((mii->mii_ifp->if_flags & IFF_UP) == 0) - break; - mii_phy_setmedia(sc); switch (IFM_SUBTYPE(ife->ifm_media)) { case IFM_100_TX: diff --git a/src/add-ons/kernel/drivers/network/rdc/dev/vte/Jamfile b/src/add-ons/kernel/drivers/network/rdc/dev/vte/Jamfile index eb073c2c78..11f0d41472 100644 --- a/src/add-ons/kernel/drivers/network/rdc/dev/vte/Jamfile +++ b/src/add-ons/kernel/drivers/network/rdc/dev/vte/Jamfile @@ -1,7 +1,7 @@ SubDir HAIKU_TOP src add-ons kernel drivers network rdc dev vte ; UseHeaders [ FDirName $(SUBDIR) .. .. ] : true ; -UseHeaders [ FDirName $(HAIKU_TOP) src libs compat freebsd_network compat ] : true ; +UseHeaders [ FDirName $(HAIKU_TOP) src libs compat freebsd11_network compat ] : true ; UsePrivateHeaders net system ; UsePrivateKernelHeaders ; @@ -11,5 +11,5 @@ SubDirCcFlags [ FDefines _KERNEL=1 FBSD_DRIVER=1 ] ; KernelAddon rdc : if_vte.c glue.c - : libfreebsd_network.a rdc_mii.a + : rdc_mii.a libfreebsd11_network.a ; diff --git a/src/add-ons/kernel/drivers/network/rdc/dev/vte/if_vte.c b/src/add-ons/kernel/drivers/network/rdc/dev/vte/if_vte.c index dfc06e5360..d3eb06a6ba 100644 --- a/src/add-ons/kernel/drivers/network/rdc/dev/vte/if_vte.c +++ b/src/add-ons/kernel/drivers/network/rdc/dev/vte/if_vte.c @@ -47,6 +47,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include @@ -108,6 +109,7 @@ static int vte_init_rx_ring(struct vte_softc *); static int vte_init_tx_ring(struct vte_softc *); static void vte_intr(void *); static int vte_ioctl(struct ifnet *, u_long, caddr_t); +static uint64_t vte_get_counter(struct ifnet *, ift_counter); static void vte_mac_config(struct vte_softc *); static int vte_miibus_readreg(device_t, int, int); static void vte_miibus_statchg(device_t); @@ -426,7 +428,7 @@ vte_attach(device_t dev) /* Reset the ethernet controller. */ vte_reset(sc); - if ((error = vte_dma_alloc(sc) != 0)) + if ((error = vte_dma_alloc(sc)) != 0) goto fail; /* Create device sysctl node. */ @@ -448,6 +450,7 @@ vte_attach(device_t dev) ifp->if_ioctl = vte_ioctl; ifp->if_start = vte_start; ifp->if_init = vte_init; + ifp->if_get_counter = vte_get_counter; ifp->if_snd.ifq_drv_maxlen = VTE_TX_RING_CNT - 1; IFQ_SET_MAXLEN(&ifp->if_snd, ifp->if_snd.ifq_drv_maxlen); IFQ_SET_READY(&ifp->if_snd); @@ -891,31 +894,29 @@ vte_dma_free(struct vte_softc *sc) } /* TX descriptor ring. */ if (sc->vte_cdata.vte_tx_ring_tag != NULL) { - if (sc->vte_cdata.vte_tx_ring_map != NULL) + if (sc->vte_cdata.vte_tx_ring_paddr != 0) bus_dmamap_unload(sc->vte_cdata.vte_tx_ring_tag, sc->vte_cdata.vte_tx_ring_map); - if (sc->vte_cdata.vte_tx_ring_map != NULL && - sc->vte_cdata.vte_tx_ring != NULL) + if (sc->vte_cdata.vte_tx_ring != NULL) bus_dmamem_free(sc->vte_cdata.vte_tx_ring_tag, sc->vte_cdata.vte_tx_ring, sc->vte_cdata.vte_tx_ring_map); sc->vte_cdata.vte_tx_ring = NULL; - sc->vte_cdata.vte_tx_ring_map = NULL; + sc->vte_cdata.vte_tx_ring_paddr = 0; bus_dma_tag_destroy(sc->vte_cdata.vte_tx_ring_tag); sc->vte_cdata.vte_tx_ring_tag = NULL; } /* RX ring. */ if (sc->vte_cdata.vte_rx_ring_tag != NULL) { - if (sc->vte_cdata.vte_rx_ring_map != NULL) + if (sc->vte_cdata.vte_rx_ring_paddr != 0) bus_dmamap_unload(sc->vte_cdata.vte_rx_ring_tag, sc->vte_cdata.vte_rx_ring_map); - if (sc->vte_cdata.vte_rx_ring_map != NULL && - sc->vte_cdata.vte_rx_ring != NULL) + if (sc->vte_cdata.vte_rx_ring != NULL) bus_dmamem_free(sc->vte_cdata.vte_rx_ring_tag, sc->vte_cdata.vte_rx_ring, sc->vte_cdata.vte_rx_ring_map); sc->vte_cdata.vte_rx_ring = NULL; - sc->vte_cdata.vte_rx_ring_map = NULL; + sc->vte_cdata.vte_rx_ring_paddr = 0; bus_dma_tag_destroy(sc->vte_cdata.vte_rx_ring_tag); sc->vte_cdata.vte_rx_ring_tag = NULL; } @@ -1172,7 +1173,7 @@ vte_watchdog(struct vte_softc *sc) ifp = sc->vte_ifp; if_printf(sc->vte_ifp, "watchdog timeout -- resetting\n"); - ifp->if_oerrors++; + if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); ifp->if_drv_flags &= ~IFF_DRV_RUNNING; vte_init_locked(sc); if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) @@ -1273,12 +1274,10 @@ static void vte_stats_update(struct vte_softc *sc) { struct vte_hw_stats *stat; - struct ifnet *ifp; uint16_t value; VTE_LOCK_ASSERT(sc); - ifp = sc->vte_ifp; stat = &sc->vte_stats; CSR_READ_2(sc, VTE_MECISR); @@ -1305,14 +1304,32 @@ vte_stats_update(struct vte_softc *sc) value = CSR_READ_2(sc, VTE_CNT_PAUSE); stat->tx_pause_frames += (value >> 8); stat->rx_pause_frames += (value & 0xFF); +} - /* Update ifp counters. */ - ifp->if_opackets = stat->tx_frames; - ifp->if_collisions = stat->tx_late_colls; - ifp->if_oerrors = stat->tx_late_colls + stat->tx_underruns; - ifp->if_ipackets = stat->rx_frames; - ifp->if_ierrors = stat->rx_crcerrs + stat->rx_runts + - stat->rx_long_frames + stat->rx_fifo_full; +static uint64_t +vte_get_counter(struct ifnet *ifp, ift_counter cnt) +{ + struct vte_softc *sc; + struct vte_hw_stats *stat; + + sc = if_getsoftc(ifp); + stat = &sc->vte_stats; + + switch (cnt) { + case IFCOUNTER_OPACKETS: + return (stat->tx_frames); + case IFCOUNTER_COLLISIONS: + return (stat->tx_late_colls); + case IFCOUNTER_OERRORS: + return (stat->tx_late_colls + stat->tx_underruns); + case IFCOUNTER_IPACKETS: + return (stat->rx_frames); + case IFCOUNTER_IERRORS: + return (stat->rx_crcerrs + stat->rx_runts + + stat->rx_long_frames + stat->rx_fifo_full); + default: + return (if_get_counter_default(ifp, cnt)); + } } static void @@ -1504,7 +1521,7 @@ vte_rxeof(struct vte_softc *sc) continue; } if (vte_newbuf(sc, rxd) != 0) { - ifp->if_iqdrops++; + if_inc_counter(ifp, IFCOUNTER_IQDROPS, 1); rxd->rx_desc->drlen = htole16(MCLBYTES - sizeof(uint32_t)); rxd->rx_desc->drst = htole16(VTE_DRST_RX_OWN);