Annotation of sys/dev/pci/if_ixgb.h, Revision 1.1.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