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