xref: /dflybsd-src/sys/dev/netif/bge/if_bgevar.h (revision 8ff8bce69d25964a7151c7341d90185b2c2420fc)
1*8ff8bce6SSepherosa Ziehau /*
2*8ff8bce6SSepherosa Ziehau  * Copyright (c) 2001 Wind River Systems
3*8ff8bce6SSepherosa Ziehau  * Copyright (c) 1997, 1998, 1999, 2001
4*8ff8bce6SSepherosa Ziehau  *	Bill Paul <wpaul@windriver.com>.  All rights reserved.
5*8ff8bce6SSepherosa Ziehau  *
6*8ff8bce6SSepherosa Ziehau  * Redistribution and use in source and binary forms, with or without
7*8ff8bce6SSepherosa Ziehau  * modification, are permitted provided that the following conditions
8*8ff8bce6SSepherosa Ziehau  * are met:
9*8ff8bce6SSepherosa Ziehau  * 1. Redistributions of source code must retain the above copyright
10*8ff8bce6SSepherosa Ziehau  *    notice, this list of conditions and the following disclaimer.
11*8ff8bce6SSepherosa Ziehau  * 2. Redistributions in binary form must reproduce the above copyright
12*8ff8bce6SSepherosa Ziehau  *    notice, this list of conditions and the following disclaimer in the
13*8ff8bce6SSepherosa Ziehau  *    documentation and/or other materials provided with the distribution.
14*8ff8bce6SSepherosa Ziehau  * 3. All advertising materials mentioning features or use of this software
15*8ff8bce6SSepherosa Ziehau  *    must display the following acknowledgement:
16*8ff8bce6SSepherosa Ziehau  *	This product includes software developed by Bill Paul.
17*8ff8bce6SSepherosa Ziehau  * 4. Neither the name of the author nor the names of any co-contributors
18*8ff8bce6SSepherosa Ziehau  *    may be used to endorse or promote products derived from this software
19*8ff8bce6SSepherosa Ziehau  *    without specific prior written permission.
20*8ff8bce6SSepherosa Ziehau  *
21*8ff8bce6SSepherosa Ziehau  * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
22*8ff8bce6SSepherosa Ziehau  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23*8ff8bce6SSepherosa Ziehau  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24*8ff8bce6SSepherosa Ziehau  * ARE DISCLAIMED.  IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
25*8ff8bce6SSepherosa Ziehau  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26*8ff8bce6SSepherosa Ziehau  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27*8ff8bce6SSepherosa Ziehau  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28*8ff8bce6SSepherosa Ziehau  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29*8ff8bce6SSepherosa Ziehau  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30*8ff8bce6SSepherosa Ziehau  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
31*8ff8bce6SSepherosa Ziehau  * THE POSSIBILITY OF SUCH DAMAGE.
32*8ff8bce6SSepherosa Ziehau  *
33*8ff8bce6SSepherosa Ziehau  * $FreeBSD: src/sys/dev/bge/if_bgereg.h,v 1.1.2.16 2004/09/23 20:11:18 ps Exp $
34*8ff8bce6SSepherosa Ziehau  * $DragonFly: src/sys/dev/netif/bge/if_bgereg.h,v 1.25 2008/10/22 14:24:24 sephe Exp $
35*8ff8bce6SSepherosa Ziehau  */
36*8ff8bce6SSepherosa Ziehau 
37*8ff8bce6SSepherosa Ziehau #ifndef _IF_BGEVAR_H_
38*8ff8bce6SSepherosa Ziehau #define _IF_BGEVAR_H_
39*8ff8bce6SSepherosa Ziehau 
40*8ff8bce6SSepherosa Ziehau /*
41*8ff8bce6SSepherosa Ziehau  * Tigon general information block. This resides in host memory
42*8ff8bce6SSepherosa Ziehau  * and contains the status counters, ring control blocks and
43*8ff8bce6SSepherosa Ziehau  * producer pointers.
44*8ff8bce6SSepherosa Ziehau  */
45*8ff8bce6SSepherosa Ziehau 
46*8ff8bce6SSepherosa Ziehau struct bge_gib {
47*8ff8bce6SSepherosa Ziehau 	struct bge_stats	bge_stats;
48*8ff8bce6SSepherosa Ziehau 	struct bge_rcb		bge_tx_rcb[16];
49*8ff8bce6SSepherosa Ziehau 	struct bge_rcb		bge_std_rx_rcb;
50*8ff8bce6SSepherosa Ziehau 	struct bge_rcb		bge_jumbo_rx_rcb;
51*8ff8bce6SSepherosa Ziehau 	struct bge_rcb		bge_mini_rx_rcb;
52*8ff8bce6SSepherosa Ziehau 	struct bge_rcb		bge_return_rcb;
53*8ff8bce6SSepherosa Ziehau };
54*8ff8bce6SSepherosa Ziehau 
55*8ff8bce6SSepherosa Ziehau #define BGE_MIN_FRAMELEN	60
56*8ff8bce6SSepherosa Ziehau #define BGE_MAX_FRAMELEN	1536
57*8ff8bce6SSepherosa Ziehau #define BGE_JUMBO_FRAMELEN	9018
58*8ff8bce6SSepherosa Ziehau #define BGE_JUMBO_MTU		(BGE_JUMBO_FRAMELEN-ETHER_HDR_LEN-ETHER_CRC_LEN)
59*8ff8bce6SSepherosa Ziehau 
60*8ff8bce6SSepherosa Ziehau #define BGE_TIMEOUT		5000
61*8ff8bce6SSepherosa Ziehau #define BGE_FIRMWARE_TIMEOUT	20000
62*8ff8bce6SSepherosa Ziehau #define BGE_TXCONS_UNSET	0xFFFF	/* impossible value */
63*8ff8bce6SSepherosa Ziehau 
64*8ff8bce6SSepherosa Ziehau /*
65*8ff8bce6SSepherosa Ziehau  * Other utility macros.
66*8ff8bce6SSepherosa Ziehau  */
67*8ff8bce6SSepherosa Ziehau #define BGE_INC(x, y)		(x) = ((x) + 1) % (y)
68*8ff8bce6SSepherosa Ziehau 
69*8ff8bce6SSepherosa Ziehau /*
70*8ff8bce6SSepherosa Ziehau  * Register access macros. The Tigon always uses memory mapped register
71*8ff8bce6SSepherosa Ziehau  * accesses and all registers must be accessed with 32 bit operations.
72*8ff8bce6SSepherosa Ziehau  */
73*8ff8bce6SSepherosa Ziehau 
74*8ff8bce6SSepherosa Ziehau #define CSR_WRITE_4(sc, reg, val)	\
75*8ff8bce6SSepherosa Ziehau 	bus_space_write_4(sc->bge_btag, sc->bge_bhandle, reg, val)
76*8ff8bce6SSepherosa Ziehau 
77*8ff8bce6SSepherosa Ziehau #define CSR_READ_4(sc, reg)		\
78*8ff8bce6SSepherosa Ziehau 	bus_space_read_4(sc->bge_btag, sc->bge_bhandle, reg)
79*8ff8bce6SSepherosa Ziehau 
80*8ff8bce6SSepherosa Ziehau #define BGE_SETBIT(sc, reg, x)	\
81*8ff8bce6SSepherosa Ziehau 	CSR_WRITE_4(sc, reg, (CSR_READ_4(sc, reg) | x))
82*8ff8bce6SSepherosa Ziehau 
83*8ff8bce6SSepherosa Ziehau #define BGE_CLRBIT(sc, reg, x)	\
84*8ff8bce6SSepherosa Ziehau 	CSR_WRITE_4(sc, reg, (CSR_READ_4(sc, reg) & ~x))
85*8ff8bce6SSepherosa Ziehau 
86*8ff8bce6SSepherosa Ziehau #define BGE_MEMWIN_READ(sc, x, val)				\
87*8ff8bce6SSepherosa Ziehau do {								\
88*8ff8bce6SSepherosa Ziehau 	pci_write_config(sc->bge_dev, BGE_PCI_MEMWIN_BASEADDR,	\
89*8ff8bce6SSepherosa Ziehau 	    (0xFFFF0000 & x), 4);				\
90*8ff8bce6SSepherosa Ziehau 	val = CSR_READ_4(sc, BGE_MEMWIN_START + (x & 0xFFFF));	\
91*8ff8bce6SSepherosa Ziehau } while(0)
92*8ff8bce6SSepherosa Ziehau 
93*8ff8bce6SSepherosa Ziehau #define BGE_MEMWIN_WRITE(sc, x, val)				\
94*8ff8bce6SSepherosa Ziehau do {								\
95*8ff8bce6SSepherosa Ziehau 	pci_write_config(sc->bge_dev, BGE_PCI_MEMWIN_BASEADDR,	\
96*8ff8bce6SSepherosa Ziehau 	    (0xFFFF0000 & x), 4);				\
97*8ff8bce6SSepherosa Ziehau 	CSR_WRITE_4(sc, BGE_MEMWIN_START + (x & 0xFFFF), val);	\
98*8ff8bce6SSepherosa Ziehau } while(0)
99*8ff8bce6SSepherosa Ziehau 
100*8ff8bce6SSepherosa Ziehau #define RCB_WRITE_4(sc, rcb, offset, val)			\
101*8ff8bce6SSepherosa Ziehau 	bus_space_write_4(sc->bge_btag, sc->bge_bhandle,	\
102*8ff8bce6SSepherosa Ziehau 			  rcb + offsetof(struct bge_rcb, offset), val)
103*8ff8bce6SSepherosa Ziehau 
104*8ff8bce6SSepherosa Ziehau /*
105*8ff8bce6SSepherosa Ziehau  * Memory management stuff. Note: the SSLOTS, MSLOTS and JSLOTS
106*8ff8bce6SSepherosa Ziehau  * values are tuneable. They control the actual amount of buffers
107*8ff8bce6SSepherosa Ziehau  * allocated for the standard, mini and jumbo receive rings.
108*8ff8bce6SSepherosa Ziehau  */
109*8ff8bce6SSepherosa Ziehau 
110*8ff8bce6SSepherosa Ziehau #define BGE_SSLOTS	256
111*8ff8bce6SSepherosa Ziehau #define BGE_MSLOTS	256
112*8ff8bce6SSepherosa Ziehau #define BGE_JSLOTS	384
113*8ff8bce6SSepherosa Ziehau 
114*8ff8bce6SSepherosa Ziehau #define BGE_JRAWLEN (BGE_JUMBO_FRAMELEN + ETHER_ALIGN)
115*8ff8bce6SSepherosa Ziehau #define BGE_JLEN (BGE_JRAWLEN + \
116*8ff8bce6SSepherosa Ziehau 	(sizeof(uint64_t) - BGE_JRAWLEN % sizeof(uint64_t)))
117*8ff8bce6SSepherosa Ziehau #define BGE_JPAGESZ PAGE_SIZE
118*8ff8bce6SSepherosa Ziehau #define BGE_RESID (BGE_JPAGESZ - (BGE_JLEN * BGE_JSLOTS) % BGE_JPAGESZ)
119*8ff8bce6SSepherosa Ziehau #define BGE_JMEM ((BGE_JLEN * BGE_JSLOTS) + BGE_RESID)
120*8ff8bce6SSepherosa Ziehau 
121*8ff8bce6SSepherosa Ziehau struct bge_softc;
122*8ff8bce6SSepherosa Ziehau 
123*8ff8bce6SSepherosa Ziehau struct bge_jslot {
124*8ff8bce6SSepherosa Ziehau 	struct bge_softc	*bge_sc;
125*8ff8bce6SSepherosa Ziehau 	void			*bge_buf;
126*8ff8bce6SSepherosa Ziehau 	bus_addr_t		bge_paddr;
127*8ff8bce6SSepherosa Ziehau 	int			bge_inuse;
128*8ff8bce6SSepherosa Ziehau 	int			bge_slot;
129*8ff8bce6SSepherosa Ziehau 	SLIST_ENTRY(bge_jslot)	jslot_link;
130*8ff8bce6SSepherosa Ziehau };
131*8ff8bce6SSepherosa Ziehau 
132*8ff8bce6SSepherosa Ziehau /*
133*8ff8bce6SSepherosa Ziehau  * Ring structures. Most of these reside in host memory and we tell
134*8ff8bce6SSepherosa Ziehau  * the NIC where they are via the ring control blocks. The exceptions
135*8ff8bce6SSepherosa Ziehau  * are the tx and command rings, which live in NIC memory and which
136*8ff8bce6SSepherosa Ziehau  * we access via the shared memory window.
137*8ff8bce6SSepherosa Ziehau  */
138*8ff8bce6SSepherosa Ziehau struct bge_ring_data {
139*8ff8bce6SSepherosa Ziehau 	struct bge_rx_bd	*bge_rx_std_ring;
140*8ff8bce6SSepherosa Ziehau 	bus_addr_t		bge_rx_std_ring_paddr;
141*8ff8bce6SSepherosa Ziehau 	struct bge_rx_bd	*bge_rx_jumbo_ring;
142*8ff8bce6SSepherosa Ziehau 	bus_addr_t		bge_rx_jumbo_ring_paddr;
143*8ff8bce6SSepherosa Ziehau 	struct bge_rx_bd	*bge_rx_return_ring;
144*8ff8bce6SSepherosa Ziehau 	bus_addr_t		bge_rx_return_ring_paddr;
145*8ff8bce6SSepherosa Ziehau 	struct bge_tx_bd	*bge_tx_ring;
146*8ff8bce6SSepherosa Ziehau 	bus_addr_t		bge_tx_ring_paddr;
147*8ff8bce6SSepherosa Ziehau 	struct bge_status_block	*bge_status_block;
148*8ff8bce6SSepherosa Ziehau 	bus_addr_t		bge_status_block_paddr;
149*8ff8bce6SSepherosa Ziehau 	struct bge_stats	*bge_stats;
150*8ff8bce6SSepherosa Ziehau 	bus_addr_t		bge_stats_paddr;
151*8ff8bce6SSepherosa Ziehau 	void			*bge_jumbo_buf;
152*8ff8bce6SSepherosa Ziehau 	struct bge_gib		bge_info;
153*8ff8bce6SSepherosa Ziehau };
154*8ff8bce6SSepherosa Ziehau 
155*8ff8bce6SSepherosa Ziehau struct bge_rxchain {
156*8ff8bce6SSepherosa Ziehau 	struct mbuf	*bge_mbuf;
157*8ff8bce6SSepherosa Ziehau 	bus_addr_t	bge_paddr;
158*8ff8bce6SSepherosa Ziehau };
159*8ff8bce6SSepherosa Ziehau 
160*8ff8bce6SSepherosa Ziehau /*
161*8ff8bce6SSepherosa Ziehau  * Mbuf pointers. We need these to keep track of the virtual addresses
162*8ff8bce6SSepherosa Ziehau  * of our mbuf chains since we can only convert from physical to virtual,
163*8ff8bce6SSepherosa Ziehau  * not the other way around.
164*8ff8bce6SSepherosa Ziehau  */
165*8ff8bce6SSepherosa Ziehau struct bge_chain_data {
166*8ff8bce6SSepherosa Ziehau 	bus_dma_tag_t		bge_parent_tag;
167*8ff8bce6SSepherosa Ziehau 	bus_dma_tag_t		bge_rx_std_ring_tag;
168*8ff8bce6SSepherosa Ziehau 	bus_dma_tag_t		bge_rx_jumbo_ring_tag;
169*8ff8bce6SSepherosa Ziehau 	bus_dma_tag_t		bge_rx_return_ring_tag;
170*8ff8bce6SSepherosa Ziehau 	bus_dma_tag_t		bge_tx_ring_tag;
171*8ff8bce6SSepherosa Ziehau 	bus_dma_tag_t		bge_status_tag;
172*8ff8bce6SSepherosa Ziehau 	bus_dma_tag_t		bge_stats_tag;
173*8ff8bce6SSepherosa Ziehau 	bus_dma_tag_t		bge_jumbo_tag;
174*8ff8bce6SSepherosa Ziehau 	bus_dma_tag_t		bge_tx_mtag;	/* TX mbuf DMA tag */
175*8ff8bce6SSepherosa Ziehau 	bus_dma_tag_t		bge_rx_mtag;	/* RX mbuf DMA tag */
176*8ff8bce6SSepherosa Ziehau 	bus_dmamap_t		bge_rx_tmpmap;
177*8ff8bce6SSepherosa Ziehau 	bus_dmamap_t		bge_tx_dmamap[BGE_TX_RING_CNT];
178*8ff8bce6SSepherosa Ziehau 	bus_dmamap_t		bge_rx_std_dmamap[BGE_STD_RX_RING_CNT];
179*8ff8bce6SSepherosa Ziehau 	bus_dmamap_t		bge_rx_std_ring_map;
180*8ff8bce6SSepherosa Ziehau 	bus_dmamap_t		bge_rx_jumbo_ring_map;
181*8ff8bce6SSepherosa Ziehau 	bus_dmamap_t		bge_tx_ring_map;
182*8ff8bce6SSepherosa Ziehau 	bus_dmamap_t		bge_rx_return_ring_map;
183*8ff8bce6SSepherosa Ziehau 	bus_dmamap_t		bge_status_map;
184*8ff8bce6SSepherosa Ziehau 	bus_dmamap_t		bge_stats_map;
185*8ff8bce6SSepherosa Ziehau 	bus_dmamap_t		bge_jumbo_map;
186*8ff8bce6SSepherosa Ziehau 	struct mbuf		*bge_tx_chain[BGE_TX_RING_CNT];
187*8ff8bce6SSepherosa Ziehau 	struct bge_rxchain	bge_rx_std_chain[BGE_STD_RX_RING_CNT];
188*8ff8bce6SSepherosa Ziehau 	struct bge_rxchain	bge_rx_jumbo_chain[BGE_JUMBO_RX_RING_CNT];
189*8ff8bce6SSepherosa Ziehau 	/* Stick the jumbo mem management stuff here too. */
190*8ff8bce6SSepherosa Ziehau 	struct bge_jslot	bge_jslots[BGE_JSLOTS];
191*8ff8bce6SSepherosa Ziehau };
192*8ff8bce6SSepherosa Ziehau 
193*8ff8bce6SSepherosa Ziehau struct bge_softc {
194*8ff8bce6SSepherosa Ziehau 	struct arpcom		arpcom;		/* interface info */
195*8ff8bce6SSepherosa Ziehau 	device_t		bge_dev;
196*8ff8bce6SSepherosa Ziehau 	device_t		bge_miibus;
197*8ff8bce6SSepherosa Ziehau 	bus_space_handle_t	bge_bhandle;
198*8ff8bce6SSepherosa Ziehau 	bus_space_tag_t		bge_btag;
199*8ff8bce6SSepherosa Ziehau 	void			*bge_intrhand;
200*8ff8bce6SSepherosa Ziehau 	struct resource		*bge_irq;
201*8ff8bce6SSepherosa Ziehau 	struct resource		*bge_res;
202*8ff8bce6SSepherosa Ziehau 	struct ifmedia		bge_ifmedia;	/* TBI media info */
203*8ff8bce6SSepherosa Ziehau 	int			bge_pcixcap;
204*8ff8bce6SSepherosa Ziehau 	int			bge_pciecap;
205*8ff8bce6SSepherosa Ziehau 	uint32_t		bge_pci_miscctl;
206*8ff8bce6SSepherosa Ziehau 	uint32_t		bge_status_tag;
207*8ff8bce6SSepherosa Ziehau 	uint32_t		bge_flags;	/* BGE_FLAG_ */
208*8ff8bce6SSepherosa Ziehau #define BGE_FLAG_TBI		0x00000001
209*8ff8bce6SSepherosa Ziehau #define BGE_FLAG_JUMBO		0x00000002
210*8ff8bce6SSepherosa Ziehau #define BGE_FLAG_MII_SERDES	0x00000010
211*8ff8bce6SSepherosa Ziehau #define	BGE_FLAG_CPMU		0x00000020
212*8ff8bce6SSepherosa Ziehau #define BGE_FLAG_PCIX		0x00000200
213*8ff8bce6SSepherosa Ziehau #define BGE_FLAG_PCIE		0x00000400
214*8ff8bce6SSepherosa Ziehau #define BGE_FLAG_5700_FAMILY	0x00001000
215*8ff8bce6SSepherosa Ziehau #define BGE_FLAG_5705_PLUS	0x00002000
216*8ff8bce6SSepherosa Ziehau #define BGE_FLAG_5714_FAMILY	0x00004000
217*8ff8bce6SSepherosa Ziehau #define BGE_FLAG_575X_PLUS	0x00008000
218*8ff8bce6SSepherosa Ziehau #define BGE_FLAG_5755_PLUS	0x00010000
219*8ff8bce6SSepherosa Ziehau #define BGE_FLAG_MAXADDR_40BIT	0x00020000
220*8ff8bce6SSepherosa Ziehau #define BGE_FLAG_RX_ALIGNBUG	0x00100000
221*8ff8bce6SSepherosa Ziehau #define BGE_FLAG_NO_EEPROM	0x10000000
222*8ff8bce6SSepherosa Ziehau #define BGE_FLAG_5788		0x20000000
223*8ff8bce6SSepherosa Ziehau #define BGE_FLAG_SHORTDMA	0x40000000
224*8ff8bce6SSepherosa Ziehau #define BGE_FLAG_STATUS_TAG	0x80000000
225*8ff8bce6SSepherosa Ziehau 
226*8ff8bce6SSepherosa Ziehau 	uint32_t		bge_chipid;
227*8ff8bce6SSepherosa Ziehau 	uint32_t		bge_asicrev;
228*8ff8bce6SSepherosa Ziehau 	uint32_t		bge_chiprev;
229*8ff8bce6SSepherosa Ziehau 	struct bge_ring_data	bge_ldata;	/* rings */
230*8ff8bce6SSepherosa Ziehau 	struct bge_chain_data	bge_cdata;	/* mbufs */
231*8ff8bce6SSepherosa Ziehau 	uint16_t		bge_tx_saved_considx;
232*8ff8bce6SSepherosa Ziehau 	uint16_t		bge_rx_saved_considx;
233*8ff8bce6SSepherosa Ziehau 	uint16_t		bge_ev_saved_considx;
234*8ff8bce6SSepherosa Ziehau 	uint16_t		bge_return_ring_cnt;
235*8ff8bce6SSepherosa Ziehau 	uint16_t		bge_std;	/* current std ring head */
236*8ff8bce6SSepherosa Ziehau 	uint16_t		bge_jumbo;	/* current jumo ring head */
237*8ff8bce6SSepherosa Ziehau 	SLIST_HEAD(__bge_jfreehead, bge_jslot)	bge_jfree_listhead;
238*8ff8bce6SSepherosa Ziehau 	struct lwkt_serialize	bge_jslot_serializer;
239*8ff8bce6SSepherosa Ziehau 	uint32_t		bge_stat_ticks;
240*8ff8bce6SSepherosa Ziehau 	uint32_t		bge_rx_coal_ticks;
241*8ff8bce6SSepherosa Ziehau 	uint32_t		bge_tx_coal_ticks;
242*8ff8bce6SSepherosa Ziehau 	uint32_t		bge_rx_coal_bds;
243*8ff8bce6SSepherosa Ziehau 	uint32_t		bge_tx_coal_bds;
244*8ff8bce6SSepherosa Ziehau 	uint32_t		bge_rx_coal_ticks_int;
245*8ff8bce6SSepherosa Ziehau 	uint32_t		bge_tx_coal_ticks_int;
246*8ff8bce6SSepherosa Ziehau 	uint32_t		bge_rx_coal_bds_int;
247*8ff8bce6SSepherosa Ziehau 	uint32_t		bge_tx_coal_bds_int;
248*8ff8bce6SSepherosa Ziehau 	uint32_t		bge_tx_prodidx;
249*8ff8bce6SSepherosa Ziehau 	uint32_t		bge_tx_buf_ratio;
250*8ff8bce6SSepherosa Ziehau 	uint32_t		bge_mi_mode;
251*8ff8bce6SSepherosa Ziehau 	int			bge_force_defrag;
252*8ff8bce6SSepherosa Ziehau 	int			bge_mbox_reorder;
253*8ff8bce6SSepherosa Ziehau 	int			bge_if_flags;
254*8ff8bce6SSepherosa Ziehau 	int			bge_txcnt;
255*8ff8bce6SSepherosa Ziehau 	int			bge_link;
256*8ff8bce6SSepherosa Ziehau 	int			bge_link_evt;
257*8ff8bce6SSepherosa Ziehau 	struct callout		bge_stat_timer;
258*8ff8bce6SSepherosa Ziehau 
259*8ff8bce6SSepherosa Ziehau 	struct sysctl_ctx_list	bge_sysctl_ctx;
260*8ff8bce6SSepherosa Ziehau 	struct sysctl_oid	*bge_sysctl_tree;
261*8ff8bce6SSepherosa Ziehau 
262*8ff8bce6SSepherosa Ziehau 	int			bge_phyno;
263*8ff8bce6SSepherosa Ziehau 	uint32_t		bge_coal_chg;
264*8ff8bce6SSepherosa Ziehau #define BGE_RX_COAL_TICKS_CHG		0x01
265*8ff8bce6SSepherosa Ziehau #define BGE_TX_COAL_TICKS_CHG		0x02
266*8ff8bce6SSepherosa Ziehau #define BGE_RX_COAL_BDS_CHG		0x04
267*8ff8bce6SSepherosa Ziehau #define BGE_TX_COAL_BDS_CHG		0x08
268*8ff8bce6SSepherosa Ziehau #define BGE_RX_COAL_TICKS_INT_CHG	0x10
269*8ff8bce6SSepherosa Ziehau #define BGE_TX_COAL_TICKS_INT_CHG	0x20
270*8ff8bce6SSepherosa Ziehau #define BGE_RX_COAL_BDS_INT_CHG		0x40
271*8ff8bce6SSepherosa Ziehau #define BGE_TX_COAL_BDS_INT_CHG		0x80
272*8ff8bce6SSepherosa Ziehau 
273*8ff8bce6SSepherosa Ziehau 	void			(*bge_link_upd)(struct bge_softc *, uint32_t);
274*8ff8bce6SSepherosa Ziehau 	uint32_t		bge_link_chg;
275*8ff8bce6SSepherosa Ziehau };
276*8ff8bce6SSepherosa Ziehau 
277*8ff8bce6SSepherosa Ziehau #define BGE_NSEG_NEW		32
278*8ff8bce6SSepherosa Ziehau #define BGE_NSEG_SPARE		5
279*8ff8bce6SSepherosa Ziehau #define BGE_NSEG_RSVD		16
280*8ff8bce6SSepherosa Ziehau 
281*8ff8bce6SSepherosa Ziehau /* RX coalesce ticks, unit: us */
282*8ff8bce6SSepherosa Ziehau #define BGE_RX_COAL_TICKS_MIN	0
283*8ff8bce6SSepherosa Ziehau #define BGE_RX_COAL_TICKS_DEF	160
284*8ff8bce6SSepherosa Ziehau #define BGE_RX_COAL_TICKS_MAX	1023
285*8ff8bce6SSepherosa Ziehau 
286*8ff8bce6SSepherosa Ziehau /* TX coalesce ticks, unit: us */
287*8ff8bce6SSepherosa Ziehau #define BGE_TX_COAL_TICKS_MIN	0
288*8ff8bce6SSepherosa Ziehau #define BGE_TX_COAL_TICKS_DEF	1023
289*8ff8bce6SSepherosa Ziehau #define BGE_TX_COAL_TICKS_MAX	1023
290*8ff8bce6SSepherosa Ziehau 
291*8ff8bce6SSepherosa Ziehau /* RX coalesce BDs */
292*8ff8bce6SSepherosa Ziehau #define BGE_RX_COAL_BDS_MIN	1
293*8ff8bce6SSepherosa Ziehau #define BGE_RX_COAL_BDS_DEF	80
294*8ff8bce6SSepherosa Ziehau #define BGE_RX_COAL_BDS_MAX	255
295*8ff8bce6SSepherosa Ziehau 
296*8ff8bce6SSepherosa Ziehau /* TX coalesce BDs */
297*8ff8bce6SSepherosa Ziehau #define BGE_TX_COAL_BDS_MIN	1
298*8ff8bce6SSepherosa Ziehau #define BGE_TX_COAL_BDS_DEF	128
299*8ff8bce6SSepherosa Ziehau #define BGE_TX_COAL_BDS_MAX	255
300*8ff8bce6SSepherosa Ziehau 
301*8ff8bce6SSepherosa Ziehau #endif	/* !_IF_BGEVAR_H_ */
302