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