1139749Simp/*- 265832Snyan * All Rights Reserved, Copyright (C) Fujitsu Limited 1995 365832Snyan * 465832Snyan * This software may be used, modified, copied, distributed, and sold, in 565832Snyan * both source and binary form provided that the above copyright, these 665832Snyan * terms and the following disclaimer are retained. The name of the author 765832Snyan * and/or the contributor may not be used to endorse or promote products 865832Snyan * derived from this software without specific prior written permission. 965832Snyan * 1065832Snyan * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND THE CONTRIBUTOR ``AS IS'' AND 1165832Snyan * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1265832Snyan * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1365832Snyan * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR THE CONTRIBUTOR BE LIABLE 1465832Snyan * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 1565832Snyan * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 1665832Snyan * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION. 1765832Snyan * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 1865832Snyan * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 1965832Snyan * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2065832Snyan * SUCH DAMAGE. 2165832Snyan * 2265832Snyan * $FreeBSD: releng/10.2/sys/dev/fe/if_fevar.h 179959 2008-06-23 18:16:25Z jhb $ 2365832Snyan */ 2465832Snyan 2565832Snyan/* How many registers does an fe-supported adapter have at maximum? */ 2665832Snyan#define MAXREGISTERS 32 2765832Snyan 2865832Snyan/* Shouldn't these be defined somewhere else such as isa_device.h? */ 2965832Snyan#define NO_IRQ 0 3065832Snyan 3165832Snyan/* Flags for stability. */ 3265832Snyan#define UNSTABLE_IRQ 0x01 /* IRQ setting may be incorrect. */ 3365832Snyan#define UNSTABLE_MAC 0x02 /* Probed MAC address may be incorrect. */ 3465832Snyan#define UNSTABLE_TYPE 0x04 /* Probed vendor/model may be incorrect. */ 3565832Snyan 3665832Snyan/* Mapping between media bitmap (in fe_softc.mbitmap) and ifm_media. */ 3765832Snyan#define MB_HA 0x0001 3865832Snyan#define MB_HM 0x0002 3965832Snyan#define MB_HT 0x0004 4065832Snyan#define MB_H2 0x0008 4165832Snyan#define MB_H5 0x0010 4265832Snyan#define MB_HF 0x0020 4365832Snyan#define MB_FT 0x0040 4465832Snyan 4565832Snyan/* Card types. */ 4665832Snyan#define FE_TYPE_SSI 1 4765832Snyan#define FE_TYPE_JLI 2 4865832Snyan#define FE_TYPE_FMV 3 4965832Snyan#define FE_TYPE_LNX 4 5065832Snyan#define FE_TYPE_UBN 5 5165832Snyan#define FE_TYPE_GWY 6 5265832Snyan#define FE_TYPE_MBH 7 5365832Snyan#define FE_TYPE_TDK 8 5465832Snyan#define FE_TYPE_RE1000 9 5565832Snyan#define FE_TYPE_CNET9NE 10 5665832Snyan#define FE_TYPE_REX 11 5765832Snyan 5865832Snyan/* 5965832Snyan * Data type for a multicast address filter on 8696x. 6065832Snyan */ 6165832Snyanstruct fe_filter { 6265832Snyan u_char data [FE_FILTER_LEN]; 6365832Snyan}; 6465832Snyan 6565832Snyan/* 6665832Snyan * fe_softc: per line info and status 6765832Snyan */ 6865832Snyanstruct fe_softc { 6965832Snyan 7065832Snyan /* Used by "common" codes. */ 71147256Sbrooks struct ifnet *ifp; 72121816Sbrooks int sc_unit; 73147256Sbrooks u_char enaddr[6]; 7465832Snyan 7565832Snyan /* Used by config codes. */ 7665832Snyan int type; 7765832Snyan int port_used; 7865832Snyan struct resource * port_res; 7965832Snyan struct resource * irq_res; 8065832Snyan void * irq_handle; 8165832Snyan 8265832Snyan /* Set by probe() and not modified in later phases. */ 8365832Snyan char const * typestr; /* printable name of the interface. */ 8465832Snyan u_short txb_size; /* size of TX buffer, in bytes */ 8565832Snyan u_char proto_dlcr4; /* DLCR4 prototype. */ 8665832Snyan u_char proto_dlcr5; /* DLCR5 prototype. */ 8765832Snyan u_char proto_dlcr6; /* DLCR6 prototype. */ 8865832Snyan u_char proto_dlcr7; /* DLCR7 prototype. */ 8965832Snyan u_char proto_bmpr13; /* BMPR13 prototype. */ 9065832Snyan u_char stability; /* How stable is this? */ 9165832Snyan u_short priv_info; /* info specific to a vendor/model. */ 9265832Snyan 9365832Snyan /* Vendor/model specific hooks. */ 9465832Snyan void (*init)(struct fe_softc *); /* Just before fe_init(). */ 9565832Snyan void (*stop)(struct fe_softc *); /* Just after fe_stop(). */ 9665832Snyan 9765832Snyan /* Transmission buffer management. */ 9865832Snyan u_short txb_free; /* free bytes in TX buffer */ 9965832Snyan u_char txb_count; /* number of packets in TX buffer */ 10065832Snyan u_char txb_sched; /* number of scheduled packets */ 10165832Snyan 10265832Snyan /* Excessive collision counter (see fe_tint() for details.) */ 10365832Snyan u_char tx_excolls; /* # of excessive collisions. */ 10465832Snyan 10565832Snyan /* Multicast address filter management. */ 10665832Snyan u_char filter_change; /* MARs must be changed ASAP. */ 10765832Snyan struct fe_filter filter;/* new filter value. */ 10865832Snyan 10965832Snyan /* Network management. */ 11065832Snyan struct ifmib_iso_8802_3 mibdata; 11165832Snyan 11265832Snyan /* Media information. */ 11365832Snyan struct ifmedia media; /* used by if_media. */ 11465832Snyan u_short mbitmap; /* bitmap for supported media; see bit2media */ 11565832Snyan int defmedia; /* default media */ 11665832Snyan void (* msel)(struct fe_softc *); /* media selector. */ 11765832Snyan 118179493Sjhb struct mtx lock; 119179493Sjhb struct callout timer; 120179959Sjhb int tx_timeout; 12165832Snyan}; 12265832Snyan 12365832Snyanstruct fe_simple_probe_struct { 12465832Snyan u_char port; /* Offset from the base I/O address. */ 12565832Snyan u_char mask; /* Bits to be checked. */ 12665832Snyan u_char bits; /* Values to be compared against. */ 12765832Snyan}; 12865832Snyan 129179493Sjhb#define FE_LOCK(sc) mtx_lock(&(sc)->lock) 130179493Sjhb#define FE_UNLOCK(sc) mtx_unlock(&(sc)->lock) 131179493Sjhb#define FE_ASSERT_LOCKED(sc) mtx_assert(&(sc)->lock, MA_OWNED) 13265832Snyan 13365832Snyanextern devclass_t fe_devclass; 13465832Snyan 13565832Snyanint fe_attach(device_t); 13665832Snyanint fe_alloc_port(device_t, int); 13765832Snyanint fe_alloc_irq(device_t, int); 13865832Snyanvoid fe_release_resource(device_t); 13965832Snyan 14065832Snyanint fe_simple_probe(struct fe_softc const *, 14165832Snyan struct fe_simple_probe_struct const *); 142139972Simpint fe_valid_Ether_p(u_char const *, unsigned); 14365832Snyanvoid fe_softc_defaults(struct fe_softc *); 14465832Snyanvoid fe_stop(struct fe_softc *sc); 14565832Snyanvoid fe_irq_failure(char const *, int, int, char const *); 14665832Snyanvoid fe_msel_965(struct fe_softc *); 14765832Snyanvoid fe_read_eeprom_jli(struct fe_softc *, u_char *); 14865832Snyanvoid fe_init_jli(struct fe_softc *); 14965832Snyanvoid fe_read_eeprom_ssi(struct fe_softc *, u_char *); 15065832Snyanvoid fe_read_eeprom_lnx(struct fe_softc *, u_char *); 15165832Snyanvoid fe_init_lnx(struct fe_softc *); 15265832Snyanvoid fe_init_ubn(struct fe_softc *); 15365832Snyan 15465832Snyan 15565832Snyan#define fe_inb(sc, port) \ 156179959Sjhb bus_read_1((sc)->port_res, (port)) 15765832Snyan 15865832Snyan#define fe_outb(sc, port, value) \ 159179959Sjhb bus_write_1((sc)->port_res, (port), (value)) 16065832Snyan 16165832Snyan#define fe_inw(sc, port) \ 162179959Sjhb bus_read_2((sc)->port_res, (port)) 16365832Snyan 16465832Snyan#define fe_outw(sc, port, value) \ 165179959Sjhb bus_write_2((sc)->port_res, (port), (value)) 16665832Snyan 16765832Snyan#define fe_insb(sc, port, addr, count) \ 168179959Sjhb bus_read_multi_1((sc)->port_res, (port), (addr), (count)) 16965832Snyan 17065832Snyan#define fe_outsb(sc, port, addr, count) \ 171179959Sjhb bus_write_multi_1((sc)->port_res, (port), (addr), (count)) 17265832Snyan 17365832Snyan#define fe_insw(sc, port, addr, count) \ 174179959Sjhb bus_read_multi_2((sc)->port_res, (port), (addr), (count)) 17565832Snyan 17665832Snyan#define fe_outsw(sc, port, addr, count) \ 177179959Sjhb bus_write_multi_2((sc)->port_res, (port), (addr), (count)) 17865832Snyan 17965832Snyan#define fe_inblk(sc, port, addr, count) \ 180179959Sjhb bus_read_region_1((sc)->port_res, (port), (addr), (count)) 18165832Snyan 18265832Snyan#define fe_outblk(sc, port, addr, count) \ 183179959Sjhb bus_write_region_1((sc)->port_res, (port), (addr), (count)) 184