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