xref: /freebsd/sys/dev/ixgbe/ixgbe_common.c (revision e639e0d27cc863ba1b8de20e861e6b5d9b922a8e)
1 /******************************************************************************
2   SPDX-License-Identifier: BSD-3-Clause
3 
4   Copyright (c) 2001-2020, Intel Corporation
5   All rights reserved.
6 
7   Redistribution and use in source and binary forms, with or without
8   modification, are permitted provided that the following conditions are met:
9 
10    1. Redistributions of source code must retain the above copyright notice,
11       this list of conditions and the following disclaimer.
12 
13    2. Redistributions in binary form must reproduce the above copyright
14       notice, this list of conditions and the following disclaimer in the
15       documentation and/or other materials provided with the distribution.
16 
17    3. Neither the name of the Intel Corporation nor the names of its
18       contributors may be used to endorse or promote products derived from
19       this software without specific prior written permission.
20 
21   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
25   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31   POSSIBILITY OF SUCH DAMAGE.
32 
33 ******************************************************************************/
34 /*$FreeBSD$*/
35 
36 #include "ixgbe_common.h"
37 #include "ixgbe_phy.h"
38 #include "ixgbe_dcb.h"
39 #include "ixgbe_dcb_82599.h"
40 #include "ixgbe_api.h"
41 
42 static s32 ixgbe_acquire_eeprom(struct ixgbe_hw *hw);
43 static s32 ixgbe_get_eeprom_semaphore(struct ixgbe_hw *hw);
44 static void ixgbe_release_eeprom_semaphore(struct ixgbe_hw *hw);
45 static s32 ixgbe_ready_eeprom(struct ixgbe_hw *hw);
46 static void ixgbe_standby_eeprom(struct ixgbe_hw *hw);
47 static void ixgbe_shift_out_eeprom_bits(struct ixgbe_hw *hw, u16 data,
48 					u16 count);
49 static u16 ixgbe_shift_in_eeprom_bits(struct ixgbe_hw *hw, u16 count);
50 static void ixgbe_raise_eeprom_clk(struct ixgbe_hw *hw, u32 *eec);
51 static void ixgbe_lower_eeprom_clk(struct ixgbe_hw *hw, u32 *eec);
52 static void ixgbe_release_eeprom(struct ixgbe_hw *hw);
53 
54 static s32 ixgbe_mta_vector(struct ixgbe_hw *hw, u8 *mc_addr);
55 static s32 ixgbe_get_san_mac_addr_offset(struct ixgbe_hw *hw,
56 					 u16 *san_mac_offset);
57 static s32 ixgbe_read_eeprom_buffer_bit_bang(struct ixgbe_hw *hw, u16 offset,
58 					     u16 words, u16 *data);
59 static s32 ixgbe_write_eeprom_buffer_bit_bang(struct ixgbe_hw *hw, u16 offset,
60 					      u16 words, u16 *data);
61 static s32 ixgbe_detect_eeprom_page_size_generic(struct ixgbe_hw *hw,
62 						 u16 offset);
63 
64 /**
65  * ixgbe_init_ops_generic - Inits function ptrs
66  * @hw: pointer to the hardware structure
67  *
68  * Initialize the function pointers.
69  **/
70 s32 ixgbe_init_ops_generic(struct ixgbe_hw *hw)
71 {
72 	struct ixgbe_eeprom_info *eeprom = &hw->eeprom;
73 	struct ixgbe_mac_info *mac = &hw->mac;
74 	u32 eec = IXGBE_READ_REG(hw, IXGBE_EEC_BY_MAC(hw));
75 
76 	DEBUGFUNC("ixgbe_init_ops_generic");
77 
78 	/* EEPROM */
79 	eeprom->ops.init_params = ixgbe_init_eeprom_params_generic;
80 	/* If EEPROM is valid (bit 8 = 1), use EERD otherwise use bit bang */
81 	if (eec & IXGBE_EEC_PRES) {
82 		eeprom->ops.read = ixgbe_read_eerd_generic;
83 		eeprom->ops.read_buffer = ixgbe_read_eerd_buffer_generic;
84 	} else {
85 		eeprom->ops.read = ixgbe_read_eeprom_bit_bang_generic;
86 		eeprom->ops.read_buffer =
87 				 ixgbe_read_eeprom_buffer_bit_bang_generic;
88 	}
89 	eeprom->ops.write = ixgbe_write_eeprom_generic;
90 	eeprom->ops.write_buffer = ixgbe_write_eeprom_buffer_bit_bang_generic;
91 	eeprom->ops.validate_checksum =
92 				      ixgbe_validate_eeprom_checksum_generic;
93 	eeprom->ops.update_checksum = ixgbe_update_eeprom_checksum_generic;
94 	eeprom->ops.calc_checksum = ixgbe_calc_eeprom_checksum_generic;
95 
96 	/* MAC */
97 	mac->ops.init_hw = ixgbe_init_hw_generic;
98 	mac->ops.reset_hw = NULL;
99 	mac->ops.start_hw = ixgbe_start_hw_generic;
100 	mac->ops.clear_hw_cntrs = ixgbe_clear_hw_cntrs_generic;
101 	mac->ops.get_media_type = NULL;
102 	mac->ops.get_supported_physical_layer = NULL;
103 	mac->ops.enable_rx_dma = ixgbe_enable_rx_dma_generic;
104 	mac->ops.get_mac_addr = ixgbe_get_mac_addr_generic;
105 	mac->ops.stop_adapter = ixgbe_stop_adapter_generic;
106 	mac->ops.get_bus_info = ixgbe_get_bus_info_generic;
107 	mac->ops.set_lan_id = ixgbe_set_lan_id_multi_port_pcie;
108 	mac->ops.acquire_swfw_sync = ixgbe_acquire_swfw_sync;
109 	mac->ops.release_swfw_sync = ixgbe_release_swfw_sync;
110 	mac->ops.prot_autoc_read = prot_autoc_read_generic;
111 	mac->ops.prot_autoc_write = prot_autoc_write_generic;
112 
113 	/* LEDs */
114 	mac->ops.led_on = ixgbe_led_on_generic;
115 	mac->ops.led_off = ixgbe_led_off_generic;
116 	mac->ops.blink_led_start = ixgbe_blink_led_start_generic;
117 	mac->ops.blink_led_stop = ixgbe_blink_led_stop_generic;
118 	mac->ops.init_led_link_act = ixgbe_init_led_link_act_generic;
119 
120 	/* RAR, Multicast, VLAN */
121 	mac->ops.set_rar = ixgbe_set_rar_generic;
122 	mac->ops.clear_rar = ixgbe_clear_rar_generic;
123 	mac->ops.insert_mac_addr = NULL;
124 	mac->ops.set_vmdq = NULL;
125 	mac->ops.clear_vmdq = NULL;
126 	mac->ops.init_rx_addrs = ixgbe_init_rx_addrs_generic;
127 	mac->ops.update_uc_addr_list = ixgbe_update_uc_addr_list_generic;
128 	mac->ops.update_mc_addr_list = ixgbe_update_mc_addr_list_generic;
129 	mac->ops.enable_mc = ixgbe_enable_mc_generic;
130 	mac->ops.disable_mc = ixgbe_disable_mc_generic;
131 	mac->ops.clear_vfta = NULL;
132 	mac->ops.set_vfta = NULL;
133 	mac->ops.set_vlvf = NULL;
134 	mac->ops.init_uta_tables = NULL;
135 	mac->ops.enable_rx = ixgbe_enable_rx_generic;
136 	mac->ops.disable_rx = ixgbe_disable_rx_generic;
137 
138 	/* Flow Control */
139 	mac->ops.fc_enable = ixgbe_fc_enable_generic;
140 	mac->ops.setup_fc = ixgbe_setup_fc_generic;
141 	mac->ops.fc_autoneg = ixgbe_fc_autoneg;
142 
143 	/* Link */
144 	mac->ops.get_link_capabilities = NULL;
145 	mac->ops.setup_link = NULL;
146 	mac->ops.check_link = NULL;
147 	mac->ops.dmac_config = NULL;
148 	mac->ops.dmac_update_tcs = NULL;
149 	mac->ops.dmac_config_tcs = NULL;
150 
151 	return IXGBE_SUCCESS;
152 }
153 
154 /**
155  * ixgbe_device_supports_autoneg_fc - Check if device supports autonegotiation
156  * of flow control
157  * @hw: pointer to hardware structure
158  *
159  * This function returns true if the device supports flow control
160  * autonegotiation, and false if it does not.
161  *
162  **/
163 bool ixgbe_device_supports_autoneg_fc(struct ixgbe_hw *hw)
164 {
165 	bool supported = false;
166 	ixgbe_link_speed speed;
167 	bool link_up;
168 
169 	DEBUGFUNC("ixgbe_device_supports_autoneg_fc");
170 
171 	switch (hw->phy.media_type) {
172 	case ixgbe_media_type_fiber_fixed:
173 	case ixgbe_media_type_fiber_qsfp:
174 	case ixgbe_media_type_fiber:
175 		/* flow control autoneg black list */
176 		switch (hw->device_id) {
177 		case IXGBE_DEV_ID_X550EM_A_SFP:
178 		case IXGBE_DEV_ID_X550EM_A_SFP_N:
179 		case IXGBE_DEV_ID_X550EM_A_QSFP:
180 		case IXGBE_DEV_ID_X550EM_A_QSFP_N:
181 			supported = false;
182 			break;
183 		default:
184 			hw->mac.ops.check_link(hw, &speed, &link_up, false);
185 			/* if link is down, assume supported */
186 			if (link_up)
187 				supported = speed == IXGBE_LINK_SPEED_1GB_FULL ?
188 				true : false;
189 			else
190 				supported = true;
191 		}
192 
193 		break;
194 	case ixgbe_media_type_backplane:
195 		if (hw->device_id == IXGBE_DEV_ID_X550EM_X_XFI)
196 			supported = false;
197 		else
198 			supported = true;
199 		break;
200 	case ixgbe_media_type_copper:
201 		/* only some copper devices support flow control autoneg */
202 		switch (hw->device_id) {
203 		case IXGBE_DEV_ID_82599_T3_LOM:
204 		case IXGBE_DEV_ID_X540T:
205 		case IXGBE_DEV_ID_X540T1:
206 		case IXGBE_DEV_ID_X540_BYPASS:
207 		case IXGBE_DEV_ID_X550T:
208 		case IXGBE_DEV_ID_X550T1:
209 		case IXGBE_DEV_ID_X550EM_X_10G_T:
210 		case IXGBE_DEV_ID_X550EM_A_10G_T:
211 		case IXGBE_DEV_ID_X550EM_A_1G_T:
212 		case IXGBE_DEV_ID_X550EM_A_1G_T_L:
213 			supported = true;
214 			break;
215 		default:
216 			supported = false;
217 		}
218 	default:
219 		break;
220 	}
221 
222 	if (!supported)
223 		ERROR_REPORT2(IXGBE_ERROR_UNSUPPORTED,
224 			      "Device %x does not support flow control autoneg",
225 			      hw->device_id);
226 
227 	return supported;
228 }
229 
230 /**
231  * ixgbe_setup_fc_generic - Set up flow control
232  * @hw: pointer to hardware structure
233  *
234  * Called at init time to set up flow control.
235  **/
236 s32 ixgbe_setup_fc_generic(struct ixgbe_hw *hw)
237 {
238 	s32 ret_val = IXGBE_SUCCESS;
239 	u32 reg = 0, reg_bp = 0;
240 	u16 reg_cu = 0;
241 	bool locked = false;
242 
243 	DEBUGFUNC("ixgbe_setup_fc_generic");
244 
245 	/* Validate the requested mode */
246 	if (hw->fc.strict_ieee && hw->fc.requested_mode == ixgbe_fc_rx_pause) {
247 		ERROR_REPORT1(IXGBE_ERROR_UNSUPPORTED,
248 			   "ixgbe_fc_rx_pause not valid in strict IEEE mode\n");
249 		ret_val = IXGBE_ERR_INVALID_LINK_SETTINGS;
250 		goto out;
251 	}
252 
253 	/*
254 	 * 10gig parts do not have a word in the EEPROM to determine the
255 	 * default flow control setting, so we explicitly set it to full.
256 	 */
257 	if (hw->fc.requested_mode == ixgbe_fc_default)
258 		hw->fc.requested_mode = ixgbe_fc_full;
259 
260 	/*
261 	 * Set up the 1G and 10G flow control advertisement registers so the
262 	 * HW will be able to do fc autoneg once the cable is plugged in.  If
263 	 * we link at 10G, the 1G advertisement is harmless and vice versa.
264 	 */
265 	switch (hw->phy.media_type) {
266 	case ixgbe_media_type_backplane:
267 		/* some MAC's need RMW protection on AUTOC */
268 		ret_val = hw->mac.ops.prot_autoc_read(hw, &locked, &reg_bp);
269 		if (ret_val != IXGBE_SUCCESS)
270 			goto out;
271 
272 		/* only backplane uses autoc */
273 		/* FALLTHROUGH */
274 	case ixgbe_media_type_fiber_fixed:
275 	case ixgbe_media_type_fiber_qsfp:
276 	case ixgbe_media_type_fiber:
277 		reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANA);
278 
279 		break;
280 	case ixgbe_media_type_copper:
281 		hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_ADVT,
282 				     IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &reg_cu);
283 		break;
284 	default:
285 		break;
286 	}
287 
288 	/*
289 	 * The possible values of fc.requested_mode are:
290 	 * 0: Flow control is completely disabled
291 	 * 1: Rx flow control is enabled (we can receive pause frames,
292 	 *    but not send pause frames).
293 	 * 2: Tx flow control is enabled (we can send pause frames but
294 	 *    we do not support receiving pause frames).
295 	 * 3: Both Rx and Tx flow control (symmetric) are enabled.
296 	 * other: Invalid.
297 	 */
298 	switch (hw->fc.requested_mode) {
299 	case ixgbe_fc_none:
300 		/* Flow control completely disabled by software override. */
301 		reg &= ~(IXGBE_PCS1GANA_SYM_PAUSE | IXGBE_PCS1GANA_ASM_PAUSE);
302 		if (hw->phy.media_type == ixgbe_media_type_backplane)
303 			reg_bp &= ~(IXGBE_AUTOC_SYM_PAUSE |
304 				    IXGBE_AUTOC_ASM_PAUSE);
305 		else if (hw->phy.media_type == ixgbe_media_type_copper)
306 			reg_cu &= ~(IXGBE_TAF_SYM_PAUSE | IXGBE_TAF_ASM_PAUSE);
307 		break;
308 	case ixgbe_fc_tx_pause:
309 		/*
310 		 * Tx Flow control is enabled, and Rx Flow control is
311 		 * disabled by software override.
312 		 */
313 		reg |= IXGBE_PCS1GANA_ASM_PAUSE;
314 		reg &= ~IXGBE_PCS1GANA_SYM_PAUSE;
315 		if (hw->phy.media_type == ixgbe_media_type_backplane) {
316 			reg_bp |= IXGBE_AUTOC_ASM_PAUSE;
317 			reg_bp &= ~IXGBE_AUTOC_SYM_PAUSE;
318 		} else if (hw->phy.media_type == ixgbe_media_type_copper) {
319 			reg_cu |= IXGBE_TAF_ASM_PAUSE;
320 			reg_cu &= ~IXGBE_TAF_SYM_PAUSE;
321 		}
322 		break;
323 	case ixgbe_fc_rx_pause:
324 		/*
325 		 * Rx Flow control is enabled and Tx Flow control is
326 		 * disabled by software override. Since there really
327 		 * isn't a way to advertise that we are capable of RX
328 		 * Pause ONLY, we will advertise that we support both
329 		 * symmetric and asymmetric Rx PAUSE, as such we fall
330 		 * through to the fc_full statement.  Later, we will
331 		 * disable the adapter's ability to send PAUSE frames.
332 		 */
333 	case ixgbe_fc_full:
334 		/* Flow control (both Rx and Tx) is enabled by SW override. */
335 		reg |= IXGBE_PCS1GANA_SYM_PAUSE | IXGBE_PCS1GANA_ASM_PAUSE;
336 		if (hw->phy.media_type == ixgbe_media_type_backplane)
337 			reg_bp |= IXGBE_AUTOC_SYM_PAUSE |
338 				  IXGBE_AUTOC_ASM_PAUSE;
339 		else if (hw->phy.media_type == ixgbe_media_type_copper)
340 			reg_cu |= IXGBE_TAF_SYM_PAUSE | IXGBE_TAF_ASM_PAUSE;
341 		break;
342 	default:
343 		ERROR_REPORT1(IXGBE_ERROR_ARGUMENT,
344 			     "Flow control param set incorrectly\n");
345 		ret_val = IXGBE_ERR_CONFIG;
346 		goto out;
347 		break;
348 	}
349 
350 	if (hw->mac.type < ixgbe_mac_X540) {
351 		/*
352 		 * Enable auto-negotiation between the MAC & PHY;
353 		 * the MAC will advertise clause 37 flow control.
354 		 */
355 		IXGBE_WRITE_REG(hw, IXGBE_PCS1GANA, reg);
356 		reg = IXGBE_READ_REG(hw, IXGBE_PCS1GLCTL);
357 
358 		/* Disable AN timeout */
359 		if (hw->fc.strict_ieee)
360 			reg &= ~IXGBE_PCS1GLCTL_AN_1G_TIMEOUT_EN;
361 
362 		IXGBE_WRITE_REG(hw, IXGBE_PCS1GLCTL, reg);
363 		DEBUGOUT1("Set up FC; PCS1GLCTL = 0x%08X\n", reg);
364 	}
365 
366 	/*
367 	 * AUTOC restart handles negotiation of 1G and 10G on backplane
368 	 * and copper. There is no need to set the PCS1GCTL register.
369 	 *
370 	 */
371 	if (hw->phy.media_type == ixgbe_media_type_backplane) {
372 		reg_bp |= IXGBE_AUTOC_AN_RESTART;
373 		ret_val = hw->mac.ops.prot_autoc_write(hw, reg_bp, locked);
374 		if (ret_val)
375 			goto out;
376 	} else if ((hw->phy.media_type == ixgbe_media_type_copper) &&
377 		    (ixgbe_device_supports_autoneg_fc(hw))) {
378 		hw->phy.ops.write_reg(hw, IXGBE_MDIO_AUTO_NEG_ADVT,
379 				      IXGBE_MDIO_AUTO_NEG_DEV_TYPE, reg_cu);
380 	}
381 
382 	DEBUGOUT1("Set up FC; PCS1GLCTL = 0x%08X\n", reg);
383 out:
384 	return ret_val;
385 }
386 
387 /**
388  * ixgbe_start_hw_generic - Prepare hardware for Tx/Rx
389  * @hw: pointer to hardware structure
390  *
391  * Starts the hardware by filling the bus info structure and media type, clears
392  * all on chip counters, initializes receive address registers, multicast
393  * table, VLAN filter table, calls routine to set up link and flow control
394  * settings, and leaves transmit and receive units disabled and uninitialized
395  **/
396 s32 ixgbe_start_hw_generic(struct ixgbe_hw *hw)
397 {
398 	s32 ret_val;
399 	u32 ctrl_ext;
400 	u16 device_caps;
401 
402 	DEBUGFUNC("ixgbe_start_hw_generic");
403 
404 	/* Set the media type */
405 	hw->phy.media_type = hw->mac.ops.get_media_type(hw);
406 
407 	/* PHY ops initialization must be done in reset_hw() */
408 
409 	/* Clear the VLAN filter table */
410 	hw->mac.ops.clear_vfta(hw);
411 
412 	/* Clear statistics registers */
413 	hw->mac.ops.clear_hw_cntrs(hw);
414 
415 	/* Set No Snoop Disable */
416 	ctrl_ext = IXGBE_READ_REG(hw, IXGBE_CTRL_EXT);
417 	ctrl_ext |= IXGBE_CTRL_EXT_NS_DIS;
418 	IXGBE_WRITE_REG(hw, IXGBE_CTRL_EXT, ctrl_ext);
419 	IXGBE_WRITE_FLUSH(hw);
420 
421 	/* Setup flow control */
422 	ret_val = ixgbe_setup_fc(hw);
423 	if (ret_val != IXGBE_SUCCESS && ret_val != IXGBE_NOT_IMPLEMENTED) {
424 		DEBUGOUT1("Flow control setup failed, returning %d\n", ret_val);
425 		return ret_val;
426 	}
427 
428 	/* Cache bit indicating need for crosstalk fix */
429 	switch (hw->mac.type) {
430 	case ixgbe_mac_82599EB:
431 	case ixgbe_mac_X550EM_x:
432 	case ixgbe_mac_X550EM_a:
433 		hw->mac.ops.get_device_caps(hw, &device_caps);
434 		if (device_caps & IXGBE_DEVICE_CAPS_NO_CROSSTALK_WR)
435 			hw->need_crosstalk_fix = false;
436 		else
437 			hw->need_crosstalk_fix = true;
438 		break;
439 	default:
440 		hw->need_crosstalk_fix = false;
441 		break;
442 	}
443 
444 	/* Clear adapter stopped flag */
445 	hw->adapter_stopped = false;
446 
447 	return IXGBE_SUCCESS;
448 }
449 
450 /**
451  * ixgbe_start_hw_gen2 - Init sequence for common device family
452  * @hw: pointer to hw structure
453  *
454  * Performs the init sequence common to the second generation
455  * of 10 GbE devices.
456  * Devices in the second generation:
457  *    82599
458  *    X540
459  **/
460 void ixgbe_start_hw_gen2(struct ixgbe_hw *hw)
461 {
462 	u32 i;
463 	u32 regval;
464 
465 	/* Clear the rate limiters */
466 	for (i = 0; i < hw->mac.max_tx_queues; i++) {
467 		IXGBE_WRITE_REG(hw, IXGBE_RTTDQSEL, i);
468 		IXGBE_WRITE_REG(hw, IXGBE_RTTBCNRC, 0);
469 	}
470 	IXGBE_WRITE_FLUSH(hw);
471 
472 	/* Disable relaxed ordering */
473 	for (i = 0; i < hw->mac.max_tx_queues; i++) {
474 		regval = IXGBE_READ_REG(hw, IXGBE_DCA_TXCTRL_82599(i));
475 		regval &= ~IXGBE_DCA_TXCTRL_DESC_WRO_EN;
476 		IXGBE_WRITE_REG(hw, IXGBE_DCA_TXCTRL_82599(i), regval);
477 	}
478 
479 	for (i = 0; i < hw->mac.max_rx_queues; i++) {
480 		regval = IXGBE_READ_REG(hw, IXGBE_DCA_RXCTRL(i));
481 		regval &= ~(IXGBE_DCA_RXCTRL_DATA_WRO_EN |
482 			    IXGBE_DCA_RXCTRL_HEAD_WRO_EN);
483 		IXGBE_WRITE_REG(hw, IXGBE_DCA_RXCTRL(i), regval);
484 	}
485 }
486 
487 /**
488  * ixgbe_init_hw_generic - Generic hardware initialization
489  * @hw: pointer to hardware structure
490  *
491  * Initialize the hardware by resetting the hardware, filling the bus info
492  * structure and media type, clears all on chip counters, initializes receive
493  * address registers, multicast table, VLAN filter table, calls routine to set
494  * up link and flow control settings, and leaves transmit and receive units
495  * disabled and uninitialized
496  **/
497 s32 ixgbe_init_hw_generic(struct ixgbe_hw *hw)
498 {
499 	s32 status;
500 
501 	DEBUGFUNC("ixgbe_init_hw_generic");
502 
503 	/* Reset the hardware */
504 	status = hw->mac.ops.reset_hw(hw);
505 
506 	if (status == IXGBE_SUCCESS || status == IXGBE_ERR_SFP_NOT_PRESENT) {
507 		/* Start the HW */
508 		status = hw->mac.ops.start_hw(hw);
509 	}
510 
511 	/* Initialize the LED link active for LED blink support */
512 	if (hw->mac.ops.init_led_link_act)
513 		hw->mac.ops.init_led_link_act(hw);
514 
515 	if (status != IXGBE_SUCCESS)
516 		DEBUGOUT1("Failed to initialize HW, STATUS = %d\n", status);
517 
518 	return status;
519 }
520 
521 /**
522  * ixgbe_clear_hw_cntrs_generic - Generic clear hardware counters
523  * @hw: pointer to hardware structure
524  *
525  * Clears all hardware statistics counters by reading them from the hardware
526  * Statistics counters are clear on read.
527  **/
528 s32 ixgbe_clear_hw_cntrs_generic(struct ixgbe_hw *hw)
529 {
530 	u16 i = 0;
531 
532 	DEBUGFUNC("ixgbe_clear_hw_cntrs_generic");
533 
534 	IXGBE_READ_REG(hw, IXGBE_CRCERRS);
535 	IXGBE_READ_REG(hw, IXGBE_ILLERRC);
536 	IXGBE_READ_REG(hw, IXGBE_ERRBC);
537 	IXGBE_READ_REG(hw, IXGBE_MSPDC);
538 	for (i = 0; i < 8; i++)
539 		IXGBE_READ_REG(hw, IXGBE_MPC(i));
540 
541 	IXGBE_READ_REG(hw, IXGBE_MLFC);
542 	IXGBE_READ_REG(hw, IXGBE_MRFC);
543 	IXGBE_READ_REG(hw, IXGBE_RLEC);
544 	IXGBE_READ_REG(hw, IXGBE_LXONTXC);
545 	IXGBE_READ_REG(hw, IXGBE_LXOFFTXC);
546 	if (hw->mac.type >= ixgbe_mac_82599EB) {
547 		IXGBE_READ_REG(hw, IXGBE_LXONRXCNT);
548 		IXGBE_READ_REG(hw, IXGBE_LXOFFRXCNT);
549 	} else {
550 		IXGBE_READ_REG(hw, IXGBE_LXONRXC);
551 		IXGBE_READ_REG(hw, IXGBE_LXOFFRXC);
552 	}
553 
554 	for (i = 0; i < 8; i++) {
555 		IXGBE_READ_REG(hw, IXGBE_PXONTXC(i));
556 		IXGBE_READ_REG(hw, IXGBE_PXOFFTXC(i));
557 		if (hw->mac.type >= ixgbe_mac_82599EB) {
558 			IXGBE_READ_REG(hw, IXGBE_PXONRXCNT(i));
559 			IXGBE_READ_REG(hw, IXGBE_PXOFFRXCNT(i));
560 		} else {
561 			IXGBE_READ_REG(hw, IXGBE_PXONRXC(i));
562 			IXGBE_READ_REG(hw, IXGBE_PXOFFRXC(i));
563 		}
564 	}
565 	if (hw->mac.type >= ixgbe_mac_82599EB)
566 		for (i = 0; i < 8; i++)
567 			IXGBE_READ_REG(hw, IXGBE_PXON2OFFCNT(i));
568 	IXGBE_READ_REG(hw, IXGBE_PRC64);
569 	IXGBE_READ_REG(hw, IXGBE_PRC127);
570 	IXGBE_READ_REG(hw, IXGBE_PRC255);
571 	IXGBE_READ_REG(hw, IXGBE_PRC511);
572 	IXGBE_READ_REG(hw, IXGBE_PRC1023);
573 	IXGBE_READ_REG(hw, IXGBE_PRC1522);
574 	IXGBE_READ_REG(hw, IXGBE_GPRC);
575 	IXGBE_READ_REG(hw, IXGBE_BPRC);
576 	IXGBE_READ_REG(hw, IXGBE_MPRC);
577 	IXGBE_READ_REG(hw, IXGBE_GPTC);
578 	IXGBE_READ_REG(hw, IXGBE_GORCL);
579 	IXGBE_READ_REG(hw, IXGBE_GORCH);
580 	IXGBE_READ_REG(hw, IXGBE_GOTCL);
581 	IXGBE_READ_REG(hw, IXGBE_GOTCH);
582 	if (hw->mac.type == ixgbe_mac_82598EB)
583 		for (i = 0; i < 8; i++)
584 			IXGBE_READ_REG(hw, IXGBE_RNBC(i));
585 	IXGBE_READ_REG(hw, IXGBE_RUC);
586 	IXGBE_READ_REG(hw, IXGBE_RFC);
587 	IXGBE_READ_REG(hw, IXGBE_ROC);
588 	IXGBE_READ_REG(hw, IXGBE_RJC);
589 	IXGBE_READ_REG(hw, IXGBE_MNGPRC);
590 	IXGBE_READ_REG(hw, IXGBE_MNGPDC);
591 	IXGBE_READ_REG(hw, IXGBE_MNGPTC);
592 	IXGBE_READ_REG(hw, IXGBE_TORL);
593 	IXGBE_READ_REG(hw, IXGBE_TORH);
594 	IXGBE_READ_REG(hw, IXGBE_TPR);
595 	IXGBE_READ_REG(hw, IXGBE_TPT);
596 	IXGBE_READ_REG(hw, IXGBE_PTC64);
597 	IXGBE_READ_REG(hw, IXGBE_PTC127);
598 	IXGBE_READ_REG(hw, IXGBE_PTC255);
599 	IXGBE_READ_REG(hw, IXGBE_PTC511);
600 	IXGBE_READ_REG(hw, IXGBE_PTC1023);
601 	IXGBE_READ_REG(hw, IXGBE_PTC1522);
602 	IXGBE_READ_REG(hw, IXGBE_MPTC);
603 	IXGBE_READ_REG(hw, IXGBE_BPTC);
604 	for (i = 0; i < 16; i++) {
605 		IXGBE_READ_REG(hw, IXGBE_QPRC(i));
606 		IXGBE_READ_REG(hw, IXGBE_QPTC(i));
607 		if (hw->mac.type >= ixgbe_mac_82599EB) {
608 			IXGBE_READ_REG(hw, IXGBE_QBRC_L(i));
609 			IXGBE_READ_REG(hw, IXGBE_QBRC_H(i));
610 			IXGBE_READ_REG(hw, IXGBE_QBTC_L(i));
611 			IXGBE_READ_REG(hw, IXGBE_QBTC_H(i));
612 			IXGBE_READ_REG(hw, IXGBE_QPRDC(i));
613 		} else {
614 			IXGBE_READ_REG(hw, IXGBE_QBRC(i));
615 			IXGBE_READ_REG(hw, IXGBE_QBTC(i));
616 		}
617 	}
618 
619 	if (hw->mac.type == ixgbe_mac_X550 || hw->mac.type == ixgbe_mac_X540) {
620 		if (hw->phy.id == 0)
621 			ixgbe_identify_phy(hw);
622 		hw->phy.ops.read_reg(hw, IXGBE_PCRC8ECL,
623 				     IXGBE_MDIO_PCS_DEV_TYPE, &i);
624 		hw->phy.ops.read_reg(hw, IXGBE_PCRC8ECH,
625 				     IXGBE_MDIO_PCS_DEV_TYPE, &i);
626 		hw->phy.ops.read_reg(hw, IXGBE_LDPCECL,
627 				     IXGBE_MDIO_PCS_DEV_TYPE, &i);
628 		hw->phy.ops.read_reg(hw, IXGBE_LDPCECH,
629 				     IXGBE_MDIO_PCS_DEV_TYPE, &i);
630 	}
631 
632 	return IXGBE_SUCCESS;
633 }
634 
635 /**
636  * ixgbe_read_pba_string_generic - Reads part number string from EEPROM
637  * @hw: pointer to hardware structure
638  * @pba_num: stores the part number string from the EEPROM
639  * @pba_num_size: part number string buffer length
640  *
641  * Reads the part number string from the EEPROM.
642  **/
643 s32 ixgbe_read_pba_string_generic(struct ixgbe_hw *hw, u8 *pba_num,
644 				  u32 pba_num_size)
645 {
646 	s32 ret_val;
647 	u16 data;
648 	u16 pba_ptr;
649 	u16 offset;
650 	u16 length;
651 
652 	DEBUGFUNC("ixgbe_read_pba_string_generic");
653 
654 	if (pba_num == NULL) {
655 		DEBUGOUT("PBA string buffer was null\n");
656 		return IXGBE_ERR_INVALID_ARGUMENT;
657 	}
658 
659 	ret_val = hw->eeprom.ops.read(hw, IXGBE_PBANUM0_PTR, &data);
660 	if (ret_val) {
661 		DEBUGOUT("NVM Read Error\n");
662 		return ret_val;
663 	}
664 
665 	ret_val = hw->eeprom.ops.read(hw, IXGBE_PBANUM1_PTR, &pba_ptr);
666 	if (ret_val) {
667 		DEBUGOUT("NVM Read Error\n");
668 		return ret_val;
669 	}
670 
671 	/*
672 	 * if data is not ptr guard the PBA must be in legacy format which
673 	 * means pba_ptr is actually our second data word for the PBA number
674 	 * and we can decode it into an ascii string
675 	 */
676 	if (data != IXGBE_PBANUM_PTR_GUARD) {
677 		DEBUGOUT("NVM PBA number is not stored as string\n");
678 
679 		/* we will need 11 characters to store the PBA */
680 		if (pba_num_size < 11) {
681 			DEBUGOUT("PBA string buffer too small\n");
682 			return IXGBE_ERR_NO_SPACE;
683 		}
684 
685 		/* extract hex string from data and pba_ptr */
686 		pba_num[0] = (data >> 12) & 0xF;
687 		pba_num[1] = (data >> 8) & 0xF;
688 		pba_num[2] = (data >> 4) & 0xF;
689 		pba_num[3] = data & 0xF;
690 		pba_num[4] = (pba_ptr >> 12) & 0xF;
691 		pba_num[5] = (pba_ptr >> 8) & 0xF;
692 		pba_num[6] = '-';
693 		pba_num[7] = 0;
694 		pba_num[8] = (pba_ptr >> 4) & 0xF;
695 		pba_num[9] = pba_ptr & 0xF;
696 
697 		/* put a null character on the end of our string */
698 		pba_num[10] = '\0';
699 
700 		/* switch all the data but the '-' to hex char */
701 		for (offset = 0; offset < 10; offset++) {
702 			if (pba_num[offset] < 0xA)
703 				pba_num[offset] += '0';
704 			else if (pba_num[offset] < 0x10)
705 				pba_num[offset] += 'A' - 0xA;
706 		}
707 
708 		return IXGBE_SUCCESS;
709 	}
710 
711 	ret_val = hw->eeprom.ops.read(hw, pba_ptr, &length);
712 	if (ret_val) {
713 		DEBUGOUT("NVM Read Error\n");
714 		return ret_val;
715 	}
716 
717 	if (length == 0xFFFF || length == 0) {
718 		DEBUGOUT("NVM PBA number section invalid length\n");
719 		return IXGBE_ERR_PBA_SECTION;
720 	}
721 
722 	/* check if pba_num buffer is big enough */
723 	if (pba_num_size  < (((u32)length * 2) - 1)) {
724 		DEBUGOUT("PBA string buffer too small\n");
725 		return IXGBE_ERR_NO_SPACE;
726 	}
727 
728 	/* trim pba length from start of string */
729 	pba_ptr++;
730 	length--;
731 
732 	for (offset = 0; offset < length; offset++) {
733 		ret_val = hw->eeprom.ops.read(hw, pba_ptr + offset, &data);
734 		if (ret_val) {
735 			DEBUGOUT("NVM Read Error\n");
736 			return ret_val;
737 		}
738 		pba_num[offset * 2] = (u8)(data >> 8);
739 		pba_num[(offset * 2) + 1] = (u8)(data & 0xFF);
740 	}
741 	pba_num[offset * 2] = '\0';
742 
743 	return IXGBE_SUCCESS;
744 }
745 
746 /**
747  * ixgbe_read_pba_num_generic - Reads part number from EEPROM
748  * @hw: pointer to hardware structure
749  * @pba_num: stores the part number from the EEPROM
750  *
751  * Reads the part number from the EEPROM.
752  **/
753 s32 ixgbe_read_pba_num_generic(struct ixgbe_hw *hw, u32 *pba_num)
754 {
755 	s32 ret_val;
756 	u16 data;
757 
758 	DEBUGFUNC("ixgbe_read_pba_num_generic");
759 
760 	ret_val = hw->eeprom.ops.read(hw, IXGBE_PBANUM0_PTR, &data);
761 	if (ret_val) {
762 		DEBUGOUT("NVM Read Error\n");
763 		return ret_val;
764 	} else if (data == IXGBE_PBANUM_PTR_GUARD) {
765 		DEBUGOUT("NVM Not supported\n");
766 		return IXGBE_NOT_IMPLEMENTED;
767 	}
768 	*pba_num = (u32)(data << 16);
769 
770 	ret_val = hw->eeprom.ops.read(hw, IXGBE_PBANUM1_PTR, &data);
771 	if (ret_val) {
772 		DEBUGOUT("NVM Read Error\n");
773 		return ret_val;
774 	}
775 	*pba_num |= (u32)data;
776 
777 	return IXGBE_SUCCESS;
778 }
779 
780 /**
781  * ixgbe_read_pba_raw
782  * @hw: pointer to the HW structure
783  * @eeprom_buf: optional pointer to EEPROM image
784  * @eeprom_buf_size: size of EEPROM image in words
785  * @max_pba_block_size: PBA block size limit
786  * @pba: pointer to output PBA structure
787  *
788  * Reads PBA from EEPROM image when eeprom_buf is not NULL.
789  * Reads PBA from physical EEPROM device when eeprom_buf is NULL.
790  *
791  **/
792 s32 ixgbe_read_pba_raw(struct ixgbe_hw *hw, u16 *eeprom_buf,
793 		       u32 eeprom_buf_size, u16 max_pba_block_size,
794 		       struct ixgbe_pba *pba)
795 {
796 	s32 ret_val;
797 	u16 pba_block_size;
798 
799 	if (pba == NULL)
800 		return IXGBE_ERR_PARAM;
801 
802 	if (eeprom_buf == NULL) {
803 		ret_val = hw->eeprom.ops.read_buffer(hw, IXGBE_PBANUM0_PTR, 2,
804 						     &pba->word[0]);
805 		if (ret_val)
806 			return ret_val;
807 	} else {
808 		if (eeprom_buf_size > IXGBE_PBANUM1_PTR) {
809 			pba->word[0] = eeprom_buf[IXGBE_PBANUM0_PTR];
810 			pba->word[1] = eeprom_buf[IXGBE_PBANUM1_PTR];
811 		} else {
812 			return IXGBE_ERR_PARAM;
813 		}
814 	}
815 
816 	if (pba->word[0] == IXGBE_PBANUM_PTR_GUARD) {
817 		if (pba->pba_block == NULL)
818 			return IXGBE_ERR_PARAM;
819 
820 		ret_val = ixgbe_get_pba_block_size(hw, eeprom_buf,
821 						   eeprom_buf_size,
822 						   &pba_block_size);
823 		if (ret_val)
824 			return ret_val;
825 
826 		if (pba_block_size > max_pba_block_size)
827 			return IXGBE_ERR_PARAM;
828 
829 		if (eeprom_buf == NULL) {
830 			ret_val = hw->eeprom.ops.read_buffer(hw, pba->word[1],
831 							     pba_block_size,
832 							     pba->pba_block);
833 			if (ret_val)
834 				return ret_val;
835 		} else {
836 			if (eeprom_buf_size > (u32)(pba->word[1] +
837 					      pba_block_size)) {
838 				memcpy(pba->pba_block,
839 				       &eeprom_buf[pba->word[1]],
840 				       pba_block_size * sizeof(u16));
841 			} else {
842 				return IXGBE_ERR_PARAM;
843 			}
844 		}
845 	}
846 
847 	return IXGBE_SUCCESS;
848 }
849 
850 /**
851  * ixgbe_write_pba_raw
852  * @hw: pointer to the HW structure
853  * @eeprom_buf: optional pointer to EEPROM image
854  * @eeprom_buf_size: size of EEPROM image in words
855  * @pba: pointer to PBA structure
856  *
857  * Writes PBA to EEPROM image when eeprom_buf is not NULL.
858  * Writes PBA to physical EEPROM device when eeprom_buf is NULL.
859  *
860  **/
861 s32 ixgbe_write_pba_raw(struct ixgbe_hw *hw, u16 *eeprom_buf,
862 			u32 eeprom_buf_size, struct ixgbe_pba *pba)
863 {
864 	s32 ret_val;
865 
866 	if (pba == NULL)
867 		return IXGBE_ERR_PARAM;
868 
869 	if (eeprom_buf == NULL) {
870 		ret_val = hw->eeprom.ops.write_buffer(hw, IXGBE_PBANUM0_PTR, 2,
871 						      &pba->word[0]);
872 		if (ret_val)
873 			return ret_val;
874 	} else {
875 		if (eeprom_buf_size > IXGBE_PBANUM1_PTR) {
876 			eeprom_buf[IXGBE_PBANUM0_PTR] = pba->word[0];
877 			eeprom_buf[IXGBE_PBANUM1_PTR] = pba->word[1];
878 		} else {
879 			return IXGBE_ERR_PARAM;
880 		}
881 	}
882 
883 	if (pba->word[0] == IXGBE_PBANUM_PTR_GUARD) {
884 		if (pba->pba_block == NULL)
885 			return IXGBE_ERR_PARAM;
886 
887 		if (eeprom_buf == NULL) {
888 			ret_val = hw->eeprom.ops.write_buffer(hw, pba->word[1],
889 							      pba->pba_block[0],
890 							      pba->pba_block);
891 			if (ret_val)
892 				return ret_val;
893 		} else {
894 			if (eeprom_buf_size > (u32)(pba->word[1] +
895 					      pba->pba_block[0])) {
896 				memcpy(&eeprom_buf[pba->word[1]],
897 				       pba->pba_block,
898 				       pba->pba_block[0] * sizeof(u16));
899 			} else {
900 				return IXGBE_ERR_PARAM;
901 			}
902 		}
903 	}
904 
905 	return IXGBE_SUCCESS;
906 }
907 
908 /**
909  * ixgbe_get_pba_block_size
910  * @hw: pointer to the HW structure
911  * @eeprom_buf: optional pointer to EEPROM image
912  * @eeprom_buf_size: size of EEPROM image in words
913  * @pba_data_size: pointer to output variable
914  *
915  * Returns the size of the PBA block in words. Function operates on EEPROM
916  * image if the eeprom_buf pointer is not NULL otherwise it accesses physical
917  * EEPROM device.
918  *
919  **/
920 s32 ixgbe_get_pba_block_size(struct ixgbe_hw *hw, u16 *eeprom_buf,
921 			     u32 eeprom_buf_size, u16 *pba_block_size)
922 {
923 	s32 ret_val;
924 	u16 pba_word[2];
925 	u16 length;
926 
927 	DEBUGFUNC("ixgbe_get_pba_block_size");
928 
929 	if (eeprom_buf == NULL) {
930 		ret_val = hw->eeprom.ops.read_buffer(hw, IXGBE_PBANUM0_PTR, 2,
931 						     &pba_word[0]);
932 		if (ret_val)
933 			return ret_val;
934 	} else {
935 		if (eeprom_buf_size > IXGBE_PBANUM1_PTR) {
936 			pba_word[0] = eeprom_buf[IXGBE_PBANUM0_PTR];
937 			pba_word[1] = eeprom_buf[IXGBE_PBANUM1_PTR];
938 		} else {
939 			return IXGBE_ERR_PARAM;
940 		}
941 	}
942 
943 	if (pba_word[0] == IXGBE_PBANUM_PTR_GUARD) {
944 		if (eeprom_buf == NULL) {
945 			ret_val = hw->eeprom.ops.read(hw, pba_word[1] + 0,
946 						      &length);
947 			if (ret_val)
948 				return ret_val;
949 		} else {
950 			if (eeprom_buf_size > pba_word[1])
951 				length = eeprom_buf[pba_word[1] + 0];
952 			else
953 				return IXGBE_ERR_PARAM;
954 		}
955 
956 		if (length == 0xFFFF || length == 0)
957 			return IXGBE_ERR_PBA_SECTION;
958 	} else {
959 		/* PBA number in legacy format, there is no PBA Block. */
960 		length = 0;
961 	}
962 
963 	if (pba_block_size != NULL)
964 		*pba_block_size = length;
965 
966 	return IXGBE_SUCCESS;
967 }
968 
969 /**
970  * ixgbe_get_mac_addr_generic - Generic get MAC address
971  * @hw: pointer to hardware structure
972  * @mac_addr: Adapter MAC address
973  *
974  * Reads the adapter's MAC address from first Receive Address Register (RAR0)
975  * A reset of the adapter must be performed prior to calling this function
976  * in order for the MAC address to have been loaded from the EEPROM into RAR0
977  **/
978 s32 ixgbe_get_mac_addr_generic(struct ixgbe_hw *hw, u8 *mac_addr)
979 {
980 	u32 rar_high;
981 	u32 rar_low;
982 	u16 i;
983 
984 	DEBUGFUNC("ixgbe_get_mac_addr_generic");
985 
986 	rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(0));
987 	rar_low = IXGBE_READ_REG(hw, IXGBE_RAL(0));
988 
989 	for (i = 0; i < 4; i++)
990 		mac_addr[i] = (u8)(rar_low >> (i*8));
991 
992 	for (i = 0; i < 2; i++)
993 		mac_addr[i+4] = (u8)(rar_high >> (i*8));
994 
995 	return IXGBE_SUCCESS;
996 }
997 
998 /**
999  * ixgbe_set_pci_config_data_generic - Generic store PCI bus info
1000  * @hw: pointer to hardware structure
1001  * @link_status: the link status returned by the PCI config space
1002  *
1003  * Stores the PCI bus info (speed, width, type) within the ixgbe_hw structure
1004  **/
1005 void ixgbe_set_pci_config_data_generic(struct ixgbe_hw *hw, u16 link_status)
1006 {
1007 	struct ixgbe_mac_info *mac = &hw->mac;
1008 
1009 	if (hw->bus.type == ixgbe_bus_type_unknown)
1010 		hw->bus.type = ixgbe_bus_type_pci_express;
1011 
1012 	switch (link_status & IXGBE_PCI_LINK_WIDTH) {
1013 	case IXGBE_PCI_LINK_WIDTH_1:
1014 		hw->bus.width = ixgbe_bus_width_pcie_x1;
1015 		break;
1016 	case IXGBE_PCI_LINK_WIDTH_2:
1017 		hw->bus.width = ixgbe_bus_width_pcie_x2;
1018 		break;
1019 	case IXGBE_PCI_LINK_WIDTH_4:
1020 		hw->bus.width = ixgbe_bus_width_pcie_x4;
1021 		break;
1022 	case IXGBE_PCI_LINK_WIDTH_8:
1023 		hw->bus.width = ixgbe_bus_width_pcie_x8;
1024 		break;
1025 	default:
1026 		hw->bus.width = ixgbe_bus_width_unknown;
1027 		break;
1028 	}
1029 
1030 	switch (link_status & IXGBE_PCI_LINK_SPEED) {
1031 	case IXGBE_PCI_LINK_SPEED_2500:
1032 		hw->bus.speed = ixgbe_bus_speed_2500;
1033 		break;
1034 	case IXGBE_PCI_LINK_SPEED_5000:
1035 		hw->bus.speed = ixgbe_bus_speed_5000;
1036 		break;
1037 	case IXGBE_PCI_LINK_SPEED_8000:
1038 		hw->bus.speed = ixgbe_bus_speed_8000;
1039 		break;
1040 	default:
1041 		hw->bus.speed = ixgbe_bus_speed_unknown;
1042 		break;
1043 	}
1044 
1045 	mac->ops.set_lan_id(hw);
1046 }
1047 
1048 /**
1049  * ixgbe_get_bus_info_generic - Generic set PCI bus info
1050  * @hw: pointer to hardware structure
1051  *
1052  * Gets the PCI bus info (speed, width, type) then calls helper function to
1053  * store this data within the ixgbe_hw structure.
1054  **/
1055 s32 ixgbe_get_bus_info_generic(struct ixgbe_hw *hw)
1056 {
1057 	u16 link_status;
1058 
1059 	DEBUGFUNC("ixgbe_get_bus_info_generic");
1060 
1061 	/* Get the negotiated link width and speed from PCI config space */
1062 	link_status = IXGBE_READ_PCIE_WORD(hw, IXGBE_PCI_LINK_STATUS);
1063 
1064 	ixgbe_set_pci_config_data_generic(hw, link_status);
1065 
1066 	return IXGBE_SUCCESS;
1067 }
1068 
1069 /**
1070  * ixgbe_set_lan_id_multi_port_pcie - Set LAN id for PCIe multiple port devices
1071  * @hw: pointer to the HW structure
1072  *
1073  * Determines the LAN function id by reading memory-mapped registers and swaps
1074  * the port value if requested, and set MAC instance for devices that share
1075  * CS4227.
1076  **/
1077 void ixgbe_set_lan_id_multi_port_pcie(struct ixgbe_hw *hw)
1078 {
1079 	struct ixgbe_bus_info *bus = &hw->bus;
1080 	u32 reg;
1081 	u16 ee_ctrl_4;
1082 
1083 	DEBUGFUNC("ixgbe_set_lan_id_multi_port_pcie");
1084 
1085 	reg = IXGBE_READ_REG(hw, IXGBE_STATUS);
1086 	bus->func = (reg & IXGBE_STATUS_LAN_ID) >> IXGBE_STATUS_LAN_ID_SHIFT;
1087 	bus->lan_id = (u8)bus->func;
1088 
1089 	/* check for a port swap */
1090 	reg = IXGBE_READ_REG(hw, IXGBE_FACTPS_BY_MAC(hw));
1091 	if (reg & IXGBE_FACTPS_LFS)
1092 		bus->func ^= 0x1;
1093 
1094 	/* Get MAC instance from EEPROM for configuring CS4227 */
1095 	if (hw->device_id == IXGBE_DEV_ID_X550EM_A_SFP) {
1096 		hw->eeprom.ops.read(hw, IXGBE_EEPROM_CTRL_4, &ee_ctrl_4);
1097 		bus->instance_id = (ee_ctrl_4 & IXGBE_EE_CTRL_4_INST_ID) >>
1098 				   IXGBE_EE_CTRL_4_INST_ID_SHIFT;
1099 	}
1100 }
1101 
1102 /**
1103  * ixgbe_stop_adapter_generic - Generic stop Tx/Rx units
1104  * @hw: pointer to hardware structure
1105  *
1106  * Sets the adapter_stopped flag within ixgbe_hw struct. Clears interrupts,
1107  * disables transmit and receive units. The adapter_stopped flag is used by
1108  * the shared code and drivers to determine if the adapter is in a stopped
1109  * state and should not touch the hardware.
1110  **/
1111 s32 ixgbe_stop_adapter_generic(struct ixgbe_hw *hw)
1112 {
1113 	u32 reg_val;
1114 	u16 i;
1115 
1116 	DEBUGFUNC("ixgbe_stop_adapter_generic");
1117 
1118 	/*
1119 	 * Set the adapter_stopped flag so other driver functions stop touching
1120 	 * the hardware
1121 	 */
1122 	hw->adapter_stopped = true;
1123 
1124 	/* Disable the receive unit */
1125 	ixgbe_disable_rx(hw);
1126 
1127 	/* Clear interrupt mask to stop interrupts from being generated */
1128 	IXGBE_WRITE_REG(hw, IXGBE_EIMC, IXGBE_IRQ_CLEAR_MASK);
1129 
1130 	/* Clear any pending interrupts, flush previous writes */
1131 	IXGBE_READ_REG(hw, IXGBE_EICR);
1132 
1133 	/* Disable the transmit unit.  Each queue must be disabled. */
1134 	for (i = 0; i < hw->mac.max_tx_queues; i++)
1135 		IXGBE_WRITE_REG(hw, IXGBE_TXDCTL(i), IXGBE_TXDCTL_SWFLSH);
1136 
1137 	/* Disable the receive unit by stopping each queue */
1138 	for (i = 0; i < hw->mac.max_rx_queues; i++) {
1139 		reg_val = IXGBE_READ_REG(hw, IXGBE_RXDCTL(i));
1140 		reg_val &= ~IXGBE_RXDCTL_ENABLE;
1141 		reg_val |= IXGBE_RXDCTL_SWFLSH;
1142 		IXGBE_WRITE_REG(hw, IXGBE_RXDCTL(i), reg_val);
1143 	}
1144 
1145 	/* flush all queues disables */
1146 	IXGBE_WRITE_FLUSH(hw);
1147 	msec_delay(2);
1148 
1149 	/*
1150 	 * Prevent the PCI-E bus from hanging by disabling PCI-E master
1151 	 * access and verify no pending requests
1152 	 */
1153 	return ixgbe_disable_pcie_master(hw);
1154 }
1155 
1156 /**
1157  * ixgbe_init_led_link_act_generic - Store the LED index link/activity.
1158  * @hw: pointer to hardware structure
1159  *
1160  * Store the index for the link active LED. This will be used to support
1161  * blinking the LED.
1162  **/
1163 s32 ixgbe_init_led_link_act_generic(struct ixgbe_hw *hw)
1164 {
1165 	struct ixgbe_mac_info *mac = &hw->mac;
1166 	u32 led_reg, led_mode;
1167 	u8 i;
1168 
1169 	led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
1170 
1171 	/* Get LED link active from the LEDCTL register */
1172 	for (i = 0; i < 4; i++) {
1173 		led_mode = led_reg >> IXGBE_LED_MODE_SHIFT(i);
1174 
1175 		if ((led_mode & IXGBE_LED_MODE_MASK_BASE) ==
1176 		     IXGBE_LED_LINK_ACTIVE) {
1177 			mac->led_link_act = i;
1178 			return IXGBE_SUCCESS;
1179 		}
1180 	}
1181 
1182 	/*
1183 	 * If LEDCTL register does not have the LED link active set, then use
1184 	 * known MAC defaults.
1185 	 */
1186 	switch (hw->mac.type) {
1187 	case ixgbe_mac_X550EM_a:
1188 	case ixgbe_mac_X550EM_x:
1189 		mac->led_link_act = 1;
1190 		break;
1191 	default:
1192 		mac->led_link_act = 2;
1193 	}
1194 	return IXGBE_SUCCESS;
1195 }
1196 
1197 /**
1198  * ixgbe_led_on_generic - Turns on the software controllable LEDs.
1199  * @hw: pointer to hardware structure
1200  * @index: led number to turn on
1201  **/
1202 s32 ixgbe_led_on_generic(struct ixgbe_hw *hw, u32 index)
1203 {
1204 	u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
1205 
1206 	DEBUGFUNC("ixgbe_led_on_generic");
1207 
1208 	if (index > 3)
1209 		return IXGBE_ERR_PARAM;
1210 
1211 	/* To turn on the LED, set mode to ON. */
1212 	led_reg &= ~IXGBE_LED_MODE_MASK(index);
1213 	led_reg |= IXGBE_LED_ON << IXGBE_LED_MODE_SHIFT(index);
1214 	IXGBE_WRITE_REG(hw, IXGBE_LEDCTL, led_reg);
1215 	IXGBE_WRITE_FLUSH(hw);
1216 
1217 	return IXGBE_SUCCESS;
1218 }
1219 
1220 /**
1221  * ixgbe_led_off_generic - Turns off the software controllable LEDs.
1222  * @hw: pointer to hardware structure
1223  * @index: led number to turn off
1224  **/
1225 s32 ixgbe_led_off_generic(struct ixgbe_hw *hw, u32 index)
1226 {
1227 	u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
1228 
1229 	DEBUGFUNC("ixgbe_led_off_generic");
1230 
1231 	if (index > 3)
1232 		return IXGBE_ERR_PARAM;
1233 
1234 	/* To turn off the LED, set mode to OFF. */
1235 	led_reg &= ~IXGBE_LED_MODE_MASK(index);
1236 	led_reg |= IXGBE_LED_OFF << IXGBE_LED_MODE_SHIFT(index);
1237 	IXGBE_WRITE_REG(hw, IXGBE_LEDCTL, led_reg);
1238 	IXGBE_WRITE_FLUSH(hw);
1239 
1240 	return IXGBE_SUCCESS;
1241 }
1242 
1243 /**
1244  * ixgbe_init_eeprom_params_generic - Initialize EEPROM params
1245  * @hw: pointer to hardware structure
1246  *
1247  * Initializes the EEPROM parameters ixgbe_eeprom_info within the
1248  * ixgbe_hw struct in order to set up EEPROM access.
1249  **/
1250 s32 ixgbe_init_eeprom_params_generic(struct ixgbe_hw *hw)
1251 {
1252 	struct ixgbe_eeprom_info *eeprom = &hw->eeprom;
1253 	u32 eec;
1254 	u16 eeprom_size;
1255 
1256 	DEBUGFUNC("ixgbe_init_eeprom_params_generic");
1257 
1258 	if (eeprom->type == ixgbe_eeprom_uninitialized) {
1259 		eeprom->type = ixgbe_eeprom_none;
1260 		/* Set default semaphore delay to 10ms which is a well
1261 		 * tested value */
1262 		eeprom->semaphore_delay = 10;
1263 		/* Clear EEPROM page size, it will be initialized as needed */
1264 		eeprom->word_page_size = 0;
1265 
1266 		/*
1267 		 * Check for EEPROM present first.
1268 		 * If not present leave as none
1269 		 */
1270 		eec = IXGBE_READ_REG(hw, IXGBE_EEC_BY_MAC(hw));
1271 		if (eec & IXGBE_EEC_PRES) {
1272 			eeprom->type = ixgbe_eeprom_spi;
1273 
1274 			/*
1275 			 * SPI EEPROM is assumed here.  This code would need to
1276 			 * change if a future EEPROM is not SPI.
1277 			 */
1278 			eeprom_size = (u16)((eec & IXGBE_EEC_SIZE) >>
1279 					    IXGBE_EEC_SIZE_SHIFT);
1280 			eeprom->word_size = 1 << (eeprom_size +
1281 					     IXGBE_EEPROM_WORD_SIZE_SHIFT);
1282 		}
1283 
1284 		if (eec & IXGBE_EEC_ADDR_SIZE)
1285 			eeprom->address_bits = 16;
1286 		else
1287 			eeprom->address_bits = 8;
1288 		DEBUGOUT3("Eeprom params: type = %d, size = %d, address bits: "
1289 			  "%d\n", eeprom->type, eeprom->word_size,
1290 			  eeprom->address_bits);
1291 	}
1292 
1293 	return IXGBE_SUCCESS;
1294 }
1295 
1296 /**
1297  * ixgbe_write_eeprom_buffer_bit_bang_generic - Write EEPROM using bit-bang
1298  * @hw: pointer to hardware structure
1299  * @offset: offset within the EEPROM to write
1300  * @words: number of word(s)
1301  * @data: 16 bit word(s) to write to EEPROM
1302  *
1303  * Reads 16 bit word(s) from EEPROM through bit-bang method
1304  **/
1305 s32 ixgbe_write_eeprom_buffer_bit_bang_generic(struct ixgbe_hw *hw, u16 offset,
1306 					       u16 words, u16 *data)
1307 {
1308 	s32 status = IXGBE_SUCCESS;
1309 	u16 i, count;
1310 
1311 	DEBUGFUNC("ixgbe_write_eeprom_buffer_bit_bang_generic");
1312 
1313 	hw->eeprom.ops.init_params(hw);
1314 
1315 	if (words == 0) {
1316 		status = IXGBE_ERR_INVALID_ARGUMENT;
1317 		goto out;
1318 	}
1319 
1320 	if (offset + words > hw->eeprom.word_size) {
1321 		status = IXGBE_ERR_EEPROM;
1322 		goto out;
1323 	}
1324 
1325 	/*
1326 	 * The EEPROM page size cannot be queried from the chip. We do lazy
1327 	 * initialization. It is worth to do that when we write large buffer.
1328 	 */
1329 	if ((hw->eeprom.word_page_size == 0) &&
1330 	    (words > IXGBE_EEPROM_PAGE_SIZE_MAX))
1331 		ixgbe_detect_eeprom_page_size_generic(hw, offset);
1332 
1333 	/*
1334 	 * We cannot hold synchronization semaphores for too long
1335 	 * to avoid other entity starvation. However it is more efficient
1336 	 * to read in bursts than synchronizing access for each word.
1337 	 */
1338 	for (i = 0; i < words; i += IXGBE_EEPROM_RD_BUFFER_MAX_COUNT) {
1339 		count = (words - i) / IXGBE_EEPROM_RD_BUFFER_MAX_COUNT > 0 ?
1340 			IXGBE_EEPROM_RD_BUFFER_MAX_COUNT : (words - i);
1341 		status = ixgbe_write_eeprom_buffer_bit_bang(hw, offset + i,
1342 							    count, &data[i]);
1343 
1344 		if (status != IXGBE_SUCCESS)
1345 			break;
1346 	}
1347 
1348 out:
1349 	return status;
1350 }
1351 
1352 /**
1353  * ixgbe_write_eeprom_buffer_bit_bang - Writes 16 bit word(s) to EEPROM
1354  * @hw: pointer to hardware structure
1355  * @offset: offset within the EEPROM to be written to
1356  * @words: number of word(s)
1357  * @data: 16 bit word(s) to be written to the EEPROM
1358  *
1359  * If ixgbe_eeprom_update_checksum is not called after this function, the
1360  * EEPROM will most likely contain an invalid checksum.
1361  **/
1362 static s32 ixgbe_write_eeprom_buffer_bit_bang(struct ixgbe_hw *hw, u16 offset,
1363 					      u16 words, u16 *data)
1364 {
1365 	s32 status;
1366 	u16 word;
1367 	u16 page_size;
1368 	u16 i;
1369 	u8 write_opcode = IXGBE_EEPROM_WRITE_OPCODE_SPI;
1370 
1371 	DEBUGFUNC("ixgbe_write_eeprom_buffer_bit_bang");
1372 
1373 	/* Prepare the EEPROM for writing  */
1374 	status = ixgbe_acquire_eeprom(hw);
1375 
1376 	if (status == IXGBE_SUCCESS) {
1377 		if (ixgbe_ready_eeprom(hw) != IXGBE_SUCCESS) {
1378 			ixgbe_release_eeprom(hw);
1379 			status = IXGBE_ERR_EEPROM;
1380 		}
1381 	}
1382 
1383 	if (status == IXGBE_SUCCESS) {
1384 		for (i = 0; i < words; i++) {
1385 			ixgbe_standby_eeprom(hw);
1386 
1387 			/*  Send the WRITE ENABLE command (8 bit opcode )  */
1388 			ixgbe_shift_out_eeprom_bits(hw,
1389 						   IXGBE_EEPROM_WREN_OPCODE_SPI,
1390 						   IXGBE_EEPROM_OPCODE_BITS);
1391 
1392 			ixgbe_standby_eeprom(hw);
1393 
1394 			/*
1395 			 * Some SPI eeproms use the 8th address bit embedded
1396 			 * in the opcode
1397 			 */
1398 			if ((hw->eeprom.address_bits == 8) &&
1399 			    ((offset + i) >= 128))
1400 				write_opcode |= IXGBE_EEPROM_A8_OPCODE_SPI;
1401 
1402 			/* Send the Write command (8-bit opcode + addr) */
1403 			ixgbe_shift_out_eeprom_bits(hw, write_opcode,
1404 						    IXGBE_EEPROM_OPCODE_BITS);
1405 			ixgbe_shift_out_eeprom_bits(hw, (u16)((offset + i) * 2),
1406 						    hw->eeprom.address_bits);
1407 
1408 			page_size = hw->eeprom.word_page_size;
1409 
1410 			/* Send the data in burst via SPI*/
1411 			do {
1412 				word = data[i];
1413 				word = (word >> 8) | (word << 8);
1414 				ixgbe_shift_out_eeprom_bits(hw, word, 16);
1415 
1416 				if (page_size == 0)
1417 					break;
1418 
1419 				/* do not wrap around page */
1420 				if (((offset + i) & (page_size - 1)) ==
1421 				    (page_size - 1))
1422 					break;
1423 			} while (++i < words);
1424 
1425 			ixgbe_standby_eeprom(hw);
1426 			msec_delay(10);
1427 		}
1428 		/* Done with writing - release the EEPROM */
1429 		ixgbe_release_eeprom(hw);
1430 	}
1431 
1432 	return status;
1433 }
1434 
1435 /**
1436  * ixgbe_write_eeprom_generic - Writes 16 bit value to EEPROM
1437  * @hw: pointer to hardware structure
1438  * @offset: offset within the EEPROM to be written to
1439  * @data: 16 bit word to be written to the EEPROM
1440  *
1441  * If ixgbe_eeprom_update_checksum is not called after this function, the
1442  * EEPROM will most likely contain an invalid checksum.
1443  **/
1444 s32 ixgbe_write_eeprom_generic(struct ixgbe_hw *hw, u16 offset, u16 data)
1445 {
1446 	s32 status;
1447 
1448 	DEBUGFUNC("ixgbe_write_eeprom_generic");
1449 
1450 	hw->eeprom.ops.init_params(hw);
1451 
1452 	if (offset >= hw->eeprom.word_size) {
1453 		status = IXGBE_ERR_EEPROM;
1454 		goto out;
1455 	}
1456 
1457 	status = ixgbe_write_eeprom_buffer_bit_bang(hw, offset, 1, &data);
1458 
1459 out:
1460 	return status;
1461 }
1462 
1463 /**
1464  * ixgbe_read_eeprom_buffer_bit_bang_generic - Read EEPROM using bit-bang
1465  * @hw: pointer to hardware structure
1466  * @offset: offset within the EEPROM to be read
1467  * @data: read 16 bit words(s) from EEPROM
1468  * @words: number of word(s)
1469  *
1470  * Reads 16 bit word(s) from EEPROM through bit-bang method
1471  **/
1472 s32 ixgbe_read_eeprom_buffer_bit_bang_generic(struct ixgbe_hw *hw, u16 offset,
1473 					      u16 words, u16 *data)
1474 {
1475 	s32 status = IXGBE_SUCCESS;
1476 	u16 i, count;
1477 
1478 	DEBUGFUNC("ixgbe_read_eeprom_buffer_bit_bang_generic");
1479 
1480 	hw->eeprom.ops.init_params(hw);
1481 
1482 	if (words == 0) {
1483 		status = IXGBE_ERR_INVALID_ARGUMENT;
1484 		goto out;
1485 	}
1486 
1487 	if (offset + words > hw->eeprom.word_size) {
1488 		status = IXGBE_ERR_EEPROM;
1489 		goto out;
1490 	}
1491 
1492 	/*
1493 	 * We cannot hold synchronization semaphores for too long
1494 	 * to avoid other entity starvation. However it is more efficient
1495 	 * to read in bursts than synchronizing access for each word.
1496 	 */
1497 	for (i = 0; i < words; i += IXGBE_EEPROM_RD_BUFFER_MAX_COUNT) {
1498 		count = (words - i) / IXGBE_EEPROM_RD_BUFFER_MAX_COUNT > 0 ?
1499 			IXGBE_EEPROM_RD_BUFFER_MAX_COUNT : (words - i);
1500 
1501 		status = ixgbe_read_eeprom_buffer_bit_bang(hw, offset + i,
1502 							   count, &data[i]);
1503 
1504 		if (status != IXGBE_SUCCESS)
1505 			break;
1506 	}
1507 
1508 out:
1509 	return status;
1510 }
1511 
1512 /**
1513  * ixgbe_read_eeprom_buffer_bit_bang - Read EEPROM using bit-bang
1514  * @hw: pointer to hardware structure
1515  * @offset: offset within the EEPROM to be read
1516  * @words: number of word(s)
1517  * @data: read 16 bit word(s) from EEPROM
1518  *
1519  * Reads 16 bit word(s) from EEPROM through bit-bang method
1520  **/
1521 static s32 ixgbe_read_eeprom_buffer_bit_bang(struct ixgbe_hw *hw, u16 offset,
1522 					     u16 words, u16 *data)
1523 {
1524 	s32 status;
1525 	u16 word_in;
1526 	u8 read_opcode = IXGBE_EEPROM_READ_OPCODE_SPI;
1527 	u16 i;
1528 
1529 	DEBUGFUNC("ixgbe_read_eeprom_buffer_bit_bang");
1530 
1531 	/* Prepare the EEPROM for reading  */
1532 	status = ixgbe_acquire_eeprom(hw);
1533 
1534 	if (status == IXGBE_SUCCESS) {
1535 		if (ixgbe_ready_eeprom(hw) != IXGBE_SUCCESS) {
1536 			ixgbe_release_eeprom(hw);
1537 			status = IXGBE_ERR_EEPROM;
1538 		}
1539 	}
1540 
1541 	if (status == IXGBE_SUCCESS) {
1542 		for (i = 0; i < words; i++) {
1543 			ixgbe_standby_eeprom(hw);
1544 			/*
1545 			 * Some SPI eeproms use the 8th address bit embedded
1546 			 * in the opcode
1547 			 */
1548 			if ((hw->eeprom.address_bits == 8) &&
1549 			    ((offset + i) >= 128))
1550 				read_opcode |= IXGBE_EEPROM_A8_OPCODE_SPI;
1551 
1552 			/* Send the READ command (opcode + addr) */
1553 			ixgbe_shift_out_eeprom_bits(hw, read_opcode,
1554 						    IXGBE_EEPROM_OPCODE_BITS);
1555 			ixgbe_shift_out_eeprom_bits(hw, (u16)((offset + i) * 2),
1556 						    hw->eeprom.address_bits);
1557 
1558 			/* Read the data. */
1559 			word_in = ixgbe_shift_in_eeprom_bits(hw, 16);
1560 			data[i] = (word_in >> 8) | (word_in << 8);
1561 		}
1562 
1563 		/* End this read operation */
1564 		ixgbe_release_eeprom(hw);
1565 	}
1566 
1567 	return status;
1568 }
1569 
1570 /**
1571  * ixgbe_read_eeprom_bit_bang_generic - Read EEPROM word using bit-bang
1572  * @hw: pointer to hardware structure
1573  * @offset: offset within the EEPROM to be read
1574  * @data: read 16 bit value from EEPROM
1575  *
1576  * Reads 16 bit value from EEPROM through bit-bang method
1577  **/
1578 s32 ixgbe_read_eeprom_bit_bang_generic(struct ixgbe_hw *hw, u16 offset,
1579 				       u16 *data)
1580 {
1581 	s32 status;
1582 
1583 	DEBUGFUNC("ixgbe_read_eeprom_bit_bang_generic");
1584 
1585 	hw->eeprom.ops.init_params(hw);
1586 
1587 	if (offset >= hw->eeprom.word_size) {
1588 		status = IXGBE_ERR_EEPROM;
1589 		goto out;
1590 	}
1591 
1592 	status = ixgbe_read_eeprom_buffer_bit_bang(hw, offset, 1, data);
1593 
1594 out:
1595 	return status;
1596 }
1597 
1598 /**
1599  * ixgbe_read_eerd_buffer_generic - Read EEPROM word(s) using EERD
1600  * @hw: pointer to hardware structure
1601  * @offset: offset of word in the EEPROM to read
1602  * @words: number of word(s)
1603  * @data: 16 bit word(s) from the EEPROM
1604  *
1605  * Reads a 16 bit word(s) from the EEPROM using the EERD register.
1606  **/
1607 s32 ixgbe_read_eerd_buffer_generic(struct ixgbe_hw *hw, u16 offset,
1608 				   u16 words, u16 *data)
1609 {
1610 	u32 eerd;
1611 	s32 status = IXGBE_SUCCESS;
1612 	u32 i;
1613 
1614 	DEBUGFUNC("ixgbe_read_eerd_buffer_generic");
1615 
1616 	hw->eeprom.ops.init_params(hw);
1617 
1618 	if (words == 0) {
1619 		status = IXGBE_ERR_INVALID_ARGUMENT;
1620 		ERROR_REPORT1(IXGBE_ERROR_ARGUMENT, "Invalid EEPROM words");
1621 		goto out;
1622 	}
1623 
1624 	if (offset >= hw->eeprom.word_size) {
1625 		status = IXGBE_ERR_EEPROM;
1626 		ERROR_REPORT1(IXGBE_ERROR_ARGUMENT, "Invalid EEPROM offset");
1627 		goto out;
1628 	}
1629 
1630 	for (i = 0; i < words; i++) {
1631 		eerd = ((offset + i) << IXGBE_EEPROM_RW_ADDR_SHIFT) |
1632 		       IXGBE_EEPROM_RW_REG_START;
1633 
1634 		IXGBE_WRITE_REG(hw, IXGBE_EERD, eerd);
1635 		status = ixgbe_poll_eerd_eewr_done(hw, IXGBE_NVM_POLL_READ);
1636 
1637 		if (status == IXGBE_SUCCESS) {
1638 			data[i] = (IXGBE_READ_REG(hw, IXGBE_EERD) >>
1639 				   IXGBE_EEPROM_RW_REG_DATA);
1640 		} else {
1641 			DEBUGOUT("Eeprom read timed out\n");
1642 			goto out;
1643 		}
1644 	}
1645 out:
1646 	return status;
1647 }
1648 
1649 /**
1650  * ixgbe_detect_eeprom_page_size_generic - Detect EEPROM page size
1651  * @hw: pointer to hardware structure
1652  * @offset: offset within the EEPROM to be used as a scratch pad
1653  *
1654  * Discover EEPROM page size by writing marching data at given offset.
1655  * This function is called only when we are writing a new large buffer
1656  * at given offset so the data would be overwritten anyway.
1657  **/
1658 static s32 ixgbe_detect_eeprom_page_size_generic(struct ixgbe_hw *hw,
1659 						 u16 offset)
1660 {
1661 	u16 data[IXGBE_EEPROM_PAGE_SIZE_MAX];
1662 	s32 status = IXGBE_SUCCESS;
1663 	u16 i;
1664 
1665 	DEBUGFUNC("ixgbe_detect_eeprom_page_size_generic");
1666 
1667 	for (i = 0; i < IXGBE_EEPROM_PAGE_SIZE_MAX; i++)
1668 		data[i] = i;
1669 
1670 	hw->eeprom.word_page_size = IXGBE_EEPROM_PAGE_SIZE_MAX;
1671 	status = ixgbe_write_eeprom_buffer_bit_bang(hw, offset,
1672 					     IXGBE_EEPROM_PAGE_SIZE_MAX, data);
1673 	hw->eeprom.word_page_size = 0;
1674 	if (status != IXGBE_SUCCESS)
1675 		goto out;
1676 
1677 	status = ixgbe_read_eeprom_buffer_bit_bang(hw, offset, 1, data);
1678 	if (status != IXGBE_SUCCESS)
1679 		goto out;
1680 
1681 	/*
1682 	 * When writing in burst more than the actual page size
1683 	 * EEPROM address wraps around current page.
1684 	 */
1685 	hw->eeprom.word_page_size = IXGBE_EEPROM_PAGE_SIZE_MAX - data[0];
1686 
1687 	DEBUGOUT1("Detected EEPROM page size = %d words.",
1688 		  hw->eeprom.word_page_size);
1689 out:
1690 	return status;
1691 }
1692 
1693 /**
1694  * ixgbe_read_eerd_generic - Read EEPROM word using EERD
1695  * @hw: pointer to hardware structure
1696  * @offset: offset of  word in the EEPROM to read
1697  * @data: word read from the EEPROM
1698  *
1699  * Reads a 16 bit word from the EEPROM using the EERD register.
1700  **/
1701 s32 ixgbe_read_eerd_generic(struct ixgbe_hw *hw, u16 offset, u16 *data)
1702 {
1703 	return ixgbe_read_eerd_buffer_generic(hw, offset, 1, data);
1704 }
1705 
1706 /**
1707  * ixgbe_write_eewr_buffer_generic - Write EEPROM word(s) using EEWR
1708  * @hw: pointer to hardware structure
1709  * @offset: offset of  word in the EEPROM to write
1710  * @words: number of word(s)
1711  * @data: word(s) write to the EEPROM
1712  *
1713  * Write a 16 bit word(s) to the EEPROM using the EEWR register.
1714  **/
1715 s32 ixgbe_write_eewr_buffer_generic(struct ixgbe_hw *hw, u16 offset,
1716 				    u16 words, u16 *data)
1717 {
1718 	u32 eewr;
1719 	s32 status = IXGBE_SUCCESS;
1720 	u16 i;
1721 
1722 	DEBUGFUNC("ixgbe_write_eewr_generic");
1723 
1724 	hw->eeprom.ops.init_params(hw);
1725 
1726 	if (words == 0) {
1727 		status = IXGBE_ERR_INVALID_ARGUMENT;
1728 		ERROR_REPORT1(IXGBE_ERROR_ARGUMENT, "Invalid EEPROM words");
1729 		goto out;
1730 	}
1731 
1732 	if (offset >= hw->eeprom.word_size) {
1733 		status = IXGBE_ERR_EEPROM;
1734 		ERROR_REPORT1(IXGBE_ERROR_ARGUMENT, "Invalid EEPROM offset");
1735 		goto out;
1736 	}
1737 
1738 	for (i = 0; i < words; i++) {
1739 		eewr = ((offset + i) << IXGBE_EEPROM_RW_ADDR_SHIFT) |
1740 			(data[i] << IXGBE_EEPROM_RW_REG_DATA) |
1741 			IXGBE_EEPROM_RW_REG_START;
1742 
1743 		status = ixgbe_poll_eerd_eewr_done(hw, IXGBE_NVM_POLL_WRITE);
1744 		if (status != IXGBE_SUCCESS) {
1745 			DEBUGOUT("Eeprom write EEWR timed out\n");
1746 			goto out;
1747 		}
1748 
1749 		IXGBE_WRITE_REG(hw, IXGBE_EEWR, eewr);
1750 
1751 		status = ixgbe_poll_eerd_eewr_done(hw, IXGBE_NVM_POLL_WRITE);
1752 		if (status != IXGBE_SUCCESS) {
1753 			DEBUGOUT("Eeprom write EEWR timed out\n");
1754 			goto out;
1755 		}
1756 	}
1757 
1758 out:
1759 	return status;
1760 }
1761 
1762 /**
1763  * ixgbe_write_eewr_generic - Write EEPROM word using EEWR
1764  * @hw: pointer to hardware structure
1765  * @offset: offset of  word in the EEPROM to write
1766  * @data: word write to the EEPROM
1767  *
1768  * Write a 16 bit word to the EEPROM using the EEWR register.
1769  **/
1770 s32 ixgbe_write_eewr_generic(struct ixgbe_hw *hw, u16 offset, u16 data)
1771 {
1772 	return ixgbe_write_eewr_buffer_generic(hw, offset, 1, &data);
1773 }
1774 
1775 /**
1776  * ixgbe_poll_eerd_eewr_done - Poll EERD read or EEWR write status
1777  * @hw: pointer to hardware structure
1778  * @ee_reg: EEPROM flag for polling
1779  *
1780  * Polls the status bit (bit 1) of the EERD or EEWR to determine when the
1781  * read or write is done respectively.
1782  **/
1783 s32 ixgbe_poll_eerd_eewr_done(struct ixgbe_hw *hw, u32 ee_reg)
1784 {
1785 	u32 i;
1786 	u32 reg;
1787 	s32 status = IXGBE_ERR_EEPROM;
1788 
1789 	DEBUGFUNC("ixgbe_poll_eerd_eewr_done");
1790 
1791 	for (i = 0; i < IXGBE_EERD_EEWR_ATTEMPTS; i++) {
1792 		if (ee_reg == IXGBE_NVM_POLL_READ)
1793 			reg = IXGBE_READ_REG(hw, IXGBE_EERD);
1794 		else
1795 			reg = IXGBE_READ_REG(hw, IXGBE_EEWR);
1796 
1797 		if (reg & IXGBE_EEPROM_RW_REG_DONE) {
1798 			status = IXGBE_SUCCESS;
1799 			break;
1800 		}
1801 		usec_delay(5);
1802 	}
1803 
1804 	if (i == IXGBE_EERD_EEWR_ATTEMPTS)
1805 		ERROR_REPORT1(IXGBE_ERROR_POLLING,
1806 			     "EEPROM read/write done polling timed out");
1807 
1808 	return status;
1809 }
1810 
1811 /**
1812  * ixgbe_acquire_eeprom - Acquire EEPROM using bit-bang
1813  * @hw: pointer to hardware structure
1814  *
1815  * Prepares EEPROM for access using bit-bang method. This function should
1816  * be called before issuing a command to the EEPROM.
1817  **/
1818 static s32 ixgbe_acquire_eeprom(struct ixgbe_hw *hw)
1819 {
1820 	s32 status = IXGBE_SUCCESS;
1821 	u32 eec;
1822 	u32 i;
1823 
1824 	DEBUGFUNC("ixgbe_acquire_eeprom");
1825 
1826 	if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM)
1827 	    != IXGBE_SUCCESS)
1828 		status = IXGBE_ERR_SWFW_SYNC;
1829 
1830 	if (status == IXGBE_SUCCESS) {
1831 		eec = IXGBE_READ_REG(hw, IXGBE_EEC_BY_MAC(hw));
1832 
1833 		/* Request EEPROM Access */
1834 		eec |= IXGBE_EEC_REQ;
1835 		IXGBE_WRITE_REG(hw, IXGBE_EEC_BY_MAC(hw), eec);
1836 
1837 		for (i = 0; i < IXGBE_EEPROM_GRANT_ATTEMPTS; i++) {
1838 			eec = IXGBE_READ_REG(hw, IXGBE_EEC_BY_MAC(hw));
1839 			if (eec & IXGBE_EEC_GNT)
1840 				break;
1841 			usec_delay(5);
1842 		}
1843 
1844 		/* Release if grant not acquired */
1845 		if (!(eec & IXGBE_EEC_GNT)) {
1846 			eec &= ~IXGBE_EEC_REQ;
1847 			IXGBE_WRITE_REG(hw, IXGBE_EEC_BY_MAC(hw), eec);
1848 			DEBUGOUT("Could not acquire EEPROM grant\n");
1849 
1850 			hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_EEP_SM);
1851 			status = IXGBE_ERR_EEPROM;
1852 		}
1853 
1854 		/* Setup EEPROM for Read/Write */
1855 		if (status == IXGBE_SUCCESS) {
1856 			/* Clear CS and SK */
1857 			eec &= ~(IXGBE_EEC_CS | IXGBE_EEC_SK);
1858 			IXGBE_WRITE_REG(hw, IXGBE_EEC_BY_MAC(hw), eec);
1859 			IXGBE_WRITE_FLUSH(hw);
1860 			usec_delay(1);
1861 		}
1862 	}
1863 	return status;
1864 }
1865 
1866 /**
1867  * ixgbe_get_eeprom_semaphore - Get hardware semaphore
1868  * @hw: pointer to hardware structure
1869  *
1870  * Sets the hardware semaphores so EEPROM access can occur for bit-bang method
1871  **/
1872 static s32 ixgbe_get_eeprom_semaphore(struct ixgbe_hw *hw)
1873 {
1874 	s32 status = IXGBE_ERR_EEPROM;
1875 	u32 timeout = 2000;
1876 	u32 i;
1877 	u32 swsm;
1878 
1879 	DEBUGFUNC("ixgbe_get_eeprom_semaphore");
1880 
1881 
1882 	/* Get SMBI software semaphore between device drivers first */
1883 	for (i = 0; i < timeout; i++) {
1884 		/*
1885 		 * If the SMBI bit is 0 when we read it, then the bit will be
1886 		 * set and we have the semaphore
1887 		 */
1888 		swsm = IXGBE_READ_REG(hw, IXGBE_SWSM_BY_MAC(hw));
1889 		if (!(swsm & IXGBE_SWSM_SMBI)) {
1890 			status = IXGBE_SUCCESS;
1891 			break;
1892 		}
1893 		usec_delay(50);
1894 	}
1895 
1896 	if (i == timeout) {
1897 		DEBUGOUT("Driver can't access the Eeprom - SMBI Semaphore "
1898 			 "not granted.\n");
1899 		/*
1900 		 * this release is particularly important because our attempts
1901 		 * above to get the semaphore may have succeeded, and if there
1902 		 * was a timeout, we should unconditionally clear the semaphore
1903 		 * bits to free the driver to make progress
1904 		 */
1905 		ixgbe_release_eeprom_semaphore(hw);
1906 
1907 		usec_delay(50);
1908 		/*
1909 		 * one last try
1910 		 * If the SMBI bit is 0 when we read it, then the bit will be
1911 		 * set and we have the semaphore
1912 		 */
1913 		swsm = IXGBE_READ_REG(hw, IXGBE_SWSM_BY_MAC(hw));
1914 		if (!(swsm & IXGBE_SWSM_SMBI))
1915 			status = IXGBE_SUCCESS;
1916 	}
1917 
1918 	/* Now get the semaphore between SW/FW through the SWESMBI bit */
1919 	if (status == IXGBE_SUCCESS) {
1920 		for (i = 0; i < timeout; i++) {
1921 			swsm = IXGBE_READ_REG(hw, IXGBE_SWSM_BY_MAC(hw));
1922 
1923 			/* Set the SW EEPROM semaphore bit to request access */
1924 			swsm |= IXGBE_SWSM_SWESMBI;
1925 			IXGBE_WRITE_REG(hw, IXGBE_SWSM_BY_MAC(hw), swsm);
1926 
1927 			/*
1928 			 * If we set the bit successfully then we got the
1929 			 * semaphore.
1930 			 */
1931 			swsm = IXGBE_READ_REG(hw, IXGBE_SWSM_BY_MAC(hw));
1932 			if (swsm & IXGBE_SWSM_SWESMBI)
1933 				break;
1934 
1935 			usec_delay(50);
1936 		}
1937 
1938 		/*
1939 		 * Release semaphores and return error if SW EEPROM semaphore
1940 		 * was not granted because we don't have access to the EEPROM
1941 		 */
1942 		if (i >= timeout) {
1943 			ERROR_REPORT1(IXGBE_ERROR_POLLING,
1944 			    "SWESMBI Software EEPROM semaphore not granted.\n");
1945 			ixgbe_release_eeprom_semaphore(hw);
1946 			status = IXGBE_ERR_EEPROM;
1947 		}
1948 	} else {
1949 		ERROR_REPORT1(IXGBE_ERROR_POLLING,
1950 			     "Software semaphore SMBI between device drivers "
1951 			     "not granted.\n");
1952 	}
1953 
1954 	return status;
1955 }
1956 
1957 /**
1958  * ixgbe_release_eeprom_semaphore - Release hardware semaphore
1959  * @hw: pointer to hardware structure
1960  *
1961  * This function clears hardware semaphore bits.
1962  **/
1963 static void ixgbe_release_eeprom_semaphore(struct ixgbe_hw *hw)
1964 {
1965 	u32 swsm;
1966 
1967 	DEBUGFUNC("ixgbe_release_eeprom_semaphore");
1968 
1969 	swsm = IXGBE_READ_REG(hw, IXGBE_SWSM);
1970 
1971 	/* Release both semaphores by writing 0 to the bits SWESMBI and SMBI */
1972 	swsm &= ~(IXGBE_SWSM_SWESMBI | IXGBE_SWSM_SMBI);
1973 	IXGBE_WRITE_REG(hw, IXGBE_SWSM, swsm);
1974 	IXGBE_WRITE_FLUSH(hw);
1975 }
1976 
1977 /**
1978  * ixgbe_ready_eeprom - Polls for EEPROM ready
1979  * @hw: pointer to hardware structure
1980  **/
1981 static s32 ixgbe_ready_eeprom(struct ixgbe_hw *hw)
1982 {
1983 	s32 status = IXGBE_SUCCESS;
1984 	u16 i;
1985 	u8 spi_stat_reg;
1986 
1987 	DEBUGFUNC("ixgbe_ready_eeprom");
1988 
1989 	/*
1990 	 * Read "Status Register" repeatedly until the LSB is cleared.  The
1991 	 * EEPROM will signal that the command has been completed by clearing
1992 	 * bit 0 of the internal status register.  If it's not cleared within
1993 	 * 5 milliseconds, then error out.
1994 	 */
1995 	for (i = 0; i < IXGBE_EEPROM_MAX_RETRY_SPI; i += 5) {
1996 		ixgbe_shift_out_eeprom_bits(hw, IXGBE_EEPROM_RDSR_OPCODE_SPI,
1997 					    IXGBE_EEPROM_OPCODE_BITS);
1998 		spi_stat_reg = (u8)ixgbe_shift_in_eeprom_bits(hw, 8);
1999 		if (!(spi_stat_reg & IXGBE_EEPROM_STATUS_RDY_SPI))
2000 			break;
2001 
2002 		usec_delay(5);
2003 		ixgbe_standby_eeprom(hw);
2004 	}
2005 
2006 	/*
2007 	 * On some parts, SPI write time could vary from 0-20mSec on 3.3V
2008 	 * devices (and only 0-5mSec on 5V devices)
2009 	 */
2010 	if (i >= IXGBE_EEPROM_MAX_RETRY_SPI) {
2011 		DEBUGOUT("SPI EEPROM Status error\n");
2012 		status = IXGBE_ERR_EEPROM;
2013 	}
2014 
2015 	return status;
2016 }
2017 
2018 /**
2019  * ixgbe_standby_eeprom - Returns EEPROM to a "standby" state
2020  * @hw: pointer to hardware structure
2021  **/
2022 static void ixgbe_standby_eeprom(struct ixgbe_hw *hw)
2023 {
2024 	u32 eec;
2025 
2026 	DEBUGFUNC("ixgbe_standby_eeprom");
2027 
2028 	eec = IXGBE_READ_REG(hw, IXGBE_EEC_BY_MAC(hw));
2029 
2030 	/* Toggle CS to flush commands */
2031 	eec |= IXGBE_EEC_CS;
2032 	IXGBE_WRITE_REG(hw, IXGBE_EEC_BY_MAC(hw), eec);
2033 	IXGBE_WRITE_FLUSH(hw);
2034 	usec_delay(1);
2035 	eec &= ~IXGBE_EEC_CS;
2036 	IXGBE_WRITE_REG(hw, IXGBE_EEC_BY_MAC(hw), eec);
2037 	IXGBE_WRITE_FLUSH(hw);
2038 	usec_delay(1);
2039 }
2040 
2041 /**
2042  * ixgbe_shift_out_eeprom_bits - Shift data bits out to the EEPROM.
2043  * @hw: pointer to hardware structure
2044  * @data: data to send to the EEPROM
2045  * @count: number of bits to shift out
2046  **/
2047 static void ixgbe_shift_out_eeprom_bits(struct ixgbe_hw *hw, u16 data,
2048 					u16 count)
2049 {
2050 	u32 eec;
2051 	u32 mask;
2052 	u32 i;
2053 
2054 	DEBUGFUNC("ixgbe_shift_out_eeprom_bits");
2055 
2056 	eec = IXGBE_READ_REG(hw, IXGBE_EEC_BY_MAC(hw));
2057 
2058 	/*
2059 	 * Mask is used to shift "count" bits of "data" out to the EEPROM
2060 	 * one bit at a time.  Determine the starting bit based on count
2061 	 */
2062 	mask = 0x01 << (count - 1);
2063 
2064 	for (i = 0; i < count; i++) {
2065 		/*
2066 		 * A "1" is shifted out to the EEPROM by setting bit "DI" to a
2067 		 * "1", and then raising and then lowering the clock (the SK
2068 		 * bit controls the clock input to the EEPROM).  A "0" is
2069 		 * shifted out to the EEPROM by setting "DI" to "0" and then
2070 		 * raising and then lowering the clock.
2071 		 */
2072 		if (data & mask)
2073 			eec |= IXGBE_EEC_DI;
2074 		else
2075 			eec &= ~IXGBE_EEC_DI;
2076 
2077 		IXGBE_WRITE_REG(hw, IXGBE_EEC_BY_MAC(hw), eec);
2078 		IXGBE_WRITE_FLUSH(hw);
2079 
2080 		usec_delay(1);
2081 
2082 		ixgbe_raise_eeprom_clk(hw, &eec);
2083 		ixgbe_lower_eeprom_clk(hw, &eec);
2084 
2085 		/*
2086 		 * Shift mask to signify next bit of data to shift in to the
2087 		 * EEPROM
2088 		 */
2089 		mask = mask >> 1;
2090 	}
2091 
2092 	/* We leave the "DI" bit set to "0" when we leave this routine. */
2093 	eec &= ~IXGBE_EEC_DI;
2094 	IXGBE_WRITE_REG(hw, IXGBE_EEC_BY_MAC(hw), eec);
2095 	IXGBE_WRITE_FLUSH(hw);
2096 }
2097 
2098 /**
2099  * ixgbe_shift_in_eeprom_bits - Shift data bits in from the EEPROM
2100  * @hw: pointer to hardware structure
2101  * @count: number of bits to shift
2102  **/
2103 static u16 ixgbe_shift_in_eeprom_bits(struct ixgbe_hw *hw, u16 count)
2104 {
2105 	u32 eec;
2106 	u32 i;
2107 	u16 data = 0;
2108 
2109 	DEBUGFUNC("ixgbe_shift_in_eeprom_bits");
2110 
2111 	/*
2112 	 * In order to read a register from the EEPROM, we need to shift
2113 	 * 'count' bits in from the EEPROM. Bits are "shifted in" by raising
2114 	 * the clock input to the EEPROM (setting the SK bit), and then reading
2115 	 * the value of the "DO" bit.  During this "shifting in" process the
2116 	 * "DI" bit should always be clear.
2117 	 */
2118 	eec = IXGBE_READ_REG(hw, IXGBE_EEC_BY_MAC(hw));
2119 
2120 	eec &= ~(IXGBE_EEC_DO | IXGBE_EEC_DI);
2121 
2122 	for (i = 0; i < count; i++) {
2123 		data = data << 1;
2124 		ixgbe_raise_eeprom_clk(hw, &eec);
2125 
2126 		eec = IXGBE_READ_REG(hw, IXGBE_EEC_BY_MAC(hw));
2127 
2128 		eec &= ~(IXGBE_EEC_DI);
2129 		if (eec & IXGBE_EEC_DO)
2130 			data |= 1;
2131 
2132 		ixgbe_lower_eeprom_clk(hw, &eec);
2133 	}
2134 
2135 	return data;
2136 }
2137 
2138 /**
2139  * ixgbe_raise_eeprom_clk - Raises the EEPROM's clock input.
2140  * @hw: pointer to hardware structure
2141  * @eec: EEC register's current value
2142  **/
2143 static void ixgbe_raise_eeprom_clk(struct ixgbe_hw *hw, u32 *eec)
2144 {
2145 	DEBUGFUNC("ixgbe_raise_eeprom_clk");
2146 
2147 	/*
2148 	 * Raise the clock input to the EEPROM
2149 	 * (setting the SK bit), then delay
2150 	 */
2151 	*eec = *eec | IXGBE_EEC_SK;
2152 	IXGBE_WRITE_REG(hw, IXGBE_EEC_BY_MAC(hw), *eec);
2153 	IXGBE_WRITE_FLUSH(hw);
2154 	usec_delay(1);
2155 }
2156 
2157 /**
2158  * ixgbe_lower_eeprom_clk - Lowers the EEPROM's clock input.
2159  * @hw: pointer to hardware structure
2160  * @eec: EEC's current value
2161  **/
2162 static void ixgbe_lower_eeprom_clk(struct ixgbe_hw *hw, u32 *eec)
2163 {
2164 	DEBUGFUNC("ixgbe_lower_eeprom_clk");
2165 
2166 	/*
2167 	 * Lower the clock input to the EEPROM (clearing the SK bit), then
2168 	 * delay
2169 	 */
2170 	*eec = *eec & ~IXGBE_EEC_SK;
2171 	IXGBE_WRITE_REG(hw, IXGBE_EEC_BY_MAC(hw), *eec);
2172 	IXGBE_WRITE_FLUSH(hw);
2173 	usec_delay(1);
2174 }
2175 
2176 /**
2177  * ixgbe_release_eeprom - Release EEPROM, release semaphores
2178  * @hw: pointer to hardware structure
2179  **/
2180 static void ixgbe_release_eeprom(struct ixgbe_hw *hw)
2181 {
2182 	u32 eec;
2183 
2184 	DEBUGFUNC("ixgbe_release_eeprom");
2185 
2186 	eec = IXGBE_READ_REG(hw, IXGBE_EEC_BY_MAC(hw));
2187 
2188 	eec |= IXGBE_EEC_CS;  /* Pull CS high */
2189 	eec &= ~IXGBE_EEC_SK; /* Lower SCK */
2190 
2191 	IXGBE_WRITE_REG(hw, IXGBE_EEC_BY_MAC(hw), eec);
2192 	IXGBE_WRITE_FLUSH(hw);
2193 
2194 	usec_delay(1);
2195 
2196 	/* Stop requesting EEPROM access */
2197 	eec &= ~IXGBE_EEC_REQ;
2198 	IXGBE_WRITE_REG(hw, IXGBE_EEC_BY_MAC(hw), eec);
2199 
2200 	hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_EEP_SM);
2201 
2202 	/* Delay before attempt to obtain semaphore again to allow FW access */
2203 	msec_delay(hw->eeprom.semaphore_delay);
2204 }
2205 
2206 /**
2207  * ixgbe_calc_eeprom_checksum_generic - Calculates and returns the checksum
2208  * @hw: pointer to hardware structure
2209  *
2210  * Returns a negative error code on error, or the 16-bit checksum
2211  **/
2212 s32 ixgbe_calc_eeprom_checksum_generic(struct ixgbe_hw *hw)
2213 {
2214 	u16 i;
2215 	u16 j;
2216 	u16 checksum = 0;
2217 	u16 length = 0;
2218 	u16 pointer = 0;
2219 	u16 word = 0;
2220 
2221 	DEBUGFUNC("ixgbe_calc_eeprom_checksum_generic");
2222 
2223 	/* Include 0x0-0x3F in the checksum */
2224 	for (i = 0; i < IXGBE_EEPROM_CHECKSUM; i++) {
2225 		if (hw->eeprom.ops.read(hw, i, &word)) {
2226 			DEBUGOUT("EEPROM read failed\n");
2227 			return IXGBE_ERR_EEPROM;
2228 		}
2229 		checksum += word;
2230 	}
2231 
2232 	/* Include all data from pointers except for the fw pointer */
2233 	for (i = IXGBE_PCIE_ANALOG_PTR; i < IXGBE_FW_PTR; i++) {
2234 		if (hw->eeprom.ops.read(hw, i, &pointer)) {
2235 			DEBUGOUT("EEPROM read failed\n");
2236 			return IXGBE_ERR_EEPROM;
2237 		}
2238 
2239 		/* If the pointer seems invalid */
2240 		if (pointer == 0xFFFF || pointer == 0)
2241 			continue;
2242 
2243 		if (hw->eeprom.ops.read(hw, pointer, &length)) {
2244 			DEBUGOUT("EEPROM read failed\n");
2245 			return IXGBE_ERR_EEPROM;
2246 		}
2247 
2248 		if (length == 0xFFFF || length == 0)
2249 			continue;
2250 
2251 		for (j = pointer + 1; j <= pointer + length; j++) {
2252 			if (hw->eeprom.ops.read(hw, j, &word)) {
2253 				DEBUGOUT("EEPROM read failed\n");
2254 				return IXGBE_ERR_EEPROM;
2255 			}
2256 			checksum += word;
2257 		}
2258 	}
2259 
2260 	checksum = (u16)IXGBE_EEPROM_SUM - checksum;
2261 
2262 	return (s32)checksum;
2263 }
2264 
2265 /**
2266  * ixgbe_validate_eeprom_checksum_generic - Validate EEPROM checksum
2267  * @hw: pointer to hardware structure
2268  * @checksum_val: calculated checksum
2269  *
2270  * Performs checksum calculation and validates the EEPROM checksum.  If the
2271  * caller does not need checksum_val, the value can be NULL.
2272  **/
2273 s32 ixgbe_validate_eeprom_checksum_generic(struct ixgbe_hw *hw,
2274 					   u16 *checksum_val)
2275 {
2276 	s32 status;
2277 	u16 checksum;
2278 	u16 read_checksum = 0;
2279 
2280 	DEBUGFUNC("ixgbe_validate_eeprom_checksum_generic");
2281 
2282 	/* Read the first word from the EEPROM. If this times out or fails, do
2283 	 * not continue or we could be in for a very long wait while every
2284 	 * EEPROM read fails
2285 	 */
2286 	status = hw->eeprom.ops.read(hw, 0, &checksum);
2287 	if (status) {
2288 		DEBUGOUT("EEPROM read failed\n");
2289 		return status;
2290 	}
2291 
2292 	status = hw->eeprom.ops.calc_checksum(hw);
2293 	if (status < 0)
2294 		return status;
2295 
2296 	checksum = (u16)(status & 0xffff);
2297 
2298 	status = hw->eeprom.ops.read(hw, IXGBE_EEPROM_CHECKSUM, &read_checksum);
2299 	if (status) {
2300 		DEBUGOUT("EEPROM read failed\n");
2301 		return status;
2302 	}
2303 
2304 	/* Verify read checksum from EEPROM is the same as
2305 	 * calculated checksum
2306 	 */
2307 	if (read_checksum != checksum)
2308 		status = IXGBE_ERR_EEPROM_CHECKSUM;
2309 
2310 	/* If the user cares, return the calculated checksum */
2311 	if (checksum_val)
2312 		*checksum_val = checksum;
2313 
2314 	return status;
2315 }
2316 
2317 /**
2318  * ixgbe_update_eeprom_checksum_generic - Updates the EEPROM checksum
2319  * @hw: pointer to hardware structure
2320  **/
2321 s32 ixgbe_update_eeprom_checksum_generic(struct ixgbe_hw *hw)
2322 {
2323 	s32 status;
2324 	u16 checksum;
2325 
2326 	DEBUGFUNC("ixgbe_update_eeprom_checksum_generic");
2327 
2328 	/* Read the first word from the EEPROM. If this times out or fails, do
2329 	 * not continue or we could be in for a very long wait while every
2330 	 * EEPROM read fails
2331 	 */
2332 	status = hw->eeprom.ops.read(hw, 0, &checksum);
2333 	if (status) {
2334 		DEBUGOUT("EEPROM read failed\n");
2335 		return status;
2336 	}
2337 
2338 	status = hw->eeprom.ops.calc_checksum(hw);
2339 	if (status < 0)
2340 		return status;
2341 
2342 	checksum = (u16)(status & 0xffff);
2343 
2344 	status = hw->eeprom.ops.write(hw, IXGBE_EEPROM_CHECKSUM, checksum);
2345 
2346 	return status;
2347 }
2348 
2349 /**
2350  * ixgbe_validate_mac_addr - Validate MAC address
2351  * @mac_addr: pointer to MAC address.
2352  *
2353  * Tests a MAC address to ensure it is a valid Individual Address.
2354  **/
2355 s32 ixgbe_validate_mac_addr(u8 *mac_addr)
2356 {
2357 	s32 status = IXGBE_SUCCESS;
2358 
2359 	DEBUGFUNC("ixgbe_validate_mac_addr");
2360 
2361 	/* Make sure it is not a multicast address */
2362 	if (IXGBE_IS_MULTICAST(mac_addr)) {
2363 		status = IXGBE_ERR_INVALID_MAC_ADDR;
2364 	/* Not a broadcast address */
2365 	} else if (IXGBE_IS_BROADCAST(mac_addr)) {
2366 		status = IXGBE_ERR_INVALID_MAC_ADDR;
2367 	/* Reject the zero address */
2368 	} else if (mac_addr[0] == 0 && mac_addr[1] == 0 && mac_addr[2] == 0 &&
2369 		   mac_addr[3] == 0 && mac_addr[4] == 0 && mac_addr[5] == 0) {
2370 		status = IXGBE_ERR_INVALID_MAC_ADDR;
2371 	}
2372 	return status;
2373 }
2374 
2375 /**
2376  * ixgbe_set_rar_generic - Set Rx address register
2377  * @hw: pointer to hardware structure
2378  * @index: Receive address register to write
2379  * @addr: Address to put into receive address register
2380  * @vmdq: VMDq "set" or "pool" index
2381  * @enable_addr: set flag that address is active
2382  *
2383  * Puts an ethernet address into a receive address register.
2384  **/
2385 s32 ixgbe_set_rar_generic(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq,
2386 			  u32 enable_addr)
2387 {
2388 	u32 rar_low, rar_high;
2389 	u32 rar_entries = hw->mac.num_rar_entries;
2390 
2391 	DEBUGFUNC("ixgbe_set_rar_generic");
2392 
2393 	/* Make sure we are using a valid rar index range */
2394 	if (index >= rar_entries) {
2395 		ERROR_REPORT2(IXGBE_ERROR_ARGUMENT,
2396 			     "RAR index %d is out of range.\n", index);
2397 		return IXGBE_ERR_INVALID_ARGUMENT;
2398 	}
2399 
2400 	/* setup VMDq pool selection before this RAR gets enabled */
2401 	hw->mac.ops.set_vmdq(hw, index, vmdq);
2402 
2403 	/*
2404 	 * HW expects these in little endian so we reverse the byte
2405 	 * order from network order (big endian) to little endian
2406 	 */
2407 	rar_low = ((u32)addr[0] |
2408 		   ((u32)addr[1] << 8) |
2409 		   ((u32)addr[2] << 16) |
2410 		   ((u32)addr[3] << 24));
2411 	/*
2412 	 * Some parts put the VMDq setting in the extra RAH bits,
2413 	 * so save everything except the lower 16 bits that hold part
2414 	 * of the address and the address valid bit.
2415 	 */
2416 	rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(index));
2417 	rar_high &= ~(0x0000FFFF | IXGBE_RAH_AV);
2418 	rar_high |= ((u32)addr[4] | ((u32)addr[5] << 8));
2419 
2420 	if (enable_addr != 0)
2421 		rar_high |= IXGBE_RAH_AV;
2422 
2423 	IXGBE_WRITE_REG(hw, IXGBE_RAL(index), rar_low);
2424 	IXGBE_WRITE_REG(hw, IXGBE_RAH(index), rar_high);
2425 
2426 	return IXGBE_SUCCESS;
2427 }
2428 
2429 /**
2430  * ixgbe_clear_rar_generic - Remove Rx address register
2431  * @hw: pointer to hardware structure
2432  * @index: Receive address register to write
2433  *
2434  * Clears an ethernet address from a receive address register.
2435  **/
2436 s32 ixgbe_clear_rar_generic(struct ixgbe_hw *hw, u32 index)
2437 {
2438 	u32 rar_high;
2439 	u32 rar_entries = hw->mac.num_rar_entries;
2440 
2441 	DEBUGFUNC("ixgbe_clear_rar_generic");
2442 
2443 	/* Make sure we are using a valid rar index range */
2444 	if (index >= rar_entries) {
2445 		ERROR_REPORT2(IXGBE_ERROR_ARGUMENT,
2446 			     "RAR index %d is out of range.\n", index);
2447 		return IXGBE_ERR_INVALID_ARGUMENT;
2448 	}
2449 
2450 	/*
2451 	 * Some parts put the VMDq setting in the extra RAH bits,
2452 	 * so save everything except the lower 16 bits that hold part
2453 	 * of the address and the address valid bit.
2454 	 */
2455 	rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(index));
2456 	rar_high &= ~(0x0000FFFF | IXGBE_RAH_AV);
2457 
2458 	IXGBE_WRITE_REG(hw, IXGBE_RAL(index), 0);
2459 	IXGBE_WRITE_REG(hw, IXGBE_RAH(index), rar_high);
2460 
2461 	/* clear VMDq pool/queue selection for this RAR */
2462 	hw->mac.ops.clear_vmdq(hw, index, IXGBE_CLEAR_VMDQ_ALL);
2463 
2464 	return IXGBE_SUCCESS;
2465 }
2466 
2467 /**
2468  * ixgbe_init_rx_addrs_generic - Initializes receive address filters.
2469  * @hw: pointer to hardware structure
2470  *
2471  * Places the MAC address in receive address register 0 and clears the rest
2472  * of the receive address registers. Clears the multicast table. Assumes
2473  * the receiver is in reset when the routine is called.
2474  **/
2475 s32 ixgbe_init_rx_addrs_generic(struct ixgbe_hw *hw)
2476 {
2477 	u32 i;
2478 	u32 rar_entries = hw->mac.num_rar_entries;
2479 
2480 	DEBUGFUNC("ixgbe_init_rx_addrs_generic");
2481 
2482 	/*
2483 	 * If the current mac address is valid, assume it is a software override
2484 	 * to the permanent address.
2485 	 * Otherwise, use the permanent address from the eeprom.
2486 	 */
2487 	if (ixgbe_validate_mac_addr(hw->mac.addr) ==
2488 	    IXGBE_ERR_INVALID_MAC_ADDR) {
2489 		/* Get the MAC address from the RAR0 for later reference */
2490 		hw->mac.ops.get_mac_addr(hw, hw->mac.addr);
2491 
2492 		DEBUGOUT3(" Keeping Current RAR0 Addr =%.2X %.2X %.2X ",
2493 			  hw->mac.addr[0], hw->mac.addr[1],
2494 			  hw->mac.addr[2]);
2495 		DEBUGOUT3("%.2X %.2X %.2X\n", hw->mac.addr[3],
2496 			  hw->mac.addr[4], hw->mac.addr[5]);
2497 	} else {
2498 		/* Setup the receive address. */
2499 		DEBUGOUT("Overriding MAC Address in RAR[0]\n");
2500 		DEBUGOUT3(" New MAC Addr =%.2X %.2X %.2X ",
2501 			  hw->mac.addr[0], hw->mac.addr[1],
2502 			  hw->mac.addr[2]);
2503 		DEBUGOUT3("%.2X %.2X %.2X\n", hw->mac.addr[3],
2504 			  hw->mac.addr[4], hw->mac.addr[5]);
2505 
2506 		hw->mac.ops.set_rar(hw, 0, hw->mac.addr, 0, IXGBE_RAH_AV);
2507 	}
2508 
2509 	/* clear VMDq pool/queue selection for RAR 0 */
2510 	hw->mac.ops.clear_vmdq(hw, 0, IXGBE_CLEAR_VMDQ_ALL);
2511 
2512 	hw->addr_ctrl.overflow_promisc = 0;
2513 
2514 	hw->addr_ctrl.rar_used_count = 1;
2515 
2516 	/* Zero out the other receive addresses. */
2517 	DEBUGOUT1("Clearing RAR[1-%d]\n", rar_entries - 1);
2518 	for (i = 1; i < rar_entries; i++) {
2519 		IXGBE_WRITE_REG(hw, IXGBE_RAL(i), 0);
2520 		IXGBE_WRITE_REG(hw, IXGBE_RAH(i), 0);
2521 	}
2522 
2523 	/* Clear the MTA */
2524 	hw->addr_ctrl.mta_in_use = 0;
2525 	IXGBE_WRITE_REG(hw, IXGBE_MCSTCTRL, hw->mac.mc_filter_type);
2526 
2527 	DEBUGOUT(" Clearing MTA\n");
2528 	for (i = 0; i < hw->mac.mcft_size; i++)
2529 		IXGBE_WRITE_REG(hw, IXGBE_MTA(i), 0);
2530 
2531 	ixgbe_init_uta_tables(hw);
2532 
2533 	return IXGBE_SUCCESS;
2534 }
2535 
2536 /**
2537  * ixgbe_add_uc_addr - Adds a secondary unicast address.
2538  * @hw: pointer to hardware structure
2539  * @addr: new address
2540  * @vmdq: VMDq "set" or "pool" index
2541  *
2542  * Adds it to unused receive address register or goes into promiscuous mode.
2543  **/
2544 void ixgbe_add_uc_addr(struct ixgbe_hw *hw, u8 *addr, u32 vmdq)
2545 {
2546 	u32 rar_entries = hw->mac.num_rar_entries;
2547 	u32 rar;
2548 
2549 	DEBUGFUNC("ixgbe_add_uc_addr");
2550 
2551 	DEBUGOUT6(" UC Addr = %.2X %.2X %.2X %.2X %.2X %.2X\n",
2552 		  addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
2553 
2554 	/*
2555 	 * Place this address in the RAR if there is room,
2556 	 * else put the controller into promiscuous mode
2557 	 */
2558 	if (hw->addr_ctrl.rar_used_count < rar_entries) {
2559 		rar = hw->addr_ctrl.rar_used_count;
2560 		hw->mac.ops.set_rar(hw, rar, addr, vmdq, IXGBE_RAH_AV);
2561 		DEBUGOUT1("Added a secondary address to RAR[%d]\n", rar);
2562 		hw->addr_ctrl.rar_used_count++;
2563 	} else {
2564 		hw->addr_ctrl.overflow_promisc++;
2565 	}
2566 
2567 	DEBUGOUT("ixgbe_add_uc_addr Complete\n");
2568 }
2569 
2570 /**
2571  * ixgbe_update_uc_addr_list_generic - Updates MAC list of secondary addresses
2572  * @hw: pointer to hardware structure
2573  * @addr_list: the list of new addresses
2574  * @addr_count: number of addresses
2575  * @next: iterator function to walk the address list
2576  *
2577  * The given list replaces any existing list.  Clears the secondary addrs from
2578  * receive address registers.  Uses unused receive address registers for the
2579  * first secondary addresses, and falls back to promiscuous mode as needed.
2580  *
2581  * Drivers using secondary unicast addresses must set user_set_promisc when
2582  * manually putting the device into promiscuous mode.
2583  **/
2584 s32 ixgbe_update_uc_addr_list_generic(struct ixgbe_hw *hw, u8 *addr_list,
2585 				      u32 addr_count, ixgbe_mc_addr_itr next)
2586 {
2587 	u8 *addr;
2588 	u32 i;
2589 	u32 old_promisc_setting = hw->addr_ctrl.overflow_promisc;
2590 	u32 uc_addr_in_use;
2591 	u32 fctrl;
2592 	u32 vmdq;
2593 
2594 	DEBUGFUNC("ixgbe_update_uc_addr_list_generic");
2595 
2596 	/*
2597 	 * Clear accounting of old secondary address list,
2598 	 * don't count RAR[0]
2599 	 */
2600 	uc_addr_in_use = hw->addr_ctrl.rar_used_count - 1;
2601 	hw->addr_ctrl.rar_used_count -= uc_addr_in_use;
2602 	hw->addr_ctrl.overflow_promisc = 0;
2603 
2604 	/* Zero out the other receive addresses */
2605 	DEBUGOUT1("Clearing RAR[1-%d]\n", uc_addr_in_use+1);
2606 	for (i = 0; i < uc_addr_in_use; i++) {
2607 		IXGBE_WRITE_REG(hw, IXGBE_RAL(1+i), 0);
2608 		IXGBE_WRITE_REG(hw, IXGBE_RAH(1+i), 0);
2609 	}
2610 
2611 	/* Add the new addresses */
2612 	for (i = 0; i < addr_count; i++) {
2613 		DEBUGOUT(" Adding the secondary addresses:\n");
2614 		addr = next(hw, &addr_list, &vmdq);
2615 		ixgbe_add_uc_addr(hw, addr, vmdq);
2616 	}
2617 
2618 	if (hw->addr_ctrl.overflow_promisc) {
2619 		/* enable promisc if not already in overflow or set by user */
2620 		if (!old_promisc_setting && !hw->addr_ctrl.user_set_promisc) {
2621 			DEBUGOUT(" Entering address overflow promisc mode\n");
2622 			fctrl = IXGBE_READ_REG(hw, IXGBE_FCTRL);
2623 			fctrl |= IXGBE_FCTRL_UPE;
2624 			IXGBE_WRITE_REG(hw, IXGBE_FCTRL, fctrl);
2625 		}
2626 	} else {
2627 		/* only disable if set by overflow, not by user */
2628 		if (old_promisc_setting && !hw->addr_ctrl.user_set_promisc) {
2629 			DEBUGOUT(" Leaving address overflow promisc mode\n");
2630 			fctrl = IXGBE_READ_REG(hw, IXGBE_FCTRL);
2631 			fctrl &= ~IXGBE_FCTRL_UPE;
2632 			IXGBE_WRITE_REG(hw, IXGBE_FCTRL, fctrl);
2633 		}
2634 	}
2635 
2636 	DEBUGOUT("ixgbe_update_uc_addr_list_generic Complete\n");
2637 	return IXGBE_SUCCESS;
2638 }
2639 
2640 /**
2641  * ixgbe_mta_vector - Determines bit-vector in multicast table to set
2642  * @hw: pointer to hardware structure
2643  * @mc_addr: the multicast address
2644  *
2645  * Extracts the 12 bits, from a multicast address, to determine which
2646  * bit-vector to set in the multicast table. The hardware uses 12 bits, from
2647  * incoming rx multicast addresses, to determine the bit-vector to check in
2648  * the MTA. Which of the 4 combination, of 12-bits, the hardware uses is set
2649  * by the MO field of the MCSTCTRL. The MO field is set during initialization
2650  * to mc_filter_type.
2651  **/
2652 static s32 ixgbe_mta_vector(struct ixgbe_hw *hw, u8 *mc_addr)
2653 {
2654 	u32 vector = 0;
2655 
2656 	DEBUGFUNC("ixgbe_mta_vector");
2657 
2658 	switch (hw->mac.mc_filter_type) {
2659 	case 0:   /* use bits [47:36] of the address */
2660 		vector = ((mc_addr[4] >> 4) | (((u16)mc_addr[5]) << 4));
2661 		break;
2662 	case 1:   /* use bits [46:35] of the address */
2663 		vector = ((mc_addr[4] >> 3) | (((u16)mc_addr[5]) << 5));
2664 		break;
2665 	case 2:   /* use bits [45:34] of the address */
2666 		vector = ((mc_addr[4] >> 2) | (((u16)mc_addr[5]) << 6));
2667 		break;
2668 	case 3:   /* use bits [43:32] of the address */
2669 		vector = ((mc_addr[4]) | (((u16)mc_addr[5]) << 8));
2670 		break;
2671 	default:  /* Invalid mc_filter_type */
2672 		DEBUGOUT("MC filter type param set incorrectly\n");
2673 		ASSERT(0);
2674 		break;
2675 	}
2676 
2677 	/* vector can only be 12-bits or boundary will be exceeded */
2678 	vector &= 0xFFF;
2679 	return vector;
2680 }
2681 
2682 /**
2683  * ixgbe_set_mta - Set bit-vector in multicast table
2684  * @hw: pointer to hardware structure
2685  * @mc_addr: Multicast address
2686  *
2687  * Sets the bit-vector in the multicast table.
2688  **/
2689 void ixgbe_set_mta(struct ixgbe_hw *hw, u8 *mc_addr)
2690 {
2691 	u32 vector;
2692 	u32 vector_bit;
2693 	u32 vector_reg;
2694 
2695 	DEBUGFUNC("ixgbe_set_mta");
2696 
2697 	hw->addr_ctrl.mta_in_use++;
2698 
2699 	vector = ixgbe_mta_vector(hw, mc_addr);
2700 	DEBUGOUT1(" bit-vector = 0x%03X\n", vector);
2701 
2702 	/*
2703 	 * The MTA is a register array of 128 32-bit registers. It is treated
2704 	 * like an array of 4096 bits.  We want to set bit
2705 	 * BitArray[vector_value]. So we figure out what register the bit is
2706 	 * in, read it, OR in the new bit, then write back the new value.  The
2707 	 * register is determined by the upper 7 bits of the vector value and
2708 	 * the bit within that register are determined by the lower 5 bits of
2709 	 * the value.
2710 	 */
2711 	vector_reg = (vector >> 5) & 0x7F;
2712 	vector_bit = vector & 0x1F;
2713 	hw->mac.mta_shadow[vector_reg] |= (1 << vector_bit);
2714 }
2715 
2716 /**
2717  * ixgbe_update_mc_addr_list_generic - Updates MAC list of multicast addresses
2718  * @hw: pointer to hardware structure
2719  * @mc_addr_list: the list of new multicast addresses
2720  * @mc_addr_count: number of addresses
2721  * @next: iterator function to walk the multicast address list
2722  * @clear: flag, when set clears the table beforehand
2723  *
2724  * When the clear flag is set, the given list replaces any existing list.
2725  * Hashes the given addresses into the multicast table.
2726  **/
2727 s32 ixgbe_update_mc_addr_list_generic(struct ixgbe_hw *hw, u8 *mc_addr_list,
2728 				      u32 mc_addr_count, ixgbe_mc_addr_itr next,
2729 				      bool clear)
2730 {
2731 	u32 i;
2732 	u32 vmdq;
2733 
2734 	DEBUGFUNC("ixgbe_update_mc_addr_list_generic");
2735 
2736 	/*
2737 	 * Set the new number of MC addresses that we are being requested to
2738 	 * use.
2739 	 */
2740 	hw->addr_ctrl.num_mc_addrs = mc_addr_count;
2741 	hw->addr_ctrl.mta_in_use = 0;
2742 
2743 	/* Clear mta_shadow */
2744 	if (clear) {
2745 		DEBUGOUT(" Clearing MTA\n");
2746 		memset(&hw->mac.mta_shadow, 0, sizeof(hw->mac.mta_shadow));
2747 	}
2748 
2749 	/* Update mta_shadow */
2750 	for (i = 0; i < mc_addr_count; i++) {
2751 		DEBUGOUT(" Adding the multicast addresses:\n");
2752 		ixgbe_set_mta(hw, next(hw, &mc_addr_list, &vmdq));
2753 	}
2754 
2755 	/* Enable mta */
2756 	for (i = 0; i < hw->mac.mcft_size; i++)
2757 		IXGBE_WRITE_REG_ARRAY(hw, IXGBE_MTA(0), i,
2758 				      hw->mac.mta_shadow[i]);
2759 
2760 	if (hw->addr_ctrl.mta_in_use > 0)
2761 		IXGBE_WRITE_REG(hw, IXGBE_MCSTCTRL,
2762 				IXGBE_MCSTCTRL_MFE | hw->mac.mc_filter_type);
2763 
2764 	DEBUGOUT("ixgbe_update_mc_addr_list_generic Complete\n");
2765 	return IXGBE_SUCCESS;
2766 }
2767 
2768 /**
2769  * ixgbe_enable_mc_generic - Enable multicast address in RAR
2770  * @hw: pointer to hardware structure
2771  *
2772  * Enables multicast address in RAR and the use of the multicast hash table.
2773  **/
2774 s32 ixgbe_enable_mc_generic(struct ixgbe_hw *hw)
2775 {
2776 	struct ixgbe_addr_filter_info *a = &hw->addr_ctrl;
2777 
2778 	DEBUGFUNC("ixgbe_enable_mc_generic");
2779 
2780 	if (a->mta_in_use > 0)
2781 		IXGBE_WRITE_REG(hw, IXGBE_MCSTCTRL, IXGBE_MCSTCTRL_MFE |
2782 				hw->mac.mc_filter_type);
2783 
2784 	return IXGBE_SUCCESS;
2785 }
2786 
2787 /**
2788  * ixgbe_disable_mc_generic - Disable multicast address in RAR
2789  * @hw: pointer to hardware structure
2790  *
2791  * Disables multicast address in RAR and the use of the multicast hash table.
2792  **/
2793 s32 ixgbe_disable_mc_generic(struct ixgbe_hw *hw)
2794 {
2795 	struct ixgbe_addr_filter_info *a = &hw->addr_ctrl;
2796 
2797 	DEBUGFUNC("ixgbe_disable_mc_generic");
2798 
2799 	if (a->mta_in_use > 0)
2800 		IXGBE_WRITE_REG(hw, IXGBE_MCSTCTRL, hw->mac.mc_filter_type);
2801 
2802 	return IXGBE_SUCCESS;
2803 }
2804 
2805 /**
2806  * ixgbe_fc_enable_generic - Enable flow control
2807  * @hw: pointer to hardware structure
2808  *
2809  * Enable flow control according to the current settings.
2810  **/
2811 s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw)
2812 {
2813 	s32 ret_val = IXGBE_SUCCESS;
2814 	u32 mflcn_reg, fccfg_reg;
2815 	u32 reg;
2816 	u32 fcrtl, fcrth;
2817 	int i;
2818 
2819 	DEBUGFUNC("ixgbe_fc_enable_generic");
2820 
2821 	/* Validate the water mark configuration */
2822 	if (!hw->fc.pause_time) {
2823 		ret_val = IXGBE_ERR_INVALID_LINK_SETTINGS;
2824 		goto out;
2825 	}
2826 
2827 	/* Low water mark of zero causes XOFF floods */
2828 	for (i = 0; i < IXGBE_DCB_MAX_TRAFFIC_CLASS; i++) {
2829 		if ((hw->fc.current_mode & ixgbe_fc_tx_pause) &&
2830 		    hw->fc.high_water[i]) {
2831 			if (!hw->fc.low_water[i] ||
2832 			    hw->fc.low_water[i] >= hw->fc.high_water[i]) {
2833 				DEBUGOUT("Invalid water mark configuration\n");
2834 				ret_val = IXGBE_ERR_INVALID_LINK_SETTINGS;
2835 				goto out;
2836 			}
2837 		}
2838 	}
2839 
2840 	/* Negotiate the fc mode to use */
2841 	hw->mac.ops.fc_autoneg(hw);
2842 
2843 	/* Disable any previous flow control settings */
2844 	mflcn_reg = IXGBE_READ_REG(hw, IXGBE_MFLCN);
2845 	mflcn_reg &= ~(IXGBE_MFLCN_RPFCE_MASK | IXGBE_MFLCN_RFCE);
2846 
2847 	fccfg_reg = IXGBE_READ_REG(hw, IXGBE_FCCFG);
2848 	fccfg_reg &= ~(IXGBE_FCCFG_TFCE_802_3X | IXGBE_FCCFG_TFCE_PRIORITY);
2849 
2850 	/*
2851 	 * The possible values of fc.current_mode are:
2852 	 * 0: Flow control is completely disabled
2853 	 * 1: Rx flow control is enabled (we can receive pause frames,
2854 	 *    but not send pause frames).
2855 	 * 2: Tx flow control is enabled (we can send pause frames but
2856 	 *    we do not support receiving pause frames).
2857 	 * 3: Both Rx and Tx flow control (symmetric) are enabled.
2858 	 * other: Invalid.
2859 	 */
2860 	switch (hw->fc.current_mode) {
2861 	case ixgbe_fc_none:
2862 		/*
2863 		 * Flow control is disabled by software override or autoneg.
2864 		 * The code below will actually disable it in the HW.
2865 		 */
2866 		break;
2867 	case ixgbe_fc_rx_pause:
2868 		/*
2869 		 * Rx Flow control is enabled and Tx Flow control is
2870 		 * disabled by software override. Since there really
2871 		 * isn't a way to advertise that we are capable of RX
2872 		 * Pause ONLY, we will advertise that we support both
2873 		 * symmetric and asymmetric Rx PAUSE.  Later, we will
2874 		 * disable the adapter's ability to send PAUSE frames.
2875 		 */
2876 		mflcn_reg |= IXGBE_MFLCN_RFCE;
2877 		break;
2878 	case ixgbe_fc_tx_pause:
2879 		/*
2880 		 * Tx Flow control is enabled, and Rx Flow control is
2881 		 * disabled by software override.
2882 		 */
2883 		fccfg_reg |= IXGBE_FCCFG_TFCE_802_3X;
2884 		break;
2885 	case ixgbe_fc_full:
2886 		/* Flow control (both Rx and Tx) is enabled by SW override. */
2887 		mflcn_reg |= IXGBE_MFLCN_RFCE;
2888 		fccfg_reg |= IXGBE_FCCFG_TFCE_802_3X;
2889 		break;
2890 	default:
2891 		ERROR_REPORT1(IXGBE_ERROR_ARGUMENT,
2892 			     "Flow control param set incorrectly\n");
2893 		ret_val = IXGBE_ERR_CONFIG;
2894 		goto out;
2895 		break;
2896 	}
2897 
2898 	/* Set 802.3x based flow control settings. */
2899 	mflcn_reg |= IXGBE_MFLCN_DPF;
2900 	IXGBE_WRITE_REG(hw, IXGBE_MFLCN, mflcn_reg);
2901 	IXGBE_WRITE_REG(hw, IXGBE_FCCFG, fccfg_reg);
2902 
2903 
2904 	/* Set up and enable Rx high/low water mark thresholds, enable XON. */
2905 	for (i = 0; i < IXGBE_DCB_MAX_TRAFFIC_CLASS; i++) {
2906 		if ((hw->fc.current_mode & ixgbe_fc_tx_pause) &&
2907 		    hw->fc.high_water[i]) {
2908 			fcrtl = (hw->fc.low_water[i] << 10) | IXGBE_FCRTL_XONE;
2909 			IXGBE_WRITE_REG(hw, IXGBE_FCRTL_82599(i), fcrtl);
2910 			fcrth = (hw->fc.high_water[i] << 10) | IXGBE_FCRTH_FCEN;
2911 		} else {
2912 			IXGBE_WRITE_REG(hw, IXGBE_FCRTL_82599(i), 0);
2913 			/*
2914 			 * In order to prevent Tx hangs when the internal Tx
2915 			 * switch is enabled we must set the high water mark
2916 			 * to the Rx packet buffer size - 24KB.  This allows
2917 			 * the Tx switch to function even under heavy Rx
2918 			 * workloads.
2919 			 */
2920 			fcrth = IXGBE_READ_REG(hw, IXGBE_RXPBSIZE(i)) - 24576;
2921 		}
2922 
2923 		IXGBE_WRITE_REG(hw, IXGBE_FCRTH_82599(i), fcrth);
2924 	}
2925 
2926 	/* Configure pause time (2 TCs per register) */
2927 	reg = hw->fc.pause_time * 0x00010001;
2928 	for (i = 0; i < (IXGBE_DCB_MAX_TRAFFIC_CLASS / 2); i++)
2929 		IXGBE_WRITE_REG(hw, IXGBE_FCTTV(i), reg);
2930 
2931 	/* Configure flow control refresh threshold value */
2932 	IXGBE_WRITE_REG(hw, IXGBE_FCRTV, hw->fc.pause_time / 2);
2933 
2934 out:
2935 	return ret_val;
2936 }
2937 
2938 /**
2939  * ixgbe_negotiate_fc - Negotiate flow control
2940  * @hw: pointer to hardware structure
2941  * @adv_reg: flow control advertised settings
2942  * @lp_reg: link partner's flow control settings
2943  * @adv_sym: symmetric pause bit in advertisement
2944  * @adv_asm: asymmetric pause bit in advertisement
2945  * @lp_sym: symmetric pause bit in link partner advertisement
2946  * @lp_asm: asymmetric pause bit in link partner advertisement
2947  *
2948  * Find the intersection between advertised settings and link partner's
2949  * advertised settings
2950  **/
2951 s32 ixgbe_negotiate_fc(struct ixgbe_hw *hw, u32 adv_reg, u32 lp_reg,
2952 		       u32 adv_sym, u32 adv_asm, u32 lp_sym, u32 lp_asm)
2953 {
2954 	if ((!(adv_reg)) ||  (!(lp_reg))) {
2955 		ERROR_REPORT3(IXGBE_ERROR_UNSUPPORTED,
2956 			     "Local or link partner's advertised flow control "
2957 			     "settings are NULL. Local: %x, link partner: %x\n",
2958 			     adv_reg, lp_reg);
2959 		return IXGBE_ERR_FC_NOT_NEGOTIATED;
2960 	}
2961 
2962 	if ((adv_reg & adv_sym) && (lp_reg & lp_sym)) {
2963 		/*
2964 		 * Now we need to check if the user selected Rx ONLY
2965 		 * of pause frames.  In this case, we had to advertise
2966 		 * FULL flow control because we could not advertise RX
2967 		 * ONLY. Hence, we must now check to see if we need to
2968 		 * turn OFF the TRANSMISSION of PAUSE frames.
2969 		 */
2970 		if (hw->fc.requested_mode == ixgbe_fc_full) {
2971 			hw->fc.current_mode = ixgbe_fc_full;
2972 			DEBUGOUT("Flow Control = FULL.\n");
2973 		} else {
2974 			hw->fc.current_mode = ixgbe_fc_rx_pause;
2975 			DEBUGOUT("Flow Control=RX PAUSE frames only\n");
2976 		}
2977 	} else if (!(adv_reg & adv_sym) && (adv_reg & adv_asm) &&
2978 		   (lp_reg & lp_sym) && (lp_reg & lp_asm)) {
2979 		hw->fc.current_mode = ixgbe_fc_tx_pause;
2980 		DEBUGOUT("Flow Control = TX PAUSE frames only.\n");
2981 	} else if ((adv_reg & adv_sym) && (adv_reg & adv_asm) &&
2982 		   !(lp_reg & lp_sym) && (lp_reg & lp_asm)) {
2983 		hw->fc.current_mode = ixgbe_fc_rx_pause;
2984 		DEBUGOUT("Flow Control = RX PAUSE frames only.\n");
2985 	} else {
2986 		hw->fc.current_mode = ixgbe_fc_none;
2987 		DEBUGOUT("Flow Control = NONE.\n");
2988 	}
2989 	return IXGBE_SUCCESS;
2990 }
2991 
2992 /**
2993  * ixgbe_fc_autoneg_fiber - Enable flow control on 1 gig fiber
2994  * @hw: pointer to hardware structure
2995  *
2996  * Enable flow control according on 1 gig fiber.
2997  **/
2998 static s32 ixgbe_fc_autoneg_fiber(struct ixgbe_hw *hw)
2999 {
3000 	u32 pcs_anadv_reg, pcs_lpab_reg, linkstat;
3001 	s32 ret_val = IXGBE_ERR_FC_NOT_NEGOTIATED;
3002 
3003 	/*
3004 	 * On multispeed fiber at 1g, bail out if
3005 	 * - link is up but AN did not complete, or if
3006 	 * - link is up and AN completed but timed out
3007 	 */
3008 
3009 	linkstat = IXGBE_READ_REG(hw, IXGBE_PCS1GLSTA);
3010 	if ((!!(linkstat & IXGBE_PCS1GLSTA_AN_COMPLETE) == 0) ||
3011 	    (!!(linkstat & IXGBE_PCS1GLSTA_AN_TIMED_OUT) == 1)) {
3012 		DEBUGOUT("Auto-Negotiation did not complete or timed out\n");
3013 		goto out;
3014 	}
3015 
3016 	pcs_anadv_reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANA);
3017 	pcs_lpab_reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANLP);
3018 
3019 	ret_val =  ixgbe_negotiate_fc(hw, pcs_anadv_reg,
3020 				      pcs_lpab_reg, IXGBE_PCS1GANA_SYM_PAUSE,
3021 				      IXGBE_PCS1GANA_ASM_PAUSE,
3022 				      IXGBE_PCS1GANA_SYM_PAUSE,
3023 				      IXGBE_PCS1GANA_ASM_PAUSE);
3024 
3025 out:
3026 	return ret_val;
3027 }
3028 
3029 /**
3030  * ixgbe_fc_autoneg_backplane - Enable flow control IEEE clause 37
3031  * @hw: pointer to hardware structure
3032  *
3033  * Enable flow control according to IEEE clause 37.
3034  **/
3035 static s32 ixgbe_fc_autoneg_backplane(struct ixgbe_hw *hw)
3036 {
3037 	u32 links2, anlp1_reg, autoc_reg, links;
3038 	s32 ret_val = IXGBE_ERR_FC_NOT_NEGOTIATED;
3039 
3040 	/*
3041 	 * On backplane, bail out if
3042 	 * - backplane autoneg was not completed, or if
3043 	 * - we are 82599 and link partner is not AN enabled
3044 	 */
3045 	links = IXGBE_READ_REG(hw, IXGBE_LINKS);
3046 	if ((links & IXGBE_LINKS_KX_AN_COMP) == 0) {
3047 		DEBUGOUT("Auto-Negotiation did not complete\n");
3048 		goto out;
3049 	}
3050 
3051 	if (hw->mac.type == ixgbe_mac_82599EB) {
3052 		links2 = IXGBE_READ_REG(hw, IXGBE_LINKS2);
3053 		if ((links2 & IXGBE_LINKS2_AN_SUPPORTED) == 0) {
3054 			DEBUGOUT("Link partner is not AN enabled\n");
3055 			goto out;
3056 		}
3057 	}
3058 	/*
3059 	 * Read the 10g AN autoc and LP ability registers and resolve
3060 	 * local flow control settings accordingly
3061 	 */
3062 	autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
3063 	anlp1_reg = IXGBE_READ_REG(hw, IXGBE_ANLP1);
3064 
3065 	ret_val = ixgbe_negotiate_fc(hw, autoc_reg,
3066 		anlp1_reg, IXGBE_AUTOC_SYM_PAUSE, IXGBE_AUTOC_ASM_PAUSE,
3067 		IXGBE_ANLP1_SYM_PAUSE, IXGBE_ANLP1_ASM_PAUSE);
3068 
3069 out:
3070 	return ret_val;
3071 }
3072 
3073 /**
3074  * ixgbe_fc_autoneg_copper - Enable flow control IEEE clause 37
3075  * @hw: pointer to hardware structure
3076  *
3077  * Enable flow control according to IEEE clause 37.
3078  **/
3079 static s32 ixgbe_fc_autoneg_copper(struct ixgbe_hw *hw)
3080 {
3081 	u16 technology_ability_reg = 0;
3082 	u16 lp_technology_ability_reg = 0;
3083 
3084 	hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_ADVT,
3085 			     IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
3086 			     &technology_ability_reg);
3087 	hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_LP,
3088 			     IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
3089 			     &lp_technology_ability_reg);
3090 
3091 	return ixgbe_negotiate_fc(hw, (u32)technology_ability_reg,
3092 				  (u32)lp_technology_ability_reg,
3093 				  IXGBE_TAF_SYM_PAUSE, IXGBE_TAF_ASM_PAUSE,
3094 				  IXGBE_TAF_SYM_PAUSE, IXGBE_TAF_ASM_PAUSE);
3095 }
3096 
3097 /**
3098  * ixgbe_fc_autoneg - Configure flow control
3099  * @hw: pointer to hardware structure
3100  *
3101  * Compares our advertised flow control capabilities to those advertised by
3102  * our link partner, and determines the proper flow control mode to use.
3103  **/
3104 void ixgbe_fc_autoneg(struct ixgbe_hw *hw)
3105 {
3106 	s32 ret_val = IXGBE_ERR_FC_NOT_NEGOTIATED;
3107 	ixgbe_link_speed speed;
3108 	bool link_up;
3109 
3110 	DEBUGFUNC("ixgbe_fc_autoneg");
3111 
3112 	/*
3113 	 * AN should have completed when the cable was plugged in.
3114 	 * Look for reasons to bail out.  Bail out if:
3115 	 * - FC autoneg is disabled, or if
3116 	 * - link is not up.
3117 	 */
3118 	if (hw->fc.disable_fc_autoneg) {
3119 		/* TODO: This should be just an informative log */
3120 		ERROR_REPORT1(IXGBE_ERROR_CAUTION,
3121 			      "Flow control autoneg is disabled");
3122 		goto out;
3123 	}
3124 
3125 	hw->mac.ops.check_link(hw, &speed, &link_up, false);
3126 	if (!link_up) {
3127 		ERROR_REPORT1(IXGBE_ERROR_SOFTWARE, "The link is down");
3128 		goto out;
3129 	}
3130 
3131 	switch (hw->phy.media_type) {
3132 	/* Autoneg flow control on fiber adapters */
3133 	case ixgbe_media_type_fiber_fixed:
3134 	case ixgbe_media_type_fiber_qsfp:
3135 	case ixgbe_media_type_fiber:
3136 		if (speed == IXGBE_LINK_SPEED_1GB_FULL)
3137 			ret_val = ixgbe_fc_autoneg_fiber(hw);
3138 		break;
3139 
3140 	/* Autoneg flow control on backplane adapters */
3141 	case ixgbe_media_type_backplane:
3142 		ret_val = ixgbe_fc_autoneg_backplane(hw);
3143 		break;
3144 
3145 	/* Autoneg flow control on copper adapters */
3146 	case ixgbe_media_type_copper:
3147 		if (ixgbe_device_supports_autoneg_fc(hw))
3148 			ret_val = ixgbe_fc_autoneg_copper(hw);
3149 		break;
3150 
3151 	default:
3152 		break;
3153 	}
3154 
3155 out:
3156 	if (ret_val == IXGBE_SUCCESS) {
3157 		hw->fc.fc_was_autonegged = true;
3158 	} else {
3159 		hw->fc.fc_was_autonegged = false;
3160 		hw->fc.current_mode = hw->fc.requested_mode;
3161 	}
3162 }
3163 
3164 /*
3165  * ixgbe_pcie_timeout_poll - Return number of times to poll for completion
3166  * @hw: pointer to hardware structure
3167  *
3168  * System-wide timeout range is encoded in PCIe Device Control2 register.
3169  *
3170  * Add 10% to specified maximum and return the number of times to poll for
3171  * completion timeout, in units of 100 microsec.  Never return less than
3172  * 800 = 80 millisec.
3173  */
3174 static u32 ixgbe_pcie_timeout_poll(struct ixgbe_hw *hw)
3175 {
3176 	s16 devctl2;
3177 	u32 pollcnt;
3178 
3179 	devctl2 = IXGBE_READ_PCIE_WORD(hw, IXGBE_PCI_DEVICE_CONTROL2);
3180 	devctl2 &= IXGBE_PCIDEVCTRL2_TIMEO_MASK;
3181 
3182 	switch (devctl2) {
3183 	case IXGBE_PCIDEVCTRL2_65_130ms:
3184 		pollcnt = 1300;		/* 130 millisec */
3185 		break;
3186 	case IXGBE_PCIDEVCTRL2_260_520ms:
3187 		pollcnt = 5200;		/* 520 millisec */
3188 		break;
3189 	case IXGBE_PCIDEVCTRL2_1_2s:
3190 		pollcnt = 20000;	/* 2 sec */
3191 		break;
3192 	case IXGBE_PCIDEVCTRL2_4_8s:
3193 		pollcnt = 80000;	/* 8 sec */
3194 		break;
3195 	case IXGBE_PCIDEVCTRL2_17_34s:
3196 		pollcnt = 34000;	/* 34 sec */
3197 		break;
3198 	case IXGBE_PCIDEVCTRL2_50_100us:	/* 100 microsecs */
3199 	case IXGBE_PCIDEVCTRL2_1_2ms:		/* 2 millisecs */
3200 	case IXGBE_PCIDEVCTRL2_16_32ms:		/* 32 millisec */
3201 	case IXGBE_PCIDEVCTRL2_16_32ms_def:	/* 32 millisec default */
3202 	default:
3203 		pollcnt = 800;		/* 80 millisec minimum */
3204 		break;
3205 	}
3206 
3207 	/* add 10% to spec maximum */
3208 	return (pollcnt * 11) / 10;
3209 }
3210 
3211 /**
3212  * ixgbe_disable_pcie_master - Disable PCI-express master access
3213  * @hw: pointer to hardware structure
3214  *
3215  * Disables PCI-Express master access and verifies there are no pending
3216  * requests. IXGBE_ERR_MASTER_REQUESTS_PENDING is returned if master disable
3217  * bit hasn't caused the master requests to be disabled, else IXGBE_SUCCESS
3218  * is returned signifying master requests disabled.
3219  **/
3220 s32 ixgbe_disable_pcie_master(struct ixgbe_hw *hw)
3221 {
3222 	s32 status = IXGBE_SUCCESS;
3223 	u32 i, poll;
3224 	u16 value;
3225 
3226 	DEBUGFUNC("ixgbe_disable_pcie_master");
3227 
3228 	/* Always set this bit to ensure any future transactions are blocked */
3229 	IXGBE_WRITE_REG(hw, IXGBE_CTRL, IXGBE_CTRL_GIO_DIS);
3230 
3231 	/* Exit if master requests are blocked */
3232 	if (!(IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_GIO) ||
3233 	    IXGBE_REMOVED(hw->hw_addr))
3234 		goto out;
3235 
3236 	/* Poll for master request bit to clear */
3237 	for (i = 0; i < IXGBE_PCI_MASTER_DISABLE_TIMEOUT; i++) {
3238 		usec_delay(100);
3239 		if (!(IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_GIO))
3240 			goto out;
3241 	}
3242 
3243 	/*
3244 	 * Two consecutive resets are required via CTRL.RST per datasheet
3245 	 * 5.2.5.3.2 Master Disable.  We set a flag to inform the reset routine
3246 	 * of this need.  The first reset prevents new master requests from
3247 	 * being issued by our device.  We then must wait 1usec or more for any
3248 	 * remaining completions from the PCIe bus to trickle in, and then reset
3249 	 * again to clear out any effects they may have had on our device.
3250 	 */
3251 	DEBUGOUT("GIO Master Disable bit didn't clear - requesting resets\n");
3252 	hw->mac.flags |= IXGBE_FLAGS_DOUBLE_RESET_REQUIRED;
3253 
3254 	if (hw->mac.type >= ixgbe_mac_X550)
3255 		goto out;
3256 
3257 	/*
3258 	 * Before proceeding, make sure that the PCIe block does not have
3259 	 * transactions pending.
3260 	 */
3261 	poll = ixgbe_pcie_timeout_poll(hw);
3262 	for (i = 0; i < poll; i++) {
3263 		usec_delay(100);
3264 		value = IXGBE_READ_PCIE_WORD(hw, IXGBE_PCI_DEVICE_STATUS);
3265 		if (IXGBE_REMOVED(hw->hw_addr))
3266 			goto out;
3267 		if (!(value & IXGBE_PCI_DEVICE_STATUS_TRANSACTION_PENDING))
3268 			goto out;
3269 	}
3270 
3271 	ERROR_REPORT1(IXGBE_ERROR_POLLING,
3272 		     "PCIe transaction pending bit also did not clear.\n");
3273 	status = IXGBE_ERR_MASTER_REQUESTS_PENDING;
3274 
3275 out:
3276 	return status;
3277 }
3278 
3279 /**
3280  * ixgbe_acquire_swfw_sync - Acquire SWFW semaphore
3281  * @hw: pointer to hardware structure
3282  * @mask: Mask to specify which semaphore to acquire
3283  *
3284  * Acquires the SWFW semaphore through the GSSR register for the specified
3285  * function (CSR, PHY0, PHY1, EEPROM, Flash)
3286  **/
3287 s32 ixgbe_acquire_swfw_sync(struct ixgbe_hw *hw, u32 mask)
3288 {
3289 	u32 gssr = 0;
3290 	u32 swmask = mask;
3291 	u32 fwmask = mask << 5;
3292 	u32 timeout = 200;
3293 	u32 i;
3294 
3295 	DEBUGFUNC("ixgbe_acquire_swfw_sync");
3296 
3297 	for (i = 0; i < timeout; i++) {
3298 		/*
3299 		 * SW NVM semaphore bit is used for access to all
3300 		 * SW_FW_SYNC bits (not just NVM)
3301 		 */
3302 		if (ixgbe_get_eeprom_semaphore(hw))
3303 			return IXGBE_ERR_SWFW_SYNC;
3304 
3305 		gssr = IXGBE_READ_REG(hw, IXGBE_GSSR);
3306 		if (!(gssr & (fwmask | swmask))) {
3307 			gssr |= swmask;
3308 			IXGBE_WRITE_REG(hw, IXGBE_GSSR, gssr);
3309 			ixgbe_release_eeprom_semaphore(hw);
3310 			return IXGBE_SUCCESS;
3311 		} else {
3312 			/* Resource is currently in use by FW or SW */
3313 			ixgbe_release_eeprom_semaphore(hw);
3314 			msec_delay(5);
3315 		}
3316 	}
3317 
3318 	/* If time expired clear the bits holding the lock and retry */
3319 	if (gssr & (fwmask | swmask))
3320 		ixgbe_release_swfw_sync(hw, gssr & (fwmask | swmask));
3321 
3322 	msec_delay(5);
3323 	return IXGBE_ERR_SWFW_SYNC;
3324 }
3325 
3326 /**
3327  * ixgbe_release_swfw_sync - Release SWFW semaphore
3328  * @hw: pointer to hardware structure
3329  * @mask: Mask to specify which semaphore to release
3330  *
3331  * Releases the SWFW semaphore through the GSSR register for the specified
3332  * function (CSR, PHY0, PHY1, EEPROM, Flash)
3333  **/
3334 void ixgbe_release_swfw_sync(struct ixgbe_hw *hw, u32 mask)
3335 {
3336 	u32 gssr;
3337 	u32 swmask = mask;
3338 
3339 	DEBUGFUNC("ixgbe_release_swfw_sync");
3340 
3341 	ixgbe_get_eeprom_semaphore(hw);
3342 
3343 	gssr = IXGBE_READ_REG(hw, IXGBE_GSSR);
3344 	gssr &= ~swmask;
3345 	IXGBE_WRITE_REG(hw, IXGBE_GSSR, gssr);
3346 
3347 	ixgbe_release_eeprom_semaphore(hw);
3348 }
3349 
3350 /**
3351  * ixgbe_disable_sec_rx_path_generic - Stops the receive data path
3352  * @hw: pointer to hardware structure
3353  *
3354  * Stops the receive data path and waits for the HW to internally empty
3355  * the Rx security block
3356  **/
3357 s32 ixgbe_disable_sec_rx_path_generic(struct ixgbe_hw *hw)
3358 {
3359 #define IXGBE_MAX_SECRX_POLL 4000
3360 
3361 	int i;
3362 	int secrxreg;
3363 
3364 	DEBUGFUNC("ixgbe_disable_sec_rx_path_generic");
3365 
3366 
3367 	secrxreg = IXGBE_READ_REG(hw, IXGBE_SECRXCTRL);
3368 	secrxreg |= IXGBE_SECRXCTRL_RX_DIS;
3369 	IXGBE_WRITE_REG(hw, IXGBE_SECRXCTRL, secrxreg);
3370 	for (i = 0; i < IXGBE_MAX_SECRX_POLL; i++) {
3371 		secrxreg = IXGBE_READ_REG(hw, IXGBE_SECRXSTAT);
3372 		if (secrxreg & IXGBE_SECRXSTAT_SECRX_RDY)
3373 			break;
3374 		else
3375 			/* Use interrupt-safe sleep just in case */
3376 			usec_delay(10);
3377 	}
3378 
3379 	/* For informational purposes only */
3380 	if (i >= IXGBE_MAX_SECRX_POLL)
3381 		DEBUGOUT("Rx unit being enabled before security "
3382 			 "path fully disabled.  Continuing with init.\n");
3383 
3384 	return IXGBE_SUCCESS;
3385 }
3386 
3387 /**
3388  * prot_autoc_read_generic - Hides MAC differences needed for AUTOC read
3389  * @hw: pointer to hardware structure
3390  * @locked: bool to indicate whether the SW/FW lock was taken
3391  * @reg_val: Value we read from AUTOC
3392  *
3393  * The default case requires no protection so just to the register read.
3394  */
3395 s32 prot_autoc_read_generic(struct ixgbe_hw *hw, bool *locked, u32 *reg_val)
3396 {
3397 	*locked = false;
3398 	*reg_val = IXGBE_READ_REG(hw, IXGBE_AUTOC);
3399 	return IXGBE_SUCCESS;
3400 }
3401 
3402 /**
3403  * prot_autoc_write_generic - Hides MAC differences needed for AUTOC write
3404  * @hw: pointer to hardware structure
3405  * @reg_val: value to write to AUTOC
3406  * @locked: bool to indicate whether the SW/FW lock was already taken by
3407  *          previous read.
3408  *
3409  * The default case requires no protection so just to the register write.
3410  */
3411 s32 prot_autoc_write_generic(struct ixgbe_hw *hw, u32 reg_val, bool locked)
3412 {
3413 	UNREFERENCED_1PARAMETER(locked);
3414 
3415 	IXGBE_WRITE_REG(hw, IXGBE_AUTOC, reg_val);
3416 	return IXGBE_SUCCESS;
3417 }
3418 
3419 /**
3420  * ixgbe_enable_sec_rx_path_generic - Enables the receive data path
3421  * @hw: pointer to hardware structure
3422  *
3423  * Enables the receive data path.
3424  **/
3425 s32 ixgbe_enable_sec_rx_path_generic(struct ixgbe_hw *hw)
3426 {
3427 	u32 secrxreg;
3428 
3429 	DEBUGFUNC("ixgbe_enable_sec_rx_path_generic");
3430 
3431 	secrxreg = IXGBE_READ_REG(hw, IXGBE_SECRXCTRL);
3432 	secrxreg &= ~IXGBE_SECRXCTRL_RX_DIS;
3433 	IXGBE_WRITE_REG(hw, IXGBE_SECRXCTRL, secrxreg);
3434 	IXGBE_WRITE_FLUSH(hw);
3435 
3436 	return IXGBE_SUCCESS;
3437 }
3438 
3439 /**
3440  * ixgbe_enable_rx_dma_generic - Enable the Rx DMA unit
3441  * @hw: pointer to hardware structure
3442  * @regval: register value to write to RXCTRL
3443  *
3444  * Enables the Rx DMA unit
3445  **/
3446 s32 ixgbe_enable_rx_dma_generic(struct ixgbe_hw *hw, u32 regval)
3447 {
3448 	DEBUGFUNC("ixgbe_enable_rx_dma_generic");
3449 
3450 	if (regval & IXGBE_RXCTRL_RXEN)
3451 		ixgbe_enable_rx(hw);
3452 	else
3453 		ixgbe_disable_rx(hw);
3454 
3455 	return IXGBE_SUCCESS;
3456 }
3457 
3458 /**
3459  * ixgbe_blink_led_start_generic - Blink LED based on index.
3460  * @hw: pointer to hardware structure
3461  * @index: led number to blink
3462  **/
3463 s32 ixgbe_blink_led_start_generic(struct ixgbe_hw *hw, u32 index)
3464 {
3465 	ixgbe_link_speed speed = 0;
3466 	bool link_up = 0;
3467 	u32 autoc_reg = 0;
3468 	u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
3469 	s32 ret_val = IXGBE_SUCCESS;
3470 	bool locked = false;
3471 
3472 	DEBUGFUNC("ixgbe_blink_led_start_generic");
3473 
3474 	if (index > 3)
3475 		return IXGBE_ERR_PARAM;
3476 
3477 	/*
3478 	 * Link must be up to auto-blink the LEDs;
3479 	 * Force it if link is down.
3480 	 */
3481 	hw->mac.ops.check_link(hw, &speed, &link_up, false);
3482 
3483 	if (!link_up) {
3484 		ret_val = hw->mac.ops.prot_autoc_read(hw, &locked, &autoc_reg);
3485 		if (ret_val != IXGBE_SUCCESS)
3486 			goto out;
3487 
3488 		autoc_reg |= IXGBE_AUTOC_AN_RESTART;
3489 		autoc_reg |= IXGBE_AUTOC_FLU;
3490 
3491 		ret_val = hw->mac.ops.prot_autoc_write(hw, autoc_reg, locked);
3492 		if (ret_val != IXGBE_SUCCESS)
3493 			goto out;
3494 
3495 		IXGBE_WRITE_FLUSH(hw);
3496 		msec_delay(10);
3497 	}
3498 
3499 	led_reg &= ~IXGBE_LED_MODE_MASK(index);
3500 	led_reg |= IXGBE_LED_BLINK(index);
3501 	IXGBE_WRITE_REG(hw, IXGBE_LEDCTL, led_reg);
3502 	IXGBE_WRITE_FLUSH(hw);
3503 
3504 out:
3505 	return ret_val;
3506 }
3507 
3508 /**
3509  * ixgbe_blink_led_stop_generic - Stop blinking LED based on index.
3510  * @hw: pointer to hardware structure
3511  * @index: led number to stop blinking
3512  **/
3513 s32 ixgbe_blink_led_stop_generic(struct ixgbe_hw *hw, u32 index)
3514 {
3515 	u32 autoc_reg = 0;
3516 	u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
3517 	s32 ret_val = IXGBE_SUCCESS;
3518 	bool locked = false;
3519 
3520 	DEBUGFUNC("ixgbe_blink_led_stop_generic");
3521 
3522 	if (index > 3)
3523 		return IXGBE_ERR_PARAM;
3524 
3525 	ret_val = hw->mac.ops.prot_autoc_read(hw, &locked, &autoc_reg);
3526 	if (ret_val != IXGBE_SUCCESS)
3527 		goto out;
3528 
3529 	autoc_reg &= ~IXGBE_AUTOC_FLU;
3530 	autoc_reg |= IXGBE_AUTOC_AN_RESTART;
3531 
3532 	ret_val = hw->mac.ops.prot_autoc_write(hw, autoc_reg, locked);
3533 	if (ret_val != IXGBE_SUCCESS)
3534 		goto out;
3535 
3536 	led_reg &= ~IXGBE_LED_MODE_MASK(index);
3537 	led_reg &= ~IXGBE_LED_BLINK(index);
3538 	led_reg |= IXGBE_LED_LINK_ACTIVE << IXGBE_LED_MODE_SHIFT(index);
3539 	IXGBE_WRITE_REG(hw, IXGBE_LEDCTL, led_reg);
3540 	IXGBE_WRITE_FLUSH(hw);
3541 
3542 out:
3543 	return ret_val;
3544 }
3545 
3546 /**
3547  * ixgbe_get_san_mac_addr_offset - Get SAN MAC address offset from the EEPROM
3548  * @hw: pointer to hardware structure
3549  * @san_mac_offset: SAN MAC address offset
3550  *
3551  * This function will read the EEPROM location for the SAN MAC address
3552  * pointer, and returns the value at that location.  This is used in both
3553  * get and set mac_addr routines.
3554  **/
3555 static s32 ixgbe_get_san_mac_addr_offset(struct ixgbe_hw *hw,
3556 					 u16 *san_mac_offset)
3557 {
3558 	s32 ret_val;
3559 
3560 	DEBUGFUNC("ixgbe_get_san_mac_addr_offset");
3561 
3562 	/*
3563 	 * First read the EEPROM pointer to see if the MAC addresses are
3564 	 * available.
3565 	 */
3566 	ret_val = hw->eeprom.ops.read(hw, IXGBE_SAN_MAC_ADDR_PTR,
3567 				      san_mac_offset);
3568 	if (ret_val) {
3569 		ERROR_REPORT2(IXGBE_ERROR_INVALID_STATE,
3570 			      "eeprom at offset %d failed",
3571 			      IXGBE_SAN_MAC_ADDR_PTR);
3572 	}
3573 
3574 	return ret_val;
3575 }
3576 
3577 /**
3578  * ixgbe_get_san_mac_addr_generic - SAN MAC address retrieval from the EEPROM
3579  * @hw: pointer to hardware structure
3580  * @san_mac_addr: SAN MAC address
3581  *
3582  * Reads the SAN MAC address from the EEPROM, if it's available.  This is
3583  * per-port, so set_lan_id() must be called before reading the addresses.
3584  * set_lan_id() is called by identify_sfp(), but this cannot be relied
3585  * upon for non-SFP connections, so we must call it here.
3586  **/
3587 s32 ixgbe_get_san_mac_addr_generic(struct ixgbe_hw *hw, u8 *san_mac_addr)
3588 {
3589 	u16 san_mac_data, san_mac_offset;
3590 	u8 i;
3591 	s32 ret_val;
3592 
3593 	DEBUGFUNC("ixgbe_get_san_mac_addr_generic");
3594 
3595 	/*
3596 	 * First read the EEPROM pointer to see if the MAC addresses are
3597 	 * available.  If they're not, no point in calling set_lan_id() here.
3598 	 */
3599 	ret_val = ixgbe_get_san_mac_addr_offset(hw, &san_mac_offset);
3600 	if (ret_val || san_mac_offset == 0 || san_mac_offset == 0xFFFF)
3601 		goto san_mac_addr_out;
3602 
3603 	/* make sure we know which port we need to program */
3604 	hw->mac.ops.set_lan_id(hw);
3605 	/* apply the port offset to the address offset */
3606 	(hw->bus.func) ? (san_mac_offset += IXGBE_SAN_MAC_ADDR_PORT1_OFFSET) :
3607 			 (san_mac_offset += IXGBE_SAN_MAC_ADDR_PORT0_OFFSET);
3608 	for (i = 0; i < 3; i++) {
3609 		ret_val = hw->eeprom.ops.read(hw, san_mac_offset,
3610 					      &san_mac_data);
3611 		if (ret_val) {
3612 			ERROR_REPORT2(IXGBE_ERROR_INVALID_STATE,
3613 				      "eeprom read at offset %d failed",
3614 				      san_mac_offset);
3615 			goto san_mac_addr_out;
3616 		}
3617 		san_mac_addr[i * 2] = (u8)(san_mac_data);
3618 		san_mac_addr[i * 2 + 1] = (u8)(san_mac_data >> 8);
3619 		san_mac_offset++;
3620 	}
3621 	return IXGBE_SUCCESS;
3622 
3623 san_mac_addr_out:
3624 	/*
3625 	 * No addresses available in this EEPROM.  It's not an
3626 	 * error though, so just wipe the local address and return.
3627 	 */
3628 	for (i = 0; i < 6; i++)
3629 		san_mac_addr[i] = 0xFF;
3630 	return IXGBE_SUCCESS;
3631 }
3632 
3633 /**
3634  * ixgbe_set_san_mac_addr_generic - Write the SAN MAC address to the EEPROM
3635  * @hw: pointer to hardware structure
3636  * @san_mac_addr: SAN MAC address
3637  *
3638  * Write a SAN MAC address to the EEPROM.
3639  **/
3640 s32 ixgbe_set_san_mac_addr_generic(struct ixgbe_hw *hw, u8 *san_mac_addr)
3641 {
3642 	s32 ret_val;
3643 	u16 san_mac_data, san_mac_offset;
3644 	u8 i;
3645 
3646 	DEBUGFUNC("ixgbe_set_san_mac_addr_generic");
3647 
3648 	/* Look for SAN mac address pointer.  If not defined, return */
3649 	ret_val = ixgbe_get_san_mac_addr_offset(hw, &san_mac_offset);
3650 	if (ret_val || san_mac_offset == 0 || san_mac_offset == 0xFFFF)
3651 		return IXGBE_ERR_NO_SAN_ADDR_PTR;
3652 
3653 	/* Make sure we know which port we need to write */
3654 	hw->mac.ops.set_lan_id(hw);
3655 	/* Apply the port offset to the address offset */
3656 	(hw->bus.func) ? (san_mac_offset += IXGBE_SAN_MAC_ADDR_PORT1_OFFSET) :
3657 			 (san_mac_offset += IXGBE_SAN_MAC_ADDR_PORT0_OFFSET);
3658 
3659 	for (i = 0; i < 3; i++) {
3660 		san_mac_data = (u16)((u16)(san_mac_addr[i * 2 + 1]) << 8);
3661 		san_mac_data |= (u16)(san_mac_addr[i * 2]);
3662 		hw->eeprom.ops.write(hw, san_mac_offset, san_mac_data);
3663 		san_mac_offset++;
3664 	}
3665 
3666 	return IXGBE_SUCCESS;
3667 }
3668 
3669 /**
3670  * ixgbe_get_pcie_msix_count_generic - Gets MSI-X vector count
3671  * @hw: pointer to hardware structure
3672  *
3673  * Read PCIe configuration space, and get the MSI-X vector count from
3674  * the capabilities table.
3675  **/
3676 u16 ixgbe_get_pcie_msix_count_generic(struct ixgbe_hw *hw)
3677 {
3678 	u16 msix_count = 1;
3679 	u16 max_msix_count;
3680 	u16 pcie_offset;
3681 
3682 	switch (hw->mac.type) {
3683 	case ixgbe_mac_82598EB:
3684 		pcie_offset = IXGBE_PCIE_MSIX_82598_CAPS;
3685 		max_msix_count = IXGBE_MAX_MSIX_VECTORS_82598;
3686 		break;
3687 	case ixgbe_mac_82599EB:
3688 	case ixgbe_mac_X540:
3689 	case ixgbe_mac_X550:
3690 	case ixgbe_mac_X550EM_x:
3691 	case ixgbe_mac_X550EM_a:
3692 		pcie_offset = IXGBE_PCIE_MSIX_82599_CAPS;
3693 		max_msix_count = IXGBE_MAX_MSIX_VECTORS_82599;
3694 		break;
3695 	default:
3696 		return msix_count;
3697 	}
3698 
3699 	DEBUGFUNC("ixgbe_get_pcie_msix_count_generic");
3700 	msix_count = IXGBE_READ_PCIE_WORD(hw, pcie_offset);
3701 	if (IXGBE_REMOVED(hw->hw_addr))
3702 		msix_count = 0;
3703 	msix_count &= IXGBE_PCIE_MSIX_TBL_SZ_MASK;
3704 
3705 	/* MSI-X count is zero-based in HW */
3706 	msix_count++;
3707 
3708 	if (msix_count > max_msix_count)
3709 		msix_count = max_msix_count;
3710 
3711 	return msix_count;
3712 }
3713 
3714 /**
3715  * ixgbe_insert_mac_addr_generic - Find a RAR for this mac address
3716  * @hw: pointer to hardware structure
3717  * @addr: Address to put into receive address register
3718  * @vmdq: VMDq pool to assign
3719  *
3720  * Puts an ethernet address into a receive address register, or
3721  * finds the rar that it is already in; adds to the pool list
3722  **/
3723 s32 ixgbe_insert_mac_addr_generic(struct ixgbe_hw *hw, u8 *addr, u32 vmdq)
3724 {
3725 	static const u32 NO_EMPTY_RAR_FOUND = 0xFFFFFFFF;
3726 	u32 first_empty_rar = NO_EMPTY_RAR_FOUND;
3727 	u32 rar;
3728 	u32 rar_low, rar_high;
3729 	u32 addr_low, addr_high;
3730 
3731 	DEBUGFUNC("ixgbe_insert_mac_addr_generic");
3732 
3733 	/* swap bytes for HW little endian */
3734 	addr_low  = addr[0] | (addr[1] << 8)
3735 			    | (addr[2] << 16)
3736 			    | (addr[3] << 24);
3737 	addr_high = addr[4] | (addr[5] << 8);
3738 
3739 	/*
3740 	 * Either find the mac_id in rar or find the first empty space.
3741 	 * rar_highwater points to just after the highest currently used
3742 	 * rar in order to shorten the search.  It grows when we add a new
3743 	 * rar to the top.
3744 	 */
3745 	for (rar = 0; rar < hw->mac.rar_highwater; rar++) {
3746 		rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(rar));
3747 
3748 		if (((IXGBE_RAH_AV & rar_high) == 0)
3749 		    && first_empty_rar == NO_EMPTY_RAR_FOUND) {
3750 			first_empty_rar = rar;
3751 		} else if ((rar_high & 0xFFFF) == addr_high) {
3752 			rar_low = IXGBE_READ_REG(hw, IXGBE_RAL(rar));
3753 			if (rar_low == addr_low)
3754 				break;    /* found it already in the rars */
3755 		}
3756 	}
3757 
3758 	if (rar < hw->mac.rar_highwater) {
3759 		/* already there so just add to the pool bits */
3760 		ixgbe_set_vmdq(hw, rar, vmdq);
3761 	} else if (first_empty_rar != NO_EMPTY_RAR_FOUND) {
3762 		/* stick it into first empty RAR slot we found */
3763 		rar = first_empty_rar;
3764 		ixgbe_set_rar(hw, rar, addr, vmdq, IXGBE_RAH_AV);
3765 	} else if (rar == hw->mac.rar_highwater) {
3766 		/* add it to the top of the list and inc the highwater mark */
3767 		ixgbe_set_rar(hw, rar, addr, vmdq, IXGBE_RAH_AV);
3768 		hw->mac.rar_highwater++;
3769 	} else if (rar >= hw->mac.num_rar_entries) {
3770 		return IXGBE_ERR_INVALID_MAC_ADDR;
3771 	}
3772 
3773 	/*
3774 	 * If we found rar[0], make sure the default pool bit (we use pool 0)
3775 	 * remains cleared to be sure default pool packets will get delivered
3776 	 */
3777 	if (rar == 0)
3778 		ixgbe_clear_vmdq(hw, rar, 0);
3779 
3780 	return rar;
3781 }
3782 
3783 /**
3784  * ixgbe_clear_vmdq_generic - Disassociate a VMDq pool index from a rx address
3785  * @hw: pointer to hardware struct
3786  * @rar: receive address register index to disassociate
3787  * @vmdq: VMDq pool index to remove from the rar
3788  **/
3789 s32 ixgbe_clear_vmdq_generic(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
3790 {
3791 	u32 mpsar_lo, mpsar_hi;
3792 	u32 rar_entries = hw->mac.num_rar_entries;
3793 
3794 	DEBUGFUNC("ixgbe_clear_vmdq_generic");
3795 
3796 	/* Make sure we are using a valid rar index range */
3797 	if (rar >= rar_entries) {
3798 		ERROR_REPORT2(IXGBE_ERROR_ARGUMENT,
3799 			     "RAR index %d is out of range.\n", rar);
3800 		return IXGBE_ERR_INVALID_ARGUMENT;
3801 	}
3802 
3803 	mpsar_lo = IXGBE_READ_REG(hw, IXGBE_MPSAR_LO(rar));
3804 	mpsar_hi = IXGBE_READ_REG(hw, IXGBE_MPSAR_HI(rar));
3805 
3806 	if (IXGBE_REMOVED(hw->hw_addr))
3807 		goto done;
3808 
3809 	if (!mpsar_lo && !mpsar_hi)
3810 		goto done;
3811 
3812 	if (vmdq == IXGBE_CLEAR_VMDQ_ALL) {
3813 		if (mpsar_lo) {
3814 			IXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), 0);
3815 			mpsar_lo = IXGBE_READ_REG(hw, IXGBE_MPSAR_LO(rar));
3816 		}
3817 		if (mpsar_hi) {
3818 			IXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), 0);
3819 			mpsar_hi = IXGBE_READ_REG(hw, IXGBE_MPSAR_HI(rar));
3820 		}
3821 	} else if (vmdq < 32) {
3822 		mpsar_lo &= ~(1 << vmdq);
3823 		IXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), mpsar_lo);
3824 	} else {
3825 		mpsar_hi &= ~(1 << (vmdq - 32));
3826 		IXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), mpsar_hi);
3827 	}
3828 
3829 	/* was that the last pool using this rar? */
3830 	if (mpsar_lo == 0 && mpsar_hi == 0 &&
3831 	    rar != 0 && rar != hw->mac.san_mac_rar_index)
3832 		hw->mac.ops.clear_rar(hw, rar);
3833 done:
3834 	return IXGBE_SUCCESS;
3835 }
3836 
3837 /**
3838  * ixgbe_set_vmdq_generic - Associate a VMDq pool index with a rx address
3839  * @hw: pointer to hardware struct
3840  * @rar: receive address register index to associate with a VMDq index
3841  * @vmdq: VMDq pool index
3842  **/
3843 s32 ixgbe_set_vmdq_generic(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
3844 {
3845 	u32 mpsar;
3846 	u32 rar_entries = hw->mac.num_rar_entries;
3847 
3848 	DEBUGFUNC("ixgbe_set_vmdq_generic");
3849 
3850 	/* Make sure we are using a valid rar index range */
3851 	if (rar >= rar_entries) {
3852 		ERROR_REPORT2(IXGBE_ERROR_ARGUMENT,
3853 			     "RAR index %d is out of range.\n", rar);
3854 		return IXGBE_ERR_INVALID_ARGUMENT;
3855 	}
3856 
3857 	if (vmdq < 32) {
3858 		mpsar = IXGBE_READ_REG(hw, IXGBE_MPSAR_LO(rar));
3859 		mpsar |= 1 << vmdq;
3860 		IXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), mpsar);
3861 	} else {
3862 		mpsar = IXGBE_READ_REG(hw, IXGBE_MPSAR_HI(rar));
3863 		mpsar |= 1 << (vmdq - 32);
3864 		IXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), mpsar);
3865 	}
3866 	return IXGBE_SUCCESS;
3867 }
3868 
3869 /**
3870  * This function should only be involved in the IOV mode.
3871  * In IOV mode, Default pool is next pool after the number of
3872  * VFs advertized and not 0.
3873  * MPSAR table needs to be updated for SAN_MAC RAR [hw->mac.san_mac_rar_index]
3874  *
3875  * ixgbe_set_vmdq_san_mac - Associate default VMDq pool index with a rx address
3876  * @hw: pointer to hardware struct
3877  * @vmdq: VMDq pool index
3878  **/
3879 s32 ixgbe_set_vmdq_san_mac_generic(struct ixgbe_hw *hw, u32 vmdq)
3880 {
3881 	u32 rar = hw->mac.san_mac_rar_index;
3882 
3883 	DEBUGFUNC("ixgbe_set_vmdq_san_mac");
3884 
3885 	if (vmdq < 32) {
3886 		IXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), 1 << vmdq);
3887 		IXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), 0);
3888 	} else {
3889 		IXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), 0);
3890 		IXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), 1 << (vmdq - 32));
3891 	}
3892 
3893 	return IXGBE_SUCCESS;
3894 }
3895 
3896 /**
3897  * ixgbe_init_uta_tables_generic - Initialize the Unicast Table Array
3898  * @hw: pointer to hardware structure
3899  **/
3900 s32 ixgbe_init_uta_tables_generic(struct ixgbe_hw *hw)
3901 {
3902 	int i;
3903 
3904 	DEBUGFUNC("ixgbe_init_uta_tables_generic");
3905 	DEBUGOUT(" Clearing UTA\n");
3906 
3907 	for (i = 0; i < 128; i++)
3908 		IXGBE_WRITE_REG(hw, IXGBE_UTA(i), 0);
3909 
3910 	return IXGBE_SUCCESS;
3911 }
3912 
3913 /**
3914  * ixgbe_find_vlvf_slot - find the vlanid or the first empty slot
3915  * @hw: pointer to hardware structure
3916  * @vlan: VLAN id to write to VLAN filter
3917  * @vlvf_bypass: true to find vlanid only, false returns first empty slot if
3918  *		  vlanid not found
3919  *
3920  *
3921  * return the VLVF index where this VLAN id should be placed
3922  *
3923  **/
3924 s32 ixgbe_find_vlvf_slot(struct ixgbe_hw *hw, u32 vlan, bool vlvf_bypass)
3925 {
3926 	s32 regindex, first_empty_slot;
3927 	u32 bits;
3928 
3929 	/* short cut the special case */
3930 	if (vlan == 0)
3931 		return 0;
3932 
3933 	/* if vlvf_bypass is set we don't want to use an empty slot, we
3934 	 * will simply bypass the VLVF if there are no entries present in the
3935 	 * VLVF that contain our VLAN
3936 	 */
3937 	first_empty_slot = vlvf_bypass ? IXGBE_ERR_NO_SPACE : 0;
3938 
3939 	/* add VLAN enable bit for comparison */
3940 	vlan |= IXGBE_VLVF_VIEN;
3941 
3942 	/* Search for the vlan id in the VLVF entries. Save off the first empty
3943 	 * slot found along the way.
3944 	 *
3945 	 * pre-decrement loop covering (IXGBE_VLVF_ENTRIES - 1) .. 1
3946 	 */
3947 	for (regindex = IXGBE_VLVF_ENTRIES; --regindex;) {
3948 		bits = IXGBE_READ_REG(hw, IXGBE_VLVF(regindex));
3949 		if (bits == vlan)
3950 			return regindex;
3951 		if (!first_empty_slot && !bits)
3952 			first_empty_slot = regindex;
3953 	}
3954 
3955 	/* If we are here then we didn't find the VLAN.  Return first empty
3956 	 * slot we found during our search, else error.
3957 	 */
3958 	if (!first_empty_slot)
3959 		ERROR_REPORT1(IXGBE_ERROR_SOFTWARE, "No space in VLVF.\n");
3960 
3961 	return first_empty_slot ? first_empty_slot : IXGBE_ERR_NO_SPACE;
3962 }
3963 
3964 /**
3965  * ixgbe_set_vfta_generic - Set VLAN filter table
3966  * @hw: pointer to hardware structure
3967  * @vlan: VLAN id to write to VLAN filter
3968  * @vind: VMDq output index that maps queue to VLAN id in VLVFB
3969  * @vlan_on: boolean flag to turn on/off VLAN
3970  * @vlvf_bypass: boolean flag indicating updating default pool is okay
3971  *
3972  * Turn on/off specified VLAN in the VLAN filter table.
3973  **/
3974 s32 ixgbe_set_vfta_generic(struct ixgbe_hw *hw, u32 vlan, u32 vind,
3975 			   bool vlan_on, bool vlvf_bypass)
3976 {
3977 	u32 regidx, vfta_delta, vfta;
3978 	s32 ret_val;
3979 
3980 	DEBUGFUNC("ixgbe_set_vfta_generic");
3981 
3982 	if (vlan > 4095 || vind > 63)
3983 		return IXGBE_ERR_PARAM;
3984 
3985 	/*
3986 	 * this is a 2 part operation - first the VFTA, then the
3987 	 * VLVF and VLVFB if VT Mode is set
3988 	 * We don't write the VFTA until we know the VLVF part succeeded.
3989 	 */
3990 
3991 	/* Part 1
3992 	 * The VFTA is a bitstring made up of 128 32-bit registers
3993 	 * that enable the particular VLAN id, much like the MTA:
3994 	 *    bits[11-5]: which register
3995 	 *    bits[4-0]:  which bit in the register
3996 	 */
3997 	regidx = vlan / 32;
3998 	vfta_delta = 1 << (vlan % 32);
3999 	vfta = IXGBE_READ_REG(hw, IXGBE_VFTA(regidx));
4000 
4001 	/*
4002 	 * vfta_delta represents the difference between the current value
4003 	 * of vfta and the value we want in the register.  Since the diff
4004 	 * is an XOR mask we can just update the vfta using an XOR
4005 	 */
4006 	vfta_delta &= vlan_on ? ~vfta : vfta;
4007 	vfta ^= vfta_delta;
4008 
4009 	/* Part 2
4010 	 * Call ixgbe_set_vlvf_generic to set VLVFB and VLVF
4011 	 */
4012 	ret_val = ixgbe_set_vlvf_generic(hw, vlan, vind, vlan_on, &vfta_delta,
4013 					 vfta, vlvf_bypass);
4014 	if (ret_val != IXGBE_SUCCESS) {
4015 		if (vlvf_bypass)
4016 			goto vfta_update;
4017 		return ret_val;
4018 	}
4019 
4020 vfta_update:
4021 	/* Update VFTA now that we are ready for traffic */
4022 	if (vfta_delta)
4023 		IXGBE_WRITE_REG(hw, IXGBE_VFTA(regidx), vfta);
4024 
4025 	return IXGBE_SUCCESS;
4026 }
4027 
4028 /**
4029  * ixgbe_set_vlvf_generic - Set VLAN Pool Filter
4030  * @hw: pointer to hardware structure
4031  * @vlan: VLAN id to write to VLAN filter
4032  * @vind: VMDq output index that maps queue to VLAN id in VLVFB
4033  * @vlan_on: boolean flag to turn on/off VLAN in VLVF
4034  * @vfta_delta: pointer to the difference between the current value of VFTA
4035  *		 and the desired value
4036  * @vfta: the desired value of the VFTA
4037  * @vlvf_bypass: boolean flag indicating updating default pool is okay
4038  *
4039  * Turn on/off specified bit in VLVF table.
4040  **/
4041 s32 ixgbe_set_vlvf_generic(struct ixgbe_hw *hw, u32 vlan, u32 vind,
4042 			   bool vlan_on, u32 *vfta_delta, u32 vfta,
4043 			   bool vlvf_bypass)
4044 {
4045 	u32 bits;
4046 	s32 vlvf_index;
4047 
4048 	DEBUGFUNC("ixgbe_set_vlvf_generic");
4049 
4050 	if (vlan > 4095 || vind > 63)
4051 		return IXGBE_ERR_PARAM;
4052 
4053 	/* If VT Mode is set
4054 	 *   Either vlan_on
4055 	 *     make sure the vlan is in VLVF
4056 	 *     set the vind bit in the matching VLVFB
4057 	 *   Or !vlan_on
4058 	 *     clear the pool bit and possibly the vind
4059 	 */
4060 	if (!(IXGBE_READ_REG(hw, IXGBE_VT_CTL) & IXGBE_VT_CTL_VT_ENABLE))
4061 		return IXGBE_SUCCESS;
4062 
4063 	vlvf_index = ixgbe_find_vlvf_slot(hw, vlan, vlvf_bypass);
4064 	if (vlvf_index < 0)
4065 		return vlvf_index;
4066 
4067 	bits = IXGBE_READ_REG(hw, IXGBE_VLVFB(vlvf_index * 2 + vind / 32));
4068 
4069 	/* set the pool bit */
4070 	bits |= 1 << (vind % 32);
4071 	if (vlan_on)
4072 		goto vlvf_update;
4073 
4074 	/* clear the pool bit */
4075 	bits ^= 1 << (vind % 32);
4076 
4077 	if (!bits &&
4078 	    !IXGBE_READ_REG(hw, IXGBE_VLVFB(vlvf_index * 2 + 1 - vind / 32))) {
4079 		/* Clear VFTA first, then disable VLVF.  Otherwise
4080 		 * we run the risk of stray packets leaking into
4081 		 * the PF via the default pool
4082 		 */
4083 		if (*vfta_delta)
4084 			IXGBE_WRITE_REG(hw, IXGBE_VFTA(vlan / 32), vfta);
4085 
4086 		/* disable VLVF and clear remaining bit from pool */
4087 		IXGBE_WRITE_REG(hw, IXGBE_VLVF(vlvf_index), 0);
4088 		IXGBE_WRITE_REG(hw, IXGBE_VLVFB(vlvf_index * 2 + vind / 32), 0);
4089 
4090 		return IXGBE_SUCCESS;
4091 	}
4092 
4093 	/* If there are still bits set in the VLVFB registers
4094 	 * for the VLAN ID indicated we need to see if the
4095 	 * caller is requesting that we clear the VFTA entry bit.
4096 	 * If the caller has requested that we clear the VFTA
4097 	 * entry bit but there are still pools/VFs using this VLAN
4098 	 * ID entry then ignore the request.  We're not worried
4099 	 * about the case where we're turning the VFTA VLAN ID
4100 	 * entry bit on, only when requested to turn it off as
4101 	 * there may be multiple pools and/or VFs using the
4102 	 * VLAN ID entry.  In that case we cannot clear the
4103 	 * VFTA bit until all pools/VFs using that VLAN ID have also
4104 	 * been cleared.  This will be indicated by "bits" being
4105 	 * zero.
4106 	 */
4107 	*vfta_delta = 0;
4108 
4109 vlvf_update:
4110 	/* record pool change and enable VLAN ID if not already enabled */
4111 	IXGBE_WRITE_REG(hw, IXGBE_VLVFB(vlvf_index * 2 + vind / 32), bits);
4112 	IXGBE_WRITE_REG(hw, IXGBE_VLVF(vlvf_index), IXGBE_VLVF_VIEN | vlan);
4113 
4114 	return IXGBE_SUCCESS;
4115 }
4116 
4117 /**
4118  * ixgbe_clear_vfta_generic - Clear VLAN filter table
4119  * @hw: pointer to hardware structure
4120  *
4121  * Clears the VLAN filter table, and the VMDq index associated with the filter
4122  **/
4123 s32 ixgbe_clear_vfta_generic(struct ixgbe_hw *hw)
4124 {
4125 	u32 offset;
4126 
4127 	DEBUGFUNC("ixgbe_clear_vfta_generic");
4128 
4129 	for (offset = 0; offset < hw->mac.vft_size; offset++)
4130 		IXGBE_WRITE_REG(hw, IXGBE_VFTA(offset), 0);
4131 
4132 	for (offset = 0; offset < IXGBE_VLVF_ENTRIES; offset++) {
4133 		IXGBE_WRITE_REG(hw, IXGBE_VLVF(offset), 0);
4134 		IXGBE_WRITE_REG(hw, IXGBE_VLVFB(offset * 2), 0);
4135 		IXGBE_WRITE_REG(hw, IXGBE_VLVFB(offset * 2 + 1), 0);
4136 	}
4137 
4138 	return IXGBE_SUCCESS;
4139 }
4140 
4141 /**
4142  * ixgbe_need_crosstalk_fix - Determine if we need to do cross talk fix
4143  * @hw: pointer to hardware structure
4144  *
4145  * Contains the logic to identify if we need to verify link for the
4146  * crosstalk fix
4147  **/
4148 static bool ixgbe_need_crosstalk_fix(struct ixgbe_hw *hw)
4149 {
4150 
4151 	/* Does FW say we need the fix */
4152 	if (!hw->need_crosstalk_fix)
4153 		return false;
4154 
4155 	/* Only consider SFP+ PHYs i.e. media type fiber */
4156 	switch (hw->mac.ops.get_media_type(hw)) {
4157 	case ixgbe_media_type_fiber:
4158 	case ixgbe_media_type_fiber_qsfp:
4159 		break;
4160 	default:
4161 		return false;
4162 	}
4163 
4164 	return true;
4165 }
4166 
4167 /**
4168  * ixgbe_check_mac_link_generic - Determine link and speed status
4169  * @hw: pointer to hardware structure
4170  * @speed: pointer to link speed
4171  * @link_up: true when link is up
4172  * @link_up_wait_to_complete: bool used to wait for link up or not
4173  *
4174  * Reads the links register to determine if link is up and the current speed
4175  **/
4176 s32 ixgbe_check_mac_link_generic(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
4177 				 bool *link_up, bool link_up_wait_to_complete)
4178 {
4179 	u32 links_reg, links_orig;
4180 	u32 i;
4181 
4182 	DEBUGFUNC("ixgbe_check_mac_link_generic");
4183 
4184 	/* If Crosstalk fix enabled do the sanity check of making sure
4185 	 * the SFP+ cage is full.
4186 	 */
4187 	if (ixgbe_need_crosstalk_fix(hw)) {
4188 		u32 sfp_cage_full;
4189 
4190 		switch (hw->mac.type) {
4191 		case ixgbe_mac_82599EB:
4192 			sfp_cage_full = IXGBE_READ_REG(hw, IXGBE_ESDP) &
4193 					IXGBE_ESDP_SDP2;
4194 			break;
4195 		case ixgbe_mac_X550EM_x:
4196 		case ixgbe_mac_X550EM_a:
4197 			sfp_cage_full = IXGBE_READ_REG(hw, IXGBE_ESDP) &
4198 					IXGBE_ESDP_SDP0;
4199 			break;
4200 		default:
4201 			/* sanity check - No SFP+ devices here */
4202 			sfp_cage_full = false;
4203 			break;
4204 		}
4205 
4206 		if (!sfp_cage_full) {
4207 			*link_up = false;
4208 			*speed = IXGBE_LINK_SPEED_UNKNOWN;
4209 			return IXGBE_SUCCESS;
4210 		}
4211 	}
4212 
4213 	/* clear the old state */
4214 	links_orig = IXGBE_READ_REG(hw, IXGBE_LINKS);
4215 
4216 	links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
4217 
4218 	if (links_orig != links_reg) {
4219 		DEBUGOUT2("LINKS changed from %08X to %08X\n",
4220 			  links_orig, links_reg);
4221 	}
4222 
4223 	if (link_up_wait_to_complete) {
4224 		for (i = 0; i < hw->mac.max_link_up_time; i++) {
4225 			if (links_reg & IXGBE_LINKS_UP) {
4226 				*link_up = true;
4227 				break;
4228 			} else {
4229 				*link_up = false;
4230 			}
4231 			msec_delay(100);
4232 			links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
4233 		}
4234 	} else {
4235 		if (links_reg & IXGBE_LINKS_UP) {
4236 			if (ixgbe_need_crosstalk_fix(hw)) {
4237 				/* Check the link state again after a delay
4238 				 * to filter out spurious link up
4239 				 * notifications.
4240 				 */
4241 				msec_delay(5);
4242 				links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
4243 				if (!(links_reg & IXGBE_LINKS_UP)) {
4244 					*link_up = false;
4245 					*speed = IXGBE_LINK_SPEED_UNKNOWN;
4246 					return IXGBE_SUCCESS;
4247 				}
4248 
4249 			}
4250 			*link_up = true;
4251 		} else {
4252 			*link_up = false;
4253 		}
4254 	}
4255 
4256 	switch (links_reg & IXGBE_LINKS_SPEED_82599) {
4257 	case IXGBE_LINKS_SPEED_10G_82599:
4258 		*speed = IXGBE_LINK_SPEED_10GB_FULL;
4259 		if (hw->mac.type >= ixgbe_mac_X550) {
4260 			if (links_reg & IXGBE_LINKS_SPEED_NON_STD)
4261 				*speed = IXGBE_LINK_SPEED_2_5GB_FULL;
4262 		}
4263 		break;
4264 	case IXGBE_LINKS_SPEED_1G_82599:
4265 		*speed = IXGBE_LINK_SPEED_1GB_FULL;
4266 		break;
4267 	case IXGBE_LINKS_SPEED_100_82599:
4268 		*speed = IXGBE_LINK_SPEED_100_FULL;
4269 		if (hw->mac.type == ixgbe_mac_X550) {
4270 			if (links_reg & IXGBE_LINKS_SPEED_NON_STD)
4271 				*speed = IXGBE_LINK_SPEED_5GB_FULL;
4272 		}
4273 		break;
4274 	case IXGBE_LINKS_SPEED_10_X550EM_A:
4275 		*speed = IXGBE_LINK_SPEED_UNKNOWN;
4276 		if (hw->device_id == IXGBE_DEV_ID_X550EM_A_1G_T ||
4277 		    hw->device_id == IXGBE_DEV_ID_X550EM_A_1G_T_L)
4278 			*speed = IXGBE_LINK_SPEED_10_FULL;
4279 		break;
4280 	default:
4281 		*speed = IXGBE_LINK_SPEED_UNKNOWN;
4282 	}
4283 
4284 	return IXGBE_SUCCESS;
4285 }
4286 
4287 /**
4288  * ixgbe_get_wwn_prefix_generic - Get alternative WWNN/WWPN prefix from
4289  * the EEPROM
4290  * @hw: pointer to hardware structure
4291  * @wwnn_prefix: the alternative WWNN prefix
4292  * @wwpn_prefix: the alternative WWPN prefix
4293  *
4294  * This function will read the EEPROM from the alternative SAN MAC address
4295  * block to check the support for the alternative WWNN/WWPN prefix support.
4296  **/
4297 s32 ixgbe_get_wwn_prefix_generic(struct ixgbe_hw *hw, u16 *wwnn_prefix,
4298 				 u16 *wwpn_prefix)
4299 {
4300 	u16 offset, caps;
4301 	u16 alt_san_mac_blk_offset;
4302 
4303 	DEBUGFUNC("ixgbe_get_wwn_prefix_generic");
4304 
4305 	/* clear output first */
4306 	*wwnn_prefix = 0xFFFF;
4307 	*wwpn_prefix = 0xFFFF;
4308 
4309 	/* check if alternative SAN MAC is supported */
4310 	offset = IXGBE_ALT_SAN_MAC_ADDR_BLK_PTR;
4311 	if (hw->eeprom.ops.read(hw, offset, &alt_san_mac_blk_offset))
4312 		goto wwn_prefix_err;
4313 
4314 	if ((alt_san_mac_blk_offset == 0) ||
4315 	    (alt_san_mac_blk_offset == 0xFFFF))
4316 		goto wwn_prefix_out;
4317 
4318 	/* check capability in alternative san mac address block */
4319 	offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_CAPS_OFFSET;
4320 	if (hw->eeprom.ops.read(hw, offset, &caps))
4321 		goto wwn_prefix_err;
4322 	if (!(caps & IXGBE_ALT_SAN_MAC_ADDR_CAPS_ALTWWN))
4323 		goto wwn_prefix_out;
4324 
4325 	/* get the corresponding prefix for WWNN/WWPN */
4326 	offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_WWNN_OFFSET;
4327 	if (hw->eeprom.ops.read(hw, offset, wwnn_prefix)) {
4328 		ERROR_REPORT2(IXGBE_ERROR_INVALID_STATE,
4329 			      "eeprom read at offset %d failed", offset);
4330 	}
4331 
4332 	offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_WWPN_OFFSET;
4333 	if (hw->eeprom.ops.read(hw, offset, wwpn_prefix))
4334 		goto wwn_prefix_err;
4335 
4336 wwn_prefix_out:
4337 	return IXGBE_SUCCESS;
4338 
4339 wwn_prefix_err:
4340 	ERROR_REPORT2(IXGBE_ERROR_INVALID_STATE,
4341 		      "eeprom read at offset %d failed", offset);
4342 	return IXGBE_SUCCESS;
4343 }
4344 
4345 /**
4346  * ixgbe_get_fcoe_boot_status_generic - Get FCOE boot status from EEPROM
4347  * @hw: pointer to hardware structure
4348  * @bs: the fcoe boot status
4349  *
4350  * This function will read the FCOE boot status from the iSCSI FCOE block
4351  **/
4352 s32 ixgbe_get_fcoe_boot_status_generic(struct ixgbe_hw *hw, u16 *bs)
4353 {
4354 	u16 offset, caps, flags;
4355 	s32 status;
4356 
4357 	DEBUGFUNC("ixgbe_get_fcoe_boot_status_generic");
4358 
4359 	/* clear output first */
4360 	*bs = ixgbe_fcoe_bootstatus_unavailable;
4361 
4362 	/* check if FCOE IBA block is present */
4363 	offset = IXGBE_FCOE_IBA_CAPS_BLK_PTR;
4364 	status = hw->eeprom.ops.read(hw, offset, &caps);
4365 	if (status != IXGBE_SUCCESS)
4366 		goto out;
4367 
4368 	if (!(caps & IXGBE_FCOE_IBA_CAPS_FCOE))
4369 		goto out;
4370 
4371 	/* check if iSCSI FCOE block is populated */
4372 	status = hw->eeprom.ops.read(hw, IXGBE_ISCSI_FCOE_BLK_PTR, &offset);
4373 	if (status != IXGBE_SUCCESS)
4374 		goto out;
4375 
4376 	if ((offset == 0) || (offset == 0xFFFF))
4377 		goto out;
4378 
4379 	/* read fcoe flags in iSCSI FCOE block */
4380 	offset = offset + IXGBE_ISCSI_FCOE_FLAGS_OFFSET;
4381 	status = hw->eeprom.ops.read(hw, offset, &flags);
4382 	if (status != IXGBE_SUCCESS)
4383 		goto out;
4384 
4385 	if (flags & IXGBE_ISCSI_FCOE_FLAGS_ENABLE)
4386 		*bs = ixgbe_fcoe_bootstatus_enabled;
4387 	else
4388 		*bs = ixgbe_fcoe_bootstatus_disabled;
4389 
4390 out:
4391 	return status;
4392 }
4393 
4394 /**
4395  * ixgbe_set_mac_anti_spoofing - Enable/Disable MAC anti-spoofing
4396  * @hw: pointer to hardware structure
4397  * @enable: enable or disable switch for MAC anti-spoofing
4398  * @vf: Virtual Function pool - VF Pool to set for MAC anti-spoofing
4399  *
4400  **/
4401 void ixgbe_set_mac_anti_spoofing(struct ixgbe_hw *hw, bool enable, int vf)
4402 {
4403 	int vf_target_reg = vf >> 3;
4404 	int vf_target_shift = vf % 8;
4405 	u32 pfvfspoof;
4406 
4407 	if (hw->mac.type == ixgbe_mac_82598EB)
4408 		return;
4409 
4410 	pfvfspoof = IXGBE_READ_REG(hw, IXGBE_PFVFSPOOF(vf_target_reg));
4411 	if (enable)
4412 		pfvfspoof |= (1 << vf_target_shift);
4413 	else
4414 		pfvfspoof &= ~(1 << vf_target_shift);
4415 	IXGBE_WRITE_REG(hw, IXGBE_PFVFSPOOF(vf_target_reg), pfvfspoof);
4416 }
4417 
4418 /**
4419  * ixgbe_set_vlan_anti_spoofing - Enable/Disable VLAN anti-spoofing
4420  * @hw: pointer to hardware structure
4421  * @enable: enable or disable switch for VLAN anti-spoofing
4422  * @vf: Virtual Function pool - VF Pool to set for VLAN anti-spoofing
4423  *
4424  **/
4425 void ixgbe_set_vlan_anti_spoofing(struct ixgbe_hw *hw, bool enable, int vf)
4426 {
4427 	int vf_target_reg = vf >> 3;
4428 	int vf_target_shift = vf % 8 + IXGBE_SPOOF_VLANAS_SHIFT;
4429 	u32 pfvfspoof;
4430 
4431 	if (hw->mac.type == ixgbe_mac_82598EB)
4432 		return;
4433 
4434 	pfvfspoof = IXGBE_READ_REG(hw, IXGBE_PFVFSPOOF(vf_target_reg));
4435 	if (enable)
4436 		pfvfspoof |= (1 << vf_target_shift);
4437 	else
4438 		pfvfspoof &= ~(1 << vf_target_shift);
4439 	IXGBE_WRITE_REG(hw, IXGBE_PFVFSPOOF(vf_target_reg), pfvfspoof);
4440 }
4441 
4442 /**
4443  * ixgbe_get_device_caps_generic - Get additional device capabilities
4444  * @hw: pointer to hardware structure
4445  * @device_caps: the EEPROM word with the extra device capabilities
4446  *
4447  * This function will read the EEPROM location for the device capabilities,
4448  * and return the word through device_caps.
4449  **/
4450 s32 ixgbe_get_device_caps_generic(struct ixgbe_hw *hw, u16 *device_caps)
4451 {
4452 	DEBUGFUNC("ixgbe_get_device_caps_generic");
4453 
4454 	hw->eeprom.ops.read(hw, IXGBE_DEVICE_CAPS, device_caps);
4455 
4456 	return IXGBE_SUCCESS;
4457 }
4458 
4459 /**
4460  * ixgbe_enable_relaxed_ordering_gen2 - Enable relaxed ordering
4461  * @hw: pointer to hardware structure
4462  *
4463  **/
4464 void ixgbe_enable_relaxed_ordering_gen2(struct ixgbe_hw *hw)
4465 {
4466 	u32 regval;
4467 	u32 i;
4468 
4469 	DEBUGFUNC("ixgbe_enable_relaxed_ordering_gen2");
4470 
4471 	/* Enable relaxed ordering */
4472 	for (i = 0; i < hw->mac.max_tx_queues; i++) {
4473 		regval = IXGBE_READ_REG(hw, IXGBE_DCA_TXCTRL_82599(i));
4474 		regval |= IXGBE_DCA_TXCTRL_DESC_WRO_EN;
4475 		IXGBE_WRITE_REG(hw, IXGBE_DCA_TXCTRL_82599(i), regval);
4476 	}
4477 
4478 	for (i = 0; i < hw->mac.max_rx_queues; i++) {
4479 		regval = IXGBE_READ_REG(hw, IXGBE_DCA_RXCTRL(i));
4480 		regval |= IXGBE_DCA_RXCTRL_DATA_WRO_EN |
4481 			  IXGBE_DCA_RXCTRL_HEAD_WRO_EN;
4482 		IXGBE_WRITE_REG(hw, IXGBE_DCA_RXCTRL(i), regval);
4483 	}
4484 
4485 }
4486 
4487 /**
4488  * ixgbe_calculate_checksum - Calculate checksum for buffer
4489  * @buffer: pointer to EEPROM
4490  * @length: size of EEPROM to calculate a checksum for
4491  * Calculates the checksum for some buffer on a specified length.  The
4492  * checksum calculated is returned.
4493  **/
4494 u8 ixgbe_calculate_checksum(u8 *buffer, u32 length)
4495 {
4496 	u32 i;
4497 	u8 sum = 0;
4498 
4499 	DEBUGFUNC("ixgbe_calculate_checksum");
4500 
4501 	if (!buffer)
4502 		return 0;
4503 
4504 	for (i = 0; i < length; i++)
4505 		sum += buffer[i];
4506 
4507 	return (u8) (0 - sum);
4508 }
4509 
4510 /**
4511  * ixgbe_hic_unlocked - Issue command to manageability block unlocked
4512  * @hw: pointer to the HW structure
4513  * @buffer: command to write and where the return status will be placed
4514  * @length: length of buffer, must be multiple of 4 bytes
4515  * @timeout: time in ms to wait for command completion
4516  *
4517  * Communicates with the manageability block. On success return IXGBE_SUCCESS
4518  * else returns semaphore error when encountering an error acquiring
4519  * semaphore or IXGBE_ERR_HOST_INTERFACE_COMMAND when command fails.
4520  *
4521  * This function assumes that the IXGBE_GSSR_SW_MNG_SM semaphore is held
4522  * by the caller.
4523  **/
4524 s32 ixgbe_hic_unlocked(struct ixgbe_hw *hw, u32 *buffer, u32 length,
4525 		       u32 timeout)
4526 {
4527 	u32 hicr, i, fwsts;
4528 	u16 dword_len;
4529 
4530 	DEBUGFUNC("ixgbe_hic_unlocked");
4531 
4532 	if (!length || length > IXGBE_HI_MAX_BLOCK_BYTE_LENGTH) {
4533 		DEBUGOUT1("Buffer length failure buffersize=%d.\n", length);
4534 		return IXGBE_ERR_HOST_INTERFACE_COMMAND;
4535 	}
4536 
4537 	/* Set bit 9 of FWSTS clearing FW reset indication */
4538 	fwsts = IXGBE_READ_REG(hw, IXGBE_FWSTS);
4539 	IXGBE_WRITE_REG(hw, IXGBE_FWSTS, fwsts | IXGBE_FWSTS_FWRI);
4540 
4541 	/* Check that the host interface is enabled. */
4542 	hicr = IXGBE_READ_REG(hw, IXGBE_HICR);
4543 	if (!(hicr & IXGBE_HICR_EN)) {
4544 		DEBUGOUT("IXGBE_HOST_EN bit disabled.\n");
4545 		return IXGBE_ERR_HOST_INTERFACE_COMMAND;
4546 	}
4547 
4548 	/* Calculate length in DWORDs. We must be DWORD aligned */
4549 	if (length % sizeof(u32)) {
4550 		DEBUGOUT("Buffer length failure, not aligned to dword");
4551 		return IXGBE_ERR_INVALID_ARGUMENT;
4552 	}
4553 
4554 	dword_len = length >> 2;
4555 
4556 	/* The device driver writes the relevant command block
4557 	 * into the ram area.
4558 	 */
4559 	for (i = 0; i < dword_len; i++)
4560 		IXGBE_WRITE_REG_ARRAY(hw, IXGBE_FLEX_MNG,
4561 				      i, IXGBE_CPU_TO_LE32(buffer[i]));
4562 
4563 	/* Setting this bit tells the ARC that a new command is pending. */
4564 	IXGBE_WRITE_REG(hw, IXGBE_HICR, hicr | IXGBE_HICR_C);
4565 
4566 	for (i = 0; i < timeout; i++) {
4567 		hicr = IXGBE_READ_REG(hw, IXGBE_HICR);
4568 		if (!(hicr & IXGBE_HICR_C))
4569 			break;
4570 		msec_delay(1);
4571 	}
4572 
4573 	/* For each command except "Apply Update" perform
4574 	 * status checks in the HICR registry.
4575 	 */
4576 	if ((buffer[0] & IXGBE_HOST_INTERFACE_MASK_CMD) ==
4577 	    IXGBE_HOST_INTERFACE_APPLY_UPDATE_CMD)
4578 		return IXGBE_SUCCESS;
4579 
4580 	/* Check command completion */
4581 	if ((timeout && i == timeout) ||
4582 	    !(IXGBE_READ_REG(hw, IXGBE_HICR) & IXGBE_HICR_SV)) {
4583 		ERROR_REPORT1(IXGBE_ERROR_CAUTION,
4584 			      "Command has failed with no status valid.\n");
4585 		return IXGBE_ERR_HOST_INTERFACE_COMMAND;
4586 	}
4587 
4588 	return IXGBE_SUCCESS;
4589 }
4590 
4591 /**
4592  * ixgbe_host_interface_command - Issue command to manageability block
4593  * @hw: pointer to the HW structure
4594  * @buffer: contains the command to write and where the return status will
4595  *  be placed
4596  * @length: length of buffer, must be multiple of 4 bytes
4597  * @timeout: time in ms to wait for command completion
4598  * @return_data: read and return data from the buffer (true) or not (false)
4599  *  Needed because FW structures are big endian and decoding of
4600  *  these fields can be 8 bit or 16 bit based on command. Decoding
4601  *  is not easily understood without making a table of commands.
4602  *  So we will leave this up to the caller to read back the data
4603  *  in these cases.
4604  *
4605  * Communicates with the manageability block. On success return IXGBE_SUCCESS
4606  * else returns semaphore error when encountering an error acquiring
4607  * semaphore or IXGBE_ERR_HOST_INTERFACE_COMMAND when command fails.
4608  **/
4609 s32 ixgbe_host_interface_command(struct ixgbe_hw *hw, u32 *buffer,
4610 				 u32 length, u32 timeout, bool return_data)
4611 {
4612 	u32 hdr_size = sizeof(struct ixgbe_hic_hdr);
4613 	struct ixgbe_hic_hdr *resp = (struct ixgbe_hic_hdr *)buffer;
4614 	u16 buf_len;
4615 	s32 status;
4616 	u32 bi;
4617 	u32 dword_len;
4618 
4619 	DEBUGFUNC("ixgbe_host_interface_command");
4620 
4621 	if (length == 0 || length > IXGBE_HI_MAX_BLOCK_BYTE_LENGTH) {
4622 		DEBUGOUT1("Buffer length failure buffersize=%d.\n", length);
4623 		return IXGBE_ERR_HOST_INTERFACE_COMMAND;
4624 	}
4625 
4626 	/* Take management host interface semaphore */
4627 	status = hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_SW_MNG_SM);
4628 	if (status)
4629 		return status;
4630 
4631 	status = ixgbe_hic_unlocked(hw, buffer, length, timeout);
4632 	if (status)
4633 		goto rel_out;
4634 
4635 	if (!return_data)
4636 		goto rel_out;
4637 
4638 	/* Calculate length in DWORDs */
4639 	dword_len = hdr_size >> 2;
4640 
4641 	/* first pull in the header so we know the buffer length */
4642 	for (bi = 0; bi < dword_len; bi++) {
4643 		buffer[bi] = IXGBE_READ_REG_ARRAY(hw, IXGBE_FLEX_MNG, bi);
4644 		IXGBE_LE32_TO_CPUS((uintptr_t)&buffer[bi]);
4645 	}
4646 
4647 	/*
4648 	 * If there is any thing in data position pull it in
4649 	 * Read Flash command requires reading buffer length from
4650 	 * two byes instead of one byte
4651 	 */
4652 	if (resp->cmd == IXGBE_HOST_INTERFACE_FLASH_READ_CMD ||
4653 	    resp->cmd == IXGBE_HOST_INTERFACE_SHADOW_RAM_READ_CMD) {
4654 		for (; bi < dword_len + 2; bi++) {
4655 			buffer[bi] = IXGBE_READ_REG_ARRAY(hw, IXGBE_FLEX_MNG,
4656 							  bi);
4657 			IXGBE_LE32_TO_CPUS(&buffer[bi]);
4658 		}
4659 		buf_len = (((u16)(resp->cmd_or_resp.ret_status) << 3)
4660 				  & 0xF00) | resp->buf_len;
4661 		hdr_size += (2 << 2);
4662 	} else {
4663 		buf_len = resp->buf_len;
4664 	}
4665 	if (!buf_len)
4666 		goto rel_out;
4667 
4668 	if (length < buf_len + hdr_size) {
4669 		DEBUGOUT("Buffer not large enough for reply message.\n");
4670 		status = IXGBE_ERR_HOST_INTERFACE_COMMAND;
4671 		goto rel_out;
4672 	}
4673 
4674 	/* Calculate length in DWORDs, add 3 for odd lengths */
4675 	dword_len = (buf_len + 3) >> 2;
4676 
4677 	/* Pull in the rest of the buffer (bi is where we left off) */
4678 	for (; bi <= dword_len; bi++) {
4679 		buffer[bi] = IXGBE_READ_REG_ARRAY(hw, IXGBE_FLEX_MNG, bi);
4680 		IXGBE_LE32_TO_CPUS((uintptr_t)&buffer[bi]);
4681 	}
4682 
4683 rel_out:
4684 	hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_SW_MNG_SM);
4685 
4686 	return status;
4687 }
4688 
4689 /**
4690  * ixgbe_set_fw_drv_ver_generic - Sends driver version to firmware
4691  * @hw: pointer to the HW structure
4692  * @maj: driver version major number
4693  * @min: driver version minor number
4694  * @build: driver version build number
4695  * @sub: driver version sub build number
4696  * @len: unused
4697  * @driver_ver: unused
4698  *
4699  * Sends driver version number to firmware through the manageability
4700  * block.  On success return IXGBE_SUCCESS
4701  * else returns IXGBE_ERR_SWFW_SYNC when encountering an error acquiring
4702  * semaphore or IXGBE_ERR_HOST_INTERFACE_COMMAND when command fails.
4703  **/
4704 s32 ixgbe_set_fw_drv_ver_generic(struct ixgbe_hw *hw, u8 maj, u8 min,
4705 				 u8 build, u8 sub, u16 len,
4706 				 const char *driver_ver)
4707 {
4708 	struct ixgbe_hic_drv_info fw_cmd;
4709 	int i;
4710 	s32 ret_val = IXGBE_SUCCESS;
4711 
4712 	DEBUGFUNC("ixgbe_set_fw_drv_ver_generic");
4713 	UNREFERENCED_2PARAMETER(len, driver_ver);
4714 
4715 	fw_cmd.hdr.cmd = FW_CEM_CMD_DRIVER_INFO;
4716 	fw_cmd.hdr.buf_len = FW_CEM_CMD_DRIVER_INFO_LEN;
4717 	fw_cmd.hdr.cmd_or_resp.cmd_resv = FW_CEM_CMD_RESERVED;
4718 	fw_cmd.port_num = (u8)hw->bus.func;
4719 	fw_cmd.ver_maj = maj;
4720 	fw_cmd.ver_min = min;
4721 	fw_cmd.ver_build = build;
4722 	fw_cmd.ver_sub = sub;
4723 	fw_cmd.hdr.checksum = 0;
4724 	fw_cmd.pad = 0;
4725 	fw_cmd.pad2 = 0;
4726 	fw_cmd.hdr.checksum = ixgbe_calculate_checksum((u8 *)&fw_cmd,
4727 				(FW_CEM_HDR_LEN + fw_cmd.hdr.buf_len));
4728 
4729 	for (i = 0; i <= FW_CEM_MAX_RETRIES; i++) {
4730 		ret_val = ixgbe_host_interface_command(hw, (u32 *)&fw_cmd,
4731 						       sizeof(fw_cmd),
4732 						       IXGBE_HI_COMMAND_TIMEOUT,
4733 						       true);
4734 		if (ret_val != IXGBE_SUCCESS)
4735 			continue;
4736 
4737 		if (fw_cmd.hdr.cmd_or_resp.ret_status ==
4738 		    FW_CEM_RESP_STATUS_SUCCESS)
4739 			ret_val = IXGBE_SUCCESS;
4740 		else
4741 			ret_val = IXGBE_ERR_HOST_INTERFACE_COMMAND;
4742 
4743 		break;
4744 	}
4745 
4746 	return ret_val;
4747 }
4748 
4749 /**
4750  * ixgbe_set_rxpba_generic - Initialize Rx packet buffer
4751  * @hw: pointer to hardware structure
4752  * @num_pb: number of packet buffers to allocate
4753  * @headroom: reserve n KB of headroom
4754  * @strategy: packet buffer allocation strategy
4755  **/
4756 void ixgbe_set_rxpba_generic(struct ixgbe_hw *hw, int num_pb, u32 headroom,
4757 			     int strategy)
4758 {
4759 	u32 pbsize = hw->mac.rx_pb_size;
4760 	int i = 0;
4761 	u32 rxpktsize, txpktsize, txpbthresh;
4762 
4763 	/* Reserve headroom */
4764 	pbsize -= headroom;
4765 
4766 	if (!num_pb)
4767 		num_pb = 1;
4768 
4769 	/* Divide remaining packet buffer space amongst the number of packet
4770 	 * buffers requested using supplied strategy.
4771 	 */
4772 	switch (strategy) {
4773 	case PBA_STRATEGY_WEIGHTED:
4774 		/* ixgbe_dcb_pba_80_48 strategy weight first half of packet
4775 		 * buffer with 5/8 of the packet buffer space.
4776 		 */
4777 		rxpktsize = (pbsize * 5) / (num_pb * 4);
4778 		pbsize -= rxpktsize * (num_pb / 2);
4779 		rxpktsize <<= IXGBE_RXPBSIZE_SHIFT;
4780 		for (; i < (num_pb / 2); i++)
4781 			IXGBE_WRITE_REG(hw, IXGBE_RXPBSIZE(i), rxpktsize);
4782 		/* configure remaining packet buffers */
4783 		/* FALLTHROUGH */
4784 	case PBA_STRATEGY_EQUAL:
4785 		rxpktsize = (pbsize / (num_pb - i)) << IXGBE_RXPBSIZE_SHIFT;
4786 		for (; i < num_pb; i++)
4787 			IXGBE_WRITE_REG(hw, IXGBE_RXPBSIZE(i), rxpktsize);
4788 		break;
4789 	default:
4790 		break;
4791 	}
4792 
4793 	/* Only support an equally distributed Tx packet buffer strategy. */
4794 	txpktsize = IXGBE_TXPBSIZE_MAX / num_pb;
4795 	txpbthresh = (txpktsize / 1024) - IXGBE_TXPKT_SIZE_MAX;
4796 	for (i = 0; i < num_pb; i++) {
4797 		IXGBE_WRITE_REG(hw, IXGBE_TXPBSIZE(i), txpktsize);
4798 		IXGBE_WRITE_REG(hw, IXGBE_TXPBTHRESH(i), txpbthresh);
4799 	}
4800 
4801 	/* Clear unused TCs, if any, to zero buffer size*/
4802 	for (; i < IXGBE_MAX_PB; i++) {
4803 		IXGBE_WRITE_REG(hw, IXGBE_RXPBSIZE(i), 0);
4804 		IXGBE_WRITE_REG(hw, IXGBE_TXPBSIZE(i), 0);
4805 		IXGBE_WRITE_REG(hw, IXGBE_TXPBTHRESH(i), 0);
4806 	}
4807 }
4808 
4809 /**
4810  * ixgbe_clear_tx_pending - Clear pending TX work from the PCIe fifo
4811  * @hw: pointer to the hardware structure
4812  *
4813  * The 82599 and x540 MACs can experience issues if TX work is still pending
4814  * when a reset occurs.  This function prevents this by flushing the PCIe
4815  * buffers on the system.
4816  **/
4817 void ixgbe_clear_tx_pending(struct ixgbe_hw *hw)
4818 {
4819 	u32 gcr_ext, hlreg0, i, poll;
4820 	u16 value;
4821 
4822 	/*
4823 	 * If double reset is not requested then all transactions should
4824 	 * already be clear and as such there is no work to do
4825 	 */
4826 	if (!(hw->mac.flags & IXGBE_FLAGS_DOUBLE_RESET_REQUIRED))
4827 		return;
4828 
4829 	/*
4830 	 * Set loopback enable to prevent any transmits from being sent
4831 	 * should the link come up.  This assumes that the RXCTRL.RXEN bit
4832 	 * has already been cleared.
4833 	 */
4834 	hlreg0 = IXGBE_READ_REG(hw, IXGBE_HLREG0);
4835 	IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg0 | IXGBE_HLREG0_LPBK);
4836 
4837 	/* Wait for a last completion before clearing buffers */
4838 	IXGBE_WRITE_FLUSH(hw);
4839 	msec_delay(3);
4840 
4841 	/*
4842 	 * Before proceeding, make sure that the PCIe block does not have
4843 	 * transactions pending.
4844 	 */
4845 	poll = ixgbe_pcie_timeout_poll(hw);
4846 	for (i = 0; i < poll; i++) {
4847 		usec_delay(100);
4848 		value = IXGBE_READ_PCIE_WORD(hw, IXGBE_PCI_DEVICE_STATUS);
4849 		if (IXGBE_REMOVED(hw->hw_addr))
4850 			goto out;
4851 		if (!(value & IXGBE_PCI_DEVICE_STATUS_TRANSACTION_PENDING))
4852 			goto out;
4853 	}
4854 
4855 out:
4856 	/* initiate cleaning flow for buffers in the PCIe transaction layer */
4857 	gcr_ext = IXGBE_READ_REG(hw, IXGBE_GCR_EXT);
4858 	IXGBE_WRITE_REG(hw, IXGBE_GCR_EXT,
4859 			gcr_ext | IXGBE_GCR_EXT_BUFFERS_CLEAR);
4860 
4861 	/* Flush all writes and allow 20usec for all transactions to clear */
4862 	IXGBE_WRITE_FLUSH(hw);
4863 	usec_delay(20);
4864 
4865 	/* restore previous register values */
4866 	IXGBE_WRITE_REG(hw, IXGBE_GCR_EXT, gcr_ext);
4867 	IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg0);
4868 }
4869 
4870 static const u8 ixgbe_emc_temp_data[4] = {
4871 	IXGBE_EMC_INTERNAL_DATA,
4872 	IXGBE_EMC_DIODE1_DATA,
4873 	IXGBE_EMC_DIODE2_DATA,
4874 	IXGBE_EMC_DIODE3_DATA
4875 };
4876 static const u8 ixgbe_emc_therm_limit[4] = {
4877 	IXGBE_EMC_INTERNAL_THERM_LIMIT,
4878 	IXGBE_EMC_DIODE1_THERM_LIMIT,
4879 	IXGBE_EMC_DIODE2_THERM_LIMIT,
4880 	IXGBE_EMC_DIODE3_THERM_LIMIT
4881 };
4882 
4883 /**
4884  * ixgbe_get_thermal_sensor_data - Gathers thermal sensor data
4885  * @hw: pointer to hardware structure
4886  *
4887  * Returns the thermal sensor data structure
4888  **/
4889 s32 ixgbe_get_thermal_sensor_data_generic(struct ixgbe_hw *hw)
4890 {
4891 	s32 status = IXGBE_SUCCESS;
4892 	u16 ets_offset;
4893 	u16 ets_cfg;
4894 	u16 ets_sensor;
4895 	u8  num_sensors;
4896 	u8  sensor_index;
4897 	u8  sensor_location;
4898 	u8  i;
4899 	struct ixgbe_thermal_sensor_data *data = &hw->mac.thermal_sensor_data;
4900 
4901 	DEBUGFUNC("ixgbe_get_thermal_sensor_data_generic");
4902 
4903 	/* Only support thermal sensors attached to 82599 physical port 0 */
4904 	if ((hw->mac.type != ixgbe_mac_82599EB) ||
4905 	    (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)) {
4906 		status = IXGBE_NOT_IMPLEMENTED;
4907 		goto out;
4908 	}
4909 
4910 	status = hw->eeprom.ops.read(hw, IXGBE_ETS_CFG, &ets_offset);
4911 	if (status)
4912 		goto out;
4913 
4914 	if ((ets_offset == 0x0000) || (ets_offset == 0xFFFF)) {
4915 		status = IXGBE_NOT_IMPLEMENTED;
4916 		goto out;
4917 	}
4918 
4919 	status = hw->eeprom.ops.read(hw, ets_offset, &ets_cfg);
4920 	if (status)
4921 		goto out;
4922 
4923 	if (((ets_cfg & IXGBE_ETS_TYPE_MASK) >> IXGBE_ETS_TYPE_SHIFT)
4924 		!= IXGBE_ETS_TYPE_EMC) {
4925 		status = IXGBE_NOT_IMPLEMENTED;
4926 		goto out;
4927 	}
4928 
4929 	num_sensors = (ets_cfg & IXGBE_ETS_NUM_SENSORS_MASK);
4930 	if (num_sensors > IXGBE_MAX_SENSORS)
4931 		num_sensors = IXGBE_MAX_SENSORS;
4932 
4933 	for (i = 0; i < num_sensors; i++) {
4934 		status = hw->eeprom.ops.read(hw, (ets_offset + 1 + i),
4935 					     &ets_sensor);
4936 		if (status)
4937 			goto out;
4938 
4939 		sensor_index = ((ets_sensor & IXGBE_ETS_DATA_INDEX_MASK) >>
4940 				IXGBE_ETS_DATA_INDEX_SHIFT);
4941 		sensor_location = ((ets_sensor & IXGBE_ETS_DATA_LOC_MASK) >>
4942 				   IXGBE_ETS_DATA_LOC_SHIFT);
4943 
4944 		if (sensor_location != 0) {
4945 			status = hw->phy.ops.read_i2c_byte(hw,
4946 					ixgbe_emc_temp_data[sensor_index],
4947 					IXGBE_I2C_THERMAL_SENSOR_ADDR,
4948 					&data->sensor[i].temp);
4949 			if (status)
4950 				goto out;
4951 		}
4952 	}
4953 out:
4954 	return status;
4955 }
4956 
4957 /**
4958  * ixgbe_init_thermal_sensor_thresh_generic - Inits thermal sensor thresholds
4959  * @hw: pointer to hardware structure
4960  *
4961  * Inits the thermal sensor thresholds according to the NVM map
4962  * and save off the threshold and location values into mac.thermal_sensor_data
4963  **/
4964 s32 ixgbe_init_thermal_sensor_thresh_generic(struct ixgbe_hw *hw)
4965 {
4966 	s32 status = IXGBE_SUCCESS;
4967 	u16 offset;
4968 	u16 ets_offset;
4969 	u16 ets_cfg;
4970 	u16 ets_sensor;
4971 	u8  low_thresh_delta;
4972 	u8  num_sensors;
4973 	u8  sensor_index;
4974 	u8  sensor_location;
4975 	u8  therm_limit;
4976 	u8  i;
4977 	struct ixgbe_thermal_sensor_data *data = &hw->mac.thermal_sensor_data;
4978 
4979 	DEBUGFUNC("ixgbe_init_thermal_sensor_thresh_generic");
4980 
4981 	memset(data, 0, sizeof(struct ixgbe_thermal_sensor_data));
4982 
4983 	/* Only support thermal sensors attached to 82599 physical port 0 */
4984 	if ((hw->mac.type != ixgbe_mac_82599EB) ||
4985 	    (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1))
4986 		return IXGBE_NOT_IMPLEMENTED;
4987 
4988 	offset = IXGBE_ETS_CFG;
4989 	if (hw->eeprom.ops.read(hw, offset, &ets_offset))
4990 		goto eeprom_err;
4991 	if ((ets_offset == 0x0000) || (ets_offset == 0xFFFF))
4992 		return IXGBE_NOT_IMPLEMENTED;
4993 
4994 	offset = ets_offset;
4995 	if (hw->eeprom.ops.read(hw, offset, &ets_cfg))
4996 		goto eeprom_err;
4997 	if (((ets_cfg & IXGBE_ETS_TYPE_MASK) >> IXGBE_ETS_TYPE_SHIFT)
4998 		!= IXGBE_ETS_TYPE_EMC)
4999 		return IXGBE_NOT_IMPLEMENTED;
5000 
5001 	low_thresh_delta = ((ets_cfg & IXGBE_ETS_LTHRES_DELTA_MASK) >>
5002 			     IXGBE_ETS_LTHRES_DELTA_SHIFT);
5003 	num_sensors = (ets_cfg & IXGBE_ETS_NUM_SENSORS_MASK);
5004 
5005 	for (i = 0; i < num_sensors; i++) {
5006 		offset = ets_offset + 1 + i;
5007 		if (hw->eeprom.ops.read(hw, offset, &ets_sensor)) {
5008 			ERROR_REPORT2(IXGBE_ERROR_INVALID_STATE,
5009 				      "eeprom read at offset %d failed",
5010 				      offset);
5011 			continue;
5012 		}
5013 		sensor_index = ((ets_sensor & IXGBE_ETS_DATA_INDEX_MASK) >>
5014 				IXGBE_ETS_DATA_INDEX_SHIFT);
5015 		sensor_location = ((ets_sensor & IXGBE_ETS_DATA_LOC_MASK) >>
5016 				   IXGBE_ETS_DATA_LOC_SHIFT);
5017 		therm_limit = ets_sensor & IXGBE_ETS_DATA_HTHRESH_MASK;
5018 
5019 		hw->phy.ops.write_i2c_byte(hw,
5020 			ixgbe_emc_therm_limit[sensor_index],
5021 			IXGBE_I2C_THERMAL_SENSOR_ADDR, therm_limit);
5022 
5023 		if ((i < IXGBE_MAX_SENSORS) && (sensor_location != 0)) {
5024 			data->sensor[i].location = sensor_location;
5025 			data->sensor[i].caution_thresh = therm_limit;
5026 			data->sensor[i].max_op_thresh = therm_limit -
5027 							low_thresh_delta;
5028 		}
5029 	}
5030 	return status;
5031 
5032 eeprom_err:
5033 	ERROR_REPORT2(IXGBE_ERROR_INVALID_STATE,
5034 		      "eeprom read at offset %d failed", offset);
5035 	return IXGBE_NOT_IMPLEMENTED;
5036 }
5037 
5038 /**
5039  * ixgbe_bypass_rw_generic - Bit bang data into by_pass FW
5040  *
5041  * @hw: pointer to hardware structure
5042  * @cmd: Command we send to the FW
5043  * @status: The reply from the FW
5044  *
5045  * Bit-bangs the cmd to the by_pass FW status points to what is returned.
5046  **/
5047 #define IXGBE_BYPASS_BB_WAIT 1
5048 s32 ixgbe_bypass_rw_generic(struct ixgbe_hw *hw, u32 cmd, u32 *status)
5049 {
5050 	int i;
5051 	u32 sck, sdi, sdo, dir_sck, dir_sdi, dir_sdo;
5052 	u32 esdp;
5053 
5054 	if (!status)
5055 		return IXGBE_ERR_PARAM;
5056 
5057 	*status = 0;
5058 
5059 	/* SDP vary by MAC type */
5060 	switch (hw->mac.type) {
5061 	case ixgbe_mac_82599EB:
5062 		sck = IXGBE_ESDP_SDP7;
5063 		sdi = IXGBE_ESDP_SDP0;
5064 		sdo = IXGBE_ESDP_SDP6;
5065 		dir_sck = IXGBE_ESDP_SDP7_DIR;
5066 		dir_sdi = IXGBE_ESDP_SDP0_DIR;
5067 		dir_sdo = IXGBE_ESDP_SDP6_DIR;
5068 		break;
5069 	case ixgbe_mac_X540:
5070 		sck = IXGBE_ESDP_SDP2;
5071 		sdi = IXGBE_ESDP_SDP0;
5072 		sdo = IXGBE_ESDP_SDP1;
5073 		dir_sck = IXGBE_ESDP_SDP2_DIR;
5074 		dir_sdi = IXGBE_ESDP_SDP0_DIR;
5075 		dir_sdo = IXGBE_ESDP_SDP1_DIR;
5076 		break;
5077 	default:
5078 		return IXGBE_ERR_DEVICE_NOT_SUPPORTED;
5079 	}
5080 
5081 	/* Set SDP pins direction */
5082 	esdp = IXGBE_READ_REG(hw, IXGBE_ESDP);
5083 	esdp |= dir_sck;	/* SCK as output */
5084 	esdp |= dir_sdi;	/* SDI as output */
5085 	esdp &= ~dir_sdo;	/* SDO as input */
5086 	esdp |= sck;
5087 	esdp |= sdi;
5088 	IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp);
5089 	IXGBE_WRITE_FLUSH(hw);
5090 	msec_delay(IXGBE_BYPASS_BB_WAIT);
5091 
5092 	/* Generate start condition */
5093 	esdp &= ~sdi;
5094 	IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp);
5095 	IXGBE_WRITE_FLUSH(hw);
5096 	msec_delay(IXGBE_BYPASS_BB_WAIT);
5097 
5098 	esdp &= ~sck;
5099 	IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp);
5100 	IXGBE_WRITE_FLUSH(hw);
5101 	msec_delay(IXGBE_BYPASS_BB_WAIT);
5102 
5103 	/* Clock out the new control word and clock in the status */
5104 	for (i = 0; i < 32; i++) {
5105 		if ((cmd >> (31 - i)) & 0x01) {
5106 			esdp |= sdi;
5107 			IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp);
5108 		} else {
5109 			esdp &= ~sdi;
5110 			IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp);
5111 		}
5112 		IXGBE_WRITE_FLUSH(hw);
5113 		msec_delay(IXGBE_BYPASS_BB_WAIT);
5114 
5115 		esdp |= sck;
5116 		IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp);
5117 		IXGBE_WRITE_FLUSH(hw);
5118 		msec_delay(IXGBE_BYPASS_BB_WAIT);
5119 
5120 		esdp &= ~sck;
5121 		IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp);
5122 		IXGBE_WRITE_FLUSH(hw);
5123 		msec_delay(IXGBE_BYPASS_BB_WAIT);
5124 
5125 		esdp = IXGBE_READ_REG(hw, IXGBE_ESDP);
5126 		if (esdp & sdo)
5127 			*status = (*status << 1) | 0x01;
5128 		else
5129 			*status = (*status << 1) | 0x00;
5130 		msec_delay(IXGBE_BYPASS_BB_WAIT);
5131 	}
5132 
5133 	/* stop condition */
5134 	esdp |= sck;
5135 	esdp &= ~sdi;
5136 	IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp);
5137 	IXGBE_WRITE_FLUSH(hw);
5138 	msec_delay(IXGBE_BYPASS_BB_WAIT);
5139 
5140 	esdp |= sdi;
5141 	IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp);
5142 	IXGBE_WRITE_FLUSH(hw);
5143 
5144 	/* set the page bits to match the cmd that the status it belongs to */
5145 	*status = (*status & 0x3fffffff) | (cmd & 0xc0000000);
5146 
5147 	return IXGBE_SUCCESS;
5148 }
5149 
5150 /**
5151  * ixgbe_bypass_valid_rd_generic - Verify valid return from bit-bang.
5152  *
5153  * If we send a write we can't be sure it took until we can read back
5154  * that same register.  It can be a problem as some of the fields may
5155  * for valid reasons change inbetween the time wrote the register and
5156  * we read it again to verify.  So this function check everything we
5157  * can check and then assumes it worked.
5158  *
5159  * @u32 in_reg - The register cmd for the bit-bang read.
5160  * @u32 out_reg - The register returned from a bit-bang read.
5161  **/
5162 bool ixgbe_bypass_valid_rd_generic(u32 in_reg, u32 out_reg)
5163 {
5164 	u32 mask;
5165 
5166 	/* Page must match for all control pages */
5167 	if ((in_reg & BYPASS_PAGE_M) != (out_reg & BYPASS_PAGE_M))
5168 		return false;
5169 
5170 	switch (in_reg & BYPASS_PAGE_M) {
5171 	case BYPASS_PAGE_CTL0:
5172 		/* All the following can't change since the last write
5173 		 *  - All the event actions
5174 		 *  - The timeout value
5175 		 */
5176 		mask = BYPASS_AUX_ON_M | BYPASS_MAIN_ON_M |
5177 		       BYPASS_MAIN_OFF_M | BYPASS_AUX_OFF_M |
5178 		       BYPASS_WDTIMEOUT_M |
5179 		       BYPASS_WDT_VALUE_M;
5180 		if ((out_reg & mask) != (in_reg & mask))
5181 			return false;
5182 
5183 		/* 0x0 is never a valid value for bypass status */
5184 		if (!(out_reg & BYPASS_STATUS_OFF_M))
5185 			return false;
5186 		break;
5187 	case BYPASS_PAGE_CTL1:
5188 		/* All the following can't change since the last write
5189 		 *  - time valid bit
5190 		 *  - time we last sent
5191 		 */
5192 		mask = BYPASS_CTL1_VALID_M | BYPASS_CTL1_TIME_M;
5193 		if ((out_reg & mask) != (in_reg & mask))
5194 			return false;
5195 		break;
5196 	case BYPASS_PAGE_CTL2:
5197 		/* All we can check in this page is control number
5198 		 * which is already done above.
5199 		 */
5200 		break;
5201 	}
5202 
5203 	/* We are as sure as we can be return true */
5204 	return true;
5205 }
5206 
5207 /**
5208  * ixgbe_bypass_set_generic - Set a bypass field in the FW CTRL Regiter.
5209  *
5210  * @hw: pointer to hardware structure
5211  * @cmd: The control word we are setting.
5212  * @event: The event we are setting in the FW.  This also happens to
5213  *	    be the mask for the event we are setting (handy)
5214  * @action: The action we set the event to in the FW. This is in a
5215  *	     bit field that happens to be what we want to put in
5216  *	     the event spot (also handy)
5217  **/
5218 s32 ixgbe_bypass_set_generic(struct ixgbe_hw *hw, u32 ctrl, u32 event,
5219 			     u32 action)
5220 {
5221 	u32 by_ctl = 0;
5222 	u32 cmd, verify;
5223 	u32 count = 0;
5224 
5225 	/* Get current values */
5226 	cmd = ctrl;	/* just reading only need control number */
5227 	if (ixgbe_bypass_rw_generic(hw, cmd, &by_ctl))
5228 		return IXGBE_ERR_INVALID_ARGUMENT;
5229 
5230 	/* Set to new action */
5231 	cmd = (by_ctl & ~event) | BYPASS_WE | action;
5232 	if (ixgbe_bypass_rw_generic(hw, cmd, &by_ctl))
5233 		return IXGBE_ERR_INVALID_ARGUMENT;
5234 
5235 	/* Page 0 force a FW eeprom write which is slow so verify */
5236 	if ((cmd & BYPASS_PAGE_M) == BYPASS_PAGE_CTL0) {
5237 		verify = BYPASS_PAGE_CTL0;
5238 		do {
5239 			if (count++ > 5)
5240 				return IXGBE_BYPASS_FW_WRITE_FAILURE;
5241 
5242 			if (ixgbe_bypass_rw_generic(hw, verify, &by_ctl))
5243 				return IXGBE_ERR_INVALID_ARGUMENT;
5244 		} while (!ixgbe_bypass_valid_rd_generic(cmd, by_ctl));
5245 	} else {
5246 		/* We have give the FW time for the write to stick */
5247 		msec_delay(100);
5248 	}
5249 
5250 	return IXGBE_SUCCESS;
5251 }
5252 
5253 /**
5254  * ixgbe_bypass_rd_eep_generic - Read the bypass FW eeprom addres.
5255  *
5256  * @hw: pointer to hardware structure
5257  * @addr: The bypass eeprom address to read.
5258  * @value: The 8b of data at the address above.
5259  **/
5260 s32 ixgbe_bypass_rd_eep_generic(struct ixgbe_hw *hw, u32 addr, u8 *value)
5261 {
5262 	u32 cmd;
5263 	u32 status;
5264 
5265 
5266 	/* send the request */
5267 	cmd = BYPASS_PAGE_CTL2 | BYPASS_WE;
5268 	cmd |= (addr << BYPASS_CTL2_OFFSET_SHIFT) & BYPASS_CTL2_OFFSET_M;
5269 	if (ixgbe_bypass_rw_generic(hw, cmd, &status))
5270 		return IXGBE_ERR_INVALID_ARGUMENT;
5271 
5272 	/* We have give the FW time for the write to stick */
5273 	msec_delay(100);
5274 
5275 	/* now read the results */
5276 	cmd &= ~BYPASS_WE;
5277 	if (ixgbe_bypass_rw_generic(hw, cmd, &status))
5278 		return IXGBE_ERR_INVALID_ARGUMENT;
5279 
5280 	*value = status & BYPASS_CTL2_DATA_M;
5281 
5282 	return IXGBE_SUCCESS;
5283 }
5284 
5285 /**
5286  * ixgbe_get_orom_version - Return option ROM from EEPROM
5287  *
5288  * @hw: pointer to hardware structure
5289  * @nvm_ver: pointer to output structure
5290  *
5291  * if valid option ROM version, nvm_ver->or_valid set to true
5292  * else nvm_ver->or_valid is false.
5293  **/
5294 void ixgbe_get_orom_version(struct ixgbe_hw *hw,
5295 			    struct ixgbe_nvm_version *nvm_ver)
5296 {
5297 	u16 offset, eeprom_cfg_blkh, eeprom_cfg_blkl;
5298 
5299 	nvm_ver->or_valid = false;
5300 	/* Option Rom may or may not be present.  Start with pointer */
5301 	hw->eeprom.ops.read(hw, NVM_OROM_OFFSET, &offset);
5302 
5303 	/* make sure offset is valid */
5304 	if ((offset == 0x0) || (offset == NVM_INVALID_PTR))
5305 		return;
5306 
5307 	hw->eeprom.ops.read(hw, offset + NVM_OROM_BLK_HI, &eeprom_cfg_blkh);
5308 	hw->eeprom.ops.read(hw, offset + NVM_OROM_BLK_LOW, &eeprom_cfg_blkl);
5309 
5310 	/* option rom exists and is valid */
5311 	if ((eeprom_cfg_blkl | eeprom_cfg_blkh) == 0x0 ||
5312 	    eeprom_cfg_blkl == NVM_VER_INVALID ||
5313 	    eeprom_cfg_blkh == NVM_VER_INVALID)
5314 		return;
5315 
5316 	nvm_ver->or_valid = true;
5317 	nvm_ver->or_major = eeprom_cfg_blkl >> NVM_OROM_SHIFT;
5318 	nvm_ver->or_build = (eeprom_cfg_blkl << NVM_OROM_SHIFT) |
5319 			    (eeprom_cfg_blkh >> NVM_OROM_SHIFT);
5320 	nvm_ver->or_patch = eeprom_cfg_blkh & NVM_OROM_PATCH_MASK;
5321 }
5322 
5323 /**
5324  * ixgbe_get_oem_prod_version - Return OEM Product version
5325  *
5326  * @hw: pointer to hardware structure
5327  * @nvm_ver: pointer to output structure
5328  *
5329  * if valid OEM product version, nvm_ver->oem_valid set to true
5330  * else nvm_ver->oem_valid is false.
5331  **/
5332 void ixgbe_get_oem_prod_version(struct ixgbe_hw *hw,
5333 				struct ixgbe_nvm_version *nvm_ver)
5334 {
5335 	u16 rel_num, prod_ver, mod_len, cap, offset;
5336 
5337 	nvm_ver->oem_valid = false;
5338 	hw->eeprom.ops.read(hw, NVM_OEM_PROD_VER_PTR, &offset);
5339 
5340 	/* Return if offset to OEM Product Version block is invalid */
5341 	if (offset == 0x0 || offset == NVM_INVALID_PTR)
5342 		return;
5343 
5344 	/* Read product version block */
5345 	hw->eeprom.ops.read(hw, offset, &mod_len);
5346 	hw->eeprom.ops.read(hw, offset + NVM_OEM_PROD_VER_CAP_OFF, &cap);
5347 
5348 	/* Return if OEM product version block is invalid */
5349 	if (mod_len != NVM_OEM_PROD_VER_MOD_LEN ||
5350 	    (cap & NVM_OEM_PROD_VER_CAP_MASK) != 0x0)
5351 		return;
5352 
5353 	hw->eeprom.ops.read(hw, offset + NVM_OEM_PROD_VER_OFF_L, &prod_ver);
5354 	hw->eeprom.ops.read(hw, offset + NVM_OEM_PROD_VER_OFF_H, &rel_num);
5355 
5356 	/* Return if version is invalid */
5357 	if ((rel_num | prod_ver) == 0x0 ||
5358 	    rel_num == NVM_VER_INVALID || prod_ver == NVM_VER_INVALID)
5359 		return;
5360 
5361 	nvm_ver->oem_major = prod_ver >> NVM_VER_SHIFT;
5362 	nvm_ver->oem_minor = prod_ver & NVM_VER_MASK;
5363 	nvm_ver->oem_release = rel_num;
5364 	nvm_ver->oem_valid = true;
5365 }
5366 
5367 /**
5368  * ixgbe_get_etk_id - Return Etrack ID from EEPROM
5369  *
5370  * @hw: pointer to hardware structure
5371  * @nvm_ver: pointer to output structure
5372  *
5373  * word read errors will return 0xFFFF
5374  **/
5375 void ixgbe_get_etk_id(struct ixgbe_hw *hw, struct ixgbe_nvm_version *nvm_ver)
5376 {
5377 	u16 etk_id_l, etk_id_h;
5378 
5379 	if (hw->eeprom.ops.read(hw, NVM_ETK_OFF_LOW, &etk_id_l))
5380 		etk_id_l = NVM_VER_INVALID;
5381 	if (hw->eeprom.ops.read(hw, NVM_ETK_OFF_HI, &etk_id_h))
5382 		etk_id_h = NVM_VER_INVALID;
5383 
5384 	/* The word order for the version format is determined by high order
5385 	 * word bit 15.
5386 	 */
5387 	if ((etk_id_h & NVM_ETK_VALID) == 0) {
5388 		nvm_ver->etk_id = etk_id_h;
5389 		nvm_ver->etk_id |= (etk_id_l << NVM_ETK_SHIFT);
5390 	} else {
5391 		nvm_ver->etk_id = etk_id_l;
5392 		nvm_ver->etk_id |= (etk_id_h << NVM_ETK_SHIFT);
5393 	}
5394 }
5395 
5396 
5397 /**
5398  * ixgbe_dcb_get_rtrup2tc_generic - read rtrup2tc reg
5399  * @hw: pointer to hardware structure
5400  * @map: pointer to u8 arr for returning map
5401  *
5402  * Read the rtrup2tc HW register and resolve its content into map
5403  **/
5404 void ixgbe_dcb_get_rtrup2tc_generic(struct ixgbe_hw *hw, u8 *map)
5405 {
5406 	u32 reg, i;
5407 
5408 	reg = IXGBE_READ_REG(hw, IXGBE_RTRUP2TC);
5409 	for (i = 0; i < IXGBE_DCB_MAX_USER_PRIORITY; i++)
5410 		map[i] = IXGBE_RTRUP2TC_UP_MASK &
5411 			(reg >> (i * IXGBE_RTRUP2TC_UP_SHIFT));
5412 	return;
5413 }
5414 
5415 void ixgbe_disable_rx_generic(struct ixgbe_hw *hw)
5416 {
5417 	u32 pfdtxgswc;
5418 	u32 rxctrl;
5419 
5420 	rxctrl = IXGBE_READ_REG(hw, IXGBE_RXCTRL);
5421 	if (rxctrl & IXGBE_RXCTRL_RXEN) {
5422 		if (hw->mac.type != ixgbe_mac_82598EB) {
5423 			pfdtxgswc = IXGBE_READ_REG(hw, IXGBE_PFDTXGSWC);
5424 			if (pfdtxgswc & IXGBE_PFDTXGSWC_VT_LBEN) {
5425 				pfdtxgswc &= ~IXGBE_PFDTXGSWC_VT_LBEN;
5426 				IXGBE_WRITE_REG(hw, IXGBE_PFDTXGSWC, pfdtxgswc);
5427 				hw->mac.set_lben = true;
5428 			} else {
5429 				hw->mac.set_lben = false;
5430 			}
5431 		}
5432 		rxctrl &= ~IXGBE_RXCTRL_RXEN;
5433 		IXGBE_WRITE_REG(hw, IXGBE_RXCTRL, rxctrl);
5434 	}
5435 }
5436 
5437 void ixgbe_enable_rx_generic(struct ixgbe_hw *hw)
5438 {
5439 	u32 pfdtxgswc;
5440 	u32 rxctrl;
5441 
5442 	rxctrl = IXGBE_READ_REG(hw, IXGBE_RXCTRL);
5443 	IXGBE_WRITE_REG(hw, IXGBE_RXCTRL, (rxctrl | IXGBE_RXCTRL_RXEN));
5444 
5445 	if (hw->mac.type != ixgbe_mac_82598EB) {
5446 		if (hw->mac.set_lben) {
5447 			pfdtxgswc = IXGBE_READ_REG(hw, IXGBE_PFDTXGSWC);
5448 			pfdtxgswc |= IXGBE_PFDTXGSWC_VT_LBEN;
5449 			IXGBE_WRITE_REG(hw, IXGBE_PFDTXGSWC, pfdtxgswc);
5450 			hw->mac.set_lben = false;
5451 		}
5452 	}
5453 }
5454 
5455 /**
5456  * ixgbe_mng_present - returns true when management capability is present
5457  * @hw: pointer to hardware structure
5458  */
5459 bool ixgbe_mng_present(struct ixgbe_hw *hw)
5460 {
5461 	u32 fwsm;
5462 
5463 	if (hw->mac.type < ixgbe_mac_82599EB)
5464 		return false;
5465 
5466 	fwsm = IXGBE_READ_REG(hw, IXGBE_FWSM_BY_MAC(hw));
5467 
5468 	return !!(fwsm & IXGBE_FWSM_FW_MODE_PT);
5469 }
5470 
5471 /**
5472  * ixgbe_mng_enabled - Is the manageability engine enabled?
5473  * @hw: pointer to hardware structure
5474  *
5475  * Returns true if the manageability engine is enabled.
5476  **/
5477 bool ixgbe_mng_enabled(struct ixgbe_hw *hw)
5478 {
5479 	u32 fwsm, manc, factps;
5480 
5481 	fwsm = IXGBE_READ_REG(hw, IXGBE_FWSM_BY_MAC(hw));
5482 	if ((fwsm & IXGBE_FWSM_MODE_MASK) != IXGBE_FWSM_FW_MODE_PT)
5483 		return false;
5484 
5485 	manc = IXGBE_READ_REG(hw, IXGBE_MANC);
5486 	if (!(manc & IXGBE_MANC_RCV_TCO_EN))
5487 		return false;
5488 
5489 	if (hw->mac.type <= ixgbe_mac_X540) {
5490 		factps = IXGBE_READ_REG(hw, IXGBE_FACTPS_BY_MAC(hw));
5491 		if (factps & IXGBE_FACTPS_MNGCG)
5492 			return false;
5493 	}
5494 
5495 	return true;
5496 }
5497 
5498 /**
5499  * ixgbe_setup_mac_link_multispeed_fiber - Set MAC link speed
5500  * @hw: pointer to hardware structure
5501  * @speed: new link speed
5502  * @autoneg_wait_to_complete: true when waiting for completion is needed
5503  *
5504  * Set the link speed in the MAC and/or PHY register and restarts link.
5505  **/
5506 s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
5507 					  ixgbe_link_speed speed,
5508 					  bool autoneg_wait_to_complete)
5509 {
5510 	ixgbe_link_speed link_speed = IXGBE_LINK_SPEED_UNKNOWN;
5511 	ixgbe_link_speed highest_link_speed = IXGBE_LINK_SPEED_UNKNOWN;
5512 	s32 status = IXGBE_SUCCESS;
5513 	u32 speedcnt = 0;
5514 	u32 i = 0;
5515 	bool autoneg, link_up = false;
5516 
5517 	DEBUGFUNC("ixgbe_setup_mac_link_multispeed_fiber");
5518 
5519 	/* Mask off requested but non-supported speeds */
5520 	status = ixgbe_get_link_capabilities(hw, &link_speed, &autoneg);
5521 	if (status != IXGBE_SUCCESS)
5522 		return status;
5523 
5524 	speed &= link_speed;
5525 
5526 	/* Try each speed one by one, highest priority first.  We do this in
5527 	 * software because 10Gb fiber doesn't support speed autonegotiation.
5528 	 */
5529 	if (speed & IXGBE_LINK_SPEED_10GB_FULL) {
5530 		speedcnt++;
5531 		highest_link_speed = IXGBE_LINK_SPEED_10GB_FULL;
5532 
5533 		/* Set the module link speed */
5534 		switch (hw->phy.media_type) {
5535 		case ixgbe_media_type_fiber_fixed:
5536 		case ixgbe_media_type_fiber:
5537 			ixgbe_set_rate_select_speed(hw,
5538 						    IXGBE_LINK_SPEED_10GB_FULL);
5539 			break;
5540 		case ixgbe_media_type_fiber_qsfp:
5541 			/* QSFP module automatically detects MAC link speed */
5542 			break;
5543 		default:
5544 			DEBUGOUT("Unexpected media type.\n");
5545 			break;
5546 		}
5547 
5548 		/* Allow module to change analog characteristics (1G->10G) */
5549 		msec_delay(40);
5550 
5551 		status = ixgbe_setup_mac_link(hw,
5552 					      IXGBE_LINK_SPEED_10GB_FULL,
5553 					      autoneg_wait_to_complete);
5554 		if (status != IXGBE_SUCCESS)
5555 			return status;
5556 
5557 		/* Flap the Tx laser if it has not already been done */
5558 		ixgbe_flap_tx_laser(hw);
5559 
5560 		/* Wait for the controller to acquire link.  Per IEEE 802.3ap,
5561 		 * Section 73.10.2, we may have to wait up to 1000ms if KR is
5562 		 * attempted.  82599 uses the same timing for 10g SFI.
5563 		 */
5564 		for (i = 0; i < 10; i++) {
5565 			/* Wait for the link partner to also set speed */
5566 			msec_delay(100);
5567 
5568 			/* If we have link, just jump out */
5569 			status = ixgbe_check_link(hw, &link_speed,
5570 						  &link_up, false);
5571 			if (status != IXGBE_SUCCESS)
5572 				return status;
5573 
5574 			if (link_up)
5575 				goto out;
5576 		}
5577 	}
5578 
5579 	if (speed & IXGBE_LINK_SPEED_1GB_FULL) {
5580 		speedcnt++;
5581 		if (highest_link_speed == IXGBE_LINK_SPEED_UNKNOWN)
5582 			highest_link_speed = IXGBE_LINK_SPEED_1GB_FULL;
5583 
5584 		/* Set the module link speed */
5585 		switch (hw->phy.media_type) {
5586 		case ixgbe_media_type_fiber_fixed:
5587 		case ixgbe_media_type_fiber:
5588 			ixgbe_set_rate_select_speed(hw,
5589 						    IXGBE_LINK_SPEED_1GB_FULL);
5590 			break;
5591 		case ixgbe_media_type_fiber_qsfp:
5592 			/* QSFP module automatically detects link speed */
5593 			break;
5594 		default:
5595 			DEBUGOUT("Unexpected media type.\n");
5596 			break;
5597 		}
5598 
5599 		/* Allow module to change analog characteristics (10G->1G) */
5600 		msec_delay(40);
5601 
5602 		status = ixgbe_setup_mac_link(hw,
5603 					      IXGBE_LINK_SPEED_1GB_FULL,
5604 					      autoneg_wait_to_complete);
5605 		if (status != IXGBE_SUCCESS)
5606 			return status;
5607 
5608 		/* Flap the Tx laser if it has not already been done */
5609 		ixgbe_flap_tx_laser(hw);
5610 
5611 		/* Wait for the link partner to also set speed */
5612 		msec_delay(100);
5613 
5614 		/* If we have link, just jump out */
5615 		status = ixgbe_check_link(hw, &link_speed, &link_up, false);
5616 		if (status != IXGBE_SUCCESS)
5617 			return status;
5618 
5619 		if (link_up)
5620 			goto out;
5621 	}
5622 
5623 	/* We didn't get link.  Configure back to the highest speed we tried,
5624 	 * (if there was more than one).  We call ourselves back with just the
5625 	 * single highest speed that the user requested.
5626 	 */
5627 	if (speedcnt > 1)
5628 		status = ixgbe_setup_mac_link_multispeed_fiber(hw,
5629 						      highest_link_speed,
5630 						      autoneg_wait_to_complete);
5631 
5632 out:
5633 	/* Set autoneg_advertised value based on input link speed */
5634 	hw->phy.autoneg_advertised = 0;
5635 
5636 	if (speed & IXGBE_LINK_SPEED_10GB_FULL)
5637 		hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_10GB_FULL;
5638 
5639 	if (speed & IXGBE_LINK_SPEED_1GB_FULL)
5640 		hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_1GB_FULL;
5641 
5642 	return status;
5643 }
5644 
5645 /**
5646  * ixgbe_set_soft_rate_select_speed - Set module link speed
5647  * @hw: pointer to hardware structure
5648  * @speed: link speed to set
5649  *
5650  * Set module link speed via the soft rate select.
5651  */
5652 void ixgbe_set_soft_rate_select_speed(struct ixgbe_hw *hw,
5653 					ixgbe_link_speed speed)
5654 {
5655 	s32 status;
5656 	u8 rs, eeprom_data;
5657 
5658 	switch (speed) {
5659 	case IXGBE_LINK_SPEED_10GB_FULL:
5660 		/* one bit mask same as setting on */
5661 		rs = IXGBE_SFF_SOFT_RS_SELECT_10G;
5662 		break;
5663 	case IXGBE_LINK_SPEED_1GB_FULL:
5664 		rs = IXGBE_SFF_SOFT_RS_SELECT_1G;
5665 		break;
5666 	default:
5667 		DEBUGOUT("Invalid fixed module speed\n");
5668 		return;
5669 	}
5670 
5671 	/* Set RS0 */
5672 	status = hw->phy.ops.read_i2c_byte(hw, IXGBE_SFF_SFF_8472_OSCB,
5673 					   IXGBE_I2C_EEPROM_DEV_ADDR2,
5674 					   &eeprom_data);
5675 	if (status) {
5676 		DEBUGOUT("Failed to read Rx Rate Select RS0\n");
5677 		goto out;
5678 	}
5679 
5680 	eeprom_data = (eeprom_data & ~IXGBE_SFF_SOFT_RS_SELECT_MASK) | rs;
5681 
5682 	status = hw->phy.ops.write_i2c_byte(hw, IXGBE_SFF_SFF_8472_OSCB,
5683 					    IXGBE_I2C_EEPROM_DEV_ADDR2,
5684 					    eeprom_data);
5685 	if (status) {
5686 		DEBUGOUT("Failed to write Rx Rate Select RS0\n");
5687 		goto out;
5688 	}
5689 
5690 	/* Set RS1 */
5691 	status = hw->phy.ops.read_i2c_byte(hw, IXGBE_SFF_SFF_8472_ESCB,
5692 					   IXGBE_I2C_EEPROM_DEV_ADDR2,
5693 					   &eeprom_data);
5694 	if (status) {
5695 		DEBUGOUT("Failed to read Rx Rate Select RS1\n");
5696 		goto out;
5697 	}
5698 
5699 	eeprom_data = (eeprom_data & ~IXGBE_SFF_SOFT_RS_SELECT_MASK) | rs;
5700 
5701 	status = hw->phy.ops.write_i2c_byte(hw, IXGBE_SFF_SFF_8472_ESCB,
5702 					    IXGBE_I2C_EEPROM_DEV_ADDR2,
5703 					    eeprom_data);
5704 	if (status) {
5705 		DEBUGOUT("Failed to write Rx Rate Select RS1\n");
5706 		goto out;
5707 	}
5708 out:
5709 	return;
5710 }
5711