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