xref: /freebsd/sys/dev/ixgbe/ixgbe_common.c (revision aa64588d28258aef88cc33b8043112e8856948d0)
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 "ixgbe_common.h"
36 #include "ixgbe_api.h"
37 
38 static s32 ixgbe_acquire_eeprom(struct ixgbe_hw *hw);
39 static s32 ixgbe_get_eeprom_semaphore(struct ixgbe_hw *hw);
40 static void ixgbe_release_eeprom_semaphore(struct ixgbe_hw *hw);
41 static s32 ixgbe_ready_eeprom(struct ixgbe_hw *hw);
42 static void ixgbe_standby_eeprom(struct ixgbe_hw *hw);
43 static void ixgbe_shift_out_eeprom_bits(struct ixgbe_hw *hw, u16 data,
44                                         u16 count);
45 static u16 ixgbe_shift_in_eeprom_bits(struct ixgbe_hw *hw, u16 count);
46 static void ixgbe_raise_eeprom_clk(struct ixgbe_hw *hw, u32 *eec);
47 static void ixgbe_lower_eeprom_clk(struct ixgbe_hw *hw, u32 *eec);
48 static void ixgbe_release_eeprom(struct ixgbe_hw *hw);
49 
50 static s32 ixgbe_mta_vector(struct ixgbe_hw *hw, u8 *mc_addr);
51 static s32 ixgbe_get_san_mac_addr_offset(struct ixgbe_hw *hw,
52                                         u16 *san_mac_offset);
53 s32 ixgbe_find_vlvf_slot(struct ixgbe_hw *hw, u32 vlan);
54 
55 /**
56  *  ixgbe_init_ops_generic - Inits function ptrs
57  *  @hw: pointer to the hardware structure
58  *
59  *  Initialize the function pointers.
60  **/
61 s32 ixgbe_init_ops_generic(struct ixgbe_hw *hw)
62 {
63 	struct ixgbe_eeprom_info *eeprom = &hw->eeprom;
64 	struct ixgbe_mac_info *mac = &hw->mac;
65 	u32 eec = IXGBE_READ_REG(hw, IXGBE_EEC);
66 
67 	DEBUGFUNC("ixgbe_init_ops_generic");
68 
69 	/* EEPROM */
70 	eeprom->ops.init_params = &ixgbe_init_eeprom_params_generic;
71 	/* If EEPROM is valid (bit 8 = 1), use EERD otherwise use bit bang */
72 	if (eec & (1 << 8))
73 		eeprom->ops.read = &ixgbe_read_eerd_generic;
74 	else
75 		eeprom->ops.read = &ixgbe_read_eeprom_bit_bang_generic;
76 	eeprom->ops.write = &ixgbe_write_eeprom_generic;
77 	eeprom->ops.validate_checksum =
78 	                              &ixgbe_validate_eeprom_checksum_generic;
79 	eeprom->ops.update_checksum = &ixgbe_update_eeprom_checksum_generic;
80 	eeprom->ops.calc_checksum = &ixgbe_calc_eeprom_checksum_generic;
81 
82 	/* MAC */
83 	mac->ops.init_hw = &ixgbe_init_hw_generic;
84 	mac->ops.reset_hw = NULL;
85 	mac->ops.start_hw = &ixgbe_start_hw_generic;
86 	mac->ops.clear_hw_cntrs = &ixgbe_clear_hw_cntrs_generic;
87 	mac->ops.get_media_type = NULL;
88 	mac->ops.get_supported_physical_layer = NULL;
89 	mac->ops.enable_rx_dma = &ixgbe_enable_rx_dma_generic;
90 	mac->ops.get_mac_addr = &ixgbe_get_mac_addr_generic;
91 	mac->ops.stop_adapter = &ixgbe_stop_adapter_generic;
92 	mac->ops.get_bus_info = &ixgbe_get_bus_info_generic;
93 	mac->ops.set_lan_id = &ixgbe_set_lan_id_multi_port_pcie;
94 	mac->ops.acquire_swfw_sync = &ixgbe_acquire_swfw_sync;
95 	mac->ops.release_swfw_sync = &ixgbe_release_swfw_sync;
96 
97 	/* LEDs */
98 	mac->ops.led_on = &ixgbe_led_on_generic;
99 	mac->ops.led_off = &ixgbe_led_off_generic;
100 	mac->ops.blink_led_start = &ixgbe_blink_led_start_generic;
101 	mac->ops.blink_led_stop = &ixgbe_blink_led_stop_generic;
102 
103 	/* RAR, Multicast, VLAN */
104 	mac->ops.set_rar = &ixgbe_set_rar_generic;
105 	mac->ops.clear_rar = &ixgbe_clear_rar_generic;
106 	mac->ops.insert_mac_addr = NULL;
107 	mac->ops.set_vmdq = NULL;
108 	mac->ops.clear_vmdq = NULL;
109 	mac->ops.init_rx_addrs = &ixgbe_init_rx_addrs_generic;
110 	mac->ops.update_uc_addr_list = &ixgbe_update_uc_addr_list_generic;
111 	mac->ops.update_mc_addr_list = &ixgbe_update_mc_addr_list_generic;
112 	mac->ops.enable_mc = &ixgbe_enable_mc_generic;
113 	mac->ops.disable_mc = &ixgbe_disable_mc_generic;
114 	mac->ops.clear_vfta = NULL;
115 	mac->ops.set_vfta = NULL;
116 	mac->ops.init_uta_tables = NULL;
117 
118 	/* Flow Control */
119 	mac->ops.fc_enable = &ixgbe_fc_enable_generic;
120 
121 	/* Link */
122 	mac->ops.get_link_capabilities = NULL;
123 	mac->ops.setup_link = NULL;
124 	mac->ops.check_link = NULL;
125 
126 	return IXGBE_SUCCESS;
127 }
128 
129 /**
130  *  ixgbe_start_hw_generic - Prepare hardware for Tx/Rx
131  *  @hw: pointer to hardware structure
132  *
133  *  Starts the hardware by filling the bus info structure and media type, clears
134  *  all on chip counters, initializes receive address registers, multicast
135  *  table, VLAN filter table, calls routine to set up link and flow control
136  *  settings, and leaves transmit and receive units disabled and uninitialized
137  **/
138 s32 ixgbe_start_hw_generic(struct ixgbe_hw *hw)
139 {
140 	u32 ctrl_ext;
141 	s32 ret_val = IXGBE_SUCCESS;
142 
143 	DEBUGFUNC("ixgbe_start_hw_generic");
144 
145 	/* Set the media type */
146 	hw->phy.media_type = hw->mac.ops.get_media_type(hw);
147 
148 	/* PHY ops initialization must be done in reset_hw() */
149 
150 	/* Clear the VLAN filter table */
151 	hw->mac.ops.clear_vfta(hw);
152 
153 	/* Clear statistics registers */
154 	hw->mac.ops.clear_hw_cntrs(hw);
155 
156 	/* Set No Snoop Disable */
157 	ctrl_ext = IXGBE_READ_REG(hw, IXGBE_CTRL_EXT);
158 	ctrl_ext |= IXGBE_CTRL_EXT_NS_DIS;
159 	IXGBE_WRITE_REG(hw, IXGBE_CTRL_EXT, ctrl_ext);
160 	IXGBE_WRITE_FLUSH(hw);
161 
162 	/* Setup flow control */
163 	ixgbe_setup_fc(hw, 0);
164 
165 	/* Clear adapter stopped flag */
166 	hw->adapter_stopped = FALSE;
167 
168 	return ret_val;
169 }
170 
171 /**
172  *  ixgbe_init_hw_generic - Generic hardware initialization
173  *  @hw: pointer to hardware structure
174  *
175  *  Initialize the hardware by resetting the hardware, filling the bus info
176  *  structure and media type, clears all on chip counters, initializes receive
177  *  address registers, multicast table, VLAN filter table, calls routine to set
178  *  up link and flow control settings, and leaves transmit and receive units
179  *  disabled and uninitialized
180  **/
181 s32 ixgbe_init_hw_generic(struct ixgbe_hw *hw)
182 {
183 	s32 status = IXGBE_SUCCESS;
184 
185 	DEBUGFUNC("ixgbe_init_hw_generic");
186 
187 	/* Reset the hardware */
188 	status = hw->mac.ops.reset_hw(hw);
189 
190 	if (status == IXGBE_SUCCESS) {
191 		/* Start the HW */
192 		status = hw->mac.ops.start_hw(hw);
193 	}
194 
195 	return status;
196 }
197 
198 /**
199  *  ixgbe_clear_hw_cntrs_generic - Generic clear hardware counters
200  *  @hw: pointer to hardware structure
201  *
202  *  Clears all hardware statistics counters by reading them from the hardware
203  *  Statistics counters are clear on read.
204  **/
205 s32 ixgbe_clear_hw_cntrs_generic(struct ixgbe_hw *hw)
206 {
207 	u16 i = 0;
208 
209 	DEBUGFUNC("ixgbe_clear_hw_cntrs_generic");
210 
211 	IXGBE_READ_REG(hw, IXGBE_CRCERRS);
212 	IXGBE_READ_REG(hw, IXGBE_ILLERRC);
213 	IXGBE_READ_REG(hw, IXGBE_ERRBC);
214 	IXGBE_READ_REG(hw, IXGBE_MSPDC);
215 	for (i = 0; i < 8; i++)
216 		IXGBE_READ_REG(hw, IXGBE_MPC(i));
217 
218 	IXGBE_READ_REG(hw, IXGBE_MLFC);
219 	IXGBE_READ_REG(hw, IXGBE_MRFC);
220 	IXGBE_READ_REG(hw, IXGBE_RLEC);
221 	IXGBE_READ_REG(hw, IXGBE_LXONTXC);
222 	IXGBE_READ_REG(hw, IXGBE_LXOFFTXC);
223 	if (hw->mac.type >= ixgbe_mac_82599EB) {
224 		IXGBE_READ_REG(hw, IXGBE_LXONRXCNT);
225 		IXGBE_READ_REG(hw, IXGBE_LXOFFRXCNT);
226 	} else {
227 		IXGBE_READ_REG(hw, IXGBE_LXONRXC);
228 		IXGBE_READ_REG(hw, IXGBE_LXOFFRXC);
229 	}
230 
231 	for (i = 0; i < 8; i++) {
232 		IXGBE_READ_REG(hw, IXGBE_PXONTXC(i));
233 		IXGBE_READ_REG(hw, IXGBE_PXOFFTXC(i));
234 		if (hw->mac.type >= ixgbe_mac_82599EB) {
235 			IXGBE_READ_REG(hw, IXGBE_PXONRXCNT(i));
236 			IXGBE_READ_REG(hw, IXGBE_PXOFFRXCNT(i));
237 		} else {
238 			IXGBE_READ_REG(hw, IXGBE_PXONRXC(i));
239 			IXGBE_READ_REG(hw, IXGBE_PXOFFRXC(i));
240 		}
241 	}
242 	if (hw->mac.type >= ixgbe_mac_82599EB)
243 		for (i = 0; i < 8; i++)
244 			IXGBE_READ_REG(hw, IXGBE_PXON2OFFCNT(i));
245 	IXGBE_READ_REG(hw, IXGBE_PRC64);
246 	IXGBE_READ_REG(hw, IXGBE_PRC127);
247 	IXGBE_READ_REG(hw, IXGBE_PRC255);
248 	IXGBE_READ_REG(hw, IXGBE_PRC511);
249 	IXGBE_READ_REG(hw, IXGBE_PRC1023);
250 	IXGBE_READ_REG(hw, IXGBE_PRC1522);
251 	IXGBE_READ_REG(hw, IXGBE_GPRC);
252 	IXGBE_READ_REG(hw, IXGBE_BPRC);
253 	IXGBE_READ_REG(hw, IXGBE_MPRC);
254 	IXGBE_READ_REG(hw, IXGBE_GPTC);
255 	IXGBE_READ_REG(hw, IXGBE_GORCL);
256 	IXGBE_READ_REG(hw, IXGBE_GORCH);
257 	IXGBE_READ_REG(hw, IXGBE_GOTCL);
258 	IXGBE_READ_REG(hw, IXGBE_GOTCH);
259 	for (i = 0; i < 8; i++)
260 		IXGBE_READ_REG(hw, IXGBE_RNBC(i));
261 	IXGBE_READ_REG(hw, IXGBE_RUC);
262 	IXGBE_READ_REG(hw, IXGBE_RFC);
263 	IXGBE_READ_REG(hw, IXGBE_ROC);
264 	IXGBE_READ_REG(hw, IXGBE_RJC);
265 	IXGBE_READ_REG(hw, IXGBE_MNGPRC);
266 	IXGBE_READ_REG(hw, IXGBE_MNGPDC);
267 	IXGBE_READ_REG(hw, IXGBE_MNGPTC);
268 	IXGBE_READ_REG(hw, IXGBE_TORL);
269 	IXGBE_READ_REG(hw, IXGBE_TORH);
270 	IXGBE_READ_REG(hw, IXGBE_TPR);
271 	IXGBE_READ_REG(hw, IXGBE_TPT);
272 	IXGBE_READ_REG(hw, IXGBE_PTC64);
273 	IXGBE_READ_REG(hw, IXGBE_PTC127);
274 	IXGBE_READ_REG(hw, IXGBE_PTC255);
275 	IXGBE_READ_REG(hw, IXGBE_PTC511);
276 	IXGBE_READ_REG(hw, IXGBE_PTC1023);
277 	IXGBE_READ_REG(hw, IXGBE_PTC1522);
278 	IXGBE_READ_REG(hw, IXGBE_MPTC);
279 	IXGBE_READ_REG(hw, IXGBE_BPTC);
280 	for (i = 0; i < 16; i++) {
281 		IXGBE_READ_REG(hw, IXGBE_QPRC(i));
282 		IXGBE_READ_REG(hw, IXGBE_QBRC(i));
283 		IXGBE_READ_REG(hw, IXGBE_QPTC(i));
284 		IXGBE_READ_REG(hw, IXGBE_QBTC(i));
285 	}
286 
287 	return IXGBE_SUCCESS;
288 }
289 
290 /**
291  *  ixgbe_read_pba_num_generic - Reads part number from EEPROM
292  *  @hw: pointer to hardware structure
293  *  @pba_num: stores the part number from the EEPROM
294  *
295  *  Reads the part number from the EEPROM.
296  **/
297 s32 ixgbe_read_pba_num_generic(struct ixgbe_hw *hw, u32 *pba_num)
298 {
299 	s32 ret_val;
300 	u16 data;
301 
302 	DEBUGFUNC("ixgbe_read_pba_num_generic");
303 
304 	ret_val = hw->eeprom.ops.read(hw, IXGBE_PBANUM0_PTR, &data);
305 	if (ret_val) {
306 		DEBUGOUT("NVM Read Error\n");
307 		return ret_val;
308 	}
309 	*pba_num = (u32)(data << 16);
310 
311 	ret_val = hw->eeprom.ops.read(hw, IXGBE_PBANUM1_PTR, &data);
312 	if (ret_val) {
313 		DEBUGOUT("NVM Read Error\n");
314 		return ret_val;
315 	}
316 	*pba_num |= data;
317 
318 	return IXGBE_SUCCESS;
319 }
320 
321 /**
322  *  ixgbe_get_mac_addr_generic - Generic get MAC address
323  *  @hw: pointer to hardware structure
324  *  @mac_addr: Adapter MAC address
325  *
326  *  Reads the adapter's MAC address from first Receive Address Register (RAR0)
327  *  A reset of the adapter must be performed prior to calling this function
328  *  in order for the MAC address to have been loaded from the EEPROM into RAR0
329  **/
330 s32 ixgbe_get_mac_addr_generic(struct ixgbe_hw *hw, u8 *mac_addr)
331 {
332 	u32 rar_high;
333 	u32 rar_low;
334 	u16 i;
335 
336 	DEBUGFUNC("ixgbe_get_mac_addr_generic");
337 
338 	rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(0));
339 	rar_low = IXGBE_READ_REG(hw, IXGBE_RAL(0));
340 
341 	for (i = 0; i < 4; i++)
342 		mac_addr[i] = (u8)(rar_low >> (i*8));
343 
344 	for (i = 0; i < 2; i++)
345 		mac_addr[i+4] = (u8)(rar_high >> (i*8));
346 
347 	return IXGBE_SUCCESS;
348 }
349 
350 /**
351  *  ixgbe_get_bus_info_generic - Generic set PCI bus info
352  *  @hw: pointer to hardware structure
353  *
354  *  Sets the PCI bus info (speed, width, type) within the ixgbe_hw structure
355  **/
356 s32 ixgbe_get_bus_info_generic(struct ixgbe_hw *hw)
357 {
358 	struct ixgbe_mac_info *mac = &hw->mac;
359 	u16 link_status;
360 
361 	DEBUGFUNC("ixgbe_get_bus_info_generic");
362 
363 	hw->bus.type = ixgbe_bus_type_pci_express;
364 
365 	/* Get the negotiated link width and speed from PCI config space */
366 	link_status = IXGBE_READ_PCIE_WORD(hw, IXGBE_PCI_LINK_STATUS);
367 
368 	switch (link_status & IXGBE_PCI_LINK_WIDTH) {
369 	case IXGBE_PCI_LINK_WIDTH_1:
370 		hw->bus.width = ixgbe_bus_width_pcie_x1;
371 		break;
372 	case IXGBE_PCI_LINK_WIDTH_2:
373 		hw->bus.width = ixgbe_bus_width_pcie_x2;
374 		break;
375 	case IXGBE_PCI_LINK_WIDTH_4:
376 		hw->bus.width = ixgbe_bus_width_pcie_x4;
377 		break;
378 	case IXGBE_PCI_LINK_WIDTH_8:
379 		hw->bus.width = ixgbe_bus_width_pcie_x8;
380 		break;
381 	default:
382 		hw->bus.width = ixgbe_bus_width_unknown;
383 		break;
384 	}
385 
386 	switch (link_status & IXGBE_PCI_LINK_SPEED) {
387 	case IXGBE_PCI_LINK_SPEED_2500:
388 		hw->bus.speed = ixgbe_bus_speed_2500;
389 		break;
390 	case IXGBE_PCI_LINK_SPEED_5000:
391 		hw->bus.speed = ixgbe_bus_speed_5000;
392 		break;
393 	default:
394 		hw->bus.speed = ixgbe_bus_speed_unknown;
395 		break;
396 	}
397 
398 	mac->ops.set_lan_id(hw);
399 
400 	return IXGBE_SUCCESS;
401 }
402 
403 /**
404  *  ixgbe_set_lan_id_multi_port_pcie - Set LAN id for PCIe multiple port devices
405  *  @hw: pointer to the HW structure
406  *
407  *  Determines the LAN function id by reading memory-mapped registers
408  *  and swaps the port value if requested.
409  **/
410 void ixgbe_set_lan_id_multi_port_pcie(struct ixgbe_hw *hw)
411 {
412 	struct ixgbe_bus_info *bus = &hw->bus;
413 	u32 reg;
414 
415 	DEBUGFUNC("ixgbe_set_lan_id_multi_port_pcie");
416 
417 	reg = IXGBE_READ_REG(hw, IXGBE_STATUS);
418 	bus->func = (reg & IXGBE_STATUS_LAN_ID) >> IXGBE_STATUS_LAN_ID_SHIFT;
419 	bus->lan_id = bus->func;
420 
421 	/* check for a port swap */
422 	reg = IXGBE_READ_REG(hw, IXGBE_FACTPS);
423 	if (reg & IXGBE_FACTPS_LFS)
424 		bus->func ^= 0x1;
425 }
426 
427 /**
428  *  ixgbe_stop_adapter_generic - Generic stop Tx/Rx units
429  *  @hw: pointer to hardware structure
430  *
431  *  Sets the adapter_stopped flag within ixgbe_hw struct. Clears interrupts,
432  *  disables transmit and receive units. The adapter_stopped flag is used by
433  *  the shared code and drivers to determine if the adapter is in a stopped
434  *  state and should not touch the hardware.
435  **/
436 s32 ixgbe_stop_adapter_generic(struct ixgbe_hw *hw)
437 {
438 	u32 number_of_queues;
439 	u32 reg_val;
440 	u16 i;
441 
442 	DEBUGFUNC("ixgbe_stop_adapter_generic");
443 
444 	/*
445 	 * Set the adapter_stopped flag so other driver functions stop touching
446 	 * the hardware
447 	 */
448 	hw->adapter_stopped = TRUE;
449 
450 	/* Disable the receive unit */
451 	reg_val = IXGBE_READ_REG(hw, IXGBE_RXCTRL);
452 	reg_val &= ~(IXGBE_RXCTRL_RXEN);
453 	IXGBE_WRITE_REG(hw, IXGBE_RXCTRL, reg_val);
454 	IXGBE_WRITE_FLUSH(hw);
455 	msec_delay(2);
456 
457 	/* Clear interrupt mask to stop from interrupts being generated */
458 	IXGBE_WRITE_REG(hw, IXGBE_EIMC, IXGBE_IRQ_CLEAR_MASK);
459 
460 	/* Clear any pending interrupts */
461 	IXGBE_READ_REG(hw, IXGBE_EICR);
462 
463 	/* Disable the transmit unit.  Each queue must be disabled. */
464 	number_of_queues = hw->mac.max_tx_queues;
465 	for (i = 0; i < number_of_queues; i++) {
466 		reg_val = IXGBE_READ_REG(hw, IXGBE_TXDCTL(i));
467 		if (reg_val & IXGBE_TXDCTL_ENABLE) {
468 			reg_val &= ~IXGBE_TXDCTL_ENABLE;
469 			IXGBE_WRITE_REG(hw, IXGBE_TXDCTL(i), reg_val);
470 		}
471 	}
472 
473 	/*
474 	 * Prevent the PCI-E bus from from hanging by disabling PCI-E master
475 	 * access and verify no pending requests
476 	 */
477 	ixgbe_disable_pcie_master(hw);
478 
479 	return IXGBE_SUCCESS;
480 }
481 
482 /**
483  *  ixgbe_led_on_generic - Turns on the software controllable LEDs.
484  *  @hw: pointer to hardware structure
485  *  @index: led number to turn on
486  **/
487 s32 ixgbe_led_on_generic(struct ixgbe_hw *hw, u32 index)
488 {
489 	u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
490 
491 	DEBUGFUNC("ixgbe_led_on_generic");
492 
493 	/* To turn on the LED, set mode to ON. */
494 	led_reg &= ~IXGBE_LED_MODE_MASK(index);
495 	led_reg |= IXGBE_LED_ON << IXGBE_LED_MODE_SHIFT(index);
496 	IXGBE_WRITE_REG(hw, IXGBE_LEDCTL, led_reg);
497 	IXGBE_WRITE_FLUSH(hw);
498 
499 	return IXGBE_SUCCESS;
500 }
501 
502 /**
503  *  ixgbe_led_off_generic - Turns off the software controllable LEDs.
504  *  @hw: pointer to hardware structure
505  *  @index: led number to turn off
506  **/
507 s32 ixgbe_led_off_generic(struct ixgbe_hw *hw, u32 index)
508 {
509 	u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
510 
511 	DEBUGFUNC("ixgbe_led_off_generic");
512 
513 	/* To turn off the LED, set mode to OFF. */
514 	led_reg &= ~IXGBE_LED_MODE_MASK(index);
515 	led_reg |= IXGBE_LED_OFF << IXGBE_LED_MODE_SHIFT(index);
516 	IXGBE_WRITE_REG(hw, IXGBE_LEDCTL, led_reg);
517 	IXGBE_WRITE_FLUSH(hw);
518 
519 	return IXGBE_SUCCESS;
520 }
521 
522 /**
523  *  ixgbe_init_eeprom_params_generic - Initialize EEPROM params
524  *  @hw: pointer to hardware structure
525  *
526  *  Initializes the EEPROM parameters ixgbe_eeprom_info within the
527  *  ixgbe_hw struct in order to set up EEPROM access.
528  **/
529 s32 ixgbe_init_eeprom_params_generic(struct ixgbe_hw *hw)
530 {
531 	struct ixgbe_eeprom_info *eeprom = &hw->eeprom;
532 	u32 eec;
533 	u16 eeprom_size;
534 
535 	DEBUGFUNC("ixgbe_init_eeprom_params_generic");
536 
537 	if (eeprom->type == ixgbe_eeprom_uninitialized) {
538 		eeprom->type = ixgbe_eeprom_none;
539 		/* Set default semaphore delay to 10ms which is a well
540 		 * tested value */
541 		eeprom->semaphore_delay = 10;
542 
543 		/*
544 		 * Check for EEPROM present first.
545 		 * If not present leave as none
546 		 */
547 		eec = IXGBE_READ_REG(hw, IXGBE_EEC);
548 		if (eec & IXGBE_EEC_PRES) {
549 			eeprom->type = ixgbe_eeprom_spi;
550 
551 			/*
552 			 * SPI EEPROM is assumed here.  This code would need to
553 			 * change if a future EEPROM is not SPI.
554 			 */
555 			eeprom_size = (u16)((eec & IXGBE_EEC_SIZE) >>
556 			                    IXGBE_EEC_SIZE_SHIFT);
557 			eeprom->word_size = 1 << (eeprom_size +
558 			                     IXGBE_EEPROM_WORD_SIZE_BASE_SHIFT);
559 		}
560 
561 		if (eec & IXGBE_EEC_ADDR_SIZE)
562 			eeprom->address_bits = 16;
563 		else
564 			eeprom->address_bits = 8;
565 		DEBUGOUT3("Eeprom params: type = %d, size = %d, address bits: "
566 		          "%d\n", eeprom->type, eeprom->word_size,
567 		          eeprom->address_bits);
568 	}
569 
570 	return IXGBE_SUCCESS;
571 }
572 
573 /**
574  *  ixgbe_write_eeprom_generic - Writes 16 bit value to EEPROM
575  *  @hw: pointer to hardware structure
576  *  @offset: offset within the EEPROM to be written to
577  *  @data: 16 bit word to be written to the EEPROM
578  *
579  *  If ixgbe_eeprom_update_checksum is not called after this function, the
580  *  EEPROM will most likely contain an invalid checksum.
581  **/
582 s32 ixgbe_write_eeprom_generic(struct ixgbe_hw *hw, u16 offset, u16 data)
583 {
584 	s32 status;
585 	u8 write_opcode = IXGBE_EEPROM_WRITE_OPCODE_SPI;
586 
587 	DEBUGFUNC("ixgbe_write_eeprom_generic");
588 
589 	hw->eeprom.ops.init_params(hw);
590 
591 	if (offset >= hw->eeprom.word_size) {
592 		status = IXGBE_ERR_EEPROM;
593 		goto out;
594 	}
595 
596 	/* Prepare the EEPROM for writing  */
597 	status = ixgbe_acquire_eeprom(hw);
598 
599 	if (status == IXGBE_SUCCESS) {
600 		if (ixgbe_ready_eeprom(hw) != IXGBE_SUCCESS) {
601 			ixgbe_release_eeprom(hw);
602 			status = IXGBE_ERR_EEPROM;
603 		}
604 	}
605 
606 	if (status == IXGBE_SUCCESS) {
607 		ixgbe_standby_eeprom(hw);
608 
609 		/*  Send the WRITE ENABLE command (8 bit opcode )  */
610 		ixgbe_shift_out_eeprom_bits(hw, IXGBE_EEPROM_WREN_OPCODE_SPI,
611 		                            IXGBE_EEPROM_OPCODE_BITS);
612 
613 		ixgbe_standby_eeprom(hw);
614 
615 		/*
616 		 * Some SPI eeproms use the 8th address bit embedded in the
617 		 * opcode
618 		 */
619 		if ((hw->eeprom.address_bits == 8) && (offset >= 128))
620 			write_opcode |= IXGBE_EEPROM_A8_OPCODE_SPI;
621 
622 		/* Send the Write command (8-bit opcode + addr) */
623 		ixgbe_shift_out_eeprom_bits(hw, write_opcode,
624 		                            IXGBE_EEPROM_OPCODE_BITS);
625 		ixgbe_shift_out_eeprom_bits(hw, (u16)(offset*2),
626 		                            hw->eeprom.address_bits);
627 
628 		/* Send the data */
629 		data = (data >> 8) | (data << 8);
630 		ixgbe_shift_out_eeprom_bits(hw, data, 16);
631 		ixgbe_standby_eeprom(hw);
632 
633 		/* Done with writing - release the EEPROM */
634 		ixgbe_release_eeprom(hw);
635 	}
636 
637 out:
638 	return status;
639 }
640 
641 /**
642  *  ixgbe_read_eeprom_bit_bang_generic - Read EEPROM word using bit-bang
643  *  @hw: pointer to hardware structure
644  *  @offset: offset within the EEPROM to be read
645  *  @data: read 16 bit value from EEPROM
646  *
647  *  Reads 16 bit value from EEPROM through bit-bang method
648  **/
649 s32 ixgbe_read_eeprom_bit_bang_generic(struct ixgbe_hw *hw, u16 offset,
650                                        u16 *data)
651 {
652 	s32 status;
653 	u16 word_in;
654 	u8 read_opcode = IXGBE_EEPROM_READ_OPCODE_SPI;
655 
656 	DEBUGFUNC("ixgbe_read_eeprom_bit_bang_generic");
657 
658 	hw->eeprom.ops.init_params(hw);
659 
660 	if (offset >= hw->eeprom.word_size) {
661 		status = IXGBE_ERR_EEPROM;
662 		goto out;
663 	}
664 
665 	/* Prepare the EEPROM for reading  */
666 	status = ixgbe_acquire_eeprom(hw);
667 
668 	if (status == IXGBE_SUCCESS) {
669 		if (ixgbe_ready_eeprom(hw) != IXGBE_SUCCESS) {
670 			ixgbe_release_eeprom(hw);
671 			status = IXGBE_ERR_EEPROM;
672 		}
673 	}
674 
675 	if (status == IXGBE_SUCCESS) {
676 		ixgbe_standby_eeprom(hw);
677 
678 		/*
679 		 * Some SPI eeproms use the 8th address bit embedded in the
680 		 * opcode
681 		 */
682 		if ((hw->eeprom.address_bits == 8) && (offset >= 128))
683 			read_opcode |= IXGBE_EEPROM_A8_OPCODE_SPI;
684 
685 		/* Send the READ command (opcode + addr) */
686 		ixgbe_shift_out_eeprom_bits(hw, read_opcode,
687 		                            IXGBE_EEPROM_OPCODE_BITS);
688 		ixgbe_shift_out_eeprom_bits(hw, (u16)(offset*2),
689 		                            hw->eeprom.address_bits);
690 
691 		/* Read the data. */
692 		word_in = ixgbe_shift_in_eeprom_bits(hw, 16);
693 		*data = (word_in >> 8) | (word_in << 8);
694 
695 		/* End this read operation */
696 		ixgbe_release_eeprom(hw);
697 	}
698 
699 out:
700 	return status;
701 }
702 
703 /**
704  *  ixgbe_read_eerd_generic - Read EEPROM word using EERD
705  *  @hw: pointer to hardware structure
706  *  @offset: offset of  word in the EEPROM to read
707  *  @data: word read from the EEPROM
708  *
709  *  Reads a 16 bit word from the EEPROM using the EERD register.
710  **/
711 s32 ixgbe_read_eerd_generic(struct ixgbe_hw *hw, u16 offset, u16 *data)
712 {
713 	u32 eerd;
714 	s32 status;
715 
716 	DEBUGFUNC("ixgbe_read_eerd_generic");
717 
718 	hw->eeprom.ops.init_params(hw);
719 
720 	if (offset >= hw->eeprom.word_size) {
721 		status = IXGBE_ERR_EEPROM;
722 		goto out;
723 	}
724 
725 	eerd = (offset << IXGBE_EEPROM_RW_ADDR_SHIFT) +
726 	       IXGBE_EEPROM_RW_REG_START;
727 
728 	IXGBE_WRITE_REG(hw, IXGBE_EERD, eerd);
729 	status = ixgbe_poll_eerd_eewr_done(hw, IXGBE_NVM_POLL_READ);
730 
731 	if (status == IXGBE_SUCCESS)
732 		*data = (IXGBE_READ_REG(hw, IXGBE_EERD) >>
733 		         IXGBE_EEPROM_RW_REG_DATA);
734 	else
735 		DEBUGOUT("Eeprom read timed out\n");
736 
737 out:
738 	return status;
739 }
740 
741 /**
742  *  ixgbe_poll_eerd_eewr_done - Poll EERD read or EEWR write status
743  *  @hw: pointer to hardware structure
744  *  @ee_reg: EEPROM flag for polling
745  *
746  *  Polls the status bit (bit 1) of the EERD or EEWR to determine when the
747  *  read or write is done respectively.
748  **/
749 s32 ixgbe_poll_eerd_eewr_done(struct ixgbe_hw *hw, u32 ee_reg)
750 {
751 	u32 i;
752 	u32 reg;
753 	s32 status = IXGBE_ERR_EEPROM;
754 
755 	DEBUGFUNC("ixgbe_poll_eerd_eewr_done");
756 
757 	for (i = 0; i < IXGBE_EERD_EEWR_ATTEMPTS; i++) {
758 		if (ee_reg == IXGBE_NVM_POLL_READ)
759 			reg = IXGBE_READ_REG(hw, IXGBE_EERD);
760 		else
761 			reg = IXGBE_READ_REG(hw, IXGBE_EEWR);
762 
763 		if (reg & IXGBE_EEPROM_RW_REG_DONE) {
764 			status = IXGBE_SUCCESS;
765 			break;
766 		}
767 		usec_delay(5);
768 	}
769 	return status;
770 }
771 
772 /**
773  *  ixgbe_acquire_eeprom - Acquire EEPROM using bit-bang
774  *  @hw: pointer to hardware structure
775  *
776  *  Prepares EEPROM for access using bit-bang method. This function should
777  *  be called before issuing a command to the EEPROM.
778  **/
779 static s32 ixgbe_acquire_eeprom(struct ixgbe_hw *hw)
780 {
781 	s32 status = IXGBE_SUCCESS;
782 	u32 eec;
783 	u32 i;
784 
785 	DEBUGFUNC("ixgbe_acquire_eeprom");
786 
787 	if (ixgbe_acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM) != IXGBE_SUCCESS)
788 		status = IXGBE_ERR_SWFW_SYNC;
789 
790 	if (status == IXGBE_SUCCESS) {
791 		eec = IXGBE_READ_REG(hw, IXGBE_EEC);
792 
793 		/* Request EEPROM Access */
794 		eec |= IXGBE_EEC_REQ;
795 		IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
796 
797 		for (i = 0; i < IXGBE_EEPROM_GRANT_ATTEMPTS; i++) {
798 			eec = IXGBE_READ_REG(hw, IXGBE_EEC);
799 			if (eec & IXGBE_EEC_GNT)
800 				break;
801 			usec_delay(5);
802 		}
803 
804 		/* Release if grant not acquired */
805 		if (!(eec & IXGBE_EEC_GNT)) {
806 			eec &= ~IXGBE_EEC_REQ;
807 			IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
808 			DEBUGOUT("Could not acquire EEPROM grant\n");
809 
810 			ixgbe_release_swfw_sync(hw, IXGBE_GSSR_EEP_SM);
811 			status = IXGBE_ERR_EEPROM;
812 		}
813 	}
814 
815 	/* Setup EEPROM for Read/Write */
816 	if (status == IXGBE_SUCCESS) {
817 		/* Clear CS and SK */
818 		eec &= ~(IXGBE_EEC_CS | IXGBE_EEC_SK);
819 		IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
820 		IXGBE_WRITE_FLUSH(hw);
821 		usec_delay(1);
822 	}
823 	return status;
824 }
825 
826 /**
827  *  ixgbe_get_eeprom_semaphore - Get hardware semaphore
828  *  @hw: pointer to hardware structure
829  *
830  *  Sets the hardware semaphores so EEPROM access can occur for bit-bang method
831  **/
832 static s32 ixgbe_get_eeprom_semaphore(struct ixgbe_hw *hw)
833 {
834 	s32 status = IXGBE_ERR_EEPROM;
835 	u32 timeout = 2000;
836 	u32 i;
837 	u32 swsm;
838 
839 	DEBUGFUNC("ixgbe_get_eeprom_semaphore");
840 
841 	/* Get SMBI software semaphore between device drivers first */
842 	for (i = 0; i < timeout; i++) {
843 		/*
844 		 * If the SMBI bit is 0 when we read it, then the bit will be
845 		 * set and we have the semaphore
846 		 */
847 		swsm = IXGBE_READ_REG(hw, IXGBE_SWSM);
848 		if (!(swsm & IXGBE_SWSM_SMBI)) {
849 			status = IXGBE_SUCCESS;
850 			break;
851 		}
852 		usec_delay(50);
853 	}
854 
855 	/* Now get the semaphore between SW/FW through the SWESMBI bit */
856 	if (status == IXGBE_SUCCESS) {
857 		for (i = 0; i < timeout; i++) {
858 			swsm = IXGBE_READ_REG(hw, IXGBE_SWSM);
859 
860 			/* Set the SW EEPROM semaphore bit to request access */
861 			swsm |= IXGBE_SWSM_SWESMBI;
862 			IXGBE_WRITE_REG(hw, IXGBE_SWSM, swsm);
863 
864 			/*
865 			 * If we set the bit successfully then we got the
866 			 * semaphore.
867 			 */
868 			swsm = IXGBE_READ_REG(hw, IXGBE_SWSM);
869 			if (swsm & IXGBE_SWSM_SWESMBI)
870 				break;
871 
872 			usec_delay(50);
873 		}
874 
875 		/*
876 		 * Release semaphores and return error if SW EEPROM semaphore
877 		 * was not granted because we don't have access to the EEPROM
878 		 */
879 		if (i >= timeout) {
880 			DEBUGOUT("SWESMBI Software EEPROM semaphore "
881 			         "not granted.\n");
882 			ixgbe_release_eeprom_semaphore(hw);
883 			status = IXGBE_ERR_EEPROM;
884 		}
885 	} else {
886 		DEBUGOUT("Software semaphore SMBI between device drivers "
887 		         "not granted.\n");
888 	}
889 
890 	return status;
891 }
892 
893 /**
894  *  ixgbe_release_eeprom_semaphore - Release hardware semaphore
895  *  @hw: pointer to hardware structure
896  *
897  *  This function clears hardware semaphore bits.
898  **/
899 static void ixgbe_release_eeprom_semaphore(struct ixgbe_hw *hw)
900 {
901 	u32 swsm;
902 
903 	DEBUGFUNC("ixgbe_release_eeprom_semaphore");
904 
905 	swsm = IXGBE_READ_REG(hw, IXGBE_SWSM);
906 
907 	/* Release both semaphores by writing 0 to the bits SWESMBI and SMBI */
908 	swsm &= ~(IXGBE_SWSM_SWESMBI | IXGBE_SWSM_SMBI);
909 	IXGBE_WRITE_REG(hw, IXGBE_SWSM, swsm);
910 	IXGBE_WRITE_FLUSH(hw);
911 }
912 
913 /**
914  *  ixgbe_ready_eeprom - Polls for EEPROM ready
915  *  @hw: pointer to hardware structure
916  **/
917 static s32 ixgbe_ready_eeprom(struct ixgbe_hw *hw)
918 {
919 	s32 status = IXGBE_SUCCESS;
920 	u16 i;
921 	u8 spi_stat_reg;
922 
923 	DEBUGFUNC("ixgbe_ready_eeprom");
924 
925 	/*
926 	 * Read "Status Register" repeatedly until the LSB is cleared.  The
927 	 * EEPROM will signal that the command has been completed by clearing
928 	 * bit 0 of the internal status register.  If it's not cleared within
929 	 * 5 milliseconds, then error out.
930 	 */
931 	for (i = 0; i < IXGBE_EEPROM_MAX_RETRY_SPI; i += 5) {
932 		ixgbe_shift_out_eeprom_bits(hw, IXGBE_EEPROM_RDSR_OPCODE_SPI,
933 		                            IXGBE_EEPROM_OPCODE_BITS);
934 		spi_stat_reg = (u8)ixgbe_shift_in_eeprom_bits(hw, 8);
935 		if (!(spi_stat_reg & IXGBE_EEPROM_STATUS_RDY_SPI))
936 			break;
937 
938 		usec_delay(5);
939 		ixgbe_standby_eeprom(hw);
940 	};
941 
942 	/*
943 	 * On some parts, SPI write time could vary from 0-20mSec on 3.3V
944 	 * devices (and only 0-5mSec on 5V devices)
945 	 */
946 	if (i >= IXGBE_EEPROM_MAX_RETRY_SPI) {
947 		DEBUGOUT("SPI EEPROM Status error\n");
948 		status = IXGBE_ERR_EEPROM;
949 	}
950 
951 	return status;
952 }
953 
954 /**
955  *  ixgbe_standby_eeprom - Returns EEPROM to a "standby" state
956  *  @hw: pointer to hardware structure
957  **/
958 static void ixgbe_standby_eeprom(struct ixgbe_hw *hw)
959 {
960 	u32 eec;
961 
962 	DEBUGFUNC("ixgbe_standby_eeprom");
963 
964 	eec = IXGBE_READ_REG(hw, IXGBE_EEC);
965 
966 	/* Toggle CS to flush commands */
967 	eec |= IXGBE_EEC_CS;
968 	IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
969 	IXGBE_WRITE_FLUSH(hw);
970 	usec_delay(1);
971 	eec &= ~IXGBE_EEC_CS;
972 	IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
973 	IXGBE_WRITE_FLUSH(hw);
974 	usec_delay(1);
975 }
976 
977 /**
978  *  ixgbe_shift_out_eeprom_bits - Shift data bits out to the EEPROM.
979  *  @hw: pointer to hardware structure
980  *  @data: data to send to the EEPROM
981  *  @count: number of bits to shift out
982  **/
983 static void ixgbe_shift_out_eeprom_bits(struct ixgbe_hw *hw, u16 data,
984                                         u16 count)
985 {
986 	u32 eec;
987 	u32 mask;
988 	u32 i;
989 
990 	DEBUGFUNC("ixgbe_shift_out_eeprom_bits");
991 
992 	eec = IXGBE_READ_REG(hw, IXGBE_EEC);
993 
994 	/*
995 	 * Mask is used to shift "count" bits of "data" out to the EEPROM
996 	 * one bit at a time.  Determine the starting bit based on count
997 	 */
998 	mask = 0x01 << (count - 1);
999 
1000 	for (i = 0; i < count; i++) {
1001 		/*
1002 		 * A "1" is shifted out to the EEPROM by setting bit "DI" to a
1003 		 * "1", and then raising and then lowering the clock (the SK
1004 		 * bit controls the clock input to the EEPROM).  A "0" is
1005 		 * shifted out to the EEPROM by setting "DI" to "0" and then
1006 		 * raising and then lowering the clock.
1007 		 */
1008 		if (data & mask)
1009 			eec |= IXGBE_EEC_DI;
1010 		else
1011 			eec &= ~IXGBE_EEC_DI;
1012 
1013 		IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
1014 		IXGBE_WRITE_FLUSH(hw);
1015 
1016 		usec_delay(1);
1017 
1018 		ixgbe_raise_eeprom_clk(hw, &eec);
1019 		ixgbe_lower_eeprom_clk(hw, &eec);
1020 
1021 		/*
1022 		 * Shift mask to signify next bit of data to shift in to the
1023 		 * EEPROM
1024 		 */
1025 		mask = mask >> 1;
1026 	};
1027 
1028 	/* We leave the "DI" bit set to "0" when we leave this routine. */
1029 	eec &= ~IXGBE_EEC_DI;
1030 	IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
1031 	IXGBE_WRITE_FLUSH(hw);
1032 }
1033 
1034 /**
1035  *  ixgbe_shift_in_eeprom_bits - Shift data bits in from the EEPROM
1036  *  @hw: pointer to hardware structure
1037  **/
1038 static u16 ixgbe_shift_in_eeprom_bits(struct ixgbe_hw *hw, u16 count)
1039 {
1040 	u32 eec;
1041 	u32 i;
1042 	u16 data = 0;
1043 
1044 	DEBUGFUNC("ixgbe_shift_in_eeprom_bits");
1045 
1046 	/*
1047 	 * In order to read a register from the EEPROM, we need to shift
1048 	 * 'count' bits in from the EEPROM. Bits are "shifted in" by raising
1049 	 * the clock input to the EEPROM (setting the SK bit), and then reading
1050 	 * the value of the "DO" bit.  During this "shifting in" process the
1051 	 * "DI" bit should always be clear.
1052 	 */
1053 	eec = IXGBE_READ_REG(hw, IXGBE_EEC);
1054 
1055 	eec &= ~(IXGBE_EEC_DO | IXGBE_EEC_DI);
1056 
1057 	for (i = 0; i < count; i++) {
1058 		data = data << 1;
1059 		ixgbe_raise_eeprom_clk(hw, &eec);
1060 
1061 		eec = IXGBE_READ_REG(hw, IXGBE_EEC);
1062 
1063 		eec &= ~(IXGBE_EEC_DI);
1064 		if (eec & IXGBE_EEC_DO)
1065 			data |= 1;
1066 
1067 		ixgbe_lower_eeprom_clk(hw, &eec);
1068 	}
1069 
1070 	return data;
1071 }
1072 
1073 /**
1074  *  ixgbe_raise_eeprom_clk - Raises the EEPROM's clock input.
1075  *  @hw: pointer to hardware structure
1076  *  @eec: EEC register's current value
1077  **/
1078 static void ixgbe_raise_eeprom_clk(struct ixgbe_hw *hw, u32 *eec)
1079 {
1080 	DEBUGFUNC("ixgbe_raise_eeprom_clk");
1081 
1082 	/*
1083 	 * Raise the clock input to the EEPROM
1084 	 * (setting the SK bit), then delay
1085 	 */
1086 	*eec = *eec | IXGBE_EEC_SK;
1087 	IXGBE_WRITE_REG(hw, IXGBE_EEC, *eec);
1088 	IXGBE_WRITE_FLUSH(hw);
1089 	usec_delay(1);
1090 }
1091 
1092 /**
1093  *  ixgbe_lower_eeprom_clk - Lowers the EEPROM's clock input.
1094  *  @hw: pointer to hardware structure
1095  *  @eecd: EECD's current value
1096  **/
1097 static void ixgbe_lower_eeprom_clk(struct ixgbe_hw *hw, u32 *eec)
1098 {
1099 	DEBUGFUNC("ixgbe_lower_eeprom_clk");
1100 
1101 	/*
1102 	 * Lower the clock input to the EEPROM (clearing the SK bit), then
1103 	 * delay
1104 	 */
1105 	*eec = *eec & ~IXGBE_EEC_SK;
1106 	IXGBE_WRITE_REG(hw, IXGBE_EEC, *eec);
1107 	IXGBE_WRITE_FLUSH(hw);
1108 	usec_delay(1);
1109 }
1110 
1111 /**
1112  *  ixgbe_release_eeprom - Release EEPROM, release semaphores
1113  *  @hw: pointer to hardware structure
1114  **/
1115 static void ixgbe_release_eeprom(struct ixgbe_hw *hw)
1116 {
1117 	u32 eec;
1118 
1119 	DEBUGFUNC("ixgbe_release_eeprom");
1120 
1121 	eec = IXGBE_READ_REG(hw, IXGBE_EEC);
1122 
1123 	eec |= IXGBE_EEC_CS;  /* Pull CS high */
1124 	eec &= ~IXGBE_EEC_SK; /* Lower SCK */
1125 
1126 	IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
1127 	IXGBE_WRITE_FLUSH(hw);
1128 
1129 	usec_delay(1);
1130 
1131 	/* Stop requesting EEPROM access */
1132 	eec &= ~IXGBE_EEC_REQ;
1133 	IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
1134 
1135 	ixgbe_release_swfw_sync(hw, IXGBE_GSSR_EEP_SM);
1136 
1137 	/* Delay before attempt to obtain semaphore again to allow FW access */
1138 	msec_delay(hw->eeprom.semaphore_delay);
1139 }
1140 
1141 /**
1142  *  ixgbe_calc_eeprom_checksum_generic - Calculates and returns the checksum
1143  *  @hw: pointer to hardware structure
1144  **/
1145 u16 ixgbe_calc_eeprom_checksum_generic(struct ixgbe_hw *hw)
1146 {
1147 	u16 i;
1148 	u16 j;
1149 	u16 checksum = 0;
1150 	u16 length = 0;
1151 	u16 pointer = 0;
1152 	u16 word = 0;
1153 
1154 	DEBUGFUNC("ixgbe_calc_eeprom_checksum_generic");
1155 
1156 	/* Include 0x0-0x3F in the checksum */
1157 	for (i = 0; i < IXGBE_EEPROM_CHECKSUM; i++) {
1158 		if (hw->eeprom.ops.read(hw, i, &word) != IXGBE_SUCCESS) {
1159 			DEBUGOUT("EEPROM read failed\n");
1160 			break;
1161 		}
1162 		checksum += word;
1163 	}
1164 
1165 	/* Include all data from pointers except for the fw pointer */
1166 	for (i = IXGBE_PCIE_ANALOG_PTR; i < IXGBE_FW_PTR; i++) {
1167 		hw->eeprom.ops.read(hw, i, &pointer);
1168 
1169 		/* Make sure the pointer seems valid */
1170 		if (pointer != 0xFFFF && pointer != 0) {
1171 			hw->eeprom.ops.read(hw, pointer, &length);
1172 
1173 			if (length != 0xFFFF && length != 0) {
1174 				for (j = pointer+1; j <= pointer+length; j++) {
1175 					hw->eeprom.ops.read(hw, j, &word);
1176 					checksum += word;
1177 				}
1178 			}
1179 		}
1180 	}
1181 
1182 	checksum = (u16)IXGBE_EEPROM_SUM - checksum;
1183 
1184 	return checksum;
1185 }
1186 
1187 /**
1188  *  ixgbe_validate_eeprom_checksum_generic - Validate EEPROM checksum
1189  *  @hw: pointer to hardware structure
1190  *  @checksum_val: calculated checksum
1191  *
1192  *  Performs checksum calculation and validates the EEPROM checksum.  If the
1193  *  caller does not need checksum_val, the value can be NULL.
1194  **/
1195 s32 ixgbe_validate_eeprom_checksum_generic(struct ixgbe_hw *hw,
1196                                            u16 *checksum_val)
1197 {
1198 	s32 status;
1199 	u16 checksum;
1200 	u16 read_checksum = 0;
1201 
1202 	DEBUGFUNC("ixgbe_validate_eeprom_checksum_generic");
1203 
1204 	/*
1205 	 * Read the first word from the EEPROM. If this times out or fails, do
1206 	 * not continue or we could be in for a very long wait while every
1207 	 * EEPROM read fails
1208 	 */
1209 	status = hw->eeprom.ops.read(hw, 0, &checksum);
1210 
1211 	if (status == IXGBE_SUCCESS) {
1212 		checksum = hw->eeprom.ops.calc_checksum(hw);
1213 
1214 		hw->eeprom.ops.read(hw, IXGBE_EEPROM_CHECKSUM, &read_checksum);
1215 
1216 		/*
1217 		 * Verify read checksum from EEPROM is the same as
1218 		 * calculated checksum
1219 		 */
1220 		if (read_checksum != checksum)
1221 			status = IXGBE_ERR_EEPROM_CHECKSUM;
1222 
1223 		/* If the user cares, return the calculated checksum */
1224 		if (checksum_val)
1225 			*checksum_val = checksum;
1226 	} else {
1227 		DEBUGOUT("EEPROM read failed\n");
1228 	}
1229 
1230 	return status;
1231 }
1232 
1233 /**
1234  *  ixgbe_update_eeprom_checksum_generic - Updates the EEPROM checksum
1235  *  @hw: pointer to hardware structure
1236  **/
1237 s32 ixgbe_update_eeprom_checksum_generic(struct ixgbe_hw *hw)
1238 {
1239 	s32 status;
1240 	u16 checksum;
1241 
1242 	DEBUGFUNC("ixgbe_update_eeprom_checksum_generic");
1243 
1244 	/*
1245 	 * Read the first word from the EEPROM. If this times out or fails, do
1246 	 * not continue or we could be in for a very long wait while every
1247 	 * EEPROM read fails
1248 	 */
1249 	status = hw->eeprom.ops.read(hw, 0, &checksum);
1250 
1251 	if (status == IXGBE_SUCCESS) {
1252 		checksum = hw->eeprom.ops.calc_checksum(hw);
1253 		status = hw->eeprom.ops.write(hw, IXGBE_EEPROM_CHECKSUM,
1254 		                              checksum);
1255 	} else {
1256 		DEBUGOUT("EEPROM read failed\n");
1257 	}
1258 
1259 	return status;
1260 }
1261 
1262 /**
1263  *  ixgbe_validate_mac_addr - Validate MAC address
1264  *  @mac_addr: pointer to MAC address.
1265  *
1266  *  Tests a MAC address to ensure it is a valid Individual Address
1267  **/
1268 s32 ixgbe_validate_mac_addr(u8 *mac_addr)
1269 {
1270 	s32 status = IXGBE_SUCCESS;
1271 
1272 	DEBUGFUNC("ixgbe_validate_mac_addr");
1273 
1274 	/* Make sure it is not a multicast address */
1275 	if (IXGBE_IS_MULTICAST(mac_addr)) {
1276 		DEBUGOUT("MAC address is multicast\n");
1277 		status = IXGBE_ERR_INVALID_MAC_ADDR;
1278 	/* Not a broadcast address */
1279 	} else if (IXGBE_IS_BROADCAST(mac_addr)) {
1280 		DEBUGOUT("MAC address is broadcast\n");
1281 		status = IXGBE_ERR_INVALID_MAC_ADDR;
1282 	/* Reject the zero address */
1283 	} else if (mac_addr[0] == 0 && mac_addr[1] == 0 && mac_addr[2] == 0 &&
1284 	           mac_addr[3] == 0 && mac_addr[4] == 0 && mac_addr[5] == 0) {
1285 		DEBUGOUT("MAC address is all zeros\n");
1286 		status = IXGBE_ERR_INVALID_MAC_ADDR;
1287 	}
1288 	return status;
1289 }
1290 
1291 /**
1292  *  ixgbe_set_rar_generic - Set Rx address register
1293  *  @hw: pointer to hardware structure
1294  *  @index: Receive address register to write
1295  *  @addr: Address to put into receive address register
1296  *  @vmdq: VMDq "set" or "pool" index
1297  *  @enable_addr: set flag that address is active
1298  *
1299  *  Puts an ethernet address into a receive address register.
1300  **/
1301 s32 ixgbe_set_rar_generic(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq,
1302                           u32 enable_addr)
1303 {
1304 	u32 rar_low, rar_high;
1305 	u32 rar_entries = hw->mac.num_rar_entries;
1306 
1307 	DEBUGFUNC("ixgbe_set_rar_generic");
1308 
1309 	/* setup VMDq pool selection before this RAR gets enabled */
1310 	hw->mac.ops.set_vmdq(hw, index, vmdq);
1311 
1312 	/* Make sure we are using a valid rar index range */
1313 	if (index < rar_entries) {
1314 		/*
1315 		 * HW expects these in little endian so we reverse the byte
1316 		 * order from network order (big endian) to little endian
1317 		 */
1318 		rar_low = ((u32)addr[0] |
1319 		           ((u32)addr[1] << 8) |
1320 		           ((u32)addr[2] << 16) |
1321 		           ((u32)addr[3] << 24));
1322 		/*
1323 		 * Some parts put the VMDq setting in the extra RAH bits,
1324 		 * so save everything except the lower 16 bits that hold part
1325 		 * of the address and the address valid bit.
1326 		 */
1327 		rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(index));
1328 		rar_high &= ~(0x0000FFFF | IXGBE_RAH_AV);
1329 		rar_high |= ((u32)addr[4] | ((u32)addr[5] << 8));
1330 
1331 		if (enable_addr != 0)
1332 			rar_high |= IXGBE_RAH_AV;
1333 
1334 		IXGBE_WRITE_REG(hw, IXGBE_RAL(index), rar_low);
1335 		IXGBE_WRITE_REG(hw, IXGBE_RAH(index), rar_high);
1336 	} else {
1337 		DEBUGOUT1("RAR index %d is out of range.\n", index);
1338 	}
1339 
1340 	return IXGBE_SUCCESS;
1341 }
1342 
1343 /**
1344  *  ixgbe_clear_rar_generic - Remove Rx address register
1345  *  @hw: pointer to hardware structure
1346  *  @index: Receive address register to write
1347  *
1348  *  Clears an ethernet address from a receive address register.
1349  **/
1350 s32 ixgbe_clear_rar_generic(struct ixgbe_hw *hw, u32 index)
1351 {
1352 	u32 rar_high;
1353 	u32 rar_entries = hw->mac.num_rar_entries;
1354 
1355 	DEBUGFUNC("ixgbe_clear_rar_generic");
1356 
1357 	/* Make sure we are using a valid rar index range */
1358 	if (index < rar_entries) {
1359 		/*
1360 		 * Some parts put the VMDq setting in the extra RAH bits,
1361 		 * so save everything except the lower 16 bits that hold part
1362 		 * of the address and the address valid bit.
1363 		 */
1364 		rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(index));
1365 		rar_high &= ~(0x0000FFFF | IXGBE_RAH_AV);
1366 
1367 		IXGBE_WRITE_REG(hw, IXGBE_RAL(index), 0);
1368 		IXGBE_WRITE_REG(hw, IXGBE_RAH(index), rar_high);
1369 	} else {
1370 		DEBUGOUT1("RAR index %d is out of range.\n", index);
1371 	}
1372 
1373 	/* clear VMDq pool/queue selection for this RAR */
1374 	hw->mac.ops.clear_vmdq(hw, index, IXGBE_CLEAR_VMDQ_ALL);
1375 
1376 	return IXGBE_SUCCESS;
1377 }
1378 
1379 /**
1380  *  ixgbe_init_rx_addrs_generic - Initializes receive address filters.
1381  *  @hw: pointer to hardware structure
1382  *
1383  *  Places the MAC address in receive address register 0 and clears the rest
1384  *  of the receive address registers. Clears the multicast table. Assumes
1385  *  the receiver is in reset when the routine is called.
1386  **/
1387 s32 ixgbe_init_rx_addrs_generic(struct ixgbe_hw *hw)
1388 {
1389 	u32 i;
1390 	u32 rar_entries = hw->mac.num_rar_entries;
1391 
1392 	DEBUGFUNC("ixgbe_init_rx_addrs_generic");
1393 
1394 	/*
1395 	 * If the current mac address is valid, assume it is a software override
1396 	 * to the permanent address.
1397 	 * Otherwise, use the permanent address from the eeprom.
1398 	 */
1399 	if (ixgbe_validate_mac_addr(hw->mac.addr) ==
1400 	    IXGBE_ERR_INVALID_MAC_ADDR) {
1401 		/* Get the MAC address from the RAR0 for later reference */
1402 		hw->mac.ops.get_mac_addr(hw, hw->mac.addr);
1403 
1404 		DEBUGOUT3(" Keeping Current RAR0 Addr =%.2X %.2X %.2X ",
1405 		          hw->mac.addr[0], hw->mac.addr[1],
1406 		          hw->mac.addr[2]);
1407 		DEBUGOUT3("%.2X %.2X %.2X\n", hw->mac.addr[3],
1408 		          hw->mac.addr[4], hw->mac.addr[5]);
1409 	} else {
1410 		/* Setup the receive address. */
1411 		DEBUGOUT("Overriding MAC Address in RAR[0]\n");
1412 		DEBUGOUT3(" New MAC Addr =%.2X %.2X %.2X ",
1413 		          hw->mac.addr[0], hw->mac.addr[1],
1414 		          hw->mac.addr[2]);
1415 		DEBUGOUT3("%.2X %.2X %.2X\n", hw->mac.addr[3],
1416 		          hw->mac.addr[4], hw->mac.addr[5]);
1417 
1418 		hw->mac.ops.set_rar(hw, 0, hw->mac.addr, 0, IXGBE_RAH_AV);
1419 	}
1420 	hw->addr_ctrl.overflow_promisc = 0;
1421 
1422 	hw->addr_ctrl.rar_used_count = 1;
1423 
1424 	/* Zero out the other receive addresses. */
1425 	DEBUGOUT1("Clearing RAR[1-%d]\n", rar_entries - 1);
1426 	for (i = 1; i < rar_entries; i++) {
1427 		IXGBE_WRITE_REG(hw, IXGBE_RAL(i), 0);
1428 		IXGBE_WRITE_REG(hw, IXGBE_RAH(i), 0);
1429 	}
1430 
1431 	/* Clear the MTA */
1432 	hw->addr_ctrl.mta_in_use = 0;
1433 	IXGBE_WRITE_REG(hw, IXGBE_MCSTCTRL, hw->mac.mc_filter_type);
1434 
1435 	DEBUGOUT(" Clearing MTA\n");
1436 	for (i = 0; i < hw->mac.mcft_size; i++)
1437 		IXGBE_WRITE_REG(hw, IXGBE_MTA(i), 0);
1438 
1439 	ixgbe_init_uta_tables(hw);
1440 
1441 	return IXGBE_SUCCESS;
1442 }
1443 
1444 /**
1445  *  ixgbe_add_uc_addr - Adds a secondary unicast address.
1446  *  @hw: pointer to hardware structure
1447  *  @addr: new address
1448  *
1449  *  Adds it to unused receive address register or goes into promiscuous mode.
1450  **/
1451 void ixgbe_add_uc_addr(struct ixgbe_hw *hw, u8 *addr, u32 vmdq)
1452 {
1453 	u32 rar_entries = hw->mac.num_rar_entries;
1454 	u32 rar;
1455 
1456 	DEBUGFUNC("ixgbe_add_uc_addr");
1457 
1458 	DEBUGOUT6(" UC Addr = %.2X %.2X %.2X %.2X %.2X %.2X\n",
1459 	          addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
1460 
1461 	/*
1462 	 * Place this address in the RAR if there is room,
1463 	 * else put the controller into promiscuous mode
1464 	 */
1465 	if (hw->addr_ctrl.rar_used_count < rar_entries) {
1466 		rar = hw->addr_ctrl.rar_used_count;
1467 		hw->mac.ops.set_rar(hw, rar, addr, vmdq, IXGBE_RAH_AV);
1468 		DEBUGOUT1("Added a secondary address to RAR[%d]\n", rar);
1469 		hw->addr_ctrl.rar_used_count++;
1470 	} else {
1471 		hw->addr_ctrl.overflow_promisc++;
1472 	}
1473 
1474 	DEBUGOUT("ixgbe_add_uc_addr Complete\n");
1475 }
1476 
1477 /**
1478  *  ixgbe_update_uc_addr_list_generic - Updates MAC list of secondary addresses
1479  *  @hw: pointer to hardware structure
1480  *  @addr_list: the list of new addresses
1481  *  @addr_count: number of addresses
1482  *  @next: iterator function to walk the address list
1483  *
1484  *  The given list replaces any existing list.  Clears the secondary addrs from
1485  *  receive address registers.  Uses unused receive address registers for the
1486  *  first secondary addresses, and falls back to promiscuous mode as needed.
1487  *
1488  *  Drivers using secondary unicast addresses must set user_set_promisc when
1489  *  manually putting the device into promiscuous mode.
1490  **/
1491 s32 ixgbe_update_uc_addr_list_generic(struct ixgbe_hw *hw, u8 *addr_list,
1492                                       u32 addr_count, ixgbe_mc_addr_itr next)
1493 {
1494 	u8 *addr;
1495 	u32 i;
1496 	u32 old_promisc_setting = hw->addr_ctrl.overflow_promisc;
1497 	u32 uc_addr_in_use;
1498 	u32 fctrl;
1499 	u32 vmdq;
1500 
1501 	DEBUGFUNC("ixgbe_update_uc_addr_list_generic");
1502 
1503 	/*
1504 	 * Clear accounting of old secondary address list,
1505 	 * don't count RAR[0]
1506 	 */
1507 	uc_addr_in_use = hw->addr_ctrl.rar_used_count - 1;
1508 	hw->addr_ctrl.rar_used_count -= uc_addr_in_use;
1509 	hw->addr_ctrl.overflow_promisc = 0;
1510 
1511 	/* Zero out the other receive addresses */
1512 	DEBUGOUT1("Clearing RAR[1-%d]\n", uc_addr_in_use+1);
1513 	for (i = 0; i < uc_addr_in_use; i++) {
1514 		IXGBE_WRITE_REG(hw, IXGBE_RAL(1+i), 0);
1515 		IXGBE_WRITE_REG(hw, IXGBE_RAH(1+i), 0);
1516 	}
1517 
1518 	/* Add the new addresses */
1519 	for (i = 0; i < addr_count; i++) {
1520 		DEBUGOUT(" Adding the secondary addresses:\n");
1521 		addr = next(hw, &addr_list, &vmdq);
1522 		ixgbe_add_uc_addr(hw, addr, vmdq);
1523 	}
1524 
1525 	if (hw->addr_ctrl.overflow_promisc) {
1526 		/* enable promisc if not already in overflow or set by user */
1527 		if (!old_promisc_setting && !hw->addr_ctrl.user_set_promisc) {
1528 			DEBUGOUT(" Entering address overflow promisc mode\n");
1529 			fctrl = IXGBE_READ_REG(hw, IXGBE_FCTRL);
1530 			fctrl |= IXGBE_FCTRL_UPE;
1531 			IXGBE_WRITE_REG(hw, IXGBE_FCTRL, fctrl);
1532 		}
1533 	} else {
1534 		/* only disable if set by overflow, not by user */
1535 		if (old_promisc_setting && !hw->addr_ctrl.user_set_promisc) {
1536 			DEBUGOUT(" Leaving address overflow promisc mode\n");
1537 			fctrl = IXGBE_READ_REG(hw, IXGBE_FCTRL);
1538 			fctrl &= ~IXGBE_FCTRL_UPE;
1539 			IXGBE_WRITE_REG(hw, IXGBE_FCTRL, fctrl);
1540 		}
1541 	}
1542 
1543 	DEBUGOUT("ixgbe_update_uc_addr_list_generic Complete\n");
1544 	return IXGBE_SUCCESS;
1545 }
1546 
1547 /**
1548  *  ixgbe_mta_vector - Determines bit-vector in multicast table to set
1549  *  @hw: pointer to hardware structure
1550  *  @mc_addr: the multicast address
1551  *
1552  *  Extracts the 12 bits, from a multicast address, to determine which
1553  *  bit-vector to set in the multicast table. The hardware uses 12 bits, from
1554  *  incoming rx multicast addresses, to determine the bit-vector to check in
1555  *  the MTA. Which of the 4 combination, of 12-bits, the hardware uses is set
1556  *  by the MO field of the MCSTCTRL. The MO field is set during initialization
1557  *  to mc_filter_type.
1558  **/
1559 static s32 ixgbe_mta_vector(struct ixgbe_hw *hw, u8 *mc_addr)
1560 {
1561 	u32 vector = 0;
1562 
1563 	DEBUGFUNC("ixgbe_mta_vector");
1564 
1565 	switch (hw->mac.mc_filter_type) {
1566 	case 0:   /* use bits [47:36] of the address */
1567 		vector = ((mc_addr[4] >> 4) | (((u16)mc_addr[5]) << 4));
1568 		break;
1569 	case 1:   /* use bits [46:35] of the address */
1570 		vector = ((mc_addr[4] >> 3) | (((u16)mc_addr[5]) << 5));
1571 		break;
1572 	case 2:   /* use bits [45:34] of the address */
1573 		vector = ((mc_addr[4] >> 2) | (((u16)mc_addr[5]) << 6));
1574 		break;
1575 	case 3:   /* use bits [43:32] of the address */
1576 		vector = ((mc_addr[4]) | (((u16)mc_addr[5]) << 8));
1577 		break;
1578 	default:  /* Invalid mc_filter_type */
1579 		DEBUGOUT("MC filter type param set incorrectly\n");
1580 		ASSERT(0);
1581 		break;
1582 	}
1583 
1584 	/* vector can only be 12-bits or boundary will be exceeded */
1585 	vector &= 0xFFF;
1586 	return vector;
1587 }
1588 
1589 /**
1590  *  ixgbe_set_mta - Set bit-vector in multicast table
1591  *  @hw: pointer to hardware structure
1592  *  @hash_value: Multicast address hash value
1593  *
1594  *  Sets the bit-vector in the multicast table.
1595  **/
1596 void ixgbe_set_mta(struct ixgbe_hw *hw, u8 *mc_addr)
1597 {
1598 	u32 vector;
1599 	u32 vector_bit;
1600 	u32 vector_reg;
1601 	u32 mta_reg;
1602 
1603 	DEBUGFUNC("ixgbe_set_mta");
1604 
1605 	hw->addr_ctrl.mta_in_use++;
1606 
1607 	vector = ixgbe_mta_vector(hw, mc_addr);
1608 	DEBUGOUT1(" bit-vector = 0x%03X\n", vector);
1609 
1610 	/*
1611 	 * The MTA is a register array of 128 32-bit registers. It is treated
1612 	 * like an array of 4096 bits.  We want to set bit
1613 	 * BitArray[vector_value]. So we figure out what register the bit is
1614 	 * in, read it, OR in the new bit, then write back the new value.  The
1615 	 * register is determined by the upper 7 bits of the vector value and
1616 	 * the bit within that register are determined by the lower 5 bits of
1617 	 * the value.
1618 	 */
1619 	vector_reg = (vector >> 5) & 0x7F;
1620 	vector_bit = vector & 0x1F;
1621 	mta_reg = IXGBE_READ_REG(hw, IXGBE_MTA(vector_reg));
1622 	mta_reg |= (1 << vector_bit);
1623 	IXGBE_WRITE_REG(hw, IXGBE_MTA(vector_reg), mta_reg);
1624 }
1625 
1626 /**
1627  *  ixgbe_update_mc_addr_list_generic - Updates MAC list of multicast addresses
1628  *  @hw: pointer to hardware structure
1629  *  @mc_addr_list: the list of new multicast addresses
1630  *  @mc_addr_count: number of addresses
1631  *  @next: iterator function to walk the multicast address list
1632  *
1633  *  The given list replaces any existing list. Clears the MC addrs from receive
1634  *  address registers and the multicast table. Uses unused receive address
1635  *  registers for the first multicast addresses, and hashes the rest into the
1636  *  multicast table.
1637  **/
1638 s32 ixgbe_update_mc_addr_list_generic(struct ixgbe_hw *hw, u8 *mc_addr_list,
1639                                       u32 mc_addr_count, ixgbe_mc_addr_itr next)
1640 {
1641 	u32 i;
1642 	u32 vmdq;
1643 
1644 	DEBUGFUNC("ixgbe_update_mc_addr_list_generic");
1645 
1646 	/*
1647 	 * Set the new number of MC addresses that we are being requested to
1648 	 * use.
1649 	 */
1650 	hw->addr_ctrl.num_mc_addrs = mc_addr_count;
1651 	hw->addr_ctrl.mta_in_use = 0;
1652 
1653 	/* Clear the MTA */
1654 	DEBUGOUT(" Clearing MTA\n");
1655 	for (i = 0; i < hw->mac.mcft_size; i++)
1656 		IXGBE_WRITE_REG(hw, IXGBE_MTA(i), 0);
1657 
1658 	/* Add the new addresses */
1659 	for (i = 0; i < mc_addr_count; i++) {
1660 		DEBUGOUT(" Adding the multicast addresses:\n");
1661 		ixgbe_set_mta(hw, next(hw, &mc_addr_list, &vmdq));
1662 	}
1663 
1664 	/* Enable mta */
1665 	if (hw->addr_ctrl.mta_in_use > 0)
1666 		IXGBE_WRITE_REG(hw, IXGBE_MCSTCTRL,
1667 		                IXGBE_MCSTCTRL_MFE | hw->mac.mc_filter_type);
1668 
1669 	DEBUGOUT("ixgbe_update_mc_addr_list_generic Complete\n");
1670 	return IXGBE_SUCCESS;
1671 }
1672 
1673 /**
1674  *  ixgbe_enable_mc_generic - Enable multicast address in RAR
1675  *  @hw: pointer to hardware structure
1676  *
1677  *  Enables multicast address in RAR and the use of the multicast hash table.
1678  **/
1679 s32 ixgbe_enable_mc_generic(struct ixgbe_hw *hw)
1680 {
1681 	struct ixgbe_addr_filter_info *a = &hw->addr_ctrl;
1682 
1683 	DEBUGFUNC("ixgbe_enable_mc_generic");
1684 
1685 	if (a->mta_in_use > 0)
1686 		IXGBE_WRITE_REG(hw, IXGBE_MCSTCTRL, IXGBE_MCSTCTRL_MFE |
1687 		                hw->mac.mc_filter_type);
1688 
1689 	return IXGBE_SUCCESS;
1690 }
1691 
1692 /**
1693  *  ixgbe_disable_mc_generic - Disable multicast address in RAR
1694  *  @hw: pointer to hardware structure
1695  *
1696  *  Disables multicast address in RAR and the use of the multicast hash table.
1697  **/
1698 s32 ixgbe_disable_mc_generic(struct ixgbe_hw *hw)
1699 {
1700 	struct ixgbe_addr_filter_info *a = &hw->addr_ctrl;
1701 
1702 	DEBUGFUNC("ixgbe_disable_mc_generic");
1703 
1704 	if (a->mta_in_use > 0)
1705 		IXGBE_WRITE_REG(hw, IXGBE_MCSTCTRL, hw->mac.mc_filter_type);
1706 
1707 	return IXGBE_SUCCESS;
1708 }
1709 
1710 /**
1711  *  ixgbe_fc_enable_generic - Enable flow control
1712  *  @hw: pointer to hardware structure
1713  *  @packetbuf_num: packet buffer number (0-7)
1714  *
1715  *  Enable flow control according to the current settings.
1716  **/
1717 s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw, s32 packetbuf_num)
1718 {
1719 	s32 ret_val = IXGBE_SUCCESS;
1720 	u32 mflcn_reg, fccfg_reg;
1721 	u32 reg;
1722 	u32 rx_pba_size;
1723 
1724 	DEBUGFUNC("ixgbe_fc_enable_generic");
1725 
1726 	/* Negotiate the fc mode to use */
1727 	ret_val = ixgbe_fc_autoneg(hw);
1728 	if (ret_val)
1729 		goto out;
1730 
1731 	/* Disable any previous flow control settings */
1732 	mflcn_reg = IXGBE_READ_REG(hw, IXGBE_MFLCN);
1733 	mflcn_reg &= ~(IXGBE_MFLCN_RFCE | IXGBE_MFLCN_RPFCE);
1734 
1735 	fccfg_reg = IXGBE_READ_REG(hw, IXGBE_FCCFG);
1736 	fccfg_reg &= ~(IXGBE_FCCFG_TFCE_802_3X | IXGBE_FCCFG_TFCE_PRIORITY);
1737 
1738 	/*
1739 	 * The possible values of fc.current_mode are:
1740 	 * 0: Flow control is completely disabled
1741 	 * 1: Rx flow control is enabled (we can receive pause frames,
1742 	 *    but not send pause frames).
1743 	 * 2: Tx flow control is enabled (we can send pause frames but
1744 	 *    we do not support receiving pause frames).
1745 	 * 3: Both Rx and Tx flow control (symmetric) are enabled.
1746 	 * other: Invalid.
1747 	 */
1748 	switch (hw->fc.current_mode) {
1749 	case ixgbe_fc_none:
1750 		/* Flow control is disabled by software override or autoneg.
1751 		 * The code below will actually disable it in the HW.
1752 		 */
1753 		break;
1754 	case ixgbe_fc_rx_pause:
1755 		/*
1756 		 * Rx Flow control is enabled and Tx Flow control is
1757 		 * disabled by software override. Since there really
1758 		 * isn't a way to advertise that we are capable of RX
1759 		 * Pause ONLY, we will advertise that we support both
1760 		 * symmetric and asymmetric Rx PAUSE.  Later, we will
1761 		 * disable the adapter's ability to send PAUSE frames.
1762 		 */
1763 		mflcn_reg |= IXGBE_MFLCN_RFCE;
1764 		break;
1765 	case ixgbe_fc_tx_pause:
1766 		/*
1767 		 * Tx Flow control is enabled, and Rx Flow control is
1768 		 * disabled by software override.
1769 		 */
1770 		fccfg_reg |= IXGBE_FCCFG_TFCE_802_3X;
1771 		break;
1772 	case ixgbe_fc_full:
1773 		/* Flow control (both Rx and Tx) is enabled by SW override. */
1774 		mflcn_reg |= IXGBE_MFLCN_RFCE;
1775 		fccfg_reg |= IXGBE_FCCFG_TFCE_802_3X;
1776 		break;
1777 	default:
1778 		DEBUGOUT("Flow control param set incorrectly\n");
1779 		ret_val = IXGBE_ERR_CONFIG;
1780 		goto out;
1781 		break;
1782 	}
1783 
1784 	/* Set 802.3x based flow control settings. */
1785 	mflcn_reg |= IXGBE_MFLCN_DPF;
1786 	IXGBE_WRITE_REG(hw, IXGBE_MFLCN, mflcn_reg);
1787 	IXGBE_WRITE_REG(hw, IXGBE_FCCFG, fccfg_reg);
1788 
1789 	reg = IXGBE_READ_REG(hw, IXGBE_MTQC);
1790 	/* Thresholds are different for link flow control when in DCB mode */
1791 	if (reg & IXGBE_MTQC_RT_ENA) {
1792 		rx_pba_size = IXGBE_READ_REG(hw, IXGBE_RXPBSIZE(packetbuf_num));
1793 
1794 		/* Always disable XON for LFC when in DCB mode */
1795 		reg = (rx_pba_size >> 5) & 0xFFE0;
1796 		IXGBE_WRITE_REG(hw, IXGBE_FCRTL_82599(packetbuf_num), reg);
1797 
1798 		reg = (rx_pba_size >> 2) & 0xFFE0;
1799 		if (hw->fc.current_mode & ixgbe_fc_tx_pause)
1800 			reg |= IXGBE_FCRTH_FCEN;
1801 		IXGBE_WRITE_REG(hw, IXGBE_FCRTH_82599(packetbuf_num), reg);
1802 	} else {
1803 		/* Set up and enable Rx high/low water mark thresholds,
1804 		 * enable XON. */
1805 		if (hw->fc.current_mode & ixgbe_fc_tx_pause) {
1806 			if (hw->fc.send_xon) {
1807 				IXGBE_WRITE_REG(hw,
1808 				              IXGBE_FCRTL_82599(packetbuf_num),
1809 				              (hw->fc.low_water |
1810 				              IXGBE_FCRTL_XONE));
1811 			} else {
1812 				IXGBE_WRITE_REG(hw,
1813 				              IXGBE_FCRTL_82599(packetbuf_num),
1814 				              hw->fc.low_water);
1815 			}
1816 
1817 			IXGBE_WRITE_REG(hw, IXGBE_FCRTH_82599(packetbuf_num),
1818 			               (hw->fc.high_water | IXGBE_FCRTH_FCEN));
1819 		}
1820 	}
1821 
1822 	/* Configure pause time (2 TCs per register) */
1823 	reg = IXGBE_READ_REG(hw, IXGBE_FCTTV(packetbuf_num / 2));
1824 	if ((packetbuf_num & 1) == 0)
1825 		reg = (reg & 0xFFFF0000) | hw->fc.pause_time;
1826 	else
1827 		reg = (reg & 0x0000FFFF) | (hw->fc.pause_time << 16);
1828 	IXGBE_WRITE_REG(hw, IXGBE_FCTTV(packetbuf_num / 2), reg);
1829 
1830 	IXGBE_WRITE_REG(hw, IXGBE_FCRTV, (hw->fc.pause_time >> 1));
1831 
1832 out:
1833 	return ret_val;
1834 }
1835 
1836 /**
1837  *  ixgbe_fc_autoneg - Configure flow control
1838  *  @hw: pointer to hardware structure
1839  *
1840  *  Compares our advertised flow control capabilities to those advertised by
1841  *  our link partner, and determines the proper flow control mode to use.
1842  **/
1843 s32 ixgbe_fc_autoneg(struct ixgbe_hw *hw)
1844 {
1845 	s32 ret_val = IXGBE_SUCCESS;
1846 	ixgbe_link_speed speed;
1847 	u32 pcs_anadv_reg, pcs_lpab_reg, linkstat;
1848 	u32 links2, anlp1_reg, autoc_reg, links;
1849 	bool link_up;
1850 
1851 	DEBUGFUNC("ixgbe_fc_autoneg");
1852 
1853 	/*
1854 	 * AN should have completed when the cable was plugged in.
1855 	 * Look for reasons to bail out.  Bail out if:
1856 	 * - FC autoneg is disabled, or if
1857 	 * - link is not up.
1858 	 *
1859 	 * Since we're being called from an LSC, link is already known to be up.
1860 	 * So use link_up_wait_to_complete=FALSE.
1861 	 */
1862 	hw->mac.ops.check_link(hw, &speed, &link_up, FALSE);
1863 
1864 	if (hw->fc.disable_fc_autoneg || (!link_up)) {
1865 		hw->fc.fc_was_autonegged = FALSE;
1866 		hw->fc.current_mode = hw->fc.requested_mode;
1867 		goto out;
1868 	}
1869 
1870 	/*
1871 	 * On backplane, bail out if
1872 	 * - backplane autoneg was not completed, or if
1873 	 * - we are 82599 and link partner is not AN enabled
1874 	 */
1875 	if (hw->phy.media_type == ixgbe_media_type_backplane) {
1876 		links = IXGBE_READ_REG(hw, IXGBE_LINKS);
1877 		if ((links & IXGBE_LINKS_KX_AN_COMP) == 0) {
1878 			hw->fc.fc_was_autonegged = FALSE;
1879 			hw->fc.current_mode = hw->fc.requested_mode;
1880 			goto out;
1881 		}
1882 
1883 		if (hw->mac.type == ixgbe_mac_82599EB) {
1884 			links2 = IXGBE_READ_REG(hw, IXGBE_LINKS2);
1885 			if ((links2 & IXGBE_LINKS2_AN_SUPPORTED) == 0) {
1886 				hw->fc.fc_was_autonegged = FALSE;
1887 				hw->fc.current_mode = hw->fc.requested_mode;
1888 				goto out;
1889 			}
1890 		}
1891 	}
1892 
1893 	/*
1894 	 * On multispeed fiber at 1g, bail out if
1895 	 * - link is up but AN did not complete, or if
1896 	 * - link is up and AN completed but timed out
1897 	 */
1898 	if (hw->phy.multispeed_fiber && (speed == IXGBE_LINK_SPEED_1GB_FULL)) {
1899 		linkstat = IXGBE_READ_REG(hw, IXGBE_PCS1GLSTA);
1900 		if (((linkstat & IXGBE_PCS1GLSTA_AN_COMPLETE) == 0) ||
1901 		    ((linkstat & IXGBE_PCS1GLSTA_AN_TIMED_OUT) == 1)) {
1902 			hw->fc.fc_was_autonegged = FALSE;
1903 			hw->fc.current_mode = hw->fc.requested_mode;
1904 			goto out;
1905 		}
1906 	}
1907 
1908 	/*
1909 	 * Bail out on
1910 	 * - copper or CX4 adapters
1911 	 * - fiber adapters running at 10gig
1912 	 */
1913 	if ((hw->phy.media_type == ixgbe_media_type_copper) ||
1914 	     (hw->phy.media_type == ixgbe_media_type_cx4) ||
1915 	     ((hw->phy.media_type == ixgbe_media_type_fiber) &&
1916 	     (speed == IXGBE_LINK_SPEED_10GB_FULL))) {
1917 		hw->fc.fc_was_autonegged = FALSE;
1918 		hw->fc.current_mode = hw->fc.requested_mode;
1919 		goto out;
1920 	}
1921 
1922 	/*
1923 	 * Read the AN advertisement and LP ability registers and resolve
1924 	 * local flow control settings accordingly
1925 	 */
1926 	if ((speed == IXGBE_LINK_SPEED_1GB_FULL) &&
1927 	    (hw->phy.media_type != ixgbe_media_type_backplane)) {
1928 		pcs_anadv_reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANA);
1929 		pcs_lpab_reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANLP);
1930 		if ((pcs_anadv_reg & IXGBE_PCS1GANA_SYM_PAUSE) &&
1931 		    (pcs_lpab_reg & IXGBE_PCS1GANA_SYM_PAUSE)) {
1932 			/*
1933 			 * Now we need to check if the user selected Rx ONLY
1934 			 * of pause frames.  In this case, we had to advertise
1935 			 * FULL flow control because we could not advertise RX
1936 			 * ONLY. Hence, we must now check to see if we need to
1937 			 * turn OFF the TRANSMISSION of PAUSE frames.
1938 			 */
1939 			if (hw->fc.requested_mode == ixgbe_fc_full) {
1940 				hw->fc.current_mode = ixgbe_fc_full;
1941 				DEBUGOUT("Flow Control = FULL.\n");
1942 			} else {
1943 				hw->fc.current_mode = ixgbe_fc_rx_pause;
1944 				DEBUGOUT("Flow Control=RX PAUSE frames only\n");
1945 			}
1946 		} else if (!(pcs_anadv_reg & IXGBE_PCS1GANA_SYM_PAUSE) &&
1947 			   (pcs_anadv_reg & IXGBE_PCS1GANA_ASM_PAUSE) &&
1948 			   (pcs_lpab_reg & IXGBE_PCS1GANA_SYM_PAUSE) &&
1949 			   (pcs_lpab_reg & IXGBE_PCS1GANA_ASM_PAUSE)) {
1950 			hw->fc.current_mode = ixgbe_fc_tx_pause;
1951 			DEBUGOUT("Flow Control = TX PAUSE frames only.\n");
1952 		} else if ((pcs_anadv_reg & IXGBE_PCS1GANA_SYM_PAUSE) &&
1953 			   (pcs_anadv_reg & IXGBE_PCS1GANA_ASM_PAUSE) &&
1954 			   !(pcs_lpab_reg & IXGBE_PCS1GANA_SYM_PAUSE) &&
1955 			   (pcs_lpab_reg & IXGBE_PCS1GANA_ASM_PAUSE)) {
1956 			hw->fc.current_mode = ixgbe_fc_rx_pause;
1957 			DEBUGOUT("Flow Control = RX PAUSE frames only.\n");
1958 		} else {
1959 			hw->fc.current_mode = ixgbe_fc_none;
1960 			DEBUGOUT("Flow Control = NONE.\n");
1961 		}
1962 	}
1963 
1964 	if (hw->phy.media_type == ixgbe_media_type_backplane) {
1965 		/*
1966 		 * Read the 10g AN autoc and LP ability registers and resolve
1967 		 * local flow control settings accordingly
1968 		 */
1969 		autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
1970 		anlp1_reg = IXGBE_READ_REG(hw, IXGBE_ANLP1);
1971 
1972 		if ((autoc_reg & IXGBE_AUTOC_SYM_PAUSE) &&
1973 		    (anlp1_reg & IXGBE_ANLP1_SYM_PAUSE)) {
1974 			/*
1975 			 * Now we need to check if the user selected Rx ONLY
1976 			 * of pause frames.  In this case, we had to advertise
1977 			 * FULL flow control because we could not advertise RX
1978 			 * ONLY. Hence, we must now check to see if we need to
1979 			 * turn OFF the TRANSMISSION of PAUSE frames.
1980 			 */
1981 			if (hw->fc.requested_mode == ixgbe_fc_full) {
1982 				hw->fc.current_mode = ixgbe_fc_full;
1983 				DEBUGOUT("Flow Control = FULL.\n");
1984 			} else {
1985 				hw->fc.current_mode = ixgbe_fc_rx_pause;
1986 				DEBUGOUT("Flow Control=RX PAUSE frames only\n");
1987 			}
1988 		} else if (!(autoc_reg & IXGBE_AUTOC_SYM_PAUSE) &&
1989 			   (autoc_reg & IXGBE_AUTOC_ASM_PAUSE) &&
1990 			   (anlp1_reg & IXGBE_ANLP1_SYM_PAUSE) &&
1991 			   (anlp1_reg & IXGBE_ANLP1_ASM_PAUSE)) {
1992 			hw->fc.current_mode = ixgbe_fc_tx_pause;
1993 			DEBUGOUT("Flow Control = TX PAUSE frames only.\n");
1994 		} else if ((autoc_reg & IXGBE_AUTOC_SYM_PAUSE) &&
1995 			   (autoc_reg & IXGBE_AUTOC_ASM_PAUSE) &&
1996 			   !(anlp1_reg & IXGBE_ANLP1_SYM_PAUSE) &&
1997 			   (anlp1_reg & IXGBE_ANLP1_ASM_PAUSE)) {
1998 			hw->fc.current_mode = ixgbe_fc_rx_pause;
1999 			DEBUGOUT("Flow Control = RX PAUSE frames only.\n");
2000 		} else {
2001 			hw->fc.current_mode = ixgbe_fc_none;
2002 			DEBUGOUT("Flow Control = NONE.\n");
2003 		}
2004 	}
2005 	/* Record that current_mode is the result of a successful autoneg */
2006 	hw->fc.fc_was_autonegged = TRUE;
2007 
2008 out:
2009 	return ret_val;
2010 }
2011 
2012 /**
2013  *  ixgbe_setup_fc - Set up flow control
2014  *  @hw: pointer to hardware structure
2015  *
2016  *  Called at init time to set up flow control.
2017  **/
2018 s32 ixgbe_setup_fc(struct ixgbe_hw *hw, s32 packetbuf_num)
2019 {
2020 	s32 ret_val = IXGBE_SUCCESS;
2021 	u32 reg;
2022 
2023 	DEBUGFUNC("ixgbe_setup_fc");
2024 
2025 
2026 	/* Validate the packetbuf configuration */
2027 	if (packetbuf_num < 0 || packetbuf_num > 7) {
2028 		DEBUGOUT1("Invalid packet buffer number [%d], expected range is"
2029 		          " 0-7\n", packetbuf_num);
2030 		ret_val = IXGBE_ERR_INVALID_LINK_SETTINGS;
2031 		goto out;
2032 	}
2033 
2034 	/*
2035 	 * Validate the water mark configuration.  Zero water marks are invalid
2036 	 * because it causes the controller to just blast out fc packets.
2037 	 */
2038 	if (!hw->fc.low_water || !hw->fc.high_water || !hw->fc.pause_time) {
2039 		DEBUGOUT("Invalid water mark configuration\n");
2040 		ret_val = IXGBE_ERR_INVALID_LINK_SETTINGS;
2041 		goto out;
2042 	}
2043 
2044 	/*
2045 	 * Validate the requested mode.  Strict IEEE mode does not allow
2046 	 * ixgbe_fc_rx_pause because it will cause us to fail at UNH.
2047 	 */
2048 	if (hw->fc.strict_ieee && hw->fc.requested_mode == ixgbe_fc_rx_pause) {
2049 		DEBUGOUT("ixgbe_fc_rx_pause not valid in strict IEEE mode\n");
2050 		ret_val = IXGBE_ERR_INVALID_LINK_SETTINGS;
2051 		goto out;
2052 	}
2053 
2054 	/*
2055 	 * 10gig parts do not have a word in the EEPROM to determine the
2056 	 * default flow control setting, so we explicitly set it to full.
2057 	 */
2058 	if (hw->fc.requested_mode == ixgbe_fc_default)
2059 		hw->fc.requested_mode = ixgbe_fc_full;
2060 
2061 	/*
2062 	 * Set up the 1G flow control advertisement registers so the HW will be
2063 	 * able to do fc autoneg once the cable is plugged in.  If we end up
2064 	 * using 10g instead, this is harmless.
2065 	 */
2066 	reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANA);
2067 
2068 	/*
2069 	 * The possible values of fc.requested_mode are:
2070 	 * 0: Flow control is completely disabled
2071 	 * 1: Rx flow control is enabled (we can receive pause frames,
2072 	 *    but not send pause frames).
2073 	 * 2: Tx flow control is enabled (we can send pause frames but
2074 	 *    we do not support receiving pause frames).
2075 	 * 3: Both Rx and Tx flow control (symmetric) are enabled.
2076 	 * other: Invalid.
2077 	 */
2078 	switch (hw->fc.requested_mode) {
2079 	case ixgbe_fc_none:
2080 		/* Flow control completely disabled by software override. */
2081 		reg &= ~(IXGBE_PCS1GANA_SYM_PAUSE | IXGBE_PCS1GANA_ASM_PAUSE);
2082 		break;
2083 	case ixgbe_fc_rx_pause:
2084 		/*
2085 		 * Rx Flow control is enabled and Tx Flow control is
2086 		 * disabled by software override. Since there really
2087 		 * isn't a way to advertise that we are capable of RX
2088 		 * Pause ONLY, we will advertise that we support both
2089 		 * symmetric and asymmetric Rx PAUSE.  Later, we will
2090 		 * disable the adapter's ability to send PAUSE frames.
2091 		 */
2092 		reg |= (IXGBE_PCS1GANA_SYM_PAUSE | IXGBE_PCS1GANA_ASM_PAUSE);
2093 		break;
2094 	case ixgbe_fc_tx_pause:
2095 		/*
2096 		 * Tx Flow control is enabled, and Rx Flow control is
2097 		 * disabled by software override.
2098 		 */
2099 		reg |= (IXGBE_PCS1GANA_ASM_PAUSE);
2100 		reg &= ~(IXGBE_PCS1GANA_SYM_PAUSE);
2101 		break;
2102 	case ixgbe_fc_full:
2103 		/* Flow control (both Rx and Tx) is enabled by SW override. */
2104 		reg |= (IXGBE_PCS1GANA_SYM_PAUSE | IXGBE_PCS1GANA_ASM_PAUSE);
2105 		break;
2106 	default:
2107 		DEBUGOUT("Flow control param set incorrectly\n");
2108 		ret_val = IXGBE_ERR_CONFIG;
2109 		goto out;
2110 		break;
2111 	}
2112 
2113 	IXGBE_WRITE_REG(hw, IXGBE_PCS1GANA, reg);
2114 	reg = IXGBE_READ_REG(hw, IXGBE_PCS1GLCTL);
2115 
2116 	/* Disable AN timeout */
2117 	if (hw->fc.strict_ieee)
2118 		reg &= ~IXGBE_PCS1GLCTL_AN_1G_TIMEOUT_EN;
2119 
2120 	IXGBE_WRITE_REG(hw, IXGBE_PCS1GLCTL, reg);
2121 	DEBUGOUT1("Set up FC; PCS1GLCTL = 0x%08X\n", reg);
2122 
2123 	/*
2124 	 * Set up the 10G flow control advertisement registers so the HW
2125 	 * can do fc autoneg once the cable is plugged in.  If we end up
2126 	 * using 1g instead, this is harmless.
2127 	 */
2128 	reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
2129 
2130 	/*
2131 	 * The possible values of fc.requested_mode are:
2132 	 * 0: Flow control is completely disabled
2133 	 * 1: Rx flow control is enabled (we can receive pause frames,
2134 	 *    but not send pause frames).
2135 	 * 2: Tx flow control is enabled (we can send pause frames but
2136 	 *    we do not support receiving pause frames).
2137 	 * 3: Both Rx and Tx flow control (symmetric) are enabled.
2138 	 * other: Invalid.
2139 	 */
2140 	switch (hw->fc.requested_mode) {
2141 	case ixgbe_fc_none:
2142 		/* Flow control completely disabled by software override. */
2143 		reg &= ~(IXGBE_AUTOC_SYM_PAUSE | IXGBE_AUTOC_ASM_PAUSE);
2144 		break;
2145 	case ixgbe_fc_rx_pause:
2146 		/*
2147 		 * Rx Flow control is enabled and Tx Flow control is
2148 		 * disabled by software override. Since there really
2149 		 * isn't a way to advertise that we are capable of RX
2150 		 * Pause ONLY, we will advertise that we support both
2151 		 * symmetric and asymmetric Rx PAUSE.  Later, we will
2152 		 * disable the adapter's ability to send PAUSE frames.
2153 		 */
2154 		reg |= (IXGBE_AUTOC_SYM_PAUSE | IXGBE_AUTOC_ASM_PAUSE);
2155 		break;
2156 	case ixgbe_fc_tx_pause:
2157 		/*
2158 		 * Tx Flow control is enabled, and Rx Flow control is
2159 		 * disabled by software override.
2160 		 */
2161 		reg |= (IXGBE_AUTOC_ASM_PAUSE);
2162 		reg &= ~(IXGBE_AUTOC_SYM_PAUSE);
2163 		break;
2164 	case ixgbe_fc_full:
2165 		/* Flow control (both Rx and Tx) is enabled by SW override. */
2166 		reg |= (IXGBE_AUTOC_SYM_PAUSE | IXGBE_AUTOC_ASM_PAUSE);
2167 		break;
2168 	default:
2169 		DEBUGOUT("Flow control param set incorrectly\n");
2170 		ret_val = IXGBE_ERR_CONFIG;
2171 		goto out;
2172 		break;
2173 	}
2174 	/*
2175 	 * AUTOC restart handles negotiation of 1G and 10G. There is
2176 	 * no need to set the PCS1GCTL register.
2177 	 */
2178 	reg |= IXGBE_AUTOC_AN_RESTART;
2179 	IXGBE_WRITE_REG(hw, IXGBE_AUTOC, reg);
2180 	DEBUGOUT1("Set up FC; IXGBE_AUTOC = 0x%08X\n", reg);
2181 
2182 out:
2183 	return ret_val;
2184 }
2185 
2186 /**
2187  *  ixgbe_disable_pcie_master - Disable PCI-express master access
2188  *  @hw: pointer to hardware structure
2189  *
2190  *  Disables PCI-Express master access and verifies there are no pending
2191  *  requests. IXGBE_ERR_MASTER_REQUESTS_PENDING is returned if master disable
2192  *  bit hasn't caused the master requests to be disabled, else IXGBE_SUCCESS
2193  *  is returned signifying master requests disabled.
2194  **/
2195 s32 ixgbe_disable_pcie_master(struct ixgbe_hw *hw)
2196 {
2197 	u32 i;
2198 	u32 reg_val;
2199 	u32 number_of_queues;
2200 	s32 status = IXGBE_SUCCESS;
2201 
2202 	DEBUGFUNC("ixgbe_disable_pcie_master");
2203 
2204 	/* Just jump out if bus mastering is already disabled */
2205 	if (!(IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_GIO))
2206 		goto out;
2207 
2208 	/* Disable the receive unit by stopping each queue */
2209 	number_of_queues = hw->mac.max_rx_queues;
2210 	for (i = 0; i < number_of_queues; i++) {
2211 		reg_val = IXGBE_READ_REG(hw, IXGBE_RXDCTL(i));
2212 		if (reg_val & IXGBE_RXDCTL_ENABLE) {
2213 			reg_val &= ~IXGBE_RXDCTL_ENABLE;
2214 			IXGBE_WRITE_REG(hw, IXGBE_RXDCTL(i), reg_val);
2215 		}
2216 	}
2217 
2218 	reg_val = IXGBE_READ_REG(hw, IXGBE_CTRL);
2219 	reg_val |= IXGBE_CTRL_GIO_DIS;
2220 	IXGBE_WRITE_REG(hw, IXGBE_CTRL, reg_val);
2221 
2222 	for (i = 0; i < IXGBE_PCI_MASTER_DISABLE_TIMEOUT; i++) {
2223 		if (!(IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_GIO))
2224 			goto out;
2225 		usec_delay(100);
2226 	}
2227 
2228 	DEBUGOUT("GIO Master Disable bit didn't clear - requesting resets\n");
2229 	status = IXGBE_ERR_MASTER_REQUESTS_PENDING;
2230 
2231 	/*
2232 	 * The GIO Master Disable bit didn't clear.  There are multiple reasons
2233 	 * for this listed in the datasheet 5.2.5.3.2 Master Disable, and they
2234 	 * all require a double reset to recover from.  Before proceeding, we
2235 	 * first wait a little more to try to ensure that, at a minimum, the
2236 	 * PCIe block has no transactions pending.
2237 	 */
2238 	for (i = 0; i < IXGBE_PCI_MASTER_DISABLE_TIMEOUT; i++) {
2239 		if (!(IXGBE_READ_PCIE_WORD(hw, IXGBE_PCI_DEVICE_STATUS) &
2240 			IXGBE_PCI_DEVICE_STATUS_TRANSACTION_PENDING))
2241 			break;
2242 		usec_delay(100);
2243 	}
2244 
2245 	if (i == IXGBE_PCI_MASTER_DISABLE_TIMEOUT)
2246 		DEBUGOUT("PCIe transaction pending bit also did not clear.\n");
2247 
2248 	/*
2249 	 * Two consecutive resets are required via CTRL.RST per datasheet
2250 	 * 5.2.5.3.2 Master Disable.  We set a flag to inform the reset routine
2251 	 * of this need.  The first reset prevents new master requests from
2252 	 * being issued by our device.  We then must wait 1usec for any
2253 	 * remaining completions from the PCIe bus to trickle in, and then reset
2254 	 * again to clear out any effects they may have had on our device.
2255 	 */
2256 	 hw->mac.flags |= IXGBE_FLAGS_DOUBLE_RESET_REQUIRED;
2257 
2258 out:
2259 	return status;
2260 }
2261 
2262 
2263 /**
2264  *  ixgbe_acquire_swfw_sync - Acquire SWFW semaphore
2265  *  @hw: pointer to hardware structure
2266  *  @mask: Mask to specify which semaphore to acquire
2267  *
2268  *  Acquires the SWFW semaphore thought the GSSR register for the specified
2269  *  function (CSR, PHY0, PHY1, EEPROM, Flash)
2270  **/
2271 s32 ixgbe_acquire_swfw_sync(struct ixgbe_hw *hw, u16 mask)
2272 {
2273 	u32 gssr;
2274 	u32 swmask = mask;
2275 	u32 fwmask = mask << 5;
2276 	s32 timeout = 200;
2277 
2278 	DEBUGFUNC("ixgbe_acquire_swfw_sync");
2279 
2280 	while (timeout) {
2281 		/*
2282 		 * SW EEPROM semaphore bit is used for access to all
2283 		 * SW_FW_SYNC/GSSR bits (not just EEPROM)
2284 		 */
2285 		if (ixgbe_get_eeprom_semaphore(hw))
2286 			return IXGBE_ERR_SWFW_SYNC;
2287 
2288 		gssr = IXGBE_READ_REG(hw, IXGBE_GSSR);
2289 		if (!(gssr & (fwmask | swmask)))
2290 			break;
2291 
2292 		/*
2293 		 * Firmware currently using resource (fwmask) or other software
2294 		 * thread currently using resource (swmask)
2295 		 */
2296 		ixgbe_release_eeprom_semaphore(hw);
2297 		msec_delay(5);
2298 		timeout--;
2299 	}
2300 
2301 	if (!timeout) {
2302 		DEBUGOUT("Driver can't access resource, SW_FW_SYNC timeout.\n");
2303 		return IXGBE_ERR_SWFW_SYNC;
2304 	}
2305 
2306 	gssr |= swmask;
2307 	IXGBE_WRITE_REG(hw, IXGBE_GSSR, gssr);
2308 
2309 	ixgbe_release_eeprom_semaphore(hw);
2310 	return IXGBE_SUCCESS;
2311 }
2312 
2313 /**
2314  *  ixgbe_release_swfw_sync - Release SWFW semaphore
2315  *  @hw: pointer to hardware structure
2316  *  @mask: Mask to specify which semaphore to release
2317  *
2318  *  Releases the SWFW semaphore thought the GSSR register for the specified
2319  *  function (CSR, PHY0, PHY1, EEPROM, Flash)
2320  **/
2321 void ixgbe_release_swfw_sync(struct ixgbe_hw *hw, u16 mask)
2322 {
2323 	u32 gssr;
2324 	u32 swmask = mask;
2325 
2326 	DEBUGFUNC("ixgbe_release_swfw_sync");
2327 
2328 	ixgbe_get_eeprom_semaphore(hw);
2329 
2330 	gssr = IXGBE_READ_REG(hw, IXGBE_GSSR);
2331 	gssr &= ~swmask;
2332 	IXGBE_WRITE_REG(hw, IXGBE_GSSR, gssr);
2333 
2334 	ixgbe_release_eeprom_semaphore(hw);
2335 }
2336 
2337 /**
2338  *  ixgbe_enable_rx_dma_generic - Enable the Rx DMA unit
2339  *  @hw: pointer to hardware structure
2340  *  @regval: register value to write to RXCTRL
2341  *
2342  *  Enables the Rx DMA unit
2343  **/
2344 s32 ixgbe_enable_rx_dma_generic(struct ixgbe_hw *hw, u32 regval)
2345 {
2346 	DEBUGFUNC("ixgbe_enable_rx_dma_generic");
2347 
2348 	IXGBE_WRITE_REG(hw, IXGBE_RXCTRL, regval);
2349 
2350 	return IXGBE_SUCCESS;
2351 }
2352 
2353 /**
2354  *  ixgbe_blink_led_start_generic - Blink LED based on index.
2355  *  @hw: pointer to hardware structure
2356  *  @index: led number to blink
2357  **/
2358 s32 ixgbe_blink_led_start_generic(struct ixgbe_hw *hw, u32 index)
2359 {
2360 	ixgbe_link_speed speed = 0;
2361 	bool link_up = 0;
2362 	u32 autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
2363 	u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
2364 
2365 	DEBUGFUNC("ixgbe_blink_led_start_generic");
2366 
2367 	/*
2368 	 * Link must be up to auto-blink the LEDs;
2369 	 * Force it if link is down.
2370 	 */
2371 	hw->mac.ops.check_link(hw, &speed, &link_up, FALSE);
2372 
2373 	if (!link_up) {
2374 
2375 		autoc_reg |= IXGBE_AUTOC_AN_RESTART;
2376 		autoc_reg |= IXGBE_AUTOC_FLU;
2377 		IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc_reg);
2378 		msec_delay(10);
2379 	}
2380 
2381 	led_reg &= ~IXGBE_LED_MODE_MASK(index);
2382 	led_reg |= IXGBE_LED_BLINK(index);
2383 	IXGBE_WRITE_REG(hw, IXGBE_LEDCTL, led_reg);
2384 	IXGBE_WRITE_FLUSH(hw);
2385 
2386 	return IXGBE_SUCCESS;
2387 }
2388 
2389 /**
2390  *  ixgbe_blink_led_stop_generic - Stop blinking LED based on index.
2391  *  @hw: pointer to hardware structure
2392  *  @index: led number to stop blinking
2393  **/
2394 s32 ixgbe_blink_led_stop_generic(struct ixgbe_hw *hw, u32 index)
2395 {
2396 	u32 autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
2397 	u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
2398 
2399 	DEBUGFUNC("ixgbe_blink_led_stop_generic");
2400 
2401 
2402 	autoc_reg &= ~IXGBE_AUTOC_FLU;
2403 	autoc_reg |= IXGBE_AUTOC_AN_RESTART;
2404 	IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc_reg);
2405 
2406 	led_reg &= ~IXGBE_LED_MODE_MASK(index);
2407 	led_reg &= ~IXGBE_LED_BLINK(index);
2408 	led_reg |= IXGBE_LED_LINK_ACTIVE << IXGBE_LED_MODE_SHIFT(index);
2409 	IXGBE_WRITE_REG(hw, IXGBE_LEDCTL, led_reg);
2410 	IXGBE_WRITE_FLUSH(hw);
2411 
2412 	return IXGBE_SUCCESS;
2413 }
2414 
2415 /**
2416  *  ixgbe_get_san_mac_addr_offset - Get SAN MAC address offset from the EEPROM
2417  *  @hw: pointer to hardware structure
2418  *  @san_mac_offset: SAN MAC address offset
2419  *
2420  *  This function will read the EEPROM location for the SAN MAC address
2421  *  pointer, and returns the value at that location.  This is used in both
2422  *  get and set mac_addr routines.
2423  **/
2424 static s32 ixgbe_get_san_mac_addr_offset(struct ixgbe_hw *hw,
2425                                         u16 *san_mac_offset)
2426 {
2427 	DEBUGFUNC("ixgbe_get_san_mac_addr_offset");
2428 
2429 	/*
2430 	 * First read the EEPROM pointer to see if the MAC addresses are
2431 	 * available.
2432 	 */
2433 	hw->eeprom.ops.read(hw, IXGBE_SAN_MAC_ADDR_PTR, san_mac_offset);
2434 
2435 	return IXGBE_SUCCESS;
2436 }
2437 
2438 /**
2439  *  ixgbe_get_san_mac_addr_generic - SAN MAC address retrieval from the EEPROM
2440  *  @hw: pointer to hardware structure
2441  *  @san_mac_addr: SAN MAC address
2442  *
2443  *  Reads the SAN MAC address from the EEPROM, if it's available.  This is
2444  *  per-port, so set_lan_id() must be called before reading the addresses.
2445  *  set_lan_id() is called by identify_sfp(), but this cannot be relied
2446  *  upon for non-SFP connections, so we must call it here.
2447  **/
2448 s32 ixgbe_get_san_mac_addr_generic(struct ixgbe_hw *hw, u8 *san_mac_addr)
2449 {
2450 	u16 san_mac_data, san_mac_offset;
2451 	u8 i;
2452 
2453 	DEBUGFUNC("ixgbe_get_san_mac_addr_generic");
2454 
2455 	/*
2456 	 * First read the EEPROM pointer to see if the MAC addresses are
2457 	 * available.  If they're not, no point in calling set_lan_id() here.
2458 	 */
2459 	ixgbe_get_san_mac_addr_offset(hw, &san_mac_offset);
2460 
2461 	if ((san_mac_offset == 0) || (san_mac_offset == 0xFFFF)) {
2462 		/*
2463 		 * No addresses available in this EEPROM.  It's not an
2464 		 * error though, so just wipe the local address and return.
2465 		 */
2466 		for (i = 0; i < 6; i++)
2467 			san_mac_addr[i] = 0xFF;
2468 
2469 		goto san_mac_addr_out;
2470 	}
2471 
2472 	/* make sure we know which port we need to program */
2473 	hw->mac.ops.set_lan_id(hw);
2474 	/* apply the port offset to the address offset */
2475 	(hw->bus.func) ? (san_mac_offset += IXGBE_SAN_MAC_ADDR_PORT1_OFFSET) :
2476 	                 (san_mac_offset += IXGBE_SAN_MAC_ADDR_PORT0_OFFSET);
2477 	for (i = 0; i < 3; i++) {
2478 		hw->eeprom.ops.read(hw, san_mac_offset, &san_mac_data);
2479 		san_mac_addr[i * 2] = (u8)(san_mac_data);
2480 		san_mac_addr[i * 2 + 1] = (u8)(san_mac_data >> 8);
2481 		san_mac_offset++;
2482 	}
2483 
2484 san_mac_addr_out:
2485 	return IXGBE_SUCCESS;
2486 }
2487 
2488 /**
2489  *  ixgbe_set_san_mac_addr_generic - Write the SAN MAC address to the EEPROM
2490  *  @hw: pointer to hardware structure
2491  *  @san_mac_addr: SAN MAC address
2492  *
2493  *  Write a SAN MAC address to the EEPROM.
2494  **/
2495 s32 ixgbe_set_san_mac_addr_generic(struct ixgbe_hw *hw, u8 *san_mac_addr)
2496 {
2497 	s32 status = IXGBE_SUCCESS;
2498 	u16 san_mac_data, san_mac_offset;
2499 	u8 i;
2500 
2501 	DEBUGFUNC("ixgbe_set_san_mac_addr_generic");
2502 
2503 	/* Look for SAN mac address pointer.  If not defined, return */
2504 	ixgbe_get_san_mac_addr_offset(hw, &san_mac_offset);
2505 
2506 	if ((san_mac_offset == 0) || (san_mac_offset == 0xFFFF)) {
2507 		status = IXGBE_ERR_NO_SAN_ADDR_PTR;
2508 		goto san_mac_addr_out;
2509 	}
2510 
2511 	/* Make sure we know which port we need to write */
2512 	hw->mac.ops.set_lan_id(hw);
2513 	/* Apply the port offset to the address offset */
2514 	(hw->bus.func) ? (san_mac_offset += IXGBE_SAN_MAC_ADDR_PORT1_OFFSET) :
2515 	                 (san_mac_offset += IXGBE_SAN_MAC_ADDR_PORT0_OFFSET);
2516 
2517 	for (i = 0; i < 3; i++) {
2518 		san_mac_data = (u16)((u16)(san_mac_addr[i * 2 + 1]) << 8);
2519 		san_mac_data |= (u16)(san_mac_addr[i * 2]);
2520 		hw->eeprom.ops.write(hw, san_mac_offset, san_mac_data);
2521 		san_mac_offset++;
2522 	}
2523 
2524 san_mac_addr_out:
2525 	return status;
2526 }
2527 
2528 /**
2529  *  ixgbe_get_pcie_msix_count_generic - Gets MSI-X vector count
2530  *  @hw: pointer to hardware structure
2531  *
2532  *  Read PCIe configuration space, and get the MSI-X vector count from
2533  *  the capabilities table.
2534  **/
2535 u32 ixgbe_get_pcie_msix_count_generic(struct ixgbe_hw *hw)
2536 {
2537 	u32 msix_count = 64;
2538 
2539 	DEBUGFUNC("ixgbe_get_pcie_msix_count_generic");
2540 	if (hw->mac.msix_vectors_from_pcie) {
2541 		msix_count = IXGBE_READ_PCIE_WORD(hw,
2542 		                                  IXGBE_PCIE_MSIX_82599_CAPS);
2543 		msix_count &= IXGBE_PCIE_MSIX_TBL_SZ_MASK;
2544 
2545 		/* MSI-X count is zero-based in HW, so increment to give
2546 		 * proper value */
2547 		msix_count++;
2548 	}
2549 
2550 	return msix_count;
2551 }
2552 
2553 /**
2554  *  ixgbe_insert_mac_addr_generic - Find a RAR for this mac address
2555  *  @hw: pointer to hardware structure
2556  *  @addr: Address to put into receive address register
2557  *  @vmdq: VMDq pool to assign
2558  *
2559  *  Puts an ethernet address into a receive address register, or
2560  *  finds the rar that it is aleady in; adds to the pool list
2561  **/
2562 s32 ixgbe_insert_mac_addr_generic(struct ixgbe_hw *hw, u8 *addr, u32 vmdq)
2563 {
2564 	static const u32 NO_EMPTY_RAR_FOUND = 0xFFFFFFFF;
2565 	u32 first_empty_rar = NO_EMPTY_RAR_FOUND;
2566 	u32 rar;
2567 	u32 rar_low, rar_high;
2568 	u32 addr_low, addr_high;
2569 
2570 	DEBUGFUNC("ixgbe_insert_mac_addr_generic");
2571 
2572 	/* swap bytes for HW little endian */
2573 	addr_low  = addr[0] | (addr[1] << 8)
2574 			    | (addr[2] << 16)
2575 			    | (addr[3] << 24);
2576 	addr_high = addr[4] | (addr[5] << 8);
2577 
2578 	/*
2579 	 * Either find the mac_id in rar or find the first empty space.
2580 	 * rar_highwater points to just after the highest currently used
2581 	 * rar in order to shorten the search.  It grows when we add a new
2582 	 * rar to the top.
2583 	 */
2584 	for (rar = 0; rar < hw->mac.rar_highwater; rar++) {
2585 		rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(rar));
2586 
2587 		if (((IXGBE_RAH_AV & rar_high) == 0)
2588 		    && first_empty_rar == NO_EMPTY_RAR_FOUND) {
2589 			first_empty_rar = rar;
2590 		} else if ((rar_high & 0xFFFF) == addr_high) {
2591 			rar_low = IXGBE_READ_REG(hw, IXGBE_RAL(rar));
2592 			if (rar_low == addr_low)
2593 				break;    /* found it already in the rars */
2594 		}
2595 	}
2596 
2597 	if (rar < hw->mac.rar_highwater) {
2598 		/* already there so just add to the pool bits */
2599 		ixgbe_set_vmdq(hw, rar, vmdq);
2600 	} else if (first_empty_rar != NO_EMPTY_RAR_FOUND) {
2601 		/* stick it into first empty RAR slot we found */
2602 		rar = first_empty_rar;
2603 		ixgbe_set_rar(hw, rar, addr, vmdq, IXGBE_RAH_AV);
2604 	} else if (rar == hw->mac.rar_highwater) {
2605 		/* add it to the top of the list and inc the highwater mark */
2606 		ixgbe_set_rar(hw, rar, addr, vmdq, IXGBE_RAH_AV);
2607 		hw->mac.rar_highwater++;
2608 	} else if (rar >= hw->mac.num_rar_entries) {
2609 		return IXGBE_ERR_INVALID_MAC_ADDR;
2610 	}
2611 
2612 	/*
2613 	 * If we found rar[0], make sure the default pool bit (we use pool 0)
2614 	 * remains cleared to be sure default pool packets will get delivered
2615 	 */
2616 	if (rar == 0)
2617 		ixgbe_clear_vmdq(hw, rar, 0);
2618 
2619 	return rar;
2620 }
2621 
2622 /**
2623  *  ixgbe_clear_vmdq_generic - Disassociate a VMDq pool index from a rx address
2624  *  @hw: pointer to hardware struct
2625  *  @rar: receive address register index to disassociate
2626  *  @vmdq: VMDq pool index to remove from the rar
2627  **/
2628 s32 ixgbe_clear_vmdq_generic(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
2629 {
2630 	u32 mpsar_lo, mpsar_hi;
2631 	u32 rar_entries = hw->mac.num_rar_entries;
2632 
2633 	DEBUGFUNC("ixgbe_clear_vmdq_generic");
2634 
2635 	if (rar < rar_entries) {
2636 		mpsar_lo = IXGBE_READ_REG(hw, IXGBE_MPSAR_LO(rar));
2637 		mpsar_hi = IXGBE_READ_REG(hw, IXGBE_MPSAR_HI(rar));
2638 
2639 		if (!mpsar_lo && !mpsar_hi)
2640 			goto done;
2641 
2642 		if (vmdq == IXGBE_CLEAR_VMDQ_ALL) {
2643 			if (mpsar_lo) {
2644 				IXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), 0);
2645 				mpsar_lo = 0;
2646 			}
2647 			if (mpsar_hi) {
2648 				IXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), 0);
2649 				mpsar_hi = 0;
2650 			}
2651 		} else if (vmdq < 32) {
2652 			mpsar_lo &= ~(1 << vmdq);
2653 			IXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), mpsar_lo);
2654 		} else {
2655 			mpsar_hi &= ~(1 << (vmdq - 32));
2656 			IXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), mpsar_hi);
2657 		}
2658 
2659 		/* was that the last pool using this rar? */
2660 		if (mpsar_lo == 0 && mpsar_hi == 0 && rar != 0)
2661 			hw->mac.ops.clear_rar(hw, rar);
2662 	} else {
2663 		DEBUGOUT1("RAR index %d is out of range.\n", rar);
2664 	}
2665 
2666 done:
2667 	return IXGBE_SUCCESS;
2668 }
2669 
2670 /**
2671  *  ixgbe_set_vmdq_generic - Associate a VMDq pool index with a rx address
2672  *  @hw: pointer to hardware struct
2673  *  @rar: receive address register index to associate with a VMDq index
2674  *  @vmdq: VMDq pool index
2675  **/
2676 s32 ixgbe_set_vmdq_generic(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
2677 {
2678 	u32 mpsar;
2679 	u32 rar_entries = hw->mac.num_rar_entries;
2680 
2681 	DEBUGFUNC("ixgbe_set_vmdq_generic");
2682 
2683 	if (rar < rar_entries) {
2684 		if (vmdq < 32) {
2685 			mpsar = IXGBE_READ_REG(hw, IXGBE_MPSAR_LO(rar));
2686 			mpsar |= 1 << vmdq;
2687 			IXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), mpsar);
2688 		} else {
2689 			mpsar = IXGBE_READ_REG(hw, IXGBE_MPSAR_HI(rar));
2690 			mpsar |= 1 << (vmdq - 32);
2691 			IXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), mpsar);
2692 		}
2693 	} else {
2694 		DEBUGOUT1("RAR index %d is out of range.\n", rar);
2695 	}
2696 	return IXGBE_SUCCESS;
2697 }
2698 
2699 /**
2700  *  ixgbe_init_uta_tables_generic - Initialize the Unicast Table Array
2701  *  @hw: pointer to hardware structure
2702  **/
2703 s32 ixgbe_init_uta_tables_generic(struct ixgbe_hw *hw)
2704 {
2705 	int i;
2706 
2707 	DEBUGFUNC("ixgbe_init_uta_tables_generic");
2708 	DEBUGOUT(" Clearing UTA\n");
2709 
2710 	for (i = 0; i < 128; i++)
2711 		IXGBE_WRITE_REG(hw, IXGBE_UTA(i), 0);
2712 
2713 	return IXGBE_SUCCESS;
2714 }
2715 
2716 /**
2717  *  ixgbe_find_vlvf_slot - find the vlanid or the first empty slot
2718  *  @hw: pointer to hardware structure
2719  *  @vlan: VLAN id to write to VLAN filter
2720  *
2721  *  return the VLVF index where this VLAN id should be placed
2722  *
2723  **/
2724 s32 ixgbe_find_vlvf_slot(struct ixgbe_hw *hw, u32 vlan)
2725 {
2726 	u32 bits = 0;
2727 	u32 first_empty_slot = 0;
2728 	s32 regindex;
2729 
2730 	/* short cut the special case */
2731 	if (vlan == 0)
2732 		return 0;
2733 
2734 	/*
2735 	  * Search for the vlan id in the VLVF entries. Save off the first empty
2736 	  * slot found along the way
2737 	  */
2738 	for (regindex = 1; regindex < IXGBE_VLVF_ENTRIES; regindex++) {
2739 		bits = IXGBE_READ_REG(hw, IXGBE_VLVF(regindex));
2740 		if (!bits && !(first_empty_slot))
2741 			first_empty_slot = regindex;
2742 		else if ((bits & 0x0FFF) == vlan)
2743 			break;
2744 	}
2745 
2746 	/*
2747 	  * If regindex is less than IXGBE_VLVF_ENTRIES, then we found the vlan
2748 	  * in the VLVF. Else use the first empty VLVF register for this
2749 	  * vlan id.
2750 	  */
2751 	if (regindex >= IXGBE_VLVF_ENTRIES) {
2752 		if (first_empty_slot)
2753 			regindex = first_empty_slot;
2754 		else {
2755 			DEBUGOUT("No space in VLVF.\n");
2756 			regindex = IXGBE_ERR_NO_SPACE;
2757 		}
2758 	}
2759 
2760 	return regindex;
2761 }
2762 
2763 /**
2764  *  ixgbe_set_vfta_generic - Set VLAN filter table
2765  *  @hw: pointer to hardware structure
2766  *  @vlan: VLAN id to write to VLAN filter
2767  *  @vind: VMDq output index that maps queue to VLAN id in VFVFB
2768  *  @vlan_on: boolean flag to turn on/off VLAN in VFVF
2769  *
2770  *  Turn on/off specified VLAN in the VLAN filter table.
2771  **/
2772 s32 ixgbe_set_vfta_generic(struct ixgbe_hw *hw, u32 vlan, u32 vind,
2773                            bool vlan_on)
2774 {
2775 	s32 regindex;
2776 	u32 bitindex;
2777 	u32 vfta;
2778 	u32 bits;
2779 	u32 vt;
2780 	u32 targetbit;
2781 	bool vfta_changed = FALSE;
2782 
2783 	DEBUGFUNC("ixgbe_set_vfta_generic");
2784 
2785 	if (vlan > 4095)
2786 		return IXGBE_ERR_PARAM;
2787 
2788 	/*
2789 	 * this is a 2 part operation - first the VFTA, then the
2790 	 * VLVF and VLVFB if VT Mode is set
2791 	 * We don't write the VFTA until we know the VLVF part succeeded.
2792 	 */
2793 
2794 	/* Part 1
2795 	 * The VFTA is a bitstring made up of 128 32-bit registers
2796 	 * that enable the particular VLAN id, much like the MTA:
2797 	 *    bits[11-5]: which register
2798 	 *    bits[4-0]:  which bit in the register
2799 	 */
2800 	regindex = (vlan >> 5) & 0x7F;
2801 	bitindex = vlan & 0x1F;
2802 	targetbit = (1 << bitindex);
2803 	vfta = IXGBE_READ_REG(hw, IXGBE_VFTA(regindex));
2804 
2805 	if (vlan_on) {
2806 		if (!(vfta & targetbit)) {
2807 			vfta |= targetbit;
2808 			vfta_changed = TRUE;
2809 		}
2810 	} else {
2811 		if ((vfta & targetbit)) {
2812 			vfta &= ~targetbit;
2813 			vfta_changed = TRUE;
2814 		}
2815 	}
2816 
2817 	/* Part 2
2818 	 * If VT Mode is set
2819 	 *   Either vlan_on
2820 	 *     make sure the vlan is in VLVF
2821 	 *     set the vind bit in the matching VLVFB
2822 	 *   Or !vlan_on
2823 	 *     clear the pool bit and possibly the vind
2824 	 */
2825 	vt = IXGBE_READ_REG(hw, IXGBE_VT_CTL);
2826 	if (vt & IXGBE_VT_CTL_VT_ENABLE) {
2827 		s32 vlvf_index;
2828 
2829 		vlvf_index = ixgbe_find_vlvf_slot(hw, vlan);
2830 		if (vlvf_index < 0)
2831 			return vlvf_index;
2832 
2833 		if (vlan_on) {
2834 			/* set the pool bit */
2835 			if (vind < 32) {
2836 				bits = IXGBE_READ_REG(hw,
2837 						IXGBE_VLVFB(vlvf_index*2));
2838 				bits |= (1 << vind);
2839 				IXGBE_WRITE_REG(hw,
2840 						IXGBE_VLVFB(vlvf_index*2),
2841 						bits);
2842 			} else {
2843 				bits = IXGBE_READ_REG(hw,
2844 						IXGBE_VLVFB((vlvf_index*2)+1));
2845 				bits |= (1 << (vind-32));
2846 				IXGBE_WRITE_REG(hw,
2847 						IXGBE_VLVFB((vlvf_index*2)+1),
2848 						bits);
2849 			}
2850 		} else {
2851 			/* clear the pool bit */
2852 			if (vind < 32) {
2853 				bits = IXGBE_READ_REG(hw,
2854 						IXGBE_VLVFB(vlvf_index*2));
2855 				bits &= ~(1 << vind);
2856 				IXGBE_WRITE_REG(hw,
2857 						IXGBE_VLVFB(vlvf_index*2),
2858 						bits);
2859 				bits |= IXGBE_READ_REG(hw,
2860 						IXGBE_VLVFB((vlvf_index*2)+1));
2861 			} else {
2862 				bits = IXGBE_READ_REG(hw,
2863 						IXGBE_VLVFB((vlvf_index*2)+1));
2864 				bits &= ~(1 << (vind-32));
2865 				IXGBE_WRITE_REG(hw,
2866 						IXGBE_VLVFB((vlvf_index*2)+1),
2867 						bits);
2868 				bits |= IXGBE_READ_REG(hw,
2869 						IXGBE_VLVFB(vlvf_index*2));
2870 			}
2871 		}
2872 
2873 		/*
2874 		 * If there are still bits set in the VLVFB registers
2875 		 * for the VLAN ID indicated we need to see if the
2876 		 * caller is requesting that we clear the VFTA entry bit.
2877 		 * If the caller has requested that we clear the VFTA
2878 		 * entry bit but there are still pools/VFs using this VLAN
2879 		 * ID entry then ignore the request.  We're not worried
2880 		 * about the case where we're turning the VFTA VLAN ID
2881 		 * entry bit on, only when requested to turn it off as
2882 		 * there may be multiple pools and/or VFs using the
2883 		 * VLAN ID entry.  In that case we cannot clear the
2884 		 * VFTA bit until all pools/VFs using that VLAN ID have also
2885 		 * been cleared.  This will be indicated by "bits" being
2886 		 * zero.
2887 		 */
2888 		if (bits) {
2889 			IXGBE_WRITE_REG(hw, IXGBE_VLVF(vlvf_index),
2890 					(IXGBE_VLVF_VIEN | vlan));
2891 			if (!vlan_on) {
2892 				/* someone wants to clear the vfta entry
2893 				 * but some pools/VFs are still using it.
2894 				 * Ignore it. */
2895 				vfta_changed = FALSE;
2896 			}
2897 		}
2898 		else
2899 			IXGBE_WRITE_REG(hw, IXGBE_VLVF(vlvf_index), 0);
2900 	}
2901 
2902 	if (vfta_changed)
2903 		IXGBE_WRITE_REG(hw, IXGBE_VFTA(regindex), vfta);
2904 
2905 	return IXGBE_SUCCESS;
2906 }
2907 
2908 /**
2909  *  ixgbe_clear_vfta_generic - Clear VLAN filter table
2910  *  @hw: pointer to hardware structure
2911  *
2912  *  Clears the VLAN filer table, and the VMDq index associated with the filter
2913  **/
2914 s32 ixgbe_clear_vfta_generic(struct ixgbe_hw *hw)
2915 {
2916 	u32 offset;
2917 
2918 	DEBUGFUNC("ixgbe_clear_vfta_generic");
2919 
2920 	for (offset = 0; offset < hw->mac.vft_size; offset++)
2921 		IXGBE_WRITE_REG(hw, IXGBE_VFTA(offset), 0);
2922 
2923 	for (offset = 0; offset < IXGBE_VLVF_ENTRIES; offset++) {
2924 		IXGBE_WRITE_REG(hw, IXGBE_VLVF(offset), 0);
2925 		IXGBE_WRITE_REG(hw, IXGBE_VLVFB(offset*2), 0);
2926 		IXGBE_WRITE_REG(hw, IXGBE_VLVFB((offset*2)+1), 0);
2927 	}
2928 
2929 	return IXGBE_SUCCESS;
2930 }
2931 
2932 /**
2933  *  ixgbe_check_mac_link_generic - Determine link and speed status
2934  *  @hw: pointer to hardware structure
2935  *  @speed: pointer to link speed
2936  *  @link_up: TRUE when link is up
2937  *  @link_up_wait_to_complete: bool used to wait for link up or not
2938  *
2939  *  Reads the links register to determine if link is up and the current speed
2940  **/
2941 s32 ixgbe_check_mac_link_generic(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
2942                                  bool *link_up, bool link_up_wait_to_complete)
2943 {
2944 	u32 links_reg, links_orig;
2945 	u32 i;
2946 
2947 	DEBUGFUNC("ixgbe_check_mac_link_generic");
2948 
2949 	/* clear the old state */
2950 	links_orig = IXGBE_READ_REG(hw, IXGBE_LINKS);
2951 
2952 	links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
2953 
2954 	if (links_orig != links_reg) {
2955 		DEBUGOUT2("LINKS changed from %08X to %08X\n",
2956 		          links_orig, links_reg);
2957 	}
2958 
2959 	if (link_up_wait_to_complete) {
2960 		for (i = 0; i < IXGBE_LINK_UP_TIME; i++) {
2961 			if (links_reg & IXGBE_LINKS_UP) {
2962 				*link_up = TRUE;
2963 				break;
2964 			} else {
2965 				*link_up = FALSE;
2966 			}
2967 			msec_delay(100);
2968 			links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
2969 		}
2970 	} else {
2971 		if (links_reg & IXGBE_LINKS_UP)
2972 			*link_up = TRUE;
2973 		else
2974 			*link_up = FALSE;
2975 	}
2976 
2977 	if ((links_reg & IXGBE_LINKS_SPEED_82599) ==
2978 	    IXGBE_LINKS_SPEED_10G_82599)
2979 		*speed = IXGBE_LINK_SPEED_10GB_FULL;
2980 	else if ((links_reg & IXGBE_LINKS_SPEED_82599) ==
2981 	         IXGBE_LINKS_SPEED_1G_82599)
2982 		*speed = IXGBE_LINK_SPEED_1GB_FULL;
2983 	else
2984 		*speed = IXGBE_LINK_SPEED_100_FULL;
2985 
2986 	/* if link is down, zero out the current_mode */
2987 	if (*link_up == FALSE) {
2988 		hw->fc.current_mode = ixgbe_fc_none;
2989 		hw->fc.fc_was_autonegged = FALSE;
2990 	}
2991 
2992 	return IXGBE_SUCCESS;
2993 }
2994 
2995 /**
2996  *  ixgbe_get_wwn_prefix_generic - Get alternative WWNN/WWPN prefix from
2997  *  the EEPROM
2998  *  @hw: pointer to hardware structure
2999  *  @wwnn_prefix: the alternative WWNN prefix
3000  *  @wwpn_prefix: the alternative WWPN prefix
3001  *
3002  *  This function will read the EEPROM from the alternative SAN MAC address
3003  *  block to check the support for the alternative WWNN/WWPN prefix support.
3004  **/
3005 s32 ixgbe_get_wwn_prefix_generic(struct ixgbe_hw *hw, u16 *wwnn_prefix,
3006                                  u16 *wwpn_prefix)
3007 {
3008 	u16 offset, caps;
3009 	u16 alt_san_mac_blk_offset;
3010 
3011 	DEBUGFUNC("ixgbe_get_wwn_prefix_generic");
3012 
3013 	/* clear output first */
3014 	*wwnn_prefix = 0xFFFF;
3015 	*wwpn_prefix = 0xFFFF;
3016 
3017 	/* check if alternative SAN MAC is supported */
3018 	hw->eeprom.ops.read(hw, IXGBE_ALT_SAN_MAC_ADDR_BLK_PTR,
3019 	                    &alt_san_mac_blk_offset);
3020 
3021 	if ((alt_san_mac_blk_offset == 0) ||
3022 	    (alt_san_mac_blk_offset == 0xFFFF))
3023 		goto wwn_prefix_out;
3024 
3025 	/* check capability in alternative san mac address block */
3026 	offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_CAPS_OFFSET;
3027 	hw->eeprom.ops.read(hw, offset, &caps);
3028 	if (!(caps & IXGBE_ALT_SAN_MAC_ADDR_CAPS_ALTWWN))
3029 		goto wwn_prefix_out;
3030 
3031 	/* get the corresponding prefix for WWNN/WWPN */
3032 	offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_WWNN_OFFSET;
3033 	hw->eeprom.ops.read(hw, offset, wwnn_prefix);
3034 
3035 	offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_WWPN_OFFSET;
3036 	hw->eeprom.ops.read(hw, offset, wwpn_prefix);
3037 
3038 wwn_prefix_out:
3039 	return IXGBE_SUCCESS;
3040 }
3041