FCP-101: Remove ep(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
This commit is contained in:
parent
259ffd354c
commit
0790719d7a
@ -45,6 +45,7 @@ OLD_FILES+=usr/share/man/man4/de.4
|
||||
OLD_FILES+=usr/share/man/man4/if_de.4
|
||||
OLD_FILES+=usr/share/man/man4/ed.4
|
||||
OLD_FILES+=usr/share/man/man4/if_ed.4
|
||||
OLD_FILES+=usr/share/man/man4/ep.4
|
||||
# 20190513: libcap_sysctl interface change
|
||||
OLD_FILES+=lib/casper/libcap_sysctl.1
|
||||
# 20190509: tests/sys/opencrypto requires the net/py-dpkt package.
|
||||
|
@ -8,7 +8,6 @@ MAN= apm.4 \
|
||||
CPU_ELAN.4 \
|
||||
ctau.4 \
|
||||
cx.4 \
|
||||
ep.4 \
|
||||
ex.4 \
|
||||
fe.4 \
|
||||
glxiic.4 \
|
||||
|
@ -1,209 +0,0 @@
|
||||
.\"
|
||||
.\" Copyright (c) 1994 Herb Peyerl
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
.\" modification, are permitted provided that the following conditions
|
||||
.\" are met:
|
||||
.\" 1. Redistributions of source code must retain the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer.
|
||||
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer in the
|
||||
.\" documentation and/or other materials provided with the distribution.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by Herb Peyerl
|
||||
.\" 3. The name of the author may not be used to endorse or promote products
|
||||
.\" derived from this software without specific prior written permission
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd October 24, 2018
|
||||
.Dt EP 4 i386
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm ep
|
||||
.Nd "Ethernet driver for 3Com Etherlink III (3c5x9) interfaces"
|
||||
.Sh SYNOPSIS
|
||||
To compile this driver into the kernel,
|
||||
place the following line in your
|
||||
kernel configuration file:
|
||||
.Bd -ragged -offset indent
|
||||
.Cd "device ep"
|
||||
.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_ep_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 network adapters based on the 3Com 3C5x9 Etherlink III
|
||||
Parallel Tasking chipset.
|
||||
.Pp
|
||||
Various models of these cards come with a different assortment of
|
||||
connectors:
|
||||
.Bl -tag -width xxxxxxxxxxxxxxxxxxxx
|
||||
.It AUI/DIX
|
||||
Standard 15 pin connector, also known as 10base5 (thick-net)
|
||||
.It 10Base2
|
||||
BNC, also known as thin-net
|
||||
.It 10BaseT
|
||||
UTP, also known as twisted pair
|
||||
.El
|
||||
.Pp
|
||||
The default port to use is the port that has been selected with the
|
||||
setup utility.
|
||||
To override this, use the following media options with
|
||||
.Xr ifconfig 8
|
||||
or in your
|
||||
.Pa /etc/rc.conf
|
||||
file.
|
||||
.Bl -tag -width xxxxxxxxxxxxxxxxxxxx
|
||||
.It 10base5/AUI
|
||||
Use the AUI port.
|
||||
.It 10base2/BNC
|
||||
Use the BNC port.
|
||||
.It 10baseT/UTP
|
||||
Use the UTP port.
|
||||
.El
|
||||
.Sh HARDWARE
|
||||
The
|
||||
.Nm
|
||||
driver supports Ethernet adapters based on the
|
||||
3Com 3C5x9 Etherlink III Parallel Tasking chipset, including:
|
||||
.Pp
|
||||
.Bl -bullet -compact
|
||||
.It
|
||||
3Com 3C1 CF
|
||||
.It
|
||||
3Com 3C509-TP, 3C509-BNC, 3C509-Combo, 3C509-TPO, 3C509-TPC ISA
|
||||
.It
|
||||
3Com 3C509B-TP, 3C509B-BNC, 3C509B-Combo, 3C509B-TPO, 3C509B-TPC ISA
|
||||
.It
|
||||
3Com 3C562/3C563 PCMCIA
|
||||
.It
|
||||
3Com 3C574, 3C574TX, 3C574-TX, 3CCFE574BT, 3CXFE574BT, 3C3FE574BT PCMCIA
|
||||
.It
|
||||
3Com 3C589, 3C589B, 3C589C, 3C589D, 3CXE589DT PCMCIA
|
||||
.It
|
||||
3Com 3CCFEM556B, 3CCFEM556BI PCMCIA
|
||||
.It
|
||||
3Com 3CXE589EC, 3CCE589EC, 3CXE589ET, 3CCE589ET PCMCIA
|
||||
.It
|
||||
3Com Megahertz 3CCEM556, 3CXEM556, 3CCEM556B, 3CXEM556B, 3C3FEM556C PCMCIA
|
||||
.It
|
||||
3Com OfficeConnect 3CXSH572BT, 3CCSH572BT PCMCIA
|
||||
.It
|
||||
Farallon EtherWave and EtherMac PC Card (P/n 595/895 with BLUE arrow)
|
||||
.El
|
||||
.Sh NOTES
|
||||
The 3c509 card has no jumpers to set the address.
|
||||
3Com supplies software to set the address of the card in software.
|
||||
To find the card on the ISA bus, the kernel performs a complex
|
||||
scan operation at IO address 0x110.
|
||||
Beware!
|
||||
Avoid placing other cards at that address!
|
||||
.Pp
|
||||
Furthermore, the 3c509 should not be configured in EISA mode.
|
||||
.Pp
|
||||
Cards in PnP mode may conflict with other resources in the system.
|
||||
Ensure your BIOS is configured correctly to exclude resources used by
|
||||
the 3c509, especially IRQs, to avoid unpredictable behavior.
|
||||
.Pp
|
||||
Many different companies sold the 3Com PC Cards under their own private
|
||||
label.
|
||||
These cards also work.
|
||||
.Pp
|
||||
The Farallon EtherWave and EtherMac card came in two varieties.
|
||||
The
|
||||
.Nm
|
||||
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
|
||||
.Xr sn 4
|
||||
driver.
|
||||
.Sh DIAGNOSTICS
|
||||
.Bl -diag
|
||||
.It "ep0: reset (status: %x)"
|
||||
The driver has encountered a FIFO underrun or overrun.
|
||||
The driver will reset the card and the packet will be lost.
|
||||
This is not fatal.
|
||||
.It "ep0: eeprom failed to come ready"
|
||||
The eeprom failed to come ready.
|
||||
This probably means the card is wedged.
|
||||
.It "ep0: 3c509 in test mode. Erase pencil mark!"
|
||||
This means that someone has scribbled with pencil
|
||||
in the test area on the card.
|
||||
Erase the pencil mark and reboot.
|
||||
(This is not a joke).
|
||||
.It "ep0: No I/O space?!"
|
||||
The driver was unable to allocate the I/O space that it thinks
|
||||
should be there.
|
||||
Look for conflicts with other devices.
|
||||
.It "ep0: No irq?!"
|
||||
The driver could not allocate the interrupt it wanted.
|
||||
Look for conflicts, although sharing interrupts for PC Card is normal.
|
||||
.It "ep0: No connectors!"
|
||||
The driver queried the hardware for what ethernet attachment were
|
||||
present, but the hardware reported none that the driver recognized.
|
||||
.It "ep0: Unable to get Ethernet address!"
|
||||
The driver was unable to read the ethernet address from the EEPROM.
|
||||
This is likely the result of the card being wedged.
|
||||
.It "ep0: if_alloc() failed"
|
||||
The driver was unable to allocate a ifnet structure.
|
||||
This may happen in extremely low memory conditions.
|
||||
.It "ep0: strange connector type in EEPROM: assuming AUI"
|
||||
The driver does not know what to do with the information the EEPROM
|
||||
has about connectors, so it is assuming the worst.
|
||||
.It "ep0: unknown ID 0xXXXXXXXX"
|
||||
The driver has found an ID that it believes it supports, but does not
|
||||
have a specific identification string to present to the user.
|
||||
.It "ep0: <%s> at port 0x%03x in EISA mode, ignored."
|
||||
The 3C509 ISA card is in EISA mode.
|
||||
The card will be ignored until it is taken out of EISA mode.
|
||||
.It "ep0: <%s> at x0%03x in PnP mode"
|
||||
This card appears to be in Plug and Play mode.
|
||||
It should be probed as part of the plug and play phase of the ISA
|
||||
probes.
|
||||
.It "ep0: Invalid EEPROM checksum!"
|
||||
The EEPROM has a bad checksum, so the driver is ignoring the card.
|
||||
.It "ep0: bus_setup_intr() failed!"
|
||||
The driver was unable to setup the interrupt handler.
|
||||
This should never happen.
|
||||
.El
|
||||
.Sh SEE ALSO
|
||||
.Xr altq 4 ,
|
||||
.Xr ed 4 ,
|
||||
.Xr intro 4 ,
|
||||
.Xr ng_ether 4 ,
|
||||
.Xr sn 4 ,
|
||||
.Xr vx 4 ,
|
||||
.Xr ifconfig 8
|
||||
.Sh STANDARDS
|
||||
are great.
|
||||
There is so many to choose from.
|
@ -1937,8 +1937,6 @@ device xmphy # XaQti XMAC II
|
||||
# LinkSys LNE100TX, LNE100TX V2.0, Jaton XpressNet, Alfa Inc GFC2204,
|
||||
# KNE110TX.
|
||||
# em: Intel Pro/1000 Gigabit Ethernet 82542, 82543, 82544 based adapters.
|
||||
# ep: 3Com 3C509, 3C529, 3C556, 3C562D, 3C563D, 3C572, 3C574X, 3C579, 3C589
|
||||
# and PC Card devices using these chipsets.
|
||||
# ex: Intel EtherExpress Pro/10 and other i82595-based adapters,
|
||||
# Olicom Ethernet PC Card devices.
|
||||
# fe: Fujitsu MB86960A/MB86965A Ethernet
|
||||
@ -2044,7 +2042,6 @@ device xmphy # XaQti XMAC II
|
||||
|
||||
# Order for ISA devices is important here
|
||||
|
||||
device ep
|
||||
device ex
|
||||
device fe
|
||||
hint.fe.0.at="isa"
|
||||
|
@ -1633,9 +1633,6 @@ dev/ena/ena_sysctl.c optional ena \
|
||||
compile-with "${NORMAL_C} -I$S/contrib"
|
||||
contrib/ena-com/ena_com.c optional ena
|
||||
contrib/ena-com/ena_eth_com.c optional ena
|
||||
dev/ep/if_ep.c optional ep
|
||||
dev/ep/if_ep_isa.c optional ep isa
|
||||
dev/ep/if_ep_pccard.c optional ep pccard
|
||||
dev/esp/esp_pci.c optional esp pci
|
||||
dev/esp/ncr53c9x.c optional esp
|
||||
dev/etherswitch/arswitch/arswitch.c optional arswitch
|
||||
|
@ -199,7 +199,6 @@ dev/ed/if_ed_isa.c optional ed isa
|
||||
dev/ed/if_ed_wd80x3.c optional ed isa
|
||||
dev/ed/if_ed_hpp.c optional ed isa ed_hpp
|
||||
dev/ed/if_ed_sic.c optional ed isa ed_sic
|
||||
dev/ep/elink.c optional ep
|
||||
dev/fb/fb.c optional fb | vga
|
||||
dev/fb/s3_pci.c optional s3pci
|
||||
dev/fb/vesa.c optional vga vesa
|
||||
|
@ -1,98 +0,0 @@
|
||||
/*-
|
||||
* SPDX-License-Identifier: BSD-4-Clause
|
||||
*
|
||||
* Copyright (c) 1994, 1995 Charles Hannum. 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 Charles Hannum.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $NetBSD: elink.c,v 1.6 1995/01/07 21:37:54 mycroft Exp $
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
/*
|
||||
* Common code for dealing with 3COM ethernet cards.
|
||||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/module.h>
|
||||
|
||||
#include <machine/cpufunc.h>
|
||||
|
||||
#include <dev/ep/elink.h>
|
||||
|
||||
/*
|
||||
* Issue a `global reset' to all cards, and reset the ID state machines. We
|
||||
* have to be careful to do the global reset only once during autoconfig, to
|
||||
* prevent resetting boards that have already been configured.
|
||||
*/
|
||||
void
|
||||
elink_reset()
|
||||
{
|
||||
static int x = 0;
|
||||
|
||||
if (x == 0) {
|
||||
x = 1;
|
||||
outb(ELINK_ID_PORT, ELINK_RESET);
|
||||
}
|
||||
outb(ELINK_ID_PORT, 0x00);
|
||||
outb(ELINK_ID_PORT, 0x00);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* The `ID sequence' is really just snapshots of an 8-bit CRC register as 0
|
||||
* bits are shifted in. Different board types use different polynomials.
|
||||
*/
|
||||
void
|
||||
elink_idseq(u_char p)
|
||||
{
|
||||
int i;
|
||||
u_char c;
|
||||
|
||||
c = 0xff;
|
||||
for (i = 255; i; i--) {
|
||||
outb(ELINK_ID_PORT, c);
|
||||
if (c & 0x80) {
|
||||
c <<= 1;
|
||||
c ^= p;
|
||||
} else
|
||||
c <<= 1;
|
||||
}
|
||||
}
|
||||
|
||||
static moduledata_t elink_mod = {
|
||||
"elink",/* module name */
|
||||
NULL, /* event handler */
|
||||
0 /* extra data */
|
||||
};
|
||||
|
||||
DECLARE_MODULE(elink, elink_mod, SI_SUB_PSEUDO, SI_ORDER_ANY);
|
||||
MODULE_VERSION(elink, 1);
|
@ -1,43 +0,0 @@
|
||||
/*-
|
||||
* SPDX-License-Identifier: BSD-4-Clause
|
||||
*
|
||||
* Copyright (c) 1994 Charles Hannum. 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 Charles Hannum.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $NetBSD: elink.h,v 1.3 1994/10/27 04:17:11 cgd Exp $
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#define ELINK_ID_PORT 0x100
|
||||
#define ELINK_RESET 0xc0
|
||||
|
||||
#define ELINK_507_POLY 0xe7
|
||||
#define ELINK_509_POLY 0xcf
|
||||
#define TLINK_619_POLY 0x63
|
||||
|
||||
void elink_reset(void);
|
||||
void elink_idseq(u_char p);
|
1008
sys/dev/ep/if_ep.c
1008
sys/dev/ep/if_ep.c
File diff suppressed because it is too large
Load Diff
@ -1,398 +0,0 @@
|
||||
/*-
|
||||
* SPDX-License-Identifier: BSD-4-Clause
|
||||
*
|
||||
* Copyright (c) 1994 Herb Peyerl <hpeyerl@novatel.ca>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Herb Peyerl.
|
||||
* 4. The name of Herb Peyerl may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/module.h>
|
||||
#include <sys/bus.h>
|
||||
|
||||
#include <machine/bus.h>
|
||||
#include <machine/resource.h>
|
||||
#include <sys/rman.h>
|
||||
|
||||
#include <net/if.h>
|
||||
#include <net/if_arp.h>
|
||||
#include <net/if_media.h>
|
||||
|
||||
#include <isa/isavar.h>
|
||||
|
||||
#include <dev/ep/if_epreg.h>
|
||||
#include <dev/ep/if_epvar.h>
|
||||
|
||||
#ifdef __i386__
|
||||
#include <dev/ep/elink.h>
|
||||
#endif
|
||||
|
||||
#ifdef __i386__
|
||||
static uint16_t get_eeprom_data(int, int);
|
||||
static void ep_isa_identify(driver_t *, device_t);
|
||||
#endif
|
||||
|
||||
static int ep_isa_probe(device_t);
|
||||
static int ep_isa_attach(device_t);
|
||||
static int ep_eeprom_cksum(struct ep_softc *);
|
||||
|
||||
struct isa_ident {
|
||||
uint32_t id;
|
||||
char *name;
|
||||
};
|
||||
const char *ep_isa_match_id(uint32_t, struct isa_ident *);
|
||||
|
||||
#define ISA_ID_3C509_XXX 0x0506d509
|
||||
#define ISA_ID_3C509_TP 0x506d5090
|
||||
#define ISA_ID_3C509_BNC 0x506d5091
|
||||
#define ISA_ID_3C509_COMBO 0x506d5094
|
||||
#define ISA_ID_3C509_TPO 0x506d5095
|
||||
#define ISA_ID_3C509_TPC 0x506d5098
|
||||
|
||||
#ifdef __i386__
|
||||
static struct isa_ident ep_isa_devs[] = {
|
||||
{ISA_ID_3C509_TP, "3Com 3C509-TP EtherLink III"},
|
||||
{ISA_ID_3C509_BNC, "3Com 3C509-BNC EtherLink III"},
|
||||
{ISA_ID_3C509_COMBO, "3Com 3C509-Combo EtherLink III"},
|
||||
{ISA_ID_3C509_TPO, "3Com 3C509-TPO EtherLink III"},
|
||||
{ISA_ID_3C509_TPC, "3Com 3C509-TPC EtherLink III"},
|
||||
{0, NULL},
|
||||
};
|
||||
#endif
|
||||
|
||||
static struct isa_pnp_id ep_ids[] = {
|
||||
{0x90506d50, "3Com 3C509B-TP EtherLink III (PnP)"}, /* TCM5090 */
|
||||
{0x91506d50, "3Com 3C509B-BNC EtherLink III (PnP)"}, /* TCM5091 */
|
||||
{0x94506d50, "3Com 3C509B-Combo EtherLink III (PnP)"}, /* TCM5094 */
|
||||
{0x95506d50, "3Com 3C509B-TPO EtherLink III (PnP)"}, /* TCM5095 */
|
||||
{0x98506d50, "3Com 3C509B-TPC EtherLink III (PnP)"}, /* TCM5098 */
|
||||
{0xf780d041, NULL}, /* PNP80f7 */
|
||||
{0, NULL},
|
||||
};
|
||||
|
||||
/*
|
||||
* We get eeprom data from the id_port given an offset into the eeprom.
|
||||
* Basically; after the ID_sequence is sent to all of the cards; they enter
|
||||
* the ID_CMD state where they will accept command requests. 0x80-0xbf loads
|
||||
* the eeprom data. We then read the port 16 times and with every read; the
|
||||
* cards check for contention (ie: if one card writes a 0 bit and another
|
||||
* writes a 1 bit then the host sees a 0. At the end of the cycle; each card
|
||||
* compares the data on the bus; if there is a difference then that card goes
|
||||
* into ID_WAIT state again). In the meantime; one bit of data is returned in
|
||||
* the AX register which is conveniently returned to us by inb(). Hence; we
|
||||
* read 16 times getting one bit of data with each read.
|
||||
*/
|
||||
#ifdef __i386__
|
||||
static uint16_t
|
||||
get_eeprom_data(int id_port, int offset)
|
||||
{
|
||||
int i;
|
||||
uint16_t data = 0;
|
||||
|
||||
outb(id_port, EEPROM_CMD_RD | offset);
|
||||
DELAY(BIT_DELAY_MULTIPLE * 1000);
|
||||
for (i = 0; i < 16; i++) {
|
||||
DELAY(50);
|
||||
data = (data << 1) | (inw(id_port) & 1);
|
||||
}
|
||||
return (data);
|
||||
}
|
||||
#endif
|
||||
|
||||
const char *
|
||||
ep_isa_match_id(uint32_t id, struct isa_ident *isa_devs)
|
||||
{
|
||||
struct isa_ident *i = isa_devs;
|
||||
|
||||
while (i->name != NULL) {
|
||||
if (id == i->id)
|
||||
return (i->name);
|
||||
i++;
|
||||
}
|
||||
/*
|
||||
* If we see a card that is likely to be a 3c509
|
||||
* return something so that it will work; be annoying
|
||||
* so that the user will tell us about it though.
|
||||
*/
|
||||
if ((id >> 4) == ISA_ID_3C509_XXX)
|
||||
return ("Unknown 3c509; notify maintainer!");
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
#ifdef __i386__
|
||||
static void
|
||||
ep_isa_identify(driver_t * driver, device_t parent)
|
||||
{
|
||||
int tag = EP_LAST_TAG;
|
||||
int found = 0;
|
||||
int i;
|
||||
int j;
|
||||
const char *desc;
|
||||
uint16_t data;
|
||||
uint32_t irq;
|
||||
uint32_t ioport;
|
||||
uint32_t isa_id;
|
||||
device_t child;
|
||||
|
||||
outb(ELINK_ID_PORT, 0);
|
||||
outb(ELINK_ID_PORT, 0);
|
||||
elink_idseq(ELINK_509_POLY);
|
||||
elink_reset();
|
||||
|
||||
DELAY(DELAY_MULTIPLE * 10000);
|
||||
|
||||
for (i = 0; i < EP_MAX_BOARDS; i++) {
|
||||
|
||||
outb(ELINK_ID_PORT, 0);
|
||||
outb(ELINK_ID_PORT, 0);
|
||||
elink_idseq(ELINK_509_POLY);
|
||||
DELAY(400);
|
||||
|
||||
/*
|
||||
* For the first probe, clear all board's tag registers.
|
||||
* Otherwise kill off already-found boards. -- linux 3c509.c
|
||||
*/
|
||||
if (i == 0)
|
||||
outb(ELINK_ID_PORT, 0xd0);
|
||||
else
|
||||
outb(ELINK_ID_PORT, 0xd8);
|
||||
|
||||
/* Get out of loop if we're out of cards. */
|
||||
data = get_eeprom_data(ELINK_ID_PORT, EEPROM_MFG_ID);
|
||||
if (data != MFG_ID)
|
||||
break;
|
||||
/* resolve contention using the Ethernet address */
|
||||
for (j = 0; j < 3; j++)
|
||||
(void)get_eeprom_data(ELINK_ID_PORT, j);
|
||||
|
||||
/*
|
||||
* Construct an 'isa_id' in 'EISA' format.
|
||||
*/
|
||||
data = get_eeprom_data(ELINK_ID_PORT, EEPROM_MFG_ID);
|
||||
isa_id = (htons(data) << 16);
|
||||
data = get_eeprom_data(ELINK_ID_PORT, EEPROM_PROD_ID);
|
||||
isa_id |= htons(data);
|
||||
|
||||
/* Find known ISA boards */
|
||||
desc = ep_isa_match_id(isa_id, ep_isa_devs);
|
||||
if (!desc) {
|
||||
if (bootverbose)
|
||||
device_printf(parent,
|
||||
"unknown ID 0x%08x\n", isa_id);
|
||||
continue;
|
||||
}
|
||||
/* Retreive IRQ */
|
||||
data = get_eeprom_data(ELINK_ID_PORT, EEPROM_RESOURCE_CFG);
|
||||
irq = (data >> 12);
|
||||
|
||||
/* Retreive IOPORT */
|
||||
data = get_eeprom_data(ELINK_ID_PORT, EEPROM_ADDR_CFG);
|
||||
ioport = (((data & ADDR_CFG_MASK) << 4) + 0x200);
|
||||
|
||||
if ((data & ADDR_CFG_MASK) == ADDR_CFG_EISA) {
|
||||
device_printf(parent,
|
||||
"<%s> at port 0x%03x in EISA mode, ignoring!\n",
|
||||
desc, ioport);
|
||||
/*
|
||||
* Set the adaptor tag so that the next card can be
|
||||
* found.
|
||||
*/
|
||||
outb(ELINK_ID_PORT, tag--);
|
||||
continue;
|
||||
}
|
||||
/* Test for an adapter with PnP support. */
|
||||
data = get_eeprom_data(ELINK_ID_PORT, EEPROM_CAP);
|
||||
if (data == CAP_ISA) {
|
||||
data = get_eeprom_data(ELINK_ID_PORT,
|
||||
EEPROM_INT_CONFIG_1);
|
||||
if (data & ICW1_IAS_PNP) {
|
||||
if (bootverbose)
|
||||
device_printf(parent,
|
||||
"<%s> at 0x%03x "
|
||||
"in PnP mode!\n",
|
||||
desc, ioport);
|
||||
/*
|
||||
* Set the adaptor tag so that the next card
|
||||
* can be found.
|
||||
*/
|
||||
outb(ELINK_ID_PORT, tag--);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
/* Set the adaptor tag so that the next card can be found. */
|
||||
outb(ELINK_ID_PORT, tag--);
|
||||
|
||||
/* Activate the adaptor at the EEPROM location. */
|
||||
outb(ELINK_ID_PORT, ACTIVATE_ADAPTER_TO_CONFIG);
|
||||
|
||||
/* Test for an adapter in TEST mode. */
|
||||
outw(ioport + EP_COMMAND, WINDOW_SELECT | 0);
|
||||
data = inw(ioport + EP_W0_EEPROM_COMMAND);
|
||||
if (data & EEPROM_TST_MODE) {
|
||||
device_printf(parent,
|
||||
"<%s> at port 0x%03x in TEST mode!"
|
||||
" Erase pencil mark.\n",
|
||||
desc, ioport);
|
||||
continue;
|
||||
}
|
||||
child = BUS_ADD_CHILD(parent, ISA_ORDER_SPECULATIVE, "ep", -1);
|
||||
device_set_desc_copy(child, desc);
|
||||
device_set_driver(child, driver);
|
||||
bus_set_resource(child, SYS_RES_IRQ, 0, irq, 1);
|
||||
bus_set_resource(child, SYS_RES_IOPORT, 0, ioport, EP_IOSIZE);
|
||||
|
||||
if (bootverbose)
|
||||
device_printf(parent,
|
||||
"<%s>"
|
||||
" at port 0x%03x-0x%03x irq %d\n",
|
||||
desc, ioport, ioport + EP_IOSIZE, irq);
|
||||
found++;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static int
|
||||
ep_isa_probe(device_t dev)
|
||||
{
|
||||
int error = 0;
|
||||
|
||||
/* Check isapnp ids */
|
||||
error = ISA_PNP_PROBE(device_get_parent(dev), dev, ep_ids);
|
||||
|
||||
/* If the card had a PnP ID that didn't match any we know about */
|
||||
if (error == ENXIO)
|
||||
return (error);
|
||||
|
||||
/* If we had some other problem. */
|
||||
if (!(error == 0 || error == ENOENT))
|
||||
return (error);
|
||||
|
||||
/* If we have the resources we need then we're good to go. */
|
||||
if ((bus_get_resource_start(dev, SYS_RES_IOPORT, 0) != 0) &&
|
||||
(bus_get_resource_start(dev, SYS_RES_IRQ, 0) != 0))
|
||||
return (0);
|
||||
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
static int
|
||||
ep_isa_attach(device_t dev)
|
||||
{
|
||||
struct ep_softc *sc = device_get_softc(dev);
|
||||
int error = 0;
|
||||
|
||||
if ((error = ep_alloc(dev)))
|
||||
goto bad;
|
||||
ep_get_media(sc);
|
||||
|
||||
GO_WINDOW(sc, 0);
|
||||
SET_IRQ(sc, rman_get_start(sc->irq));
|
||||
|
||||
if ((error = ep_attach(sc)))
|
||||
goto bad;
|
||||
error = ep_eeprom_cksum(sc);
|
||||
if (error) {
|
||||
device_printf(sc->dev, "Invalid EEPROM checksum!\n");
|
||||
goto bad;
|
||||
}
|
||||
if ((error = bus_setup_intr(dev, sc->irq, INTR_TYPE_NET | INTR_MPSAFE,
|
||||
NULL, ep_intr, sc, &sc->ep_intrhand))) {
|
||||
device_printf(dev, "bus_setup_intr() failed! (%d)\n", error);
|
||||
goto bad;
|
||||
}
|
||||
return (0);
|
||||
bad:
|
||||
ep_free(dev);
|
||||
return (error);
|
||||
}
|
||||
|
||||
static int
|
||||
ep_eeprom_cksum(struct ep_softc *sc)
|
||||
{
|
||||
int i;
|
||||
int error;
|
||||
uint16_t val;
|
||||
uint16_t cksum;
|
||||
uint8_t cksum_high = 0;
|
||||
uint8_t cksum_low = 0;
|
||||
|
||||
error = ep_get_e(sc, 0x0f, &val);
|
||||
if (error)
|
||||
return (ENXIO);
|
||||
cksum = val;
|
||||
|
||||
for (i = 0; i < 0x0f; i++) {
|
||||
error = ep_get_e(sc, i, &val);
|
||||
if (error)
|
||||
return (ENXIO);
|
||||
switch (i) {
|
||||
case 0x08:
|
||||
case 0x09:
|
||||
case 0x0d:
|
||||
cksum_low ^= (uint8_t) (val & 0x00ff) ^
|
||||
(uint8_t)((val & 0xff00) >> 8);
|
||||
break;
|
||||
default:
|
||||
cksum_high ^= (uint8_t) (val & 0x00ff) ^
|
||||
(uint8_t)((val & 0xff00) >> 8);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return (cksum != ((uint16_t)cksum_low | (uint16_t)(cksum_high << 8)));
|
||||
}
|
||||
|
||||
static device_method_t ep_isa_methods[] = {
|
||||
/* Device interface */
|
||||
#ifdef __i386__
|
||||
DEVMETHOD(device_identify, ep_isa_identify),
|
||||
#endif
|
||||
DEVMETHOD(device_probe, ep_isa_probe),
|
||||
DEVMETHOD(device_attach, ep_isa_attach),
|
||||
DEVMETHOD(device_detach, ep_detach),
|
||||
|
||||
DEVMETHOD_END
|
||||
};
|
||||
|
||||
static driver_t ep_isa_driver = {
|
||||
"ep",
|
||||
ep_isa_methods,
|
||||
sizeof(struct ep_softc),
|
||||
};
|
||||
|
||||
extern devclass_t ep_devclass;
|
||||
|
||||
DRIVER_MODULE(ep, isa, ep_isa_driver, ep_devclass, 0, 0);
|
||||
#ifdef __i386__
|
||||
MODULE_DEPEND(ep, elink, 1, 1, 1);
|
||||
#endif
|
||||
ISA_PNP_INFO(ep_ids);
|
@ -1,240 +0,0 @@
|
||||
/*-
|
||||
* SPDX-License-Identifier: BSD-4-Clause
|
||||
*
|
||||
* Copyright (c) 1994 Herb Peyerl <hpeyerl@novatel.ca>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Herb Peyerl.
|
||||
* 4. The name of Herb Peyerl may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Pccard support for 3C589 by:
|
||||
* HAMADA Naoki
|
||||
* nao@tom-yam.or.jp
|
||||
*/
|
||||
|
||||
#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 <net/if_media.h>
|
||||
|
||||
#include <dev/ep/if_epreg.h>
|
||||
#include <dev/ep/if_epvar.h>
|
||||
|
||||
#include <dev/pccard/pccardvar.h>
|
||||
#include <dev/pccard/pccard_cis.h>
|
||||
|
||||
#include "pccarddevs.h"
|
||||
|
||||
struct ep_pccard_product
|
||||
{
|
||||
struct pccard_product prod;
|
||||
int chipset;
|
||||
};
|
||||
|
||||
#define EP_CHIP_589 1 /* Classic 3c5x9 chipset */
|
||||
#define EP_CHIP_574 2 /* Roadrunner */
|
||||
#define EP_CHIP_C1 3 /* 3c1 */
|
||||
|
||||
static const struct ep_pccard_product ep_pccard_products[] = {
|
||||
{ PCMCIA_CARD(3COM, 3C1), EP_CHIP_C1 },
|
||||
{ PCMCIA_CARD(3COM, 3C562), EP_CHIP_589 },
|
||||
{ PCMCIA_CARD(3COM, 3C589), EP_CHIP_589 },
|
||||
{ PCMCIA_CARD(3COM, 3CXEM556), EP_CHIP_589 },
|
||||
{ PCMCIA_CARD(3COM, 3CXEM556INT), EP_CHIP_589 },
|
||||
{ PCMCIA_CARD(3COM, 3C574), EP_CHIP_574 },
|
||||
{ PCMCIA_CARD(3COM, 3CCFEM556BI), EP_CHIP_574 },
|
||||
{ { NULL } }
|
||||
};
|
||||
|
||||
static const struct ep_pccard_product *
|
||||
ep_pccard_lookup(device_t dev)
|
||||
{
|
||||
return ((const struct ep_pccard_product *)pccard_product_lookup(dev,
|
||||
(const struct pccard_product *)ep_pccard_products,
|
||||
sizeof(ep_pccard_products[0]), NULL));
|
||||
}
|
||||
|
||||
static int
|
||||
ep_pccard_probe(device_t dev)
|
||||
{
|
||||
const struct ep_pccard_product *pp;
|
||||
int error;
|
||||
uint32_t fcn = PCCARD_FUNCTION_UNSPEC;
|
||||
|
||||
/* Make sure we're a network function */
|
||||
error = pccard_get_function(dev, &fcn);
|
||||
if (error != 0)
|
||||
return (error);
|
||||
if (fcn != PCCARD_FUNCTION_NETWORK)
|
||||
return (ENXIO);
|
||||
|
||||
/* Check to see if we know about this card */
|
||||
if ((pp = ep_pccard_lookup(dev)) == NULL)
|
||||
return EIO;
|
||||
if (pp->prod.pp_name != NULL)
|
||||
device_set_desc(dev, pp->prod.pp_name);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
ep_pccard_mac(const struct pccard_tuple *tuple, void *argp)
|
||||
{
|
||||
uint8_t *enaddr = argp;
|
||||
int i;
|
||||
|
||||
/* Code 0x88 is 3com's special cis node contianing the MAC */
|
||||
if (tuple->code != 0x88)
|
||||
return (0);
|
||||
|
||||
/* Make sure this is a sane node */
|
||||
if (tuple->length < ETHER_ADDR_LEN)
|
||||
return (0);
|
||||
|
||||
/* Copy the MAC ADDR and return success */
|
||||
for (i = 0; i < ETHER_ADDR_LEN; i += 2) {
|
||||
enaddr[i] = pccard_tuple_read_1(tuple, i + 1);
|
||||
enaddr[i + 1] = pccard_tuple_read_1(tuple, i);
|
||||
}
|
||||
return (1);
|
||||
}
|
||||
|
||||
static int
|
||||
ep_pccard_attach(device_t dev)
|
||||
{
|
||||
struct ep_softc *sc = device_get_softc(dev);
|
||||
uint16_t result;
|
||||
int error = 0;
|
||||
const struct ep_pccard_product *pp;
|
||||
|
||||
if ((pp = ep_pccard_lookup(dev)) == NULL)
|
||||
panic("ep_pccard_attach: can't find product in attach.");
|
||||
|
||||
if (pp->chipset == EP_CHIP_574) {
|
||||
sc->epb.mii_trans = 1;
|
||||
sc->epb.cmd_off = 2;
|
||||
} else {
|
||||
sc->epb.mii_trans = 0;
|
||||
sc->epb.cmd_off = 0;
|
||||
}
|
||||
if ((error = ep_alloc(dev))) {
|
||||
device_printf(dev, "ep_alloc() failed! (%d)\n", error);
|
||||
goto bad;
|
||||
}
|
||||
|
||||
if (pp->chipset == EP_CHIP_C1)
|
||||
sc->stat |= F_HAS_TX_PLL;
|
||||
|
||||
/* ROM size = 0, ROM base = 0 */
|
||||
/* For now, ignore AUTO SELECT feature of 3C589B and later. */
|
||||
error = ep_get_e(sc, EEPROM_ADDR_CFG, &result);
|
||||
CSR_WRITE_2(sc, EP_W0_ADDRESS_CFG, result & 0xc000);
|
||||
|
||||
/*
|
||||
* Fake IRQ must be 3 for 3C589 and 3C589B. 3C589D and newer
|
||||
* ignore this value. 3C589C is unknown, as are the other
|
||||
* cards supported by this driver, but it appears to never hurt
|
||||
* and always helps.
|
||||
*/
|
||||
SET_IRQ(sc, 3);
|
||||
CSR_WRITE_2(sc, EP_W0_PRODUCT_ID, sc->epb.prod_id);
|
||||
|
||||
if (sc->epb.mii_trans) {
|
||||
/*
|
||||
* turn on the MII transciever
|
||||
*/
|
||||
GO_WINDOW(sc, 3);
|
||||
CSR_WRITE_2(sc, EP_W3_OPTIONS, 0x8040);
|
||||
DELAY(1000);
|
||||
CSR_WRITE_2(sc, EP_W3_OPTIONS, 0xc040);
|
||||
CSR_WRITE_2(sc, EP_COMMAND, RX_RESET);
|
||||
CSR_WRITE_2(sc, EP_COMMAND, TX_RESET);
|
||||
EP_BUSY_WAIT(sc);
|
||||
DELAY(1000);
|
||||
CSR_WRITE_2(sc, EP_W3_OPTIONS, 0x8040);
|
||||
} else
|
||||
ep_get_media(sc);
|
||||
|
||||
/*
|
||||
* The 3C562 (a-c revisions) stores the MAC in the CIS in a
|
||||
* way that's unique to 3com. If we have one of these cards,
|
||||
* scan the CIS for that MAC address, and use it if we find
|
||||
* it. The NetBSD driver says that the ROADRUNNER chips also
|
||||
* do this, which may be true, but none of the cards that I
|
||||
* have include this TUPLE. Always prefer the MAC addr in the
|
||||
* CIS tuple to the one returned by the card, as it appears that
|
||||
* only those cards that need it have this special tuple.
|
||||
*/
|
||||
if (pccard_cis_scan(dev, ep_pccard_mac, sc->eaddr))
|
||||
sc->stat |= F_ENADDR_SKIP;
|
||||
if ((error = ep_attach(sc))) {
|
||||
device_printf(dev, "ep_attach() failed! (%d)\n", error);
|
||||
goto bad;
|
||||
}
|
||||
if ((error = bus_setup_intr(dev, sc->irq, INTR_TYPE_NET | INTR_MPSAFE,
|
||||
NULL, ep_intr, sc, &sc->ep_intrhand))) {
|
||||
device_printf(dev, "bus_setup_intr() failed! (%d)\n", error);
|
||||
goto bad;
|
||||
}
|
||||
return (0);
|
||||
bad:
|
||||
ep_free(dev);
|
||||
return (error);
|
||||
}
|
||||
|
||||
static device_method_t ep_pccard_methods[] = {
|
||||
/* Device interface */
|
||||
DEVMETHOD(device_probe, ep_pccard_probe),
|
||||
DEVMETHOD(device_attach, ep_pccard_attach),
|
||||
DEVMETHOD(device_detach, ep_detach),
|
||||
|
||||
DEVMETHOD_END
|
||||
};
|
||||
|
||||
static driver_t ep_pccard_driver = {
|
||||
"ep",
|
||||
ep_pccard_methods,
|
||||
sizeof(struct ep_softc),
|
||||
};
|
||||
|
||||
extern devclass_t ep_devclass;
|
||||
|
||||
DRIVER_MODULE(ep, pccard, ep_pccard_driver, ep_devclass, 0, 0);
|
||||
PCCARD_PNP_INFO(ep_pccard_products);
|
@ -1,434 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 1993 Herb Peyerl (hpeyerl@novatel.ca) All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met: 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer. 2. The name
|
||||
* of the author may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||
* EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
/*
|
||||
* DELAY_MULTIPLE: How much to boost "base" delays, except
|
||||
* for the inter-bit delays in get_eeprom_data. A cyrix Media GX needed this.
|
||||
*/
|
||||
#define DELAY_MULTIPLE 10
|
||||
#define BIT_DELAY_MULTIPLE 10
|
||||
|
||||
/*
|
||||
* Some global constants
|
||||
*/
|
||||
#define TX_INIT_RATE 16
|
||||
#define TX_INIT_MAX_RATE 64
|
||||
#define RX_INIT_LATENCY 64
|
||||
#define RX_INIT_EARLY_THRESH 208/* not less than MINCLSIZE */
|
||||
#define RX_NEXT_EARLY_THRESH 500
|
||||
|
||||
#define EEPROMSIZE 0x40
|
||||
#define MAX_EEPROMBUSY 1000
|
||||
#define EP_LAST_TAG 0xd7
|
||||
#define EP_MAX_BOARDS 16
|
||||
#define EP_IOSIZE 16 /* 16 bytes of I/O space used. */
|
||||
|
||||
/*
|
||||
* Commands to read/write EEPROM trough EEPROM command register (Window 0,
|
||||
* Offset 0xa)
|
||||
*/
|
||||
#define EEPROM_CMD_RD 0x0080 /* Read: Address required (5 bits) */
|
||||
#define EEPROM_CMD_WR 0x0040 /* Write: Address required (5 bits) */
|
||||
#define EEPROM_CMD_ERASE 0x00c0 /* Erase: Address required (5 bits) */
|
||||
#define EEPROM_CMD_EWEN 0x0030 /* Erase/Write Enable: No data required */
|
||||
|
||||
#define EEPROM_BUSY (1<<15)
|
||||
#define EEPROM_TST_MODE (1<<14)
|
||||
|
||||
/*
|
||||
* Some short functions, worth to let them be a macro
|
||||
*/
|
||||
#define is_eeprom_busy(sc) (CSR_READ_2(sc, EP_W0_EEPROM_COMMAND)&EEPROM_BUSY)
|
||||
#define GO_WINDOW(sc, x) CSR_WRITE_2(sc, EP_COMMAND, WINDOW_SELECT|(x))
|
||||
|
||||
/**************************************************************************
|
||||
* *
|
||||
* These define the EEPROM data structure. They are used in the probe
|
||||
* function to verify the existence of the adapter after having sent
|
||||
* the ID_Sequence.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
#define EEPROM_NODE_ADDR_0 0x0 /* Word */
|
||||
#define EEPROM_NODE_ADDR_1 0x1 /* Word */
|
||||
#define EEPROM_NODE_ADDR_2 0x2 /* Word */
|
||||
#define EEPROM_PROD_ID 0x3 /* 0x9[0-f]50 */
|
||||
#define EEPROM_MFG_DATE 0x4 /* Manufacturing date */
|
||||
#define EEPROM_MFG_DIVSION 0x5 /* Manufacturing division */
|
||||
#define EEPROM_MFG_PRODUCT 0x6 /* Product code */
|
||||
#define EEPROM_MFG_ID 0x7 /* 0x6d50 */
|
||||
#define EEPROM_ADDR_CFG 0x8 /* Base addr */
|
||||
#define ADDR_CFG_EISA 0x1f
|
||||
#define ADDR_CFG_MASK 0x1f
|
||||
#define EEPROM_RESOURCE_CFG 0x9 /* IRQ. Bits 12-15 */
|
||||
#define EEPROM_OEM_ADDR0 0xa
|
||||
#define EEPROM_OEM_ADDR1 0xb
|
||||
#define EEPROM_OEM_ADDR2 0xc
|
||||
#define EEPROM_SOFTINFO 0xd
|
||||
#define EEPROM_COMPAT 0xe
|
||||
#define EEPROM_SOFTINFO2 0xf
|
||||
#define EEPROM_CAP 0x10
|
||||
#define CAP_ISA 0x2083
|
||||
#define CAP_PCMCIA 0x2082
|
||||
#define EEPROM_INT_CONFIG_0 0x12
|
||||
#define EEPROM_INT_CONFIG_1 0x13
|
||||
/* RAM Partition TX FIFO/RX FIFO */
|
||||
#define ICW1_RAM_PART_MASK 0x03
|
||||
#define ICW1_RAM_PART_35 0x00 /* 2:5 (only legal if RAM size == 000b
|
||||
* default power-up/reset */
|
||||
#define ICW1_RAM_PART_13 0x01 /* 1:3 (only legal if RAM size ==
|
||||
* 000b) */
|
||||
#define ICW1_RAM_PART_11 0x10 /* 1:1 */
|
||||
#define ICW1_RAM_PART_RESV 0x11 /* Reserved */
|
||||
/* ISA Adapter Selection */
|
||||
#define ICW1_IAS_MASK 0x0c
|
||||
#define ICW1_IAS_DIS 0x00 /* Both mechanisms disabled (default) */
|
||||
#define ICW1_IAS_ISA 0x04 /* ISA contention only */
|
||||
#define ICW1_IAS_PNP 0x08 /* ISA Plug and Play only */
|
||||
#define ICW1_IAS_BOTH 0x0c /* Both mechanisms enabled */
|
||||
|
||||
#define EEPROM_CHECKSUM_EL3 0x17
|
||||
|
||||
/**************************************************************************
|
||||
* *
|
||||
* These are the registers for the 3Com 3c509 and their bit patterns when *
|
||||
* applicable. They have been taken out the "EtherLink III Parallel *
|
||||
* Tasking EISA and ISA Technical Reference" "Beta Draft 10/30/92" manual *
|
||||
* from 3com. *
|
||||
* *
|
||||
**************************************************************************/
|
||||
|
||||
#define EP_COMMAND 0x0e /* Write. BASE+0x0e is always a
|
||||
* command reg. */
|
||||
#define EP_STATUS 0x0e /* Read. BASE+0x0e is always status
|
||||
* reg. */
|
||||
#define EP_WINDOW 0x0f /* Read. BASE+0x0f is always window
|
||||
* reg. */
|
||||
/*
|
||||
* Window 0 registers. Setup.
|
||||
*/
|
||||
/* Write */
|
||||
#define EP_W0_EEPROM_DATA 0x0c
|
||||
#define EP_W0_EEPROM_COMMAND 0x0a
|
||||
#define EP_W0_RESOURCE_CFG 0x08
|
||||
#define EP_W0_ADDRESS_CFG 0x06
|
||||
#define EP_W0_CONFIG_CTRL 0x04
|
||||
/* Read */
|
||||
#define EP_W0_PRODUCT_ID 0x02
|
||||
#define EP_W0_MFG_ID 0x00
|
||||
|
||||
/*
|
||||
* Window 1 registers. Operating Set.
|
||||
*/
|
||||
/* Write */
|
||||
#define EP_W1_TX_PIO_WR_2 0x02
|
||||
#define EP_W1_TX_PIO_WR_1 0x00
|
||||
/* Read */
|
||||
#define EP_W1_FREE_TX 0x0c
|
||||
#define EP_W1_TX_STATUS 0x0b /* byte */
|
||||
#define EP_W1_TIMER 0x0a /* byte */
|
||||
#define EP_W1_RX_STATUS 0x08
|
||||
#define EP_W1_RX_PIO_RD_2 0x02
|
||||
#define EP_W1_RX_PIO_RD_1 0x00
|
||||
|
||||
/*
|
||||
* Window 2 registers. Station Address Setup/Read
|
||||
*/
|
||||
/* Read/Write */
|
||||
#define EP_W2_PHY_MGMT 0x0c
|
||||
#define EP_W2_ALT_EEPROM 0x0a
|
||||
#define EP_W2_ADDR_5 0x05
|
||||
#define EP_W2_ADDR_4 0x04
|
||||
#define EP_W2_ADDR_3 0x03
|
||||
#define EP_W2_ADDR_2 0x02
|
||||
#define EP_W2_ADDR_1 0x01
|
||||
#define EP_W2_ADDR_0 0x00
|
||||
|
||||
/*
|
||||
* Window 3 registers. FIFO Management.
|
||||
*/
|
||||
/* Read */
|
||||
#define EP_W3_FREE_TX 0x0c
|
||||
#define EP_W3_FREE_RX 0x0a
|
||||
#define EP_W3_OPTIONS 0x08
|
||||
|
||||
/*
|
||||
* Window 4 registers. Diagnostics.
|
||||
*/
|
||||
/* Read/Write */
|
||||
#define EP_W4_MEDIA_TYPE 0x0a
|
||||
#define EP_W4_CTRLR_STATUS 0x08
|
||||
#define EP_W4_NET_DIAG 0x06
|
||||
#define EP_W4_FIFO_DIAG 0x04
|
||||
#define EP_W4_HOST_DIAG 0x02
|
||||
#define EP_W4_TX_DIAG 0x00
|
||||
|
||||
/*
|
||||
* Window 5 Registers. Results and Internal status.
|
||||
*/
|
||||
/* Read */
|
||||
#define EP_W5_READ_0_MASK 0x0c
|
||||
#define EP_W5_INTR_MASK 0x0a
|
||||
#define EP_W5_RX_FILTER 0x08
|
||||
#define EP_W5_RX_EARLY_THRESH 0x06
|
||||
#define EP_W5_TX_AVAIL_THRESH 0x02
|
||||
#define EP_W5_TX_START_THRESH 0x00
|
||||
|
||||
/*
|
||||
* Window 6 registers. Statistics.
|
||||
*/
|
||||
/* Read/Write */
|
||||
#define TX_TOTAL_OK 0x0c
|
||||
#define RX_TOTAL_OK 0x0a
|
||||
#define TX_DEFERRALS 0x08
|
||||
#define RX_FRAMES_OK 0x07
|
||||
#define TX_FRAMES_OK 0x06
|
||||
#define RX_OVERRUNS 0x05
|
||||
#define TX_COLLISIONS 0x04
|
||||
#define TX_AFTER_1_COLLISION 0x03
|
||||
#define TX_AFTER_X_COLLISIONS 0x02
|
||||
#define TX_NO_SQE 0x01
|
||||
#define TX_CD_LOST 0x00
|
||||
|
||||
/****************************************
|
||||
*
|
||||
* Register definitions.
|
||||
*
|
||||
****************************************/
|
||||
|
||||
/*
|
||||
* Command parameter that disables threshold interrupts
|
||||
* PIO (3c509) cards use 2044. The fifo word-oriented and 2044--2047 work.
|
||||
* "busmastering" cards need 8188.
|
||||
* The implicit two-bit upshift done by busmastering cards means
|
||||
* a value of 2047 disables threshold interrupts on both.
|
||||
*/
|
||||
#define EP_THRESH_DISABLE 2047
|
||||
|
||||
/*
|
||||
* Command register. All windows.
|
||||
*
|
||||
* 16 bit register.
|
||||
* 15-11: 5-bit code for command to be executed.
|
||||
* 10-0: 11-bit arg if any. For commands with no args;
|
||||
* this can be set to anything.
|
||||
*/
|
||||
#define GLOBAL_RESET (u_short) 0x0000 /* Wait at least 1ms
|
||||
* after issuing */
|
||||
#define WINDOW_SELECT (u_short) (0x1<<11)
|
||||
#define START_TRANSCEIVER (u_short) (0x2<<11) /* Read ADDR_CFG reg to
|
||||
* determine whether
|
||||
* this is needed. If
|
||||
* so; wait 800 uSec
|
||||
* before using trans-
|
||||
* ceiver. */
|
||||
#define RX_DISABLE (u_short) (0x3<<11) /* state disabled on
|
||||
* power-up */
|
||||
#define RX_ENABLE (u_short) (0x4<<11)
|
||||
#define RX_RESET (u_short) (0x5<<11)
|
||||
#define RX_DISCARD_TOP_PACK (u_short) (0x8<<11)
|
||||
#define TX_ENABLE (u_short) (0x9<<11)
|
||||
#define TX_DISABLE (u_short) (0xa<<11)
|
||||
#define TX_RESET (u_short) (0xb<<11)
|
||||
#define REQ_INTR (u_short) (0xc<<11)
|
||||
/*
|
||||
* The following C_* acknowledge the various interrupts. Some of them don't
|
||||
* do anything. See the manual.
|
||||
*/
|
||||
#define ACK_INTR (u_short) (0x6800)
|
||||
# define C_INTR_LATCH (u_short) (ACK_INTR|0x1)
|
||||
# define C_CARD_FAILURE (u_short) (ACK_INTR|0x2)
|
||||
# define C_TX_COMPLETE (u_short) (ACK_INTR|0x4)
|
||||
# define C_TX_AVAIL (u_short) (ACK_INTR|0x8)
|
||||
# define C_RX_COMPLETE (u_short) (ACK_INTR|0x10)
|
||||
# define C_RX_EARLY (u_short) (ACK_INTR|0x20)
|
||||
# define C_INT_RQD (u_short) (ACK_INTR|0x40)
|
||||
# define C_UPD_STATS (u_short) (ACK_INTR|0x80)
|
||||
#define SET_INTR_MASK (u_short) (0xe<<11)
|
||||
#define SET_RD_0_MASK (u_short) (0xf<<11)
|
||||
#define SET_RX_FILTER (u_short) (0x10<<11)
|
||||
# define FIL_INDIVIDUAL (u_short) (0x1)
|
||||
# define FIL_MULTICAST (u_short) (0x02)
|
||||
# define FIL_BRDCST (u_short) (0x04)
|
||||
# define FIL_PROMISC (u_short) (0x08)
|
||||
#define SET_RX_EARLY_THRESH (u_short) (0x11<<11)
|
||||
#define SET_TX_AVAIL_THRESH (u_short) (0x12<<11)
|
||||
#define SET_TX_START_THRESH (u_short) (0x13<<11)
|
||||
#define STATS_ENABLE (u_short) (0x15<<11)
|
||||
#define STATS_DISABLE (u_short) (0x16<<11)
|
||||
#define STOP_TRANSCEIVER (u_short) (0x17<<11)
|
||||
#define TX_PLL_ENABLE (u_short) (0x18<<11)
|
||||
#define TX_PLL_DISABLE (u_short) (0x19<<11)
|
||||
#define POWER_UP (u_short) (0x1b<<11)
|
||||
#define POWER_DOWN (u_short) (0x1b<<11)
|
||||
#define POWER_AUTO (u_short) (0x1b<<11)
|
||||
|
||||
/*
|
||||
* Status register. All windows.
|
||||
*
|
||||
* 15-13: Window number(0-7).
|
||||
* 12: Command_in_progress.
|
||||
* 11: reserved.
|
||||
* 10: reserved.
|
||||
* 9: reserved.
|
||||
* 8: reserved.
|
||||
* 7: Update Statistics.
|
||||
* 6: Interrupt Requested.
|
||||
* 5: RX Early.
|
||||
* 4: RX Complete.
|
||||
* 3: TX Available.
|
||||
* 2: TX Complete.
|
||||
* 1: Adapter Failure.
|
||||
* 0: Interrupt Latch.
|
||||
*/
|
||||
#define S_INTR_LATCH (u_short) (0x1)
|
||||
#define S_CARD_FAILURE (u_short) (0x2)
|
||||
#define S_TX_COMPLETE (u_short) (0x4)
|
||||
#define S_TX_AVAIL (u_short) (0x8)
|
||||
#define S_RX_COMPLETE (u_short) (0x10)
|
||||
#define S_RX_EARLY (u_short) (0x20)
|
||||
#define S_INT_RQD (u_short) (0x40)
|
||||
#define S_UPD_STATS (u_short) (0x80)
|
||||
#define S_MASK (u_short) 0xFF /* mask of S_* */
|
||||
#define S_5_INTS (S_CARD_FAILURE|S_TX_COMPLETE|\
|
||||
S_TX_AVAIL|S_RX_COMPLETE|S_RX_EARLY)
|
||||
#define S_COMMAND_IN_PROGRESS (u_short) (0x1000)
|
||||
|
||||
#define EP_BUSY_WAIT(sc) while (CSR_READ_2(sc, EP_STATUS) & S_COMMAND_IN_PROGRESS)
|
||||
|
||||
/* Address Config. Register.
|
||||
* Window 0/Port 06
|
||||
*/
|
||||
|
||||
#define ACF_CONNECTOR_BITS 14
|
||||
#define ACF_CONNECTOR_UTP 0
|
||||
#define ACF_CONNECTOR_AUI 1
|
||||
#define ACF_CONNECTOR_BNC 3
|
||||
|
||||
/* Resource configuration register.
|
||||
* Window 0/Port 08
|
||||
*
|
||||
*/
|
||||
|
||||
#define SET_IRQ(sc, irq) CSR_WRITE_2((sc), EP_W0_RESOURCE_CFG, \
|
||||
((CSR_READ_2((sc), EP_W0_RESOURCE_CFG) & 0x0fff) | \
|
||||
((u_short)(irq)<<12)) ) /* set IRQ i */
|
||||
|
||||
/*
|
||||
* FIFO Registers.
|
||||
* RX Status. Window 1/Port 08
|
||||
*
|
||||
* 15: Incomplete or FIFO empty.
|
||||
* 14: 1: Error in RX Packet 0: Incomplete or no error.
|
||||
* 13-11: Type of error.
|
||||
* 1000 = Overrun.
|
||||
* 1011 = Run Packet Error.
|
||||
* 1100 = Alignment Error.
|
||||
* 1101 = CRC Error.
|
||||
* 1001 = Oversize Packet Error (>1514 bytes)
|
||||
* 0010 = Dribble Bits.
|
||||
* (all other error codes, no errors.)
|
||||
*
|
||||
* 10-0: RX Bytes (0-1514)
|
||||
*/
|
||||
#define ERR_RX_INCOMPLETE (u_short) (0x1<<15)
|
||||
#define ERR_RX (u_short) (0x1<<14)
|
||||
#define ERR_RX_OVERRUN (u_short) (0x8<<11)
|
||||
#define ERR_RX_RUN_PKT (u_short) (0xb<<11)
|
||||
#define ERR_RX_ALIGN (u_short) (0xc<<11)
|
||||
#define ERR_RX_CRC (u_short) (0xd<<11)
|
||||
#define ERR_RX_OVERSIZE (u_short) (0x9<<11)
|
||||
#define ERR_RX_DRIBBLE (u_short) (0x2<<11)
|
||||
|
||||
/*
|
||||
* FIFO Registers.
|
||||
* TX Status. Window 1/Port 0B
|
||||
*
|
||||
* Reports the transmit status of a completed transmission. Writing this
|
||||
* register pops the transmit completion stack.
|
||||
*
|
||||
* Window 1/Port 0x0b.
|
||||
*
|
||||
* 7: Complete
|
||||
* 6: Interrupt on successful transmission requested.
|
||||
* 5: Jabber Error (TP Only, TX Reset required. )
|
||||
* 4: Underrun (TX Reset required. )
|
||||
* 3: Maximum Collisions.
|
||||
* 2: TX Status Overflow.
|
||||
* 1-0: Undefined.
|
||||
*
|
||||
*/
|
||||
#define TXS_COMPLETE 0x80
|
||||
#define TXS_SUCCES_INTR_REQ 0x40
|
||||
#define TXS_JABBER 0x20
|
||||
#define TXS_UNDERRUN 0x10
|
||||
#define TXS_MAX_COLLISION 0x8
|
||||
#define TXS_STATUS_OVERFLOW 0x4
|
||||
|
||||
/*
|
||||
* Configuration control register.
|
||||
* Window 0/Port 04
|
||||
*/
|
||||
/* Read */
|
||||
#define IS_AUI (1<<13)
|
||||
#define IS_BNC (1<<12)
|
||||
#define IS_UTP (1<<9)
|
||||
/* Write */
|
||||
#define ENABLE_DRQ_IRQ 0x0001
|
||||
#define W0_P4_CMD_RESET_ADAPTER 0x4
|
||||
#define W0_P4_CMD_ENABLE_ADAPTER 0x1
|
||||
|
||||
/*
|
||||
* Media type and status.
|
||||
* Window 4/Port 0A
|
||||
*/
|
||||
#define JABBER_GUARD_ENABLE 0x40
|
||||
#define LINKBEAT_ENABLE 0x80
|
||||
#define ENABLE_UTP (JABBER_GUARD_ENABLE | LINKBEAT_ENABLE)
|
||||
#define DISABLE_UTP 0x0
|
||||
#define MT_CSD 0x0004 /* CRC Strip disable */
|
||||
#define MT_SQE 0x0008 /* SQE Enable */
|
||||
#define MT_C0 0x0010 /* Collison */
|
||||
#define MT_CS 0x0020 /* Carrier Sense */
|
||||
#define MT_J 0x0200 /* Jabber detected */
|
||||
#define MT_PL 0x0400 /* Plarity Inverted */
|
||||
#define MT_LB 0x0800 /* Link Beat detected */
|
||||
#define MT_SQ 0x1000 /* SQE Present */
|
||||
#define MT_IN 0x2000 /* Reserved */
|
||||
#define MT_CE 0x4000 /* Coax */
|
||||
#define MT_TPE 0x8000
|
||||
|
||||
/*
|
||||
* Misc defines for various things.
|
||||
*/
|
||||
#define ACTIVATE_ADAPTER_TO_CONFIG 0xff /* to the id_port */
|
||||
#define MFG_ID 0x6d50 /* in EEPROM and W0
|
||||
* ADDR_CONFIG */
|
||||
#define PROD_ID 0x9150
|
||||
|
||||
#define AUI 0x1
|
||||
#define BNC 0x2
|
||||
#define UTP 0x4
|
||||
|
||||
#define RX_BYTES_MASK (u_short) (0x07ff)
|
@ -1,111 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 1993 Herb Peyerl (hpeyerl@novatel.ca) All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met: 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer. 2. The name
|
||||
* of the author may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||
* EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
struct ep_board {
|
||||
u_short prod_id; /* product ID */
|
||||
int cmd_off; /* command offset (bit shift) */
|
||||
int mii_trans; /* activate MII transiever */
|
||||
u_short res_cfg; /* resource configuration */
|
||||
};
|
||||
|
||||
/*
|
||||
* Ethernet software status per interface.
|
||||
*/
|
||||
struct ep_softc {
|
||||
struct ifnet *ifp;
|
||||
struct ifmedia ifmedia; /* media info */
|
||||
device_t dev;
|
||||
|
||||
struct mtx sc_mtx;
|
||||
struct resource *iobase;
|
||||
struct resource *irq;
|
||||
|
||||
bus_space_handle_t bsh;
|
||||
bus_space_tag_t bst;
|
||||
void *ep_intrhand;
|
||||
|
||||
struct callout watchdog_timer;
|
||||
int tx_timer;
|
||||
|
||||
u_short ep_connectors; /* Connectors on this card. */
|
||||
u_char ep_connector; /* Configured connector. */
|
||||
|
||||
struct mbuf *top;
|
||||
struct mbuf *mcur;
|
||||
short cur_len;
|
||||
|
||||
int stat; /* some flags */
|
||||
#define F_RX_FIRST 0x001
|
||||
#define F_ENADDR_SKIP 0x002
|
||||
#define F_PROMISC 0x008
|
||||
#define F_HAS_TX_PLL 0x200
|
||||
|
||||
int gone; /* adapter is not present (for PCCARD) */
|
||||
struct ep_board epb;
|
||||
uint8_t eaddr[6];
|
||||
|
||||
#ifdef EP_LOCAL_STATS
|
||||
short tx_underrun;
|
||||
short rx_no_first;
|
||||
short rx_no_mbuf;
|
||||
short rx_overrunf;
|
||||
short rx_overrunl;
|
||||
#endif
|
||||
};
|
||||
|
||||
int ep_alloc(device_t);
|
||||
void ep_free(device_t);
|
||||
int ep_detach(device_t);
|
||||
void ep_get_media(struct ep_softc *);
|
||||
int ep_attach(struct ep_softc *);
|
||||
void ep_intr(void *);
|
||||
int ep_get_e(struct ep_softc *, uint16_t, uint16_t *);
|
||||
|
||||
#define CSR_READ_1(sc, off) (bus_space_read_1((sc)->bst, (sc)->bsh, off))
|
||||
#define CSR_READ_2(sc, off) (bus_space_read_2((sc)->bst, (sc)->bsh, off))
|
||||
#define CSR_WRITE_1(sc, off, val) \
|
||||
bus_space_write_1(sc->bst, sc->bsh, off, val)
|
||||
#define CSR_WRITE_2(sc, off, val) \
|
||||
bus_space_write_2(sc->bst, sc->bsh, off, val)
|
||||
#define CSR_WRITE_MULTI_1(sc, off, addr, count) \
|
||||
bus_space_write_multi_1(sc->bst, sc->bsh, off, addr, count)
|
||||
#define CSR_WRITE_MULTI_2(sc, off, addr, count) \
|
||||
bus_space_write_multi_2(sc->bst, sc->bsh, off, addr, count)
|
||||
#define CSR_WRITE_MULTI_4(sc, off, addr, count) \
|
||||
bus_space_write_multi_4(sc->bst, sc->bsh, off, addr, count)
|
||||
#define CSR_READ_MULTI_1(sc, off, addr, count) \
|
||||
bus_space_read_multi_1(sc->bst, sc->bsh, off, addr, count)
|
||||
#define CSR_READ_MULTI_2(sc, off, addr, count) \
|
||||
bus_space_read_multi_2(sc->bst, sc->bsh, off, addr, count)
|
||||
#define CSR_READ_MULTI_4(sc, off, addr, count) \
|
||||
bus_space_read_multi_4(sc->bst, sc->bsh, off, addr, count)
|
||||
|
||||
#define EP_LOCK(_sc) mtx_lock(&(_sc)->sc_mtx)
|
||||
#define EP_UNLOCK(_sc) mtx_unlock(&(_sc)->sc_mtx)
|
||||
#define EP_LOCK_INIT(_sc) \
|
||||
mtx_init(&_sc->sc_mtx, device_get_nameunit(_sc->dev), \
|
||||
MTX_NETWORK_LOCK, MTX_DEF)
|
||||
#define EP_LOCK_DESTROY(_sc) mtx_destroy(&_sc->sc_mtx);
|
||||
#define EP_ASSERT_LOCKED(_sc) mtx_assert(&_sc->sc_mtx, MA_OWNED);
|
||||
#define EP_ASSERT_UNLOCKED(_sc) mtx_assert(&_sc->sc_mtx, MA_NOTOWNED);
|
@ -272,7 +272,6 @@ device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
|
||||
|
||||
# ISA Ethernet NICs. pccard NICs included.
|
||||
device ex # Intel EtherExpress Pro/10 and Pro/10+
|
||||
device ep # Etherlink III based cards
|
||||
device fe # Fujitsu MB8696x based cards
|
||||
device sn # SMC's 9000 series of Ethernet chips
|
||||
device xe # Xircom pccard Ethernet
|
||||
|
@ -110,7 +110,6 @@ SUBDIR= \
|
||||
${_efirt} \
|
||||
${_em} \
|
||||
${_ena} \
|
||||
${_ep} \
|
||||
${_epic} \
|
||||
esp \
|
||||
${_et} \
|
||||
@ -599,7 +598,6 @@ _cpuctl= cpuctl
|
||||
_cpufreq= cpufreq
|
||||
_dpms= dpms
|
||||
_em= em
|
||||
_ep= ep
|
||||
_et= et
|
||||
_exca= exca
|
||||
_fe= fe
|
||||
|
@ -1,17 +0,0 @@
|
||||
# $FreeBSD$
|
||||
|
||||
SYSDIR?=${SRCTOP}/sys
|
||||
.include "${SYSDIR}/conf/kern.opts.mk"
|
||||
|
||||
.PATH: ${SYSDIR}/dev/ep
|
||||
|
||||
KMOD= if_ep
|
||||
SRCS= if_ep.c
|
||||
.if ${MACHINE_CPUARCH} == "i386"
|
||||
SRCS+= elink.c
|
||||
.endif
|
||||
SRCS+= if_ep_pccard.c pccarddevs.h card_if.h
|
||||
SRCS+= if_ep_isa.c isa_if.h
|
||||
SRCS+= bus_if.h device_if.h
|
||||
|
||||
.include <bsd.kmod.mk>
|
Loading…
Reference in New Issue
Block a user