From ee8a399ca3808460909bd0cc5af689588a4e5470 Mon Sep 17 00:00:00 2001
From: Sascha Wildner <saw@online.de>
Date: Sun, 7 Aug 2016 18:17:51 +0200
Subject: [PATCH 7/8] kernel: Remove the old vx(4) network driver.

Aside from being quite obsolete, its documentation always was in the
i386 so i have my doubts that it still works.

If anyone needs it back for some reason I can't imagine currently,
we can take another look then.
---
 UPDATING                     |  10 +-
 share/man/man4/sn.4          |   1 -
 sys/conf/files               |   2 -
 sys/config/LINT64            |   4 -
 sys/config/X86_64_GENERIC    |   1 -
 sys/dev/netif/Makefile       |   2 +-
 sys/dev/netif/vx/Makefile    |   5 -
 sys/dev/netif/vx/if_vx.c     | 993 -------------------------------------------
 sys/dev/netif/vx/if_vx_pci.c | 193 ---------
 sys/dev/netif/vx/if_vxreg.h  | 472 --------------------
 10 files changed, 6 insertions(+), 1677 deletions(-)
 delete mode 100644 sys/dev/netif/vx/Makefile
 delete mode 100644 sys/dev/netif/vx/if_vx.c
 delete mode 100644 sys/dev/netif/vx/if_vx_pci.c
 delete mode 100644 sys/dev/netif/vx/if_vxreg.h

diff --git a/UPDATING b/UPDATING
index 0216aec..c0714b4 100644
--- a/UPDATING
+++ b/UPDATING
@@ -12,12 +12,12 @@
 +         UPGRADING DRAGONFLY FROM 4.6 TO LATER VERSIONS                +
 +-----------------------------------------------------------------------+
 
-CS and EX DRIVERS REMOVED
--------------------------
+CS, EX AND VX DRIVERS REMOVED
+-----------------------------
 
-The cs(4) and ex(4) drivers have been removed. Both were very old and
-its doubtful they ever worked properly in x86_64 but both were in
-X86_64_GENERIC, so custom configurations derived from it have to be
+The cs(4), ex(4) and vx(4) drivers have been removed. They were very
+old and its doubtful they ever worked properly in x86_64 but they were
+in X86_64_GENERIC, so custom configurations derived from it have to be
 adjusted.
 
 +-----------------------------------------------------------------------+
diff --git a/share/man/man4/sn.4 b/share/man/man4/sn.4
index 02618ff..c2b0ec2 100644
--- a/share/man/man4/sn.4
+++ b/share/man/man4/sn.4
@@ -40,7 +40,6 @@ device driver supports SMC9xxx based PCMCIA cards.
 .Xr ed 4 ,
 .Xr intro 4 ,
 .Xr ng_ether 4 ,
-.Xr vx 4 ,
 .Xr ifconfig 8
 .Sh HISTORY
 The
diff --git a/sys/conf/files b/sys/conf/files
index 1cb3cee..f29127c 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -1003,8 +1003,6 @@ dev/raid/ips/ips_disk.c			optional ips
 dev/raid/ips/ips_ioctl.c		optional ips
 dev/raid/ips/ips_pci.c			optional ips
 dev/disk/vn/vn.c			optional vn
-dev/netif/vx/if_vx.c			optional vx
-dev/netif/vx/if_vx_pci.c		optional vx pci
 dev/netif/wi/if_wi.c			optional wi
 dev/netif/wi/if_wi_pccard.c		optional wi pccard
 dev/netif/wi/if_wi_pci.c		optional wi pci
diff --git a/sys/config/LINT64 b/sys/config/LINT64
index 2b41e16..65302f4 100644
--- a/sys/config/LINT64
+++ b/sys/config/LINT64
@@ -1446,9 +1446,6 @@ options 	AHD_REG_PRETTY_PRINT
 # chips, including the D-Link DFE530TX (see 'rl' for DFE530TX+), the Hawking
 # Technologies PN102TX, and the AOpen/Acer ALN-320.
 #
-# The `vx' device provides support for the 3Com 3C590 and 3C595
-# early support
-#
 # The `wb' device provides support for various fast ethernet adapters
 # based on the Winbond W89C840F chip. Note: this is not the same as
 # the Winbond W89C940F, which is an NE2000 clone.
@@ -1578,7 +1575,6 @@ device		xl		# 3Com 3c90x (``Boomerang'', ``Cyclone'')
 # PCI Ethernet NICs.
 device		de		# DEC/Intel DC21x4x (``Tulip'')
 device		txp		# 3Com 3cR990 (``Typhoon'')
-device		vx		# 3Com 3c590, 3c595 (``Vortex'')
 
 # Gigabit Ethernet NICs.
 device		bge		# Broadcom BCM570x (``Tigon III'')
diff --git a/sys/config/X86_64_GENERIC b/sys/config/X86_64_GENERIC
index e6381a9..f92dfc0 100644
--- a/sys/config/X86_64_GENERIC
+++ b/sys/config/X86_64_GENERIC
@@ -208,7 +208,6 @@ device		sio3	at isa? disable port IO_COM4 irq 9
 # PCI Ethernet NICs.
 device		de		# DEC/Intel DC21x4x (``Tulip'')
 device		txp		# 3Com 3cR990 (``Typhoon'')
-device		vx		# 3Com 3c590, 3c595 (``Vortex'')
 
 device		em		# Intel PRO/1000 adapter Gigabit Ethernet Card (``Wiseman'')
 				# Requires ig_hal
diff --git a/sys/dev/netif/Makefile b/sys/dev/netif/Makefile
index 5b7f293..24af550 100644
--- a/sys/dev/netif/Makefile
+++ b/sys/dev/netif/Makefile
@@ -3,7 +3,7 @@ SUBDIR= age alc ale bce bfe bge \
 	fwe fxp ic jme lge lnc \
 	mii_layer my msk mxge nfe nge oce pcn \
 	re rl sbsh sf sis sk sln ste stge ti tl tx txp \
-	vge vr vx wb xe xl ig_hal emx ae igb ix bnx
+	vge vr wb xe xl ig_hal emx ae igb ix bnx
 
 SUBDIR+= ath bwn iwm iwi iwn ndis ral wi wpi
 
diff --git a/sys/dev/netif/vx/Makefile b/sys/dev/netif/vx/Makefile
deleted file mode 100644
index 1362e44..0000000
--- a/sys/dev/netif/vx/Makefile
+++ /dev/null
@@ -1,5 +0,0 @@
-KMOD    = if_vx
-SRCS    = if_vx.c if_vx_pci.c
-SRCS    += device_if.h bus_if.h pci_if.h pcidevs.h isa_if.h
-
-.include <bsd.kmod.mk>
diff --git a/sys/dev/netif/vx/if_vx.c b/sys/dev/netif/vx/if_vx.c
deleted file mode 100644
index 4a15c85..0000000
--- a/sys/dev/netif/vx/if_vx.c
+++ /dev/null
@@ -1,993 +0,0 @@
-/*
- * Copyright (c) 1994 Herb Peyerl <hpeyerl@novatel.ca>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *      This product includes software developed by Herb Peyerl.
- * 4. The name of Herb Peyerl may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD: src/sys/dev/vx/if_vx.c,v 1.25.2.6 2002/02/13 00:43:10 dillon Exp $
- */
-
-/*
- * Created from if_ep.c driver by Fred Gray (fgray@rice.edu) to support
- * the 3c590 family.
- */
-
-/*
- *	Modified from the FreeBSD 1.1.5.1 version by:
- *		 	Andres Vega Garcia
- *			INRIA - Sophia Antipolis, France
- *			avega@sophia.inria.fr
- */
-
-/*
- *  Promiscuous mode added and interrupt logic slightly changed
- *  to reduce the number of adapter failures. Transceiver select
- *  logic changed to use value from EEPROM. Autoconfiguration
- *  features added.
- *  Done by:
- *          Serge Babkin
- *          Chelindbank (Chelyabinsk, Russia)
- *          babkin@hq.icb.chel.su
- */
-
-#include <sys/param.h>
-#include <sys/bus.h>
-#include <sys/systm.h>
-#include <sys/sockio.h>
-#include <sys/malloc.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <sys/linker_set.h>
-#include <sys/module.h>
-#include <sys/serialize.h>
-#include <sys/thread2.h>
-
-#include <net/if.h>
-#include <net/ifq_var.h>
-#include <net/ethernet.h>
-#include <net/if_arp.h>
-
-#include <net/bpf.h>
-
-#include "if_vxreg.h"
-
-DECLARE_DUMMY_MODULE(if_vx);
-
-static struct connector_entry {
-  int bit;
-  const char *name;
-} conn_tab[VX_CONNECTORS] = {
-#define CONNECTOR_UTP	0
-  { 0x08, "utp"},
-#define CONNECTOR_AUI	1
-  { 0x20, "aui"},
-/* dummy */
-  { 0, "???"},
-#define CONNECTOR_BNC	3
-  { 0x10, "bnc"},
-#define CONNECTOR_TX	4
-  { 0x02, "tx"},
-#define CONNECTOR_FX	5
-  { 0x04, "fx"},
-#define CONNECTOR_MII	6
-  { 0x40, "mii"},
-  { 0, "???"}
-};
-
-/* int vxattach (struct vx_softc *); */
-static void vxtxstat (struct vx_softc *);
-static int vxstatus (struct vx_softc *);
-static void vxinit (void *);
-static int vxioctl (struct ifnet *, u_long, caddr_t, struct ucred *);
-static void vxstart (struct ifnet *ifp, struct ifaltq_subque *);
-static void vxwatchdog (struct ifnet *);
-static void vxreset (struct vx_softc *);
-/* void vxstop (struct vx_softc *); */
-static void vxread (struct vx_softc *);
-static struct mbuf *vxget (struct vx_softc *, u_int);
-static void vxmbuffill (void *);
-static void vxmbuffill_serialized (void *);
-static void vxmbufempty (struct vx_softc *);
-static void vxsetfilter (struct vx_softc *);
-static void vxgetlink (struct vx_softc *);
-static void vxsetlink (struct vx_softc *);
-/* int vxbusyeeprom (struct vx_softc *); */
-
-int
-vxattach(device_t dev)
-{
-    struct vx_softc *sc;
-    struct ifnet *ifp;
-    uint8_t eaddr[ETHER_ADDR_LEN];
-    int i;
-
-    sc = device_get_softc(dev);
-
-    callout_init(&sc->vx_timer);
-    GO_WINDOW(0);
-    CSR_WRITE_2(sc, VX_COMMAND, GLOBAL_RESET);
-    VX_BUSY_WAIT;
-
-    ifp = &sc->arpcom.ac_if;
-    if_initname(ifp, device_get_name(dev), device_get_unit(dev));
-
-    vxgetlink(sc);
-
-    /*
-     * Read the station address from the eeprom
-     */
-    GO_WINDOW(0);
-    for (i = 0; i < 3; i++) {
-        int x;
-        if (vxbusyeeprom(sc))
-            return 0;
-	CSR_WRITE_2(sc, VX_W0_EEPROM_COMMAND, EEPROM_CMD_RD
-	     | (EEPROM_OEM_ADDR_0 + i));
-        if (vxbusyeeprom(sc))
-            return 0;
-        x = CSR_READ_2(sc, VX_W0_EEPROM_DATA);
-        eaddr[(i << 1)] = x >> 8;
-        eaddr[(i << 1) + 1] = x;
-    }
-
-    ifp->if_mtu = ETHERMTU;
-    ifq_set_maxlen(&ifp->if_snd, IFQ_MAXLEN);
-    ifq_set_ready(&ifp->if_snd);
-    ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
-    ifp->if_start = vxstart;
-    ifp->if_ioctl = vxioctl;
-    ifp->if_init = vxinit;
-    ifp->if_watchdog = vxwatchdog;
-    ifp->if_softc = sc;
-
-    ether_ifattach(ifp, eaddr, NULL);
-
-    sc->tx_start_thresh = 20;	/* probably a good starting point. */
-
-    vxstop(sc);
-
-    return 1;
-}
-
-
-
-/*
- * The order in here seems important. Otherwise we may not receive
- * interrupts. ?!
- */
-static void
-vxinit(void *xsc)
-{
-    struct vx_softc *sc = (struct vx_softc *) xsc;
-    struct ifnet *ifp = &sc->arpcom.ac_if;
-    int i;
-
-    VX_BUSY_WAIT;
-
-    GO_WINDOW(2);
-
-    for (i = 0; i < 6; i++) /* Reload the ether_addr. */
-	CSR_WRITE_1(sc, VX_W2_ADDR_0 + i, sc->arpcom.ac_enaddr[i]);
-
-    CSR_WRITE_2(sc, VX_COMMAND, RX_RESET);
-    VX_BUSY_WAIT;
-    CSR_WRITE_2(sc, VX_COMMAND, TX_RESET);
-    VX_BUSY_WAIT;
-
-    GO_WINDOW(1);	/* Window 1 is operating window */
-    for (i = 0; i < 31; i++)
-	CSR_READ_1(sc, VX_W1_TX_STATUS);
-
-    CSR_WRITE_2(sc, VX_COMMAND,SET_RD_0_MASK | S_CARD_FAILURE |
-			S_RX_COMPLETE | S_TX_COMPLETE | S_TX_AVAIL);
-    CSR_WRITE_2(sc, VX_COMMAND,SET_INTR_MASK | S_CARD_FAILURE |
-			S_RX_COMPLETE | S_TX_COMPLETE | S_TX_AVAIL);
-
-    /*
-     * Attempt to get rid of any stray interrupts that occured during
-     * configuration.  On the i386 this isn't possible because one may
-     * already be queued.  However, a single stray interrupt is
-     * unimportant.
-     */
-    CSR_WRITE_2(sc, VX_COMMAND, ACK_INTR | 0xff);
-
-    vxsetfilter(sc);
-    vxsetlink(sc);
-
-    CSR_WRITE_2(sc, VX_COMMAND, RX_ENABLE);
-    CSR_WRITE_2(sc, VX_COMMAND, TX_ENABLE);
-
-    vxmbuffill_serialized((caddr_t) sc);
-
-    /* Interface is now `running', with no output active. */
-    ifp->if_flags |= IFF_RUNNING;
-    ifq_clr_oactive(&ifp->if_snd);
-
-    /* Attempt to start output, if any. */
-    if_devstart(ifp);
-}
-
-static void
-vxsetfilter(struct vx_softc *sc)
-{
-    struct ifnet *ifp = &sc->arpcom.ac_if;  
-    
-    GO_WINDOW(1);           /* Window 1 is operating window */
-    CSR_WRITE_2(sc, VX_COMMAND, SET_RX_FILTER | FIL_INDIVIDUAL | FIL_BRDCST |
-	 FIL_MULTICAST |
-	 ((ifp->if_flags & IFF_PROMISC) ? FIL_PROMISC : 0 ));
-}               
-
-static void            
-vxgetlink(struct vx_softc *sc)
-{
-    int n, k;
-
-    GO_WINDOW(3);
-    sc->vx_connectors = CSR_READ_2(sc, VX_W3_RESET_OPT) & 0x7f;
-    for (n = 0, k = 0; k < VX_CONNECTORS; k++) {
-      if (sc->vx_connectors & conn_tab[k].bit) {
-	if (n == 0)
-	  if_printf(&sc->arpcom.ac_if, "%s", conn_tab[k].name);
-	else
-	  kprintf("/%s", conn_tab[k].name);
-	n++;
-      }
-    }
-    if (n == 0) {
-	if_printf(&sc->arpcom.ac_if, "no connectors!\n");
-	return;
-    }
-    GO_WINDOW(3);
-    sc->vx_connector = (CSR_READ_4(sc, VX_W3_INTERNAL_CFG) 
-			& INTERNAL_CONNECTOR_MASK) 
-			>> INTERNAL_CONNECTOR_BITS;
-    if (sc->vx_connector & 0x10) {
-	sc->vx_connector &= 0x0f;
-	kprintf("[*%s*]", conn_tab[(int)sc->vx_connector].name);
-	kprintf(": disable 'auto select' with DOS util!\n");
-    } else {
-	kprintf("[*%s*]\n", conn_tab[(int)sc->vx_connector].name);
-    }
-}
-
-static void            
-vxsetlink(struct vx_softc *sc)
-{       
-    struct ifnet *ifp = &sc->arpcom.ac_if;  
-    int i, j, k;
-    const char *reason, *warning;
-    static short prev_flags;
-    static char prev_conn = -1;
-
-    if (prev_conn == -1) {
-	prev_conn = sc->vx_connector;
-    }
-
-    /*
-     * S.B.
-     *
-     * Now behavior was slightly changed:
-     *
-     * if any of flags link[0-2] is used and its connector is
-     * physically present the following connectors are used:
-     *
-     *   link0 - AUI * highest precedence
-     *   link1 - BNC
-     *   link2 - UTP * lowest precedence
-     *
-     * If none of them is specified then
-     * connector specified in the EEPROM is used
-     * (if present on card or UTP if not).
-     */
-
-    i = sc->vx_connector;	/* default in EEPROM */
-    reason = "default";
-    warning = NULL;
-
-    if (ifp->if_flags & IFF_LINK0) {
-	if (sc->vx_connectors & conn_tab[CONNECTOR_AUI].bit) {
-	    i = CONNECTOR_AUI;
-	    reason = "link0";
-	} else {
-	    warning = "aui not present! (link0)";
-	}
-    } else if (ifp->if_flags & IFF_LINK1) {
-	if (sc->vx_connectors & conn_tab[CONNECTOR_BNC].bit) {
-	    i = CONNECTOR_BNC;
-	    reason = "link1";
-	} else {
-	    warning = "bnc not present! (link1)";
-	}
-    } else if (ifp->if_flags & IFF_LINK2) {
-	if (sc->vx_connectors & conn_tab[CONNECTOR_UTP].bit) {
-	    i = CONNECTOR_UTP;
-	    reason = "link2";
-	} else {
-	    warning = "utp not present! (link2)";
-	}
-    } else if ((sc->vx_connectors & conn_tab[(int)sc->vx_connector].bit) == 0) {
-	warning = "strange connector type in EEPROM.";
-	reason = "forced";
-	i = CONNECTOR_UTP;
-    }
-
-    /* Avoid unnecessary message. */
-    k = (prev_flags ^ ifp->if_flags) & (IFF_LINK0 | IFF_LINK1 | IFF_LINK2);
-    if ((k != 0) || (prev_conn != i)) {
-	if (warning != NULL) {
-	    if_printf(ifp, "warning: %s\n", warning);
-	}
-	if_printf(ifp, "selected %s. (%s)\n", conn_tab[i].name, reason);
-    }
-
-    /* Set the selected connector. */
-    GO_WINDOW(3);
-    j = CSR_READ_4(sc, VX_W3_INTERNAL_CFG) & ~INTERNAL_CONNECTOR_MASK;
-    CSR_WRITE_4(sc, VX_W3_INTERNAL_CFG, j | (i <<INTERNAL_CONNECTOR_BITS));
-
-    /* First, disable all. */
-    CSR_WRITE_2(sc,VX_COMMAND, STOP_TRANSCEIVER);
-    DELAY(800);
-    GO_WINDOW(4);
-    CSR_WRITE_2(sc, VX_W4_MEDIA_TYPE, 0);
-
-    /* Second, enable the selected one. */
-    switch(i) {
-      case CONNECTOR_UTP:
-	GO_WINDOW(4);
-	CSR_WRITE_2(sc, VX_W4_MEDIA_TYPE, ENABLE_UTP);
-	break;
-      case CONNECTOR_BNC:
-	CSR_WRITE_2(sc, VX_COMMAND, START_TRANSCEIVER);
-	DELAY(800);
-	break;
-      case CONNECTOR_TX:
-      case CONNECTOR_FX:
-	GO_WINDOW(4);
-	CSR_WRITE_2(sc, VX_W4_MEDIA_TYPE, LINKBEAT_ENABLE);
-	break;
-      default:	/* AUI and MII fall here */
-	break;
-    }
-    GO_WINDOW(1); 
-
-    prev_flags = ifp->if_flags;
-    prev_conn = i;
-}
-
-static void
-vxstart(struct ifnet *ifp, struct ifaltq_subque *ifsq)
-{
-    struct vx_softc *sc = ifp->if_softc;
-    struct mbuf *m0;
-    int len, pad;
-
-    ASSERT_ALTQ_SQ_DEFAULT(ifp, ifsq);
-
-    /* Don't transmit if interface is busy or not running */
-    if ((ifp->if_flags & IFF_RUNNING) == 0 || ifq_is_oactive(&ifp->if_snd))
-	return;
-
-startagain:
-    /* Sneak a peek at the next packet */
-    m0 = ifq_dequeue(&ifp->if_snd);
-    if (m0 == NULL)
-	return;
-
-    /* We need to use m->m_pkthdr.len, so require the header */
-    M_ASSERTPKTHDR(m0);
-    len = m0->m_pkthdr.len;
-
-    pad = (4 - len) & 3;
-
-    /*
-     * The 3c509 automatically pads short packets to minimum ethernet length,
-     * but we drop packets that are too large. Perhaps we should truncate
-     * them instead?
-     */
-    if (len + pad > ETHER_MAX_LEN) {
-	/* packet is obviously too large: toss it */
-	IFNET_STAT_INC(ifp, oerrors, 1);
-	m_freem(m0);
-	goto readcheck;
-    }
-    VX_BUSY_WAIT;
-    if (CSR_READ_2(sc, VX_W1_FREE_TX) < len + pad + 4) {
-	CSR_WRITE_2(sc, VX_COMMAND, SET_TX_AVAIL_THRESH | ((len + pad + 4) >> 2));
-	/* not enough room in FIFO */
-	if (CSR_READ_2(sc, VX_W1_FREE_TX) < len + pad + 4) { /* make sure */
-	    ifq_set_oactive(&ifp->if_snd);
-	    ifp->if_timer = 1;
-	    ifq_prepend(&ifp->if_snd, m0);
-	    return;
-	}
-    }
-    CSR_WRITE_2(sc, VX_COMMAND, SET_TX_AVAIL_THRESH | (8188 >> 2));
-
-    VX_BUSY_WAIT;
-    CSR_WRITE_2(sc, VX_COMMAND, SET_TX_START_THRESH |
-	((len / 4 + sc->tx_start_thresh) >> 2));
-
-    BPF_MTAP(ifp, m0);
-
-    /*
-     * Do the output in a critical section so that an interrupt from
-     * another device won't cause a FIFO underrun.
-     */
-    crit_enter();
-
-    CSR_WRITE_4(sc, VX_W1_TX_PIO_WR_1, len | TX_INDICATE);
-
-    while (m0) {
-        if (m0->m_len > 3)
-	    bus_space_write_multi_4(sc->vx_btag, sc->vx_bhandle,
-	        VX_W1_TX_PIO_WR_1,
-		(u_int32_t *)mtod(m0, caddr_t), m0->m_len / 4);
-        if (m0->m_len & 3)
-	    bus_space_write_multi_1(sc->vx_btag, sc->vx_bhandle,
-	        VX_W1_TX_PIO_WR_1,
-		mtod(m0, caddr_t) + (m0->m_len & ~3), m0->m_len & 3);
-	m0 = m_free(m0);
-    }
-    while (pad--)
-	CSR_WRITE_1(sc, VX_W1_TX_PIO_WR_1, 0);	/* Padding */
-
-    crit_exit();
-
-    IFNET_STAT_INC(ifp, opackets, 1);
-    ifp->if_timer = 1;
-
-readcheck:
-    if ((CSR_READ_2(sc, VX_W1_RX_STATUS) & ERR_INCOMPLETE) == 0) {
-	/* We received a complete packet. */
-	
-	if ((CSR_READ_2(sc, VX_STATUS) & S_INTR_LATCH) != 0) {
-	    /* Got an interrupt, return so that it gets serviced. */
-	    return;
-	}
-	/*
-	 * No interrupt, read the packet and continue
-	 * Is  this supposed to happen? Is my motherboard
-	 * completely busted?
-	 */
-	vxread(sc);
-    } else {
-	/* Check if we are stuck and reset [see XXX comment] */
-	if (vxstatus(sc)) {
-	    if (ifp->if_flags & IFF_DEBUG)
-	       if_printf(ifp, "adapter reset\n");
-	    vxreset(sc);
-	}
-    }
-
-    goto startagain;
-}
-
-/*
- * XXX: The 3c509 card can get in a mode where both the fifo status bit
- *      FIFOS_RX_OVERRUN and the status bit ERR_INCOMPLETE are set
- *      We detect this situation and we reset the adapter.
- *      It happens at times when there is a lot of broadcast traffic
- *      on the cable (once in a blue moon).
- */
-static int
-vxstatus(struct vx_softc *sc)
-{
-    int fifost;
-    struct ifnet *ifp = &sc->arpcom.ac_if;
-
-    /*
-     * Check the FIFO status and act accordingly
-     */
-    GO_WINDOW(4);
-    fifost = CSR_READ_2(sc, VX_W4_FIFO_DIAG);
-    GO_WINDOW(1);
-
-    if (fifost & FIFOS_RX_UNDERRUN) {
-	if (ifp->if_flags & IFF_DEBUG)
-	    if_printf(ifp, "RX underrun\n");
-	vxreset(sc);
-	return 0;
-    }
-
-    if (fifost & FIFOS_RX_STATUS_OVERRUN) {
-	if (ifp->if_flags & IFF_DEBUG)
-	    if_printf(ifp, "RX Status overrun\n");
-	return 1;
-    }
-
-    if (fifost & FIFOS_RX_OVERRUN) {
-	if (ifp->if_flags & IFF_DEBUG)
-	    if_printf(ifp, "RX overrun\n");
-	return 1;
-    }
-
-    if (fifost & FIFOS_TX_OVERRUN) {
-	if (ifp->if_flags & IFF_DEBUG)
-	    if_printf(ifp, "TX overrun\n");
-	vxreset(sc);
-    }
-
-    return 0;
-}
-
-static void     
-vxtxstat(struct vx_softc *sc)
-{
-	int i;
-	struct ifnet *ifp = &sc->arpcom.ac_if;
-
-	/*
-	 * We need to read+write TX_STATUS until we get a 0 status
-	 * in order to turn off the interrupt flag.
-	 */
-	while ((i = CSR_READ_1(sc, VX_W1_TX_STATUS)) & TXS_COMPLETE) {
-		CSR_WRITE_1(sc, VX_W1_TX_STATUS, 0x0);
-
-		if (i & TXS_JABBER) {
-			IFNET_STAT_INC(ifp, oerrors, 1);
-			if (ifp->if_flags & IFF_DEBUG)
-				if_printf(ifp, "jabber (%x)\n", i);
-			vxreset(sc);
-		} else if (i & TXS_UNDERRUN) {
-			IFNET_STAT_INC(ifp, oerrors, 1);
-			if (ifp->if_flags & IFF_DEBUG) {
-				if_printf(ifp, "fifo underrun (%x) @%d\n",
-					  i, sc->tx_start_thresh);
-			}
-			if (sc->tx_succ_ok < 100) {
-				sc->tx_start_thresh = min(
-				    ETHER_MAX_LEN, sc->tx_start_thresh + 20);
-			}
-			sc->tx_succ_ok = 0;
-			vxreset(sc);
-		} else if (i & TXS_MAX_COLLISION) {
-			IFNET_STAT_INC(ifp, collisions, 1);
-			CSR_WRITE_2(sc, VX_COMMAND, TX_ENABLE);
-			ifq_clr_oactive(&ifp->if_snd);
-		} else {
-			sc->tx_succ_ok = (sc->tx_succ_ok+1) & 127;
-		}
-	}
-}
-
-void
-vxintr(void *voidsc)
-{
-    short status;
-    struct vx_softc *sc = voidsc;
-    struct ifnet *ifp = &sc->arpcom.ac_if;
-
-    for (;;) {
-	CSR_WRITE_2(sc, VX_COMMAND, C_INTR_LATCH);
-
-	status = CSR_READ_2(sc, VX_STATUS);
-
-	if ((status & (S_TX_COMPLETE | S_TX_AVAIL |
-		S_RX_COMPLETE | S_CARD_FAILURE)) == 0)
-	    break;
-
-	/*
-	 * Acknowledge any interrupts.  It's important that we do this
-	 * first, since there would otherwise be a race condition.
-	 * Due to the i386 interrupt queueing, we may get spurious
-	 * interrupts occasionally.
-	 */
-	CSR_WRITE_2(sc, VX_COMMAND, ACK_INTR | status);
-
-	if (status & S_RX_COMPLETE)
-	    vxread(sc);
-	if (status & S_TX_AVAIL) {
-	    ifp->if_timer = 0;
-	    ifq_clr_oactive(&ifp->if_snd);
-	    if_devstart(ifp);
-	}
-	if (status & S_CARD_FAILURE) {
-	    if_printf(ifp, "adapter failure (%x)\n", status);
-	    ifp->if_timer = 0;
-	    vxreset(sc);
-	    return;
-	}
-	if (status & S_TX_COMPLETE) {
-	    ifp->if_timer = 0;
-	    vxtxstat(sc);
-	    if_devstart(ifp);
-	}
-    }
-    /* no more interrupts */
-}
-
-static void
-vxread(struct vx_softc *sc)
-{
-    struct ifnet *ifp = &sc->arpcom.ac_if;
-    struct mbuf *m;
-    struct ether_header *eh;
-    u_int len;
-
-    len = CSR_READ_2(sc, VX_W1_RX_STATUS);
-
-again:
-
-    if (ifp->if_flags & IFF_DEBUG) {
-	int err = len & ERR_MASK;
-	const char *s = NULL;
-
-	if (len & ERR_INCOMPLETE)
-	    s = "incomplete packet";
-	else if (err == ERR_OVERRUN)
-	    s = "packet overrun";
-	else if (err == ERR_RUNT)
-	    s = "runt packet";
-	else if (err == ERR_ALIGNMENT)
-	    s = "bad alignment";
-	else if (err == ERR_CRC)
-	    s = "bad crc";
-	else if (err == ERR_OVERSIZE)
-	    s = "oversized packet";
-	else if (err == ERR_DRIBBLE)
-	    s = "dribble bits";
-
-	if (s)
-	    if_printf(ifp, "%s\n", s);
-    }
-
-    if (len & ERR_INCOMPLETE)
-	return;
-
-    if (len & ERR_RX) {
-	IFNET_STAT_INC(ifp, ierrors, 1);
-	goto abort;
-    }
-
-    len &= RX_BYTES_MASK;	/* Lower 11 bits = RX bytes. */
-
-    /* Pull packet off interface. */
-    m = vxget(sc, len);
-    if (m == NULL) {
-	IFNET_STAT_INC(ifp, ierrors, 1);
-	goto abort;
-    }
-
-    IFNET_STAT_INC(ifp, ipackets, 1);
-
-    /* We assume the header fit entirely in one mbuf. */
-    eh = mtod(m, struct ether_header *);
-
-    /*
-     * XXX: Some cards seem to be in promiscous mode all the time.
-     * we need to make sure we only get our own stuff always.
-     * bleah!
-     */
-
-    if ((eh->ether_dhost[0] & 1) == 0		/* !mcast and !bcast */
-      && bcmp(eh->ether_dhost, sc->arpcom.ac_enaddr, ETHER_ADDR_LEN) != 0) {
-	m_freem(m);
-	return;
-    }
-
-    ifp->if_input(ifp, m, NULL, -1);
-
-    /*
-    * In periods of high traffic we can actually receive enough
-    * packets so that the fifo overrun bit will be set at this point,
-    * even though we just read a packet. In this case we
-    * are not going to receive any more interrupts. We check for
-    * this condition and read again until the fifo is not full.
-    * We could simplify this test by not using vxstatus(), but
-    * rechecking the RX_STATUS register directly. This test could
-    * result in unnecessary looping in cases where there is a new
-    * packet but the fifo is not full, but it will not fix the
-    * stuck behavior.
-    *
-    * Even with this improvement, we still get packet overrun errors
-    * which are hurting performance. Maybe when I get some more time
-    * I'll modify vxread() so that it can handle RX_EARLY interrupts.
-    */
-    if (vxstatus(sc)) {
-	len = CSR_READ_2(sc, VX_W1_RX_STATUS);
-	/* Check if we are stuck and reset [see XXX comment] */
-	if (len & ERR_INCOMPLETE) {
-	    if (ifp->if_flags & IFF_DEBUG)
-		if_printf(ifp, "adapter reset\n");
-	    vxreset(sc);
-	    return;
-	}
-	goto again;
-    }
-
-    return;
-
-abort:
-    CSR_WRITE_2(sc, VX_COMMAND, RX_DISCARD_TOP_PACK);
-}
-
-static struct mbuf *
-vxget(struct vx_softc *sc, u_int totlen)
-{
-    struct ifnet *ifp = &sc->arpcom.ac_if;
-    struct mbuf *top, **mp, *m;
-    int len;
-
-    m = sc->mb[sc->next_mb];
-    sc->mb[sc->next_mb] = NULL;
-    if (m == NULL) {
-        MGETHDR(m, M_NOWAIT, MT_DATA);
-        if (m == NULL)
-            return NULL;
-    } else {
-        /* If the queue is no longer full, refill. */
-        if (sc->last_mb == sc->next_mb && sc->buffill_pending == 0) {
-	    callout_reset(&sc->vx_timer, 1, vxmbuffill, sc);
-	    sc->buffill_pending = 1;
-	}
-        /* Convert one of our saved mbuf's. */
-        sc->next_mb = (sc->next_mb + 1) % MAX_MBS;
-        m->m_data = m->m_pktdat;
-        m->m_flags = M_PKTHDR;
-	bzero(&m->m_pkthdr, sizeof(m->m_pkthdr));
-    }
-    m->m_pkthdr.rcvif = ifp;
-    m->m_pkthdr.len = totlen;
-    len = MHLEN;
-    top = NULL;
-    mp = &top;
-
-    /*
-     * We read the packet in a critical section so that an interrupt
-     * from another device doesn't cause the card's buffer to overflow
-     * while we're reading it.  We may still lose packets at other times.
-     */
-    crit_enter();
-
-    /*
-     * Since we don't set allowLargePackets bit in MacControl register,
-     * we can assume that totlen <= 1500bytes.
-     * The while loop will be performed if we have a packet with
-     * MLEN < m_len < MINCLSIZE.
-     */
-    while (totlen > 0) {
-        if (top) {
-            m = sc->mb[sc->next_mb];
-            sc->mb[sc->next_mb] = NULL;
-            if (m == NULL) {
-                MGET(m, M_NOWAIT, MT_DATA);
-                if (m == NULL) {
-                    crit_exit();
-                    m_freem(top);
-                    return NULL;
-                }
-            } else {
-                sc->next_mb = (sc->next_mb + 1) % MAX_MBS;
-            }
-            len = MLEN;
-        }
-        if (totlen >= MINCLSIZE) {
-	    MCLGET(m, M_NOWAIT);
-	    if (m->m_flags & M_EXT)
-		len = MCLBYTES;
-        }
-        len = min(totlen, len);
-        if (len > 3)
-	    bus_space_read_multi_4(sc->vx_btag, sc->vx_bhandle,
-	        VX_W1_RX_PIO_RD_1, mtod(m, u_int32_t *), len / 4);
-	if (len & 3) {
-	    bus_space_read_multi_1(sc->vx_btag, sc->vx_bhandle,
-	        VX_W1_RX_PIO_RD_1, mtod(m, u_int8_t *) + (len & ~3),
-		len & 3);
-	}
-        m->m_len = len;
-        totlen -= len;
-        *mp = m;
-        mp = &m->m_next;
-    }
-
-    CSR_WRITE_2(sc, VX_COMMAND, RX_DISCARD_TOP_PACK);
-
-    crit_exit();
-
-    return top;
-}
-
-
-static int
-vxioctl(struct ifnet *ifp, u_long cmd, caddr_t data, struct ucred *cr)
-{
-    struct vx_softc *sc = ifp->if_softc;
-    struct ifreq *ifr = (struct ifreq *) data;
-    int error = 0;
-
-    switch (cmd) {
-    case SIOCSIFFLAGS:
-	if ((ifp->if_flags & IFF_UP) == 0 &&
-	    (ifp->if_flags & IFF_RUNNING) != 0) {
-	    /*
-             * If interface is marked up and it is stopped, then
-             * start it.
-             */
-	    vxstop(sc);
-	    ifp->if_flags &= ~IFF_RUNNING;
-        } else if ((ifp->if_flags & IFF_UP) != 0 &&
-                   (ifp->if_flags & IFF_RUNNING) == 0) {
-            /*
-             * If interface is marked up and it is stopped, then
-             * start it.
-             */
-            vxinit(sc);
-        } else {
-            /*
-             * deal with flags changes:
-             * IFF_MULTICAST, IFF_PROMISC,
-             * IFF_LINK0, IFF_LINK1,
-             */
-            vxsetfilter(sc);
-            vxsetlink(sc);
-        }
-        break;
-
-    case SIOCSIFMTU:
-        /*
-         * Set the interface MTU.
-         */
-        if (ifr->ifr_mtu > ETHERMTU) {
-            error = EINVAL;
-        } else {
-            ifp->if_mtu = ifr->ifr_mtu;
-        }
-        break;
-
-    case SIOCADDMULTI:
-    case SIOCDELMULTI:
-	/*
-	 * Multicast list has changed; set the hardware filter
-	 * accordingly.
-	 */
-	vxreset(sc);
-	error = 0;
-        break;
-
-
-    default:
-	ether_ioctl(ifp, cmd, data);
-	break;
-    }
-    return (error);
-}
-
-static void
-vxreset(struct vx_softc *sc)
-{
-    vxstop(sc);
-    vxinit(sc);
-}
-
-static void
-vxwatchdog(struct ifnet *ifp)
-{
-    struct vx_softc *sc = ifp->if_softc;
-
-    if (ifp->if_flags & IFF_DEBUG)
-	if_printf(ifp, "device timeout\n");
-    ifq_clr_oactive(&ifp->if_snd);
-    if_devstart(ifp);
-    vxintr(sc);
-}
-
-void
-vxstop(struct vx_softc *sc)
-{
-    struct ifnet *ifp = &sc->arpcom.ac_if;
-
-    ifp->if_timer = 0;
-
-    CSR_WRITE_2(sc, VX_COMMAND, RX_DISABLE);
-    CSR_WRITE_2(sc, VX_COMMAND, RX_DISCARD_TOP_PACK);
-    VX_BUSY_WAIT;
-    CSR_WRITE_2(sc, VX_COMMAND, TX_DISABLE);
-    CSR_WRITE_2(sc, VX_COMMAND, STOP_TRANSCEIVER);
-    DELAY(800);
-    CSR_WRITE_2(sc, VX_COMMAND, RX_RESET);
-    VX_BUSY_WAIT;
-    CSR_WRITE_2(sc, VX_COMMAND, TX_RESET);
-    VX_BUSY_WAIT;
-    CSR_WRITE_2(sc, VX_COMMAND, C_INTR_LATCH);
-    CSR_WRITE_2(sc, VX_COMMAND, SET_RD_0_MASK);
-    CSR_WRITE_2(sc, VX_COMMAND, SET_INTR_MASK);
-    CSR_WRITE_2(sc, VX_COMMAND, SET_RX_FILTER);
-
-    vxmbufempty(sc);
-}
-
-int
-vxbusyeeprom(struct vx_softc *sc)
-{
-    int j, i = 100;
-
-    while (i--) {
-        j = CSR_READ_2(sc, VX_W0_EEPROM_COMMAND);
-        if (j & EEPROM_BUSY)
-            DELAY(100);
-        else
-            break;
-    }
-    if (!i) {
-        if_printf(&sc->arpcom.ac_if, "eeprom failed to come ready\n");
-        return (1);
-    }
-    return (0);
-}
-
-static void
-vxmbuffill(void *sp)
-{
-    struct vx_softc *sc = (struct vx_softc *) sp;
-    struct ifnet *ifp = &sc->arpcom.ac_if;
-
-    lwkt_serialize_enter(ifp->if_serializer);
-    vxmbuffill_serialized(sp);
-    lwkt_serialize_exit(ifp->if_serializer);
-}
-
-static void
-vxmbuffill_serialized(void *sp)
-{
-    struct vx_softc *sc = (struct vx_softc *) sp;
-    int	i;
-
-    i = sc->last_mb;
-    do {
-	if (sc->mb[i] == NULL)
-	    MGET(sc->mb[i], M_NOWAIT, MT_DATA);
-	if (sc->mb[i] == NULL)
-	    break;
-	i = (i + 1) % MAX_MBS;
-    } while (i != sc->next_mb);
-    sc->last_mb = i;
-    /* If the queue was not filled, try again. */
-    if (sc->last_mb != sc->next_mb) {
-	callout_reset(&sc->vx_timer, 1, vxmbuffill, sc);
-	sc->buffill_pending = 1;
-    } else {
-	sc->buffill_pending = 0;
-    }
-}
-
-static void
-vxmbufempty(struct vx_softc *sc)
-{
-    int	i;
-
-    for (i = 0; i < MAX_MBS; i++) {
-	if (sc->mb[i]) {
-	    m_freem(sc->mb[i]);
-	    sc->mb[i] = NULL;
-	}
-    }
-    sc->last_mb = sc->next_mb = 0;
-    if (sc->buffill_pending != 0)
-	callout_stop(&sc->vx_timer);
-}
diff --git a/sys/dev/netif/vx/if_vx_pci.c b/sys/dev/netif/vx/if_vx_pci.c
deleted file mode 100644
index 71bef45..0000000
--- a/sys/dev/netif/vx/if_vx_pci.c
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * Copyright (C) 1996 Naoki Hamada <nao@tom-yam.or.jp>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the author nor the names of any co-contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/sys/dev/vx/if_vx_pci.c,v 1.21 2000/05/28 15:59:52 peter Exp $
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/socket.h>
-#include <sys/bus.h>
-#include <sys/rman.h>
-#include <sys/interrupt.h>
-
-#include <net/if.h>
-#include <net/if_arp.h>
-#include <net/ifq_var.h>
-
-#include "pcidevs.h"
-#include <bus/pci/pcivar.h>
-#include <bus/pci/pcireg.h>
-
-#include "if_vxreg.h"
-
-static const struct vx_pci_type {
-	uint16_t	 vx_vid;
-	uint16_t	 vx_did;
-	const char	*vx_desc;
-} vx_pci_types[] = {
-	{ PCI_VENDOR_3COM, PCI_PRODUCT_3COM_3C590,
-		"3Com 3c590 PCI Ethernet Adapter" },
-	{ PCI_VENDOR_3COM, PCI_PRODUCT_3COM_3C595TX,
-		"3Com 3c595-TX PCI Ethernet Adapter" },
-	{ PCI_VENDOR_3COM, PCI_PRODUCT_3COM_3C595T4,
-		"3Com 3c595-T4 PCI Ethernet Adapter" },
-	{ PCI_VENDOR_3COM, PCI_PRODUCT_3COM_3C595MII,
-		"3Com 3c595-MII PCI Ethernet Adapter" },
-
-	/*
-	 * The (Fast) Etherlink XL adapters are now supported by
-	 * the xl driver, which uses bus master DMA and is much
-	 * faster. (And which also supports the 3c905B.
-	 */
-#ifdef VORTEX_ETHERLINK_XL
-	{ PCI_VENDOR_3COM, PCI_PRODUCT_3COM_3C900TPO,
-		"3Com 3c900-TPO Fast Etherlink XL" },
-	{ PCI_VENDOR_3COM, PCI_PRODUCT_3COM_3C900COMBO,
-		"3Com 3c900-COMBO Fast Etherlink XL" },
-	{ PCI_VENDOR_3COM, PCI_PRODUCT_3COM_3C905TX,
-		"3Com 3c905-TX Fast Etherlink XL" },
-	{ PCI_VENDOR_3COM, PCI_PRODUCT_3COM_3C905T4,
-		"3Com 3c905-T4 Fast Etherlink XL" },
-#endif
-	{ 0, 0, NULL }
-};
-
-static void vx_pci_shutdown(device_t);
-static int vx_pci_probe(device_t);
-static int vx_pci_attach(device_t);
-
-static device_method_t vx_methods[] = {
-	/* Device interface */
-	DEVMETHOD(device_probe,		vx_pci_probe),
-	DEVMETHOD(device_attach,	vx_pci_attach),
-	DEVMETHOD(device_shutdown,	vx_pci_shutdown),
-
-	DEVMETHOD_END
-};
-
-static driver_t vx_driver = {
-	"vx",
-	vx_methods,
-	sizeof(struct vx_softc)
-};
-
-static devclass_t vx_devclass;
-
-DRIVER_MODULE(if_vx, pci, vx_driver, vx_devclass, NULL, NULL);
-
-static void
-vx_pci_shutdown(device_t dev)
-{
-   struct vx_softc	*sc;
-
-   sc = device_get_softc(dev);
-   lwkt_serialize_enter(sc->arpcom.ac_if.if_serializer);
-   vxstop(sc); 
-   lwkt_serialize_exit(sc->arpcom.ac_if.if_serializer);
-}
-
-static int
-vx_pci_probe(device_t dev)
-{
-	const struct vx_pci_type *t;
-	uint16_t vid, did;
-
-	vid = pci_get_vendor(dev);
-	did = pci_get_device(dev);
-	for (t = vx_pci_types; t->vx_desc != NULL; ++t) {
-		if (vid == t->vx_vid && did == t->vx_did) {
-			device_set_desc(dev, t->vx_desc);
-			return 0;
-		}
-	}
-	return ENXIO;
-}
-
-static int 
-vx_pci_attach(device_t dev)
-{
-    struct vx_softc *sc = device_get_softc(dev);
-    struct ifnet *ifp = &sc->arpcom.ac_if;
-    int rid;
-
-    rid = PCIR_MAPS;
-    sc->vx_res = bus_alloc_resource_any(dev, SYS_RES_IOPORT, &rid,
-	RF_ACTIVE);
-
-    if (sc->vx_res == NULL)
-	goto bad;
-
-    sc->vx_btag = rman_get_bustag(sc->vx_res);
-    sc->vx_bhandle = rman_get_bushandle(sc->vx_res);
-
-    rid = 0;
-    sc->vx_irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
-	RF_SHAREABLE | RF_ACTIVE);
-
-    if (sc->vx_irq == NULL)
-	goto bad;
-
-    if (vxattach(dev) == 0) {
-	goto bad;
-    }
-
-    /* defect check for 3C590 */
-    if (pci_get_device(dev) == PCI_PRODUCT_3COM_3C590) {
-	GO_WINDOW(0);
-	if (vxbusyeeprom(sc))
-	    goto bad;
-	CSR_WRITE_2(sc, VX_W0_EEPROM_COMMAND,
-	    EEPROM_CMD_RD | EEPROM_SOFT_INFO_2);
-	if (vxbusyeeprom(sc))
-	    goto bad;
-	if (!(CSR_READ_2(sc, VX_W0_EEPROM_DATA) & NO_RX_OVN_ANOMALY)) {
-	    kprintf("Warning! Defective early revision adapter!\n");
-	}
-    }
-
-    ifq_set_cpuid(&ifp->if_snd, rman_get_cpuid(sc->vx_irq));
-
-    if (bus_setup_intr(dev, sc->vx_irq, INTR_MPSAFE,
-		       vxintr, sc, &sc->vx_intrhand, 
-		       ifp->if_serializer)
-    ) {
-	ether_ifdetach(&sc->arpcom.ac_if);
-	goto bad;
-    }
-
-    return(0);
-
-bad:
-    if (sc->vx_res != NULL)
-	bus_release_resource(dev, SYS_RES_IOPORT, 0, sc->vx_res);
-    if (sc->vx_irq != NULL)
-	bus_release_resource(dev, SYS_RES_IRQ, 0, sc->vx_irq);
-    return(ENXIO);
-}
diff --git a/sys/dev/netif/vx/if_vxreg.h b/sys/dev/netif/vx/if_vxreg.h
deleted file mode 100644
index 5a19e45..0000000
--- a/sys/dev/netif/vx/if_vxreg.h
+++ /dev/null
@@ -1,472 +0,0 @@
-/*
- * Copyright (c) 1993 Herb Peyerl (hpeyerl@novatel.ca) All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer. 2. The name
- * of the author may not be used to endorse or promote products derived from
- * this software without specific prior written permission
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
- * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD: src/sys/dev/vx/if_vxreg.h,v 1.6 2000/05/01 19:54:26 peter Exp $
- * $DragonFly: src/sys/dev/netif/vx/if_vxreg.h,v 1.7 2005/07/04 07:32:37 joerg Exp $
- *
- October 2, 1994
-
- Modified by: Andres Vega Garcia
-
- INRIA - Sophia Antipolis, France
- e-mail: avega@sophia.inria.fr
- finger: avega@pax.inria.fr
-
- */
-
-/*
- * Created from if_epreg.h by Fred Gray (fgray@rice.edu) to support the
- * 3c590 family.
- */
-
-/*
- *  Promiscuous mode added and interrupt logic slightly changed
- *  to reduce the number of adapter failures. Transceiver select
- *  logic changed to use value from EEPROM. Autoconfiguration
- *  features added.
- *  Done by:
- *          Serge Babkin
- *          Chelindbank (Chelyabinsk, Russia)
- *          babkin@hq.icb.chel.su
- */
-
-/*
- * Ethernet software status per interface.
- */
-struct vx_softc {
-    struct arpcom arpcom;	/* Ethernet common part		*/
-    bus_space_handle_t		vx_bhandle;
-    bus_space_tag_t		vx_btag;
-    void			*vx_intrhand;
-    struct resource		*vx_irq;
-    struct resource		*vx_res;
-#define MAX_MBS  8		/* # of mbufs we keep around	*/
-    struct mbuf *mb[MAX_MBS];	/* spare mbuf storage.		*/
-    int next_mb;		/* Which mbuf to use next. 	*/
-    int last_mb;		/* Last mbuf.			*/
-    char vx_connectors;		/* Connectors on this card.	*/
-    char vx_connector;		/* Connector to use.		*/
-    short tx_start_thresh;	/* Current TX_start_thresh.	*/
-    int	tx_succ_ok;		/* # packets sent in sequence	*/
-				/* w/o underrun			*/
-    struct callout vx_timer;	/* Callout handle for timeouts	*/
-    int	buffill_pending;
-};
-
-#define CSR_WRITE_4(sc, reg, val)	\
-	bus_space_write_4(sc->vx_btag, sc->vx_bhandle, reg, val)
-#define CSR_WRITE_2(sc, reg, val)	\
-	bus_space_write_2(sc->vx_btag, sc->vx_bhandle, reg, val)
-#define CSR_WRITE_1(sc, reg, val)	\
-	bus_space_write_1(sc->vx_btag, sc->vx_bhandle, reg, val)
-
-#define CSR_READ_4(sc, reg)		\
-	bus_space_read_4(sc->vx_btag, sc->vx_bhandle, reg)
-#define CSR_READ_2(sc, reg)		\
-	bus_space_read_2(sc->vx_btag, sc->vx_bhandle, reg)
-#define CSR_READ_1(sc, reg)		\
-	bus_space_read_1(sc->vx_btag, sc->vx_bhandle, reg)
-
-/*
- * Some global constants
- */
-
-#define TX_INIT_RATE         16
-#define TX_INIT_MAX_RATE     64
-#define RX_INIT_LATENCY      64
-#define RX_INIT_EARLY_THRESH 64
-#define MIN_RX_EARLY_THRESHF   16 /* not less than ether_header */
-#define MIN_RX_EARLY_THRESHL   4
-
-#define EEPROMSIZE      0x40
-#define MAX_EEPROMBUSY  1000
-#define VX_LAST_TAG     0xd7
-#define VX_MAX_BOARDS   16
-#define VX_ID_PORT      0x100
-
-/*
- * some macros to acces long named fields
- */
-#define BASE 	(sc->vx_io_addr)
-
-/*
- * Commands to read/write EEPROM trough EEPROM command register (Window 0,
- * Offset 0xa)
- */
-#define EEPROM_CMD_RD    0x0080	/* Read:  Address required (5 bits) */
-#define EEPROM_CMD_WR    0x0040	/* Write: Address required (5 bits) */
-#define EEPROM_CMD_ERASE 0x00c0	/* Erase: Address required (5 bits) */
-#define EEPROM_CMD_EWEN  0x0030	/* Erase/Write Enable: No data required */
-
-#define EEPROM_BUSY		(1<<15)
-
-/*
- * Some short functions, worth to let them be a macro
- */
-
-/**************************************************************************
- *									  *
- * These define the EEPROM data structure.  They are used in the probe
- * function to verify the existence of the adapter after having sent
- * the ID_Sequence.
- *
- * There are others but only the ones we use are defined here.
- *
- **************************************************************************/
-
-#define EEPROM_NODE_ADDR_0	0x0	/* Word */
-#define EEPROM_NODE_ADDR_1	0x1	/* Word */
-#define EEPROM_NODE_ADDR_2	0x2	/* Word */
-#define EEPROM_PROD_ID		0x3	/* 0x9[0-f]50 */
-#define EEPROM_MFG_ID		0x7	/* 0x6d50 */
-#define EEPROM_ADDR_CFG		0x8	/* Base addr */
-#define EEPROM_RESOURCE_CFG	0x9	/* IRQ. Bits 12-15 */
-#define EEPROM_OEM_ADDR_0	0xa	/* Word */
-#define EEPROM_OEM_ADDR_1	0xb	/* Word */
-#define EEPROM_OEM_ADDR_2	0xc	/* Word */
-#define EEPROM_SOFT_INFO_2	0xf     /* Software information 2 */
-
-#define NO_RX_OVN_ANOMALY       (1<<5)
-
-/**************************************************************************
- *										  *
- * These are the registers for the 3Com 3c509 and their bit patterns when *
- * applicable.  They have been taken out the the "EtherLink III Parallel  *
- * Tasking EISA and ISA Technical Reference" "Beta Draft 10/30/92" manual *
- * from 3com.								  *
- *										  *
- **************************************************************************/
-
-#define VX_COMMAND		0x0e	/* Write. BASE+0x0e is always a
-					 * command reg. */
-#define VX_STATUS		0x0e	/* Read. BASE+0x0e is always status
-					 * reg. */
-#define VX_WINDOW		0x0f	/* Read. BASE+0x0f is always window
-					 * reg. */
-/*
- * Window 0 registers. Setup.
- */
-/* Write */
-#define VX_W0_EEPROM_DATA	0x0c
-#define VX_W0_EEPROM_COMMAND	0x0a
-#define VX_W0_RESOURCE_CFG	0x08
-#define VX_W0_ADDRESS_CFG	0x06 
-#define VX_W0_CONFIG_CTRL	0x04
-        /* Read */
-#define VX_W0_PRODUCT_ID	0x02
-#define VX_W0_MFG_ID		0x00
-
-
-/*
- * Window 1 registers. Operating Set.
- */
-/* Write */
-#define VX_W1_TX_PIO_WR_2	0x02
-#define VX_W1_TX_PIO_WR_1	0x00
-/* Read */
-#define VX_W1_FREE_TX		0x0c
-#define VX_W1_TX_STATUS		0x0b	/* byte */
-#define VX_W1_TIMER		0x0a	/* byte */
-#define VX_W1_RX_STATUS		0x08
-#define VX_W1_RX_PIO_RD_2	0x02
-#define VX_W1_RX_PIO_RD_1	0x00
-
-/*
- * Window 2 registers. Station Address Setup/Read
- */
-/* Read/Write */
-#define VX_W2_ADDR_5		0x05
-#define VX_W2_ADDR_4		0x04
-#define VX_W2_ADDR_3		0x03
-#define VX_W2_ADDR_2		0x02
-#define VX_W2_ADDR_1		0x01
-#define VX_W2_ADDR_0		0x00
-
-/*
- * Window 3 registers. FIFO Management.
- */
-/* Read */
-#define VX_W3_INTERNAL_CFG	0x00
-#define VX_W3_RESET_OPT		0x08
-#define VX_W3_FREE_TX		0x0c
-#define VX_W3_FREE_RX		0x0a
-
-/*
- * Window 4 registers. Diagnostics.
- */
-/* Read/Write */
-#define VX_W4_MEDIA_TYPE	0x0a
-#define VX_W4_CTRLR_STATUS	0x08
-#define VX_W4_NET_DIAG		0x06
-#define VX_W4_FIFO_DIAG		0x04
-#define VX_W4_HOST_DIAG		0x02
-#define VX_W4_TX_DIAG		0x00
-
-/*
- * Window 5 Registers.  Results and Internal status.
- */
-/* Read */
-#define VX_W5_READ_0_MASK	0x0c
-#define VX_W5_INTR_MASK		0x0a
-#define VX_W5_RX_FILTER		0x08
-#define VX_W5_RX_EARLY_THRESH	0x06
-#define VX_W5_TX_AVAIL_THRESH	0x02
-#define VX_W5_TX_START_THRESH	0x00
-
-/*
- * Window 6 registers. Statistics.
- */
-/* Read/Write */
-#define TX_TOTAL_OK		0x0c
-#define RX_TOTAL_OK		0x0a
-#define TX_DEFERRALS		0x08
-#define RX_FRAMES_OK		0x07
-#define TX_FRAMES_OK		0x06
-#define RX_OVERRUNS		0x05
-#define TX_COLLISIONS		0x04
-#define TX_AFTER_1_COLLISION	0x03
-#define TX_AFTER_X_COLLISIONS	0x02
-#define TX_NO_SQE		0x01
-#define TX_CD_LOST		0x00
-
-/****************************************
- *
- * Register definitions.
- *
- ****************************************/
-
-/*
- * Command register. All windows.
- *
- * 16 bit register.
- *     15-11:  5-bit code for command to be executed.
- *     10-0:   11-bit arg if any. For commands with no args;
- *	      this can be set to anything.
- */
-#define GLOBAL_RESET		(u_short) 0x0000	/* Wait at least 1ms
-							 * after issuing */
-#define WINDOW_SELECT		(u_short) (0x1<<11)
-#define START_TRANSCEIVER	(u_short) (0x2<<11)	/* Read ADDR_CFG reg to
-							 * determine whether
-							 * this is needed. If
-							 * so; wait 800 uSec
-							 * before using trans-
-							 * ceiver. */
-#define RX_DISABLE		(u_short) (0x3<<11)	/* state disabled on
-							 * power-up */
-#define RX_ENABLE		(u_short) (0x4<<11)
-#define RX_RESET		(u_short) (0x5<<11)
-#define RX_DISCARD_TOP_PACK	(u_short) (0x8<<11)
-#define TX_ENABLE		(u_short) (0x9<<11)
-#define TX_DISABLE		(u_short) (0xa<<11)
-#define TX_RESET		(u_short) (0xb<<11)
-#define REQ_INTR		(u_short) (0xc<<11)
-/*
- * The following C_* acknowledge the various interrupts. Some of them don't
- * do anything.  See the manual.
- */
-#define ACK_INTR		(u_short) (0x6800)
-#	define C_INTR_LATCH	(u_short) (ACK_INTR|0x1)
-#	define C_CARD_FAILURE	(u_short) (ACK_INTR|0x2)
-#	define C_TX_COMPLETE	(u_short) (ACK_INTR|0x4)
-#	define C_TX_AVAIL	(u_short) (ACK_INTR|0x8)
-#	define C_RX_COMPLETE	(u_short) (ACK_INTR|0x10)
-#	define C_RX_EARLY	(u_short) (ACK_INTR|0x20)
-#	define C_INT_RQD		(u_short) (ACK_INTR|0x40)
-#	define C_UPD_STATS	(u_short) (ACK_INTR|0x80)
-#define SET_INTR_MASK		(u_short) (0xe<<11)
-#define SET_RD_0_MASK		(u_short) (0xf<<11)
-#define SET_RX_FILTER		(u_short) (0x10<<11)
-#	define FIL_INDIVIDUAL	(u_short) (0x1)
-#	define FIL_MULTICAST     (u_short) (0x02)
-#	define FIL_BRDCST        (u_short) (0x04)
-#	define FIL_PROMISC       (u_short) (0x08)
-#define SET_RX_EARLY_THRESH	(u_short) (0x11<<11)
-#define SET_TX_AVAIL_THRESH	(u_short) (0x12<<11)
-#define SET_TX_START_THRESH	(u_short) (0x13<<11)
-#define STATS_ENABLE		(u_short) (0x15<<11)
-#define STATS_DISABLE		(u_short) (0x16<<11)
-#define STOP_TRANSCEIVER	(u_short) (0x17<<11)
-
-/*
- * Status register. All windows.
- *
- *     15-13:  Window number(0-7).
- *     12:     Command_in_progress.
- *     11:     reserved.
- *     10:     reserved.
- *     9:      reserved.
- *     8:      reserved.
- *     7:      Update Statistics.
- *     6:      Interrupt Requested.
- *     5:      RX Early.
- *     4:      RX Complete.
- *     3:      TX Available.
- *     2:      TX Complete.
- *     1:      Adapter Failure.
- *     0:      Interrupt Latch.
- */
-#define S_INTR_LATCH		(u_short) (0x1)
-#define S_CARD_FAILURE		(u_short) (0x2)
-#define S_TX_COMPLETE		(u_short) (0x4)
-#define S_TX_AVAIL		(u_short) (0x8)
-#define S_RX_COMPLETE		(u_short) (0x10)
-#define S_RX_EARLY		(u_short) (0x20)
-#define S_INT_RQD		(u_short) (0x40)
-#define S_UPD_STATS		(u_short) (0x80)
-#define S_COMMAND_IN_PROGRESS	(u_short) (0x1000)
-
-#define VX_BUSY_WAIT while (CSR_READ_2(sc, VX_STATUS) & S_COMMAND_IN_PROGRESS)
-
-/* Address Config. Register.    
- * Window 0/Port 06
- */
-
-#define ACF_CONNECTOR_BITS	14  
-#define ACF_CONNECTOR_UTP	0
-#define ACF_CONNECTOR_AUI	1
-#define ACF_CONNECTOR_BNC	3
-   
-#define INTERNAL_CONNECTOR_BITS 20
-#define INTERNAL_CONNECTOR_MASK 0x01700000
-
-/*
- * FIFO Registers. RX Status.
- *
- *     15:     Incomplete or FIFO empty.
- *     14:     1: Error in RX Packet   0: Incomplete or no error.
- *     13-11:  Type of error.
- *	      1000 = Overrun.
- *	      1011 = Run Packet Error.
- *	      1100 = Alignment Error.
- *	      1101 = CRC Error.
- *	      1001 = Oversize Packet Error (>1514 bytes)
- *	      0010 = Dribble Bits.
- *	      (all other error codes, no errors.)
- *
- *     10-0:   RX Bytes (0-1514)
- */
-#define ERR_INCOMPLETE  (u_short) (0x8000)
-#define ERR_RX          (u_short) (0x4000)
-#define ERR_MASK        (u_short) (0x7800)
-#define ERR_OVERRUN     (u_short) (0x4000)
-#define ERR_RUNT        (u_short) (0x5800)
-#define ERR_ALIGNMENT   (u_short) (0x6000)
-#define ERR_CRC         (u_short) (0x6800)
-#define ERR_OVERSIZE    (u_short) (0x4800)
-#define ERR_DRIBBLE     (u_short) (0x1000)
-
-/*
- * TX Status. 
- *
- *   Reports the transmit status of a completed transmission. Writing this
- *   register pops the transmit completion stack.
- *
- *   Window 1/Port 0x0b.
- *
- *     7:      Complete
- *     6:      Interrupt on successful transmission requested.
- *     5:      Jabber Error (TP Only, TX Reset required. )
- *     4:      Underrun (TX Reset required. )
- *     3:      Maximum Collisions.
- *     2:      TX Status Overflow.
- *     1-0:    Undefined.
- *
- */
-#define TXS_COMPLETE		0x80
-#define TXS_INTR_REQ		0x40
-#define TXS_JABBER		0x20
-#define TXS_UNDERRUN		0x10
-#define TXS_MAX_COLLISION	0x8
-#define TXS_STATUS_OVERFLOW	0x4
-
-#define RS_AUI			(1<<5)
-#define RS_BNC			(1<<4)
-#define RS_UTP			(1<<3)
-#define	RS_T4			(1<<0)
-#define	RS_TX			(1<<1)
-#define	RS_FX			(1<<2)
-#define	RS_MII			(1<<6)
-
-
-/*
- * FIFO Status (Window 4)
- *
- *   Supports FIFO diagnostics
- *
- *   Window 4/Port 0x04.1
- *
- *     15:	1=RX receiving (RO). Set when a packet is being received
- *		into the RX FIFO.
- *     14:	Reserved
- *     13:	1=RX underrun (RO). Generates Adapter Failure interrupt.
- *		Requires RX Reset or Global Reset command to recover.
- *		It is generated when you read past the end of a packet -
- *		reading past what has been received so far will give bad
- *		data.
- *     12:	1=RX status overrun (RO). Set when there are already 8
- *		packets in the RX FIFO. While this bit is set, no additional
- *		packets are received. Requires no action on the part of
- *		the host. The condition is cleared once a packet has been
- *		read out of the RX FIFO.
- *     11:	1=RX overrun (RO). Set when the RX FIFO is full (there
- *		may not be an overrun packet yet). While this bit is set,
- *		no additional packets will be received (some additional
- *		bytes can still be pending between the wire and the RX
- *		FIFO). Requires no action on the part of the host. The
- *		condition is cleared once a few bytes have been read out
- *		from the RX FIFO.
- *     10:	1=TX overrun (RO). Generates adapter failure interrupt.
- *		Requires TX Reset or Global Reset command to recover.
- *		Disables Transmitter.
- *     9-8:	Unassigned.
- *     7-0:	Built in self test bits for the RX and TX FIFO's.
- */
-#define FIFOS_RX_RECEIVING	(u_short) 0x8000
-#define FIFOS_RX_UNDERRUN	(u_short) 0x2000
-#define FIFOS_RX_STATUS_OVERRUN	(u_short) 0x1000
-#define FIFOS_RX_OVERRUN	(u_short) 0x0800
-#define FIFOS_TX_OVERRUN	(u_short) 0x0400
-
-/*
- * Misc defines for various things.
- */
-#define TAG_ADAPTER                     0xd0
-#define ACTIVATE_ADAPTER_TO_CONFIG      0xff
-#define ENABLE_DRQ_IRQ                  0x0001
-#define MFG_ID                          0x506d  /* `TCM' */
-#define PROD_ID                         0x5090
-#define GO_WINDOW(x)		CSR_WRITE_2(sc, VX_COMMAND, WINDOW_SELECT|(x))
-#define JABBER_GUARD_ENABLE	0x40
-#define LINKBEAT_ENABLE		0x80
-#define	ENABLE_UTP		(JABBER_GUARD_ENABLE | LINKBEAT_ENABLE)
-#define DISABLE_UTP		0x0
-#define RX_BYTES_MASK		(u_short) (0x07ff)
-#define TX_INDICATE		1<<15
-
-#define	VX_IOSIZE	0x20
-
-#define VX_CONNECTORS 8
-
-extern int vxattach (device_t);
-extern void vxstop (struct vx_softc *);
-extern void vxintr (void *);
-extern int vxbusyeeprom (struct vx_softc *);
-- 
2.9.2

