summaryrefslogtreecommitdiffstats
path: root/sys/dev
diff options
context:
space:
mode:
authorjfv <jfv@FreeBSD.org>2010-01-27 17:35:58 +0000
committerjfv <jfv@FreeBSD.org>2010-01-27 17:35:58 +0000
commitee0dc5d2dea65ce02cdc532db7379123da16ed1b (patch)
treeae6edb137a77ce4bbe93a0047218b0bf5e6942aa /sys/dev
parent5f3c60fd26cab91d29c1c2e279031850c4688e5e (diff)
downloadFreeBSD-src-ee0dc5d2dea65ce02cdc532db7379123da16ed1b.zip
FreeBSD-src-ee0dc5d2dea65ce02cdc532db7379123da16ed1b.tar.gz
Opps, completely wrong version of if_em.h got into
the checkin, sorry all :(
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/e1000/if_em.h220
1 files changed, 98 insertions, 122 deletions
diff --git a/sys/dev/e1000/if_em.h b/sys/dev/e1000/if_em.h
index 4909b9f..2498d6b 100644
--- a/sys/dev/e1000/if_em.h
+++ b/sys/dev/e1000/if_em.h
@@ -135,7 +135,7 @@
#define EM_RADV 64
/*
- * This parameter controls the duration of transmit watchdog.
+ * This parameter controls the max duration of transmit watchdog.
*/
#define EM_WATCHDOG (10 * hz)
@@ -240,7 +240,6 @@
#define ETH_ZLEN 60
#define ETH_ADDR_LEN 6
#define CSUM_OFFLOAD 7 /* Offload bits in mbuf flag */
-#define M_TSO_LEN 66
/*
* 82574 has a nonstandard address for EIAC
@@ -283,162 +282,131 @@ struct em_int_delay_info {
int value; /* Current value in usecs */
};
-/*
-** Driver queue struct: this is the interrupt container
-** for the associated tx and rx ring.
-*/
-struct em_queue {
- struct adapter *adapter;
- u32 msix; /* This queue's MSIX vector */
- u32 eims; /* This queue's EIMS bit */
- u32 eitr_setting;
- struct resource *res;
- void *tag;
- struct tx_ring *txr;
- struct rx_ring *rxr;
- struct task que_task;
- struct taskqueue *tq;
- u64 irqs;
-};
-
-/*
- * Transmit ring: one per queue
- */
-struct tx_ring {
- struct adapter *adapter;
- u32 me;
- struct mtx tx_mtx;
- char mtx_name[16];
- struct em_dma_alloc txdma;
- struct e1000_tx_desc *tx_base;
- u32 next_avail_desc;
- u32 next_to_clean;
- volatile u16 tx_avail;
- struct em_tx_buffer *tx_buffers;
-#if __FreeBSD_version >= 800000
- struct buf_ring *br;
-#endif
- bus_dma_tag_t txtag;
-
- u32 bytes;
- u32 packets;
-
- bool watchdog_check;
- int watchdog_time;
- u64 no_desc_avail;
- u64 tx_packets;
-};
-
-/*
- * Receive ring: one per queue
- */
-struct rx_ring {
- struct adapter *adapter;
- u32 me;
- struct em_dma_alloc rxdma;
- union e1000_adv_rx_desc *rx_base;
- struct lro_ctrl lro;
- bool lro_enabled;
- bool hdr_split;
- bool discard;
- struct mtx rx_mtx;
- char mtx_name[16];
- u32 last_cleaned;
- u32 next_to_check;
- struct em_rx_buf *rx_buffers;
- bus_dma_tag_t rx_htag; /* dma tag for rx head */
- bus_dmamap_t rx_hspare_map;
- bus_dma_tag_t rx_ptag; /* dma tag for rx packet */
- bus_dmamap_t rx_pspare_map;
- /*
- * First/last mbuf pointers, for
- * collecting multisegment RX packets.
- */
- struct mbuf *fmp;
- struct mbuf *lmp;
-
- /* Temporary stats used by AIM */
- u32 bytes;
- u32 packets;
-
- /* Soft stats */
- u64 rx_split_packets;
- u64 rx_discarded;
- u64 rx_packets;
- u64 rx_bytes;
-};
-
+/* Our adapter structure */
struct adapter {
struct ifnet *ifp;
+#if __FreeBSD_version >= 800000
+ struct buf_ring *br;
+#endif
struct e1000_hw hw;
+ /* FreeBSD operating-system-specific structures. */
struct e1000_osdep osdep;
struct device *dev;
- struct resource *pci_mem;
- struct resource *msix_mem;
- struct resource *res;
- void *tag;
- u32 eims_mask;
+ struct resource *memory;
+ struct resource *flash;
+ struct resource *msix;
+
+ struct resource *ioport;
+ int io_rid;
- int linkvec;
- int link_mask;
- int link_irq;
+ /* 82574 may use 3 int vectors */
+ struct resource *res[3];
+ void *tag[3];
+ int rid[3];
struct ifmedia media;
struct callout timer;
- int msix; /* total vectors allocated */
+ struct callout tx_fifo_timer;
+ bool watchdog_check
+ int watchdog_time;
+ int msi;
int if_flags;
int max_frame_size;
int min_frame_size;
struct mtx core_mtx;
+ struct mtx tx_mtx;
+ struct mtx rx_mtx;
int em_insert_vlan_header;
+
+ /* Task for FAST handling */
+ struct task link_task;
struct task rxtx_task;
+ struct task rx_task;
+ struct task tx_task;
struct taskqueue *tq; /* private task queue */
- u16 num_queues;
+#if __FreeBSD_version >= 700029
eventhandler_tag vlan_attach;
eventhandler_tag vlan_detach;
- u32 num_vlans;
+ u32 num_vlans;
+#endif
/* Management and WOL features */
- int wol;
- int has_manage;
+ u32 wol;
+ bool has_manage;
+ bool has_amt;
/* Info about the board itself */
- u8 link_active;
- u16 link_speed;
- u16 link_duplex;
- u32 smartspeed;
-
- /* Interface queues */
- struct em_queue *queues;
+ uint8_t link_active;
+ uint16_t link_speed;
+ uint16_t link_duplex;
+ uint32_t smartspeed;
+ struct em_int_delay_info tx_int_delay;
+ struct em_int_delay_info tx_abs_int_delay;
+ struct em_int_delay_info rx_int_delay;
+ struct em_int_delay_info rx_abs_int_delay;
/*
- * Transmit rings
+ * Transmit definitions
+ *
+ * We have an array of num_tx_desc descriptors (handled
+ * by the controller) paired with an array of tx_buffers
+ * (at tx_buffer_area).
+ * The index of the next available descriptor is next_avail_tx_desc.
+ * The number of remaining tx_desc is num_tx_desc_avail.
*/
- struct tx_ring *tx_rings;
- u16 num_tx_desc;
+ struct em_dma_alloc txdma; /* bus_dma glue for tx desc */
+ struct e1000_tx_desc *tx_desc_base;
+ uint32_t next_avail_tx_desc;
+ uint32_t next_tx_to_clean;
+ volatile uint16_t num_tx_desc_avail;
+ uint16_t num_tx_desc;
+ uint16_t last_hw_offload;
+ uint32_t txd_cmd;
+ struct em_buffer *tx_buffer_area;
+ bus_dma_tag_t txtag; /* dma tag for tx */
+ uint32_t tx_tso; /* last tx was tso */
/*
- * Receive rings
+ * Receive definitions
+ *
+ * we have an array of num_rx_desc rx_desc (handled by the
+ * controller), and paired with an array of rx_buffers
+ * (at rx_buffer_area).
+ * The next pair to check on receive is at offset next_rx_desc_to_check
*/
- struct rx_ring *rx_rings;
- bool rx_hdr_split;
- u16 num_rx_desc;
+ struct em_dma_alloc rxdma; /* bus_dma glue for rx desc */
+ struct e1000_rx_desc *rx_desc_base;
+ uint32_t next_rx_desc_to_check;
+ uint32_t rx_buffer_len;
+ uint16_t num_rx_desc;
int rx_process_limit;
- u32 rx_mbuf_sz;
- u32 rx_mask;
+ struct em_buffer *rx_buffer_area;
+ bus_dma_tag_t rxtag;
+ bus_dmamap_t rx_sparemap;
+
+ /*
+ * First/last mbuf pointers, for
+ * collecting multisegment RX packets.
+ */
+ struct mbuf *fmp;
+ struct mbuf *lmp;
/* Misc stats maintained by the driver */
unsigned long dropped_pkts;
- unsigned long mbuf_defrag_failed;
- unsigned long mbuf_header_failed;
- unsigned long mbuf_packet_failed;
+ unsigned long mbuf_alloc_failed;
+ unsigned long mbuf_cluster_failed;
+ unsigned long no_tx_desc_avail1;
+ unsigned long no_tx_desc_avail2;
unsigned long no_tx_map_avail;
unsigned long no_tx_dma_setup;
unsigned long watchdog_events;
unsigned long rx_overruns;
+ unsigned long rx_irq;
+ unsigned long tx_irq;
+ unsigned long link_irq;
/* 82547 workaround */
uint32_t tx_fifo_size;
@@ -448,9 +416,17 @@ struct adapter {
uint64_t tx_fifo_wrk_cnt;
uint32_t tx_head_addr;
- /* For 82544 PCIX Workaround */
- boolean_t pcix_82544;
- boolean_t in_detach;
+ /* For 82544 PCIX Workaround */
+ boolean_t pcix_82544;
+ boolean_t in_detach;
+
+#ifdef EM_IEEE1588
+ /* IEEE 1588 precision time support */
+ struct cyclecounter cycles;
+ struct nettimer clock;
+ struct nettime_compare compare;
+ struct hwtstamp_ctrl hwtstamp;
+#endif
struct e1000_hw_stats stats;
};
OpenPOWER on IntegriCloud