e1000.h 17.6 KB
Newer Older
1
/* Intel PRO/1000 Linux driver
2
 * Copyright(c) 1999 - 2015 Intel Corporation.
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
 *
 * 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.
 *
 * The full GNU General Public License is included in this distribution in
 * the file called "COPYING".
 *
 * Contact Information:
 * Linux NICS <linux.nics@intel.com>
 * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
 */
21 22 23 24 25 26

/* Linux PRO/1000 Ethernet Driver main header file */

#ifndef _E1000_H_
#define _E1000_H_

J
Jeff Kirsher 已提交
27
#include <linux/bitops.h>
28 29 30 31 32
#include <linux/types.h>
#include <linux/timer.h>
#include <linux/workqueue.h>
#include <linux/io.h>
#include <linux/netdevice.h>
B
Bruce Allan 已提交
33
#include <linux/pci.h>
34
#include <linux/pci-aspm.h>
35
#include <linux/crc32.h>
J
Jeff Kirsher 已提交
36
#include <linux/if_vlan.h>
37
#include <linux/timecounter.h>
38
#include <linux/net_tstamp.h>
39 40
#include <linux/ptp_clock_kernel.h>
#include <linux/ptp_classify.h>
41
#include <linux/mii.h>
42
#include <linux/mdio.h>
D
David Ahern 已提交
43
#include <linux/pm_qos.h>
44 45 46 47
#include "hw.h"

struct e1000_info;

48
#define e_dbg(format, arg...) \
49
	netdev_dbg(hw->adapter->netdev, format, ## arg)
50
#define e_err(format, arg...) \
51
	netdev_err(adapter->netdev, format, ## arg)
52
#define e_info(format, arg...) \
53
	netdev_info(adapter->netdev, format, ## arg)
54
#define e_warn(format, arg...) \
55
	netdev_warn(adapter->netdev, format, ## arg)
56
#define e_notice(format, arg...) \
57
	netdev_notice(adapter->netdev, format, ## arg)
58

59
/* Interrupt modes, as used by the IntMode parameter */
60 61 62 63
#define E1000E_INT_MODE_LEGACY		0
#define E1000E_INT_MODE_MSI		1
#define E1000E_INT_MODE_MSIX		2

64
/* Tx/Rx descriptor defines */
65 66
#define E1000_DEFAULT_TXD		256
#define E1000_MAX_TXD			4096
A
Auke Kok 已提交
67
#define E1000_MIN_TXD			64
68 69 70

#define E1000_DEFAULT_RXD		256
#define E1000_MAX_RXD			4096
A
Auke Kok 已提交
71
#define E1000_MIN_RXD			64
72

73 74 75
#define E1000_MIN_ITR_USECS		10 /* 100000 irq/sec */
#define E1000_MAX_ITR_USECS		10000 /* 100    irq/sec */

76 77 78 79 80 81 82 83 84 85 86
#define E1000_FC_PAUSE_TIME		0x0680 /* 858 usec */

/* How many Tx Descriptors do we need to call netif_wake_queue ? */
/* How many Rx Buffers do we bundle into one write to the hardware ? */
#define E1000_RX_BUFFER_WRITE		16 /* Must be power of 2 */

#define AUTO_ALL_MODES			0
#define E1000_EEPROM_APME		0x0400

#define E1000_MNG_VLAN_NONE		(-1)

87 88
#define DEFAULT_JUMBO			9234

89 90 91
/* Time to wait before putting the device into D3 if there's no link (in ms). */
#define LINK_TIMEOUT		100

B
Bruce Allan 已提交
92
/* Count for polling __E1000_RESET condition every 10-20msec.
93 94 95 96
 * Experimentation has shown the reset can take approximately 210msec.
 */
#define E1000_CHECK_RESET_COUNT		25

97 98 99 100
#define DEFAULT_RDTR			0
#define DEFAULT_RADV			8
#define BURST_RDTR			0x20
#define BURST_RADV			0x20
101 102
#define PCICFG_DESC_RING_STATUS		0xe4
#define FLUSH_DESC_REQUIRED		0x100
103

B
Bruce Allan 已提交
104
/* in the case of WTHRESH, it appears at least the 82571/2 hardware
105
 * writes back 4 descriptors when WTHRESH=5, and 3 descriptors when
106 107
 * WTHRESH=4, so a setting of 5 gives the most efficient bus
 * utilization but to avoid possible Tx stalls, set it to 1
108 109 110 111
 */
#define E1000_TXDCTL_DMA_BURST_ENABLE                          \
	(E1000_TXDCTL_GRAN | /* set descriptor granularity */  \
	 E1000_TXDCTL_COUNT_DESC |                             \
112
	 (1 << 16) | /* wthresh must be +1 more than desired */\
113 114 115 116 117 118 119 120 121 122 123 124
	 (1 << 8)  | /* hthresh */                             \
	 0x1f)       /* pthresh */

#define E1000_RXDCTL_DMA_BURST_ENABLE                          \
	(0x01000000 | /* set descriptor granularity */         \
	 (4 << 16)  | /* set writeback threshold    */         \
	 (4 << 8)   | /* set prefetch threshold     */         \
	 0x20)        /* set hthresh                */

#define E1000_TIDV_FPD (1 << 31)
#define E1000_RDTR_FPD (1 << 31)

125 126 127 128
enum e1000_boards {
	board_82571,
	board_82572,
	board_82573,
129
	board_82574,
130
	board_82583,
131 132 133
	board_80003es2lan,
	board_ich8lan,
	board_ich9lan,
134
	board_ich10lan,
135
	board_pchlan,
136
	board_pch2lan,
B
Bruce Allan 已提交
137
	board_pch_lpt,
D
David Ertman 已提交
138
	board_pch_spt
139 140 141 142 143 144 145
};

struct e1000_ps_page {
	struct page *page;
	u64 dma; /* must be u64 - written to hw */
};

B
Bruce Allan 已提交
146
/* wrappers around a pointer to a socket buffer,
147 148 149 150 151 152
 * so a DMA handle can be stored along with the buffer
 */
struct e1000_buffer {
	dma_addr_t dma;
	struct sk_buff *skb;
	union {
153
		/* Tx */
154 155 156 157
		struct {
			unsigned long time_stamp;
			u16 length;
			u16 next_to_watch;
158 159
			unsigned int segs;
			unsigned int bytecount;
160
			u16 mapped_as_page;
161
		};
162
		/* Rx */
163 164 165 166 167
		struct {
			/* arrays of page information for packet split */
			struct e1000_ps_page *ps_pages;
			struct page *page;
		};
168 169 170 171
	};
};

struct e1000_ring {
172
	struct e1000_adapter *adapter;	/* back pointer to adapter */
173 174 175 176 177 178 179 180
	void *desc;			/* pointer to ring memory  */
	dma_addr_t dma;			/* phys address of ring    */
	unsigned int size;		/* length of ring in bytes */
	unsigned int count;		/* number of desc. in ring */

	u16 next_to_use;
	u16 next_to_clean;

181 182
	void __iomem *head;
	void __iomem *tail;
183 184 185 186

	/* array of buffer information structs */
	struct e1000_buffer *buffer_info;

187 188 189
	char name[IFNAMSIZ + 5];
	u32 ims_val;
	u32 itr_val;
190
	void __iomem *itr_register;
191 192
	int set_itr;

193 194 195
	struct sk_buff *rx_skb_top;
};

196 197 198 199 200 201 202 203 204 205 206 207
/* PHY register snapshot values */
struct e1000_phy_regs {
	u16 bmcr;		/* basic mode control register    */
	u16 bmsr;		/* basic mode status register     */
	u16 advertise;		/* auto-negotiation advertisement */
	u16 lpa;		/* link partner ability register  */
	u16 expansion;		/* auto-negotiation expansion reg */
	u16 ctrl1000;		/* 1000BASE-T control register    */
	u16 stat1000;		/* 1000BASE-T status register     */
	u16 estatus;		/* extended status register       */
};

208 209 210 211 212 213 214 215 216 217 218
/* board specific private data structure */
struct e1000_adapter {
	struct timer_list watchdog_timer;
	struct timer_list phy_info_timer;
	struct timer_list blink_timer;

	struct work_struct reset_task;
	struct work_struct watchdog_task;

	const struct e1000_info *ei;

J
Jeff Kirsher 已提交
219
	unsigned long active_vlans[BITS_TO_LONGS(VLAN_N_VID)];
220 221 222 223 224
	u32 bd_number;
	u32 rx_buffer_len;
	u16 mng_vlan_id;
	u16 link_speed;
	u16 link_duplex;
225
	u16 eeprom_vers;
226 227 228 229 230 231 232 233 234 235

	/* track device up/down/testing state */
	unsigned long state;

	/* Interrupt Throttle Rate */
	u32 itr;
	u32 itr_setting;
	u16 tx_itr;
	u16 rx_itr;

236 237
	/* Tx - one ring per active queue */
	struct e1000_ring *tx_ring ____cacheline_aligned_in_smp;
238
	u32 tx_fifo_limit;
239 240 241

	struct napi_struct napi;

242 243
	unsigned int uncorr_errors;	/* uncorrectable ECC errors */
	unsigned int corr_errors;	/* correctable ECC errors */
244 245 246 247
	unsigned int restart_queue;
	u32 txd_cmd;

	bool detect_tx_hung;
248
	bool tx_hang_recheck;
249 250 251 252 253 254 255 256 257 258
	u8 tx_timeout_factor;

	u32 tx_int_delay;
	u32 tx_abs_int_delay;

	unsigned int total_tx_bytes;
	unsigned int total_tx_packets;
	unsigned int total_rx_bytes;
	unsigned int total_rx_packets;

259
	/* Tx stats */
260 261
	u64 tpt_old;
	u64 colc_old;
262 263
	u32 gotc;
	u64 gotc_old;
264 265 266 267 268
	u32 tx_timeout_count;
	u32 tx_fifo_head;
	u32 tx_head_addr;
	u32 tx_fifo_size;
	u32 tx_dma_failed;
269
	u32 tx_hwtstamp_timeouts;
270

B
Bruce Allan 已提交
271
	/* Rx */
272 273 274 275
	bool (*clean_rx)(struct e1000_ring *ring, int *work_done,
			 int work_to_do) ____cacheline_aligned_in_smp;
	void (*alloc_rx_buf)(struct e1000_ring *ring, int cleaned_count,
			     gfp_t gfp);
276 277 278 279 280
	struct e1000_ring *rx_ring;

	u32 rx_int_delay;
	u32 rx_abs_int_delay;

281
	/* Rx stats */
282 283 284
	u64 hw_csum_err;
	u64 hw_csum_good;
	u64 rx_hdr_split;
285 286
	u32 gorc;
	u64 gorc_old;
287 288
	u32 alloc_rx_buff_failed;
	u32 rx_dma_failed;
289
	u32 rx_hwtstamp_cleared;
290 291 292

	unsigned int rx_ps_pages;
	u16 rx_ps_bsize0;
293 294
	u32 max_frame_size;
	u32 min_frame_size;
295 296 297 298 299 300 301 302

	/* OS defined structs */
	struct net_device *netdev;
	struct pci_dev *pdev;

	/* structs defined in e1000_hw.h */
	struct e1000_hw hw;

303
	spinlock_t stats64_lock;	/* protects statistics counters */
304 305 306 307
	struct e1000_hw_stats stats;
	struct e1000_phy_info phy_info;
	struct e1000_phy_stats phy_stats;

308 309 310
	/* Snapshot of PHY registers */
	struct e1000_phy_regs phy_regs;

311 312 313 314 315
	struct e1000_ring test_tx_ring;
	struct e1000_ring test_rx_ring;
	u32 test_icr;

	u32 msg_enable;
316
	unsigned int num_vectors;
317 318 319
	struct msix_entry *msix_entries;
	int int_mode;
	u32 eiac_mask;
320 321 322 323

	u32 eeprom_wol;
	u32 wol;
	u32 pba;
324
	u32 max_hw_frame_size;
325

326
	bool fc_autoneg;
327 328

	unsigned int flags;
J
Jeff Kirsher 已提交
329
	unsigned int flags2;
330 331
	struct work_struct downshift_task;
	struct work_struct update_phy_task;
332
	struct work_struct print_hang_task;
333

334
	int phy_hang_count;
335 336 337

	u16 tx_ring_count;
	u16 rx_ring_count;
338 339 340 341

	struct hwtstamp_config hwtstamp_config;
	struct delayed_work systim_overflow_work;
	struct sk_buff *tx_hwtstamp_skb;
342
	unsigned long tx_hwtstamp_start;
343 344 345 346
	struct work_struct tx_hwtstamp_work;
	spinlock_t systim_lock;	/* protects SYSTIML/H regsters */
	struct cyclecounter cc;
	struct timecounter tc;
347 348
	struct ptp_clock *ptp_clock;
	struct ptp_clock_info ptp_clock_info;
349
	struct pm_qos_request pm_qos_req;
350 351

	u16 eee_advert;
352 353 354 355 356
};

struct e1000_info {
	enum e1000_mac_type	mac;
	unsigned int		flags;
357
	unsigned int		flags2;
358
	u32			pba;
359
	u32			max_hw_frame_size;
J
Jeff Kirsher 已提交
360
	s32			(*get_variants)(struct e1000_adapter *);
J
Jeff Kirsher 已提交
361 362 363
	const struct e1000_mac_operations *mac_ops;
	const struct e1000_phy_operations *phy_ops;
	const struct e1000_nvm_operations *nvm_ops;
364 365
};

366 367
s32 e1000e_get_base_timinca(struct e1000_adapter *adapter, u32 *timinca);

368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388
/* The system time is maintained by a 64-bit counter comprised of the 32-bit
 * SYSTIMH and SYSTIML registers.  How the counter increments (and therefore
 * its resolution) is based on the contents of the TIMINCA register - it
 * increments every incperiod (bits 31:24) clock ticks by incvalue (bits 23:0).
 * For the best accuracy, the incperiod should be as small as possible.  The
 * incvalue is scaled by a factor as large as possible (while still fitting
 * in bits 23:0) so that relatively small clock corrections can be made.
 *
 * As a result, a shift of INCVALUE_SHIFT_n is used to fit a value of
 * INCVALUE_n into the TIMINCA register allowing 32+8+(24-INCVALUE_SHIFT_n)
 * bits to count nanoseconds leaving the rest for fractional nonseconds.
 */
#define INCVALUE_96MHz		125
#define INCVALUE_SHIFT_96MHz	17
#define INCPERIOD_SHIFT_96MHz	2
#define INCPERIOD_96MHz		(12 >> INCPERIOD_SHIFT_96MHz)

#define INCVALUE_25MHz		40
#define INCVALUE_SHIFT_25MHz	18
#define INCPERIOD_25MHz		1

Y
Yanir Lubetkin 已提交
389 390 391 392
#define INCVALUE_24MHz		125
#define INCVALUE_SHIFT_24MHz	14
#define INCPERIOD_24MHz		3

393 394 395 396 397 398 399 400 401 402
/* Another drawback of scaling the incvalue by a large factor is the
 * 64-bit SYSTIM register overflows more quickly.  This is dealt with
 * by simply reading the clock before it overflows.
 *
 * Clock	ns bits	Overflows after
 * ~~~~~~	~~~~~~~	~~~~~~~~~~~~~~~
 * 96MHz	47-bit	2^(47-INCPERIOD_SHIFT_96MHz) / 10^9 / 3600 = 9.77 hrs
 * 25MHz	46-bit	2^46 / 10^9 / 3600 = 19.55 hours
 */
#define E1000_SYSTIM_OVERFLOW_PERIOD	(HZ * 60 * 60 * 4)
403 404
#define E1000_MAX_82574_SYSTIM_REREADS	50
#define E1000_82574_SYSTIM_EPSILON	(1ULL << 35ULL)
405

406 407 408 409 410
/* hardware capability, feature, and workaround flags */
#define FLAG_HAS_AMT                      (1 << 0)
#define FLAG_HAS_FLASH                    (1 << 1)
#define FLAG_HAS_HW_VLAN_FILTER           (1 << 2)
#define FLAG_HAS_WOL                      (1 << 3)
411
/* reserved bit4 */
412 413 414
#define FLAG_HAS_CTRLEXT_ON_LOAD          (1 << 5)
#define FLAG_HAS_SWSM_ON_LOAD             (1 << 6)
#define FLAG_HAS_JUMBO_FRAMES             (1 << 7)
415
#define FLAG_READ_ONLY_NVM                (1 << 8)
416
#define FLAG_IS_ICH                       (1 << 9)
417
#define FLAG_HAS_MSIX                     (1 << 10)
418 419 420
#define FLAG_HAS_SMART_POWER_DOWN         (1 << 11)
#define FLAG_IS_QUAD_PORT_A               (1 << 12)
#define FLAG_IS_QUAD_PORT                 (1 << 13)
421
#define FLAG_HAS_HW_TIMESTAMP             (1 << 14)
422 423 424 425 426 427 428 429 430 431 432 433 434
#define FLAG_APME_IN_WUC                  (1 << 15)
#define FLAG_APME_IN_CTRL3                (1 << 16)
#define FLAG_APME_CHECK_PORT_B            (1 << 17)
#define FLAG_DISABLE_FC_PAUSE_TIME        (1 << 18)
#define FLAG_NO_WAKE_UCAST                (1 << 19)
#define FLAG_MNG_PT_ENABLED               (1 << 20)
#define FLAG_RESET_OVERWRITES_LAA         (1 << 21)
#define FLAG_TARC_SPEED_MODE_BIT          (1 << 22)
#define FLAG_TARC_SET_BIT_ZERO            (1 << 23)
#define FLAG_RX_NEEDS_RESTART             (1 << 24)
#define FLAG_LSC_GIG_SPEED_DROP           (1 << 25)
#define FLAG_SMART_POWER_DOWN             (1 << 26)
#define FLAG_MSI_ENABLED                  (1 << 27)
435
/* reserved (1 << 28) */
436
#define FLAG_TSO_FORCE                    (1 << 29)
437
#define FLAG_RESTART_NOW                  (1 << 30)
438
#define FLAG_MSI_TEST_FAILED              (1 << 31)
439

J
Jeff Kirsher 已提交
440
#define FLAG2_CRC_STRIPPING               (1 << 0)
441
#define FLAG2_HAS_PHY_WAKEUP              (1 << 1)
442
#define FLAG2_IS_DISCARDING               (1 << 2)
443
#define FLAG2_DISABLE_ASPM_L1             (1 << 3)
444
#define FLAG2_HAS_PHY_STATS               (1 << 4)
445
#define FLAG2_HAS_EEE                     (1 << 5)
446
#define FLAG2_DMA_BURST                   (1 << 6)
447
#define FLAG2_DISABLE_ASPM_L0S            (1 << 7)
448
#define FLAG2_DISABLE_AIM                 (1 << 8)
449
#define FLAG2_CHECK_PHY_HANG              (1 << 9)
450
#define FLAG2_NO_DISABLE_RX               (1 << 10)
451
#define FLAG2_PCIM2PCI_ARBITER_WA         (1 << 11)
B
Ben Greear 已提交
452
#define FLAG2_DFLT_CRC_STRIPPING          (1 << 12)
453
#define FLAG2_CHECK_RX_HWTSTAMP           (1 << 13)
J
Jeff Kirsher 已提交
454

455 456
#define E1000_RX_DESC_PS(R, i)	    \
	(&(((union e1000_rx_desc_packet_split *)((R).desc))[i]))
457 458
#define E1000_RX_DESC_EXT(R, i)	    \
	(&(((union e1000_rx_desc_extended *)((R).desc))[i]))
459 460 461 462 463 464 465
#define E1000_GET_DESC(R, i, type)	(&(((struct type *)((R).desc))[i]))
#define E1000_TX_DESC(R, i)		E1000_GET_DESC(R, i, e1000_tx_desc)
#define E1000_CONTEXT_DESC(R, i)	E1000_GET_DESC(R, i, e1000_context_desc)

enum e1000_state_t {
	__E1000_TESTING,
	__E1000_RESETTING,
466
	__E1000_ACCESS_SHARED_RESOURCE,
467 468 469 470 471 472 473 474 475 476 477 478 479
	__E1000_DOWN
};

enum latency_range {
	lowest_latency = 0,
	low_latency = 1,
	bulk_latency = 2,
	latency_invalid = 255
};

extern char e1000e_driver_name[];
extern const char e1000e_driver_version[];

480 481 482
void e1000e_check_options(struct e1000_adapter *adapter);
void e1000e_set_ethtool_ops(struct net_device *netdev);

483
void e1000e_up(struct e1000_adapter *adapter);
D
David Ertman 已提交
484
void e1000e_down(struct e1000_adapter *adapter, bool reset);
485 486 487 488 489 490 491 492 493 494 495 496 497 498
void e1000e_reinit_locked(struct e1000_adapter *adapter);
void e1000e_reset(struct e1000_adapter *adapter);
void e1000e_power_up_phy(struct e1000_adapter *adapter);
int e1000e_setup_rx_resources(struct e1000_ring *ring);
int e1000e_setup_tx_resources(struct e1000_ring *ring);
void e1000e_free_rx_resources(struct e1000_ring *ring);
void e1000e_free_tx_resources(struct e1000_ring *ring);
struct rtnl_link_stats64 *e1000e_get_stats64(struct net_device *netdev,
					     struct rtnl_link_stats64 *stats);
void e1000e_set_interrupt_capability(struct e1000_adapter *adapter);
void e1000e_reset_interrupt_capability(struct e1000_adapter *adapter);
void e1000e_get_hw_control(struct e1000_adapter *adapter);
void e1000e_release_hw_control(struct e1000_adapter *adapter);
void e1000e_write_itr(struct e1000_adapter *adapter, u32 itr);
499 500 501

extern unsigned int copybreak;

J
Jeff Kirsher 已提交
502 503 504 505 506 507 508 509 510 511
extern const struct e1000_info e1000_82571_info;
extern const struct e1000_info e1000_82572_info;
extern const struct e1000_info e1000_82573_info;
extern const struct e1000_info e1000_82574_info;
extern const struct e1000_info e1000_82583_info;
extern const struct e1000_info e1000_ich8_info;
extern const struct e1000_info e1000_ich9_info;
extern const struct e1000_info e1000_ich10_info;
extern const struct e1000_info e1000_pch_info;
extern const struct e1000_info e1000_pch2_info;
B
Bruce Allan 已提交
512
extern const struct e1000_info e1000_pch_lpt_info;
D
David Ertman 已提交
513
extern const struct e1000_info e1000_pch_spt_info;
J
Jeff Kirsher 已提交
514
extern const struct e1000_info e1000_es2_info;
515

516 517
void e1000e_ptp_init(struct e1000_adapter *adapter);
void e1000e_ptp_remove(struct e1000_adapter *adapter);
518

519 520
static inline s32 e1000_phy_hw_reset(struct e1000_hw *hw)
{
521
	return hw->phy.ops.reset(hw);
522 523 524 525
}

static inline s32 e1e_rphy(struct e1000_hw *hw, u32 offset, u16 *data)
{
526
	return hw->phy.ops.read_reg(hw, offset, data);
527 528
}

529 530 531 532 533
static inline s32 e1e_rphy_locked(struct e1000_hw *hw, u32 offset, u16 *data)
{
	return hw->phy.ops.read_reg_locked(hw, offset, data);
}

534 535
static inline s32 e1e_wphy(struct e1000_hw *hw, u32 offset, u16 data)
{
536
	return hw->phy.ops.write_reg(hw, offset, data);
537 538
}

539 540 541 542 543
static inline s32 e1e_wphy_locked(struct e1000_hw *hw, u32 offset, u16 data)
{
	return hw->phy.ops.write_reg_locked(hw, offset, data);
}

544
void e1000e_reload_nvm_generic(struct e1000_hw *hw);
545 546 547 548 549 550 551 552

static inline s32 e1000e_read_mac_addr(struct e1000_hw *hw)
{
	if (hw->mac.ops.read_mac_addr)
		return hw->mac.ops.read_mac_addr(hw);

	return e1000_read_mac_addr_generic(hw);
}
553 554 555

static inline s32 e1000_validate_nvm_checksum(struct e1000_hw *hw)
{
556
	return hw->nvm.ops.validate(hw);
557 558 559 560
}

static inline s32 e1000e_update_nvm_checksum(struct e1000_hw *hw)
{
561
	return hw->nvm.ops.update(hw);
562 563
}

564 565
static inline s32 e1000_read_nvm(struct e1000_hw *hw, u16 offset, u16 words,
				 u16 *data)
566
{
567
	return hw->nvm.ops.read(hw, offset, words, data);
568 569
}

570 571
static inline s32 e1000_write_nvm(struct e1000_hw *hw, u16 offset, u16 words,
				  u16 *data)
572
{
573
	return hw->nvm.ops.write(hw, offset, words, data);
574 575 576 577
}

static inline s32 e1000_get_phy_info(struct e1000_hw *hw)
{
578
	return hw->phy.ops.get_info(hw);
579 580 581 582 583 584 585
}

static inline u32 __er32(struct e1000_hw *hw, unsigned long reg)
{
	return readl(hw->hw_addr + reg);
}

586 587
#define er32(reg)	__er32(hw, E1000_##reg)

588 589
s32 __ew32_prepare(struct e1000_hw *hw);
void __ew32(struct e1000_hw *hw, unsigned long reg, u32 val);
590

591 592 593 594 595 596 597 598 599 600
#define ew32(reg, val)	__ew32(hw, E1000_##reg, (val))

#define e1e_flush()	er32(STATUS)

#define E1000_WRITE_REG_ARRAY(a, reg, offset, value) \
	(__ew32((a), (reg + ((offset) << 2)), (value)))

#define E1000_READ_REG_ARRAY(a, reg, offset) \
	(readl((a)->hw_addr + reg + ((offset) << 2)))

601
#endif /* _E1000_H_ */