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