diff options
author | jfv <jfv@FreeBSD.org> | 2010-01-27 17:35:58 +0000 |
---|---|---|
committer | jfv <jfv@FreeBSD.org> | 2010-01-27 17:35:58 +0000 |
commit | ee0dc5d2dea65ce02cdc532db7379123da16ed1b (patch) | |
tree | ae6edb137a77ce4bbe93a0047218b0bf5e6942aa /sys/dev | |
parent | 5f3c60fd26cab91d29c1c2e279031850c4688e5e (diff) | |
download | FreeBSD-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.h | 220 |
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; }; |