diff options
author | Brooks Davis <brooks@FreeBSD.org> | 2019-05-17 15:23:52 +0000 |
---|---|---|
committer | Brooks Davis <brooks@FreeBSD.org> | 2019-05-17 15:23:52 +0000 |
commit | 90089841deba734c880184bc972ed46f288fc81b (patch) | |
tree | 929e7654c04c25eea4836105e1dc3518a728d233 | |
parent | 3b70dd81f56fd1d096f0bb6fc0092be425d6856c (diff) | |
download | src-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.inc | 2 | ||||
-rw-r--r-- | share/man/man4/Makefile | 2 | ||||
-rw-r--r-- | share/man/man4/sn.4 | 115 | ||||
-rw-r--r-- | sys/conf/NOTES | 6 | ||||
-rw-r--r-- | sys/conf/files | 3 | ||||
-rw-r--r-- | sys/dev/sn/if_sn.c | 1441 | ||||
-rw-r--r-- | sys/dev/sn/if_sn_isa.c | 101 | ||||
-rw-r--r-- | sys/dev/sn/if_sn_pccard.c | 332 | ||||
-rw-r--r-- | sys/dev/sn/if_snreg.h | 409 | ||||
-rw-r--r-- | sys/dev/sn/if_snvar.h | 84 | ||||
-rw-r--r-- | sys/dev/sn/ositech.h | 384 | ||||
-rw-r--r-- | sys/i386/conf/GENERIC | 1 | ||||
-rw-r--r-- | sys/modules/Makefile | 1 | ||||
-rw-r--r-- | sys/modules/sn/Makefile | 9 |
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> |