summaryrefslogtreecommitdiff
path: root/sys/dev/fe
diff options
context:
space:
mode:
authorcvs2svn <cvs2svn@FreeBSD.org>2000-09-16 18:06:30 +0000
committercvs2svn <cvs2svn@FreeBSD.org>2000-09-16 18:06:30 +0000
commite9805d928bd3b827a2b47a56617849433e531ebf (patch)
treedf1ac3be3babcd3c7f29030b6a33e7fb422c45ee /sys/dev/fe
parent9df9190731e746ba807cd82ae8626792bbad13a4 (diff)
Notes
Diffstat (limited to 'sys/dev/fe')
-rw-r--r--sys/dev/fe/if_fereg.h166
-rw-r--r--sys/dev/fe/if_fevar.h182
2 files changed, 348 insertions, 0 deletions
diff --git a/sys/dev/fe/if_fereg.h b/sys/dev/fe/if_fereg.h
new file mode 100644
index 000000000000..21da37ab0d26
--- /dev/null
+++ b/sys/dev/fe/if_fereg.h
@@ -0,0 +1,166 @@
+/*
+ * Hardware specification of various 8696x based Ethernet cards.
+ * Contributed by M. Sekiguchi <seki@sysrap.cs.fujitsu.co.jp>
+ *
+ * All Rights Reserved, Copyright (C) Fujitsu Limited 1995
+ *
+ * This software may be used, modified, copied, distributed, and sold,
+ * in both source and binary form provided that the above copyright,
+ * these terms and the following disclaimer are retained. The name of
+ * the author and/or the contributor 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 AND THE CONTRIBUTOR ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR THE CONTRIBUTOR 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$ */
+
+/*
+ * Registers on FMV-180 series' ISA bus interface ASIC.
+ * I'm not sure the following register names are appropriate.
+ * Doesn't it look silly, eh? FIXME.
+ */
+
+#define FE_FMV0 16 /* Card status register #0 */
+#define FE_FMV1 17 /* Card status register #1 */
+#define FE_FMV2 18 /* Card config register #0 */
+#define FE_FMV3 19 /* Card config register #1 */
+#define FE_FMV4 20 /* Station address #1 */
+#define FE_FMV5 21 /* Station address #2 */
+#define FE_FMV6 22 /* Station address #3 */
+#define FE_FMV7 23 /* Station address #4 */
+#define FE_FMV8 24 /* Station address #5 */
+#define FE_FMV9 25 /* Station address #6 */
+#define FE_FMV10 26 /* Buffer RAM control register */
+#define FE_FMV11 27 /* Buffer RAM data register */
+
+/*
+ * FMV-180 series' ASIC register values.
+ */
+
+/* FMV0: Card status register #0: Misc info? */
+#define FE_FMV0_MEDIA 0x07 /* Supported physical media. */
+#define FE_FMV0_PRRDY 0x10 /* ??? */
+#define FE_FMV0_PRERR 0x20 /* ??? */
+#define FE_FMV0_ERRDY 0x40 /* ??? */
+#define FE_FMV0_IREQ 0x80 /* ??? */
+
+#define FE_FMV0_MEDIUM_5 0x01 /* 10base5/Dsub */
+#define FE_FMV0_MEDIUM_2 0x02 /* 10base2/BNC */
+#define FE_FMV0_MEDIUM_T 0x04 /* 10baseT/RJ45 */
+
+/* Card status register #1: Hardware revision. */
+#define FE_FMV1_REV 0x0F /* Card revision */
+#define FE_FMV1_UPPER 0xF0 /* Usage unknown */
+
+/* Card config register #0: I/O port address assignment. */
+#define FE_FMV2_IOS 0x07 /* I/O selection. */
+#define FE_FMV2_MES 0x38 /* ??? boot ROM? */
+#define FE_FMV2_IRS 0xC0 /* IRQ selection. */
+
+#define FE_FMV2_IOS_SHIFT 0
+#define FE_FMV2_MES_SHIFT 3
+#define FE_FMV2_IRS_SHIFT 6
+
+/* Card config register #1: IRQ enable */
+#define FE_FMV3_IRQENB 0x80 /* IRQ enable. */
+
+
+/*
+ * Register(?) specific to AT1700/RE2000.
+ */
+
+#define FE_ATI_RESET 0x1F /* Write to reset the 86965. */
+
+/* EEPROM allocation (offsets) of AT1700/RE2000. */
+#define FE_ATI_EEP_ADDR 0x08 /* Station address. (8-13) */
+#define FE_ATI_EEP_MEDIA 0x18 /* Media type. */
+#define FE_ATI_EEP_MAGIC 0x19 /* XXX Magic. */
+#define FE_ATI_EEP_MODEL 0x1e /* Hardware type. */
+#define FE_ATI_EEP_REVISION 0x1f /* Hardware revision. */
+
+/* Value for FE_ATI_EEP_MODEL. */
+#define FE_ATI_MODEL_AT1700T 0x00
+#define FE_ATI_MODEL_AT1700BT 0x01
+#define FE_ATI_MODEL_AT1700FT 0x02
+#define FE_ATI_MODEL_AT1700AT 0x03
+
+
+/*
+ * Registers on MBH10302.
+ */
+
+#define FE_MBH0 0x10 /* ??? Including interrupt. */
+#define FE_MBH1 0x11 /* ??? */
+#define FE_MBH10 0x1A /* Station address. (10 - 15) */
+
+/* Values to be set in MBH0 register. */
+#define FE_MBH0_MAGIC 0x0D /* Just a magic constant? */
+#define FE_MBH0_INTR 0x10 /* Master interrupt control. */
+
+#define FE_MBH0_INTR_ENABLE 0x10 /* Enable interrupts. */
+#define FE_MBH0_INTR_DISABLE 0x00 /* Disable interrupts. */
+
+
+/*
+ * Registers on RE1000. (*NOT* on RE1000 Plus.)
+ */
+
+/* IRQ configuration. */
+#define FE_RE1000_IRQCONF 0x10
+
+
+/*
+ * Fujitsu MB86965 JLI mode support routines.
+ */
+
+/* Datasheet for 86965 explicitly states that it only supports serial
+ * EEPROM with 16 words (32 bytes) capacity. (I.e., 93C06.) However,
+ * ones with 64 words (128 bytes) are available in the marked, namely
+ * 93C46, and are also fully compatible with 86965. It is known that
+ * some boards (e.g., ICL) actually have 93C46 on them and use extra
+ * storage to keep various config info. */
+#define JLI_EEPROM_SIZE 128
+
+
+/*
+ * SSi 78Q8377A support routines.
+ */
+#define SSI_EEPROM_SIZE 512
+#define SSI_DIN 0x01
+#define SSI_DAT 0x01
+#define SSI_CSL 0x02
+#define SSI_CLK 0x04
+#define SSI_EEP 0x10
+
+#define FE_SSI_EEP_IRQ 9 /* Irq ??? */
+#define FE_SSI_EEP_ADDR 16 /* Station(MAC) address */
+#define FE_SSI_EEP_DUPLEX 25 /* Duplex mode ??? */
+
+
+/*
+ * TDK/LANX boards support routines.
+ */
+
+/* AX012/AX013 equips an X24C01 chip, which has 128 bytes of memory cells. */
+#define LNX_EEPROM_SIZE 128
+
+/* Bit assignments and command definitions for the serial EEPROM
+ interface register in LANX ASIC. */
+#define LNX_SDA_HI 0x08 /* Drive SDA line high (logical 1.) */
+#define LNX_SDA_LO 0x00 /* Drive SDA line low (logical 0.) */
+#define LNX_SDA_FL 0x08 /* Float (don't drive) SDA line. */
+#define LNX_SDA_IN 0x01 /* Mask for reading SDA line. */
+#define LNX_CLK_HI 0x04 /* Drive clock line high (active.) */
+#define LNX_CLK_LO 0x00 /* Drive clock line low (inactive.) */
diff --git a/sys/dev/fe/if_fevar.h b/sys/dev/fe/if_fevar.h
new file mode 100644
index 000000000000..37842b2358a6
--- /dev/null
+++ b/sys/dev/fe/if_fevar.h
@@ -0,0 +1,182 @@
+/*
+ * All Rights Reserved, Copyright (C) Fujitsu Limited 1995
+ *
+ * This software may be used, modified, copied, distributed, and sold, in
+ * both source and binary form provided that the above copyright, these
+ * terms and the following disclaimer are retained. The name of the author
+ * and/or the contributor 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 AND THE CONTRIBUTOR ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR THE CONTRIBUTOR 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$
+ */
+
+/* How many registers does an fe-supported adapter have at maximum? */
+#define MAXREGISTERS 32
+
+/* Shouldn't these be defined somewhere else such as isa_device.h? */
+#define NO_IRQ 0
+
+/* Flags for stability. */
+#define UNSTABLE_IRQ 0x01 /* IRQ setting may be incorrect. */
+#define UNSTABLE_MAC 0x02 /* Probed MAC address may be incorrect. */
+#define UNSTABLE_TYPE 0x04 /* Probed vendor/model may be incorrect. */
+
+/* Mapping between media bitmap (in fe_softc.mbitmap) and ifm_media. */
+#define MB_HA 0x0001
+#define MB_HM 0x0002
+#define MB_HT 0x0004
+#define MB_H2 0x0008
+#define MB_H5 0x0010
+#define MB_HF 0x0020
+#define MB_FT 0x0040
+
+/* Card types. */
+#define FE_TYPE_SSI 1
+#define FE_TYPE_JLI 2
+#define FE_TYPE_FMV 3
+#define FE_TYPE_LNX 4
+#define FE_TYPE_UBN 5
+#define FE_TYPE_GWY 6
+#define FE_TYPE_MBH 7
+#define FE_TYPE_TDK 8
+#define FE_TYPE_RE1000 9
+#define FE_TYPE_CNET9NE 10
+#define FE_TYPE_REX 11
+
+/*
+ * Data type for a multicast address filter on 8696x.
+ */
+struct fe_filter {
+ u_char data [FE_FILTER_LEN];
+};
+
+/*
+ * fe_softc: per line info and status
+ */
+struct fe_softc {
+
+ /* Used by "common" codes. */
+ struct arpcom arpcom; /* Ethernet common */
+
+ /* Used by config codes. */
+ int type;
+ int port_used;
+ struct resource * port_res;
+ bus_space_tag_t iot;
+ bus_space_handle_t ioh;
+ struct resource * irq_res;
+ void * irq_handle;
+
+ /* Set by probe() and not modified in later phases. */
+ char const * typestr; /* printable name of the interface. */
+ u_short txb_size; /* size of TX buffer, in bytes */
+ u_char proto_dlcr4; /* DLCR4 prototype. */
+ u_char proto_dlcr5; /* DLCR5 prototype. */
+ u_char proto_dlcr6; /* DLCR6 prototype. */
+ u_char proto_dlcr7; /* DLCR7 prototype. */
+ u_char proto_bmpr13; /* BMPR13 prototype. */
+ u_char stability; /* How stable is this? */
+ u_short priv_info; /* info specific to a vendor/model. */
+
+ /* Vendor/model specific hooks. */
+ void (*init)(struct fe_softc *); /* Just before fe_init(). */
+ void (*stop)(struct fe_softc *); /* Just after fe_stop(). */
+
+ /* Transmission buffer management. */
+ u_short txb_free; /* free bytes in TX buffer */
+ u_char txb_count; /* number of packets in TX buffer */
+ u_char txb_sched; /* number of scheduled packets */
+
+ /* Excessive collision counter (see fe_tint() for details.) */
+ u_char tx_excolls; /* # of excessive collisions. */
+
+ /* Multicast address filter management. */
+ u_char filter_change; /* MARs must be changed ASAP. */
+ struct fe_filter filter;/* new filter value. */
+
+ /* Network management. */
+ struct ifmib_iso_8802_3 mibdata;
+
+ /* Media information. */
+ struct ifmedia media; /* used by if_media. */
+ u_short mbitmap; /* bitmap for supported media; see bit2media */
+ int defmedia; /* default media */
+ void (* msel)(struct fe_softc *); /* media selector. */
+
+};
+
+#define sc_if arpcom.ac_if
+#define sc_unit arpcom.ac_if.if_unit
+#define sc_enaddr arpcom.ac_enaddr
+
+
+struct fe_simple_probe_struct {
+ u_char port; /* Offset from the base I/O address. */
+ u_char mask; /* Bits to be checked. */
+ u_char bits; /* Values to be compared against. */
+};
+
+
+extern devclass_t fe_devclass;
+
+int fe_attach(device_t);
+int fe_alloc_port(device_t, int);
+int fe_alloc_irq(device_t, int);
+void fe_release_resource(device_t);
+
+int fe_simple_probe(struct fe_softc const *,
+ struct fe_simple_probe_struct const *);
+int valid_Ether_p(u_char const *, unsigned);
+void fe_softc_defaults(struct fe_softc *);
+void fe_stop(struct fe_softc *sc);
+void fe_irq_failure(char const *, int, int, char const *);
+void fe_msel_965(struct fe_softc *);
+void fe_read_eeprom_jli(struct fe_softc *, u_char *);
+void fe_init_jli(struct fe_softc *);
+void fe_read_eeprom_ssi(struct fe_softc *, u_char *);
+void fe_read_eeprom_lnx(struct fe_softc *, u_char *);
+void fe_init_lnx(struct fe_softc *);
+void fe_init_ubn(struct fe_softc *);
+
+
+#define fe_inb(sc, port) \
+ bus_space_read_1((sc)->iot, (sc)->ioh, (port))
+
+#define fe_outb(sc, port, value) \
+ bus_space_write_1((sc)->iot, (sc)->ioh, (port), (value))
+
+#define fe_inw(sc, port) \
+ bus_space_read_2((sc)->iot, (sc)->ioh, (port))
+
+#define fe_outw(sc, port, value) \
+ bus_space_write_2((sc)->iot, (sc)->ioh, (port), (value))
+
+#define fe_insb(sc, port, addr, count) \
+ bus_space_read_multi_1((sc)->iot, (sc)->ioh, (port), (addr), (count))
+
+#define fe_outsb(sc, port, addr, count) \
+ bus_space_write_multi_1((sc)->iot, (sc)->ioh, (port), (addr), (count))
+
+#define fe_insw(sc, port, addr, count) \
+ bus_space_read_multi_2((sc)->iot, (sc)->ioh, (port), (addr), (count))
+
+#define fe_outsw(sc, port, addr, count) \
+ bus_space_write_multi_2((sc)->iot, (sc)->ioh, (port), (addr), (count))
+
+#define fe_inblk(sc, port, addr, count) \
+ bus_space_read_region_1((sc)->iot, (sc)->ioh, (port), (addr), (count))
+
+#define fe_outblk(sc, port, addr, count) \
+ bus_space_write_region_1((sc)->iot, (sc)->ioh, (port), (addr), (count))