From 1cbcf3e06bd8d348e064d58ef0a5f40a70e652ae Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Mon, 2 Jul 2018 17:40:29 -0400 Subject: [PATCH] via_rhine: Sync with FreeBSD 11.1. Untested, but the changes are minimal, and the FreeBSD 9 driver worked on an old tower that I wasn't bothered to boot up just to test this. The new driver uses an interrupt filter to boot, so we don't even need that glue anymore. Also make the build system logic closer to the other FreeBSD drivers. --- src/add-ons/kernel/drivers/network/Jamfile | 2 +- .../kernel/drivers/network/via_rhine/Jamfile | 26 +++- .../drivers/network/via_rhine/dev/Jamfile | 4 - .../drivers/network/via_rhine/dev/mii/Jamfile | 22 ---- .../drivers/network/via_rhine/dev/mii/ciphy.c | 21 +--- .../network/via_rhine/dev/mii/ciphyreg.h | 2 +- .../drivers/network/via_rhine/dev/mii/ukphy.c | 8 +- .../network/via_rhine/dev/mii/ukphy_subr.c | 2 +- .../drivers/network/via_rhine/dev/vr/Jamfile | 16 --- .../drivers/network/via_rhine/dev/vr/if_vr.c | 111 ++++++++---------- .../network/via_rhine/dev/vr/if_vrreg.h | 3 +- .../network/via_rhine/{dev/vr => }/glue.c | 5 +- 12 files changed, 92 insertions(+), 130 deletions(-) delete mode 100644 src/add-ons/kernel/drivers/network/via_rhine/dev/Jamfile delete mode 100644 src/add-ons/kernel/drivers/network/via_rhine/dev/mii/Jamfile delete mode 100644 src/add-ons/kernel/drivers/network/via_rhine/dev/vr/Jamfile rename src/add-ons/kernel/drivers/network/via_rhine/{dev/vr => }/glue.c (79%) diff --git a/src/add-ons/kernel/drivers/network/Jamfile b/src/add-ons/kernel/drivers/network/Jamfile index bc022e8083..4de7a37c88 100644 --- a/src/add-ons/kernel/drivers/network/Jamfile +++ b/src/add-ons/kernel/drivers/network/Jamfile @@ -21,7 +21,6 @@ SubInclude HAIKU_TOP src add-ons kernel drivers network wb840 ; # FreeBSD 9.2 drivers SubInclude HAIKU_TOP src add-ons kernel drivers network 3com ; SubInclude HAIKU_TOP src add-ons kernel drivers network dec21xxx ; -SubInclude HAIKU_TOP src add-ons kernel drivers network via_rhine ; # FreeBSD 9.3 drivers SubInclude HAIKU_TOP src add-ons kernel drivers network jmicron2x0 ; @@ -42,4 +41,5 @@ SubInclude HAIKU_TOP src add-ons kernel drivers network rdc ; SubInclude HAIKU_TOP src add-ons kernel drivers network rtl8139 ; SubInclude HAIKU_TOP src add-ons kernel drivers network rtl81xx ; SubInclude HAIKU_TOP src add-ons kernel drivers network syskonnect ; +SubInclude HAIKU_TOP src add-ons kernel drivers network via_rhine ; SubInclude HAIKU_TOP src add-ons kernel drivers network vt612x ; diff --git a/src/add-ons/kernel/drivers/network/via_rhine/Jamfile b/src/add-ons/kernel/drivers/network/via_rhine/Jamfile index c4872e4b29..1e15088148 100644 --- a/src/add-ons/kernel/drivers/network/via_rhine/Jamfile +++ b/src/add-ons/kernel/drivers/network/via_rhine/Jamfile @@ -1,3 +1,27 @@ SubDir HAIKU_TOP src add-ons kernel drivers network via_rhine ; -SubInclude HAIKU_TOP src add-ons kernel drivers network via_rhine dev ; +UseHeaders [ FDirName $(HAIKU_TOP) src libs compat freebsd11_network compat ] + : true ; +UsePrivateHeaders net system ; +UsePrivateKernelHeaders ; + +SubDirCcFlags [ FDefines _KERNEL=1 FBSD_DRIVER=1 ] ; + +UseHeaders [ FDirName $(SUBDIR) ] : true ; + +SEARCH_SOURCE += [ FDirName $(SUBDIR) dev mii ] ; +SEARCH_SOURCE += [ FDirName $(SUBDIR) dev vr ] ; + +KernelAddon via_rhine : + glue.c + ciphy.c + ukphy.c + ukphy_subr.c + if_vr.c + : libfreebsd11_network.a + ; + +ObjectHdrs [ FGristFiles ciphy$(SUFOBJ) ukphy$(SUFOBJ) ] + : [ FDirName $(TARGET_COMMON_DEBUG_OBJECT_DIR_$(TARGET_PACKAGING_ARCH)) libs + compat freebsd11_network ] ; +Includes [ FGristFiles ciphy.c ukphy.c ] : miidevs.h ; diff --git a/src/add-ons/kernel/drivers/network/via_rhine/dev/Jamfile b/src/add-ons/kernel/drivers/network/via_rhine/dev/Jamfile deleted file mode 100644 index 2434be159d..0000000000 --- a/src/add-ons/kernel/drivers/network/via_rhine/dev/Jamfile +++ /dev/null @@ -1,4 +0,0 @@ -SubDir HAIKU_TOP src add-ons kernel drivers network via_rhine dev ; - -SubInclude HAIKU_TOP src add-ons kernel drivers network via_rhine dev mii ; -SubInclude HAIKU_TOP src add-ons kernel drivers network via_rhine dev vr ; diff --git a/src/add-ons/kernel/drivers/network/via_rhine/dev/mii/Jamfile b/src/add-ons/kernel/drivers/network/via_rhine/dev/mii/Jamfile deleted file mode 100644 index 86abc49e70..0000000000 --- a/src/add-ons/kernel/drivers/network/via_rhine/dev/mii/Jamfile +++ /dev/null @@ -1,22 +0,0 @@ -SubDir HAIKU_TOP src add-ons kernel drivers network via_rhine dev mii ; - -UseHeaders [ FDirName $(SUBDIR) .. .. ] : true ; -UseHeaders [ FDirName $(HAIKU_TOP) src libs compat freebsd_network compat ] : true ; - -UsePrivateHeaders net system ; -UsePrivateKernelHeaders ; - -SubDirCcFlags [ FDefines _KERNEL=1 FBSD_DRIVER=1 ] ; - -KernelStaticLibrary via_rhine_mii.a - : - ciphy.c - ukphy.c - ukphy_subr.c - ; - -ObjectHdrs [ FGristFiles ciphy$(SUFOBJ) ukphy$(SUFOBJ) ] - : [ FDirName $(TARGET_COMMON_DEBUG_OBJECT_DIR_$(TARGET_PACKAGING_ARCH)) libs - compat freebsd_network ] ; -Includes [ FGristFiles ciphy.c ukphy.c ] : miidevs.h ; - diff --git a/src/add-ons/kernel/drivers/network/via_rhine/dev/mii/ciphy.c b/src/add-ons/kernel/drivers/network/via_rhine/dev/mii/ciphy.c index 87d0d814e9..3ecd360bed 100644 --- a/src/add-ons/kernel/drivers/network/via_rhine/dev/mii/ciphy.c +++ b/src/add-ons/kernel/drivers/network/via_rhine/dev/mii/ciphy.c @@ -31,7 +31,7 @@ */ #include -__FBSDID("$FreeBSD$"); +__FBSDID("$FreeBSD: releng/11.1/sys/dev/mii/ciphy.c 277093 2015-01-12 22:27:38Z glebius $"); /* * Driver for the Cicada/Vitesse CS/VSC8xxx 10/100/1000 copper PHY. @@ -91,8 +91,10 @@ static const struct mii_phydesc ciphys[] = { MII_PHY_DESC(xxCICADA, CS8201B), MII_PHY_DESC(xxCICADA, CS8204), MII_PHY_DESC(xxCICADA, VSC8211), + MII_PHY_DESC(xxCICADA, VSC8221), MII_PHY_DESC(xxCICADA, CS8244), MII_PHY_DESC(xxVITESSE, VSC8601), + MII_PHY_DESC(xxVITESSE, VSC8641), MII_PHY_END }; @@ -129,12 +131,6 @@ ciphy_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; - ciphy_fixup(sc); /* XXX hardware bug work-around */ switch (IFM_SUBTYPE(ife->ifm_media)) { @@ -184,12 +180,6 @@ setit: break; case MII_TICK: - /* - * Is the interface even up? - */ - if ((mii->mii_ifp->if_flags & IFF_UP) == 0) - return (0); - /* * Only used for autonegotiation. */ @@ -313,8 +303,7 @@ ciphy_fixup(struct mii_softc *sc) status = PHY_READ(sc, CIPHY_MII_AUXCSR); speed = status & CIPHY_AUXCSR_SPEED; - if (strcmp(device_get_name(device_get_parent(sc->mii_dev)), - "nfe") == 0) { + if (mii_phy_mac_match(sc, "nfe")) { /* need to set for 2.5V RGMII for NVIDIA adapters */ val = PHY_READ(sc, CIPHY_MII_ECTL1); val &= ~(CIPHY_ECTL1_IOVOL | CIPHY_ECTL1_INTSEL); @@ -368,8 +357,10 @@ ciphy_fixup(struct mii_softc *sc) break; case MII_MODEL_xxCICADA_VSC8211: + case MII_MODEL_xxCICADA_VSC8221: case MII_MODEL_xxCICADA_CS8244: case MII_MODEL_xxVITESSE_VSC8601: + case MII_MODEL_xxVITESSE_VSC8641: break; default: device_printf(sc->mii_dev, "unknown CICADA PHY model %x\n", diff --git a/src/add-ons/kernel/drivers/network/via_rhine/dev/mii/ciphyreg.h b/src/add-ons/kernel/drivers/network/via_rhine/dev/mii/ciphyreg.h index dd73f87783..20b953a35b 100644 --- a/src/add-ons/kernel/drivers/network/via_rhine/dev/mii/ciphyreg.h +++ b/src/add-ons/kernel/drivers/network/via_rhine/dev/mii/ciphyreg.h @@ -29,7 +29,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD$ + * $FreeBSD: releng/11.1/sys/dev/mii/ciphyreg.h 220938 2011-04-22 09:22:27Z marius $ */ #ifndef _DEV_MII_CIPHYREG_H_ diff --git a/src/add-ons/kernel/drivers/network/via_rhine/dev/mii/ukphy.c b/src/add-ons/kernel/drivers/network/via_rhine/dev/mii/ukphy.c index 9d52eb580c..a4004afdb5 100644 --- a/src/add-ons/kernel/drivers/network/via_rhine/dev/mii/ukphy.c +++ b/src/add-ons/kernel/drivers/network/via_rhine/dev/mii/ukphy.c @@ -55,7 +55,7 @@ */ #include -__FBSDID("$FreeBSD$"); +__FBSDID("$FreeBSD: releng/11.1/sys/dev/mii/ukphy.c 257184 2013-10-26 18:40:17Z glebius $"); /* * driver for generic unknown PHYs @@ -140,12 +140,6 @@ ukphy_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); break; diff --git a/src/add-ons/kernel/drivers/network/via_rhine/dev/mii/ukphy_subr.c b/src/add-ons/kernel/drivers/network/via_rhine/dev/mii/ukphy_subr.c index 5f2f6341ba..f78b4e5e3b 100644 --- a/src/add-ons/kernel/drivers/network/via_rhine/dev/mii/ukphy_subr.c +++ b/src/add-ons/kernel/drivers/network/via_rhine/dev/mii/ukphy_subr.c @@ -31,7 +31,7 @@ */ #include -__FBSDID("$FreeBSD$"); +__FBSDID("$FreeBSD: releng/11.1/sys/dev/mii/ukphy_subr.c 215297 2010-11-14 13:26:10Z marius $"); /* * Subroutines shared by the ukphy driver and other PHY drivers. diff --git a/src/add-ons/kernel/drivers/network/via_rhine/dev/vr/Jamfile b/src/add-ons/kernel/drivers/network/via_rhine/dev/vr/Jamfile deleted file mode 100644 index d755d10d2d..0000000000 --- a/src/add-ons/kernel/drivers/network/via_rhine/dev/vr/Jamfile +++ /dev/null @@ -1,16 +0,0 @@ -SubDir HAIKU_TOP src add-ons kernel drivers network via_rhine dev vr ; - -UseHeaders [ FDirName $(SUBDIR) $(DOTDOT) $(DOTDOT) ] : true ; -UseHeaders [ FDirName $(HAIKU_TOP) src libs compat freebsd_network compat ] : true ; - -UsePrivateHeaders net system ; -UsePrivateKernelHeaders ; - -SubDirCcFlags [ FDefines _KERNEL=1 FBSD_DRIVER=1 ] ; - -KernelAddon via_rhine : - if_vr.c - glue.c - : libfreebsd_network.a via_rhine_mii.a - ; - diff --git a/src/add-ons/kernel/drivers/network/via_rhine/dev/vr/if_vr.c b/src/add-ons/kernel/drivers/network/via_rhine/dev/vr/if_vr.c index 2ab34e219f..3bda546a68 100644 --- a/src/add-ons/kernel/drivers/network/via_rhine/dev/vr/if_vr.c +++ b/src/add-ons/kernel/drivers/network/via_rhine/dev/vr/if_vr.c @@ -31,7 +31,7 @@ */ #include -__FBSDID("$FreeBSD$"); +__FBSDID("$FreeBSD: releng/11.1/sys/dev/vr/if_vr.c 296272 2016-03-01 17:47:32Z jhb $"); /* * VIA Rhine fast ethernet PCI NIC driver @@ -80,6 +80,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include @@ -165,7 +166,8 @@ static void vr_txeof(struct vr_softc *); static void vr_tick(void *); static int vr_error(struct vr_softc *, uint16_t); static void vr_tx_underrun(struct vr_softc *); -static void vr_intr(void *); +static int vr_intr(void *); +static void vr_int_task(void *, int); static void vr_start(struct ifnet *); static void vr_start_locked(struct ifnet *); static int vr_encap(struct vr_softc *, struct mbuf **); @@ -236,31 +238,6 @@ static devclass_t vr_devclass; DRIVER_MODULE(vr, pci, vr_driver, vr_devclass, 0, 0); DRIVER_MODULE(miibus, vr, miibus_driver, miibus_devclass, 0, 0); - -#ifdef __HAIKU__ -int -__haiku_disable_interrupts(device_t dev) -{ - struct vr_softc *sc = device_get_softc(dev); - - if (CSR_READ_2(sc, VR_ISR) == 0) - return 0; - - CSR_WRITE_2(sc, VR_IMR, 0x0000); - return 1; -} - - -void -__haiku_reenable_interrupts(device_t dev) -{ - struct vr_softc *sc = device_get_softc(dev); - - CSR_WRITE_2(sc, VR_IMR, VR_INTRS); -} -#endif /* __HAIKU__ */ - - static int vr_miibus_readreg(device_t dev, int phy, int reg) { @@ -683,6 +660,8 @@ vr_attach(device_t dev) ifp->if_snd.ifq_maxlen = VR_TX_RING_CNT - 1; IFQ_SET_READY(&ifp->if_snd); + TASK_INIT(&sc->vr_inttask, 0, vr_int_task, sc); + /* Configure Tx FIFO threshold. */ sc->vr_txthresh = VR_TXTHRESH_MIN; if (sc->vr_revid < REV_ID_VT6105_A0) { @@ -805,11 +784,11 @@ vr_attach(device_t dev) * Must appear after the call to ether_ifattach() because * ether_ifattach() sets ifi_hdrlen to the default value. */ - ifp->if_data.ifi_hdrlen = sizeof(struct ether_vlan_header); + ifp->if_hdrlen = sizeof(struct ether_vlan_header); /* Hook interrupt last to avoid having to lock softc. */ error = bus_setup_intr(dev, sc->vr_irq, INTR_TYPE_NET | INTR_MPSAFE, - NULL, vr_intr, sc, &sc->vr_intrhand); + vr_intr, NULL, sc, &sc->vr_intrhand); if (error) { device_printf(dev, "couldn't set up irq\n"); @@ -851,6 +830,7 @@ vr_detach(device_t dev) vr_stop(sc); VR_UNLOCK(sc); callout_drain(&sc->vr_stat_callout); + taskqueue_drain(taskqueue_fast, &sc->vr_inttask); ether_ifdetach(ifp); } if (sc->vr_miibus) @@ -1080,31 +1060,29 @@ vr_dma_free(struct vr_softc *sc) /* Tx ring. */ if (sc->vr_cdata.vr_tx_ring_tag) { - if (sc->vr_cdata.vr_tx_ring_map) + if (sc->vr_rdata.vr_tx_ring_paddr) bus_dmamap_unload(sc->vr_cdata.vr_tx_ring_tag, sc->vr_cdata.vr_tx_ring_map); - if (sc->vr_cdata.vr_tx_ring_map && - sc->vr_rdata.vr_tx_ring) + if (sc->vr_rdata.vr_tx_ring) bus_dmamem_free(sc->vr_cdata.vr_tx_ring_tag, sc->vr_rdata.vr_tx_ring, sc->vr_cdata.vr_tx_ring_map); sc->vr_rdata.vr_tx_ring = NULL; - sc->vr_cdata.vr_tx_ring_map = NULL; + sc->vr_rdata.vr_tx_ring_paddr = 0; bus_dma_tag_destroy(sc->vr_cdata.vr_tx_ring_tag); sc->vr_cdata.vr_tx_ring_tag = NULL; } /* Rx ring. */ if (sc->vr_cdata.vr_rx_ring_tag) { - if (sc->vr_cdata.vr_rx_ring_map) + if (sc->vr_rdata.vr_rx_ring_paddr) bus_dmamap_unload(sc->vr_cdata.vr_rx_ring_tag, sc->vr_cdata.vr_rx_ring_map); - if (sc->vr_cdata.vr_rx_ring_map && - sc->vr_rdata.vr_rx_ring) + if (sc->vr_rdata.vr_rx_ring) bus_dmamem_free(sc->vr_cdata.vr_rx_ring_tag, sc->vr_rdata.vr_rx_ring, sc->vr_cdata.vr_rx_ring_map); sc->vr_rdata.vr_rx_ring = NULL; - sc->vr_cdata.vr_rx_ring_map = NULL; + sc->vr_rdata.vr_rx_ring_paddr = 0; bus_dma_tag_destroy(sc->vr_cdata.vr_rx_ring_tag); sc->vr_cdata.vr_rx_ring_tag = NULL; } @@ -1347,7 +1325,7 @@ vr_rxeof(struct vr_softc *sc) if ((rxstat & VR_RXSTAT_RX_OK) == 0 || (rxstat & (VR_RXSTAT_FIRSTFRAG | VR_RXSTAT_LASTFRAG)) != (VR_RXSTAT_FIRSTFRAG | VR_RXSTAT_LASTFRAG)) { - ifp->if_ierrors++; + if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); sc->vr_stat.rx_errors++; if (rxstat & VR_RXSTAT_CRCERR) sc->vr_stat.rx_crc_errors++; @@ -1370,7 +1348,7 @@ vr_rxeof(struct vr_softc *sc) } if (vr_newbuf(sc, cons) != 0) { - ifp->if_iqdrops++; + if_inc_counter(ifp, IFCOUNTER_IQDROPS, 1); sc->vr_stat.rx_errors++; sc->vr_stat.rx_no_mbufs++; vr_discard_rxbuf(rxd); @@ -1398,7 +1376,7 @@ vr_rxeof(struct vr_softc *sc) vr_fixup_rx(m); #endif m->m_pkthdr.rcvif = ifp; - ifp->if_ipackets++; + if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1); sc->vr_stat.rx_ok++; if ((ifp->if_capenable & IFCAP_RXCSUM) != 0 && (rxstat & VR_RXSTAT_FRAG) == 0 && @@ -1488,7 +1466,7 @@ vr_txeof(struct vr_softc *sc) __func__)); if ((txstat & VR_TXSTAT_ERRSUM) != 0) { - ifp->if_oerrors++; + if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); sc->vr_stat.tx_errors++; if ((txstat & VR_TXSTAT_ABRT) != 0) { /* Give up and restart Tx. */ @@ -1526,28 +1504,28 @@ vr_txeof(struct vr_softc *sc) return; } if ((txstat & VR_TXSTAT_DEFER) != 0) { - ifp->if_collisions++; + if_inc_counter(ifp, IFCOUNTER_COLLISIONS, 1); sc->vr_stat.tx_collisions++; } if ((txstat & VR_TXSTAT_LATECOLL) != 0) { - ifp->if_collisions++; + if_inc_counter(ifp, IFCOUNTER_COLLISIONS, 1); sc->vr_stat.tx_late_collisions++; } } else { sc->vr_stat.tx_ok++; - ifp->if_opackets++; + if_inc_counter(ifp, IFCOUNTER_OPACKETS, 1); } bus_dmamap_sync(sc->vr_cdata.vr_tx_tag, txd->tx_dmamap, BUS_DMASYNC_POSTWRITE); bus_dmamap_unload(sc->vr_cdata.vr_tx_tag, txd->tx_dmamap); if (sc->vr_revid < REV_ID_VT3071_A) { - ifp->if_collisions += - (txstat & VR_TXSTAT_COLLCNT) >> 3; + if_inc_counter(ifp, IFCOUNTER_COLLISIONS, + (txstat & VR_TXSTAT_COLLCNT) >> 3); sc->vr_stat.tx_collisions += (txstat & VR_TXSTAT_COLLCNT) >> 3; } else { - ifp->if_collisions += (txstat & 0x0f); + if_inc_counter(ifp, IFCOUNTER_COLLISIONS, (txstat & 0x0f)); sc->vr_stat.tx_collisions += (txstat & 0x0f); } m_freem(txd->tx_m); @@ -1678,8 +1656,28 @@ vr_tx_underrun(struct vr_softc *sc) vr_tx_start(sc); } -static void +static int vr_intr(void *arg) +{ + struct vr_softc *sc; + uint16_t status; + + sc = (struct vr_softc *)arg; + + status = CSR_READ_2(sc, VR_ISR); + if (status == 0 || status == 0xffff || (status & VR_INTRS) == 0) + return (FILTER_STRAY); + + /* Disable interrupts. */ + CSR_WRITE_2(sc, VR_IMR, 0x0000); + + taskqueue_enqueue(taskqueue_fast, &sc->vr_inttask); + + return (FILTER_HANDLED); +} + +static void +vr_int_task(void *arg, int npending) { struct vr_softc *sc; struct ifnet *ifp; @@ -1693,9 +1691,6 @@ vr_intr(void *arg) goto done_locked; status = CSR_READ_2(sc, VR_ISR); - if (status == 0 || status == 0xffff || (status & VR_INTRS) == 0) - goto done_locked; - ifp = sc->vr_ifp; #ifdef DEVICE_POLLING if ((ifp->if_capenable & IFCAP_POLLING) != 0) @@ -1710,9 +1705,6 @@ vr_intr(void *arg) goto done_locked; } - /* Disable interrupts. */ - CSR_WRITE_2(sc, VR_IMR, 0x0000); - for (; (status & VR_INTRS) != 0;) { CSR_WRITE_2(sc, VR_ISR, status); if ((status & (VR_ISR_BUSERR | VR_ISR_LINKSTAT2 | @@ -1732,15 +1724,16 @@ vr_intr(void *arg) vr_rx_start(sc); } vr_txeof(sc); + + if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) + vr_start_locked(ifp); + status = CSR_READ_2(sc, VR_ISR); } /* Re-enable interrupts. */ CSR_WRITE_2(sc, VR_IMR, VR_INTRS); - if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) - vr_start_locked(ifp); - done_locked: VR_UNLOCK(sc); } @@ -2325,13 +2318,13 @@ vr_watchdog(struct vr_softc *sc) if (bootverbose) if_printf(sc->vr_ifp, "watchdog timeout " "(missed link)\n"); - ifp->if_oerrors++; + if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); ifp->if_drv_flags &= ~IFF_DRV_RUNNING; vr_init_locked(sc); return; } - ifp->if_oerrors++; + if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); if_printf(ifp, "watchdog timeout\n"); ifp->if_drv_flags &= ~IFF_DRV_RUNNING; diff --git a/src/add-ons/kernel/drivers/network/via_rhine/dev/vr/if_vrreg.h b/src/add-ons/kernel/drivers/network/via_rhine/dev/vr/if_vrreg.h index 2445babd7a..c6029a8765 100644 --- a/src/add-ons/kernel/drivers/network/via_rhine/dev/vr/if_vrreg.h +++ b/src/add-ons/kernel/drivers/network/via_rhine/dev/vr/if_vrreg.h @@ -29,7 +29,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD$ + * $FreeBSD: releng/11.1/sys/dev/vr/if_vrreg.h 235334 2012-05-12 14:37:25Z rpaulo $ */ /* @@ -738,6 +738,7 @@ struct vr_softc { #ifdef DEVICE_POLLING int rxcycles; #endif + struct task vr_inttask; }; #define VR_LOCK(_sc) mtx_lock(&(_sc)->vr_mtx) diff --git a/src/add-ons/kernel/drivers/network/via_rhine/dev/vr/glue.c b/src/add-ons/kernel/drivers/network/via_rhine/glue.c similarity index 79% rename from src/add-ons/kernel/drivers/network/via_rhine/dev/vr/glue.c rename to src/add-ons/kernel/drivers/network/via_rhine/glue.c index 0dcad1be34..6fb8bb280c 100644 --- a/src/add-ons/kernel/drivers/network/via_rhine/dev/vr/glue.c +++ b/src/add-ons/kernel/drivers/network/via_rhine/glue.c @@ -8,7 +8,9 @@ HAIKU_FBSD_DRIVER_GLUE(via_rhine, vr, pci); -HAIKU_DRIVER_REQUIREMENTS(FBSD_TASKQUEUES | FBSD_SWI_TASKQUEUE); +HAIKU_DRIVER_REQUIREMENTS(FBSD_TASKQUEUES | FBSD_FAST_TASKQUEUE); +NO_HAIKU_CHECK_DISABLE_INTERRUPTS(); +NO_HAIKU_REENABLE_INTERRUPTS(); extern driver_t *DRIVER_MODULE_NAME(ciphy, miibus); @@ -26,4 +28,3 @@ __haiku_select_miibus_driver(device_t dev) return __haiku_probe_miibus(dev, drivers); } -