diff options
author | Brooks Davis <[email protected]> | 2019-05-17 15:23:18 +0000 |
---|---|---|
committer | Brooks Davis <[email protected]> | 2019-05-17 15:23:18 +0000 |
commit | 3ee01a13855b4755d5ccc1ddc866e3a8a9f65618 (patch) | |
tree | f16d2fe7081cf88828b67cad32797594dd37d33c | |
parent | e153ee663af128fb3c938e5cb31f223ea4f0de58 (diff) | |
download | src-3ee01a13855b.tar.gz src-3ee01a13855b.zip |
FCP-101: Remove ex(4).
Relnotes: yes
FCP: https://github.com/freebsd/fcp/blob/master/fcp-0101.md
Reviewed by: jhb, imp
Differential Revision: https://reviews.freebsd.org/D20230
Notes
Notes:
svn path=/head/; revision=347913
-rw-r--r-- | ObsoleteFiles.inc | 1 | ||||
-rw-r--r-- | share/man/man4/man4.i386/Makefile | 1 | ||||
-rw-r--r-- | share/man/man4/man4.i386/ex.4 | 127 | ||||
-rw-r--r-- | sys/conf/NOTES | 3 | ||||
-rw-r--r-- | sys/conf/files | 3 | ||||
-rw-r--r-- | sys/dev/ex/if_ex.c | 1079 | ||||
-rw-r--r-- | sys/dev/ex/if_ex_isa.c | 340 | ||||
-rw-r--r-- | sys/dev/ex/if_ex_pccard.c | 233 | ||||
-rw-r--r-- | sys/dev/ex/if_exreg.h | 211 | ||||
-rw-r--r-- | sys/dev/ex/if_exvar.h | 118 | ||||
-rw-r--r-- | sys/i386/conf/GENERIC | 1 | ||||
-rw-r--r-- | sys/modules/Makefile | 2 | ||||
-rw-r--r-- | sys/modules/ex/Makefile | 12 |
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]> - * <[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> |