1/******************************************************************************
2
3  Copyright (c) 2001-2013, 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_phy.h"
37#include "ixgbe_dcb.h"
38#include "ixgbe_dcb_82599.h"
39#include "ixgbe_api.h"
40
41static s32 ixgbe_acquire_eeprom(struct ixgbe_hw *hw);
42static s32 ixgbe_get_eeprom_semaphore(struct ixgbe_hw *hw);
43static void ixgbe_release_eeprom_semaphore(struct ixgbe_hw *hw);
44static s32 ixgbe_ready_eeprom(struct ixgbe_hw *hw);
45static void ixgbe_standby_eeprom(struct ixgbe_hw *hw);
46static void ixgbe_shift_out_eeprom_bits(struct ixgbe_hw *hw, u16 data,
47					u16 count);
48static u16 ixgbe_shift_in_eeprom_bits(struct ixgbe_hw *hw, u16 count);
49static void ixgbe_raise_eeprom_clk(struct ixgbe_hw *hw, u32 *eec);
50static void ixgbe_lower_eeprom_clk(struct ixgbe_hw *hw, u32 *eec);
51static void ixgbe_release_eeprom(struct ixgbe_hw *hw);
52
53static s32 ixgbe_mta_vector(struct ixgbe_hw *hw, u8 *mc_addr);
54static s32 ixgbe_get_san_mac_addr_offset(struct ixgbe_hw *hw,
55					 u16 *san_mac_offset);
56static s32 ixgbe_read_eeprom_buffer_bit_bang(struct ixgbe_hw *hw, u16 offset,
57					     u16 words, u16 *data);
58static s32 ixgbe_write_eeprom_buffer_bit_bang(struct ixgbe_hw *hw, u16 offset,
59					      u16 words, u16 *data);
60static s32 ixgbe_detect_eeprom_page_size_generic(struct ixgbe_hw *hw,
61						 u16 offset);
62
63/**
64 *  ixgbe_init_ops_generic - Inits function ptrs
65 *  @hw: pointer to the hardware structure
66 *
67 *  Initialize the function pointers.
68 **/
69s32 ixgbe_init_ops_generic(struct ixgbe_hw *hw)
70{
71	struct ixgbe_eeprom_info *eeprom = &hw->eeprom;
72	struct ixgbe_mac_info *mac = &hw->mac;
73	u32 eec = IXGBE_READ_REG(hw, IXGBE_EEC);
74
75	DEBUGFUNC("ixgbe_init_ops_generic");
76
77	/* EEPROM */
78	eeprom->ops.init_params = &ixgbe_init_eeprom_params_generic;
79	/* If EEPROM is valid (bit 8 = 1), use EERD otherwise use bit bang */
80	if (eec & IXGBE_EEC_PRES) {
81		eeprom->ops.read = &ixgbe_read_eerd_generic;
82		eeprom->ops.read_buffer = &ixgbe_read_eerd_buffer_generic;
83	} else {
84		eeprom->ops.read = &ixgbe_read_eeprom_bit_bang_generic;
85		eeprom->ops.read_buffer =
86				 &ixgbe_read_eeprom_buffer_bit_bang_generic;
87	}
88	eeprom->ops.write = &ixgbe_write_eeprom_generic;
89	eeprom->ops.write_buffer = &ixgbe_write_eeprom_buffer_bit_bang_generic;
90	eeprom->ops.validate_checksum =
91				      &ixgbe_validate_eeprom_checksum_generic;
92	eeprom->ops.update_checksum = &ixgbe_update_eeprom_checksum_generic;
93	eeprom->ops.calc_checksum = &ixgbe_calc_eeprom_checksum_generic;
94
95	/* MAC */
96	mac->ops.init_hw = &ixgbe_init_hw_generic;
97	mac->ops.reset_hw = NULL;
98	mac->ops.start_hw = &ixgbe_start_hw_generic;
99	mac->ops.clear_hw_cntrs = &ixgbe_clear_hw_cntrs_generic;
100	mac->ops.get_media_type = NULL;
101	mac->ops.get_supported_physical_layer = NULL;
102	mac->ops.enable_rx_dma = &ixgbe_enable_rx_dma_generic;
103	mac->ops.get_mac_addr = &ixgbe_get_mac_addr_generic;
104	mac->ops.stop_adapter = &ixgbe_stop_adapter_generic;
105	mac->ops.get_bus_info = &ixgbe_get_bus_info_generic;
106	mac->ops.set_lan_id = &ixgbe_set_lan_id_multi_port_pcie;
107	mac->ops.acquire_swfw_sync = &ixgbe_acquire_swfw_sync;
108	mac->ops.release_swfw_sync = &ixgbe_release_swfw_sync;
109
110	/* LEDs */
111	mac->ops.led_on = &ixgbe_led_on_generic;
112	mac->ops.led_off = &ixgbe_led_off_generic;
113	mac->ops.blink_led_start = &ixgbe_blink_led_start_generic;
114	mac->ops.blink_led_stop = &ixgbe_blink_led_stop_generic;
115
116	/* RAR, Multicast, VLAN */
117	mac->ops.set_rar = &ixgbe_set_rar_generic;
118	mac->ops.clear_rar = &ixgbe_clear_rar_generic;
119	mac->ops.insert_mac_addr = NULL;
120	mac->ops.set_vmdq = NULL;
121	mac->ops.clear_vmdq = NULL;
122	mac->ops.init_rx_addrs = &ixgbe_init_rx_addrs_generic;
123	mac->ops.update_uc_addr_list = &ixgbe_update_uc_addr_list_generic;
124	mac->ops.update_mc_addr_list = &ixgbe_update_mc_addr_list_generic;
125	mac->ops.enable_mc = &ixgbe_enable_mc_generic;
126	mac->ops.disable_mc = &ixgbe_disable_mc_generic;
127	mac->ops.clear_vfta = NULL;
128	mac->ops.set_vfta = NULL;
129	mac->ops.set_vlvf = NULL;
130	mac->ops.init_uta_tables = NULL;
131
132	/* Flow Control */
133	mac->ops.fc_enable = &ixgbe_fc_enable_generic;
134
135	/* Link */
136	mac->ops.get_link_capabilities = NULL;
137	mac->ops.setup_link = NULL;
138	mac->ops.check_link = NULL;
139	mac->ops.dmac_config = NULL;
140	mac->ops.dmac_update_tcs = NULL;
141	mac->ops.dmac_config_tcs = NULL;
142
143	return IXGBE_SUCCESS;
144}
145
146/**
147 * ixgbe_device_supports_autoneg_fc - Check if device supports autonegotiation
148 * of flow control
149 * @hw: pointer to hardware structure
150 *
151 * This function returns TRUE if the device supports flow control
152 * autonegotiation, and FALSE if it does not.
153 *
154 **/
155bool ixgbe_device_supports_autoneg_fc(struct ixgbe_hw *hw)
156{
157	bool supported = FALSE;
158	ixgbe_link_speed speed;
159	bool link_up;
160
161	DEBUGFUNC("ixgbe_device_supports_autoneg_fc");
162
163	switch (hw->phy.media_type) {
164	case ixgbe_media_type_fiber_fixed:
165	case ixgbe_media_type_fiber:
166		hw->mac.ops.check_link(hw, &speed, &link_up, FALSE);
167		/* if link is down, assume supported */
168		if (link_up)
169			supported = speed == IXGBE_LINK_SPEED_1GB_FULL ?
170				TRUE : FALSE;
171		else
172			supported = TRUE;
173		break;
174	case ixgbe_media_type_backplane:
175		supported = TRUE;
176		break;
177	case ixgbe_media_type_copper:
178		/* only some copper devices support flow control autoneg */
179		switch (hw->device_id) {
180		case IXGBE_DEV_ID_82599_T3_LOM:
181		case IXGBE_DEV_ID_X540T:
182		case IXGBE_DEV_ID_X540_BYPASS:
183			supported = TRUE;
184			break;
185		default:
186			supported = FALSE;
187		}
188	default:
189		break;
190	}
191
192	ERROR_REPORT2(IXGBE_ERROR_UNSUPPORTED,
193		      "Device %x does not support flow control autoneg",
194		      hw->device_id);
195	return supported;
196}
197
198/**
199 *  ixgbe_setup_fc - Set up flow control
200 *  @hw: pointer to hardware structure
201 *
202 *  Called at init time to set up flow control.
203 **/
204static s32 ixgbe_setup_fc(struct ixgbe_hw *hw)
205{
206	s32 ret_val = IXGBE_SUCCESS;
207	u32 reg = 0, reg_bp = 0;
208	u16 reg_cu = 0;
209	bool got_lock = FALSE;
210
211	DEBUGFUNC("ixgbe_setup_fc");
212
213	/*
214	 * Validate the requested mode.  Strict IEEE mode does not allow
215	 * ixgbe_fc_rx_pause because it will cause us to fail at UNH.
216	 */
217	if (hw->fc.strict_ieee && hw->fc.requested_mode == ixgbe_fc_rx_pause) {
218		ERROR_REPORT1(IXGBE_ERROR_UNSUPPORTED,
219			   "ixgbe_fc_rx_pause not valid in strict IEEE mode\n");
220		ret_val = IXGBE_ERR_INVALID_LINK_SETTINGS;
221		goto out;
222	}
223
224	/*
225	 * 10gig parts do not have a word in the EEPROM to determine the
226	 * default flow control setting, so we explicitly set it to full.
227	 */
228	if (hw->fc.requested_mode == ixgbe_fc_default)
229		hw->fc.requested_mode = ixgbe_fc_full;
230
231	/*
232	 * Set up the 1G and 10G flow control advertisement registers so the
233	 * HW will be able to do fc autoneg once the cable is plugged in.  If
234	 * we link at 10G, the 1G advertisement is harmless and vice versa.
235	 */
236	switch (hw->phy.media_type) {
237	case ixgbe_media_type_fiber_fixed:
238	case ixgbe_media_type_fiber:
239	case ixgbe_media_type_backplane:
240		reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANA);
241		reg_bp = IXGBE_READ_REG(hw, IXGBE_AUTOC);
242		break;
243	case ixgbe_media_type_copper:
244		hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_ADVT,
245				     IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &reg_cu);
246		break;
247	default:
248		break;
249	}
250
251	/*
252	 * The possible values of fc.requested_mode are:
253	 * 0: Flow control is completely disabled
254	 * 1: Rx flow control is enabled (we can receive pause frames,
255	 *    but not send pause frames).
256	 * 2: Tx flow control is enabled (we can send pause frames but
257	 *    we do not support receiving pause frames).
258	 * 3: Both Rx and Tx flow control (symmetric) are enabled.
259	 * other: Invalid.
260	 */
261	switch (hw->fc.requested_mode) {
262	case ixgbe_fc_none:
263		/* Flow control completely disabled by software override. */
264		reg &= ~(IXGBE_PCS1GANA_SYM_PAUSE | IXGBE_PCS1GANA_ASM_PAUSE);
265		if (hw->phy.media_type == ixgbe_media_type_backplane)
266			reg_bp &= ~(IXGBE_AUTOC_SYM_PAUSE |
267				    IXGBE_AUTOC_ASM_PAUSE);
268		else if (hw->phy.media_type == ixgbe_media_type_copper)
269			reg_cu &= ~(IXGBE_TAF_SYM_PAUSE | IXGBE_TAF_ASM_PAUSE);
270		break;
271	case ixgbe_fc_tx_pause:
272		/*
273		 * Tx Flow control is enabled, and Rx Flow control is
274		 * disabled by software override.
275		 */
276		reg |= IXGBE_PCS1GANA_ASM_PAUSE;
277		reg &= ~IXGBE_PCS1GANA_SYM_PAUSE;
278		if (hw->phy.media_type == ixgbe_media_type_backplane) {
279			reg_bp |= IXGBE_AUTOC_ASM_PAUSE;
280			reg_bp &= ~IXGBE_AUTOC_SYM_PAUSE;
281		} else if (hw->phy.media_type == ixgbe_media_type_copper) {
282			reg_cu |= IXGBE_TAF_ASM_PAUSE;
283			reg_cu &= ~IXGBE_TAF_SYM_PAUSE;
284		}
285		break;
286	case ixgbe_fc_rx_pause:
287		/*
288		 * Rx Flow control is enabled and Tx Flow control is
289		 * disabled by software override. Since there really
290		 * isn't a way to advertise that we are capable of RX
291		 * Pause ONLY, we will advertise that we support both
292		 * symmetric and asymmetric Rx PAUSE, as such we fall
293		 * through to the fc_full statement.  Later, we will
294		 * disable the adapter's ability to send PAUSE frames.
295		 */
296	case ixgbe_fc_full:
297		/* Flow control (both Rx and Tx) is enabled by SW override. */
298		reg |= IXGBE_PCS1GANA_SYM_PAUSE | IXGBE_PCS1GANA_ASM_PAUSE;
299		if (hw->phy.media_type == ixgbe_media_type_backplane)
300			reg_bp |= IXGBE_AUTOC_SYM_PAUSE |
301				  IXGBE_AUTOC_ASM_PAUSE;
302		else if (hw->phy.media_type == ixgbe_media_type_copper)
303			reg_cu |= IXGBE_TAF_SYM_PAUSE | IXGBE_TAF_ASM_PAUSE;
304		break;
305	default:
306		ERROR_REPORT1(IXGBE_ERROR_ARGUMENT,
307			     "Flow control param set incorrectly\n");
308		ret_val = IXGBE_ERR_CONFIG;
309		goto out;
310		break;
311	}
312
313	if (hw->mac.type != ixgbe_mac_X540) {
314		/*
315		 * Enable auto-negotiation between the MAC & PHY;
316		 * the MAC will advertise clause 37 flow control.
317		 */
318		IXGBE_WRITE_REG(hw, IXGBE_PCS1GANA, reg);
319		reg = IXGBE_READ_REG(hw, IXGBE_PCS1GLCTL);
320
321		/* Disable AN timeout */
322		if (hw->fc.strict_ieee)
323			reg &= ~IXGBE_PCS1GLCTL_AN_1G_TIMEOUT_EN;
324
325		IXGBE_WRITE_REG(hw, IXGBE_PCS1GLCTL, reg);
326		DEBUGOUT1("Set up FC; PCS1GLCTL = 0x%08X\n", reg);
327	}
328
329	/*
330	 * AUTOC restart handles negotiation of 1G and 10G on backplane
331	 * and copper. There is no need to set the PCS1GCTL register.
332	 *
333	 */
334	if (hw->phy.media_type == ixgbe_media_type_backplane) {
335		reg_bp |= IXGBE_AUTOC_AN_RESTART;
336		/* Need the SW/FW semaphore around AUTOC writes if 82599 and
337		 * LESM is on, likewise reset_pipeline requries the lock as
338		 * it also writes AUTOC.
339		 */
340		if ((hw->mac.type == ixgbe_mac_82599EB) &&
341		    ixgbe_verify_lesm_fw_enabled_82599(hw)) {
342			ret_val = hw->mac.ops.acquire_swfw_sync(hw,
343							IXGBE_GSSR_MAC_CSR_SM);
344			if (ret_val != IXGBE_SUCCESS) {
345				ret_val = IXGBE_ERR_SWFW_SYNC;
346				goto out;
347			}
348			got_lock = TRUE;
349		}
350
351		IXGBE_WRITE_REG(hw, IXGBE_AUTOC, reg_bp);
352		if (hw->mac.type == ixgbe_mac_82599EB)
353			ixgbe_reset_pipeline_82599(hw);
354
355		if (got_lock)
356			hw->mac.ops.release_swfw_sync(hw,
357						      IXGBE_GSSR_MAC_CSR_SM);
358	} else if ((hw->phy.media_type == ixgbe_media_type_copper) &&
359		    (ixgbe_device_supports_autoneg_fc(hw))) {
360		hw->phy.ops.write_reg(hw, IXGBE_MDIO_AUTO_NEG_ADVT,
361				      IXGBE_MDIO_AUTO_NEG_DEV_TYPE, reg_cu);
362	}
363
364	DEBUGOUT1("Set up FC; IXGBE_AUTOC = 0x%08X\n", reg);
365out:
366	return ret_val;
367}
368
369/**
370 *  ixgbe_start_hw_generic - Prepare hardware for Tx/Rx
371 *  @hw: pointer to hardware structure
372 *
373 *  Starts the hardware by filling the bus info structure and media type, clears
374 *  all on chip counters, initializes receive address registers, multicast
375 *  table, VLAN filter table, calls routine to set up link and flow control
376 *  settings, and leaves transmit and receive units disabled and uninitialized
377 **/
378s32 ixgbe_start_hw_generic(struct ixgbe_hw *hw)
379{
380	s32 ret_val;
381	u32 ctrl_ext;
382
383	DEBUGFUNC("ixgbe_start_hw_generic");
384
385	/* Set the media type */
386	hw->phy.media_type = hw->mac.ops.get_media_type(hw);
387
388	/* PHY ops initialization must be done in reset_hw() */
389
390	/* Clear the VLAN filter table */
391	hw->mac.ops.clear_vfta(hw);
392
393	/* Clear statistics registers */
394	hw->mac.ops.clear_hw_cntrs(hw);
395
396	/* Set No Snoop Disable */
397	ctrl_ext = IXGBE_READ_REG(hw, IXGBE_CTRL_EXT);
398	ctrl_ext |= IXGBE_CTRL_EXT_NS_DIS;
399	IXGBE_WRITE_REG(hw, IXGBE_CTRL_EXT, ctrl_ext);
400	IXGBE_WRITE_FLUSH(hw);
401
402	/* Setup flow control */
403	ret_val = ixgbe_setup_fc(hw);
404	if (ret_val != IXGBE_SUCCESS)
405		goto out;
406
407	/* Clear adapter stopped flag */
408	hw->adapter_stopped = FALSE;
409
410out:
411	return ret_val;
412}
413
414/**
415 *  ixgbe_start_hw_gen2 - Init sequence for common device family
416 *  @hw: pointer to hw structure
417 *
418 * Performs the init sequence common to the second generation
419 * of 10 GbE devices.
420 * Devices in the second generation:
421 *     82599
422 *     X540
423 **/
424s32 ixgbe_start_hw_gen2(struct ixgbe_hw *hw)
425{
426	u32 i;
427	u32 regval;
428
429	/* Clear the rate limiters */
430	for (i = 0; i < hw->mac.max_tx_queues; i++) {
431		IXGBE_WRITE_REG(hw, IXGBE_RTTDQSEL, i);
432		IXGBE_WRITE_REG(hw, IXGBE_RTTBCNRC, 0);
433	}
434	IXGBE_WRITE_FLUSH(hw);
435
436	/* Disable relaxed ordering */
437	for (i = 0; i < hw->mac.max_tx_queues; i++) {
438		regval = IXGBE_READ_REG(hw, IXGBE_DCA_TXCTRL_82599(i));
439		regval &= ~IXGBE_DCA_TXCTRL_DESC_WRO_EN;
440		IXGBE_WRITE_REG(hw, IXGBE_DCA_TXCTRL_82599(i), regval);
441	}
442
443	for (i = 0; i < hw->mac.max_rx_queues; i++) {
444		regval = IXGBE_READ_REG(hw, IXGBE_DCA_RXCTRL(i));
445		regval &= ~(IXGBE_DCA_RXCTRL_DATA_WRO_EN |
446			    IXGBE_DCA_RXCTRL_HEAD_WRO_EN);
447		IXGBE_WRITE_REG(hw, IXGBE_DCA_RXCTRL(i), regval);
448	}
449
450	return IXGBE_SUCCESS;
451}
452
453/**
454 *  ixgbe_init_hw_generic - Generic hardware initialization
455 *  @hw: pointer to hardware structure
456 *
457 *  Initialize the hardware by resetting the hardware, filling the bus info
458 *  structure and media type, clears all on chip counters, initializes receive
459 *  address registers, multicast table, VLAN filter table, calls routine to set
460 *  up link and flow control settings, and leaves transmit and receive units
461 *  disabled and uninitialized
462 **/
463s32 ixgbe_init_hw_generic(struct ixgbe_hw *hw)
464{
465	s32 status;
466
467	DEBUGFUNC("ixgbe_init_hw_generic");
468
469	/* Reset the hardware */
470	status = hw->mac.ops.reset_hw(hw);
471
472	if (status == IXGBE_SUCCESS) {
473		/* Start the HW */
474		status = hw->mac.ops.start_hw(hw);
475	}
476
477	return status;
478}
479
480/**
481 *  ixgbe_clear_hw_cntrs_generic - Generic clear hardware counters
482 *  @hw: pointer to hardware structure
483 *
484 *  Clears all hardware statistics counters by reading them from the hardware
485 *  Statistics counters are clear on read.
486 **/
487s32 ixgbe_clear_hw_cntrs_generic(struct ixgbe_hw *hw)
488{
489	u16 i = 0;
490
491	DEBUGFUNC("ixgbe_clear_hw_cntrs_generic");
492
493	IXGBE_READ_REG(hw, IXGBE_CRCERRS);
494	IXGBE_READ_REG(hw, IXGBE_ILLERRC);
495	IXGBE_READ_REG(hw, IXGBE_ERRBC);
496	IXGBE_READ_REG(hw, IXGBE_MSPDC);
497	for (i = 0; i < 8; i++)
498		IXGBE_READ_REG(hw, IXGBE_MPC(i));
499
500	IXGBE_READ_REG(hw, IXGBE_MLFC);
501	IXGBE_READ_REG(hw, IXGBE_MRFC);
502	IXGBE_READ_REG(hw, IXGBE_RLEC);
503	IXGBE_READ_REG(hw, IXGBE_LXONTXC);
504	IXGBE_READ_REG(hw, IXGBE_LXOFFTXC);
505	if (hw->mac.type >= ixgbe_mac_82599EB) {
506		IXGBE_READ_REG(hw, IXGBE_LXONRXCNT);
507		IXGBE_READ_REG(hw, IXGBE_LXOFFRXCNT);
508	} else {
509		IXGBE_READ_REG(hw, IXGBE_LXONRXC);
510		IXGBE_READ_REG(hw, IXGBE_LXOFFRXC);
511	}
512
513	for (i = 0; i < 8; i++) {
514		IXGBE_READ_REG(hw, IXGBE_PXONTXC(i));
515		IXGBE_READ_REG(hw, IXGBE_PXOFFTXC(i));
516		if (hw->mac.type >= ixgbe_mac_82599EB) {
517			IXGBE_READ_REG(hw, IXGBE_PXONRXCNT(i));
518			IXGBE_READ_REG(hw, IXGBE_PXOFFRXCNT(i));
519		} else {
520			IXGBE_READ_REG(hw, IXGBE_PXONRXC(i));
521			IXGBE_READ_REG(hw, IXGBE_PXOFFRXC(i));
522		}
523	}
524	if (hw->mac.type >= ixgbe_mac_82599EB)
525		for (i = 0; i < 8; i++)
526			IXGBE_READ_REG(hw, IXGBE_PXON2OFFCNT(i));
527	IXGBE_READ_REG(hw, IXGBE_PRC64);
528	IXGBE_READ_REG(hw, IXGBE_PRC127);
529	IXGBE_READ_REG(hw, IXGBE_PRC255);
530	IXGBE_READ_REG(hw, IXGBE_PRC511);
531	IXGBE_READ_REG(hw, IXGBE_PRC1023);
532	IXGBE_READ_REG(hw, IXGBE_PRC1522);
533	IXGBE_READ_REG(hw, IXGBE_GPRC);
534	IXGBE_READ_REG(hw, IXGBE_BPRC);
535	IXGBE_READ_REG(hw, IXGBE_MPRC);
536	IXGBE_READ_REG(hw, IXGBE_GPTC);
537	IXGBE_READ_REG(hw, IXGBE_GORCL);
538	IXGBE_READ_REG(hw, IXGBE_GORCH);
539	IXGBE_READ_REG(hw, IXGBE_GOTCL);
540	IXGBE_READ_REG(hw, IXGBE_GOTCH);
541	if (hw->mac.type == ixgbe_mac_82598EB)
542		for (i = 0; i < 8; i++)
543			IXGBE_READ_REG(hw, IXGBE_RNBC(i));
544	IXGBE_READ_REG(hw, IXGBE_RUC);
545	IXGBE_READ_REG(hw, IXGBE_RFC);
546	IXGBE_READ_REG(hw, IXGBE_ROC);
547	IXGBE_READ_REG(hw, IXGBE_RJC);
548	IXGBE_READ_REG(hw, IXGBE_MNGPRC);
549	IXGBE_READ_REG(hw, IXGBE_MNGPDC);
550	IXGBE_READ_REG(hw, IXGBE_MNGPTC);
551	IXGBE_READ_REG(hw, IXGBE_TORL);
552	IXGBE_READ_REG(hw, IXGBE_TORH);
553	IXGBE_READ_REG(hw, IXGBE_TPR);
554	IXGBE_READ_REG(hw, IXGBE_TPT);
555	IXGBE_READ_REG(hw, IXGBE_PTC64);
556	IXGBE_READ_REG(hw, IXGBE_PTC127);
557	IXGBE_READ_REG(hw, IXGBE_PTC255);
558	IXGBE_READ_REG(hw, IXGBE_PTC511);
559	IXGBE_READ_REG(hw, IXGBE_PTC1023);
560	IXGBE_READ_REG(hw, IXGBE_PTC1522);
561	IXGBE_READ_REG(hw, IXGBE_MPTC);
562	IXGBE_READ_REG(hw, IXGBE_BPTC);
563	for (i = 0; i < 16; i++) {
564		IXGBE_READ_REG(hw, IXGBE_QPRC(i));
565		IXGBE_READ_REG(hw, IXGBE_QPTC(i));
566		if (hw->mac.type >= ixgbe_mac_82599EB) {
567			IXGBE_READ_REG(hw, IXGBE_QBRC_L(i));
568			IXGBE_READ_REG(hw, IXGBE_QBRC_H(i));
569			IXGBE_READ_REG(hw, IXGBE_QBTC_L(i));
570			IXGBE_READ_REG(hw, IXGBE_QBTC_H(i));
571			IXGBE_READ_REG(hw, IXGBE_QPRDC(i));
572		} else {
573			IXGBE_READ_REG(hw, IXGBE_QBRC(i));
574			IXGBE_READ_REG(hw, IXGBE_QBTC(i));
575		}
576	}
577
578	if (hw->mac.type == ixgbe_mac_X540) {
579		if (hw->phy.id == 0)
580			ixgbe_identify_phy(hw);
581		hw->phy.ops.read_reg(hw, IXGBE_PCRC8ECL,
582				     IXGBE_MDIO_PCS_DEV_TYPE, &i);
583		hw->phy.ops.read_reg(hw, IXGBE_PCRC8ECH,
584				     IXGBE_MDIO_PCS_DEV_TYPE, &i);
585		hw->phy.ops.read_reg(hw, IXGBE_LDPCECL,
586				     IXGBE_MDIO_PCS_DEV_TYPE, &i);
587		hw->phy.ops.read_reg(hw, IXGBE_LDPCECH,
588				     IXGBE_MDIO_PCS_DEV_TYPE, &i);
589	}
590
591	return IXGBE_SUCCESS;
592}
593
594/**
595 *  ixgbe_read_pba_string_generic - Reads part number string from EEPROM
596 *  @hw: pointer to hardware structure
597 *  @pba_num: stores the part number string from the EEPROM
598 *  @pba_num_size: part number string buffer length
599 *
600 *  Reads the part number string from the EEPROM.
601 **/
602s32 ixgbe_read_pba_string_generic(struct ixgbe_hw *hw, u8 *pba_num,
603				  u32 pba_num_size)
604{
605	s32 ret_val;
606	u16 data;
607	u16 pba_ptr;
608	u16 offset;
609	u16 length;
610
611	DEBUGFUNC("ixgbe_read_pba_string_generic");
612
613	if (pba_num == NULL) {
614		DEBUGOUT("PBA string buffer was null\n");
615		return IXGBE_ERR_INVALID_ARGUMENT;
616	}
617
618	ret_val = hw->eeprom.ops.read(hw, IXGBE_PBANUM0_PTR, &data);
619	if (ret_val) {
620		DEBUGOUT("NVM Read Error\n");
621		return ret_val;
622	}
623
624	ret_val = hw->eeprom.ops.read(hw, IXGBE_PBANUM1_PTR, &pba_ptr);
625	if (ret_val) {
626		DEBUGOUT("NVM Read Error\n");
627		return ret_val;
628	}
629
630	/*
631	 * if data is not ptr guard the PBA must be in legacy format which
632	 * means pba_ptr is actually our second data word for the PBA number
633	 * and we can decode it into an ascii string
634	 */
635	if (data != IXGBE_PBANUM_PTR_GUARD) {
636		DEBUGOUT("NVM PBA number is not stored as string\n");
637
638		/* we will need 11 characters to store the PBA */
639		if (pba_num_size < 11) {
640			DEBUGOUT("PBA string buffer too small\n");
641			return IXGBE_ERR_NO_SPACE;
642		}
643
644		/* extract hex string from data and pba_ptr */
645		pba_num[0] = (data >> 12) & 0xF;
646		pba_num[1] = (data >> 8) & 0xF;
647		pba_num[2] = (data >> 4) & 0xF;
648		pba_num[3] = data & 0xF;
649		pba_num[4] = (pba_ptr >> 12) & 0xF;
650		pba_num[5] = (pba_ptr >> 8) & 0xF;
651		pba_num[6] = '-';
652		pba_num[7] = 0;
653		pba_num[8] = (pba_ptr >> 4) & 0xF;
654		pba_num[9] = pba_ptr & 0xF;
655
656		/* put a null character on the end of our string */
657		pba_num[10] = '\0';
658
659		/* switch all the data but the '-' to hex char */
660		for (offset = 0; offset < 10; offset++) {
661			if (pba_num[offset] < 0xA)
662				pba_num[offset] += '0';
663			else if (pba_num[offset] < 0x10)
664				pba_num[offset] += 'A' - 0xA;
665		}
666
667		return IXGBE_SUCCESS;
668	}
669
670	ret_val = hw->eeprom.ops.read(hw, pba_ptr, &length);
671	if (ret_val) {
672		DEBUGOUT("NVM Read Error\n");
673		return ret_val;
674	}
675
676	if (length == 0xFFFF || length == 0) {
677		DEBUGOUT("NVM PBA number section invalid length\n");
678		return IXGBE_ERR_PBA_SECTION;
679	}
680
681	/* check if pba_num buffer is big enough */
682	if (pba_num_size  < (((u32)length * 2) - 1)) {
683		DEBUGOUT("PBA string buffer too small\n");
684		return IXGBE_ERR_NO_SPACE;
685	}
686
687	/* trim pba length from start of string */
688	pba_ptr++;
689	length--;
690
691	for (offset = 0; offset < length; offset++) {
692		ret_val = hw->eeprom.ops.read(hw, pba_ptr + offset, &data);
693		if (ret_val) {
694			DEBUGOUT("NVM Read Error\n");
695			return ret_val;
696		}
697		pba_num[offset * 2] = (u8)(data >> 8);
698		pba_num[(offset * 2) + 1] = (u8)(data & 0xFF);
699	}
700	pba_num[offset * 2] = '\0';
701
702	return IXGBE_SUCCESS;
703}
704
705/**
706 *  ixgbe_read_pba_num_generic - Reads part number from EEPROM
707 *  @hw: pointer to hardware structure
708 *  @pba_num: stores the part number from the EEPROM
709 *
710 *  Reads the part number from the EEPROM.
711 **/
712s32 ixgbe_read_pba_num_generic(struct ixgbe_hw *hw, u32 *pba_num)
713{
714	s32 ret_val;
715	u16 data;
716
717	DEBUGFUNC("ixgbe_read_pba_num_generic");
718
719	ret_val = hw->eeprom.ops.read(hw, IXGBE_PBANUM0_PTR, &data);
720	if (ret_val) {
721		DEBUGOUT("NVM Read Error\n");
722		return ret_val;
723	} else if (data == IXGBE_PBANUM_PTR_GUARD) {
724		DEBUGOUT("NVM Not supported\n");
725		return IXGBE_NOT_IMPLEMENTED;
726	}
727	*pba_num = (u32)(data << 16);
728
729	ret_val = hw->eeprom.ops.read(hw, IXGBE_PBANUM1_PTR, &data);
730	if (ret_val) {
731		DEBUGOUT("NVM Read Error\n");
732		return ret_val;
733	}
734	*pba_num |= data;
735
736	return IXGBE_SUCCESS;
737}
738
739/**
740 *  ixgbe_read_pba_raw
741 *  @hw: pointer to the HW structure
742 *  @eeprom_buf: optional pointer to EEPROM image
743 *  @eeprom_buf_size: size of EEPROM image in words
744 *  @max_pba_block_size: PBA block size limit
745 *  @pba: pointer to output PBA structure
746 *
747 *  Reads PBA from EEPROM image when eeprom_buf is not NULL.
748 *  Reads PBA from physical EEPROM device when eeprom_buf is NULL.
749 *
750 **/
751s32 ixgbe_read_pba_raw(struct ixgbe_hw *hw, u16 *eeprom_buf,
752		       u32 eeprom_buf_size, u16 max_pba_block_size,
753		       struct ixgbe_pba *pba)
754{
755	s32 ret_val;
756	u16 pba_block_size;
757
758	if (pba == NULL)
759		return IXGBE_ERR_PARAM;
760
761	if (eeprom_buf == NULL) {
762		ret_val = hw->eeprom.ops.read_buffer(hw, IXGBE_PBANUM0_PTR, 2,
763						     &pba->word[0]);
764		if (ret_val)
765			return ret_val;
766	} else {
767		if (eeprom_buf_size > IXGBE_PBANUM1_PTR) {
768			pba->word[0] = eeprom_buf[IXGBE_PBANUM0_PTR];
769			pba->word[1] = eeprom_buf[IXGBE_PBANUM1_PTR];
770		} else {
771			return IXGBE_ERR_PARAM;
772		}
773	}
774
775	if (pba->word[0] == IXGBE_PBANUM_PTR_GUARD) {
776		if (pba->pba_block == NULL)
777			return IXGBE_ERR_PARAM;
778
779		ret_val = ixgbe_get_pba_block_size(hw, eeprom_buf,
780						   eeprom_buf_size,
781						   &pba_block_size);
782		if (ret_val)
783			return ret_val;
784
785		if (pba_block_size > max_pba_block_size)
786			return IXGBE_ERR_PARAM;
787
788		if (eeprom_buf == NULL) {
789			ret_val = hw->eeprom.ops.read_buffer(hw, pba->word[1],
790							     pba_block_size,
791							     pba->pba_block);
792			if (ret_val)
793				return ret_val;
794		} else {
795			if (eeprom_buf_size > (u32)(pba->word[1] +
796					      pba->pba_block[0])) {
797				memcpy(pba->pba_block,
798				       &eeprom_buf[pba->word[1]],
799				       pba_block_size * sizeof(u16));
800			} else {
801				return IXGBE_ERR_PARAM;
802			}
803		}
804	}
805
806	return IXGBE_SUCCESS;
807}
808
809/**
810 *  ixgbe_write_pba_raw
811 *  @hw: pointer to the HW structure
812 *  @eeprom_buf: optional pointer to EEPROM image
813 *  @eeprom_buf_size: size of EEPROM image in words
814 *  @pba: pointer to PBA structure
815 *
816 *  Writes PBA to EEPROM image when eeprom_buf is not NULL.
817 *  Writes PBA to physical EEPROM device when eeprom_buf is NULL.
818 *
819 **/
820s32 ixgbe_write_pba_raw(struct ixgbe_hw *hw, u16 *eeprom_buf,
821			u32 eeprom_buf_size, struct ixgbe_pba *pba)
822{
823	s32 ret_val;
824
825	if (pba == NULL)
826		return IXGBE_ERR_PARAM;
827
828	if (eeprom_buf == NULL) {
829		ret_val = hw->eeprom.ops.write_buffer(hw, IXGBE_PBANUM0_PTR, 2,
830						      &pba->word[0]);
831		if (ret_val)
832			return ret_val;
833	} else {
834		if (eeprom_buf_size > IXGBE_PBANUM1_PTR) {
835			eeprom_buf[IXGBE_PBANUM0_PTR] = pba->word[0];
836			eeprom_buf[IXGBE_PBANUM1_PTR] = pba->word[1];
837		} else {
838			return IXGBE_ERR_PARAM;
839		}
840	}
841
842	if (pba->word[0] == IXGBE_PBANUM_PTR_GUARD) {
843		if (pba->pba_block == NULL)
844			return IXGBE_ERR_PARAM;
845
846		if (eeprom_buf == NULL) {
847			ret_val = hw->eeprom.ops.write_buffer(hw, pba->word[1],
848							      pba->pba_block[0],
849							      pba->pba_block);
850			if (ret_val)
851				return ret_val;
852		} else {
853			if (eeprom_buf_size > (u32)(pba->word[1] +
854					      pba->pba_block[0])) {
855				memcpy(&eeprom_buf[pba->word[1]],
856				       pba->pba_block,
857				       pba->pba_block[0] * sizeof(u16));
858			} else {
859				return IXGBE_ERR_PARAM;
860			}
861		}
862	}
863
864	return IXGBE_SUCCESS;
865}
866
867/**
868 *  ixgbe_get_pba_block_size
869 *  @hw: pointer to the HW structure
870 *  @eeprom_buf: optional pointer to EEPROM image
871 *  @eeprom_buf_size: size of EEPROM image in words
872 *  @pba_data_size: pointer to output variable
873 *
874 *  Returns the size of the PBA block in words. Function operates on EEPROM
875 *  image if the eeprom_buf pointer is not NULL otherwise it accesses physical
876 *  EEPROM device.
877 *
878 **/
879s32 ixgbe_get_pba_block_size(struct ixgbe_hw *hw, u16 *eeprom_buf,
880			     u32 eeprom_buf_size, u16 *pba_block_size)
881{
882	s32 ret_val;
883	u16 pba_word[2];
884	u16 length;
885
886	DEBUGFUNC("ixgbe_get_pba_block_size");
887
888	if (eeprom_buf == NULL) {
889		ret_val = hw->eeprom.ops.read_buffer(hw, IXGBE_PBANUM0_PTR, 2,
890						     &pba_word[0]);
891		if (ret_val)
892			return ret_val;
893	} else {
894		if (eeprom_buf_size > IXGBE_PBANUM1_PTR) {
895			pba_word[0] = eeprom_buf[IXGBE_PBANUM0_PTR];
896			pba_word[1] = eeprom_buf[IXGBE_PBANUM1_PTR];
897		} else {
898			return IXGBE_ERR_PARAM;
899		}
900	}
901
902	if (pba_word[0] == IXGBE_PBANUM_PTR_GUARD) {
903		if (eeprom_buf == NULL) {
904			ret_val = hw->eeprom.ops.read(hw, pba_word[1] + 0,
905						      &length);
906			if (ret_val)
907				return ret_val;
908		} else {
909			if (eeprom_buf_size > pba_word[1])
910				length = eeprom_buf[pba_word[1] + 0];
911			else
912				return IXGBE_ERR_PARAM;
913		}
914
915		if (length == 0xFFFF || length == 0)
916			return IXGBE_ERR_PBA_SECTION;
917	} else {
918		/* PBA number in legacy format, there is no PBA Block. */
919		length = 0;
920	}
921
922	if (pba_block_size != NULL)
923		*pba_block_size = length;
924
925	return IXGBE_SUCCESS;
926}
927
928/**
929 *  ixgbe_get_mac_addr_generic - Generic get MAC address
930 *  @hw: pointer to hardware structure
931 *  @mac_addr: Adapter MAC address
932 *
933 *  Reads the adapter's MAC address from first Receive Address Register (RAR0)
934 *  A reset of the adapter must be performed prior to calling this function
935 *  in order for the MAC address to have been loaded from the EEPROM into RAR0
936 **/
937s32 ixgbe_get_mac_addr_generic(struct ixgbe_hw *hw, u8 *mac_addr)
938{
939	u32 rar_high;
940	u32 rar_low;
941	u16 i;
942
943	DEBUGFUNC("ixgbe_get_mac_addr_generic");
944
945	rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(0));
946	rar_low = IXGBE_READ_REG(hw, IXGBE_RAL(0));
947
948	for (i = 0; i < 4; i++)
949		mac_addr[i] = (u8)(rar_low >> (i*8));
950
951	for (i = 0; i < 2; i++)
952		mac_addr[i+4] = (u8)(rar_high >> (i*8));
953
954	return IXGBE_SUCCESS;
955}
956
957/**
958 *  ixgbe_set_pci_config_data_generic - Generic store PCI bus info
959 *  @hw: pointer to hardware structure
960 *  @link_status: the link status returned by the PCI config space
961 *
962 *  Stores the PCI bus info (speed, width, type) within the ixgbe_hw structure
963 **/
964void ixgbe_set_pci_config_data_generic(struct ixgbe_hw *hw, u16 link_status)
965{
966	struct ixgbe_mac_info *mac = &hw->mac;
967
968	hw->bus.type = ixgbe_bus_type_pci_express;
969
970	switch (link_status & IXGBE_PCI_LINK_WIDTH) {
971	case IXGBE_PCI_LINK_WIDTH_1:
972		hw->bus.width = ixgbe_bus_width_pcie_x1;
973		break;
974	case IXGBE_PCI_LINK_WIDTH_2:
975		hw->bus.width = ixgbe_bus_width_pcie_x2;
976		break;
977	case IXGBE_PCI_LINK_WIDTH_4:
978		hw->bus.width = ixgbe_bus_width_pcie_x4;
979		break;
980	case IXGBE_PCI_LINK_WIDTH_8:
981		hw->bus.width = ixgbe_bus_width_pcie_x8;
982		break;
983	default:
984		hw->bus.width = ixgbe_bus_width_unknown;
985		break;
986	}
987
988	switch (link_status & IXGBE_PCI_LINK_SPEED) {
989	case IXGBE_PCI_LINK_SPEED_2500:
990		hw->bus.speed = ixgbe_bus_speed_2500;
991		break;
992	case IXGBE_PCI_LINK_SPEED_5000:
993		hw->bus.speed = ixgbe_bus_speed_5000;
994		break;
995	case IXGBE_PCI_LINK_SPEED_8000:
996		hw->bus.speed = ixgbe_bus_speed_8000;
997		break;
998	default:
999		hw->bus.speed = ixgbe_bus_speed_unknown;
1000		break;
1001	}
1002
1003	mac->ops.set_lan_id(hw);
1004}
1005
1006/**
1007 *  ixgbe_get_bus_info_generic - Generic set PCI bus info
1008 *  @hw: pointer to hardware structure
1009 *
1010 *  Gets the PCI bus info (speed, width, type) then calls helper function to
1011 *  store this data within the ixgbe_hw structure.
1012 **/
1013s32 ixgbe_get_bus_info_generic(struct ixgbe_hw *hw)
1014{
1015	u16 link_status;
1016
1017	DEBUGFUNC("ixgbe_get_bus_info_generic");
1018
1019	/* Get the negotiated link width and speed from PCI config space */
1020	link_status = IXGBE_READ_PCIE_WORD(hw, IXGBE_PCI_LINK_STATUS);
1021
1022	ixgbe_set_pci_config_data_generic(hw, link_status);
1023
1024	return IXGBE_SUCCESS;
1025}
1026
1027/**
1028 *  ixgbe_set_lan_id_multi_port_pcie - Set LAN id for PCIe multiple port devices
1029 *  @hw: pointer to the HW structure
1030 *
1031 *  Determines the LAN function id by reading memory-mapped registers
1032 *  and swaps the port value if requested.
1033 **/
1034void ixgbe_set_lan_id_multi_port_pcie(struct ixgbe_hw *hw)
1035{
1036	struct ixgbe_bus_info *bus = &hw->bus;
1037	u32 reg;
1038
1039	DEBUGFUNC("ixgbe_set_lan_id_multi_port_pcie");
1040
1041	reg = IXGBE_READ_REG(hw, IXGBE_STATUS);
1042	bus->func = (reg & IXGBE_STATUS_LAN_ID) >> IXGBE_STATUS_LAN_ID_SHIFT;
1043	bus->lan_id = bus->func;
1044
1045	/* check for a port swap */
1046	reg = IXGBE_READ_REG(hw, IXGBE_FACTPS);
1047	if (reg & IXGBE_FACTPS_LFS)
1048		bus->func ^= 0x1;
1049}
1050
1051/**
1052 *  ixgbe_stop_adapter_generic - Generic stop Tx/Rx units
1053 *  @hw: pointer to hardware structure
1054 *
1055 *  Sets the adapter_stopped flag within ixgbe_hw struct. Clears interrupts,
1056 *  disables transmit and receive units. The adapter_stopped flag is used by
1057 *  the shared code and drivers to determine if the adapter is in a stopped
1058 *  state and should not touch the hardware.
1059 **/
1060s32 ixgbe_stop_adapter_generic(struct ixgbe_hw *hw)
1061{
1062	u32 reg_val;
1063	u16 i;
1064
1065	DEBUGFUNC("ixgbe_stop_adapter_generic");
1066
1067	/*
1068	 * Set the adapter_stopped flag so other driver functions stop touching
1069	 * the hardware
1070	 */
1071	hw->adapter_stopped = TRUE;
1072
1073	/* Disable the receive unit */
1074	IXGBE_WRITE_REG(hw, IXGBE_RXCTRL, 0);
1075
1076	/* Clear interrupt mask to stop interrupts from being generated */
1077	IXGBE_WRITE_REG(hw, IXGBE_EIMC, IXGBE_IRQ_CLEAR_MASK);
1078
1079	/* Clear any pending interrupts, flush previous writes */
1080	IXGBE_READ_REG(hw, IXGBE_EICR);
1081
1082	/* Disable the transmit unit.  Each queue must be disabled. */
1083	for (i = 0; i < hw->mac.max_tx_queues; i++)
1084		IXGBE_WRITE_REG(hw, IXGBE_TXDCTL(i), IXGBE_TXDCTL_SWFLSH);
1085
1086	/* Disable the receive unit by stopping each queue */
1087	for (i = 0; i < hw->mac.max_rx_queues; i++) {
1088		reg_val = IXGBE_READ_REG(hw, IXGBE_RXDCTL(i));
1089		reg_val &= ~IXGBE_RXDCTL_ENABLE;
1090		reg_val |= IXGBE_RXDCTL_SWFLSH;
1091		IXGBE_WRITE_REG(hw, IXGBE_RXDCTL(i), reg_val);
1092	}
1093
1094	/* flush all queues disables */
1095	IXGBE_WRITE_FLUSH(hw);
1096	msec_delay(2);
1097
1098	/*
1099	 * Prevent the PCI-E bus from from hanging by disabling PCI-E master
1100	 * access and verify no pending requests
1101	 */
1102	return ixgbe_disable_pcie_master(hw);
1103}
1104
1105/**
1106 *  ixgbe_led_on_generic - Turns on the software controllable LEDs.
1107 *  @hw: pointer to hardware structure
1108 *  @index: led number to turn on
1109 **/
1110s32 ixgbe_led_on_generic(struct ixgbe_hw *hw, u32 index)
1111{
1112	u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
1113
1114	DEBUGFUNC("ixgbe_led_on_generic");
1115
1116	/* To turn on the LED, set mode to ON. */
1117	led_reg &= ~IXGBE_LED_MODE_MASK(index);
1118	led_reg |= IXGBE_LED_ON << IXGBE_LED_MODE_SHIFT(index);
1119	IXGBE_WRITE_REG(hw, IXGBE_LEDCTL, led_reg);
1120	IXGBE_WRITE_FLUSH(hw);
1121
1122	return IXGBE_SUCCESS;
1123}
1124
1125/**
1126 *  ixgbe_led_off_generic - Turns off the software controllable LEDs.
1127 *  @hw: pointer to hardware structure
1128 *  @index: led number to turn off
1129 **/
1130s32 ixgbe_led_off_generic(struct ixgbe_hw *hw, u32 index)
1131{
1132	u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
1133
1134	DEBUGFUNC("ixgbe_led_off_generic");
1135
1136	/* To turn off the LED, set mode to OFF. */
1137	led_reg &= ~IXGBE_LED_MODE_MASK(index);
1138	led_reg |= IXGBE_LED_OFF << IXGBE_LED_MODE_SHIFT(index);
1139	IXGBE_WRITE_REG(hw, IXGBE_LEDCTL, led_reg);
1140	IXGBE_WRITE_FLUSH(hw);
1141
1142	return IXGBE_SUCCESS;
1143}
1144
1145/**
1146 *  ixgbe_init_eeprom_params_generic - Initialize EEPROM params
1147 *  @hw: pointer to hardware structure
1148 *
1149 *  Initializes the EEPROM parameters ixgbe_eeprom_info within the
1150 *  ixgbe_hw struct in order to set up EEPROM access.
1151 **/
1152s32 ixgbe_init_eeprom_params_generic(struct ixgbe_hw *hw)
1153{
1154	struct ixgbe_eeprom_info *eeprom = &hw->eeprom;
1155	u32 eec;
1156	u16 eeprom_size;
1157
1158	DEBUGFUNC("ixgbe_init_eeprom_params_generic");
1159
1160	if (eeprom->type == ixgbe_eeprom_uninitialized) {
1161		eeprom->type = ixgbe_eeprom_none;
1162		/* Set default semaphore delay to 10ms which is a well
1163		 * tested value */
1164		eeprom->semaphore_delay = 10;
1165		/* Clear EEPROM page size, it will be initialized as needed */
1166		eeprom->word_page_size = 0;
1167
1168		/*
1169		 * Check for EEPROM present first.
1170		 * If not present leave as none
1171		 */
1172		eec = IXGBE_READ_REG(hw, IXGBE_EEC);
1173		if (eec & IXGBE_EEC_PRES) {
1174			eeprom->type = ixgbe_eeprom_spi;
1175
1176			/*
1177			 * SPI EEPROM is assumed here.  This code would need to
1178			 * change if a future EEPROM is not SPI.
1179			 */
1180			eeprom_size = (u16)((eec & IXGBE_EEC_SIZE) >>
1181					    IXGBE_EEC_SIZE_SHIFT);
1182			eeprom->word_size = 1 << (eeprom_size +
1183					     IXGBE_EEPROM_WORD_SIZE_SHIFT);
1184		}
1185
1186		if (eec & IXGBE_EEC_ADDR_SIZE)
1187			eeprom->address_bits = 16;
1188		else
1189			eeprom->address_bits = 8;
1190		DEBUGOUT3("Eeprom params: type = %d, size = %d, address bits: "
1191			  "%d\n", eeprom->type, eeprom->word_size,
1192			  eeprom->address_bits);
1193	}
1194
1195	return IXGBE_SUCCESS;
1196}
1197
1198/**
1199 *  ixgbe_write_eeprom_buffer_bit_bang_generic - Write EEPROM using bit-bang
1200 *  @hw: pointer to hardware structure
1201 *  @offset: offset within the EEPROM to write
1202 *  @words: number of word(s)
1203 *  @data: 16 bit word(s) to write to EEPROM
1204 *
1205 *  Reads 16 bit word(s) from EEPROM through bit-bang method
1206 **/
1207s32 ixgbe_write_eeprom_buffer_bit_bang_generic(struct ixgbe_hw *hw, u16 offset,
1208					       u16 words, u16 *data)
1209{
1210	s32 status = IXGBE_SUCCESS;
1211	u16 i, count;
1212
1213	DEBUGFUNC("ixgbe_write_eeprom_buffer_bit_bang_generic");
1214
1215	hw->eeprom.ops.init_params(hw);
1216
1217	if (words == 0) {
1218		status = IXGBE_ERR_INVALID_ARGUMENT;
1219		goto out;
1220	}
1221
1222	if (offset + words > hw->eeprom.word_size) {
1223		status = IXGBE_ERR_EEPROM;
1224		goto out;
1225	}
1226
1227	/*
1228	 * The EEPROM page size cannot be queried from the chip. We do lazy
1229	 * initialization. It is worth to do that when we write large buffer.
1230	 */
1231	if ((hw->eeprom.word_page_size == 0) &&
1232	    (words > IXGBE_EEPROM_PAGE_SIZE_MAX))
1233		ixgbe_detect_eeprom_page_size_generic(hw, offset);
1234
1235	/*
1236	 * We cannot hold synchronization semaphores for too long
1237	 * to avoid other entity starvation. However it is more efficient
1238	 * to read in bursts than synchronizing access for each word.
1239	 */
1240	for (i = 0; i < words; i += IXGBE_EEPROM_RD_BUFFER_MAX_COUNT) {
1241		count = (words - i) / IXGBE_EEPROM_RD_BUFFER_MAX_COUNT > 0 ?
1242			IXGBE_EEPROM_RD_BUFFER_MAX_COUNT : (words - i);
1243		status = ixgbe_write_eeprom_buffer_bit_bang(hw, offset + i,
1244							    count, &data[i]);
1245
1246		if (status != IXGBE_SUCCESS)
1247			break;
1248	}
1249
1250out:
1251	return status;
1252}
1253
1254/**
1255 *  ixgbe_write_eeprom_buffer_bit_bang - Writes 16 bit word(s) to EEPROM
1256 *  @hw: pointer to hardware structure
1257 *  @offset: offset within the EEPROM to be written to
1258 *  @words: number of word(s)
1259 *  @data: 16 bit word(s) to be written to the EEPROM
1260 *
1261 *  If ixgbe_eeprom_update_checksum is not called after this function, the
1262 *  EEPROM will most likely contain an invalid checksum.
1263 **/
1264static s32 ixgbe_write_eeprom_buffer_bit_bang(struct ixgbe_hw *hw, u16 offset,
1265					      u16 words, u16 *data)
1266{
1267	s32 status;
1268	u16 word;
1269	u16 page_size;
1270	u16 i;
1271	u8 write_opcode = IXGBE_EEPROM_WRITE_OPCODE_SPI;
1272
1273	DEBUGFUNC("ixgbe_write_eeprom_buffer_bit_bang");
1274
1275	/* Prepare the EEPROM for writing  */
1276	status = ixgbe_acquire_eeprom(hw);
1277
1278	if (status == IXGBE_SUCCESS) {
1279		if (ixgbe_ready_eeprom(hw) != IXGBE_SUCCESS) {
1280			ixgbe_release_eeprom(hw);
1281			status = IXGBE_ERR_EEPROM;
1282		}
1283	}
1284
1285	if (status == IXGBE_SUCCESS) {
1286		for (i = 0; i < words; i++) {
1287			ixgbe_standby_eeprom(hw);
1288
1289			/*  Send the WRITE ENABLE command (8 bit opcode )  */
1290			ixgbe_shift_out_eeprom_bits(hw,
1291						   IXGBE_EEPROM_WREN_OPCODE_SPI,
1292						   IXGBE_EEPROM_OPCODE_BITS);
1293
1294			ixgbe_standby_eeprom(hw);
1295
1296			/*
1297			 * Some SPI eeproms use the 8th address bit embedded
1298			 * in the opcode
1299			 */
1300			if ((hw->eeprom.address_bits == 8) &&
1301			    ((offset + i) >= 128))
1302				write_opcode |= IXGBE_EEPROM_A8_OPCODE_SPI;
1303
1304			/* Send the Write command (8-bit opcode + addr) */
1305			ixgbe_shift_out_eeprom_bits(hw, write_opcode,
1306						    IXGBE_EEPROM_OPCODE_BITS);
1307			ixgbe_shift_out_eeprom_bits(hw, (u16)((offset + i) * 2),
1308						    hw->eeprom.address_bits);
1309
1310			page_size = hw->eeprom.word_page_size;
1311
1312			/* Send the data in burst via SPI*/
1313			do {
1314				word = data[i];
1315				word = (word >> 8) | (word << 8);
1316				ixgbe_shift_out_eeprom_bits(hw, word, 16);
1317
1318				if (page_size == 0)
1319					break;
1320
1321				/* do not wrap around page */
1322				if (((offset + i) & (page_size - 1)) ==
1323				    (page_size - 1))
1324					break;
1325			} while (++i < words);
1326
1327			ixgbe_standby_eeprom(hw);
1328			msec_delay(10);
1329		}
1330		/* Done with writing - release the EEPROM */
1331		ixgbe_release_eeprom(hw);
1332	}
1333
1334	return status;
1335}
1336
1337/**
1338 *  ixgbe_write_eeprom_generic - Writes 16 bit value to EEPROM
1339 *  @hw: pointer to hardware structure
1340 *  @offset: offset within the EEPROM to be written to
1341 *  @data: 16 bit word to be written to the EEPROM
1342 *
1343 *  If ixgbe_eeprom_update_checksum is not called after this function, the
1344 *  EEPROM will most likely contain an invalid checksum.
1345 **/
1346s32 ixgbe_write_eeprom_generic(struct ixgbe_hw *hw, u16 offset, u16 data)
1347{
1348	s32 status;
1349
1350	DEBUGFUNC("ixgbe_write_eeprom_generic");
1351
1352	hw->eeprom.ops.init_params(hw);
1353
1354	if (offset >= hw->eeprom.word_size) {
1355		status = IXGBE_ERR_EEPROM;
1356		goto out;
1357	}
1358
1359	status = ixgbe_write_eeprom_buffer_bit_bang(hw, offset, 1, &data);
1360
1361out:
1362	return status;
1363}
1364
1365/**
1366 *  ixgbe_read_eeprom_buffer_bit_bang_generic - Read EEPROM using bit-bang
1367 *  @hw: pointer to hardware structure
1368 *  @offset: offset within the EEPROM to be read
1369 *  @data: read 16 bit words(s) from EEPROM
1370 *  @words: number of word(s)
1371 *
1372 *  Reads 16 bit word(s) from EEPROM through bit-bang method
1373 **/
1374s32 ixgbe_read_eeprom_buffer_bit_bang_generic(struct ixgbe_hw *hw, u16 offset,
1375					      u16 words, u16 *data)
1376{
1377	s32 status = IXGBE_SUCCESS;
1378	u16 i, count;
1379
1380	DEBUGFUNC("ixgbe_read_eeprom_buffer_bit_bang_generic");
1381
1382	hw->eeprom.ops.init_params(hw);
1383
1384	if (words == 0) {
1385		status = IXGBE_ERR_INVALID_ARGUMENT;
1386		goto out;
1387	}
1388
1389	if (offset + words > hw->eeprom.word_size) {
1390		status = IXGBE_ERR_EEPROM;
1391		goto out;
1392	}
1393
1394	/*
1395	 * We cannot hold synchronization semaphores for too long
1396	 * to avoid other entity starvation. However it is more efficient
1397	 * to read in bursts than synchronizing access for each word.
1398	 */
1399	for (i = 0; i < words; i += IXGBE_EEPROM_RD_BUFFER_MAX_COUNT) {
1400		count = (words - i) / IXGBE_EEPROM_RD_BUFFER_MAX_COUNT > 0 ?
1401			IXGBE_EEPROM_RD_BUFFER_MAX_COUNT : (words - i);
1402
1403		status = ixgbe_read_eeprom_buffer_bit_bang(hw, offset + i,
1404							   count, &data[i]);
1405
1406		if (status != IXGBE_SUCCESS)
1407			break;
1408	}
1409
1410out:
1411	return status;
1412}
1413
1414/**
1415 *  ixgbe_read_eeprom_buffer_bit_bang - Read EEPROM using bit-bang
1416 *  @hw: pointer to hardware structure
1417 *  @offset: offset within the EEPROM to be read
1418 *  @words: number of word(s)
1419 *  @data: read 16 bit word(s) from EEPROM
1420 *
1421 *  Reads 16 bit word(s) from EEPROM through bit-bang method
1422 **/
1423static s32 ixgbe_read_eeprom_buffer_bit_bang(struct ixgbe_hw *hw, u16 offset,
1424					     u16 words, u16 *data)
1425{
1426	s32 status;
1427	u16 word_in;
1428	u8 read_opcode = IXGBE_EEPROM_READ_OPCODE_SPI;
1429	u16 i;
1430
1431	DEBUGFUNC("ixgbe_read_eeprom_buffer_bit_bang");
1432
1433	/* Prepare the EEPROM for reading  */
1434	status = ixgbe_acquire_eeprom(hw);
1435
1436	if (status == IXGBE_SUCCESS) {
1437		if (ixgbe_ready_eeprom(hw) != IXGBE_SUCCESS) {
1438			ixgbe_release_eeprom(hw);
1439			status = IXGBE_ERR_EEPROM;
1440		}
1441	}
1442
1443	if (status == IXGBE_SUCCESS) {
1444		for (i = 0; i < words; i++) {
1445			ixgbe_standby_eeprom(hw);
1446			/*
1447			 * Some SPI eeproms use the 8th address bit embedded
1448			 * in the opcode
1449			 */
1450			if ((hw->eeprom.address_bits == 8) &&
1451			    ((offset + i) >= 128))
1452				read_opcode |= IXGBE_EEPROM_A8_OPCODE_SPI;
1453
1454			/* Send the READ command (opcode + addr) */
1455			ixgbe_shift_out_eeprom_bits(hw, read_opcode,
1456						    IXGBE_EEPROM_OPCODE_BITS);
1457			ixgbe_shift_out_eeprom_bits(hw, (u16)((offset + i) * 2),
1458						    hw->eeprom.address_bits);
1459
1460			/* Read the data. */
1461			word_in = ixgbe_shift_in_eeprom_bits(hw, 16);
1462			data[i] = (word_in >> 8) | (word_in << 8);
1463		}
1464
1465		/* End this read operation */
1466		ixgbe_release_eeprom(hw);
1467	}
1468
1469	return status;
1470}
1471
1472/**
1473 *  ixgbe_read_eeprom_bit_bang_generic - Read EEPROM word using bit-bang
1474 *  @hw: pointer to hardware structure
1475 *  @offset: offset within the EEPROM to be read
1476 *  @data: read 16 bit value from EEPROM
1477 *
1478 *  Reads 16 bit value from EEPROM through bit-bang method
1479 **/
1480s32 ixgbe_read_eeprom_bit_bang_generic(struct ixgbe_hw *hw, u16 offset,
1481				       u16 *data)
1482{
1483	s32 status;
1484
1485	DEBUGFUNC("ixgbe_read_eeprom_bit_bang_generic");
1486
1487	hw->eeprom.ops.init_params(hw);
1488
1489	if (offset >= hw->eeprom.word_size) {
1490		status = IXGBE_ERR_EEPROM;
1491		goto out;
1492	}
1493
1494	status = ixgbe_read_eeprom_buffer_bit_bang(hw, offset, 1, data);
1495
1496out:
1497	return status;
1498}
1499
1500/**
1501 *  ixgbe_read_eerd_buffer_generic - Read EEPROM word(s) using EERD
1502 *  @hw: pointer to hardware structure
1503 *  @offset: offset of word in the EEPROM to read
1504 *  @words: number of word(s)
1505 *  @data: 16 bit word(s) from the EEPROM
1506 *
1507 *  Reads a 16 bit word(s) from the EEPROM using the EERD register.
1508 **/
1509s32 ixgbe_read_eerd_buffer_generic(struct ixgbe_hw *hw, u16 offset,
1510				   u16 words, u16 *data)
1511{
1512	u32 eerd;
1513	s32 status = IXGBE_SUCCESS;
1514	u32 i;
1515
1516	DEBUGFUNC("ixgbe_read_eerd_buffer_generic");
1517
1518	hw->eeprom.ops.init_params(hw);
1519
1520	if (words == 0) {
1521		status = IXGBE_ERR_INVALID_ARGUMENT;
1522		ERROR_REPORT1(IXGBE_ERROR_ARGUMENT, "Invalid EEPROM words");
1523		goto out;
1524	}
1525
1526	if (offset >= hw->eeprom.word_size) {
1527		status = IXGBE_ERR_EEPROM;
1528		ERROR_REPORT1(IXGBE_ERROR_ARGUMENT, "Invalid EEPROM offset");
1529		goto out;
1530	}
1531
1532	for (i = 0; i < words; i++) {
1533		eerd = ((offset + i) << IXGBE_EEPROM_RW_ADDR_SHIFT) |
1534		       IXGBE_EEPROM_RW_REG_START;
1535
1536		IXGBE_WRITE_REG(hw, IXGBE_EERD, eerd);
1537		status = ixgbe_poll_eerd_eewr_done(hw, IXGBE_NVM_POLL_READ);
1538
1539		if (status == IXGBE_SUCCESS) {
1540			data[i] = (IXGBE_READ_REG(hw, IXGBE_EERD) >>
1541				   IXGBE_EEPROM_RW_REG_DATA);
1542		} else {
1543			DEBUGOUT("Eeprom read timed out\n");
1544			goto out;
1545		}
1546	}
1547out:
1548	return status;
1549}
1550
1551/**
1552 *  ixgbe_detect_eeprom_page_size_generic - Detect EEPROM page size
1553 *  @hw: pointer to hardware structure
1554 *  @offset: offset within the EEPROM to be used as a scratch pad
1555 *
1556 *  Discover EEPROM page size by writing marching data at given offset.
1557 *  This function is called only when we are writing a new large buffer
1558 *  at given offset so the data would be overwritten anyway.
1559 **/
1560static s32 ixgbe_detect_eeprom_page_size_generic(struct ixgbe_hw *hw,
1561						 u16 offset)
1562{
1563	u16 data[IXGBE_EEPROM_PAGE_SIZE_MAX];
1564	s32 status = IXGBE_SUCCESS;
1565	u16 i;
1566
1567	DEBUGFUNC("ixgbe_detect_eeprom_page_size_generic");
1568
1569	for (i = 0; i < IXGBE_EEPROM_PAGE_SIZE_MAX; i++)
1570		data[i] = i;
1571
1572	hw->eeprom.word_page_size = IXGBE_EEPROM_PAGE_SIZE_MAX;
1573	status = ixgbe_write_eeprom_buffer_bit_bang(hw, offset,
1574					     IXGBE_EEPROM_PAGE_SIZE_MAX, data);
1575	hw->eeprom.word_page_size = 0;
1576	if (status != IXGBE_SUCCESS)
1577		goto out;
1578
1579	status = ixgbe_read_eeprom_buffer_bit_bang(hw, offset, 1, data);
1580	if (status != IXGBE_SUCCESS)
1581		goto out;
1582
1583	/*
1584	 * When writing in burst more than the actual page size
1585	 * EEPROM address wraps around current page.
1586	 */
1587	hw->eeprom.word_page_size = IXGBE_EEPROM_PAGE_SIZE_MAX - data[0];
1588
1589	DEBUGOUT1("Detected EEPROM page size = %d words.",
1590		  hw->eeprom.word_page_size);
1591out:
1592	return status;
1593}
1594
1595/**
1596 *  ixgbe_read_eerd_generic - Read EEPROM word using EERD
1597 *  @hw: pointer to hardware structure
1598 *  @offset: offset of  word in the EEPROM to read
1599 *  @data: word read from the EEPROM
1600 *
1601 *  Reads a 16 bit word from the EEPROM using the EERD register.
1602 **/
1603s32 ixgbe_read_eerd_generic(struct ixgbe_hw *hw, u16 offset, u16 *data)
1604{
1605	return ixgbe_read_eerd_buffer_generic(hw, offset, 1, data);
1606}
1607
1608/**
1609 *  ixgbe_write_eewr_buffer_generic - Write EEPROM word(s) using EEWR
1610 *  @hw: pointer to hardware structure
1611 *  @offset: offset of  word in the EEPROM to write
1612 *  @words: number of word(s)
1613 *  @data: word(s) write to the EEPROM
1614 *
1615 *  Write a 16 bit word(s) to the EEPROM using the EEWR register.
1616 **/
1617s32 ixgbe_write_eewr_buffer_generic(struct ixgbe_hw *hw, u16 offset,
1618				    u16 words, u16 *data)
1619{
1620	u32 eewr;
1621	s32 status = IXGBE_SUCCESS;
1622	u16 i;
1623
1624	DEBUGFUNC("ixgbe_write_eewr_generic");
1625
1626	hw->eeprom.ops.init_params(hw);
1627
1628	if (words == 0) {
1629		status = IXGBE_ERR_INVALID_ARGUMENT;
1630		ERROR_REPORT1(IXGBE_ERROR_ARGUMENT, "Invalid EEPROM words");
1631		goto out;
1632	}
1633
1634	if (offset >= hw->eeprom.word_size) {
1635		status = IXGBE_ERR_EEPROM;
1636		ERROR_REPORT1(IXGBE_ERROR_ARGUMENT, "Invalid EEPROM offset");
1637		goto out;
1638	}
1639
1640	for (i = 0; i < words; i++) {
1641		eewr = ((offset + i) << IXGBE_EEPROM_RW_ADDR_SHIFT) |
1642			(data[i] << IXGBE_EEPROM_RW_REG_DATA) |
1643			IXGBE_EEPROM_RW_REG_START;
1644
1645		status = ixgbe_poll_eerd_eewr_done(hw, IXGBE_NVM_POLL_WRITE);
1646		if (status != IXGBE_SUCCESS) {
1647			DEBUGOUT("Eeprom write EEWR timed out\n");
1648			goto out;
1649		}
1650
1651		IXGBE_WRITE_REG(hw, IXGBE_EEWR, eewr);
1652
1653		status = ixgbe_poll_eerd_eewr_done(hw, IXGBE_NVM_POLL_WRITE);
1654		if (status != IXGBE_SUCCESS) {
1655			DEBUGOUT("Eeprom write EEWR timed out\n");
1656			goto out;
1657		}
1658	}
1659
1660out:
1661	return status;
1662}
1663
1664/**
1665 *  ixgbe_write_eewr_generic - Write EEPROM word using EEWR
1666 *  @hw: pointer to hardware structure
1667 *  @offset: offset of  word in the EEPROM to write
1668 *  @data: word write to the EEPROM
1669 *
1670 *  Write a 16 bit word to the EEPROM using the EEWR register.
1671 **/
1672s32 ixgbe_write_eewr_generic(struct ixgbe_hw *hw, u16 offset, u16 data)
1673{
1674	return ixgbe_write_eewr_buffer_generic(hw, offset, 1, &data);
1675}
1676
1677/**
1678 *  ixgbe_poll_eerd_eewr_done - Poll EERD read or EEWR write status
1679 *  @hw: pointer to hardware structure
1680 *  @ee_reg: EEPROM flag for polling
1681 *
1682 *  Polls the status bit (bit 1) of the EERD or EEWR to determine when the
1683 *  read or write is done respectively.
1684 **/
1685s32 ixgbe_poll_eerd_eewr_done(struct ixgbe_hw *hw, u32 ee_reg)
1686{
1687	u32 i;
1688	u32 reg;
1689	s32 status = IXGBE_ERR_EEPROM;
1690
1691	DEBUGFUNC("ixgbe_poll_eerd_eewr_done");
1692
1693	for (i = 0; i < IXGBE_EERD_EEWR_ATTEMPTS; i++) {
1694		if (ee_reg == IXGBE_NVM_POLL_READ)
1695			reg = IXGBE_READ_REG(hw, IXGBE_EERD);
1696		else
1697			reg = IXGBE_READ_REG(hw, IXGBE_EEWR);
1698
1699		if (reg & IXGBE_EEPROM_RW_REG_DONE) {
1700			status = IXGBE_SUCCESS;
1701			break;
1702		}
1703		usec_delay(5);
1704	}
1705
1706	if (i == IXGBE_EERD_EEWR_ATTEMPTS)
1707		ERROR_REPORT1(IXGBE_ERROR_POLLING,
1708			     "EEPROM read/write done polling timed out");
1709
1710	return status;
1711}
1712
1713/**
1714 *  ixgbe_acquire_eeprom - Acquire EEPROM using bit-bang
1715 *  @hw: pointer to hardware structure
1716 *
1717 *  Prepares EEPROM for access using bit-bang method. This function should
1718 *  be called before issuing a command to the EEPROM.
1719 **/
1720static s32 ixgbe_acquire_eeprom(struct ixgbe_hw *hw)
1721{
1722	s32 status = IXGBE_SUCCESS;
1723	u32 eec;
1724	u32 i;
1725
1726	DEBUGFUNC("ixgbe_acquire_eeprom");
1727
1728	if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM)
1729	    != IXGBE_SUCCESS)
1730		status = IXGBE_ERR_SWFW_SYNC;
1731
1732	if (status == IXGBE_SUCCESS) {
1733		eec = IXGBE_READ_REG(hw, IXGBE_EEC);
1734
1735		/* Request EEPROM Access */
1736		eec |= IXGBE_EEC_REQ;
1737		IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
1738
1739		for (i = 0; i < IXGBE_EEPROM_GRANT_ATTEMPTS; i++) {
1740			eec = IXGBE_READ_REG(hw, IXGBE_EEC);
1741			if (eec & IXGBE_EEC_GNT)
1742				break;
1743			usec_delay(5);
1744		}
1745
1746		/* Release if grant not acquired */
1747		if (!(eec & IXGBE_EEC_GNT)) {
1748			eec &= ~IXGBE_EEC_REQ;
1749			IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
1750			DEBUGOUT("Could not acquire EEPROM grant\n");
1751
1752			hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_EEP_SM);
1753			status = IXGBE_ERR_EEPROM;
1754		}
1755
1756		/* Setup EEPROM for Read/Write */
1757		if (status == IXGBE_SUCCESS) {
1758			/* Clear CS and SK */
1759			eec &= ~(IXGBE_EEC_CS | IXGBE_EEC_SK);
1760			IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
1761			IXGBE_WRITE_FLUSH(hw);
1762			usec_delay(1);
1763		}
1764	}
1765	return status;
1766}
1767
1768/**
1769 *  ixgbe_get_eeprom_semaphore - Get hardware semaphore
1770 *  @hw: pointer to hardware structure
1771 *
1772 *  Sets the hardware semaphores so EEPROM access can occur for bit-bang method
1773 **/
1774static s32 ixgbe_get_eeprom_semaphore(struct ixgbe_hw *hw)
1775{
1776	s32 status = IXGBE_ERR_EEPROM;
1777	u32 timeout = 2000;
1778	u32 i;
1779	u32 swsm;
1780
1781	DEBUGFUNC("ixgbe_get_eeprom_semaphore");
1782
1783
1784	/* Get SMBI software semaphore between device drivers first */
1785	for (i = 0; i < timeout; i++) {
1786		/*
1787		 * If the SMBI bit is 0 when we read it, then the bit will be
1788		 * set and we have the semaphore
1789		 */
1790		swsm = IXGBE_READ_REG(hw, IXGBE_SWSM);
1791		if (!(swsm & IXGBE_SWSM_SMBI)) {
1792			status = IXGBE_SUCCESS;
1793			break;
1794		}
1795		usec_delay(50);
1796	}
1797
1798	if (i == timeout) {
1799		DEBUGOUT("Driver can't access the Eeprom - SMBI Semaphore "
1800			 "not granted.\n");
1801		/*
1802		 * this release is particularly important because our attempts
1803		 * above to get the semaphore may have succeeded, and if there
1804		 * was a timeout, we should unconditionally clear the semaphore
1805		 * bits to free the driver to make progress
1806		 */
1807		ixgbe_release_eeprom_semaphore(hw);
1808
1809		usec_delay(50);
1810		/*
1811		 * one last try
1812		 * If the SMBI bit is 0 when we read it, then the bit will be
1813		 * set and we have the semaphore
1814		 */
1815		swsm = IXGBE_READ_REG(hw, IXGBE_SWSM);
1816		if (!(swsm & IXGBE_SWSM_SMBI))
1817			status = IXGBE_SUCCESS;
1818	}
1819
1820	/* Now get the semaphore between SW/FW through the SWESMBI bit */
1821	if (status == IXGBE_SUCCESS) {
1822		for (i = 0; i < timeout; i++) {
1823			swsm = IXGBE_READ_REG(hw, IXGBE_SWSM);
1824
1825			/* Set the SW EEPROM semaphore bit to request access */
1826			swsm |= IXGBE_SWSM_SWESMBI;
1827			IXGBE_WRITE_REG(hw, IXGBE_SWSM, swsm);
1828
1829			/*
1830			 * If we set the bit successfully then we got the
1831			 * semaphore.
1832			 */
1833			swsm = IXGBE_READ_REG(hw, IXGBE_SWSM);
1834			if (swsm & IXGBE_SWSM_SWESMBI)
1835				break;
1836
1837			usec_delay(50);
1838		}
1839
1840		/*
1841		 * Release semaphores and return error if SW EEPROM semaphore
1842		 * was not granted because we don't have access to the EEPROM
1843		 */
1844		if (i >= timeout) {
1845			ERROR_REPORT1(IXGBE_ERROR_POLLING,
1846			    "SWESMBI Software EEPROM semaphore not granted.\n");
1847			ixgbe_release_eeprom_semaphore(hw);
1848			status = IXGBE_ERR_EEPROM;
1849		}
1850	} else {
1851		ERROR_REPORT1(IXGBE_ERROR_POLLING,
1852			     "Software semaphore SMBI between device drivers "
1853			     "not granted.\n");
1854	}
1855
1856	return status;
1857}
1858
1859/**
1860 *  ixgbe_release_eeprom_semaphore - Release hardware semaphore
1861 *  @hw: pointer to hardware structure
1862 *
1863 *  This function clears hardware semaphore bits.
1864 **/
1865static void ixgbe_release_eeprom_semaphore(struct ixgbe_hw *hw)
1866{
1867	u32 swsm;
1868
1869	DEBUGFUNC("ixgbe_release_eeprom_semaphore");
1870
1871	swsm = IXGBE_READ_REG(hw, IXGBE_SWSM);
1872
1873	/* Release both semaphores by writing 0 to the bits SWESMBI and SMBI */
1874	swsm &= ~(IXGBE_SWSM_SWESMBI | IXGBE_SWSM_SMBI);
1875	IXGBE_WRITE_REG(hw, IXGBE_SWSM, swsm);
1876	IXGBE_WRITE_FLUSH(hw);
1877}
1878
1879/**
1880 *  ixgbe_ready_eeprom - Polls for EEPROM ready
1881 *  @hw: pointer to hardware structure
1882 **/
1883static s32 ixgbe_ready_eeprom(struct ixgbe_hw *hw)
1884{
1885	s32 status = IXGBE_SUCCESS;
1886	u16 i;
1887	u8 spi_stat_reg;
1888
1889	DEBUGFUNC("ixgbe_ready_eeprom");
1890
1891	/*
1892	 * Read "Status Register" repeatedly until the LSB is cleared.  The
1893	 * EEPROM will signal that the command has been completed by clearing
1894	 * bit 0 of the internal status register.  If it's not cleared within
1895	 * 5 milliseconds, then error out.
1896	 */
1897	for (i = 0; i < IXGBE_EEPROM_MAX_RETRY_SPI; i += 5) {
1898		ixgbe_shift_out_eeprom_bits(hw, IXGBE_EEPROM_RDSR_OPCODE_SPI,
1899					    IXGBE_EEPROM_OPCODE_BITS);
1900		spi_stat_reg = (u8)ixgbe_shift_in_eeprom_bits(hw, 8);
1901		if (!(spi_stat_reg & IXGBE_EEPROM_STATUS_RDY_SPI))
1902			break;
1903
1904		usec_delay(5);
1905		ixgbe_standby_eeprom(hw);
1906	};
1907
1908	/*
1909	 * On some parts, SPI write time could vary from 0-20mSec on 3.3V
1910	 * devices (and only 0-5mSec on 5V devices)
1911	 */
1912	if (i >= IXGBE_EEPROM_MAX_RETRY_SPI) {
1913		DEBUGOUT("SPI EEPROM Status error\n");
1914		status = IXGBE_ERR_EEPROM;
1915	}
1916
1917	return status;
1918}
1919
1920/**
1921 *  ixgbe_standby_eeprom - Returns EEPROM to a "standby" state
1922 *  @hw: pointer to hardware structure
1923 **/
1924static void ixgbe_standby_eeprom(struct ixgbe_hw *hw)
1925{
1926	u32 eec;
1927
1928	DEBUGFUNC("ixgbe_standby_eeprom");
1929
1930	eec = IXGBE_READ_REG(hw, IXGBE_EEC);
1931
1932	/* Toggle CS to flush commands */
1933	eec |= IXGBE_EEC_CS;
1934	IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
1935	IXGBE_WRITE_FLUSH(hw);
1936	usec_delay(1);
1937	eec &= ~IXGBE_EEC_CS;
1938	IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
1939	IXGBE_WRITE_FLUSH(hw);
1940	usec_delay(1);
1941}
1942
1943/**
1944 *  ixgbe_shift_out_eeprom_bits - Shift data bits out to the EEPROM.
1945 *  @hw: pointer to hardware structure
1946 *  @data: data to send to the EEPROM
1947 *  @count: number of bits to shift out
1948 **/
1949static void ixgbe_shift_out_eeprom_bits(struct ixgbe_hw *hw, u16 data,
1950					u16 count)
1951{
1952	u32 eec;
1953	u32 mask;
1954	u32 i;
1955
1956	DEBUGFUNC("ixgbe_shift_out_eeprom_bits");
1957
1958	eec = IXGBE_READ_REG(hw, IXGBE_EEC);
1959
1960	/*
1961	 * Mask is used to shift "count" bits of "data" out to the EEPROM
1962	 * one bit at a time.  Determine the starting bit based on count
1963	 */
1964	mask = 0x01 << (count - 1);
1965
1966	for (i = 0; i < count; i++) {
1967		/*
1968		 * A "1" is shifted out to the EEPROM by setting bit "DI" to a
1969		 * "1", and then raising and then lowering the clock (the SK
1970		 * bit controls the clock input to the EEPROM).  A "0" is
1971		 * shifted out to the EEPROM by setting "DI" to "0" and then
1972		 * raising and then lowering the clock.
1973		 */
1974		if (data & mask)
1975			eec |= IXGBE_EEC_DI;
1976		else
1977			eec &= ~IXGBE_EEC_DI;
1978
1979		IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
1980		IXGBE_WRITE_FLUSH(hw);
1981
1982		usec_delay(1);
1983
1984		ixgbe_raise_eeprom_clk(hw, &eec);
1985		ixgbe_lower_eeprom_clk(hw, &eec);
1986
1987		/*
1988		 * Shift mask to signify next bit of data to shift in to the
1989		 * EEPROM
1990		 */
1991		mask = mask >> 1;
1992	};
1993
1994	/* We leave the "DI" bit set to "0" when we leave this routine. */
1995	eec &= ~IXGBE_EEC_DI;
1996	IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
1997	IXGBE_WRITE_FLUSH(hw);
1998}
1999
2000/**
2001 *  ixgbe_shift_in_eeprom_bits - Shift data bits in from the EEPROM
2002 *  @hw: pointer to hardware structure
2003 **/
2004static u16 ixgbe_shift_in_eeprom_bits(struct ixgbe_hw *hw, u16 count)
2005{
2006	u32 eec;
2007	u32 i;
2008	u16 data = 0;
2009
2010	DEBUGFUNC("ixgbe_shift_in_eeprom_bits");
2011
2012	/*
2013	 * In order to read a register from the EEPROM, we need to shift
2014	 * 'count' bits in from the EEPROM. Bits are "shifted in" by raising
2015	 * the clock input to the EEPROM (setting the SK bit), and then reading
2016	 * the value of the "DO" bit.  During this "shifting in" process the
2017	 * "DI" bit should always be clear.
2018	 */
2019	eec = IXGBE_READ_REG(hw, IXGBE_EEC);
2020
2021	eec &= ~(IXGBE_EEC_DO | IXGBE_EEC_DI);
2022
2023	for (i = 0; i < count; i++) {
2024		data = data << 1;
2025		ixgbe_raise_eeprom_clk(hw, &eec);
2026
2027		eec = IXGBE_READ_REG(hw, IXGBE_EEC);
2028
2029		eec &= ~(IXGBE_EEC_DI);
2030		if (eec & IXGBE_EEC_DO)
2031			data |= 1;
2032
2033		ixgbe_lower_eeprom_clk(hw, &eec);
2034	}
2035
2036	return data;
2037}
2038
2039/**
2040 *  ixgbe_raise_eeprom_clk - Raises the EEPROM's clock input.
2041 *  @hw: pointer to hardware structure
2042 *  @eec: EEC register's current value
2043 **/
2044static void ixgbe_raise_eeprom_clk(struct ixgbe_hw *hw, u32 *eec)
2045{
2046	DEBUGFUNC("ixgbe_raise_eeprom_clk");
2047
2048	/*
2049	 * Raise the clock input to the EEPROM
2050	 * (setting the SK bit), then delay
2051	 */
2052	*eec = *eec | IXGBE_EEC_SK;
2053	IXGBE_WRITE_REG(hw, IXGBE_EEC, *eec);
2054	IXGBE_WRITE_FLUSH(hw);
2055	usec_delay(1);
2056}
2057
2058/**
2059 *  ixgbe_lower_eeprom_clk - Lowers the EEPROM's clock input.
2060 *  @hw: pointer to hardware structure
2061 *  @eecd: EECD's current value
2062 **/
2063static void ixgbe_lower_eeprom_clk(struct ixgbe_hw *hw, u32 *eec)
2064{
2065	DEBUGFUNC("ixgbe_lower_eeprom_clk");
2066
2067	/*
2068	 * Lower the clock input to the EEPROM (clearing the SK bit), then
2069	 * delay
2070	 */
2071	*eec = *eec & ~IXGBE_EEC_SK;
2072	IXGBE_WRITE_REG(hw, IXGBE_EEC, *eec);
2073	IXGBE_WRITE_FLUSH(hw);
2074	usec_delay(1);
2075}
2076
2077/**
2078 *  ixgbe_release_eeprom - Release EEPROM, release semaphores
2079 *  @hw: pointer to hardware structure
2080 **/
2081static void ixgbe_release_eeprom(struct ixgbe_hw *hw)
2082{
2083	u32 eec;
2084
2085	DEBUGFUNC("ixgbe_release_eeprom");
2086
2087	eec = IXGBE_READ_REG(hw, IXGBE_EEC);
2088
2089	eec |= IXGBE_EEC_CS;  /* Pull CS high */
2090	eec &= ~IXGBE_EEC_SK; /* Lower SCK */
2091
2092	IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
2093	IXGBE_WRITE_FLUSH(hw);
2094
2095	usec_delay(1);
2096
2097	/* Stop requesting EEPROM access */
2098	eec &= ~IXGBE_EEC_REQ;
2099	IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
2100
2101	hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_EEP_SM);
2102
2103	/* Delay before attempt to obtain semaphore again to allow FW access */
2104	msec_delay(hw->eeprom.semaphore_delay);
2105}
2106
2107/**
2108 *  ixgbe_calc_eeprom_checksum_generic - Calculates and returns the checksum
2109 *  @hw: pointer to hardware structure
2110 **/
2111u16 ixgbe_calc_eeprom_checksum_generic(struct ixgbe_hw *hw)
2112{
2113	u16 i;
2114	u16 j;
2115	u16 checksum = 0;
2116	u16 length = 0;
2117	u16 pointer = 0;
2118	u16 word = 0;
2119
2120	DEBUGFUNC("ixgbe_calc_eeprom_checksum_generic");
2121
2122	/* Include 0x0-0x3F in the checksum */
2123	for (i = 0; i < IXGBE_EEPROM_CHECKSUM; i++) {
2124		if (hw->eeprom.ops.read(hw, i, &word) != IXGBE_SUCCESS) {
2125			DEBUGOUT("EEPROM read failed\n");
2126			break;
2127		}
2128		checksum += word;
2129	}
2130
2131	/* Include all data from pointers except for the fw pointer */
2132	for (i = IXGBE_PCIE_ANALOG_PTR; i < IXGBE_FW_PTR; i++) {
2133		hw->eeprom.ops.read(hw, i, &pointer);
2134
2135		/* Make sure the pointer seems valid */
2136		if (pointer != 0xFFFF && pointer != 0) {
2137			hw->eeprom.ops.read(hw, pointer, &length);
2138
2139			if (length != 0xFFFF && length != 0) {
2140				for (j = pointer+1; j <= pointer+length; j++) {
2141					hw->eeprom.ops.read(hw, j, &word);
2142					checksum += word;
2143				}
2144			}
2145		}
2146	}
2147
2148	checksum = (u16)IXGBE_EEPROM_SUM - checksum;
2149
2150	return checksum;
2151}
2152
2153/**
2154 *  ixgbe_validate_eeprom_checksum_generic - Validate EEPROM checksum
2155 *  @hw: pointer to hardware structure
2156 *  @checksum_val: calculated checksum
2157 *
2158 *  Performs checksum calculation and validates the EEPROM checksum.  If the
2159 *  caller does not need checksum_val, the value can be NULL.
2160 **/
2161s32 ixgbe_validate_eeprom_checksum_generic(struct ixgbe_hw *hw,
2162					   u16 *checksum_val)
2163{
2164	s32 status;
2165	u16 checksum;
2166	u16 read_checksum = 0;
2167
2168	DEBUGFUNC("ixgbe_validate_eeprom_checksum_generic");
2169
2170	/*
2171	 * Read the first word from the EEPROM. If this times out or fails, do
2172	 * not continue or we could be in for a very long wait while every
2173	 * EEPROM read fails
2174	 */
2175	status = hw->eeprom.ops.read(hw, 0, &checksum);
2176
2177	if (status == IXGBE_SUCCESS) {
2178		checksum = hw->eeprom.ops.calc_checksum(hw);
2179
2180		hw->eeprom.ops.read(hw, IXGBE_EEPROM_CHECKSUM, &read_checksum);
2181
2182		/*
2183		 * Verify read checksum from EEPROM is the same as
2184		 * calculated checksum
2185		 */
2186		if (read_checksum != checksum)
2187			status = IXGBE_ERR_EEPROM_CHECKSUM;
2188
2189		/* If the user cares, return the calculated checksum */
2190		if (checksum_val)
2191			*checksum_val = checksum;
2192	} else {
2193		DEBUGOUT("EEPROM read failed\n");
2194	}
2195
2196	return status;
2197}
2198
2199/**
2200 *  ixgbe_update_eeprom_checksum_generic - Updates the EEPROM checksum
2201 *  @hw: pointer to hardware structure
2202 **/
2203s32 ixgbe_update_eeprom_checksum_generic(struct ixgbe_hw *hw)
2204{
2205	s32 status;
2206	u16 checksum;
2207
2208	DEBUGFUNC("ixgbe_update_eeprom_checksum_generic");
2209
2210	/*
2211	 * Read the first word from the EEPROM. If this times out or fails, do
2212	 * not continue or we could be in for a very long wait while every
2213	 * EEPROM read fails
2214	 */
2215	status = hw->eeprom.ops.read(hw, 0, &checksum);
2216
2217	if (status == IXGBE_SUCCESS) {
2218		checksum = hw->eeprom.ops.calc_checksum(hw);
2219		status = hw->eeprom.ops.write(hw, IXGBE_EEPROM_CHECKSUM,
2220					      checksum);
2221	} else {
2222		DEBUGOUT("EEPROM read failed\n");
2223	}
2224
2225	return status;
2226}
2227
2228/**
2229 *  ixgbe_validate_mac_addr - Validate MAC address
2230 *  @mac_addr: pointer to MAC address.
2231 *
2232 *  Tests a MAC address to ensure it is a valid Individual Address
2233 **/
2234s32 ixgbe_validate_mac_addr(u8 *mac_addr)
2235{
2236	s32 status = IXGBE_SUCCESS;
2237
2238	DEBUGFUNC("ixgbe_validate_mac_addr");
2239
2240	/* Make sure it is not a multicast address */
2241	if (IXGBE_IS_MULTICAST(mac_addr)) {
2242		DEBUGOUT("MAC address is multicast\n");
2243		status = IXGBE_ERR_INVALID_MAC_ADDR;
2244	/* Not a broadcast address */
2245	} else if (IXGBE_IS_BROADCAST(mac_addr)) {
2246		DEBUGOUT("MAC address is broadcast\n");
2247		status = IXGBE_ERR_INVALID_MAC_ADDR;
2248	/* Reject the zero address */
2249	} else if (mac_addr[0] == 0 && mac_addr[1] == 0 && mac_addr[2] == 0 &&
2250		   mac_addr[3] == 0 && mac_addr[4] == 0 && mac_addr[5] == 0) {
2251		DEBUGOUT("MAC address is all zeros\n");
2252		status = IXGBE_ERR_INVALID_MAC_ADDR;
2253	}
2254	return status;
2255}
2256
2257/**
2258 *  ixgbe_set_rar_generic - Set Rx address register
2259 *  @hw: pointer to hardware structure
2260 *  @index: Receive address register to write
2261 *  @addr: Address to put into receive address register
2262 *  @vmdq: VMDq "set" or "pool" index
2263 *  @enable_addr: set flag that address is active
2264 *
2265 *  Puts an ethernet address into a receive address register.
2266 **/
2267s32 ixgbe_set_rar_generic(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq,
2268			  u32 enable_addr)
2269{
2270	u32 rar_low, rar_high;
2271	u32 rar_entries = hw->mac.num_rar_entries;
2272
2273	DEBUGFUNC("ixgbe_set_rar_generic");
2274
2275	/* Make sure we are using a valid rar index range */
2276	if (index >= rar_entries) {
2277		ERROR_REPORT2(IXGBE_ERROR_ARGUMENT,
2278			     "RAR index %d is out of range.\n", index);
2279		return IXGBE_ERR_INVALID_ARGUMENT;
2280	}
2281
2282	/* setup VMDq pool selection before this RAR gets enabled */
2283	hw->mac.ops.set_vmdq(hw, index, vmdq);
2284
2285	/*
2286	 * HW expects these in little endian so we reverse the byte
2287	 * order from network order (big endian) to little endian
2288	 */
2289	rar_low = ((u32)addr[0] |
2290		   ((u32)addr[1] << 8) |
2291		   ((u32)addr[2] << 16) |
2292		   ((u32)addr[3] << 24));
2293	/*
2294	 * Some parts put the VMDq setting in the extra RAH bits,
2295	 * so save everything except the lower 16 bits that hold part
2296	 * of the address and the address valid bit.
2297	 */
2298	rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(index));
2299	rar_high &= ~(0x0000FFFF | IXGBE_RAH_AV);
2300	rar_high |= ((u32)addr[4] | ((u32)addr[5] << 8));
2301
2302	if (enable_addr != 0)
2303		rar_high |= IXGBE_RAH_AV;
2304
2305	IXGBE_WRITE_REG(hw, IXGBE_RAL(index), rar_low);
2306	IXGBE_WRITE_REG(hw, IXGBE_RAH(index), rar_high);
2307
2308	return IXGBE_SUCCESS;
2309}
2310
2311/**
2312 *  ixgbe_clear_rar_generic - Remove Rx address register
2313 *  @hw: pointer to hardware structure
2314 *  @index: Receive address register to write
2315 *
2316 *  Clears an ethernet address from a receive address register.
2317 **/
2318s32 ixgbe_clear_rar_generic(struct ixgbe_hw *hw, u32 index)
2319{
2320	u32 rar_high;
2321	u32 rar_entries = hw->mac.num_rar_entries;
2322
2323	DEBUGFUNC("ixgbe_clear_rar_generic");
2324
2325	/* Make sure we are using a valid rar index range */
2326	if (index >= rar_entries) {
2327		ERROR_REPORT2(IXGBE_ERROR_ARGUMENT,
2328			     "RAR index %d is out of range.\n", index);
2329		return IXGBE_ERR_INVALID_ARGUMENT;
2330	}
2331
2332	/*
2333	 * Some parts put the VMDq setting in the extra RAH bits,
2334	 * so save everything except the lower 16 bits that hold part
2335	 * of the address and the address valid bit.
2336	 */
2337	rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(index));
2338	rar_high &= ~(0x0000FFFF | IXGBE_RAH_AV);
2339
2340	IXGBE_WRITE_REG(hw, IXGBE_RAL(index), 0);
2341	IXGBE_WRITE_REG(hw, IXGBE_RAH(index), rar_high);
2342
2343	/* clear VMDq pool/queue selection for this RAR */
2344	hw->mac.ops.clear_vmdq(hw, index, IXGBE_CLEAR_VMDQ_ALL);
2345
2346	return IXGBE_SUCCESS;
2347}
2348
2349/**
2350 *  ixgbe_init_rx_addrs_generic - Initializes receive address filters.
2351 *  @hw: pointer to hardware structure
2352 *
2353 *  Places the MAC address in receive address register 0 and clears the rest
2354 *  of the receive address registers. Clears the multicast table. Assumes
2355 *  the receiver is in reset when the routine is called.
2356 **/
2357s32 ixgbe_init_rx_addrs_generic(struct ixgbe_hw *hw)
2358{
2359	u32 i;
2360	u32 rar_entries = hw->mac.num_rar_entries;
2361
2362	DEBUGFUNC("ixgbe_init_rx_addrs_generic");
2363
2364	/*
2365	 * If the current mac address is valid, assume it is a software override
2366	 * to the permanent address.
2367	 * Otherwise, use the permanent address from the eeprom.
2368	 */
2369	if (ixgbe_validate_mac_addr(hw->mac.addr) ==
2370	    IXGBE_ERR_INVALID_MAC_ADDR) {
2371		/* Get the MAC address from the RAR0 for later reference */
2372		hw->mac.ops.get_mac_addr(hw, hw->mac.addr);
2373
2374		DEBUGOUT3(" Keeping Current RAR0 Addr =%.2X %.2X %.2X ",
2375			  hw->mac.addr[0], hw->mac.addr[1],
2376			  hw->mac.addr[2]);
2377		DEBUGOUT3("%.2X %.2X %.2X\n", hw->mac.addr[3],
2378			  hw->mac.addr[4], hw->mac.addr[5]);
2379	} else {
2380		/* Setup the receive address. */
2381		DEBUGOUT("Overriding MAC Address in RAR[0]\n");
2382		DEBUGOUT3(" New MAC Addr =%.2X %.2X %.2X ",
2383			  hw->mac.addr[0], hw->mac.addr[1],
2384			  hw->mac.addr[2]);
2385		DEBUGOUT3("%.2X %.2X %.2X\n", hw->mac.addr[3],
2386			  hw->mac.addr[4], hw->mac.addr[5]);
2387
2388		hw->mac.ops.set_rar(hw, 0, hw->mac.addr, 0, IXGBE_RAH_AV);
2389
2390		/* clear VMDq pool/queue selection for RAR 0 */
2391		hw->mac.ops.clear_vmdq(hw, 0, IXGBE_CLEAR_VMDQ_ALL);
2392	}
2393	hw->addr_ctrl.overflow_promisc = 0;
2394
2395	hw->addr_ctrl.rar_used_count = 1;
2396
2397	/* Zero out the other receive addresses. */
2398	DEBUGOUT1("Clearing RAR[1-%d]\n", rar_entries - 1);
2399	for (i = 1; i < rar_entries; i++) {
2400		IXGBE_WRITE_REG(hw, IXGBE_RAL(i), 0);
2401		IXGBE_WRITE_REG(hw, IXGBE_RAH(i), 0);
2402	}
2403
2404	/* Clear the MTA */
2405	hw->addr_ctrl.mta_in_use = 0;
2406	IXGBE_WRITE_REG(hw, IXGBE_MCSTCTRL, hw->mac.mc_filter_type);
2407
2408	DEBUGOUT(" Clearing MTA\n");
2409	for (i = 0; i < hw->mac.mcft_size; i++)
2410		IXGBE_WRITE_REG(hw, IXGBE_MTA(i), 0);
2411
2412	ixgbe_init_uta_tables(hw);
2413
2414	return IXGBE_SUCCESS;
2415}
2416
2417/**
2418 *  ixgbe_add_uc_addr - Adds a secondary unicast address.
2419 *  @hw: pointer to hardware structure
2420 *  @addr: new address
2421 *
2422 *  Adds it to unused receive address register or goes into promiscuous mode.
2423 **/
2424void ixgbe_add_uc_addr(struct ixgbe_hw *hw, u8 *addr, u32 vmdq)
2425{
2426	u32 rar_entries = hw->mac.num_rar_entries;
2427	u32 rar;
2428
2429	DEBUGFUNC("ixgbe_add_uc_addr");
2430
2431	DEBUGOUT6(" UC Addr = %.2X %.2X %.2X %.2X %.2X %.2X\n",
2432		  addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
2433
2434	/*
2435	 * Place this address in the RAR if there is room,
2436	 * else put the controller into promiscuous mode
2437	 */
2438	if (hw->addr_ctrl.rar_used_count < rar_entries) {
2439		rar = hw->addr_ctrl.rar_used_count;
2440		hw->mac.ops.set_rar(hw, rar, addr, vmdq, IXGBE_RAH_AV);
2441		DEBUGOUT1("Added a secondary address to RAR[%d]\n", rar);
2442		hw->addr_ctrl.rar_used_count++;
2443	} else {
2444		hw->addr_ctrl.overflow_promisc++;
2445	}
2446
2447	DEBUGOUT("ixgbe_add_uc_addr Complete\n");
2448}
2449
2450/**
2451 *  ixgbe_update_uc_addr_list_generic - Updates MAC list of secondary addresses
2452 *  @hw: pointer to hardware structure
2453 *  @addr_list: the list of new addresses
2454 *  @addr_count: number of addresses
2455 *  @next: iterator function to walk the address list
2456 *
2457 *  The given list replaces any existing list.  Clears the secondary addrs from
2458 *  receive address registers.  Uses unused receive address registers for the
2459 *  first secondary addresses, and falls back to promiscuous mode as needed.
2460 *
2461 *  Drivers using secondary unicast addresses must set user_set_promisc when
2462 *  manually putting the device into promiscuous mode.
2463 **/
2464s32 ixgbe_update_uc_addr_list_generic(struct ixgbe_hw *hw, u8 *addr_list,
2465				      u32 addr_count, ixgbe_mc_addr_itr next)
2466{
2467	u8 *addr;
2468	u32 i;
2469	u32 old_promisc_setting = hw->addr_ctrl.overflow_promisc;
2470	u32 uc_addr_in_use;
2471	u32 fctrl;
2472	u32 vmdq;
2473
2474	DEBUGFUNC("ixgbe_update_uc_addr_list_generic");
2475
2476	/*
2477	 * Clear accounting of old secondary address list,
2478	 * don't count RAR[0]
2479	 */
2480	uc_addr_in_use = hw->addr_ctrl.rar_used_count - 1;
2481	hw->addr_ctrl.rar_used_count -= uc_addr_in_use;
2482	hw->addr_ctrl.overflow_promisc = 0;
2483
2484	/* Zero out the other receive addresses */
2485	DEBUGOUT1("Clearing RAR[1-%d]\n", uc_addr_in_use+1);
2486	for (i = 0; i < uc_addr_in_use; i++) {
2487		IXGBE_WRITE_REG(hw, IXGBE_RAL(1+i), 0);
2488		IXGBE_WRITE_REG(hw, IXGBE_RAH(1+i), 0);
2489	}
2490
2491	/* Add the new addresses */
2492	for (i = 0; i < addr_count; i++) {
2493		DEBUGOUT(" Adding the secondary addresses:\n");
2494		addr = next(hw, &addr_list, &vmdq);
2495		ixgbe_add_uc_addr(hw, addr, vmdq);
2496	}
2497
2498	if (hw->addr_ctrl.overflow_promisc) {
2499		/* enable promisc if not already in overflow or set by user */
2500		if (!old_promisc_setting && !hw->addr_ctrl.user_set_promisc) {
2501			DEBUGOUT(" Entering address overflow promisc mode\n");
2502			fctrl = IXGBE_READ_REG(hw, IXGBE_FCTRL);
2503			fctrl |= IXGBE_FCTRL_UPE;
2504			IXGBE_WRITE_REG(hw, IXGBE_FCTRL, fctrl);
2505		}
2506	} else {
2507		/* only disable if set by overflow, not by user */
2508		if (old_promisc_setting && !hw->addr_ctrl.user_set_promisc) {
2509			DEBUGOUT(" Leaving address overflow promisc mode\n");
2510			fctrl = IXGBE_READ_REG(hw, IXGBE_FCTRL);
2511			fctrl &= ~IXGBE_FCTRL_UPE;
2512			IXGBE_WRITE_REG(hw, IXGBE_FCTRL, fctrl);
2513		}
2514	}
2515
2516	DEBUGOUT("ixgbe_update_uc_addr_list_generic Complete\n");
2517	return IXGBE_SUCCESS;
2518}
2519
2520/**
2521 *  ixgbe_mta_vector - Determines bit-vector in multicast table to set
2522 *  @hw: pointer to hardware structure
2523 *  @mc_addr: the multicast address
2524 *
2525 *  Extracts the 12 bits, from a multicast address, to determine which
2526 *  bit-vector to set in the multicast table. The hardware uses 12 bits, from
2527 *  incoming rx multicast addresses, to determine the bit-vector to check in
2528 *  the MTA. Which of the 4 combination, of 12-bits, the hardware uses is set
2529 *  by the MO field of the MCSTCTRL. The MO field is set during initialization
2530 *  to mc_filter_type.
2531 **/
2532static s32 ixgbe_mta_vector(struct ixgbe_hw *hw, u8 *mc_addr)
2533{
2534	u32 vector = 0;
2535
2536	DEBUGFUNC("ixgbe_mta_vector");
2537
2538	switch (hw->mac.mc_filter_type) {
2539	case 0:   /* use bits [47:36] of the address */
2540		vector = ((mc_addr[4] >> 4) | (((u16)mc_addr[5]) << 4));
2541		break;
2542	case 1:   /* use bits [46:35] of the address */
2543		vector = ((mc_addr[4] >> 3) | (((u16)mc_addr[5]) << 5));
2544		break;
2545	case 2:   /* use bits [45:34] of the address */
2546		vector = ((mc_addr[4] >> 2) | (((u16)mc_addr[5]) << 6));
2547		break;
2548	case 3:   /* use bits [43:32] of the address */
2549		vector = ((mc_addr[4]) | (((u16)mc_addr[5]) << 8));
2550		break;
2551	default:  /* Invalid mc_filter_type */
2552		DEBUGOUT("MC filter type param set incorrectly\n");
2553		ASSERT(0);
2554		break;
2555	}
2556
2557	/* vector can only be 12-bits or boundary will be exceeded */
2558	vector &= 0xFFF;
2559	return vector;
2560}
2561
2562/**
2563 *  ixgbe_set_mta - Set bit-vector in multicast table
2564 *  @hw: pointer to hardware structure
2565 *  @hash_value: Multicast address hash value
2566 *
2567 *  Sets the bit-vector in the multicast table.
2568 **/
2569void ixgbe_set_mta(struct ixgbe_hw *hw, u8 *mc_addr)
2570{
2571	u32 vector;
2572	u32 vector_bit;
2573	u32 vector_reg;
2574
2575	DEBUGFUNC("ixgbe_set_mta");
2576
2577	hw->addr_ctrl.mta_in_use++;
2578
2579	vector = ixgbe_mta_vector(hw, mc_addr);
2580	DEBUGOUT1(" bit-vector = 0x%03X\n", vector);
2581
2582	/*
2583	 * The MTA is a register array of 128 32-bit registers. It is treated
2584	 * like an array of 4096 bits.  We want to set bit
2585	 * BitArray[vector_value]. So we figure out what register the bit is
2586	 * in, read it, OR in the new bit, then write back the new value.  The
2587	 * register is determined by the upper 7 bits of the vector value and
2588	 * the bit within that register are determined by the lower 5 bits of
2589	 * the value.
2590	 */
2591	vector_reg = (vector >> 5) & 0x7F;
2592	vector_bit = vector & 0x1F;
2593	hw->mac.mta_shadow[vector_reg] |= (1 << vector_bit);
2594}
2595
2596/**
2597 *  ixgbe_update_mc_addr_list_generic - Updates MAC list of multicast addresses
2598 *  @hw: pointer to hardware structure
2599 *  @mc_addr_list: the list of new multicast addresses
2600 *  @mc_addr_count: number of addresses
2601 *  @next: iterator function to walk the multicast address list
2602 *  @clear: flag, when set clears the table beforehand
2603 *
2604 *  When the clear flag is set, the given list replaces any existing list.
2605 *  Hashes the given addresses into the multicast table.
2606 **/
2607s32 ixgbe_update_mc_addr_list_generic(struct ixgbe_hw *hw, u8 *mc_addr_list,
2608				      u32 mc_addr_count, ixgbe_mc_addr_itr next,
2609				      bool clear)
2610{
2611	u32 i;
2612	u32 vmdq;
2613
2614	DEBUGFUNC("ixgbe_update_mc_addr_list_generic");
2615
2616	/*
2617	 * Set the new number of MC addresses that we are being requested to
2618	 * use.
2619	 */
2620	hw->addr_ctrl.num_mc_addrs = mc_addr_count;
2621	hw->addr_ctrl.mta_in_use = 0;
2622
2623	/* Clear mta_shadow */
2624	if (clear) {
2625		DEBUGOUT(" Clearing MTA\n");
2626		memset(&hw->mac.mta_shadow, 0, sizeof(hw->mac.mta_shadow));
2627	}
2628
2629	/* Update mta_shadow */
2630	for (i = 0; i < mc_addr_count; i++) {
2631		DEBUGOUT(" Adding the multicast addresses:\n");
2632		ixgbe_set_mta(hw, next(hw, &mc_addr_list, &vmdq));
2633	}
2634
2635	/* Enable mta */
2636	for (i = 0; i < hw->mac.mcft_size; i++)
2637		IXGBE_WRITE_REG_ARRAY(hw, IXGBE_MTA(0), i,
2638				      hw->mac.mta_shadow[i]);
2639
2640	if (hw->addr_ctrl.mta_in_use > 0)
2641		IXGBE_WRITE_REG(hw, IXGBE_MCSTCTRL,
2642				IXGBE_MCSTCTRL_MFE | hw->mac.mc_filter_type);
2643
2644	DEBUGOUT("ixgbe_update_mc_addr_list_generic Complete\n");
2645	return IXGBE_SUCCESS;
2646}
2647
2648/**
2649 *  ixgbe_enable_mc_generic - Enable multicast address in RAR
2650 *  @hw: pointer to hardware structure
2651 *
2652 *  Enables multicast address in RAR and the use of the multicast hash table.
2653 **/
2654s32 ixgbe_enable_mc_generic(struct ixgbe_hw *hw)
2655{
2656	struct ixgbe_addr_filter_info *a = &hw->addr_ctrl;
2657
2658	DEBUGFUNC("ixgbe_enable_mc_generic");
2659
2660	if (a->mta_in_use > 0)
2661		IXGBE_WRITE_REG(hw, IXGBE_MCSTCTRL, IXGBE_MCSTCTRL_MFE |
2662				hw->mac.mc_filter_type);
2663
2664	return IXGBE_SUCCESS;
2665}
2666
2667/**
2668 *  ixgbe_disable_mc_generic - Disable multicast address in RAR
2669 *  @hw: pointer to hardware structure
2670 *
2671 *  Disables multicast address in RAR and the use of the multicast hash table.
2672 **/
2673s32 ixgbe_disable_mc_generic(struct ixgbe_hw *hw)
2674{
2675	struct ixgbe_addr_filter_info *a = &hw->addr_ctrl;
2676
2677	DEBUGFUNC("ixgbe_disable_mc_generic");
2678
2679	if (a->mta_in_use > 0)
2680		IXGBE_WRITE_REG(hw, IXGBE_MCSTCTRL, hw->mac.mc_filter_type);
2681
2682	return IXGBE_SUCCESS;
2683}
2684
2685/**
2686 *  ixgbe_fc_enable_generic - Enable flow control
2687 *  @hw: pointer to hardware structure
2688 *
2689 *  Enable flow control according to the current settings.
2690 **/
2691s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw)
2692{
2693	s32 ret_val = IXGBE_SUCCESS;
2694	u32 mflcn_reg, fccfg_reg;
2695	u32 reg;
2696	u32 fcrtl, fcrth;
2697	int i;
2698
2699	DEBUGFUNC("ixgbe_fc_enable_generic");
2700
2701	/* Validate the water mark configuration */
2702	if (!hw->fc.pause_time) {
2703		ret_val = IXGBE_ERR_INVALID_LINK_SETTINGS;
2704		goto out;
2705	}
2706
2707	/* Low water mark of zero causes XOFF floods */
2708	for (i = 0; i < IXGBE_DCB_MAX_TRAFFIC_CLASS; i++) {
2709		if ((hw->fc.current_mode & ixgbe_fc_tx_pause) &&
2710		    hw->fc.high_water[i]) {
2711			if (!hw->fc.low_water[i] ||
2712			    hw->fc.low_water[i] >= hw->fc.high_water[i]) {
2713				DEBUGOUT("Invalid water mark configuration\n");
2714				ret_val = IXGBE_ERR_INVALID_LINK_SETTINGS;
2715				goto out;
2716			}
2717		}
2718	}
2719
2720	/* Negotiate the fc mode to use */
2721	ixgbe_fc_autoneg(hw);
2722
2723	/* Disable any previous flow control settings */
2724	mflcn_reg = IXGBE_READ_REG(hw, IXGBE_MFLCN);
2725	mflcn_reg &= ~(IXGBE_MFLCN_RPFCE_MASK | IXGBE_MFLCN_RFCE);
2726
2727	fccfg_reg = IXGBE_READ_REG(hw, IXGBE_FCCFG);
2728	fccfg_reg &= ~(IXGBE_FCCFG_TFCE_802_3X | IXGBE_FCCFG_TFCE_PRIORITY);
2729
2730	/*
2731	 * The possible values of fc.current_mode are:
2732	 * 0: Flow control is completely disabled
2733	 * 1: Rx flow control is enabled (we can receive pause frames,
2734	 *    but not send pause frames).
2735	 * 2: Tx flow control is enabled (we can send pause frames but
2736	 *    we do not support receiving pause frames).
2737	 * 3: Both Rx and Tx flow control (symmetric) are enabled.
2738	 * other: Invalid.
2739	 */
2740	switch (hw->fc.current_mode) {
2741	case ixgbe_fc_none:
2742		/*
2743		 * Flow control is disabled by software override or autoneg.
2744		 * The code below will actually disable it in the HW.
2745		 */
2746		break;
2747	case ixgbe_fc_rx_pause:
2748		/*
2749		 * Rx Flow control is enabled and Tx Flow control is
2750		 * disabled by software override. Since there really
2751		 * isn't a way to advertise that we are capable of RX
2752		 * Pause ONLY, we will advertise that we support both
2753		 * symmetric and asymmetric Rx PAUSE.  Later, we will
2754		 * disable the adapter's ability to send PAUSE frames.
2755		 */
2756		mflcn_reg |= IXGBE_MFLCN_RFCE;
2757		break;
2758	case ixgbe_fc_tx_pause:
2759		/*
2760		 * Tx Flow control is enabled, and Rx Flow control is
2761		 * disabled by software override.
2762		 */
2763		fccfg_reg |= IXGBE_FCCFG_TFCE_802_3X;
2764		break;
2765	case ixgbe_fc_full:
2766		/* Flow control (both Rx and Tx) is enabled by SW override. */
2767		mflcn_reg |= IXGBE_MFLCN_RFCE;
2768		fccfg_reg |= IXGBE_FCCFG_TFCE_802_3X;
2769		break;
2770	default:
2771		ERROR_REPORT1(IXGBE_ERROR_ARGUMENT,
2772			     "Flow control param set incorrectly\n");
2773		ret_val = IXGBE_ERR_CONFIG;
2774		goto out;
2775		break;
2776	}
2777
2778	/* Set 802.3x based flow control settings. */
2779	mflcn_reg |= IXGBE_MFLCN_DPF;
2780	IXGBE_WRITE_REG(hw, IXGBE_MFLCN, mflcn_reg);
2781	IXGBE_WRITE_REG(hw, IXGBE_FCCFG, fccfg_reg);
2782
2783
2784	/* Set up and enable Rx high/low water mark thresholds, enable XON. */
2785	for (i = 0; i < IXGBE_DCB_MAX_TRAFFIC_CLASS; i++) {
2786		if ((hw->fc.current_mode & ixgbe_fc_tx_pause) &&
2787		    hw->fc.high_water[i]) {
2788			fcrtl = (hw->fc.low_water[i] << 10) | IXGBE_FCRTL_XONE;
2789			IXGBE_WRITE_REG(hw, IXGBE_FCRTL_82599(i), fcrtl);
2790			fcrth = (hw->fc.high_water[i] << 10) | IXGBE_FCRTH_FCEN;
2791		} else {
2792			IXGBE_WRITE_REG(hw, IXGBE_FCRTL_82599(i), 0);
2793			/*
2794			 * In order to prevent Tx hangs when the internal Tx
2795			 * switch is enabled we must set the high water mark
2796			 * to the maximum FCRTH value.  This allows the Tx
2797			 * switch to function even under heavy Rx workloads.
2798			 */
2799			fcrth = IXGBE_READ_REG(hw, IXGBE_RXPBSIZE(i)) - 32;
2800		}
2801
2802		IXGBE_WRITE_REG(hw, IXGBE_FCRTH_82599(i), fcrth);
2803	}
2804
2805	/* Configure pause time (2 TCs per register) */
2806	reg = hw->fc.pause_time * 0x00010001;
2807	for (i = 0; i < (IXGBE_DCB_MAX_TRAFFIC_CLASS / 2); i++)
2808		IXGBE_WRITE_REG(hw, IXGBE_FCTTV(i), reg);
2809
2810	/* Configure flow control refresh threshold value */
2811	IXGBE_WRITE_REG(hw, IXGBE_FCRTV, hw->fc.pause_time / 2);
2812
2813out:
2814	return ret_val;
2815}
2816
2817/**
2818 *  ixgbe_negotiate_fc - Negotiate flow control
2819 *  @hw: pointer to hardware structure
2820 *  @adv_reg: flow control advertised settings
2821 *  @lp_reg: link partner's flow control settings
2822 *  @adv_sym: symmetric pause bit in advertisement
2823 *  @adv_asm: asymmetric pause bit in advertisement
2824 *  @lp_sym: symmetric pause bit in link partner advertisement
2825 *  @lp_asm: asymmetric pause bit in link partner advertisement
2826 *
2827 *  Find the intersection between advertised settings and link partner's
2828 *  advertised settings
2829 **/
2830static s32 ixgbe_negotiate_fc(struct ixgbe_hw *hw, u32 adv_reg, u32 lp_reg,
2831			      u32 adv_sym, u32 adv_asm, u32 lp_sym, u32 lp_asm)
2832{
2833	if ((!(adv_reg)) ||  (!(lp_reg))) {
2834		ERROR_REPORT3(IXGBE_ERROR_UNSUPPORTED,
2835			     "Local or link partner's advertised flow control "
2836			     "settings are NULL. Local: %x, link partner: %x\n",
2837			     adv_reg, lp_reg);
2838		return IXGBE_ERR_FC_NOT_NEGOTIATED;
2839	}
2840
2841	if ((adv_reg & adv_sym) && (lp_reg & lp_sym)) {
2842		/*
2843		 * Now we need to check if the user selected Rx ONLY
2844		 * of pause frames.  In this case, we had to advertise
2845		 * FULL flow control because we could not advertise RX
2846		 * ONLY. Hence, we must now check to see if we need to
2847		 * turn OFF the TRANSMISSION of PAUSE frames.
2848		 */
2849		if (hw->fc.requested_mode == ixgbe_fc_full) {
2850			hw->fc.current_mode = ixgbe_fc_full;
2851			DEBUGOUT("Flow Control = FULL.\n");
2852		} else {
2853			hw->fc.current_mode = ixgbe_fc_rx_pause;
2854			DEBUGOUT("Flow Control=RX PAUSE frames only\n");
2855		}
2856	} else if (!(adv_reg & adv_sym) && (adv_reg & adv_asm) &&
2857		   (lp_reg & lp_sym) && (lp_reg & lp_asm)) {
2858		hw->fc.current_mode = ixgbe_fc_tx_pause;
2859		DEBUGOUT("Flow Control = TX PAUSE frames only.\n");
2860	} else if ((adv_reg & adv_sym) && (adv_reg & adv_asm) &&
2861		   !(lp_reg & lp_sym) && (lp_reg & lp_asm)) {
2862		hw->fc.current_mode = ixgbe_fc_rx_pause;
2863		DEBUGOUT("Flow Control = RX PAUSE frames only.\n");
2864	} else {
2865		hw->fc.current_mode = ixgbe_fc_none;
2866		DEBUGOUT("Flow Control = NONE.\n");
2867	}
2868	return IXGBE_SUCCESS;
2869}
2870
2871/**
2872 *  ixgbe_fc_autoneg_fiber - Enable flow control on 1 gig fiber
2873 *  @hw: pointer to hardware structure
2874 *
2875 *  Enable flow control according on 1 gig fiber.
2876 **/
2877static s32 ixgbe_fc_autoneg_fiber(struct ixgbe_hw *hw)
2878{
2879	u32 pcs_anadv_reg, pcs_lpab_reg, linkstat;
2880	s32 ret_val = IXGBE_ERR_FC_NOT_NEGOTIATED;
2881
2882	/*
2883	 * On multispeed fiber at 1g, bail out if
2884	 * - link is up but AN did not complete, or if
2885	 * - link is up and AN completed but timed out
2886	 */
2887
2888	linkstat = IXGBE_READ_REG(hw, IXGBE_PCS1GLSTA);
2889	if ((!!(linkstat & IXGBE_PCS1GLSTA_AN_COMPLETE) == 0) ||
2890	    (!!(linkstat & IXGBE_PCS1GLSTA_AN_TIMED_OUT) == 1)) {
2891		ERROR_REPORT1(IXGBE_ERROR_POLLING,
2892			     "Auto-Negotiation did not complete or timed out");
2893		goto out;
2894	}
2895
2896	pcs_anadv_reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANA);
2897	pcs_lpab_reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANLP);
2898
2899	ret_val =  ixgbe_negotiate_fc(hw, pcs_anadv_reg,
2900				      pcs_lpab_reg, IXGBE_PCS1GANA_SYM_PAUSE,
2901				      IXGBE_PCS1GANA_ASM_PAUSE,
2902				      IXGBE_PCS1GANA_SYM_PAUSE,
2903				      IXGBE_PCS1GANA_ASM_PAUSE);
2904
2905out:
2906	return ret_val;
2907}
2908
2909/**
2910 *  ixgbe_fc_autoneg_backplane - Enable flow control IEEE clause 37
2911 *  @hw: pointer to hardware structure
2912 *
2913 *  Enable flow control according to IEEE clause 37.
2914 **/
2915static s32 ixgbe_fc_autoneg_backplane(struct ixgbe_hw *hw)
2916{
2917	u32 links2, anlp1_reg, autoc_reg, links;
2918	s32 ret_val = IXGBE_ERR_FC_NOT_NEGOTIATED;
2919
2920	/*
2921	 * On backplane, bail out if
2922	 * - backplane autoneg was not completed, or if
2923	 * - we are 82599 and link partner is not AN enabled
2924	 */
2925	links = IXGBE_READ_REG(hw, IXGBE_LINKS);
2926	if ((links & IXGBE_LINKS_KX_AN_COMP) == 0) {
2927		ERROR_REPORT1(IXGBE_ERROR_POLLING,
2928			     "Auto-Negotiation did not complete");
2929		goto out;
2930	}
2931
2932	if (hw->mac.type == ixgbe_mac_82599EB) {
2933		links2 = IXGBE_READ_REG(hw, IXGBE_LINKS2);
2934		if ((links2 & IXGBE_LINKS2_AN_SUPPORTED) == 0) {
2935			ERROR_REPORT1(IXGBE_ERROR_UNSUPPORTED,
2936				     "Link partner is not AN enabled");
2937			goto out;
2938		}
2939	}
2940	/*
2941	 * Read the 10g AN autoc and LP ability registers and resolve
2942	 * local flow control settings accordingly
2943	 */
2944	autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
2945	anlp1_reg = IXGBE_READ_REG(hw, IXGBE_ANLP1);
2946
2947	ret_val = ixgbe_negotiate_fc(hw, autoc_reg,
2948		anlp1_reg, IXGBE_AUTOC_SYM_PAUSE, IXGBE_AUTOC_ASM_PAUSE,
2949		IXGBE_ANLP1_SYM_PAUSE, IXGBE_ANLP1_ASM_PAUSE);
2950
2951out:
2952	return ret_val;
2953}
2954
2955/**
2956 *  ixgbe_fc_autoneg_copper - Enable flow control IEEE clause 37
2957 *  @hw: pointer to hardware structure
2958 *
2959 *  Enable flow control according to IEEE clause 37.
2960 **/
2961static s32 ixgbe_fc_autoneg_copper(struct ixgbe_hw *hw)
2962{
2963	u16 technology_ability_reg = 0;
2964	u16 lp_technology_ability_reg = 0;
2965
2966	hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_ADVT,
2967			     IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
2968			     &technology_ability_reg);
2969	hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_LP,
2970			     IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
2971			     &lp_technology_ability_reg);
2972
2973	return ixgbe_negotiate_fc(hw, (u32)technology_ability_reg,
2974				  (u32)lp_technology_ability_reg,
2975				  IXGBE_TAF_SYM_PAUSE, IXGBE_TAF_ASM_PAUSE,
2976				  IXGBE_TAF_SYM_PAUSE, IXGBE_TAF_ASM_PAUSE);
2977}
2978
2979/**
2980 *  ixgbe_fc_autoneg - Configure flow control
2981 *  @hw: pointer to hardware structure
2982 *
2983 *  Compares our advertised flow control capabilities to those advertised by
2984 *  our link partner, and determines the proper flow control mode to use.
2985 **/
2986void ixgbe_fc_autoneg(struct ixgbe_hw *hw)
2987{
2988	s32 ret_val = IXGBE_ERR_FC_NOT_NEGOTIATED;
2989	ixgbe_link_speed speed;
2990	bool link_up;
2991
2992	DEBUGFUNC("ixgbe_fc_autoneg");
2993
2994	/*
2995	 * AN should have completed when the cable was plugged in.
2996	 * Look for reasons to bail out.  Bail out if:
2997	 * - FC autoneg is disabled, or if
2998	 * - link is not up.
2999	 */
3000	if (hw->fc.disable_fc_autoneg) {
3001		ERROR_REPORT1(IXGBE_ERROR_UNSUPPORTED,
3002			     "Flow control autoneg is disabled");
3003		goto out;
3004	}
3005
3006	hw->mac.ops.check_link(hw, &speed, &link_up, FALSE);
3007	if (!link_up) {
3008		ERROR_REPORT1(IXGBE_ERROR_SOFTWARE, "The link is down");
3009		goto out;
3010	}
3011
3012	switch (hw->phy.media_type) {
3013	/* Autoneg flow control on fiber adapters */
3014	case ixgbe_media_type_fiber_fixed:
3015	case ixgbe_media_type_fiber:
3016		if (speed == IXGBE_LINK_SPEED_1GB_FULL)
3017			ret_val = ixgbe_fc_autoneg_fiber(hw);
3018		break;
3019
3020	/* Autoneg flow control on backplane adapters */
3021	case ixgbe_media_type_backplane:
3022		ret_val = ixgbe_fc_autoneg_backplane(hw);
3023		break;
3024
3025	/* Autoneg flow control on copper adapters */
3026	case ixgbe_media_type_copper:
3027		if (ixgbe_device_supports_autoneg_fc(hw))
3028			ret_val = ixgbe_fc_autoneg_copper(hw);
3029		break;
3030
3031	default:
3032		break;
3033	}
3034
3035out:
3036	if (ret_val == IXGBE_SUCCESS) {
3037		hw->fc.fc_was_autonegged = TRUE;
3038	} else {
3039		hw->fc.fc_was_autonegged = FALSE;
3040		hw->fc.current_mode = hw->fc.requested_mode;
3041	}
3042}
3043
3044/*
3045 * ixgbe_pcie_timeout_poll - Return number of times to poll for completion
3046 * @hw: pointer to hardware structure
3047 *
3048 * System-wide timeout range is encoded in PCIe Device Control2 register.
3049 *
3050 * Add 10% to specified maximum and return the number of times to poll for
3051 * completion timeout, in units of 100 microsec.  Never return less than
3052 * 800 = 80 millisec.
3053 */
3054static u32 ixgbe_pcie_timeout_poll(struct ixgbe_hw *hw)
3055{
3056	s16 devctl2;
3057	u32 pollcnt;
3058
3059	devctl2 = IXGBE_READ_PCIE_WORD(hw, IXGBE_PCI_DEVICE_CONTROL2);
3060	devctl2 &= IXGBE_PCIDEVCTRL2_TIMEO_MASK;
3061
3062	switch (devctl2) {
3063	case IXGBE_PCIDEVCTRL2_65_130ms:
3064		pollcnt = 1300;		/* 130 millisec */
3065		break;
3066	case IXGBE_PCIDEVCTRL2_260_520ms:
3067		pollcnt = 5200;		/* 520 millisec */
3068		break;
3069	case IXGBE_PCIDEVCTRL2_1_2s:
3070		pollcnt = 20000;	/* 2 sec */
3071		break;
3072	case IXGBE_PCIDEVCTRL2_4_8s:
3073		pollcnt = 80000;	/* 8 sec */
3074		break;
3075	case IXGBE_PCIDEVCTRL2_17_34s:
3076		pollcnt = 34000;	/* 34 sec */
3077		break;
3078	case IXGBE_PCIDEVCTRL2_50_100us:	/* 100 microsecs */
3079	case IXGBE_PCIDEVCTRL2_1_2ms:		/* 2 millisecs */
3080	case IXGBE_PCIDEVCTRL2_16_32ms:		/* 32 millisec */
3081	case IXGBE_PCIDEVCTRL2_16_32ms_def:	/* 32 millisec default */
3082	default:
3083		pollcnt = 800;		/* 80 millisec minimum */
3084		break;
3085	}
3086
3087	/* add 10% to spec maximum */
3088	return (pollcnt * 11) / 10;
3089}
3090
3091/**
3092 *  ixgbe_disable_pcie_master - Disable PCI-express master access
3093 *  @hw: pointer to hardware structure
3094 *
3095 *  Disables PCI-Express master access and verifies there are no pending
3096 *  requests. IXGBE_ERR_MASTER_REQUESTS_PENDING is returned if master disable
3097 *  bit hasn't caused the master requests to be disabled, else IXGBE_SUCCESS
3098 *  is returned signifying master requests disabled.
3099 **/
3100s32 ixgbe_disable_pcie_master(struct ixgbe_hw *hw)
3101{
3102	s32 status = IXGBE_SUCCESS;
3103	u32 i, poll;
3104
3105	DEBUGFUNC("ixgbe_disable_pcie_master");
3106
3107	/* Always set this bit to ensure any future transactions are blocked */
3108	IXGBE_WRITE_REG(hw, IXGBE_CTRL, IXGBE_CTRL_GIO_DIS);
3109
3110	/* Exit if master requests are blocked */
3111	if (!(IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_GIO))
3112		goto out;
3113
3114	/* Poll for master request bit to clear */
3115	for (i = 0; i < IXGBE_PCI_MASTER_DISABLE_TIMEOUT; i++) {
3116		usec_delay(100);
3117		if (!(IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_GIO))
3118			goto out;
3119	}
3120
3121	/*
3122	 * Two consecutive resets are required via CTRL.RST per datasheet
3123	 * 5.2.5.3.2 Master Disable.  We set a flag to inform the reset routine
3124	 * of this need.  The first reset prevents new master requests from
3125	 * being issued by our device.  We then must wait 1usec or more for any
3126	 * remaining completions from the PCIe bus to trickle in, and then reset
3127	 * again to clear out any effects they may have had on our device.
3128	 */
3129	DEBUGOUT("GIO Master Disable bit didn't clear - requesting resets\n");
3130	hw->mac.flags |= IXGBE_FLAGS_DOUBLE_RESET_REQUIRED;
3131
3132	/*
3133	 * Before proceeding, make sure that the PCIe block does not have
3134	 * transactions pending.
3135	 */
3136	poll = ixgbe_pcie_timeout_poll(hw);
3137	for (i = 0; i < poll; i++) {
3138		usec_delay(100);
3139		if (!(IXGBE_READ_PCIE_WORD(hw, IXGBE_PCI_DEVICE_STATUS) &
3140		    IXGBE_PCI_DEVICE_STATUS_TRANSACTION_PENDING))
3141			goto out;
3142	}
3143
3144	ERROR_REPORT1(IXGBE_ERROR_POLLING,
3145		     "PCIe transaction pending bit also did not clear.\n");
3146	status = IXGBE_ERR_MASTER_REQUESTS_PENDING;
3147
3148out:
3149	return status;
3150}
3151
3152/**
3153 *  ixgbe_acquire_swfw_sync - Acquire SWFW semaphore
3154 *  @hw: pointer to hardware structure
3155 *  @mask: Mask to specify which semaphore to acquire
3156 *
3157 *  Acquires the SWFW semaphore through the GSSR register for the specified
3158 *  function (CSR, PHY0, PHY1, EEPROM, Flash)
3159 **/
3160s32 ixgbe_acquire_swfw_sync(struct ixgbe_hw *hw, u16 mask)
3161{
3162	u32 gssr = 0;
3163	u32 swmask = mask;
3164	u32 fwmask = mask << 5;
3165	u32 timeout = 200;
3166	u32 i;
3167
3168	DEBUGFUNC("ixgbe_acquire_swfw_sync");
3169
3170	for (i = 0; i < timeout; i++) {
3171		/*
3172		 * SW NVM semaphore bit is used for access to all
3173		 * SW_FW_SYNC bits (not just NVM)
3174		 */
3175		if (ixgbe_get_eeprom_semaphore(hw))
3176			return IXGBE_ERR_SWFW_SYNC;
3177
3178		gssr = IXGBE_READ_REG(hw, IXGBE_GSSR);
3179		if (!(gssr & (fwmask | swmask))) {
3180			gssr |= swmask;
3181			IXGBE_WRITE_REG(hw, IXGBE_GSSR, gssr);
3182			ixgbe_release_eeprom_semaphore(hw);
3183			return IXGBE_SUCCESS;
3184		} else {
3185			/* Resource is currently in use by FW or SW */
3186			ixgbe_release_eeprom_semaphore(hw);
3187			msec_delay(5);
3188		}
3189	}
3190
3191	/* If time expired clear the bits holding the lock and retry */
3192	if (gssr & (fwmask | swmask))
3193		ixgbe_release_swfw_sync(hw, gssr & (fwmask | swmask));
3194
3195	msec_delay(5);
3196	return IXGBE_ERR_SWFW_SYNC;
3197}
3198
3199/**
3200 *  ixgbe_release_swfw_sync - Release SWFW semaphore
3201 *  @hw: pointer to hardware structure
3202 *  @mask: Mask to specify which semaphore to release
3203 *
3204 *  Releases the SWFW semaphore through the GSSR register for the specified
3205 *  function (CSR, PHY0, PHY1, EEPROM, Flash)
3206 **/
3207void ixgbe_release_swfw_sync(struct ixgbe_hw *hw, u16 mask)
3208{
3209	u32 gssr;
3210	u32 swmask = mask;
3211
3212	DEBUGFUNC("ixgbe_release_swfw_sync");
3213
3214	ixgbe_get_eeprom_semaphore(hw);
3215
3216	gssr = IXGBE_READ_REG(hw, IXGBE_GSSR);
3217	gssr &= ~swmask;
3218	IXGBE_WRITE_REG(hw, IXGBE_GSSR, gssr);
3219
3220	ixgbe_release_eeprom_semaphore(hw);
3221}
3222
3223/**
3224 *  ixgbe_disable_sec_rx_path_generic - Stops the receive data path
3225 *  @hw: pointer to hardware structure
3226 *
3227 *  Stops the receive data path and waits for the HW to internally empty
3228 *  the Rx security block
3229 **/
3230s32 ixgbe_disable_sec_rx_path_generic(struct ixgbe_hw *hw)
3231{
3232#define IXGBE_MAX_SECRX_POLL 40
3233
3234	int i;
3235	int secrxreg;
3236
3237	DEBUGFUNC("ixgbe_disable_sec_rx_path_generic");
3238
3239
3240	secrxreg = IXGBE_READ_REG(hw, IXGBE_SECRXCTRL);
3241	secrxreg |= IXGBE_SECRXCTRL_RX_DIS;
3242	IXGBE_WRITE_REG(hw, IXGBE_SECRXCTRL, secrxreg);
3243	for (i = 0; i < IXGBE_MAX_SECRX_POLL; i++) {
3244		secrxreg = IXGBE_READ_REG(hw, IXGBE_SECRXSTAT);
3245		if (secrxreg & IXGBE_SECRXSTAT_SECRX_RDY)
3246			break;
3247		else
3248			/* Use interrupt-safe sleep just in case */
3249			usec_delay(1000);
3250	}
3251
3252	/* For informational purposes only */
3253	if (i >= IXGBE_MAX_SECRX_POLL)
3254		DEBUGOUT("Rx unit being enabled before security "
3255			 "path fully disabled.  Continuing with init.\n");
3256
3257	return IXGBE_SUCCESS;
3258}
3259
3260/**
3261 *  ixgbe_enable_sec_rx_path_generic - Enables the receive data path
3262 *  @hw: pointer to hardware structure
3263 *
3264 *  Enables the receive data path.
3265 **/
3266s32 ixgbe_enable_sec_rx_path_generic(struct ixgbe_hw *hw)
3267{
3268	int secrxreg;
3269
3270	DEBUGFUNC("ixgbe_enable_sec_rx_path_generic");
3271
3272	secrxreg = IXGBE_READ_REG(hw, IXGBE_SECRXCTRL);
3273	secrxreg &= ~IXGBE_SECRXCTRL_RX_DIS;
3274	IXGBE_WRITE_REG(hw, IXGBE_SECRXCTRL, secrxreg);
3275	IXGBE_WRITE_FLUSH(hw);
3276
3277	return IXGBE_SUCCESS;
3278}
3279
3280/**
3281 *  ixgbe_enable_rx_dma_generic - Enable the Rx DMA unit
3282 *  @hw: pointer to hardware structure
3283 *  @regval: register value to write to RXCTRL
3284 *
3285 *  Enables the Rx DMA unit
3286 **/
3287s32 ixgbe_enable_rx_dma_generic(struct ixgbe_hw *hw, u32 regval)
3288{
3289	DEBUGFUNC("ixgbe_enable_rx_dma_generic");
3290
3291	IXGBE_WRITE_REG(hw, IXGBE_RXCTRL, regval);
3292
3293	return IXGBE_SUCCESS;
3294}
3295
3296/**
3297 *  ixgbe_blink_led_start_generic - Blink LED based on index.
3298 *  @hw: pointer to hardware structure
3299 *  @index: led number to blink
3300 **/
3301s32 ixgbe_blink_led_start_generic(struct ixgbe_hw *hw, u32 index)
3302{
3303	ixgbe_link_speed speed = 0;
3304	bool link_up = 0;
3305	u32 autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
3306	u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
3307	s32 ret_val = IXGBE_SUCCESS;
3308
3309	DEBUGFUNC("ixgbe_blink_led_start_generic");
3310
3311	/*
3312	 * Link must be up to auto-blink the LEDs;
3313	 * Force it if link is down.
3314	 */
3315	hw->mac.ops.check_link(hw, &speed, &link_up, FALSE);
3316
3317	if (!link_up) {
3318		/* Need the SW/FW semaphore around AUTOC writes if 82599 and
3319		 * LESM is on.
3320		 */
3321		bool got_lock = FALSE;
3322		if ((hw->mac.type == ixgbe_mac_82599EB) &&
3323		    ixgbe_verify_lesm_fw_enabled_82599(hw)) {
3324			ret_val = hw->mac.ops.acquire_swfw_sync(hw,
3325							IXGBE_GSSR_MAC_CSR_SM);
3326			if (ret_val != IXGBE_SUCCESS) {
3327				ret_val = IXGBE_ERR_SWFW_SYNC;
3328				goto out;
3329			}
3330			got_lock = TRUE;
3331		}
3332
3333		autoc_reg |= IXGBE_AUTOC_AN_RESTART;
3334		autoc_reg |= IXGBE_AUTOC_FLU;
3335		IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc_reg);
3336		IXGBE_WRITE_FLUSH(hw);
3337
3338		if (got_lock)
3339			hw->mac.ops.release_swfw_sync(hw,
3340						      IXGBE_GSSR_MAC_CSR_SM);
3341		msec_delay(10);
3342	}
3343
3344	led_reg &= ~IXGBE_LED_MODE_MASK(index);
3345	led_reg |= IXGBE_LED_BLINK(index);
3346	IXGBE_WRITE_REG(hw, IXGBE_LEDCTL, led_reg);
3347	IXGBE_WRITE_FLUSH(hw);
3348
3349out:
3350	return ret_val;
3351}
3352
3353/**
3354 *  ixgbe_blink_led_stop_generic - Stop blinking LED based on index.
3355 *  @hw: pointer to hardware structure
3356 *  @index: led number to stop blinking
3357 **/
3358s32 ixgbe_blink_led_stop_generic(struct ixgbe_hw *hw, u32 index)
3359{
3360	u32 autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
3361	u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
3362	s32 ret_val = IXGBE_SUCCESS;
3363	bool got_lock = FALSE;
3364
3365	DEBUGFUNC("ixgbe_blink_led_stop_generic");
3366	/* Need the SW/FW semaphore around AUTOC writes if 82599 and
3367	 * LESM is on.
3368	 */
3369	if ((hw->mac.type == ixgbe_mac_82599EB) &&
3370	    ixgbe_verify_lesm_fw_enabled_82599(hw)) {
3371		ret_val = hw->mac.ops.acquire_swfw_sync(hw,
3372						IXGBE_GSSR_MAC_CSR_SM);
3373		if (ret_val != IXGBE_SUCCESS) {
3374			ret_val = IXGBE_ERR_SWFW_SYNC;
3375			goto out;
3376		}
3377		got_lock = TRUE;
3378	}
3379
3380
3381	autoc_reg &= ~IXGBE_AUTOC_FLU;
3382	autoc_reg |= IXGBE_AUTOC_AN_RESTART;
3383	IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc_reg);
3384
3385	if (hw->mac.type == ixgbe_mac_82599EB)
3386		ixgbe_reset_pipeline_82599(hw);
3387
3388	if (got_lock)
3389		hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_MAC_CSR_SM);
3390
3391	led_reg &= ~IXGBE_LED_MODE_MASK(index);
3392	led_reg &= ~IXGBE_LED_BLINK(index);
3393	led_reg |= IXGBE_LED_LINK_ACTIVE << IXGBE_LED_MODE_SHIFT(index);
3394	IXGBE_WRITE_REG(hw, IXGBE_LEDCTL, led_reg);
3395	IXGBE_WRITE_FLUSH(hw);
3396
3397out:
3398	return ret_val;
3399}
3400
3401/**
3402 *  ixgbe_get_san_mac_addr_offset - Get SAN MAC address offset from the EEPROM
3403 *  @hw: pointer to hardware structure
3404 *  @san_mac_offset: SAN MAC address offset
3405 *
3406 *  This function will read the EEPROM location for the SAN MAC address
3407 *  pointer, and returns the value at that location.  This is used in both
3408 *  get and set mac_addr routines.
3409 **/
3410static s32 ixgbe_get_san_mac_addr_offset(struct ixgbe_hw *hw,
3411					 u16 *san_mac_offset)
3412{
3413	s32 ret_val;
3414
3415	DEBUGFUNC("ixgbe_get_san_mac_addr_offset");
3416
3417	/*
3418	 * First read the EEPROM pointer to see if the MAC addresses are
3419	 * available.
3420	 */
3421	ret_val = hw->eeprom.ops.read(hw, IXGBE_SAN_MAC_ADDR_PTR,
3422				      san_mac_offset);
3423	if (ret_val) {
3424		ERROR_REPORT2(IXGBE_ERROR_INVALID_STATE,
3425			      "eeprom at offset %d failed",
3426			      IXGBE_SAN_MAC_ADDR_PTR);
3427	}
3428
3429	return ret_val;
3430}
3431
3432/**
3433 *  ixgbe_get_san_mac_addr_generic - SAN MAC address retrieval from the EEPROM
3434 *  @hw: pointer to hardware structure
3435 *  @san_mac_addr: SAN MAC address
3436 *
3437 *  Reads the SAN MAC address from the EEPROM, if it's available.  This is
3438 *  per-port, so set_lan_id() must be called before reading the addresses.
3439 *  set_lan_id() is called by identify_sfp(), but this cannot be relied
3440 *  upon for non-SFP connections, so we must call it here.
3441 **/
3442s32 ixgbe_get_san_mac_addr_generic(struct ixgbe_hw *hw, u8 *san_mac_addr)
3443{
3444	u16 san_mac_data, san_mac_offset;
3445	u8 i;
3446	s32 ret_val;
3447
3448	DEBUGFUNC("ixgbe_get_san_mac_addr_generic");
3449
3450	/*
3451	 * First read the EEPROM pointer to see if the MAC addresses are
3452	 * available.  If they're not, no point in calling set_lan_id() here.
3453	 */
3454	ret_val = ixgbe_get_san_mac_addr_offset(hw, &san_mac_offset);
3455	if (ret_val || san_mac_offset == 0 || san_mac_offset == 0xFFFF)
3456		goto san_mac_addr_out;
3457
3458	/* make sure we know which port we need to program */
3459	hw->mac.ops.set_lan_id(hw);
3460	/* apply the port offset to the address offset */
3461	(hw->bus.func) ? (san_mac_offset += IXGBE_SAN_MAC_ADDR_PORT1_OFFSET) :
3462			 (san_mac_offset += IXGBE_SAN_MAC_ADDR_PORT0_OFFSET);
3463	for (i = 0; i < 3; i++) {
3464		ret_val = hw->eeprom.ops.read(hw, san_mac_offset,
3465					      &san_mac_data);
3466		if (ret_val) {
3467			ERROR_REPORT2(IXGBE_ERROR_INVALID_STATE,
3468				      "eeprom read at offset %d failed",
3469				      san_mac_offset);
3470			goto san_mac_addr_out;
3471		}
3472		san_mac_addr[i * 2] = (u8)(san_mac_data);
3473		san_mac_addr[i * 2 + 1] = (u8)(san_mac_data >> 8);
3474		san_mac_offset++;
3475	}
3476	return IXGBE_SUCCESS;
3477
3478san_mac_addr_out:
3479	/*
3480	 * No addresses available in this EEPROM.  It's not an
3481	 * error though, so just wipe the local address and return.
3482	 */
3483	for (i = 0; i < 6; i++)
3484		san_mac_addr[i] = 0xFF;
3485	return IXGBE_SUCCESS;
3486}
3487
3488/**
3489 *  ixgbe_set_san_mac_addr_generic - Write the SAN MAC address to the EEPROM
3490 *  @hw: pointer to hardware structure
3491 *  @san_mac_addr: SAN MAC address
3492 *
3493 *  Write a SAN MAC address to the EEPROM.
3494 **/
3495s32 ixgbe_set_san_mac_addr_generic(struct ixgbe_hw *hw, u8 *san_mac_addr)
3496{
3497	s32 ret_val;
3498	u16 san_mac_data, san_mac_offset;
3499	u8 i;
3500
3501	DEBUGFUNC("ixgbe_set_san_mac_addr_generic");
3502
3503	/* Look for SAN mac address pointer.  If not defined, return */
3504	ret_val = ixgbe_get_san_mac_addr_offset(hw, &san_mac_offset);
3505	if (ret_val || san_mac_offset == 0 || san_mac_offset == 0xFFFF)
3506		return IXGBE_ERR_NO_SAN_ADDR_PTR;
3507
3508	/* Make sure we know which port we need to write */
3509	hw->mac.ops.set_lan_id(hw);
3510	/* Apply the port offset to the address offset */
3511	(hw->bus.func) ? (san_mac_offset += IXGBE_SAN_MAC_ADDR_PORT1_OFFSET) :
3512			 (san_mac_offset += IXGBE_SAN_MAC_ADDR_PORT0_OFFSET);
3513
3514	for (i = 0; i < 3; i++) {
3515		san_mac_data = (u16)((u16)(san_mac_addr[i * 2 + 1]) << 8);
3516		san_mac_data |= (u16)(san_mac_addr[i * 2]);
3517		hw->eeprom.ops.write(hw, san_mac_offset, san_mac_data);
3518		san_mac_offset++;
3519	}
3520
3521	return IXGBE_SUCCESS;
3522}
3523
3524/**
3525 *  ixgbe_get_pcie_msix_count_generic - Gets MSI-X vector count
3526 *  @hw: pointer to hardware structure
3527 *
3528 *  Read PCIe configuration space, and get the MSI-X vector count from
3529 *  the capabilities table.
3530 **/
3531u16 ixgbe_get_pcie_msix_count_generic(struct ixgbe_hw *hw)
3532{
3533	u16 msix_count = 1;
3534	u16 max_msix_count;
3535	u16 pcie_offset;
3536
3537	switch (hw->mac.type) {
3538	case ixgbe_mac_82598EB:
3539		pcie_offset = IXGBE_PCIE_MSIX_82598_CAPS;
3540		max_msix_count = IXGBE_MAX_MSIX_VECTORS_82598;
3541		break;
3542	case ixgbe_mac_82599EB:
3543	case ixgbe_mac_X540:
3544		pcie_offset = IXGBE_PCIE_MSIX_82599_CAPS;
3545		max_msix_count = IXGBE_MAX_MSIX_VECTORS_82599;
3546		break;
3547	default:
3548		return msix_count;
3549	}
3550
3551	DEBUGFUNC("ixgbe_get_pcie_msix_count_generic");
3552	msix_count = IXGBE_READ_PCIE_WORD(hw, pcie_offset);
3553	msix_count &= IXGBE_PCIE_MSIX_TBL_SZ_MASK;
3554
3555	/* MSI-X count is zero-based in HW */
3556	msix_count++;
3557
3558	if (msix_count > max_msix_count)
3559		msix_count = max_msix_count;
3560
3561	return msix_count;
3562}
3563
3564/**
3565 *  ixgbe_insert_mac_addr_generic - Find a RAR for this mac address
3566 *  @hw: pointer to hardware structure
3567 *  @addr: Address to put into receive address register
3568 *  @vmdq: VMDq pool to assign
3569 *
3570 *  Puts an ethernet address into a receive address register, or
3571 *  finds the rar that it is aleady in; adds to the pool list
3572 **/
3573s32 ixgbe_insert_mac_addr_generic(struct ixgbe_hw *hw, u8 *addr, u32 vmdq)
3574{
3575	static const u32 NO_EMPTY_RAR_FOUND = 0xFFFFFFFF;
3576	u32 first_empty_rar = NO_EMPTY_RAR_FOUND;
3577	u32 rar;
3578	u32 rar_low, rar_high;
3579	u32 addr_low, addr_high;
3580
3581	DEBUGFUNC("ixgbe_insert_mac_addr_generic");
3582
3583	/* swap bytes for HW little endian */
3584	addr_low  = addr[0] | (addr[1] << 8)
3585			    | (addr[2] << 16)
3586			    | (addr[3] << 24);
3587	addr_high = addr[4] | (addr[5] << 8);
3588
3589	/*
3590	 * Either find the mac_id in rar or find the first empty space.
3591	 * rar_highwater points to just after the highest currently used
3592	 * rar in order to shorten the search.  It grows when we add a new
3593	 * rar to the top.
3594	 */
3595	for (rar = 0; rar < hw->mac.rar_highwater; rar++) {
3596		rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(rar));
3597
3598		if (((IXGBE_RAH_AV & rar_high) == 0)
3599		    && first_empty_rar == NO_EMPTY_RAR_FOUND) {
3600			first_empty_rar = rar;
3601		} else if ((rar_high & 0xFFFF) == addr_high) {
3602			rar_low = IXGBE_READ_REG(hw, IXGBE_RAL(rar));
3603			if (rar_low == addr_low)
3604				break;    /* found it already in the rars */
3605		}
3606	}
3607
3608	if (rar < hw->mac.rar_highwater) {
3609		/* already there so just add to the pool bits */
3610		ixgbe_set_vmdq(hw, rar, vmdq);
3611	} else if (first_empty_rar != NO_EMPTY_RAR_FOUND) {
3612		/* stick it into first empty RAR slot we found */
3613		rar = first_empty_rar;
3614		ixgbe_set_rar(hw, rar, addr, vmdq, IXGBE_RAH_AV);
3615	} else if (rar == hw->mac.rar_highwater) {
3616		/* add it to the top of the list and inc the highwater mark */
3617		ixgbe_set_rar(hw, rar, addr, vmdq, IXGBE_RAH_AV);
3618		hw->mac.rar_highwater++;
3619	} else if (rar >= hw->mac.num_rar_entries) {
3620		return IXGBE_ERR_INVALID_MAC_ADDR;
3621	}
3622
3623	/*
3624	 * If we found rar[0], make sure the default pool bit (we use pool 0)
3625	 * remains cleared to be sure default pool packets will get delivered
3626	 */
3627	if (rar == 0)
3628		ixgbe_clear_vmdq(hw, rar, 0);
3629
3630	return rar;
3631}
3632
3633/**
3634 *  ixgbe_clear_vmdq_generic - Disassociate a VMDq pool index from a rx address
3635 *  @hw: pointer to hardware struct
3636 *  @rar: receive address register index to disassociate
3637 *  @vmdq: VMDq pool index to remove from the rar
3638 **/
3639s32 ixgbe_clear_vmdq_generic(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
3640{
3641	u32 mpsar_lo, mpsar_hi;
3642	u32 rar_entries = hw->mac.num_rar_entries;
3643
3644	DEBUGFUNC("ixgbe_clear_vmdq_generic");
3645
3646	/* Make sure we are using a valid rar index range */
3647	if (rar >= rar_entries) {
3648		ERROR_REPORT2(IXGBE_ERROR_ARGUMENT,
3649			     "RAR index %d is out of range.\n", rar);
3650		return IXGBE_ERR_INVALID_ARGUMENT;
3651	}
3652
3653	mpsar_lo = IXGBE_READ_REG(hw, IXGBE_MPSAR_LO(rar));
3654	mpsar_hi = IXGBE_READ_REG(hw, IXGBE_MPSAR_HI(rar));
3655
3656	if (!mpsar_lo && !mpsar_hi)
3657		goto done;
3658
3659	if (vmdq == IXGBE_CLEAR_VMDQ_ALL) {
3660		if (mpsar_lo) {
3661			IXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), 0);
3662			mpsar_lo = 0;
3663		}
3664		if (mpsar_hi) {
3665			IXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), 0);
3666			mpsar_hi = 0;
3667		}
3668	} else if (vmdq < 32) {
3669		mpsar_lo &= ~(1 << vmdq);
3670		IXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), mpsar_lo);
3671	} else {
3672		mpsar_hi &= ~(1 << (vmdq - 32));
3673		IXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), mpsar_hi);
3674	}
3675
3676	/* was that the last pool using this rar? */
3677	if (mpsar_lo == 0 && mpsar_hi == 0 && rar != 0)
3678		hw->mac.ops.clear_rar(hw, rar);
3679done:
3680	return IXGBE_SUCCESS;
3681}
3682
3683/**
3684 *  ixgbe_set_vmdq_generic - Associate a VMDq pool index with a rx address
3685 *  @hw: pointer to hardware struct
3686 *  @rar: receive address register index to associate with a VMDq index
3687 *  @vmdq: VMDq pool index
3688 **/
3689s32 ixgbe_set_vmdq_generic(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
3690{
3691	u32 mpsar;
3692	u32 rar_entries = hw->mac.num_rar_entries;
3693
3694	DEBUGFUNC("ixgbe_set_vmdq_generic");
3695
3696	/* Make sure we are using a valid rar index range */
3697	if (rar >= rar_entries) {
3698		ERROR_REPORT2(IXGBE_ERROR_ARGUMENT,
3699			     "RAR index %d is out of range.\n", rar);
3700		return IXGBE_ERR_INVALID_ARGUMENT;
3701	}
3702
3703	if (vmdq < 32) {
3704		mpsar = IXGBE_READ_REG(hw, IXGBE_MPSAR_LO(rar));
3705		mpsar |= 1 << vmdq;
3706		IXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), mpsar);
3707	} else {
3708		mpsar = IXGBE_READ_REG(hw, IXGBE_MPSAR_HI(rar));
3709		mpsar |= 1 << (vmdq - 32);
3710		IXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), mpsar);
3711	}
3712	return IXGBE_SUCCESS;
3713}
3714
3715/**
3716 *  This function should only be involved in the IOV mode.
3717 *  In IOV mode, Default pool is next pool after the number of
3718 *  VFs advertized and not 0.
3719 *  MPSAR table needs to be updated for SAN_MAC RAR [hw->mac.san_mac_rar_index]
3720 *
3721 *  ixgbe_set_vmdq_san_mac - Associate default VMDq pool index with a rx address
3722 *  @hw: pointer to hardware struct
3723 *  @vmdq: VMDq pool index
3724 **/
3725s32 ixgbe_set_vmdq_san_mac_generic(struct ixgbe_hw *hw, u32 vmdq)
3726{
3727	u32 rar = hw->mac.san_mac_rar_index;
3728
3729	DEBUGFUNC("ixgbe_set_vmdq_san_mac");
3730
3731	if (vmdq < 32) {
3732		IXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), 1 << vmdq);
3733		IXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), 0);
3734	} else {
3735		IXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), 0);
3736		IXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), 1 << (vmdq - 32));
3737	}
3738
3739	return IXGBE_SUCCESS;
3740}
3741
3742/**
3743 *  ixgbe_init_uta_tables_generic - Initialize the Unicast Table Array
3744 *  @hw: pointer to hardware structure
3745 **/
3746s32 ixgbe_init_uta_tables_generic(struct ixgbe_hw *hw)
3747{
3748	int i;
3749
3750	DEBUGFUNC("ixgbe_init_uta_tables_generic");
3751	DEBUGOUT(" Clearing UTA\n");
3752
3753	for (i = 0; i < 128; i++)
3754		IXGBE_WRITE_REG(hw, IXGBE_UTA(i), 0);
3755
3756	return IXGBE_SUCCESS;
3757}
3758
3759/**
3760 *  ixgbe_find_vlvf_slot - find the vlanid or the first empty slot
3761 *  @hw: pointer to hardware structure
3762 *  @vlan: VLAN id to write to VLAN filter
3763 *
3764 *  return the VLVF index where this VLAN id should be placed
3765 *
3766 **/
3767s32 ixgbe_find_vlvf_slot(struct ixgbe_hw *hw, u32 vlan)
3768{
3769	u32 bits = 0;
3770	u32 first_empty_slot = 0;
3771	s32 regindex;
3772
3773	/* short cut the special case */
3774	if (vlan == 0)
3775		return 0;
3776
3777	/*
3778	  * Search for the vlan id in the VLVF entries. Save off the first empty
3779	  * slot found along the way
3780	  */
3781	for (regindex = 1; regindex < IXGBE_VLVF_ENTRIES; regindex++) {
3782		bits = IXGBE_READ_REG(hw, IXGBE_VLVF(regindex));
3783		if (!bits && !(first_empty_slot))
3784			first_empty_slot = regindex;
3785		else if ((bits & 0x0FFF) == vlan)
3786			break;
3787	}
3788
3789	/*
3790	  * If regindex is less than IXGBE_VLVF_ENTRIES, then we found the vlan
3791	  * in the VLVF. Else use the first empty VLVF register for this
3792	  * vlan id.
3793	  */
3794	if (regindex >= IXGBE_VLVF_ENTRIES) {
3795		if (first_empty_slot)
3796			regindex = first_empty_slot;
3797		else {
3798			ERROR_REPORT1(IXGBE_ERROR_SOFTWARE,
3799				     "No space in VLVF.\n");
3800			regindex = IXGBE_ERR_NO_SPACE;
3801		}
3802	}
3803
3804	return regindex;
3805}
3806
3807/**
3808 *  ixgbe_set_vfta_generic - Set VLAN filter table
3809 *  @hw: pointer to hardware structure
3810 *  @vlan: VLAN id to write to VLAN filter
3811 *  @vind: VMDq output index that maps queue to VLAN id in VFVFB
3812 *  @vlan_on: boolean flag to turn on/off VLAN in VFVF
3813 *
3814 *  Turn on/off specified VLAN in the VLAN filter table.
3815 **/
3816s32 ixgbe_set_vfta_generic(struct ixgbe_hw *hw, u32 vlan, u32 vind,
3817			   bool vlan_on)
3818{
3819	s32 regindex;
3820	u32 bitindex;
3821	u32 vfta;
3822	u32 targetbit;
3823	s32 ret_val = IXGBE_SUCCESS;
3824	bool vfta_changed = FALSE;
3825
3826	DEBUGFUNC("ixgbe_set_vfta_generic");
3827
3828	if (vlan > 4095)
3829		return IXGBE_ERR_PARAM;
3830
3831	/*
3832	 * this is a 2 part operation - first the VFTA, then the
3833	 * VLVF and VLVFB if VT Mode is set
3834	 * We don't write the VFTA until we know the VLVF part succeeded.
3835	 */
3836
3837	/* Part 1
3838	 * The VFTA is a bitstring made up of 128 32-bit registers
3839	 * that enable the particular VLAN id, much like the MTA:
3840	 *    bits[11-5]: which register
3841	 *    bits[4-0]:  which bit in the register
3842	 */
3843	regindex = (vlan >> 5) & 0x7F;
3844	bitindex = vlan & 0x1F;
3845	targetbit = (1 << bitindex);
3846	vfta = IXGBE_READ_REG(hw, IXGBE_VFTA(regindex));
3847
3848	if (vlan_on) {
3849		if (!(vfta & targetbit)) {
3850			vfta |= targetbit;
3851			vfta_changed = TRUE;
3852		}
3853	} else {
3854		if ((vfta & targetbit)) {
3855			vfta &= ~targetbit;
3856			vfta_changed = TRUE;
3857		}
3858	}
3859
3860	/* Part 2
3861	 * Call ixgbe_set_vlvf_generic to set VLVFB and VLVF
3862	 */
3863	ret_val = ixgbe_set_vlvf_generic(hw, vlan, vind, vlan_on,
3864					 &vfta_changed);
3865	if (ret_val != IXGBE_SUCCESS)
3866		return ret_val;
3867
3868	if (vfta_changed)
3869		IXGBE_WRITE_REG(hw, IXGBE_VFTA(regindex), vfta);
3870
3871	return IXGBE_SUCCESS;
3872}
3873
3874/**
3875 *  ixgbe_set_vlvf_generic - Set VLAN Pool Filter
3876 *  @hw: pointer to hardware structure
3877 *  @vlan: VLAN id to write to VLAN filter
3878 *  @vind: VMDq output index that maps queue to VLAN id in VFVFB
3879 *  @vlan_on: boolean flag to turn on/off VLAN in VFVF
3880 *  @vfta_changed: pointer to boolean flag which indicates whether VFTA
3881 *                 should be changed
3882 *
3883 *  Turn on/off specified bit in VLVF table.
3884 **/
3885s32 ixgbe_set_vlvf_generic(struct ixgbe_hw *hw, u32 vlan, u32 vind,
3886			    bool vlan_on, bool *vfta_changed)
3887{
3888	u32 vt;
3889
3890	DEBUGFUNC("ixgbe_set_vlvf_generic");
3891
3892	if (vlan > 4095)
3893		return IXGBE_ERR_PARAM;
3894
3895	/* If VT Mode is set
3896	 *   Either vlan_on
3897	 *     make sure the vlan is in VLVF
3898	 *     set the vind bit in the matching VLVFB
3899	 *   Or !vlan_on
3900	 *     clear the pool bit and possibly the vind
3901	 */
3902	vt = IXGBE_READ_REG(hw, IXGBE_VT_CTL);
3903	if (vt & IXGBE_VT_CTL_VT_ENABLE) {
3904		s32 vlvf_index;
3905		u32 bits;
3906
3907		vlvf_index = ixgbe_find_vlvf_slot(hw, vlan);
3908		if (vlvf_index < 0)
3909			return vlvf_index;
3910
3911		if (vlan_on) {
3912			/* set the pool bit */
3913			if (vind < 32) {
3914				bits = IXGBE_READ_REG(hw,
3915						IXGBE_VLVFB(vlvf_index * 2));
3916				bits |= (1 << vind);
3917				IXGBE_WRITE_REG(hw,
3918						IXGBE_VLVFB(vlvf_index * 2),
3919						bits);
3920			} else {
3921				bits = IXGBE_READ_REG(hw,
3922					IXGBE_VLVFB((vlvf_index * 2) + 1));
3923				bits |= (1 << (vind - 32));
3924				IXGBE_WRITE_REG(hw,
3925					IXGBE_VLVFB((vlvf_index * 2) + 1),
3926					bits);
3927			}
3928		} else {
3929			/* clear the pool bit */
3930			if (vind < 32) {
3931				bits = IXGBE_READ_REG(hw,
3932						IXGBE_VLVFB(vlvf_index * 2));
3933				bits &= ~(1 << vind);
3934				IXGBE_WRITE_REG(hw,
3935						IXGBE_VLVFB(vlvf_index * 2),
3936						bits);
3937				bits |= IXGBE_READ_REG(hw,
3938					IXGBE_VLVFB((vlvf_index * 2) + 1));
3939			} else {
3940				bits = IXGBE_READ_REG(hw,
3941					IXGBE_VLVFB((vlvf_index * 2) + 1));
3942				bits &= ~(1 << (vind - 32));
3943				IXGBE_WRITE_REG(hw,
3944					IXGBE_VLVFB((vlvf_index * 2) + 1),
3945					bits);
3946				bits |= IXGBE_READ_REG(hw,
3947						IXGBE_VLVFB(vlvf_index * 2));
3948			}
3949		}
3950
3951		/*
3952		 * If there are still bits set in the VLVFB registers
3953		 * for the VLAN ID indicated we need to see if the
3954		 * caller is requesting that we clear the VFTA entry bit.
3955		 * If the caller has requested that we clear the VFTA
3956		 * entry bit but there are still pools/VFs using this VLAN
3957		 * ID entry then ignore the request.  We're not worried
3958		 * about the case where we're turning the VFTA VLAN ID
3959		 * entry bit on, only when requested to turn it off as
3960		 * there may be multiple pools and/or VFs using the
3961		 * VLAN ID entry.  In that case we cannot clear the
3962		 * VFTA bit until all pools/VFs using that VLAN ID have also
3963		 * been cleared.  This will be indicated by "bits" being
3964		 * zero.
3965		 */
3966		if (bits) {
3967			IXGBE_WRITE_REG(hw, IXGBE_VLVF(vlvf_index),
3968					(IXGBE_VLVF_VIEN | vlan));
3969			if ((!vlan_on) && (vfta_changed != NULL)) {
3970				/* someone wants to clear the vfta entry
3971				 * but some pools/VFs are still using it.
3972				 * Ignore it. */
3973				*vfta_changed = FALSE;
3974			}
3975		} else
3976			IXGBE_WRITE_REG(hw, IXGBE_VLVF(vlvf_index), 0);
3977	}
3978
3979	return IXGBE_SUCCESS;
3980}
3981
3982/**
3983 *  ixgbe_clear_vfta_generic - Clear VLAN filter table
3984 *  @hw: pointer to hardware structure
3985 *
3986 *  Clears the VLAN filer table, and the VMDq index associated with the filter
3987 **/
3988s32 ixgbe_clear_vfta_generic(struct ixgbe_hw *hw)
3989{
3990	u32 offset;
3991
3992	DEBUGFUNC("ixgbe_clear_vfta_generic");
3993
3994	for (offset = 0; offset < hw->mac.vft_size; offset++)
3995		IXGBE_WRITE_REG(hw, IXGBE_VFTA(offset), 0);
3996
3997	for (offset = 0; offset < IXGBE_VLVF_ENTRIES; offset++) {
3998		IXGBE_WRITE_REG(hw, IXGBE_VLVF(offset), 0);
3999		IXGBE_WRITE_REG(hw, IXGBE_VLVFB(offset * 2), 0);
4000		IXGBE_WRITE_REG(hw, IXGBE_VLVFB((offset * 2) + 1), 0);
4001	}
4002
4003	return IXGBE_SUCCESS;
4004}
4005
4006/**
4007 *  ixgbe_check_mac_link_generic - Determine link and speed status
4008 *  @hw: pointer to hardware structure
4009 *  @speed: pointer to link speed
4010 *  @link_up: TRUE when link is up
4011 *  @link_up_wait_to_complete: bool used to wait for link up or not
4012 *
4013 *  Reads the links register to determine if link is up and the current speed
4014 **/
4015s32 ixgbe_check_mac_link_generic(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
4016				 bool *link_up, bool link_up_wait_to_complete)
4017{
4018	u32 links_reg, links_orig;
4019	u32 i;
4020
4021	DEBUGFUNC("ixgbe_check_mac_link_generic");
4022
4023	/* clear the old state */
4024	links_orig = IXGBE_READ_REG(hw, IXGBE_LINKS);
4025
4026	links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
4027
4028	if (links_orig != links_reg) {
4029		DEBUGOUT2("LINKS changed from %08X to %08X\n",
4030			  links_orig, links_reg);
4031	}
4032
4033	if (link_up_wait_to_complete) {
4034		for (i = 0; i < IXGBE_LINK_UP_TIME; i++) {
4035			if (links_reg & IXGBE_LINKS_UP) {
4036				*link_up = TRUE;
4037				break;
4038			} else {
4039				*link_up = FALSE;
4040			}
4041			msec_delay(100);
4042			links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
4043		}
4044	} else {
4045		if (links_reg & IXGBE_LINKS_UP)
4046			*link_up = TRUE;
4047		else
4048			*link_up = FALSE;
4049	}
4050
4051	if ((links_reg & IXGBE_LINKS_SPEED_82599) ==
4052	    IXGBE_LINKS_SPEED_10G_82599)
4053		*speed = IXGBE_LINK_SPEED_10GB_FULL;
4054	else if ((links_reg & IXGBE_LINKS_SPEED_82599) ==
4055		 IXGBE_LINKS_SPEED_1G_82599)
4056		*speed = IXGBE_LINK_SPEED_1GB_FULL;
4057	else if ((links_reg & IXGBE_LINKS_SPEED_82599) ==
4058		 IXGBE_LINKS_SPEED_100_82599)
4059		*speed = IXGBE_LINK_SPEED_100_FULL;
4060	else
4061		*speed = IXGBE_LINK_SPEED_UNKNOWN;
4062
4063	return IXGBE_SUCCESS;
4064}
4065
4066/**
4067 *  ixgbe_get_wwn_prefix_generic - Get alternative WWNN/WWPN prefix from
4068 *  the EEPROM
4069 *  @hw: pointer to hardware structure
4070 *  @wwnn_prefix: the alternative WWNN prefix
4071 *  @wwpn_prefix: the alternative WWPN prefix
4072 *
4073 *  This function will read the EEPROM from the alternative SAN MAC address
4074 *  block to check the support for the alternative WWNN/WWPN prefix support.
4075 **/
4076s32 ixgbe_get_wwn_prefix_generic(struct ixgbe_hw *hw, u16 *wwnn_prefix,
4077				 u16 *wwpn_prefix)
4078{
4079	u16 offset, caps;
4080	u16 alt_san_mac_blk_offset;
4081
4082	DEBUGFUNC("ixgbe_get_wwn_prefix_generic");
4083
4084	/* clear output first */
4085	*wwnn_prefix = 0xFFFF;
4086	*wwpn_prefix = 0xFFFF;
4087
4088	/* check if alternative SAN MAC is supported */
4089	offset = IXGBE_ALT_SAN_MAC_ADDR_BLK_PTR;
4090	if (hw->eeprom.ops.read(hw, offset, &alt_san_mac_blk_offset))
4091		goto wwn_prefix_err;
4092
4093	if ((alt_san_mac_blk_offset == 0) ||
4094	    (alt_san_mac_blk_offset == 0xFFFF))
4095		goto wwn_prefix_out;
4096
4097	/* check capability in alternative san mac address block */
4098	offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_CAPS_OFFSET;
4099	if (hw->eeprom.ops.read(hw, offset, &caps))
4100		goto wwn_prefix_err;
4101	if (!(caps & IXGBE_ALT_SAN_MAC_ADDR_CAPS_ALTWWN))
4102		goto wwn_prefix_out;
4103
4104	/* get the corresponding prefix for WWNN/WWPN */
4105	offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_WWNN_OFFSET;
4106	if (hw->eeprom.ops.read(hw, offset, wwnn_prefix)) {
4107		ERROR_REPORT2(IXGBE_ERROR_INVALID_STATE,
4108			      "eeprom read at offset %d failed", offset);
4109	}
4110
4111	offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_WWPN_OFFSET;
4112	if (hw->eeprom.ops.read(hw, offset, wwpn_prefix))
4113		goto wwn_prefix_err;
4114
4115wwn_prefix_out:
4116	return IXGBE_SUCCESS;
4117
4118wwn_prefix_err:
4119	ERROR_REPORT2(IXGBE_ERROR_INVALID_STATE,
4120		      "eeprom read at offset %d failed", offset);
4121	return IXGBE_SUCCESS;
4122}
4123
4124/**
4125 *  ixgbe_get_fcoe_boot_status_generic - Get FCOE boot status from EEPROM
4126 *  @hw: pointer to hardware structure
4127 *  @bs: the fcoe boot status
4128 *
4129 *  This function will read the FCOE boot status from the iSCSI FCOE block
4130 **/
4131s32 ixgbe_get_fcoe_boot_status_generic(struct ixgbe_hw *hw, u16 *bs)
4132{
4133	u16 offset, caps, flags;
4134	s32 status;
4135
4136	DEBUGFUNC("ixgbe_get_fcoe_boot_status_generic");
4137
4138	/* clear output first */
4139	*bs = ixgbe_fcoe_bootstatus_unavailable;
4140
4141	/* check if FCOE IBA block is present */
4142	offset = IXGBE_FCOE_IBA_CAPS_BLK_PTR;
4143	status = hw->eeprom.ops.read(hw, offset, &caps);
4144	if (status != IXGBE_SUCCESS)
4145		goto out;
4146
4147	if (!(caps & IXGBE_FCOE_IBA_CAPS_FCOE))
4148		goto out;
4149
4150	/* check if iSCSI FCOE block is populated */
4151	status = hw->eeprom.ops.read(hw, IXGBE_ISCSI_FCOE_BLK_PTR, &offset);
4152	if (status != IXGBE_SUCCESS)
4153		goto out;
4154
4155	if ((offset == 0) || (offset == 0xFFFF))
4156		goto out;
4157
4158	/* read fcoe flags in iSCSI FCOE block */
4159	offset = offset + IXGBE_ISCSI_FCOE_FLAGS_OFFSET;
4160	status = hw->eeprom.ops.read(hw, offset, &flags);
4161	if (status != IXGBE_SUCCESS)
4162		goto out;
4163
4164	if (flags & IXGBE_ISCSI_FCOE_FLAGS_ENABLE)
4165		*bs = ixgbe_fcoe_bootstatus_enabled;
4166	else
4167		*bs = ixgbe_fcoe_bootstatus_disabled;
4168
4169out:
4170	return status;
4171}
4172
4173/**
4174 *  ixgbe_set_mac_anti_spoofing - Enable/Disable MAC anti-spoofing
4175 *  @hw: pointer to hardware structure
4176 *  @enable: enable or disable switch for anti-spoofing
4177 *  @pf: Physical Function pool - do not enable anti-spoofing for the PF
4178 *
4179 **/
4180void ixgbe_set_mac_anti_spoofing(struct ixgbe_hw *hw, bool enable, int pf)
4181{
4182	int j;
4183	int pf_target_reg = pf >> 3;
4184	int pf_target_shift = pf % 8;
4185	u32 pfvfspoof = 0;
4186
4187	if (hw->mac.type == ixgbe_mac_82598EB)
4188		return;
4189
4190	if (enable)
4191		pfvfspoof = IXGBE_SPOOF_MACAS_MASK;
4192
4193	/*
4194	 * PFVFSPOOF register array is size 8 with 8 bits assigned to
4195	 * MAC anti-spoof enables in each register array element.
4196	 */
4197	for (j = 0; j < pf_target_reg; j++)
4198		IXGBE_WRITE_REG(hw, IXGBE_PFVFSPOOF(j), pfvfspoof);
4199
4200	/*
4201	 * The PF should be allowed to spoof so that it can support
4202	 * emulation mode NICs.  Do not set the bits assigned to the PF
4203	 */
4204	pfvfspoof &= (1 << pf_target_shift) - 1;
4205	IXGBE_WRITE_REG(hw, IXGBE_PFVFSPOOF(j), pfvfspoof);
4206
4207	/*
4208	 * Remaining pools belong to the PF so they do not need to have
4209	 * anti-spoofing enabled.
4210	 */
4211	for (j++; j < IXGBE_PFVFSPOOF_REG_COUNT; j++)
4212		IXGBE_WRITE_REG(hw, IXGBE_PFVFSPOOF(j), 0);
4213}
4214
4215/**
4216 *  ixgbe_set_vlan_anti_spoofing - Enable/Disable VLAN anti-spoofing
4217 *  @hw: pointer to hardware structure
4218 *  @enable: enable or disable switch for VLAN anti-spoofing
4219 *  @pf: Virtual Function pool - VF Pool to set for VLAN anti-spoofing
4220 *
4221 **/
4222void ixgbe_set_vlan_anti_spoofing(struct ixgbe_hw *hw, bool enable, int vf)
4223{
4224	int vf_target_reg = vf >> 3;
4225	int vf_target_shift = vf % 8 + IXGBE_SPOOF_VLANAS_SHIFT;
4226	u32 pfvfspoof;
4227
4228	if (hw->mac.type == ixgbe_mac_82598EB)
4229		return;
4230
4231	pfvfspoof = IXGBE_READ_REG(hw, IXGBE_PFVFSPOOF(vf_target_reg));
4232	if (enable)
4233		pfvfspoof |= (1 << vf_target_shift);
4234	else
4235		pfvfspoof &= ~(1 << vf_target_shift);
4236	IXGBE_WRITE_REG(hw, IXGBE_PFVFSPOOF(vf_target_reg), pfvfspoof);
4237}
4238
4239/**
4240 *  ixgbe_get_device_caps_generic - Get additional device capabilities
4241 *  @hw: pointer to hardware structure
4242 *  @device_caps: the EEPROM word with the extra device capabilities
4243 *
4244 *  This function will read the EEPROM location for the device capabilities,
4245 *  and return the word through device_caps.
4246 **/
4247s32 ixgbe_get_device_caps_generic(struct ixgbe_hw *hw, u16 *device_caps)
4248{
4249	DEBUGFUNC("ixgbe_get_device_caps_generic");
4250
4251	hw->eeprom.ops.read(hw, IXGBE_DEVICE_CAPS, device_caps);
4252
4253	return IXGBE_SUCCESS;
4254}
4255
4256/**
4257 *  ixgbe_enable_relaxed_ordering_gen2 - Enable relaxed ordering
4258 *  @hw: pointer to hardware structure
4259 *
4260 **/
4261void ixgbe_enable_relaxed_ordering_gen2(struct ixgbe_hw *hw)
4262{
4263	u32 regval;
4264	u32 i;
4265
4266	DEBUGFUNC("ixgbe_enable_relaxed_ordering_gen2");
4267
4268	/* Enable relaxed ordering */
4269	for (i = 0; i < hw->mac.max_tx_queues; i++) {
4270		regval = IXGBE_READ_REG(hw, IXGBE_DCA_TXCTRL_82599(i));
4271		regval |= IXGBE_DCA_TXCTRL_DESC_WRO_EN;
4272		IXGBE_WRITE_REG(hw, IXGBE_DCA_TXCTRL_82599(i), regval);
4273	}
4274
4275	for (i = 0; i < hw->mac.max_rx_queues; i++) {
4276		regval = IXGBE_READ_REG(hw, IXGBE_DCA_RXCTRL(i));
4277		regval |= IXGBE_DCA_RXCTRL_DATA_WRO_EN |
4278			  IXGBE_DCA_RXCTRL_HEAD_WRO_EN;
4279		IXGBE_WRITE_REG(hw, IXGBE_DCA_RXCTRL(i), regval);
4280	}
4281
4282}
4283
4284/**
4285 *  ixgbe_calculate_checksum - Calculate checksum for buffer
4286 *  @buffer: pointer to EEPROM
4287 *  @length: size of EEPROM to calculate a checksum for
4288 *  Calculates the checksum for some buffer on a specified length.  The
4289 *  checksum calculated is returned.
4290 **/
4291u8 ixgbe_calculate_checksum(u8 *buffer, u32 length)
4292{
4293	u32 i;
4294	u8 sum = 0;
4295
4296	DEBUGFUNC("ixgbe_calculate_checksum");
4297
4298	if (!buffer)
4299		return 0;
4300
4301	for (i = 0; i < length; i++)
4302		sum += buffer[i];
4303
4304	return (u8) (0 - sum);
4305}
4306
4307/**
4308 *  ixgbe_host_interface_command - Issue command to manageability block
4309 *  @hw: pointer to the HW structure
4310 *  @buffer: contains the command to write and where the return status will
4311 *   be placed
4312 *  @length: length of buffer, must be multiple of 4 bytes
4313 *
4314 *  Communicates with the manageability block.  On success return IXGBE_SUCCESS
4315 *  else return IXGBE_ERR_HOST_INTERFACE_COMMAND.
4316 **/
4317s32 ixgbe_host_interface_command(struct ixgbe_hw *hw, u32 *buffer,
4318				 u32 length)
4319{
4320	u32 hicr, i, bi;
4321	u32 hdr_size = sizeof(struct ixgbe_hic_hdr);
4322	u8 buf_len, dword_len;
4323
4324	s32 ret_val = IXGBE_SUCCESS;
4325
4326	DEBUGFUNC("ixgbe_host_interface_command");
4327
4328	if (length == 0 || length & 0x3 ||
4329	    length > IXGBE_HI_MAX_BLOCK_BYTE_LENGTH) {
4330		DEBUGOUT("Buffer length failure.\n");
4331		ret_val = IXGBE_ERR_HOST_INTERFACE_COMMAND;
4332		goto out;
4333	}
4334
4335	/* Check that the host interface is enabled. */
4336	hicr = IXGBE_READ_REG(hw, IXGBE_HICR);
4337	if ((hicr & IXGBE_HICR_EN) == 0) {
4338		DEBUGOUT("IXGBE_HOST_EN bit disabled.\n");
4339		ret_val = IXGBE_ERR_HOST_INTERFACE_COMMAND;
4340		goto out;
4341	}
4342
4343	/* Calculate length in DWORDs */
4344	dword_len = length >> 2;
4345
4346	/*
4347	 * The device driver writes the relevant command block
4348	 * into the ram area.
4349	 */
4350	for (i = 0; i < dword_len; i++)
4351		IXGBE_WRITE_REG_ARRAY(hw, IXGBE_FLEX_MNG,
4352				      i, IXGBE_CPU_TO_LE32(buffer[i]));
4353
4354	/* Setting this bit tells the ARC that a new command is pending. */
4355	IXGBE_WRITE_REG(hw, IXGBE_HICR, hicr | IXGBE_HICR_C);
4356
4357	for (i = 0; i < IXGBE_HI_COMMAND_TIMEOUT; i++) {
4358		hicr = IXGBE_READ_REG(hw, IXGBE_HICR);
4359		if (!(hicr & IXGBE_HICR_C))
4360			break;
4361		msec_delay(1);
4362	}
4363
4364	/* Check command successful completion. */
4365	if (i == IXGBE_HI_COMMAND_TIMEOUT ||
4366	    (!(IXGBE_READ_REG(hw, IXGBE_HICR) & IXGBE_HICR_SV))) {
4367		DEBUGOUT("Command has failed with no status valid.\n");
4368		ret_val = IXGBE_ERR_HOST_INTERFACE_COMMAND;
4369		goto out;
4370	}
4371
4372	/* Calculate length in DWORDs */
4373	dword_len = hdr_size >> 2;
4374
4375	/* first pull in the header so we know the buffer length */
4376	for (bi = 0; bi < dword_len; bi++) {
4377		buffer[bi] = IXGBE_READ_REG_ARRAY(hw, IXGBE_FLEX_MNG, bi);
4378		IXGBE_LE32_TO_CPUS(&buffer[bi]);
4379	}
4380
4381	/* If there is any thing in data position pull it in */
4382	buf_len = ((struct ixgbe_hic_hdr *)buffer)->buf_len;
4383	if (buf_len == 0)
4384		goto out;
4385
4386	if (length < (buf_len + hdr_size)) {
4387		DEBUGOUT("Buffer not large enough for reply message.\n");
4388		ret_val = IXGBE_ERR_HOST_INTERFACE_COMMAND;
4389		goto out;
4390	}
4391
4392	/* Calculate length in DWORDs, add 3 for odd lengths */
4393	dword_len = (buf_len + 3) >> 2;
4394
4395	/* Pull in the rest of the buffer (bi is where we left off)*/
4396	for (; bi <= dword_len; bi++) {
4397		buffer[bi] = IXGBE_READ_REG_ARRAY(hw, IXGBE_FLEX_MNG, bi);
4398		IXGBE_LE32_TO_CPUS(&buffer[bi]);
4399	}
4400
4401out:
4402	return ret_val;
4403}
4404
4405/**
4406 *  ixgbe_set_fw_drv_ver_generic - Sends driver version to firmware
4407 *  @hw: pointer to the HW structure
4408 *  @maj: driver version major number
4409 *  @min: driver version minor number
4410 *  @build: driver version build number
4411 *  @sub: driver version sub build number
4412 *
4413 *  Sends driver version number to firmware through the manageability
4414 *  block.  On success return IXGBE_SUCCESS
4415 *  else returns IXGBE_ERR_SWFW_SYNC when encountering an error acquiring
4416 *  semaphore or IXGBE_ERR_HOST_INTERFACE_COMMAND when command fails.
4417 **/
4418s32 ixgbe_set_fw_drv_ver_generic(struct ixgbe_hw *hw, u8 maj, u8 min,
4419				 u8 build, u8 sub)
4420{
4421	struct ixgbe_hic_drv_info fw_cmd;
4422	int i;
4423	s32 ret_val = IXGBE_SUCCESS;
4424
4425	DEBUGFUNC("ixgbe_set_fw_drv_ver_generic");
4426
4427	if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_SW_MNG_SM)
4428	    != IXGBE_SUCCESS) {
4429		ret_val = IXGBE_ERR_SWFW_SYNC;
4430		goto out;
4431	}
4432
4433	fw_cmd.hdr.cmd = FW_CEM_CMD_DRIVER_INFO;
4434	fw_cmd.hdr.buf_len = FW_CEM_CMD_DRIVER_INFO_LEN;
4435	fw_cmd.hdr.cmd_or_resp.cmd_resv = FW_CEM_CMD_RESERVED;
4436	fw_cmd.port_num = (u8)hw->bus.func;
4437	fw_cmd.ver_maj = maj;
4438	fw_cmd.ver_min = min;
4439	fw_cmd.ver_build = build;
4440	fw_cmd.ver_sub = sub;
4441	fw_cmd.hdr.checksum = 0;
4442	fw_cmd.hdr.checksum = ixgbe_calculate_checksum((u8 *)&fw_cmd,
4443				(FW_CEM_HDR_LEN + fw_cmd.hdr.buf_len));
4444	fw_cmd.pad = 0;
4445	fw_cmd.pad2 = 0;
4446
4447	for (i = 0; i <= FW_CEM_MAX_RETRIES; i++) {
4448		ret_val = ixgbe_host_interface_command(hw, (u32 *)&fw_cmd,
4449						       sizeof(fw_cmd));
4450		if (ret_val != IXGBE_SUCCESS)
4451			continue;
4452
4453		if (fw_cmd.hdr.cmd_or_resp.ret_status ==
4454		    FW_CEM_RESP_STATUS_SUCCESS)
4455			ret_val = IXGBE_SUCCESS;
4456		else
4457			ret_val = IXGBE_ERR_HOST_INTERFACE_COMMAND;
4458
4459		break;
4460	}
4461
4462	hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_SW_MNG_SM);
4463out:
4464	return ret_val;
4465}
4466
4467/**
4468 * ixgbe_set_rxpba_generic - Initialize Rx packet buffer
4469 * @hw: pointer to hardware structure
4470 * @num_pb: number of packet buffers to allocate
4471 * @headroom: reserve n KB of headroom
4472 * @strategy: packet buffer allocation strategy
4473 **/
4474void ixgbe_set_rxpba_generic(struct ixgbe_hw *hw, int num_pb, u32 headroom,
4475			     int strategy)
4476{
4477	u32 pbsize = hw->mac.rx_pb_size;
4478	int i = 0;
4479	u32 rxpktsize, txpktsize, txpbthresh;
4480
4481	/* Reserve headroom */
4482	pbsize -= headroom;
4483
4484	if (!num_pb)
4485		num_pb = 1;
4486
4487	/* Divide remaining packet buffer space amongst the number of packet
4488	 * buffers requested using supplied strategy.
4489	 */
4490	switch (strategy) {
4491	case PBA_STRATEGY_WEIGHTED:
4492		/* ixgbe_dcb_pba_80_48 strategy weight first half of packet
4493		 * buffer with 5/8 of the packet buffer space.
4494		 */
4495		rxpktsize = (pbsize * 5) / (num_pb * 4);
4496		pbsize -= rxpktsize * (num_pb / 2);
4497		rxpktsize <<= IXGBE_RXPBSIZE_SHIFT;
4498		for (; i < (num_pb / 2); i++)
4499			IXGBE_WRITE_REG(hw, IXGBE_RXPBSIZE(i), rxpktsize);
4500		/* Fall through to configure remaining packet buffers */
4501	case PBA_STRATEGY_EQUAL:
4502		rxpktsize = (pbsize / (num_pb - i)) << IXGBE_RXPBSIZE_SHIFT;
4503		for (; i < num_pb; i++)
4504			IXGBE_WRITE_REG(hw, IXGBE_RXPBSIZE(i), rxpktsize);
4505		break;
4506	default:
4507		break;
4508	}
4509
4510	/* Only support an equally distributed Tx packet buffer strategy. */
4511	txpktsize = IXGBE_TXPBSIZE_MAX / num_pb;
4512	txpbthresh = (txpktsize / 1024) - IXGBE_TXPKT_SIZE_MAX;
4513	for (i = 0; i < num_pb; i++) {
4514		IXGBE_WRITE_REG(hw, IXGBE_TXPBSIZE(i), txpktsize);
4515		IXGBE_WRITE_REG(hw, IXGBE_TXPBTHRESH(i), txpbthresh);
4516	}
4517
4518	/* Clear unused TCs, if any, to zero buffer size*/
4519	for (; i < IXGBE_MAX_PB; i++) {
4520		IXGBE_WRITE_REG(hw, IXGBE_RXPBSIZE(i), 0);
4521		IXGBE_WRITE_REG(hw, IXGBE_TXPBSIZE(i), 0);
4522		IXGBE_WRITE_REG(hw, IXGBE_TXPBTHRESH(i), 0);
4523	}
4524}
4525
4526/**
4527 * ixgbe_clear_tx_pending - Clear pending TX work from the PCIe fifo
4528 * @hw: pointer to the hardware structure
4529 *
4530 * The 82599 and x540 MACs can experience issues if TX work is still pending
4531 * when a reset occurs.  This function prevents this by flushing the PCIe
4532 * buffers on the system.
4533 **/
4534void ixgbe_clear_tx_pending(struct ixgbe_hw *hw)
4535{
4536	u32 gcr_ext, hlreg0;
4537
4538	/*
4539	 * If double reset is not requested then all transactions should
4540	 * already be clear and as such there is no work to do
4541	 */
4542	if (!(hw->mac.flags & IXGBE_FLAGS_DOUBLE_RESET_REQUIRED))
4543		return;
4544
4545	/*
4546	 * Set loopback enable to prevent any transmits from being sent
4547	 * should the link come up.  This assumes that the RXCTRL.RXEN bit
4548	 * has already been cleared.
4549	 */
4550	hlreg0 = IXGBE_READ_REG(hw, IXGBE_HLREG0);
4551	IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg0 | IXGBE_HLREG0_LPBK);
4552
4553	/* initiate cleaning flow for buffers in the PCIe transaction layer */
4554	gcr_ext = IXGBE_READ_REG(hw, IXGBE_GCR_EXT);
4555	IXGBE_WRITE_REG(hw, IXGBE_GCR_EXT,
4556			gcr_ext | IXGBE_GCR_EXT_BUFFERS_CLEAR);
4557
4558	/* Flush all writes and allow 20usec for all transactions to clear */
4559	IXGBE_WRITE_FLUSH(hw);
4560	usec_delay(20);
4561
4562	/* restore previous register values */
4563	IXGBE_WRITE_REG(hw, IXGBE_GCR_EXT, gcr_ext);
4564	IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg0);
4565}
4566
4567
4568/**
4569 * ixgbe_dcb_get_rtrup2tc_generic - read rtrup2tc reg
4570 * @hw: pointer to hardware structure
4571 * @map: pointer to u8 arr for returning map
4572 *
4573 * Read the rtrup2tc HW register and resolve its content into map
4574 **/
4575void ixgbe_dcb_get_rtrup2tc_generic(struct ixgbe_hw *hw, u8 *map)
4576{
4577	u32 reg, i;
4578
4579	reg = IXGBE_READ_REG(hw, IXGBE_RTRUP2TC);
4580	for (i = 0; i < IXGBE_DCB_MAX_USER_PRIORITY; i++)
4581		map[i] = IXGBE_RTRUP2TC_UP_MASK &
4582			(reg >> (i * IXGBE_RTRUP2TC_UP_SHIFT));
4583	return;
4584}
4585