xref: /dflybsd-src/sys/dev/netif/bnx/if_bnxvar.h (revision 0a806e3a96d1982179ab5dbeee5dc0f9680a4322)
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 	void			*bnx_jumbo_buf;
1426c8d8eccSSepherosa Ziehau 	struct bnx_gib		bnx_info;
1436c8d8eccSSepherosa Ziehau };
1446c8d8eccSSepherosa Ziehau 
145beedf5beSSepherosa Ziehau struct bnx_rx_buf {
146beedf5beSSepherosa Ziehau 	bus_dmamap_t		bnx_rx_dmamap;
147beedf5beSSepherosa Ziehau 	struct mbuf		*bnx_rx_mbuf;
148beedf5beSSepherosa Ziehau 	bus_addr_t		bnx_rx_paddr;
149841cdf08SSepherosa Ziehau 	int			bnx_rx_refilled;
150841cdf08SSepherosa Ziehau } __cachealign;
1516c8d8eccSSepherosa Ziehau 
152beedf5beSSepherosa Ziehau struct bnx_rx_std_ring {
153329f9016SSepherosa Ziehau 	struct lwkt_serialize	bnx_rx_std_serialize;
154beedf5beSSepherosa Ziehau 	struct bnx_softc	*bnx_sc;
155beedf5beSSepherosa Ziehau 
156841cdf08SSepherosa Ziehau 	volatile uint16_t	bnx_rx_std_stop;
157beedf5beSSepherosa Ziehau 	uint16_t		bnx_rx_std;	/* current prod ring head */
158beedf5beSSepherosa Ziehau 	struct bge_rx_bd	*bnx_rx_std_ring;
159beedf5beSSepherosa Ziehau 
160841cdf08SSepherosa Ziehau 	int			bnx_rx_std_refill __cachealign;
161841cdf08SSepherosa Ziehau 	u_int			bnx_rx_std_running;
162841cdf08SSepherosa Ziehau 	struct thread		bnx_rx_std_ithread;
163841cdf08SSepherosa Ziehau 
164beedf5beSSepherosa Ziehau 	struct bnx_rx_buf	bnx_rx_std_buf[BGE_STD_RX_RING_CNT];
165beedf5beSSepherosa Ziehau 
166841cdf08SSepherosa Ziehau 	bus_dma_tag_t		bnx_rx_mtag;	/* RX mbuf DMA tag */
167841cdf08SSepherosa Ziehau 
168beedf5beSSepherosa Ziehau 	bus_dma_tag_t		bnx_rx_std_ring_tag;
169beedf5beSSepherosa Ziehau 	bus_dmamap_t		bnx_rx_std_ring_map;
170beedf5beSSepherosa Ziehau 	bus_addr_t		bnx_rx_std_ring_paddr;
171beedf5beSSepherosa Ziehau } __cachealign;
172beedf5beSSepherosa Ziehau 
173beedf5beSSepherosa Ziehau struct bnx_rx_ret_ring {
174329f9016SSepherosa Ziehau 	struct lwkt_serialize	bnx_rx_ret_serialize;
175ac2936fdSSepherosa Ziehau 	int			bnx_rx_mbx;
1764fa38985SSepherosa Ziehau 	uint32_t		bnx_saved_status_tag;
1774fa38985SSepherosa Ziehau 	volatile uint32_t	*bnx_hw_status_tag;
178beedf5beSSepherosa Ziehau 	struct bnx_softc	*bnx_sc;
179beedf5beSSepherosa Ziehau 	struct bnx_rx_std_ring	*bnx_std;
180beedf5beSSepherosa Ziehau 
181beedf5beSSepherosa Ziehau 	/* Shadow of bnx_rx_std_ring's bnx_rx_mtag */
182beedf5beSSepherosa Ziehau 	bus_dma_tag_t		bnx_rx_mtag;
183beedf5beSSepherosa Ziehau 
1843a16b7b8SSepherosa Ziehau 	volatile uint16_t	*bnx_rx_considx;
185beedf5beSSepherosa Ziehau 	uint16_t		bnx_rx_saved_considx;
186841cdf08SSepherosa Ziehau 	uint16_t		bnx_rx_cnt;
187841cdf08SSepherosa Ziehau 	uint16_t		bnx_rx_cntmax;
188841cdf08SSepherosa Ziehau 	uint16_t		bnx_rx_mask;
189beedf5beSSepherosa Ziehau 	struct bge_rx_bd	*bnx_rx_ret_ring;
190beedf5beSSepherosa Ziehau 	bus_dmamap_t		bnx_rx_tmpmap;
191beedf5beSSepherosa Ziehau 
192beedf5beSSepherosa Ziehau 	bus_dma_tag_t		bnx_rx_ret_ring_tag;
193beedf5beSSepherosa Ziehau 	bus_dmamap_t		bnx_rx_ret_ring_map;
194beedf5beSSepherosa Ziehau 	bus_addr_t		bnx_rx_ret_ring_paddr;
195beedf5beSSepherosa Ziehau } __cachealign;
196beedf5beSSepherosa Ziehau 
1976c8d8eccSSepherosa Ziehau /*
1986c8d8eccSSepherosa Ziehau  * Mbuf pointers. We need these to keep track of the virtual addresses
1996c8d8eccSSepherosa Ziehau  * of our mbuf chains since we can only convert from physical to virtual,
2006c8d8eccSSepherosa Ziehau  * not the other way around.
2016c8d8eccSSepherosa Ziehau  */
2026c8d8eccSSepherosa Ziehau struct bnx_chain_data {
2036c8d8eccSSepherosa Ziehau 	bus_dma_tag_t		bnx_parent_tag;
2046c8d8eccSSepherosa Ziehau 	bus_dma_tag_t		bnx_rx_jumbo_ring_tag;
2056c8d8eccSSepherosa Ziehau 	bus_dma_tag_t		bnx_jumbo_tag;
2066c8d8eccSSepherosa Ziehau 	bus_dmamap_t		bnx_rx_jumbo_ring_map;
2076c8d8eccSSepherosa Ziehau 	bus_dmamap_t		bnx_jumbo_map;
208beedf5beSSepherosa Ziehau 	struct bnx_rx_buf	bnx_rx_jumbo_chain[BGE_JUMBO_RX_RING_CNT];
2096c8d8eccSSepherosa Ziehau 	/* Stick the jumbo mem management stuff here too. */
2106c8d8eccSSepherosa Ziehau 	struct bnx_jslot	bnx_jslots[BNX_JSLOTS];
2116c8d8eccSSepherosa Ziehau };
2126c8d8eccSSepherosa Ziehau 
213fa4b1067SSepherosa Ziehau struct bnx_tx_buf {
214fa4b1067SSepherosa Ziehau 	bus_dmamap_t		bnx_tx_dmamap;
215fa4b1067SSepherosa Ziehau 	struct mbuf		*bnx_tx_mbuf;
216fa4b1067SSepherosa Ziehau };
217fa4b1067SSepherosa Ziehau 
21833a04907SSepherosa Ziehau struct bnx_tx_ring {
219329f9016SSepherosa Ziehau 	struct lwkt_serialize	bnx_tx_serialize;
2204fa38985SSepherosa Ziehau 	uint32_t		bnx_saved_status_tag;
22133a04907SSepherosa Ziehau 	struct bnx_softc	*bnx_sc;
2223397dea6SSepherosa Ziehau 	struct ifaltq_subque	*bnx_ifsq;
2233a16b7b8SSepherosa Ziehau 	volatile uint16_t	*bnx_tx_considx;
22479a64343SSepherosa Ziehau 	uint16_t		bnx_tx_flags;
22579a64343SSepherosa Ziehau #define BNX_TX_FLAG_SHORTDMA		0x0001
226aad4de2bSSepherosa Ziehau #define BNX_TX_FLAG_FORCE_DEFRAG	0x0002
22733a04907SSepherosa Ziehau 	uint16_t		bnx_tx_saved_considx;
228fa639b88SSepherosa Ziehau 	int			bnx_tx_cnt;
22933a04907SSepherosa Ziehau 	uint32_t		bnx_tx_prodidx;
23033a04907SSepherosa Ziehau 	int			bnx_tx_wreg;
2318bd43d5dSSepherosa Ziehau 	int			bnx_tx_mbx;
2323397dea6SSepherosa Ziehau 	struct ifsubq_watchdog	bnx_tx_watchdog;
23333a04907SSepherosa Ziehau 
23433a04907SSepherosa Ziehau 	struct bge_tx_bd	*bnx_tx_ring;
23533a04907SSepherosa Ziehau 
23633a04907SSepherosa Ziehau 	bus_dma_tag_t		bnx_tx_mtag;	/* TX mbuf DMA tag */
237fa4b1067SSepherosa Ziehau 	struct bnx_tx_buf	bnx_tx_buf[BGE_TX_RING_CNT];
23833a04907SSepherosa Ziehau 
23933a04907SSepherosa Ziehau 	bus_dma_tag_t		bnx_tx_ring_tag;
24033a04907SSepherosa Ziehau 	bus_dmamap_t		bnx_tx_ring_map;
24133a04907SSepherosa Ziehau 	bus_addr_t		bnx_tx_ring_paddr;
242f33ac8a4SSepherosa Ziehau 	int			bnx_tx_cpuid;
24333a04907SSepherosa Ziehau } __cachealign;
24433a04907SSepherosa Ziehau 
245f33ac8a4SSepherosa Ziehau struct bnx_intr_data {
246f33ac8a4SSepherosa Ziehau 	struct bnx_softc	*bnx_sc;
247f33ac8a4SSepherosa Ziehau 	struct bnx_rx_ret_ring	*bnx_ret;
248f33ac8a4SSepherosa Ziehau 	struct bnx_tx_ring	*bnx_txr;
249f33ac8a4SSepherosa Ziehau 
250f33ac8a4SSepherosa Ziehau 	int			bnx_intr_cpuid;
251f33ac8a4SSepherosa Ziehau 	struct lwkt_serialize	*bnx_intr_serialize;
252f33ac8a4SSepherosa Ziehau 	struct callout		bnx_intr_timer;
253f33ac8a4SSepherosa Ziehau 	void			(*bnx_intr_check)(void *);
254f33ac8a4SSepherosa Ziehau 	uint16_t		bnx_rx_check_considx;
255f33ac8a4SSepherosa Ziehau 	uint16_t		bnx_tx_check_considx;
256f33ac8a4SSepherosa Ziehau 	boolean_t		bnx_intr_maylose;
257f33ac8a4SSepherosa Ziehau 
258f33ac8a4SSepherosa Ziehau 	void			*bnx_intr_arg;
259f33ac8a4SSepherosa Ziehau 	driver_intr_t		*bnx_intr_func;
260f33ac8a4SSepherosa Ziehau 	void			*bnx_intr_hand;
261f33ac8a4SSepherosa Ziehau 	struct resource		*bnx_intr_res;
262f33ac8a4SSepherosa Ziehau 	int			bnx_intr_rid;
2634fa38985SSepherosa Ziehau 	const uint32_t		*bnx_saved_status_tag;
264f33ac8a4SSepherosa Ziehau 
265f33ac8a4SSepherosa Ziehau 	const char		*bnx_intr_desc;
266f33ac8a4SSepherosa Ziehau 	char			bnx_intr_desc0[64];
267*0a806e3aSSepherosa Ziehau 
268*0a806e3aSSepherosa Ziehau 	bus_dma_tag_t		bnx_status_tag;
269*0a806e3aSSepherosa Ziehau 	bus_dmamap_t		bnx_status_map;
270*0a806e3aSSepherosa Ziehau 	struct bge_status_block	*bnx_status_block;
271*0a806e3aSSepherosa Ziehau 	bus_addr_t		bnx_status_block_paddr;
272f33ac8a4SSepherosa Ziehau } __cachealign;
273f33ac8a4SSepherosa Ziehau 
274f33ac8a4SSepherosa Ziehau #define BNX_INTR_MAX		5
275f33ac8a4SSepherosa Ziehau 
2766c8d8eccSSepherosa Ziehau struct bnx_softc {
2776c8d8eccSSepherosa Ziehau 	struct arpcom		arpcom;		/* interface info */
2786c8d8eccSSepherosa Ziehau 	device_t		bnx_dev;
2796c8d8eccSSepherosa Ziehau 	device_t		bnx_miibus;
2806c8d8eccSSepherosa Ziehau 	bus_space_handle_t	bnx_bhandle;
2816c8d8eccSSepherosa Ziehau 	bus_space_tag_t		bnx_btag;
2826c8d8eccSSepherosa Ziehau 	struct resource		*bnx_res;
2836c8d8eccSSepherosa Ziehau 	struct ifmedia		bnx_ifmedia;	/* TBI media info */
2846c8d8eccSSepherosa Ziehau 	int			bnx_pciecap;
2856c8d8eccSSepherosa Ziehau 	uint32_t		bnx_flags;	/* BNX_FLAG_ */
2866c8d8eccSSepherosa Ziehau #define BNX_FLAG_TBI		0x00000001
2876c8d8eccSSepherosa Ziehau #define BNX_FLAG_JUMBO		0x00000002
2886c8d8eccSSepherosa Ziehau #define BNX_FLAG_ONESHOT_MSI	0x00000004
2896c8d8eccSSepherosa Ziehau #define BNX_FLAG_5717_PLUS	0x00000008
2906c8d8eccSSepherosa Ziehau #define BNX_FLAG_MII_SERDES	0x00000010
2916c8d8eccSSepherosa Ziehau #define BNX_FLAG_CPMU		0x00000020
292f368d0d9SSepherosa Ziehau #define BNX_FLAG_57765_PLUS	0x00000040
293f368d0d9SSepherosa Ziehau #define BNX_FLAG_57765_FAMILY	0x00000080
294df9ccc98SSepherosa Ziehau #define BNX_FLAG_STATUSTAG_BUG	0x00000100
29566deb1c1SSepherosa Ziehau #define BNX_FLAG_TSO		0x00000200
2966c8d8eccSSepherosa Ziehau #define BNX_FLAG_NO_EEPROM	0x10000000
2974fa38985SSepherosa Ziehau #define BNX_FLAG_RXTX_BUNDLE	0x20000000
298841cdf08SSepherosa Ziehau #define BNX_FLAG_STD_THREAD	0x40000000
2996c8d8eccSSepherosa Ziehau 
3006c8d8eccSSepherosa Ziehau 	uint32_t		bnx_chipid;
3016c8d8eccSSepherosa Ziehau 	uint32_t		bnx_asicrev;
3026c8d8eccSSepherosa Ziehau 	uint32_t		bnx_chiprev;
3036c8d8eccSSepherosa Ziehau 	struct bnx_ring_data	bnx_ldata;	/* rings */
3046c8d8eccSSepherosa Ziehau 	struct bnx_chain_data	bnx_cdata;	/* mbufs */
305beedf5beSSepherosa Ziehau 
306f33ac8a4SSepherosa Ziehau 	struct lwkt_serialize	bnx_main_serialize;
307329f9016SSepherosa Ziehau 	int			bnx_serialize_cnt;
308329f9016SSepherosa Ziehau 	struct lwkt_serialize	**bnx_serialize;
309f33ac8a4SSepherosa Ziehau 
31033a04907SSepherosa Ziehau 	int			bnx_tx_ringcnt;
31133a04907SSepherosa Ziehau 	struct bnx_tx_ring	*bnx_tx_ring;
312beedf5beSSepherosa Ziehau 	int			bnx_rx_retcnt;
313beedf5beSSepherosa Ziehau 	struct bnx_rx_ret_ring	*bnx_rx_ret_ring;
314beedf5beSSepherosa Ziehau 	struct bnx_rx_std_ring	bnx_rx_std_ring;
315beedf5beSSepherosa Ziehau 
3166c8d8eccSSepherosa Ziehau 	uint16_t		bnx_jumbo;	/* current jumo ring head */
3176c8d8eccSSepherosa Ziehau 	SLIST_HEAD(__bnx_jfreehead, bnx_jslot)	bnx_jfree_listhead;
3186c8d8eccSSepherosa Ziehau 	struct lwkt_serialize	bnx_jslot_serializer;
3196c8d8eccSSepherosa Ziehau 	uint32_t		bnx_rx_coal_ticks;
3206c8d8eccSSepherosa Ziehau 	uint32_t		bnx_tx_coal_ticks;
3216c8d8eccSSepherosa Ziehau 	uint32_t		bnx_rx_coal_bds;
3226c8d8eccSSepherosa Ziehau 	uint32_t		bnx_tx_coal_bds;
3236c8d8eccSSepherosa Ziehau 	uint32_t		bnx_rx_coal_bds_int;
3246c8d8eccSSepherosa Ziehau 	uint32_t		bnx_tx_coal_bds_int;
3256c8d8eccSSepherosa Ziehau 	uint32_t		bnx_mi_mode;
3266c8d8eccSSepherosa Ziehau 	int			bnx_if_flags;
3276c8d8eccSSepherosa Ziehau 	int			bnx_link;
3286c8d8eccSSepherosa Ziehau 	int			bnx_link_evt;
3297dbaa833SSepherosa Ziehau 	int			bnx_tick_cpuid;
3307dbaa833SSepherosa Ziehau 	struct callout		bnx_tick_timer;
3314fa38985SSepherosa Ziehau 
3324fa38985SSepherosa Ziehau 	int			bnx_npoll_rxoff;
3334fa38985SSepherosa Ziehau 	int			bnx_npoll_txoff;
3346c8d8eccSSepherosa Ziehau 
335f33ac8a4SSepherosa Ziehau 	int			bnx_intr_type;
336f33ac8a4SSepherosa Ziehau 	int			bnx_intr_cnt;
337f33ac8a4SSepherosa Ziehau 	struct bnx_intr_data	bnx_intr_data[BNX_INTR_MAX];
338df9ccc98SSepherosa Ziehau 
3396c8d8eccSSepherosa Ziehau 	struct sysctl_ctx_list	bnx_sysctl_ctx;
3406c8d8eccSSepherosa Ziehau 	struct sysctl_oid	*bnx_sysctl_tree;
3416c8d8eccSSepherosa Ziehau 
3426c8d8eccSSepherosa Ziehau 	int			bnx_phyno;
3436c8d8eccSSepherosa Ziehau 	uint32_t		bnx_coal_chg;
3446c8d8eccSSepherosa Ziehau #define BNX_RX_COAL_TICKS_CHG		0x01
3456c8d8eccSSepherosa Ziehau #define BNX_TX_COAL_TICKS_CHG		0x02
3466c8d8eccSSepherosa Ziehau #define BNX_RX_COAL_BDS_CHG		0x04
3476c8d8eccSSepherosa Ziehau #define BNX_TX_COAL_BDS_CHG		0x08
3486c8d8eccSSepherosa Ziehau #define BNX_RX_COAL_BDS_INT_CHG		0x40
3496c8d8eccSSepherosa Ziehau #define BNX_TX_COAL_BDS_INT_CHG		0x80
3506c8d8eccSSepherosa Ziehau 
3516c8d8eccSSepherosa Ziehau 	void			(*bnx_link_upd)(struct bnx_softc *, uint32_t);
3526c8d8eccSSepherosa Ziehau 	uint32_t		bnx_link_chg;
35366deb1c1SSepherosa Ziehau 
35466deb1c1SSepherosa Ziehau #define BNX_TSO_NSTATS		45
35566deb1c1SSepherosa Ziehau 	u_long			bnx_tsosegs[BNX_TSO_NSTATS];
3566c8d8eccSSepherosa Ziehau };
3576c8d8eccSSepherosa Ziehau 
35866deb1c1SSepherosa Ziehau #define BNX_NSEG_NEW		40
359adea0b8cSSepherosa Ziehau #define BNX_NSEG_SPARE		33	/* enough for 64K TSO segment */
360adea0b8cSSepherosa Ziehau #define BNX_NSEG_RSVD		4
3616c8d8eccSSepherosa Ziehau 
3626c8d8eccSSepherosa Ziehau /* RX coalesce ticks, unit: us */
3636c8d8eccSSepherosa Ziehau #define BNX_RX_COAL_TICKS_MIN	0
3646c8d8eccSSepherosa Ziehau #define BNX_RX_COAL_TICKS_DEF	160
3656c8d8eccSSepherosa Ziehau #define BNX_RX_COAL_TICKS_MAX	1023
3666c8d8eccSSepherosa Ziehau 
3676c8d8eccSSepherosa Ziehau /* TX coalesce ticks, unit: us */
3686c8d8eccSSepherosa Ziehau #define BNX_TX_COAL_TICKS_MIN	0
3696c8d8eccSSepherosa Ziehau #define BNX_TX_COAL_TICKS_DEF	1023
3706c8d8eccSSepherosa Ziehau #define BNX_TX_COAL_TICKS_MAX	1023
3716c8d8eccSSepherosa Ziehau 
3726c8d8eccSSepherosa Ziehau /* RX coalesce BDs */
3738a382fe7SSepherosa Ziehau #define BNX_RX_COAL_BDS_MIN	0
374306e5498SSepherosa Ziehau #define BNX_RX_COAL_BDS_DEF	0
375306e5498SSepherosa Ziehau #define BNX_RX_COAL_BDS_INT_DEF	80
3766c8d8eccSSepherosa Ziehau #define BNX_RX_COAL_BDS_MAX	255
3776c8d8eccSSepherosa Ziehau 
3786c8d8eccSSepherosa Ziehau /* TX coalesce BDs */
3798a382fe7SSepherosa Ziehau #define BNX_TX_COAL_BDS_MIN	0
380c9b7f592SSepherosa Ziehau #define BNX_TX_COAL_BDS_DEF	64
381c9b7f592SSepherosa Ziehau #define BNX_TX_COAL_BDS_INT_DEF	64
3826c8d8eccSSepherosa Ziehau #define BNX_TX_COAL_BDS_MAX	255
3836c8d8eccSSepherosa Ziehau 
3840bb53200SSepherosa Ziehau /* Number of segments sent before writing to TX related registers */
3850bb53200SSepherosa Ziehau #define BNX_TX_WREG_NSEGS	8
3860bb53200SSepherosa Ziehau 
387e0f74fc8SSepherosa Ziehau /* Return ring descriptor count */
388e0f74fc8SSepherosa Ziehau #define BNX_RETURN_RING_CNT	512
389e0f74fc8SSepherosa Ziehau 
3901c9d03f6SSepherosa Ziehau #define BNX_TX_RING_MAX		4
3911c9d03f6SSepherosa Ziehau 
3926c8d8eccSSepherosa Ziehau #endif	/* !_IF_BNXVAR_H_ */
393