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