xref: /dflybsd-src/sys/dev/netif/bnx/if_bnxvar.h (revision f33ac8a4449a4ea4b3bb35641c298e6d9836c81f)
16c8d8eccSSepherosa Ziehau /*
26c8d8eccSSepherosa Ziehau  * Copyright (c) 2001 Wind River Systems
36c8d8eccSSepherosa Ziehau  * Copyright (c) 1997, 1998, 1999, 2001
46c8d8eccSSepherosa Ziehau  *	Bill Paul <wpaul@windriver.com>.  All rights reserved.
56c8d8eccSSepherosa Ziehau  *
66c8d8eccSSepherosa Ziehau  * Redistribution and use in source and binary forms, with or without
76c8d8eccSSepherosa Ziehau  * modification, are permitted provided that the following conditions
86c8d8eccSSepherosa Ziehau  * are met:
96c8d8eccSSepherosa Ziehau  * 1. Redistributions of source code must retain the above copyright
106c8d8eccSSepherosa Ziehau  *    notice, this list of conditions and the following disclaimer.
116c8d8eccSSepherosa Ziehau  * 2. Redistributions in binary form must reproduce the above copyright
126c8d8eccSSepherosa Ziehau  *    notice, this list of conditions and the following disclaimer in the
136c8d8eccSSepherosa Ziehau  *    documentation and/or other materials provided with the distribution.
146c8d8eccSSepherosa Ziehau  * 3. All advertising materials mentioning features or use of this software
156c8d8eccSSepherosa Ziehau  *    must display the following acknowledgement:
166c8d8eccSSepherosa Ziehau  *	This product includes software developed by Bill Paul.
176c8d8eccSSepherosa Ziehau  * 4. Neither the name of the author nor the names of any co-contributors
186c8d8eccSSepherosa Ziehau  *    may be used to endorse or promote products derived from this software
196c8d8eccSSepherosa Ziehau  *    without specific prior written permission.
206c8d8eccSSepherosa Ziehau  *
216c8d8eccSSepherosa Ziehau  * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
226c8d8eccSSepherosa Ziehau  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
236c8d8eccSSepherosa Ziehau  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
246c8d8eccSSepherosa Ziehau  * ARE DISCLAIMED.  IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
256c8d8eccSSepherosa Ziehau  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
266c8d8eccSSepherosa Ziehau  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
276c8d8eccSSepherosa Ziehau  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
286c8d8eccSSepherosa Ziehau  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
296c8d8eccSSepherosa Ziehau  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
306c8d8eccSSepherosa Ziehau  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
316c8d8eccSSepherosa Ziehau  * THE POSSIBILITY OF SUCH DAMAGE.
326c8d8eccSSepherosa Ziehau  *
336c8d8eccSSepherosa Ziehau  * $FreeBSD: src/sys/dev/bge/if_bgereg.h,v 1.1.2.16 2004/09/23 20:11:18 ps Exp $
346c8d8eccSSepherosa Ziehau  * $DragonFly: src/sys/dev/netif/bge/if_bgereg.h,v 1.25 2008/10/22 14:24:24 sephe Exp $
356c8d8eccSSepherosa Ziehau  */
366c8d8eccSSepherosa Ziehau 
376c8d8eccSSepherosa Ziehau #ifndef _IF_BNXVAR_H_
386c8d8eccSSepherosa Ziehau #define _IF_BNXVAR_H_
396c8d8eccSSepherosa Ziehau 
406c8d8eccSSepherosa Ziehau /*
416c8d8eccSSepherosa Ziehau  * Tigon general information block. This resides in host memory
426c8d8eccSSepherosa Ziehau  * and contains the status counters, ring control blocks and
436c8d8eccSSepherosa Ziehau  * producer pointers.
446c8d8eccSSepherosa Ziehau  */
456c8d8eccSSepherosa Ziehau 
466c8d8eccSSepherosa Ziehau struct bnx_gib {
476c8d8eccSSepherosa Ziehau 	struct bge_stats	bnx_stats;
486c8d8eccSSepherosa Ziehau 	struct bge_rcb		bnx_tx_rcb[16];
496c8d8eccSSepherosa Ziehau 	struct bge_rcb		bnx_std_rx_rcb;
506c8d8eccSSepherosa Ziehau 	struct bge_rcb		bnx_jumbo_rx_rcb;
516c8d8eccSSepherosa Ziehau 	struct bge_rcb		bnx_mini_rx_rcb;
526c8d8eccSSepherosa Ziehau 	struct bge_rcb		bnx_return_rcb;
536c8d8eccSSepherosa Ziehau };
546c8d8eccSSepherosa Ziehau 
556c8d8eccSSepherosa Ziehau #define BNX_MIN_FRAMELEN	60
566c8d8eccSSepherosa Ziehau #define BNX_MAX_FRAMELEN	1536
576c8d8eccSSepherosa Ziehau #define BNX_JUMBO_FRAMELEN	9018
586c8d8eccSSepherosa Ziehau #define BNX_JUMBO_MTU		(BNX_JUMBO_FRAMELEN-ETHER_HDR_LEN-ETHER_CRC_LEN)
596c8d8eccSSepherosa Ziehau 
606c8d8eccSSepherosa Ziehau #define BNX_TIMEOUT		5000
616c8d8eccSSepherosa Ziehau #define BNX_FIRMWARE_TIMEOUT	100000
626c8d8eccSSepherosa Ziehau #define BNX_TXCONS_UNSET	0xFFFF	/* impossible value */
636c8d8eccSSepherosa Ziehau 
646c8d8eccSSepherosa Ziehau /*
656c8d8eccSSepherosa Ziehau  * Other utility macros.
666c8d8eccSSepherosa Ziehau  */
676c8d8eccSSepherosa Ziehau #define BNX_INC(x, y)		(x) = ((x) + 1) % (y)
686c8d8eccSSepherosa Ziehau 
696c8d8eccSSepherosa Ziehau /*
706c8d8eccSSepherosa Ziehau  * Register access macros. The Tigon always uses memory mapped register
716c8d8eccSSepherosa Ziehau  * accesses and all registers must be accessed with 32 bit operations.
726c8d8eccSSepherosa Ziehau  */
736c8d8eccSSepherosa Ziehau 
746c8d8eccSSepherosa Ziehau #define CSR_WRITE_4(sc, reg, val)	\
756c8d8eccSSepherosa Ziehau 	bus_space_write_4(sc->bnx_btag, sc->bnx_bhandle, reg, val)
766c8d8eccSSepherosa Ziehau 
776c8d8eccSSepherosa Ziehau #define CSR_READ_4(sc, reg)		\
786c8d8eccSSepherosa Ziehau 	bus_space_read_4(sc->bnx_btag, sc->bnx_bhandle, reg)
796c8d8eccSSepherosa Ziehau 
806c8d8eccSSepherosa Ziehau #define BNX_SETBIT(sc, reg, x)	\
816c8d8eccSSepherosa Ziehau 	CSR_WRITE_4(sc, reg, (CSR_READ_4(sc, reg) | x))
826c8d8eccSSepherosa Ziehau 
836c8d8eccSSepherosa Ziehau #define BNX_CLRBIT(sc, reg, x)	\
846c8d8eccSSepherosa Ziehau 	CSR_WRITE_4(sc, reg, (CSR_READ_4(sc, reg) & ~x))
856c8d8eccSSepherosa Ziehau 
866c8d8eccSSepherosa Ziehau #define BNX_MEMWIN_READ(sc, x, val)				\
876c8d8eccSSepherosa Ziehau do {								\
886c8d8eccSSepherosa Ziehau 	pci_write_config(sc->bnx_dev, BGE_PCI_MEMWIN_BASEADDR,	\
896c8d8eccSSepherosa Ziehau 	    (0xFFFF0000 & x), 4);				\
906c8d8eccSSepherosa Ziehau 	val = CSR_READ_4(sc, BGE_MEMWIN_START + (x & 0xFFFF));	\
916c8d8eccSSepherosa Ziehau } while(0)
926c8d8eccSSepherosa Ziehau 
936c8d8eccSSepherosa Ziehau #define BNX_MEMWIN_WRITE(sc, x, val)				\
946c8d8eccSSepherosa Ziehau do {								\
956c8d8eccSSepherosa Ziehau 	pci_write_config(sc->bnx_dev, BGE_PCI_MEMWIN_BASEADDR,	\
966c8d8eccSSepherosa Ziehau 	    (0xFFFF0000 & x), 4);				\
976c8d8eccSSepherosa Ziehau 	CSR_WRITE_4(sc, BGE_MEMWIN_START + (x & 0xFFFF), val);	\
986c8d8eccSSepherosa Ziehau } while(0)
996c8d8eccSSepherosa Ziehau 
1006c8d8eccSSepherosa Ziehau #define RCB_WRITE_4(sc, rcb, offset, val)			\
1016c8d8eccSSepherosa Ziehau 	bus_space_write_4(sc->bnx_btag, sc->bnx_bhandle,	\
1026c8d8eccSSepherosa Ziehau 			  rcb + offsetof(struct bge_rcb, offset), val)
1036c8d8eccSSepherosa Ziehau 
1046c8d8eccSSepherosa Ziehau /*
1056c8d8eccSSepherosa Ziehau  * Memory management stuff. Note: the SSLOTS, MSLOTS and JSLOTS
1066c8d8eccSSepherosa Ziehau  * values are tuneable. They control the actual amount of buffers
1076c8d8eccSSepherosa Ziehau  * allocated for the standard, mini and jumbo receive rings.
1086c8d8eccSSepherosa Ziehau  */
1096c8d8eccSSepherosa Ziehau 
1106c8d8eccSSepherosa Ziehau #define BNX_SSLOTS	256
1116c8d8eccSSepherosa Ziehau #define BNX_MSLOTS	256
1126c8d8eccSSepherosa Ziehau #define BNX_JSLOTS	384
1136c8d8eccSSepherosa Ziehau 
1146c8d8eccSSepherosa Ziehau #define BNX_JRAWLEN (BNX_JUMBO_FRAMELEN + ETHER_ALIGN)
1156c8d8eccSSepherosa Ziehau #define BNX_JLEN (BNX_JRAWLEN + \
1166c8d8eccSSepherosa Ziehau 	(sizeof(uint64_t) - BNX_JRAWLEN % sizeof(uint64_t)))
1176c8d8eccSSepherosa Ziehau #define BNX_JPAGESZ PAGE_SIZE
1186c8d8eccSSepherosa Ziehau #define BNX_RESID (BNX_JPAGESZ - (BNX_JLEN * BNX_JSLOTS) % BNX_JPAGESZ)
1196c8d8eccSSepherosa Ziehau #define BNX_JMEM ((BNX_JLEN * BNX_JSLOTS) + BNX_RESID)
1206c8d8eccSSepherosa Ziehau 
1216c8d8eccSSepherosa Ziehau struct bnx_softc;
1226c8d8eccSSepherosa Ziehau 
1236c8d8eccSSepherosa Ziehau struct bnx_jslot {
1246c8d8eccSSepherosa Ziehau 	struct bnx_softc	*bnx_sc;
1256c8d8eccSSepherosa Ziehau 	void			*bnx_buf;
1266c8d8eccSSepherosa Ziehau 	bus_addr_t		bnx_paddr;
1276c8d8eccSSepherosa Ziehau 	int			bnx_inuse;
1286c8d8eccSSepherosa Ziehau 	int			bnx_slot;
1296c8d8eccSSepherosa Ziehau 	SLIST_ENTRY(bnx_jslot)	jslot_link;
1306c8d8eccSSepherosa Ziehau };
1316c8d8eccSSepherosa Ziehau 
1326c8d8eccSSepherosa Ziehau /*
1336c8d8eccSSepherosa Ziehau  * Ring structures. Most of these reside in host memory and we tell
1346c8d8eccSSepherosa Ziehau  * the NIC where they are via the ring control blocks. The exceptions
1356c8d8eccSSepherosa Ziehau  * are the tx and command rings, which live in NIC memory and which
1366c8d8eccSSepherosa Ziehau  * we access via the shared memory window.
1376c8d8eccSSepherosa Ziehau  */
1386c8d8eccSSepherosa Ziehau struct bnx_ring_data {
1396c8d8eccSSepherosa Ziehau 	struct bge_rx_bd	*bnx_rx_jumbo_ring;
1406c8d8eccSSepherosa Ziehau 	bus_addr_t		bnx_rx_jumbo_ring_paddr;
1416c8d8eccSSepherosa Ziehau 	struct bge_status_block	*bnx_status_block;
1426c8d8eccSSepherosa Ziehau 	bus_addr_t		bnx_status_block_paddr;
1436c8d8eccSSepherosa Ziehau 	void			*bnx_jumbo_buf;
1446c8d8eccSSepherosa Ziehau 	struct bnx_gib		bnx_info;
1456c8d8eccSSepherosa Ziehau };
1466c8d8eccSSepherosa Ziehau 
147beedf5beSSepherosa Ziehau struct bnx_rx_buf {
148beedf5beSSepherosa Ziehau 	bus_dmamap_t		bnx_rx_dmamap;
149beedf5beSSepherosa Ziehau 	struct mbuf		*bnx_rx_mbuf;
150beedf5beSSepherosa Ziehau 	bus_addr_t		bnx_rx_paddr;
1516c8d8eccSSepherosa Ziehau };
1526c8d8eccSSepherosa Ziehau 
153beedf5beSSepherosa Ziehau struct bnx_rx_std_ring {
154beedf5beSSepherosa Ziehau 	struct bnx_softc	*bnx_sc;
155beedf5beSSepherosa Ziehau 
156beedf5beSSepherosa Ziehau 	uint16_t		bnx_rx_std;	/* current prod ring head */
157beedf5beSSepherosa Ziehau 	struct bge_rx_bd	*bnx_rx_std_ring;
158beedf5beSSepherosa Ziehau 
159beedf5beSSepherosa Ziehau 	bus_dma_tag_t		bnx_rx_mtag;	/* RX mbuf DMA tag */
160beedf5beSSepherosa Ziehau 	struct bnx_rx_buf	bnx_rx_std_buf[BGE_STD_RX_RING_CNT];
161beedf5beSSepherosa Ziehau 
162beedf5beSSepherosa Ziehau 	bus_dma_tag_t		bnx_rx_std_ring_tag;
163beedf5beSSepherosa Ziehau 	bus_dmamap_t		bnx_rx_std_ring_map;
164beedf5beSSepherosa Ziehau 	bus_addr_t		bnx_rx_std_ring_paddr;
165beedf5beSSepherosa Ziehau } __cachealign;
166beedf5beSSepherosa Ziehau 
167beedf5beSSepherosa Ziehau struct bnx_rx_ret_ring {
168beedf5beSSepherosa Ziehau 	struct bnx_softc	*bnx_sc;
169beedf5beSSepherosa Ziehau 	struct bnx_rx_std_ring	*bnx_std;
170beedf5beSSepherosa Ziehau 
171beedf5beSSepherosa Ziehau 	/* Shadow of bnx_rx_std_ring's bnx_rx_mtag */
172beedf5beSSepherosa Ziehau 	bus_dma_tag_t		bnx_rx_mtag;
173beedf5beSSepherosa Ziehau 
1743a16b7b8SSepherosa Ziehau 	volatile uint16_t	*bnx_rx_considx;
175beedf5beSSepherosa Ziehau 	uint16_t		bnx_rx_saved_considx;
176beedf5beSSepherosa Ziehau 	struct bge_rx_bd	*bnx_rx_ret_ring;
177beedf5beSSepherosa Ziehau 	bus_dmamap_t		bnx_rx_tmpmap;
178beedf5beSSepherosa Ziehau 
179beedf5beSSepherosa Ziehau 	bus_dma_tag_t		bnx_rx_ret_ring_tag;
180beedf5beSSepherosa Ziehau 	bus_dmamap_t		bnx_rx_ret_ring_map;
181beedf5beSSepherosa Ziehau 	bus_addr_t		bnx_rx_ret_ring_paddr;
182beedf5beSSepherosa Ziehau } __cachealign;
183beedf5beSSepherosa Ziehau 
1846c8d8eccSSepherosa Ziehau /*
1856c8d8eccSSepherosa Ziehau  * Mbuf pointers. We need these to keep track of the virtual addresses
1866c8d8eccSSepherosa Ziehau  * of our mbuf chains since we can only convert from physical to virtual,
1876c8d8eccSSepherosa Ziehau  * not the other way around.
1886c8d8eccSSepherosa Ziehau  */
1896c8d8eccSSepherosa Ziehau struct bnx_chain_data {
1906c8d8eccSSepherosa Ziehau 	bus_dma_tag_t		bnx_parent_tag;
1916c8d8eccSSepherosa Ziehau 	bus_dma_tag_t		bnx_rx_jumbo_ring_tag;
1926c8d8eccSSepherosa Ziehau 	bus_dma_tag_t		bnx_status_tag;
1936c8d8eccSSepherosa Ziehau 	bus_dma_tag_t		bnx_jumbo_tag;
1946c8d8eccSSepherosa Ziehau 	bus_dmamap_t		bnx_rx_jumbo_ring_map;
1956c8d8eccSSepherosa Ziehau 	bus_dmamap_t		bnx_status_map;
1966c8d8eccSSepherosa Ziehau 	bus_dmamap_t		bnx_jumbo_map;
197beedf5beSSepherosa Ziehau 	struct bnx_rx_buf	bnx_rx_jumbo_chain[BGE_JUMBO_RX_RING_CNT];
1986c8d8eccSSepherosa Ziehau 	/* Stick the jumbo mem management stuff here too. */
1996c8d8eccSSepherosa Ziehau 	struct bnx_jslot	bnx_jslots[BNX_JSLOTS];
2006c8d8eccSSepherosa Ziehau };
2016c8d8eccSSepherosa Ziehau 
202fa4b1067SSepherosa Ziehau struct bnx_tx_buf {
203fa4b1067SSepherosa Ziehau 	bus_dmamap_t		bnx_tx_dmamap;
204fa4b1067SSepherosa Ziehau 	struct mbuf		*bnx_tx_mbuf;
205fa4b1067SSepherosa Ziehau };
206fa4b1067SSepherosa Ziehau 
20733a04907SSepherosa Ziehau struct bnx_tx_ring {
20833a04907SSepherosa Ziehau 	struct bnx_softc	*bnx_sc;
2093a16b7b8SSepherosa Ziehau 	volatile uint16_t	*bnx_tx_considx;
21079a64343SSepherosa Ziehau 	uint16_t		bnx_tx_flags;
21179a64343SSepherosa Ziehau #define BNX_TX_FLAG_SHORTDMA		0x0001
212aad4de2bSSepherosa Ziehau #define BNX_TX_FLAG_FORCE_DEFRAG	0x0002
21333a04907SSepherosa Ziehau 	uint16_t		bnx_tx_saved_considx;
214fa639b88SSepherosa Ziehau 	int			bnx_tx_cnt;
21533a04907SSepherosa Ziehau 	uint32_t		bnx_tx_prodidx;
21633a04907SSepherosa Ziehau 	int			bnx_tx_wreg;
2178bd43d5dSSepherosa Ziehau 	int			bnx_tx_mbx;
21833a04907SSepherosa Ziehau 
21933a04907SSepherosa Ziehau 	struct bge_tx_bd	*bnx_tx_ring;
22033a04907SSepherosa Ziehau 
22133a04907SSepherosa Ziehau 	bus_dma_tag_t		bnx_tx_mtag;	/* TX mbuf DMA tag */
222fa4b1067SSepherosa Ziehau 	struct bnx_tx_buf	bnx_tx_buf[BGE_TX_RING_CNT];
22333a04907SSepherosa Ziehau 
22433a04907SSepherosa Ziehau 	bus_dma_tag_t		bnx_tx_ring_tag;
22533a04907SSepherosa Ziehau 	bus_dmamap_t		bnx_tx_ring_map;
22633a04907SSepherosa Ziehau 	bus_addr_t		bnx_tx_ring_paddr;
227*f33ac8a4SSepherosa Ziehau 	int			bnx_tx_cpuid;
22833a04907SSepherosa Ziehau } __cachealign;
22933a04907SSepherosa Ziehau 
230*f33ac8a4SSepherosa Ziehau struct bnx_intr_data {
231*f33ac8a4SSepherosa Ziehau 	struct bnx_softc	*bnx_sc;
232*f33ac8a4SSepherosa Ziehau 	struct bnx_rx_ret_ring	*bnx_ret;
233*f33ac8a4SSepherosa Ziehau 	struct bnx_tx_ring	*bnx_txr;
234*f33ac8a4SSepherosa Ziehau 
235*f33ac8a4SSepherosa Ziehau 	int			bnx_intr_cpuid;
236*f33ac8a4SSepherosa Ziehau 	struct lwkt_serialize	*bnx_intr_serialize;
237*f33ac8a4SSepherosa Ziehau 	struct callout		bnx_intr_timer;
238*f33ac8a4SSepherosa Ziehau 	void			(*bnx_intr_check)(void *);
239*f33ac8a4SSepherosa Ziehau 	uint16_t		bnx_rx_check_considx;
240*f33ac8a4SSepherosa Ziehau 	uint16_t		bnx_tx_check_considx;
241*f33ac8a4SSepherosa Ziehau 	boolean_t		bnx_intr_maylose;
242*f33ac8a4SSepherosa Ziehau 
243*f33ac8a4SSepherosa Ziehau 	void			*bnx_intr_arg;
244*f33ac8a4SSepherosa Ziehau 	driver_intr_t		*bnx_intr_func;
245*f33ac8a4SSepherosa Ziehau 	void			*bnx_intr_hand;
246*f33ac8a4SSepherosa Ziehau 	struct resource		*bnx_intr_res;
247*f33ac8a4SSepherosa Ziehau 	int			bnx_intr_rid;
248*f33ac8a4SSepherosa Ziehau 
249*f33ac8a4SSepherosa Ziehau 	const char		*bnx_intr_desc;
250*f33ac8a4SSepherosa Ziehau 	char			bnx_intr_desc0[64];
251*f33ac8a4SSepherosa Ziehau } __cachealign;
252*f33ac8a4SSepherosa Ziehau 
253*f33ac8a4SSepherosa Ziehau #define BNX_INTR_MAX		5
254*f33ac8a4SSepherosa Ziehau 
2556c8d8eccSSepherosa Ziehau struct bnx_softc {
2566c8d8eccSSepherosa Ziehau 	struct arpcom		arpcom;		/* interface info */
2576c8d8eccSSepherosa Ziehau 	device_t		bnx_dev;
2586c8d8eccSSepherosa Ziehau 	device_t		bnx_miibus;
2596c8d8eccSSepherosa Ziehau 	bus_space_handle_t	bnx_bhandle;
2606c8d8eccSSepherosa Ziehau 	bus_space_tag_t		bnx_btag;
2616c8d8eccSSepherosa Ziehau 	struct resource		*bnx_res;
2626c8d8eccSSepherosa Ziehau 	struct ifmedia		bnx_ifmedia;	/* TBI media info */
2636c8d8eccSSepherosa Ziehau 	int			bnx_pciecap;
2646c8d8eccSSepherosa Ziehau 	uint32_t		bnx_status_tag;
2656c8d8eccSSepherosa Ziehau 	uint32_t		bnx_flags;	/* BNX_FLAG_ */
2666c8d8eccSSepherosa Ziehau #define BNX_FLAG_TBI		0x00000001
2676c8d8eccSSepherosa Ziehau #define BNX_FLAG_JUMBO		0x00000002
2686c8d8eccSSepherosa Ziehau #define BNX_FLAG_ONESHOT_MSI	0x00000004
2696c8d8eccSSepherosa Ziehau #define BNX_FLAG_5717_PLUS	0x00000008
2706c8d8eccSSepherosa Ziehau #define BNX_FLAG_MII_SERDES	0x00000010
2716c8d8eccSSepherosa Ziehau #define BNX_FLAG_CPMU		0x00000020
272f368d0d9SSepherosa Ziehau #define BNX_FLAG_57765_PLUS	0x00000040
273f368d0d9SSepherosa Ziehau #define BNX_FLAG_57765_FAMILY	0x00000080
274df9ccc98SSepherosa Ziehau #define BNX_FLAG_STATUSTAG_BUG	0x00000100
27566deb1c1SSepherosa Ziehau #define BNX_FLAG_TSO		0x00000200
2766c8d8eccSSepherosa Ziehau #define BNX_FLAG_NO_EEPROM	0x10000000
2776c8d8eccSSepherosa Ziehau 
2786c8d8eccSSepherosa Ziehau 	uint32_t		bnx_chipid;
2796c8d8eccSSepherosa Ziehau 	uint32_t		bnx_asicrev;
2806c8d8eccSSepherosa Ziehau 	uint32_t		bnx_chiprev;
2816c8d8eccSSepherosa Ziehau 	struct bnx_ring_data	bnx_ldata;	/* rings */
2826c8d8eccSSepherosa Ziehau 	struct bnx_chain_data	bnx_cdata;	/* mbufs */
283beedf5beSSepherosa Ziehau 
284*f33ac8a4SSepherosa Ziehau 	struct lwkt_serialize	bnx_main_serialize;
285*f33ac8a4SSepherosa Ziehau 
28633a04907SSepherosa Ziehau 	int			bnx_tx_ringcnt;
28733a04907SSepherosa Ziehau 	struct bnx_tx_ring	*bnx_tx_ring;
288beedf5beSSepherosa Ziehau 	int			bnx_rx_retcnt;
289beedf5beSSepherosa Ziehau 	struct bnx_rx_ret_ring	*bnx_rx_ret_ring;
290beedf5beSSepherosa Ziehau 	struct bnx_rx_std_ring	bnx_rx_std_ring;
291beedf5beSSepherosa Ziehau 
2926c8d8eccSSepherosa Ziehau 	uint16_t		bnx_jumbo;	/* current jumo ring head */
2936c8d8eccSSepherosa Ziehau 	SLIST_HEAD(__bnx_jfreehead, bnx_jslot)	bnx_jfree_listhead;
2946c8d8eccSSepherosa Ziehau 	struct lwkt_serialize	bnx_jslot_serializer;
2956c8d8eccSSepherosa Ziehau 	uint32_t		bnx_rx_coal_ticks;
2966c8d8eccSSepherosa Ziehau 	uint32_t		bnx_tx_coal_ticks;
2976c8d8eccSSepherosa Ziehau 	uint32_t		bnx_rx_coal_bds;
2986c8d8eccSSepherosa Ziehau 	uint32_t		bnx_tx_coal_bds;
2996c8d8eccSSepherosa Ziehau 	uint32_t		bnx_rx_coal_bds_int;
3006c8d8eccSSepherosa Ziehau 	uint32_t		bnx_tx_coal_bds_int;
3016c8d8eccSSepherosa Ziehau 	uint32_t		bnx_mi_mode;
3026c8d8eccSSepherosa Ziehau 	int			bnx_if_flags;
3036c8d8eccSSepherosa Ziehau 	int			bnx_link;
3046c8d8eccSSepherosa Ziehau 	int			bnx_link_evt;
3058ca0f604SSepherosa Ziehau 	int			bnx_stat_cpuid;
3066c8d8eccSSepherosa Ziehau 	struct callout		bnx_stat_timer;
307b5de76b1SSepherosa Ziehau 	struct ifpoll_compat	bnx_npoll;
3086c8d8eccSSepherosa Ziehau 
309*f33ac8a4SSepherosa Ziehau 	int			bnx_intr_type;
310*f33ac8a4SSepherosa Ziehau 	int			bnx_intr_cnt;
311*f33ac8a4SSepherosa Ziehau 	struct bnx_intr_data	bnx_intr_data[BNX_INTR_MAX];
312df9ccc98SSepherosa Ziehau 
3136c8d8eccSSepherosa Ziehau 	struct sysctl_ctx_list	bnx_sysctl_ctx;
3146c8d8eccSSepherosa Ziehau 	struct sysctl_oid	*bnx_sysctl_tree;
3156c8d8eccSSepherosa Ziehau 
3166c8d8eccSSepherosa Ziehau 	int			bnx_phyno;
3176c8d8eccSSepherosa Ziehau 	uint32_t		bnx_coal_chg;
3186c8d8eccSSepherosa Ziehau #define BNX_RX_COAL_TICKS_CHG		0x01
3196c8d8eccSSepherosa Ziehau #define BNX_TX_COAL_TICKS_CHG		0x02
3206c8d8eccSSepherosa Ziehau #define BNX_RX_COAL_BDS_CHG		0x04
3216c8d8eccSSepherosa Ziehau #define BNX_TX_COAL_BDS_CHG		0x08
3226c8d8eccSSepherosa Ziehau #define BNX_RX_COAL_BDS_INT_CHG		0x40
3236c8d8eccSSepherosa Ziehau #define BNX_TX_COAL_BDS_INT_CHG		0x80
3246c8d8eccSSepherosa Ziehau 
3256c8d8eccSSepherosa Ziehau 	void			(*bnx_link_upd)(struct bnx_softc *, uint32_t);
3266c8d8eccSSepherosa Ziehau 	uint32_t		bnx_link_chg;
32766deb1c1SSepherosa Ziehau 
32866deb1c1SSepherosa Ziehau #define BNX_TSO_NSTATS		45
32966deb1c1SSepherosa Ziehau 	u_long			bnx_tsosegs[BNX_TSO_NSTATS];
3306c8d8eccSSepherosa Ziehau };
3316c8d8eccSSepherosa Ziehau 
33266deb1c1SSepherosa Ziehau #define BNX_NSEG_NEW		40
333adea0b8cSSepherosa Ziehau #define BNX_NSEG_SPARE		33	/* enough for 64K TSO segment */
334adea0b8cSSepherosa Ziehau #define BNX_NSEG_RSVD		4
3356c8d8eccSSepherosa Ziehau 
3366c8d8eccSSepherosa Ziehau /* RX coalesce ticks, unit: us */
3376c8d8eccSSepherosa Ziehau #define BNX_RX_COAL_TICKS_MIN	0
3386c8d8eccSSepherosa Ziehau #define BNX_RX_COAL_TICKS_DEF	160
3396c8d8eccSSepherosa Ziehau #define BNX_RX_COAL_TICKS_MAX	1023
3406c8d8eccSSepherosa Ziehau 
3416c8d8eccSSepherosa Ziehau /* TX coalesce ticks, unit: us */
3426c8d8eccSSepherosa Ziehau #define BNX_TX_COAL_TICKS_MIN	0
3436c8d8eccSSepherosa Ziehau #define BNX_TX_COAL_TICKS_DEF	1023
3446c8d8eccSSepherosa Ziehau #define BNX_TX_COAL_TICKS_MAX	1023
3456c8d8eccSSepherosa Ziehau 
3466c8d8eccSSepherosa Ziehau /* RX coalesce BDs */
3478a382fe7SSepherosa Ziehau #define BNX_RX_COAL_BDS_MIN	0
348306e5498SSepherosa Ziehau #define BNX_RX_COAL_BDS_DEF	0
349306e5498SSepherosa Ziehau #define BNX_RX_COAL_BDS_INT_DEF	80
3506c8d8eccSSepherosa Ziehau #define BNX_RX_COAL_BDS_MAX	255
3516c8d8eccSSepherosa Ziehau 
3526c8d8eccSSepherosa Ziehau /* TX coalesce BDs */
3538a382fe7SSepherosa Ziehau #define BNX_TX_COAL_BDS_MIN	0
354c9b7f592SSepherosa Ziehau #define BNX_TX_COAL_BDS_DEF	64
355c9b7f592SSepherosa Ziehau #define BNX_TX_COAL_BDS_INT_DEF	64
3566c8d8eccSSepherosa Ziehau #define BNX_TX_COAL_BDS_MAX	255
3576c8d8eccSSepherosa Ziehau 
3580bb53200SSepherosa Ziehau /* Number of segments sent before writing to TX related registers */
3590bb53200SSepherosa Ziehau #define BNX_TX_WREG_NSEGS	8
3600bb53200SSepherosa Ziehau 
361e0f74fc8SSepherosa Ziehau /* Return ring descriptor count */
362e0f74fc8SSepherosa Ziehau #define BNX_RETURN_RING_CNT	512
363e0f74fc8SSepherosa Ziehau 
3646c8d8eccSSepherosa Ziehau #endif	/* !_IF_BNXVAR_H_ */
365