openpam: Implement blacklist.
[dragonfly.git] / sys / dev / netif / igb / if_igb.h
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_ */