if_edvar.h revision 64777
150770Sdfr/* 250770Sdfr * Copyright (c) 1995, David Greenman 350770Sdfr * All rights reserved. 450770Sdfr * 550770Sdfr * Redistribution and use in source and binary forms, with or without 650770Sdfr * modification, are permitted provided that the following conditions 750770Sdfr * are met: 850770Sdfr * 1. Redistributions of source code must retain the above copyright 950770Sdfr * notice unmodified, this list of conditions, and the following 1050770Sdfr * disclaimer. 1150770Sdfr * 2. Redistributions in binary form must reproduce the above copyright 1250770Sdfr * notice, this list of conditions and the following disclaimer in the 1350770Sdfr * documentation and/or other materials provided with the distribution. 1450770Sdfr * 1550770Sdfr * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1650770Sdfr * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1750770Sdfr * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1850770Sdfr * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1950770Sdfr * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2050770Sdfr * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2150770Sdfr * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2250770Sdfr * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2350770Sdfr * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2450770Sdfr * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2550770Sdfr * SUCH DAMAGE. 2650770Sdfr * 2750959Speter * $FreeBSD: head/sys/dev/ed/if_edvar.h 64777 2000-08-17 12:15:45Z nyan $ 2850770Sdfr */ 2950770Sdfr 3050770Sdfr/* 3150770Sdfr * ed_softc: per line info and status 3250770Sdfr */ 3350770Sdfrstruct ed_softc { 3450770Sdfr struct arpcom arpcom; /* ethernet common */ 3550770Sdfr 3650770Sdfr char *type_str; /* pointer to type string */ 3750770Sdfr u_char vendor; /* interface vendor */ 3850770Sdfr u_char type; /* interface type code */ 3950770Sdfr u_char gone; /* HW missing, presumed having a good time */ 4050770Sdfr 4150770Sdfr int port_rid; /* resource id for port range */ 4250770Sdfr int port_used; /* nonzero if ports used */ 4350770Sdfr struct resource* port_res; /* resource for port range */ 4450770Sdfr int mem_rid; /* resource id for memory range */ 4550770Sdfr int mem_used; /* nonzero if memory used */ 4650770Sdfr struct resource* mem_res; /* resource for memory range */ 4750770Sdfr int irq_rid; /* resource id for irq */ 4850770Sdfr struct resource* irq_res; /* resource for irq */ 4950770Sdfr void* irq_handle; /* handle for irq handler */ 5050770Sdfr 5164777Snyan int nic_offset; /* NIC (DS8390) I/O bus address offset */ 5264777Snyan int asic_offset; /* ASIC I/O bus address offset */ 5364630Stanimura 5450770Sdfr/* 5550770Sdfr * The following 'proto' variable is part of a work-around for 8013EBT asics 5650770Sdfr * being write-only. It's sort of a prototype/shadow of the real thing. 5750770Sdfr */ 5850770Sdfr u_char wd_laar_proto; 5950770Sdfr u_char cr_proto; 6050770Sdfr u_char isa16bit; /* width of access to card 0=8 or 1=16 */ 6163775Stanimura int chip_type; /* the type of chip (one of ED_CHIP_TYPE_*) */ 6250770Sdfr 6350770Sdfr/* 6450770Sdfr * HP PC LAN PLUS card support. 6550770Sdfr */ 6650770Sdfr 6750770Sdfr u_short hpp_options; /* flags controlling behaviour of the HP card */ 6850770Sdfr u_short hpp_id; /* software revision and other fields */ 6964777Snyan caddr_t hpp_mem_start; /* Memory-mapped IO register address */ 7050770Sdfr 7164777Snyan caddr_t mem_start; /* NIC memory start address */ 7264777Snyan caddr_t mem_end; /* NIC memory end address */ 7364630Stanimura u_int32_t mem_size; /* total NIC memory size */ 7464777Snyan caddr_t mem_ring; /* start of RX ring-buffer (in NIC mem) */ 7550770Sdfr 7650770Sdfr u_char mem_shared; /* NIC memory is shared with host */ 7750770Sdfr u_char xmit_busy; /* transmitter is busy */ 7850770Sdfr u_char txb_cnt; /* number of transmit buffers */ 7950770Sdfr u_char txb_inuse; /* number of TX buffers currently in-use */ 8050770Sdfr 8150770Sdfr u_char txb_new; /* pointer to where new buffer will be added */ 8250770Sdfr u_char txb_next_tx; /* pointer to next buffer ready to xmit */ 8350770Sdfr u_short txb_len[8]; /* buffered xmit buffer lengths */ 8450770Sdfr u_char tx_page_start; /* first page of TX buffer area */ 8550770Sdfr u_char rec_page_start; /* first page of RX ring-buffer */ 8650770Sdfr u_char rec_page_stop; /* last page of RX ring-buffer */ 8750770Sdfr u_char next_packet; /* pointer to next unread RX packet */ 8850770Sdfr struct ifmib_iso_8802_3 mibdata; /* stuff for network mgmt */ 8950770Sdfr}; 9052247Smdodd 9164777Snyan#define ed_nic_inb(sc, port) \ 9264777Snyan bus_space_read_1(rman_get_bustag((sc)->port_res), \ 9364777Snyan rman_get_bushandle((sc)->port_res), (sc)->nic_offset + (port)) 9464777Snyan 9564777Snyan#define ed_nic_outb(sc, port, value) \ 9664777Snyan bus_space_write_1(rman_get_bustag((sc)->port_res), \ 9764777Snyan rman_get_bushandle((sc)->port_res), (sc)->nic_offset + (port), \ 9864777Snyan (value)) 9964777Snyan 10064777Snyan#define ed_nic_inw(sc, port) \ 10164777Snyan bus_space_read_2(rman_get_bustag((sc)->port_res), \ 10264777Snyan rman_get_bushandle((sc)->port_res), (sc)->nic_offset + (port)) 10364777Snyan 10464777Snyan#define ed_nic_outw(sc, port, value) \ 10564777Snyan bus_space_write_2(rman_get_bustag((sc)->port_res), \ 10664777Snyan rman_get_bushandle((sc)->port_res), (sc)->nic_offset + (port), \ 10764777Snyan (value)) 10864777Snyan 10964777Snyan#define ed_nic_insb(sc, port, addr, count) \ 11064777Snyan bus_space_read_multi_1(rman_get_bustag((sc)->port_res), \ 11164777Snyan rman_get_bushandle((sc)->port_res), \ 11264777Snyan (sc)->nic_offset + (port), (addr), (count)) 11364777Snyan 11464777Snyan#define ed_nic_outsb(sc, port, addr, count) \ 11564777Snyan bus_space_write_multi_1(rman_get_bustag((sc)->port_res), \ 11664777Snyan rman_get_bushandle((sc)->port_res), \ 11764777Snyan (sc)->nic_offset + (port), (addr), (count)) 11864777Snyan 11964777Snyan#define ed_nic_insw(sc, port, addr, count) \ 12064777Snyan bus_space_read_multi_2(rman_get_bustag((sc)->port_res), \ 12164777Snyan rman_get_bushandle((sc)->port_res), \ 12264777Snyan (sc)->nic_offset + (port), (u_int16_t *)(addr), (count)) 12364777Snyan 12464777Snyan#define ed_nic_outsw(sc, port, addr, count) \ 12564777Snyan bus_space_write_multi_2(rman_get_bustag((sc)->port_res), \ 12664777Snyan rman_get_bushandle((sc)->port_res), \ 12764777Snyan (sc)->nic_offset + (port), (u_int16_t *)(addr), (count)) 12864777Snyan 12964777Snyan#define ed_nic_insl(sc, port, addr, count) \ 13064777Snyan bus_space_read_multi_4(rman_get_bustag((sc)->port_res), \ 13164777Snyan rman_get_bushandle((sc)->port_res), \ 13264777Snyan (sc)->nic_offset + (port), (u_int32_t *)(addr), (count)) 13364777Snyan 13464777Snyan#define ed_nic_outsl(sc, port, addr, count) \ 13564777Snyan bus_space_write_multi_4(rman_get_bustag((sc)->port_res), \ 13664777Snyan rman_get_bushandle((sc)->port_res), \ 13764777Snyan (sc)->nic_offset + (port), (u_int32_t *)(addr), (count)) 13864777Snyan 13964777Snyan#define ed_asic_inb(sc, port) \ 14064777Snyan bus_space_read_1(rman_get_bustag((sc)->port_res), \ 14164777Snyan rman_get_bushandle((sc)->port_res), (sc)->asic_offset + (port)) 14264777Snyan 14364777Snyan#define ed_asic_outb(sc, port, value) \ 14464777Snyan bus_space_write_1(rman_get_bustag((sc)->port_res), \ 14564777Snyan rman_get_bushandle((sc)->port_res), (sc)->asic_offset + (port), \ 14664777Snyan (value)) 14764777Snyan 14864777Snyan#define ed_asic_inw(sc, port) \ 14964777Snyan bus_space_read_2(rman_get_bustag((sc)->port_res), \ 15064777Snyan rman_get_bushandle((sc)->port_res), (sc)->asic_offset + (port)) 15164777Snyan 15264777Snyan#define ed_asic_outw(sc, port, value) \ 15364777Snyan bus_space_write_2(rman_get_bustag((sc)->port_res), \ 15464777Snyan rman_get_bushandle((sc)->port_res), (sc)->asic_offset + (port), \ 15564777Snyan (value)) 15664777Snyan 15764777Snyan#define ed_asic_insb(sc, port, addr, count) \ 15864777Snyan bus_space_read_multi_1(rman_get_bustag((sc)->port_res), \ 15964777Snyan rman_get_bushandle((sc)->port_res), \ 16064777Snyan (sc)->asic_offset + (port), (addr), (count)) 16164777Snyan 16264777Snyan#define ed_asic_outsb(sc, port, addr, count) \ 16364777Snyan bus_space_write_multi_1(rman_get_bustag((sc)->port_res), \ 16464777Snyan rman_get_bushandle((sc)->port_res), \ 16564777Snyan (sc)->asic_offset + (port), (addr), (count)) 16664777Snyan 16764777Snyan#define ed_asic_insw(sc, port, addr, count) \ 16864777Snyan bus_space_read_multi_2(rman_get_bustag((sc)->port_res), \ 16964777Snyan rman_get_bushandle((sc)->port_res), \ 17064777Snyan (sc)->asic_offset + (port), (u_int16_t *)(addr), (count)) 17164777Snyan 17264777Snyan#define ed_asic_outsw(sc, port, addr, count) \ 17364777Snyan bus_space_write_multi_2(rman_get_bustag((sc)->port_res), \ 17464777Snyan rman_get_bushandle((sc)->port_res), \ 17564777Snyan (sc)->asic_offset + (port), (u_int16_t *)(addr), (count)) 17664777Snyan 17764777Snyan#define ed_asic_insl(sc, port, addr, count) \ 17864777Snyan bus_space_read_multi_4(rman_get_bustag((sc)->port_res), \ 17964777Snyan rman_get_bushandle((sc)->port_res), \ 18064777Snyan (sc)->asic_offset + (port), (u_int32_t *)(addr), (count)) 18164777Snyan 18264777Snyan#define ed_asic_outsl(sc, port, addr, count) \ 18364777Snyan bus_space_write_multi_4(rman_get_bustag((sc)->port_res), \ 18464777Snyan rman_get_bushandle((sc)->port_res), \ 18564777Snyan (sc)->asic_offset + (port), (u_int32_t *)(addr), (count)) 18664777Snyan 18752247Smdoddvoid ed_release_resources __P((device_t)); 18852247Smdoddint ed_alloc_port __P((device_t, int, int)); 18952247Smdoddint ed_alloc_memory __P((device_t, int, int)); 19052247Smdoddint ed_alloc_irq __P((device_t, int, int)); 19152247Smdodd 19252247Smdoddint ed_probe_generic8390 __P((struct ed_softc *)); 19364777Snyanint ed_probe_WD80x3 __P((device_t, int, int)); 19464777Snyanint ed_probe_WD80x3_generic __P((device_t, int, unsigned short *[])); 19564777Snyanint ed_probe_3Com __P((device_t, int, int)); 19664777Snyanint ed_probe_Novell __P((device_t, int, int)); 19764777Snyanint ed_probe_Novell_generic __P((device_t, int)); 19864777Snyanint ed_probe_HP_pclanp __P((device_t, int, int)); 19964777Snyan 20062236Spsint ed_get_Linksys __P((struct ed_softc *)); 20152247Smdodd 20252247Smdoddint ed_attach __P((struct ed_softc *, int, int)); 20354384Simpvoid ed_stop __P((struct ed_softc *)); 20464777Snyanvoid ed_pio_readmem __P((struct ed_softc *, int, unsigned char *, 20564777Snyan unsigned short)); 20664777Snyanvoid ed_pio_writemem __P((struct ed_softc *, char *, 20764777Snyan unsigned short, unsigned short)); 20852247Smdodd 20952247Smdodddriver_intr_t edintr; 21052247Smdodd 211