fe9f7e8a2f8efc580037fe16f2645c0af95d41e2
[dragonfly.git] / sys / dev / netif / ixgbe / ixgbe.h
1 /******************************************************************************
2
3   Copyright (c) 2001-2012, Intel Corporation 
4   All rights reserved.
5   
6   Redistribution and use in source and binary forms, with or without 
7   modification, are permitted provided that the following conditions are met:
8   
9    1. Redistributions of source code must retain the above copyright notice, 
10       this list of conditions and the following disclaimer.
11   
12    2. Redistributions in binary form must reproduce the above copyright 
13       notice, this list of conditions and the following disclaimer in the 
14       documentation and/or other materials provided with the distribution.
15   
16    3. Neither the name of the Intel Corporation nor the names of its 
17       contributors may be used to endorse or promote products derived from 
18       this software without specific prior written permission.
19   
20   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
22   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
23   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
24   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
25   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
26   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
27   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
28   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
29   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   POSSIBILITY OF SUCH DAMAGE.
31
32 ******************************************************************************/
33 /*$FreeBSD: src/sys/dev/ixgbe/ixgbe.h,v 1.26 2012/04/23 22:05:09 bz Exp $*/
34
35
36 #ifndef _IXGBE_H_
37 #define _IXGBE_H_
38
39
40 #include <sys/param.h>
41 #include <sys/systm.h>
42 #include <sys/mbuf.h>
43 #include <sys/protosw.h>
44 #include <sys/socket.h>
45 #include <sys/malloc.h>
46 #include <sys/kernel.h>
47 #include <sys/module.h>
48 #include <sys/sockio.h>
49
50 #include <net/if.h>
51 #include <net/if_arp.h>
52 #include <net/ifq_var.h>
53 #include <net/bpf.h>
54 #include <net/ethernet.h>
55 #include <net/if_dl.h>
56 #include <net/if_media.h>
57
58 #include <net/bpf.h>
59 #include <net/if_types.h>
60 #include <net/vlan/if_vlan_var.h>
61 #include <net/vlan/if_vlan_ether.h>
62
63 #include <netinet/in_systm.h>
64 #include <netinet/in.h>
65 #include <netinet/if_ether.h>
66 #include <netinet/ip.h>
67 #include <netinet/ip6.h>
68 #include <netinet/tcp.h>
69 #ifdef NET_LRO
70 #include <netinet/tcp_lro.h>    /* XXX: IPv4 only */
71 #endif
72 #include <netinet/udp.h>
73
74 #include <sys/in_cksum.h>
75
76 #include <sys/bus.h>
77 #include <sys/rman.h>
78 #include <sys/resource.h>
79 #include <vm/vm.h>
80 #include <vm/pmap.h>
81 #include <machine/clock.h>
82 #include <bus/pci/pcivar.h>
83 #include <bus/pci/pcireg.h>
84 #include <sys/proc.h>
85 #include <sys/sysctl.h>
86 #include <sys/endian.h>
87 #include <sys/taskqueue.h>
88 #include <machine/smp.h>
89
90 #include <sys/spinlock.h>
91 #include <sys/spinlock2.h>
92
93 #ifdef IXGBE_IEEE1588
94 #include <sys/ieee1588.h>
95 #endif
96
97 #include "ixgbe_api.h"
98 #include "ixgbe_defines.h"
99
100 /* Tunables */
101
102 /*
103  * TxDescriptors Valid Range: 64-4096 Default Value: 256 This value is the
104  * number of transmit descriptors allocated by the driver. Increasing this
105  * value allows the driver to queue more transmits. Each descriptor is 16
106  * bytes. Performance tests have show the 2K value to be optimal for top
107  * performance.
108  */
109 #define DEFAULT_TXD     1024
110 #define PERFORM_TXD     2048
111 #define MAX_TXD         4096
112 #define MIN_TXD         64
113
114 /*
115  * RxDescriptors Valid Range: 64-4096 Default Value: 256 This value is the
116  * number of receive descriptors allocated for each RX queue. Increasing this
117  * value allows the driver to buffer more incoming packets. Each descriptor
118  * is 16 bytes.  A receive buffer is also allocated for each descriptor. 
119  * 
120  * Note: with 8 rings and a dual port card, it is possible to bump up 
121  *      against the system mbuf pool limit, you can tune nmbclusters
122  *      to adjust for this.
123  */
124 #define DEFAULT_RXD     1024
125 #define PERFORM_RXD     2048
126 #define MAX_RXD         4096
127 #define MIN_RXD         64
128
129 /* Alignment for rings */
130 #define DBA_ALIGN       128
131
132 /*
133  * This parameter controls the maximum no of times the driver will loop in
134  * the isr. Minimum Value = 1
135  */
136 #define MAX_LOOP        10
137
138 /*
139  * This is the max watchdog interval, ie. the time that can
140  * pass between any two TX clean operations, such only happening
141  * when the TX hardware is functioning.
142  */
143 #define IXGBE_WATCHDOG                   (10 * hz)
144
145 /*
146  * This parameters control when the driver calls the routine to reclaim
147  * transmit descriptors.
148  */
149 #define IXGBE_TX_CLEANUP_THRESHOLD      (adapter->num_tx_desc / 8)
150 #define IXGBE_TX_OP_THRESHOLD           (adapter->num_tx_desc / 32)
151
152 #define IXGBE_MAX_FRAME_SIZE    0x3F00
153
154 /* Flow control constants */
155 #define IXGBE_FC_PAUSE          0xFFFF
156 #define IXGBE_FC_HI             0x20000
157 #define IXGBE_FC_LO             0x10000
158
159 /* Keep older OS drivers building... */
160 #if !defined(SYSCTL_ADD_UQUAD)
161 #define SYSCTL_ADD_UQUAD SYSCTL_ADD_QUAD
162 #endif
163
164 /* Defines for printing debug information */
165 #define DEBUG_INIT  0
166 #define DEBUG_IOCTL 0
167 #define DEBUG_HW    0
168
169 #define INIT_DEBUGOUT(S)            if (DEBUG_INIT)  kprintf(S "\n")
170 #define INIT_DEBUGOUT1(S, A)        if (DEBUG_INIT)  kprintf(S "\n", A)
171 #define INIT_DEBUGOUT2(S, A, B)     if (DEBUG_INIT)  kprintf(S "\n", A, B)
172 #define IOCTL_DEBUGOUT(S)           if (DEBUG_IOCTL) kprintf(S "\n")
173 #define IOCTL_DEBUGOUT1(S, A)       if (DEBUG_IOCTL) kprintf(S "\n", A)
174 #define IOCTL_DEBUGOUT2(S, A, B)    if (DEBUG_IOCTL) kprintf(S "\n", A, B)
175 #define HW_DEBUGOUT(S)              if (DEBUG_HW) kprintf(S "\n")
176 #define HW_DEBUGOUT1(S, A)          if (DEBUG_HW) kprintf(S "\n", A)
177 #define HW_DEBUGOUT2(S, A, B)       if (DEBUG_HW) kprintf(S "\n", A, B)
178
179 #define MAX_NUM_MULTICAST_ADDRESSES     128
180 #define IXGBE_82598_SCATTER             100
181 #define IXGBE_82599_SCATTER             32
182 #define MSIX_82598_BAR                  3
183 #define MSIX_82599_BAR                  4
184 #define IXGBE_TSO_SIZE                  262140
185 #define IXGBE_TX_BUFFER_SIZE            ((u32) 1514)
186 #define IXGBE_RX_HDR                    128
187 #define IXGBE_VFTA_SIZE                 128
188 #define IXGBE_BR_SIZE                   4096
189 #define IXGBE_QUEUE_MIN_FREE            32
190 #define IXGBE_QUEUE_IDLE                1
191 #define IXGBE_QUEUE_WORKING             2
192 #define IXGBE_QUEUE_HUNG                4
193 #define IXGBE_QUEUE_DEPLETED            8
194
195 /* Offload bits in mbuf flag */
196 #define CSUM_OFFLOAD            (CSUM_IP|CSUM_TCP|CSUM_UDP)
197
198 /* One for TX csum offloading desc, the other 2 are reserved */
199 #define IXGBE_TX_RESERVED               3
200
201 /*
202  * Interrupt Moderation parameters 
203  */
204 #define IXGBE_LOW_LATENCY       128
205 #define IXGBE_AVE_LATENCY       400
206 #define IXGBE_BULK_LATENCY      1200
207 #define IXGBE_LINK_ITR          2000
208
209 #define IXGBE_INTR_RATE         8000
210 #define IXGBE_EITR_INTVL_MASK   0x7ffc
211 #define IXGBE_EITR_INTVL_SHIFT  2
212
213 /*
214  *****************************************************************************
215  * vendor_info_array
216  * 
217  * This array contains the list of Subvendor/Subdevice IDs on which the driver
218  * should load.
219  * 
220  *****************************************************************************
221  */
222 typedef struct _ixgbe_vendor_info_t {
223         unsigned int    vendor_id;
224         unsigned int    device_id;
225         unsigned int    subvendor_id;
226         unsigned int    subdevice_id;
227         unsigned int    index;
228 } ixgbe_vendor_info_t;
229
230
231 struct ixgbe_tx_buf {
232         u32             eop_index;
233         struct mbuf     *m_head;
234         bus_dmamap_t    map;
235 };
236
237 struct ixgbe_rx_buf {
238         struct mbuf     *m_head;
239         struct mbuf     *m_pack;
240         struct mbuf     *fmp;
241         bus_dmamap_t    hmap;
242         bus_dmamap_t    pmap;
243 };
244
245 /*
246  * Bus dma allocation structure used by ixgbe_dma_malloc and ixgbe_dma_free.
247  */
248 struct ixgbe_dma_alloc {
249         bus_addr_t              dma_paddr;
250         caddr_t                 dma_vaddr;
251         bus_dma_tag_t           dma_tag;
252         bus_dmamap_t            dma_map;
253         bus_dma_segment_t       dma_seg;
254         bus_size_t              dma_size;
255         int                     dma_nseg;
256 };
257
258 /*
259 ** Driver queue struct: this is the interrupt container
260 **  for the associated tx and rx ring.
261 */
262 struct ix_queue {
263         struct adapter          *adapter;
264         u32                     msix;           /* This queue's MSIX vector */
265         u32                     eims;           /* This queue's EIMS bit */
266         u32                     eitr_setting;
267         struct resource         *res;
268         void                    *tag;
269         struct tx_ring          *txr;
270         struct rx_ring          *rxr;
271         u64                     irqs;
272         struct lwkt_serialize   serializer;
273 };
274
275 /*
276  * The transmit ring, one per queue
277  */
278 struct tx_ring {
279         struct adapter          *adapter;
280         struct lwkt_serialize   tx_serialize;
281         u32                     me;
282         int                     queue_status;
283         int                     watchdog_time;
284         union ixgbe_adv_tx_desc *tx_base;
285         struct ixgbe_dma_alloc  txdma;
286         u32                     next_avail_desc;
287         u32                     next_to_clean;
288         struct ixgbe_tx_buf     *tx_buffers;
289         volatile u16            tx_avail;
290         u32                     txd_cmd;
291         bus_dma_tag_t           txtag;
292         char                    lock_name[16];
293 #ifdef IFNET_BUF_RING
294         struct buf_ring         *br;
295 #endif
296 #ifdef IXGBE_FDIR
297         u16                     atr_sample;
298         u16                     atr_count;
299 #endif
300         u32                     bytes;  /* used for AIM */
301         u32                     packets;
302         /* Soft Stats */
303         u64                     no_desc_avail;
304         u64                     total_packets;
305 };
306
307
308 /*
309  * The Receive ring, one per rx queue
310  */
311 struct rx_ring {
312         struct adapter          *adapter;
313         struct lock             rx_lock;
314         u32                     me;
315         union ixgbe_adv_rx_desc *rx_base;
316         struct ixgbe_dma_alloc  rxdma;
317 #ifdef NET_LRO
318         struct lro_ctrl         lro;
319 #endif
320         bool                    lro_enabled;
321         bool                    hdr_split;
322         bool                    hw_rsc;
323         bool                    discard;
324         bool                    vtag_strip;
325         u32                     next_to_refresh;
326         u32                     next_to_check;
327         char                    lock_name[16];
328         struct ixgbe_rx_buf     *rx_buffers;
329         bus_dma_tag_t           htag;
330         bus_dma_tag_t           ptag;
331
332         u32                     bytes; /* Used for AIM calc */
333         u32                     packets;
334
335         /* Soft stats */
336         u64                     rx_irq;
337         u64                     rx_split_packets;
338         u64                     rx_packets;
339         u64                     rx_bytes;
340         u64                     rx_discarded;
341         u64                     rsc_num;
342 #ifdef IXGBE_FDIR
343         u64                     flm;
344 #endif
345 };
346
347 /* Our adapter structure */
348 struct adapter {
349         struct ifnet            *ifp;
350         struct ixgbe_hw         hw;
351
352         struct ixgbe_osdep      osdep;
353         struct device           *dev;
354
355         struct resource         *pci_mem;
356         struct resource         *msix_mem;
357
358         /*
359          * Interrupt resources: this set is
360          * either used for legacy, or for Link
361          * when doing MSIX
362          */
363         void                    *tag;
364         struct resource         *res;
365         int                     intr_type;
366
367         struct ifmedia          media;
368         struct callout          timer;
369         int                     msix;
370         int                     if_flags;
371
372         struct lock             core_lock;
373
374         eventhandler_tag        vlan_attach;
375         eventhandler_tag        vlan_detach;
376
377         u16                     num_vlans;
378         u16                     num_queues;
379
380         /*
381         ** Shadow VFTA table, this is needed because
382         ** the real vlan filter table gets cleared during
383         ** a soft reset and the driver needs to be able
384         ** to repopulate it.
385         */
386         u32                     shadow_vfta[IXGBE_VFTA_SIZE];
387
388         /* Info about the interface */
389         u32                     optics;
390         u32                     fc; /* local flow ctrl setting */
391         int                     advertise;  /* link speeds */
392         bool                    link_active;
393         u16                     max_frame_size;
394         u16                     num_segs;
395         u32                     link_speed;
396         bool                    link_up;
397         u32                     linkvec;
398
399         /* Mbuf cluster size */
400         u32                     rx_mbuf_sz;
401
402         /* Support for pluggable optics */
403         bool                    sfp_probe;
404         struct task             link_task;  /* Link tasklet */
405         struct task             mod_task;   /* SFP tasklet */
406         struct task             msf_task;   /* Multispeed Fiber */
407 #ifdef IXGBE_FDIR
408         int                     fdir_reinit;
409         struct task             fdir_task;
410 #endif
411         struct taskqueue        *tq;
412
413         /*
414         ** Queues: 
415         **   This is the irq holder, it has
416         **   and RX/TX pair or rings associated
417         **   with it.
418         */
419         struct ix_queue         *queues;
420
421         /*
422          * Transmit rings:
423          *      Allocated at run time, an array of rings.
424          */
425         struct tx_ring          *tx_rings;
426         int                     num_tx_desc;
427
428         /*
429          * Receive rings:
430          *      Allocated at run time, an array of rings.
431          */
432         struct rx_ring          *rx_rings;
433         int                     num_rx_desc;
434         u64                     que_mask;
435         u32                     rx_process_limit;
436
437         /* Multicast array memory */
438         u8                      *mta;
439
440         int                     intr_rate;
441
442         /* Misc stats maintained by the driver */
443         unsigned long           dropped_pkts;
444         unsigned long           mbuf_defrag_failed;
445         unsigned long           mbuf_header_failed;
446         unsigned long           mbuf_packet_failed;
447         unsigned long           no_tx_map_avail;
448         unsigned long           no_tx_dma_setup;
449         unsigned long           watchdog_events;
450         unsigned long           tso_tx;
451         unsigned long           link_irq;
452
453         struct ixgbe_hw_stats   stats;
454
455         struct lwkt_serialize   serializer;
456         struct sysctl_ctx_list  sysctl_ctx;
457         struct sysctl_oid       *sysctl_tree;
458 };
459
460 /* Precision Time Sync (IEEE 1588) defines */
461 #define ETHERTYPE_IEEE1588      0x88F7
462 #define PICOSECS_PER_TICK       20833
463 #define TSYNC_UDP_PORT          319 /* UDP port for the protocol */
464 #define IXGBE_ADVTXD_TSTAMP     0x00080000
465
466
467 #define IXGBE_CORE_LOCK_INIT(_sc, _name) \
468         lockinit(&(_sc)->core_lock, _name, 0, LK_CANRECURSE)
469 #define IXGBE_TX_LOCK_INIT(_sc)           lwkt_serialize_init(&(_sc)->tx_serialize)
470 #define IXGBE_CORE_LOCK_DESTROY(_sc)      lockuninit(&(_sc)->core_lock)
471 #define IXGBE_TX_LOCK_DESTROY(_sc)
472 #define IXGBE_RX_LOCK_DESTROY(_sc)        lockuninit(&(_sc)->rx_lock)
473 #define IXGBE_CORE_LOCK(_sc)              lockmgr(&(_sc)->core_lock, LK_EXCLUSIVE)
474 #define IXGBE_TX_LOCK(_sc)                lwkt_serialize_enter(&(_sc)->tx_serialize)
475 #define IXGBE_TX_TRYLOCK(_sc)             lwkt_serialize_try(&(_sc)->tx_serialize)
476 #define IXGBE_RX_LOCK(_sc)                lockmgr(&(_sc)->rx_lock, LK_EXCLUSIVE)
477 #define IXGBE_CORE_UNLOCK(_sc)            lockmgr(&(_sc)->core_lock, LK_RELEASE)
478 #define IXGBE_TX_UNLOCK(_sc)              lwkt_serialize_exit(&(_sc)->tx_serialize)
479 #define IXGBE_RX_UNLOCK(_sc)              lockmgr(&(_sc)->rx_lock, LK_RELEASE)
480 #define IXGBE_CORE_LOCK_ASSERT(_sc)       KKASSERT(lockstatus(&(_sc)->core_lock, curthread) !=0)
481 #define IXGBE_TX_LOCK_ASSERT(_sc)         ASSERT_SERIALIZED(&(_sc)->tx_serialize)
482
483
484 static inline bool
485 ixgbe_is_sfp(struct ixgbe_hw *hw)
486 {
487         switch (hw->phy.type) {
488         case ixgbe_phy_sfp_avago:
489         case ixgbe_phy_sfp_ftl:
490         case ixgbe_phy_sfp_intel:
491         case ixgbe_phy_sfp_unknown:
492         case ixgbe_phy_sfp_passive_tyco:
493         case ixgbe_phy_sfp_passive_unknown:
494                 return TRUE;
495         default:
496                 return FALSE;
497         }
498 }
499
500 /*
501 ** Find the number of unrefreshed RX descriptors
502 */
503 static inline u16
504 ixgbe_rx_unrefreshed(struct rx_ring *rxr)
505 {       
506         struct adapter  *adapter = rxr->adapter;
507         
508         if (rxr->next_to_check > rxr->next_to_refresh)
509                 return (rxr->next_to_check - rxr->next_to_refresh - 1);
510         else
511                 return ((adapter->num_rx_desc + rxr->next_to_check) -
512                     rxr->next_to_refresh - 1);
513 }       
514
515 #endif /* _IXGBE_H_ */