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