if_edvar.h revision 141494
1274955Ssvnmir/*- 2274955Ssvnmir * Copyright (c) 1995, David Greenman 3274955Ssvnmir * All rights reserved. 4274955Ssvnmir * 5274955Ssvnmir * Redistribution and use in source and binary forms, with or without 6274955Ssvnmir * modification, are permitted provided that the following conditions 7274955Ssvnmir * are met: 8274955Ssvnmir * 1. Redistributions of source code must retain the above copyright 9274955Ssvnmir * notice unmodified, this list of conditions, and the following 10280031Sdim * disclaimer. 11280031Sdim * 2. Redistributions in binary form must reproduce the above copyright 12274955Ssvnmir * notice, this list of conditions and the following disclaimer in the 13274955Ssvnmir * documentation and/or other materials provided with the distribution. 14274955Ssvnmir * 15274955Ssvnmir * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16274955Ssvnmir * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17274955Ssvnmir * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18274955Ssvnmir * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19274955Ssvnmir * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20274955Ssvnmir * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21274955Ssvnmir * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22280031Sdim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23280031Sdim * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24280031Sdim * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25288943Sdim * SUCH DAMAGE. 26288943Sdim * 27288943Sdim * $FreeBSD: head/sys/dev/ed/if_edvar.h 141494 2005-02-08 05:45:35Z imp $ 28274955Ssvnmir */ 29274955Ssvnmir 30274955Ssvnmir#ifndef SYS_DEV_ED_IF_EDVAR_H 31274955Ssvnmir#define SYS_DEV_ED_IF_EDVAR_H 32274955Ssvnmir/* 33274955Ssvnmir * ed_softc: per line info and status 34274955Ssvnmir */ 35280031Sdimstruct ed_softc { 36280031Sdim struct arpcom arpcom; /* ethernet common */ 37280031Sdim 38274955Ssvnmir char *type_str; /* pointer to type string */ 39280031Sdim u_char vendor; /* interface vendor */ 40274955Ssvnmir u_char type; /* interface type code */ 41274955Ssvnmir u_char gone; /* HW missing, presumed having a good time */ 42274955Ssvnmir 43274955Ssvnmir int port_rid; /* resource id for port range */ 44274955Ssvnmir int port_used; /* nonzero if ports used */ 45274955Ssvnmir struct resource* port_res; /* resource for port range */ 46274955Ssvnmir int mem_rid; /* resource id for memory range */ 47280031Sdim int mem_used; /* nonzero if memory used */ 48274955Ssvnmir struct resource* mem_res; /* resource for memory range */ 49280031Sdim int irq_rid; /* resource id for irq */ 50280031Sdim struct resource* irq_res; /* resource for irq */ 51274955Ssvnmir void* irq_handle; /* handle for irq handler */ 52274955Ssvnmir device_t miibus; /* MII bus for cards with MII. */ 53274955Ssvnmir void (*mii_writebits)(struct ed_softc *, u_int, int); 54274955Ssvnmir u_int (*mii_readbits)(struct ed_softc *, int); 55280031Sdim struct callout_handle tick_ch; /* Callout handle for ed_tick */ 56280031Sdim 57274955Ssvnmir int nic_offset; /* NIC (DS8390) I/O bus address offset */ 58280031Sdim int asic_offset; /* ASIC I/O bus address offset */ 59274955Ssvnmir 60274955Ssvnmir/* 61274955Ssvnmir * The following 'proto' variable is part of a work-around for 8013EBT asics 62274955Ssvnmir * being write-only. It's sort of a prototype/shadow of the real thing. 63274955Ssvnmir */ 64274955Ssvnmir u_char wd_laar_proto; 65274955Ssvnmir u_char cr_proto; 66274955Ssvnmir u_char isa16bit; /* width of access to card 0=8 or 1=16 */ 67274955Ssvnmir int chip_type; /* the type of chip (one of ED_CHIP_TYPE_*) */ 68274955Ssvnmir 69274955Ssvnmir/* 70274955Ssvnmir * HP PC LAN PLUS card support. 71288943Sdim */ 72274955Ssvnmir 73280031Sdim u_short hpp_options; /* flags controlling behaviour of the HP card */ 74274955Ssvnmir u_short hpp_id; /* software revision and other fields */ 75274955Ssvnmir caddr_t hpp_mem_start; /* Memory-mapped IO register address */ 76274955Ssvnmir 77274955Ssvnmir caddr_t mem_start; /* NIC memory start address */ 78274955Ssvnmir caddr_t mem_end; /* NIC memory end address */ 79274955Ssvnmir uint32_t mem_size; /* total NIC memory size */ 80274955Ssvnmir caddr_t mem_ring; /* start of RX ring-buffer (in NIC mem) */ 81274955Ssvnmir 82274955Ssvnmir u_char mem_shared; /* NIC memory is shared with host */ 83280031Sdim u_char xmit_busy; /* transmitter is busy */ 84274955Ssvnmir u_char txb_cnt; /* number of transmit buffers */ 85274955Ssvnmir u_char txb_inuse; /* number of TX buffers currently in-use */ 86274955Ssvnmir 87274955Ssvnmir u_char txb_new; /* pointer to where new buffer will be added */ 88274955Ssvnmir u_char txb_next_tx; /* pointer to next buffer ready to xmit */ 89274955Ssvnmir u_short txb_len[8]; /* buffered xmit buffer lengths */ 90274955Ssvnmir u_char tx_page_start; /* first page of TX buffer area */ 91274955Ssvnmir u_char rec_page_start; /* first page of RX ring-buffer */ 92274955Ssvnmir u_char rec_page_stop; /* last page of RX ring-buffer */ 93274955Ssvnmir u_char next_packet; /* pointer to next unread RX packet */ 94274955Ssvnmir struct ifmib_iso_8802_3 mibdata; /* stuff for network mgmt */ 95274955Ssvnmir}; 96274955Ssvnmir 97274955Ssvnmir#define ed_nic_inb(sc, port) \ 98280031Sdim bus_space_read_1(rman_get_bustag((sc)->port_res), \ 99274955Ssvnmir rman_get_bushandle((sc)->port_res), (sc)->nic_offset + (port)) 100274955Ssvnmir 101274955Ssvnmir#define ed_nic_outb(sc, port, value) \ 102274955Ssvnmir bus_space_write_1(rman_get_bustag((sc)->port_res), \ 103274955Ssvnmir rman_get_bushandle((sc)->port_res), (sc)->nic_offset + (port), \ 104274955Ssvnmir (value)) 105274955Ssvnmir 106274955Ssvnmir#define ed_nic_inw(sc, port) \ 107280031Sdim bus_space_read_2(rman_get_bustag((sc)->port_res), \ 108274955Ssvnmir rman_get_bushandle((sc)->port_res), (sc)->nic_offset + (port)) 109274955Ssvnmir 110274955Ssvnmir#define ed_nic_outw(sc, port, value) \ 111274955Ssvnmir bus_space_write_2(rman_get_bustag((sc)->port_res), \ 112274955Ssvnmir rman_get_bushandle((sc)->port_res), (sc)->nic_offset + (port), \ 113274955Ssvnmir (value)) 114274955Ssvnmir 115280031Sdim#define ed_nic_insb(sc, port, addr, count) \ 116274955Ssvnmir bus_space_read_multi_1(rman_get_bustag((sc)->port_res), \ 117274955Ssvnmir rman_get_bushandle((sc)->port_res), \ 118274955Ssvnmir (sc)->nic_offset + (port), (addr), (count)) 119274955Ssvnmir 120274955Ssvnmir#define ed_nic_outsb(sc, port, addr, count) \ 121280031Sdim bus_space_write_multi_1(rman_get_bustag((sc)->port_res), \ 122274955Ssvnmir rman_get_bushandle((sc)->port_res), \ 123280031Sdim (sc)->nic_offset + (port), (addr), (count)) 124280031Sdim 125274955Ssvnmir#define ed_nic_insw(sc, port, addr, count) \ 126274955Ssvnmir bus_space_read_multi_2(rman_get_bustag((sc)->port_res), \ 127274955Ssvnmir rman_get_bushandle((sc)->port_res), \ 128274955Ssvnmir (sc)->nic_offset + (port), (uint16_t *)(addr), (count)) 129274955Ssvnmir 130280031Sdim#define ed_nic_outsw(sc, port, addr, count) \ 131274955Ssvnmir bus_space_write_multi_2(rman_get_bustag((sc)->port_res), \ 132280031Sdim rman_get_bushandle((sc)->port_res), \ 133280031Sdim (sc)->nic_offset + (port), (uint16_t *)(addr), (count)) 134274955Ssvnmir 135280031Sdim#define ed_nic_insl(sc, port, addr, count) \ 136274955Ssvnmir bus_space_read_multi_4(rman_get_bustag((sc)->port_res), \ 137274955Ssvnmir rman_get_bushandle((sc)->port_res), \ 138280031Sdim (sc)->nic_offset + (port), (uint32_t *)(addr), (count)) 139280031Sdim 140280031Sdim#define ed_nic_outsl(sc, port, addr, count) \ 141288943Sdim bus_space_write_multi_4(rman_get_bustag((sc)->port_res), \ 142274955Ssvnmir rman_get_bushandle((sc)->port_res), \ 143274955Ssvnmir (sc)->nic_offset + (port), (uint32_t *)(addr), (count)) 144280031Sdim 145274955Ssvnmir#define ed_asic_inb(sc, port) \ 146274955Ssvnmir bus_space_read_1(rman_get_bustag((sc)->port_res), \ 147274955Ssvnmir rman_get_bushandle((sc)->port_res), (sc)->asic_offset + (port)) 148280031Sdim 149274955Ssvnmir#define ed_asic_outb(sc, port, value) \ 150280031Sdim bus_space_write_1(rman_get_bustag((sc)->port_res), \ 151280031Sdim rman_get_bushandle((sc)->port_res), (sc)->asic_offset + (port), \ 152280031Sdim (value)) 153280031Sdim 154274955Ssvnmir#define ed_asic_inw(sc, port) \ 155274955Ssvnmir bus_space_read_2(rman_get_bustag((sc)->port_res), \ 156280031Sdim rman_get_bushandle((sc)->port_res), (sc)->asic_offset + (port)) 157274955Ssvnmir 158274955Ssvnmir#define ed_asic_outw(sc, port, value) \ 159274955Ssvnmir bus_space_write_2(rman_get_bustag((sc)->port_res), \ 160280031Sdim rman_get_bushandle((sc)->port_res), (sc)->asic_offset + (port), \ 161280031Sdim (value)) 162280031Sdim 163280031Sdim#define ed_asic_insb(sc, port, addr, count) \ 164274955Ssvnmir bus_space_read_multi_1(rman_get_bustag((sc)->port_res), \ 165274955Ssvnmir rman_get_bushandle((sc)->port_res), \ 166274955Ssvnmir (sc)->asic_offset + (port), (addr), (count)) 167274955Ssvnmir 168274955Ssvnmir#define ed_asic_outsb(sc, port, addr, count) \ 169288943Sdim bus_space_write_multi_1(rman_get_bustag((sc)->port_res), \ 170288943Sdim rman_get_bushandle((sc)->port_res), \ 171274955Ssvnmir (sc)->asic_offset + (port), (addr), (count)) 172274955Ssvnmir 173274955Ssvnmir#define ed_asic_insw(sc, port, addr, count) \ 174274955Ssvnmir bus_space_read_multi_2(rman_get_bustag((sc)->port_res), \ 175274955Ssvnmir rman_get_bushandle((sc)->port_res), \ 176274955Ssvnmir (sc)->asic_offset + (port), (uint16_t *)(addr), (count)) 177288943Sdim 178288943Sdim#define ed_asic_outsw(sc, port, addr, count) \ 179288943Sdim bus_space_write_multi_2(rman_get_bustag((sc)->port_res), \ 180274955Ssvnmir rman_get_bushandle((sc)->port_res), \ 181274955Ssvnmir (sc)->asic_offset + (port), (uint16_t *)(addr), (count)) 182274955Ssvnmir 183274955Ssvnmir#define ed_asic_insl(sc, port, addr, count) \ 184274955Ssvnmir bus_space_read_multi_4(rman_get_bustag((sc)->port_res), \ 185274955Ssvnmir rman_get_bushandle((sc)->port_res), \ 186274955Ssvnmir (sc)->asic_offset + (port), (uint32_t *)(addr), (count)) 187280031Sdim 188280031Sdim#define ed_asic_outsl(sc, port, addr, count) \ 189274955Ssvnmir bus_space_write_multi_4(rman_get_bustag((sc)->port_res), \ 190280031Sdim rman_get_bushandle((sc)->port_res), \ 191280031Sdim (sc)->asic_offset + (port), (uint32_t *)(addr), (count)) 192274955Ssvnmir 193280031Sdimvoid ed_release_resources(device_t); 194274955Ssvnmirint ed_alloc_port(device_t, int, int); 195274955Ssvnmirint ed_alloc_memory(device_t, int, int); 196280031Sdimint ed_alloc_irq(device_t, int, int); 197280031Sdim 198280031Sdimint ed_probe_generic8390(struct ed_softc *); 199288943Sdimint ed_probe_WD80x3(device_t, int, int); 200274955Ssvnmirint ed_probe_WD80x3_generic(device_t, int, unsigned short *[]); 201274955Ssvnmirint ed_probe_3Com(device_t, int, int); 202280031Sdimint ed_probe_SIC(device_t, int, int); 203274955Ssvnmirint ed_probe_Novell(device_t, int, int); 204280031Sdimint ed_probe_Novell_generic(device_t, int); 205280031Sdimint ed_probe_HP_pclanp(device_t, int, int); 206280031Sdim 207280031Sdimint ed_attach(device_t); 208274955Ssvnmirint ed_detach(device_t); 209280031Sdimvoid ed_stop(struct ed_softc *); 210274955Ssvnmirvoid ed_pio_readmem(struct ed_softc *, long, unsigned char *, unsigned short); 211274955Ssvnmirvoid ed_pio_writemem(struct ed_softc *, char *, unsigned short, unsigned short); 212274955Ssvnmir#ifndef ED_NO_MIIBUS 213274955Ssvnmirint ed_miibus_readreg(device_t, int, int); 214274955Ssvnmirvoid ed_miibus_writereg(device_t, int, int, int); 215274955Ssvnmirint ed_ifmedia_upd(struct ifnet *); 216274955Ssvnmirvoid ed_ifmedia_sts(struct ifnet *, struct ifmediareq *); 217274955Ssvnmirvoid ed_child_detached(device_t, device_t); 218274955Ssvnmir#endif 219274955Ssvnmir 220274955Ssvnmirdriver_intr_t edintr; 221274955Ssvnmir 222280031Sdimextern devclass_t ed_devclass; 223274955Ssvnmir#endif /* SYS_DEV_ED_IF_EDVAR_H */ 224274955Ssvnmir