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