11f7e3916SSepherosa Ziehau /* 21f7e3916SSepherosa Ziehau * Copyright (c) 2001-2011, Intel Corporation 31f7e3916SSepherosa Ziehau * All rights reserved. 41f7e3916SSepherosa Ziehau * 51f7e3916SSepherosa Ziehau * Redistribution and use in source and binary forms, with or without 61f7e3916SSepherosa Ziehau * modification, are permitted provided that the following conditions are met: 71f7e3916SSepherosa Ziehau * 81f7e3916SSepherosa Ziehau * 1. Redistributions of source code must retain the above copyright notice, 91f7e3916SSepherosa Ziehau * this list of conditions and the following disclaimer. 101f7e3916SSepherosa Ziehau * 111f7e3916SSepherosa Ziehau * 2. Redistributions in binary form must reproduce the above copyright 121f7e3916SSepherosa Ziehau * notice, this list of conditions and the following disclaimer in the 131f7e3916SSepherosa Ziehau * documentation and/or other materials provided with the distribution. 141f7e3916SSepherosa Ziehau * 151f7e3916SSepherosa Ziehau * 3. Neither the name of the Intel Corporation nor the names of its 161f7e3916SSepherosa Ziehau * contributors may be used to endorse or promote products derived from 171f7e3916SSepherosa Ziehau * this software without specific prior written permission. 181f7e3916SSepherosa Ziehau * 191f7e3916SSepherosa Ziehau * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 201f7e3916SSepherosa Ziehau * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 211f7e3916SSepherosa Ziehau * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 221f7e3916SSepherosa Ziehau * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 231f7e3916SSepherosa Ziehau * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 241f7e3916SSepherosa Ziehau * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 251f7e3916SSepherosa Ziehau * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 261f7e3916SSepherosa Ziehau * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 271f7e3916SSepherosa Ziehau * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 281f7e3916SSepherosa Ziehau * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 291f7e3916SSepherosa Ziehau * POSSIBILITY OF SUCH DAMAGE. 301f7e3916SSepherosa Ziehau */ 311f7e3916SSepherosa Ziehau 321f7e3916SSepherosa Ziehau #ifndef _IF_IGB_H_ 331f7e3916SSepherosa Ziehau #define _IF_IGB_H_ 341f7e3916SSepherosa Ziehau 351f7e3916SSepherosa Ziehau /* Tunables */ 361f7e3916SSepherosa Ziehau 371f7e3916SSepherosa Ziehau /* 388d6600daSSepherosa Ziehau * Max ring count 398d6600daSSepherosa Ziehau */ 408d6600daSSepherosa Ziehau #define IGB_MAX_RING_82575 4 418d6600daSSepherosa Ziehau #define IGB_MAX_RING_I350 8 428d6600daSSepherosa Ziehau #define IGB_MAX_RING_82580 8 438d6600daSSepherosa Ziehau #define IGB_MAX_RING_82576 16 448d6600daSSepherosa Ziehau #define IGB_MIN_RING 1 45be922da6SSepherosa Ziehau #define IGB_MIN_RING_RSS 2 468d6600daSSepherosa Ziehau 478d6600daSSepherosa Ziehau /* 488d6600daSSepherosa Ziehau * Max TX/RX interrupt bits 498d6600daSSepherosa Ziehau */ 508d6600daSSepherosa Ziehau #define IGB_MAX_TXRXINT_82575 4 /* XXX not used */ 518d6600daSSepherosa Ziehau #define IGB_MAX_TXRXINT_I350 8 528d6600daSSepherosa Ziehau #define IGB_MAX_TXRXINT_82580 8 538d6600daSSepherosa Ziehau #define IGB_MAX_TXRXINT_82576 16 548d6600daSSepherosa Ziehau #define IGB_MIN_TXRXINT 2 /* XXX VF? */ 558d6600daSSepherosa Ziehau 568d6600daSSepherosa Ziehau /* 579c0ecdccSSepherosa Ziehau * Max IVAR count 589c0ecdccSSepherosa Ziehau */ 599c0ecdccSSepherosa Ziehau #define IGB_MAX_IVAR_I350 4 609c0ecdccSSepherosa Ziehau #define IGB_MAX_IVAR_82580 4 619c0ecdccSSepherosa Ziehau #define IGB_MAX_IVAR_82576 8 629c0ecdccSSepherosa Ziehau #define IGB_MAX_IVAR_VF 1 639c0ecdccSSepherosa Ziehau 649c0ecdccSSepherosa Ziehau /* 651f7e3916SSepherosa Ziehau * IGB_TXD: Maximum number of Transmit Descriptors 661f7e3916SSepherosa Ziehau * 671f7e3916SSepherosa Ziehau * This value is the number of transmit descriptors allocated by the driver. 681f7e3916SSepherosa Ziehau * Increasing this value allows the driver to queue more transmits. Each 691f7e3916SSepherosa Ziehau * descriptor is 16 bytes. 701f7e3916SSepherosa Ziehau * Since TDLEN should be multiple of 128bytes, the number of transmit 711f7e3916SSepherosa Ziehau * desscriptors should meet the following condition. 721f7e3916SSepherosa Ziehau * (num_tx_desc * sizeof(struct e1000_tx_desc)) % 128 == 0 731f7e3916SSepherosa Ziehau */ 741f7e3916SSepherosa Ziehau #define IGB_MIN_TXD 256 751f7e3916SSepherosa Ziehau #define IGB_DEFAULT_TXD 1024 761f7e3916SSepherosa Ziehau #define IGB_MAX_TXD 4096 771f7e3916SSepherosa Ziehau 781f7e3916SSepherosa Ziehau /* 791f7e3916SSepherosa Ziehau * IGB_RXD: Maximum number of Transmit Descriptors 801f7e3916SSepherosa Ziehau * 811f7e3916SSepherosa Ziehau * This value is the number of receive descriptors allocated by the driver. 821f7e3916SSepherosa Ziehau * Increasing this value allows the driver to buffer more incoming packets. 831f7e3916SSepherosa Ziehau * Each descriptor is 16 bytes. A receive buffer is also allocated for each 841f7e3916SSepherosa Ziehau * descriptor. The maximum MTU size is 16110. 851f7e3916SSepherosa Ziehau * Since TDLEN should be multiple of 128bytes, the number of transmit 861f7e3916SSepherosa Ziehau * desscriptors should meet the following condition. 871f7e3916SSepherosa Ziehau * (num_tx_desc * sizeof(struct e1000_tx_desc)) % 128 == 0 881f7e3916SSepherosa Ziehau */ 891f7e3916SSepherosa Ziehau #define IGB_MIN_RXD 256 90e7c14703SSepherosa Ziehau #define IGB_DEFAULT_RXD 512 911f7e3916SSepherosa Ziehau #define IGB_MAX_RXD 4096 921f7e3916SSepherosa Ziehau 931f7e3916SSepherosa Ziehau /* 941f7e3916SSepherosa Ziehau * This parameter controls when the driver calls the routine to reclaim 951f7e3916SSepherosa Ziehau * transmit descriptors. Cleaning earlier seems a win. 961f7e3916SSepherosa Ziehau */ 971f7e3916SSepherosa Ziehau #define IGB_TX_CLEANUP_THRESHOLD(sc) ((sc)->num_tx_desc / 2) 981f7e3916SSepherosa Ziehau 991f7e3916SSepherosa Ziehau /* 1001f7e3916SSepherosa Ziehau * This parameter controls whether or not autonegotation is enabled. 1011f7e3916SSepherosa Ziehau * 0 - Disable autonegotiation 1021f7e3916SSepherosa Ziehau * 1 - Enable autonegotiation 1031f7e3916SSepherosa Ziehau */ 1041f7e3916SSepherosa Ziehau #define DO_AUTO_NEG 1 1051f7e3916SSepherosa Ziehau 1061f7e3916SSepherosa Ziehau /* 1071f7e3916SSepherosa Ziehau * This parameter control whether or not the driver will wait for 1081f7e3916SSepherosa Ziehau * autonegotiation to complete. 1091f7e3916SSepherosa Ziehau * 1 - Wait for autonegotiation to complete 1101f7e3916SSepherosa Ziehau * 0 - Don't wait for autonegotiation to complete 1111f7e3916SSepherosa Ziehau */ 1121f7e3916SSepherosa Ziehau #define WAIT_FOR_AUTO_NEG_DEFAULT 0 1131f7e3916SSepherosa Ziehau 1141f7e3916SSepherosa Ziehau /* Tunables -- End */ 1151f7e3916SSepherosa Ziehau 1161f7e3916SSepherosa Ziehau #define AUTONEG_ADV_DEFAULT (ADVERTISE_10_HALF | ADVERTISE_10_FULL | \ 1171f7e3916SSepherosa Ziehau ADVERTISE_100_HALF | ADVERTISE_100_FULL | \ 1181f7e3916SSepherosa Ziehau ADVERTISE_1000_FULL) 1191f7e3916SSepherosa Ziehau 1201f7e3916SSepherosa Ziehau #define AUTO_ALL_MODES 0 1211f7e3916SSepherosa Ziehau 1221f7e3916SSepherosa Ziehau /* PHY master/slave setting */ 1231f7e3916SSepherosa Ziehau #define IGB_MASTER_SLAVE e1000_ms_hw_default 1241f7e3916SSepherosa Ziehau 1251f7e3916SSepherosa Ziehau /* 1261f7e3916SSepherosa Ziehau * Micellaneous constants 1271f7e3916SSepherosa Ziehau */ 1281f7e3916SSepherosa Ziehau #define IGB_VENDOR_ID 0x8086 1291f7e3916SSepherosa Ziehau 1301f7e3916SSepherosa Ziehau #define IGB_JUMBO_PBA 0x00000028 1311f7e3916SSepherosa Ziehau #define IGB_DEFAULT_PBA 0x00000030 1321f7e3916SSepherosa Ziehau #define IGB_SMARTSPEED_DOWNSHIFT 3 1331f7e3916SSepherosa Ziehau #define IGB_SMARTSPEED_MAX 15 1341f7e3916SSepherosa Ziehau #define IGB_MAX_LOOP 10 1351f7e3916SSepherosa Ziehau 1361f7e3916SSepherosa Ziehau #define IGB_RX_PTHRESH (hw->mac.type <= e1000_82576 ? 16 : 8) 1371f7e3916SSepherosa Ziehau #define IGB_RX_HTHRESH 8 1381f7e3916SSepherosa Ziehau #define IGB_RX_WTHRESH 1 1391f7e3916SSepherosa Ziehau 1401f7e3916SSepherosa Ziehau #define IGB_TX_PTHRESH 8 1411f7e3916SSepherosa Ziehau #define IGB_TX_HTHRESH 1 142396b7048SSepherosa Ziehau #define IGB_TX_WTHRESH 16 1431f7e3916SSepherosa Ziehau 1441f7e3916SSepherosa Ziehau #define MAX_NUM_MULTICAST_ADDRESSES 128 1451f7e3916SSepherosa Ziehau #define IGB_FC_PAUSE_TIME 0x0680 1461f7e3916SSepherosa Ziehau 147c2d84054SSepherosa Ziehau #define IGB_INTR_RATE 6000 1489c0ecdccSSepherosa Ziehau #define IGB_MSIX_RX_RATE 6000 1499c0ecdccSSepherosa Ziehau #define IGB_MSIX_TX_RATE 4000 1501f7e3916SSepherosa Ziehau 1511f7e3916SSepherosa Ziehau /* 1521f7e3916SSepherosa Ziehau * TDBA/RDBA should be aligned on 16 byte boundary. But TDLEN/RDLEN should be 1531f7e3916SSepherosa Ziehau * multiple of 128 bytes. So we align TDBA/RDBA on 128 byte boundary. This will 1541f7e3916SSepherosa Ziehau * also optimize cache line size effect. H/W supports up to cache line size 128. 1551f7e3916SSepherosa Ziehau */ 1561f7e3916SSepherosa Ziehau #define IGB_DBA_ALIGN 128 1571f7e3916SSepherosa Ziehau 1581f7e3916SSepherosa Ziehau /* PCI Config defines */ 1591f7e3916SSepherosa Ziehau #define IGB_MSIX_BAR 3 1601f7e3916SSepherosa Ziehau 1611f7e3916SSepherosa Ziehau #define IGB_MAX_SCATTER 64 1621f7e3916SSepherosa Ziehau #define IGB_VFTA_SIZE 128 16323f6ffe4SSepherosa Ziehau #define IGB_TSO_SIZE (IP_MAXPACKET + \ 1641f7e3916SSepherosa Ziehau sizeof(struct ether_vlan_header)) 1651f7e3916SSepherosa Ziehau #define IGB_HDR_BUF 128 1661f7e3916SSepherosa Ziehau #define IGB_PKTTYPE_MASK 0x0000FFF0 1671f7e3916SSepherosa Ziehau 1681f7e3916SSepherosa Ziehau #define IGB_CSUM_FEATURES (CSUM_IP | CSUM_TCP | CSUM_UDP) 1691f7e3916SSepherosa Ziehau #define IGB_IPVHL_SIZE 1 /* sizeof(ip.ip_vhl) */ 1701f7e3916SSepherosa Ziehau #define IGB_TXCSUM_MINHL (ETHER_HDR_LEN + EVL_ENCAPLEN + \ 1711f7e3916SSepherosa Ziehau IGB_IPVHL_SIZE) 1721f7e3916SSepherosa Ziehau 173b6220144SSepherosa Ziehau /* One for TX csum offloading desc, the other 2 are reserved */ 174b6220144SSepherosa Ziehau #define IGB_TX_RESERVED 3 175b6220144SSepherosa Ziehau 176b6220144SSepherosa Ziehau /* Large enough for 64K TSO */ 17723f6ffe4SSepherosa Ziehau #define IGB_TX_SPARE 33 178b6220144SSepherosa Ziehau 179b6220144SSepherosa Ziehau #define IGB_TX_OACTIVE_MAX 64 180b6220144SSepherosa Ziehau 1817d235eb5SSepherosa Ziehau /* main + 16x RX + 16x TX */ 1827d235eb5SSepherosa Ziehau #define IGB_NSERIALIZE 33 1837d235eb5SSepherosa Ziehau 1848d6600daSSepherosa Ziehau #define IGB_NRSSRK 10 1858d6600daSSepherosa Ziehau #define IGB_RSSRK_SIZE 4 1868d6600daSSepherosa Ziehau #define IGB_RSSRK_VAL(key, i) (key[(i) * IGB_RSSRK_SIZE] | \ 1878d6600daSSepherosa Ziehau key[(i) * IGB_RSSRK_SIZE + 1] << 8 | \ 1888d6600daSSepherosa Ziehau key[(i) * IGB_RSSRK_SIZE + 2] << 16 | \ 1898d6600daSSepherosa Ziehau key[(i) * IGB_RSSRK_SIZE + 3] << 24) 1908d6600daSSepherosa Ziehau 1918d6600daSSepherosa Ziehau #define IGB_NRETA 32 1928d6600daSSepherosa Ziehau #define IGB_RETA_SIZE 4 1938d6600daSSepherosa Ziehau #define IGB_RETA_SHIFT 0 1948d6600daSSepherosa Ziehau #define IGB_RETA_SHIFT_82575 6 1958d6600daSSepherosa Ziehau 196d4beffa9SSepherosa Ziehau #define IGB_EITR_INTVL_MASK 0x7ffc 197d4beffa9SSepherosa Ziehau #define IGB_EITR_INTVL_SHIFT 2 198d4beffa9SSepherosa Ziehau 1991f7e3916SSepherosa Ziehau struct igb_softc; 2001f7e3916SSepherosa Ziehau 2011f7e3916SSepherosa Ziehau /* 2021f7e3916SSepherosa Ziehau * Bus dma information structure 2031f7e3916SSepherosa Ziehau */ 2041f7e3916SSepherosa Ziehau struct igb_dma { 2051f7e3916SSepherosa Ziehau bus_addr_t dma_paddr; 2061f7e3916SSepherosa Ziehau void *dma_vaddr; 2071f7e3916SSepherosa Ziehau bus_dma_tag_t dma_tag; 2081f7e3916SSepherosa Ziehau bus_dmamap_t dma_map; 2091f7e3916SSepherosa Ziehau }; 2101f7e3916SSepherosa Ziehau 2111f7e3916SSepherosa Ziehau /* 2121f7e3916SSepherosa Ziehau * Transmit ring: one per queue 2131f7e3916SSepherosa Ziehau */ 2141f7e3916SSepherosa Ziehau struct igb_tx_ring { 2157d235eb5SSepherosa Ziehau struct lwkt_serialize tx_serialize; 2161f7e3916SSepherosa Ziehau struct igb_softc *sc; 2171f7e3916SSepherosa Ziehau uint32_t me; 2181f7e3916SSepherosa Ziehau struct e1000_tx_desc *tx_base; 21991b8700aSSepherosa Ziehau int num_tx_desc; 2201f7e3916SSepherosa Ziehau uint32_t next_avail_desc; 2211f7e3916SSepherosa Ziehau uint32_t next_to_clean; 222b6220144SSepherosa Ziehau uint32_t *tx_hdr; 223b6220144SSepherosa Ziehau int tx_avail; 2241f7e3916SSepherosa Ziehau struct igb_tx_buf *tx_buf; 2251f7e3916SSepherosa Ziehau bus_dma_tag_t tx_tag; 226b6220144SSepherosa Ziehau int tx_nsegs; 227b6220144SSepherosa Ziehau int spare_desc; 228b6220144SSepherosa Ziehau int oact_lo_desc; 229b6220144SSepherosa Ziehau int oact_hi_desc; 230b6220144SSepherosa Ziehau int intr_nsegs; 231f6167a56SSepherosa Ziehau int tx_intr_bit; 232f6167a56SSepherosa Ziehau uint32_t tx_intr_mask; 2331f7e3916SSepherosa Ziehau 234791a0338SSepherosa Ziehau /* Soft stats */ 2351f7e3916SSepherosa Ziehau u_long no_desc_avail; 2361f7e3916SSepherosa Ziehau u_long tx_packets; 237791a0338SSepherosa Ziehau 238791a0338SSepherosa Ziehau struct igb_dma txdma; 239791a0338SSepherosa Ziehau bus_dma_tag_t tx_hdr_dtag; 240791a0338SSepherosa Ziehau bus_dmamap_t tx_hdr_dmap; 241791a0338SSepherosa Ziehau bus_addr_t tx_hdr_paddr; 242ff230ec8SSepherosa Ziehau } __cachealign; 2431f7e3916SSepherosa Ziehau 2441f7e3916SSepherosa Ziehau /* 2451f7e3916SSepherosa Ziehau * Receive ring: one per queue 2461f7e3916SSepherosa Ziehau */ 2471f7e3916SSepherosa Ziehau struct igb_rx_ring { 2487d235eb5SSepherosa Ziehau struct lwkt_serialize rx_serialize; 2491f7e3916SSepherosa Ziehau struct igb_softc *sc; 2501f7e3916SSepherosa Ziehau uint32_t me; 2511f7e3916SSepherosa Ziehau union e1000_adv_rx_desc *rx_base; 2521f7e3916SSepherosa Ziehau boolean_t discard; 25391b8700aSSepherosa Ziehau int num_rx_desc; 2541f7e3916SSepherosa Ziehau uint32_t next_to_check; 2551f7e3916SSepherosa Ziehau struct igb_rx_buf *rx_buf; 2561f7e3916SSepherosa Ziehau bus_dma_tag_t rx_tag; 2571f7e3916SSepherosa Ziehau bus_dmamap_t rx_sparemap; 258f6167a56SSepherosa Ziehau int rx_intr_bit; 259f6167a56SSepherosa Ziehau uint32_t rx_intr_mask; 2601f7e3916SSepherosa Ziehau 2611f7e3916SSepherosa Ziehau /* 2621f7e3916SSepherosa Ziehau * First/last mbuf pointers, for 2631f7e3916SSepherosa Ziehau * collecting multisegment RX packets. 2641f7e3916SSepherosa Ziehau */ 2651f7e3916SSepherosa Ziehau struct mbuf *fmp; 2661f7e3916SSepherosa Ziehau struct mbuf *lmp; 2671f7e3916SSepherosa Ziehau 2681f7e3916SSepherosa Ziehau /* Soft stats */ 2691f7e3916SSepherosa Ziehau u_long rx_packets; 270791a0338SSepherosa Ziehau 271791a0338SSepherosa Ziehau struct igb_dma rxdma; 272ff230ec8SSepherosa Ziehau } __cachealign; 2731f7e3916SSepherosa Ziehau 2749c0ecdccSSepherosa Ziehau struct igb_msix_data { 2759c0ecdccSSepherosa Ziehau struct lwkt_serialize *msix_serialize; 2769c0ecdccSSepherosa Ziehau struct lwkt_serialize msix_serialize0; 2779c0ecdccSSepherosa Ziehau struct igb_softc *msix_sc; 2789c0ecdccSSepherosa Ziehau uint32_t msix_mask; 2799c0ecdccSSepherosa Ziehau struct igb_rx_ring *msix_rx; 2809c0ecdccSSepherosa Ziehau struct igb_tx_ring *msix_tx; 2819c0ecdccSSepherosa Ziehau 2829c0ecdccSSepherosa Ziehau driver_intr_t *msix_func; 2839c0ecdccSSepherosa Ziehau void *msix_arg; 2849c0ecdccSSepherosa Ziehau 2859c0ecdccSSepherosa Ziehau int msix_cpuid; 2869c0ecdccSSepherosa Ziehau char msix_desc[32]; 2879c0ecdccSSepherosa Ziehau int msix_rid; 2889c0ecdccSSepherosa Ziehau struct resource *msix_res; 2899c0ecdccSSepherosa Ziehau void *msix_handle; 2909c0ecdccSSepherosa Ziehau u_int msix_vector; 2919c0ecdccSSepherosa Ziehau int msix_rate; 2929c0ecdccSSepherosa Ziehau char msix_rate_desc[32]; 293ff230ec8SSepherosa Ziehau } __cachealign; 2949c0ecdccSSepherosa Ziehau 2951f7e3916SSepherosa Ziehau struct igb_softc { 2961f7e3916SSepherosa Ziehau struct arpcom arpcom; 2971f7e3916SSepherosa Ziehau struct e1000_hw hw; 2981f7e3916SSepherosa Ziehau 2991f7e3916SSepherosa Ziehau struct e1000_osdep osdep; 3001f7e3916SSepherosa Ziehau device_t dev; 301f6167a56SSepherosa Ziehau uint32_t flags; 302f6167a56SSepherosa Ziehau #define IGB_FLAG_SHARED_INTR 0x1 303396b7048SSepherosa Ziehau #define IGB_FLAG_HAS_MGMT 0x2 30423f6ffe4SSepherosa Ziehau #define IGB_FLAG_TSO_IPLEN0 0x4 3051f7e3916SSepherosa Ziehau 3061f7e3916SSepherosa Ziehau bus_dma_tag_t parent_tag; 3071f7e3916SSepherosa Ziehau 3081f7e3916SSepherosa Ziehau int mem_rid; 3091f7e3916SSepherosa Ziehau struct resource *mem_res; 3101f7e3916SSepherosa Ziehau 3111f7e3916SSepherosa Ziehau struct ifmedia media; 3121f7e3916SSepherosa Ziehau struct callout timer; 313*7b61c9f2SSepherosa Ziehau int timer_cpuid; 3141f7e3916SSepherosa Ziehau 3151f7e3916SSepherosa Ziehau int intr_type; 3161f7e3916SSepherosa Ziehau int intr_rid; 3171f7e3916SSepherosa Ziehau struct resource *intr_res; 3181f7e3916SSepherosa Ziehau void *intr_tag; 3191f7e3916SSepherosa Ziehau 3201f7e3916SSepherosa Ziehau int if_flags; 3211f7e3916SSepherosa Ziehau int max_frame_size; 3221f7e3916SSepherosa Ziehau int pause_frames; 3231f7e3916SSepherosa Ziehau uint16_t vf_ifp; /* a VF interface */ 3241f7e3916SSepherosa Ziehau 3251f7e3916SSepherosa Ziehau /* Management and WOL features */ 3261f7e3916SSepherosa Ziehau int wol; 3271f7e3916SSepherosa Ziehau 3281f7e3916SSepherosa Ziehau /* Info about the interface */ 3291f7e3916SSepherosa Ziehau uint8_t link_active; 3301f7e3916SSepherosa Ziehau uint16_t link_speed; 3311f7e3916SSepherosa Ziehau uint16_t link_duplex; 3321f7e3916SSepherosa Ziehau uint32_t smartspeed; 3331f7e3916SSepherosa Ziehau uint32_t dma_coalesce; 3341f7e3916SSepherosa Ziehau 335396b7048SSepherosa Ziehau /* Multicast array pointer */ 336396b7048SSepherosa Ziehau uint8_t *mta; 337396b7048SSepherosa Ziehau 338d0f59cadSSepherosa Ziehau int rx_npoll_off; 339d0f59cadSSepherosa Ziehau int tx_npoll_off; 3407d235eb5SSepherosa Ziehau int serialize_cnt; 3417d235eb5SSepherosa Ziehau int tx_serialize; 3427d235eb5SSepherosa Ziehau int rx_serialize; 3437d235eb5SSepherosa Ziehau struct lwkt_serialize *serializes[IGB_NSERIALIZE]; 3447d235eb5SSepherosa Ziehau struct lwkt_serialize main_serialize; 3457d235eb5SSepherosa Ziehau 3461f7e3916SSepherosa Ziehau int intr_rate; 347f6167a56SSepherosa Ziehau uint32_t intr_mask; 3489c0ecdccSSepherosa Ziehau int sts_intr_bit; 3499c0ecdccSSepherosa Ziehau uint32_t sts_intr_mask; 3501f7e3916SSepherosa Ziehau 3511f7e3916SSepherosa Ziehau /* 3521f7e3916SSepherosa Ziehau * Transmit rings 3531f7e3916SSepherosa Ziehau */ 35427866bf1SSepherosa Ziehau int tx_ring_cnt; 3551f7e3916SSepherosa Ziehau struct igb_tx_ring *tx_rings; 3561f7e3916SSepherosa Ziehau 3571f7e3916SSepherosa Ziehau /* 3581f7e3916SSepherosa Ziehau * Receive rings 3591f7e3916SSepherosa Ziehau */ 3608d6600daSSepherosa Ziehau int rss_debug; 36127866bf1SSepherosa Ziehau int rx_ring_cnt; 3629c0ecdccSSepherosa Ziehau int rx_ring_msix; 363be922da6SSepherosa Ziehau int rx_ring_inuse; 3641f7e3916SSepherosa Ziehau struct igb_rx_ring *rx_rings; 3651f7e3916SSepherosa Ziehau 3661f7e3916SSepherosa Ziehau /* Misc stats maintained by the driver */ 3671f7e3916SSepherosa Ziehau u_long dropped_pkts; 3681f7e3916SSepherosa Ziehau u_long mbuf_defrag_failed; 3691f7e3916SSepherosa Ziehau u_long no_tx_dma_setup; 3701f7e3916SSepherosa Ziehau u_long watchdog_events; 3711f7e3916SSepherosa Ziehau u_long rx_overruns; 3721f7e3916SSepherosa Ziehau u_long device_control; 3731f7e3916SSepherosa Ziehau u_long rx_control; 3741f7e3916SSepherosa Ziehau u_long int_mask; 3751f7e3916SSepherosa Ziehau u_long eint_mask; 3761f7e3916SSepherosa Ziehau u_long packet_buf_alloc_rx; 3771f7e3916SSepherosa Ziehau u_long packet_buf_alloc_tx; 3781f7e3916SSepherosa Ziehau 3791f7e3916SSepherosa Ziehau /* sysctl tree glue */ 3801f7e3916SSepherosa Ziehau struct sysctl_ctx_list sysctl_ctx; 3811f7e3916SSepherosa Ziehau struct sysctl_oid *sysctl_tree; 3821f7e3916SSepherosa Ziehau 3831f7e3916SSepherosa Ziehau void *stats; 3849c0ecdccSSepherosa Ziehau 3859c0ecdccSSepherosa Ziehau int msix_tx_cpuid; 3869c0ecdccSSepherosa Ziehau int msix_mem_rid; 3879c0ecdccSSepherosa Ziehau struct resource *msix_mem_res; 3889c0ecdccSSepherosa Ziehau int msix_cnt; 3899c0ecdccSSepherosa Ziehau struct igb_msix_data *msix_data; 3901f7e3916SSepherosa Ziehau }; 3911f7e3916SSepherosa Ziehau 3928d6600daSSepherosa Ziehau #define IGB_ENABLE_HWRSS(sc) ((sc)->rx_ring_cnt > 1) 3938d6600daSSepherosa Ziehau 3941f7e3916SSepherosa Ziehau struct igb_tx_buf { 3951f7e3916SSepherosa Ziehau struct mbuf *m_head; 3961f7e3916SSepherosa Ziehau bus_dmamap_t map; /* bus_dma map for packet */ 3971f7e3916SSepherosa Ziehau }; 3981f7e3916SSepherosa Ziehau 3991f7e3916SSepherosa Ziehau struct igb_rx_buf { 4001f7e3916SSepherosa Ziehau struct mbuf *m_head; 4011f7e3916SSepherosa Ziehau bus_dmamap_t map; /* bus_dma map for packet */ 4021f7e3916SSepherosa Ziehau bus_addr_t paddr; 4031f7e3916SSepherosa Ziehau }; 4041f7e3916SSepherosa Ziehau 4051f7e3916SSepherosa Ziehau #define UPDATE_VF_REG(reg, last, cur) \ 4061f7e3916SSepherosa Ziehau { \ 4071f7e3916SSepherosa Ziehau uint32_t new = E1000_READ_REG(hw, reg); \ 4081f7e3916SSepherosa Ziehau if (new < last) \ 4091f7e3916SSepherosa Ziehau cur += 0x100000000LL; \ 4101f7e3916SSepherosa Ziehau last = new; \ 4111f7e3916SSepherosa Ziehau cur &= 0xFFFFFFFF00000000LL; \ 4121f7e3916SSepherosa Ziehau cur |= new; \ 4131f7e3916SSepherosa Ziehau } 4141f7e3916SSepherosa Ziehau 415b6220144SSepherosa Ziehau #define IGB_IS_OACTIVE(txr) ((txr)->tx_avail < (txr)->oact_lo_desc) 416b6220144SSepherosa Ziehau #define IGB_IS_NOT_OACTIVE(txr) ((txr)->tx_avail >= (txr)->oact_hi_desc) 417b6220144SSepherosa Ziehau 4181f7e3916SSepherosa Ziehau #endif /* _IF_IGB_H_ */ 419