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