[BACK]Return to if_ixgb.h CVS log [TXT][DIR] Up to [local] / sys / dev / pci

Annotation of sys/dev/pci/if_ixgb.h, Revision 1.1

1.1     ! nbrk        1: /**************************************************************************
        !             2:
        !             3: Copyright (c) 2001-2005, 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:
        !            34: /* $OpenBSD: if_ixgb.h,v 1.10 2006/11/28 04:45:08 brad Exp $ */
        !            35:
        !            36: #ifndef _IXGB_H_DEFINED_
        !            37: #define _IXGB_H_DEFINED_
        !            38:
        !            39: #include "bpfilter.h"
        !            40: #include "vlan.h"
        !            41:
        !            42: #include <sys/param.h>
        !            43: #include <sys/systm.h>
        !            44: #include <sys/sockio.h>
        !            45: #include <sys/mbuf.h>
        !            46: #include <sys/malloc.h>
        !            47: #include <sys/kernel.h>
        !            48: #include <sys/device.h>
        !            49: #include <sys/socket.h>
        !            50:
        !            51: #include <net/if.h>
        !            52: #include <net/if_dl.h>
        !            53: #include <net/if_media.h>
        !            54:
        !            55: #ifdef INET
        !            56: #include <netinet/in.h>
        !            57: #include <netinet/in_systm.h>
        !            58: #include <netinet/in_var.h>
        !            59: #include <netinet/ip.h>
        !            60: #include <netinet/if_ether.h>
        !            61: #include <netinet/tcp.h>
        !            62: #include <netinet/udp.h>
        !            63: #endif
        !            64:
        !            65: #if NVLAN > 0
        !            66: #include <net/if_types.h>
        !            67: #include <net/if_vlan_var.h>
        !            68: #endif
        !            69:
        !            70: #if NBPFILTER > 0
        !            71: #include <net/bpf.h>
        !            72: #endif
        !            73:
        !            74: #include <uvm/uvm_extern.h>
        !            75:
        !            76: #include <dev/pci/pcireg.h>
        !            77: #include <dev/pci/pcivar.h>
        !            78: #include <dev/pci/pcidevs.h>
        !            79:
        !            80: #include <dev/pci/ixgb_hw.h>
        !            81: #include <dev/pci/ixgb_ee.h>
        !            82: #include <dev/pci/ixgb_ids.h>
        !            83:
        !            84: /* Tunables */
        !            85:
        !            86: /*
        !            87:  * TxDescriptors Valid Range: 64-4096 Default Value: 2048 This value is the
        !            88:  * number of transmit descriptors allocated by the driver. Increasing this
        !            89:  * value allows the driver to queue more transmits. Each descriptor is 16
        !            90:  * bytes.
        !            91:  */
        !            92: #define IXGB_MAX_TXD                   2048
        !            93:
        !            94: /*
        !            95:  * RxDescriptors Valid Range: 64-4096 Default Value: 1024 This value is the
        !            96:  * number of receive descriptors allocated by the driver. Increasing this
        !            97:  * value allows the driver to buffer more incoming packets. Each descriptor
        !            98:  * is 16 bytes.  A receive buffer is also allocated for each descriptor. The
        !            99:  * maximum MTU size is 16110.
        !           100:  */
        !           101: #define IXGB_MAX_RXD                   1024
        !           102:
        !           103: /*
        !           104:  * TxIntDelay Valid Range: 0-65535 (0=off) Default Value: 32 This value
        !           105:  * delays the generation of transmit interrupts in units of 1.024
        !           106:  * microseconds. Transmit interrupt reduction can improve CPU efficiency if
        !           107:  * properly tuned for specific network traffic. If the system is reporting
        !           108:  * dropped transmits, this value may be set too high causing the driver to
        !           109:  * run out of available transmit descriptors.
        !           110:  */
        !           111: #define TIDV                           32
        !           112:
        !           113: /*
        !           114:  * RxIntDelay Valid Range: 0-65535 (0=off) Default Value: 72 This value
        !           115:  * delays the generation of receive interrupts in units of 1.024
        !           116:  * microseconds.  Receive interrupt reduction can improve CPU efficiency if
        !           117:  * properly tuned for specific network traffic. Increasing this value adds
        !           118:  * extra latency to frame reception and can end up decreasing the throughput
        !           119:  * of TCP traffic. If the system is reporting dropped receives, this value
        !           120:  * may be set too high, causing the driver to run out of available receive
        !           121:  * descriptors.
        !           122:  */
        !           123: #define RDTR                           72
        !           124:
        !           125: /*
        !           126:  * This parameter controls the duration of transmit watchdog timer.
        !           127:  */
        !           128: #define IXGB_TX_TIMEOUT                        5       /* set to 5 seconds */
        !           129:
        !           130: /*
        !           131:  * This parameter controls when the driver calls the routine to reclaim
        !           132:  * transmit descriptors.
        !           133:  */
        !           134: #define IXGB_TX_CLEANUP_THRESHOLD      (sc->num_tx_desc / 8)
        !           135:
        !           136: /*
        !           137:  * Flow Control Types.
        !           138:  * 1. ixgb_fc_none - Flow Control Disabled
        !           139:  * 2. ixgb_fc_rx_pause - Flow Control Receive Only
        !           140:  * 3. ixgb_fc_tx_pause - Flow Control Transmit Only
        !           141:  * 4. ixgb_fc_full - Flow Control Enabled
        !           142:  */
        !           143: #define FLOW_CONTROL_NONE      ixgb_fc_none
        !           144: #define FLOW_CONTROL_RX_PAUSE  ixgb_fc_rx_pause
        !           145: #define FLOW_CONTROL_TX_PAUSE  ixgb_fc_tx_pause
        !           146: #define FLOW_CONTROL_FULL      ixgb_fc_full
        !           147:
        !           148: /*
        !           149:  * Set the flow control type. Assign one of the above flow control types to be enabled.
        !           150:  * Default Value: FLOW_CONTROL_FULL
        !           151:  */
        !           152: #define FLOW_CONTROL           FLOW_CONTROL_FULL
        !           153:
        !           154: /*
        !           155:  * Receive Flow control low threshold (when we send a resume frame) (FCRTL)
        !           156:  * Valid Range: 64 - 262,136 (0x40 - 0x3FFF8, 8 byte granularity) must be
        !           157:  * less than high threshold by at least 8 bytes Default Value:  163,840
        !           158:  * (0x28000)
        !           159:  */
        !           160: #define FCRTL                  0x28000
        !           161:
        !           162: /*
        !           163:  * Receive Flow control high threshold (when we send a pause frame) (FCRTH)
        !           164:  * Valid Range: 1,536 - 262,136 (0x600 - 0x3FFF8, 8 byte granularity) Default
        !           165:  * Value: 196,608 (0x30000)
        !           166:  */
        !           167: #define FCRTH                  0x30000
        !           168:
        !           169: /*
        !           170:  * Flow control request timeout (how long to pause the link partner's tx)
        !           171:  * (PAP 15:0) Valid Range: 1 - 65535 Default Value:  256 (0x100)
        !           172:  */
        !           173: #define FCPAUSE                        0x100
        !           174:
        !           175: /* Tunables -- End */
        !           176:
        !           177: #define IXGB_MMBA              0x0010  /* Mem base address */
        !           178: #define IXGB_ROUNDUP(size, unit) (((size) + (unit) - 1) & ~((unit) - 1))
        !           179:
        !           180: #define MAX_NUM_MULTICAST_ADDRESSES    128
        !           181:
        !           182: /* Defines for printing debug information */
        !           183: #define DEBUG_INIT     0
        !           184: #define DEBUG_IOCTL    0
        !           185: #define DEBUG_HW       0
        !           186:
        !           187: #define INIT_DEBUGOUT(S)               if (DEBUG_INIT)  printf(S "\n")
        !           188: #define INIT_DEBUGOUT1(S, A)           if (DEBUG_INIT)  printf(S "\n", A)
        !           189: #define INIT_DEBUGOUT2(S, A, B)                if (DEBUG_INIT)  printf(S "\n", A, B)
        !           190: #define IOCTL_DEBUGOUT(S)              if (DEBUG_IOCTL) printf(S "\n")
        !           191: #define IOCTL_DEBUGOUT1(S, A)          if (DEBUG_IOCTL) printf(S "\n", A)
        !           192: #define IOCTL_DEBUGOUT2(S, A, B)       if (DEBUG_IOCTL) printf(S "\n", A, B)
        !           193: #define HW_DEBUGOUT(S)                 if (DEBUG_HW) printf(S "\n")
        !           194: #define HW_DEBUGOUT1(S, A)             if (DEBUG_HW) printf(S "\n", A)
        !           195: #define HW_DEBUGOUT2(S, A, B)          if (DEBUG_HW) printf(S "\n", A, B)
        !           196:
        !           197: /* Supported RX Buffer Sizes */
        !           198: #define IXGB_RXBUFFER_2048     2048
        !           199: #define IXGB_RXBUFFER_4096     4096
        !           200: #define IXGB_RXBUFFER_8192     8192
        !           201: #define IXGB_RXBUFFER_16384    16384
        !           202:
        !           203: #define IXGB_MAX_SCATTER       100
        !           204:
        !           205: struct ixgb_buffer {
        !           206:        struct mbuf    *m_head;
        !           207:        bus_dmamap_t    map;    /* bus_dma map for packet */
        !           208: };
        !           209:
        !           210: /*
        !           211:  * Bus dma allocation structure used by
        !           212:  * ixgb_dma_malloc and ixgb_dma_free.
        !           213:  */
        !           214: struct ixgb_dma_alloc {
        !           215:        bus_addr_t              dma_paddr;
        !           216:        caddr_t                 dma_vaddr;
        !           217:        bus_dma_tag_t           dma_tag;
        !           218:        bus_dmamap_t            dma_map;
        !           219:        bus_dma_segment_t       dma_seg;
        !           220:        bus_size_t              dma_size;
        !           221:        int                     dma_nseg;
        !           222: };
        !           223:
        !           224: typedef enum _XSUM_CONTEXT_T {
        !           225:        OFFLOAD_NONE,
        !           226:        OFFLOAD_TCP_IP,
        !           227:        OFFLOAD_UDP_IP
        !           228: } XSUM_CONTEXT_T;
        !           229:
        !           230: /* Our adapter structure */
        !           231: struct ixgb_softc {
        !           232:        struct device   sc_dv;
        !           233:        struct arpcom   interface_data;
        !           234:        struct ixgb_hw  hw;
        !           235:
        !           236:        /* OpenBSD operating-system-specific structures */
        !           237:        struct ixgb_osdep osdep;
        !           238:        struct ifmedia  media;
        !           239:        int             io_rid;
        !           240:
        !           241:        void            *sc_intrhand;
        !           242:        struct timeout  ixgb_intr_enable;
        !           243:        struct timeout  timer_handle;
        !           244:        int             if_flags;
        !           245:        void            *sc_powerhook;
        !           246:        void            *sc_shutdownhook;
        !           247:
        !           248:        /* Info about the board itself */
        !           249:        u_int32_t       part_num;
        !           250:        u_int8_t        link_active;
        !           251:        u_int16_t       link_speed;
        !           252:        u_int16_t       link_duplex;
        !           253:        u_int32_t       tx_int_delay;
        !           254:        u_int32_t       tx_abs_int_delay;
        !           255:        u_int32_t       rx_int_delay;
        !           256:        u_int32_t       rx_abs_int_delay;
        !           257:
        !           258:        int             raidc;
        !           259:
        !           260:        XSUM_CONTEXT_T  active_checksum_context;
        !           261:
        !           262:        /*
        !           263:         * Transmit definitions
        !           264:         *
        !           265:         * We have an array of num_tx_desc descriptors (handled by the
        !           266:         * controller) paired with an array of tx_buffers (at
        !           267:         * tx_buffer_area). The index of the next available descriptor is
        !           268:         * next_avail_tx_desc. The number of remaining tx_desc is
        !           269:         * num_tx_desc_avail.
        !           270:         */
        !           271:        struct ixgb_dma_alloc   txdma;          /* bus_dma glue for tx desc */
        !           272:        struct ixgb_tx_desc     *tx_desc_base;
        !           273:        u_int32_t               next_avail_tx_desc;
        !           274:        u_int32_t               oldest_used_tx_desc;
        !           275:        volatile u_int16_t      num_tx_desc_avail;
        !           276:        u_int16_t               num_tx_desc;
        !           277:        u_int32_t               txd_cmd;
        !           278:        struct ixgb_buffer      *tx_buffer_area;
        !           279:        bus_dma_tag_t           txtag;          /* dma tag for tx */
        !           280:
        !           281:        /*
        !           282:         * Receive definitions
        !           283:         *
        !           284:         * we have an array of num_rx_desc rx_desc (handled by the controller),
        !           285:         * and paired with an array of rx_buffers (at rx_buffer_area). The
        !           286:         * next pair to check on receive is at offset next_rx_desc_to_check
        !           287:         */
        !           288:        struct ixgb_dma_alloc   rxdma;          /* bus_dma glue for rx desc */
        !           289:        struct ixgb_rx_desc     *rx_desc_base;
        !           290:        u_int32_t               next_rx_desc_to_check;
        !           291:        u_int16_t               num_rx_desc;
        !           292:        u_int32_t               rx_buffer_len;
        !           293:        struct ixgb_buffer      *rx_buffer_area;
        !           294:        bus_dma_tag_t           rxtag;          /* dma tag for Rx */
        !           295:        u_int32_t               next_rx_desc_to_use;
        !           296:
        !           297:        /*
        !           298:         * First/last mbuf pointers, for
        !           299:         * collecting multisegment RX packets.
        !           300:         */
        !           301:        struct mbuf             *fmp;
        !           302:        struct mbuf             *lmp;
        !           303:
        !           304:        /* Misc stats maintained by the driver */
        !           305:        unsigned long           dropped_pkts;
        !           306:        unsigned long           mbuf_alloc_failed;
        !           307:        unsigned long           mbuf_cluster_failed;
        !           308:        unsigned long           no_tx_desc_avail1;
        !           309:        unsigned long           no_tx_desc_avail2;
        !           310:        unsigned long           no_tx_map_avail;
        !           311:        unsigned long           no_tx_dma_setup;
        !           312:        unsigned long           watchdog_events;
        !           313:
        !           314:        struct ixgb_hw_stats    stats;
        !           315: };
        !           316:
        !           317: #endif /* _IXGB_H_DEFINED_ */

CVSweb