Merge remote branch 'crater/master' into net80211-update
[dragonfly.git] / sys / dev / netif / e1000 / e1000_mac.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 #include "e1000_api.h"
36
37 static s32 e1000_validate_mdi_setting_generic(struct e1000_hw *hw);
38 static void e1000_set_lan_id_multi_port_pcie(struct e1000_hw *hw);
39
40 /**
41  *  e1000_init_mac_ops_generic - Initialize MAC function pointers
42  *  @hw: pointer to the HW structure
43  *
44  *  Setups up the function pointers to no-op functions
45  **/
46 void e1000_init_mac_ops_generic(struct e1000_hw *hw)
47 {
48         struct e1000_mac_info *mac = &hw->mac;
49         DEBUGFUNC("e1000_init_mac_ops_generic");
50
51         /* General Setup */
52         mac->ops.init_params = e1000_null_ops_generic;
53         mac->ops.init_hw = e1000_null_ops_generic;
54         mac->ops.reset_hw = e1000_null_ops_generic;
55         mac->ops.setup_physical_interface = e1000_null_ops_generic;
56         mac->ops.get_bus_info = e1000_null_ops_generic;
57         mac->ops.set_lan_id = e1000_set_lan_id_multi_port_pcie;
58         mac->ops.read_mac_addr = e1000_read_mac_addr_generic;
59         mac->ops.config_collision_dist = e1000_config_collision_dist_generic;
60         mac->ops.clear_hw_cntrs = e1000_null_mac_generic;
61         /* LED */
62         mac->ops.cleanup_led = e1000_null_ops_generic;
63         mac->ops.setup_led = e1000_null_ops_generic;
64         mac->ops.blink_led = e1000_null_ops_generic;
65         mac->ops.led_on = e1000_null_ops_generic;
66         mac->ops.led_off = e1000_null_ops_generic;
67         /* LINK */
68         mac->ops.setup_link = e1000_null_ops_generic;
69         mac->ops.get_link_up_info = e1000_null_link_info;
70         mac->ops.check_for_link = e1000_null_ops_generic;
71         mac->ops.wait_autoneg = e1000_wait_autoneg_generic;
72         /* Management */
73         mac->ops.check_mng_mode = e1000_null_mng_mode;
74         mac->ops.mng_host_if_write = e1000_mng_host_if_write_generic;
75         mac->ops.mng_write_cmd_header = e1000_mng_write_cmd_header_generic;
76         mac->ops.mng_enable_host_if = e1000_mng_enable_host_if_generic;
77         /* VLAN, MC, etc. */
78         mac->ops.update_mc_addr_list = e1000_null_update_mc;
79         mac->ops.clear_vfta = e1000_null_mac_generic;
80         mac->ops.write_vfta = e1000_null_write_vfta;
81         mac->ops.rar_set = e1000_rar_set_generic;
82         mac->ops.validate_mdi_setting = e1000_validate_mdi_setting_generic;
83 }
84
85 /**
86  *  e1000_null_ops_generic - No-op function, returns 0
87  *  @hw: pointer to the HW structure
88  **/
89 s32 e1000_null_ops_generic(struct e1000_hw *hw)
90 {
91         DEBUGFUNC("e1000_null_ops_generic");
92         return E1000_SUCCESS;
93 }
94
95 /**
96  *  e1000_null_mac_generic - No-op function, return void
97  *  @hw: pointer to the HW structure
98  **/
99 void e1000_null_mac_generic(struct e1000_hw *hw)
100 {
101         DEBUGFUNC("e1000_null_mac_generic");
102         return;
103 }
104
105 /**
106  *  e1000_null_link_info - No-op function, return 0
107  *  @hw: pointer to the HW structure
108  **/
109 s32 e1000_null_link_info(struct e1000_hw *hw, u16 *s, u16 *d)
110 {
111         DEBUGFUNC("e1000_null_link_info");
112         return E1000_SUCCESS;
113 }
114
115 /**
116  *  e1000_null_mng_mode - No-op function, return FALSE
117  *  @hw: pointer to the HW structure
118  **/
119 bool e1000_null_mng_mode(struct e1000_hw *hw)
120 {
121         DEBUGFUNC("e1000_null_mng_mode");
122         return FALSE;
123 }
124
125 /**
126  *  e1000_null_update_mc - No-op function, return void
127  *  @hw: pointer to the HW structure
128  **/
129 void e1000_null_update_mc(struct e1000_hw *hw, u8 *h, u32 a)
130 {
131         DEBUGFUNC("e1000_null_update_mc");
132         return;
133 }
134
135 /**
136  *  e1000_null_write_vfta - No-op function, return void
137  *  @hw: pointer to the HW structure
138  **/
139 void e1000_null_write_vfta(struct e1000_hw *hw, u32 a, u32 b)
140 {
141         DEBUGFUNC("e1000_null_write_vfta");
142         return;
143 }
144
145 /**
146  *  e1000_null_rar_set - No-op function, return void
147  *  @hw: pointer to the HW structure
148  **/
149 void e1000_null_rar_set(struct e1000_hw *hw, u8 *h, u32 a)
150 {
151         DEBUGFUNC("e1000_null_rar_set");
152         return;
153 }
154
155 /**
156  *  e1000_get_bus_info_pci_generic - Get PCI(x) bus information
157  *  @hw: pointer to the HW structure
158  *
159  *  Determines and stores the system bus information for a particular
160  *  network interface.  The following bus information is determined and stored:
161  *  bus speed, bus width, type (PCI/PCIx), and PCI(-x) function.
162  **/
163 s32 e1000_get_bus_info_pci_generic(struct e1000_hw *hw)
164 {
165         struct e1000_mac_info *mac = &hw->mac;
166         struct e1000_bus_info *bus = &hw->bus;
167         u32 status = E1000_READ_REG(hw, E1000_STATUS);
168         s32 ret_val = E1000_SUCCESS;
169
170         DEBUGFUNC("e1000_get_bus_info_pci_generic");
171
172         /* PCI or PCI-X? */
173         bus->type = (status & E1000_STATUS_PCIX_MODE)
174                         ? e1000_bus_type_pcix
175                         : e1000_bus_type_pci;
176
177         /* Bus speed */
178         if (bus->type == e1000_bus_type_pci) {
179                 bus->speed = (status & E1000_STATUS_PCI66)
180                              ? e1000_bus_speed_66
181                              : e1000_bus_speed_33;
182         } else {
183                 switch (status & E1000_STATUS_PCIX_SPEED) {
184                 case E1000_STATUS_PCIX_SPEED_66:
185                         bus->speed = e1000_bus_speed_66;
186                         break;
187                 case E1000_STATUS_PCIX_SPEED_100:
188                         bus->speed = e1000_bus_speed_100;
189                         break;
190                 case E1000_STATUS_PCIX_SPEED_133:
191                         bus->speed = e1000_bus_speed_133;
192                         break;
193                 default:
194                         bus->speed = e1000_bus_speed_reserved;
195                         break;
196                 }
197         }
198
199         /* Bus width */
200         bus->width = (status & E1000_STATUS_BUS64)
201                      ? e1000_bus_width_64
202                      : e1000_bus_width_32;
203
204         /* Which PCI(-X) function? */
205         mac->ops.set_lan_id(hw);
206
207         return ret_val;
208 }
209
210 /**
211  *  e1000_get_bus_info_pcie_generic - Get PCIe bus information
212  *  @hw: pointer to the HW structure
213  *
214  *  Determines and stores the system bus information for a particular
215  *  network interface.  The following bus information is determined and stored:
216  *  bus speed, bus width, type (PCIe), and PCIe function.
217  **/
218 s32 e1000_get_bus_info_pcie_generic(struct e1000_hw *hw)
219 {
220         struct e1000_mac_info *mac = &hw->mac;
221         struct e1000_bus_info *bus = &hw->bus;
222         s32 ret_val;
223         u16 pcie_link_status;
224
225         DEBUGFUNC("e1000_get_bus_info_pcie_generic");
226
227         bus->type = e1000_bus_type_pci_express;
228         bus->speed = e1000_bus_speed_2500;
229
230         ret_val = e1000_read_pcie_cap_reg(hw,
231                                           PCIE_LINK_STATUS,
232                                           &pcie_link_status);
233         if (ret_val)
234                 bus->width = e1000_bus_width_unknown;
235         else
236                 bus->width = (enum e1000_bus_width)((pcie_link_status &
237                                                 PCIE_LINK_WIDTH_MASK) >>
238                                                PCIE_LINK_WIDTH_SHIFT);
239
240         mac->ops.set_lan_id(hw);
241
242         return E1000_SUCCESS;
243 }
244
245 /**
246  *  e1000_set_lan_id_multi_port_pcie - Set LAN id for PCIe multiple port devices
247  *
248  *  @hw: pointer to the HW structure
249  *
250  *  Determines the LAN function id by reading memory-mapped registers
251  *  and swaps the port value if requested.
252  **/
253 static void e1000_set_lan_id_multi_port_pcie(struct e1000_hw *hw)
254 {
255         struct e1000_bus_info *bus = &hw->bus;
256         u32 reg;
257
258         /*
259          * The status register reports the correct function number
260          * for the device regardless of function swap state.
261          */
262         reg = E1000_READ_REG(hw, E1000_STATUS);
263         bus->func = (reg & E1000_STATUS_FUNC_MASK) >> E1000_STATUS_FUNC_SHIFT;
264 }
265
266 /**
267  *  e1000_set_lan_id_multi_port_pci - Set LAN id for PCI multiple port devices
268  *  @hw: pointer to the HW structure
269  *
270  *  Determines the LAN function id by reading PCI config space.
271  **/
272 void e1000_set_lan_id_multi_port_pci(struct e1000_hw *hw)
273 {
274         struct e1000_bus_info *bus = &hw->bus;
275         u16 pci_header_type;
276         u32 status;
277
278         e1000_read_pci_cfg(hw, PCI_HEADER_TYPE_REGISTER, &pci_header_type);
279         if (pci_header_type & PCI_HEADER_TYPE_MULTIFUNC) {
280                 status = E1000_READ_REG(hw, E1000_STATUS);
281                 bus->func = (status & E1000_STATUS_FUNC_MASK)
282                             >> E1000_STATUS_FUNC_SHIFT;
283         } else {
284                 bus->func = 0;
285         }
286 }
287
288 /**
289  *  e1000_set_lan_id_single_port - Set LAN id for a single port device
290  *  @hw: pointer to the HW structure
291  *
292  *  Sets the LAN function id to zero for a single port device.
293  **/
294 void e1000_set_lan_id_single_port(struct e1000_hw *hw)
295 {
296         struct e1000_bus_info *bus = &hw->bus;
297
298         bus->func = 0;
299 }
300
301 /**
302  *  e1000_clear_vfta_generic - Clear VLAN filter table
303  *  @hw: pointer to the HW structure
304  *
305  *  Clears the register array which contains the VLAN filter table by
306  *  setting all the values to 0.
307  **/
308 void e1000_clear_vfta_generic(struct e1000_hw *hw)
309 {
310         u32 offset;
311
312         DEBUGFUNC("e1000_clear_vfta_generic");
313
314         for (offset = 0; offset < E1000_VLAN_FILTER_TBL_SIZE; offset++) {
315                 E1000_WRITE_REG_ARRAY(hw, E1000_VFTA, offset, 0);
316                 E1000_WRITE_FLUSH(hw);
317         }
318 }
319
320 /**
321  *  e1000_write_vfta_generic - Write value to VLAN filter table
322  *  @hw: pointer to the HW structure
323  *  @offset: register offset in VLAN filter table
324  *  @value: register value written to VLAN filter table
325  *
326  *  Writes value at the given offset in the register array which stores
327  *  the VLAN filter table.
328  **/
329 void e1000_write_vfta_generic(struct e1000_hw *hw, u32 offset, u32 value)
330 {
331         DEBUGFUNC("e1000_write_vfta_generic");
332
333         E1000_WRITE_REG_ARRAY(hw, E1000_VFTA, offset, value);
334         E1000_WRITE_FLUSH(hw);
335 }
336
337 /**
338  *  e1000_init_rx_addrs_generic - Initialize receive address's
339  *  @hw: pointer to the HW structure
340  *  @rar_count: receive address registers
341  *
342  *  Setups the receive address registers by setting the base receive address
343  *  register to the devices MAC address and clearing all the other receive
344  *  address registers to 0.
345  **/
346 void e1000_init_rx_addrs_generic(struct e1000_hw *hw, u16 rar_count)
347 {
348         u32 i;
349         u8 mac_addr[ETH_ADDR_LEN] = {0};
350
351         DEBUGFUNC("e1000_init_rx_addrs_generic");
352
353         /* Setup the receive address */
354         DEBUGOUT("Programming MAC Address into RAR[0]\n");
355
356         hw->mac.ops.rar_set(hw, hw->mac.addr, 0);
357
358         /* Zero out the other (rar_entry_count - 1) receive addresses */
359         DEBUGOUT1("Clearing RAR[1-%u]\n", rar_count-1);
360         for (i = 1; i < rar_count; i++)
361                 hw->mac.ops.rar_set(hw, mac_addr, i);
362 }
363
364 /**
365  *  e1000_check_alt_mac_addr_generic - Check for alternate MAC addr
366  *  @hw: pointer to the HW structure
367  *
368  *  Checks the nvm for an alternate MAC address.  An alternate MAC address
369  *  can be setup by pre-boot software and must be treated like a permanent
370  *  address and must override the actual permanent MAC address. If an
371  *  alternate MAC address is found it is programmed into RAR0, replacing
372  *  the permanent address that was installed into RAR0 by the Si on reset.
373  *  This function will return SUCCESS unless it encounters an error while
374  *  reading the EEPROM.
375  **/
376 s32 e1000_check_alt_mac_addr_generic(struct e1000_hw *hw)
377 {
378         u32 i;
379         s32 ret_val = E1000_SUCCESS;
380         u16 offset, nvm_alt_mac_addr_offset, nvm_data;
381         u8 alt_mac_addr[ETH_ADDR_LEN];
382
383         DEBUGFUNC("e1000_check_alt_mac_addr_generic");
384
385         ret_val = hw->nvm.ops.read(hw, NVM_ALT_MAC_ADDR_PTR, 1,
386                                  &nvm_alt_mac_addr_offset);
387         if (ret_val) {
388                 DEBUGOUT("NVM Read Error\n");
389                 goto out;
390         }
391
392         if (nvm_alt_mac_addr_offset == 0xFFFF) {
393                 /* There is no Alternate MAC Address */
394                 goto out;
395         }
396
397         if (hw->bus.func == E1000_FUNC_1)
398                 nvm_alt_mac_addr_offset += E1000_ALT_MAC_ADDRESS_OFFSET_LAN1;
399         if (hw->bus.func == E1000_FUNC_2)
400                 nvm_alt_mac_addr_offset += E1000_ALT_MAC_ADDRESS_OFFSET_LAN2;
401
402         if (hw->bus.func == E1000_FUNC_3)
403                 nvm_alt_mac_addr_offset += E1000_ALT_MAC_ADDRESS_OFFSET_LAN3;
404         for (i = 0; i < ETH_ADDR_LEN; i += 2) {
405                 offset = nvm_alt_mac_addr_offset + (i >> 1);
406                 ret_val = hw->nvm.ops.read(hw, offset, 1, &nvm_data);
407                 if (ret_val) {
408                         DEBUGOUT("NVM Read Error\n");
409                         goto out;
410                 }
411
412                 alt_mac_addr[i] = (u8)(nvm_data & 0xFF);
413                 alt_mac_addr[i + 1] = (u8)(nvm_data >> 8);
414         }
415
416         /* if multicast bit is set, the alternate address will not be used */
417         if (alt_mac_addr[0] & 0x01) {
418                 DEBUGOUT("Ignoring Alternate Mac Address with MC bit set\n");
419                 goto out;
420         }
421
422         /*
423          * We have a valid alternate MAC address, and we want to treat it the
424          * same as the normal permanent MAC address stored by the HW into the
425          * RAR. Do this by mapping this address into RAR0.
426          */
427         hw->mac.ops.rar_set(hw, alt_mac_addr, 0);
428
429 out:
430         return ret_val;
431 }
432
433 /**
434  *  e1000_rar_set_generic - Set receive address register
435  *  @hw: pointer to the HW structure
436  *  @addr: pointer to the receive address
437  *  @index: receive address array register
438  *
439  *  Sets the receive address array register at index to the address passed
440  *  in by addr.
441  **/
442 void e1000_rar_set_generic(struct e1000_hw *hw, u8 *addr, u32 index)
443 {
444         u32 rar_low, rar_high;
445
446         DEBUGFUNC("e1000_rar_set_generic");
447
448         /*
449          * HW expects these in little endian so we reverse the byte order
450          * from network order (big endian) to little endian
451          */
452         rar_low = ((u32) addr[0] |
453                    ((u32) addr[1] << 8) |
454                    ((u32) addr[2] << 16) | ((u32) addr[3] << 24));
455
456         rar_high = ((u32) addr[4] | ((u32) addr[5] << 8));
457
458         /* If MAC address zero, no need to set the AV bit */
459         if (rar_low || rar_high)
460                 rar_high |= E1000_RAH_AV;
461
462         /*
463          * Some bridges will combine consecutive 32-bit writes into
464          * a single burst write, which will malfunction on some parts.
465          * The flushes avoid this.
466          */
467         E1000_WRITE_REG(hw, E1000_RAL(index), rar_low);
468         E1000_WRITE_FLUSH(hw);
469         E1000_WRITE_REG(hw, E1000_RAH(index), rar_high);
470         E1000_WRITE_FLUSH(hw);
471 }
472
473 /**
474  *  e1000_update_mc_addr_list_generic - Update Multicast addresses
475  *  @hw: pointer to the HW structure
476  *  @mc_addr_list: array of multicast addresses to program
477  *  @mc_addr_count: number of multicast addresses to program
478  *
479  *  Updates entire Multicast Table Array.
480  *  The caller must have a packed mc_addr_list of multicast addresses.
481  **/
482 void e1000_update_mc_addr_list_generic(struct e1000_hw *hw,
483                                        u8 *mc_addr_list, u32 mc_addr_count)
484 {
485         u32 hash_value, hash_bit, hash_reg;
486         int i;
487
488         DEBUGFUNC("e1000_update_mc_addr_list_generic");
489
490         /* clear mta_shadow */
491         memset(&hw->mac.mta_shadow, 0, sizeof(hw->mac.mta_shadow));
492
493         /* update mta_shadow from mc_addr_list */
494         for (i = 0; (u32) i < mc_addr_count; i++) {
495                 hash_value = e1000_hash_mc_addr_generic(hw, mc_addr_list);
496
497                 hash_reg = (hash_value >> 5) & (hw->mac.mta_reg_count - 1);
498                 hash_bit = hash_value & 0x1F;
499
500                 hw->mac.mta_shadow[hash_reg] |= (1 << hash_bit);
501                 mc_addr_list += (ETH_ADDR_LEN);
502         }
503
504         /* replace the entire MTA table */
505         for (i = hw->mac.mta_reg_count - 1; i >= 0; i--)
506                 E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, hw->mac.mta_shadow[i]);
507         E1000_WRITE_FLUSH(hw);
508 }
509
510 /**
511  *  e1000_hash_mc_addr_generic - Generate a multicast hash value
512  *  @hw: pointer to the HW structure
513  *  @mc_addr: pointer to a multicast address
514  *
515  *  Generates a multicast address hash value which is used to determine
516  *  the multicast filter table array address and new table value.
517  **/
518 u32 e1000_hash_mc_addr_generic(struct e1000_hw *hw, u8 *mc_addr)
519 {
520         u32 hash_value, hash_mask;
521         u8 bit_shift = 0;
522
523         DEBUGFUNC("e1000_hash_mc_addr_generic");
524
525         /* Register count multiplied by bits per register */
526         hash_mask = (hw->mac.mta_reg_count * 32) - 1;
527
528         /*
529          * For a mc_filter_type of 0, bit_shift is the number of left-shifts
530          * where 0xFF would still fall within the hash mask.
531          */
532         while (hash_mask >> bit_shift != 0xFF)
533                 bit_shift++;
534
535         /*
536          * The portion of the address that is used for the hash table
537          * is determined by the mc_filter_type setting.
538          * The algorithm is such that there is a total of 8 bits of shifting.
539          * The bit_shift for a mc_filter_type of 0 represents the number of
540          * left-shifts where the MSB of mc_addr[5] would still fall within
541          * the hash_mask.  Case 0 does this exactly.  Since there are a total
542          * of 8 bits of shifting, then mc_addr[4] will shift right the
543          * remaining number of bits. Thus 8 - bit_shift.  The rest of the
544          * cases are a variation of this algorithm...essentially raising the
545          * number of bits to shift mc_addr[5] left, while still keeping the
546          * 8-bit shifting total.
547          *
548          * For example, given the following Destination MAC Address and an
549          * mta register count of 128 (thus a 4096-bit vector and 0xFFF mask),
550          * we can see that the bit_shift for case 0 is 4.  These are the hash
551          * values resulting from each mc_filter_type...
552          * [0] [1] [2] [3] [4] [5]
553          * 01  AA  00  12  34  56
554          * LSB                 MSB
555          *
556          * case 0: hash_value = ((0x34 >> 4) | (0x56 << 4)) & 0xFFF = 0x563
557          * case 1: hash_value = ((0x34 >> 3) | (0x56 << 5)) & 0xFFF = 0xAC6
558          * case 2: hash_value = ((0x34 >> 2) | (0x56 << 6)) & 0xFFF = 0x163
559          * case 3: hash_value = ((0x34 >> 0) | (0x56 << 8)) & 0xFFF = 0x634
560          */
561         switch (hw->mac.mc_filter_type) {
562         default:
563         case 0:
564                 break;
565         case 1:
566                 bit_shift += 1;
567                 break;
568         case 2:
569                 bit_shift += 2;
570                 break;
571         case 3:
572                 bit_shift += 4;
573                 break;
574         }
575
576         hash_value = hash_mask & (((mc_addr[4] >> (8 - bit_shift)) |
577                                   (((u16) mc_addr[5]) << bit_shift)));
578
579         return hash_value;
580 }
581
582 /**
583  *  e1000_pcix_mmrbc_workaround_generic - Fix incorrect MMRBC value
584  *  @hw: pointer to the HW structure
585  *
586  *  In certain situations, a system BIOS may report that the PCIx maximum
587  *  memory read byte count (MMRBC) value is higher than than the actual
588  *  value. We check the PCIx command register with the current PCIx status
589  *  register.
590  **/
591 void e1000_pcix_mmrbc_workaround_generic(struct e1000_hw *hw)
592 {
593         u16 cmd_mmrbc;
594         u16 pcix_cmd;
595         u16 pcix_stat_hi_word;
596         u16 stat_mmrbc;
597
598         DEBUGFUNC("e1000_pcix_mmrbc_workaround_generic");
599
600         /* Workaround for PCI-X issue when BIOS sets MMRBC incorrectly */
601         if (hw->bus.type != e1000_bus_type_pcix)
602                 return;
603
604         e1000_read_pci_cfg(hw, PCIX_COMMAND_REGISTER, &pcix_cmd);
605         e1000_read_pci_cfg(hw, PCIX_STATUS_REGISTER_HI, &pcix_stat_hi_word);
606         cmd_mmrbc = (pcix_cmd & PCIX_COMMAND_MMRBC_MASK) >>
607                      PCIX_COMMAND_MMRBC_SHIFT;
608         stat_mmrbc = (pcix_stat_hi_word & PCIX_STATUS_HI_MMRBC_MASK) >>
609                       PCIX_STATUS_HI_MMRBC_SHIFT;
610         if (stat_mmrbc == PCIX_STATUS_HI_MMRBC_4K)
611                 stat_mmrbc = PCIX_STATUS_HI_MMRBC_2K;
612         if (cmd_mmrbc > stat_mmrbc) {
613                 pcix_cmd &= ~PCIX_COMMAND_MMRBC_MASK;
614                 pcix_cmd |= stat_mmrbc << PCIX_COMMAND_MMRBC_SHIFT;
615                 e1000_write_pci_cfg(hw, PCIX_COMMAND_REGISTER, &pcix_cmd);
616         }
617 }
618
619 /**
620  *  e1000_clear_hw_cntrs_base_generic - Clear base hardware counters
621  *  @hw: pointer to the HW structure
622  *
623  *  Clears the base hardware counters by reading the counter registers.
624  **/
625 void e1000_clear_hw_cntrs_base_generic(struct e1000_hw *hw)
626 {
627         DEBUGFUNC("e1000_clear_hw_cntrs_base_generic");
628
629         E1000_READ_REG(hw, E1000_CRCERRS);
630         E1000_READ_REG(hw, E1000_SYMERRS);
631         E1000_READ_REG(hw, E1000_MPC);
632         E1000_READ_REG(hw, E1000_SCC);
633         E1000_READ_REG(hw, E1000_ECOL);
634         E1000_READ_REG(hw, E1000_MCC);
635         E1000_READ_REG(hw, E1000_LATECOL);
636         E1000_READ_REG(hw, E1000_COLC);
637         E1000_READ_REG(hw, E1000_DC);
638         E1000_READ_REG(hw, E1000_SEC);
639         E1000_READ_REG(hw, E1000_RLEC);
640         E1000_READ_REG(hw, E1000_XONRXC);
641         E1000_READ_REG(hw, E1000_XONTXC);
642         E1000_READ_REG(hw, E1000_XOFFRXC);
643         E1000_READ_REG(hw, E1000_XOFFTXC);
644         E1000_READ_REG(hw, E1000_FCRUC);
645         E1000_READ_REG(hw, E1000_GPRC);
646         E1000_READ_REG(hw, E1000_BPRC);
647         E1000_READ_REG(hw, E1000_MPRC);
648         E1000_READ_REG(hw, E1000_GPTC);
649         E1000_READ_REG(hw, E1000_GORCL);
650         E1000_READ_REG(hw, E1000_GORCH);
651         E1000_READ_REG(hw, E1000_GOTCL);
652         E1000_READ_REG(hw, E1000_GOTCH);
653         E1000_READ_REG(hw, E1000_RNBC);
654         E1000_READ_REG(hw, E1000_RUC);
655         E1000_READ_REG(hw, E1000_RFC);
656         E1000_READ_REG(hw, E1000_ROC);
657         E1000_READ_REG(hw, E1000_RJC);
658         E1000_READ_REG(hw, E1000_TORL);
659         E1000_READ_REG(hw, E1000_TORH);
660         E1000_READ_REG(hw, E1000_TOTL);
661         E1000_READ_REG(hw, E1000_TOTH);
662         E1000_READ_REG(hw, E1000_TPR);
663         E1000_READ_REG(hw, E1000_TPT);
664         E1000_READ_REG(hw, E1000_MPTC);
665         E1000_READ_REG(hw, E1000_BPTC);
666 }
667
668 /**
669  *  e1000_check_for_copper_link_generic - Check for link (Copper)
670  *  @hw: pointer to the HW structure
671  *
672  *  Checks to see of the link status of the hardware has changed.  If a
673  *  change in link status has been detected, then we read the PHY registers
674  *  to get the current speed/duplex if link exists.
675  **/
676 s32 e1000_check_for_copper_link_generic(struct e1000_hw *hw)
677 {
678         struct e1000_mac_info *mac = &hw->mac;
679         s32 ret_val;
680         bool link;
681
682         DEBUGFUNC("e1000_check_for_copper_link");
683
684         /*
685          * We only want to go out to the PHY registers to see if Auto-Neg
686          * has completed and/or if our link status has changed.  The
687          * get_link_status flag is set upon receiving a Link Status
688          * Change or Rx Sequence Error interrupt.
689          */
690         if (!mac->get_link_status) {
691                 ret_val = E1000_SUCCESS;
692                 goto out;
693         }
694
695         /*
696          * First we want to see if the MII Status Register reports
697          * link.  If so, then we want to get the current speed/duplex
698          * of the PHY.
699          */
700         ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link);
701         if (ret_val)
702                 goto out;
703
704         if (!link)
705                 goto out; /* No link detected */
706
707         mac->get_link_status = FALSE;
708
709         /*
710          * Check if there was DownShift, must be checked
711          * immediately after link-up
712          */
713         e1000_check_downshift_generic(hw);
714
715         /*
716          * If we are forcing speed/duplex, then we simply return since
717          * we have already determined whether we have link or not.
718          */
719         if (!mac->autoneg) {
720                 ret_val = -E1000_ERR_CONFIG;
721                 goto out;
722         }
723
724         /*
725          * Auto-Neg is enabled.  Auto Speed Detection takes care
726          * of MAC speed/duplex configuration.  So we only need to
727          * configure Collision Distance in the MAC.
728          */
729         mac->ops.config_collision_dist(hw);
730
731         /*
732          * Configure Flow Control now that Auto-Neg has completed.
733          * First, we need to restore the desired flow control
734          * settings because we may have had to re-autoneg with a
735          * different link partner.
736          */
737         ret_val = e1000_config_fc_after_link_up_generic(hw);
738         if (ret_val)
739                 DEBUGOUT("Error configuring flow control\n");
740
741 out:
742         return ret_val;
743 }
744
745 /**
746  *  e1000_check_for_fiber_link_generic - Check for link (Fiber)
747  *  @hw: pointer to the HW structure
748  *
749  *  Checks for link up on the hardware.  If link is not up and we have
750  *  a signal, then we need to force link up.
751  **/
752 s32 e1000_check_for_fiber_link_generic(struct e1000_hw *hw)
753 {
754         struct e1000_mac_info *mac = &hw->mac;
755         u32 rxcw;
756         u32 ctrl;
757         u32 status;
758         s32 ret_val = E1000_SUCCESS;
759
760         DEBUGFUNC("e1000_check_for_fiber_link_generic");
761
762         ctrl = E1000_READ_REG(hw, E1000_CTRL);
763         status = E1000_READ_REG(hw, E1000_STATUS);
764         rxcw = E1000_READ_REG(hw, E1000_RXCW);
765
766         /*
767          * If we don't have link (auto-negotiation failed or link partner
768          * cannot auto-negotiate), the cable is plugged in (we have signal),
769          * and our link partner is not trying to auto-negotiate with us (we
770          * are receiving idles or data), we need to force link up. We also
771          * need to give auto-negotiation time to complete, in case the cable
772          * was just plugged in. The autoneg_failed flag does this.
773          */
774         /* (ctrl & E1000_CTRL_SWDPIN1) == 1 == have signal */
775         if ((ctrl & E1000_CTRL_SWDPIN1) && (!(status & E1000_STATUS_LU)) &&
776             (!(rxcw & E1000_RXCW_C))) {
777                 if (mac->autoneg_failed == 0) {
778                         mac->autoneg_failed = 1;
779                         goto out;
780                 }
781                 DEBUGOUT("NOT RXing /C/, disable AutoNeg and force link.\n");
782
783                 /* Disable auto-negotiation in the TXCW register */
784                 E1000_WRITE_REG(hw, E1000_TXCW, (mac->txcw & ~E1000_TXCW_ANE));
785
786                 /* Force link-up and also force full-duplex. */
787                 ctrl = E1000_READ_REG(hw, E1000_CTRL);
788                 ctrl |= (E1000_CTRL_SLU | E1000_CTRL_FD);
789                 E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
790
791                 /* Configure Flow Control after forcing link up. */
792                 ret_val = e1000_config_fc_after_link_up_generic(hw);
793                 if (ret_val) {
794                         DEBUGOUT("Error configuring flow control\n");
795                         goto out;
796                 }
797         } else if ((ctrl & E1000_CTRL_SLU) && (rxcw & E1000_RXCW_C)) {
798                 /*
799                  * If we are forcing link and we are receiving /C/ ordered
800                  * sets, re-enable auto-negotiation in the TXCW register
801                  * and disable forced link in the Device Control register
802                  * in an attempt to auto-negotiate with our link partner.
803                  */
804                 DEBUGOUT("RXing /C/, enable AutoNeg and stop forcing link.\n");
805                 E1000_WRITE_REG(hw, E1000_TXCW, mac->txcw);
806                 E1000_WRITE_REG(hw, E1000_CTRL, (ctrl & ~E1000_CTRL_SLU));
807
808                 mac->serdes_has_link = TRUE;
809         }
810
811 out:
812         return ret_val;
813 }
814
815 /**
816  *  e1000_check_for_serdes_link_generic - Check for link (Serdes)
817  *  @hw: pointer to the HW structure
818  *
819  *  Checks for link up on the hardware.  If link is not up and we have
820  *  a signal, then we need to force link up.
821  **/
822 s32 e1000_check_for_serdes_link_generic(struct e1000_hw *hw)
823 {
824         struct e1000_mac_info *mac = &hw->mac;
825         u32 rxcw;
826         u32 ctrl;
827         u32 status;
828         s32 ret_val = E1000_SUCCESS;
829
830         DEBUGFUNC("e1000_check_for_serdes_link_generic");
831
832         ctrl = E1000_READ_REG(hw, E1000_CTRL);
833         status = E1000_READ_REG(hw, E1000_STATUS);
834         rxcw = E1000_READ_REG(hw, E1000_RXCW);
835
836         /*
837          * If we don't have link (auto-negotiation failed or link partner
838          * cannot auto-negotiate), and our link partner is not trying to
839          * auto-negotiate with us (we are receiving idles or data),
840          * we need to force link up. We also need to give auto-negotiation
841          * time to complete.
842          */
843         /* (ctrl & E1000_CTRL_SWDPIN1) == 1 == have signal */
844         if ((!(status & E1000_STATUS_LU)) && (!(rxcw & E1000_RXCW_C))) {
845                 if (mac->autoneg_failed == 0) {
846                         mac->autoneg_failed = 1;
847                         goto out;
848                 }
849                 DEBUGOUT("NOT RXing /C/, disable AutoNeg and force link.\n");
850
851                 /* Disable auto-negotiation in the TXCW register */
852                 E1000_WRITE_REG(hw, E1000_TXCW, (mac->txcw & ~E1000_TXCW_ANE));
853
854                 /* Force link-up and also force full-duplex. */
855                 ctrl = E1000_READ_REG(hw, E1000_CTRL);
856                 ctrl |= (E1000_CTRL_SLU | E1000_CTRL_FD);
857                 E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
858
859                 /* Configure Flow Control after forcing link up. */
860                 ret_val = e1000_config_fc_after_link_up_generic(hw);
861                 if (ret_val) {
862                         DEBUGOUT("Error configuring flow control\n");
863                         goto out;
864                 }
865         } else if ((ctrl & E1000_CTRL_SLU) && (rxcw & E1000_RXCW_C)) {
866                 /*
867                  * If we are forcing link and we are receiving /C/ ordered
868                  * sets, re-enable auto-negotiation in the TXCW register
869                  * and disable forced link in the Device Control register
870                  * in an attempt to auto-negotiate with our link partner.
871                  */
872                 DEBUGOUT("RXing /C/, enable AutoNeg and stop forcing link.\n");
873                 E1000_WRITE_REG(hw, E1000_TXCW, mac->txcw);
874                 E1000_WRITE_REG(hw, E1000_CTRL, (ctrl & ~E1000_CTRL_SLU));
875
876                 mac->serdes_has_link = TRUE;
877         } else if (!(E1000_TXCW_ANE & E1000_READ_REG(hw, E1000_TXCW))) {
878                 /*
879                  * If we force link for non-auto-negotiation switch, check
880                  * link status based on MAC synchronization for internal
881                  * serdes media type.
882                  */
883                 /* SYNCH bit and IV bit are sticky. */
884                 usec_delay(10);
885                 rxcw = E1000_READ_REG(hw, E1000_RXCW);
886                 if (rxcw & E1000_RXCW_SYNCH) {
887                         if (!(rxcw & E1000_RXCW_IV)) {
888                                 mac->serdes_has_link = TRUE;
889                                 DEBUGOUT("SERDES: Link up - forced.\n");
890                         }
891                 } else {
892                         mac->serdes_has_link = FALSE;
893                         DEBUGOUT("SERDES: Link down - force failed.\n");
894                 }
895         }
896
897         if (E1000_TXCW_ANE & E1000_READ_REG(hw, E1000_TXCW)) {
898                 status = E1000_READ_REG(hw, E1000_STATUS);
899                 if (status & E1000_STATUS_LU) {
900                         /* SYNCH bit and IV bit are sticky, so reread rxcw. */
901                         usec_delay(10);
902                         rxcw = E1000_READ_REG(hw, E1000_RXCW);
903                         if (rxcw & E1000_RXCW_SYNCH) {
904                                 if (!(rxcw & E1000_RXCW_IV)) {
905                                         mac->serdes_has_link = TRUE;
906                                         DEBUGOUT("SERDES: Link up - autoneg "
907                                            "completed sucessfully.\n");
908                                 } else {
909                                         mac->serdes_has_link = FALSE;
910                                         DEBUGOUT("SERDES: Link down - invalid"
911                                            "codewords detected in autoneg.\n");
912                                 }
913                         } else {
914                                 mac->serdes_has_link = FALSE;
915                                 DEBUGOUT("SERDES: Link down - no sync.\n");
916                         }
917                 } else {
918                         mac->serdes_has_link = FALSE;
919                         DEBUGOUT("SERDES: Link down - autoneg failed\n");
920                 }
921         }
922
923 out:
924         return ret_val;
925 }
926
927 /**
928  *  e1000_setup_link_generic - Setup flow control and link settings
929  *  @hw: pointer to the HW structure
930  *
931  *  Determines which flow control settings to use, then configures flow
932  *  control.  Calls the appropriate media-specific link configuration
933  *  function.  Assuming the adapter has a valid link partner, a valid link
934  *  should be established.  Assumes the hardware has previously been reset
935  *  and the transmitter and receiver are not enabled.
936  **/
937 s32 e1000_setup_link_generic(struct e1000_hw *hw)
938 {
939         s32 ret_val = E1000_SUCCESS;
940
941         DEBUGFUNC("e1000_setup_link_generic");
942
943         /*
944          * In the case of the phy reset being blocked, we already have a link.
945          * We do not need to set it up again.
946          */
947         if (e1000_check_reset_block(hw))
948                 goto out;
949
950         /*
951          * If requested flow control is set to default, set flow control
952          * based on the EEPROM flow control settings.
953          */
954         if (hw->fc.requested_mode == e1000_fc_default) {
955                 ret_val = e1000_set_default_fc_generic(hw);
956                 if (ret_val)
957                         goto out;
958         }
959
960         /*
961          * Save off the requested flow control mode for use later.  Depending
962          * on the link partner's capabilities, we may or may not use this mode.
963          */
964         hw->fc.current_mode = hw->fc.requested_mode;
965
966         DEBUGOUT1("After fix-ups FlowControl is now = %x\n",
967                 hw->fc.current_mode);
968
969         /* Call the necessary media_type subroutine to configure the link. */
970         ret_val = hw->mac.ops.setup_physical_interface(hw);
971         if (ret_val)
972                 goto out;
973
974         /*
975          * Initialize the flow control address, type, and PAUSE timer
976          * registers to their default values.  This is done even if flow
977          * control is disabled, because it does not hurt anything to
978          * initialize these registers.
979          */
980         DEBUGOUT("Initializing the Flow Control address, type and timer regs\n");
981         E1000_WRITE_REG(hw, E1000_FCT, FLOW_CONTROL_TYPE);
982         E1000_WRITE_REG(hw, E1000_FCAH, FLOW_CONTROL_ADDRESS_HIGH);
983         E1000_WRITE_REG(hw, E1000_FCAL, FLOW_CONTROL_ADDRESS_LOW);
984
985         E1000_WRITE_REG(hw, E1000_FCTTV, hw->fc.pause_time);
986
987         ret_val = e1000_set_fc_watermarks_generic(hw);
988
989 out:
990         return ret_val;
991 }
992
993 /**
994  *  e1000_setup_fiber_serdes_link_generic - Setup link for fiber/serdes
995  *  @hw: pointer to the HW structure
996  *
997  *  Configures collision distance and flow control for fiber and serdes
998  *  links.  Upon successful setup, poll for link.
999  **/
1000 s32 e1000_setup_fiber_serdes_link_generic(struct e1000_hw *hw)
1001 {
1002         struct e1000_mac_info *mac = &hw->mac;
1003         u32 ctrl;
1004         s32 ret_val = E1000_SUCCESS;
1005
1006         DEBUGFUNC("e1000_setup_fiber_serdes_link_generic");
1007
1008         ctrl = E1000_READ_REG(hw, E1000_CTRL);
1009
1010         /* Take the link out of reset */
1011         ctrl &= ~E1000_CTRL_LRST;
1012
1013         mac->ops.config_collision_dist(hw);
1014
1015         ret_val = e1000_commit_fc_settings_generic(hw);
1016         if (ret_val)
1017                 goto out;
1018
1019         /*
1020          * Since auto-negotiation is enabled, take the link out of reset (the
1021          * link will be in reset, because we previously reset the chip). This
1022          * will restart auto-negotiation.  If auto-negotiation is successful
1023          * then the link-up status bit will be set and the flow control enable
1024          * bits (RFCE and TFCE) will be set according to their negotiated value.
1025          */
1026         DEBUGOUT("Auto-negotiation enabled\n");
1027
1028         E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
1029         E1000_WRITE_FLUSH(hw);
1030         msec_delay(1);
1031
1032         /*
1033          * For these adapters, the SW definable pin 1 is set when the optics
1034          * detect a signal.  If we have a signal, then poll for a "Link-Up"
1035          * indication.
1036          */
1037         if (hw->phy.media_type == e1000_media_type_internal_serdes ||
1038             (E1000_READ_REG(hw, E1000_CTRL) & E1000_CTRL_SWDPIN1)) {
1039                 ret_val = e1000_poll_fiber_serdes_link_generic(hw);
1040         } else {
1041                 DEBUGOUT("No signal detected\n");
1042         }
1043
1044 out:
1045         return ret_val;
1046 }
1047
1048 /**
1049  *  e1000_config_collision_dist_generic - Configure collision distance
1050  *  @hw: pointer to the HW structure
1051  *
1052  *  Configures the collision distance to the default value and is used
1053  *  during link setup.
1054  **/
1055 void e1000_config_collision_dist_generic(struct e1000_hw *hw)
1056 {
1057         u32 tctl;
1058
1059         DEBUGFUNC("e1000_config_collision_dist_generic");
1060
1061         tctl = E1000_READ_REG(hw, E1000_TCTL);
1062
1063         tctl &= ~E1000_TCTL_COLD;
1064         tctl |= E1000_COLLISION_DISTANCE << E1000_COLD_SHIFT;
1065
1066         E1000_WRITE_REG(hw, E1000_TCTL, tctl);
1067         E1000_WRITE_FLUSH(hw);
1068 }
1069
1070 /**
1071  *  e1000_poll_fiber_serdes_link_generic - Poll for link up
1072  *  @hw: pointer to the HW structure
1073  *
1074  *  Polls for link up by reading the status register, if link fails to come
1075  *  up with auto-negotiation, then the link is forced if a signal is detected.
1076  **/
1077 s32 e1000_poll_fiber_serdes_link_generic(struct e1000_hw *hw)
1078 {
1079         struct e1000_mac_info *mac = &hw->mac;
1080         u32 i, status;
1081         s32 ret_val = E1000_SUCCESS;
1082
1083         DEBUGFUNC("e1000_poll_fiber_serdes_link_generic");
1084
1085         /*
1086          * If we have a signal (the cable is plugged in, or assumed TRUE for
1087          * serdes media) then poll for a "Link-Up" indication in the Device
1088          * Status Register.  Time-out if a link isn't seen in 500 milliseconds
1089          * seconds (Auto-negotiation should complete in less than 500
1090          * milliseconds even if the other end is doing it in SW).
1091          */
1092         for (i = 0; i < FIBER_LINK_UP_LIMIT; i++) {
1093                 msec_delay(10);
1094                 status = E1000_READ_REG(hw, E1000_STATUS);
1095                 if (status & E1000_STATUS_LU)
1096                         break;
1097         }
1098         if (i == FIBER_LINK_UP_LIMIT) {
1099                 DEBUGOUT("Never got a valid link from auto-neg!!!\n");
1100                 mac->autoneg_failed = 1;
1101                 /*
1102                  * AutoNeg failed to achieve a link, so we'll call
1103                  * mac->check_for_link. This routine will force the
1104                  * link up if we detect a signal. This will allow us to
1105                  * communicate with non-autonegotiating link partners.
1106                  */
1107                 ret_val = mac->ops.check_for_link(hw);
1108                 if (ret_val) {
1109                         DEBUGOUT("Error while checking for link\n");
1110                         goto out;
1111                 }
1112                 mac->autoneg_failed = 0;
1113         } else {
1114                 mac->autoneg_failed = 0;
1115                 DEBUGOUT("Valid Link Found\n");
1116         }
1117
1118 out:
1119         return ret_val;
1120 }
1121
1122 /**
1123  *  e1000_commit_fc_settings_generic - Configure flow control
1124  *  @hw: pointer to the HW structure
1125  *
1126  *  Write the flow control settings to the Transmit Config Word Register (TXCW)
1127  *  base on the flow control settings in e1000_mac_info.
1128  **/
1129 s32 e1000_commit_fc_settings_generic(struct e1000_hw *hw)
1130 {
1131         struct e1000_mac_info *mac = &hw->mac;
1132         u32 txcw;
1133         s32 ret_val = E1000_SUCCESS;
1134
1135         DEBUGFUNC("e1000_commit_fc_settings_generic");
1136
1137         /*
1138          * Check for a software override of the flow control settings, and
1139          * setup the device accordingly.  If auto-negotiation is enabled, then
1140          * software will have to set the "PAUSE" bits to the correct value in
1141          * the Transmit Config Word Register (TXCW) and re-start auto-
1142          * negotiation.  However, if auto-negotiation is disabled, then
1143          * software will have to manually configure the two flow control enable
1144          * bits in the CTRL register.
1145          *
1146          * The possible values of the "fc" parameter are:
1147          *      0:  Flow control is completely disabled
1148          *      1:  Rx flow control is enabled (we can receive pause frames,
1149          *          but not send pause frames).
1150          *      2:  Tx flow control is enabled (we can send pause frames but we
1151          *          do not support receiving pause frames).
1152          *      3:  Both Rx and Tx flow control (symmetric) are enabled.
1153          */
1154         switch (hw->fc.current_mode) {
1155         case e1000_fc_none:
1156                 /* Flow control completely disabled by a software over-ride. */
1157                 txcw = (E1000_TXCW_ANE | E1000_TXCW_FD);
1158                 break;
1159         case e1000_fc_rx_pause:
1160                 /*
1161                  * Rx Flow control is enabled and Tx Flow control is disabled
1162                  * by a software over-ride. Since there really isn't a way to
1163                  * advertise that we are capable of Rx Pause ONLY, we will
1164                  * advertise that we support both symmetric and asymmetric Rx
1165                  * PAUSE.  Later, we will disable the adapter's ability to send
1166                  * PAUSE frames.
1167                  */
1168                 txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_PAUSE_MASK);
1169                 break;
1170         case e1000_fc_tx_pause:
1171                 /*
1172                  * Tx Flow control is enabled, and Rx Flow control is disabled,
1173                  * by a software over-ride.
1174                  */
1175                 txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_ASM_DIR);
1176                 break;
1177         case e1000_fc_full:
1178                 /*
1179                  * Flow control (both Rx and Tx) is enabled by a software
1180                  * over-ride.
1181                  */
1182                 txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_PAUSE_MASK);
1183                 break;
1184         default:
1185                 DEBUGOUT("Flow control param set incorrectly\n");
1186                 ret_val = -E1000_ERR_CONFIG;
1187                 goto out;
1188                 break;
1189         }
1190
1191         E1000_WRITE_REG(hw, E1000_TXCW, txcw);
1192         mac->txcw = txcw;
1193
1194 out:
1195         return ret_val;
1196 }
1197
1198 /**
1199  *  e1000_set_fc_watermarks_generic - Set flow control high/low watermarks
1200  *  @hw: pointer to the HW structure
1201  *
1202  *  Sets the flow control high/low threshold (watermark) registers.  If
1203  *  flow control XON frame transmission is enabled, then set XON frame
1204  *  transmission as well.
1205  **/
1206 s32 e1000_set_fc_watermarks_generic(struct e1000_hw *hw)
1207 {
1208         u32 fcrtl = 0, fcrth = 0;
1209
1210         DEBUGFUNC("e1000_set_fc_watermarks_generic");
1211
1212         /*
1213          * Set the flow control receive threshold registers.  Normally,
1214          * these registers will be set to a default threshold that may be
1215          * adjusted later by the driver's runtime code.  However, if the
1216          * ability to transmit pause frames is not enabled, then these
1217          * registers will be set to 0.
1218          */
1219         if (hw->fc.current_mode & e1000_fc_tx_pause) {
1220                 /*
1221                  * We need to set up the Receive Threshold high and low water
1222                  * marks as well as (optionally) enabling the transmission of
1223                  * XON frames.
1224                  */
1225                 fcrtl = hw->fc.low_water;
1226                 if (hw->fc.send_xon)
1227                         fcrtl |= E1000_FCRTL_XONE;
1228
1229                 fcrth = hw->fc.high_water;
1230         }
1231         E1000_WRITE_REG(hw, E1000_FCRTL, fcrtl);
1232         E1000_WRITE_REG(hw, E1000_FCRTH, fcrth);
1233
1234         return E1000_SUCCESS;
1235 }
1236
1237 /**
1238  *  e1000_set_default_fc_generic - Set flow control default values
1239  *  @hw: pointer to the HW structure
1240  *
1241  *  Read the EEPROM for the default values for flow control and store the
1242  *  values.
1243  **/
1244 s32 e1000_set_default_fc_generic(struct e1000_hw *hw)
1245 {
1246         s32 ret_val = E1000_SUCCESS;
1247         u16 nvm_data;
1248
1249         DEBUGFUNC("e1000_set_default_fc_generic");
1250
1251         /*
1252          * Read and store word 0x0F of the EEPROM. This word contains bits
1253          * that determine the hardware's default PAUSE (flow control) mode,
1254          * a bit that determines whether the HW defaults to enabling or
1255          * disabling auto-negotiation, and the direction of the
1256          * SW defined pins. If there is no SW over-ride of the flow
1257          * control setting, then the variable hw->fc will
1258          * be initialized based on a value in the EEPROM.
1259          */
1260         ret_val = hw->nvm.ops.read(hw, NVM_INIT_CONTROL2_REG, 1, &nvm_data);
1261
1262         if (ret_val) {
1263                 DEBUGOUT("NVM Read Error\n");
1264                 goto out;
1265         }
1266
1267         if ((nvm_data & NVM_WORD0F_PAUSE_MASK) == 0)
1268                 hw->fc.requested_mode = e1000_fc_none;
1269         else if ((nvm_data & NVM_WORD0F_PAUSE_MASK) ==
1270                  NVM_WORD0F_ASM_DIR)
1271                 hw->fc.requested_mode = e1000_fc_tx_pause;
1272         else
1273                 hw->fc.requested_mode = e1000_fc_full;
1274
1275 out:
1276         return ret_val;
1277 }
1278
1279 /**
1280  *  e1000_force_mac_fc_generic - Force the MAC's flow control settings
1281  *  @hw: pointer to the HW structure
1282  *
1283  *  Force the MAC's flow control settings.  Sets the TFCE and RFCE bits in the
1284  *  device control register to reflect the adapter settings.  TFCE and RFCE
1285  *  need to be explicitly set by software when a copper PHY is used because
1286  *  autonegotiation is managed by the PHY rather than the MAC.  Software must
1287  *  also configure these bits when link is forced on a fiber connection.
1288  **/
1289 s32 e1000_force_mac_fc_generic(struct e1000_hw *hw)
1290 {
1291         u32 ctrl;
1292         s32 ret_val = E1000_SUCCESS;
1293
1294         DEBUGFUNC("e1000_force_mac_fc_generic");
1295
1296         ctrl = E1000_READ_REG(hw, E1000_CTRL);
1297
1298         /*
1299          * Because we didn't get link via the internal auto-negotiation
1300          * mechanism (we either forced link or we got link via PHY
1301          * auto-neg), we have to manually enable/disable transmit an
1302          * receive flow control.
1303          *
1304          * The "Case" statement below enables/disable flow control
1305          * according to the "hw->fc.current_mode" parameter.
1306          *
1307          * The possible values of the "fc" parameter are:
1308          *      0:  Flow control is completely disabled
1309          *      1:  Rx flow control is enabled (we can receive pause
1310          *          frames but not send pause frames).
1311          *      2:  Tx flow control is enabled (we can send pause frames
1312          *          frames but we do not receive pause frames).
1313          *      3:  Both Rx and Tx flow control (symmetric) is enabled.
1314          *  other:  No other values should be possible at this point.
1315          */
1316         DEBUGOUT1("hw->fc.current_mode = %u\n", hw->fc.current_mode);
1317
1318         switch (hw->fc.current_mode) {
1319         case e1000_fc_none:
1320                 ctrl &= (~(E1000_CTRL_TFCE | E1000_CTRL_RFCE));
1321                 break;
1322         case e1000_fc_rx_pause:
1323                 ctrl &= (~E1000_CTRL_TFCE);
1324                 ctrl |= E1000_CTRL_RFCE;
1325                 break;
1326         case e1000_fc_tx_pause:
1327                 ctrl &= (~E1000_CTRL_RFCE);
1328                 ctrl |= E1000_CTRL_TFCE;
1329                 break;
1330         case e1000_fc_full:
1331                 ctrl |= (E1000_CTRL_TFCE | E1000_CTRL_RFCE);
1332                 break;
1333         default:
1334                 DEBUGOUT("Flow control param set incorrectly\n");
1335                 ret_val = -E1000_ERR_CONFIG;
1336                 goto out;
1337         }
1338
1339         E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
1340
1341 out:
1342         return ret_val;
1343 }
1344
1345 /**
1346  *  e1000_config_fc_after_link_up_generic - Configures flow control after link
1347  *  @hw: pointer to the HW structure
1348  *
1349  *  Checks the status of auto-negotiation after link up to ensure that the
1350  *  speed and duplex were not forced.  If the link needed to be forced, then
1351  *  flow control needs to be forced also.  If auto-negotiation is enabled
1352  *  and did not fail, then we configure flow control based on our link
1353  *  partner.
1354  **/
1355 s32 e1000_config_fc_after_link_up_generic(struct e1000_hw *hw)
1356 {
1357         struct e1000_mac_info *mac = &hw->mac;
1358         s32 ret_val = E1000_SUCCESS;
1359         u16 mii_status_reg, mii_nway_adv_reg, mii_nway_lp_ability_reg;
1360         u16 speed, duplex;
1361
1362         DEBUGFUNC("e1000_config_fc_after_link_up_generic");
1363
1364         /*
1365          * Check for the case where we have fiber media and auto-neg failed
1366          * so we had to force link.  In this case, we need to force the
1367          * configuration of the MAC to match the "fc" parameter.
1368          */
1369         if (mac->autoneg_failed) {
1370                 if (hw->phy.media_type == e1000_media_type_fiber ||
1371                     hw->phy.media_type == e1000_media_type_internal_serdes)
1372                         ret_val = e1000_force_mac_fc_generic(hw);
1373         } else {
1374                 if (hw->phy.media_type == e1000_media_type_copper)
1375                         ret_val = e1000_force_mac_fc_generic(hw);
1376         }
1377
1378         if (ret_val) {
1379                 DEBUGOUT("Error forcing flow control settings\n");
1380                 goto out;
1381         }
1382
1383         /*
1384          * Check for the case where we have copper media and auto-neg is
1385          * enabled.  In this case, we need to check and see if Auto-Neg
1386          * has completed, and if so, how the PHY and link partner has
1387          * flow control configured.
1388          */
1389         if ((hw->phy.media_type == e1000_media_type_copper) && mac->autoneg) {
1390                 /*
1391                  * Read the MII Status Register and check to see if AutoNeg
1392                  * has completed.  We read this twice because this reg has
1393                  * some "sticky" (latched) bits.
1394                  */
1395                 ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &mii_status_reg);
1396                 if (ret_val)
1397                         goto out;
1398                 ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &mii_status_reg);
1399                 if (ret_val)
1400                         goto out;
1401
1402                 if (!(mii_status_reg & MII_SR_AUTONEG_COMPLETE)) {
1403                         DEBUGOUT("Copper PHY and Auto Neg "
1404                                  "has not completed.\n");
1405                         goto out;
1406                 }
1407
1408                 /*
1409                  * The AutoNeg process has completed, so we now need to
1410                  * read both the Auto Negotiation Advertisement
1411                  * Register (Address 4) and the Auto_Negotiation Base
1412                  * Page Ability Register (Address 5) to determine how
1413                  * flow control was negotiated.
1414                  */
1415                 ret_val = hw->phy.ops.read_reg(hw, PHY_AUTONEG_ADV,
1416                                              &mii_nway_adv_reg);
1417                 if (ret_val)
1418                         goto out;
1419                 ret_val = hw->phy.ops.read_reg(hw, PHY_LP_ABILITY,
1420                                              &mii_nway_lp_ability_reg);
1421                 if (ret_val)
1422                         goto out;
1423
1424                 /*
1425                  * Two bits in the Auto Negotiation Advertisement Register
1426                  * (Address 4) and two bits in the Auto Negotiation Base
1427                  * Page Ability Register (Address 5) determine flow control
1428                  * for both the PHY and the link partner.  The following
1429                  * table, taken out of the IEEE 802.3ab/D6.0 dated March 25,
1430                  * 1999, describes these PAUSE resolution bits and how flow
1431                  * control is determined based upon these settings.
1432                  * NOTE:  DC = Don't Care
1433                  *
1434                  *   LOCAL DEVICE  |   LINK PARTNER
1435                  * PAUSE | ASM_DIR | PAUSE | ASM_DIR | NIC Resolution
1436                  *-------|---------|-------|---------|--------------------
1437                  *   0   |    0    |  DC   |   DC    | e1000_fc_none
1438                  *   0   |    1    |   0   |   DC    | e1000_fc_none
1439                  *   0   |    1    |   1   |    0    | e1000_fc_none
1440                  *   0   |    1    |   1   |    1    | e1000_fc_tx_pause
1441                  *   1   |    0    |   0   |   DC    | e1000_fc_none
1442                  *   1   |   DC    |   1   |   DC    | e1000_fc_full
1443                  *   1   |    1    |   0   |    0    | e1000_fc_none
1444                  *   1   |    1    |   0   |    1    | e1000_fc_rx_pause
1445                  *
1446                  * Are both PAUSE bits set to 1?  If so, this implies
1447                  * Symmetric Flow Control is enabled at both ends.  The
1448                  * ASM_DIR bits are irrelevant per the spec.
1449                  *
1450                  * For Symmetric Flow Control:
1451                  *
1452                  *   LOCAL DEVICE  |   LINK PARTNER
1453                  * PAUSE | ASM_DIR | PAUSE | ASM_DIR | Result
1454                  *-------|---------|-------|---------|--------------------
1455                  *   1   |   DC    |   1   |   DC    | E1000_fc_full
1456                  *
1457                  */
1458                 if ((mii_nway_adv_reg & NWAY_AR_PAUSE) &&
1459                     (mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE)) {
1460                         /*
1461                          * Now we need to check if the user selected Rx ONLY
1462                          * of pause frames.  In this case, we had to advertise
1463                          * FULL flow control because we could not advertise Rx
1464                          * ONLY. Hence, we must now check to see if we need to
1465                          * turn OFF  the TRANSMISSION of PAUSE frames.
1466                          */
1467                         if (hw->fc.requested_mode == e1000_fc_full) {
1468                                 hw->fc.current_mode = e1000_fc_full;
1469                                 DEBUGOUT("Flow Control = FULL.\r\n");
1470                         } else {
1471                                 hw->fc.current_mode = e1000_fc_rx_pause;
1472                                 DEBUGOUT("Flow Control = "
1473                                          "Rx PAUSE frames only.\r\n");
1474                         }
1475                 }
1476                 /*
1477                  * For receiving PAUSE frames ONLY.
1478                  *
1479                  *   LOCAL DEVICE  |   LINK PARTNER
1480                  * PAUSE | ASM_DIR | PAUSE | ASM_DIR | Result
1481                  *-------|---------|-------|---------|--------------------
1482                  *   0   |    1    |   1   |    1    | e1000_fc_tx_pause
1483                  */
1484                 else if (!(mii_nway_adv_reg & NWAY_AR_PAUSE) &&
1485                           (mii_nway_adv_reg & NWAY_AR_ASM_DIR) &&
1486                           (mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE) &&
1487                           (mii_nway_lp_ability_reg & NWAY_LPAR_ASM_DIR)) {
1488                         hw->fc.current_mode = e1000_fc_tx_pause;
1489                         DEBUGOUT("Flow Control = Tx PAUSE frames only.\r\n");
1490                 }
1491                 /*
1492                  * For transmitting PAUSE frames ONLY.
1493                  *
1494                  *   LOCAL DEVICE  |   LINK PARTNER
1495                  * PAUSE | ASM_DIR | PAUSE | ASM_DIR | Result
1496                  *-------|---------|-------|---------|--------------------
1497                  *   1   |    1    |   0   |    1    | e1000_fc_rx_pause
1498                  */
1499                 else if ((mii_nway_adv_reg & NWAY_AR_PAUSE) &&
1500                          (mii_nway_adv_reg & NWAY_AR_ASM_DIR) &&
1501                          !(mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE) &&
1502                          (mii_nway_lp_ability_reg & NWAY_LPAR_ASM_DIR)) {
1503                         hw->fc.current_mode = e1000_fc_rx_pause;
1504                         DEBUGOUT("Flow Control = Rx PAUSE frames only.\r\n");
1505                 } else {
1506                         /*
1507                          * Per the IEEE spec, at this point flow control
1508                          * should be disabled.
1509                          */
1510                         hw->fc.current_mode = e1000_fc_none;
1511                         DEBUGOUT("Flow Control = NONE.\r\n");
1512                 }
1513
1514                 /*
1515                  * Now we need to do one last check...  If we auto-
1516                  * negotiated to HALF DUPLEX, flow control should not be
1517                  * enabled per IEEE 802.3 spec.
1518                  */
1519                 ret_val = mac->ops.get_link_up_info(hw, &speed, &duplex);
1520                 if (ret_val) {
1521                         DEBUGOUT("Error getting link speed and duplex\n");
1522                         goto out;
1523                 }
1524
1525                 if (duplex == HALF_DUPLEX)
1526                         hw->fc.current_mode = e1000_fc_none;
1527
1528                 /*
1529                  * Now we call a subroutine to actually force the MAC
1530                  * controller to use the correct flow control settings.
1531                  */
1532                 ret_val = e1000_force_mac_fc_generic(hw);
1533                 if (ret_val) {
1534                         DEBUGOUT("Error forcing flow control settings\n");
1535                         goto out;
1536                 }
1537         }
1538
1539 out:
1540         return ret_val;
1541 }
1542
1543 /**
1544  *  e1000_get_speed_and_duplex_copper_generic - Retrieve current speed/duplex
1545  *  @hw: pointer to the HW structure
1546  *  @speed: stores the current speed
1547  *  @duplex: stores the current duplex
1548  *
1549  *  Read the status register for the current speed/duplex and store the current
1550  *  speed and duplex for copper connections.
1551  **/
1552 s32 e1000_get_speed_and_duplex_copper_generic(struct e1000_hw *hw, u16 *speed,
1553                                               u16 *duplex)
1554 {
1555         u32 status;
1556
1557         DEBUGFUNC("e1000_get_speed_and_duplex_copper_generic");
1558
1559         status = E1000_READ_REG(hw, E1000_STATUS);
1560         if (status & E1000_STATUS_SPEED_1000) {
1561                 *speed = SPEED_1000;
1562                 DEBUGOUT("1000 Mbs, ");
1563         } else if (status & E1000_STATUS_SPEED_100) {
1564                 *speed = SPEED_100;
1565                 DEBUGOUT("100 Mbs, ");
1566         } else {
1567                 *speed = SPEED_10;
1568                 DEBUGOUT("10 Mbs, ");
1569         }
1570
1571         if (status & E1000_STATUS_FD) {
1572                 *duplex = FULL_DUPLEX;
1573                 DEBUGOUT("Full Duplex\n");
1574         } else {
1575                 *duplex = HALF_DUPLEX;
1576                 DEBUGOUT("Half Duplex\n");
1577         }
1578
1579         return E1000_SUCCESS;
1580 }
1581
1582 /**
1583  *  e1000_get_speed_and_duplex_fiber_generic - Retrieve current speed/duplex
1584  *  @hw: pointer to the HW structure
1585  *  @speed: stores the current speed
1586  *  @duplex: stores the current duplex
1587  *
1588  *  Sets the speed and duplex to gigabit full duplex (the only possible option)
1589  *  for fiber/serdes links.
1590  **/
1591 s32 e1000_get_speed_and_duplex_fiber_serdes_generic(struct e1000_hw *hw,
1592                                                     u16 *speed, u16 *duplex)
1593 {
1594         DEBUGFUNC("e1000_get_speed_and_duplex_fiber_serdes_generic");
1595
1596         *speed = SPEED_1000;
1597         *duplex = FULL_DUPLEX;
1598
1599         return E1000_SUCCESS;
1600 }
1601
1602 /**
1603  *  e1000_get_hw_semaphore_generic - Acquire hardware semaphore
1604  *  @hw: pointer to the HW structure
1605  *
1606  *  Acquire the HW semaphore to access the PHY or NVM
1607  **/
1608 s32 e1000_get_hw_semaphore_generic(struct e1000_hw *hw)
1609 {
1610         u32 swsm;
1611         s32 ret_val = E1000_SUCCESS;
1612         s32 timeout = hw->nvm.word_size + 1;
1613         s32 i = 0;
1614
1615         DEBUGFUNC("e1000_get_hw_semaphore_generic");
1616
1617         /* Get the SW semaphore */
1618         while (i < timeout) {
1619                 swsm = E1000_READ_REG(hw, E1000_SWSM);
1620                 if (!(swsm & E1000_SWSM_SMBI))
1621                         break;
1622
1623                 usec_delay(50);
1624                 i++;
1625         }
1626
1627         if (i == timeout) {
1628                 DEBUGOUT("Driver can't access device - SMBI bit is set.\n");
1629                 ret_val = -E1000_ERR_NVM;
1630                 goto out;
1631         }
1632
1633         /* Get the FW semaphore. */
1634         for (i = 0; i < timeout; i++) {
1635                 swsm = E1000_READ_REG(hw, E1000_SWSM);
1636                 E1000_WRITE_REG(hw, E1000_SWSM, swsm | E1000_SWSM_SWESMBI);
1637
1638                 /* Semaphore acquired if bit latched */
1639                 if (E1000_READ_REG(hw, E1000_SWSM) & E1000_SWSM_SWESMBI)
1640                         break;
1641
1642                 usec_delay(50);
1643         }
1644
1645         if (i == timeout) {
1646                 /* Release semaphores */
1647                 e1000_put_hw_semaphore_generic(hw);
1648                 DEBUGOUT("Driver can't access the NVM\n");
1649                 ret_val = -E1000_ERR_NVM;
1650                 goto out;
1651         }
1652
1653 out:
1654         return ret_val;
1655 }
1656
1657 /**
1658  *  e1000_put_hw_semaphore_generic - Release hardware semaphore
1659  *  @hw: pointer to the HW structure
1660  *
1661  *  Release hardware semaphore used to access the PHY or NVM
1662  **/
1663 void e1000_put_hw_semaphore_generic(struct e1000_hw *hw)
1664 {
1665         u32 swsm;
1666
1667         DEBUGFUNC("e1000_put_hw_semaphore_generic");
1668
1669         swsm = E1000_READ_REG(hw, E1000_SWSM);
1670
1671         swsm &= ~(E1000_SWSM_SMBI | E1000_SWSM_SWESMBI);
1672
1673         E1000_WRITE_REG(hw, E1000_SWSM, swsm);
1674 }
1675
1676 /**
1677  *  e1000_get_auto_rd_done_generic - Check for auto read completion
1678  *  @hw: pointer to the HW structure
1679  *
1680  *  Check EEPROM for Auto Read done bit.
1681  **/
1682 s32 e1000_get_auto_rd_done_generic(struct e1000_hw *hw)
1683 {
1684         s32 i = 0;
1685         s32 ret_val = E1000_SUCCESS;
1686
1687         DEBUGFUNC("e1000_get_auto_rd_done_generic");
1688
1689         while (i < AUTO_READ_DONE_TIMEOUT) {
1690                 if (E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_AUTO_RD)
1691                         break;
1692                 msec_delay(1);
1693                 i++;
1694         }
1695
1696         if (i == AUTO_READ_DONE_TIMEOUT) {
1697                 DEBUGOUT("Auto read by HW from NVM has not completed.\n");
1698                 ret_val = -E1000_ERR_RESET;
1699                 goto out;
1700         }
1701
1702 out:
1703         return ret_val;
1704 }
1705
1706 /**
1707  *  e1000_valid_led_default_generic - Verify a valid default LED config
1708  *  @hw: pointer to the HW structure
1709  *  @data: pointer to the NVM (EEPROM)
1710  *
1711  *  Read the EEPROM for the current default LED configuration.  If the
1712  *  LED configuration is not valid, set to a valid LED configuration.
1713  **/
1714 s32 e1000_valid_led_default_generic(struct e1000_hw *hw, u16 *data)
1715 {
1716         s32 ret_val;
1717
1718         DEBUGFUNC("e1000_valid_led_default_generic");
1719
1720         ret_val = hw->nvm.ops.read(hw, NVM_ID_LED_SETTINGS, 1, data);
1721         if (ret_val) {
1722                 DEBUGOUT("NVM Read Error\n");
1723                 goto out;
1724         }
1725
1726         if (*data == ID_LED_RESERVED_0000 || *data == ID_LED_RESERVED_FFFF)
1727                 *data = ID_LED_DEFAULT;
1728
1729 out:
1730         return ret_val;
1731 }
1732
1733 /**
1734  *  e1000_id_led_init_generic -
1735  *  @hw: pointer to the HW structure
1736  *
1737  **/
1738 s32 e1000_id_led_init_generic(struct e1000_hw *hw)
1739 {
1740         struct e1000_mac_info *mac = &hw->mac;
1741         s32 ret_val;
1742         const u32 ledctl_mask = 0x000000FF;
1743         const u32 ledctl_on = E1000_LEDCTL_MODE_LED_ON;
1744         const u32 ledctl_off = E1000_LEDCTL_MODE_LED_OFF;
1745         u16 data, i, temp;
1746         const u16 led_mask = 0x0F;
1747
1748         DEBUGFUNC("e1000_id_led_init_generic");
1749
1750         ret_val = hw->nvm.ops.valid_led_default(hw, &data);
1751         if (ret_val)
1752                 goto out;
1753
1754         mac->ledctl_default = E1000_READ_REG(hw, E1000_LEDCTL);
1755         mac->ledctl_mode1 = mac->ledctl_default;
1756         mac->ledctl_mode2 = mac->ledctl_default;
1757
1758         for (i = 0; i < 4; i++) {
1759                 temp = (data >> (i << 2)) & led_mask;
1760                 switch (temp) {
1761                 case ID_LED_ON1_DEF2:
1762                 case ID_LED_ON1_ON2:
1763                 case ID_LED_ON1_OFF2:
1764                         mac->ledctl_mode1 &= ~(ledctl_mask << (i << 3));
1765                         mac->ledctl_mode1 |= ledctl_on << (i << 3);
1766                         break;
1767                 case ID_LED_OFF1_DEF2:
1768                 case ID_LED_OFF1_ON2:
1769                 case ID_LED_OFF1_OFF2:
1770                         mac->ledctl_mode1 &= ~(ledctl_mask << (i << 3));
1771                         mac->ledctl_mode1 |= ledctl_off << (i << 3);
1772                         break;
1773                 default:
1774                         /* Do nothing */
1775                         break;
1776                 }
1777                 switch (temp) {
1778                 case ID_LED_DEF1_ON2:
1779                 case ID_LED_ON1_ON2:
1780                 case ID_LED_OFF1_ON2:
1781                         mac->ledctl_mode2 &= ~(ledctl_mask << (i << 3));
1782                         mac->ledctl_mode2 |= ledctl_on << (i << 3);
1783                         break;
1784                 case ID_LED_DEF1_OFF2:
1785                 case ID_LED_ON1_OFF2:
1786                 case ID_LED_OFF1_OFF2:
1787                         mac->ledctl_mode2 &= ~(ledctl_mask << (i << 3));
1788                         mac->ledctl_mode2 |= ledctl_off << (i << 3);
1789                         break;
1790                 default:
1791                         /* Do nothing */
1792                         break;
1793                 }
1794         }
1795
1796 out:
1797         return ret_val;
1798 }
1799
1800 /**
1801  *  e1000_setup_led_generic - Configures SW controllable LED
1802  *  @hw: pointer to the HW structure
1803  *
1804  *  This prepares the SW controllable LED for use and saves the current state
1805  *  of the LED so it can be later restored.
1806  **/
1807 s32 e1000_setup_led_generic(struct e1000_hw *hw)
1808 {
1809         u32 ledctl;
1810         s32 ret_val = E1000_SUCCESS;
1811
1812         DEBUGFUNC("e1000_setup_led_generic");
1813
1814         if (hw->mac.ops.setup_led != e1000_setup_led_generic) {
1815                 ret_val = -E1000_ERR_CONFIG;
1816                 goto out;
1817         }
1818
1819         if (hw->phy.media_type == e1000_media_type_fiber) {
1820                 ledctl = E1000_READ_REG(hw, E1000_LEDCTL);
1821                 hw->mac.ledctl_default = ledctl;
1822                 /* Turn off LED0 */
1823                 ledctl &= ~(E1000_LEDCTL_LED0_IVRT |
1824                             E1000_LEDCTL_LED0_BLINK |
1825                             E1000_LEDCTL_LED0_MODE_MASK);
1826                 ledctl |= (E1000_LEDCTL_MODE_LED_OFF <<
1827                            E1000_LEDCTL_LED0_MODE_SHIFT);
1828                 E1000_WRITE_REG(hw, E1000_LEDCTL, ledctl);
1829         } else if (hw->phy.media_type == e1000_media_type_copper) {
1830                 E1000_WRITE_REG(hw, E1000_LEDCTL, hw->mac.ledctl_mode1);
1831         }
1832
1833 out:
1834         return ret_val;
1835 }
1836
1837 /**
1838  *  e1000_cleanup_led_generic - Set LED config to default operation
1839  *  @hw: pointer to the HW structure
1840  *
1841  *  Remove the current LED configuration and set the LED configuration
1842  *  to the default value, saved from the EEPROM.
1843  **/
1844 s32 e1000_cleanup_led_generic(struct e1000_hw *hw)
1845 {
1846         DEBUGFUNC("e1000_cleanup_led_generic");
1847
1848         E1000_WRITE_REG(hw, E1000_LEDCTL, hw->mac.ledctl_default);
1849         return E1000_SUCCESS;
1850 }
1851
1852 /**
1853  *  e1000_blink_led_generic - Blink LED
1854  *  @hw: pointer to the HW structure
1855  *
1856  *  Blink the LEDs which are set to be on.
1857  **/
1858 s32 e1000_blink_led_generic(struct e1000_hw *hw)
1859 {
1860         u32 ledctl_blink = 0;
1861         u32 i;
1862
1863         DEBUGFUNC("e1000_blink_led_generic");
1864
1865         if (hw->phy.media_type == e1000_media_type_fiber) {
1866                 /* always blink LED0 for PCI-E fiber */
1867                 ledctl_blink = E1000_LEDCTL_LED0_BLINK |
1868                      (E1000_LEDCTL_MODE_LED_ON << E1000_LEDCTL_LED0_MODE_SHIFT);
1869         } else {
1870                 /*
1871                  * set the blink bit for each LED that's "on" (0x0E)
1872                  * in ledctl_mode2
1873                  */
1874                 ledctl_blink = hw->mac.ledctl_mode2;
1875                 for (i = 0; i < 4; i++)
1876                         if (((hw->mac.ledctl_mode2 >> (i * 8)) & 0xFF) ==
1877                             E1000_LEDCTL_MODE_LED_ON)
1878                                 ledctl_blink |= (E1000_LEDCTL_LED0_BLINK <<
1879                                                  (i * 8));
1880         }
1881
1882         E1000_WRITE_REG(hw, E1000_LEDCTL, ledctl_blink);
1883
1884         return E1000_SUCCESS;
1885 }
1886
1887 /**
1888  *  e1000_led_on_generic - Turn LED on
1889  *  @hw: pointer to the HW structure
1890  *
1891  *  Turn LED on.
1892  **/
1893 s32 e1000_led_on_generic(struct e1000_hw *hw)
1894 {
1895         u32 ctrl;
1896
1897         DEBUGFUNC("e1000_led_on_generic");
1898
1899         switch (hw->phy.media_type) {
1900         case e1000_media_type_fiber:
1901                 ctrl = E1000_READ_REG(hw, E1000_CTRL);
1902                 ctrl &= ~E1000_CTRL_SWDPIN0;
1903                 ctrl |= E1000_CTRL_SWDPIO0;
1904                 E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
1905                 break;
1906         case e1000_media_type_copper:
1907                 E1000_WRITE_REG(hw, E1000_LEDCTL, hw->mac.ledctl_mode2);
1908                 break;
1909         default:
1910                 break;
1911         }
1912
1913         return E1000_SUCCESS;
1914 }
1915
1916 /**
1917  *  e1000_led_off_generic - Turn LED off
1918  *  @hw: pointer to the HW structure
1919  *
1920  *  Turn LED off.
1921  **/
1922 s32 e1000_led_off_generic(struct e1000_hw *hw)
1923 {
1924         u32 ctrl;
1925
1926         DEBUGFUNC("e1000_led_off_generic");
1927
1928         switch (hw->phy.media_type) {
1929         case e1000_media_type_fiber:
1930                 ctrl = E1000_READ_REG(hw, E1000_CTRL);
1931                 ctrl |= E1000_CTRL_SWDPIN0;
1932                 ctrl |= E1000_CTRL_SWDPIO0;
1933                 E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
1934                 break;
1935         case e1000_media_type_copper:
1936                 E1000_WRITE_REG(hw, E1000_LEDCTL, hw->mac.ledctl_mode1);
1937                 break;
1938         default:
1939                 break;
1940         }
1941
1942         return E1000_SUCCESS;
1943 }
1944
1945 /**
1946  *  e1000_set_pcie_no_snoop_generic - Set PCI-express capabilities
1947  *  @hw: pointer to the HW structure
1948  *  @no_snoop: bitmap of snoop events
1949  *
1950  *  Set the PCI-express register to snoop for events enabled in 'no_snoop'.
1951  **/
1952 void e1000_set_pcie_no_snoop_generic(struct e1000_hw *hw, u32 no_snoop)
1953 {
1954         u32 gcr;
1955
1956         DEBUGFUNC("e1000_set_pcie_no_snoop_generic");
1957
1958         if (hw->bus.type != e1000_bus_type_pci_express)
1959                 goto out;
1960
1961         if (no_snoop) {
1962                 gcr = E1000_READ_REG(hw, E1000_GCR);
1963                 gcr &= ~(PCIE_NO_SNOOP_ALL);
1964                 gcr |= no_snoop;
1965                 E1000_WRITE_REG(hw, E1000_GCR, gcr);
1966         }
1967 out:
1968         return;
1969 }
1970
1971 /**
1972  *  e1000_disable_pcie_master_generic - Disables PCI-express master access
1973  *  @hw: pointer to the HW structure
1974  *
1975  *  Returns E1000_SUCCESS if successful, else returns -10
1976  *  (-E1000_ERR_MASTER_REQUESTS_PENDING) if master disable bit has not caused
1977  *  the master requests to be disabled.
1978  *
1979  *  Disables PCI-Express master access and verifies there are no pending
1980  *  requests.
1981  **/
1982 s32 e1000_disable_pcie_master_generic(struct e1000_hw *hw)
1983 {
1984         u32 ctrl;
1985         s32 timeout = MASTER_DISABLE_TIMEOUT;
1986         s32 ret_val = E1000_SUCCESS;
1987
1988         DEBUGFUNC("e1000_disable_pcie_master_generic");
1989
1990         if (hw->bus.type != e1000_bus_type_pci_express)
1991                 goto out;
1992
1993         ctrl = E1000_READ_REG(hw, E1000_CTRL);
1994         ctrl |= E1000_CTRL_GIO_MASTER_DISABLE;
1995         E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
1996
1997         while (timeout) {
1998                 if (!(E1000_READ_REG(hw, E1000_STATUS) &
1999                       E1000_STATUS_GIO_MASTER_ENABLE))
2000                         break;
2001                 usec_delay(100);
2002                 timeout--;
2003         }
2004
2005         if (!timeout) {
2006                 DEBUGOUT("Master requests are pending.\n");
2007                 ret_val = -E1000_ERR_MASTER_REQUESTS_PENDING;
2008         }
2009
2010 out:
2011         return ret_val;
2012 }
2013
2014 /**
2015  *  e1000_reset_adaptive_generic - Reset Adaptive Interframe Spacing
2016  *  @hw: pointer to the HW structure
2017  *
2018  *  Reset the Adaptive Interframe Spacing throttle to default values.
2019  **/
2020 void e1000_reset_adaptive_generic(struct e1000_hw *hw)
2021 {
2022         struct e1000_mac_info *mac = &hw->mac;
2023
2024         DEBUGFUNC("e1000_reset_adaptive_generic");
2025
2026         if (!mac->adaptive_ifs) {
2027                 DEBUGOUT("Not in Adaptive IFS mode!\n");
2028                 goto out;
2029         }
2030
2031         mac->current_ifs_val = 0;
2032         mac->ifs_min_val = IFS_MIN;
2033         mac->ifs_max_val = IFS_MAX;
2034         mac->ifs_step_size = IFS_STEP;
2035         mac->ifs_ratio = IFS_RATIO;
2036
2037         mac->in_ifs_mode = FALSE;
2038         E1000_WRITE_REG(hw, E1000_AIT, 0);
2039 out:
2040         return;
2041 }
2042
2043 /**
2044  *  e1000_update_adaptive_generic - Update Adaptive Interframe Spacing
2045  *  @hw: pointer to the HW structure
2046  *
2047  *  Update the Adaptive Interframe Spacing Throttle value based on the
2048  *  time between transmitted packets and time between collisions.
2049  **/
2050 void e1000_update_adaptive_generic(struct e1000_hw *hw)
2051 {
2052         struct e1000_mac_info *mac = &hw->mac;
2053
2054         DEBUGFUNC("e1000_update_adaptive_generic");
2055
2056         if (!mac->adaptive_ifs) {
2057                 DEBUGOUT("Not in Adaptive IFS mode!\n");
2058                 goto out;
2059         }
2060
2061         if ((mac->collision_delta * mac->ifs_ratio) > mac->tx_packet_delta) {
2062                 if (mac->tx_packet_delta > MIN_NUM_XMITS) {
2063                         mac->in_ifs_mode = TRUE;
2064                         if (mac->current_ifs_val < mac->ifs_max_val) {
2065                                 if (!mac->current_ifs_val)
2066                                         mac->current_ifs_val = mac->ifs_min_val;
2067                                 else
2068                                         mac->current_ifs_val +=
2069                                                 mac->ifs_step_size;
2070                                 E1000_WRITE_REG(hw, E1000_AIT, mac->current_ifs_val);
2071                         }
2072                 }
2073         } else {
2074                 if (mac->in_ifs_mode &&
2075                     (mac->tx_packet_delta <= MIN_NUM_XMITS)) {
2076                         mac->current_ifs_val = 0;
2077                         mac->in_ifs_mode = FALSE;
2078                         E1000_WRITE_REG(hw, E1000_AIT, 0);
2079                 }
2080         }
2081 out:
2082         return;
2083 }
2084
2085 /**
2086  *  e1000_validate_mdi_setting_generic - Verify MDI/MDIx settings
2087  *  @hw: pointer to the HW structure
2088  *
2089  *  Verify that when not using auto-negotiation that MDI/MDIx is correctly
2090  *  set, which is forced to MDI mode only.
2091  **/
2092 static s32 e1000_validate_mdi_setting_generic(struct e1000_hw *hw)
2093 {
2094         s32 ret_val = E1000_SUCCESS;
2095
2096         DEBUGFUNC("e1000_validate_mdi_setting_generic");
2097
2098         if (!hw->mac.autoneg && (hw->phy.mdix == 0 || hw->phy.mdix == 3)) {
2099                 DEBUGOUT("Invalid MDI setting detected\n");
2100                 hw->phy.mdix = 1;
2101                 ret_val = -E1000_ERR_CONFIG;
2102                 goto out;
2103         }
2104
2105 out:
2106         return ret_val;
2107 }
2108
2109 /**
2110  *  e1000_write_8bit_ctrl_reg_generic - Write a 8bit CTRL register
2111  *  @hw: pointer to the HW structure
2112  *  @reg: 32bit register offset such as E1000_SCTL
2113  *  @offset: register offset to write to
2114  *  @data: data to write at register offset
2115  *
2116  *  Writes an address/data control type register.  There are several of these
2117  *  and they all have the format address << 8 | data and bit 31 is polled for
2118  *  completion.
2119  **/
2120 s32 e1000_write_8bit_ctrl_reg_generic(struct e1000_hw *hw, u32 reg,
2121                                       u32 offset, u8 data)
2122 {
2123         u32 i, regvalue = 0;
2124         s32 ret_val = E1000_SUCCESS;
2125
2126         DEBUGFUNC("e1000_write_8bit_ctrl_reg_generic");
2127
2128         /* Set up the address and data */
2129         regvalue = ((u32)data) | (offset << E1000_GEN_CTL_ADDRESS_SHIFT);
2130         E1000_WRITE_REG(hw, reg, regvalue);
2131
2132         /* Poll the ready bit to see if the MDI read completed */
2133         for (i = 0; i < E1000_GEN_POLL_TIMEOUT; i++) {
2134                 usec_delay(5);
2135                 regvalue = E1000_READ_REG(hw, reg);
2136                 if (regvalue & E1000_GEN_CTL_READY)
2137                         break;
2138         }
2139         if (!(regvalue & E1000_GEN_CTL_READY)) {
2140                 DEBUGOUT1("Reg %08x did not indicate ready\n", reg);
2141                 ret_val = -E1000_ERR_PHY;
2142                 goto out;
2143         }
2144
2145 out:
2146         return ret_val;
2147 }