xref: /freebsd/sys/dev/e1000/e1000_82571.c (revision 4ed925457ab06e83238a5db33e89ccc94b99a713)
1 /******************************************************************************
2 
3   Copyright (c) 2001-2010, Intel Corporation
4   All rights reserved.
5 
6   Redistribution and use in source and binary forms, with or without
7   modification, are permitted provided that the following conditions are met:
8 
9    1. Redistributions of source code must retain the above copyright notice,
10       this list of conditions and the following disclaimer.
11 
12    2. Redistributions in binary form must reproduce the above copyright
13       notice, this list of conditions and the following disclaimer in the
14       documentation and/or other materials provided with the distribution.
15 
16    3. Neither the name of the Intel Corporation nor the names of its
17       contributors may be used to endorse or promote products derived from
18       this software without specific prior written permission.
19 
20   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   POSSIBILITY OF SUCH DAMAGE.
31 
32 ******************************************************************************/
33 /*$FreeBSD$*/
34 
35 /*
36  * 82571EB Gigabit Ethernet Controller
37  * 82571EB Gigabit Ethernet Controller (Copper)
38  * 82571EB Gigabit Ethernet Controller (Fiber)
39  * 82571EB Dual Port Gigabit Mezzanine Adapter
40  * 82571EB Quad Port Gigabit Mezzanine Adapter
41  * 82571PT Gigabit PT Quad Port Server ExpressModule
42  * 82572EI Gigabit Ethernet Controller (Copper)
43  * 82572EI Gigabit Ethernet Controller (Fiber)
44  * 82572EI Gigabit Ethernet Controller
45  * 82573V Gigabit Ethernet Controller (Copper)
46  * 82573E Gigabit Ethernet Controller (Copper)
47  * 82573L Gigabit Ethernet Controller
48  * 82574L Gigabit Network Connection
49  * 82583V Gigabit Network Connection
50  */
51 
52 #include "e1000_api.h"
53 
54 static s32  e1000_init_phy_params_82571(struct e1000_hw *hw);
55 static s32  e1000_init_nvm_params_82571(struct e1000_hw *hw);
56 static s32  e1000_init_mac_params_82571(struct e1000_hw *hw);
57 static s32  e1000_acquire_nvm_82571(struct e1000_hw *hw);
58 static void e1000_release_nvm_82571(struct e1000_hw *hw);
59 static s32  e1000_write_nvm_82571(struct e1000_hw *hw, u16 offset,
60                                   u16 words, u16 *data);
61 static s32  e1000_update_nvm_checksum_82571(struct e1000_hw *hw);
62 static s32  e1000_validate_nvm_checksum_82571(struct e1000_hw *hw);
63 static s32  e1000_get_cfg_done_82571(struct e1000_hw *hw);
64 static s32  e1000_set_d0_lplu_state_82571(struct e1000_hw *hw,
65                                           bool active);
66 static s32  e1000_reset_hw_82571(struct e1000_hw *hw);
67 static s32  e1000_init_hw_82571(struct e1000_hw *hw);
68 static void e1000_clear_vfta_82571(struct e1000_hw *hw);
69 static bool e1000_check_mng_mode_82574(struct e1000_hw *hw);
70 static s32 e1000_led_on_82574(struct e1000_hw *hw);
71 static s32  e1000_setup_link_82571(struct e1000_hw *hw);
72 static s32  e1000_setup_copper_link_82571(struct e1000_hw *hw);
73 static s32  e1000_check_for_serdes_link_82571(struct e1000_hw *hw);
74 static s32  e1000_setup_fiber_serdes_link_82571(struct e1000_hw *hw);
75 static s32  e1000_valid_led_default_82571(struct e1000_hw *hw, u16 *data);
76 static void e1000_clear_hw_cntrs_82571(struct e1000_hw *hw);
77 static s32  e1000_get_hw_semaphore_82571(struct e1000_hw *hw);
78 static s32  e1000_fix_nvm_checksum_82571(struct e1000_hw *hw);
79 static s32  e1000_get_phy_id_82571(struct e1000_hw *hw);
80 static void e1000_put_hw_semaphore_82571(struct e1000_hw *hw);
81 static void e1000_initialize_hw_bits_82571(struct e1000_hw *hw);
82 static s32  e1000_write_nvm_eewr_82571(struct e1000_hw *hw, u16 offset,
83                                        u16 words, u16 *data);
84 static s32  e1000_read_mac_addr_82571(struct e1000_hw *hw);
85 static void e1000_power_down_phy_copper_82571(struct e1000_hw *hw);
86 
87 /**
88  *  e1000_init_phy_params_82571 - Init PHY func ptrs.
89  *  @hw: pointer to the HW structure
90  **/
91 static s32 e1000_init_phy_params_82571(struct e1000_hw *hw)
92 {
93 	struct e1000_phy_info *phy = &hw->phy;
94 	s32 ret_val = E1000_SUCCESS;
95 
96 	DEBUGFUNC("e1000_init_phy_params_82571");
97 
98 	if (hw->phy.media_type != e1000_media_type_copper) {
99 		phy->type = e1000_phy_none;
100 		goto out;
101 	}
102 
103 	phy->addr                        = 1;
104 	phy->autoneg_mask                = AUTONEG_ADVERTISE_SPEED_DEFAULT;
105 	phy->reset_delay_us              = 100;
106 
107 	phy->ops.acquire                 = e1000_get_hw_semaphore_82571;
108 	phy->ops.check_reset_block       = e1000_check_reset_block_generic;
109 	phy->ops.release                 = e1000_put_hw_semaphore_82571;
110 	phy->ops.reset                   = e1000_phy_hw_reset_generic;
111 	phy->ops.set_d0_lplu_state       = e1000_set_d0_lplu_state_82571;
112 	phy->ops.set_d3_lplu_state       = e1000_set_d3_lplu_state_generic;
113 	phy->ops.power_up                = e1000_power_up_phy_copper;
114 	phy->ops.power_down              = e1000_power_down_phy_copper_82571;
115 
116 	switch (hw->mac.type) {
117 	case e1000_82571:
118 	case e1000_82572:
119 		phy->type                   = e1000_phy_igp_2;
120 		phy->ops.get_cfg_done       = e1000_get_cfg_done_82571;
121 		phy->ops.get_info           = e1000_get_phy_info_igp;
122 		phy->ops.check_polarity     = e1000_check_polarity_igp;
123 		phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_igp;
124 		phy->ops.get_cable_length   = e1000_get_cable_length_igp_2;
125 		phy->ops.read_reg           = e1000_read_phy_reg_igp;
126 		phy->ops.write_reg          = e1000_write_phy_reg_igp;
127 
128 		/* This uses above function pointers */
129 		ret_val = e1000_get_phy_id_82571(hw);
130 
131 		/* Verify PHY ID */
132 		if (phy->id != IGP01E1000_I_PHY_ID) {
133 			ret_val = -E1000_ERR_PHY;
134 			DEBUGOUT1("PHY ID unknown: type = 0x%08x\n", phy->id);
135 			goto out;
136 		}
137 		break;
138 	case e1000_82573:
139 		phy->type                   = e1000_phy_m88;
140 		phy->ops.get_cfg_done       = e1000_get_cfg_done_generic;
141 		phy->ops.get_info           = e1000_get_phy_info_m88;
142 		phy->ops.check_polarity     = e1000_check_polarity_m88;
143 		phy->ops.commit             = e1000_phy_sw_reset_generic;
144 		phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88;
145 		phy->ops.get_cable_length   = e1000_get_cable_length_m88;
146 		phy->ops.read_reg           = e1000_read_phy_reg_m88;
147 		phy->ops.write_reg          = e1000_write_phy_reg_m88;
148 
149 		/* This uses above function pointers */
150 		ret_val = e1000_get_phy_id_82571(hw);
151 
152 		/* Verify PHY ID */
153 		if (phy->id != M88E1111_I_PHY_ID) {
154 			ret_val = -E1000_ERR_PHY;
155 			DEBUGOUT1("PHY ID unknown: type = 0x%08x\n", phy->id);
156 			goto out;
157 		}
158 		break;
159 	case e1000_82574:
160 	case e1000_82583:
161 		phy->type                   = e1000_phy_bm;
162 		phy->ops.get_cfg_done       = e1000_get_cfg_done_generic;
163 		phy->ops.get_info           = e1000_get_phy_info_m88;
164 		phy->ops.check_polarity     = e1000_check_polarity_m88;
165 		phy->ops.commit             = e1000_phy_sw_reset_generic;
166 		phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88;
167 		phy->ops.get_cable_length   = e1000_get_cable_length_m88;
168 		phy->ops.read_reg           = e1000_read_phy_reg_bm2;
169 		phy->ops.write_reg          = e1000_write_phy_reg_bm2;
170 
171 		/* This uses above function pointers */
172 		ret_val = e1000_get_phy_id_82571(hw);
173 		/* Verify PHY ID */
174 		if (phy->id != BME1000_E_PHY_ID_R2) {
175 			ret_val = -E1000_ERR_PHY;
176 			DEBUGOUT1("PHY ID unknown: type = 0x%08x\n", phy->id);
177 			goto out;
178 		}
179 		break;
180 	default:
181 		ret_val = -E1000_ERR_PHY;
182 		goto out;
183 		break;
184 	}
185 
186 out:
187 	return ret_val;
188 }
189 
190 /**
191  *  e1000_init_nvm_params_82571 - Init NVM func ptrs.
192  *  @hw: pointer to the HW structure
193  **/
194 static s32 e1000_init_nvm_params_82571(struct e1000_hw *hw)
195 {
196 	struct e1000_nvm_info *nvm = &hw->nvm;
197 	u32 eecd = E1000_READ_REG(hw, E1000_EECD);
198 	u16 size;
199 
200 	DEBUGFUNC("e1000_init_nvm_params_82571");
201 
202 	nvm->opcode_bits = 8;
203 	nvm->delay_usec = 1;
204 	switch (nvm->override) {
205 	case e1000_nvm_override_spi_large:
206 		nvm->page_size = 32;
207 		nvm->address_bits = 16;
208 		break;
209 	case e1000_nvm_override_spi_small:
210 		nvm->page_size = 8;
211 		nvm->address_bits = 8;
212 		break;
213 	default:
214 		nvm->page_size = eecd & E1000_EECD_ADDR_BITS ? 32 : 8;
215 		nvm->address_bits = eecd & E1000_EECD_ADDR_BITS ? 16 : 8;
216 		break;
217 	}
218 
219 	switch (hw->mac.type) {
220 	case e1000_82573:
221 	case e1000_82574:
222 	case e1000_82583:
223 		if (((eecd >> 15) & 0x3) == 0x3) {
224 			nvm->type = e1000_nvm_flash_hw;
225 			nvm->word_size = 2048;
226 			/*
227 			 * Autonomous Flash update bit must be cleared due
228 			 * to Flash update issue.
229 			 */
230 			eecd &= ~E1000_EECD_AUPDEN;
231 			E1000_WRITE_REG(hw, E1000_EECD, eecd);
232 			break;
233 		}
234 		/* Fall Through */
235 	default:
236 		nvm->type = e1000_nvm_eeprom_spi;
237 		size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >>
238 		                  E1000_EECD_SIZE_EX_SHIFT);
239 		/*
240 		 * Added to a constant, "size" becomes the left-shift value
241 		 * for setting word_size.
242 		 */
243 		size += NVM_WORD_SIZE_BASE_SHIFT;
244 
245 		/* EEPROM access above 16k is unsupported */
246 		if (size > 14)
247 			size = 14;
248 		nvm->word_size	= 1 << size;
249 		break;
250 	}
251 
252 	/* Function Pointers */
253 	nvm->ops.acquire       = e1000_acquire_nvm_82571;
254 	nvm->ops.read          = e1000_read_nvm_eerd;
255 	nvm->ops.release       = e1000_release_nvm_82571;
256 	nvm->ops.update        = e1000_update_nvm_checksum_82571;
257 	nvm->ops.validate      = e1000_validate_nvm_checksum_82571;
258 	nvm->ops.valid_led_default = e1000_valid_led_default_82571;
259 	nvm->ops.write         = e1000_write_nvm_82571;
260 
261 	return E1000_SUCCESS;
262 }
263 
264 /**
265  *  e1000_init_mac_params_82571 - Init MAC func ptrs.
266  *  @hw: pointer to the HW structure
267  **/
268 static s32 e1000_init_mac_params_82571(struct e1000_hw *hw)
269 {
270 	struct e1000_mac_info *mac = &hw->mac;
271 	u32 swsm = 0;
272 	u32 swsm2 = 0;
273 	bool force_clear_smbi = FALSE;
274 
275 	DEBUGFUNC("e1000_init_mac_params_82571");
276 
277 	/* Set media type and media-dependent function pointers */
278 	switch (hw->device_id) {
279 	case E1000_DEV_ID_82571EB_FIBER:
280 	case E1000_DEV_ID_82572EI_FIBER:
281 	case E1000_DEV_ID_82571EB_QUAD_FIBER:
282 		hw->phy.media_type = e1000_media_type_fiber;
283 		mac->ops.setup_physical_interface =
284 			e1000_setup_fiber_serdes_link_82571;
285 		mac->ops.check_for_link = e1000_check_for_fiber_link_generic;
286 		mac->ops.get_link_up_info =
287 			e1000_get_speed_and_duplex_fiber_serdes_generic;
288 		break;
289 	case E1000_DEV_ID_82571EB_SERDES:
290 	case E1000_DEV_ID_82571EB_SERDES_DUAL:
291 	case E1000_DEV_ID_82571EB_SERDES_QUAD:
292 	case E1000_DEV_ID_82572EI_SERDES:
293 		hw->phy.media_type = e1000_media_type_internal_serdes;
294 		mac->ops.setup_physical_interface =
295 			e1000_setup_fiber_serdes_link_82571;
296 		mac->ops.check_for_link = e1000_check_for_serdes_link_82571;
297 		mac->ops.get_link_up_info =
298 			e1000_get_speed_and_duplex_fiber_serdes_generic;
299 		break;
300 	default:
301 		hw->phy.media_type = e1000_media_type_copper;
302 		mac->ops.setup_physical_interface =
303 			e1000_setup_copper_link_82571;
304 		mac->ops.check_for_link = e1000_check_for_copper_link_generic;
305 		mac->ops.get_link_up_info =
306 			e1000_get_speed_and_duplex_copper_generic;
307 		break;
308 	}
309 
310 	/* Set mta register count */
311 	mac->mta_reg_count = 128;
312 	/* Set rar entry count */
313 	mac->rar_entry_count = E1000_RAR_ENTRIES;
314 	/* Set if part includes ASF firmware */
315 	mac->asf_firmware_present = TRUE;
316 	/* Set if manageability features are enabled. */
317 	mac->arc_subsystem_valid =
318 	        (E1000_READ_REG(hw, E1000_FWSM) & E1000_FWSM_MODE_MASK)
319 	                ? TRUE : FALSE;
320 	/* Adaptive IFS supported */
321 	mac->adaptive_ifs = TRUE;
322 
323 	/* Function pointers */
324 
325 	/* bus type/speed/width */
326 	mac->ops.get_bus_info = e1000_get_bus_info_pcie_generic;
327 	/* reset */
328 	mac->ops.reset_hw = e1000_reset_hw_82571;
329 	/* hw initialization */
330 	mac->ops.init_hw = e1000_init_hw_82571;
331 	/* link setup */
332 	mac->ops.setup_link = e1000_setup_link_82571;
333 	/* multicast address update */
334 	mac->ops.update_mc_addr_list = e1000_update_mc_addr_list_generic;
335 	/* writing VFTA */
336 	mac->ops.write_vfta = e1000_write_vfta_generic;
337 	/* clearing VFTA */
338 	mac->ops.clear_vfta = e1000_clear_vfta_82571;
339 	/* read mac address */
340 	mac->ops.read_mac_addr = e1000_read_mac_addr_82571;
341 	/* ID LED init */
342 	mac->ops.id_led_init = e1000_id_led_init_generic;
343 	/* blink LED */
344 	mac->ops.blink_led = e1000_blink_led_generic;
345 	/* setup LED */
346 	mac->ops.setup_led = e1000_setup_led_generic;
347 	/* cleanup LED */
348 	mac->ops.cleanup_led = e1000_cleanup_led_generic;
349 	/* turn off LED */
350 	mac->ops.led_off = e1000_led_off_generic;
351 	/* clear hardware counters */
352 	mac->ops.clear_hw_cntrs = e1000_clear_hw_cntrs_82571;
353 
354 	/* MAC-specific function pointers */
355 	switch (hw->mac.type) {
356 	case e1000_82573:
357 		mac->ops.set_lan_id = e1000_set_lan_id_single_port;
358 		mac->ops.check_mng_mode = e1000_check_mng_mode_generic;
359 		mac->ops.led_on = e1000_led_on_generic;
360 		break;
361 	case e1000_82574:
362 	case e1000_82583:
363 		mac->ops.set_lan_id = e1000_set_lan_id_single_port;
364 		mac->ops.check_mng_mode = e1000_check_mng_mode_82574;
365 		mac->ops.led_on = e1000_led_on_82574;
366 		break;
367 	default:
368 		mac->ops.check_mng_mode = e1000_check_mng_mode_generic;
369 		mac->ops.led_on = e1000_led_on_generic;
370 		break;
371 	}
372 
373 	/*
374 	 * Ensure that the inter-port SWSM.SMBI lock bit is clear before
375 	 * first NVM or PHY acess. This should be done for single-port
376 	 * devices, and for one port only on dual-port devices so that
377 	 * for those devices we can still use the SMBI lock to synchronize
378 	 * inter-port accesses to the PHY & NVM.
379 	 */
380 	switch (hw->mac.type) {
381 	case e1000_82571:
382 	case e1000_82572:
383 		swsm2 = E1000_READ_REG(hw, E1000_SWSM2);
384 
385 		if (!(swsm2 & E1000_SWSM2_LOCK)) {
386 			/* Only do this for the first interface on this card */
387 			E1000_WRITE_REG(hw, E1000_SWSM2,
388 			    swsm2 | E1000_SWSM2_LOCK);
389 			force_clear_smbi = TRUE;
390 		} else
391 			force_clear_smbi = FALSE;
392 		break;
393 	default:
394 		force_clear_smbi = TRUE;
395 		break;
396 	}
397 
398 	if (force_clear_smbi) {
399 		/* Make sure SWSM.SMBI is clear */
400 		swsm = E1000_READ_REG(hw, E1000_SWSM);
401 		if (swsm & E1000_SWSM_SMBI) {
402 			/* This bit should not be set on a first interface, and
403 			 * indicates that the bootagent or EFI code has
404 			 * improperly left this bit enabled
405 			 */
406 			DEBUGOUT("Please update your 82571 Bootagent\n");
407 		}
408 		E1000_WRITE_REG(hw, E1000_SWSM, swsm & ~E1000_SWSM_SMBI);
409 	}
410 
411 	/*
412 	 * Initialze device specific counter of SMBI acquisition
413 	 * timeouts.
414 	 */
415 	 hw->dev_spec._82571.smb_counter = 0;
416 
417 	return E1000_SUCCESS;
418 }
419 
420 /**
421  *  e1000_init_function_pointers_82571 - Init func ptrs.
422  *  @hw: pointer to the HW structure
423  *
424  *  Called to initialize all function pointers and parameters.
425  **/
426 void e1000_init_function_pointers_82571(struct e1000_hw *hw)
427 {
428 	DEBUGFUNC("e1000_init_function_pointers_82571");
429 
430 	hw->mac.ops.init_params = e1000_init_mac_params_82571;
431 	hw->nvm.ops.init_params = e1000_init_nvm_params_82571;
432 	hw->phy.ops.init_params = e1000_init_phy_params_82571;
433 }
434 
435 /**
436  *  e1000_get_phy_id_82571 - Retrieve the PHY ID and revision
437  *  @hw: pointer to the HW structure
438  *
439  *  Reads the PHY registers and stores the PHY ID and possibly the PHY
440  *  revision in the hardware structure.
441  **/
442 static s32 e1000_get_phy_id_82571(struct e1000_hw *hw)
443 {
444 	struct e1000_phy_info *phy = &hw->phy;
445 	s32 ret_val = E1000_SUCCESS;
446 	u16 phy_id = 0;
447 
448 	DEBUGFUNC("e1000_get_phy_id_82571");
449 
450 	switch (hw->mac.type) {
451 	case e1000_82571:
452 	case e1000_82572:
453 		/*
454 		 * The 82571 firmware may still be configuring the PHY.
455 		 * In this case, we cannot access the PHY until the
456 		 * configuration is done.  So we explicitly set the
457 		 * PHY ID.
458 		 */
459 		phy->id = IGP01E1000_I_PHY_ID;
460 		break;
461 	case e1000_82573:
462 		ret_val = e1000_get_phy_id(hw);
463 		break;
464 	case e1000_82574:
465 	case e1000_82583:
466 		ret_val = phy->ops.read_reg(hw, PHY_ID1, &phy_id);
467 		if (ret_val)
468 			goto out;
469 
470 		phy->id = (u32)(phy_id << 16);
471 		usec_delay(20);
472 		ret_val = phy->ops.read_reg(hw, PHY_ID2, &phy_id);
473 		if (ret_val)
474 			goto out;
475 
476 		phy->id |= (u32)(phy_id);
477 		phy->revision = (u32)(phy_id & ~PHY_REVISION_MASK);
478 		break;
479 	default:
480 		ret_val = -E1000_ERR_PHY;
481 		break;
482 	}
483 out:
484 	return ret_val;
485 }
486 
487 /**
488  *  e1000_get_hw_semaphore_82571 - Acquire hardware semaphore
489  *  @hw: pointer to the HW structure
490  *
491  *  Acquire the HW semaphore to access the PHY or NVM
492  **/
493 static s32 e1000_get_hw_semaphore_82571(struct e1000_hw *hw)
494 {
495 	u32 swsm;
496 	s32 ret_val = E1000_SUCCESS;
497 	s32 sw_timeout = hw->nvm.word_size + 1;
498 	s32 fw_timeout = hw->nvm.word_size + 1;
499 	s32 i = 0;
500 
501 	DEBUGFUNC("e1000_get_hw_semaphore_82571");
502 
503 	/*
504 	 * If we have timedout 3 times on trying to acquire
505 	 * the inter-port SMBI semaphore, there is old code
506 	 * operating on the other port, and it is not
507 	 * releasing SMBI. Modify the number of times that
508 	 * we try for the semaphore to interwork with this
509 	 * older code.
510 	 */
511 	if (hw->dev_spec._82571.smb_counter > 2)
512 		sw_timeout = 1;
513 
514 	/* Get the SW semaphore */
515 	while (i < sw_timeout) {
516 		swsm = E1000_READ_REG(hw, E1000_SWSM);
517 		if (!(swsm & E1000_SWSM_SMBI))
518 			break;
519 
520 		usec_delay(50);
521 		i++;
522 	}
523 
524 	if (i == sw_timeout) {
525 		DEBUGOUT("Driver can't access device - SMBI bit is set.\n");
526 		hw->dev_spec._82571.smb_counter++;
527 	}
528 	/* Get the FW semaphore. */
529 	for (i = 0; i < fw_timeout; i++) {
530 		swsm = E1000_READ_REG(hw, E1000_SWSM);
531 		E1000_WRITE_REG(hw, E1000_SWSM, swsm | E1000_SWSM_SWESMBI);
532 
533 		/* Semaphore acquired if bit latched */
534 		if (E1000_READ_REG(hw, E1000_SWSM) & E1000_SWSM_SWESMBI)
535 			break;
536 
537 		usec_delay(50);
538 	}
539 
540 	if (i == fw_timeout) {
541 		/* Release semaphores */
542 		e1000_put_hw_semaphore_82571(hw);
543 		DEBUGOUT("Driver can't access the NVM\n");
544 		ret_val = -E1000_ERR_NVM;
545 		goto out;
546 	}
547 
548 out:
549 	return ret_val;
550 }
551 
552 /**
553  *  e1000_put_hw_semaphore_82571 - Release hardware semaphore
554  *  @hw: pointer to the HW structure
555  *
556  *  Release hardware semaphore used to access the PHY or NVM
557  **/
558 static void e1000_put_hw_semaphore_82571(struct e1000_hw *hw)
559 {
560 	u32 swsm;
561 
562 	DEBUGFUNC("e1000_put_hw_semaphore_generic");
563 
564 	swsm = E1000_READ_REG(hw, E1000_SWSM);
565 
566 	swsm &= ~(E1000_SWSM_SMBI | E1000_SWSM_SWESMBI);
567 
568 	E1000_WRITE_REG(hw, E1000_SWSM, swsm);
569 }
570 
571 /**
572  *  e1000_acquire_nvm_82571 - Request for access to the EEPROM
573  *  @hw: pointer to the HW structure
574  *
575  *  To gain access to the EEPROM, first we must obtain a hardware semaphore.
576  *  Then for non-82573 hardware, set the EEPROM access request bit and wait
577  *  for EEPROM access grant bit.  If the access grant bit is not set, release
578  *  hardware semaphore.
579  **/
580 static s32 e1000_acquire_nvm_82571(struct e1000_hw *hw)
581 {
582 	s32 ret_val;
583 
584 	DEBUGFUNC("e1000_acquire_nvm_82571");
585 
586 	ret_val = e1000_get_hw_semaphore_82571(hw);
587 	if (ret_val)
588 		goto out;
589 
590 	switch (hw->mac.type) {
591 	case e1000_82573:
592 	case e1000_82574:
593 	case e1000_82583:
594 		break;
595 	default:
596 		ret_val = e1000_acquire_nvm_generic(hw);
597 		break;
598 	}
599 
600 	if (ret_val)
601 		e1000_put_hw_semaphore_82571(hw);
602 
603 out:
604 	return ret_val;
605 }
606 
607 /**
608  *  e1000_release_nvm_82571 - Release exclusive access to EEPROM
609  *  @hw: pointer to the HW structure
610  *
611  *  Stop any current commands to the EEPROM and clear the EEPROM request bit.
612  **/
613 static void e1000_release_nvm_82571(struct e1000_hw *hw)
614 {
615 	DEBUGFUNC("e1000_release_nvm_82571");
616 
617 	e1000_release_nvm_generic(hw);
618 	e1000_put_hw_semaphore_82571(hw);
619 }
620 
621 /**
622  *  e1000_write_nvm_82571 - Write to EEPROM using appropriate interface
623  *  @hw: pointer to the HW structure
624  *  @offset: offset within the EEPROM to be written to
625  *  @words: number of words to write
626  *  @data: 16 bit word(s) to be written to the EEPROM
627  *
628  *  For non-82573 silicon, write data to EEPROM at offset using SPI interface.
629  *
630  *  If e1000_update_nvm_checksum is not called after this function, the
631  *  EEPROM will most likely contain an invalid checksum.
632  **/
633 static s32 e1000_write_nvm_82571(struct e1000_hw *hw, u16 offset, u16 words,
634                                  u16 *data)
635 {
636 	s32 ret_val = E1000_SUCCESS;
637 
638 	DEBUGFUNC("e1000_write_nvm_82571");
639 
640 	switch (hw->mac.type) {
641 	case e1000_82573:
642 	case e1000_82574:
643 	case e1000_82583:
644 		ret_val = e1000_write_nvm_eewr_82571(hw, offset, words, data);
645 		break;
646 	case e1000_82571:
647 	case e1000_82572:
648 		ret_val = e1000_write_nvm_spi(hw, offset, words, data);
649 		break;
650 	default:
651 		ret_val = -E1000_ERR_NVM;
652 		break;
653 	}
654 
655 	return ret_val;
656 }
657 
658 /**
659  *  e1000_update_nvm_checksum_82571 - Update EEPROM checksum
660  *  @hw: pointer to the HW structure
661  *
662  *  Updates the EEPROM checksum by reading/adding each word of the EEPROM
663  *  up to the checksum.  Then calculates the EEPROM checksum and writes the
664  *  value to the EEPROM.
665  **/
666 static s32 e1000_update_nvm_checksum_82571(struct e1000_hw *hw)
667 {
668 	u32 eecd;
669 	s32 ret_val;
670 	u16 i;
671 
672 	DEBUGFUNC("e1000_update_nvm_checksum_82571");
673 
674 	ret_val = e1000_update_nvm_checksum_generic(hw);
675 	if (ret_val)
676 		goto out;
677 
678 	/*
679 	 * If our nvm is an EEPROM, then we're done
680 	 * otherwise, commit the checksum to the flash NVM.
681 	 */
682 	if (hw->nvm.type != e1000_nvm_flash_hw)
683 		goto out;
684 
685 	/* Check for pending operations. */
686 	for (i = 0; i < E1000_FLASH_UPDATES; i++) {
687 		msec_delay(1);
688 		if ((E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_FLUPD) == 0)
689 			break;
690 	}
691 
692 	if (i == E1000_FLASH_UPDATES) {
693 		ret_val = -E1000_ERR_NVM;
694 		goto out;
695 	}
696 
697 	/* Reset the firmware if using STM opcode. */
698 	if ((E1000_READ_REG(hw, E1000_FLOP) & 0xFF00) == E1000_STM_OPCODE) {
699 		/*
700 		 * The enabling of and the actual reset must be done
701 		 * in two write cycles.
702 		 */
703 		E1000_WRITE_REG(hw, E1000_HICR, E1000_HICR_FW_RESET_ENABLE);
704 		E1000_WRITE_FLUSH(hw);
705 		E1000_WRITE_REG(hw, E1000_HICR, E1000_HICR_FW_RESET);
706 	}
707 
708 	/* Commit the write to flash */
709 	eecd = E1000_READ_REG(hw, E1000_EECD) | E1000_EECD_FLUPD;
710 	E1000_WRITE_REG(hw, E1000_EECD, eecd);
711 
712 	for (i = 0; i < E1000_FLASH_UPDATES; i++) {
713 		msec_delay(1);
714 		if ((E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_FLUPD) == 0)
715 			break;
716 	}
717 
718 	if (i == E1000_FLASH_UPDATES) {
719 		ret_val = -E1000_ERR_NVM;
720 		goto out;
721 	}
722 
723 out:
724 	return ret_val;
725 }
726 
727 /**
728  *  e1000_validate_nvm_checksum_82571 - Validate EEPROM checksum
729  *  @hw: pointer to the HW structure
730  *
731  *  Calculates the EEPROM checksum by reading/adding each word of the EEPROM
732  *  and then verifies that the sum of the EEPROM is equal to 0xBABA.
733  **/
734 static s32 e1000_validate_nvm_checksum_82571(struct e1000_hw *hw)
735 {
736 	DEBUGFUNC("e1000_validate_nvm_checksum_82571");
737 
738 	if (hw->nvm.type == e1000_nvm_flash_hw)
739 		e1000_fix_nvm_checksum_82571(hw);
740 
741 	return e1000_validate_nvm_checksum_generic(hw);
742 }
743 
744 /**
745  *  e1000_write_nvm_eewr_82571 - Write to EEPROM for 82573 silicon
746  *  @hw: pointer to the HW structure
747  *  @offset: offset within the EEPROM to be written to
748  *  @words: number of words to write
749  *  @data: 16 bit word(s) to be written to the EEPROM
750  *
751  *  After checking for invalid values, poll the EEPROM to ensure the previous
752  *  command has completed before trying to write the next word.  After write
753  *  poll for completion.
754  *
755  *  If e1000_update_nvm_checksum is not called after this function, the
756  *  EEPROM will most likely contain an invalid checksum.
757  **/
758 static s32 e1000_write_nvm_eewr_82571(struct e1000_hw *hw, u16 offset,
759                                       u16 words, u16 *data)
760 {
761 	struct e1000_nvm_info *nvm = &hw->nvm;
762 	u32 i, eewr = 0;
763 	s32 ret_val = 0;
764 
765 	DEBUGFUNC("e1000_write_nvm_eewr_82571");
766 
767 	/*
768 	 * A check for invalid values:  offset too large, too many words,
769 	 * and not enough words.
770 	 */
771 	if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) ||
772 	    (words == 0)) {
773 		DEBUGOUT("nvm parameter(s) out of bounds\n");
774 		ret_val = -E1000_ERR_NVM;
775 		goto out;
776 	}
777 
778 	for (i = 0; i < words; i++) {
779 		eewr = (data[i] << E1000_NVM_RW_REG_DATA) |
780 		       ((offset+i) << E1000_NVM_RW_ADDR_SHIFT) |
781 		       E1000_NVM_RW_REG_START;
782 
783 		ret_val = e1000_poll_eerd_eewr_done(hw, E1000_NVM_POLL_WRITE);
784 		if (ret_val)
785 			break;
786 
787 		E1000_WRITE_REG(hw, E1000_EEWR, eewr);
788 
789 		ret_val = e1000_poll_eerd_eewr_done(hw, E1000_NVM_POLL_WRITE);
790 		if (ret_val)
791 			break;
792 	}
793 
794 out:
795 	return ret_val;
796 }
797 
798 /**
799  *  e1000_get_cfg_done_82571 - Poll for configuration done
800  *  @hw: pointer to the HW structure
801  *
802  *  Reads the management control register for the config done bit to be set.
803  **/
804 static s32 e1000_get_cfg_done_82571(struct e1000_hw *hw)
805 {
806 	s32 timeout = PHY_CFG_TIMEOUT;
807 	s32 ret_val = E1000_SUCCESS;
808 
809 	DEBUGFUNC("e1000_get_cfg_done_82571");
810 
811 	while (timeout) {
812 		if (E1000_READ_REG(hw, E1000_EEMNGCTL) &
813 		    E1000_NVM_CFG_DONE_PORT_0)
814 			break;
815 		msec_delay(1);
816 		timeout--;
817 	}
818 	if (!timeout) {
819 		DEBUGOUT("MNG configuration cycle has not completed.\n");
820 		ret_val = -E1000_ERR_RESET;
821 		goto out;
822 	}
823 
824 out:
825 	return ret_val;
826 }
827 
828 /**
829  *  e1000_set_d0_lplu_state_82571 - Set Low Power Linkup D0 state
830  *  @hw: pointer to the HW structure
831  *  @active: TRUE to enable LPLU, FALSE to disable
832  *
833  *  Sets the LPLU D0 state according to the active flag.  When activating LPLU
834  *  this function also disables smart speed and vice versa.  LPLU will not be
835  *  activated unless the device autonegotiation advertisement meets standards
836  *  of either 10 or 10/100 or 10/100/1000 at all duplexes.  This is a function
837  *  pointer entry point only called by PHY setup routines.
838  **/
839 static s32 e1000_set_d0_lplu_state_82571(struct e1000_hw *hw, bool active)
840 {
841 	struct e1000_phy_info *phy = &hw->phy;
842 	s32 ret_val = E1000_SUCCESS;
843 	u16 data;
844 
845 	DEBUGFUNC("e1000_set_d0_lplu_state_82571");
846 
847 	if (!(phy->ops.read_reg))
848 		goto out;
849 
850 	ret_val = phy->ops.read_reg(hw, IGP02E1000_PHY_POWER_MGMT, &data);
851 	if (ret_val)
852 		goto out;
853 
854 	if (active) {
855 		data |= IGP02E1000_PM_D0_LPLU;
856 		ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
857 		                             data);
858 		if (ret_val)
859 			goto out;
860 
861 		/* When LPLU is enabled, we should disable SmartSpeed */
862 		ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
863 		                            &data);
864 		data &= ~IGP01E1000_PSCFR_SMART_SPEED;
865 		ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
866 		                             data);
867 		if (ret_val)
868 			goto out;
869 	} else {
870 		data &= ~IGP02E1000_PM_D0_LPLU;
871 		ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
872 		                             data);
873 		/*
874 		 * LPLU and SmartSpeed are mutually exclusive.  LPLU is used
875 		 * during Dx states where the power conservation is most
876 		 * important.  During driver activity we should enable
877 		 * SmartSpeed, so performance is maintained.
878 		 */
879 		if (phy->smart_speed == e1000_smart_speed_on) {
880 			ret_val = phy->ops.read_reg(hw,
881 			                            IGP01E1000_PHY_PORT_CONFIG,
882 			                            &data);
883 			if (ret_val)
884 				goto out;
885 
886 			data |= IGP01E1000_PSCFR_SMART_SPEED;
887 			ret_val = phy->ops.write_reg(hw,
888 			                             IGP01E1000_PHY_PORT_CONFIG,
889 			                             data);
890 			if (ret_val)
891 				goto out;
892 		} else if (phy->smart_speed == e1000_smart_speed_off) {
893 			ret_val = phy->ops.read_reg(hw,
894 			                            IGP01E1000_PHY_PORT_CONFIG,
895 			                            &data);
896 			if (ret_val)
897 				goto out;
898 
899 			data &= ~IGP01E1000_PSCFR_SMART_SPEED;
900 			ret_val = phy->ops.write_reg(hw,
901 			                             IGP01E1000_PHY_PORT_CONFIG,
902 			                             data);
903 			if (ret_val)
904 				goto out;
905 		}
906 	}
907 
908 out:
909 	return ret_val;
910 }
911 
912 /**
913  *  e1000_reset_hw_82571 - Reset hardware
914  *  @hw: pointer to the HW structure
915  *
916  *  This resets the hardware into a known state.
917  **/
918 static s32 e1000_reset_hw_82571(struct e1000_hw *hw)
919 {
920 	u32 ctrl, extcnf_ctrl, ctrl_ext, icr;
921 	s32 ret_val;
922 	u16 i = 0;
923 
924 	DEBUGFUNC("e1000_reset_hw_82571");
925 
926 	/*
927 	 * Prevent the PCI-E bus from sticking if there is no TLP connection
928 	 * on the last TLP read/write transaction when MAC is reset.
929 	 */
930 	ret_val = e1000_disable_pcie_master_generic(hw);
931 	if (ret_val)
932 		DEBUGOUT("PCI-E Master disable polling has failed.\n");
933 
934 	DEBUGOUT("Masking off all interrupts\n");
935 	E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
936 
937 	E1000_WRITE_REG(hw, E1000_RCTL, 0);
938 	E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP);
939 	E1000_WRITE_FLUSH(hw);
940 
941 	msec_delay(10);
942 
943 	/*
944 	 * Must acquire the MDIO ownership before MAC reset.
945 	 * Ownership defaults to firmware after a reset.
946 	 */
947 	switch (hw->mac.type) {
948 	case e1000_82573:
949 	case e1000_82574:
950 	case e1000_82583:
951 		extcnf_ctrl = E1000_READ_REG(hw, E1000_EXTCNF_CTRL);
952 		extcnf_ctrl |= E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP;
953 
954 		do {
955 			E1000_WRITE_REG(hw, E1000_EXTCNF_CTRL, extcnf_ctrl);
956 			extcnf_ctrl = E1000_READ_REG(hw, E1000_EXTCNF_CTRL);
957 
958 			if (extcnf_ctrl & E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP)
959 				break;
960 
961 			extcnf_ctrl |= E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP;
962 
963 			msec_delay(2);
964 			i++;
965 		} while (i < MDIO_OWNERSHIP_TIMEOUT);
966 		break;
967 	default:
968 		break;
969 	}
970 
971 	ctrl = E1000_READ_REG(hw, E1000_CTRL);
972 
973 	DEBUGOUT("Issuing a global reset to MAC\n");
974 	E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_RST);
975 
976 	if (hw->nvm.type == e1000_nvm_flash_hw) {
977 		usec_delay(10);
978 		ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
979 		ctrl_ext |= E1000_CTRL_EXT_EE_RST;
980 		E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
981 		E1000_WRITE_FLUSH(hw);
982 	}
983 
984 	ret_val = e1000_get_auto_rd_done_generic(hw);
985 	if (ret_val)
986 		/* We don't want to continue accessing MAC registers. */
987 		goto out;
988 
989 	/*
990 	 * Phy configuration from NVM just starts after EECD_AUTO_RD is set.
991 	 * Need to wait for Phy configuration completion before accessing
992 	 * NVM and Phy.
993 	 */
994 
995 	switch (hw->mac.type) {
996 	case e1000_82573:
997 	case e1000_82574:
998 	case e1000_82583:
999 		msec_delay(25);
1000 		break;
1001 	default:
1002 		break;
1003 	}
1004 
1005 	/* Clear any pending interrupt events. */
1006 	E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
1007 	icr = E1000_READ_REG(hw, E1000_ICR);
1008 
1009 	/* Install any alternate MAC address into RAR0 */
1010 	ret_val = e1000_check_alt_mac_addr_generic(hw);
1011 	if (ret_val)
1012 		goto out;
1013 
1014 	e1000_set_laa_state_82571(hw, TRUE);
1015 
1016 	/* Reinitialize the 82571 serdes link state machine */
1017 	if (hw->phy.media_type == e1000_media_type_internal_serdes)
1018 		hw->mac.serdes_link_state = e1000_serdes_link_down;
1019 
1020 out:
1021 	return ret_val;
1022 }
1023 
1024 /**
1025  *  e1000_init_hw_82571 - Initialize hardware
1026  *  @hw: pointer to the HW structure
1027  *
1028  *  This inits the hardware readying it for operation.
1029  **/
1030 static s32 e1000_init_hw_82571(struct e1000_hw *hw)
1031 {
1032 	struct e1000_mac_info *mac = &hw->mac;
1033 	u32 reg_data;
1034 	s32 ret_val;
1035 	u16 i, rar_count = mac->rar_entry_count;
1036 
1037 	DEBUGFUNC("e1000_init_hw_82571");
1038 
1039 	e1000_initialize_hw_bits_82571(hw);
1040 
1041 	/* Initialize identification LED */
1042 	ret_val = mac->ops.id_led_init(hw);
1043 	if (ret_val)
1044 		DEBUGOUT("Error initializing identification LED\n");
1045 		/* This is not fatal and we should not stop init due to this */
1046 
1047 	/* Disabling VLAN filtering */
1048 	DEBUGOUT("Initializing the IEEE VLAN\n");
1049 	mac->ops.clear_vfta(hw);
1050 
1051 	/* Setup the receive address. */
1052 	/*
1053 	 * If, however, a locally administered address was assigned to the
1054 	 * 82571, we must reserve a RAR for it to work around an issue where
1055 	 * resetting one port will reload the MAC on the other port.
1056 	 */
1057 	if (e1000_get_laa_state_82571(hw))
1058 		rar_count--;
1059 	e1000_init_rx_addrs_generic(hw, rar_count);
1060 
1061 	/* Zero out the Multicast HASH table */
1062 	DEBUGOUT("Zeroing the MTA\n");
1063 	for (i = 0; i < mac->mta_reg_count; i++)
1064 		E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0);
1065 
1066 	/* Setup link and flow control */
1067 	ret_val = mac->ops.setup_link(hw);
1068 
1069 	/* Set the transmit descriptor write-back policy */
1070 	reg_data = E1000_READ_REG(hw, E1000_TXDCTL(0));
1071 	reg_data = (reg_data & ~E1000_TXDCTL_WTHRESH) |
1072 	           E1000_TXDCTL_FULL_TX_DESC_WB |
1073 	           E1000_TXDCTL_COUNT_DESC;
1074 	E1000_WRITE_REG(hw, E1000_TXDCTL(0), reg_data);
1075 
1076 	/* ...for both queues. */
1077 	switch (mac->type) {
1078 	case e1000_82573:
1079 	case e1000_82574:
1080 	case e1000_82583:
1081 		e1000_enable_tx_pkt_filtering_generic(hw);
1082 		reg_data = E1000_READ_REG(hw, E1000_GCR);
1083 		reg_data |= E1000_GCR_L1_ACT_WITHOUT_L0S_RX;
1084 		E1000_WRITE_REG(hw, E1000_GCR, reg_data);
1085 		break;
1086 	default:
1087 		reg_data = E1000_READ_REG(hw, E1000_TXDCTL(1));
1088 		reg_data = (reg_data & ~E1000_TXDCTL_WTHRESH) |
1089 		           E1000_TXDCTL_FULL_TX_DESC_WB |
1090 		           E1000_TXDCTL_COUNT_DESC;
1091 		E1000_WRITE_REG(hw, E1000_TXDCTL(1), reg_data);
1092 		break;
1093 	}
1094 
1095 	/*
1096 	 * Clear all of the statistics registers (clear on read).  It is
1097 	 * important that we do this after we have tried to establish link
1098 	 * because the symbol error count will increment wildly if there
1099 	 * is no link.
1100 	 */
1101 	e1000_clear_hw_cntrs_82571(hw);
1102 
1103 	return ret_val;
1104 }
1105 
1106 /**
1107  *  e1000_initialize_hw_bits_82571 - Initialize hardware-dependent bits
1108  *  @hw: pointer to the HW structure
1109  *
1110  *  Initializes required hardware-dependent bits needed for normal operation.
1111  **/
1112 static void e1000_initialize_hw_bits_82571(struct e1000_hw *hw)
1113 {
1114 	u32 reg;
1115 
1116 	DEBUGFUNC("e1000_initialize_hw_bits_82571");
1117 
1118 	/* Transmit Descriptor Control 0 */
1119 	reg = E1000_READ_REG(hw, E1000_TXDCTL(0));
1120 	reg |= (1 << 22);
1121 	E1000_WRITE_REG(hw, E1000_TXDCTL(0), reg);
1122 
1123 	/* Transmit Descriptor Control 1 */
1124 	reg = E1000_READ_REG(hw, E1000_TXDCTL(1));
1125 	reg |= (1 << 22);
1126 	E1000_WRITE_REG(hw, E1000_TXDCTL(1), reg);
1127 
1128 	/* Transmit Arbitration Control 0 */
1129 	reg = E1000_READ_REG(hw, E1000_TARC(0));
1130 	reg &= ~(0xF << 27); /* 30:27 */
1131 	switch (hw->mac.type) {
1132 	case e1000_82571:
1133 	case e1000_82572:
1134 		reg |= (1 << 23) | (1 << 24) | (1 << 25) | (1 << 26);
1135 		break;
1136 	default:
1137 		break;
1138 	}
1139 	E1000_WRITE_REG(hw, E1000_TARC(0), reg);
1140 
1141 	/* Transmit Arbitration Control 1 */
1142 	reg = E1000_READ_REG(hw, E1000_TARC(1));
1143 	switch (hw->mac.type) {
1144 	case e1000_82571:
1145 	case e1000_82572:
1146 		reg &= ~((1 << 29) | (1 << 30));
1147 		reg |= (1 << 22) | (1 << 24) | (1 << 25) | (1 << 26);
1148 		if (E1000_READ_REG(hw, E1000_TCTL) & E1000_TCTL_MULR)
1149 			reg &= ~(1 << 28);
1150 		else
1151 			reg |= (1 << 28);
1152 		E1000_WRITE_REG(hw, E1000_TARC(1), reg);
1153 		break;
1154 	default:
1155 		break;
1156 	}
1157 
1158 	/* Device Control */
1159 	switch (hw->mac.type) {
1160 	case e1000_82573:
1161 	case e1000_82574:
1162 	case e1000_82583:
1163 		reg = E1000_READ_REG(hw, E1000_CTRL);
1164 		reg &= ~(1 << 29);
1165 		E1000_WRITE_REG(hw, E1000_CTRL, reg);
1166 		break;
1167 	default:
1168 		break;
1169 	}
1170 
1171 	/* Extended Device Control */
1172 	switch (hw->mac.type) {
1173 	case e1000_82573:
1174 	case e1000_82574:
1175 	case e1000_82583:
1176 		reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
1177 		reg &= ~(1 << 23);
1178 		reg |= (1 << 22);
1179 		E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg);
1180 		break;
1181 	default:
1182 		break;
1183 	}
1184 
1185 	if (hw->mac.type == e1000_82571) {
1186 		reg = E1000_READ_REG(hw, E1000_PBA_ECC);
1187 		reg |= E1000_PBA_ECC_CORR_EN;
1188 		E1000_WRITE_REG(hw, E1000_PBA_ECC, reg);
1189 	}
1190 
1191 	/*
1192 	 * Workaround for hardware errata.
1193 	 * Ensure that DMA Dynamic Clock gating is disabled on 82571 and 82572
1194 	 */
1195 	if ((hw->mac.type == e1000_82571) ||
1196 	   (hw->mac.type == e1000_82572)) {
1197 		reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
1198 		reg &= ~E1000_CTRL_EXT_DMA_DYN_CLK_EN;
1199 		E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg);
1200 	}
1201 
1202 	/* PCI-Ex Control Registers */
1203 	switch (hw->mac.type) {
1204 	case e1000_82574:
1205 	case e1000_82583:
1206 		reg = E1000_READ_REG(hw, E1000_GCR);
1207 		reg |= (1 << 22);
1208 		E1000_WRITE_REG(hw, E1000_GCR, reg);
1209 
1210 		/*
1211 		 * Workaround for hardware errata.
1212 		 * apply workaround for hardware errata documented in errata
1213 		 * docs Fixes issue where some error prone or unreliable PCIe
1214 		 * completions are occurring, particularly with ASPM enabled.
1215 		 * Without fix, issue can cause tx timeouts.
1216 		 */
1217 		reg = E1000_READ_REG(hw, E1000_GCR2);
1218 		reg |= 1;
1219 		E1000_WRITE_REG(hw, E1000_GCR2, reg);
1220 		break;
1221 	default:
1222 		break;
1223 	}
1224 
1225 	return;
1226 }
1227 
1228 /**
1229  *  e1000_clear_vfta_82571 - Clear VLAN filter table
1230  *  @hw: pointer to the HW structure
1231  *
1232  *  Clears the register array which contains the VLAN filter table by
1233  *  setting all the values to 0.
1234  **/
1235 static void e1000_clear_vfta_82571(struct e1000_hw *hw)
1236 {
1237 	u32 offset;
1238 	u32 vfta_value = 0;
1239 	u32 vfta_offset = 0;
1240 	u32 vfta_bit_in_reg = 0;
1241 
1242 	DEBUGFUNC("e1000_clear_vfta_82571");
1243 
1244 	switch (hw->mac.type) {
1245 	case e1000_82573:
1246 	case e1000_82574:
1247 	case e1000_82583:
1248 		if (hw->mng_cookie.vlan_id != 0) {
1249 			/*
1250 			 * The VFTA is a 4096b bit-field, each identifying
1251 			 * a single VLAN ID.  The following operations
1252 			 * determine which 32b entry (i.e. offset) into the
1253 			 * array we want to set the VLAN ID (i.e. bit) of
1254 			 * the manageability unit.
1255 			 */
1256 			vfta_offset = (hw->mng_cookie.vlan_id >>
1257 				E1000_VFTA_ENTRY_SHIFT) & E1000_VFTA_ENTRY_MASK;
1258 			vfta_bit_in_reg = 1 << (hw->mng_cookie.vlan_id &
1259 				E1000_VFTA_ENTRY_BIT_SHIFT_MASK);
1260 		}
1261 		break;
1262 	default:
1263 		break;
1264 	}
1265 	for (offset = 0; offset < E1000_VLAN_FILTER_TBL_SIZE; offset++) {
1266 		/*
1267 		 * If the offset we want to clear is the same offset of the
1268 		 * manageability VLAN ID, then clear all bits except that of
1269 		 * the manageability unit.
1270 		 */
1271 		vfta_value = (offset == vfta_offset) ? vfta_bit_in_reg : 0;
1272 		E1000_WRITE_REG_ARRAY(hw, E1000_VFTA, offset, vfta_value);
1273 		E1000_WRITE_FLUSH(hw);
1274 	}
1275 }
1276 
1277 /**
1278  *  e1000_check_mng_mode_82574 - Check manageability is enabled
1279  *  @hw: pointer to the HW structure
1280  *
1281  *  Reads the NVM Initialization Control Word 2 and returns TRUE
1282  *  (>0) if any manageability is enabled, else FALSE (0).
1283  **/
1284 static bool e1000_check_mng_mode_82574(struct e1000_hw *hw)
1285 {
1286 	u16 data;
1287 
1288 	DEBUGFUNC("e1000_check_mng_mode_82574");
1289 
1290 	hw->nvm.ops.read(hw, NVM_INIT_CONTROL2_REG, 1, &data);
1291 	return (data & E1000_NVM_INIT_CTRL2_MNGM) != 0;
1292 }
1293 
1294 /**
1295  *  e1000_led_on_82574 - Turn LED on
1296  *  @hw: pointer to the HW structure
1297  *
1298  *  Turn LED on.
1299  **/
1300 static s32 e1000_led_on_82574(struct e1000_hw *hw)
1301 {
1302 	u32 ctrl;
1303 	u32 i;
1304 
1305 	DEBUGFUNC("e1000_led_on_82574");
1306 
1307 	ctrl = hw->mac.ledctl_mode2;
1308 	if (!(E1000_STATUS_LU & E1000_READ_REG(hw, E1000_STATUS))) {
1309 		/*
1310 		 * If no link, then turn LED on by setting the invert bit
1311 		 * for each LED that's "on" (0x0E) in ledctl_mode2.
1312 		 */
1313 		for (i = 0; i < 4; i++)
1314 			if (((hw->mac.ledctl_mode2 >> (i * 8)) & 0xFF) ==
1315 			    E1000_LEDCTL_MODE_LED_ON)
1316 				ctrl |= (E1000_LEDCTL_LED0_IVRT << (i * 8));
1317 	}
1318 	E1000_WRITE_REG(hw, E1000_LEDCTL, ctrl);
1319 
1320 	return E1000_SUCCESS;
1321 }
1322 
1323 
1324 /**
1325  *  e1000_setup_link_82571 - Setup flow control and link settings
1326  *  @hw: pointer to the HW structure
1327  *
1328  *  Determines which flow control settings to use, then configures flow
1329  *  control.  Calls the appropriate media-specific link configuration
1330  *  function.  Assuming the adapter has a valid link partner, a valid link
1331  *  should be established.  Assumes the hardware has previously been reset
1332  *  and the transmitter and receiver are not enabled.
1333  **/
1334 static s32 e1000_setup_link_82571(struct e1000_hw *hw)
1335 {
1336 	DEBUGFUNC("e1000_setup_link_82571");
1337 
1338 	/*
1339 	 * 82573 does not have a word in the NVM to determine
1340 	 * the default flow control setting, so we explicitly
1341 	 * set it to full.
1342 	 */
1343 	switch (hw->mac.type) {
1344 	case e1000_82573:
1345 	case e1000_82574:
1346 	case e1000_82583:
1347 		if (hw->fc.requested_mode == e1000_fc_default)
1348 			hw->fc.requested_mode = e1000_fc_full;
1349 		break;
1350 	default:
1351 		break;
1352 	}
1353 	return e1000_setup_link_generic(hw);
1354 }
1355 
1356 /**
1357  *  e1000_setup_copper_link_82571 - Configure copper link settings
1358  *  @hw: pointer to the HW structure
1359  *
1360  *  Configures the link for auto-neg or forced speed and duplex.  Then we check
1361  *  for link, once link is established calls to configure collision distance
1362  *  and flow control are called.
1363  **/
1364 static s32 e1000_setup_copper_link_82571(struct e1000_hw *hw)
1365 {
1366 	u32 ctrl;
1367 	s32  ret_val;
1368 
1369 	DEBUGFUNC("e1000_setup_copper_link_82571");
1370 
1371 	ctrl = E1000_READ_REG(hw, E1000_CTRL);
1372 	ctrl |= E1000_CTRL_SLU;
1373 	ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
1374 	E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
1375 
1376 	switch (hw->phy.type) {
1377 	case e1000_phy_m88:
1378 	case e1000_phy_bm:
1379 		ret_val = e1000_copper_link_setup_m88(hw);
1380 		break;
1381 	case e1000_phy_igp_2:
1382 		ret_val = e1000_copper_link_setup_igp(hw);
1383 		break;
1384 	default:
1385 		ret_val = -E1000_ERR_PHY;
1386 		break;
1387 	}
1388 
1389 	if (ret_val)
1390 		goto out;
1391 
1392 	ret_val = e1000_setup_copper_link_generic(hw);
1393 
1394 out:
1395 	return ret_val;
1396 }
1397 
1398 /**
1399  *  e1000_setup_fiber_serdes_link_82571 - Setup link for fiber/serdes
1400  *  @hw: pointer to the HW structure
1401  *
1402  *  Configures collision distance and flow control for fiber and serdes links.
1403  *  Upon successful setup, poll for link.
1404  **/
1405 static s32 e1000_setup_fiber_serdes_link_82571(struct e1000_hw *hw)
1406 {
1407 	DEBUGFUNC("e1000_setup_fiber_serdes_link_82571");
1408 
1409 	switch (hw->mac.type) {
1410 	case e1000_82571:
1411 	case e1000_82572:
1412 		/*
1413 		 * If SerDes loopback mode is entered, there is no form
1414 		 * of reset to take the adapter out of that mode.  So we
1415 		 * have to explicitly take the adapter out of loopback
1416 		 * mode.  This prevents drivers from twiddling their thumbs
1417 		 * if another tool failed to take it out of loopback mode.
1418 		 */
1419 		E1000_WRITE_REG(hw, E1000_SCTL, E1000_SCTL_DISABLE_SERDES_LOOPBACK);
1420 		break;
1421 	default:
1422 		break;
1423 	}
1424 
1425 	return e1000_setup_fiber_serdes_link_generic(hw);
1426 }
1427 
1428 /**
1429  *  e1000_check_for_serdes_link_82571 - Check for link (Serdes)
1430  *  @hw: pointer to the HW structure
1431  *
1432  *  Reports the link state as up or down.
1433  *
1434  *  If autonegotiation is supported by the link partner, the link state is
1435  *  determined by the result of autonegotiation. This is the most likely case.
1436  *  If autonegotiation is not supported by the link partner, and the link
1437  *  has a valid signal, force the link up.
1438  *
1439  *  The link state is represented internally here by 4 states:
1440  *
1441  *  1) down
1442  *  2) autoneg_progress
1443  *  3) autoneg_complete (the link sucessfully autonegotiated)
1444  *  4) forced_up (the link has been forced up, it did not autonegotiate)
1445  *
1446  **/
1447 static s32 e1000_check_for_serdes_link_82571(struct e1000_hw *hw)
1448 {
1449 	struct e1000_mac_info *mac = &hw->mac;
1450 	u32 rxcw;
1451 	u32 ctrl;
1452 	u32 status;
1453 	s32 ret_val = E1000_SUCCESS;
1454 
1455 	DEBUGFUNC("e1000_check_for_serdes_link_82571");
1456 
1457 	ctrl = E1000_READ_REG(hw, E1000_CTRL);
1458 	status = E1000_READ_REG(hw, E1000_STATUS);
1459 	rxcw = E1000_READ_REG(hw, E1000_RXCW);
1460 
1461 	if ((rxcw & E1000_RXCW_SYNCH) && !(rxcw & E1000_RXCW_IV)) {
1462 
1463 		/* Receiver is synchronized with no invalid bits.  */
1464 		switch (mac->serdes_link_state) {
1465 		case e1000_serdes_link_autoneg_complete:
1466 			if (!(status & E1000_STATUS_LU)) {
1467 				/*
1468 				 * We have lost link, retry autoneg before
1469 				 * reporting link failure
1470 				 */
1471 				mac->serdes_link_state =
1472 				    e1000_serdes_link_autoneg_progress;
1473 				mac->serdes_has_link = FALSE;
1474 				DEBUGOUT("AN_UP     -> AN_PROG\n");
1475 			}
1476 		break;
1477 
1478 		case e1000_serdes_link_forced_up:
1479 			/*
1480 			 * If we are receiving /C/ ordered sets, re-enable
1481 			 * auto-negotiation in the TXCW register and disable
1482 			 * forced link in the Device Control register in an
1483 			 * attempt to auto-negotiate with our link partner.
1484 			 */
1485 			if (rxcw & E1000_RXCW_C) {
1486 				/* Enable autoneg, and unforce link up */
1487 				E1000_WRITE_REG(hw, E1000_TXCW, mac->txcw);
1488 				E1000_WRITE_REG(hw, E1000_CTRL,
1489 				    (ctrl & ~E1000_CTRL_SLU));
1490 				mac->serdes_link_state =
1491 				    e1000_serdes_link_autoneg_progress;
1492 				mac->serdes_has_link = FALSE;
1493 				DEBUGOUT("FORCED_UP -> AN_PROG\n");
1494 			}
1495 			break;
1496 
1497 		case e1000_serdes_link_autoneg_progress:
1498 			if (rxcw & E1000_RXCW_C) {
1499 				/*
1500 				 * We received /C/ ordered sets, meaning the
1501 				 * link partner has autonegotiated, and we can
1502 				 * trust the Link Up (LU) status bit.
1503 				 */
1504 				if (status & E1000_STATUS_LU) {
1505 					mac->serdes_link_state =
1506 					    e1000_serdes_link_autoneg_complete;
1507 					DEBUGOUT("AN_PROG   -> AN_UP\n");
1508 					mac->serdes_has_link = TRUE;
1509 				} else {
1510 					/* Autoneg completed, but failed. */
1511 					mac->serdes_link_state =
1512 					    e1000_serdes_link_down;
1513 					DEBUGOUT("AN_PROG   -> DOWN\n");
1514 				}
1515 			} else {
1516 				/*
1517 				 * The link partner did not autoneg.
1518 				 * Force link up and full duplex, and change
1519 				 * state to forced.
1520 				 */
1521 				E1000_WRITE_REG(hw, E1000_TXCW,
1522 				(mac->txcw & ~E1000_TXCW_ANE));
1523 				ctrl |= (E1000_CTRL_SLU | E1000_CTRL_FD);
1524 				E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
1525 
1526 				/* Configure Flow Control after link up. */
1527 				ret_val =
1528 				    e1000_config_fc_after_link_up_generic(hw);
1529 				if (ret_val) {
1530 					DEBUGOUT("Error config flow control\n");
1531 					break;
1532 				}
1533 				mac->serdes_link_state =
1534 				e1000_serdes_link_forced_up;
1535 				mac->serdes_has_link = TRUE;
1536 				DEBUGOUT("AN_PROG   -> FORCED_UP\n");
1537 			}
1538 			break;
1539 
1540 		case e1000_serdes_link_down:
1541 		default:
1542 			/*
1543 			 * The link was down but the receiver has now gained
1544 			 * valid sync, so lets see if we can bring the link
1545 			 * up.
1546 			 */
1547 			E1000_WRITE_REG(hw, E1000_TXCW, mac->txcw);
1548 			E1000_WRITE_REG(hw, E1000_CTRL,
1549 			    (ctrl & ~E1000_CTRL_SLU));
1550 			mac->serdes_link_state =
1551 			    e1000_serdes_link_autoneg_progress;
1552 			DEBUGOUT("DOWN      -> AN_PROG\n");
1553 			break;
1554 		}
1555 	} else {
1556 		if (!(rxcw & E1000_RXCW_SYNCH)) {
1557 			mac->serdes_has_link = FALSE;
1558 			mac->serdes_link_state = e1000_serdes_link_down;
1559 			DEBUGOUT("ANYSTATE  -> DOWN\n");
1560 		} else {
1561 			/*
1562 			 * We have sync, and can tolerate one invalid (IV)
1563 			 * codeword before declaring link down, so reread
1564 			 * to look again.
1565 			 */
1566 			usec_delay(10);
1567 			rxcw = E1000_READ_REG(hw, E1000_RXCW);
1568 			if (rxcw & E1000_RXCW_IV) {
1569 				mac->serdes_link_state = e1000_serdes_link_down;
1570 				mac->serdes_has_link = FALSE;
1571 				DEBUGOUT("ANYSTATE  -> DOWN\n");
1572 			}
1573 		}
1574 	}
1575 
1576 	return ret_val;
1577 }
1578 
1579 /**
1580  *  e1000_valid_led_default_82571 - Verify a valid default LED config
1581  *  @hw: pointer to the HW structure
1582  *  @data: pointer to the NVM (EEPROM)
1583  *
1584  *  Read the EEPROM for the current default LED configuration.  If the
1585  *  LED configuration is not valid, set to a valid LED configuration.
1586  **/
1587 static s32 e1000_valid_led_default_82571(struct e1000_hw *hw, u16 *data)
1588 {
1589 	s32 ret_val;
1590 
1591 	DEBUGFUNC("e1000_valid_led_default_82571");
1592 
1593 	ret_val = hw->nvm.ops.read(hw, NVM_ID_LED_SETTINGS, 1, data);
1594 	if (ret_val) {
1595 		DEBUGOUT("NVM Read Error\n");
1596 		goto out;
1597 	}
1598 
1599 	switch (hw->mac.type) {
1600 	case e1000_82573:
1601 	case e1000_82574:
1602 	case e1000_82583:
1603 		if (*data == ID_LED_RESERVED_F746)
1604 			*data = ID_LED_DEFAULT_82573;
1605 		break;
1606 	default:
1607 		if (*data == ID_LED_RESERVED_0000 ||
1608 		    *data == ID_LED_RESERVED_FFFF)
1609 			*data = ID_LED_DEFAULT;
1610 		break;
1611 	}
1612 
1613 out:
1614 	return ret_val;
1615 }
1616 
1617 /**
1618  *  e1000_get_laa_state_82571 - Get locally administered address state
1619  *  @hw: pointer to the HW structure
1620  *
1621  *  Retrieve and return the current locally administered address state.
1622  **/
1623 bool e1000_get_laa_state_82571(struct e1000_hw *hw)
1624 {
1625 	DEBUGFUNC("e1000_get_laa_state_82571");
1626 
1627 	if (hw->mac.type != e1000_82571)
1628 		return FALSE;
1629 
1630 	return hw->dev_spec._82571.laa_is_present;
1631 }
1632 
1633 /**
1634  *  e1000_set_laa_state_82571 - Set locally administered address state
1635  *  @hw: pointer to the HW structure
1636  *  @state: enable/disable locally administered address
1637  *
1638  *  Enable/Disable the current locally administered address state.
1639  **/
1640 void e1000_set_laa_state_82571(struct e1000_hw *hw, bool state)
1641 {
1642 	DEBUGFUNC("e1000_set_laa_state_82571");
1643 
1644 	if (hw->mac.type != e1000_82571)
1645 		return;
1646 
1647 	hw->dev_spec._82571.laa_is_present = state;
1648 
1649 	/* If workaround is activated... */
1650 	if (state)
1651 		/*
1652 		 * Hold a copy of the LAA in RAR[14] This is done so that
1653 		 * between the time RAR[0] gets clobbered and the time it
1654 		 * gets fixed, the actual LAA is in one of the RARs and no
1655 		 * incoming packets directed to this port are dropped.
1656 		 * Eventually the LAA will be in RAR[0] and RAR[14].
1657 		 */
1658 		e1000_rar_set_generic(hw, hw->mac.addr,
1659 		                      hw->mac.rar_entry_count - 1);
1660 	return;
1661 }
1662 
1663 /**
1664  *  e1000_fix_nvm_checksum_82571 - Fix EEPROM checksum
1665  *  @hw: pointer to the HW structure
1666  *
1667  *  Verifies that the EEPROM has completed the update.  After updating the
1668  *  EEPROM, we need to check bit 15 in work 0x23 for the checksum fix.  If
1669  *  the checksum fix is not implemented, we need to set the bit and update
1670  *  the checksum.  Otherwise, if bit 15 is set and the checksum is incorrect,
1671  *  we need to return bad checksum.
1672  **/
1673 static s32 e1000_fix_nvm_checksum_82571(struct e1000_hw *hw)
1674 {
1675 	struct e1000_nvm_info *nvm = &hw->nvm;
1676 	s32 ret_val = E1000_SUCCESS;
1677 	u16 data;
1678 
1679 	DEBUGFUNC("e1000_fix_nvm_checksum_82571");
1680 
1681 	if (nvm->type != e1000_nvm_flash_hw)
1682 		goto out;
1683 
1684 	/*
1685 	 * Check bit 4 of word 10h.  If it is 0, firmware is done updating
1686 	 * 10h-12h.  Checksum may need to be fixed.
1687 	 */
1688 	ret_val = nvm->ops.read(hw, 0x10, 1, &data);
1689 	if (ret_val)
1690 		goto out;
1691 
1692 	if (!(data & 0x10)) {
1693 		/*
1694 		 * Read 0x23 and check bit 15.  This bit is a 1
1695 		 * when the checksum has already been fixed.  If
1696 		 * the checksum is still wrong and this bit is a
1697 		 * 1, we need to return bad checksum.  Otherwise,
1698 		 * we need to set this bit to a 1 and update the
1699 		 * checksum.
1700 		 */
1701 		ret_val = nvm->ops.read(hw, 0x23, 1, &data);
1702 		if (ret_val)
1703 			goto out;
1704 
1705 		if (!(data & 0x8000)) {
1706 			data |= 0x8000;
1707 			ret_val = nvm->ops.write(hw, 0x23, 1, &data);
1708 			if (ret_val)
1709 				goto out;
1710 			ret_val = nvm->ops.update(hw);
1711 		}
1712 	}
1713 
1714 out:
1715 	return ret_val;
1716 }
1717 
1718 
1719 /**
1720  *  e1000_read_mac_addr_82571 - Read device MAC address
1721  *  @hw: pointer to the HW structure
1722  **/
1723 static s32 e1000_read_mac_addr_82571(struct e1000_hw *hw)
1724 {
1725 	s32 ret_val = E1000_SUCCESS;
1726 
1727 	DEBUGFUNC("e1000_read_mac_addr_82571");
1728 
1729 	/*
1730 	 * If there's an alternate MAC address place it in RAR0
1731 	 * so that it will override the Si installed default perm
1732 	 * address.
1733 	 */
1734 	ret_val = e1000_check_alt_mac_addr_generic(hw);
1735 	if (ret_val)
1736 		goto out;
1737 
1738 	ret_val = e1000_read_mac_addr_generic(hw);
1739 
1740 out:
1741 	return ret_val;
1742 }
1743 
1744 /**
1745  * e1000_power_down_phy_copper_82571 - Remove link during PHY power down
1746  * @hw: pointer to the HW structure
1747  *
1748  * In the case of a PHY power down to save power, or to turn off link during a
1749  * driver unload, or wake on lan is not enabled, remove the link.
1750  **/
1751 static void e1000_power_down_phy_copper_82571(struct e1000_hw *hw)
1752 {
1753 	struct e1000_phy_info *phy = &hw->phy;
1754 	struct e1000_mac_info *mac = &hw->mac;
1755 
1756 	if (!(phy->ops.check_reset_block))
1757 		return;
1758 
1759 	/* If the management interface is not enabled, then power down */
1760 	if (!(mac->ops.check_mng_mode(hw) || phy->ops.check_reset_block(hw)))
1761 		e1000_power_down_phy_copper(hw);
1762 
1763 	return;
1764 }
1765 
1766 /**
1767  *  e1000_clear_hw_cntrs_82571 - Clear device specific hardware counters
1768  *  @hw: pointer to the HW structure
1769  *
1770  *  Clears the hardware counters by reading the counter registers.
1771  **/
1772 static void e1000_clear_hw_cntrs_82571(struct e1000_hw *hw)
1773 {
1774 	DEBUGFUNC("e1000_clear_hw_cntrs_82571");
1775 
1776 	e1000_clear_hw_cntrs_base_generic(hw);
1777 
1778 	E1000_READ_REG(hw, E1000_PRC64);
1779 	E1000_READ_REG(hw, E1000_PRC127);
1780 	E1000_READ_REG(hw, E1000_PRC255);
1781 	E1000_READ_REG(hw, E1000_PRC511);
1782 	E1000_READ_REG(hw, E1000_PRC1023);
1783 	E1000_READ_REG(hw, E1000_PRC1522);
1784 	E1000_READ_REG(hw, E1000_PTC64);
1785 	E1000_READ_REG(hw, E1000_PTC127);
1786 	E1000_READ_REG(hw, E1000_PTC255);
1787 	E1000_READ_REG(hw, E1000_PTC511);
1788 	E1000_READ_REG(hw, E1000_PTC1023);
1789 	E1000_READ_REG(hw, E1000_PTC1522);
1790 
1791 	E1000_READ_REG(hw, E1000_ALGNERRC);
1792 	E1000_READ_REG(hw, E1000_RXERRC);
1793 	E1000_READ_REG(hw, E1000_TNCRS);
1794 	E1000_READ_REG(hw, E1000_CEXTERR);
1795 	E1000_READ_REG(hw, E1000_TSCTC);
1796 	E1000_READ_REG(hw, E1000_TSCTFC);
1797 
1798 	E1000_READ_REG(hw, E1000_MGTPRC);
1799 	E1000_READ_REG(hw, E1000_MGTPDC);
1800 	E1000_READ_REG(hw, E1000_MGTPTC);
1801 
1802 	E1000_READ_REG(hw, E1000_IAC);
1803 	E1000_READ_REG(hw, E1000_ICRXOC);
1804 
1805 	E1000_READ_REG(hw, E1000_ICRXPTC);
1806 	E1000_READ_REG(hw, E1000_ICRXATC);
1807 	E1000_READ_REG(hw, E1000_ICTXPTC);
1808 	E1000_READ_REG(hw, E1000_ICTXATC);
1809 	E1000_READ_REG(hw, E1000_ICTXQEC);
1810 	E1000_READ_REG(hw, E1000_ICTXQMTC);
1811 	E1000_READ_REG(hw, E1000_ICRXDMTC);
1812 }
1813