aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrooks Davis <brooks@FreeBSD.org>2019-05-17 15:23:52 +0000
committerBrooks Davis <brooks@FreeBSD.org>2019-05-17 15:23:52 +0000
commit90089841deba734c880184bc972ed46f288fc81b (patch)
tree929e7654c04c25eea4836105e1dc3518a728d233
parent3b70dd81f56fd1d096f0bb6fc0092be425d6856c (diff)
downloadsrc-90089841deba.tar.gz
src-90089841deba.zip
FCP-101: Remove sn(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=347917
-rw-r--r--ObsoleteFiles.inc2
-rw-r--r--share/man/man4/Makefile2
-rw-r--r--share/man/man4/sn.4115
-rw-r--r--sys/conf/NOTES6
-rw-r--r--sys/conf/files3
-rw-r--r--sys/dev/sn/if_sn.c1441
-rw-r--r--sys/dev/sn/if_sn_isa.c101
-rw-r--r--sys/dev/sn/if_sn_pccard.c332
-rw-r--r--sys/dev/sn/if_snreg.h409
-rw-r--r--sys/dev/sn/if_snvar.h84
-rw-r--r--sys/dev/sn/ositech.h384
-rw-r--r--sys/i386/conf/GENERIC1
-rw-r--r--sys/modules/Makefile1
-rw-r--r--sys/modules/sn/Makefile9
14 files changed, 2 insertions, 2888 deletions
diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc
index d5b944780df4..89e84d3dfa29 100644
--- a/ObsoleteFiles.inc
+++ b/ObsoleteFiles.inc
@@ -52,6 +52,8 @@ OLD_FILES+=usr/share/man/man4/pcn.4
OLD_FILES+=usr/share/man/man4/if_pcn.4
OLD_FILES+=usr/share/man/man4/sf.4
OLD_FILES+=usr/share/man/man4/if_sf.4
+OLD_FILES+=usr/share/man/man4/sn.4
+OLD_FILES+=usr/share/man/man4/if_sn.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/Makefile b/share/man/man4/Makefile
index ac576378bc6a..bc7a68d45645 100644
--- a/share/man/man4/Makefile
+++ b/share/man/man4/Makefile
@@ -465,7 +465,6 @@ MAN= aac.4 \
smbus.4 \
smp.4 \
smsc.4 \
- sn.4 \
snd_ad1816.4 \
snd_als4000.4 \
snd_atiixp.4 \
@@ -705,7 +704,6 @@ MLINKS+=sis.4 if_sis.4
MLINKS+=sk.4 if_sk.4
MLINKS+=smp.4 SMP.4
MLINKS+=smsc.4 if_smsc.4
-MLINKS+=sn.4 if_sn.4
MLINKS+=snd_envy24.4 snd_ak452x.4
MLINKS+=snd_sbc.4 snd_sb16.4 \
snd_sbc.4 snd_sb8.4
diff --git a/share/man/man4/sn.4 b/share/man/man4/sn.4
deleted file mode 100644
index 6795f9924a05..000000000000
--- a/share/man/man4/sn.4
+++ /dev/null
@@ -1,115 +0,0 @@
-.\"
-.\" Copyright (c) 2000 M. Warner Losh
-.\"
-.\" 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 ``AS IS'' AND ANY EXPRESS OR
-.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-.\"
-.\" $FreeBSD$
-.\"
-.Dd October 24, 2018
-.Dt SN 4
-.Os
-.Sh NAME
-.Nm sn
-.Nd "Ethernet driver for SMC91Cxx based cards"
-.Sh SYNOPSIS
-To compile this driver into the kernel,
-place the following lines in your
-kernel configuration file:
-.Bd -ragged -offset indent
-.Cd "device sn"
-.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_sn_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
-device driver supports SMC91Cxx based ISA and PCMCIA cards.
-.Sh HARDWARE
-The
-.Nm
-driver supports SMC91Cxx based ISA and PCMCIA cards including:
-.Pp
-.Bl -bullet -compact
-.It
-3Com Megahertz X-Jack Ethernet PC Card XJ10BT, XJ10BC
-.It
-3Com Megahertz XJEM and CCEM series: CCEM3288C, CCEM3288T, CCEM3336,
-CEM3336C, CCEM3336T, XJEM1144C, XJEM1144T, XJEM3288C, XJEM3288T, XJEM3336
-.It
-Farallon EtherMac PC Card 595a
-.It
-Motorola Mariner Ethernet/Modem PC Card
-.It
-Ositech Seven of Diamonds Ethernet PC Card
-.It
-Ositech Jack of Hearts Ethernet/Modem PC Card
-.It
-Psion Gold Card Netglobal Ethernet PC Card
-.It
-Psion Gold Card Netglobal 10/100 Fast Ethernet PC Card
-.It
-Psion Gold Card Netglobal 56k+10Mb Ethernet PC Card
-.It
-SMC EZEther PC Card (8020BT)
-.It
-SMC EZEther PC Card (8020T)
-.El
-.Pp
-The
-.Nm
-driver supports the SMC 91C90, SMC 91C92, SMC 91C94, SMC 91C95, SMC 91C96,
-SMC91C100 and SMC 91C100FD chips from SMC.
-.Pp
-The Farallon EtherWave and EtherMac card came in two varieties.
-The
-.Xr ep 4
-driver supports the 595 and 895 cards.
-These cards have the blue arrow on the front along with a 3Com logo.
-The Farallon 595a cards, which have a red arrow on the front,
-are also called EtherWave and EtherMac.
-They are supported by the
-.Nm
-driver.
-.Sh SEE ALSO
-.Xr ed 4 ,
-.Xr ep 4 ,
-.Xr intro 4 ,
-.Xr ng_ether 4 ,
-.Xr vx 4 ,
-.Xr ifconfig 8
-.Sh HISTORY
-The
-.Nm
-device driver appeared in
-.Fx 4.0 .
diff --git a/sys/conf/NOTES b/sys/conf/NOTES
index 9b5c28c0a9f8..00ec37b12564 100644
--- a/sys/conf/NOTES
+++ b/sys/conf/NOTES
@@ -1986,8 +1986,6 @@ device xmphy # XaQti XMAC II
# (also single mode and multimode).
# The driver will autodetect the number of ports on the card and
# attach each one as a separate network interface.
-# sn: Support for ISA and PC Card Ethernet devices using the
-# SMC91C90/92/94/95 chips.
# ste: Sundance Technologies ST201 PCI fast ethernet controller, includes
# the D-Link DFE-550TX.
# stge: Support for gigabit ethernet adapters based on the Sundance/Tamarack
@@ -2028,10 +2026,6 @@ device xmphy # XaQti XMAC II
# Order for ISA devices is important here
-device sn
-hint.sn.0.at="isa"
-hint.sn.0.port="0x300"
-hint.sn.0.irq="10"
device an
device wi
device xe
diff --git a/sys/conf/files b/sys/conf/files
index f9aac8214689..34efc76183d4 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -3019,9 +3019,6 @@ dev/smbus/smbus.c optional smbus
dev/smbus/smbus_if.m optional smbus
dev/smc/if_smc.c optional smc
dev/smc/if_smc_fdt.c optional smc fdt
-dev/sn/if_sn.c optional sn
-dev/sn/if_sn_isa.c optional sn isa
-dev/sn/if_sn_pccard.c optional sn pccard
dev/snp/snp.c optional snp
dev/sound/clone.c optional sound
dev/sound/unit.c optional sound
diff --git a/sys/dev/sn/if_sn.c b/sys/dev/sn/if_sn.c
deleted file mode 100644
index dec62dde5a19..000000000000
--- a/sys/dev/sn/if_sn.c
+++ /dev/null
@@ -1,1441 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-4-Clause
- *
- * Copyright (c) 1996 Gardner Buchanan <gbuchanan@shl.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Gardner Buchanan.
- * 4. The name of Gardner Buchanan may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-/*
- * This is a driver for SMC's 9000 series of Ethernet adapters.
- *
- * This FreeBSD driver is derived from the smc9194 Linux driver by
- * Erik Stahlman and is Copyright (C) 1996 by Erik Stahlman.
- * This driver also shamelessly borrows from the FreeBSD ep driver
- * which is Copyright (C) 1994 Herb Peyerl <hpeyerl@novatel.ca>
- * All rights reserved.
- *
- * It is set up for my SMC91C92 equipped Ampro LittleBoard embedded
- * PC. It is adapted from Erik Stahlman's Linux driver which worked
- * with his EFA Info*Express SVC VLB adaptor. According to SMC's databook,
- * it will work for the entire SMC 9xxx series. (Ha Ha)
- *
- * "Features" of the SMC chip:
- * 4608 byte packet memory. (for the 91C92. Others have more)
- * EEPROM for configuration
- * AUI/TP selection
- *
- * Authors:
- * Erik Stahlman erik@vt.edu
- * Herb Peyerl hpeyerl@novatel.ca
- * Andres Vega Garcia avega@sophia.inria.fr
- * Serge Babkin babkin@hq.icb.chel.su
- * Gardner Buchanan gbuchanan@shl.com
- *
- * Sources:
- * o SMC databook
- * o "smc9194.c:v0.10(FIXED) 02/15/96 by Erik Stahlman (erik@vt.edu)"
- * o "if_ep.c,v 1.19 1995/01/24 20:53:45 davidg Exp"
- *
- * Known Bugs:
- * o Setting of the hardware address isn't supported.
- * o Hardware padding isn't used.
- */
-
-/*
- * Modifications for Megahertz X-Jack Ethernet Card (XJ-10BT)
- *
- * Copyright (c) 1996 by Tatsumi Hosokawa <hosokawa@jp.FreeBSD.org>
- * BSD-nomads, Tokyo, Japan.
- */
-/*
- * Multicast support by Kei TANAKA <kei@pal.xerox.com>
- * Special thanks to itojun@itojun.org
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/errno.h>
-#include <sys/kernel.h>
-#include <sys/sockio.h>
-#include <sys/malloc.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <sys/syslog.h>
-
-#include <sys/module.h>
-#include <sys/bus.h>
-
-#include <machine/bus.h>
-#include <machine/resource.h>
-#include <sys/rman.h>
-
-#include <net/ethernet.h>
-#include <net/if.h>
-#include <net/if_var.h>
-#include <net/if_arp.h>
-#include <net/if_dl.h>
-#include <net/if_types.h>
-#include <net/if_mib.h>
-
-#ifdef INET
-#include <netinet/in.h>
-#include <netinet/in_systm.h>
-#include <netinet/in_var.h>
-#include <netinet/ip.h>
-#endif
-
-#include <net/bpf.h>
-#include <net/bpfdesc.h>
-
-#include <dev/sn/if_snreg.h>
-#include <dev/sn/if_snvar.h>
-
-/* Exported variables */
-devclass_t sn_devclass;
-
-static int snioctl(struct ifnet * ifp, u_long, caddr_t);
-
-static void snresume(struct ifnet *);
-
-static void snintr_locked(struct sn_softc *);
-static void sninit_locked(void *);
-static void snstart_locked(struct ifnet *);
-
-static void sninit(void *);
-static void snread(struct ifnet *);
-static void snstart(struct ifnet *);
-static void snstop(struct sn_softc *);
-static void snwatchdog(void *);
-
-static void sn_setmcast(struct sn_softc *);
-static int sn_getmcf(struct ifnet *ifp, u_char *mcf);
-
-/* I (GB) have been unlucky getting the hardware padding
- * to work properly.
- */
-#define SW_PAD
-
-static const char *chip_ids[15] = {
- NULL, NULL, NULL,
- /* 3 */ "SMC91C90/91C92",
- /* 4 */ "SMC91C94/91C96",
- /* 5 */ "SMC91C95",
- NULL,
- /* 7 */ "SMC91C100",
- /* 8 */ "SMC91C100FD",
- /* 9 */ "SMC91C110",
- NULL, NULL,
- NULL, NULL, NULL
-};
-
-int
-sn_attach(device_t dev)
-{
- struct sn_softc *sc = device_get_softc(dev);
- struct ifnet *ifp;
- uint16_t i;
- uint8_t *p;
- int rev;
- uint16_t address;
- int err;
- u_char eaddr[6];
-
- ifp = sc->ifp = if_alloc(IFT_ETHER);
- if (ifp == NULL) {
- device_printf(dev, "can not if_alloc()\n");
- return (ENOSPC);
- }
-
- SN_LOCK_INIT(sc);
- callout_init_mtx(&sc->watchdog, &sc->sc_mtx, 0);
- snstop(sc);
- sc->pages_wanted = -1;
-
- if (bootverbose || 1) {
- SMC_SELECT_BANK(sc, 3);
- rev = (CSR_READ_2(sc, REVISION_REG_W) >> 4) & 0xf;
- if (chip_ids[rev])
- device_printf(dev, " %s ", chip_ids[rev]);
- else
- device_printf(dev, " unsupported chip: rev %d ", rev);
- SMC_SELECT_BANK(sc, 1);
- i = CSR_READ_2(sc, CONFIG_REG_W);
- printf("%s\n", i & CR_AUI_SELECT ? "AUI" : "UTP");
- }
-
- /*
- * Read the station address from the chip. The MAC address is bank 1,
- * regs 4 - 9
- */
- SMC_SELECT_BANK(sc, 1);
- p = (uint8_t *) eaddr;
- for (i = 0; i < 6; i += 2) {
- address = CSR_READ_2(sc, IAR_ADDR0_REG_W + i);
- p[i + 1] = address >> 8;
- p[i] = address & 0xFF;
- }
- ifp->if_softc = sc;
- if_initname(ifp, device_get_name(dev), device_get_unit(dev));
- ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
- ifp->if_start = snstart;
- ifp->if_ioctl = snioctl;
- ifp->if_init = sninit;
- ifp->if_baudrate = 10000000;
- IFQ_SET_MAXLEN(&ifp->if_snd, ifqmaxlen);
- ifp->if_snd.ifq_maxlen = ifqmaxlen;
- IFQ_SET_READY(&ifp->if_snd);
-
- ether_ifattach(ifp, eaddr);
-
- /*
- * Activate the interrupt so we can get card interrupts. This
- * needs to be done last so that we don't have/hold the lock
- * during startup to avoid LORs in the network layer.
- */
- if ((err = bus_setup_intr(dev, sc->irq_res,
- INTR_TYPE_NET | INTR_MPSAFE, NULL, sn_intr, sc,
- &sc->intrhand)) != 0) {
- sn_detach(dev);
- return err;
- }
-
- gone_by_fcp101_dev(dev);
-
- return 0;
-}
-
-
-int
-sn_detach(device_t dev)
-{
- struct sn_softc *sc = device_get_softc(dev);
- struct ifnet *ifp = sc->ifp;
-
- ether_ifdetach(ifp);
- SN_LOCK(sc);
- snstop(sc);
- SN_UNLOCK(sc);
- callout_drain(&sc->watchdog);
- sn_deactivate(dev);
- if_free(ifp);
- SN_LOCK_DESTROY(sc);
- return 0;
-}
-
-static void
-sninit(void *xsc)
-{
- struct sn_softc *sc = xsc;
- SN_LOCK(sc);
- sninit_locked(sc);
- SN_UNLOCK(sc);
-}
-
-/*
- * Reset and initialize the chip
- */
-static void
-sninit_locked(void *xsc)
-{
- struct sn_softc *sc = xsc;
- struct ifnet *ifp = sc->ifp;
- int flags;
- int mask;
-
- SN_ASSERT_LOCKED(sc);
-
- /*
- * This resets the registers mostly to defaults, but doesn't affect
- * EEPROM. After the reset cycle, we pause briefly for the chip to
- * be happy.
- */
- SMC_SELECT_BANK(sc, 0);
- CSR_WRITE_2(sc, RECV_CONTROL_REG_W, RCR_SOFTRESET);
- SMC_DELAY(sc);
- CSR_WRITE_2(sc, RECV_CONTROL_REG_W, 0x0000);
- SMC_DELAY(sc);
- SMC_DELAY(sc);
-
- CSR_WRITE_2(sc, TXMIT_CONTROL_REG_W, 0x0000);
-
- /*
- * Set the control register to automatically release successfully
- * transmitted packets (making the best use out of our limited
- * memory) and to enable the EPH interrupt on certain TX errors.
- */
- SMC_SELECT_BANK(sc, 1);
- CSR_WRITE_2(sc, CONTROL_REG_W, (CTR_AUTO_RELEASE | CTR_TE_ENABLE |
- CTR_CR_ENABLE | CTR_LE_ENABLE));
-
- /* Set squelch level to 240mV (default 480mV) */
- flags = CSR_READ_2(sc, CONFIG_REG_W);
- flags |= CR_SET_SQLCH;
- CSR_WRITE_2(sc, CONFIG_REG_W, flags);
-
- /*
- * Reset the MMU and wait for it to be un-busy.
- */
- SMC_SELECT_BANK(sc, 2);
- CSR_WRITE_2(sc, MMU_CMD_REG_W, MMUCR_RESET);
- while (CSR_READ_2(sc, MMU_CMD_REG_W) & MMUCR_BUSY) /* NOTHING */
- ;
-
- /*
- * Disable all interrupts
- */
- CSR_WRITE_1(sc, INTR_MASK_REG_B, 0x00);
-
- sn_setmcast(sc);
-
- /*
- * Set the transmitter control. We want it enabled.
- */
- flags = TCR_ENABLE;
-
-#ifndef SW_PAD
- /*
- * I (GB) have been unlucky getting this to work.
- */
- flags |= TCR_PAD_ENABLE;
-#endif /* SW_PAD */
-
- CSR_WRITE_2(sc, TXMIT_CONTROL_REG_W, flags);
-
-
- /*
- * Now, enable interrupts
- */
- SMC_SELECT_BANK(sc, 2);
-
- mask = IM_EPH_INT |
- IM_RX_OVRN_INT |
- IM_RCV_INT |
- IM_TX_INT;
-
- CSR_WRITE_1(sc, INTR_MASK_REG_B, mask);
- sc->intr_mask = mask;
- sc->pages_wanted = -1;
-
-
- /*
- * Mark the interface running but not active.
- */
- ifp->if_drv_flags |= IFF_DRV_RUNNING;
- ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
- callout_reset(&sc->watchdog, hz, snwatchdog, sc);
-
- /*
- * Attempt to push out any waiting packets.
- */
- snstart_locked(ifp);
-}
-
-static void
-snstart(struct ifnet *ifp)
-{
- struct sn_softc *sc = ifp->if_softc;
- SN_LOCK(sc);
- snstart_locked(ifp);
- SN_UNLOCK(sc);
-}
-
-
-static void
-snstart_locked(struct ifnet *ifp)
-{
- struct sn_softc *sc = ifp->if_softc;
- u_int len;
- struct mbuf *m;
- struct mbuf *top;
- int pad;
- int mask;
- uint16_t length;
- uint16_t numPages;
- uint8_t packet_no;
- int time_out;
- int junk = 0;
-
- SN_ASSERT_LOCKED(sc);
-
- if (ifp->if_drv_flags & IFF_DRV_OACTIVE)
- return;
- if (sc->pages_wanted != -1) {
- if_printf(ifp, "snstart() while memory allocation pending\n");
- return;
- }
-startagain:
-
- /*
- * Sneak a peek at the next packet
- */
- m = ifp->if_snd.ifq_head;
- if (m == NULL)
- return;
- /*
- * Compute the frame length and set pad to give an overall even
- * number of bytes. Below we assume that the packet length is even.
- */
- for (len = 0, top = m; m; m = m->m_next)
- len += m->m_len;
-
- pad = (len & 1);
-
- /*
- * We drop packets that are too large. Perhaps we should truncate
- * them instead?
- */
- if (len + pad > ETHER_MAX_LEN - ETHER_CRC_LEN) {
- if_printf(ifp, "large packet discarded (A)\n");
- if_inc_counter(ifp, IFCOUNTER_OERRORS, 1);
- IFQ_DRV_DEQUEUE(&ifp->if_snd, m);
- m_freem(m);
- goto readcheck;
- }
-#ifdef SW_PAD
-
- /*
- * If HW padding is not turned on, then pad to ETHER_MIN_LEN.
- */
- if (len < ETHER_MIN_LEN - ETHER_CRC_LEN)
- pad = ETHER_MIN_LEN - ETHER_CRC_LEN - len;
-
-#endif /* SW_PAD */
-
- length = pad + len;
-
- /*
- * The MMU wants the number of pages to be the number of 256 byte
- * 'pages', minus 1 (A packet can't ever have 0 pages. We also
- * include space for the status word, byte count and control bytes in
- * the allocation request.
- */
- numPages = (length + 6) >> 8;
-
-
- /*
- * Now, try to allocate the memory
- */
- SMC_SELECT_BANK(sc, 2);
- CSR_WRITE_2(sc, MMU_CMD_REG_W, MMUCR_ALLOC | numPages);
-
- /*
- * Wait a short amount of time to see if the allocation request
- * completes. Otherwise, I enable the interrupt and wait for
- * completion asynchronously.
- */
-
- time_out = MEMORY_WAIT_TIME;
- do {
- if (CSR_READ_1(sc, INTR_STAT_REG_B) & IM_ALLOC_INT)
- break;
- } while (--time_out);
-
- if (!time_out || junk > 10) {
-
- /*
- * No memory now. Oh well, wait until the chip finds memory
- * later. Remember how many pages we were asking for and
- * enable the allocation completion interrupt. Also set a
- * watchdog in case we miss the interrupt. We mark the
- * interface active since there is no point in attempting an
- * snstart() until after the memory is available.
- */
- mask = CSR_READ_1(sc, INTR_MASK_REG_B) | IM_ALLOC_INT;
- CSR_WRITE_1(sc, INTR_MASK_REG_B, mask);
- sc->intr_mask = mask;
-
- sc->timer = 1;
- ifp->if_drv_flags |= IFF_DRV_OACTIVE;
- sc->pages_wanted = numPages;
- return;
- }
- /*
- * The memory allocation completed. Check the results.
- */
- packet_no = CSR_READ_1(sc, ALLOC_RESULT_REG_B);
- if (packet_no & ARR_FAILED) {
- if (junk++ > 10)
- if_printf(ifp, "Memory allocation failed\n");
- goto startagain;
- }
- /*
- * We have a packet number, so tell the card to use it.
- */
- CSR_WRITE_1(sc, PACKET_NUM_REG_B, packet_no);
-
- /*
- * Point to the beginning of the packet
- */
- CSR_WRITE_2(sc, POINTER_REG_W, PTR_AUTOINC | 0x0000);
-
- /*
- * Send the packet length (+6 for status, length and control byte)
- * and the status word (set to zeros)
- */
- CSR_WRITE_2(sc, DATA_REG_W, 0);
- CSR_WRITE_1(sc, DATA_REG_B, (length + 6) & 0xFF);
- CSR_WRITE_1(sc, DATA_REG_B, (length + 6) >> 8);
-
- /*
- * Get the packet from the kernel. This will include the Ethernet
- * frame header, MAC Addresses etc.
- */
- IFQ_DRV_DEQUEUE(&ifp->if_snd, m);
-
- /*
- * Push out the data to the card.
- */
- for (top = m; m != NULL; m = m->m_next) {
-
- /*
- * Push out words.
- */
- CSR_WRITE_MULTI_2(sc, DATA_REG_W, mtod(m, uint16_t *),
- m->m_len / 2);
-
- /*
- * Push out remaining byte.
- */
- if (m->m_len & 1)
- CSR_WRITE_1(sc, DATA_REG_B,
- *(mtod(m, caddr_t) + m->m_len - 1));
- }
-
- /*
- * Push out padding.
- */
- while (pad > 1) {
- CSR_WRITE_2(sc, DATA_REG_W, 0);
- pad -= 2;
- }
- if (pad)
- CSR_WRITE_1(sc, DATA_REG_B, 0);
-
- /*
- * Push out control byte and unused packet byte The control byte is 0
- * meaning the packet is even lengthed and no special CRC handling is
- * desired.
- */
- CSR_WRITE_2(sc, DATA_REG_W, 0);
-
- /*
- * Enable the interrupts and let the chipset deal with it Also set a
- * watchdog in case we miss the interrupt.
- */
- mask = CSR_READ_1(sc, INTR_MASK_REG_B) | (IM_TX_INT | IM_TX_EMPTY_INT);
- CSR_WRITE_1(sc, INTR_MASK_REG_B, mask);
- sc->intr_mask = mask;
-
- CSR_WRITE_2(sc, MMU_CMD_REG_W, MMUCR_ENQUEUE);
-
- ifp->if_drv_flags |= IFF_DRV_OACTIVE;
- sc->timer = 1;
-
- BPF_MTAP(ifp, top);
-
- if_inc_counter(ifp, IFCOUNTER_OPACKETS, 1);
- m_freem(top);
-
-
-readcheck:
-
- /*
- * Is another packet coming in? We don't want to overflow the tiny
- * RX FIFO. If nothing has arrived then attempt to queue another
- * transmit packet.
- */
- if (CSR_READ_2(sc, FIFO_PORTS_REG_W) & FIFO_REMPTY)
- goto startagain;
- return;
-}
-
-
-
-/* Resume a packet transmit operation after a memory allocation
- * has completed.
- *
- * This is basically a hacked up copy of snstart() which handles
- * a completed memory allocation the same way snstart() does.
- * It then passes control to snstart to handle any other queued
- * packets.
- */
-static void
-snresume(struct ifnet *ifp)
-{
- struct sn_softc *sc = ifp->if_softc;
- u_int len;
- struct mbuf *m;
- struct mbuf *top;
- int pad;
- int mask;
- uint16_t length;
- uint16_t numPages;
- uint16_t pages_wanted;
- uint8_t packet_no;
-
- if (sc->pages_wanted < 0)
- return;
-
- pages_wanted = sc->pages_wanted;
- sc->pages_wanted = -1;
-
- /*
- * Sneak a peek at the next packet
- */
- m = ifp->if_snd.ifq_head;
- if (m == NULL) {
- if_printf(ifp, "snresume() with nothing to send\n");
- return;
- }
- /*
- * Compute the frame length and set pad to give an overall even
- * number of bytes. Below we assume that the packet length is even.
- */
- for (len = 0, top = m; m; m = m->m_next)
- len += m->m_len;
-
- pad = (len & 1);
-
- /*
- * We drop packets that are too large. Perhaps we should truncate
- * them instead?
- */
- if (len + pad > ETHER_MAX_LEN - ETHER_CRC_LEN) {
- if_printf(ifp, "large packet discarded (B)\n");
- if_inc_counter(ifp, IFCOUNTER_OERRORS, 1);
- IFQ_DRV_DEQUEUE(&ifp->if_snd, m);
- m_freem(m);
- return;
- }
-#ifdef SW_PAD
-
- /*
- * If HW padding is not turned on, then pad to ETHER_MIN_LEN.
- */
- if (len < ETHER_MIN_LEN - ETHER_CRC_LEN)
- pad = ETHER_MIN_LEN - ETHER_CRC_LEN - len;
-
-#endif /* SW_PAD */
-
- length = pad + len;
-
-
- /*
- * The MMU wants the number of pages to be the number of 256 byte
- * 'pages', minus 1 (A packet can't ever have 0 pages. We also
- * include space for the status word, byte count and control bytes in
- * the allocation request.
- */
- numPages = (length + 6) >> 8;
-
-
- SMC_SELECT_BANK(sc, 2);
-
- /*
- * The memory allocation completed. Check the results. If it failed,
- * we simply set a watchdog timer and hope for the best.
- */
- packet_no = CSR_READ_1(sc, ALLOC_RESULT_REG_B);
- if (packet_no & ARR_FAILED) {
- if_printf(ifp, "Memory allocation failed. Weird.\n");
- sc->timer = 1;
- goto try_start;
- }
- /*
- * We have a packet number, so tell the card to use it.
- */
- CSR_WRITE_1(sc, PACKET_NUM_REG_B, packet_no);
-
- /*
- * Now, numPages should match the pages_wanted recorded when the
- * memory allocation was initiated.
- */
- if (pages_wanted != numPages) {
- if_printf(ifp, "memory allocation wrong size. Weird.\n");
- /*
- * If the allocation was the wrong size we simply release the
- * memory once it is granted. Wait for the MMU to be un-busy.
- */
- while (CSR_READ_2(sc, MMU_CMD_REG_W) & MMUCR_BUSY) /* NOTHING */
- ;
- CSR_WRITE_2(sc, MMU_CMD_REG_W, MMUCR_FREEPKT);
-
- return;
- }
- /*
- * Point to the beginning of the packet
- */
- CSR_WRITE_2(sc, POINTER_REG_W, PTR_AUTOINC | 0x0000);
-
- /*
- * Send the packet length (+6 for status, length and control byte)
- * and the status word (set to zeros)
- */
- CSR_WRITE_2(sc, DATA_REG_W, 0);
- CSR_WRITE_1(sc, DATA_REG_B, (length + 6) & 0xFF);
- CSR_WRITE_1(sc, DATA_REG_B, (length + 6) >> 8);
-
- /*
- * Get the packet from the kernel. This will include the Ethernet
- * frame header, MAC Addresses etc.
- */
- IFQ_DRV_DEQUEUE(&ifp->if_snd, m);
-
- /*
- * Push out the data to the card.
- */
- for (top = m; m != NULL; m = m->m_next) {
-
- /*
- * Push out words.
- */
- CSR_WRITE_MULTI_2(sc, DATA_REG_W, mtod(m, uint16_t *),
- m->m_len / 2);
- /*
- * Push out remaining byte.
- */
- if (m->m_len & 1)
- CSR_WRITE_1(sc, DATA_REG_B,
- *(mtod(m, caddr_t) + m->m_len - 1));
- }
-
- /*
- * Push out padding.
- */
- while (pad > 1) {
- CSR_WRITE_2(sc, DATA_REG_W, 0);
- pad -= 2;
- }
- if (pad)
- CSR_WRITE_1(sc, DATA_REG_B, 0);
-
- /*
- * Push out control byte and unused packet byte The control byte is 0
- * meaning the packet is even lengthed and no special CRC handling is
- * desired.
- */
- CSR_WRITE_2(sc, DATA_REG_W, 0);
-
- /*
- * Enable the interrupts and let the chipset deal with it Also set a
- * watchdog in case we miss the interrupt.
- */
- mask = CSR_READ_1(sc, INTR_MASK_REG_B) | (IM_TX_INT | IM_TX_EMPTY_INT);
- CSR_WRITE_1(sc, INTR_MASK_REG_B, mask);
- sc->intr_mask = mask;
- CSR_WRITE_2(sc, MMU_CMD_REG_W, MMUCR_ENQUEUE);
-
- BPF_MTAP(ifp, top);
-
- if_inc_counter(ifp, IFCOUNTER_OPACKETS, 1);
- m_freem(top);
-
-try_start:
-
- /*
- * Now pass control to snstart() to queue any additional packets
- */
- ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
- snstart_locked(ifp);
-
- /*
- * We've sent something, so we're active. Set a watchdog in case the
- * TX_EMPTY interrupt is lost.
- */
- ifp->if_drv_flags |= IFF_DRV_OACTIVE;
- sc->timer = 1;
-
- return;
-}
-
-void
-sn_intr(void *arg)
-{
- struct sn_softc *sc = (struct sn_softc *) arg;
-
- SN_LOCK(sc);
- snintr_locked(sc);
- SN_UNLOCK(sc);
-}
-
-static void
-snintr_locked(struct sn_softc *sc)
-{
- int status, interrupts;
- struct ifnet *ifp = sc->ifp;
-
- /*
- * Chip state registers
- */
- uint8_t mask;
- uint8_t packet_no;
- uint16_t tx_status;
- uint16_t card_stats;
-
- /*
- * Clear the watchdog.
- */
- sc->timer = 0;
-
- SMC_SELECT_BANK(sc, 2);
-
- /*
- * Obtain the current interrupt mask and clear the hardware mask
- * while servicing interrupts.
- */
- mask = CSR_READ_1(sc, INTR_MASK_REG_B);
- CSR_WRITE_1(sc, INTR_MASK_REG_B, 0x00);
-
- /*
- * Get the set of interrupts which occurred and eliminate any which
- * are masked.
- */
- interrupts = CSR_READ_1(sc, INTR_STAT_REG_B);
- status = interrupts & mask;
-
- /*
- * Now, process each of the interrupt types.
- */
-
- /*
- * Receive Overrun.
- */
- if (status & IM_RX_OVRN_INT) {
- /*
- * Acknowlege Interrupt
- */
- SMC_SELECT_BANK(sc, 2);
- CSR_WRITE_1(sc, INTR_ACK_REG_B, IM_RX_OVRN_INT);
-
- if_inc_counter(ifp, IFCOUNTER_IERRORS, 1);
- }
- /*
- * Got a packet.
- */
- if (status & IM_RCV_INT) {
- int packet_number;
-
- SMC_SELECT_BANK(sc, 2);
- packet_number = CSR_READ_2(sc, FIFO_PORTS_REG_W);
-
- if (packet_number & FIFO_REMPTY) {
- /*
- * we got called , but nothing was on the FIFO
- */
- printf("sn: Receive interrupt with nothing on FIFO\n");
- goto out;
- }
- snread(ifp);
- }
- /*
- * An on-card memory allocation came through.
- */
- if (status & IM_ALLOC_INT) {
- /*
- * Disable this interrupt.
- */
- mask &= ~IM_ALLOC_INT;
- ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
- snresume(ifp);
- }
- /*
- * TX Completion. Handle a transmit error message. This will only be
- * called when there is an error, because of the AUTO_RELEASE mode.
- */
- if (status & IM_TX_INT) {
- /*
- * Acknowlege Interrupt
- */
- SMC_SELECT_BANK(sc, 2);
- CSR_WRITE_1(sc, INTR_ACK_REG_B, IM_TX_INT);
-
- packet_no = CSR_READ_2(sc, FIFO_PORTS_REG_W);
- packet_no &= FIFO_TX_MASK;
-
- /*
- * select this as the packet to read from
- */
- CSR_WRITE_1(sc, PACKET_NUM_REG_B, packet_no);
-
- /*
- * Position the pointer to the first word from this packet
- */
- CSR_WRITE_2(sc, POINTER_REG_W, PTR_AUTOINC | PTR_READ | 0x0000);
-
- /*
- * Fetch the TX status word. The value found here will be a
- * copy of the EPH_STATUS_REG_W at the time the transmit
- * failed.
- */
- tx_status = CSR_READ_2(sc, DATA_REG_W);
-
- if (tx_status & EPHSR_TX_SUC) {
- device_printf(sc->dev,
- "Successful packet caused interrupt\n");
- } else {
- if_inc_counter(ifp, IFCOUNTER_OERRORS, 1);
- }
-
- if (tx_status & EPHSR_LATCOL)
- if_inc_counter(ifp, IFCOUNTER_COLLISIONS, 1);
-
- /*
- * Some of these errors will have disabled transmit.
- * Re-enable transmit now.
- */
- SMC_SELECT_BANK(sc, 0);
-
-#ifdef SW_PAD
- CSR_WRITE_2(sc, TXMIT_CONTROL_REG_W, TCR_ENABLE);
-#else
- CSR_WRITE_2(sc, TXMIT_CONTROL_REG_W, TCR_ENABLE | TCR_PAD_ENABLE);
-#endif /* SW_PAD */
-
- /*
- * kill the failed packet. Wait for the MMU to be un-busy.
- */
- SMC_SELECT_BANK(sc, 2);
- while (CSR_READ_2(sc, MMU_CMD_REG_W) & MMUCR_BUSY) /* NOTHING */
- ;
- CSR_WRITE_2(sc, MMU_CMD_REG_W, MMUCR_FREEPKT);
-
- /*
- * Attempt to queue more transmits.
- */
- ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
- snstart_locked(ifp);
- }
- /*
- * Transmit underrun. We use this opportunity to update transmit
- * statistics from the card.
- */
- if (status & IM_TX_EMPTY_INT) {
-
- /*
- * Acknowlege Interrupt
- */
- SMC_SELECT_BANK(sc, 2);
- CSR_WRITE_1(sc, INTR_ACK_REG_B, IM_TX_EMPTY_INT);
-
- /*
- * Disable this interrupt.
- */
- mask &= ~IM_TX_EMPTY_INT;
-
- SMC_SELECT_BANK(sc, 0);
- card_stats = CSR_READ_2(sc, COUNTER_REG_W);
-
- /*
- * Single collisions
- */
- if_inc_counter(ifp, IFCOUNTER_COLLISIONS, card_stats & ECR_COLN_MASK);
-
- /*
- * Multiple collisions
- */
- if_inc_counter(ifp, IFCOUNTER_COLLISIONS, (card_stats & ECR_MCOLN_MASK) >> 4);
-
- SMC_SELECT_BANK(sc, 2);
-
- /*
- * Attempt to enqueue some more stuff.
- */
- ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
- snstart_locked(ifp);
- }
- /*
- * Some other error. Try to fix it by resetting the adapter.
- */
- if (status & IM_EPH_INT) {
- snstop(sc);
- sninit_locked(sc);
- }
-
-out:
- /*
- * Handled all interrupt sources.
- */
-
- SMC_SELECT_BANK(sc, 2);
-
- /*
- * Reestablish interrupts from mask which have not been deselected
- * during this interrupt. Note that the hardware mask, which was set
- * to 0x00 at the start of this service routine, may have been
- * updated by one or more of the interrupt handers and we must let
- * those new interrupts stay enabled here.
- */
- mask |= CSR_READ_1(sc, INTR_MASK_REG_B);
- CSR_WRITE_1(sc, INTR_MASK_REG_B, mask);
- sc->intr_mask = mask;
-}
-
-static void
-snread(struct ifnet *ifp)
-{
- struct sn_softc *sc = ifp->if_softc;
- struct ether_header *eh;
- struct mbuf *m;
- short status;
- int packet_number;
- uint16_t packet_length;
- uint8_t *data;
-
- SMC_SELECT_BANK(sc, 2);
-#if 0
- packet_number = CSR_READ_2(sc, FIFO_PORTS_REG_W);
-
- if (packet_number & FIFO_REMPTY) {
-
- /*
- * we got called , but nothing was on the FIFO
- */
- printf("sn: Receive interrupt with nothing on FIFO\n");
- return;
- }
-#endif
-read_another:
-
- /*
- * Start reading from the start of the packet. Since PTR_RCV is set,
- * packet number is found in FIFO_PORTS_REG_W, FIFO_RX_MASK.
- */
- CSR_WRITE_2(sc, POINTER_REG_W, PTR_READ | PTR_RCV | PTR_AUTOINC | 0x0000);
-
- /*
- * First two words are status and packet_length
- */
- status = CSR_READ_2(sc, DATA_REG_W);
- packet_length = CSR_READ_2(sc, DATA_REG_W) & RLEN_MASK;
-
- /*
- * The packet length contains 3 extra words: status, length, and a
- * extra word with the control byte.
- */
- packet_length -= 6;
-
- /*
- * Account for receive errors and discard.
- */
- if (status & RS_ERRORS) {
- if_inc_counter(ifp, IFCOUNTER_IERRORS, 1);
- goto out;
- }
- /*
- * A packet is received.
- */
-
- /*
- * Adjust for odd-length packet.
- */
- if (status & RS_ODDFRAME)
- packet_length++;
-
- /*
- * Allocate a header mbuf from the kernel.
- */
- MGETHDR(m, M_NOWAIT, MT_DATA);
- if (m == NULL)
- goto out;
-
- m->m_pkthdr.rcvif = ifp;
- m->m_pkthdr.len = m->m_len = packet_length;
-
- /*
- * Attach an mbuf cluster.
- */
- if (!(MCLGET(m, M_NOWAIT))) {
- m_freem(m);
- if_inc_counter(ifp, IFCOUNTER_IERRORS, 1);
- printf("sn: snread() kernel memory allocation problem\n");
- goto out;
- }
- eh = mtod(m, struct ether_header *);
-
- /*
- * Get packet, including link layer address, from interface.
- */
- data = (uint8_t *) eh;
- CSR_READ_MULTI_2(sc, DATA_REG_W, (uint16_t *) data, packet_length >> 1);
- if (packet_length & 1) {
- data += packet_length & ~1;
- *data = CSR_READ_1(sc, DATA_REG_B);
- }
- if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1);
-
- /*
- * Remove link layer addresses and whatnot.
- */
- m->m_pkthdr.len = m->m_len = packet_length;
-
- /*
- * Drop locks before calling if_input() since it may re-enter
- * snstart() in the netisr case. This would result in a
- * lock reversal. Better performance might be obtained by
- * chaining all packets received, dropping the lock, and then
- * calling if_input() on each one.
- */
- SN_UNLOCK(sc);
- (*ifp->if_input)(ifp, m);
- SN_LOCK(sc);
-
-out:
-
- /*
- * Error or good, tell the card to get rid of this packet Wait for
- * the MMU to be un-busy.
- */
- SMC_SELECT_BANK(sc, 2);
- while (CSR_READ_2(sc, MMU_CMD_REG_W) & MMUCR_BUSY) /* NOTHING */
- ;
- CSR_WRITE_2(sc, MMU_CMD_REG_W, MMUCR_RELEASE);
-
- /*
- * Check whether another packet is ready
- */
- packet_number = CSR_READ_2(sc, FIFO_PORTS_REG_W);
- if (packet_number & FIFO_REMPTY) {
- return;
- }
- goto read_another;
-}
-
-
-/*
- * Handle IOCTLS. This function is completely stolen from if_ep.c
- * As with its progenitor, it does not handle hardware address
- * changes.
- */
-static int
-snioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
-{
- struct sn_softc *sc = ifp->if_softc;
- int error = 0;
-
- switch (cmd) {
- case SIOCSIFFLAGS:
- SN_LOCK(sc);
- if ((ifp->if_flags & IFF_UP) == 0 &&
- ifp->if_drv_flags & IFF_DRV_RUNNING) {
- snstop(sc);
- } else {
- /* reinitialize card on any parameter change */
- sninit_locked(sc);
- }
- SN_UNLOCK(sc);
- break;
-
- case SIOCADDMULTI:
- case SIOCDELMULTI:
- /* update multicast filter list. */
- SN_LOCK(sc);
- sn_setmcast(sc);
- error = 0;
- SN_UNLOCK(sc);
- break;
- default:
- error = ether_ioctl(ifp, cmd, data);
- break;
- }
- return (error);
-}
-
-static void
-snwatchdog(void *arg)
-{
- struct sn_softc *sc;
-
- sc = arg;
- SN_ASSERT_LOCKED(sc);
- callout_reset(&sc->watchdog, hz, snwatchdog, sc);
- if (sc->timer == 0 || --sc->timer > 0)
- return;
- snintr_locked(sc);
-}
-
-
-/* 1. zero the interrupt mask
- * 2. clear the enable receive flag
- * 3. clear the enable xmit flags
- */
-static void
-snstop(struct sn_softc *sc)
-{
-
- struct ifnet *ifp = sc->ifp;
-
- /*
- * Clear interrupt mask; disable all interrupts.
- */
- SMC_SELECT_BANK(sc, 2);
- CSR_WRITE_1(sc, INTR_MASK_REG_B, 0x00);
-
- /*
- * Disable transmitter and Receiver
- */
- SMC_SELECT_BANK(sc, 0);
- CSR_WRITE_2(sc, RECV_CONTROL_REG_W, 0x0000);
- CSR_WRITE_2(sc, TXMIT_CONTROL_REG_W, 0x0000);
-
- /*
- * Cancel watchdog.
- */
- sc->timer = 0;
- callout_stop(&sc->watchdog);
- ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
-}
-
-
-int
-sn_activate(device_t dev)
-{
- struct sn_softc *sc = device_get_softc(dev);
-
- sc->port_rid = 0;
- sc->port_res = bus_alloc_resource_anywhere(dev, SYS_RES_IOPORT,
- &sc->port_rid, SMC_IO_EXTENT, RF_ACTIVE);
- if (!sc->port_res) {
- if (bootverbose)
- device_printf(dev, "Cannot allocate ioport\n");
- return ENOMEM;
- }
-
- sc->irq_rid = 0;
- sc->irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &sc->irq_rid,
- RF_ACTIVE);
- if (!sc->irq_res) {
- if (bootverbose)
- device_printf(dev, "Cannot allocate irq\n");
- sn_deactivate(dev);
- return ENOMEM;
- }
- return (0);
-}
-
-void
-sn_deactivate(device_t dev)
-{
- struct sn_softc *sc = device_get_softc(dev);
-
- if (sc->intrhand)
- bus_teardown_intr(dev, sc->irq_res, sc->intrhand);
- sc->intrhand = 0;
- if (sc->port_res)
- bus_release_resource(dev, SYS_RES_IOPORT, sc->port_rid,
- sc->port_res);
- sc->port_res = 0;
- if (sc->modem_res)
- bus_release_resource(dev, SYS_RES_IOPORT, sc->modem_rid,
- sc->modem_res);
- sc->modem_res = 0;
- if (sc->irq_res)
- bus_release_resource(dev, SYS_RES_IRQ, sc->irq_rid,
- sc->irq_res);
- sc->irq_res = 0;
- return;
-}
-
-/*
- * Function: sn_probe(device_t dev)
- *
- * Purpose:
- * Tests to see if a given ioaddr points to an SMC9xxx chip.
- * Tries to cause as little damage as possible if it's not a SMC chip.
- * Returns a 0 on success
- *
- * Algorithm:
- * (1) see if the high byte of BANK_SELECT is 0x33
- * (2) compare the ioaddr with the base register's address
- * (3) see if I recognize the chip ID in the appropriate register
- *
- *
- */
-int
-sn_probe(device_t dev)
-{
- struct sn_softc *sc = device_get_softc(dev);
- uint16_t bank;
- uint16_t revision_register;
- uint16_t base_address_register;
- int err;
-
- if ((err = sn_activate(dev)) != 0)
- return err;
-
- /*
- * First, see if the high byte is 0x33
- */
- bank = CSR_READ_2(sc, BANK_SELECT_REG_W);
- if ((bank & BSR_DETECT_MASK) != BSR_DETECT_VALUE) {
-#ifdef SN_DEBUG
- device_printf(dev, "test1 failed\n");
-#endif
- goto error;
- }
- /*
- * The above MIGHT indicate a device, but I need to write to further
- * test this. Go to bank 0, then test that the register still
- * reports the high byte is 0x33.
- */
- CSR_WRITE_2(sc, BANK_SELECT_REG_W, 0x0000);
- bank = CSR_READ_2(sc, BANK_SELECT_REG_W);
- if ((bank & BSR_DETECT_MASK) != BSR_DETECT_VALUE) {
-#ifdef SN_DEBUG
- device_printf(dev, "test2 failed\n");
-#endif
- goto error;
- }
- /*
- * well, we've already written once, so hopefully another time won't
- * hurt. This time, I need to switch the bank register to bank 1, so
- * I can access the base address register. The contents of the
- * BASE_ADDR_REG_W register, after some jiggery pokery, is expected
- * to match the I/O port address where the adapter is being probed.
- */
- CSR_WRITE_2(sc, BANK_SELECT_REG_W, 0x0001);
- base_address_register = (CSR_READ_2(sc, BASE_ADDR_REG_W) >> 3) & 0x3e0;
-
- if (rman_get_start(sc->port_res) != base_address_register) {
-
- /*
- * Well, the base address register didn't match. Must not
- * have been a SMC chip after all.
- */
-#ifdef SN_DEBUG
- device_printf(dev, "test3 failed ioaddr = 0x%x, "
- "base_address_register = 0x%x\n",
- rman_get_start(sc->port_res), base_address_register);
-#endif
- goto error;
- }
-
- /*
- * Check if the revision register is something that I recognize.
- * These might need to be added to later, as future revisions could
- * be added.
- */
- CSR_WRITE_2(sc, BANK_SELECT_REG_W, 0x3);
- revision_register = CSR_READ_2(sc, REVISION_REG_W);
- if (!chip_ids[(revision_register >> 4) & 0xF]) {
-
- /*
- * I don't regonize this chip, so...
- */
-#ifdef SN_DEBUG
- device_printf(dev, "test4 failed\n");
-#endif
- goto error;
- }
-
- /*
- * at this point I'll assume that the chip is an SMC9xxx. It might be
- * prudent to check a listing of MAC addresses against the hardware
- * address, or do some other tests.
- */
- sn_deactivate(dev);
- return 0;
- error:
- sn_deactivate(dev);
- return ENXIO;
-}
-
-#define MCFSZ 8
-
-static void
-sn_setmcast(struct sn_softc *sc)
-{
- struct ifnet *ifp = sc->ifp;
- int flags;
- uint8_t mcf[MCFSZ];
-
- SN_ASSERT_LOCKED(sc);
-
- /*
- * Set the receiver filter. We want receive enabled and auto strip
- * of CRC from received packet. If we are promiscuous then set that
- * bit too.
- */
- flags = RCR_ENABLE | RCR_STRIP_CRC;
-
- if (ifp->if_flags & IFF_PROMISC) {
- flags |= RCR_PROMISC | RCR_ALMUL;
- } else if (ifp->if_flags & IFF_ALLMULTI) {
- flags |= RCR_ALMUL;
- } else {
- if (sn_getmcf(ifp, mcf)) {
- /* set filter */
- SMC_SELECT_BANK(sc, 3);
- CSR_WRITE_2(sc, MULTICAST1_REG_W,
- ((uint16_t)mcf[1] << 8) | mcf[0]);
- CSR_WRITE_2(sc, MULTICAST2_REG_W,
- ((uint16_t)mcf[3] << 8) | mcf[2]);
- CSR_WRITE_2(sc, MULTICAST3_REG_W,
- ((uint16_t)mcf[5] << 8) | mcf[4]);
- CSR_WRITE_2(sc, MULTICAST4_REG_W,
- ((uint16_t)mcf[7] << 8) | mcf[6]);
- } else {
- flags |= RCR_ALMUL;
- }
- }
- SMC_SELECT_BANK(sc, 0);
- CSR_WRITE_2(sc, RECV_CONTROL_REG_W, flags);
-}
-
-static int
-sn_getmcf(struct ifnet *ifp, uint8_t *mcf)
-{
- int i;
- uint32_t index, index2;
- uint8_t *af = mcf;
- struct ifmultiaddr *ifma;
-
- bzero(mcf, MCFSZ);
-
- if_maddr_rlock(ifp);
- CK_STAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
- if (ifma->ifma_addr->sa_family != AF_LINK) {
- if_maddr_runlock(ifp);
- return 0;
- }
- index = ether_crc32_le(LLADDR((struct sockaddr_dl *)
- ifma->ifma_addr), ETHER_ADDR_LEN) & 0x3f;
- index2 = 0;
- for (i = 0; i < 6; i++) {
- index2 <<= 1;
- index2 |= (index & 0x01);
- index >>= 1;
- }
- af[index2 >> 3] |= 1 << (index2 & 7);
- }
- if_maddr_runlock(ifp);
- return 1; /* use multicast filter */
-}
diff --git a/sys/dev/sn/if_sn_isa.c b/sys/dev/sn/if_sn_isa.c
deleted file mode 100644
index dd71e1f78ca0..000000000000
--- a/sys/dev/sn/if_sn_isa.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
- *
- * Copyright (c) 1999 M. Warner Losh
- * 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 ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#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 <net/ethernet.h>
-#include <net/if.h>
-#include <net/if_arp.h>
-
-#include <isa/isavar.h>
-
-#include <dev/sn/if_snvar.h>
-
-static int sn_isa_probe(device_t);
-static int sn_isa_attach(device_t);
-
-static int
-sn_isa_probe (device_t dev)
-{
- if (isa_get_logicalid(dev)) /* skip PnP probes */
- return (ENXIO);
- if (sn_probe(dev) != 0)
- return (ENXIO);
- return (0);
-}
-
-static int
-sn_isa_attach (device_t dev)
-{
- struct sn_softc *sc = device_get_softc(dev);
- int err;
-
- sc->dev = dev;
- err = sn_activate(dev);
- if (err) {
- sn_deactivate(dev);
- return (err);
- }
- err = sn_attach(dev);
- if (err)
- sn_deactivate(dev);
- return (err);
-}
-
-static device_method_t sn_isa_methods[] = {
- /* Device interface */
- DEVMETHOD(device_probe, sn_isa_probe),
- DEVMETHOD(device_attach, sn_isa_attach),
- DEVMETHOD(device_detach, sn_detach),
-
- { 0, 0 }
-};
-
-static driver_t sn_isa_driver = {
- "sn",
- sn_isa_methods,
- sizeof(struct sn_softc),
-};
-
-extern devclass_t sn_devclass;
-
-DRIVER_MODULE(sn, isa, sn_isa_driver, sn_devclass, 0, 0);
-MODULE_DEPEND(sn, isa, 1, 1, 1);
-MODULE_DEPEND(sn, ether, 1, 1, 1);
diff --git a/sys/dev/sn/if_sn_pccard.c b/sys/dev/sn/if_sn_pccard.c
deleted file mode 100644
index bd144a94ff63..000000000000
--- a/sys/dev/sn/if_sn_pccard.c
+++ /dev/null
@@ -1,332 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
- *
- * Copyright (c) 1999 M. Warner Losh <imp@village.org>
- * 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 ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-/*
- * Modifications for Megahertz X-Jack Ethernet Card (XJ-10BT)
- *
- * Copyright (c) 1996 by Tatsumi Hosokawa <hosokawa@jp.FreeBSD.org>
- * BSD-nomads, Tokyo, Japan.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/param.h>
-#include <sys/bus.h>
-#include <sys/kernel.h>
-#include <sys/module.h>
-#include <sys/socket.h>
-#include <sys/systm.h>
-
-#include <net/ethernet.h>
-#include <net/if.h>
-#include <net/if_arp.h>
-
-#include <machine/bus.h>
-#include <machine/resource.h>
-#include <sys/rman.h>
-
-#include <dev/pccard/pccardvar.h>
-#include <dev/pccard/pccard_cis.h>
-#include <dev/sn/if_snreg.h>
-#include <dev/sn/if_snvar.h>
-
-#include "card_if.h"
-#include "pccarddevs.h"
-
-typedef int sn_get_enaddr_t(device_t dev, u_char *eaddr);
-typedef int sn_activate_t(device_t dev);
-
-struct sn_sw
-{
- int type;
-#define SN_NORMAL 1
-#define SN_MEGAHERTZ 2
-#define SN_OSITECH 3
-#define SN_OSI_SOD 4
-#define SN_MOTO_MARINER 5
- char *typestr;
- sn_get_enaddr_t *get_mac;
- sn_activate_t *activate;
-};
-
-static sn_get_enaddr_t sn_pccard_normal_get_mac;
-static sn_activate_t sn_pccard_normal_activate;
-const static struct sn_sw sn_normal_sw = {
- SN_NORMAL, "plain",
- sn_pccard_normal_get_mac,
- sn_pccard_normal_activate
-};
-
-static sn_get_enaddr_t sn_pccard_megahertz_get_mac;
-static sn_activate_t sn_pccard_megahertz_activate;
-const static struct sn_sw sn_mhz_sw = {
- SN_MEGAHERTZ, "Megahertz",
- sn_pccard_megahertz_get_mac,
- sn_pccard_megahertz_activate
-};
-
-static const struct sn_product {
- struct pccard_product prod;
- const struct sn_sw *sw;
-} sn_pccard_products[] = {
- { PCMCIA_CARD(DSPSI, XJEM1144), &sn_mhz_sw },
- { PCMCIA_CARD(DSPSI, XJACK), &sn_normal_sw },
-/* { PCMCIA_CARD(MOTOROLA, MARINER), SN_MOTO_MARINER }, */
- { PCMCIA_CARD(NEWMEDIA, BASICS), &sn_normal_sw },
- { PCMCIA_CARD(MEGAHERTZ, VARIOUS), &sn_mhz_sw},
- { PCMCIA_CARD(MEGAHERTZ, XJEM3336), &sn_mhz_sw},
-/* { PCMCIA_CARD(OSITECH, TRUMP_SOD), SN_OSI_SOD }, */
-/* { PCMCIA_CARD(OSITECH, TRUMP_JOH), SN_OSITECH }, */
-/* { PCMCIA_CARD(PSION, GOLDCARD), SN_OSITECH }, */
-/* { PCMCIA_CARD(PSION, NETGLOBAL), SNI_OSI_SOD }, */
-/* { PCMCIA_CARD(PSION, NETGLOBAL2), SN_OSITECH }, */
- { PCMCIA_CARD(SMC, 8020BT), &sn_normal_sw },
- { PCMCIA_CARD(SMC, SMC91C96), &sn_normal_sw },
- { { NULL } }
-
-};
-
-static const struct sn_product *
-sn_pccard_lookup(device_t dev)
-{
-
- return ((const struct sn_product *)
- pccard_product_lookup(dev,
- (const struct pccard_product *)sn_pccard_products,
- sizeof(sn_pccard_products[0]), NULL));
-}
-
-static int
-sn_pccard_probe(device_t dev)
-{
- const struct sn_product *pp;
-
- if ((pp = sn_pccard_lookup(dev)) != NULL) {
- if (pp->prod.pp_name != NULL)
- device_set_desc(dev, pp->prod.pp_name);
- return 0;
- }
- return EIO;
-}
-
-static int
-sn_pccard_ascii_enaddr(const char *str, u_char *enet)
-{
- uint8_t digit;
- int i;
-
- memset(enet, 0, ETHER_ADDR_LEN);
- for (i = 0, digit = 0; i < (ETHER_ADDR_LEN * 2); i++) {
- if (str[i] >= '0' && str[i] <= '9')
- digit |= str[i] - '0';
- else if (str[i] >= 'a' && str[i] <= 'f')
- digit |= (str[i] - 'a') + 10;
- else if (str[i] >= 'A' && str[i] <= 'F')
- digit |= (str[i] - 'A') + 10;
- else
- return (0); /* Bogus digit!! */
-
- /* Compensate for ordering of digits. */
- if (i & 1) {
- enet[i >> 1] = digit;
- digit = 0;
- } else
- digit <<= 4;
- }
-
- return (1);
-}
-
-static int
-sn_pccard_normal_get_mac(device_t dev, u_char *eaddr)
-{
- int i, sum;
- const char *cisstr;
-
- pccard_get_ether(dev, eaddr);
- for (i = 0, sum = 0; i < ETHER_ADDR_LEN; i++)
- sum |= eaddr[i];
- if (sum == 0) {
- pccard_get_cis3_str(dev, &cisstr);
- if (cisstr && strlen(cisstr) == ETHER_ADDR_LEN * 2)
- sum = sn_pccard_ascii_enaddr(cisstr, eaddr);
- }
- if (sum == 0) {
- pccard_get_cis4_str(dev, &cisstr);
- if (cisstr && strlen(cisstr) == ETHER_ADDR_LEN * 2)
- sum = sn_pccard_ascii_enaddr(cisstr, eaddr);
- }
- return sum;
-}
-
-static int
-sn_pccard_normal_activate(device_t dev)
-{
- int err;
-
- err = sn_activate(dev);
- if (err)
- sn_deactivate(dev);
- return (err);
-}
-
-static int
-sn_pccard_megahertz_mac(const struct pccard_tuple *tuple, void *argp)
-{
- uint8_t *enaddr = argp;
- int i;
- uint8_t buffer[ETHER_ADDR_LEN * 2];
-
- /* Code 0x81 is Megahertz' special cis node contianing the MAC */
- if (tuple->code != 0x81)
- return (0);
-
- /* Make sure this is a sane node, as ASCII digits */
- if (tuple->length != ETHER_ADDR_LEN * 2 + 1)
- return (0);
-
- /* Copy the MAC ADDR and return success if decoded */
- for (i = 0; i < ETHER_ADDR_LEN * 2; i++)
- buffer[i] = pccard_tuple_read_1(tuple, i);
- return (sn_pccard_ascii_enaddr(buffer, enaddr));
-}
-
-static int
-sn_pccard_megahertz_get_mac(device_t dev, u_char *eaddr)
-{
-
- if (sn_pccard_normal_get_mac(dev, eaddr))
- return 1;
- /*
- * If that fails, try the special CIS tuple 0x81 that the
- * '3288 and '3336 cards have. That tuple specifies an ASCII
- * string, ala CIS3 or CIS4 in the 'normal' cards.
- */
- return (pccard_cis_scan(dev, sn_pccard_megahertz_mac, eaddr));
-}
-
-static int
-sn_pccard_megahertz_activate(device_t dev)
-{
- int err;
- struct sn_softc *sc = device_get_softc(dev);
- u_long start;
-
- err = sn_activate(dev);
- if (err) {
- sn_deactivate(dev);
- return (err);
- }
- /*
- * CIS resource is the modem one, so save it away.
- */
- sc->modem_rid = sc->port_rid;
- sc->modem_res = sc->port_res;
-
- /*
- * The MHz XJEM/CCEM series of cards just need to have any
- * old resource allocated for the ethernet side of things,
- * provided bit 0x80 isn't set in the address. That bit is
- * evidentially reserved for modem function and is how the
- * card steers the addresses internally.
- */
- sc->port_res = NULL;
- start = 0;
- do
- {
- sc->port_rid = 1;
- sc->port_res = bus_alloc_resource(dev, SYS_RES_IOPORT,
- &sc->port_rid, start, ~0, SMC_IO_EXTENT, RF_ACTIVE);
- if (sc->port_res == NULL)
- break;
- if (!(rman_get_start(sc->port_res) & 0x80))
- break;
- start = rman_get_start(sc->port_res) + SMC_IO_EXTENT;
- bus_release_resource(dev, SYS_RES_IOPORT, sc->port_rid,
- sc->port_res);
- } while (start < 0xff80);
- if (sc->port_res == NULL) {
- sn_deactivate(dev);
- return ENOMEM;
- }
- return 0;
-}
-
-static int
-sn_pccard_attach(device_t dev)
-{
- struct sn_softc *sc = device_get_softc(dev);
- u_char eaddr[ETHER_ADDR_LEN];
- int i, err;
- uint16_t w;
- u_char sum;
- const struct sn_product *pp;
-
- pp = sn_pccard_lookup(dev);
- sum = pp->sw->get_mac(dev, eaddr);
-
- /* Allocate resources so we can program the ether addr */
- sc->dev = dev;
- err = pp->sw->activate(dev);
- if (err != 0)
- return (err);
-
- if (sum) {
- printf("Programming sn card's addr\n");
- SMC_SELECT_BANK(sc, 1);
- for (i = 0; i < 3; i++) {
- w = (uint16_t)eaddr[i * 2] |
- (((uint16_t)eaddr[i * 2 + 1]) << 8);
- CSR_WRITE_2(sc, IAR_ADDR0_REG_W + i * 2, w);
- }
- }
- err = sn_attach(dev);
- if (err)
- sn_deactivate(dev);
- return (err);
-}
-
-static device_method_t sn_pccard_methods[] = {
- /* Device interface */
- DEVMETHOD(device_probe, sn_pccard_probe),
- DEVMETHOD(device_attach, sn_pccard_attach),
- DEVMETHOD(device_detach, sn_detach),
-
- { 0, 0 }
-};
-
-static driver_t sn_pccard_driver = {
- "sn",
- sn_pccard_methods,
- sizeof(struct sn_softc),
-};
-
-extern devclass_t sn_devclass;
-
-DRIVER_MODULE(sn, pccard, sn_pccard_driver, sn_devclass, 0, 0);
-MODULE_DEPEND(sn, ether, 1, 1, 1);
-PCCARD_PNP_INFO(sn_pccard_products);
diff --git a/sys/dev/sn/if_snreg.h b/sys/dev/sn/if_snreg.h
deleted file mode 100644
index bd4dc63010bd..000000000000
--- a/sys/dev/sn/if_snreg.h
+++ /dev/null
@@ -1,409 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-4-Clause
- *
- * Copyright (c) 1996 Gardner Buchanan <gbuchanan@shl.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Gardner Buchanan.
- * 4. The name of Gardner Buchanan may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-/*
- * This file contains register information and access macros for
- * the SMC91xxx chipset.
- *
- * Information contained in this file was obtained from the SMC91C92
- * and SMC91C94 manuals from SMC. You will need one of these in order
- * to make any meaningful changes to this driver. Information about
- * obtaining one can be found at http://www.smc.com in the components
- * division.
- *
- * This FreeBSD driver is derived in part from the smc9194 Linux driver
- * by Erik Stahlman and is Copyright (C) 1996 by Erik Stahlman.
- * It is also derived in part from the FreeBSD ep (3C509) driver which
- * is Copyright (c) 1993 Herb Peyerl (hpeyerl@novatel.ca) All rights
- * reserved.
- *
- */
-#ifndef _IF_SNREG_H_
-#define _IF_SNREG_H_
-
-/*
- * Wait time for memory to be free. This probably shouldn't be
- * tuned that much, as waiting for this means nothing else happens
- * in the system
- */
-#define MEMORY_WAIT_TIME 1000
-
-
-/* The SMC91xxx uses 16 I/O ports
- */
-#define SMC_IO_EXTENT 16
-
-
-/*
- * A description of the SMC registers is probably in order here,
- * although for details, the SMC datasheet is invaluable.
- * The data sheet I (GB) am using is "SMC91C92 Single Chip Ethernet
- * Controller With RAM", Rev. 12/0/94. Constant definitions I give
- * here are loosely based on the mnemonic names given to them in the
- * data sheet, but there are many exceptions.
- *
- * Basically, the chip has 4 banks of registers (0 to 3), which
- * are accessed by writing a number into the BANK_SELECT register
- * (I also use a SMC_SELECT_BANK macro for this). Registers are
- * either Byte or Word sized. My constant definitions end in _B
- * or _W as appropriate.
- *
- * The banks are arranged so that for most purposes, bank 2 is all
- * that is needed for normal run time tasks.
- */
-
-/*
- * Bank Select Register. This also doubles as
- * a chip identification register. This register
- * is mapped at the same position in all banks.
- */
-#define BANK_SELECT_REG_W 0x0e
-#define BSR_DETECT_MASK 0xff00
-#define BSR_DETECT_VALUE 0x3300
-
-
-/* BANK 0
- */
-
-/* Transmit Control Register controls some aspects of the transmit
- * behavior of the Ethernet Protocol Handler.
- */
-#define TXMIT_CONTROL_REG_W 0x00
-
-#define TCR_ENABLE 0x0001 /* if this is 1, we can transmit */
-#define TCR_LOOP 0x0002 /* Enable internal analogue loopback */
-#define TCR_FORCOL 0x0004 /* Force Collision on next TX */
-#define TCR_PAD_ENABLE 0x0080 /* Pad short packets to 64 bytes */
-#define TCR_NOCRC 0x0100 /* Do not append CRC */
-#define TCR_MON_CSN 0x0400 /* monitors the carrier status */
-#define TCR_FDUPLX 0x0800 /* receive packets sent out */
-#define TCR_STP_SQET 0x1000 /* stop transmitting if Signal quality error */
-#define TCR_EPH_LOOP 0x2000 /* Enable internal digital loopback */
-
-
-/* Status of the last transmitted frame and instantaneous status of
- * the Ethernet Protocol Handler jumbled together. In auto-release
- * mode this information is simply discarded after each TX. This info
- * is copied to the status word of in-memory packets after transmit
- * where relevant statuses can be checked.
- */
-#define EPH_STATUS_REG_W 0x02
-
-#define EPHSR_TX_SUC 0x0001 /* Transmit was successful */
-#define EPHSR_SNGLCOL 0x0002 /* Single collision occurred */
-#define EPHSR_MULCOL 0x0004 /* Multiple Collisions occurred */
-#define EPHSR_LTX_MULT 0x0008 /* Transmit was a multicast */
-#define EPHSR_16COL 0x0010 /* 16 Collisions occurred, TX disabled */
-#define EPHSR_SQET 0x0020 /* SQE Test failed, TX disabled */
-#define EPHSR_LTX_BRD 0x0040 /* Transmit was a broadcast */
-#define EPHSR_DEFR 0x0080 /* TX deferred due to carrier det. */
-#define EPHSR_LATCOL 0x0200 /* Late collision detected, TX disabled */
-#define EPHSR_LOST_CAR 0x0400 /* Lost carrier sense, TX disabled */
-#define EPHSR_EXC_DEF 0x0800 /* Excessive deferrals in TX >2 MAXETHER
- * times */
-#define EPHSR_CTR_ROL 0x1000 /* Some ECR Counter(s) rolled over */
-#define EPHSR_RX_OVRN 0x2000 /* Receiver overrun, packets dropped */
-#define EPHSR_LINK_OK 0x4000 /* Link integrity is OK */
-#define EPHSR_TXUNRN 0x8000 /* Transmit underrun */
-
-
-/* Receiver Control Register controls some aspects of the receive
- * behavior of the Ethernet Protocol Handler.
- */
-#define RECV_CONTROL_REG_W 0x04
-
-#define RCR_RX_ABORT 0x0001 /* Received huge packet */
-#define RCR_PROMISC 0x0002 /* enable promiscuous mode */
-#define RCR_ALMUL 0x0004 /* receive all multicast packets */
-#define RCR_ENABLE 0x0100 /* IFF this is set, we can receive packets */
-#define RCR_STRIP_CRC 0x0200 /* strips CRC */
-#define RCR_GAIN_BITS 0x0c00 /* PLL Gain control (for testing) */
-#define RCR_FILT_CAR 0x4000 /* Enable 12 bit carrier filter */
-#define RCR_SOFTRESET 0x8000 /* Resets the EPH logic */
-
-
-/* TX Statistics counters
- */
-#define COUNTER_REG_W 0x06
-
-#define ECR_COLN_MASK 0x000f /* Vanilla collisions */
-#define ECR_MCOLN_MASK 0x00f0 /* Multiple collisions */
-#define ECR_DTX_MASK 0x0f00 /* Deferred transmits */
-#define ECR_EXDTX_MASK 0xf000 /* Excessively deferred transmits */
-
-/* Memory Information
- */
-#define MEM_INFO_REG_W 0x08
-
-#define MIR_FREE_MASK 0xff00 /* Free memory pages available */
-#define MIR_TOTAL_MASK 0x00ff /* Total memory pages available */
-
-/* Memory Configuration
- */
-#define MEM_CFG_REG_W 0x0a
-
-#define MCR_TXRSV_MASK 0x001f /* Count of pages reserved for transmit */
-
-
-/* Bank 0, Register 0x0c is unised in the SMC91C92
- */
-
-
-/* BANK 1
- */
-
-/* Adapter configuration
- */
-#define CONFIG_REG_W 0x00
-
-#define CR_INT_SEL0 0x0002 /* Interrupt selector */
-#define CR_INT_SEL1 0x0004 /* Interrupt selector */
-#define CR_DIS_LINK 0x0040 /* Disable 10BaseT Link Test */
-#define CR_16BIT 0x0080 /* Bus width */
-#define CR_AUI_SELECT 0x0100 /* Use external (AUI) Transceiver */
-#define CR_SET_SQLCH 0x0200 /* Squelch level */
-#define CR_FULL_STEP 0x0400 /* AUI signalling mode */
-#define CR_NOW_WAIT_ST 0x1000 /* Disable bus wait states */
-
-/* The contents of this port are used by the adapter
- * to decode its I/O address. We use it as a varification
- * that the adapter is detected properly when probing.
- */
-#define BASE_ADDR_REG_W 0x02 /* The select IO Base addr. */
-
-/* These registers hold the Ethernet MAC address.
- */
-#define IAR_ADDR0_REG_W 0x04 /* My Ethernet address */
-#define IAR_ADDR1_REG_W 0x06 /* My Ethernet address */
-#define IAR_ADDR2_REG_W 0x08 /* My Ethernet address */
-
-/* General purpose register used for talking to the EEPROM.
- */
-#define GENERAL_REG_W 0x0a
-
-/* Control register used for talking to the EEPROM and
- * setting some EPH functions.
- */
-#define CONTROL_REG_W 0x0c
-#define CTR_STORE 0x0001 /* Store something to EEPROM */
-#define CTR_RELOAD 0x0002 /* Read EEPROM into registers */
-#define CTR_EEPROM_SEL 0x0004 /* Select registers for Reload/Store */
-#define CTR_TE_ENABLE 0x0020 /* Enable TX Error detection via EPH_INT */
-#define CTR_CR_ENABLE 0x0040 /* Enable Counter Rollover via EPH_INT */
-#define CTR_LE_ENABLE 0x0080 /* Enable Link Error detection via EPH_INT */
-#define CTR_AUTO_RELEASE 0x0800 /* Enable auto release mode for TX */
-#define CTR_POWERDOWN 0x2000 /* Enter powerdown mode */
-#define CTR_RCV_BAD 0x4000 /* Enable receipt of frames with bad CRC */
-
-
-/* BANK 2
- */
-
-/* Memory Management Unit Control Register
- * Controls allocation of memory to receive and
- * transmit functions.
- */
-#define MMU_CMD_REG_W 0x00
-#define MMUCR_BUSY 0x0001 /* MMU busy performing a release */
-
-/* MMU Commands:
- */
-#define MMUCR_NOP 0x0000 /* Do nothing */
-#define MMUCR_ALLOC 0x0020 /* Or with number of 256 byte packets - 1 */
-#define MMUCR_RESET 0x0040 /* Reset MMU State */
-#define MMUCR_REMOVE 0x0060 /* Dequeue (but not free) current RX packet */
-#define MMUCR_RELEASE 0x0080 /* Dequeue and free the current RX packet */
-#define MMUCR_FREEPKT 0x00a0 /* Release packet in PNR register */
-#define MMUCR_ENQUEUE 0x00c0 /* Enqueue the packet for transmit */
-#define MMUCR_RESETTX 0x00e0 /* Reset transmit queues */
-
-/* Packet Number at TX Area
- */
-#define PACKET_NUM_REG_B 0x02
-
-/* Packet number resulting from MMUCR_ALLOC
- */
-#define ALLOC_RESULT_REG_B 0x03
-#define ARR_FAILED 0x80
-
-/* Transmit and receive queue heads
- */
-#define FIFO_PORTS_REG_W 0x04
-#define FIFO_REMPTY 0x8000
-#define FIFO_TEMPTY 0x0080
-#define FIFO_RX_MASK 0x7f00
-#define FIFO_TX_MASK 0x007f
-
-/* The address within the packet for reading/writing. The
- * PTR_RCV bit is tricky. When PTR_RCV==1, the packet number
- * to be read is found in the FIFO_PORTS_REG_W, FIFO_RX_MASK.
- * When PTR_RCV==0, the packet number to be written is found
- * in the PACKET_NUM_REG_B.
- */
-#define POINTER_REG_W 0x06
-#define PTR_READ 0x2000 /* Intended access mode */
-#define PTR_AUTOINC 0x4000 /* Do auto inc after read/write */
-#define PTR_RCV 0x8000 /* FIFO_RX is packet, otherwise PNR is packet */
-
-/* Data I/O register to be used in conjunction with
- * The pointer register to read and write data from the
- * card. The same register can be used for byte and word
- * ops.
- */
-#define DATA_REG_W 0x08
-#define DATA_REG_B 0x08
-#define DATA_1_REG_B 0x08
-#define DATA_2_REG_B 0x0a
-
-/* Sense interrupt status (READ)
- */
-#define INTR_STAT_REG_B 0x0c
-
-/* Acknowledge interrupt sources (WRITE)
- */
-#define INTR_ACK_REG_B 0x0c
-
-/* Interrupt mask. Bit set indicates interrupt allowed.
- */
-#define INTR_MASK_REG_B 0x0d
-
-/* Interrupts
- */
-#define IM_RCV_INT 0x01 /* A packet has been received */
-#define IM_TX_INT 0x02 /* Packet TX complete */
-#define IM_TX_EMPTY_INT 0x04 /* No packets left to TX */
-#define IM_ALLOC_INT 0x08 /* Memory allocation completed */
-#define IM_RX_OVRN_INT 0x10 /* Receiver was overrun */
-#define IM_EPH_INT 0x20 /* Misc. EPH conditions (see CONTROL_REG_W) */
-#define IM_ERCV_INT 0x40 /* not on SMC9192 */
-
-/* BANK 3
- */
-
-/* Multicast subscriptions.
- * The multicast handling in the SMC90Cxx is quite complicated. A table
- * of multicast address subscriptions is provided and a clever way of
- * speeding the search of that table by hashing is implemented in the
- * hardware. I have ignored this and simply subscribed to all multicasts
- * and let the kernel deal with the results.
- */
-#define MULTICAST1_REG_W 0x00
-#define MULTICAST2_REG_W 0x02
-#define MULTICAST3_REG_W 0x04
-#define MULTICAST4_REG_W 0x06
-
-/* These registers do not exist on SMC9192, or at least
- * are not documented in the SMC91C92 data sheet.
- * The REVISION_REG_W register does however seem to work.
- */
-#define MGMT_REG_W 0x08
-#define REVISION_REG_W 0x0a /* (hi: chip id low: rev #) */
-#define ERCV_REG_W 0x0c
-
-/* These are constants expected to be found in the
- * chip id register.
- */
-#define CHIP_9190 3
-#define CHIP_9194 4
-#define CHIP_9195 5
-#define CHIP_91100 7
-#define CHIP_91100FD 8
-
-/* When packets are stuffed into the card or sucked out of the card
- * they are set up more or less as follows:
- *
- * Addr msbyte lsbyte
- * 00 SSSSSSSS SSSSSSSS - STATUS-WORD 16 bit TX or RX status
- * 02 RRRRR - RESERVED (unused)
- * 02 CCC CCCCCCCC - BYTE COUNT (RX: always even, TX: bit 0 ignored)
- * 04 DDDDDDDD DDDDDDDD - DESTINATION ADDRESS
- * 06 DDDDDDDD DDDDDDDD (48 bit Ethernet MAC Address)
- * 08 DDDDDDDD DDDDDDDD
- * 0A SSSSSSSS SSSSSSSS - SOURCE ADDRESS
- * 0C SSSSSSSS SSSSSSSS (48 bit Ethernet MAC Address)
- * 0E SSSSSSSS SSSSSSSS
- * 10 PPPPPPPP PPPPPPPP
- * .. PPPPPPPP PPPPPPPP
- * C-2 CCCCCCCC - CONTROL BYTE
- * C-2 PPPPPPPP - Last data byte (If odd length)
- *
- * The STATUS_WORD is derived from the EPH_STATUS_REG_W register
- * during transmit and is composed of another set of bits described
- * below during receive.
- */
-
-
-/* Receive status bits. These values are found in the status word
- * field of a received packet. For receive packets I use the RS_ODDFRAME
- * to detect whether a frame has an extra byte on it. The CTLB_ODD
- * bit of the control byte tells the same thing.
- */
-#define RS_MULTICAST 0x0001 /* Packet is multicast */
-#define RS_HASH_MASK 0x007e /* Mask of multicast hash value */
-#define RS_TOOSHORT 0x0400 /* Frame was a runt, <64 bytes */
-#define RS_TOOLONG 0x0800 /* Frame was giant, >1518 */
-#define RS_ODDFRAME 0x1000 /* Frame is odd lengthed */
-#define RS_BADCRC 0x2000 /* Frame had CRC error */
-#define RS_ALGNERR 0x8000 /* Frame had alignment error */
-#define RS_ERRORS (RS_ALGNERR | RS_BADCRC | RS_TOOLONG | RS_TOOSHORT)
-
-#define RLEN_MASK 0x07ff /* Significant length bits in RX length */
-
-/* The control byte has the following significant bits.
- * For transmit, the CTLB_ODD bit specifies whether an extra byte
- * is present in the frame. Bit 0 of the byte count field is
- * ignored. I just pad every frame to even length and forget about
- * it.
- */
-#define CTLB_CRC 0x10 /* Add CRC for this packet (TX only) */
-#define CTLB_ODD 0x20 /* The packet length is ODD */
-
-
-/*
- * I define some macros to make it easier to do somewhat common
- * or slightly complicated, repeated tasks.
- */
-
-/* Select a register bank, 0 to 3
- */
-#define SMC_SELECT_BANK(sc, x) { CSR_WRITE_2(sc, BANK_SELECT_REG_W, (x)); }
-
-/* Define a small delay for the reset
- */
-#define SMC_DELAY(sc) { CSR_READ_2(sc, RECV_CONTROL_REG_W); \
- CSR_READ_2(sc, RECV_CONTROL_REG_W); \
- CSR_READ_2(sc, RECV_CONTROL_REG_W); }
-
-#endif /* _IF_SNREG_H_ */
diff --git a/sys/dev/sn/if_snvar.h b/sys/dev/sn/if_snvar.h
deleted file mode 100644
index acc8da22795b..000000000000
--- a/sys/dev/sn/if_snvar.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
- *
- * Copyright (c) 1999 M. Warner Losh <imp@village.org>
- * 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 ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _IF_SNVAR_H
-#define _IF_SNVAR_H
-
-#include <net/if_arp.h>
-
-struct sn_softc {
- struct ifnet *ifp;
- struct mtx sc_mtx;
- struct callout watchdog;
- int timer;
- int pages_wanted; /* Size of outstanding MMU ALLOC */
- int intr_mask; /* Most recently set interrupt mask */
- device_t dev;
- void *intrhand;
- struct resource *irq_res;
- int irq_rid;
- struct resource *port_res;
- int port_rid;
- struct resource *modem_res; /* Extra resource for modem */
- int modem_rid;
-};
-
-int sn_probe(device_t);
-int sn_attach(device_t);
-int sn_detach(device_t);
-void sn_intr(void *);
-
-int sn_activate(device_t);
-void sn_deactivate(device_t);
-
-#define CSR_READ_1(sc, off) (bus_read_1((sc)->port_res, off))
-#define CSR_READ_2(sc, off) (bus_read_2((sc)->port_res, off))
-#define CSR_WRITE_1(sc, off, val) \
- bus_write_1((sc)->port_res, off, val)
-#define CSR_WRITE_2(sc, off, val) \
- bus_write_2((sc)->port_res, off, val)
-#define CSR_WRITE_MULTI_1(sc, off, addr, count) \
- bus_write_multi_1((sc)->port_res, off, addr, count)
-#define CSR_WRITE_MULTI_2(sc, off, addr, count) \
- bus_write_multi_2((sc)->port_res, off, addr, count)
-#define CSR_READ_MULTI_1(sc, off, addr, count) \
- bus_read_multi_1((sc)->port_res, off, addr, count)
-#define CSR_READ_MULTI_2(sc, off, addr, count) \
- bus_read_multi_2((sc)->port_res, off, addr, count)
-
-#define SN_LOCK(_sc) mtx_lock(&(_sc)->sc_mtx)
-#define SN_UNLOCK(_sc) mtx_unlock(&(_sc)->sc_mtx)
-#define SN_LOCK_INIT(_sc) \
- mtx_init(&_sc->sc_mtx, device_get_nameunit(_sc->dev), \
- MTX_NETWORK_LOCK, MTX_DEF)
-#define SN_LOCK_DESTROY(_sc) mtx_destroy(&_sc->sc_mtx);
-#define SN_ASSERT_LOCKED(_sc) mtx_assert(&_sc->sc_mtx, MA_OWNED);
-#define SN_ASSERT_UNLOCKED(_sc) mtx_assert(&_sc->sc_mtx, MA_NOTOWNED);
-
-#endif /* _IF_SNVAR_H */
diff --git a/sys/dev/sn/ositech.h b/sys/dev/sn/ositech.h
deleted file mode 100644
index c33690861b24..000000000000
--- a/sys/dev/sn/ositech.h
+++ /dev/null
@@ -1,384 +0,0 @@
-/*
- This file contains the firmware of Seven of Diamonds from OSITECH.
- (Special thanks to Kevin MacPherson of OSITECH)
- (Thanks to Ositech Communications for permitting for BSDL distribution)
-
- SPDX-License-Identifier: BSD-2-Clause
-
-Copyright 2002 Ositech Communications Inc. 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 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 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$
-
-*/
-
- static const u_char __Xilinx7OD[] = {
- 0xFF, 0x04, 0xA0, 0x36, 0xF3, 0xEC, 0xFF, 0xFF, 0xFF, 0xDF, 0xFB, 0xFF,
- 0xF3, 0xFF, 0xFF, 0xFF,
- 0xEF, 0x3F, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x7F, 0xFE, 0xFF,
- 0xCE, 0xFE, 0xFE, 0xFE,
- 0xFE, 0xDE, 0xBD, 0xDD, 0xFD, 0xFF, 0xFD, 0xCF, 0xF7, 0xBF, 0x7F, 0xFF,
- 0x7F, 0x3F, 0xFE, 0xBF,
- 0xFF, 0xFF, 0xFF, 0xBC, 0xFF, 0xFF, 0xBD, 0xB5, 0x7F, 0x7F, 0xBF, 0xBF,
- 0x7F, 0xFF, 0xEF, 0xFF,
- 0xFF, 0xFF, 0xFB, 0xFF, 0xF7, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xDE,
- 0xFE, 0xFE, 0xFA, 0xDE,
- 0xBD, 0xFD, 0xED, 0xFD, 0xFD, 0xCF, 0xEF, 0xEF, 0xEF, 0xEF, 0xC7, 0xDF,
- 0xDF, 0xDF, 0xDF, 0xDF,
- 0xFF, 0x7E, 0xFE, 0xFD, 0x7D, 0x6D, 0xEE, 0xFE, 0x7C, 0xFB, 0xF4, 0xFB,
- 0xCF, 0xDB, 0xDF, 0xFF,
- 0xFF, 0xBB, 0x7F, 0xFF, 0x7F, 0xFF, 0xF7, 0xFF, 0x9E, 0xBF, 0x3B, 0xBF,
- 0xBF, 0x7F, 0x7F, 0x7F,
- 0x7E, 0x6F, 0xDF, 0xEF, 0xF5, 0xF6, 0xFD, 0xF6, 0xF5, 0xED, 0xEB, 0xFF,
- 0xEF, 0xEF, 0xEF, 0x7E,
- 0x7F, 0x7F, 0x6F, 0x7F, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xEF, 0xBF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBC, 0x1F, 0x1F, 0xEE, 0xFF, 0xBC,
- 0xB7, 0xFF, 0xDF, 0xFF,
- 0xDF, 0xEF, 0x3B, 0xE3, 0xD3, 0xFF, 0xFB, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF,
- 0xFF, 0xBA, 0xBF, 0x2D,
- 0xDB, 0xBD, 0xFD, 0xDB, 0xDF, 0xFA, 0xFB, 0xFF, 0xEF, 0xFB, 0xDB, 0xF3,
- 0xFF, 0xDF, 0xFD, 0x7F,
- 0xEF, 0xFB, 0xFF, 0xFF, 0xBE, 0xBF, 0x27, 0xBA, 0xFE, 0xFB, 0xDF, 0xFF,
- 0xF6, 0xFF, 0xFF, 0xEF,
- 0xFB, 0xDB, 0xF3, 0xD9, 0x9A, 0x3F, 0xFF, 0xAF, 0xBF, 0xFF, 0xFF, 0xBE,
- 0x3F, 0x37, 0xBD, 0x96,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAE, 0xFB, 0xF3, 0xF3, 0xEB, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xF7, 0xFA, 0xBC, 0xAE, 0xFE, 0xBE, 0xFE, 0xBB, 0x7F, 0xFD, 0xFF,
- 0x7F, 0xEF, 0xF7, 0xFB,
- 0xBB, 0xD7, 0xF7, 0x7F, 0xFF, 0xF7, 0xFF, 0xFF, 0xF7, 0xBC, 0xED, 0xFD,
- 0xBD, 0x9D, 0x7D, 0x7B,
- 0xFB, 0x7B, 0x7B, 0xFB, 0xAF, 0xFF, 0xFE, 0xFD, 0xFD, 0xFE, 0xFE, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xF7,
- 0xAA, 0xB9, 0xBF, 0x8F, 0xBF, 0xDF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xCF,
- 0xFB, 0xEB, 0xCB, 0xEB,
- 0xEE, 0xFF, 0xFF, 0xD7, 0xFF, 0xFF, 0xFF, 0x3E, 0x33, 0x3F, 0x1C, 0x7C,
- 0xFC, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xCF, 0xD3, 0xF3, 0xE3, 0xF3, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xEB, 0xFE, 0x35,
- 0x3F, 0x3D, 0xFD, 0xFD, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xEF, 0x6F, 0xE3,
- 0xE3, 0xE3, 0xEF, 0xFF,
- 0xFF, 0xDF, 0xFF, 0xFF, 0xF7, 0xFE, 0x3E, 0x5E, 0xFE, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFD, 0xFF, 0xFF,
- 0xAF, 0xCF, 0xF2, 0xCB, 0xCF, 0x8E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
- 0xFC, 0x3E, 0x1F, 0x9E,
- 0xAD, 0xFD, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xEF, 0xFF, 0xB3, 0xF7, 0xE7,
- 0xF7, 0xFA, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xEE, 0xEB, 0xAB, 0xAF, 0x9F, 0xE3, 0x7F, 0xFF, 0xDE,
- 0xFF, 0x7F, 0xEE, 0xFF,
- 0xFF, 0xFB, 0x3A, 0xFA, 0xFF, 0xF2, 0x77, 0xFF, 0xFF, 0xF7, 0xFE, 0xFF,
- 0xFE, 0xBD, 0xAE, 0xDE,
- 0x7D, 0x7D, 0xFD, 0xFF, 0xBF, 0xEE, 0xFF, 0xFD, 0xFF, 0xDB, 0xFB, 0xFF,
- 0xF7, 0xEF, 0xFB, 0xFF,
- 0xFF, 0xFE, 0xFF, 0x2D, 0xAF, 0xB9, 0xFD, 0x79, 0xFB, 0xFA, 0xFF, 0xBF,
- 0xEF, 0xFF, 0xFF, 0x91,
- 0xFA, 0xFB, 0xDF, 0xF7, 0xF7, 0xFF, 0xFF, 0xFF, 0xFC, 0xCF, 0x37, 0xBF,
- 0xBF, 0xFF, 0x7F, 0x7F,
- 0xFF, 0xFF, 0xFF, 0xAF, 0xFF, 0xFF, 0xF3, 0xFB, 0xFB, 0xFF, 0xF5, 0xEF,
- 0xFF, 0xFF, 0xF7, 0xFA,
- 0xFF, 0xFF, 0xEE, 0xFA, 0xFE, 0xFB, 0x55, 0xDD, 0xFF, 0x7F, 0xAF, 0xFE,
- 0xFF, 0xFB, 0xFB, 0xF5,
- 0xFF, 0xF7, 0xEF, 0xFF, 0xFF, 0xFF, 0xBE, 0xBD, 0xBD, 0xBD, 0xBD, 0x7D,
- 0x7B, 0x7B, 0x7B, 0x7B,
- 0xFB, 0xAE, 0xFF, 0xFD, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xF7, 0xDA, 0xB7, 0x61,
- 0xFF, 0xB9, 0x59, 0xF3, 0x73, 0xF3, 0xDF, 0x7F, 0x6F, 0xDF, 0xEF, 0xF7,
- 0xEB, 0xEB, 0xD7, 0xFF,
- 0xD7, 0xFF, 0xFF, 0xF7, 0xFE, 0x7F, 0xFB, 0x3E, 0x38, 0x73, 0xF6, 0x7F,
- 0xFC, 0xFF, 0xFF, 0xCF,
- 0xFF, 0xB7, 0xFB, 0xB3, 0xB3, 0x67, 0xFF, 0xE7, 0xFD, 0xFF, 0xEF, 0xF6,
- 0x7F, 0xB7, 0xBC, 0xF5,
- 0x7B, 0xF6, 0xF7, 0xF5, 0xFF, 0xFF, 0xEF, 0xFF, 0xF7, 0xFF, 0xF7, 0xCE,
- 0xE7, 0xFF, 0x9F, 0xFF,
- 0xFF, 0xF5, 0xFE, 0x7D, 0xFF, 0x5F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xEF, 0xFF, 0xF6,
- 0xCB, 0xDB, 0xEE, 0xFE, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xBE,
- 0x1E, 0x3E, 0xFE, 0xFF,
- 0x7D, 0xFE, 0xFF, 0xFF, 0xEF, 0xBF, 0xE7, 0xFF, 0xE3, 0xE3, 0xFF, 0xDF,
- 0xE7, 0xFF, 0xFF, 0xFF,
- 0xB8, 0xEF, 0xB7, 0x2F, 0xEE, 0xFF, 0xDF, 0xFF, 0xBF, 0xFF, 0x7F, 0xEF,
- 0xEB, 0xBF, 0xA3, 0xD3,
- 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xBE, 0xFD, 0x3F, 0xCF, 0xFD,
- 0xFB, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xAF, 0xFB, 0xBF, 0xBB, 0xBF, 0xDB, 0xFD, 0xFB, 0xFF, 0xFF,
- 0xFF, 0xFF, 0x3E, 0xFE,
- 0x3F, 0xBA, 0xBA, 0xFE, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xEF, 0xC3, 0x7F,
- 0xB2, 0x9B, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0x3C, 0xFF, 0x3F, 0x3C, 0xFF, 0xFE, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xAF, 0xF3, 0xFE, 0xF3, 0xE3, 0xEB, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xF7,
- 0x9A, 0xFE, 0xAF, 0x9E,
- 0xBE, 0xFE, 0xFF, 0xDF, 0xFF, 0xFF, 0x7B, 0xEF, 0xF7, 0xBF, 0xFB, 0xFB,
- 0xFB, 0xFF, 0xFF, 0x7F,
- 0xFF, 0xFF, 0xFF, 0xBC, 0xBD, 0xFD, 0xBD, 0xDD, 0x7D, 0x7B, 0x7B, 0x7B,
- 0x7B, 0xFB, 0xAE, 0xFF,
- 0xFF, 0xFF, 0xFE, 0xFE, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xF7, 0x9A, 0xFF,
- 0x9F, 0xFF, 0xAF, 0xEF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xCF, 0xF3, 0xFF, 0xEB, 0xFF, 0xEB, 0xFF,
- 0xFF, 0xBF, 0xFF, 0xFF,
- 0xEF, 0xFE, 0xFF, 0x37, 0xFC, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xCF, 0xEF, 0xFD, 0xF3,
- 0xFF, 0xEE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6E, 0xFD, 0x2F, 0xFD,
- 0xFF, 0xFD, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xEF, 0xCF, 0xFF, 0xF3, 0xBF, 0x69, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFE,
- 0xFB, 0x9F, 0xFF, 0xBF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x87,
- 0xFE, 0xDA, 0xEF, 0xCF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xEF, 0xBF, 0xEF, 0xEF, 0xFD,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xEF, 0xFD, 0xFF, 0x7B, 0xFF, 0xEB, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xEB, 0xF8, 0xFF, 0xEF,
- 0xAF, 0xFF, 0xFF, 0xBD, 0xFF, 0xFF, 0xFF, 0x7F, 0xEE, 0x7F, 0xEF, 0xFF,
- 0xBB, 0xFF, 0xBF, 0xFB,
- 0xFF, 0xFF, 0xFF, 0xF7, 0xF6, 0xFB, 0xBD, 0xFD, 0xDD, 0xF5, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xAF,
- 0xFF, 0x5F, 0xF5, 0xDF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF6,
- 0xF3, 0xFF, 0xDE, 0xFE,
- 0xEF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xDE, 0xDF, 0x5F, 0xDF,
- 0xFD, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFE, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xAF, 0xFF, 0xFF,
- 0xEF, 0xED, 0xFF, 0xDF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xDA, 0xBD, 0xBE,
- 0xAE, 0xFE, 0x7F, 0xFD,
- 0xDF, 0xFF, 0xFF, 0x7F, 0xEF, 0xFF, 0xFB, 0xFB, 0xFB, 0x7F, 0xF7, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xF7,
- 0xBC, 0xFD, 0xBD, 0xBD, 0xBD, 0xFD, 0x7B, 0x7B, 0x7B, 0x7B, 0xFB, 0xAE,
- 0xFF, 0xFF, 0xFD, 0xFF,
- 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0x9F, 0xBF, 0xBF, 0xCF,
- 0x7F, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xAF, 0xFF, 0xEB, 0xEB, 0xEB, 0xFF, 0xD7, 0xFE, 0xFF, 0xFF,
- 0xBF, 0xE7, 0xFE, 0xBF,
- 0x7F, 0xFC, 0xFF, 0xFF, 0xED, 0xFF, 0xFF, 0xFF, 0xFF, 0x4F, 0xFF, 0xFB,
- 0xFB, 0xFF, 0xFF, 0xDD,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xBD, 0xDF, 0x9D, 0xFD, 0xDF, 0xB9,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xEF, 0xFF, 0xFB, 0xEF, 0xEB, 0xFF, 0xDE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xF6, 0x9F, 0xFF, 0xFC,
- 0xFE, 0xFB, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xDF, 0xFA, 0xCD, 0xCF,
- 0xBF, 0x9F, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xF7, 0xFE, 0xBF, 0xFF, 0xDF, 0xEF, 0x5F, 0xFF, 0xFF, 0xFF,
- 0xFF, 0x7F, 0x6F, 0xFF,
- 0xBB, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0xFF,
- 0x5F, 0xFF, 0xBF, 0xBF,
- 0xF9, 0xFF, 0xFF, 0xFF, 0x7F, 0x6E, 0x7B, 0xFF, 0xEF, 0xFD, 0xEB, 0xDF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xF7, 0xB6, 0x3E, 0xFC, 0xFD, 0xBF, 0x7E, 0xFB, 0xFF, 0xFF, 0xFF, 0xF7,
- 0xEF, 0xF7, 0xF3, 0xF7,
- 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6E, 0x35, 0x79, 0xFF,
- 0xBF, 0xFC, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xEF, 0xFB, 0x53, 0xDF, 0xFF, 0xEB, 0xBF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xBC,
- 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0xF5,
- 0xFF, 0xF7, 0xFF, 0xFB,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBA, 0xAA, 0xEE, 0xFE, 0x3F, 0x7D,
- 0xFD, 0xFF, 0xFF, 0xFF,
- 0x7F, 0xAF, 0x77, 0xFB, 0xFB, 0xFF, 0xFB, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xF7, 0xBE, 0xBD, 0xBD,
- 0xBD, 0xBD, 0xFD, 0x7B, 0x7B, 0x7B, 0x7B, 0xFB, 0xAE, 0xFF, 0xEF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFC,
- 0xFF, 0xFF, 0xFF, 0xFF, 0x9A, 0xD9, 0xB8, 0xFF, 0xFF, 0x79, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xCF,
- 0xFB, 0xFF, 0xEB, 0xFF, 0xEB, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xDE,
- 0xF8, 0xFB, 0xFE, 0x3F,
- 0xFB, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xAD, 0xBF, 0xFA, 0xFF, 0x73,
- 0xDF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0x3A, 0xF5, 0xB7, 0xFC, 0x3F, 0xF9, 0xFD, 0xFF, 0xFF, 0xFF,
- 0x7F, 0xEF, 0xF3, 0xFF,
- 0xBF, 0xFE, 0xF3, 0x9F, 0xFE, 0xFF, 0xFF, 0xFF, 0xF7, 0x3E, 0xFF, 0xFF,
- 0xFF, 0xBF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0xD3, 0xFE, 0xDB, 0xFF, 0xDB, 0xDF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0x3E, 0xFF, 0xBF, 0xFF, 0x7F, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F,
- 0xF3, 0xFF, 0xED, 0xFF,
- 0xF7, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xF6, 0x3C, 0xFE, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0x9F, 0xEF, 0xEF, 0xD1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0x7E, 0xBF,
- 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBB, 0xEF, 0xDF, 0xF1,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEE, 0x3E, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xBF,
- 0xEF, 0xFD, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF,
- 0xFC, 0x3E, 0xFE, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2E, 0xEF, 0xF3, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xF7, 0xBA, 0xBE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0x7F, 0xAF, 0xFB,
- 0xFB, 0xFD, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF2, 0xD6, 0xED,
- 0xBD, 0xBD, 0xBD, 0x7D,
- 0x7B, 0x7B, 0x7B, 0x7B, 0xFB, 0xAF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0x92, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F,
- 0xAF, 0xEB, 0xEB, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFE, 0x2E, 0xFE, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0x4F, 0xEF, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFE,
- 0x3C, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xCE,
- 0xC3, 0xFD, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x5D, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xEF, 0xCF, 0xEB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xF7, 0xEE, 0x3E, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xEF, 0xDF, 0xE2, 0xFF,
- 0xFF, 0xFF, 0xFB, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xF6, 0xBE, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0x7F, 0xEE,
- 0x5F, 0xE6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3E,
- 0x7D, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xF3, 0xFB, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xBF, 0xF7, 0x36, 0xBE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xEF, 0xD3, 0xF6,
- 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0xEE,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0xEF, 0xEB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xBA, 0xBE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEE,
- 0xFB, 0xFA, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xD6, 0xFD, 0xBD, 0xBD, 0xBD,
- 0x7D, 0x7B, 0x7B, 0x7B,
- 0x7B, 0xFB, 0xAE, 0xFF, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xF7, 0xBA, 0xBF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xEF, 0xEB, 0x6B,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFE, 0xBE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0x4F, 0xEF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF,
- 0x3E, 0x6E, 0xFC, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xC3, 0xC9, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0x3E, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xEF, 0xFB,
- 0xD5, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE,
- 0xFE, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6F, 0xEF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFB,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xF6, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE,
- 0xEF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFE, 0xFF, 0xF7, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0x7F, 0xFA, 0xEF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xE7, 0xFF, 0xFE,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xEF, 0xBF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xA7, 0xFF, 0xFC, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0x7F,
- 0xFE, 0xAE, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7,
- 0xF7, 0xFA, 0xFF, 0xFD,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xAF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xF7, 0xBE, 0xBD, 0xBD, 0xBD, 0xBD, 0x7D, 0x7B, 0x7B,
- 0x7B, 0x7B, 0xFB, 0xAF,
- 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCA,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x6F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xE7, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xCF, 0xFE, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xDF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xEF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xE7, 0xF2, 0xFC,
- 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xAE, 0xEF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x7E, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xEF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF,
- 0xFE, 0xFE, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xEF, 0xDD, 0xFE, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xAF, 0xEF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBA, 0xFE,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFA, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xF6, 0x9C, 0xBD, 0xBD, 0xBD, 0xBD, 0x7D, 0x7B, 0x7B, 0x7B, 0x7B, 0xFB,
- 0xAE, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x7A, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xDF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0x6F, 0xEF, 0xF7, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xF7, 0xFE,
- 0xFE, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xEB,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x9E, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xEF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFE, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xEF, 0xCB, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFD,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xBE, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xEF,
- 0xEF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFB, 0xAF, 0x7F, 0xFF,
- 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xEF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xBF, 0xFF,
- 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAE,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0x7F, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xF7, 0xBC, 0xBD,
- 0xBD, 0xBD, 0xBD, 0x7D, 0x7B, 0x7B, 0x7B, 0x7B, 0xFB, 0xAF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0x7F,
- 0xAF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF,
- 0xFE, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF,
- 0xFF, 0xFF, 0xEF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xBF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xEF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFE, 0xFF, 0x9F, 0x9F,
- 0x9F, 0x3F, 0x3F, 0x3F,
- 0x3F, 0x3F, 0xFF, 0xEF, 0xDF, 0xDF, 0xDF, 0xDF, 0xCF, 0xB7, 0xBF, 0xBF,
- 0xBF, 0xBF, 0xFF, 0xBC,
- 0xB9, 0x9D, 0xBD, 0xBD, 0x7D, 0x7B, 0x7B, 0x7B, 0x7B, 0xFB, 0xEF, 0xD7,
- 0xF5, 0xF3, 0xF1, 0xD1,
- 0x65, 0xE3, 0xE3, 0xE3, 0xA3, 0xFF, 0xFE, 0x7F, 0xFE, 0xDE, 0xDE, 0xFF,
- 0xBD, 0xBD, 0xBD, 0xBD,
- 0xDF, 0xEF, 0xFB, 0xF7, 0xF3, 0xF3, 0xF3, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7,
- 0xFB, 0xFE, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
-
- };
diff --git a/sys/i386/conf/GENERIC b/sys/i386/conf/GENERIC
index 83e346521e8f..cdbaf98fe745 100644
--- a/sys/i386/conf/GENERIC
+++ b/sys/i386/conf/GENERIC
@@ -269,7 +269,6 @@ device wb # Winbond W89C840F
device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
# ISA Ethernet NICs. pccard NICs included.
-device sn # SMC's 9000 series of Ethernet chips
device xe # Xircom pccard Ethernet
# Wireless NIC cards
diff --git a/sys/modules/Makefile b/sys/modules/Makefile
index f8cccac8d7a6..ca109c0886da 100644
--- a/sys/modules/Makefile
+++ b/sys/modules/Makefile
@@ -335,7 +335,6 @@ SUBDIR= \
sk \
${_smartpqi} \
smbfs \
- sn \
snp \
sound \
${_speaker} \
diff --git a/sys/modules/sn/Makefile b/sys/modules/sn/Makefile
deleted file mode 100644
index a9e30eb60d0b..000000000000
--- a/sys/modules/sn/Makefile
+++ /dev/null
@@ -1,9 +0,0 @@
-# $FreeBSD$
-
-.PATH: ${SRCTOP}/sys/dev/sn
-
-KMOD= if_sn
-SRCS= if_sn.c if_sn_isa.c if_sn_pccard.c device_if.h bus_if.h isa_if.h \
- card_if.h pccarddevs.h
-
-.include <bsd.kmod.mk>