2 * Copyright (c) 2001-2011, Intel Corporation
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
15 * 3. Neither the name of the Intel Corporation nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
40 #define IGB_MAX_RING_82575 4
41 #define IGB_MAX_RING_I350 8
42 #define IGB_MAX_RING_82580 8
43 #define IGB_MAX_RING_82576 16
44 #define IGB_MIN_RING 1
45 #define IGB_MIN_RING_RSS 2
48 * Max TX/RX interrupt bits
50 #define IGB_MAX_TXRXINT_82575 4 /* XXX not used */
51 #define IGB_MAX_TXRXINT_I350 8
52 #define IGB_MAX_TXRXINT_82580 8
53 #define IGB_MAX_TXRXINT_82576 16
54 #define IGB_MIN_TXRXINT 2 /* XXX VF? */
59 #define IGB_MAX_IVAR_I350 4
60 #define IGB_MAX_IVAR_82580 4
61 #define IGB_MAX_IVAR_82576 8
62 #define IGB_MAX_IVAR_VF 1
65 * Default number of segments received before writing to RX related registers
67 #define IGB_DEF_RXWREG_NSEGS 32
70 * Default number of segments sent before writing to RX related registers
72 #define IGB_DEF_TXWREG_NSEGS 8
75 * IGB_TXD: Maximum number of Transmit Descriptors
77 * This value is the number of transmit descriptors allocated by the driver.
78 * Increasing this value allows the driver to queue more transmits. Each
79 * descriptor is 16 bytes.
80 * Since TDLEN should be multiple of 128bytes, the number of transmit
81 * desscriptors should meet the following condition.
82 * (num_tx_desc * sizeof(struct e1000_tx_desc)) % 128 == 0
84 #define IGB_MIN_TXD 256
85 #define IGB_DEFAULT_TXD 1024
86 #define IGB_MAX_TXD 4096
89 * IGB_RXD: Maximum number of Transmit Descriptors
91 * This value is the number of receive descriptors allocated by the driver.
92 * Increasing this value allows the driver to buffer more incoming packets.
93 * Each descriptor is 16 bytes. A receive buffer is also allocated for each
94 * descriptor. The maximum MTU size is 16110.
95 * Since TDLEN should be multiple of 128bytes, the number of transmit
96 * desscriptors should meet the following condition.
97 * (num_tx_desc * sizeof(struct e1000_tx_desc)) % 128 == 0
99 #define IGB_MIN_RXD 256
100 #define IGB_DEFAULT_RXD 512
101 #define IGB_MAX_RXD 4096
104 * This parameter controls when the driver calls the routine to reclaim
105 * transmit descriptors. Cleaning earlier seems a win.
107 #define IGB_TX_CLEANUP_THRESHOLD(sc) ((sc)->num_tx_desc / 2)
110 * This parameter controls whether or not autonegotation is enabled.
111 * 0 - Disable autonegotiation
112 * 1 - Enable autonegotiation
114 #define DO_AUTO_NEG 1
117 * This parameter control whether or not the driver will wait for
118 * autonegotiation to complete.
119 * 1 - Wait for autonegotiation to complete
120 * 0 - Don't wait for autonegotiation to complete
122 #define WAIT_FOR_AUTO_NEG_DEFAULT 0
124 /* Tunables -- End */
126 #define AUTONEG_ADV_DEFAULT (ADVERTISE_10_HALF | ADVERTISE_10_FULL | \
127 ADVERTISE_100_HALF | ADVERTISE_100_FULL | \
130 #define AUTO_ALL_MODES 0
132 /* PHY master/slave setting */
133 #define IGB_MASTER_SLAVE e1000_ms_hw_default
136 * Micellaneous constants
138 #define IGB_VENDOR_ID 0x8086
140 #define IGB_JUMBO_PBA 0x00000028
141 #define IGB_DEFAULT_PBA 0x00000030
142 #define IGB_SMARTSPEED_DOWNSHIFT 3
143 #define IGB_SMARTSPEED_MAX 15
144 #define IGB_MAX_LOOP 10
146 #define IGB_RX_PTHRESH (hw->mac.type <= e1000_82576 ? 16 : 8)
147 #define IGB_RX_HTHRESH 8
148 #define IGB_RX_WTHRESH 1
150 #define IGB_TX_PTHRESH 8
151 #define IGB_TX_HTHRESH 1
152 #define IGB_TX_WTHRESH 16
154 #define MAX_NUM_MULTICAST_ADDRESSES 128
155 #define IGB_FC_PAUSE_TIME 0x0680
157 #define IGB_INTR_RATE 6000
158 #define IGB_MSIX_RX_RATE 6000
159 #define IGB_MSIX_TX_RATE 4000
162 * TDBA/RDBA should be aligned on 16 byte boundary. But TDLEN/RDLEN should be
163 * multiple of 128 bytes. So we align TDBA/RDBA on 128 byte boundary. This will
164 * also optimize cache line size effect. H/W supports up to cache line size 128.
166 #define IGB_DBA_ALIGN 128
168 /* PCI Config defines */
169 #define IGB_MSIX_BAR 3
171 #define IGB_MAX_SCATTER 64
172 #define IGB_VFTA_SIZE 128
173 #define IGB_TSO_SIZE (IP_MAXPACKET + \
174 sizeof(struct ether_vlan_header))
175 #define IGB_HDR_BUF 128
176 #define IGB_PKTTYPE_MASK 0x0000FFF0
178 #define IGB_CSUM_FEATURES (CSUM_IP | CSUM_TCP | CSUM_UDP)
179 #define IGB_IPVHL_SIZE 1 /* sizeof(ip.ip_vhl) */
180 #define IGB_TXCSUM_MINHL (ETHER_HDR_LEN + EVL_ENCAPLEN + \
183 /* One for TX csum offloading desc, the other 2 are reserved */
184 #define IGB_TX_RESERVED 3
186 /* Large enough for 64K TSO */
187 #define IGB_TX_SPARE 33
189 #define IGB_TX_OACTIVE_MAX 64
191 /* main + 16x RX + 16x TX */
192 #define IGB_NSERIALIZE 33
194 #define IGB_NRSSRK 10
195 #define IGB_RSSRK_SIZE 4
196 #define IGB_RSSRK_VAL(key, i) (key[(i) * IGB_RSSRK_SIZE] | \
197 key[(i) * IGB_RSSRK_SIZE + 1] << 8 | \
198 key[(i) * IGB_RSSRK_SIZE + 2] << 16 | \
199 key[(i) * IGB_RSSRK_SIZE + 3] << 24)
202 #define IGB_RETA_SIZE 4
203 #define IGB_RETA_SHIFT 0
204 #define IGB_RETA_SHIFT_82575 6
206 #define IGB_EITR_INTVL_MASK 0x7ffc
207 #define IGB_EITR_INTVL_SHIFT 2
212 * Bus dma information structure
215 bus_addr_t dma_paddr;
217 bus_dma_tag_t dma_tag;
218 bus_dmamap_t dma_map;
222 * Transmit ring: one per queue
225 struct lwkt_serialize tx_serialize;
226 struct igb_softc *sc;
227 struct ifaltq_subque *ifsq;
229 struct e1000_tx_desc *tx_base;
231 uint32_t next_avail_desc;
232 uint32_t next_to_clean;
235 struct igb_tx_buf *tx_buf;
236 bus_dma_tag_t tx_tag;
244 uint32_t tx_intr_mask;
245 struct ifsubq_watchdog tx_watchdog;
248 u_long no_desc_avail;
251 struct igb_dma txdma;
252 bus_dma_tag_t tx_hdr_dtag;
253 bus_dmamap_t tx_hdr_dmap;
254 bus_addr_t tx_hdr_paddr;
259 * Receive ring: one per queue
262 struct lwkt_serialize rx_serialize;
263 struct igb_softc *sc;
265 union e1000_adv_rx_desc *rx_base;
268 uint32_t next_to_check;
269 struct igb_rx_buf *rx_buf;
270 bus_dma_tag_t rx_tag;
271 bus_dmamap_t rx_sparemap;
273 uint32_t rx_intr_mask;
276 * First/last mbuf pointers, for
277 * collecting multisegment RX packets.
286 struct igb_dma rxdma;
289 struct igb_msix_data {
290 struct lwkt_serialize *msix_serialize;
291 struct lwkt_serialize msix_serialize0;
292 struct igb_softc *msix_sc;
294 struct igb_rx_ring *msix_rx;
295 struct igb_tx_ring *msix_tx;
297 driver_intr_t *msix_func;
303 struct resource *msix_res;
307 char msix_rate_desc[32];
311 struct arpcom arpcom;
314 struct e1000_osdep osdep;
317 #define IGB_FLAG_SHARED_INTR 0x1
318 #define IGB_FLAG_HAS_MGMT 0x2
319 #define IGB_FLAG_TSO_IPLEN0 0x4
321 bus_dma_tag_t parent_tag;
324 struct resource *mem_res;
326 struct ifmedia media;
327 struct callout timer;
332 struct resource *intr_res;
338 uint16_t vf_ifp; /* a VF interface */
340 /* Management and WOL features */
343 /* Info about the interface */
346 uint16_t link_duplex;
348 uint32_t dma_coalesce;
350 /* Multicast array pointer */
358 struct lwkt_serialize *serializes[IGB_NSERIALIZE];
359 struct lwkt_serialize main_serialize;
364 uint32_t sts_intr_mask;
372 struct igb_tx_ring *tx_rings;
381 struct igb_rx_ring *rx_rings;
383 /* Misc stats maintained by the driver */
385 u_long mbuf_defrag_failed;
386 u_long no_tx_dma_setup;
387 u_long watchdog_events;
389 u_long device_control;
393 u_long packet_buf_alloc_rx;
394 u_long packet_buf_alloc_tx;
396 /* sysctl tree glue */
397 struct sysctl_ctx_list sysctl_ctx;
398 struct sysctl_oid *sysctl_tree;
403 struct resource *msix_mem_res;
405 struct igb_msix_data *msix_data;
408 #define IGB_ENABLE_HWRSS(sc) ((sc)->rx_ring_cnt > 1)
409 #define IGB_ENABLE_HWTSS(sc) ((sc)->tx_ring_cnt > 1)
413 bus_dmamap_t map; /* bus_dma map for packet */
418 bus_dmamap_t map; /* bus_dma map for packet */
422 #define UPDATE_VF_REG(reg, last, cur) \
424 uint32_t new = E1000_READ_REG(hw, reg); \
426 cur += 0x100000000LL; \
428 cur &= 0xFFFFFFFF00000000LL; \
432 #define IGB_IS_OACTIVE(txr) ((txr)->tx_avail < (txr)->oact_lo_desc)
433 #define IGB_IS_NOT_OACTIVE(txr) ((txr)->tx_avail >= (txr)->oact_hi_desc)
435 #endif /* _IF_IGB_H_ */