2007-09-16 01:07:45 +04:00
/*******************************************************************************
Intel 10 Gigabit PCI Express Linux driver
2010-01-13 04:49:34 +03:00
Copyright ( c ) 1999 - 2010 Intel Corporation .
2007-09-16 01:07:45 +04:00
This program is free software ; you can redistribute it and / or modify it
under the terms and conditions of the GNU General Public License ,
version 2 , as published by the Free Software Foundation .
This program is distributed in the hope it will be useful , but WITHOUT
ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE . See the GNU General Public License for
more details .
You should have received a copy of the GNU General Public License along with
this program ; if not , write to the Free Software Foundation , Inc . ,
51 Franklin St - Fifth Floor , Boston , MA 02110 - 1301 USA .
The full GNU General Public License is included in this distribution in
the file called " COPYING " .
Contact Information :
e1000 - devel Mailing List < e1000 - devel @ lists . sourceforge . net >
Intel Corporation , 5200 N . E . Elam Young Parkway , Hillsboro , OR 97124 - 6497
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# ifndef _IXGBE_H_
# define _IXGBE_H_
# include <linux/types.h>
# include <linux/pci.h>
# include <linux/netdevice.h>
2008-12-10 12:13:08 +03:00
# include <linux/aer.h>
2007-09-16 01:07:45 +04:00
# include "ixgbe_type.h"
# include "ixgbe_common.h"
2008-11-21 07:52:10 +03:00
# include "ixgbe_dcb.h"
2009-05-13 17:11:06 +04:00
# if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE)
# define IXGBE_FCOE
# include "ixgbe_fcoe.h"
# endif /* CONFIG_FCOE or CONFIG_FCOE_MODULE */
2008-10-16 13:09:31 +04:00
# ifdef CONFIG_IXGBE_DCA
2008-03-04 02:04:02 +03:00
# include <linux/dca.h>
# endif
2007-09-16 01:07:45 +04:00
# define PFX "ixgbe: "
# define DPRINTK(nlevel, klevel, fmt, args...) \
( ( void ) ( ( NETIF_MSG_ # # nlevel & adapter - > msg_enable ) & & \
printk ( KERN_ # # klevel PFX " %s: %s: " fmt , adapter - > netdev - > name , \
2008-08-21 03:52:04 +04:00
__func__ , # # args ) ) )
2007-09-16 01:07:45 +04:00
/* TX/RX descriptor defines */
2009-12-03 14:33:07 +03:00
# define IXGBE_DEFAULT_TXD 512
2007-09-16 01:07:45 +04:00
# define IXGBE_MAX_TXD 4096
# define IXGBE_MIN_TXD 64
2009-12-03 14:33:07 +03:00
# define IXGBE_DEFAULT_RXD 512
2007-09-16 01:07:45 +04:00
# define IXGBE_MAX_RXD 4096
# define IXGBE_MIN_RXD 64
/* flow control */
# define IXGBE_DEFAULT_FCRTL 0x10000
2008-08-26 15:27:10 +04:00
# define IXGBE_MIN_FCRTL 0x40
2007-09-16 01:07:45 +04:00
# define IXGBE_MAX_FCRTL 0x7FF80
# define IXGBE_DEFAULT_FCRTH 0x20000
2008-08-26 15:27:10 +04:00
# define IXGBE_MIN_FCRTH 0x600
2007-09-16 01:07:45 +04:00
# define IXGBE_MAX_FCRTH 0x7FFF0
2008-08-26 15:27:10 +04:00
# define IXGBE_DEFAULT_FCPAUSE 0xFFFF
2007-09-16 01:07:45 +04:00
# define IXGBE_MIN_FCPAUSE 0
# define IXGBE_MAX_FCPAUSE 0xFFFF
/* Supported Rx Buffer Sizes */
# define IXGBE_RXBUFFER_64 64 /* Used for packet split */
# define IXGBE_RXBUFFER_128 128 /* Used for packet split */
# define IXGBE_RXBUFFER_256 256 /* Used for packet split */
# define IXGBE_RXBUFFER_2048 2048
2009-05-18 00:57:47 +04:00
# define IXGBE_RXBUFFER_4096 4096
# define IXGBE_RXBUFFER_8192 8192
2009-02-25 03:37:31 +03:00
# define IXGBE_MAX_RXBUFFER 16384 /* largest size for a single descriptor */
2007-09-16 01:07:45 +04:00
# define IXGBE_RX_HDR_SIZE IXGBE_RXBUFFER_256
# define MAXIMUM_ETHERNET_VLAN_SIZE (ETH_FRAME_LEN + ETH_FCS_LEN + VLAN_HLEN)
/* How many Rx Buffers do we bundle into one write to the hardware ? */
# define IXGBE_RX_BUFFER_WRITE 16 /* Must be power of 2 */
# define IXGBE_TX_FLAGS_CSUM (u32)(1)
# define IXGBE_TX_FLAGS_VLAN (u32)(1 << 1)
# define IXGBE_TX_FLAGS_TSO (u32)(1 << 2)
# define IXGBE_TX_FLAGS_IPV4 (u32)(1 << 3)
2009-05-13 17:11:06 +04:00
# define IXGBE_TX_FLAGS_FCOE (u32)(1 << 4)
# define IXGBE_TX_FLAGS_FSO (u32)(1 << 5)
2007-09-16 01:07:45 +04:00
# define IXGBE_TX_FLAGS_VLAN_MASK 0xffff0000
2008-11-21 07:52:10 +03:00
# define IXGBE_TX_FLAGS_VLAN_PRIO_MASK 0x0000e000
2007-09-16 01:07:45 +04:00
# define IXGBE_TX_FLAGS_VLAN_SHIFT 16
2009-07-30 16:26:00 +04:00
# define IXGBE_MAX_RSC_INT_RATE 162760
2010-01-09 05:25:29 +03:00
# define IXGBE_MAX_VF_MC_ENTRIES 30
# define IXGBE_MAX_VF_FUNCTIONS 64
# define IXGBE_MAX_VFTA_ENTRIES 128
# define MAX_EMULATION_MAC_ADDRS 16
# define VMDQ_P(p) ((p) + adapter->num_vfs)
struct vf_data_storage {
unsigned char vf_mac_addresses [ ETH_ALEN ] ;
u16 vf_mc_hashes [ IXGBE_MAX_VF_MC_ENTRIES ] ;
u16 num_vf_mc_hashes ;
u16 default_vf_vlan_id ;
u16 vlans_enabled ;
bool clear_to_send ;
int rar ;
} ;
2007-09-16 01:07:45 +04:00
/* wrapper around a pointer to a socket buffer,
* so a DMA handle can be stored along with the buffer */
struct ixgbe_tx_buffer {
struct sk_buff * skb ;
dma_addr_t dma ;
unsigned long time_stamp ;
u16 length ;
u16 next_to_watch ;
2009-12-02 19:46:56 +03:00
u16 mapped_as_page ;
2007-09-16 01:07:45 +04:00
} ;
struct ixgbe_rx_buffer {
struct sk_buff * skb ;
dma_addr_t dma ;
struct page * page ;
dma_addr_t page_dma ;
2008-09-12 06:58:43 +04:00
unsigned int page_offset ;
2007-09-16 01:07:45 +04:00
} ;
struct ixgbe_queue_stats {
u64 packets ;
u64 bytes ;
} ;
struct ixgbe_ring {
void * desc ; /* descriptor ring memory */
union {
struct ixgbe_tx_buffer * tx_buffer_info ;
struct ixgbe_rx_buffer * rx_buffer_info ;
} ;
2009-06-04 20:02:04 +04:00
u8 atr_sample_rate ;
u8 atr_count ;
u16 count ; /* amount of descriptors */
u16 rx_buf_len ;
u16 next_to_use ;
u16 next_to_clean ;
u8 queue_index ; /* needed for multiqueue queue management */
2007-09-16 01:07:45 +04:00
2009-08-06 17:05:44 +04:00
# define IXGBE_RING_RX_PS_ENABLED (u8)(1)
u8 flags ; /* per ring feature flags */
2007-09-16 01:07:45 +04:00
u16 head ;
u16 tail ;
2008-03-04 02:03:57 +03:00
unsigned int total_bytes ;
unsigned int total_packets ;
2007-09-16 01:07:45 +04:00
2008-10-16 13:09:31 +04:00
# ifdef CONFIG_IXGBE_DCA
2008-03-04 02:04:02 +03:00
/* cpu for tx queue */
int cpu ;
# endif
2009-06-04 20:02:04 +04:00
u16 work_limit ; /* max work per interrupt */
u16 reg_idx ; /* holds the special value that gets
* the hardware register offset
* associated with this ring , which is
* different for DCB and RSS modes
*/
2007-09-16 01:07:45 +04:00
struct ixgbe_queue_stats stats ;
2009-06-04 20:01:43 +04:00
unsigned long reinit_state ;
2010-02-03 17:19:12 +03:00
int numa_node ;
2009-06-04 20:02:04 +04:00
u64 rsc_count ; /* stat for coalesced packets */
2009-11-23 09:32:06 +03:00
u64 rsc_flush ; /* stats for flushed packets */
2009-12-03 14:33:29 +03:00
u32 restart_queue ; /* track tx queue restarts */
u32 non_eop_descs ; /* track hardware descriptor chaining */
2007-09-16 01:07:45 +04:00
2009-06-04 20:02:04 +04:00
unsigned int size ; /* length in bytes */
dma_addr_t dma ; /* phys. address of descriptor ring */
2009-12-03 14:33:29 +03:00
} ____cacheline_internodealigned_in_smp ;
2007-09-16 01:07:45 +04:00
2009-02-25 03:36:38 +03:00
enum ixgbe_ring_f_enum {
RING_F_NONE = 0 ,
RING_F_DCB ,
2010-01-09 05:25:29 +03:00
RING_F_VMDQ , /* SR-IOV uses the same ring feature */
2009-02-25 03:36:38 +03:00
RING_F_RSS ,
2009-06-04 20:01:43 +04:00
RING_F_FDIR ,
2009-05-17 16:33:52 +04:00
# ifdef IXGBE_FCOE
RING_F_FCOE ,
# endif /* IXGBE_FCOE */
2009-02-25 03:36:38 +03:00
RING_F_ARRAY_SIZE /* must be last in enum set */
} ;
2008-11-21 07:52:10 +03:00
# define IXGBE_MAX_DCB_INDICES 8
2008-03-04 02:03:45 +03:00
# define IXGBE_MAX_RSS_INDICES 16
2010-01-09 05:25:29 +03:00
# define IXGBE_MAX_VMDQ_INDICES 64
2009-06-04 20:01:43 +04:00
# define IXGBE_MAX_FDIR_INDICES 64
2009-05-17 16:33:52 +04:00
# ifdef IXGBE_FCOE
# define IXGBE_MAX_FCOE_INDICES 8
# endif /* IXGBE_FCOE */
2008-03-04 02:03:45 +03:00
struct ixgbe_ring_feature {
int indices ;
int mask ;
2009-12-03 14:33:29 +03:00
} ____cacheline_internodealigned_in_smp ;
2008-03-04 02:03:45 +03:00
2009-02-27 18:45:05 +03:00
# define MAX_RX_QUEUES 128
# define MAX_TX_QUEUES 128
2008-03-04 02:03:45 +03:00
2008-11-21 07:52:10 +03:00
# define MAX_RX_PACKET_BUFFERS ((adapter->flags & IXGBE_FLAG_DCB_ENABLED) \
? 8 : 1 )
# define MAX_TX_PACKET_BUFFERS MAX_RX_PACKET_BUFFERS
2008-03-04 02:03:45 +03:00
/* MAX_MSIX_Q_VECTORS of these are allocated,
* but we only use one per queue - specific vector .
*/
struct ixgbe_q_vector {
struct ixgbe_adapter * adapter ;
2009-06-04 20:00:09 +04:00
unsigned int v_idx ; /* index of q_vector within array, also used for
* finding the bit in EICR and friends that
* represents the vector for this ring */
2008-03-04 02:03:45 +03:00
struct napi_struct napi ;
DECLARE_BITMAP ( rxr_idx , MAX_RX_QUEUES ) ; /* Rx ring indices */
DECLARE_BITMAP ( txr_idx , MAX_TX_QUEUES ) ; /* Tx ring indices */
u8 rxr_count ; /* Rx ring count assigned to this vector */
u8 txr_count ; /* Tx ring count assigned to this vector */
2008-09-12 06:58:14 +04:00
u8 tx_itr ;
u8 rx_itr ;
2008-03-04 02:03:45 +03:00
u32 eitr ;
} ;
2007-09-16 01:07:45 +04:00
/* Helper macros to switch between ints/sec and what the register uses.
2009-03-14 01:13:28 +03:00
* And yes , it ' s the same math going both ways . The lowest value
* supported by all of the ixgbe hardware is 8.
2007-09-16 01:07:45 +04:00
*/
# define EITR_INTS_PER_SEC_TO_REG(_eitr) \
2009-03-14 01:13:28 +03:00
( ( _eitr ) ? ( 1000000000 / ( ( _eitr ) * 256 ) ) : 8 )
2007-09-16 01:07:45 +04:00
# define EITR_REG_TO_INTS_PER_SEC EITR_INTS_PER_SEC_TO_REG
# define IXGBE_DESC_UNUSED(R) \
( ( ( ( R ) - > next_to_clean > ( R ) - > next_to_use ) ? 0 : ( R ) - > count ) + \
( R ) - > next_to_clean - ( R ) - > next_to_use - 1 )
# define IXGBE_RX_DESC_ADV(R, i) \
( & ( ( ( union ixgbe_adv_rx_desc * ) ( ( R ) . desc ) ) [ i ] ) )
# define IXGBE_TX_DESC_ADV(R, i) \
( & ( ( ( union ixgbe_adv_tx_desc * ) ( ( R ) . desc ) ) [ i ] ) )
# define IXGBE_TX_CTXTDESC_ADV(R, i) \
( & ( ( ( struct ixgbe_adv_tx_context_desc * ) ( ( R ) . desc ) ) [ i ] ) )
# define IXGBE_MAX_JUMBO_FRAME_SIZE 16128
2009-05-17 16:34:35 +04:00
# ifdef IXGBE_FCOE
/* Use 3K as the baby jumbo frame size for FCoE */
# define IXGBE_FCOE_JUMBO_FRAME_SIZE 3072
# endif /* IXGBE_FCOE */
2007-09-16 01:07:45 +04:00
2008-03-04 02:03:45 +03:00
# define OTHER_VECTOR 1
# define NON_Q_VECTORS (OTHER_VECTOR)
2009-02-27 18:45:05 +03:00
# define MAX_MSIX_VECTORS_82599 64
# define MAX_MSIX_Q_VECTORS_82599 64
2009-02-01 12:18:58 +03:00
# define MAX_MSIX_VECTORS_82598 18
# define MAX_MSIX_Q_VECTORS_82598 16
2009-02-27 18:45:05 +03:00
# define MAX_MSIX_Q_VECTORS MAX_MSIX_Q_VECTORS_82599
# define MAX_MSIX_COUNT MAX_MSIX_VECTORS_82599
2009-02-01 12:18:58 +03:00
2008-03-04 02:03:45 +03:00
# define MIN_MSIX_Q_VECTORS 2
# define MIN_MSIX_COUNT (MIN_MSIX_Q_VECTORS + NON_Q_VECTORS)
2007-09-16 01:07:45 +04:00
/* board specific private data structure */
struct ixgbe_adapter {
struct timer_list watchdog_timer ;
struct vlan_group * vlgrp ;
u16 bd_number ;
struct work_struct reset_task ;
2009-05-06 14:43:28 +04:00
struct ixgbe_q_vector * q_vector [ MAX_MSIX_Q_VECTORS ] ;
2009-02-27 18:45:05 +03:00
char name [ MAX_MSIX_COUNT ] [ IFNAMSIZ + 9 ] ;
2008-11-21 07:52:10 +03:00
struct ixgbe_dcb_config dcb_cfg ;
struct ixgbe_dcb_config temp_dcb_cfg ;
u8 dcb_set_bitmap ;
2009-05-17 16:35:16 +04:00
enum ixgbe_fc_mode last_lfc_mode ;
2007-09-16 01:07:45 +04:00
2008-03-04 02:03:57 +03:00
/* Interrupt Throttle Rate */
2009-09-18 13:46:06 +04:00
u32 rx_itr_setting ;
u32 tx_itr_setting ;
2008-03-04 02:03:57 +03:00
u16 eitr_low ;
u16 eitr_high ;
2007-09-16 01:07:45 +04:00
/* TX */
2010-02-03 17:19:12 +03:00
struct ixgbe_ring * tx_ring [ MAX_TX_QUEUES ] ____cacheline_aligned_in_smp ;
2008-09-12 06:58:14 +04:00
int num_tx_queues ;
2007-09-16 01:07:45 +04:00
u32 tx_timeout_count ;
bool detect_tx_hung ;
2009-12-03 14:33:29 +03:00
u64 restart_queue ;
u64 lsc_int ;
2007-09-16 01:07:45 +04:00
/* RX */
2010-02-03 17:19:12 +03:00
struct ixgbe_ring * rx_ring [ MAX_RX_QUEUES ] ____cacheline_aligned_in_smp ;
2008-09-12 06:58:14 +04:00
int num_rx_queues ;
2010-01-09 05:25:29 +03:00
int num_rx_pools ; /* == num_rx_queues in 82598 */
int num_rx_queues_per_pool ; /* 1 if 82598, can be many if 82599 */
2007-09-16 01:07:45 +04:00
u64 hw_csum_rx_error ;
2009-02-27 18:45:05 +03:00
u64 hw_rx_no_dma_resources ;
2007-09-16 01:07:45 +04:00
u64 non_eop_descs ;
2008-03-04 02:03:45 +03:00
int num_msix_vectors ;
2009-02-01 12:18:58 +03:00
int max_msix_q_vectors ; /* true count of q_vectors for device */
2009-02-25 03:36:38 +03:00
struct ixgbe_ring_feature ring_feature [ RING_F_ARRAY_SIZE ] ;
2007-09-16 01:07:45 +04:00
struct msix_entry * msix_entries ;
u32 alloc_rx_page_failed ;
u32 alloc_rx_buff_failed ;
2008-03-04 02:03:45 +03:00
/* Some features need tri-state capability,
* thus the additional * _CAPABLE flags .
*/
2007-09-16 01:07:45 +04:00
u32 flags ;
2008-08-26 15:27:21 +04:00
# define IXGBE_FLAG_RX_CSUM_ENABLED (u32)(1)
# define IXGBE_FLAG_MSI_CAPABLE (u32)(1 << 1)
# define IXGBE_FLAG_MSI_ENABLED (u32)(1 << 2)
# define IXGBE_FLAG_MSIX_CAPABLE (u32)(1 << 3)
# define IXGBE_FLAG_MSIX_ENABLED (u32)(1 << 4)
# define IXGBE_FLAG_RX_1BUF_CAPABLE (u32)(1 << 6)
# define IXGBE_FLAG_RX_PS_CAPABLE (u32)(1 << 7)
# define IXGBE_FLAG_RX_PS_ENABLED (u32)(1 << 8)
# define IXGBE_FLAG_IN_NETPOLL (u32)(1 << 9)
# define IXGBE_FLAG_DCA_ENABLED (u32)(1 << 10)
# define IXGBE_FLAG_DCA_CAPABLE (u32)(1 << 11)
# define IXGBE_FLAG_IMIR_ENABLED (u32)(1 << 12)
# define IXGBE_FLAG_MQ_CAPABLE (u32)(1 << 13)
2009-02-27 18:45:05 +03:00
# define IXGBE_FLAG_DCB_ENABLED (u32)(1 << 14)
2008-08-26 15:27:21 +04:00
# define IXGBE_FLAG_RSS_ENABLED (u32)(1 << 16)
# define IXGBE_FLAG_RSS_CAPABLE (u32)(1 << 17)
# define IXGBE_FLAG_VMDQ_CAPABLE (u32)(1 << 18)
# define IXGBE_FLAG_VMDQ_ENABLED (u32)(1 << 19)
2008-10-31 10:46:40 +03:00
# define IXGBE_FLAG_FAN_FAIL_CAPABLE (u32)(1 << 20)
2008-08-26 15:27:21 +04:00
# define IXGBE_FLAG_NEED_LINK_UPDATE (u32)(1 << 22)
2010-02-03 17:23:32 +03:00
# define IXGBE_FLAG_IN_SFP_LINK_TASK (u32)(1 << 23)
# define IXGBE_FLAG_IN_SFP_MOD_TASK (u32)(1 << 24)
# define IXGBE_FLAG_FDIR_HASH_CAPABLE (u32)(1 << 25)
# define IXGBE_FLAG_FDIR_PERFECT_CAPABLE (u32)(1 << 26)
# define IXGBE_FLAG_FCOE_CAPABLE (u32)(1 << 27)
# define IXGBE_FLAG_FCOE_ENABLED (u32)(1 << 28)
# define IXGBE_FLAG_SRIOV_CAPABLE (u32)(1 << 29)
# define IXGBE_FLAG_SRIOV_ENABLED (u32)(1 << 30)
2008-08-26 15:27:21 +04:00
2009-06-04 20:00:47 +04:00
u32 flags2 ;
# define IXGBE_FLAG2_RSC_CAPABLE (u32)(1)
# define IXGBE_FLAG2_RSC_ENABLED (u32)(1 << 1)
2008-08-26 15:27:21 +04:00
/* default to trying for four seconds */
# define IXGBE_TRY_LINK_TIMEOUT (4 * HZ)
2007-09-16 01:07:45 +04:00
/* OS defined structs */
struct net_device * netdev ;
struct pci_dev * pdev ;
2009-06-04 15:10:35 +04:00
u32 test_icr ;
struct ixgbe_ring test_tx_ring ;
struct ixgbe_ring test_rx_ring ;
2007-09-16 01:07:45 +04:00
/* structs defined in ixgbe_hw.h */
struct ixgbe_hw hw ;
u16 msg_enable ;
struct ixgbe_hw_stats stats ;
2008-03-04 02:03:45 +03:00
/* Interrupt Throttle Rate */
2009-09-18 13:46:06 +04:00
u32 rx_eitr_param ;
u32 tx_eitr_param ;
2007-09-16 01:07:45 +04:00
unsigned long state ;
u64 tx_busy ;
2008-09-12 06:58:14 +04:00
unsigned int tx_ring_count ;
unsigned int rx_ring_count ;
2008-09-12 06:55:32 +04:00
u32 link_speed ;
bool link_up ;
unsigned long link_check_timeout ;
struct work_struct watchdog_task ;
2008-11-21 08:11:42 +03:00
struct work_struct sfp_task ;
struct timer_list sfp_timer ;
2009-02-27 18:45:05 +03:00
struct work_struct multispeed_fiber_task ;
struct work_struct sfp_config_module_task ;
2009-06-04 20:01:43 +04:00
u32 fdir_pballoc ;
u32 atr_sample_rate ;
spinlock_t fdir_perfect_lock ;
struct work_struct fdir_reinit_task ;
2009-05-13 17:11:29 +04:00
# ifdef IXGBE_FCOE
struct ixgbe_fcoe fcoe ;
# endif /* IXGBE_FCOE */
2009-11-23 09:32:06 +03:00
u64 rsc_total_count ;
u64 rsc_total_flush ;
2009-02-27 18:45:05 +03:00
u32 wol ;
2009-02-06 10:54:42 +03:00
u16 eeprom_version ;
2010-01-09 05:25:29 +03:00
2010-02-03 17:18:50 +03:00
int node ;
2010-01-09 05:25:29 +03:00
/* SR-IOV */
DECLARE_BITMAP ( active_vfs , IXGBE_MAX_VF_FUNCTIONS ) ;
unsigned int num_vfs ;
struct vf_data_storage * vfinfo ;
2007-09-16 01:07:45 +04:00
} ;
enum ixbge_state_t {
__IXGBE_TESTING ,
__IXGBE_RESETTING ,
2008-11-21 08:11:42 +03:00
__IXGBE_DOWN ,
2009-06-04 20:01:43 +04:00
__IXGBE_FDIR_INIT_DONE ,
2008-11-21 08:11:42 +03:00
__IXGBE_SFP_MODULE_NOT_FOUND
2007-09-16 01:07:45 +04:00
} ;
enum ixgbe_boards {
2007-11-01 01:22:10 +03:00
board_82598 ,
2009-02-27 18:45:05 +03:00
board_82599 ,
2007-09-16 01:07:45 +04:00
} ;
2007-11-01 01:22:10 +03:00
extern struct ixgbe_info ixgbe_82598_info ;
2009-02-27 18:45:05 +03:00
extern struct ixgbe_info ixgbe_82599_info ;
2008-11-25 12:02:08 +03:00
# ifdef CONFIG_IXGBE_DCB
2009-10-05 10:01:03 +04:00
extern const struct dcbnl_rtnl_ops dcbnl_ops ;
2008-11-21 07:52:10 +03:00
extern int ixgbe_copy_dcb_cfg ( struct ixgbe_dcb_config * src_dcb_cfg ,
struct ixgbe_dcb_config * dst_dcb_cfg ,
int tc_max ) ;
# endif
2007-09-16 01:07:45 +04:00
extern char ixgbe_driver_name [ ] ;
2007-10-29 20:46:24 +03:00
extern const char ixgbe_driver_version [ ] ;
2007-09-16 01:07:45 +04:00
extern int ixgbe_up ( struct ixgbe_adapter * adapter ) ;
extern void ixgbe_down ( struct ixgbe_adapter * adapter ) ;
2008-02-02 02:58:41 +03:00
extern void ixgbe_reinit_locked ( struct ixgbe_adapter * adapter ) ;
2007-09-16 01:07:45 +04:00
extern void ixgbe_reset ( struct ixgbe_adapter * adapter ) ;
extern void ixgbe_set_ethtool_ops ( struct net_device * netdev ) ;
2008-09-12 07:04:46 +04:00
extern int ixgbe_setup_rx_resources ( struct ixgbe_adapter * , struct ixgbe_ring * ) ;
extern int ixgbe_setup_tx_resources ( struct ixgbe_adapter * , struct ixgbe_ring * ) ;
extern void ixgbe_free_rx_resources ( struct ixgbe_adapter * , struct ixgbe_ring * ) ;
extern void ixgbe_free_tx_resources ( struct ixgbe_adapter * , struct ixgbe_ring * ) ;
extern void ixgbe_update_stats ( struct ixgbe_adapter * adapter ) ;
2008-11-21 07:52:10 +03:00
extern int ixgbe_init_interrupt_scheme ( struct ixgbe_adapter * adapter ) ;
2009-05-06 14:43:28 +04:00
extern void ixgbe_clear_interrupt_scheme ( struct ixgbe_adapter * adapter ) ;
2009-06-04 20:00:09 +04:00
extern void ixgbe_write_eitr ( struct ixgbe_q_vector * ) ;
extern int ethtool_ioctl ( struct ifreq * ifr ) ;
2009-06-04 20:01:25 +04:00
extern s32 ixgbe_reinit_fdir_tables_82599 ( struct ixgbe_hw * hw ) ;
extern s32 ixgbe_init_fdir_signature_82599 ( struct ixgbe_hw * hw , u32 pballoc ) ;
extern s32 ixgbe_init_fdir_perfect_82599 ( struct ixgbe_hw * hw , u32 pballoc ) ;
extern s32 ixgbe_fdir_add_signature_filter_82599 ( struct ixgbe_hw * hw ,
struct ixgbe_atr_input * input ,
u8 queue ) ;
2010-02-10 19:07:54 +03:00
extern s32 ixgbe_fdir_add_perfect_filter_82599 ( struct ixgbe_hw * hw ,
struct ixgbe_atr_input * input ,
struct ixgbe_atr_input_masks * input_masks ,
u16 soft_id , u8 queue ) ;
2009-06-04 20:01:25 +04:00
extern s32 ixgbe_atr_set_vlan_id_82599 ( struct ixgbe_atr_input * input ,
u16 vlan_id ) ;
extern s32 ixgbe_atr_set_src_ipv4_82599 ( struct ixgbe_atr_input * input ,
u32 src_addr ) ;
extern s32 ixgbe_atr_set_dst_ipv4_82599 ( struct ixgbe_atr_input * input ,
u32 dst_addr ) ;
extern s32 ixgbe_atr_set_src_port_82599 ( struct ixgbe_atr_input * input ,
u16 src_port ) ;
extern s32 ixgbe_atr_set_dst_port_82599 ( struct ixgbe_atr_input * input ,
u16 dst_port ) ;
extern s32 ixgbe_atr_set_flex_byte_82599 ( struct ixgbe_atr_input * input ,
u16 flex_byte ) ;
extern s32 ixgbe_atr_set_l4type_82599 ( struct ixgbe_atr_input * input ,
u8 l4type ) ;
2010-01-09 05:25:29 +03:00
extern void ixgbe_set_rx_mode ( struct net_device * netdev ) ;
2009-05-13 17:11:06 +04:00
# ifdef IXGBE_FCOE
extern void ixgbe_configure_fcoe ( struct ixgbe_adapter * adapter ) ;
extern int ixgbe_fso ( struct ixgbe_adapter * adapter ,
struct ixgbe_ring * tx_ring , struct sk_buff * skb ,
u32 tx_flags , u8 * hdr_len ) ;
2009-05-13 17:11:53 +04:00
extern void ixgbe_cleanup_fcoe ( struct ixgbe_adapter * adapter ) ;
extern int ixgbe_fcoe_ddp ( struct ixgbe_adapter * adapter ,
union ixgbe_adv_rx_desc * rx_desc ,
struct sk_buff * skb ) ;
extern int ixgbe_fcoe_ddp_get ( struct net_device * netdev , u16 xid ,
struct scatterlist * sgl , unsigned int sgc ) ;
extern int ixgbe_fcoe_ddp_put ( struct net_device * netdev , u16 xid ) ;
2009-08-31 16:32:14 +04:00
extern int ixgbe_fcoe_enable ( struct net_device * netdev ) ;
extern int ixgbe_fcoe_disable ( struct net_device * netdev ) ;
2009-08-31 16:34:28 +04:00
# ifdef CONFIG_IXGBE_DCB
extern u8 ixgbe_fcoe_getapp ( struct ixgbe_adapter * adapter ) ;
extern u8 ixgbe_fcoe_setapp ( struct ixgbe_adapter * adapter , u8 up ) ;
# endif /* CONFIG_IXGBE_DCB */
2009-10-28 21:24:56 +03:00
extern int ixgbe_fcoe_get_wwn ( struct net_device * netdev , u64 * wwn , int type ) ;
2009-05-13 17:11:06 +04:00
# endif /* IXGBE_FCOE */
2007-09-16 01:07:45 +04:00
# endif /* _IXGBE_H_ */