xref: /dragonfly/sys/dev/netif/igb/if_igb.h (revision 620b9679515f9db3801f83d855667df59c49a669)
1 /*
2  * Copyright (c) 2001-2013, Intel Corporation
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  *  1. Redistributions of source code must retain the above copyright notice,
9  *     this list of conditions and the following disclaimer.
10  *
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.
14  *
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.
18  *
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.
30  */
31 
32 #ifndef _IF_IGB_H_
33 #define _IF_IGB_H_
34 
35 /* Tunables */
36 
37 /*
38  * Max ring count
39  */
40 #define IGB_MAX_RING_I210     4
41 #define IGB_MAX_RING_I211     2
42 #define IGB_MAX_RING_I350     8
43 #define IGB_MAX_RING_I354     8
44 #define IGB_MAX_RING_82580    8
45 #define IGB_MAX_RING_82576    16
46 #define IGB_MAX_RING_82575    4
47 #define IGB_MIN_RING                    1
48 #define IGB_MIN_RING_RSS      2
49 
50 /*
51  * Max TX/RX interrupt bits
52  */
53 #define IGB_MAX_TXRXINT_I210  4
54 #define IGB_MAX_TXRXINT_I211  4
55 #define IGB_MAX_TXRXINT_I350  8
56 #define IGB_MAX_TXRXINT_I354  8
57 #define IGB_MAX_TXRXINT_82580 8
58 #define IGB_MAX_TXRXINT_82576 16
59 #define IGB_MAX_TXRXINT_82575 4         /* XXX not used */
60 #define IGB_MIN_TXRXINT                 2         /* XXX VF? */
61 
62 /*
63  * Max IVAR count
64  */
65 #define IGB_MAX_IVAR_I210     4
66 #define IGB_MAX_IVAR_I211     4
67 #define IGB_MAX_IVAR_I350     4
68 #define IGB_MAX_IVAR_I354     4
69 #define IGB_MAX_IVAR_82580    4
70 #define IGB_MAX_IVAR_82576    8
71 #define IGB_MAX_IVAR_VF                 1
72 
73 /*
74  * Default number of segments received before writing to RX related registers
75  */
76 #define IGB_DEF_RXWREG_NSEGS  32
77 
78 /*
79  * Default number of segments sent before writing to TX related registers
80  */
81 #define IGB_DEF_TXWREG_NSEGS  8
82 
83 /*
84  * IGB_TXD: Maximum number of Transmit Descriptors
85  *
86  *   This value is the number of transmit descriptors allocated by the driver.
87  *   Increasing this value allows the driver to queue more transmits. Each
88  *   descriptor is 16 bytes.
89  *   Since TDLEN should be multiple of 128bytes, the number of transmit
90  *   desscriptors should meet the following condition.
91  *      (num_tx_desc * sizeof(struct e1000_tx_desc)) % 128 == 0
92  */
93 #define IGB_MIN_TXD           256
94 #define IGB_DEFAULT_TXD                 1024
95 #define IGB_MAX_TXD           4096
96 
97 /*
98  * IGB_RXD: Maximum number of Transmit Descriptors
99  *
100  *   This value is the number of receive descriptors allocated by the driver.
101  *   Increasing this value allows the driver to buffer more incoming packets.
102  *   Each descriptor is 16 bytes.  A receive buffer is also allocated for each
103  *   descriptor. The maximum MTU size is 16110.
104  *   Since TDLEN should be multiple of 128bytes, the number of transmit
105  *   desscriptors should meet the following condition.
106  *      (num_tx_desc * sizeof(struct e1000_tx_desc)) % 128 == 0
107  */
108 #define IGB_MIN_RXD           256
109 #define IGB_DEFAULT_RXD                 512
110 #define IGB_MAX_RXD           4096
111 
112 /*
113  * This parameter controls when the driver calls the routine to reclaim
114  * transmit descriptors. Cleaning earlier seems a win.
115  */
116 #define IGB_TX_CLEANUP_THRESHOLD(sc)    ((sc)->num_tx_desc / 2)
117 
118 /*
119  * This parameter controls whether or not autonegotation is enabled.
120  *              0 - Disable autonegotiation
121  *              1 - Enable  autonegotiation
122  */
123 #define DO_AUTO_NEG           1
124 
125 /*
126  * This parameter control whether or not the driver will wait for
127  * autonegotiation to complete.
128  *              1 - Wait for autonegotiation to complete
129  *              0 - Don't wait for autonegotiation to complete
130  */
131 #define WAIT_FOR_AUTO_NEG_DEFAULT       0
132 
133 /* Tunables -- End */
134 
135 #define AUTONEG_ADV_DEFAULT   (ADVERTISE_10_HALF | ADVERTISE_10_FULL | \
136                                          ADVERTISE_100_HALF | ADVERTISE_100_FULL | \
137                                          ADVERTISE_1000_FULL)
138 
139 #define AUTO_ALL_MODES                            0
140 
141 /* PHY master/slave setting */
142 #define IGB_MASTER_SLAVE                e1000_ms_hw_default
143 
144 /*
145  * Micellaneous constants
146  */
147 #define IGB_VENDOR_ID                             0x8086
148 
149 #define IGB_JUMBO_PBA                             0x00000028
150 #define IGB_DEFAULT_PBA                           0x00000030
151 #define IGB_SMARTSPEED_DOWNSHIFT        3
152 #define IGB_SMARTSPEED_MAX              15
153 #define IGB_MAX_LOOP                              10
154 
155 #define IGB_RX_PTHRESH                            ((hw->mac.type == e1000_i354) ? 12 : \
156                                                     ((hw->mac.type <= e1000_82576) ? 16 : 8))
157 #define IGB_RX_HTHRESH                            8
158 #define IGB_RX_WTHRESH                            ((hw->mac.type == e1000_82576 && \
159                                                     sc->msix_mem_res) ? 1 : 4)
160 
161 #define IGB_TX_PTHRESH                            ((hw->mac.type == e1000_i354) ? 20 : 8)
162 #define IGB_TX_HTHRESH                            1
163 #define IGB_TX_WTHRESH                            16
164 
165 #define MAX_NUM_MULTICAST_ADDRESSES     128
166 #define IGB_FC_PAUSE_TIME               0x0680
167 
168 #define IGB_INTR_RATE                             6000
169 #define IGB_MSIX_RX_RATE                6000
170 #define IGB_MSIX_TX_RATE                4000
171 
172 /*
173  * TDBA/RDBA should be aligned on 16 byte boundary. But TDLEN/RDLEN should be
174  * multiple of 128 bytes. So we align TDBA/RDBA on 128 byte boundary. This will
175  * also optimize cache line size effect. H/W supports up to cache line size 128.
176  */
177 #define IGB_DBA_ALIGN                             128
178 
179 /* PCI Config defines */
180 #define IGB_MSIX_BAR                              3
181 #define IGB_MSIX_BAR_ALT                4
182 
183 #define IGB_VFTA_SIZE                             128
184 #define IGB_TSO_SIZE                              (IP_MAXPACKET + \
185                                                    sizeof(struct ether_vlan_header))
186 #define IGB_HDR_BUF                     128
187 #define IGB_TXPBSIZE                              20408
188 #define IGB_PKTTYPE_MASK                0x0000FFF0
189 
190 #define IGB_CSUM_FEATURES               (CSUM_IP | CSUM_TCP | CSUM_UDP)
191 
192 /* One for TX csum offloading desc, the other 2 are reserved */
193 #define IGB_TX_RESERVED                           3
194 
195 /* Large enough for 64K TSO */
196 #define IGB_MAX_SCATTER                           33
197 
198 #define IGB_NRSSRK                      10
199 #define IGB_RSSRK_SIZE                            4
200 #define IGB_RSSRK_VAL(key, i)           (key[(i) * IGB_RSSRK_SIZE] | \
201                                                    key[(i) * IGB_RSSRK_SIZE + 1] << 8 | \
202                                                    key[(i) * IGB_RSSRK_SIZE + 2] << 16 | \
203                                                    key[(i) * IGB_RSSRK_SIZE + 3] << 24)
204 
205 #define IGB_NRETA                       32
206 #define IGB_RETA_SIZE                             4
207 #define IGB_RETA_SHIFT                            0
208 #define IGB_RETA_SHIFT_82575            6
209 
210 #define IGB_RDRTABLE_SIZE               (IGB_NRETA * IGB_RETA_SIZE)
211 
212 #define IGB_EITR_INTVL_MASK             0x7ffc
213 #define IGB_EITR_INTVL_SHIFT            2
214 
215 /* Disable DMA Coalesce Flush */
216 #define IGB_DMCTLX_DCFLUSH_DIS                    0x80000000
217 
218 struct igb_softc;
219 
220 /*
221  * Bus dma information structure
222  */
223 struct igb_dma {
224           bus_addr_t                    dma_paddr;
225           void                          *dma_vaddr;
226           bus_dma_tag_t                 dma_tag;
227           bus_dmamap_t                  dma_map;
228 };
229 
230 /*
231  * Transmit ring: one per queue
232  */
233 struct igb_tx_ring {
234           struct lwkt_serialize         tx_serialize;
235           struct igb_softc    *sc;
236           struct ifaltq_subque          *ifsq;
237           uint32_t            me;
238           int16_t                       tx_running;
239 #define IGB_TX_RUNNING                  100
240 #define IGB_TX_RUNNING_DEC    25
241           uint16_t            tx_flags;
242 #define IGB_TXFLAG_TSO_IPLEN0 0x1
243 #define IGB_TXFLAG_ENABLED    0x2
244           struct e1000_tx_desc          *tx_base;
245           int                           num_tx_desc;
246           uint32_t            next_avail_desc;
247           uint32_t            next_to_clean;
248           int                           tx_avail;
249           int                           tx_nmbuf;
250           uint32_t            *tx_hdr;
251           struct igb_tx_buf   *tx_buf;
252           bus_dma_tag_t                 tx_tag;
253           int                           tx_nsegs;
254           int                           intr_nsegs;
255           int                           wreg_nsegs;
256           int                           tx_intr_vec;
257           uint32_t            tx_intr_mask;
258           struct ifsubq_watchdog        tx_watchdog;
259           struct callout                tx_gc_timer;
260 
261           /* Soft stats */
262           u_long                        tx_packets;
263           u_long                        tx_gc;
264 
265           struct igb_dma                txdma;
266           bus_dma_tag_t                 tx_hdr_dtag;
267           bus_dmamap_t                  tx_hdr_dmap;
268           bus_addr_t                    tx_hdr_paddr;
269           int                           tx_intr_cpuid;
270 } __cachealign;
271 
272 /*
273  * Receive ring: one per queue
274  */
275 struct igb_rx_ring {
276           struct lwkt_serialize         rx_serialize;
277           struct igb_softc    *sc;
278           uint32_t            me;
279           union e1000_adv_rx_desc       *rx_base;
280           boolean_t           discard;
281           int                           num_rx_desc;
282           uint32_t            next_to_check;
283           struct igb_rx_buf   *rx_buf;
284           bus_dma_tag_t                 rx_tag;
285           bus_dmamap_t                  rx_sparemap;
286           int                           rx_intr_vec;
287           uint32_t            rx_intr_mask;
288 
289           /*
290            * First/last mbuf pointers, for
291            * collecting multisegment RX packets.
292            */
293           struct mbuf                   *fmp;
294           struct mbuf                   *lmp;
295           int                           wreg_nsegs;
296 
297           struct igb_tx_ring  *rx_txr;  /* piggybacked TX ring */
298 
299           /* Soft stats */
300           u_long                        rx_packets;
301 
302           struct igb_dma                rxdma;
303 } __cachealign;
304 
305 struct igb_intr_data {
306           struct lwkt_serialize         *intr_serialize;
307           driver_intr_t                 *intr_func;
308           void                          *intr_hand;
309           struct resource               *intr_res;
310           void                          *intr_funcarg;
311           int                           intr_rid;
312           int                           intr_cpuid;
313           int                           intr_rate;
314           int                           intr_use;
315 #define IGB_INTR_USE_RXTX     0
316 #define IGB_INTR_USE_STATUS   1
317 #define IGB_INTR_USE_RX                 2
318 #define IGB_INTR_USE_TX                 3
319           const char                    *intr_desc;
320           char                          intr_desc0[64];
321 };
322 
323 struct igb_softc {
324           struct arpcom                 arpcom;
325           struct e1000_hw               hw;
326 
327           struct e1000_osdep  osdep;
328           device_t            dev;
329           uint32_t            flags;
330 #define IGB_FLAG_SHARED_INTR  0x1
331 #define IGB_FLAG_HAS_MGMT     0x2
332 
333           bus_dma_tag_t                 parent_tag;
334 
335           int                           mem_rid;
336           struct resource     *mem_res;
337 
338           struct ifmedia                media;
339           struct callout                timer;
340           int                           timer_cpuid;
341 
342           int                           if_flags;
343           int                           max_frame_size;
344           int                           pause_frames;
345           uint16_t            vf_ifp;   /* a VF interface */
346 
347           /* Management and WOL features */
348           int                           wol;
349 
350           /* Info about the interface */
351           uint8_t                       link_active;
352           uint16_t            link_speed;
353           uint16_t            link_duplex;
354           uint32_t            smartspeed;
355           uint32_t            dma_coalesce;
356 
357           /* Multicast array pointer */
358           uint8_t                       *mta;
359 
360           int                           serialize_cnt;
361           struct lwkt_serialize         **serializes;
362           struct lwkt_serialize         main_serialize;
363 
364           int                           intr_type;
365           uint32_t            intr_mask;
366           int                           sts_msix_vec;
367           uint32_t            sts_intr_mask;
368 
369           /*
370            * Transmit rings
371            */
372           int                           tx_ring_cnt;
373           int                           tx_ring_msix;
374           int                           tx_ring_inuse;
375           struct igb_tx_ring  *tx_rings;
376 
377           /*
378            * Receive rings
379            */
380           int                           rss_debug;
381           int                           rx_ring_cnt;
382           int                           rx_ring_msix;
383           int                           rx_ring_inuse;
384           struct igb_rx_ring  *rx_rings;
385 
386           int                           ifm_flowctrl;
387 
388           /* Misc stats maintained by the driver */
389           u_long                        dropped_pkts;
390           u_long                        mbuf_defrag_failed;
391           u_long                        no_tx_dma_setup;
392           u_long                        watchdog_events;
393           u_long                        rx_overruns;
394           u_long                        device_control;
395           u_long                        rx_control;
396           u_long                        int_mask;
397           u_long                        eint_mask;
398           u_long                        packet_buf_alloc_rx;
399           u_long                        packet_buf_alloc_tx;
400 
401           void                          *stats;
402 
403           int                           msix_mem_rid;
404           struct resource     *msix_mem_res;
405 
406           int                           intr_cnt;
407           struct igb_intr_data          *intr_data;
408 
409           struct if_ringmap   *rx_rmap;
410           struct if_ringmap   *rx_rmap_intr;
411           struct if_ringmap   *tx_rmap;
412           struct if_ringmap   *tx_rmap_intr;
413 
414           int                           rdr_table[IGB_RDRTABLE_SIZE];
415 };
416 
417 #define IGB_ENABLE_HWRSS(sc)  ((sc)->rx_ring_cnt > 1)
418 #define IGB_ENABLE_HWTSS(sc)  ((sc)->tx_ring_cnt > 1)
419 
420 struct igb_tx_buf {
421           struct mbuf         *m_head;
422           bus_dmamap_t        map;                /* bus_dma map for packet */
423 };
424 
425 struct igb_rx_buf {
426           struct mbuf         *m_head;
427           bus_dmamap_t        map;      /* bus_dma map for packet */
428           bus_addr_t          paddr;
429 };
430 
431 #define UPDATE_VF_REG(reg, last, cur)             \
432 {                                                           \
433           uint32_t new = E1000_READ_REG(hw, reg); \
434           if (new < last)                                   \
435                     cur += 0x100000000LL;                   \
436           last = new;                                       \
437           cur &= 0xFFFFFFFF00000000LL;            \
438           cur |= new;                                       \
439 }
440 
441 #define IGB_I210_LINK_DELAY   1000      /* unit: ms */
442 
443 #endif /* _IF_IGB_H_ */
444