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