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