xref: /dflybsd-src/sys/dev/netif/bnx/if_bnxvar.h (revision 3397dea6de72bf0700d13a66c2569ccf18c9e945)
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 {
154329f9016SSepherosa Ziehau 	struct lwkt_serialize	bnx_rx_std_serialize;
155beedf5beSSepherosa Ziehau 	struct bnx_softc	*bnx_sc;
156beedf5beSSepherosa Ziehau 
157beedf5beSSepherosa Ziehau 	uint16_t		bnx_rx_std;	/* current prod ring head */
158beedf5beSSepherosa Ziehau 	struct bge_rx_bd	*bnx_rx_std_ring;
159beedf5beSSepherosa Ziehau 
160beedf5beSSepherosa Ziehau 	bus_dma_tag_t		bnx_rx_mtag;	/* RX mbuf DMA tag */
161beedf5beSSepherosa Ziehau 	struct bnx_rx_buf	bnx_rx_std_buf[BGE_STD_RX_RING_CNT];
162beedf5beSSepherosa Ziehau 
163beedf5beSSepherosa Ziehau 	bus_dma_tag_t		bnx_rx_std_ring_tag;
164beedf5beSSepherosa Ziehau 	bus_dmamap_t		bnx_rx_std_ring_map;
165beedf5beSSepherosa Ziehau 	bus_addr_t		bnx_rx_std_ring_paddr;
166beedf5beSSepherosa Ziehau } __cachealign;
167beedf5beSSepherosa Ziehau 
168beedf5beSSepherosa Ziehau struct bnx_rx_ret_ring {
169329f9016SSepherosa Ziehau 	struct lwkt_serialize	bnx_rx_ret_serialize;
170beedf5beSSepherosa Ziehau 	struct bnx_softc	*bnx_sc;
171beedf5beSSepherosa Ziehau 	struct bnx_rx_std_ring	*bnx_std;
172beedf5beSSepherosa Ziehau 
173beedf5beSSepherosa Ziehau 	/* Shadow of bnx_rx_std_ring's bnx_rx_mtag */
174beedf5beSSepherosa Ziehau 	bus_dma_tag_t		bnx_rx_mtag;
175beedf5beSSepherosa Ziehau 
1763a16b7b8SSepherosa Ziehau 	volatile uint16_t	*bnx_rx_considx;
177beedf5beSSepherosa Ziehau 	uint16_t		bnx_rx_saved_considx;
178beedf5beSSepherosa Ziehau 	struct bge_rx_bd	*bnx_rx_ret_ring;
179beedf5beSSepherosa Ziehau 	bus_dmamap_t		bnx_rx_tmpmap;
180beedf5beSSepherosa Ziehau 
181beedf5beSSepherosa Ziehau 	bus_dma_tag_t		bnx_rx_ret_ring_tag;
182beedf5beSSepherosa Ziehau 	bus_dmamap_t		bnx_rx_ret_ring_map;
183beedf5beSSepherosa Ziehau 	bus_addr_t		bnx_rx_ret_ring_paddr;
184beedf5beSSepherosa Ziehau } __cachealign;
185beedf5beSSepherosa Ziehau 
1866c8d8eccSSepherosa Ziehau /*
1876c8d8eccSSepherosa Ziehau  * Mbuf pointers. We need these to keep track of the virtual addresses
1886c8d8eccSSepherosa Ziehau  * of our mbuf chains since we can only convert from physical to virtual,
1896c8d8eccSSepherosa Ziehau  * not the other way around.
1906c8d8eccSSepherosa Ziehau  */
1916c8d8eccSSepherosa Ziehau struct bnx_chain_data {
1926c8d8eccSSepherosa Ziehau 	bus_dma_tag_t		bnx_parent_tag;
1936c8d8eccSSepherosa Ziehau 	bus_dma_tag_t		bnx_rx_jumbo_ring_tag;
1946c8d8eccSSepherosa Ziehau 	bus_dma_tag_t		bnx_status_tag;
1956c8d8eccSSepherosa Ziehau 	bus_dma_tag_t		bnx_jumbo_tag;
1966c8d8eccSSepherosa Ziehau 	bus_dmamap_t		bnx_rx_jumbo_ring_map;
1976c8d8eccSSepherosa Ziehau 	bus_dmamap_t		bnx_status_map;
1986c8d8eccSSepherosa Ziehau 	bus_dmamap_t		bnx_jumbo_map;
199beedf5beSSepherosa Ziehau 	struct bnx_rx_buf	bnx_rx_jumbo_chain[BGE_JUMBO_RX_RING_CNT];
2006c8d8eccSSepherosa Ziehau 	/* Stick the jumbo mem management stuff here too. */
2016c8d8eccSSepherosa Ziehau 	struct bnx_jslot	bnx_jslots[BNX_JSLOTS];
2026c8d8eccSSepherosa Ziehau };
2036c8d8eccSSepherosa Ziehau 
204fa4b1067SSepherosa Ziehau struct bnx_tx_buf {
205fa4b1067SSepherosa Ziehau 	bus_dmamap_t		bnx_tx_dmamap;
206fa4b1067SSepherosa Ziehau 	struct mbuf		*bnx_tx_mbuf;
207fa4b1067SSepherosa Ziehau };
208fa4b1067SSepherosa Ziehau 
20933a04907SSepherosa Ziehau struct bnx_tx_ring {
210329f9016SSepherosa Ziehau 	struct lwkt_serialize	bnx_tx_serialize;
21133a04907SSepherosa Ziehau 	struct bnx_softc	*bnx_sc;
212*3397dea6SSepherosa Ziehau 	struct ifaltq_subque	*bnx_ifsq;
2133a16b7b8SSepherosa Ziehau 	volatile uint16_t	*bnx_tx_considx;
21479a64343SSepherosa Ziehau 	uint16_t		bnx_tx_flags;
21579a64343SSepherosa Ziehau #define BNX_TX_FLAG_SHORTDMA		0x0001
216aad4de2bSSepherosa Ziehau #define BNX_TX_FLAG_FORCE_DEFRAG	0x0002
21733a04907SSepherosa Ziehau 	uint16_t		bnx_tx_saved_considx;
218fa639b88SSepherosa Ziehau 	int			bnx_tx_cnt;
21933a04907SSepherosa Ziehau 	uint32_t		bnx_tx_prodidx;
22033a04907SSepherosa Ziehau 	int			bnx_tx_wreg;
2218bd43d5dSSepherosa Ziehau 	int			bnx_tx_mbx;
222*3397dea6SSepherosa Ziehau 	struct ifsubq_watchdog	bnx_tx_watchdog;
22333a04907SSepherosa Ziehau 
22433a04907SSepherosa Ziehau 	struct bge_tx_bd	*bnx_tx_ring;
22533a04907SSepherosa Ziehau 
22633a04907SSepherosa Ziehau 	bus_dma_tag_t		bnx_tx_mtag;	/* TX mbuf DMA tag */
227fa4b1067SSepherosa Ziehau 	struct bnx_tx_buf	bnx_tx_buf[BGE_TX_RING_CNT];
22833a04907SSepherosa Ziehau 
22933a04907SSepherosa Ziehau 	bus_dma_tag_t		bnx_tx_ring_tag;
23033a04907SSepherosa Ziehau 	bus_dmamap_t		bnx_tx_ring_map;
23133a04907SSepherosa Ziehau 	bus_addr_t		bnx_tx_ring_paddr;
232f33ac8a4SSepherosa Ziehau 	int			bnx_tx_cpuid;
23333a04907SSepherosa Ziehau } __cachealign;
23433a04907SSepherosa Ziehau 
235f33ac8a4SSepherosa Ziehau struct bnx_intr_data {
236f33ac8a4SSepherosa Ziehau 	struct bnx_softc	*bnx_sc;
237f33ac8a4SSepherosa Ziehau 	struct bnx_rx_ret_ring	*bnx_ret;
238f33ac8a4SSepherosa Ziehau 	struct bnx_tx_ring	*bnx_txr;
239f33ac8a4SSepherosa Ziehau 
240f33ac8a4SSepherosa Ziehau 	int			bnx_intr_cpuid;
241f33ac8a4SSepherosa Ziehau 	struct lwkt_serialize	*bnx_intr_serialize;
242f33ac8a4SSepherosa Ziehau 	struct callout		bnx_intr_timer;
243f33ac8a4SSepherosa Ziehau 	void			(*bnx_intr_check)(void *);
244f33ac8a4SSepherosa Ziehau 	uint16_t		bnx_rx_check_considx;
245f33ac8a4SSepherosa Ziehau 	uint16_t		bnx_tx_check_considx;
246f33ac8a4SSepherosa Ziehau 	boolean_t		bnx_intr_maylose;
247f33ac8a4SSepherosa Ziehau 
248f33ac8a4SSepherosa Ziehau 	void			*bnx_intr_arg;
249f33ac8a4SSepherosa Ziehau 	driver_intr_t		*bnx_intr_func;
250f33ac8a4SSepherosa Ziehau 	void			*bnx_intr_hand;
251f33ac8a4SSepherosa Ziehau 	struct resource		*bnx_intr_res;
252f33ac8a4SSepherosa Ziehau 	int			bnx_intr_rid;
253f33ac8a4SSepherosa Ziehau 
254f33ac8a4SSepherosa Ziehau 	const char		*bnx_intr_desc;
255f33ac8a4SSepherosa Ziehau 	char			bnx_intr_desc0[64];
256f33ac8a4SSepherosa Ziehau } __cachealign;
257f33ac8a4SSepherosa Ziehau 
258f33ac8a4SSepherosa Ziehau #define BNX_INTR_MAX		5
259f33ac8a4SSepherosa Ziehau 
2606c8d8eccSSepherosa Ziehau struct bnx_softc {
2616c8d8eccSSepherosa Ziehau 	struct arpcom		arpcom;		/* interface info */
2626c8d8eccSSepherosa Ziehau 	device_t		bnx_dev;
2636c8d8eccSSepherosa Ziehau 	device_t		bnx_miibus;
2646c8d8eccSSepherosa Ziehau 	bus_space_handle_t	bnx_bhandle;
2656c8d8eccSSepherosa Ziehau 	bus_space_tag_t		bnx_btag;
2666c8d8eccSSepherosa Ziehau 	struct resource		*bnx_res;
2676c8d8eccSSepherosa Ziehau 	struct ifmedia		bnx_ifmedia;	/* TBI media info */
2686c8d8eccSSepherosa Ziehau 	int			bnx_pciecap;
2696c8d8eccSSepherosa Ziehau 	uint32_t		bnx_status_tag;
2706c8d8eccSSepherosa Ziehau 	uint32_t		bnx_flags;	/* BNX_FLAG_ */
2716c8d8eccSSepherosa Ziehau #define BNX_FLAG_TBI		0x00000001
2726c8d8eccSSepherosa Ziehau #define BNX_FLAG_JUMBO		0x00000002
2736c8d8eccSSepherosa Ziehau #define BNX_FLAG_ONESHOT_MSI	0x00000004
2746c8d8eccSSepherosa Ziehau #define BNX_FLAG_5717_PLUS	0x00000008
2756c8d8eccSSepherosa Ziehau #define BNX_FLAG_MII_SERDES	0x00000010
2766c8d8eccSSepherosa Ziehau #define BNX_FLAG_CPMU		0x00000020
277f368d0d9SSepherosa Ziehau #define BNX_FLAG_57765_PLUS	0x00000040
278f368d0d9SSepherosa Ziehau #define BNX_FLAG_57765_FAMILY	0x00000080
279df9ccc98SSepherosa Ziehau #define BNX_FLAG_STATUSTAG_BUG	0x00000100
28066deb1c1SSepherosa Ziehau #define BNX_FLAG_TSO		0x00000200
2816c8d8eccSSepherosa Ziehau #define BNX_FLAG_NO_EEPROM	0x10000000
2826c8d8eccSSepherosa Ziehau 
2836c8d8eccSSepherosa Ziehau 	uint32_t		bnx_chipid;
2846c8d8eccSSepherosa Ziehau 	uint32_t		bnx_asicrev;
2856c8d8eccSSepherosa Ziehau 	uint32_t		bnx_chiprev;
2866c8d8eccSSepherosa Ziehau 	struct bnx_ring_data	bnx_ldata;	/* rings */
2876c8d8eccSSepherosa Ziehau 	struct bnx_chain_data	bnx_cdata;	/* mbufs */
288beedf5beSSepherosa Ziehau 
289f33ac8a4SSepherosa Ziehau 	struct lwkt_serialize	bnx_main_serialize;
290329f9016SSepherosa Ziehau 	int			bnx_serialize_cnt;
291329f9016SSepherosa Ziehau 	struct lwkt_serialize	**bnx_serialize;
292f33ac8a4SSepherosa Ziehau 
29333a04907SSepherosa Ziehau 	int			bnx_tx_ringcnt;
29433a04907SSepherosa Ziehau 	struct bnx_tx_ring	*bnx_tx_ring;
295beedf5beSSepherosa Ziehau 	int			bnx_rx_retcnt;
296beedf5beSSepherosa Ziehau 	struct bnx_rx_ret_ring	*bnx_rx_ret_ring;
297beedf5beSSepherosa Ziehau 	struct bnx_rx_std_ring	bnx_rx_std_ring;
298beedf5beSSepherosa Ziehau 
2996c8d8eccSSepherosa Ziehau 	uint16_t		bnx_jumbo;	/* current jumo ring head */
3006c8d8eccSSepherosa Ziehau 	SLIST_HEAD(__bnx_jfreehead, bnx_jslot)	bnx_jfree_listhead;
3016c8d8eccSSepherosa Ziehau 	struct lwkt_serialize	bnx_jslot_serializer;
3026c8d8eccSSepherosa Ziehau 	uint32_t		bnx_rx_coal_ticks;
3036c8d8eccSSepherosa Ziehau 	uint32_t		bnx_tx_coal_ticks;
3046c8d8eccSSepherosa Ziehau 	uint32_t		bnx_rx_coal_bds;
3056c8d8eccSSepherosa Ziehau 	uint32_t		bnx_tx_coal_bds;
3066c8d8eccSSepherosa Ziehau 	uint32_t		bnx_rx_coal_bds_int;
3076c8d8eccSSepherosa Ziehau 	uint32_t		bnx_tx_coal_bds_int;
3086c8d8eccSSepherosa Ziehau 	uint32_t		bnx_mi_mode;
3096c8d8eccSSepherosa Ziehau 	int			bnx_if_flags;
3106c8d8eccSSepherosa Ziehau 	int			bnx_link;
3116c8d8eccSSepherosa Ziehau 	int			bnx_link_evt;
3128ca0f604SSepherosa Ziehau 	int			bnx_stat_cpuid;
3136c8d8eccSSepherosa Ziehau 	struct callout		bnx_stat_timer;
314b5de76b1SSepherosa Ziehau 	struct ifpoll_compat	bnx_npoll;
3156c8d8eccSSepherosa Ziehau 
316f33ac8a4SSepherosa Ziehau 	int			bnx_intr_type;
317f33ac8a4SSepherosa Ziehau 	int			bnx_intr_cnt;
318f33ac8a4SSepherosa Ziehau 	struct bnx_intr_data	bnx_intr_data[BNX_INTR_MAX];
319df9ccc98SSepherosa Ziehau 
3206c8d8eccSSepherosa Ziehau 	struct sysctl_ctx_list	bnx_sysctl_ctx;
3216c8d8eccSSepherosa Ziehau 	struct sysctl_oid	*bnx_sysctl_tree;
3226c8d8eccSSepherosa Ziehau 
3236c8d8eccSSepherosa Ziehau 	int			bnx_phyno;
3246c8d8eccSSepherosa Ziehau 	uint32_t		bnx_coal_chg;
3256c8d8eccSSepherosa Ziehau #define BNX_RX_COAL_TICKS_CHG		0x01
3266c8d8eccSSepherosa Ziehau #define BNX_TX_COAL_TICKS_CHG		0x02
3276c8d8eccSSepherosa Ziehau #define BNX_RX_COAL_BDS_CHG		0x04
3286c8d8eccSSepherosa Ziehau #define BNX_TX_COAL_BDS_CHG		0x08
3296c8d8eccSSepherosa Ziehau #define BNX_RX_COAL_BDS_INT_CHG		0x40
3306c8d8eccSSepherosa Ziehau #define BNX_TX_COAL_BDS_INT_CHG		0x80
3316c8d8eccSSepherosa Ziehau 
3326c8d8eccSSepherosa Ziehau 	void			(*bnx_link_upd)(struct bnx_softc *, uint32_t);
3336c8d8eccSSepherosa Ziehau 	uint32_t		bnx_link_chg;
33466deb1c1SSepherosa Ziehau 
33566deb1c1SSepherosa Ziehau #define BNX_TSO_NSTATS		45
33666deb1c1SSepherosa Ziehau 	u_long			bnx_tsosegs[BNX_TSO_NSTATS];
3376c8d8eccSSepherosa Ziehau };
3386c8d8eccSSepherosa Ziehau 
33966deb1c1SSepherosa Ziehau #define BNX_NSEG_NEW		40
340adea0b8cSSepherosa Ziehau #define BNX_NSEG_SPARE		33	/* enough for 64K TSO segment */
341adea0b8cSSepherosa Ziehau #define BNX_NSEG_RSVD		4
3426c8d8eccSSepherosa Ziehau 
3436c8d8eccSSepherosa Ziehau /* RX coalesce ticks, unit: us */
3446c8d8eccSSepherosa Ziehau #define BNX_RX_COAL_TICKS_MIN	0
3456c8d8eccSSepherosa Ziehau #define BNX_RX_COAL_TICKS_DEF	160
3466c8d8eccSSepherosa Ziehau #define BNX_RX_COAL_TICKS_MAX	1023
3476c8d8eccSSepherosa Ziehau 
3486c8d8eccSSepherosa Ziehau /* TX coalesce ticks, unit: us */
3496c8d8eccSSepherosa Ziehau #define BNX_TX_COAL_TICKS_MIN	0
3506c8d8eccSSepherosa Ziehau #define BNX_TX_COAL_TICKS_DEF	1023
3516c8d8eccSSepherosa Ziehau #define BNX_TX_COAL_TICKS_MAX	1023
3526c8d8eccSSepherosa Ziehau 
3536c8d8eccSSepherosa Ziehau /* RX coalesce BDs */
3548a382fe7SSepherosa Ziehau #define BNX_RX_COAL_BDS_MIN	0
355306e5498SSepherosa Ziehau #define BNX_RX_COAL_BDS_DEF	0
356306e5498SSepherosa Ziehau #define BNX_RX_COAL_BDS_INT_DEF	80
3576c8d8eccSSepherosa Ziehau #define BNX_RX_COAL_BDS_MAX	255
3586c8d8eccSSepherosa Ziehau 
3596c8d8eccSSepherosa Ziehau /* TX coalesce BDs */
3608a382fe7SSepherosa Ziehau #define BNX_TX_COAL_BDS_MIN	0
361c9b7f592SSepherosa Ziehau #define BNX_TX_COAL_BDS_DEF	64
362c9b7f592SSepherosa Ziehau #define BNX_TX_COAL_BDS_INT_DEF	64
3636c8d8eccSSepherosa Ziehau #define BNX_TX_COAL_BDS_MAX	255
3646c8d8eccSSepherosa Ziehau 
3650bb53200SSepherosa Ziehau /* Number of segments sent before writing to TX related registers */
3660bb53200SSepherosa Ziehau #define BNX_TX_WREG_NSEGS	8
3670bb53200SSepherosa Ziehau 
368e0f74fc8SSepherosa Ziehau /* Return ring descriptor count */
369e0f74fc8SSepherosa Ziehau #define BNX_RETURN_RING_CNT	512
370e0f74fc8SSepherosa Ziehau 
3716c8d8eccSSepherosa Ziehau #endif	/* !_IF_BNXVAR_H_ */
372