summaryrefslogtreecommitdiff
path: root/sys/dev/pci/if_em.h
diff options
context:
space:
mode:
authorNathan Binkert <nate@cvs.openbsd.org>2002-09-24 18:56:03 +0000
committerNathan Binkert <nate@cvs.openbsd.org>2002-09-24 18:56:03 +0000
commitc6114f8901bd269105a2d6f7131dea78a070ecb6 (patch)
treec63dd3ca76eb52bb5b4562532ed75a7d791b0c37 /sys/dev/pci/if_em.h
parent59c0d446267e5ac5962411ba74fe8dc57703e0cf (diff)
Driver for Intel PRO/1000 gigabit ethernet adapters.
This driver should work with all current models of gigabit ethernet adapters. Driver written by Intel Ported from FreeBSD by Henric Jungheim <henric@attbi.com> bus_dma and endian support by me.
Diffstat (limited to 'sys/dev/pci/if_em.h')
-rw-r--r--sys/dev/pci/if_em.h189
1 files changed, 189 insertions, 0 deletions
diff --git a/sys/dev/pci/if_em.h b/sys/dev/pci/if_em.h
new file mode 100644
index 00000000000..f8167d415a9
--- /dev/null
+++ b/sys/dev/pci/if_em.h
@@ -0,0 +1,189 @@
+/**************************************************************************
+
+Copyright (c) 2001-2002 Intel Corporation
+All rights reserved.
+
+Redistribution and use in source and binary forms of the Software, with or
+without modification, are permitted provided that the following conditions
+are met:
+
+ 1. Redistributions of source code of the Software may retain the above
+ copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form of the Software may reproduce the above
+ copyright notice, this list of conditions and the following disclaimer
+ in the documentation and/or other materials provided with the
+ distribution.
+
+ 3. Neither the name of the Intel Corporation nor the names of its
+ contributors shall be used to endorse or promote products derived from
+ this Software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+***************************************************************************/
+
+/*$FreeBSD$*/
+
+#ifndef _EM_H_DEFINED_
+#define _EM_H_DEFINED_
+
+#include <dev/pci/if_em_hw.h>
+
+/* Tunables */
+#define MAX_TXD 256
+#define MAX_RXD 256
+#define TX_CLEANUP_THRESHOLD MAX_TXD / 8
+#define TIDV 128
+#define RIDV 28
+#define DO_AUTO_NEG 1
+#define WAIT_FOR_AUTO_NEG_DEFAULT 1
+#define AUTONEG_ADV_DEFAULT (ADVERTISE_10_HALF | \
+ ADVERTISE_10_FULL | \
+ ADVERTISE_100_HALF | \
+ ADVERTISE_100_FULL | \
+ ADVERTISE_1000_FULL)
+#define EM_REPORT_TX_EARLY 2
+#define EM_CHECKSUM_FEATURES (CSUM_TCP | CSUM_UDP)
+#define EM_MAX_INTR 3
+#define EM_TX_TIMEOUT 5 /* set to 5 seconds */
+
+
+#define EM_VENDOR_ID 0x8086
+#define EM_MMBA 0x0010 /* Mem base address */
+#define EM_ROUNDUP(size, unit) (((size) + (unit) - 1) & ~((unit) - 1))
+#define EM_JUMBO_PBA 0x00000028
+#define EM_DEFAULT_PBA 0x00000030
+
+#define IOCTL_CMD_TYPE u_long
+#define MAX_NUM_MULTICAST_ADDRESSES 128
+#define PCI_ANY_ID (~0U)
+#define ETHER_ALIGN 2
+#define QTAG_TYPE 0x8100
+
+/* Defines for printing debug information */
+#define DEBUG_INIT 0
+#define DEBUG_IOCTL 0
+#define DEBUG_HW 0
+
+#define INIT_DEBUGOUT(S) if (DEBUG_INIT) printf(S "\n")
+#define INIT_DEBUGOUT1(S, A) if (DEBUG_INIT) printf(S "\n", A)
+#define INIT_DEBUGOUT2(S, A, B) if (DEBUG_INIT) printf(S "\n", A, B)
+#define IOCTL_DEBUGOUT(S) if (DEBUG_IOCTL) printf(S "\n")
+#define IOCTL_DEBUGOUT1(S, A) if (DEBUG_IOCTL) printf(S "\n", A)
+#define IOCTL_DEBUGOUT2(S, A, B) if (DEBUG_IOCTL) printf(S "\n", A, B)
+#define HW_DEBUGOUT(S) if (DEBUG_HW) printf(S "\n")
+#define HW_DEBUGOUT1(S, A) if (DEBUG_HW) printf(S "\n", A)
+#define HW_DEBUGOUT2(S, A, B) if (DEBUG_HW) printf(S "\n", A, B)
+
+
+/* Supported RX Buffer Sizes */
+#define EM_RXBUFFER_2048 2048
+#define EM_RXBUFFER_4096 4096
+#define EM_RXBUFFER_8192 8192
+#define EM_RXBUFFER_16384 16384
+
+struct em_tx_buffer {
+ SIMPLEQ_ENTRY(em_tx_buffer) em_tx_entry;
+ struct mbuf *m_head;
+ bus_dmamap_t dmamap;
+ u_int32_t num_tx_desc_used;
+};
+
+
+/* ******************************************************************************
+ * This structure stores information about the 2k aligned receive buffer
+ * into which the E1000 DMA's frames.
+ * ******************************************************************************/
+struct em_rx_buffer {
+ SIMPLEQ_ENTRY(em_rx_buffer) em_rx_entry;
+ struct mbuf *m_head;
+ bus_dmamap_t dmamap;
+ u_int64_t buffer_addr;
+};
+
+typedef enum _XSUM_CONTEXT_T {
+ OFFLOAD_NONE,
+ OFFLOAD_TCP_IP,
+ OFFLOAD_UDP_IP
+} XSUM_CONTEXT_T;
+
+/* Our adapter structure */
+struct em_softc {
+ struct device sc_dv;
+ struct arpcom arpcom; /* interface info */
+ struct em_hw hw;
+
+ /* FreeBSD operating-system-specific structures */
+ struct em_osdep osdep;
+
+ int io_rid;
+ void *sc_intrhand;
+ struct ifmedia media;
+ struct timeout em_timeout;
+
+ /* Info about the board itself */
+ u_int32_t part_num;
+ u_int8_t link_active;
+ u_int16_t link_speed;
+ u_int16_t link_duplex;
+ u_int32_t tx_int_delay;
+ u_int32_t rx_int_delay;
+
+ XSUM_CONTEXT_T active_checksum_context;
+
+ /* Transmit definitions */
+ struct em_tx_desc *first_tx_desc;
+ struct em_tx_desc *last_tx_desc;
+ struct em_tx_desc *next_avail_tx_desc;
+ struct em_tx_desc *oldest_used_tx_desc;
+ struct em_tx_desc *tx_desc_base;
+ volatile u_int16_t num_tx_desc_avail;
+ u_int16_t num_tx_desc;
+ u_int32_t txd_cmd;
+ struct em_tx_buffer *tx_buffer_area;
+ SIMPLEQ_HEAD(__em_tx_buffer_free, em_tx_buffer) free_tx_buffer_list;
+ SIMPLEQ_HEAD(__em_tx_buffer_used, em_tx_buffer) used_tx_buffer_list;
+
+ /* Receive definitions */
+ struct em_rx_desc *first_rx_desc;
+ struct em_rx_desc *last_rx_desc;
+ struct em_rx_desc *next_rx_desc_to_check;
+ struct em_rx_desc *rx_desc_base;
+ u_int16_t num_rx_desc;
+ u_int32_t rx_buffer_len;
+ struct em_rx_buffer *rx_buffer_area;
+ SIMPLEQ_HEAD(__em_rx_buffer, em_rx_buffer) rx_buffer_list;
+
+ /* Jumbo frame */
+ struct mbuf *fmp;
+ struct mbuf *lmp;
+
+ /* Misc stats maintained by the driver */
+ unsigned long dropped_pkts;
+ unsigned long mbuf_alloc_failed;
+ unsigned long mbuf_cluster_failed;
+ unsigned long xmit_pullup;
+ unsigned long no_tx_desc_avail;
+ unsigned long no_tx_buffer_avail1;
+ unsigned long no_tx_buffer_avail2;
+#ifdef DBG_STATS
+ unsigned long no_pkts_avail;
+ unsigned long clean_tx_interrupts;
+
+#endif
+
+ struct em_hw_stats stats;
+};
+
+#endif /* _EM_H_DEFINED_ */