aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrooks Davis <[email protected]>2019-05-17 15:23:18 +0000
committerBrooks Davis <[email protected]>2019-05-17 15:23:18 +0000
commit3ee01a13855b4755d5ccc1ddc866e3a8a9f65618 (patch)
treef16d2fe7081cf88828b67cad32797594dd37d33c
parente153ee663af128fb3c938e5cb31f223ea4f0de58 (diff)
downloadsrc-3ee01a13855b.tar.gz
src-3ee01a13855b.zip
FCP-101: Remove ex(4).
Notes
Notes: svn path=/head/; revision=347913
-rw-r--r--ObsoleteFiles.inc1
-rw-r--r--share/man/man4/man4.i386/Makefile1
-rw-r--r--share/man/man4/man4.i386/ex.4127
-rw-r--r--sys/conf/NOTES3
-rw-r--r--sys/conf/files3
-rw-r--r--sys/dev/ex/if_ex.c1079
-rw-r--r--sys/dev/ex/if_ex_isa.c340
-rw-r--r--sys/dev/ex/if_ex_pccard.c233
-rw-r--r--sys/dev/ex/if_exreg.h211
-rw-r--r--sys/dev/ex/if_exvar.h118
-rw-r--r--sys/i386/conf/GENERIC1
-rw-r--r--sys/modules/Makefile2
-rw-r--r--sys/modules/ex/Makefile12
13 files changed, 1 insertions, 2130 deletions
diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc
index 59b886b939ff..7477d55b8c92 100644
--- a/ObsoleteFiles.inc
+++ b/ObsoleteFiles.inc
@@ -46,6 +46,7 @@ OLD_FILES+=usr/share/man/man4/if_de.4
OLD_FILES+=usr/share/man/man4/ed.4
OLD_FILES+=usr/share/man/man4/if_ed.4
OLD_FILES+=usr/share/man/man4/ep.4
+OLD_FILES+=usr/share/man/man4/ex.4
# 20190513: libcap_sysctl interface change
OLD_FILES+=lib/casper/libcap_sysctl.1
# 20190509: tests/sys/opencrypto requires the net/py-dpkt package.
diff --git a/share/man/man4/man4.i386/Makefile b/share/man/man4/man4.i386/Makefile
index 05d6312f4c7f..eddf3e2e2834 100644
--- a/share/man/man4/man4.i386/Makefile
+++ b/share/man/man4/man4.i386/Makefile
@@ -8,7 +8,6 @@ MAN= apm.4 \
CPU_ELAN.4 \
ctau.4 \
cx.4 \
- ex.4 \
fe.4 \
glxiic.4 \
glxsb.4 \
diff --git a/share/man/man4/man4.i386/ex.4 b/share/man/man4/man4.i386/ex.4
deleted file mode 100644
index 64ac27590b49..000000000000
--- a/share/man/man4/man4.i386/ex.4
+++ /dev/null
@@ -1,127 +0,0 @@
-.\"
-.\" Copyright (c) 1997 David E. O'Brien
-.\"
-.\" 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.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``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 DEVELOPERS 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$
-.\"
-.Dd October 24, 2018
-.Dt EX 4 i386
-.Os
-.Sh NAME
-.Nm ex
-.Nd "Ethernet device driver for the Intel EtherExpress Pro/10 and Pro/10+"
-.Sh SYNOPSIS
-To compile this driver into the kernel,
-place the following line in your
-kernel configuration file:
-.Bd -ragged -offset indent
-.Cd "device ex"
-.Ed
-.Pp
-Alternatively, to load the driver as a
-module at boot time, place the following line in
-.Xr loader.conf 5 :
-.Bd -literal -offset indent
-if_ex_load="YES"
-.Ed
-.Sh DEPRECATION NOTICE
-The
-.Nm
-driver is not present in
-.Fx 13.0
-and later.
-See https://github.com/freebsd/fcp/blob/master/fcp-0101.md for more
-information.
-.Sh DESCRIPTION
-The
-.Nm
-driver provides support for Ethernet adapters based on the Intel
-i82595 chip.
-.Pp
-On the ISA bus, the card will be searched for in the
-I/O address range 0x200 - 0x3a0.
-The IRQ will be read from the EEPROM on the card.
-For correct operation Plug-N-Play support should be disabled.
-.Pp
-On the PC Card bus, the card will be automatically recognized and
-configured.
-.Sh HARDWARE
-The
-.Nm
-driver supports the following Ethernet adapters:
-.Pp
-.Bl -bullet -compact
-.It
-Intel EtherExpress Pro/10 ISA
-.It
-Intel EtherExpress Pro/10+ ISA
-.It
-Olicom OC2220 Ethernet PC Card
-.It
-Olicom OC2232 Ethernet/Modem PC Card
-.It
-Silicom Ethernet LAN PC Card
-.It
-Silicom EtherSerial LAN PC Card
-.El
-.Sh DIAGNOSTICS
-.Bl -diag
-.It "ex%d: Intel EtherExpress Pro/10, address %6D, connector %s"
-The device probe found an installed card, and was able to correctly install
-the device driver.
-.It "ex%d: WARNING: board's EEPROM is configured for IRQ %d, using %d"
-The device probe detected that the board is configured for a different
-interrupt than the one specified in the kernel configuration file.
-.It "ex%d: invalid IRQ."
-The device probe detected an invalid IRQ setting.
-.El
-.Sh SEE ALSO
-.Xr arp 4 ,
-.Xr netintro 4 ,
-.Xr ng_ether 4 ,
-.Xr ifconfig 8
-.Sh HISTORY
-The
-.Nm
-device driver first appeared in
-.Fx 2.2 .
-.Sh AUTHORS
-.An -nosplit
-The
-.Nm
-device driver was written by
-.An Javier Mart\('in Rueda .
-The PC Card attachment was written by
-.An Mitsuru ISAWAKI
-and
-.An Warner Losh .
-This manual page was written by
-.An David E. O'Brien .
-.Sh BUGS
-Currently the driver does not support multicast.
-.Pp
-The Silicom EtherSerial card's serial port does not currently work.
-The Olicom OC2232 PC Card should work with the
-.Nm
-driver, but is currently completely broken.
diff --git a/sys/conf/NOTES b/sys/conf/NOTES
index 0adc65b17e9d..87e17de6a262 100644
--- a/sys/conf/NOTES
+++ b/sys/conf/NOTES
@@ -1937,8 +1937,6 @@ device xmphy # XaQti XMAC II
# LinkSys LNE100TX, LNE100TX V2.0, Jaton XpressNet, Alfa Inc GFC2204,
# KNE110TX.
# em: Intel Pro/1000 Gigabit Ethernet 82542, 82543, 82544 based adapters.
-# ex: Intel EtherExpress Pro/10 and other i82595-based adapters,
-# Olicom Ethernet PC Card devices.
# fe: Fujitsu MB86960A/MB86965A Ethernet
# fxp: Intel EtherExpress Pro/100B
# (hint of prefer_iomap can be done to prefer I/O instead of Mem mapping)
@@ -2042,7 +2040,6 @@ device xmphy # XaQti XMAC II
# Order for ISA devices is important here
-device ex
device fe
hint.fe.0.at="isa"
hint.fe.0.port="0x300"
diff --git a/sys/conf/files b/sys/conf/files
index 73c6abc6556a..3dfe2bffd1f6 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -1664,9 +1664,6 @@ dev/evdev/evdev.c optional evdev
dev/evdev/evdev_mt.c optional evdev
dev/evdev/evdev_utils.c optional evdev
dev/evdev/uinput.c optional evdev uinput
-dev/ex/if_ex.c optional ex
-dev/ex/if_ex_isa.c optional ex isa
-dev/ex/if_ex_pccard.c optional ex pccard
dev/exca/exca.c optional cbb
dev/extres/clk/clk.c optional ext_resources clk fdt
dev/extres/clk/clkdev_if.m optional ext_resources clk fdt
diff --git a/sys/dev/ex/if_ex.c b/sys/dev/ex/if_ex.c
deleted file mode 100644
index 0584ca835d43..000000000000
--- a/sys/dev/ex/if_ex.c
+++ /dev/null
@@ -1,1079 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
- *
- * Copyright (c) 1996, Javier Martín Rueda ([email protected])
- * 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 unmodified, 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.
- *
- * 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.
- *
- *
- * MAINTAINER: Matthew N. Dodd <[email protected]>
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-/*
- * Intel EtherExpress Pro/10, Pro/10+ Ethernet driver
- *
- * Revision history:
- *
- * dd-mmm-yyyy: Multicast support ported from NetBSD's if_iy driver.
- * 30-Oct-1996: first beta version. Inet and BPF supported, but no multicast.
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/sockio.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-
-#include <sys/module.h>
-#include <sys/bus.h>
-
-#include <machine/bus.h>
-#include <machine/resource.h>
-#include <sys/rman.h>
-
-#include <net/if.h>
-#include <net/if_var.h>
-#include <net/if_arp.h>
-#include <net/if_dl.h>
-#include <net/if_media.h>
-#include <net/if_types.h>
-#include <net/ethernet.h>
-#include <net/bpf.h>
-
-#include <netinet/in.h>
-#include <netinet/if_ether.h>
-
-
-#include <isa/isavar.h>
-#include <isa/pnpvar.h>
-
-#include <dev/ex/if_exreg.h>
-#include <dev/ex/if_exvar.h>
-
-#ifdef EXDEBUG
-# define Start_End 1
-# define Rcvd_Pkts 2
-# define Sent_Pkts 4
-# define Status 8
-static int debug_mask = 0;
-# define DODEBUG(level, action) if (level & debug_mask) action
-#else
-# define DODEBUG(level, action)
-#endif
-
-devclass_t ex_devclass;
-
-char irq2eemap[] =
- { -1, -1, 0, 1, -1, 2, -1, -1, -1, 0, 3, 4, -1, -1, -1, -1 };
-u_char ee2irqmap[] =
- { 9, 3, 5, 10, 11, 0, 0, 0 };
-
-char plus_irq2eemap[] =
- { -1, -1, -1, 0, 1, 2, -1, 3, -1, 4, 5, 6, 7, -1, -1, -1 };
-u_char plus_ee2irqmap[] =
- { 3, 4, 5, 7, 9, 10, 11, 12 };
-
-/* Network Interface Functions */
-static void ex_init(void *);
-static void ex_init_locked(struct ex_softc *);
-static void ex_start(struct ifnet *);
-static void ex_start_locked(struct ifnet *);
-static int ex_ioctl(struct ifnet *, u_long, caddr_t);
-static void ex_watchdog(void *);
-
-/* ifmedia Functions */
-static int ex_ifmedia_upd(struct ifnet *);
-static void ex_ifmedia_sts(struct ifnet *, struct ifmediareq *);
-
-static int ex_get_media(struct ex_softc *);
-
-static void ex_reset(struct ex_softc *);
-static void ex_setmulti(struct ex_softc *);
-
-static void ex_tx_intr(struct ex_softc *);
-static void ex_rx_intr(struct ex_softc *);
-
-void
-ex_get_address(struct ex_softc *sc, u_char *enaddr)
-{
- uint16_t eaddr_tmp;
-
- eaddr_tmp = ex_eeprom_read(sc, EE_Eth_Addr_Lo);
- enaddr[5] = eaddr_tmp & 0xff;
- enaddr[4] = eaddr_tmp >> 8;
- eaddr_tmp = ex_eeprom_read(sc, EE_Eth_Addr_Mid);
- enaddr[3] = eaddr_tmp & 0xff;
- enaddr[2] = eaddr_tmp >> 8;
- eaddr_tmp = ex_eeprom_read(sc, EE_Eth_Addr_Hi);
- enaddr[1] = eaddr_tmp & 0xff;
- enaddr[0] = eaddr_tmp >> 8;
-
- return;
-}
-
-int
-ex_card_type(u_char *enaddr)
-{
- if ((enaddr[0] == 0x00) && (enaddr[1] == 0xA0) && (enaddr[2] == 0xC9))
- return (CARD_TYPE_EX_10_PLUS);
-
- return (CARD_TYPE_EX_10);
-}
-
-/*
- * Caller is responsible for eventually calling
- * ex_release_resources() on failure.
- */
-int
-ex_alloc_resources(device_t dev)
-{
- struct ex_softc * sc = device_get_softc(dev);
- int error = 0;
-
- sc->ioport = bus_alloc_resource_any(dev, SYS_RES_IOPORT,
- &sc->ioport_rid, RF_ACTIVE);
- if (!sc->ioport) {
- device_printf(dev, "No I/O space?!\n");
- error = ENOMEM;
- goto bad;
- }
-
- sc->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &sc->irq_rid,
- RF_ACTIVE);
-
- if (!sc->irq) {
- device_printf(dev, "No IRQ?!\n");
- error = ENOMEM;
- goto bad;
- }
-
-bad:
- return (error);
-}
-
-void
-ex_release_resources(device_t dev)
-{
- struct ex_softc * sc = device_get_softc(dev);
-
- if (sc->ih) {
- bus_teardown_intr(dev, sc->irq, sc->ih);
- sc->ih = NULL;
- }
-
- if (sc->ioport) {
- bus_release_resource(dev, SYS_RES_IOPORT,
- sc->ioport_rid, sc->ioport);
- sc->ioport = NULL;
- }
-
- if (sc->irq) {
- bus_release_resource(dev, SYS_RES_IRQ,
- sc->irq_rid, sc->irq);
- sc->irq = NULL;
- }
-
- if (sc->ifp)
- if_free(sc->ifp);
-
- return;
-}
-
-int
-ex_attach(device_t dev)
-{
- struct ex_softc * sc = device_get_softc(dev);
- struct ifnet * ifp;
- struct ifmedia * ifm;
- int error;
- uint16_t temp;
-
- ifp = sc->ifp = if_alloc(IFT_ETHER);
- if (ifp == NULL) {
- device_printf(dev, "can not if_alloc()\n");
- return (ENOSPC);
- }
- /* work out which set of irq <-> internal tables to use */
- if (ex_card_type(sc->enaddr) == CARD_TYPE_EX_10_PLUS) {
- sc->irq2ee = plus_irq2eemap;
- sc->ee2irq = plus_ee2irqmap;
- } else {
- sc->irq2ee = irq2eemap;
- sc->ee2irq = ee2irqmap;
- }
-
- sc->mem_size = CARD_RAM_SIZE; /* XXX This should be read from the card itself. */
-
- /*
- * Initialize the ifnet structure.
- */
- ifp->if_softc = sc;
- if_initname(ifp, device_get_name(dev), device_get_unit(dev));
- ifp->if_flags = IFF_SIMPLEX | IFF_BROADCAST | IFF_MULTICAST;
- ifp->if_start = ex_start;
- ifp->if_ioctl = ex_ioctl;
- ifp->if_init = ex_init;
- IFQ_SET_MAXLEN(&ifp->if_snd, ifqmaxlen);
-
- ifmedia_init(&sc->ifmedia, 0, ex_ifmedia_upd, ex_ifmedia_sts);
- mtx_init(&sc->lock, device_get_nameunit(dev), MTX_NETWORK_LOCK,
- MTX_DEF);
- callout_init_mtx(&sc->timer, &sc->lock, 0);
-
- temp = ex_eeprom_read(sc, EE_W5);
- if (temp & EE_W5_PORT_TPE)
- ifmedia_add(&sc->ifmedia, IFM_ETHER|IFM_10_T, 0, NULL);
- if (temp & EE_W5_PORT_BNC)
- ifmedia_add(&sc->ifmedia, IFM_ETHER|IFM_10_2, 0, NULL);
- if (temp & EE_W5_PORT_AUI)
- ifmedia_add(&sc->ifmedia, IFM_ETHER|IFM_10_5, 0, NULL);
-
- ifmedia_add(&sc->ifmedia, IFM_ETHER|IFM_AUTO, 0, NULL);
- ifmedia_add(&sc->ifmedia, IFM_ETHER|IFM_NONE, 0, NULL);
- ifmedia_set(&sc->ifmedia, ex_get_media(sc));
-
- ifm = &sc->ifmedia;
- ifm->ifm_media = ifm->ifm_cur->ifm_media;
- ex_ifmedia_upd(ifp);
-
- /*
- * Attach the interface.
- */
- ether_ifattach(ifp, sc->enaddr);
-
- error = bus_setup_intr(dev, sc->irq, INTR_TYPE_NET | INTR_MPSAFE,
- NULL, ex_intr, (void *)sc, &sc->ih);
- if (error) {
- device_printf(dev, "bus_setup_intr() failed!\n");
- ether_ifdetach(ifp);
- mtx_destroy(&sc->lock);
- return (error);
- }
-
- gone_by_fcp101_dev(dev);
-
- return(0);
-}
-
-int
-ex_detach(device_t dev)
-{
- struct ex_softc *sc;
- struct ifnet *ifp;
-
- sc = device_get_softc(dev);
- ifp = sc->ifp;
-
- EX_LOCK(sc);
- ex_stop(sc);
- EX_UNLOCK(sc);
-
- ether_ifdetach(ifp);
- callout_drain(&sc->timer);
-
- ex_release_resources(dev);
- mtx_destroy(&sc->lock);
-
- return (0);
-}
-
-static void
-ex_init(void *xsc)
-{
- struct ex_softc * sc = (struct ex_softc *) xsc;
-
- EX_LOCK(sc);
- ex_init_locked(sc);
- EX_UNLOCK(sc);
-}
-
-static void
-ex_init_locked(struct ex_softc *sc)
-{
- struct ifnet * ifp = sc->ifp;
- int i;
- unsigned short temp_reg;
-
- DODEBUG(Start_End, printf("%s: ex_init: start\n", ifp->if_xname););
-
- sc->tx_timeout = 0;
-
- /*
- * Load the ethernet address into the card.
- */
- CSR_WRITE_1(sc, CMD_REG, Bank2_Sel);
- temp_reg = CSR_READ_1(sc, EEPROM_REG);
- if (temp_reg & Trnoff_Enable)
- CSR_WRITE_1(sc, EEPROM_REG, temp_reg & ~Trnoff_Enable);
- for (i = 0; i < ETHER_ADDR_LEN; i++)
- CSR_WRITE_1(sc, I_ADDR_REG0 + i, IF_LLADDR(sc->ifp)[i]);
-
- /*
- * - Setup transmit chaining and discard bad received frames.
- * - Match broadcast.
- * - Clear test mode.
- * - Set receiving mode.
- */
- CSR_WRITE_1(sc, REG1, CSR_READ_1(sc, REG1) | Tx_Chn_Int_Md | Tx_Chn_ErStp | Disc_Bad_Fr);
- CSR_WRITE_1(sc, REG2, CSR_READ_1(sc, REG2) | No_SA_Ins | RX_CRC_InMem);
- CSR_WRITE_1(sc, REG3, CSR_READ_1(sc, REG3) & 0x3f /* XXX constants. */ );
- /*
- * - Set IRQ number, if this part has it. ISA devices have this,
- * while PC Card devices don't seem to. Either way, we have to
- * switch to Bank1 as the rest of this code relies on that.
- */
- CSR_WRITE_1(sc, CMD_REG, Bank1_Sel);
- if (sc->flags & HAS_INT_NO_REG)
- CSR_WRITE_1(sc, INT_NO_REG,
- (CSR_READ_1(sc, INT_NO_REG) & 0xf8) |
- sc->irq2ee[sc->irq_no]);
-
- /*
- * Divide the available memory in the card into rcv and xmt buffers.
- * By default, I use the first 3/4 of the memory for the rcv buffer,
- * and the remaining 1/4 of the memory for the xmt buffer.
- */
- sc->rx_mem_size = sc->mem_size * 3 / 4;
- sc->tx_mem_size = sc->mem_size - sc->rx_mem_size;
- sc->rx_lower_limit = 0x0000;
- sc->rx_upper_limit = sc->rx_mem_size - 2;
- sc->tx_lower_limit = sc->rx_mem_size;
- sc->tx_upper_limit = sc->mem_size - 2;
- CSR_WRITE_1(sc, RCV_LOWER_LIMIT_REG, sc->rx_lower_limit >> 8);
- CSR_WRITE_1(sc, RCV_UPPER_LIMIT_REG, sc->rx_upper_limit >> 8);
- CSR_WRITE_1(sc, XMT_LOWER_LIMIT_REG, sc->tx_lower_limit >> 8);
- CSR_WRITE_1(sc, XMT_UPPER_LIMIT_REG, sc->tx_upper_limit >> 8);
-
- /*
- * Enable receive and transmit interrupts, and clear any pending int.
- */
- CSR_WRITE_1(sc, REG1, CSR_READ_1(sc, REG1) | TriST_INT);
- CSR_WRITE_1(sc, CMD_REG, Bank0_Sel);
- CSR_WRITE_1(sc, MASK_REG, All_Int & ~(Rx_Int | Tx_Int));
- CSR_WRITE_1(sc, STATUS_REG, All_Int);
-
- /*
- * Initialize receive and transmit ring buffers.
- */
- CSR_WRITE_2(sc, RCV_BAR, sc->rx_lower_limit);
- sc->rx_head = sc->rx_lower_limit;
- CSR_WRITE_2(sc, RCV_STOP_REG, sc->rx_upper_limit | 0xfe);
- CSR_WRITE_2(sc, XMT_BAR, sc->tx_lower_limit);
- sc->tx_head = sc->tx_tail = sc->tx_lower_limit;
-
- ifp->if_drv_flags |= IFF_DRV_RUNNING;
- ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
- DODEBUG(Status, printf("OIDLE init\n"););
- callout_reset(&sc->timer, hz, ex_watchdog, sc);
-
- ex_setmulti(sc);
-
- /*
- * Final reset of the board, and enable operation.
- */
- CSR_WRITE_1(sc, CMD_REG, Sel_Reset_CMD);
- DELAY(2);
- CSR_WRITE_1(sc, CMD_REG, Rcv_Enable_CMD);
-
- ex_start_locked(ifp);
-
- DODEBUG(Start_End, printf("%s: ex_init: finish\n", ifp->if_xname););
-}
-
-static void
-ex_start(struct ifnet *ifp)
-{
- struct ex_softc * sc = ifp->if_softc;
-
- EX_LOCK(sc);
- ex_start_locked(ifp);
- EX_UNLOCK(sc);
-}
-
-static void
-ex_start_locked(struct ifnet *ifp)
-{
- struct ex_softc * sc = ifp->if_softc;
- int i, len, data_len, avail, dest, next;
- unsigned char tmp16[2];
- struct mbuf * opkt;
- struct mbuf * m;
-
- DODEBUG(Start_End, printf("ex_start%d: start\n", unit););
-
- /*
- * Main loop: send outgoing packets to network card until there are no
- * more packets left, or the card cannot accept any more yet.
- */
- while (((opkt = ifp->if_snd.ifq_head) != NULL) &&
- !(ifp->if_drv_flags & IFF_DRV_OACTIVE)) {
-
- /*
- * Ensure there is enough free transmit buffer space for
- * this packet, including its header. Note: the header
- * cannot wrap around the end of the transmit buffer and
- * must be kept together, so we allow space for twice the
- * length of the header, just in case.
- */
-
- for (len = 0, m = opkt; m != NULL; m = m->m_next) {
- len += m->m_len;
- }
-
- data_len = len;
-
- DODEBUG(Sent_Pkts, printf("1. Sending packet with %d data bytes. ", data_len););
-
- if (len & 1) {
- len += XMT_HEADER_LEN + 1;
- } else {
- len += XMT_HEADER_LEN;
- }
-
- if ((i = sc->tx_tail - sc->tx_head) >= 0) {
- avail = sc->tx_mem_size - i;
- } else {
- avail = -i;
- }
-
- DODEBUG(Sent_Pkts, printf("i=%d, avail=%d\n", i, avail););
-
- if (avail >= len + XMT_HEADER_LEN) {
- IF_DEQUEUE(&ifp->if_snd, opkt);
-
-#ifdef EX_PSA_INTR
- /*
- * Disable rx and tx interrupts, to avoid corruption
- * of the host address register by interrupt service
- * routines.
- * XXX Is this necessary with splimp() enabled?
- */
- CSR_WRITE_1(sc, MASK_REG, All_Int);
-#endif
-
- /*
- * Compute the start and end addresses of this
- * frame in the tx buffer.
- */
- dest = sc->tx_tail;
- next = dest + len;
-
- if (next > sc->tx_upper_limit) {
- if ((sc->tx_upper_limit + 2 - sc->tx_tail) <=
- XMT_HEADER_LEN) {
- dest = sc->tx_lower_limit;
- next = dest + len;
- } else {
- next = sc->tx_lower_limit +
- next - sc->tx_upper_limit - 2;
- }
- }
-
- /*
- * Build the packet frame in the card's ring buffer.
- */
- DODEBUG(Sent_Pkts, printf("2. dest=%d, next=%d. ", dest, next););
-
- CSR_WRITE_2(sc, HOST_ADDR_REG, dest);
- CSR_WRITE_2(sc, IO_PORT_REG, Transmit_CMD);
- CSR_WRITE_2(sc, IO_PORT_REG, 0);
- CSR_WRITE_2(sc, IO_PORT_REG, next);
- CSR_WRITE_2(sc, IO_PORT_REG, data_len);
-
- /*
- * Output the packet data to the card. Ensure all
- * transfers are 16-bit wide, even if individual
- * mbufs have odd length.
- */
- for (m = opkt, i = 0; m != NULL; m = m->m_next) {
- DODEBUG(Sent_Pkts, printf("[%d]", m->m_len););
- if (i) {
- tmp16[1] = *(mtod(m, caddr_t));
- CSR_WRITE_MULTI_2(sc, IO_PORT_REG,
- (uint16_t *) tmp16, 1);
- }
- CSR_WRITE_MULTI_2(sc, IO_PORT_REG,
- (uint16_t *) (mtod(m, caddr_t) + i),
- (m->m_len - i) / 2);
- if ((i = (m->m_len - i) & 1) != 0) {
- tmp16[0] = *(mtod(m, caddr_t) +
- m->m_len - 1);
- }
- }
- if (i)
- CSR_WRITE_MULTI_2(sc, IO_PORT_REG,
- (uint16_t *) tmp16, 1);
- /*
- * If there were other frames chained, update the
- * chain in the last one.
- */
- if (sc->tx_head != sc->tx_tail) {
- if (sc->tx_tail != dest) {
- CSR_WRITE_2(sc, HOST_ADDR_REG,
- sc->tx_last + XMT_Chain_Point);
- CSR_WRITE_2(sc, IO_PORT_REG, dest);
- }
- CSR_WRITE_2(sc, HOST_ADDR_REG,
- sc->tx_last + XMT_Byte_Count);
- i = CSR_READ_2(sc, IO_PORT_REG);
- CSR_WRITE_2(sc, HOST_ADDR_REG,
- sc->tx_last + XMT_Byte_Count);
- CSR_WRITE_2(sc, IO_PORT_REG, i | Ch_bit);
- }
-
- /*
- * Resume normal operation of the card:
- * - Make a dummy read to flush the DRAM write
- * pipeline.
- * - Enable receive and transmit interrupts.
- * - Send Transmit or Resume_XMT command, as
- * appropriate.
- */
- CSR_READ_2(sc, IO_PORT_REG);
-#ifdef EX_PSA_INTR
- CSR_WRITE_1(sc, MASK_REG, All_Int & ~(Rx_Int | Tx_Int));
-#endif
- if (sc->tx_head == sc->tx_tail) {
- CSR_WRITE_2(sc, XMT_BAR, dest);
- CSR_WRITE_1(sc, CMD_REG, Transmit_CMD);
- sc->tx_head = dest;
- DODEBUG(Sent_Pkts, printf("Transmit\n"););
- } else {
- CSR_WRITE_1(sc, CMD_REG, Resume_XMT_List_CMD);
- DODEBUG(Sent_Pkts, printf("Resume\n"););
- }
-
- sc->tx_last = dest;
- sc->tx_tail = next;
-
- BPF_MTAP(ifp, opkt);
-
- sc->tx_timeout = 2;
- if_inc_counter(ifp, IFCOUNTER_OPACKETS, 1);
- m_freem(opkt);
- } else {
- ifp->if_drv_flags |= IFF_DRV_OACTIVE;
- DODEBUG(Status, printf("OACTIVE start\n"););
- }
- }
-
- DODEBUG(Start_End, printf("ex_start%d: finish\n", unit););
-}
-
-void
-ex_stop(struct ex_softc *sc)
-{
-
- DODEBUG(Start_End, printf("ex_stop%d: start\n", unit););
-
- EX_ASSERT_LOCKED(sc);
- /*
- * Disable card operation:
- * - Disable the interrupt line.
- * - Flush transmission and disable reception.
- * - Mask and clear all interrupts.
- * - Reset the 82595.
- */
- CSR_WRITE_1(sc, CMD_REG, Bank1_Sel);
- CSR_WRITE_1(sc, REG1, CSR_READ_1(sc, REG1) & ~TriST_INT);
- CSR_WRITE_1(sc, CMD_REG, Bank0_Sel);
- CSR_WRITE_1(sc, CMD_REG, Rcv_Stop);
- sc->tx_head = sc->tx_tail = sc->tx_lower_limit;
- sc->tx_last = 0; /* XXX I think these two lines are not necessary, because ex_init will always be called again to reinit the interface. */
- CSR_WRITE_1(sc, MASK_REG, All_Int);
- CSR_WRITE_1(sc, STATUS_REG, All_Int);
- CSR_WRITE_1(sc, CMD_REG, Reset_CMD);
- DELAY(200);
- sc->ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
- sc->tx_timeout = 0;
- callout_stop(&sc->timer);
-
- DODEBUG(Start_End, printf("ex_stop%d: finish\n", unit););
-
- return;
-}
-
-void
-ex_intr(void *arg)
-{
- struct ex_softc *sc = (struct ex_softc *)arg;
- struct ifnet *ifp = sc->ifp;
- int int_status, send_pkts;
- int loops = 100;
-
- DODEBUG(Start_End, printf("ex_intr%d: start\n", unit););
-
- EX_LOCK(sc);
- send_pkts = 0;
- while (loops-- > 0 &&
- (int_status = CSR_READ_1(sc, STATUS_REG)) & (Tx_Int | Rx_Int)) {
- /* don't loop forever */
- if (int_status == 0xff)
- break;
- if (int_status & Rx_Int) {
- CSR_WRITE_1(sc, STATUS_REG, Rx_Int);
- ex_rx_intr(sc);
- } else if (int_status & Tx_Int) {
- CSR_WRITE_1(sc, STATUS_REG, Tx_Int);
- ex_tx_intr(sc);
- send_pkts = 1;
- }
- }
- if (loops == 0)
- printf("100 loops are not enough\n");
-
- /*
- * If any packet has been transmitted, and there are queued packets to
- * be sent, attempt to send more packets to the network card.
- */
- if (send_pkts && (ifp->if_snd.ifq_head != NULL))
- ex_start_locked(ifp);
- EX_UNLOCK(sc);
-
- DODEBUG(Start_End, printf("ex_intr%d: finish\n", unit););
-
- return;
-}
-
-static void
-ex_tx_intr(struct ex_softc *sc)
-{
- struct ifnet * ifp = sc->ifp;
- int tx_status;
-
- DODEBUG(Start_End, printf("ex_tx_intr%d: start\n", unit););
-
- /*
- * - Cancel the watchdog.
- * For all packets transmitted since last transmit interrupt:
- * - Advance chain pointer to next queued packet.
- * - Update statistics.
- */
-
- sc->tx_timeout = 0;
-
- while (sc->tx_head != sc->tx_tail) {
- CSR_WRITE_2(sc, HOST_ADDR_REG, sc->tx_head);
-
- if (!(CSR_READ_2(sc, IO_PORT_REG) & Done_bit))
- break;
-
- tx_status = CSR_READ_2(sc, IO_PORT_REG);
- sc->tx_head = CSR_READ_2(sc, IO_PORT_REG);
-
- if (tx_status & TX_OK_bit) {
- if_inc_counter(ifp, IFCOUNTER_OPACKETS, 1);
- } else {
- if_inc_counter(ifp, IFCOUNTER_OERRORS, 1);
- }
-
- if_inc_counter(ifp, IFCOUNTER_COLLISIONS, tx_status & No_Collisions_bits);
- }
-
- /*
- * The card should be ready to accept more packets now.
- */
-
- ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
-
- DODEBUG(Status, printf("OIDLE tx_intr\n"););
- DODEBUG(Start_End, printf("ex_tx_intr%d: finish\n", unit););
-
- return;
-}
-
-static void
-ex_rx_intr(struct ex_softc *sc)
-{
- struct ifnet * ifp = sc->ifp;
- int rx_status;
- int pkt_len;
- int QQQ;
- struct mbuf * m;
- struct mbuf * ipkt;
- struct ether_header * eh;
-
- DODEBUG(Start_End, printf("ex_rx_intr%d: start\n", unit););
-
- /*
- * For all packets received since last receive interrupt:
- * - If packet ok, read it into a new mbuf and queue it to interface,
- * updating statistics.
- * - If packet bad, just discard it, and update statistics.
- * Finally, advance receive stop limit in card's memory to new location.
- */
-
- CSR_WRITE_2(sc, HOST_ADDR_REG, sc->rx_head);
-
- while (CSR_READ_2(sc, IO_PORT_REG) == RCV_Done) {
-
- rx_status = CSR_READ_2(sc, IO_PORT_REG);
- sc->rx_head = CSR_READ_2(sc, IO_PORT_REG);
- QQQ = pkt_len = CSR_READ_2(sc, IO_PORT_REG);
-
- if (rx_status & RCV_OK_bit) {
- MGETHDR(m, M_NOWAIT, MT_DATA);
- ipkt = m;
- if (ipkt == NULL) {
- if_inc_counter(ifp, IFCOUNTER_IQDROPS, 1);
- } else {
- ipkt->m_pkthdr.rcvif = ifp;
- ipkt->m_pkthdr.len = pkt_len;
- ipkt->m_len = MHLEN;
-
- while (pkt_len > 0) {
- if (pkt_len >= MINCLSIZE) {
- if (MCLGET(m, M_NOWAIT)) {
- m->m_len = MCLBYTES;
- } else {
- m_freem(ipkt);
- if_inc_counter(ifp, IFCOUNTER_IQDROPS, 1);
- goto rx_another;
- }
- }
- m->m_len = min(m->m_len, pkt_len);
-
- /*
- * NOTE: I'm assuming that all mbufs allocated are of even length,
- * except for the last one in an odd-length packet.
- */
-
- CSR_READ_MULTI_2(sc, IO_PORT_REG,
- mtod(m, uint16_t *), m->m_len / 2);
-
- if (m->m_len & 1) {
- *(mtod(m, caddr_t) + m->m_len - 1) = CSR_READ_1(sc, IO_PORT_REG);
- }
- pkt_len -= m->m_len;
-
- if (pkt_len > 0) {
- MGET(m->m_next, M_NOWAIT, MT_DATA);
- if (m->m_next == NULL) {
- m_freem(ipkt);
- if_inc_counter(ifp, IFCOUNTER_IQDROPS, 1);
- goto rx_another;
- }
- m = m->m_next;
- m->m_len = MLEN;
- }
- }
- eh = mtod(ipkt, struct ether_header *);
-#ifdef EXDEBUG
- if (debug_mask & Rcvd_Pkts) {
- if ((eh->ether_dhost[5] != 0xff) || (eh->ether_dhost[0] != 0xff)) {
- printf("Receive packet with %d data bytes: %6D -> ", QQQ, eh->ether_shost, ":");
- printf("%6D\n", eh->ether_dhost, ":");
- } /* QQQ */
- }
-#endif
- EX_UNLOCK(sc);
- (*ifp->if_input)(ifp, ipkt);
- EX_LOCK(sc);
- if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1);
- }
- } else {
- if_inc_counter(ifp, IFCOUNTER_IERRORS, 1);
- }
- CSR_WRITE_2(sc, HOST_ADDR_REG, sc->rx_head);
-rx_another: ;
- }
-
- if (sc->rx_head < sc->rx_lower_limit + 2)
- CSR_WRITE_2(sc, RCV_STOP_REG, sc->rx_upper_limit);
- else
- CSR_WRITE_2(sc, RCV_STOP_REG, sc->rx_head - 2);
-
- DODEBUG(Start_End, printf("ex_rx_intr%d: finish\n", unit););
-
- return;
-}
-
-
-static int
-ex_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
-{
- struct ex_softc * sc = ifp->if_softc;
- struct ifreq * ifr = (struct ifreq *)data;
- int error = 0;
-
- DODEBUG(Start_End, printf("%s: ex_ioctl: start ", ifp->if_xname););
-
- switch(cmd) {
- case SIOCSIFFLAGS:
- DODEBUG(Start_End, printf("SIOCSIFFLAGS"););
- EX_LOCK(sc);
- if ((ifp->if_flags & IFF_UP) == 0 &&
- (ifp->if_drv_flags & IFF_DRV_RUNNING)) {
- ex_stop(sc);
- } else {
- ex_init_locked(sc);
- }
- EX_UNLOCK(sc);
- break;
- case SIOCADDMULTI:
- case SIOCDELMULTI:
- ex_init(sc);
- error = 0;
- break;
- case SIOCSIFMEDIA:
- case SIOCGIFMEDIA:
- error = ifmedia_ioctl(ifp, ifr, &sc->ifmedia, cmd);
- break;
- default:
- error = ether_ioctl(ifp, cmd, data);
- break;
- }
-
- DODEBUG(Start_End, printf("\n%s: ex_ioctl: finish\n", ifp->if_xname););
-
- return(error);
-}
-
-static void
-ex_setmulti(struct ex_softc *sc)
-{
- struct ifnet *ifp;
- struct ifmultiaddr *maddr;
- uint16_t *addr;
- int count;
- int timeout, status;
-
- ifp = sc->ifp;
-
- count = 0;
- if_maddr_rlock(ifp);
- CK_STAILQ_FOREACH(maddr, &ifp->if_multiaddrs, ifma_link) {
- if (maddr->ifma_addr->sa_family != AF_LINK)
- continue;
- count++;
- }
- if_maddr_runlock(ifp);
-
- if ((ifp->if_flags & IFF_PROMISC) || (ifp->if_flags & IFF_ALLMULTI)
- || count > 63) {
- /* Interface is in promiscuous mode or there are too many
- * multicast addresses for the card to handle */
- CSR_WRITE_1(sc, CMD_REG, Bank2_Sel);
- CSR_WRITE_1(sc, REG2, CSR_READ_1(sc, REG2) | Promisc_Mode);
- CSR_WRITE_1(sc, REG3, CSR_READ_1(sc, REG3));
- CSR_WRITE_1(sc, CMD_REG, Bank0_Sel);
- }
- else if ((ifp->if_flags & IFF_MULTICAST) && (count > 0)) {
- /* Program multicast addresses plus our MAC address
- * into the filter */
- CSR_WRITE_1(sc, CMD_REG, Bank2_Sel);
- CSR_WRITE_1(sc, REG2, CSR_READ_1(sc, REG2) | Multi_IA);
- CSR_WRITE_1(sc, REG3, CSR_READ_1(sc, REG3));
- CSR_WRITE_1(sc, CMD_REG, Bank0_Sel);
-
- /* Borrow space from TX buffer; this should be safe
- * as this is only called from ex_init */
-
- CSR_WRITE_2(sc, HOST_ADDR_REG, sc->tx_lower_limit);
- CSR_WRITE_2(sc, IO_PORT_REG, MC_Setup_CMD);
- CSR_WRITE_2(sc, IO_PORT_REG, 0);
- CSR_WRITE_2(sc, IO_PORT_REG, 0);
- CSR_WRITE_2(sc, IO_PORT_REG, (count + 1) * 6);
-
- if_maddr_rlock(ifp);
- CK_STAILQ_FOREACH(maddr, &ifp->if_multiaddrs, ifma_link) {
- if (maddr->ifma_addr->sa_family != AF_LINK)
- continue;
-
- addr = (uint16_t*)LLADDR((struct sockaddr_dl *)
- maddr->ifma_addr);
- CSR_WRITE_2(sc, IO_PORT_REG, *addr++);
- CSR_WRITE_2(sc, IO_PORT_REG, *addr++);
- CSR_WRITE_2(sc, IO_PORT_REG, *addr++);
- }
- if_maddr_runlock(ifp);
-
- /* Program our MAC address as well */
- /* XXX: Is this necessary? The Linux driver does this
- * but the NetBSD driver does not */
- addr = (uint16_t*)IF_LLADDR(sc->ifp);
- CSR_WRITE_2(sc, IO_PORT_REG, *addr++);
- CSR_WRITE_2(sc, IO_PORT_REG, *addr++);
- CSR_WRITE_2(sc, IO_PORT_REG, *addr++);
-
- CSR_READ_2(sc, IO_PORT_REG);
- CSR_WRITE_2(sc, XMT_BAR, sc->tx_lower_limit);
- CSR_WRITE_1(sc, CMD_REG, MC_Setup_CMD);
-
- sc->tx_head = sc->tx_lower_limit;
- sc->tx_tail = sc->tx_head + XMT_HEADER_LEN + (count + 1) * 6;
-
- for (timeout=0; timeout<100; timeout++) {
- DELAY(2);
- if ((CSR_READ_1(sc, STATUS_REG) & Exec_Int) == 0)
- continue;
-
- status = CSR_READ_1(sc, CMD_REG);
- CSR_WRITE_1(sc, STATUS_REG, Exec_Int);
- break;
- }
-
- sc->tx_head = sc->tx_tail;
- }
- else
- {
- /* No multicast or promiscuous mode */
- CSR_WRITE_1(sc, CMD_REG, Bank2_Sel);
- CSR_WRITE_1(sc, REG2, CSR_READ_1(sc, REG2) & 0xDE);
- /* ~(Multi_IA | Promisc_Mode) */
- CSR_WRITE_1(sc, REG3, CSR_READ_1(sc, REG3));
- CSR_WRITE_1(sc, CMD_REG, Bank0_Sel);
- }
-}
-
-static void
-ex_reset(struct ex_softc *sc)
-{
-
- DODEBUG(Start_End, printf("ex_reset%d: start\n", unit););
-
- EX_ASSERT_LOCKED(sc);
- ex_stop(sc);
- ex_init_locked(sc);
-
- DODEBUG(Start_End, printf("ex_reset%d: finish\n", unit););
-
- return;
-}
-
-static void
-ex_watchdog(void *arg)
-{
- struct ex_softc * sc = arg;
- struct ifnet *ifp = sc->ifp;
-
- if (sc->tx_timeout && --sc->tx_timeout == 0) {
- DODEBUG(Start_End, if_printf(ifp, "ex_watchdog: start\n"););
-
- ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
-
- DODEBUG(Status, printf("OIDLE watchdog\n"););
-
- if_inc_counter(ifp, IFCOUNTER_OERRORS, 1);
- ex_reset(sc);
- ex_start_locked(ifp);
-
- DODEBUG(Start_End, if_printf(ifp, "ex_watchdog: finish\n"););
- }
-
- callout_reset(&sc->timer, hz, ex_watchdog, sc);
-}
-
-static int
-ex_get_media(struct ex_softc *sc)
-{
- int current;
- int media;
-
- media = ex_eeprom_read(sc, EE_W5);
-
- CSR_WRITE_1(sc, CMD_REG, Bank2_Sel);
- current = CSR_READ_1(sc, REG3);
- CSR_WRITE_1(sc, CMD_REG, Bank0_Sel);
-
- if ((current & TPE_bit) && (media & EE_W5_PORT_TPE))
- return(IFM_ETHER|IFM_10_T);
- if ((current & BNC_bit) && (media & EE_W5_PORT_BNC))
- return(IFM_ETHER|IFM_10_2);
-
- if (media & EE_W5_PORT_AUI)
- return (IFM_ETHER|IFM_10_5);
-
- return (IFM_ETHER|IFM_AUTO);
-}
-
-static int
-ex_ifmedia_upd(ifp)
- struct ifnet * ifp;
-{
- struct ex_softc * sc = ifp->if_softc;
-
- if (IFM_TYPE(sc->ifmedia.ifm_media) != IFM_ETHER)
- return EINVAL;
-
- return (0);
-}
-
-static void
-ex_ifmedia_sts(ifp, ifmr)
- struct ifnet * ifp;
- struct ifmediareq * ifmr;
-{
- struct ex_softc * sc = ifp->if_softc;
-
- EX_LOCK(sc);
- ifmr->ifm_active = ex_get_media(sc);
- ifmr->ifm_status = IFM_AVALID | IFM_ACTIVE;
- EX_UNLOCK(sc);
-
- return;
-}
-
-u_short
-ex_eeprom_read(struct ex_softc *sc, int location)
-{
- int i;
- u_short data = 0;
- int read_cmd = location | EE_READ_CMD;
- short ctrl_val = EECS;
-
- CSR_WRITE_1(sc, CMD_REG, Bank2_Sel);
- CSR_WRITE_1(sc, EEPROM_REG, EECS);
- for (i = 8; i >= 0; i--) {
- short outval = (read_cmd & (1 << i)) ? ctrl_val | EEDI : ctrl_val;
- CSR_WRITE_1(sc, EEPROM_REG, outval);
- CSR_WRITE_1(sc, EEPROM_REG, outval | EESK);
- DELAY(3);
- CSR_WRITE_1(sc, EEPROM_REG, outval);
- DELAY(2);
- }
- CSR_WRITE_1(sc, EEPROM_REG, ctrl_val);
-
- for (i = 16; i > 0; i--) {
- CSR_WRITE_1(sc, EEPROM_REG, ctrl_val | EESK);
- DELAY(3);
- data = (data << 1) |
- ((CSR_READ_1(sc, EEPROM_REG) & EEDO) ? 1 : 0);
- CSR_WRITE_1(sc, EEPROM_REG, ctrl_val);
- DELAY(2);
- }
-
- ctrl_val &= ~EECS;
- CSR_WRITE_1(sc, EEPROM_REG, ctrl_val | EESK);
- DELAY(3);
- CSR_WRITE_1(sc, EEPROM_REG, ctrl_val);
- DELAY(2);
- CSR_WRITE_1(sc, CMD_REG, Bank0_Sel);
- return(data);
-}
diff --git a/sys/dev/ex/if_ex_isa.c b/sys/dev/ex/if_ex_isa.c
deleted file mode 100644
index 2b0cd0a9f9dd..000000000000
--- a/sys/dev/ex/if_ex_isa.c
+++ /dev/null
@@ -1,340 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
- *
- * Copyright (c) 2000 Matthew N. Dodd
- * 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.
- *
- * 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.
- *
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/socket.h>
-
-#include <sys/module.h>
-#include <sys/bus.h>
-
-#include <machine/bus.h>
-#include <machine/resource.h>
-#include <sys/rman.h>
-
-#include <net/if.h>
-#include <net/if_arp.h>
-#include <net/if_media.h>
-
-
-#include <isa/isavar.h>
-#include <isa/pnpvar.h>
-
-#include <dev/ex/if_exreg.h>
-#include <dev/ex/if_exvar.h>
-
-/* Bus Front End Functions */
-static void ex_isa_identify(driver_t *, device_t);
-static int ex_isa_probe(device_t);
-static int ex_isa_attach(device_t);
-
-static int ex_look_for_card(struct ex_softc *);
-
-#if 0
-static void ex_pnp_wakeup(void *);
-
-SYSINIT(ex_pnpwakeup, SI_SUB_CPU, SI_ORDER_ANY, ex_pnp_wakeup, NULL);
-#endif
-
-static device_method_t ex_isa_methods[] = {
- /* Device interface */
- DEVMETHOD(device_identify, ex_isa_identify),
- DEVMETHOD(device_probe, ex_isa_probe),
- DEVMETHOD(device_attach, ex_isa_attach),
- DEVMETHOD(device_detach, ex_detach),
-
- { 0, 0 }
-};
-
-static driver_t ex_isa_driver = {
- "ex",
- ex_isa_methods,
- sizeof(struct ex_softc),
-};
-
-static struct isa_pnp_id ex_ids[] = {
- { 0x3110d425, NULL }, /* INT1031 */
- { 0x3010d425, NULL }, /* INT1030 */
- { 0, NULL },
-};
-
-#if 0
-#define EX_PNP_WAKE 0x279
-
-static uint8_t ex_pnp_wake_seq[] =
- { 0x6A, 0xB5, 0xDA, 0xED, 0xF6, 0xFB, 0x7D, 0xBE,
- 0xDF, 0x6F, 0x37, 0x1B, 0x0D, 0x86, 0xC3, 0x61,
- 0xB0, 0x58, 0x2C, 0x16, 0x8B, 0x45, 0xA2, 0xD1,
- 0xE8, 0x74, 0x3A, 0x9D, 0xCE, 0xE7, 0x73, 0x43 };
-
-static void
-ex_pnp_wakeup (void * dummy)
-{
- int tmp;
-
- if (bootverbose)
- printf("ex_pnp_wakeup()\n");
-
- outb(EX_PNP_WAKE, 0);
- outb(EX_PNP_WAKE, 0);
- for (tmp = 0; tmp < 32; tmp++) {
- outb(EX_PNP_WAKE, ex_pnp_wake_seq[tmp]);
- }
-}
-#endif
-
-/*
- * Non-destructive identify.
- */
-static void
-ex_isa_identify(driver_t *driver, device_t parent)
-{
- device_t child;
- bus_addr_t ioport;
- u_char enaddr[6];
- u_int irq;
- int tmp;
- const char * desc;
- struct ex_softc sc;
- int rid;
-
- if (bootverbose)
- printf("ex_isa_identify()\n");
-
- for (ioport = 0x200; ioport < 0x3a0; ioport += 0x10) {
- rid = 0;
- sc.ioport = bus_alloc_resource(parent, SYS_RES_IOPORT, &rid,
- ioport, ioport, 0x10, RF_ACTIVE);
- if (sc.ioport == NULL)
- continue;
-
- /* No board found at address */
- if (!ex_look_for_card(&sc)) {
- bus_release_resource(parent, SYS_RES_IOPORT, rid,
- sc.ioport);
- continue;
- }
-
- if (bootverbose)
- printf("ex: Found card at 0x%03lx!\n", (unsigned long)ioport);
-
- /* Board in PnP mode */
- if (ex_eeprom_read(&sc, EE_W0) & EE_W0_PNP) {
- /* Reset the card. */
- CSR_WRITE_1(&sc, CMD_REG, Reset_CMD);
- DELAY(500);
- if (bootverbose)
- printf("ex: card at 0x%03lx in PnP mode!\n", (unsigned long)ioport);
- bus_release_resource(parent, SYS_RES_IOPORT, rid,
- sc.ioport);
- continue;
- }
-
- bzero(enaddr, sizeof(enaddr));
-
- /* Reset the card. */
- CSR_WRITE_1(&sc, CMD_REG, Reset_CMD);
- DELAY(400);
-
- ex_get_address(&sc, enaddr);
- tmp = ex_eeprom_read(&sc, EE_W1) & EE_W1_INT_SEL;
-
- /* work out which set of irq <-> internal tables to use */
- if (ex_card_type(enaddr) == CARD_TYPE_EX_10_PLUS) {
- irq = plus_ee2irqmap[tmp];
- desc = "Intel Pro/10+";
- } else {
- irq = ee2irqmap[tmp];
- desc = "Intel Pro/10";
- }
-
- bus_release_resource(parent, SYS_RES_IOPORT, rid, sc.ioport);
- child = BUS_ADD_CHILD(parent, ISA_ORDER_SPECULATIVE, "ex", -1);
- device_set_desc_copy(child, desc);
- device_set_driver(child, driver);
- bus_set_resource(child, SYS_RES_IRQ, 0, irq, 1);
- bus_set_resource(child, SYS_RES_IOPORT, 0, ioport, EX_IOSIZE);
- if (bootverbose)
- printf("ex: Adding board at 0x%03lx, irq %d\n",
- (unsigned long)ioport, irq);
- }
-
- return;
-}
-
-static int
-ex_isa_probe(device_t dev)
-{
- bus_addr_t iobase;
- u_int irq;
- char * irq2ee;
- u_char * ee2irq;
- u_char enaddr[6];
- int tmp;
- int error;
- struct ex_softc *sc = device_get_softc(dev);
-
- /* Check isapnp ids */
- error = ISA_PNP_PROBE(device_get_parent(dev), dev, ex_ids);
-
- /* If the card had a PnP ID that didn't match any we know about */
- if (error == ENXIO)
- return(error);
-
- /* If we had some other problem. */
- if (!(error == 0 || error == ENOENT))
- return(error);
-
- error = ex_alloc_resources(dev);
- if (error != 0)
- goto bad;
- iobase = bus_get_resource_start(dev, SYS_RES_IOPORT, 0);
- if (!ex_look_for_card(sc)) {
- if (bootverbose)
- printf("ex: no card found at 0x%03lx.\n", (unsigned long)iobase);
- error = ENXIO;
- goto bad;
- }
- if (bootverbose)
- printf("ex: ex_isa_probe() found card at 0x%03lx\n", (unsigned long)iobase);
-
- /*
- * Reset the card.
- */
- CSR_WRITE_1(sc, CMD_REG, Reset_CMD);
- DELAY(800);
-
- ex_get_address(sc, enaddr);
-
- /* work out which set of irq <-> internal tables to use */
- if (ex_card_type(enaddr) == CARD_TYPE_EX_10_PLUS) {
- irq2ee = plus_irq2eemap;
- ee2irq = plus_ee2irqmap;
- } else {
- irq2ee = irq2eemap;
- ee2irq = ee2irqmap;
- }
-
- tmp = ex_eeprom_read(sc, EE_W1) & EE_W1_INT_SEL;
- irq = bus_get_resource_start(dev, SYS_RES_IRQ, 0);
- if (irq > 0) {
- /* This will happen if board is in PnP mode. */
- if (ee2irq[tmp] != irq) {
- device_printf(dev,
- "WARNING: IRQ mismatch: EEPROM %d, using %d\n",
- ee2irq[tmp], irq);
- }
- } else {
- irq = ee2irq[tmp];
- bus_set_resource(dev, SYS_RES_IRQ, 0, irq, 1);
- }
-
- if (irq == 0) {
- printf("ex: invalid IRQ.\n");
- error = ENXIO;
- }
-
-bad:;
- ex_release_resources(dev);
- return (error);
-}
-
-static int
-ex_isa_attach(device_t dev)
-{
- struct ex_softc * sc = device_get_softc(dev);
- int error = 0;
- uint16_t temp;
-
- sc->dev = dev;
- sc->ioport_rid = 0;
- sc->irq_rid = 0;
- sc->flags |= HAS_INT_NO_REG;
-
- if ((error = ex_alloc_resources(dev)) != 0) {
- device_printf(dev, "ex_alloc_resources() failed!\n");
- goto bad;
- }
-
- /*
- * Fill in several fields of the softc structure:
- * - I/O base address.
- * - Hardware Ethernet address.
- * - IRQ number (if not supplied in config file, read it from EEPROM).
- * - Connector type.
- */
- sc->irq_no = rman_get_start(sc->irq);
-
- ex_get_address(sc, sc->enaddr);
-
- temp = ex_eeprom_read(sc, EE_W0);
- device_printf(sc->dev, "%s config, %s bus, ",
- (temp & EE_W0_PNP) ? "PnP" : "Manual",
- (temp & EE_W0_BUS16) ? "16-bit" : "8-bit");
-
- temp = ex_eeprom_read(sc, EE_W6);
- printf("board id 0x%03x, stepping 0x%01x\n",
- (temp & EE_W6_BOARD_MASK) >> EE_W6_BOARD_SHIFT,
- temp & EE_W6_STEP_MASK);
-
- if ((error = ex_attach(dev)) != 0) {
- device_printf(dev, "ex_attach() failed!\n");
- goto bad;
- }
-
- return(0);
-bad:
- ex_release_resources(dev);
- return (error);
-}
-
-static int
-ex_look_for_card(struct ex_softc *sc)
-{
- int count1, count2;
-
- /*
- * Check for the i82595 signature, and check that the round robin
- * counter actually advances.
- */
- if (((count1 = CSR_READ_1(sc, ID_REG)) & Id_Mask) != Id_Sig)
- return(0);
- count2 = CSR_READ_1(sc, ID_REG);
- count2 = CSR_READ_1(sc, ID_REG);
- count2 = CSR_READ_1(sc, ID_REG);
-
- return((count2 & Counter_bits) == ((count1 + 0xc0) & Counter_bits));
-}
-
-DRIVER_MODULE(ex, isa, ex_isa_driver, ex_devclass, 0, 0);
-ISA_PNP_INFO(ex_ids);
diff --git a/sys/dev/ex/if_ex_pccard.c b/sys/dev/ex/if_ex_pccard.c
deleted file mode 100644
index bcc2cfb7e254..000000000000
--- a/sys/dev/ex/if_ex_pccard.c
+++ /dev/null
@@ -1,233 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
- *
- * Copyright (c) 2000 Mitsuru IWASAKI
- * 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.
- *
- * 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.
- *
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/socket.h>
-
-#include <sys/module.h>
-#include <sys/bus.h>
-
-#include <machine/bus.h>
-#include <machine/resource.h>
-#include <sys/rman.h>
-
-#include <net/if.h>
-#include <net/if_arp.h>
-#include <net/if_media.h>
-
-#include <dev/ex/if_exreg.h>
-#include <dev/ex/if_exvar.h>
-
-#include <dev/pccard/pccardvar.h>
-#include <dev/pccard/pccard_cis.h>
-#include "pccarddevs.h"
-
-static const struct pccard_product ex_pccard_products[] = {
- PCMCIA_CARD(OLICOM, OC2220),
- PCMCIA_CARD(OLICOM, OC2231),
- PCMCIA_CARD(OLICOM, OC2232),
- PCMCIA_CARD(INTEL, ETHEREXPPRO),
- { NULL }
-};
-
-/* Bus Front End Functions */
-static int ex_pccard_probe(device_t);
-static int ex_pccard_attach(device_t);
-
-static int
-ex_pccard_enet_ok(u_char *enaddr)
-{
- int i;
- u_char sum;
-
- if (enaddr[0] == 0xff)
- return (0);
- for (i = 0, sum = 0; i < ETHER_ADDR_LEN; i++)
- sum |= enaddr[i];
- return (sum != 0);
-}
-
-static int
-ex_pccard_silicom_cb(const struct pccard_tuple *tuple, void *arg)
-{
- u_char *enaddr = arg;
- int i;
-
- if (tuple->code != CISTPL_FUNCE)
- return (0);
- if (tuple->length != 15)
- return (0);
- if (pccard_tuple_read_1(tuple, 6) != 6)
- return (0);
- for (i = 0; i < 6; i++)
- enaddr[i] = pccard_tuple_read_1(tuple, 7 + i);
- return (1);
-}
-
-static void
-ex_pccard_get_silicom_mac(device_t dev, u_char *ether_addr)
-{
- pccard_cis_scan(dev, ex_pccard_silicom_cb, ether_addr);
-}
-
-static int
-ex_pccard_probe(device_t dev)
-{
- const struct pccard_product *pp;
- int error, i, j;
- uint32_t fcn = PCCARD_FUNCTION_UNSPEC;
-
- if ((pp = pccard_product_lookup(dev, ex_pccard_products,
- sizeof(ex_pccard_products[0]), NULL)) == NULL)
- return (EIO);
- if (pp->pp_name != NULL)
- device_set_desc(dev, pp->pp_name);
- /*
- * Olicom 22.8k and 33.6k modems need to activate the right
- * CFE. The odd formula below replicates the sequence of cfes
- * that have multiple resources:
- * 9, 11, 13, 15, 0 + 9
- * 25, 27, 29, 31, 16 + 9
- * 41, 43, 45, 47, 32 + 9
- * 57, 59, 61, 63 48 + 9
- * (entries 8, 24, 40 and 56 are single resoruce cfes)
- * Fortunately the code that enables and disables the multiple
- * fuctions of the card won't mess with the lower bit for cards
- * that aren't stanards conforming MFC cards (which these olicom
- * cards aren't).
- *
- * Note: These cards still don't get interrupts for reasons
- * unknown, even when the right cfe is selected. There's likely
- * something in the CCR that needs to be manually tweaked, but
- * the COR bits seem to all be used. Bit 0 and 3 are always set
- * and the other bits select the config to use. Maybe one of those
- * two bits needs to be cleared, or there's something else in the
- * CCR that needs tweaking. The pattern of resources suggests
- * bit 0 turns on the ethernet, however...
- */
- if (pp->pp_vendor == PCMCIA_VENDOR_OLICOM &&
- (pp->pp_product == PCMCIA_PRODUCT_OLICOM_OC2231 ||
- pp->pp_product == PCMCIA_PRODUCT_OLICOM_OC2232)) {
- if (pccard_select_cfe(dev, 1) == 0)
- goto good;
- for (i = 0; i < 4; i++) {
- for (j = 0; j < 4; j++) {
- printf("Trying %d %d\n", i, j);
- if (pccard_select_cfe(dev,
- (i << 4) + (j << 1) + 9) == 0)
- goto good;
- }
- }
- /* Can't activate the net entries, punt */
- return (EIO);
- }
- /*
- * All other cards supported by this driver don't need specail
- * treatment, so just filter based on the type of card. The
- * special treatment ones are setup to 'fail safe' to a modem so
- * this check would effectively filter them out as well.
- */
- error = pccard_get_function(dev, &fcn);
- if (error != 0)
- return (error);
- if (fcn != PCCARD_FUNCTION_NETWORK)
- return (EIO);
-good:;
- return (0);
-}
-
-static int
-ex_pccard_attach(device_t dev)
-{
- struct ex_softc * sc = device_get_softc(dev);
- int error = 0;
- u_char ether_addr[ETHER_ADDR_LEN];
-
- sc->dev = dev;
- sc->ioport_rid = 0;
- sc->irq_rid = 0;
-
- if ((error = ex_alloc_resources(dev)) != 0) {
- device_printf(dev, "ex_alloc_resources() failed!\n");
- goto bad;
- }
-
- /*
- * Fill in several fields of the softc structure:
- * - Hardware Ethernet address.
- * - IRQ number.
- */
- sc->irq_no = rman_get_start(sc->irq);
-
- /* Try to get the ethernet address from the chip, then the CIS */
- ex_get_address(sc, ether_addr);
- if (!ex_pccard_enet_ok(ether_addr))
- pccard_get_ether(dev, ether_addr);
- if (!ex_pccard_enet_ok(ether_addr))
- ex_pccard_get_silicom_mac(dev, ether_addr);
- if (!ex_pccard_enet_ok(ether_addr)) {
- device_printf(dev, "No NIC address found.\n");
- error = ENXIO;
- goto bad;
- }
- bcopy(ether_addr, sc->enaddr, ETHER_ADDR_LEN);
-
- if ((error = ex_attach(dev)) != 0) {
- device_printf(dev, "ex_attach() failed!\n");
- goto bad;
- }
-
- return(0);
-bad:
- ex_release_resources(dev);
- return (error);
-}
-static device_method_t ex_pccard_methods[] = {
- /* Device interface */
- DEVMETHOD(device_probe, ex_pccard_probe),
- DEVMETHOD(device_attach, ex_pccard_attach),
- DEVMETHOD(device_detach, ex_detach),
-
- { 0, 0 }
-};
-
-static driver_t ex_pccard_driver = {
- "ex",
- ex_pccard_methods,
- sizeof(struct ex_softc),
-};
-
-DRIVER_MODULE(ex, pccard, ex_pccard_driver, ex_devclass, 0, 0);
-MODULE_DEPEND(ex, pccard, 1, 1, 1);
-PCCARD_PNP_INFO(ex_pccard_products);
diff --git a/sys/dev/ex/if_exreg.h b/sys/dev/ex/if_exreg.h
deleted file mode 100644
index 8c260ede28c0..000000000000
--- a/sys/dev/ex/if_exreg.h
+++ /dev/null
@@ -1,211 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
- *
- * Copyright (c) 1996, Javier Martín Rueda ([email protected])
- * 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 unmodified, 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.
- *
- * 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$
- */
-
-/*
- * Intel EtherExpress Pro/10 Ethernet driver
- */
-
-/*
- * Several constants.
- */
-
-#define CARD_TYPE_EX_10 1
-#define CARD_TYPE_EX_10_PLUS 2
-
-/* Length of an ethernet address. */
-#define ETHER_ADDR_LEN 6
-/* Default RAM size in board. */
-#define CARD_RAM_SIZE 0x8000
-/* Number of I/O ports used. */
-#define EX_IOSIZE 16
-
-/*
- * Intel EtherExpress Pro (i82595 based) registers
- */
-
-/* Common registers to all banks. */
-
-#define CMD_REG 0
-#define REG1 1
-#define REG2 2
-#define REG3 3
-#define REG4 4
-#define REG5 5
-#define REG6 6
-#define REG7 7
-#define REG8 8
-#define REG9 9
-#define REG10 10
-#define REG11 11
-#define REG12 12
-#define REG13 13
-#define REG14 14
-#define REG15 15
-
-/* Definitions for command register (CMD_REG). */
-
-#define Switch_Bank_CMD 0
-#define MC_Setup_CMD 3
-#define Transmit_CMD 4
-#define Diagnose_CMD 7
-#define Rcv_Enable_CMD 8
-#define Rcv_Stop 11
-#define Reset_CMD 14
-#define Resume_XMT_List_CMD 28
-#define Sel_Reset_CMD 30
-#define Abort 0x20
-#define Bank0_Sel 0x00
-#define Bank1_Sel 0x40
-#define Bank2_Sel 0x80
-
-/* Bank 0 specific registers. */
-
-#define STATUS_REG 1
-#define ID_REG 2
-#define Id_Mask 0x2c
-#define Id_Sig 0x24
-#define Counter_bits 0xc0
-#define MASK_REG 3
-#define Exec_Int 0x08
-#define Tx_Int 0x04
-#define Rx_Int 0x02
-#define Rx_Stp_Int 0x01
-#define All_Int 0x0f
-#define RCV_BAR 4
-#define RCV_BAR_Lo 4
-#define RCV_BAR_Hi 5
-#define RCV_STOP_REG 6
-#define XMT_BAR 10
-#define HOST_ADDR_REG 12 /* 16-bit register */
-#define IO_PORT_REG 14 /* 16-bit register */
-
-/* Bank 1 specific registers. */
-
-#define TriST_INT 0x80
-#define INT_NO_REG 2
-#define RCV_LOWER_LIMIT_REG 8
-#define RCV_UPPER_LIMIT_REG 9
-#define XMT_LOWER_LIMIT_REG 10
-#define XMT_UPPER_LIMIT_REG 11
-
-/* Bank 2 specific registers. */
-
-#define Disc_Bad_Fr 0x80
-#define Tx_Chn_ErStp 0x40
-#define Tx_Chn_Int_Md 0x20
-#define Multi_IA 0x20
-#define No_SA_Ins 0x10
-#define RX_CRC_InMem 0x04
-#define Promisc_Mode 0x01
-#define BNC_bit 0x20
-#define TPE_bit 0x04
-#define I_ADDR_REG0 4
-#define EEPROM_REG 10
-#define Trnoff_Enable 0x10
-
-/* EEPROM memory positions (16-bit wide). */
-
-#define EE_W0 0x00
-# define EE_W0_PNP 0x0001
-# define EE_W0_BUS16 0x0004
-# define EE_W0_FLASH_ADDR_MASK 0x0038
-# define EE_W0_FLASH_ADDR_SHIFT 3
-# define EE_W0_AUTO_IO 0x0040
-# define EE_W0_FLASH 0x0100
-# define EE_W0_AUTO_NEG 0x0200
-# define EE_W0_IO_MASK 0xFC00
-# define EE_W0_IO_SHIFT 10
-
-#define EE_IRQ_No 1
-#define IRQ_No_Mask 0x07
-
-#define EE_W1 0x01
-# define EE_W1_INT_SEL 0x0007
-# define EE_W1_NO_LINK_INT 0x0008 /* Link Integrity Off */
-# define EE_W1_NO_POLARITY 0x0010 /* Polarity Correction Off */
-# define EE_W1_TPE_AUI 0x0020 /* 1 = TPE, 0 = AUI */
-# define EE_W1_NO_JABBER_PREV 0x0040 /* Jabber prevention Off */
-# define EE_W1_NO_AUTO_SELECT 0x0080 /* Auto Port Selection Off */
-# define EE_W1_SMOUT 0x0100 /* SMout Pin Control 0= Input */
-# define EE_W1_PROM 0x0200 /* Flash = 0, PROM = 1 */
-# define EE_W1_ALT_READY 0x2000 /* Alternate Ready, 0=normal */
-# define EE_W1_FULL_DUPLEX 0x8000
-
-#define EE_W2 0x02
-#define EE_W3 0x03
-#define EE_W4 0x04
-
-#define EE_Eth_Addr_Lo 2
-#define EE_Eth_Addr_Mid 3
-#define EE_Eth_Addr_Hi 4
-
-#define EE_W5 0x05
-# define EE_W5_BNC_TPE 0x0001 /* 0 = TPE, 1 = BNC */
-# define EE_W5_BOOT_IPX 0x0002
-# define EE_W5_BOOT_ODI 0x0004
-# define EE_W5_BOOT_NDIS (EE_W5_BOOT_IPX|EE_W5_BOOT_ODI)
-# define EE_W5_NUM_CONN 0x0008 /* 0 = 2, 1 = 3 */
-# define EE_W5_NOFLASH 0x0010 /* No flash socket present */
-# define EE_W5_PORT_TPE 0x0020 /* TPE present */
-# define EE_W5_PORT_BNC 0x0040 /* BNC present */
-# define EE_W5_PORT_AUI 0x0080 /* AUI present */
-# define EE_W5_PWR_MGT 0x0100 /* Power Management */
-# define EE_W5_CP 0x0200 /* COncurrent Processing */
-
-#define EE_W6 0x05
-# define EE_W6_STEP_MASK 0x000F
-# define EE_W6_BOARD_MASK 0xFFF0
-# define EE_W6_BOARD_SHIFT 4
-
-/* EEPROM serial interface. */
-
-#define EESK 0x01
-#define EECS 0x02
-#define EEDI 0x04
-#define EEDO 0x08
-#define EE_READ_CMD (6 << 6)
-
-/* Frame chain constants. */
-
-/* Transmit header length (in board's ring buffer). */
-#define XMT_HEADER_LEN 8
-#define XMT_Chain_Point 4
-#define XMT_Byte_Count 6
-#define Done_bit 0x0080
-#define Ch_bit 0x8000
-
-/* Transmit result bits. */
-#define No_Collisions_bits 0x000f
-#define TX_OK_bit 0x2000
-
-/* Receive result bits. */
-#define RCV_Done 8
-#define RCV_OK_bit 0x2000
diff --git a/sys/dev/ex/if_exvar.h b/sys/dev/ex/if_exvar.h
deleted file mode 100644
index a5f806b6c97c..000000000000
--- a/sys/dev/ex/if_exvar.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
- *
- * Copyright (c) 1996, Javier Mart^mn Rueda ([email protected])
- * All rights reserved.
- *
- * Copyright (c) 2000 Matthew N. Dodd
- * 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.
- *
- * 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$
- */
-
-struct ex_softc {
- struct ifnet *ifp;
- struct ifmedia ifmedia;
- u_char enaddr[6];
-
- device_t dev;
- struct resource *ioport;
- int ioport_rid;
- struct resource *irq;
- int irq_rid;
- void * ih;
-
- u_short irq_no; /* IRQ number. */
-
- char * irq2ee; /* irq <-> internal */
- u_char * ee2irq; /* representation conversion */
-
- u_int mem_size; /* Total memory size, in bytes. */
- u_int rx_mem_size; /* Rx memory size (by default, */
- /* first 3/4 of total memory). */
-
- u_int rx_lower_limit; /* Lower and upper limits of */
- u_int rx_upper_limit; /* receive buffer. */
-
- u_int rx_head; /* Head of receive ring buffer. */
- u_int tx_mem_size; /* Tx memory size (by default, */
- /* last quarter of total memory).*/
-
- u_int tx_lower_limit; /* Lower and upper limits of */
- u_int tx_upper_limit; /* transmit buffer. */
-
- u_int tx_head; /* Head and tail of */
- u_int tx_tail; /* transmit ring buffer. */
-
- u_int tx_last; /* Pointer to beginning of last */
- /* frame in the chain. */
- struct mtx lock;
- struct callout timer;
- int tx_timeout;
- int flags;
-#define HAS_INT_NO_REG 1
-};
-
-extern devclass_t ex_devclass;
-
-extern char irq2eemap[];
-extern u_char ee2irqmap[];
-extern char plus_irq2eemap[];
-extern u_char plus_ee2irqmap[];
-
-int ex_alloc_resources(device_t);
-void ex_release_resources(device_t);
-int ex_attach(device_t);
-int ex_detach(device_t);
-
-driver_intr_t ex_intr;
-
-u_int16_t ex_eeprom_read(struct ex_softc *, int);
-void ex_get_address(struct ex_softc *, u_char *);
-int ex_card_type(u_char *);
-
-void ex_stop(struct ex_softc *);
-
-#define CSR_READ_1(sc, off) (bus_read_1((sc)->ioport, off))
-#define CSR_READ_2(sc, off) (bus_read_2((sc)->ioport, off))
-#define CSR_WRITE_1(sc, off, val) \
- bus_write_1((sc)->ioport, off, val)
-#define CSR_WRITE_2(sc, off, val) \
- bus_write_2((sc)->ioport, off, val)
-#define CSR_WRITE_MULTI_1(sc, off, addr, count) \
- bus_write_multi_1((sc)->ioport, off, addr, count)
-#define CSR_WRITE_MULTI_2(sc, off, addr, count) \
- bus_write_multi_2((sc)->ioport, off, addr, count)
-#define CSR_WRITE_MULTI_4(sc, off, addr, count) \
- bus_write_multi_4((sc)->ioport, off, addr, count)
-#define CSR_READ_MULTI_1(sc, off, addr, count) \
- bus_read_multi_1((sc)->ioport, off, addr, count)
-#define CSR_READ_MULTI_2(sc, off, addr, count) \
- bus_read_multi_2((sc)->ioport, off, addr, count)
-#define CSR_READ_MULTI_4(sc, off, addr, count) \
- bus_read_multi_4((sc)->ioport, off, addr, count)
-
-#define EX_LOCK(sc) mtx_lock(&(sc)->lock)
-#define EX_UNLOCK(sc) mtx_unlock(&(sc)->lock)
-#define EX_ASSERT_LOCKED(sc) mtx_assert(&(sc)->lock, MA_OWNED)
diff --git a/sys/i386/conf/GENERIC b/sys/i386/conf/GENERIC
index 7754886a925b..a1447dcdf5d5 100644
--- a/sys/i386/conf/GENERIC
+++ b/sys/i386/conf/GENERIC
@@ -271,7 +271,6 @@ device wb # Winbond W89C840F
device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
# ISA Ethernet NICs. pccard NICs included.
-device ex # Intel EtherExpress Pro/10 and Pro/10+
device fe # Fujitsu MB8696x based cards
device sn # SMC's 9000 series of Ethernet chips
device xe # Xircom pccard Ethernet
diff --git a/sys/modules/Makefile b/sys/modules/Makefile
index 181725145f37..ad1a1abdf45a 100644
--- a/sys/modules/Makefile
+++ b/sys/modules/Makefile
@@ -114,7 +114,6 @@ SUBDIR= \
esp \
${_et} \
evdev \
- ${_ex} \
${_exca} \
ext2fs \
fdc \
@@ -747,7 +746,6 @@ _sbni= sbni
.if ${MK_SOURCELESS_UCODE} != "no"
_ctau= ctau
.endif
-_ex= ex
.endif
.if ${MACHINE_CPUARCH} == "arm"
diff --git a/sys/modules/ex/Makefile b/sys/modules/ex/Makefile
deleted file mode 100644
index b7047ac5b941..000000000000
--- a/sys/modules/ex/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-# $FreeBSD$
-#
-
-.PATH: ${SRCTOP}/sys/dev/ex
-
-KMOD= if_ex
-SRCS= if_ex.c \
- if_ex_isa.c isa_if.h \
- if_ex_pccard.c card_if.h \
- bus_if.h device_if.h pccarddevs.h
-
-.include <bsd.kmod.mk>