[haiku-commits] haiku: hrev52056 - src/add-ons/kernel/drivers/network/via_rhine/dev/vr build/jam src/add-ons/kernel/drivers/network/via_rhine/dev/mii src/add-ons/kernel/drivers/network/via_rhine src/libs/compat/freebsd11_network

  • From: waddlesplash <waddlesplash@xxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 2 Jul 2018 18:26:50 -0400 (EDT)

hrev52056 adds 3 changesets to branch 'master'
old head: 12ed45b60fffad27c01bf3ce64326241a2e9596a
new head: c9af3dafd55afab6d1913dbfa5f6fe1daae8cf96
overview: 
https://git.haiku-os.org/haiku/log/?qt=range&q=c9af3dafd55a+%5E12ed45b60fff

----------------------------------------------------------------------------

e936fc859b73: build: Cleanup OptionalPackages.
  
   * Remove WifiFirmwareScriptData; the new mechanism is to use the script
     to create a true package, and it also supports the offline downloading
     this would have provided.
   * Remove "FFMpeg"; never used -- the "ffmpeg" package is actually added
     via BuildFeatures.
   * Remove Bluetooth; now provided as part of the main Haiku package.

1cbcf3e06bd8: 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.

c9af3dafd55a: freebsd11_network: INTR_FAST is no more.
  
  I didn't figure out exactly when, but the docs from FreeBSD 8 reference it
  as being not just deprecated, but already removed; and indeed no drivers
  we have from either FreeBSD 9 or 11 use it. The intr_wrapper system is
  used in its place.

                              [ Augustin Cavalier <waddlesplash@xxxxxxxxx> ]

----------------------------------------------------------------------------

15 files changed, 93 insertions(+), 240 deletions(-)
build/jam/OptionalPackages                       |  93 +---------------
src/add-ons/kernel/drivers/network/Jamfile       |   2 +-
.../kernel/drivers/network/via_rhine/Jamfile     |  26 ++++-
.../kernel/drivers/network/via_rhine/dev/Jamfile |   4 -
.../drivers/network/via_rhine/dev/mii/Jamfile    |  22 ----
.../drivers/network/via_rhine/dev/mii/ciphy.c    |  21 +---
.../drivers/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 +++++++++----------
.../drivers/network/via_rhine/dev/vr/if_vrreg.h  |   3 +-
.../network/via_rhine/{dev/vr => }/glue.c        |   5 +-
src/libs/compat/freebsd11_network/bus.cpp        |  17 ---
.../compat/freebsd11_network/compat/sys/bus.h    |   1 -

############################################################################

Commit:      e936fc859b73c933300bdd1a549e460e4cbbb819
URL:         https://git.haiku-os.org/haiku/commit/?id=e936fc859b73
Author:      Augustin Cavalier <waddlesplash@xxxxxxxxx>
Date:        Mon Jul  2 03:16:29 2018 UTC

build: Cleanup OptionalPackages.

 * Remove WifiFirmwareScriptData; the new mechanism is to use the script
   to create a true package, and it also supports the offline downloading
   this would have provided.
 * Remove "FFMpeg"; never used -- the "ffmpeg" package is actually added
   via BuildFeatures.
 * Remove Bluetooth; now provided as part of the main Haiku package.

----------------------------------------------------------------------------

diff --git a/build/jam/OptionalPackages b/build/jam/OptionalPackages
index b7179589de..237cb5eeeb 100644
--- a/build/jam/OptionalPackages
+++ b/build/jam/OptionalPackages
@@ -4,16 +4,12 @@
 
 # Available Optional Packages:
 #      BeOSCompatibility               - creates links within the system to 
support old apps
-#      Bluetooth                               - experimental Haiku components 
for Bluetooth
 #      Development                             - more complete dev environment 
(including autotools)
 #      DevelopmentBase                 - basic development environment (gcc, 
headers, libs,...)
 #      DevelopmentMin                  - development headers, libs, tools, 
from sources only
-#      FFMpeg                                  - audio/video library
-#      FFMpeg-devel                    - FFMpeg development files
 #      Git                                             - the distributed 
version control system
 #      WebPositive                             - native, WebKit-based web 
browser
 #      Welcome                                 - introductory documentation to 
Haiku
-#      WifiFirmwareScriptData  - data files needed by install-wifi-firmwares.sh
 
 
 # dependencies between optional packages
@@ -56,34 +52,9 @@ if [ IsOptionalHaikuImagePackageAdded BeOSCompatibility ] {
 }
 
 
-# Bluetooth stack
-if [ IsOptionalHaikuImagePackageAdded Bluetooth ] {
-# TODO: Make this an actual package!
-#      local bluetoothDrivers = h2generic ;
-#      AddDriversToHaikuImage bluetooth : $(bluetoothDrivers) ;
-#      AddFilesToHaikuImage system servers : bluetooth_server ;
-#      AddFilesToHaikuImage system lib : libbluetooth.so ;
-#      AddFilesToHaikuImage
-#              system add-ons kernel network protocols : l2cap ;
-#      AddFilesToHaikuImage system add-ons kernel bluetooth
-#              : btCoreData hci ;
-#      AddFilesToHaikuImage system preferences : Bluetooth ;
-#      AddFilesToHaikuImage system bin : bt_dev_info bt_discovery ;
-#      AddSymlinkToHaikuImage home config settings deskbar menu Preferences
-#              : /boot/system/preferences/Bluetooth ;
-#      if [ IsOptionalHaikuImagePackageAdded DevelopmentMin ]
-#              && $(TARGET_GCC_VERSION_$(TARGET_PACKAGING_ARCH)[1]) in 2 4 {
-#              local arch = $(TARGET_ARCH) ;
-#              local abi = 
gcc$(TARGET_GCC_VERSION_$(TARGET_PACKAGING_ARCH)[1]) ;
-#              AddSymlinkToHaikuImage system develop lib
-#                      : /system/lib libbluetooth.so ;
-#      }
-}
-
-
 # Development
 if [ IsOptionalHaikuImagePackageAdded Development ] {
-       # auto tools and perl
+       # autotools and perl
        AddHaikuImagePackages autoconf automake perl texinfo ;
        AddHaikuImageSourcePackages autoconf automake texinfo ;
 
@@ -141,17 +112,6 @@ if [ IsOptionalHaikuImagePackageAdded DevelopmentMin ]
 }
 
 
-# FFmpeg
-if [ IsOptionalHaikuImagePackageAdded FFMpeg ] {
-       local packages = ffmpeg speex libtheora libvorbis libogg libvpx3 ;
-       AddHaikuImagePackages $(packages) ;
-       AddHaikuImageSourcePackages ffmpeg ;
-       if [ IsOptionalHaikuImagePackageAdded FFMpeg-devel ] {
-               AddHaikuImagePackages $(packages)_devel ;
-       }
-}
-
-
 # Git
 if [ IsOptionalHaikuImagePackageAdded Git ] {
        AddHaikuImagePackages git git_daemon ;
@@ -218,54 +178,3 @@ if [ IsOptionalHaikuImagePackageAdded Welcome ] {
        AddSymlinkToHaikuImage home Desktop     : /boot/system/bin/userguide
                : User\ Guide ;
 }
-
-
-# WifiFirmwareScriptData
-# This optional package is for people who build their own images & have wifi
-# hardware that requires install-wifi-firmwares.sh & have no active network
-# connection. This is not to be added to default images.
-if [ IsOptionalHaikuImagePackageAdded WifiFirmwareScriptData ] {
-# TODO: Make this an actual package!
-#      if $(TARGET_ARCH) != x86 {
-#              Echo "No optional package WifiFirmwareScriptData available for"
-#                      $(TARGET_ARCH) ;
-#      } else {
-#              # broadcom43xx
-#              # firmware cutter
-#              local broadcomFWCutterArchive = b43-fwcutter-012.tar.bz2 ;
-#              local broadcomFWCutterURL =
-#                      
http://www.haiku-files.org/files/wifi-firmwares/b43/fwcutter/$(broadcomFWCutterArchive)
 ;
-#              local broadcomFWCutterFile = [ DownloadFile 
$(broadcomFWCutterArchive)
-#                      : $(broadcomFWCutterURL) ] ;
-#              AddFilesToHaikuImage
-#                      system data firmware broadcom43xx b43-fwcutter
-#                      : $(broadcomFWCutterFile) ;
-#
-#              # headers needed to compile firmware cutter
-#              local glibcDir = [ FDirName
-#                      $(HAIKU_TOP) src system libroot posix glibc ] ;
-#              local byteswapHeader = [ FDirName $(glibcDir) string byteswap.h 
] ;
-#              AddFilesToHaikuImage
-#                      system data firmware broadcom43xx b43-fwcutter
-#                      : $(byteswapHeader) ;
-#              local bitByteswapHeader = [ FDirName
-#                      $(glibcDir) include arch x86 bits byteswap.h ] ;
-#              AddFilesToHaikuImage
-#                      system data firmware broadcom43xx b43-fwcutter bits
-#                      : $(bitByteswapHeader) ;
-#
-#              # file containing firmware
-#              local broadcom43xxFile ;
-#              broadcom43xxFile = [ DownloadFile wl_apsta-3.130.20.0.o
-#                      : 
http://www.haiku-files.org/files/wifi-firmwares/b43/wl_apsta-3.130.20.0.o ] ;;
-#              AddFilesToHaikuImage system data firmware broadcom43xx
-#                      : $(broadcom43xxFile) ;
-#
-#              # marvell88w8335
-#              local marvellArchive = malo-firmware-1.4.tgz ;
-#              local marvellURL = 
http://www.haiku-files.org/files/wifi-firmwares/marvell/$(marvellArchive) ;
-#              local marvellFile = [ DownloadFile $(marvellArchive) : 
$(marvellURL) ] ;
-#              AddFilesToHaikuImage system data firmware marvell88w8335
-#                      : $(marvellFile) ;
-#      }
-}

############################################################################

Commit:      1cbcf3e06bd8d348e064d58ef0a5f40a70e652ae
URL:         https://git.haiku-os.org/haiku/commit/?id=1cbcf3e06bd8
Author:      Augustin Cavalier <waddlesplash@xxxxxxxxx>
Date:        Mon Jul  2 21:40:29 2018 UTC

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.

----------------------------------------------------------------------------

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 ] : 
<src!libs!compat!freebsd11_network>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 ] : 
<src!libs!compat!freebsd_network>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 <sys/cdefs.h>
-__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 <sys/cdefs.h>
-__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 <sys/cdefs.h>
-__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 <sys/cdefs.h>
-__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 <net/bpf.h>
 #include <net/if.h>
+#include <net/if_var.h>
 #include <net/ethernet.h>
 #include <net/if_dl.h>
 #include <net/if_media.h>
@@ -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);
 }
-

############################################################################

Revision:    hrev52056
Commit:      c9af3dafd55afab6d1913dbfa5f6fe1daae8cf96
URL:         https://git.haiku-os.org/haiku/commit/?id=c9af3dafd55a
Author:      Augustin Cavalier <waddlesplash@xxxxxxxxx>
Date:        Mon Jul  2 22:01:33 2018 UTC

freebsd11_network: INTR_FAST is no more.

I didn't figure out exactly when, but the docs from FreeBSD 8 reference it
as being not just deprecated, but already removed; and indeed no drivers
we have from either FreeBSD 9 or 11 use it. The intr_wrapper system is
used in its place.

----------------------------------------------------------------------------

diff --git a/src/libs/compat/freebsd11_network/bus.cpp 
b/src/libs/compat/freebsd11_network/bus.cpp
index 816878d0b3..c34b15b7ad 100644
--- a/src/libs/compat/freebsd11_network/bus.cpp
+++ b/src/libs/compat/freebsd11_network/bus.cpp
@@ -278,18 +278,6 @@ intr_wrapper(void *data)
 }
 
 
-static int32
-intr_fast_wrapper(void *data)
-{
-       struct internal_intr *intr = (struct internal_intr *)data;
-
-       intr->handler(intr->arg);
-
-       // We don't know if the interrupt has been handled.
-       return B_UNHANDLED_INTERRUPT;
-}
-
-
 static int32
 intr_handler(void *data)
 {
@@ -352,9 +340,6 @@ bus_setup_intr(device_t dev, struct resource *res, int 
flags,
        if (filter != NULL) {
                status = install_io_interrupt_handler(intr->irq,
                        (interrupt_handler)intr->filter, intr->arg, 0);
-       } else if ((flags & INTR_FAST) != 0) {
-               status = install_io_interrupt_handler(intr->irq,
-                       intr_fast_wrapper, intr, B_NO_HANDLED_INFO);
        } else {
                snprintf(semName, sizeof(semName), "%s intr", dev->device_name);
 
@@ -426,8 +411,6 @@ bus_teardown_intr(device_t dev, struct resource *res, void 
*arg)
        if (intr->filter != NULL) {
                remove_io_interrupt_handler(intr->irq, 
(interrupt_handler)intr->filter,
                        intr->arg);
-       } else if (intr->flags & INTR_FAST) {
-               remove_io_interrupt_handler(intr->irq, intr_fast_wrapper, intr);
        } else {
                remove_io_interrupt_handler(intr->irq, intr_wrapper, intr);
        }
diff --git a/src/libs/compat/freebsd11_network/compat/sys/bus.h 
b/src/libs/compat/freebsd11_network/compat/sys/bus.h
index 476c847145..2e00646147 100644
--- a/src/libs/compat/freebsd11_network/compat/sys/bus.h
+++ b/src/libs/compat/freebsd11_network/compat/sys/bus.h
@@ -69,7 +69,6 @@ struct resource_spec {
 
 enum intr_type {
        INTR_TYPE_NET   = 4,
-       INTR_FAST               = 128,
        INTR_MPSAFE             = 512,
 };
 


Other related posts:

  • » [haiku-commits] haiku: hrev52056 - src/add-ons/kernel/drivers/network/via_rhine/dev/vr build/jam src/add-ons/kernel/drivers/network/via_rhine/dev/mii src/add-ons/kernel/drivers/network/via_rhine src/libs/compat/freebsd11_network - waddlesplash