kernel: Remove the old ep(4) and ex(4) network drivers.
[dragonfly.git] / sys / dev / netif / fe / if_fevar.h
blob3766b55fd3c6293fd15d72e3d95ed8462108b7dc
1 /*
2 * All Rights Reserved, Copyright (C) Fujitsu Limited 1995
4 * This software may be used, modified, copied, distributed, and sold, in
5 * both source and binary form provided that the above copyright, these
6 * terms and the following disclaimer are retained. The name of the author
7 * and/or the contributor may not be used to endorse or promote products
8 * derived from this software without specific prior written permission.
10 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND THE CONTRIBUTOR ``AS IS'' AND
11 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
12 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
13 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR THE CONTRIBUTOR BE LIABLE
14 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
15 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
16 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION.
17 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
18 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
19 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
20 * SUCH DAMAGE.
22 * $FreeBSD: src/sys/dev/fe/if_fevar.h,v 1.1.2.1 2000/09/22 10:01:47 nyan Exp $
23 * $DragonFly: src/sys/dev/netif/fe/if_fevar.h,v 1.3 2004/01/06 03:17:23 dillon Exp $
26 /* How many registers does an fe-supported adapter have at maximum? */
27 #define MAXREGISTERS 32
29 /* Shouldn't these be defined somewhere else such as isa_device.h? */
30 #define NO_IRQ 0
32 /* Flags for stability. */
33 #define UNSTABLE_IRQ 0x01 /* IRQ setting may be incorrect. */
34 #define UNSTABLE_MAC 0x02 /* Probed MAC address may be incorrect. */
35 #define UNSTABLE_TYPE 0x04 /* Probed vendor/model may be incorrect. */
37 /* Mapping between media bitmap (in fe_softc.mbitmap) and ifm_media. */
38 #define MB_HA 0x0001
39 #define MB_HM 0x0002
40 #define MB_HT 0x0004
41 #define MB_H2 0x0008
42 #define MB_H5 0x0010
43 #define MB_HF 0x0020
44 #define MB_FT 0x0040
46 /* Card types. */
47 #define FE_TYPE_SSI 1
48 #define FE_TYPE_JLI 2
49 #define FE_TYPE_FMV 3
50 #define FE_TYPE_LNX 4
51 #define FE_TYPE_UBN 5
52 #define FE_TYPE_GWY 6
53 #define FE_TYPE_MBH 7
54 #define FE_TYPE_TDK 8
55 #define FE_TYPE_RE1000 9
56 #define FE_TYPE_CNET9NE 10
57 #define FE_TYPE_REX 11
60 * Data type for a multicast address filter on 8696x.
62 struct fe_filter {
63 u_char data [FE_FILTER_LEN];
67 * fe_softc: per line info and status
69 struct fe_softc {
71 /* Used by "common" codes. */
72 struct arpcom arpcom; /* Ethernet common */
74 /* Used by config codes. */
75 int type;
76 int port_used;
77 struct resource * port_res;
78 bus_space_tag_t iot;
79 bus_space_handle_t ioh;
80 struct resource * irq_res;
81 void * irq_handle;
83 /* Set by probe() and not modified in later phases. */
84 char const * typestr; /* printable name of the interface. */
85 u_short txb_size; /* size of TX buffer, in bytes */
86 u_char proto_dlcr4; /* DLCR4 prototype. */
87 u_char proto_dlcr5; /* DLCR5 prototype. */
88 u_char proto_dlcr6; /* DLCR6 prototype. */
89 u_char proto_dlcr7; /* DLCR7 prototype. */
90 u_char proto_bmpr13; /* BMPR13 prototype. */
91 u_char stability; /* How stable is this? */
92 u_short priv_info; /* info specific to a vendor/model. */
94 /* Vendor/model specific hooks. */
95 void (*init)(struct fe_softc *); /* Just before fe_init(). */
96 void (*stop)(struct fe_softc *); /* Just after fe_stop(). */
98 /* Transmission buffer management. */
99 u_short txb_free; /* free bytes in TX buffer */
100 u_char txb_count; /* number of packets in TX buffer */
101 u_char txb_sched; /* number of scheduled packets */
103 /* Excessive collision counter (see fe_tint() for details.) */
104 u_char tx_excolls; /* # of excessive collisions. */
106 /* Multicast address filter management. */
107 u_char filter_change; /* MARs must be changed ASAP. */
108 struct fe_filter filter;/* new filter value. */
110 /* Network management. */
111 struct ifmib_iso_8802_3 mibdata;
113 /* Media information. */
114 struct ifmedia media; /* used by if_media. */
115 u_short mbitmap; /* bitmap for supported media; see bit2media */
116 int defmedia; /* default media */
117 void (* msel)(struct fe_softc *); /* media selector. */
121 #define sc_if arpcom.ac_if
122 #define sc_unit arpcom.ac_if.if_dunit
123 #define sc_enaddr arpcom.ac_enaddr
126 struct fe_simple_probe_struct {
127 u_char port; /* Offset from the base I/O address. */
128 u_char mask; /* Bits to be checked. */
129 u_char bits; /* Values to be compared against. */
133 extern devclass_t fe_devclass;
135 int fe_attach(device_t);
136 int fe_alloc_port(device_t, int);
137 int fe_alloc_irq(device_t, int);
138 void fe_release_resource(device_t);
140 int fe_simple_probe(struct fe_softc const *,
141 struct fe_simple_probe_struct const *);
142 int valid_Ether_p(u_char const *, unsigned);
143 void fe_softc_defaults(struct fe_softc *);
144 void fe_stop(struct fe_softc *sc);
145 void fe_irq_failure(char const *, int, int, char const *);
146 void fe_msel_965(struct fe_softc *);
147 void fe_read_eeprom_jli(struct fe_softc *, u_char *);
148 void fe_init_jli(struct fe_softc *);
149 void fe_read_eeprom_ssi(struct fe_softc *, u_char *);
150 void fe_read_eeprom_lnx(struct fe_softc *, u_char *);
151 void fe_init_lnx(struct fe_softc *);
152 void fe_init_ubn(struct fe_softc *);
155 #define fe_inb(sc, port) \
156 bus_space_read_1((sc)->iot, (sc)->ioh, (port))
158 #define fe_outb(sc, port, value) \
159 bus_space_write_1((sc)->iot, (sc)->ioh, (port), (value))
161 #define fe_inw(sc, port) \
162 bus_space_read_2((sc)->iot, (sc)->ioh, (port))
164 #define fe_outw(sc, port, value) \
165 bus_space_write_2((sc)->iot, (sc)->ioh, (port), (value))
167 #define fe_insb(sc, port, addr, count) \
168 bus_space_read_multi_1((sc)->iot, (sc)->ioh, (port), (addr), (count))
170 #define fe_outsb(sc, port, addr, count) \
171 bus_space_write_multi_1((sc)->iot, (sc)->ioh, (port), (addr), (count))
173 #define fe_insw(sc, port, addr, count) \
174 bus_space_read_multi_2((sc)->iot, (sc)->ioh, (port), (addr), (count))
176 #define fe_outsw(sc, port, addr, count) \
177 bus_space_write_multi_2((sc)->iot, (sc)->ioh, (port), (addr), (count))
179 #define fe_inblk(sc, port, addr, count) \
180 bus_space_read_region_1((sc)->iot, (sc)->ioh, (port), (addr), (count))
182 #define fe_outblk(sc, port, addr, count) \
183 bus_space_write_region_1((sc)->iot, (sc)->ioh, (port), (addr), (count))