e1000 - Literally import e1000 driver from FreeBSD
[dragonfly.git] / sys / dev / netif / e1000 / e1000_82571.c
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 }