xref: /dflybsd-src/sys/dev/netif/bge/if_bgevar.h (revision 26595b188cbe468e3b07a13e2a5cfaa3de0d7843)
18ff8bce6SSepherosa Ziehau /*
28ff8bce6SSepherosa Ziehau  * Copyright (c) 2001 Wind River Systems
38ff8bce6SSepherosa Ziehau  * Copyright (c) 1997, 1998, 1999, 2001
48ff8bce6SSepherosa Ziehau  *	Bill Paul <wpaul@windriver.com>.  All rights reserved.
58ff8bce6SSepherosa Ziehau  *
68ff8bce6SSepherosa Ziehau  * Redistribution and use in source and binary forms, with or without
78ff8bce6SSepherosa Ziehau  * modification, are permitted provided that the following conditions
88ff8bce6SSepherosa Ziehau  * are met:
98ff8bce6SSepherosa Ziehau  * 1. Redistributions of source code must retain the above copyright
108ff8bce6SSepherosa Ziehau  *    notice, this list of conditions and the following disclaimer.
118ff8bce6SSepherosa Ziehau  * 2. Redistributions in binary form must reproduce the above copyright
128ff8bce6SSepherosa Ziehau  *    notice, this list of conditions and the following disclaimer in the
138ff8bce6SSepherosa Ziehau  *    documentation and/or other materials provided with the distribution.
148ff8bce6SSepherosa Ziehau  * 3. All advertising materials mentioning features or use of this software
158ff8bce6SSepherosa Ziehau  *    must display the following acknowledgement:
168ff8bce6SSepherosa Ziehau  *	This product includes software developed by Bill Paul.
178ff8bce6SSepherosa Ziehau  * 4. Neither the name of the author nor the names of any co-contributors
188ff8bce6SSepherosa Ziehau  *    may be used to endorse or promote products derived from this software
198ff8bce6SSepherosa Ziehau  *    without specific prior written permission.
208ff8bce6SSepherosa Ziehau  *
218ff8bce6SSepherosa Ziehau  * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
228ff8bce6SSepherosa Ziehau  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
238ff8bce6SSepherosa Ziehau  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
248ff8bce6SSepherosa Ziehau  * ARE DISCLAIMED.  IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
258ff8bce6SSepherosa Ziehau  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
268ff8bce6SSepherosa Ziehau  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
278ff8bce6SSepherosa Ziehau  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
288ff8bce6SSepherosa Ziehau  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
298ff8bce6SSepherosa Ziehau  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
308ff8bce6SSepherosa Ziehau  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
318ff8bce6SSepherosa Ziehau  * THE POSSIBILITY OF SUCH DAMAGE.
328ff8bce6SSepherosa Ziehau  *
338ff8bce6SSepherosa Ziehau  * $FreeBSD: src/sys/dev/bge/if_bgereg.h,v 1.1.2.16 2004/09/23 20:11:18 ps Exp $
348ff8bce6SSepherosa Ziehau  */
358ff8bce6SSepherosa Ziehau 
368ff8bce6SSepherosa Ziehau #ifndef _IF_BGEVAR_H_
378ff8bce6SSepherosa Ziehau #define _IF_BGEVAR_H_
388ff8bce6SSepherosa Ziehau 
398ff8bce6SSepherosa Ziehau /*
408ff8bce6SSepherosa Ziehau  * Tigon general information block. This resides in host memory
418ff8bce6SSepherosa Ziehau  * and contains the status counters, ring control blocks and
428ff8bce6SSepherosa Ziehau  * producer pointers.
438ff8bce6SSepherosa Ziehau  */
448ff8bce6SSepherosa Ziehau 
458ff8bce6SSepherosa Ziehau struct bge_gib {
468ff8bce6SSepherosa Ziehau 	struct bge_stats	bge_stats;
478ff8bce6SSepherosa Ziehau 	struct bge_rcb		bge_tx_rcb[16];
488ff8bce6SSepherosa Ziehau 	struct bge_rcb		bge_std_rx_rcb;
498ff8bce6SSepherosa Ziehau 	struct bge_rcb		bge_jumbo_rx_rcb;
508ff8bce6SSepherosa Ziehau 	struct bge_rcb		bge_mini_rx_rcb;
518ff8bce6SSepherosa Ziehau 	struct bge_rcb		bge_return_rcb;
528ff8bce6SSepherosa Ziehau };
538ff8bce6SSepherosa Ziehau 
548ff8bce6SSepherosa Ziehau #define BGE_MIN_FRAMELEN	60
558ff8bce6SSepherosa Ziehau #define BGE_MAX_FRAMELEN	1536
568ff8bce6SSepherosa Ziehau #define BGE_JUMBO_FRAMELEN	9018
578ff8bce6SSepherosa Ziehau #define BGE_JUMBO_MTU		(BGE_JUMBO_FRAMELEN-ETHER_HDR_LEN-ETHER_CRC_LEN)
588ff8bce6SSepherosa Ziehau 
598ff8bce6SSepherosa Ziehau #define BGE_TIMEOUT		5000
601dfb1558SSepherosa Ziehau #define BGE_FIRMWARE_TIMEOUT	100000
618ff8bce6SSepherosa Ziehau #define BGE_TXCONS_UNSET	0xFFFF	/* impossible value */
628ff8bce6SSepherosa Ziehau 
638ff8bce6SSepherosa Ziehau /*
648ff8bce6SSepherosa Ziehau  * Other utility macros.
658ff8bce6SSepherosa Ziehau  */
668ff8bce6SSepherosa Ziehau #define BGE_INC(x, y)		(x) = ((x) + 1) % (y)
678ff8bce6SSepherosa Ziehau 
688ff8bce6SSepherosa Ziehau /*
69*ea320e53SSepherosa Ziehau  * BAR0 MAC register access macros.  The Tigon always uses memory mapped
70*ea320e53SSepherosa Ziehau  * register accesses and all registers must be accessed with 32 bit
71*ea320e53SSepherosa Ziehau  * operations.
728ff8bce6SSepherosa Ziehau  */
738ff8bce6SSepherosa Ziehau 
748ff8bce6SSepherosa Ziehau #define CSR_WRITE_4(sc, reg, val)	\
758ff8bce6SSepherosa Ziehau 	bus_space_write_4(sc->bge_btag, sc->bge_bhandle, reg, val)
768ff8bce6SSepherosa Ziehau 
778ff8bce6SSepherosa Ziehau #define CSR_READ_4(sc, reg)		\
788ff8bce6SSepherosa Ziehau 	bus_space_read_4(sc->bge_btag, sc->bge_bhandle, reg)
798ff8bce6SSepherosa Ziehau 
808ff8bce6SSepherosa Ziehau #define BGE_SETBIT(sc, reg, x)	\
818ff8bce6SSepherosa Ziehau 	CSR_WRITE_4(sc, reg, (CSR_READ_4(sc, reg) | x))
828ff8bce6SSepherosa Ziehau 
838ff8bce6SSepherosa Ziehau #define BGE_CLRBIT(sc, reg, x)	\
848ff8bce6SSepherosa Ziehau 	CSR_WRITE_4(sc, reg, (CSR_READ_4(sc, reg) & ~x))
858ff8bce6SSepherosa Ziehau 
86*ea320e53SSepherosa Ziehau /* BAR2 APE register access macros. */
87*ea320e53SSepherosa Ziehau #define	APE_WRITE_4(sc, reg, val)	\
88*ea320e53SSepherosa Ziehau 	bus_write_4(sc->bge_res2, reg, val)
89*ea320e53SSepherosa Ziehau 
90*ea320e53SSepherosa Ziehau #define	APE_READ_4(sc, reg)		\
91*ea320e53SSepherosa Ziehau 	bus_read_4(sc->bge_res2, reg)
92*ea320e53SSepherosa Ziehau 
93*ea320e53SSepherosa Ziehau #define	APE_SETBIT(sc, reg, x)	\
94*ea320e53SSepherosa Ziehau 	APE_WRITE_4(sc, reg, (APE_READ_4(sc, reg) | (x)))
95*ea320e53SSepherosa Ziehau #define	APE_CLRBIT(sc, reg, x)	\
96*ea320e53SSepherosa Ziehau 	APE_WRITE_4(sc, reg, (APE_READ_4(sc, reg) & ~(x)))
97*ea320e53SSepherosa Ziehau 
988ff8bce6SSepherosa Ziehau #define BGE_MEMWIN_READ(sc, x, val)				\
998ff8bce6SSepherosa Ziehau do {								\
1008ff8bce6SSepherosa Ziehau 	pci_write_config(sc->bge_dev, BGE_PCI_MEMWIN_BASEADDR,	\
1018ff8bce6SSepherosa Ziehau 	    (0xFFFF0000 & x), 4);				\
1028ff8bce6SSepherosa Ziehau 	val = CSR_READ_4(sc, BGE_MEMWIN_START + (x & 0xFFFF));	\
1038ff8bce6SSepherosa Ziehau } while(0)
1048ff8bce6SSepherosa Ziehau 
1058ff8bce6SSepherosa Ziehau #define BGE_MEMWIN_WRITE(sc, x, val)				\
1068ff8bce6SSepherosa Ziehau do {								\
1078ff8bce6SSepherosa Ziehau 	pci_write_config(sc->bge_dev, BGE_PCI_MEMWIN_BASEADDR,	\
1088ff8bce6SSepherosa Ziehau 	    (0xFFFF0000 & x), 4);				\
1098ff8bce6SSepherosa Ziehau 	CSR_WRITE_4(sc, BGE_MEMWIN_START + (x & 0xFFFF), val);	\
1108ff8bce6SSepherosa Ziehau } while(0)
1118ff8bce6SSepherosa Ziehau 
1128ff8bce6SSepherosa Ziehau #define RCB_WRITE_4(sc, rcb, offset, val)			\
1138ff8bce6SSepherosa Ziehau 	bus_space_write_4(sc->bge_btag, sc->bge_bhandle,	\
1148ff8bce6SSepherosa Ziehau 			  rcb + offsetof(struct bge_rcb, offset), val)
1158ff8bce6SSepherosa Ziehau 
1168ff8bce6SSepherosa Ziehau /*
1178ff8bce6SSepherosa Ziehau  * Memory management stuff. Note: the SSLOTS, MSLOTS and JSLOTS
1188ff8bce6SSepherosa Ziehau  * values are tuneable. They control the actual amount of buffers
1198ff8bce6SSepherosa Ziehau  * allocated for the standard, mini and jumbo receive rings.
1208ff8bce6SSepherosa Ziehau  */
1218ff8bce6SSepherosa Ziehau 
1228ff8bce6SSepherosa Ziehau #define BGE_SSLOTS	256
1238ff8bce6SSepherosa Ziehau #define BGE_MSLOTS	256
1248ff8bce6SSepherosa Ziehau #define BGE_JSLOTS	384
1258ff8bce6SSepherosa Ziehau 
1268ff8bce6SSepherosa Ziehau #define BGE_JRAWLEN (BGE_JUMBO_FRAMELEN + ETHER_ALIGN)
1278ff8bce6SSepherosa Ziehau #define BGE_JLEN (BGE_JRAWLEN + \
1288ff8bce6SSepherosa Ziehau 	(sizeof(uint64_t) - BGE_JRAWLEN % sizeof(uint64_t)))
1298ff8bce6SSepherosa Ziehau #define BGE_JPAGESZ PAGE_SIZE
1308ff8bce6SSepherosa Ziehau #define BGE_RESID (BGE_JPAGESZ - (BGE_JLEN * BGE_JSLOTS) % BGE_JPAGESZ)
1318ff8bce6SSepherosa Ziehau #define BGE_JMEM ((BGE_JLEN * BGE_JSLOTS) + BGE_RESID)
1328ff8bce6SSepherosa Ziehau 
1338ff8bce6SSepherosa Ziehau struct bge_softc;
1348ff8bce6SSepherosa Ziehau 
1358ff8bce6SSepherosa Ziehau struct bge_jslot {
1368ff8bce6SSepherosa Ziehau 	struct bge_softc	*bge_sc;
1378ff8bce6SSepherosa Ziehau 	void			*bge_buf;
1388ff8bce6SSepherosa Ziehau 	bus_addr_t		bge_paddr;
1398ff8bce6SSepherosa Ziehau 	int			bge_inuse;
1408ff8bce6SSepherosa Ziehau 	int			bge_slot;
1418ff8bce6SSepherosa Ziehau 	SLIST_ENTRY(bge_jslot)	jslot_link;
1428ff8bce6SSepherosa Ziehau };
1438ff8bce6SSepherosa Ziehau 
1448ff8bce6SSepherosa Ziehau /*
1458ff8bce6SSepherosa Ziehau  * Ring structures. Most of these reside in host memory and we tell
1468ff8bce6SSepherosa Ziehau  * the NIC where they are via the ring control blocks. The exceptions
1478ff8bce6SSepherosa Ziehau  * are the tx and command rings, which live in NIC memory and which
1488ff8bce6SSepherosa Ziehau  * we access via the shared memory window.
1498ff8bce6SSepherosa Ziehau  */
1508ff8bce6SSepherosa Ziehau struct bge_ring_data {
1518ff8bce6SSepherosa Ziehau 	struct bge_rx_bd	*bge_rx_std_ring;
1528ff8bce6SSepherosa Ziehau 	bus_addr_t		bge_rx_std_ring_paddr;
1538ff8bce6SSepherosa Ziehau 	struct bge_rx_bd	*bge_rx_jumbo_ring;
1548ff8bce6SSepherosa Ziehau 	bus_addr_t		bge_rx_jumbo_ring_paddr;
1558ff8bce6SSepherosa Ziehau 	struct bge_rx_bd	*bge_rx_return_ring;
1568ff8bce6SSepherosa Ziehau 	bus_addr_t		bge_rx_return_ring_paddr;
1578ff8bce6SSepherosa Ziehau 	struct bge_tx_bd	*bge_tx_ring;
1588ff8bce6SSepherosa Ziehau 	bus_addr_t		bge_tx_ring_paddr;
1598ff8bce6SSepherosa Ziehau 	struct bge_status_block	*bge_status_block;
1608ff8bce6SSepherosa Ziehau 	bus_addr_t		bge_status_block_paddr;
1618ff8bce6SSepherosa Ziehau 	struct bge_stats	*bge_stats;
1628ff8bce6SSepherosa Ziehau 	bus_addr_t		bge_stats_paddr;
1638ff8bce6SSepherosa Ziehau 	void			*bge_jumbo_buf;
1648ff8bce6SSepherosa Ziehau 	struct bge_gib		bge_info;
1658ff8bce6SSepherosa Ziehau };
1668ff8bce6SSepherosa Ziehau 
1678ff8bce6SSepherosa Ziehau struct bge_rxchain {
1688ff8bce6SSepherosa Ziehau 	struct mbuf	*bge_mbuf;
1698ff8bce6SSepherosa Ziehau 	bus_addr_t	bge_paddr;
1708ff8bce6SSepherosa Ziehau };
1718ff8bce6SSepherosa Ziehau 
1728ff8bce6SSepherosa Ziehau /*
1738ff8bce6SSepherosa Ziehau  * Mbuf pointers. We need these to keep track of the virtual addresses
1748ff8bce6SSepherosa Ziehau  * of our mbuf chains since we can only convert from physical to virtual,
1758ff8bce6SSepherosa Ziehau  * not the other way around.
1768ff8bce6SSepherosa Ziehau  */
1778ff8bce6SSepherosa Ziehau struct bge_chain_data {
1788ff8bce6SSepherosa Ziehau 	bus_dma_tag_t		bge_parent_tag;
1798ff8bce6SSepherosa Ziehau 	bus_dma_tag_t		bge_rx_std_ring_tag;
1808ff8bce6SSepherosa Ziehau 	bus_dma_tag_t		bge_rx_jumbo_ring_tag;
1818ff8bce6SSepherosa Ziehau 	bus_dma_tag_t		bge_rx_return_ring_tag;
1828ff8bce6SSepherosa Ziehau 	bus_dma_tag_t		bge_tx_ring_tag;
1838ff8bce6SSepherosa Ziehau 	bus_dma_tag_t		bge_status_tag;
1848ff8bce6SSepherosa Ziehau 	bus_dma_tag_t		bge_stats_tag;
1858ff8bce6SSepherosa Ziehau 	bus_dma_tag_t		bge_jumbo_tag;
1868ff8bce6SSepherosa Ziehau 	bus_dma_tag_t		bge_tx_mtag;	/* TX mbuf DMA tag */
1878ff8bce6SSepherosa Ziehau 	bus_dma_tag_t		bge_rx_mtag;	/* RX mbuf DMA tag */
1888ff8bce6SSepherosa Ziehau 	bus_dmamap_t		bge_rx_tmpmap;
1898ff8bce6SSepherosa Ziehau 	bus_dmamap_t		bge_tx_dmamap[BGE_TX_RING_CNT];
1908ff8bce6SSepherosa Ziehau 	bus_dmamap_t		bge_rx_std_dmamap[BGE_STD_RX_RING_CNT];
1918ff8bce6SSepherosa Ziehau 	bus_dmamap_t		bge_rx_std_ring_map;
1928ff8bce6SSepherosa Ziehau 	bus_dmamap_t		bge_rx_jumbo_ring_map;
1938ff8bce6SSepherosa Ziehau 	bus_dmamap_t		bge_tx_ring_map;
1948ff8bce6SSepherosa Ziehau 	bus_dmamap_t		bge_rx_return_ring_map;
1958ff8bce6SSepherosa Ziehau 	bus_dmamap_t		bge_status_map;
1968ff8bce6SSepherosa Ziehau 	bus_dmamap_t		bge_stats_map;
1978ff8bce6SSepherosa Ziehau 	bus_dmamap_t		bge_jumbo_map;
1988ff8bce6SSepherosa Ziehau 	struct mbuf		*bge_tx_chain[BGE_TX_RING_CNT];
1998ff8bce6SSepherosa Ziehau 	struct bge_rxchain	bge_rx_std_chain[BGE_STD_RX_RING_CNT];
2008ff8bce6SSepherosa Ziehau 	struct bge_rxchain	bge_rx_jumbo_chain[BGE_JUMBO_RX_RING_CNT];
2018ff8bce6SSepherosa Ziehau 	/* Stick the jumbo mem management stuff here too. */
2028ff8bce6SSepherosa Ziehau 	struct bge_jslot	bge_jslots[BGE_JSLOTS];
2038ff8bce6SSepherosa Ziehau };
2048ff8bce6SSepherosa Ziehau 
2058ff8bce6SSepherosa Ziehau struct bge_softc {
2068ff8bce6SSepherosa Ziehau 	struct arpcom		arpcom;		/* interface info */
2078ff8bce6SSepherosa Ziehau 	device_t		bge_dev;
2088ff8bce6SSepherosa Ziehau 	device_t		bge_miibus;
2098ff8bce6SSepherosa Ziehau 	bus_space_handle_t	bge_bhandle;
2108ff8bce6SSepherosa Ziehau 	bus_space_tag_t		bge_btag;
2118ff8bce6SSepherosa Ziehau 	void			*bge_intrhand;
2128ff8bce6SSepherosa Ziehau 	struct resource		*bge_irq;
213308dcd8eSSepherosa Ziehau 	int			bge_irq_type;
214308dcd8eSSepherosa Ziehau 	int			bge_irq_rid;
215*ea320e53SSepherosa Ziehau 	struct resource		*bge_res;	/* MAC mapped I/O */
216*ea320e53SSepherosa Ziehau 	struct resource		*bge_res2;	/* APE mapped I/O */
2178ff8bce6SSepherosa Ziehau 	struct ifmedia		bge_ifmedia;	/* TBI media info */
2188ff8bce6SSepherosa Ziehau 	int			bge_pcixcap;
2198ff8bce6SSepherosa Ziehau 	int			bge_pciecap;
220308dcd8eSSepherosa Ziehau 	int			bge_msicap;
2218ff8bce6SSepherosa Ziehau 	uint32_t		bge_pci_miscctl;
2228ff8bce6SSepherosa Ziehau 	uint32_t		bge_status_tag;
2238ff8bce6SSepherosa Ziehau 	uint32_t		bge_flags;	/* BGE_FLAG_ */
2248ff8bce6SSepherosa Ziehau #define BGE_FLAG_TBI		0x00000001
2258ff8bce6SSepherosa Ziehau #define BGE_FLAG_JUMBO		0x00000002
226308dcd8eSSepherosa Ziehau #define BGE_FLAG_ONESHOT_MSI	0x00000004
227e92f005cSSepherosa Ziehau #define BGE_FLAG_TSO		0x00000008
2288ff8bce6SSepherosa Ziehau #define BGE_FLAG_MII_SERDES	0x00000010
2298ff8bce6SSepherosa Ziehau #define	BGE_FLAG_CPMU		0x00000020
23057b62224SSepherosa Ziehau #define BGE_FLAG_APE		0x00000040
2318ff8bce6SSepherosa Ziehau #define BGE_FLAG_PCIX		0x00000200
2328ff8bce6SSepherosa Ziehau #define BGE_FLAG_PCIE		0x00000400
2338ff8bce6SSepherosa Ziehau #define BGE_FLAG_5700_FAMILY	0x00001000
2348ff8bce6SSepherosa Ziehau #define BGE_FLAG_5705_PLUS	0x00002000
2358ff8bce6SSepherosa Ziehau #define BGE_FLAG_5714_FAMILY	0x00004000
2368ff8bce6SSepherosa Ziehau #define BGE_FLAG_575X_PLUS	0x00008000
2378ff8bce6SSepherosa Ziehau #define BGE_FLAG_5755_PLUS	0x00010000
2388ff8bce6SSepherosa Ziehau #define BGE_FLAG_MAXADDR_40BIT	0x00020000
2398ff8bce6SSepherosa Ziehau #define BGE_FLAG_RX_ALIGNBUG	0x00100000
2408ff8bce6SSepherosa Ziehau #define BGE_FLAG_NO_EEPROM	0x10000000
2418ff8bce6SSepherosa Ziehau #define BGE_FLAG_5788		0x20000000
2428ff8bce6SSepherosa Ziehau #define BGE_FLAG_SHORTDMA	0x40000000
2438ff8bce6SSepherosa Ziehau #define BGE_FLAG_STATUS_TAG	0x80000000
2448ff8bce6SSepherosa Ziehau 
245*ea320e53SSepherosa Ziehau 	uint32_t		bge_mfw_flags;	/* Management F/W flags */
246*ea320e53SSepherosa Ziehau #define	BGE_MFW_ON_RXCPU	0x00000001
247*ea320e53SSepherosa Ziehau #define	BGE_MFW_ON_APE		0x00000002
248*ea320e53SSepherosa Ziehau #define	BGE_MFW_TYPE_NCSI	0x00000004
249*ea320e53SSepherosa Ziehau #define	BGE_MFW_TYPE_DASH	0x00000008
250*ea320e53SSepherosa Ziehau 	int			bge_phy_ape_lock;
251*ea320e53SSepherosa Ziehau 	int			bge_func_addr;
252*ea320e53SSepherosa Ziehau 
2538ff8bce6SSepherosa Ziehau 	uint32_t		bge_chipid;
25457b62224SSepherosa Ziehau 	uint8_t			bge_asf_mode;
25557b62224SSepherosa Ziehau #define ASF_ENABLE		0x01
25657b62224SSepherosa Ziehau #define ASF_NEW_HANDSHAKE	0x02
25757b62224SSepherosa Ziehau #define ASF_STACKUP		0x04
25857b62224SSepherosa Ziehau 	uint8_t			bge_asf_count;
2598ff8bce6SSepherosa Ziehau 	uint32_t		bge_asicrev;
2608ff8bce6SSepherosa Ziehau 	uint32_t		bge_chiprev;
2617e1b2526SSepherosa Ziehau 	struct ifpoll_compat	bge_npoll;	/* polling */
2628ff8bce6SSepherosa Ziehau 	struct bge_ring_data	bge_ldata;	/* rings */
2638ff8bce6SSepherosa Ziehau 	struct bge_chain_data	bge_cdata;	/* mbufs */
2648ff8bce6SSepherosa Ziehau 	uint16_t		bge_tx_saved_considx;
2658ff8bce6SSepherosa Ziehau 	uint16_t		bge_rx_saved_considx;
2668ff8bce6SSepherosa Ziehau 	uint16_t		bge_ev_saved_considx;
2678ff8bce6SSepherosa Ziehau 	uint16_t		bge_return_ring_cnt;
2688ff8bce6SSepherosa Ziehau 	uint16_t		bge_std;	/* current std ring head */
2698ff8bce6SSepherosa Ziehau 	uint16_t		bge_jumbo;	/* current jumo ring head */
2708ff8bce6SSepherosa Ziehau 	SLIST_HEAD(__bge_jfreehead, bge_jslot)	bge_jfree_listhead;
2718ff8bce6SSepherosa Ziehau 	struct lwkt_serialize	bge_jslot_serializer;
2728ff8bce6SSepherosa Ziehau 	uint32_t		bge_stat_ticks;
2738ff8bce6SSepherosa Ziehau 	uint32_t		bge_rx_coal_ticks;
2748ff8bce6SSepherosa Ziehau 	uint32_t		bge_tx_coal_ticks;
2758ff8bce6SSepherosa Ziehau 	uint32_t		bge_rx_coal_bds;
2768ff8bce6SSepherosa Ziehau 	uint32_t		bge_tx_coal_bds;
2778ff8bce6SSepherosa Ziehau 	uint32_t		bge_rx_coal_ticks_int;
2788ff8bce6SSepherosa Ziehau 	uint32_t		bge_tx_coal_ticks_int;
2798ff8bce6SSepherosa Ziehau 	uint32_t		bge_rx_coal_bds_int;
2808ff8bce6SSepherosa Ziehau 	uint32_t		bge_tx_coal_bds_int;
2818ff8bce6SSepherosa Ziehau 	uint32_t		bge_tx_prodidx;
282aad8b3feSSepherosa Ziehau 	int			bge_tx_wreg;
2834849f4a3SSepherosa Ziehau 	int			bge_rx_wreg;
2848ff8bce6SSepherosa Ziehau 	uint32_t		bge_tx_buf_ratio;
2858ff8bce6SSepherosa Ziehau 	uint32_t		bge_mi_mode;
2868ff8bce6SSepherosa Ziehau 	int			bge_force_defrag;
2878ff8bce6SSepherosa Ziehau 	int			bge_mbox_reorder;
2888ff8bce6SSepherosa Ziehau 	int			bge_if_flags;
2898ff8bce6SSepherosa Ziehau 	int			bge_txcnt;
290e92f005cSSepherosa Ziehau 	int			bge_txspare;
291e92f005cSSepherosa Ziehau 	int			bge_txrsvd;
2928ff8bce6SSepherosa Ziehau 	int			bge_link;
2938ff8bce6SSepherosa Ziehau 	int			bge_link_evt;
2948ff8bce6SSepherosa Ziehau 	struct callout		bge_stat_timer;
2958ff8bce6SSepherosa Ziehau 
2968ff8bce6SSepherosa Ziehau 	int			bge_phyno;
2978ff8bce6SSepherosa Ziehau 	uint32_t		bge_coal_chg;
2988ff8bce6SSepherosa Ziehau #define BGE_RX_COAL_TICKS_CHG		0x01
2998ff8bce6SSepherosa Ziehau #define BGE_TX_COAL_TICKS_CHG		0x02
3008ff8bce6SSepherosa Ziehau #define BGE_RX_COAL_BDS_CHG		0x04
3018ff8bce6SSepherosa Ziehau #define BGE_TX_COAL_BDS_CHG		0x08
3028ff8bce6SSepherosa Ziehau #define BGE_RX_COAL_TICKS_INT_CHG	0x10
3038ff8bce6SSepherosa Ziehau #define BGE_TX_COAL_TICKS_INT_CHG	0x20
3048ff8bce6SSepherosa Ziehau #define BGE_RX_COAL_BDS_INT_CHG		0x40
3058ff8bce6SSepherosa Ziehau #define BGE_TX_COAL_BDS_INT_CHG		0x80
3068ff8bce6SSepherosa Ziehau 
3078ff8bce6SSepherosa Ziehau 	void			(*bge_link_upd)(struct bge_softc *, uint32_t);
3088ff8bce6SSepherosa Ziehau 	uint32_t		bge_link_chg;
3098ff8bce6SSepherosa Ziehau };
3108ff8bce6SSepherosa Ziehau 
311e92f005cSSepherosa Ziehau #define BGE_NSEG_NEW		40
3128ff8bce6SSepherosa Ziehau #define BGE_NSEG_SPARE		5
313e92f005cSSepherosa Ziehau #define BGE_NSEG_SPARE_TSO	33
3148ff8bce6SSepherosa Ziehau #define BGE_NSEG_RSVD		16
315e92f005cSSepherosa Ziehau #define BGE_NSEG_RSVD_TSO	4
3168ff8bce6SSepherosa Ziehau 
3178ff8bce6SSepherosa Ziehau /* RX coalesce ticks, unit: us */
3188ff8bce6SSepherosa Ziehau #define BGE_RX_COAL_TICKS_MIN	0
3198ff8bce6SSepherosa Ziehau #define BGE_RX_COAL_TICKS_DEF	160
3208ff8bce6SSepherosa Ziehau #define BGE_RX_COAL_TICKS_MAX	1023
3218ff8bce6SSepherosa Ziehau 
3228ff8bce6SSepherosa Ziehau /* TX coalesce ticks, unit: us */
3238ff8bce6SSepherosa Ziehau #define BGE_TX_COAL_TICKS_MIN	0
3248ff8bce6SSepherosa Ziehau #define BGE_TX_COAL_TICKS_DEF	1023
3258ff8bce6SSepherosa Ziehau #define BGE_TX_COAL_TICKS_MAX	1023
3268ff8bce6SSepherosa Ziehau 
3278ff8bce6SSepherosa Ziehau /* RX coalesce BDs */
32846a9b369SSepherosa Ziehau #define BGE_RX_COAL_BDS_MIN	0
3298ff8bce6SSepherosa Ziehau #define BGE_RX_COAL_BDS_DEF	80
3308ff8bce6SSepherosa Ziehau #define BGE_RX_COAL_BDS_MAX	255
3318ff8bce6SSepherosa Ziehau 
3328ff8bce6SSepherosa Ziehau /* TX coalesce BDs */
33346a9b369SSepherosa Ziehau #define BGE_TX_COAL_BDS_MIN	0
3348ff8bce6SSepherosa Ziehau #define BGE_TX_COAL_BDS_DEF	128
3358ff8bce6SSepherosa Ziehau #define BGE_TX_COAL_BDS_MAX	255
3368ff8bce6SSepherosa Ziehau 
33748929615SSepherosa Ziehau /* Number of segments sent before writing to TX related registers */
33848929615SSepherosa Ziehau #define BGE_TX_WREG_NSEGS	16
33948929615SSepherosa Ziehau 
3408ff8bce6SSepherosa Ziehau #endif	/* !_IF_BGEVAR_H_ */
341