1dee1ad47SJeff Kirsher /******************************************************************************* 2dee1ad47SJeff Kirsher 3dee1ad47SJeff Kirsher Intel PRO/1000 Linux driver 4bf67044bSBruce Allan Copyright(c) 1999 - 2013 Intel Corporation. 5dee1ad47SJeff Kirsher 6dee1ad47SJeff Kirsher This program is free software; you can redistribute it and/or modify it 7dee1ad47SJeff Kirsher under the terms and conditions of the GNU General Public License, 8dee1ad47SJeff Kirsher version 2, as published by the Free Software Foundation. 9dee1ad47SJeff Kirsher 10dee1ad47SJeff Kirsher This program is distributed in the hope it will be useful, but WITHOUT 11dee1ad47SJeff Kirsher ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12dee1ad47SJeff Kirsher FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13dee1ad47SJeff Kirsher more details. 14dee1ad47SJeff Kirsher 15dee1ad47SJeff Kirsher You should have received a copy of the GNU General Public License along with 16dee1ad47SJeff Kirsher this program; if not, write to the Free Software Foundation, Inc., 17dee1ad47SJeff Kirsher 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 18dee1ad47SJeff Kirsher 19dee1ad47SJeff Kirsher The full GNU General Public License is included in this distribution in 20dee1ad47SJeff Kirsher the file called "COPYING". 21dee1ad47SJeff Kirsher 22dee1ad47SJeff Kirsher Contact Information: 23dee1ad47SJeff Kirsher Linux NICS <linux.nics@intel.com> 24dee1ad47SJeff Kirsher e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> 25dee1ad47SJeff Kirsher Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 26dee1ad47SJeff Kirsher 27dee1ad47SJeff Kirsher *******************************************************************************/ 28dee1ad47SJeff Kirsher 29dee1ad47SJeff Kirsher /* Linux PRO/1000 Ethernet Driver main header file */ 30dee1ad47SJeff Kirsher 31dee1ad47SJeff Kirsher #ifndef _E1000_H_ 32dee1ad47SJeff Kirsher #define _E1000_H_ 33dee1ad47SJeff Kirsher 34dee1ad47SJeff Kirsher #include <linux/bitops.h> 35dee1ad47SJeff Kirsher #include <linux/types.h> 36dee1ad47SJeff Kirsher #include <linux/timer.h> 37dee1ad47SJeff Kirsher #include <linux/workqueue.h> 38dee1ad47SJeff Kirsher #include <linux/io.h> 39dee1ad47SJeff Kirsher #include <linux/netdevice.h> 40dee1ad47SJeff Kirsher #include <linux/pci.h> 41dee1ad47SJeff Kirsher #include <linux/pci-aspm.h> 42dee1ad47SJeff Kirsher #include <linux/crc32.h> 43dee1ad47SJeff Kirsher #include <linux/if_vlan.h> 44b67e1913SBruce Allan #include <linux/clocksource.h> 45b67e1913SBruce Allan #include <linux/net_tstamp.h> 46d89777bfSBruce Allan #include <linux/ptp_clock_kernel.h> 47d89777bfSBruce Allan #include <linux/ptp_classify.h> 48c2ade1a4SBruce Allan #include <linux/mii.h> 49dee1ad47SJeff Kirsher #include "hw.h" 50dee1ad47SJeff Kirsher 51dee1ad47SJeff Kirsher struct e1000_info; 52dee1ad47SJeff Kirsher 53dee1ad47SJeff Kirsher #define e_dbg(format, arg...) \ 54dee1ad47SJeff Kirsher netdev_dbg(hw->adapter->netdev, format, ## arg) 55dee1ad47SJeff Kirsher #define e_err(format, arg...) \ 56dee1ad47SJeff Kirsher netdev_err(adapter->netdev, format, ## arg) 57dee1ad47SJeff Kirsher #define e_info(format, arg...) \ 58dee1ad47SJeff Kirsher netdev_info(adapter->netdev, format, ## arg) 59dee1ad47SJeff Kirsher #define e_warn(format, arg...) \ 60dee1ad47SJeff Kirsher netdev_warn(adapter->netdev, format, ## arg) 61dee1ad47SJeff Kirsher #define e_notice(format, arg...) \ 62dee1ad47SJeff Kirsher netdev_notice(adapter->netdev, format, ## arg) 63dee1ad47SJeff Kirsher 64dee1ad47SJeff Kirsher /* Interrupt modes, as used by the IntMode parameter */ 65dee1ad47SJeff Kirsher #define E1000E_INT_MODE_LEGACY 0 66dee1ad47SJeff Kirsher #define E1000E_INT_MODE_MSI 1 67dee1ad47SJeff Kirsher #define E1000E_INT_MODE_MSIX 2 68dee1ad47SJeff Kirsher 69dee1ad47SJeff Kirsher /* Tx/Rx descriptor defines */ 70dee1ad47SJeff Kirsher #define E1000_DEFAULT_TXD 256 71dee1ad47SJeff Kirsher #define E1000_MAX_TXD 4096 72dee1ad47SJeff Kirsher #define E1000_MIN_TXD 64 73dee1ad47SJeff Kirsher 74dee1ad47SJeff Kirsher #define E1000_DEFAULT_RXD 256 75dee1ad47SJeff Kirsher #define E1000_MAX_RXD 4096 76dee1ad47SJeff Kirsher #define E1000_MIN_RXD 64 77dee1ad47SJeff Kirsher 78dee1ad47SJeff Kirsher #define E1000_MIN_ITR_USECS 10 /* 100000 irq/sec */ 79dee1ad47SJeff Kirsher #define E1000_MAX_ITR_USECS 10000 /* 100 irq/sec */ 80dee1ad47SJeff Kirsher 81dee1ad47SJeff Kirsher #define E1000_FC_PAUSE_TIME 0x0680 /* 858 usec */ 82dee1ad47SJeff Kirsher 83dee1ad47SJeff Kirsher /* How many Tx Descriptors do we need to call netif_wake_queue ? */ 84dee1ad47SJeff Kirsher /* How many Rx Buffers do we bundle into one write to the hardware ? */ 85dee1ad47SJeff Kirsher #define E1000_RX_BUFFER_WRITE 16 /* Must be power of 2 */ 86dee1ad47SJeff Kirsher 87dee1ad47SJeff Kirsher #define AUTO_ALL_MODES 0 88dee1ad47SJeff Kirsher #define E1000_EEPROM_APME 0x0400 89dee1ad47SJeff Kirsher 90dee1ad47SJeff Kirsher #define E1000_MNG_VLAN_NONE (-1) 91dee1ad47SJeff Kirsher 92dee1ad47SJeff Kirsher /* Number of packet split data buffers (not including the header buffer) */ 93dee1ad47SJeff Kirsher #define PS_PAGE_BUFFERS (MAX_PS_BUFFERS - 1) 94dee1ad47SJeff Kirsher 95dee1ad47SJeff Kirsher #define DEFAULT_JUMBO 9234 96dee1ad47SJeff Kirsher 97dee1ad47SJeff Kirsher /* Time to wait before putting the device into D3 if there's no link (in ms). */ 98dee1ad47SJeff Kirsher #define LINK_TIMEOUT 100 99dee1ad47SJeff Kirsher 100e921eb1aSBruce Allan /* Count for polling __E1000_RESET condition every 10-20msec. 101bb9e44d0SBruce Allan * Experimentation has shown the reset can take approximately 210msec. 102bb9e44d0SBruce Allan */ 103bb9e44d0SBruce Allan #define E1000_CHECK_RESET_COUNT 25 104bb9e44d0SBruce Allan 105dee1ad47SJeff Kirsher #define DEFAULT_RDTR 0 106dee1ad47SJeff Kirsher #define DEFAULT_RADV 8 107dee1ad47SJeff Kirsher #define BURST_RDTR 0x20 108dee1ad47SJeff Kirsher #define BURST_RADV 0x20 109dee1ad47SJeff Kirsher 110e921eb1aSBruce Allan /* in the case of WTHRESH, it appears at least the 82571/2 hardware 111dee1ad47SJeff Kirsher * writes back 4 descriptors when WTHRESH=5, and 3 descriptors when 1128edc0e62SHiroaki SHIMODA * WTHRESH=4, so a setting of 5 gives the most efficient bus 1138edc0e62SHiroaki SHIMODA * utilization but to avoid possible Tx stalls, set it to 1 114dee1ad47SJeff Kirsher */ 115dee1ad47SJeff Kirsher #define E1000_TXDCTL_DMA_BURST_ENABLE \ 116dee1ad47SJeff Kirsher (E1000_TXDCTL_GRAN | /* set descriptor granularity */ \ 117dee1ad47SJeff Kirsher E1000_TXDCTL_COUNT_DESC | \ 1188edc0e62SHiroaki SHIMODA (1 << 16) | /* wthresh must be +1 more than desired */\ 119dee1ad47SJeff Kirsher (1 << 8) | /* hthresh */ \ 120dee1ad47SJeff Kirsher 0x1f) /* pthresh */ 121dee1ad47SJeff Kirsher 122dee1ad47SJeff Kirsher #define E1000_RXDCTL_DMA_BURST_ENABLE \ 123dee1ad47SJeff Kirsher (0x01000000 | /* set descriptor granularity */ \ 124dee1ad47SJeff Kirsher (4 << 16) | /* set writeback threshold */ \ 125dee1ad47SJeff Kirsher (4 << 8) | /* set prefetch threshold */ \ 126dee1ad47SJeff Kirsher 0x20) /* set hthresh */ 127dee1ad47SJeff Kirsher 128dee1ad47SJeff Kirsher #define E1000_TIDV_FPD (1 << 31) 129dee1ad47SJeff Kirsher #define E1000_RDTR_FPD (1 << 31) 130dee1ad47SJeff Kirsher 131dee1ad47SJeff Kirsher enum e1000_boards { 132dee1ad47SJeff Kirsher board_82571, 133dee1ad47SJeff Kirsher board_82572, 134dee1ad47SJeff Kirsher board_82573, 135dee1ad47SJeff Kirsher board_82574, 136dee1ad47SJeff Kirsher board_82583, 137dee1ad47SJeff Kirsher board_80003es2lan, 138dee1ad47SJeff Kirsher board_ich8lan, 139dee1ad47SJeff Kirsher board_ich9lan, 140dee1ad47SJeff Kirsher board_ich10lan, 141dee1ad47SJeff Kirsher board_pchlan, 142dee1ad47SJeff Kirsher board_pch2lan, 1432fbe4526SBruce Allan board_pch_lpt, 144dee1ad47SJeff Kirsher }; 145dee1ad47SJeff Kirsher 146dee1ad47SJeff Kirsher struct e1000_ps_page { 147dee1ad47SJeff Kirsher struct page *page; 148dee1ad47SJeff Kirsher u64 dma; /* must be u64 - written to hw */ 149dee1ad47SJeff Kirsher }; 150dee1ad47SJeff Kirsher 151e921eb1aSBruce Allan /* wrappers around a pointer to a socket buffer, 152dee1ad47SJeff Kirsher * so a DMA handle can be stored along with the buffer 153dee1ad47SJeff Kirsher */ 154dee1ad47SJeff Kirsher struct e1000_buffer { 155dee1ad47SJeff Kirsher dma_addr_t dma; 156dee1ad47SJeff Kirsher struct sk_buff *skb; 157dee1ad47SJeff Kirsher union { 158dee1ad47SJeff Kirsher /* Tx */ 159dee1ad47SJeff Kirsher struct { 160dee1ad47SJeff Kirsher unsigned long time_stamp; 161dee1ad47SJeff Kirsher u16 length; 162dee1ad47SJeff Kirsher u16 next_to_watch; 163dee1ad47SJeff Kirsher unsigned int segs; 164dee1ad47SJeff Kirsher unsigned int bytecount; 165dee1ad47SJeff Kirsher u16 mapped_as_page; 166dee1ad47SJeff Kirsher }; 167dee1ad47SJeff Kirsher /* Rx */ 168dee1ad47SJeff Kirsher struct { 169dee1ad47SJeff Kirsher /* arrays of page information for packet split */ 170dee1ad47SJeff Kirsher struct e1000_ps_page *ps_pages; 171dee1ad47SJeff Kirsher struct page *page; 172dee1ad47SJeff Kirsher }; 173dee1ad47SJeff Kirsher }; 174dee1ad47SJeff Kirsher }; 175dee1ad47SJeff Kirsher 176dee1ad47SJeff Kirsher struct e1000_ring { 17755aa6985SBruce Allan struct e1000_adapter *adapter; /* back pointer to adapter */ 178dee1ad47SJeff Kirsher void *desc; /* pointer to ring memory */ 179dee1ad47SJeff Kirsher dma_addr_t dma; /* phys address of ring */ 180dee1ad47SJeff Kirsher unsigned int size; /* length of ring in bytes */ 181dee1ad47SJeff Kirsher unsigned int count; /* number of desc. in ring */ 182dee1ad47SJeff Kirsher 183dee1ad47SJeff Kirsher u16 next_to_use; 184dee1ad47SJeff Kirsher u16 next_to_clean; 185dee1ad47SJeff Kirsher 186c5083cf6SBruce Allan void __iomem *head; 187c5083cf6SBruce Allan void __iomem *tail; 188dee1ad47SJeff Kirsher 189dee1ad47SJeff Kirsher /* array of buffer information structs */ 190dee1ad47SJeff Kirsher struct e1000_buffer *buffer_info; 191dee1ad47SJeff Kirsher 192dee1ad47SJeff Kirsher char name[IFNAMSIZ + 5]; 193dee1ad47SJeff Kirsher u32 ims_val; 194dee1ad47SJeff Kirsher u32 itr_val; 195c5083cf6SBruce Allan void __iomem *itr_register; 196dee1ad47SJeff Kirsher int set_itr; 197dee1ad47SJeff Kirsher 198dee1ad47SJeff Kirsher struct sk_buff *rx_skb_top; 199dee1ad47SJeff Kirsher }; 200dee1ad47SJeff Kirsher 201dee1ad47SJeff Kirsher /* PHY register snapshot values */ 202dee1ad47SJeff Kirsher struct e1000_phy_regs { 203dee1ad47SJeff Kirsher u16 bmcr; /* basic mode control register */ 204dee1ad47SJeff Kirsher u16 bmsr; /* basic mode status register */ 205dee1ad47SJeff Kirsher u16 advertise; /* auto-negotiation advertisement */ 206dee1ad47SJeff Kirsher u16 lpa; /* link partner ability register */ 207dee1ad47SJeff Kirsher u16 expansion; /* auto-negotiation expansion reg */ 208dee1ad47SJeff Kirsher u16 ctrl1000; /* 1000BASE-T control register */ 209dee1ad47SJeff Kirsher u16 stat1000; /* 1000BASE-T status register */ 210dee1ad47SJeff Kirsher u16 estatus; /* extended status register */ 211dee1ad47SJeff Kirsher }; 212dee1ad47SJeff Kirsher 213dee1ad47SJeff Kirsher /* board specific private data structure */ 214dee1ad47SJeff Kirsher struct e1000_adapter { 215dee1ad47SJeff Kirsher struct timer_list watchdog_timer; 216dee1ad47SJeff Kirsher struct timer_list phy_info_timer; 217dee1ad47SJeff Kirsher struct timer_list blink_timer; 218dee1ad47SJeff Kirsher 219dee1ad47SJeff Kirsher struct work_struct reset_task; 220dee1ad47SJeff Kirsher struct work_struct watchdog_task; 221dee1ad47SJeff Kirsher 222dee1ad47SJeff Kirsher const struct e1000_info *ei; 223dee1ad47SJeff Kirsher 224dee1ad47SJeff Kirsher unsigned long active_vlans[BITS_TO_LONGS(VLAN_N_VID)]; 225dee1ad47SJeff Kirsher u32 bd_number; 226dee1ad47SJeff Kirsher u32 rx_buffer_len; 227dee1ad47SJeff Kirsher u16 mng_vlan_id; 228dee1ad47SJeff Kirsher u16 link_speed; 229dee1ad47SJeff Kirsher u16 link_duplex; 230dee1ad47SJeff Kirsher u16 eeprom_vers; 231dee1ad47SJeff Kirsher 232dee1ad47SJeff Kirsher /* track device up/down/testing state */ 233dee1ad47SJeff Kirsher unsigned long state; 234dee1ad47SJeff Kirsher 235dee1ad47SJeff Kirsher /* Interrupt Throttle Rate */ 236dee1ad47SJeff Kirsher u32 itr; 237dee1ad47SJeff Kirsher u32 itr_setting; 238dee1ad47SJeff Kirsher u16 tx_itr; 239dee1ad47SJeff Kirsher u16 rx_itr; 240dee1ad47SJeff Kirsher 241*33550cecSBruce Allan /* Tx - one ring per active queue */ 242*33550cecSBruce Allan struct e1000_ring *tx_ring ____cacheline_aligned_in_smp; 243d821a4c4SBruce Allan u32 tx_fifo_limit; 244dee1ad47SJeff Kirsher 245dee1ad47SJeff Kirsher struct napi_struct napi; 246dee1ad47SJeff Kirsher 24794fb848bSBruce Allan unsigned int uncorr_errors; /* uncorrectable ECC errors */ 24894fb848bSBruce Allan unsigned int corr_errors; /* correctable ECC errors */ 249dee1ad47SJeff Kirsher unsigned int restart_queue; 250dee1ad47SJeff Kirsher u32 txd_cmd; 251dee1ad47SJeff Kirsher 252dee1ad47SJeff Kirsher bool detect_tx_hung; 25309357b00SJeff Kirsher bool tx_hang_recheck; 254dee1ad47SJeff Kirsher u8 tx_timeout_factor; 255dee1ad47SJeff Kirsher 256dee1ad47SJeff Kirsher u32 tx_int_delay; 257dee1ad47SJeff Kirsher u32 tx_abs_int_delay; 258dee1ad47SJeff Kirsher 259dee1ad47SJeff Kirsher unsigned int total_tx_bytes; 260dee1ad47SJeff Kirsher unsigned int total_tx_packets; 261dee1ad47SJeff Kirsher unsigned int total_rx_bytes; 262dee1ad47SJeff Kirsher unsigned int total_rx_packets; 263dee1ad47SJeff Kirsher 264dee1ad47SJeff Kirsher /* Tx stats */ 265dee1ad47SJeff Kirsher u64 tpt_old; 266dee1ad47SJeff Kirsher u64 colc_old; 267dee1ad47SJeff Kirsher u32 gotc; 268dee1ad47SJeff Kirsher u64 gotc_old; 269dee1ad47SJeff Kirsher u32 tx_timeout_count; 270dee1ad47SJeff Kirsher u32 tx_fifo_head; 271dee1ad47SJeff Kirsher u32 tx_head_addr; 272dee1ad47SJeff Kirsher u32 tx_fifo_size; 273dee1ad47SJeff Kirsher u32 tx_dma_failed; 274dee1ad47SJeff Kirsher 275e921eb1aSBruce Allan /* Rx */ 27655aa6985SBruce Allan bool (*clean_rx) (struct e1000_ring *ring, int *work_done, 27755aa6985SBruce Allan int work_to_do) ____cacheline_aligned_in_smp; 27855aa6985SBruce Allan void (*alloc_rx_buf) (struct e1000_ring *ring, int cleaned_count, 27955aa6985SBruce Allan gfp_t gfp); 280dee1ad47SJeff Kirsher struct e1000_ring *rx_ring; 281dee1ad47SJeff Kirsher 282dee1ad47SJeff Kirsher u32 rx_int_delay; 283dee1ad47SJeff Kirsher u32 rx_abs_int_delay; 284dee1ad47SJeff Kirsher 285dee1ad47SJeff Kirsher /* Rx stats */ 286dee1ad47SJeff Kirsher u64 hw_csum_err; 287dee1ad47SJeff Kirsher u64 hw_csum_good; 288dee1ad47SJeff Kirsher u64 rx_hdr_split; 289dee1ad47SJeff Kirsher u32 gorc; 290dee1ad47SJeff Kirsher u64 gorc_old; 291dee1ad47SJeff Kirsher u32 alloc_rx_buff_failed; 292dee1ad47SJeff Kirsher u32 rx_dma_failed; 293b67e1913SBruce Allan u32 rx_hwtstamp_cleared; 294dee1ad47SJeff Kirsher 295dee1ad47SJeff Kirsher unsigned int rx_ps_pages; 296dee1ad47SJeff Kirsher u16 rx_ps_bsize0; 297dee1ad47SJeff Kirsher u32 max_frame_size; 298dee1ad47SJeff Kirsher u32 min_frame_size; 299dee1ad47SJeff Kirsher 300dee1ad47SJeff Kirsher /* OS defined structs */ 301dee1ad47SJeff Kirsher struct net_device *netdev; 302dee1ad47SJeff Kirsher struct pci_dev *pdev; 303dee1ad47SJeff Kirsher 304dee1ad47SJeff Kirsher /* structs defined in e1000_hw.h */ 305dee1ad47SJeff Kirsher struct e1000_hw hw; 306dee1ad47SJeff Kirsher 3079d57088bSBruce Allan spinlock_t stats64_lock; /* protects statistics counters */ 308dee1ad47SJeff Kirsher struct e1000_hw_stats stats; 309dee1ad47SJeff Kirsher struct e1000_phy_info phy_info; 310dee1ad47SJeff Kirsher struct e1000_phy_stats phy_stats; 311dee1ad47SJeff Kirsher 312dee1ad47SJeff Kirsher /* Snapshot of PHY registers */ 313dee1ad47SJeff Kirsher struct e1000_phy_regs phy_regs; 314dee1ad47SJeff Kirsher 315dee1ad47SJeff Kirsher struct e1000_ring test_tx_ring; 316dee1ad47SJeff Kirsher struct e1000_ring test_rx_ring; 317dee1ad47SJeff Kirsher u32 test_icr; 318dee1ad47SJeff Kirsher 319dee1ad47SJeff Kirsher u32 msg_enable; 320dee1ad47SJeff Kirsher unsigned int num_vectors; 321dee1ad47SJeff Kirsher struct msix_entry *msix_entries; 322dee1ad47SJeff Kirsher int int_mode; 323dee1ad47SJeff Kirsher u32 eiac_mask; 324dee1ad47SJeff Kirsher 325dee1ad47SJeff Kirsher u32 eeprom_wol; 326dee1ad47SJeff Kirsher u32 wol; 327dee1ad47SJeff Kirsher u32 pba; 328dee1ad47SJeff Kirsher u32 max_hw_frame_size; 329dee1ad47SJeff Kirsher 330dee1ad47SJeff Kirsher bool fc_autoneg; 331dee1ad47SJeff Kirsher 332dee1ad47SJeff Kirsher unsigned int flags; 333dee1ad47SJeff Kirsher unsigned int flags2; 334dee1ad47SJeff Kirsher struct work_struct downshift_task; 335dee1ad47SJeff Kirsher struct work_struct update_phy_task; 336dee1ad47SJeff Kirsher struct work_struct print_hang_task; 337dee1ad47SJeff Kirsher 338dee1ad47SJeff Kirsher bool idle_check; 339dee1ad47SJeff Kirsher int phy_hang_count; 34055aa6985SBruce Allan 34155aa6985SBruce Allan u16 tx_ring_count; 34255aa6985SBruce Allan u16 rx_ring_count; 343b67e1913SBruce Allan 344b67e1913SBruce Allan struct hwtstamp_config hwtstamp_config; 345b67e1913SBruce Allan struct delayed_work systim_overflow_work; 346b67e1913SBruce Allan struct sk_buff *tx_hwtstamp_skb; 347b67e1913SBruce Allan struct work_struct tx_hwtstamp_work; 348b67e1913SBruce Allan spinlock_t systim_lock; /* protects SYSTIML/H regsters */ 349b67e1913SBruce Allan struct cyclecounter cc; 350b67e1913SBruce Allan struct timecounter tc; 351d89777bfSBruce Allan struct ptp_clock *ptp_clock; 352d89777bfSBruce Allan struct ptp_clock_info ptp_clock_info; 353dee1ad47SJeff Kirsher }; 354dee1ad47SJeff Kirsher 355dee1ad47SJeff Kirsher struct e1000_info { 356dee1ad47SJeff Kirsher enum e1000_mac_type mac; 357dee1ad47SJeff Kirsher unsigned int flags; 358dee1ad47SJeff Kirsher unsigned int flags2; 359dee1ad47SJeff Kirsher u32 pba; 360dee1ad47SJeff Kirsher u32 max_hw_frame_size; 361dee1ad47SJeff Kirsher s32 (*get_variants)(struct e1000_adapter *); 3628ce9d6c7SJeff Kirsher const struct e1000_mac_operations *mac_ops; 3638ce9d6c7SJeff Kirsher const struct e1000_phy_operations *phy_ops; 3648ce9d6c7SJeff Kirsher const struct e1000_nvm_operations *nvm_ops; 365dee1ad47SJeff Kirsher }; 366dee1ad47SJeff Kirsher 367d89777bfSBruce Allan s32 e1000e_get_base_timinca(struct e1000_adapter *adapter, u32 *timinca); 368d89777bfSBruce Allan 369b67e1913SBruce Allan /* The system time is maintained by a 64-bit counter comprised of the 32-bit 370b67e1913SBruce Allan * SYSTIMH and SYSTIML registers. How the counter increments (and therefore 371b67e1913SBruce Allan * its resolution) is based on the contents of the TIMINCA register - it 372b67e1913SBruce Allan * increments every incperiod (bits 31:24) clock ticks by incvalue (bits 23:0). 373b67e1913SBruce Allan * For the best accuracy, the incperiod should be as small as possible. The 374b67e1913SBruce Allan * incvalue is scaled by a factor as large as possible (while still fitting 375b67e1913SBruce Allan * in bits 23:0) so that relatively small clock corrections can be made. 376b67e1913SBruce Allan * 377b67e1913SBruce Allan * As a result, a shift of INCVALUE_SHIFT_n is used to fit a value of 378b67e1913SBruce Allan * INCVALUE_n into the TIMINCA register allowing 32+8+(24-INCVALUE_SHIFT_n) 379b67e1913SBruce Allan * bits to count nanoseconds leaving the rest for fractional nonseconds. 380b67e1913SBruce Allan */ 381b67e1913SBruce Allan #define INCVALUE_96MHz 125 382b67e1913SBruce Allan #define INCVALUE_SHIFT_96MHz 17 383b67e1913SBruce Allan #define INCPERIOD_SHIFT_96MHz 2 384b67e1913SBruce Allan #define INCPERIOD_96MHz (12 >> INCPERIOD_SHIFT_96MHz) 385b67e1913SBruce Allan 386b67e1913SBruce Allan #define INCVALUE_25MHz 40 387b67e1913SBruce Allan #define INCVALUE_SHIFT_25MHz 18 388b67e1913SBruce Allan #define INCPERIOD_25MHz 1 389b67e1913SBruce Allan 390b67e1913SBruce Allan /* Another drawback of scaling the incvalue by a large factor is the 391b67e1913SBruce Allan * 64-bit SYSTIM register overflows more quickly. This is dealt with 392b67e1913SBruce Allan * by simply reading the clock before it overflows. 393b67e1913SBruce Allan * 394b67e1913SBruce Allan * Clock ns bits Overflows after 395b67e1913SBruce Allan * ~~~~~~ ~~~~~~~ ~~~~~~~~~~~~~~~ 396b67e1913SBruce Allan * 96MHz 47-bit 2^(47-INCPERIOD_SHIFT_96MHz) / 10^9 / 3600 = 9.77 hrs 397b67e1913SBruce Allan * 25MHz 46-bit 2^46 / 10^9 / 3600 = 19.55 hours 398b67e1913SBruce Allan */ 399b67e1913SBruce Allan #define E1000_SYSTIM_OVERFLOW_PERIOD (HZ * 60 * 60 * 4) 400b67e1913SBruce Allan 401dee1ad47SJeff Kirsher /* hardware capability, feature, and workaround flags */ 402dee1ad47SJeff Kirsher #define FLAG_HAS_AMT (1 << 0) 403dee1ad47SJeff Kirsher #define FLAG_HAS_FLASH (1 << 1) 404dee1ad47SJeff Kirsher #define FLAG_HAS_HW_VLAN_FILTER (1 << 2) 405dee1ad47SJeff Kirsher #define FLAG_HAS_WOL (1 << 3) 40679d4e908SBruce Allan /* reserved bit4 */ 407dee1ad47SJeff Kirsher #define FLAG_HAS_CTRLEXT_ON_LOAD (1 << 5) 408dee1ad47SJeff Kirsher #define FLAG_HAS_SWSM_ON_LOAD (1 << 6) 409dee1ad47SJeff Kirsher #define FLAG_HAS_JUMBO_FRAMES (1 << 7) 410dee1ad47SJeff Kirsher #define FLAG_READ_ONLY_NVM (1 << 8) 411dee1ad47SJeff Kirsher #define FLAG_IS_ICH (1 << 9) 412dee1ad47SJeff Kirsher #define FLAG_HAS_MSIX (1 << 10) 413dee1ad47SJeff Kirsher #define FLAG_HAS_SMART_POWER_DOWN (1 << 11) 414dee1ad47SJeff Kirsher #define FLAG_IS_QUAD_PORT_A (1 << 12) 415dee1ad47SJeff Kirsher #define FLAG_IS_QUAD_PORT (1 << 13) 416b67e1913SBruce Allan #define FLAG_HAS_HW_TIMESTAMP (1 << 14) 417dee1ad47SJeff Kirsher #define FLAG_APME_IN_WUC (1 << 15) 418dee1ad47SJeff Kirsher #define FLAG_APME_IN_CTRL3 (1 << 16) 419dee1ad47SJeff Kirsher #define FLAG_APME_CHECK_PORT_B (1 << 17) 420dee1ad47SJeff Kirsher #define FLAG_DISABLE_FC_PAUSE_TIME (1 << 18) 421dee1ad47SJeff Kirsher #define FLAG_NO_WAKE_UCAST (1 << 19) 422dee1ad47SJeff Kirsher #define FLAG_MNG_PT_ENABLED (1 << 20) 423dee1ad47SJeff Kirsher #define FLAG_RESET_OVERWRITES_LAA (1 << 21) 424dee1ad47SJeff Kirsher #define FLAG_TARC_SPEED_MODE_BIT (1 << 22) 425dee1ad47SJeff Kirsher #define FLAG_TARC_SET_BIT_ZERO (1 << 23) 426dee1ad47SJeff Kirsher #define FLAG_RX_NEEDS_RESTART (1 << 24) 427dee1ad47SJeff Kirsher #define FLAG_LSC_GIG_SPEED_DROP (1 << 25) 428dee1ad47SJeff Kirsher #define FLAG_SMART_POWER_DOWN (1 << 26) 429dee1ad47SJeff Kirsher #define FLAG_MSI_ENABLED (1 << 27) 430dc221294SBruce Allan /* reserved (1 << 28) */ 431dee1ad47SJeff Kirsher #define FLAG_TSO_FORCE (1 << 29) 43212d43f7dSBruce Allan #define FLAG_RESTART_NOW (1 << 30) 433dee1ad47SJeff Kirsher #define FLAG_MSI_TEST_FAILED (1 << 31) 434dee1ad47SJeff Kirsher 435dee1ad47SJeff Kirsher #define FLAG2_CRC_STRIPPING (1 << 0) 436dee1ad47SJeff Kirsher #define FLAG2_HAS_PHY_WAKEUP (1 << 1) 437dee1ad47SJeff Kirsher #define FLAG2_IS_DISCARDING (1 << 2) 438dee1ad47SJeff Kirsher #define FLAG2_DISABLE_ASPM_L1 (1 << 3) 439dee1ad47SJeff Kirsher #define FLAG2_HAS_PHY_STATS (1 << 4) 440dee1ad47SJeff Kirsher #define FLAG2_HAS_EEE (1 << 5) 441dee1ad47SJeff Kirsher #define FLAG2_DMA_BURST (1 << 6) 442dee1ad47SJeff Kirsher #define FLAG2_DISABLE_ASPM_L0S (1 << 7) 443dee1ad47SJeff Kirsher #define FLAG2_DISABLE_AIM (1 << 8) 444dee1ad47SJeff Kirsher #define FLAG2_CHECK_PHY_HANG (1 << 9) 445823dcd25SDavid S. Miller #define FLAG2_NO_DISABLE_RX (1 << 10) 446823dcd25SDavid S. Miller #define FLAG2_PCIM2PCI_ARBITER_WA (1 << 11) 4470184039aSBen Greear #define FLAG2_DFLT_CRC_STRIPPING (1 << 12) 448b67e1913SBruce Allan #define FLAG2_CHECK_RX_HWTSTAMP (1 << 13) 449dee1ad47SJeff Kirsher 450dee1ad47SJeff Kirsher #define E1000_RX_DESC_PS(R, i) \ 451dee1ad47SJeff Kirsher (&(((union e1000_rx_desc_packet_split *)((R).desc))[i])) 4525f450212SBruce Allan #define E1000_RX_DESC_EXT(R, i) \ 4535f450212SBruce Allan (&(((union e1000_rx_desc_extended *)((R).desc))[i])) 454dee1ad47SJeff Kirsher #define E1000_GET_DESC(R, i, type) (&(((struct type *)((R).desc))[i])) 455dee1ad47SJeff Kirsher #define E1000_TX_DESC(R, i) E1000_GET_DESC(R, i, e1000_tx_desc) 456dee1ad47SJeff Kirsher #define E1000_CONTEXT_DESC(R, i) E1000_GET_DESC(R, i, e1000_context_desc) 457dee1ad47SJeff Kirsher 458dee1ad47SJeff Kirsher enum e1000_state_t { 459dee1ad47SJeff Kirsher __E1000_TESTING, 460dee1ad47SJeff Kirsher __E1000_RESETTING, 461a90b412cSBruce Allan __E1000_ACCESS_SHARED_RESOURCE, 462dee1ad47SJeff Kirsher __E1000_DOWN 463dee1ad47SJeff Kirsher }; 464dee1ad47SJeff Kirsher 465dee1ad47SJeff Kirsher enum latency_range { 466dee1ad47SJeff Kirsher lowest_latency = 0, 467dee1ad47SJeff Kirsher low_latency = 1, 468dee1ad47SJeff Kirsher bulk_latency = 2, 469dee1ad47SJeff Kirsher latency_invalid = 255 470dee1ad47SJeff Kirsher }; 471dee1ad47SJeff Kirsher 472dee1ad47SJeff Kirsher extern char e1000e_driver_name[]; 473dee1ad47SJeff Kirsher extern const char e1000e_driver_version[]; 474dee1ad47SJeff Kirsher 475dee1ad47SJeff Kirsher extern void e1000e_check_options(struct e1000_adapter *adapter); 476dee1ad47SJeff Kirsher extern void e1000e_set_ethtool_ops(struct net_device *netdev); 477dee1ad47SJeff Kirsher 478dee1ad47SJeff Kirsher extern int e1000e_up(struct e1000_adapter *adapter); 479dee1ad47SJeff Kirsher extern void e1000e_down(struct e1000_adapter *adapter); 480dee1ad47SJeff Kirsher extern void e1000e_reinit_locked(struct e1000_adapter *adapter); 481dee1ad47SJeff Kirsher extern void e1000e_reset(struct e1000_adapter *adapter); 482dee1ad47SJeff Kirsher extern void e1000e_power_up_phy(struct e1000_adapter *adapter); 48355aa6985SBruce Allan extern int e1000e_setup_rx_resources(struct e1000_ring *ring); 48455aa6985SBruce Allan extern int e1000e_setup_tx_resources(struct e1000_ring *ring); 48555aa6985SBruce Allan extern void e1000e_free_rx_resources(struct e1000_ring *ring); 48655aa6985SBruce Allan extern void e1000e_free_tx_resources(struct e1000_ring *ring); 487dee1ad47SJeff Kirsher extern struct rtnl_link_stats64 *e1000e_get_stats64(struct net_device *netdev, 488dee1ad47SJeff Kirsher struct rtnl_link_stats64 489dee1ad47SJeff Kirsher *stats); 490dee1ad47SJeff Kirsher extern void e1000e_set_interrupt_capability(struct e1000_adapter *adapter); 491dee1ad47SJeff Kirsher extern void e1000e_reset_interrupt_capability(struct e1000_adapter *adapter); 492dee1ad47SJeff Kirsher extern void e1000e_get_hw_control(struct e1000_adapter *adapter); 493dee1ad47SJeff Kirsher extern void e1000e_release_hw_control(struct e1000_adapter *adapter); 49422a4cca2SMatthew Vick extern void e1000e_write_itr(struct e1000_adapter *adapter, u32 itr); 495dee1ad47SJeff Kirsher 496dee1ad47SJeff Kirsher extern unsigned int copybreak; 497dee1ad47SJeff Kirsher 4988ce9d6c7SJeff Kirsher extern const struct e1000_info e1000_82571_info; 4998ce9d6c7SJeff Kirsher extern const struct e1000_info e1000_82572_info; 5008ce9d6c7SJeff Kirsher extern const struct e1000_info e1000_82573_info; 5018ce9d6c7SJeff Kirsher extern const struct e1000_info e1000_82574_info; 5028ce9d6c7SJeff Kirsher extern const struct e1000_info e1000_82583_info; 5038ce9d6c7SJeff Kirsher extern const struct e1000_info e1000_ich8_info; 5048ce9d6c7SJeff Kirsher extern const struct e1000_info e1000_ich9_info; 5058ce9d6c7SJeff Kirsher extern const struct e1000_info e1000_ich10_info; 5068ce9d6c7SJeff Kirsher extern const struct e1000_info e1000_pch_info; 5078ce9d6c7SJeff Kirsher extern const struct e1000_info e1000_pch2_info; 5082fbe4526SBruce Allan extern const struct e1000_info e1000_pch_lpt_info; 5098ce9d6c7SJeff Kirsher extern const struct e1000_info e1000_es2_info; 510dee1ad47SJeff Kirsher 511d89777bfSBruce Allan extern void e1000e_ptp_init(struct e1000_adapter *adapter); 512d89777bfSBruce Allan extern void e1000e_ptp_remove(struct e1000_adapter *adapter); 513dee1ad47SJeff Kirsher 514dee1ad47SJeff Kirsher static inline s32 e1000_phy_hw_reset(struct e1000_hw *hw) 515dee1ad47SJeff Kirsher { 516dee1ad47SJeff Kirsher return hw->phy.ops.reset(hw); 517dee1ad47SJeff Kirsher } 518dee1ad47SJeff Kirsher 519dee1ad47SJeff Kirsher static inline s32 e1e_rphy(struct e1000_hw *hw, u32 offset, u16 *data) 520dee1ad47SJeff Kirsher { 521dee1ad47SJeff Kirsher return hw->phy.ops.read_reg(hw, offset, data); 522dee1ad47SJeff Kirsher } 523dee1ad47SJeff Kirsher 524f1430d69SBruce Allan static inline s32 e1e_rphy_locked(struct e1000_hw *hw, u32 offset, u16 *data) 525f1430d69SBruce Allan { 526f1430d69SBruce Allan return hw->phy.ops.read_reg_locked(hw, offset, data); 527f1430d69SBruce Allan } 528f1430d69SBruce Allan 529dee1ad47SJeff Kirsher static inline s32 e1e_wphy(struct e1000_hw *hw, u32 offset, u16 data) 530dee1ad47SJeff Kirsher { 531dee1ad47SJeff Kirsher return hw->phy.ops.write_reg(hw, offset, data); 532dee1ad47SJeff Kirsher } 533dee1ad47SJeff Kirsher 534f1430d69SBruce Allan static inline s32 e1e_wphy_locked(struct e1000_hw *hw, u32 offset, u16 data) 535f1430d69SBruce Allan { 536f1430d69SBruce Allan return hw->phy.ops.write_reg_locked(hw, offset, data); 537f1430d69SBruce Allan } 538f1430d69SBruce Allan 539e85e3639SBruce Allan extern void e1000e_reload_nvm_generic(struct e1000_hw *hw); 540dee1ad47SJeff Kirsher 541dee1ad47SJeff Kirsher static inline s32 e1000e_read_mac_addr(struct e1000_hw *hw) 542dee1ad47SJeff Kirsher { 543dee1ad47SJeff Kirsher if (hw->mac.ops.read_mac_addr) 544dee1ad47SJeff Kirsher return hw->mac.ops.read_mac_addr(hw); 545dee1ad47SJeff Kirsher 546dee1ad47SJeff Kirsher return e1000_read_mac_addr_generic(hw); 547dee1ad47SJeff Kirsher } 548dee1ad47SJeff Kirsher 549dee1ad47SJeff Kirsher static inline s32 e1000_validate_nvm_checksum(struct e1000_hw *hw) 550dee1ad47SJeff Kirsher { 551dee1ad47SJeff Kirsher return hw->nvm.ops.validate(hw); 552dee1ad47SJeff Kirsher } 553dee1ad47SJeff Kirsher 554dee1ad47SJeff Kirsher static inline s32 e1000e_update_nvm_checksum(struct e1000_hw *hw) 555dee1ad47SJeff Kirsher { 556dee1ad47SJeff Kirsher return hw->nvm.ops.update(hw); 557dee1ad47SJeff Kirsher } 558dee1ad47SJeff Kirsher 559c29c3ba5SBruce Allan static inline s32 e1000_read_nvm(struct e1000_hw *hw, u16 offset, u16 words, 560c29c3ba5SBruce Allan u16 *data) 561dee1ad47SJeff Kirsher { 562dee1ad47SJeff Kirsher return hw->nvm.ops.read(hw, offset, words, data); 563dee1ad47SJeff Kirsher } 564dee1ad47SJeff Kirsher 565c29c3ba5SBruce Allan static inline s32 e1000_write_nvm(struct e1000_hw *hw, u16 offset, u16 words, 566c29c3ba5SBruce Allan u16 *data) 567dee1ad47SJeff Kirsher { 568dee1ad47SJeff Kirsher return hw->nvm.ops.write(hw, offset, words, data); 569dee1ad47SJeff Kirsher } 570dee1ad47SJeff Kirsher 571dee1ad47SJeff Kirsher static inline s32 e1000_get_phy_info(struct e1000_hw *hw) 572dee1ad47SJeff Kirsher { 573dee1ad47SJeff Kirsher return hw->phy.ops.get_info(hw); 574dee1ad47SJeff Kirsher } 575dee1ad47SJeff Kirsher 576dee1ad47SJeff Kirsher static inline u32 __er32(struct e1000_hw *hw, unsigned long reg) 577dee1ad47SJeff Kirsher { 578dee1ad47SJeff Kirsher return readl(hw->hw_addr + reg); 579dee1ad47SJeff Kirsher } 580dee1ad47SJeff Kirsher 581bdc125f7SBruce Allan #define er32(reg) __er32(hw, E1000_##reg) 582bdc125f7SBruce Allan 583bdc125f7SBruce Allan /** 584bdc125f7SBruce Allan * __ew32_prepare - prepare to write to MAC CSR register on certain parts 585bdc125f7SBruce Allan * @hw: pointer to the HW structure 586bdc125f7SBruce Allan * 587bdc125f7SBruce Allan * When updating the MAC CSR registers, the Manageability Engine (ME) could 588bdc125f7SBruce Allan * be accessing the registers at the same time. Normally, this is handled in 589bdc125f7SBruce Allan * h/w by an arbiter but on some parts there is a bug that acknowledges Host 590bdc125f7SBruce Allan * accesses later than it should which could result in the register to have 591bdc125f7SBruce Allan * an incorrect value. Workaround this by checking the FWSM register which 592bdc125f7SBruce Allan * has bit 24 set while ME is accessing MAC CSR registers, wait if it is set 593bdc125f7SBruce Allan * and try again a number of times. 594bdc125f7SBruce Allan **/ 595bdc125f7SBruce Allan static inline s32 __ew32_prepare(struct e1000_hw *hw) 596bdc125f7SBruce Allan { 597bdc125f7SBruce Allan s32 i = E1000_ICH_FWSM_PCIM2PCI_COUNT; 598bdc125f7SBruce Allan 599bdc125f7SBruce Allan while ((er32(FWSM) & E1000_ICH_FWSM_PCIM2PCI) && --i) 600bdc125f7SBruce Allan udelay(50); 601bdc125f7SBruce Allan 602bdc125f7SBruce Allan return i; 603bdc125f7SBruce Allan } 604bdc125f7SBruce Allan 605dee1ad47SJeff Kirsher static inline void __ew32(struct e1000_hw *hw, unsigned long reg, u32 val) 606dee1ad47SJeff Kirsher { 607bdc125f7SBruce Allan if (hw->adapter->flags2 & FLAG2_PCIM2PCI_ARBITER_WA) 608bdc125f7SBruce Allan __ew32_prepare(hw); 609bdc125f7SBruce Allan 610dee1ad47SJeff Kirsher writel(val, hw->hw_addr + reg); 611dee1ad47SJeff Kirsher } 612dee1ad47SJeff Kirsher 613bdc125f7SBruce Allan #define ew32(reg, val) __ew32(hw, E1000_##reg, (val)) 614bdc125f7SBruce Allan 615bdc125f7SBruce Allan #define e1e_flush() er32(STATUS) 616bdc125f7SBruce Allan 617bdc125f7SBruce Allan #define E1000_WRITE_REG_ARRAY(a, reg, offset, value) \ 618bdc125f7SBruce Allan (__ew32((a), (reg + ((offset) << 2)), (value))) 619bdc125f7SBruce Allan 620bdc125f7SBruce Allan #define E1000_READ_REG_ARRAY(a, reg, offset) \ 621bdc125f7SBruce Allan (readl((a)->hw_addr + reg + ((offset) << 2))) 622bdc125f7SBruce Allan 623dee1ad47SJeff Kirsher #endif /* _E1000_H_ */ 624