xref: /titanic_41/usr/src/uts/common/io/ixgbe/ixgbe_82599.c (revision 2f172c55ef76964744bc62b4500ece87f3089b4d)
1 /*
2  * CDDL HEADER START
3  *
4  * Copyright(c) 2007-2009 Intel Corporation. All rights reserved.
5  * The contents of this file are subject to the terms of the
6  * Common Development and Distribution License (the "License").
7  * You may not use this file except in compliance with the License.
8  *
9  * You can obtain a copy of the license at:
10  *      http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When using or redistributing this file, you may do so under the
15  * License only. No other modification of this header is permitted.
16  *
17  * If applicable, add the following below this CDDL HEADER, with the
18  * fields enclosed by brackets "[]" replaced with your own identifying
19  * information: Portions Copyright [yyyy] [name of copyright owner]
20  *
21  * CDDL HEADER END
22  */
23 
24 /*
25  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
26  * Use is subject to license terms.
27  */
28 
29 /* IntelVersion: 1.197 scm_100309_002210 */
30 
31 #include "ixgbe_type.h"
32 #include "ixgbe_api.h"
33 #include "ixgbe_common.h"
34 #include "ixgbe_phy.h"
35 
36 s32 ixgbe_init_ops_82599(struct ixgbe_hw *hw);
37 s32 ixgbe_get_link_capabilities_82599(struct ixgbe_hw *hw,
38     ixgbe_link_speed *speed, bool *autoneg);
39 enum ixgbe_media_type ixgbe_get_media_type_82599(struct ixgbe_hw *hw);
40 s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
41     ixgbe_link_speed speed, bool autoneg, bool autoneg_wait_to_complete);
42 s32 ixgbe_setup_mac_link_smartspeed(struct ixgbe_hw *hw,
43     ixgbe_link_speed speed, bool autoneg, bool autoneg_wait_to_complete);
44 s32 ixgbe_start_mac_link_82599(struct ixgbe_hw *hw,
45     bool autoneg_wait_to_complete);
46 s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw,
47     ixgbe_link_speed speed, bool autoneg,
48     bool autoneg_wait_to_complete);
49 static s32 ixgbe_setup_copper_link_82599(struct ixgbe_hw *hw,
50     ixgbe_link_speed speed, bool autoneg,
51     bool autoneg_wait_to_complete);
52 s32 ixgbe_setup_sfp_modules_82599(struct ixgbe_hw *hw);
53 void ixgbe_init_mac_link_ops_82599(struct ixgbe_hw *hw);
54 s32 ixgbe_reset_hw_82599(struct ixgbe_hw *hw);
55 s32 ixgbe_read_analog_reg8_82599(struct ixgbe_hw *hw, u32 reg, u8 *val);
56 s32 ixgbe_write_analog_reg8_82599(struct ixgbe_hw *hw, u32 reg, u8 val);
57 s32 ixgbe_start_hw_rev_1_82599(struct ixgbe_hw *hw);
58 s32 ixgbe_identify_phy_82599(struct ixgbe_hw *hw);
59 s32 ixgbe_init_phy_ops_82599(struct ixgbe_hw *hw);
60 u32 ixgbe_get_supported_physical_layer_82599(struct ixgbe_hw *hw);
61 s32 ixgbe_enable_rx_dma_82599(struct ixgbe_hw *hw, u32 regval);
62 s32 ixgbe_get_device_caps_82599(struct ixgbe_hw *hw, u16 *device_caps);
63 static s32 ixgbe_verify_fw_version_82599(struct ixgbe_hw *hw);
64 
65 void
66 ixgbe_init_mac_link_ops_82599(struct ixgbe_hw *hw)
67 {
68 	struct ixgbe_mac_info *mac = &hw->mac;
69 
70 	DEBUGFUNC("ixgbe_init_mac_link_ops_82599");
71 
72 	if (hw->phy.multispeed_fiber) {
73 		/* Set up dual speed SFP+ support */
74 		mac->ops.setup_link = &ixgbe_setup_mac_link_multispeed_fiber;
75 	} else {
76 		if ((ixgbe_get_media_type(hw) == ixgbe_media_type_backplane) &&
77 		    (hw->phy.smart_speed == ixgbe_smart_speed_auto ||
78 		    hw->phy.smart_speed == ixgbe_smart_speed_on))
79 			mac->ops.setup_link = &ixgbe_setup_mac_link_smartspeed;
80 		else
81 			mac->ops.setup_link = &ixgbe_setup_mac_link_82599;
82 	}
83 }
84 
85 /*
86  * ixgbe_init_phy_ops_82599 - PHY/SFP specific init
87  * @hw: pointer to hardware structure
88  *
89  * Initialize any function pointers that were not able to be
90  * set during init_shared_code because the PHY/SFP type was
91  * not known.  Perform the SFP init if necessary.
92  *
93  */
94 s32
95 ixgbe_init_phy_ops_82599(struct ixgbe_hw *hw)
96 {
97 	struct ixgbe_mac_info *mac = &hw->mac;
98 	struct ixgbe_phy_info *phy = &hw->phy;
99 	s32 ret_val = IXGBE_SUCCESS;
100 
101 	DEBUGFUNC("ixgbe_init_phy_ops_82599");
102 
103 	/* Identify the PHY or SFP module */
104 	ret_val = phy->ops.identify(hw);
105 	if (ret_val == IXGBE_ERR_SFP_NOT_SUPPORTED)
106 		goto init_phy_ops_out;
107 
108 	/* Setup function pointers based on detected SFP module and speeds */
109 	ixgbe_init_mac_link_ops_82599(hw);
110 	if (hw->phy.sfp_type != ixgbe_sfp_type_unknown)
111 		hw->phy.ops.reset = NULL;
112 
113 	/* If copper media, overwrite with copper function pointers */
114 	if (mac->ops.get_media_type(hw) == ixgbe_media_type_copper) {
115 		mac->ops.setup_link = &ixgbe_setup_copper_link_82599;
116 		mac->ops.get_link_capabilities =
117 		    &ixgbe_get_copper_link_capabilities_generic;
118 	}
119 
120 	/* Set necessary function pointers based on phy type */
121 	switch (hw->phy.type) {
122 	case ixgbe_phy_tn:
123 		phy->ops.check_link = &ixgbe_check_phy_link_tnx;
124 		phy->ops.get_firmware_version =
125 		    &ixgbe_get_phy_firmware_version_tnx;
126 		break;
127 	case ixgbe_phy_aq:
128 		phy->ops.get_firmware_version =
129 		    &ixgbe_get_phy_firmware_version_generic;
130 		break;
131 	default:
132 		break;
133 	}
134 
135 init_phy_ops_out:
136 	return (ret_val);
137 }
138 
139 s32
140 ixgbe_setup_sfp_modules_82599(struct ixgbe_hw *hw)
141 {
142 	s32 ret_val = IXGBE_SUCCESS;
143 	u16 list_offset, data_offset, data_value;
144 
145 	DEBUGFUNC("ixgbe_setup_sfp_modules_82599");
146 
147 	if (hw->phy.sfp_type != ixgbe_sfp_type_unknown) {
148 		ixgbe_init_mac_link_ops_82599(hw);
149 
150 		hw->phy.ops.reset = NULL;
151 
152 		ret_val = ixgbe_get_sfp_init_sequence_offsets(hw, &list_offset,
153 		    &data_offset);
154 
155 		if (ret_val != IXGBE_SUCCESS)
156 			goto setup_sfp_out;
157 
158 		/* PHY config will finish before releasing the semaphore */
159 		ret_val = ixgbe_acquire_swfw_sync(hw, IXGBE_GSSR_MAC_CSR_SM);
160 		if (ret_val != IXGBE_SUCCESS) {
161 			ret_val = IXGBE_ERR_SWFW_SYNC;
162 			goto setup_sfp_out;
163 		}
164 
165 		hw->eeprom.ops.read(hw, ++data_offset, &data_value);
166 		while (data_value != 0xffff) {
167 			IXGBE_WRITE_REG(hw, IXGBE_CORECTL, data_value);
168 			IXGBE_WRITE_FLUSH(hw);
169 			hw->eeprom.ops.read(hw, ++data_offset, &data_value);
170 		}
171 		/* Now restart DSP by setting Restart_AN */
172 		IXGBE_WRITE_REG(hw, IXGBE_AUTOC,
173 		    (IXGBE_READ_REG(hw, IXGBE_AUTOC) | IXGBE_AUTOC_AN_RESTART));
174 
175 		/* Release the semaphore */
176 		ixgbe_release_swfw_sync(hw, IXGBE_GSSR_MAC_CSR_SM);
177 		/* Delay obtaining semaphore again to allow FW access */
178 		msec_delay(hw->eeprom.semaphore_delay);
179 	}
180 
181 setup_sfp_out:
182 	return (ret_val);
183 }
184 
185 /*
186  * ixgbe_init_ops_82599 - Inits func ptrs and MAC type
187  * @hw: pointer to hardware structure
188  *
189  * Initialize the function pointers and assign the MAC type for 82599.
190  * Does not touch the hardware.
191  */
192 
193 s32
194 ixgbe_init_ops_82599(struct ixgbe_hw *hw)
195 {
196 	struct ixgbe_mac_info *mac = &hw->mac;
197 	struct ixgbe_phy_info *phy = &hw->phy;
198 	s32 ret_val;
199 
200 	DEBUGFUNC("ixgbe_init_ops_82599");
201 
202 	ret_val = ixgbe_init_phy_ops_generic(hw);
203 	ret_val = ixgbe_init_ops_generic(hw);
204 
205 	/* PHY */
206 	phy->ops.identify = &ixgbe_identify_phy_82599;
207 	phy->ops.init = &ixgbe_init_phy_ops_82599;
208 
209 	/* MAC */
210 	mac->ops.reset_hw = &ixgbe_reset_hw_82599;
211 	mac->ops.get_media_type = &ixgbe_get_media_type_82599;
212 	mac->ops.get_supported_physical_layer =
213 	    &ixgbe_get_supported_physical_layer_82599;
214 	mac->ops.enable_rx_dma = &ixgbe_enable_rx_dma_82599;
215 	mac->ops.read_analog_reg8 = &ixgbe_read_analog_reg8_82599;
216 	mac->ops.write_analog_reg8 = &ixgbe_write_analog_reg8_82599;
217 	mac->ops.start_hw = &ixgbe_start_hw_rev_1_82599;
218 	mac->ops.get_san_mac_addr = &ixgbe_get_san_mac_addr_generic;
219 	mac->ops.set_san_mac_addr = &ixgbe_set_san_mac_addr_generic;
220 	mac->ops.get_device_caps = &ixgbe_get_device_caps_82599;
221 	mac->ops.get_wwn_prefix = &ixgbe_get_wwn_prefix_generic;
222 
223 	/* RAR, Multicast, VLAN */
224 	mac->ops.set_vmdq = &ixgbe_set_vmdq_generic;
225 	mac->ops.clear_vmdq = &ixgbe_clear_vmdq_generic;
226 	mac->ops.insert_mac_addr = &ixgbe_insert_mac_addr_generic;
227 	mac->rar_highwater = 1;
228 	mac->ops.set_vfta = &ixgbe_set_vfta_generic;
229 	mac->ops.clear_vfta = &ixgbe_clear_vfta_generic;
230 	mac->ops.init_uta_tables = &ixgbe_init_uta_tables_generic;
231 	mac->ops.setup_sfp = &ixgbe_setup_sfp_modules_82599;
232 
233 	/* Link */
234 	mac->ops.get_link_capabilities = &ixgbe_get_link_capabilities_82599;
235 	mac->ops.check_link = &ixgbe_check_mac_link_generic;
236 	ixgbe_init_mac_link_ops_82599(hw);
237 
238 	mac->mcft_size = 128;
239 	mac->vft_size = 128;
240 	mac->num_rar_entries = 128;
241 	mac->max_tx_queues = 128;
242 	mac->max_rx_queues = 128;
243 	mac->max_msix_vectors = ixgbe_get_pcie_msix_count_generic(hw);
244 
245 	return (ret_val);
246 }
247 
248 /*
249  * ixgbe_get_link_capabilities_82599 - Determines link capabilities
250  * @hw: pointer to hardware structure
251  * @speed: pointer to link speed
252  * @negotiation: true when autoneg or autotry is enabled
253  *
254  * Determines the link capabilities by reading the AUTOC register.
255  */
256 s32
257 ixgbe_get_link_capabilities_82599(struct ixgbe_hw *hw,
258     ixgbe_link_speed *speed, bool *negotiation)
259 {
260 	s32 status = IXGBE_SUCCESS;
261 	u32 autoc = 0;
262 
263 	DEBUGFUNC("ixgbe_get_link_capabilities_82599");
264 
265 	/*
266 	 * Determine link capabilities based on the stored value of AUTOC,
267 	 * which represents EEPROM defaults.  If AUTOC value has not
268 	 * been stored, use the current register values.
269 	 */
270 	if (hw->mac.orig_link_settings_stored)
271 		autoc = hw->mac.orig_autoc;
272 	else
273 		autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
274 
275 	switch (autoc & IXGBE_AUTOC_LMS_MASK) {
276 	case IXGBE_AUTOC_LMS_1G_LINK_NO_AN:
277 		*speed = IXGBE_LINK_SPEED_1GB_FULL;
278 		*negotiation = false;
279 		break;
280 
281 	case IXGBE_AUTOC_LMS_10G_LINK_NO_AN:
282 		*speed = IXGBE_LINK_SPEED_10GB_FULL;
283 		*negotiation = false;
284 		break;
285 
286 	case IXGBE_AUTOC_LMS_1G_AN:
287 		*speed = IXGBE_LINK_SPEED_1GB_FULL;
288 		*negotiation = true;
289 		break;
290 
291 	case IXGBE_AUTOC_LMS_10G_SERIAL:
292 		*speed = IXGBE_LINK_SPEED_10GB_FULL;
293 		*negotiation = false;
294 		break;
295 
296 	case IXGBE_AUTOC_LMS_KX4_KX_KR:
297 	case IXGBE_AUTOC_LMS_KX4_KX_KR_1G_AN:
298 		*speed = IXGBE_LINK_SPEED_UNKNOWN;
299 		if (autoc & IXGBE_AUTOC_KR_SUPP)
300 			*speed |= IXGBE_LINK_SPEED_10GB_FULL;
301 		if (autoc & IXGBE_AUTOC_KX4_SUPP)
302 			*speed |= IXGBE_LINK_SPEED_10GB_FULL;
303 		if (autoc & IXGBE_AUTOC_KX_SUPP)
304 			*speed |= IXGBE_LINK_SPEED_1GB_FULL;
305 		*negotiation = true;
306 		break;
307 
308 	case IXGBE_AUTOC_LMS_KX4_KX_KR_SGMII:
309 		*speed = IXGBE_LINK_SPEED_100_FULL;
310 		if (autoc & IXGBE_AUTOC_KR_SUPP)
311 			*speed |= IXGBE_LINK_SPEED_10GB_FULL;
312 		if (autoc & IXGBE_AUTOC_KX4_SUPP)
313 			*speed |= IXGBE_LINK_SPEED_10GB_FULL;
314 		if (autoc & IXGBE_AUTOC_KX_SUPP)
315 			*speed |= IXGBE_LINK_SPEED_1GB_FULL;
316 		*negotiation = true;
317 		break;
318 
319 	case IXGBE_AUTOC_LMS_SGMII_1G_100M:
320 		*speed = IXGBE_LINK_SPEED_1GB_FULL | IXGBE_LINK_SPEED_100_FULL;
321 		*negotiation = false;
322 		break;
323 
324 	default:
325 		status = IXGBE_ERR_LINK_SETUP;
326 		goto out;
327 	}
328 
329 	if (hw->phy.multispeed_fiber) {
330 		*speed |= IXGBE_LINK_SPEED_10GB_FULL |
331 		    IXGBE_LINK_SPEED_1GB_FULL;
332 		*negotiation = true;
333 	}
334 
335 out:
336 	return (status);
337 }
338 
339 /*
340  * ixgbe_get_media_type_82599 - Get media type
341  * @hw: pointer to hardware structure
342  *
343  * Returns the media type (fiber, copper, backplane)
344  */
345 enum ixgbe_media_type
346 ixgbe_get_media_type_82599(struct ixgbe_hw *hw)
347 {
348 	enum ixgbe_media_type media_type;
349 
350 	DEBUGFUNC("ixgbe_get_media_type_82599");
351 
352 	/* Detect if there is a copper PHY attached. */
353 	if (hw->phy.type == ixgbe_phy_cu_unknown ||
354 	    hw->phy.type == ixgbe_phy_tn ||
355 	    hw->phy.type == ixgbe_phy_aq) {
356 		media_type = ixgbe_media_type_copper;
357 		goto out;
358 	}
359 
360 	switch (hw->device_id) {
361 	case IXGBE_DEV_ID_82599_KX4:
362 	case IXGBE_DEV_ID_82599_KX4_MEZZ:
363 	case IXGBE_DEV_ID_82599_COMBO_BACKPLANE:
364 	case IXGBE_DEV_ID_82599_XAUI_LOM:
365 		/* Default device ID is mezzanine card KX/KX4 */
366 		media_type = ixgbe_media_type_backplane;
367 		break;
368 	case IXGBE_DEV_ID_82599_SFP:
369 	case IXGBE_DEV_ID_82599_SFP_EM:
370 		media_type = ixgbe_media_type_fiber;
371 		break;
372 	case IXGBE_DEV_ID_82599_CX4:
373 		media_type = ixgbe_media_type_cx4;
374 		break;
375 	default:
376 		media_type = ixgbe_media_type_unknown;
377 		break;
378 	}
379 out:
380 	return (media_type);
381 }
382 
383 /*
384  * ixgbe_start_mac_link_82599 - Setup MAC link settings
385  * @hw: pointer to hardware structure
386  *
387  * Configures link settings based on values in the ixgbe_hw struct.
388  * Restarts the link.  Performs autonegotiation if needed.
389  */
390 s32
391 ixgbe_start_mac_link_82599(struct ixgbe_hw *hw, bool autoneg_wait_to_complete)
392 {
393 	u32 autoc_reg;
394 	u32 links_reg;
395 	u32 i;
396 	s32 status = IXGBE_SUCCESS;
397 
398 	DEBUGFUNC("ixgbe_start_mac_link_82599");
399 
400 	/* Restart link */
401 	autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
402 	autoc_reg |= IXGBE_AUTOC_AN_RESTART;
403 	IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc_reg);
404 
405 	/* Only poll for autoneg to complete if specified to do so */
406 	if (autoneg_wait_to_complete) {
407 		if ((autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
408 		    IXGBE_AUTOC_LMS_KX4_KX_KR ||
409 		    (autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
410 		    IXGBE_AUTOC_LMS_KX4_KX_KR_1G_AN ||
411 		    (autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
412 		    IXGBE_AUTOC_LMS_KX4_KX_KR_SGMII) {
413 			links_reg = 0; /* Just in case Autoneg time = 0 */
414 			for (i = 0; i < IXGBE_AUTO_NEG_TIME; i++) {
415 				links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
416 				if (links_reg & IXGBE_LINKS_KX_AN_COMP)
417 					break;
418 				msec_delay(100);
419 			}
420 			if (!(links_reg & IXGBE_LINKS_KX_AN_COMP)) {
421 				status = IXGBE_ERR_AUTONEG_NOT_COMPLETE;
422 				DEBUGOUT("Autoneg did not complete.\n");
423 			}
424 		}
425 	}
426 
427 	/* Add delay to filter out noises during initial link setup */
428 	msec_delay(50);
429 
430 	return (status);
431 }
432 
433 /*
434  * ixgbe_setup_mac_link_multispeed_fiber - Set MAC link speed
435  * @hw: pointer to hardware structure
436  * @speed: new link speed
437  * @autoneg: true if autonegotiation enabled
438  * @autoneg_wait_to_complete: true when waiting for completion is needed
439  *
440  * Set the link speed in the AUTOC register and restarts link.
441  */
442 s32
443 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
444     ixgbe_link_speed speed, bool autoneg, bool autoneg_wait_to_complete)
445 {
446 	s32 status = IXGBE_SUCCESS;
447 	ixgbe_link_speed link_speed;
448 	ixgbe_link_speed highest_link_speed = IXGBE_LINK_SPEED_UNKNOWN;
449 	u32 speedcnt = 0;
450 	u32 esdp_reg = IXGBE_READ_REG(hw, IXGBE_ESDP);
451 	u32 i = 0;
452 	bool link_up = false;
453 	bool negotiation;
454 
455 	DEBUGFUNC("ixgbe_setup_mac_link_multispeed_fiber");
456 
457 	/* Mask off requested but non-supported speeds */
458 	status = ixgbe_get_link_capabilities(hw, &link_speed, &negotiation);
459 	if (status != IXGBE_SUCCESS)
460 		return (status);
461 
462 	speed &= link_speed;
463 
464 	/*
465 	 * When the driver changes the link speeds that it can support,
466 	 * it sets autotry_restart to true to indicate that we need to
467 	 * initiate a new autotry session with the link partner.  To do
468 	 * so, we set the speed then disable and re-enable the tx laser, to
469 	 * alert the link partner that it also needs to restart autotry on its
470 	 * end.  This is consistent with true clause 37 autoneg, which also
471 	 * involves a loss of signal.
472 	 */
473 
474 	/*
475 	 * Try each speed one by one, highest priority first.  We do this in
476 	 * software because 10gb fiber doesn't support speed autonegotiation.
477 	 */
478 	if (speed & IXGBE_LINK_SPEED_10GB_FULL) {
479 		speedcnt++;
480 		highest_link_speed = IXGBE_LINK_SPEED_10GB_FULL;
481 
482 		/* If we already have link at this speed, just jump out */
483 		status = ixgbe_check_link(hw, &link_speed, &link_up, false);
484 		if (status != IXGBE_SUCCESS)
485 			return (status);
486 
487 		if ((link_speed == IXGBE_LINK_SPEED_10GB_FULL) && link_up)
488 			goto out;
489 
490 		/* Set the module link speed */
491 		esdp_reg |= (IXGBE_ESDP_SDP5_DIR | IXGBE_ESDP_SDP5);
492 		IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp_reg);
493 
494 		/* Allow module to change analog characteristics (1G->10G) */
495 		msec_delay(40);
496 
497 		status = ixgbe_setup_mac_link_82599(
498 		    hw, IXGBE_LINK_SPEED_10GB_FULL, autoneg,
499 		    autoneg_wait_to_complete);
500 		if (status != IXGBE_SUCCESS)
501 			return (status);
502 
503 		/* Flap the tx laser if it has not already been done */
504 		if (hw->mac.autotry_restart) {
505 			/* Disable tx laser; allow 100us to go dark per spec */
506 			esdp_reg |= IXGBE_ESDP_SDP3;
507 			IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp_reg);
508 			usec_delay(100);
509 
510 			/* Enable tx laser; allow 2ms to light up per spec */
511 			esdp_reg &= ~IXGBE_ESDP_SDP3;
512 			IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp_reg);
513 			msec_delay(2);
514 
515 			hw->mac.autotry_restart = false;
516 		}
517 
518 		/*
519 		 * Wait for the controller to acquire link.  Per IEEE 802.3ap,
520 		 * Section 73.10.2, we may have to wait up to 500ms if KR is
521 		 * attempted.  82599 uses the same timing for 10g SFI.
522 		 */
523 		for (i = 0; i < 5; i++) {
524 			/* Wait for the link partner to also set speed */
525 			msec_delay(100);
526 
527 			/* If we have link, just jump out */
528 			status = ixgbe_check_link(hw, &link_speed,
529 			    &link_up, false);
530 			if (status != IXGBE_SUCCESS)
531 				return (status);
532 
533 			if (link_up)
534 				goto out;
535 		}
536 	}
537 
538 	if (speed & IXGBE_LINK_SPEED_1GB_FULL) {
539 		speedcnt++;
540 		if (highest_link_speed == IXGBE_LINK_SPEED_UNKNOWN)
541 			highest_link_speed = IXGBE_LINK_SPEED_1GB_FULL;
542 
543 		/* If we already have link at this speed, just jump out */
544 		status = ixgbe_check_link(hw, &link_speed, &link_up, false);
545 		if (status != IXGBE_SUCCESS)
546 			return (status);
547 
548 		if ((link_speed == IXGBE_LINK_SPEED_1GB_FULL) && link_up)
549 			goto out;
550 
551 		/* Set the module link speed */
552 		esdp_reg &= ~IXGBE_ESDP_SDP5;
553 		esdp_reg |= IXGBE_ESDP_SDP5_DIR;
554 		IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp_reg);
555 
556 		/* Allow module to change analog characteristics (10G->1G) */
557 		msec_delay(40);
558 
559 		status = ixgbe_setup_mac_link_82599(
560 		    hw, IXGBE_LINK_SPEED_1GB_FULL, autoneg,
561 		    autoneg_wait_to_complete);
562 		if (status != IXGBE_SUCCESS)
563 			return (status);
564 
565 		/* Flap the tx laser if it has not already been done */
566 		if (hw->mac.autotry_restart) {
567 			/* Disable tx laser; allow 100us to go dark per spec */
568 			esdp_reg |= IXGBE_ESDP_SDP3;
569 			IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp_reg);
570 			usec_delay(100);
571 
572 			/* Enable tx laser; allow 2ms to light up per spec */
573 			esdp_reg &= ~IXGBE_ESDP_SDP3;
574 			IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp_reg);
575 			msec_delay(2);
576 
577 			hw->mac.autotry_restart = false;
578 		}
579 
580 		/* Wait for the link partner to also set speed */
581 		msec_delay(100);
582 
583 		/* If we have link, just jump out */
584 		status = ixgbe_check_link(hw, &link_speed, &link_up, false);
585 		if (status != IXGBE_SUCCESS)
586 			return (status);
587 
588 		if (link_up)
589 			goto out;
590 	}
591 
592 	/*
593 	 * We didn't get link.  Configure back to the highest speed we tried,
594 	 * (if there was more than one).  We call ourselves back with just the
595 	 * single highest speed that the user requested.
596 	 */
597 	if (speedcnt > 1)
598 		status = ixgbe_setup_mac_link_multispeed_fiber(hw,
599 		    highest_link_speed, autoneg, autoneg_wait_to_complete);
600 
601 out:
602 	/* Set autoneg_advertised value based on input link speed */
603 	hw->phy.autoneg_advertised = 0;
604 
605 	if (speed & IXGBE_LINK_SPEED_10GB_FULL)
606 		hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_10GB_FULL;
607 
608 	if (speed & IXGBE_LINK_SPEED_1GB_FULL)
609 		hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_1GB_FULL;
610 
611 	return (status);
612 }
613 
614 /*
615  * ixgbe_setup_mac_link_smartspeed - Set MAC link speed using SmartSpeed
616  * @hw: pointer to hardware structure
617  * @speed: new link speed
618  * @autoneg: true if autonegotiation enabled
619  * @autoneg_wait_to_complete: true when waiting for completion is needed
620  *
621  * Implements the Intel SmartSpeed algorithm.
622  */
623 s32
624 ixgbe_setup_mac_link_smartspeed(struct ixgbe_hw *hw,
625     ixgbe_link_speed speed, bool autoneg, bool autoneg_wait_to_complete)
626 {
627 	s32 status = IXGBE_SUCCESS;
628 	ixgbe_link_speed link_speed;
629 	s32 i, j;
630 	bool link_up = false;
631 	u32 autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
632 
633 	DEBUGFUNC("ixgbe_setup_mac_link_smartspeed");
634 
635 	/* Set autoneg_advertised value based on input link speed */
636 	hw->phy.autoneg_advertised = 0;
637 
638 	if (speed & IXGBE_LINK_SPEED_10GB_FULL)
639 		hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_10GB_FULL;
640 
641 	if (speed & IXGBE_LINK_SPEED_1GB_FULL)
642 		hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_1GB_FULL;
643 
644 	if (speed & IXGBE_LINK_SPEED_100_FULL)
645 		hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_100_FULL;
646 
647 	/*
648 	 * Implement Intel SmartSpeed algorithm.  SmartSpeed will reduce the
649 	 * autoneg advertisement if link is unable to be established at the
650 	 * highest negotiated rate.  This can sometimes happen due to integrity
651 	 * issues with the physical media connection.
652 	 */
653 
654 	/* First, try to get link with full advertisement */
655 	hw->phy.smart_speed_active = false;
656 	for (j = 0; j < IXGBE_SMARTSPEED_MAX_RETRIES; j++) {
657 		status = ixgbe_setup_mac_link_82599(hw, speed, autoneg,
658 		    autoneg_wait_to_complete);
659 		if (status != IXGBE_SUCCESS)
660 			goto out;
661 
662 		/*
663 		 * Wait for the controller to acquire link.  Per IEEE 802.3ap,
664 		 * Section 73.10.2, we may have to wait up to 500ms if KR is
665 		 * attempted, or 200ms if KX/KX4/BX/BX4 is attempted, per
666 		 * Table 9 in the AN MAS.
667 		 */
668 		for (i = 0; i < 5; i++) {
669 			msec_delay(100);
670 
671 			/* If we have link, just jump out */
672 			status = ixgbe_check_link(hw, &link_speed, &link_up,
673 			    false);
674 			if (status != IXGBE_SUCCESS)
675 				goto out;
676 
677 			if (link_up)
678 				goto out;
679 		}
680 	}
681 
682 	/*
683 	 * We didn't get link.  If we advertised KR plus one of KX4/KX
684 	 * (or BX4/BX), then disable KR and try again.
685 	 */
686 	if (((autoc_reg & IXGBE_AUTOC_KR_SUPP) == 0) ||
687 	    ((autoc_reg & IXGBE_AUTOC_KX4_KX_SUPP_MASK) == 0))
688 		goto out;
689 
690 	/* Turn SmartSpeed on to disable KR support */
691 	hw->phy.smart_speed_active = true;
692 	status = ixgbe_setup_mac_link_82599(hw, speed, autoneg,
693 	    autoneg_wait_to_complete);
694 	if (status != IXGBE_SUCCESS)
695 		goto out;
696 
697 	/*
698 	 * Wait for the controller to acquire link.  600ms will allow for
699 	 * the AN link_fail_inhibit_timer as well for multiple cycles of
700 	 * parallel detect, both 10g and 1g. This allows for the maximum
701 	 * connect attempts as defined in the AN MAS table 73-7.
702 	 */
703 	for (i = 0; i < 6; i++) {
704 		msec_delay(100);
705 
706 		/* If we have link, just jump out */
707 		status = ixgbe_check_link(hw, &link_speed, &link_up, false);
708 		if (status != IXGBE_SUCCESS)
709 			goto out;
710 
711 		if (link_up)
712 			goto out;
713 	}
714 
715 	/* We didn't get link.  Turn SmartSpeed back off. */
716 	hw->phy.smart_speed_active = false;
717 	status = ixgbe_setup_mac_link_82599(hw, speed, autoneg,
718 	    autoneg_wait_to_complete);
719 
720 out:
721 	return (status);
722 }
723 
724 /*
725  * ixgbe_setup_mac_link_82599 - Set MAC link speed
726  * @hw: pointer to hardware structure
727  * @speed: new link speed
728  * @autoneg: true if autonegotiation enabled
729  * @autoneg_wait_to_complete: true when waiting for completion is needed
730  *
731  * Set the link speed in the AUTOC register and restarts link.
732  */
733 s32
734 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw,
735     ixgbe_link_speed speed, bool autoneg, bool autoneg_wait_to_complete)
736 {
737 	s32 status = IXGBE_SUCCESS;
738 	u32 autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
739 	u32 autoc2 = IXGBE_READ_REG(hw, IXGBE_AUTOC2);
740 	u32 start_autoc = autoc;
741 	u32 orig_autoc = 0;
742 	u32 link_mode = autoc & IXGBE_AUTOC_LMS_MASK;
743 	u32 pma_pmd_1g = autoc & IXGBE_AUTOC_1G_PMA_PMD_MASK;
744 	u32 pma_pmd_10g_serial = autoc2 & IXGBE_AUTOC2_10G_SERIAL_PMA_PMD_MASK;
745 	u32 links_reg;
746 	u32 i;
747 	ixgbe_link_speed link_capabilities = IXGBE_LINK_SPEED_UNKNOWN;
748 
749 	DEBUGFUNC("ixgbe_setup_mac_link_82599");
750 
751 	/* Check to see if speed passed in is supported. */
752 	status = ixgbe_get_link_capabilities(hw, &link_capabilities, &autoneg);
753 	if (status != IXGBE_SUCCESS)
754 		goto out;
755 
756 	speed &= link_capabilities;
757 
758 	if (speed == IXGBE_LINK_SPEED_UNKNOWN) {
759 		status = IXGBE_ERR_LINK_SETUP;
760 		goto out;
761 	}
762 
763 	/*
764 	 * Use stored value (EEPROM defaults) of AUTOC to find KR/KX4 support
765 	 */
766 	if (hw->mac.orig_link_settings_stored)
767 		orig_autoc = hw->mac.orig_autoc;
768 	else
769 		orig_autoc = autoc;
770 
771 	if (link_mode == IXGBE_AUTOC_LMS_KX4_KX_KR ||
772 	    link_mode == IXGBE_AUTOC_LMS_KX4_KX_KR_1G_AN ||
773 	    link_mode == IXGBE_AUTOC_LMS_KX4_KX_KR_SGMII) {
774 		/* Set KX4/KX/KR support according to speed requested */
775 		autoc &= ~(IXGBE_AUTOC_KX4_KX_SUPP_MASK | IXGBE_AUTOC_KR_SUPP);
776 		if (speed & IXGBE_LINK_SPEED_10GB_FULL)
777 			if (orig_autoc & IXGBE_AUTOC_KX4_SUPP)
778 				autoc |= IXGBE_AUTOC_KX4_SUPP;
779 			if ((orig_autoc & IXGBE_AUTOC_KR_SUPP) &&
780 			    (hw->phy.smart_speed_active == false))
781 				autoc |= IXGBE_AUTOC_KR_SUPP;
782 		if (speed & IXGBE_LINK_SPEED_1GB_FULL)
783 			autoc |= IXGBE_AUTOC_KX_SUPP;
784 	} else if ((pma_pmd_1g == IXGBE_AUTOC_1G_SFI) &&
785 	    (link_mode == IXGBE_AUTOC_LMS_1G_LINK_NO_AN ||
786 	    link_mode == IXGBE_AUTOC_LMS_1G_AN)) {
787 		/* Switch from 1G SFI to 10G SFI if requested */
788 		if ((speed == IXGBE_LINK_SPEED_10GB_FULL) &&
789 		    (pma_pmd_10g_serial == IXGBE_AUTOC2_10G_SFI)) {
790 			autoc &= ~IXGBE_AUTOC_LMS_MASK;
791 			autoc |= IXGBE_AUTOC_LMS_10G_SERIAL;
792 		}
793 	} else if ((pma_pmd_10g_serial == IXGBE_AUTOC2_10G_SFI) &&
794 	    (link_mode == IXGBE_AUTOC_LMS_10G_SERIAL)) {
795 		/* Switch from 10G SFI to 1G SFI if requested */
796 		if ((speed == IXGBE_LINK_SPEED_1GB_FULL) &&
797 		    (pma_pmd_1g == IXGBE_AUTOC_1G_SFI)) {
798 			autoc &= ~IXGBE_AUTOC_LMS_MASK;
799 			if (autoneg)
800 				autoc |= IXGBE_AUTOC_LMS_1G_AN;
801 			else
802 				autoc |= IXGBE_AUTOC_LMS_1G_LINK_NO_AN;
803 			}
804 	}
805 
806 	if (autoc != start_autoc) {
807 		/* Restart link */
808 		autoc |= IXGBE_AUTOC_AN_RESTART;
809 		IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc);
810 
811 		/* Only poll for autoneg to complete if specified to do so */
812 		if (autoneg_wait_to_complete) {
813 			if (link_mode == IXGBE_AUTOC_LMS_KX4_KX_KR ||
814 			    link_mode == IXGBE_AUTOC_LMS_KX4_KX_KR_1G_AN ||
815 			    link_mode == IXGBE_AUTOC_LMS_KX4_KX_KR_SGMII) {
816 				links_reg = 0; /* Just in case Autoneg time=0 */
817 				for (i = 0; i < IXGBE_AUTO_NEG_TIME; i++) {
818 					links_reg =
819 					    IXGBE_READ_REG(hw, IXGBE_LINKS);
820 					if (links_reg & IXGBE_LINKS_KX_AN_COMP)
821 						break;
822 					msec_delay(100);
823 				}
824 				if (!(links_reg & IXGBE_LINKS_KX_AN_COMP)) {
825 					status =
826 					    IXGBE_ERR_AUTONEG_NOT_COMPLETE;
827 					DEBUGOUT("Autoneg did not complete.\n");
828 				}
829 			}
830 		}
831 
832 		/* Add delay to filter out noises during initial link setup */
833 		msec_delay(50);
834 	}
835 
836 out:
837 	return (status);
838 }
839 
840 /*
841  * ixgbe_setup_copper_link_82599 - Set the PHY autoneg advertised field
842  * @hw: pointer to hardware structure
843  * @speed: new link speed
844  * @autoneg: true if autonegotiation enabled
845  * @autoneg_wait_to_complete: true if waiting is needed to complete
846  *
847  * Restarts link on PHY and MAC based on settings passed in.
848  */
849 static s32
850 ixgbe_setup_copper_link_82599(struct ixgbe_hw *hw,
851     ixgbe_link_speed speed, bool autoneg, bool autoneg_wait_to_complete)
852 {
853 	s32 status;
854 
855 	DEBUGFUNC("ixgbe_setup_copper_link_82599");
856 
857 	/* Setup the PHY according to input speed */
858 	status = hw->phy.ops.setup_link_speed(hw, speed, autoneg,
859 	    autoneg_wait_to_complete);
860 	/* Set up MAC */
861 	(void) ixgbe_start_mac_link_82599(hw, autoneg_wait_to_complete);
862 
863 	return (status);
864 }
865 /*
866  * ixgbe_reset_hw_82599 - Perform hardware reset
867  * @hw: pointer to hardware structure
868  *
869  * Resets the hardware by resetting the transmit and receive units, masks
870  * and clears all interrupts, perform a PHY reset, and perform a link (MAC)
871  * reset.
872  */
873 s32
874 ixgbe_reset_hw_82599(struct ixgbe_hw *hw)
875 {
876 	s32 status = IXGBE_SUCCESS;
877 	u32 ctrl, ctrl_ext;
878 	u32 i;
879 	u32 autoc;
880 	u32 autoc2;
881 
882 	DEBUGFUNC("ixgbe_reset_hw_82599");
883 
884 	/* Call adapter stop to disable tx/rx and clear interrupts */
885 	hw->mac.ops.stop_adapter(hw);
886 
887 	/* PHY ops must be identified and initialized prior to reset */
888 
889 	/* Identify PHY and related function pointers */
890 	status = hw->phy.ops.init(hw);
891 
892 	if (status == IXGBE_ERR_SFP_NOT_SUPPORTED)
893 		goto reset_hw_out;
894 
895 	/* Setup SFP module if there is one present. */
896 	if (hw->phy.sfp_setup_needed) {
897 		status = hw->mac.ops.setup_sfp(hw);
898 		hw->phy.sfp_setup_needed = false;
899 	}
900 
901 	if (status == IXGBE_ERR_SFP_NOT_SUPPORTED)
902 		goto reset_hw_out;
903 
904 	/* Reset PHY */
905 	if (hw->phy.reset_disable == false && hw->phy.ops.reset != NULL)
906 		hw->phy.ops.reset(hw);
907 
908 	/*
909 	 * Prevent the PCI-E bus from from hanging by disabling PCI-E master
910 	 * access and verify no pending requests before reset
911 	 */
912 	status = ixgbe_disable_pcie_master(hw);
913 	if (status != IXGBE_SUCCESS) {
914 		status = IXGBE_ERR_MASTER_REQUESTS_PENDING;
915 		DEBUGOUT("PCI-E Master disable polling has failed.\n");
916 	}
917 
918 	/*
919 	 * Issue global reset to the MAC.  This needs to be a SW reset.
920 	 * If link reset is used, it might reset the MAC when mng is using it
921 	 */
922 	ctrl = IXGBE_READ_REG(hw, IXGBE_CTRL);
923 	IXGBE_WRITE_REG(hw, IXGBE_CTRL, (ctrl | IXGBE_CTRL_RST));
924 	IXGBE_WRITE_FLUSH(hw);
925 
926 	/* Poll for reset bit to self-clear indicating reset is complete */
927 	for (i = 0; i < 10; i++) {
928 		usec_delay(1);
929 		ctrl = IXGBE_READ_REG(hw, IXGBE_CTRL);
930 		if (!(ctrl & IXGBE_CTRL_RST)) {
931 			break;
932 		}
933 	}
934 	if (ctrl & IXGBE_CTRL_RST) {
935 		status = IXGBE_ERR_RESET_FAILED;
936 		DEBUGOUT("Reset polling failed to complete.\n");
937 	}
938 
939 	/* Clear PF Reset Done bit so PF/VF Mail Ops can work */
940 	ctrl_ext = IXGBE_READ_REG(hw, IXGBE_CTRL_EXT);
941 	ctrl_ext |= IXGBE_CTRL_EXT_PFRSTD;
942 	IXGBE_WRITE_REG(hw, IXGBE_CTRL_EXT, ctrl_ext);
943 
944 	msec_delay(50);
945 
946 	/*
947 	 * Store the original AUTOC/AUTOC2 values if they have not been
948 	 * stored off yet.  Otherwise restore the stored original
949 	 * values since the reset operation sets back to defaults.
950 	 */
951 	autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
952 	autoc2 = IXGBE_READ_REG(hw, IXGBE_AUTOC2);
953 	if (hw->mac.orig_link_settings_stored == false) {
954 		hw->mac.orig_autoc = autoc;
955 		hw->mac.orig_autoc2 = autoc2;
956 		hw->mac.orig_link_settings_stored = true;
957 	} else {
958 		if (autoc != hw->mac.orig_autoc) {
959 			IXGBE_WRITE_REG(hw, IXGBE_AUTOC, (hw->mac.orig_autoc |
960 			    IXGBE_AUTOC_AN_RESTART));
961 		}
962 
963 		if ((autoc2 & IXGBE_AUTOC2_UPPER_MASK) !=
964 		    (hw->mac.orig_autoc2 & IXGBE_AUTOC2_UPPER_MASK)) {
965 			autoc2 &= ~IXGBE_AUTOC2_UPPER_MASK;
966 			autoc2 |= (hw->mac.orig_autoc2 &
967 			    IXGBE_AUTOC2_UPPER_MASK);
968 			IXGBE_WRITE_REG(hw, IXGBE_AUTOC2, autoc2);
969 		}
970 	}
971 
972 	/* Store the permanent mac address */
973 	hw->mac.ops.get_mac_addr(hw, hw->mac.perm_addr);
974 
975 	/*
976 	 * Store MAC address from RAR0, clear receive address registers, and
977 	 * clear the multicast table.  Also reset num_rar_entries to 128,
978 	 * since we modify this value when programming the SAN MAC address.
979 	 */
980 	hw->mac.num_rar_entries = 128;
981 	hw->mac.ops.init_rx_addrs(hw);
982 
983 	/* Store the permanent SAN mac address */
984 	hw->mac.ops.get_san_mac_addr(hw, hw->mac.san_addr);
985 
986 	/* Add the SAN MAC address to the RAR only if it's a valid address */
987 	if (ixgbe_validate_mac_addr(hw->mac.san_addr) == 0) {
988 		hw->mac.ops.set_rar(hw, hw->mac.num_rar_entries - 1,
989 		    hw->mac.san_addr, 0, IXGBE_RAH_AV);
990 
991 		/* Reserve the last RAR for the SAN MAC address */
992 		hw->mac.num_rar_entries--;
993 	}
994 
995 	/* Store the alternative WWNN/WWPN prefix */
996 	hw->mac.ops.get_wwn_prefix(hw, &hw->mac.wwnn_prefix,
997 	    &hw->mac.wwpn_prefix);
998 
999 reset_hw_out:
1000 	return (status);
1001 }
1002 
1003 /*
1004  * ixgbe_reinit_fdir_tables_82599 - Reinitialize Flow Director tables.
1005  * @hw: pointer to hardware structure
1006  */
1007 s32
1008 ixgbe_reinit_fdir_tables_82599(struct ixgbe_hw *hw)
1009 {
1010 	int i;
1011 	u32 fdirctrl = IXGBE_READ_REG(hw, IXGBE_FDIRCTRL);
1012 	fdirctrl &= ~IXGBE_FDIRCTRL_INIT_DONE;
1013 
1014 	DEBUGFUNC("ixgbe_reinit_fdir_tables_82599");
1015 
1016 	/*
1017 	 * Before starting reinitialization process,
1018 	 * FDIRCMD.CMD must be zero.
1019 	 */
1020 	for (i = 0; i < IXGBE_FDIRCMD_CMD_POLL; i++) {
1021 		if (!(IXGBE_READ_REG(hw, IXGBE_FDIRCMD) &
1022 		    IXGBE_FDIRCMD_CMD_MASK))
1023 			break;
1024 		usec_delay(10);
1025 	}
1026 	if (i >= IXGBE_FDIRCMD_CMD_POLL) {
1027 		DEBUGOUT("Flow Director previous command isn't complete, "
1028 		    "aborting table re-initialization. \n");
1029 		return (IXGBE_ERR_FDIR_REINIT_FAILED);
1030 	}
1031 
1032 	IXGBE_WRITE_REG(hw, IXGBE_FDIRFREE, 0);
1033 	IXGBE_WRITE_FLUSH(hw);
1034 	/*
1035 	 * 82599 adapters flow director init flow cannot be restarted,
1036 	 * Workaround 82599 silicon errata by performing the following steps
1037 	 * before re-writing the FDIRCTRL control register with the same value.
1038 	 * - write 1 to bit 8 of FDIRCMD register &
1039 	 * - write 0 to bit 8 of FDIRCMD register
1040 	 */
1041 	IXGBE_WRITE_REG(hw, IXGBE_FDIRCMD,
1042 	    (IXGBE_READ_REG(hw, IXGBE_FDIRCMD) |
1043 	    IXGBE_FDIRCMD_CLEARHT));
1044 	IXGBE_WRITE_FLUSH(hw);
1045 	IXGBE_WRITE_REG(hw, IXGBE_FDIRCMD,
1046 	    (IXGBE_READ_REG(hw, IXGBE_FDIRCMD) &
1047 	    ~IXGBE_FDIRCMD_CLEARHT));
1048 	IXGBE_WRITE_FLUSH(hw);
1049 	/*
1050 	 * Clear FDIR Hash register to clear any leftover hashes
1051 	 * waiting to be programmed.
1052 	 */
1053 	IXGBE_WRITE_REG(hw, IXGBE_FDIRHASH, 0x00);
1054 	IXGBE_WRITE_FLUSH(hw);
1055 
1056 	IXGBE_WRITE_REG(hw, IXGBE_FDIRCTRL, fdirctrl);
1057 	IXGBE_WRITE_FLUSH(hw);
1058 
1059 	/* Poll init-done after we write FDIRCTRL register */
1060 	for (i = 0; i < IXGBE_FDIR_INIT_DONE_POLL; i++) {
1061 		if (IXGBE_READ_REG(hw, IXGBE_FDIRCTRL) &
1062 		    IXGBE_FDIRCTRL_INIT_DONE)
1063 			break;
1064 		usec_delay(10);
1065 	}
1066 	if (i >= IXGBE_FDIR_INIT_DONE_POLL) {
1067 		DEBUGOUT("Flow Director Signature poll time exceeded!\n");
1068 		return (IXGBE_ERR_FDIR_REINIT_FAILED);
1069 	}
1070 
1071 	/* Clear FDIR statistics registers (read to clear) */
1072 	(void) IXGBE_READ_REG(hw, IXGBE_FDIRUSTAT);
1073 	(void) IXGBE_READ_REG(hw, IXGBE_FDIRFSTAT);
1074 	(void) IXGBE_READ_REG(hw, IXGBE_FDIRMATCH);
1075 	(void) IXGBE_READ_REG(hw, IXGBE_FDIRMISS);
1076 	(void) IXGBE_READ_REG(hw, IXGBE_FDIRLEN);
1077 
1078 	return (IXGBE_SUCCESS);
1079 }
1080 
1081 /*
1082  * ixgbe_init_fdir_signature_82599 - Initialize Flow Director signature filters
1083  * @hw: pointer to hardware structure
1084  * @pballoc: which mode to allocate filters with
1085  */
1086 s32
1087 ixgbe_init_fdir_signature_82599(struct ixgbe_hw *hw, u32 pballoc)
1088 {
1089 	u32 fdirctrl = 0;
1090 	u32 pbsize;
1091 	int i;
1092 
1093 	DEBUGFUNC("ixgbe_init_fdir_signature_82599");
1094 
1095 	/*
1096 	 * Before enabling Flow Director, the Rx Packet Buffer size
1097 	 * must be reduced.  The new value is the current size minus
1098 	 * flow director memory usage size.
1099 	 */
1100 	pbsize = (1 << (IXGBE_FDIR_PBALLOC_SIZE_SHIFT + pballoc));
1101 	IXGBE_WRITE_REG(hw, IXGBE_RXPBSIZE(0),
1102 	    IXGBE_READ_REG(hw, IXGBE_RXPBSIZE(0)) - pbsize);
1103 
1104 	/*
1105 	 * The defaults in the HW for RX PB 1-7 are not zero and so should be
1106 	 * intialized to zero for non DCB mode otherwise actual total RX PB
1107 	 * would be bigger than programmed and filter space would run into
1108 	 * the PB 0 region.
1109 	 */
1110 	for (i = 1; i < 8; i++)
1111 		IXGBE_WRITE_REG(hw, IXGBE_RXPBSIZE(i), 0);
1112 
1113 	/* Send interrupt when 64 filters are left */
1114 	fdirctrl |= 4 << IXGBE_FDIRCTRL_FULL_THRESH_SHIFT;
1115 
1116 	/* Set the maximum length per hash bucket to 0xA filters */
1117 	fdirctrl |= 0xA << IXGBE_FDIRCTRL_MAX_LENGTH_SHIFT;
1118 
1119 	switch (pballoc) {
1120 	case IXGBE_FDIR_PBALLOC_64K:
1121 		/* 8k - 1 signature filters */
1122 		fdirctrl |= IXGBE_FDIRCTRL_PBALLOC_64K;
1123 		break;
1124 	case IXGBE_FDIR_PBALLOC_128K:
1125 		/* 16k - 1 signature filters */
1126 		fdirctrl |= IXGBE_FDIRCTRL_PBALLOC_128K;
1127 		break;
1128 	case IXGBE_FDIR_PBALLOC_256K:
1129 		/* 32k - 1 signature filters */
1130 		fdirctrl |= IXGBE_FDIRCTRL_PBALLOC_256K;
1131 		break;
1132 	default:
1133 		/* bad value */
1134 		return (IXGBE_ERR_CONFIG);
1135 	};
1136 
1137 	/* Move the flexible bytes to use the ethertype - shift 6 words */
1138 	fdirctrl |= (0x6 << IXGBE_FDIRCTRL_FLEX_SHIFT);
1139 
1140 	/* Prime the keys for hashing */
1141 	IXGBE_WRITE_REG(hw, IXGBE_FDIRHKEY,
1142 	    IXGBE_HTONL(IXGBE_ATR_BUCKET_HASH_KEY));
1143 	IXGBE_WRITE_REG(hw, IXGBE_FDIRSKEY,
1144 	    IXGBE_HTONL(IXGBE_ATR_SIGNATURE_HASH_KEY));
1145 
1146 	/*
1147 	 * Poll init-done after we write the register.  Estimated times:
1148 	 *   10G: PBALLOC = 11b, timing is 60us
1149 	 *    1G: PBALLOC = 11b, timing is 600us
1150 	 *  100M: PBALLOC = 11b, timing is 6ms
1151 	 *
1152 	 *   Multiple these timings by 4 if under full Rx load
1153 	 *
1154 	 * So we'll poll for IXGBE_FDIR_INIT_DONE_POLL times, sleeping for
1155 	 * 1 msec per poll time.  If we're at line rate and drop to 100M, then
1156 	 * this might not finish in our poll time, but we can live with that
1157 	 * for now.
1158 	 */
1159 	IXGBE_WRITE_REG(hw, IXGBE_FDIRCTRL, fdirctrl);
1160 	IXGBE_WRITE_FLUSH(hw);
1161 	for (i = 0; i < IXGBE_FDIR_INIT_DONE_POLL; i++) {
1162 		if (IXGBE_READ_REG(hw, IXGBE_FDIRCTRL) &
1163 		    IXGBE_FDIRCTRL_INIT_DONE)
1164 			break;
1165 
1166 		msec_delay(1);
1167 	}
1168 	if (i >= IXGBE_FDIR_INIT_DONE_POLL) {
1169 		DEBUGOUT("Flow Director Signature poll time exceeded!\n");
1170 	}
1171 
1172 	return (IXGBE_SUCCESS);
1173 }
1174 
1175 /*
1176  * ixgbe_init_fdir_perfect_82599 - Initialize Flow Director perfect filters
1177  * @hw: pointer to hardware structure
1178  * @pballoc: which mode to allocate filters with
1179  */
1180 s32
1181 ixgbe_init_fdir_perfect_82599(struct ixgbe_hw *hw, u32 pballoc)
1182 {
1183 	u32 fdirctrl = 0;
1184 	u32 pbsize;
1185 	int i;
1186 
1187 	DEBUGFUNC("ixgbe_init_fdir_perfect_82599");
1188 
1189 	/*
1190 	 * Before enabling Flow Director, the Rx Packet Buffer size
1191 	 * must be reduced.  The new value is the current size minus
1192 	 * flow director memory usage size.
1193 	 */
1194 
1195 	pbsize = (1 << (IXGBE_FDIR_PBALLOC_SIZE_SHIFT + pballoc));
1196 	IXGBE_WRITE_REG(hw, IXGBE_RXPBSIZE(0),
1197 	    IXGBE_READ_REG(hw, IXGBE_RXPBSIZE(0)) - pbsize);
1198 
1199 	/*
1200 	 * The defaults in the HW for RX PB 1-7 are not zero and so should be
1201 	 * intialized to zero for non DCB mode otherwise actual total RX PB
1202 	 * would be bigger than programmed and filter space would run into
1203 	 * the PB 0 region.
1204 	 */
1205 	for (i = 1; i < 8; i++)
1206 		IXGBE_WRITE_REG(hw, IXGBE_RXPBSIZE(i), 0);
1207 
1208 	/* Send interrupt when 64 filters are left */
1209 	fdirctrl |= 4 << IXGBE_FDIRCTRL_FULL_THRESH_SHIFT;
1210 
1211 	switch (pballoc) {
1212 	case IXGBE_FDIR_PBALLOC_64K:
1213 		/* 2k - 1 perfect filters */
1214 		fdirctrl |= IXGBE_FDIRCTRL_PBALLOC_64K;
1215 		break;
1216 	case IXGBE_FDIR_PBALLOC_128K:
1217 		/* 4k - 1 perfect filters */
1218 		fdirctrl |= IXGBE_FDIRCTRL_PBALLOC_128K;
1219 		break;
1220 	case IXGBE_FDIR_PBALLOC_256K:
1221 		/* 8k - 1 perfect filters */
1222 		fdirctrl |= IXGBE_FDIRCTRL_PBALLOC_256K;
1223 		break;
1224 	default:
1225 		/* bad value */
1226 		return (IXGBE_ERR_CONFIG);
1227 	};
1228 
1229 	/* Turn perfect match filtering on */
1230 	fdirctrl |= IXGBE_FDIRCTRL_PERFECT_MATCH;
1231 	fdirctrl |= IXGBE_FDIRCTRL_REPORT_STATUS;
1232 
1233 	/* Move the flexible bytes to use the ethertype - shift 6 words */
1234 	fdirctrl |= (0x6 << IXGBE_FDIRCTRL_FLEX_SHIFT);
1235 
1236 	/* Prime the keys for hashing */
1237 	IXGBE_WRITE_REG(hw, IXGBE_FDIRHKEY,
1238 	    IXGBE_HTONL(IXGBE_ATR_BUCKET_HASH_KEY));
1239 	IXGBE_WRITE_REG(hw, IXGBE_FDIRSKEY,
1240 	    IXGBE_HTONL(IXGBE_ATR_SIGNATURE_HASH_KEY));
1241 
1242 	/*
1243 	 * Poll init-done after we write the register.  Estimated times:
1244 	 *   10G: PBALLOC = 11b, timing is 60us
1245 	 *    1G: PBALLOC = 11b, timing is 600us
1246 	 *  100M: PBALLOC = 11b, timing is 6ms
1247 	 *
1248 	 *  Multiple these timings by 4 if under full Rx load
1249 	 *
1250 	 * So we'll poll for IXGBE_FDIR_INIT_DONE_POLL times, sleeping for
1251 	 * 1 msec per poll time.  If we're at line rate and drop to 100M, then
1252 	 * this might not finish in our poll time, but we can live with that
1253 	 * for now.
1254 	 */
1255 
1256 	/* Set the maximum length per hash bucket to 0xA filters */
1257 	fdirctrl |= (0xA << IXGBE_FDIRCTRL_MAX_LENGTH_SHIFT);
1258 
1259 	IXGBE_WRITE_REG(hw, IXGBE_FDIRCTRL, fdirctrl);
1260 	IXGBE_WRITE_FLUSH(hw);
1261 	for (i = 0; i < IXGBE_FDIR_INIT_DONE_POLL; i++) {
1262 		if (IXGBE_READ_REG(hw, IXGBE_FDIRCTRL) &
1263 		    IXGBE_FDIRCTRL_INIT_DONE)
1264 			break;
1265 
1266 		msec_delay(1);
1267 	}
1268 	if (i >= IXGBE_FDIR_INIT_DONE_POLL) {
1269 		DEBUGOUT("Flow Director Perfect poll time exceeded!\n");
1270 	}
1271 
1272 	return (IXGBE_SUCCESS);
1273 }
1274 
1275 /*
1276  * ixgbe_atr_compute_hash_82599 - Compute the hashes for SW ATR
1277  * @stream: input bitstream to compute the hash on
1278  * @key: 32-bit hash key
1279  */
1280 u16
1281 ixgbe_atr_compute_hash_82599(struct ixgbe_atr_input *atr_input, u32 key)
1282 {
1283 	/*
1284 	 * The algorithm is as follows:
1285 	 *    Hash[15:0] = Sum { S[n] x K[n+16] }, n = 0...350
1286 	 *    where Sum {A[n]}, n = 0...n is bitwise XOR of A[0], A[1]...A[n]
1287 	 *    and A[n] x B[n] is bitwise AND between same length strings
1288 	 *
1289 	 *    K[n] is 16 bits, defined as:
1290 	 *	for n modulo 32 >= 15, K[n] = K[n % 32 : (n % 32) - 15]
1291 	 *	for n modulo 32 < 15, K[n] =
1292 	 *		K[(n % 32:0) | (31:31 - (14 - (n % 32)))]
1293 	 *
1294 	 *    S[n] is 16 bits, defined as:
1295 	 *	for n >= 15, S[n] = S[n:n - 15]
1296 	 *	for n < 15, S[n] = S[(n:0) | (350:350 - (14 - n))]
1297 	 *
1298 	 *    To simplify for programming, the algorithm is implemented
1299 	 *    in software this way:
1300 	 *
1301 	 *    Key[31:0], Stream[335:0]
1302 	 *
1303 	 *    tmp_key[11 * 32 - 1:0] = 11{Key[31:0] = key concatenated 11 times
1304 	 *    int_key[350:0] = tmp_key[351:1]
1305 	 *    int_stream[365:0] = Stream[14:0] | Stream[335:0] | Stream[335:321]
1306 	 *
1307 	 *    hash[15:0] = 0;
1308 	 *    for (i = 0; i < 351; i++) {
1309 	 *	if (int_key[i])
1310 	 *		hash ^= int_stream[(i + 15):i];
1311 	 *    }
1312 	 */
1313 
1314 	union {
1315 		u64 fill[6];
1316 		u32 key[11];
1317 		u8 key_stream[44];
1318 	} tmp_key;
1319 
1320 	u8 *stream = (u8 *)atr_input;
1321 	u8 int_key[44];		/* upper-most bit unused */
1322 	u8 hash_str[46];	/* upper-most 2 bits unused */
1323 	u16 hash_result = 0;
1324 	int i, j, k, h;
1325 
1326 	DEBUGFUNC("ixgbe_atr_compute_hash_82599");
1327 
1328 	/*
1329 	 * Initialize the fill member to prevent warnings
1330 	 * on some compilers
1331 	 */
1332 	tmp_key.fill[0] = 0;
1333 
1334 	/* First load the temporary key stream */
1335 	for (i = 0; i < 6; i++) {
1336 		u64 fillkey = ((u64)key << 32) | key;
1337 		tmp_key.fill[i] = fillkey;
1338 	}
1339 
1340 	/*
1341 	 * Set the interim key for the hashing.  Bit 352 is unused, so we must
1342 	 * shift and compensate when building the key.
1343 	 */
1344 	int_key[0] = tmp_key.key_stream[0] >> 1;
1345 	for (i = 1, j = 0; i < 44; i++) {
1346 		unsigned int this_key = tmp_key.key_stream[j] << 7;
1347 		j++;
1348 		int_key[i] = (u8)(this_key | (tmp_key.key_stream[j] >> 1));
1349 	}
1350 
1351 	/*
1352 	 * Set the interim bit string for the hashing.  Bits 368 and 367 are
1353 	 * unused, so shift and compensate when building the string.
1354 	 */
1355 	hash_str[0] = (stream[40] & 0x7f) >> 1;
1356 	for (i = 1, j = 40; i < 46; i++) {
1357 		unsigned int this_str = stream[j] << 7;
1358 		j++;
1359 		if (j > 41)
1360 			j = 0;
1361 		hash_str[i] = (u8)(this_str | (stream[j] >> 1));
1362 	}
1363 
1364 	/*
1365 	 * Now compute the hash.  i is the index into hash_str, j is into our
1366 	 * key stream, k is counting the number of bits, and h interates within
1367 	 * each byte.
1368 	 */
1369 	for (i = 45, j = 43, k = 0; k < 351 && i >= 2 && j >= 0; i--, j--) {
1370 		for (h = 0; h < 8 && k < 351; h++, k++) {
1371 			if (int_key[j] & (1 << h)) {
1372 				/*
1373 				 * Key bit is set, XOR in the current 16-bit
1374 				 * string.  Example of processing:
1375 				 *	h = 0,
1376 				 *	tmp = (hash_str[i - 2] & 0 << 16) |
1377 				 *		(hash_str[i - 1] & 0xff << 8) |
1378 				 *		(hash_str[i] & 0xff >> 0)
1379 				 *	So tmp = hash_str[15 + k:k], since the
1380 				 *	i + 2 clause rolls off the 16-bit value
1381 				 *	h = 7,
1382 				 *	tmp = (hash_str[i - 2] & 0x7f << 9) |
1383 				 *		(hash_str[i - 1] & 0xff << 1) |
1384 				 *		(hash_str[i] & 0x80 >> 7)
1385 				 */
1386 				int tmp = (hash_str[i] >> h);
1387 				tmp |= (hash_str[i - 1] << (8 - h));
1388 				tmp |= (int)(hash_str[i - 2] & ((1 << h) - 1))
1389 				    << (16 - h);
1390 				hash_result ^= (u16)tmp;
1391 			}
1392 		}
1393 	}
1394 
1395 	return (hash_result);
1396 }
1397 
1398 /*
1399  * ixgbe_atr_set_vlan_id_82599 - Sets the VLAN id in the ATR input stream
1400  * @input: input stream to modify
1401  * @vlan: the VLAN id to load
1402  */
1403 s32
1404 ixgbe_atr_set_vlan_id_82599(struct ixgbe_atr_input *input, u16 vlan)
1405 {
1406 	DEBUGFUNC("ixgbe_atr_set_vlan_id_82599");
1407 
1408 	input->byte_stream[IXGBE_ATR_VLAN_OFFSET + 1] = vlan >> 8;
1409 	input->byte_stream[IXGBE_ATR_VLAN_OFFSET] = vlan & 0xff;
1410 
1411 	return (IXGBE_SUCCESS);
1412 }
1413 
1414 /*
1415  * ixgbe_atr_set_src_ipv4_82599 - Sets the source IPv4 address
1416  * @input: input stream to modify
1417  * @src_addr: the IP address to load
1418  */
1419 s32
1420 ixgbe_atr_set_src_ipv4_82599(struct ixgbe_atr_input *input, u32 src_addr)
1421 {
1422 	DEBUGFUNC("ixgbe_atr_set_src_ipv4_82599");
1423 
1424 	input->byte_stream[IXGBE_ATR_SRC_IPV4_OFFSET + 3] = src_addr >> 24;
1425 	input->byte_stream[IXGBE_ATR_SRC_IPV4_OFFSET + 2] =
1426 	    (src_addr >> 16) & 0xff;
1427 	input->byte_stream[IXGBE_ATR_SRC_IPV4_OFFSET + 1] =
1428 	    (src_addr >> 8) & 0xff;
1429 	input->byte_stream[IXGBE_ATR_SRC_IPV4_OFFSET] = src_addr & 0xff;
1430 
1431 	return (IXGBE_SUCCESS);
1432 }
1433 
1434 /*
1435  * ixgbe_atr_set_dst_ipv4_82599 - Sets the destination IPv4 address
1436  * @input: input stream to modify
1437  * @dst_addr: the IP address to load
1438  */
1439 s32
1440 ixgbe_atr_set_dst_ipv4_82599(struct ixgbe_atr_input *input, u32 dst_addr)
1441 {
1442 	DEBUGFUNC("ixgbe_atr_set_dst_ipv4_82599");
1443 
1444 	input->byte_stream[IXGBE_ATR_DST_IPV4_OFFSET + 3] = dst_addr >> 24;
1445 	input->byte_stream[IXGBE_ATR_DST_IPV4_OFFSET + 2] =
1446 	    (dst_addr >> 16) & 0xff;
1447 	input->byte_stream[IXGBE_ATR_DST_IPV4_OFFSET + 1] =
1448 	    (dst_addr >> 8) & 0xff;
1449 	input->byte_stream[IXGBE_ATR_DST_IPV4_OFFSET] = dst_addr & 0xff;
1450 
1451 	return (IXGBE_SUCCESS);
1452 }
1453 
1454 /*
1455  * ixgbe_atr_set_src_ipv6_82599 - Sets the source IPv6 address
1456  * @input: input stream to modify
1457  * @src_addr_1: the first 4 bytes of the IP address to load
1458  * @src_addr_2: the second 4 bytes of the IP address to load
1459  * @src_addr_3: the third 4 bytes of the IP address to load
1460  * @src_addr_4: the fourth 4 bytes of the IP address to load
1461  */
1462 s32
1463 ixgbe_atr_set_src_ipv6_82599(struct ixgbe_atr_input *input,
1464     u32 src_addr_1, u32 src_addr_2, u32 src_addr_3, u32 src_addr_4)
1465 {
1466 	DEBUGFUNC("ixgbe_atr_set_src_ipv6_82599");
1467 
1468 	input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET] = src_addr_4 & 0xff;
1469 	input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 1] =
1470 	    (src_addr_4 >> 8) & 0xff;
1471 	input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 2] =
1472 	    (src_addr_4 >> 16) & 0xff;
1473 	input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 3] = src_addr_4 >> 24;
1474 
1475 	input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 4] = src_addr_3 & 0xff;
1476 	input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 5] =
1477 	    (src_addr_3 >> 8) & 0xff;
1478 	input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 6] =
1479 	    (src_addr_3 >> 16) & 0xff;
1480 	input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 7] = src_addr_3 >> 24;
1481 
1482 	input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 8] = src_addr_2 & 0xff;
1483 	input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 9] =
1484 	    (src_addr_2 >> 8) & 0xff;
1485 	input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 10] =
1486 	    (src_addr_2 >> 16) & 0xff;
1487 	input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 11] = src_addr_2 >> 24;
1488 
1489 	input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 12] = src_addr_1 & 0xff;
1490 	input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 13] =
1491 	    (src_addr_1 >> 8) & 0xff;
1492 	input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 14] =
1493 	    (src_addr_1 >> 16) & 0xff;
1494 	input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 15] = src_addr_1 >> 24;
1495 
1496 	return (IXGBE_SUCCESS);
1497 }
1498 
1499 /*
1500  * ixgbe_atr_set_dst_ipv6_82599 - Sets the destination IPv6 address
1501  * @input: input stream to modify
1502  * @dst_addr_1: the first 4 bytes of the IP address to load
1503  * @dst_addr_2: the second 4 bytes of the IP address to load
1504  * @dst_addr_3: the third 4 bytes of the IP address to load
1505  * @dst_addr_4: the fourth 4 bytes of the IP address to load
1506  */
1507 s32
1508 ixgbe_atr_set_dst_ipv6_82599(struct ixgbe_atr_input *input,
1509     u32 dst_addr_1, u32 dst_addr_2, u32 dst_addr_3, u32 dst_addr_4)
1510 {
1511 	DEBUGFUNC("ixgbe_atr_set_dst_ipv6_82599");
1512 
1513 	input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET] = dst_addr_4 & 0xff;
1514 	input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 1] =
1515 	    (dst_addr_4 >> 8) & 0xff;
1516 	input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 2] =
1517 	    (dst_addr_4 >> 16) & 0xff;
1518 	input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 3] = dst_addr_4 >> 24;
1519 
1520 	input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 4] = dst_addr_3 & 0xff;
1521 	input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 5] =
1522 	    (dst_addr_3 >> 8) & 0xff;
1523 	input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 6] =
1524 	    (dst_addr_3 >> 16) & 0xff;
1525 	input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 7] = dst_addr_3 >> 24;
1526 
1527 	input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 8] = dst_addr_2 & 0xff;
1528 	input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 9] =
1529 	    (dst_addr_2 >> 8) & 0xff;
1530 	input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 10] =
1531 	    (dst_addr_2 >> 16) & 0xff;
1532 	input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 11] = dst_addr_2 >> 24;
1533 
1534 	input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 12] = dst_addr_1 & 0xff;
1535 	input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 13] =
1536 	    (dst_addr_1 >> 8) & 0xff;
1537 	input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 14] =
1538 	    (dst_addr_1 >> 16) & 0xff;
1539 	input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 15] = dst_addr_1 >> 24;
1540 
1541 	return (IXGBE_SUCCESS);
1542 }
1543 
1544 /*
1545  * ixgbe_atr_set_src_port_82599 - Sets the source port
1546  * @input: input stream to modify
1547  * @src_port: the source port to load
1548  */
1549 s32
1550 ixgbe_atr_set_src_port_82599(struct ixgbe_atr_input *input, u16 src_port)
1551 {
1552 	DEBUGFUNC("ixgbe_atr_set_src_port_82599");
1553 
1554 	input->byte_stream[IXGBE_ATR_SRC_PORT_OFFSET + 1] = src_port >> 8;
1555 	input->byte_stream[IXGBE_ATR_SRC_PORT_OFFSET] = src_port & 0xff;
1556 
1557 	return (IXGBE_SUCCESS);
1558 }
1559 
1560 /*
1561  * ixgbe_atr_set_dst_port_82599 - Sets the destination port
1562  * @input: input stream to modify
1563  * @dst_port: the destination port to load
1564  */
1565 s32
1566 ixgbe_atr_set_dst_port_82599(struct ixgbe_atr_input *input, u16 dst_port)
1567 {
1568 	DEBUGFUNC("ixgbe_atr_set_dst_port_82599");
1569 
1570 	input->byte_stream[IXGBE_ATR_DST_PORT_OFFSET + 1] = dst_port >> 8;
1571 	input->byte_stream[IXGBE_ATR_DST_PORT_OFFSET] = dst_port & 0xff;
1572 
1573 	return (IXGBE_SUCCESS);
1574 }
1575 
1576 /*
1577  * ixgbe_atr_set_flex_byte_82599 - Sets the flexible bytes
1578  * @input: input stream to modify
1579  * @flex_bytes: the flexible bytes to load
1580  */
1581 s32
1582 ixgbe_atr_set_flex_byte_82599(struct ixgbe_atr_input *input, u16 flex_byte)
1583 {
1584 	DEBUGFUNC("ixgbe_atr_set_flex_byte_82599");
1585 
1586 	input->byte_stream[IXGBE_ATR_FLEX_BYTE_OFFSET + 1] = flex_byte >> 8;
1587 	input->byte_stream[IXGBE_ATR_FLEX_BYTE_OFFSET] = flex_byte & 0xff;
1588 
1589 	return (IXGBE_SUCCESS);
1590 }
1591 
1592 /*
1593  * ixgbe_atr_set_vm_pool_82599 - Sets the Virtual Machine pool
1594  * @input: input stream to modify
1595  * @vm_pool: the Virtual Machine pool to load
1596  */
1597 s32
1598 ixgbe_atr_set_vm_pool_82599(struct ixgbe_atr_input *input, u8 vm_pool)
1599 {
1600 	DEBUGFUNC("ixgbe_atr_set_vm_pool_82599");
1601 
1602 	input->byte_stream[IXGBE_ATR_VM_POOL_OFFSET] = vm_pool;
1603 
1604 	return (IXGBE_SUCCESS);
1605 }
1606 
1607 /*
1608  * ixgbe_atr_set_l4type_82599 - Sets the layer 4 packet type
1609  * @input: input stream to modify
1610  * @l4type: the layer 4 type value to load
1611  */
1612 s32
1613 ixgbe_atr_set_l4type_82599(struct ixgbe_atr_input *input, u8 l4type)
1614 {
1615 	DEBUGFUNC("ixgbe_atr_set_l4type_82599");
1616 
1617 	input->byte_stream[IXGBE_ATR_L4TYPE_OFFSET] = l4type;
1618 
1619 	return (IXGBE_SUCCESS);
1620 }
1621 
1622 /*
1623  * ixgbe_atr_get_vlan_id_82599 - Gets the VLAN id from the ATR input stream
1624  * @input: input stream to search
1625  * @vlan: the VLAN id to load
1626  */
1627 s32
1628 ixgbe_atr_get_vlan_id_82599(struct ixgbe_atr_input *input, u16 *vlan)
1629 {
1630 	DEBUGFUNC("ixgbe_atr_get_vlan_id_82599");
1631 
1632 	*vlan = input->byte_stream[IXGBE_ATR_VLAN_OFFSET];
1633 	*vlan |= input->byte_stream[IXGBE_ATR_VLAN_OFFSET + 1] << 8;
1634 
1635 	return (IXGBE_SUCCESS);
1636 }
1637 
1638 /*
1639  * ixgbe_atr_get_src_ipv4_82599 - Gets the source IPv4 address
1640  * @input: input stream to search
1641  * @src_addr: the IP address to load
1642  */
1643 s32
1644 ixgbe_atr_get_src_ipv4_82599(struct ixgbe_atr_input *input, u32 *src_addr)
1645 {
1646 	DEBUGFUNC("ixgbe_atr_get_src_ipv4_82599");
1647 
1648 	*src_addr = input->byte_stream[IXGBE_ATR_SRC_IPV4_OFFSET];
1649 	*src_addr |= input->byte_stream[IXGBE_ATR_SRC_IPV4_OFFSET + 1] << 8;
1650 	*src_addr |= input->byte_stream[IXGBE_ATR_SRC_IPV4_OFFSET + 2] << 16;
1651 	*src_addr |= input->byte_stream[IXGBE_ATR_SRC_IPV4_OFFSET + 3] << 24;
1652 
1653 	return (IXGBE_SUCCESS);
1654 }
1655 
1656 /*
1657  * ixgbe_atr_get_dst_ipv4_82599 - Gets the destination IPv4 address
1658  * @input: input stream to search
1659  * @dst_addr: the IP address to load
1660  */
1661 s32
1662 ixgbe_atr_get_dst_ipv4_82599(struct ixgbe_atr_input *input, u32 *dst_addr)
1663 {
1664 	DEBUGFUNC("ixgbe_atr_get_dst_ipv4_82599");
1665 
1666 	*dst_addr = input->byte_stream[IXGBE_ATR_DST_IPV4_OFFSET];
1667 	*dst_addr |= input->byte_stream[IXGBE_ATR_DST_IPV4_OFFSET + 1] << 8;
1668 	*dst_addr |= input->byte_stream[IXGBE_ATR_DST_IPV4_OFFSET + 2] << 16;
1669 	*dst_addr |= input->byte_stream[IXGBE_ATR_DST_IPV4_OFFSET + 3] << 24;
1670 
1671 	return (IXGBE_SUCCESS);
1672 }
1673 
1674 /*
1675  * ixgbe_atr_get_src_ipv6_82599 - Gets the source IPv6 address
1676  * @input: input stream to search
1677  * @src_addr_1: the first 4 bytes of the IP address to load
1678  * @src_addr_2: the second 4 bytes of the IP address to load
1679  * @src_addr_3: the third 4 bytes of the IP address to load
1680  * @src_addr_4: the fourth 4 bytes of the IP address to load
1681  */
1682 s32
1683 ixgbe_atr_get_src_ipv6_82599(struct ixgbe_atr_input *input,
1684     u32 *src_addr_1, u32 *src_addr_2, u32 *src_addr_3, u32 *src_addr_4)
1685 {
1686 	DEBUGFUNC("ixgbe_atr_get_src_ipv6_82599");
1687 
1688 	*src_addr_1 = input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 12];
1689 	*src_addr_1 = input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 13] << 8;
1690 	*src_addr_1 = input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 14] << 16;
1691 	*src_addr_1 = input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 15] << 24;
1692 
1693 	*src_addr_2 = input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 8];
1694 	*src_addr_2 = input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 9] << 8;
1695 	*src_addr_2 = input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 10] << 16;
1696 	*src_addr_2 = input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 11] << 24;
1697 
1698 	*src_addr_3 = input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 4];
1699 	*src_addr_3 = input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 5] << 8;
1700 	*src_addr_3 = input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 6] << 16;
1701 	*src_addr_3 = input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 7] << 24;
1702 
1703 	*src_addr_4 = input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET];
1704 	*src_addr_4 = input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 1] << 8;
1705 	*src_addr_4 = input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 2] << 16;
1706 	*src_addr_4 = input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 3] << 24;
1707 
1708 	return (IXGBE_SUCCESS);
1709 }
1710 
1711 /*
1712  * ixgbe_atr_get_dst_ipv6_82599 - Gets the destination IPv6 address
1713  * @input: input stream to search
1714  * @dst_addr_1: the first 4 bytes of the IP address to load
1715  * @dst_addr_2: the second 4 bytes of the IP address to load
1716  * @dst_addr_3: the third 4 bytes of the IP address to load
1717  * @dst_addr_4: the fourth 4 bytes of the IP address to load
1718  */
1719 s32
1720 ixgbe_atr_get_dst_ipv6_82599(struct ixgbe_atr_input *input,
1721     u32 *dst_addr_1, u32 *dst_addr_2, u32 *dst_addr_3, u32 *dst_addr_4)
1722 {
1723 	DEBUGFUNC("ixgbe_atr_get_dst_ipv6_82599");
1724 
1725 	*dst_addr_1 = input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 12];
1726 	*dst_addr_1 = input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 13] << 8;
1727 	*dst_addr_1 = input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 14] << 16;
1728 	*dst_addr_1 = input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 15] << 24;
1729 
1730 	*dst_addr_2 = input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 8];
1731 	*dst_addr_2 = input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 9] << 8;
1732 	*dst_addr_2 = input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 10] << 16;
1733 	*dst_addr_2 = input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 11] << 24;
1734 
1735 	*dst_addr_3 = input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 4];
1736 	*dst_addr_3 = input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 5] << 8;
1737 	*dst_addr_3 = input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 6] << 16;
1738 	*dst_addr_3 = input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 7] << 24;
1739 
1740 	*dst_addr_4 = input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET];
1741 	*dst_addr_4 = input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 1] << 8;
1742 	*dst_addr_4 = input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 2] << 16;
1743 	*dst_addr_4 = input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 3] << 24;
1744 
1745 	return (IXGBE_SUCCESS);
1746 }
1747 
1748 /*
1749  * ixgbe_atr_get_src_port_82599 - Gets the source port
1750  * @input: input stream to modify
1751  * @src_port: the source port to load
1752  *
1753  * Even though the input is given in big-endian, the FDIRPORT registers
1754  * expect the ports to be programmed in little-endian.  Hence the need to swap
1755  * endianness when retrieving the data.  This can be confusing since the
1756  * internal hash engine expects it to be big-endian.
1757  */
1758 s32
1759 ixgbe_atr_get_src_port_82599(struct ixgbe_atr_input *input, u16 *src_port)
1760 {
1761 	DEBUGFUNC("ixgbe_atr_get_src_port_82599");
1762 
1763 	*src_port = input->byte_stream[IXGBE_ATR_SRC_PORT_OFFSET] << 8;
1764 	*src_port |= input->byte_stream[IXGBE_ATR_SRC_PORT_OFFSET + 1];
1765 
1766 	return (IXGBE_SUCCESS);
1767 }
1768 
1769 /*
1770  * ixgbe_atr_get_dst_port_82599 - Gets the destination port
1771  * @input: input stream to modify
1772  * @dst_port: the destination port to load
1773  *
1774  * Even though the input is given in big-endian, the FDIRPORT registers
1775  * expect the ports to be programmed in little-endian.  Hence the need to swap
1776  * endianness when retrieving the data.  This can be confusing since the
1777  * internal hash engine expects it to be big-endian.
1778  */
1779 s32
1780 ixgbe_atr_get_dst_port_82599(struct ixgbe_atr_input *input, u16 *dst_port)
1781 {
1782 	DEBUGFUNC("ixgbe_atr_get_dst_port_82599");
1783 
1784 	*dst_port = input->byte_stream[IXGBE_ATR_DST_PORT_OFFSET] << 8;
1785 	*dst_port |= input->byte_stream[IXGBE_ATR_DST_PORT_OFFSET + 1];
1786 
1787 	return (IXGBE_SUCCESS);
1788 }
1789 
1790 /*
1791  * ixgbe_atr_get_flex_byte_82599 - Gets the flexible bytes
1792  * @input: input stream to modify
1793  * @flex_bytes: the flexible bytes to load
1794  */
1795 s32
1796 ixgbe_atr_get_flex_byte_82599(struct ixgbe_atr_input *input, u16 *flex_byte)
1797 {
1798 	DEBUGFUNC("ixgbe_atr_get_flex_byte_82599");
1799 
1800 	*flex_byte = input->byte_stream[IXGBE_ATR_FLEX_BYTE_OFFSET];
1801 	*flex_byte |= input->byte_stream[IXGBE_ATR_FLEX_BYTE_OFFSET + 1] << 8;
1802 
1803 	return (IXGBE_SUCCESS);
1804 }
1805 
1806 /*
1807  * ixgbe_atr_get_vm_pool_82599 - Gets the Virtual Machine pool
1808  * @input: input stream to modify
1809  * @vm_pool: the Virtual Machine pool to load
1810  */
1811 s32
1812 ixgbe_atr_get_vm_pool_82599(struct ixgbe_atr_input *input, u8 *vm_pool)
1813 {
1814 	DEBUGFUNC("ixgbe_atr_get_vm_pool_82599");
1815 
1816 	*vm_pool = input->byte_stream[IXGBE_ATR_VM_POOL_OFFSET];
1817 
1818 	return (IXGBE_SUCCESS);
1819 }
1820 
1821 /*
1822  * ixgbe_atr_get_l4type_82599 - Gets the layer 4 packet type
1823  * @input: input stream to modify
1824  * @l4type: the layer 4 type value to load
1825  */
1826 s32
1827 ixgbe_atr_get_l4type_82599(struct ixgbe_atr_input *input, u8 *l4type)
1828 {
1829 	DEBUGFUNC("ixgbe_atr_get_l4type__82599");
1830 
1831 	*l4type = input->byte_stream[IXGBE_ATR_L4TYPE_OFFSET];
1832 
1833 	return (IXGBE_SUCCESS);
1834 }
1835 
1836 /*
1837  * ixgbe_atr_add_signature_filter_82599 - Adds a signature hash filter
1838  * @hw: pointer to hardware structure
1839  * @stream: input bitstream
1840  * @queue: queue index to direct traffic to
1841  */
1842 s32
1843 ixgbe_fdir_add_signature_filter_82599(struct ixgbe_hw *hw,
1844     struct ixgbe_atr_input *input, u8 queue)
1845 {
1846 	u64  fdirhashcmd;
1847 	u64  fdircmd;
1848 	u32  fdirhash;
1849 	u16  bucket_hash, sig_hash;
1850 	u8   l4type;
1851 
1852 	DEBUGFUNC("ixgbe_fdir_add_signature_filter_82599");
1853 
1854 	bucket_hash = ixgbe_atr_compute_hash_82599(input,
1855 	    IXGBE_ATR_BUCKET_HASH_KEY);
1856 
1857 	/* bucket_hash is only 15 bits */
1858 	bucket_hash &= IXGBE_ATR_HASH_MASK;
1859 
1860 	sig_hash = ixgbe_atr_compute_hash_82599(input,
1861 	    IXGBE_ATR_SIGNATURE_HASH_KEY);
1862 
1863 	/* Get the l4type in order to program FDIRCMD properly */
1864 	/* lowest 2 bits are FDIRCMD.L4TYPE, third lowest bit is FDIRCMD.IPV6 */
1865 	(void) ixgbe_atr_get_l4type_82599(input, &l4type);
1866 
1867 	/*
1868 	 * The lower 32-bits of fdirhashcmd is for FDIRHASH, the upper 32-bits
1869 	 * is for FDIRCMD.  Then do a 64-bit register write from FDIRHASH.
1870 	 */
1871 	fdirhash = sig_hash << IXGBE_FDIRHASH_SIG_SW_INDEX_SHIFT | bucket_hash;
1872 
1873 	fdircmd = (IXGBE_FDIRCMD_CMD_ADD_FLOW | IXGBE_FDIRCMD_FILTER_UPDATE |
1874 	    IXGBE_FDIRCMD_LAST | IXGBE_FDIRCMD_QUEUE_EN);
1875 
1876 	switch (l4type & IXGBE_ATR_L4TYPE_MASK) {
1877 	case IXGBE_ATR_L4TYPE_TCP:
1878 		fdircmd |= IXGBE_FDIRCMD_L4TYPE_TCP;
1879 		break;
1880 	case IXGBE_ATR_L4TYPE_UDP:
1881 		fdircmd |= IXGBE_FDIRCMD_L4TYPE_UDP;
1882 		break;
1883 	case IXGBE_ATR_L4TYPE_SCTP:
1884 		fdircmd |= IXGBE_FDIRCMD_L4TYPE_SCTP;
1885 		break;
1886 	default:
1887 		DEBUGOUT(" Error on l4type input\n");
1888 		return (IXGBE_ERR_CONFIG);
1889 	}
1890 
1891 	if (l4type & IXGBE_ATR_L4TYPE_IPV6_MASK)
1892 		fdircmd |= IXGBE_FDIRCMD_IPV6;
1893 
1894 	fdircmd |= ((u64)queue << IXGBE_FDIRCMD_RX_QUEUE_SHIFT);
1895 	fdirhashcmd = ((fdircmd << 32) | fdirhash);
1896 
1897 	DEBUGOUT2("Tx Queue=%x hash=%x\n", queue, fdirhash & 0x7FFF7FFF);
1898 	IXGBE_WRITE_REG64(hw, IXGBE_FDIRHASH, fdirhashcmd);
1899 
1900 	return (IXGBE_SUCCESS);
1901 }
1902 
1903 /*
1904  * ixgbe_fdir_add_perfect_filter_82599 - Adds a perfect filter
1905  * @hw: pointer to hardware structure
1906  * @input: input bitstream
1907  * @queue: queue index to direct traffic to
1908  *
1909  * Note that the caller to this function must lock before calling, since the
1910  * hardware writes must be protected from one another.
1911  */
1912 s32
1913 ixgbe_fdir_add_perfect_filter_82599(struct ixgbe_hw *hw,
1914     struct ixgbe_atr_input *input, u16 soft_id, u8 queue)
1915 {
1916 	u32 fdircmd = 0;
1917 	u32 fdirhash;
1918 	u32 src_ipv4, dst_ipv4;
1919 	u32 src_ipv6_1, src_ipv6_2, src_ipv6_3, src_ipv6_4;
1920 	u16 src_port, dst_port, vlan_id, flex_bytes;
1921 	u16 bucket_hash;
1922 	u8  l4type;
1923 
1924 	DEBUGFUNC("ixgbe_fdir_add_perfect_filter_82599");
1925 
1926 	/* Get our input values */
1927 	(void) ixgbe_atr_get_l4type_82599(input, &l4type);
1928 
1929 	/*
1930 	 * Check l4type formatting, and bail out before we touch the hardware
1931 	 * if there's a configuration issue
1932 	 */
1933 	switch (l4type & IXGBE_ATR_L4TYPE_MASK) {
1934 	case IXGBE_ATR_L4TYPE_TCP:
1935 		fdircmd |= IXGBE_FDIRCMD_L4TYPE_TCP;
1936 		break;
1937 	case IXGBE_ATR_L4TYPE_UDP:
1938 		fdircmd |= IXGBE_FDIRCMD_L4TYPE_UDP;
1939 		break;
1940 	case IXGBE_ATR_L4TYPE_SCTP:
1941 		fdircmd |= IXGBE_FDIRCMD_L4TYPE_SCTP;
1942 		break;
1943 	default:
1944 		DEBUGOUT(" Error on l4type input\n");
1945 		return (IXGBE_ERR_CONFIG);
1946 	}
1947 
1948 	bucket_hash = ixgbe_atr_compute_hash_82599(input,
1949 	    IXGBE_ATR_BUCKET_HASH_KEY);
1950 
1951 	/* bucket_hash is only 15 bits */
1952 	bucket_hash &= IXGBE_ATR_HASH_MASK;
1953 
1954 	(void) ixgbe_atr_get_vlan_id_82599(input, &vlan_id);
1955 	(void) ixgbe_atr_get_src_port_82599(input, &src_port);
1956 	(void) ixgbe_atr_get_dst_port_82599(input, &dst_port);
1957 	(void) ixgbe_atr_get_flex_byte_82599(input, &flex_bytes);
1958 
1959 	fdirhash = soft_id << IXGBE_FDIRHASH_SIG_SW_INDEX_SHIFT | bucket_hash;
1960 
1961 	/* Now figure out if we're IPv4 or IPv6 */
1962 	if (l4type & IXGBE_ATR_L4TYPE_IPV6_MASK) {
1963 		/* IPv6 */
1964 		(void) ixgbe_atr_get_src_ipv6_82599(input, &src_ipv6_1,
1965 		    &src_ipv6_2, &src_ipv6_3, &src_ipv6_4);
1966 
1967 		IXGBE_WRITE_REG(hw, IXGBE_FDIRSIPv6(0), src_ipv6_1);
1968 		IXGBE_WRITE_REG(hw, IXGBE_FDIRSIPv6(1), src_ipv6_2);
1969 		IXGBE_WRITE_REG(hw, IXGBE_FDIRSIPv6(2), src_ipv6_3);
1970 		/* The last 4 bytes is the same register as IPv4 */
1971 		IXGBE_WRITE_REG(hw, IXGBE_FDIRIPSA, src_ipv6_4);
1972 
1973 		fdircmd |= IXGBE_FDIRCMD_IPV6;
1974 		fdircmd |= IXGBE_FDIRCMD_IPv6DMATCH;
1975 	} else {
1976 		/* IPv4 */
1977 		(void) ixgbe_atr_get_src_ipv4_82599(input, &src_ipv4);
1978 		IXGBE_WRITE_REG(hw, IXGBE_FDIRIPSA, src_ipv4);
1979 
1980 	}
1981 
1982 	(void) ixgbe_atr_get_dst_ipv4_82599(input, &dst_ipv4);
1983 	IXGBE_WRITE_REG(hw, IXGBE_FDIRIPDA, dst_ipv4);
1984 
1985 	IXGBE_WRITE_REG(hw, IXGBE_FDIRVLAN, (vlan_id |
1986 	    (flex_bytes << IXGBE_FDIRVLAN_FLEX_SHIFT)));
1987 	IXGBE_WRITE_REG(hw, IXGBE_FDIRPORT, (src_port |
1988 	    (dst_port << IXGBE_FDIRPORT_DESTINATION_SHIFT)));
1989 
1990 	fdircmd |= IXGBE_FDIRCMD_CMD_ADD_FLOW;
1991 	fdircmd |= IXGBE_FDIRCMD_FILTER_UPDATE;
1992 	fdircmd |= IXGBE_FDIRCMD_LAST;
1993 	fdircmd |= IXGBE_FDIRCMD_QUEUE_EN;
1994 	fdircmd |= queue << IXGBE_FDIRCMD_RX_QUEUE_SHIFT;
1995 
1996 	IXGBE_WRITE_REG(hw, IXGBE_FDIRHASH, fdirhash);
1997 	IXGBE_WRITE_REG(hw, IXGBE_FDIRCMD, fdircmd);
1998 
1999 	return (IXGBE_SUCCESS);
2000 }
2001 
2002 /*
2003  * ixgbe_read_analog_reg8_82599 - Reads 8 bit Omer analog register
2004  * @hw: pointer to hardware structure
2005  * @reg: analog register to read
2006  * @val: read value
2007  *
2008  * Performs read operation to Omer analog register specified.
2009  */
2010 s32
2011 ixgbe_read_analog_reg8_82599(struct ixgbe_hw *hw, u32 reg, u8 *val)
2012 {
2013 	u32  core_ctl;
2014 
2015 	DEBUGFUNC("ixgbe_read_analog_reg8_82599");
2016 
2017 	IXGBE_WRITE_REG(hw, IXGBE_CORECTL, IXGBE_CORECTL_WRITE_CMD |
2018 	    (reg << 8));
2019 	IXGBE_WRITE_FLUSH(hw);
2020 	usec_delay(10);
2021 	core_ctl = IXGBE_READ_REG(hw, IXGBE_CORECTL);
2022 	*val = (u8)core_ctl;
2023 
2024 	return (IXGBE_SUCCESS);
2025 }
2026 
2027 /*
2028  * ixgbe_write_analog_reg8_82599 - Writes 8 bit Omer analog register
2029  * @hw: pointer to hardware structure
2030  * @reg: atlas register to write
2031  * @val: value to write
2032  *
2033  * Performs write operation to Omer analog register specified.
2034  */
2035 s32
2036 ixgbe_write_analog_reg8_82599(struct ixgbe_hw *hw, u32 reg, u8 val)
2037 {
2038 	u32  core_ctl;
2039 
2040 	DEBUGFUNC("ixgbe_write_analog_reg8_82599");
2041 
2042 	core_ctl = (reg << 8) | val;
2043 	IXGBE_WRITE_REG(hw, IXGBE_CORECTL, core_ctl);
2044 	IXGBE_WRITE_FLUSH(hw);
2045 	usec_delay(10);
2046 
2047 	return (IXGBE_SUCCESS);
2048 }
2049 
2050 /*
2051  * ixgbe_start_hw_rev_1_82599 - Prepare hardware for Tx/Rx
2052  * @hw: pointer to hardware structure
2053  *
2054  * Starts the hardware using the generic start_hw function.
2055  * Then performs revision-specific operations:
2056  * Clears the rate limiter registers.
2057  */
2058 s32
2059 ixgbe_start_hw_rev_1_82599(struct ixgbe_hw *hw)
2060 {
2061 	u32 i;
2062 	s32 ret_val = IXGBE_SUCCESS;
2063 
2064 	DEBUGFUNC("ixgbe_start_hw_rev_1__82599");
2065 
2066 	ret_val = ixgbe_start_hw_generic(hw);
2067 
2068 	/* Clear the rate limiters */
2069 	for (i = 0; i < hw->mac.max_tx_queues; i++) {
2070 		IXGBE_WRITE_REG(hw, IXGBE_RTTDQSEL, i);
2071 		IXGBE_WRITE_REG(hw, IXGBE_RTTBCNRC, 0);
2072 	}
2073 	IXGBE_WRITE_FLUSH(hw);
2074 
2075 	/* We need to run link autotry after the driver loads */
2076 	hw->mac.autotry_restart = true;
2077 
2078 	if (ret_val == IXGBE_SUCCESS)
2079 		ret_val = ixgbe_verify_fw_version_82599(hw);
2080 
2081 	return (ret_val);
2082 }
2083 
2084 /*
2085  * ixgbe_identify_phy_82599 - Get physical layer module
2086  * @hw: pointer to hardware structure
2087  *
2088  * Determines the physical layer module found on the current adapter.
2089  * If PHY already detected, maintains current PHY type in hw struct,
2090  * otherwise executes the PHY detection routine.
2091  */
2092 s32
2093 ixgbe_identify_phy_82599(struct ixgbe_hw *hw)
2094 {
2095 	s32 status = IXGBE_ERR_PHY_ADDR_INVALID;
2096 
2097 	DEBUGFUNC("ixgbe_identify_phy_82599");
2098 
2099 	/* Detect PHY if not unknown - returns success if already detected. */
2100 	status = ixgbe_identify_phy_generic(hw);
2101 	if (status != IXGBE_SUCCESS)
2102 		status = ixgbe_identify_sfp_module_generic(hw);
2103 	/* Set PHY type none if no PHY detected */
2104 	if (hw->phy.type == ixgbe_phy_unknown) {
2105 		hw->phy.type = ixgbe_phy_none;
2106 		status = IXGBE_SUCCESS;
2107 	}
2108 
2109 	/* Return error if SFP module has been detected but is not supported */
2110 	if (hw->phy.type == ixgbe_phy_sfp_unsupported)
2111 		status = IXGBE_ERR_SFP_NOT_SUPPORTED;
2112 
2113 	return (status);
2114 }
2115 
2116 /*
2117  * ixgbe_get_supported_physical_layer_82599 - Returns physical layer type
2118  * @hw: pointer to hardware structure
2119  *
2120  * Determines physical layer capabilities of the current configuration.
2121  */
2122 u32
2123 ixgbe_get_supported_physical_layer_82599(struct ixgbe_hw *hw)
2124 {
2125 	u32 physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN;
2126 	u32 autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
2127 	u32 autoc2 = IXGBE_READ_REG(hw, IXGBE_AUTOC2);
2128 	u32 pma_pmd_10g_serial = autoc2 & IXGBE_AUTOC2_10G_SERIAL_PMA_PMD_MASK;
2129 	u32 pma_pmd_10g_parallel = autoc & IXGBE_AUTOC_10G_PMA_PMD_MASK;
2130 	u32 pma_pmd_1g = autoc & IXGBE_AUTOC_1G_PMA_PMD_MASK;
2131 	u16 ext_ability = 0;
2132 	u8 comp_codes_10g = 0;
2133 
2134 	DEBUGFUNC("ixgbe_get_support_physical_layer_82599");
2135 
2136 	hw->phy.ops.identify(hw);
2137 
2138 	if (hw->phy.type == ixgbe_phy_tn ||
2139 	    hw->phy.type == ixgbe_phy_aq ||
2140 	    hw->phy.type == ixgbe_phy_cu_unknown) {
2141 		hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_EXT_ABILITY,
2142 		    IXGBE_MDIO_PMA_PMD_DEV_TYPE, &ext_ability);
2143 		if (ext_ability & IXGBE_MDIO_PHY_10GBASET_ABILITY)
2144 			physical_layer |= IXGBE_PHYSICAL_LAYER_10GBASE_T;
2145 		if (ext_ability & IXGBE_MDIO_PHY_1000BASET_ABILITY)
2146 			physical_layer |= IXGBE_PHYSICAL_LAYER_1000BASE_T;
2147 		if (ext_ability & IXGBE_MDIO_PHY_100BASETX_ABILITY)
2148 			physical_layer |= IXGBE_PHYSICAL_LAYER_100BASE_TX;
2149 		goto out;
2150 	}
2151 
2152 	switch (autoc & IXGBE_AUTOC_LMS_MASK) {
2153 	case IXGBE_AUTOC_LMS_1G_AN:
2154 	case IXGBE_AUTOC_LMS_1G_LINK_NO_AN:
2155 		if (pma_pmd_1g == IXGBE_AUTOC_1G_KX_BX) {
2156 			physical_layer = IXGBE_PHYSICAL_LAYER_1000BASE_KX |
2157 			    IXGBE_PHYSICAL_LAYER_1000BASE_BX;
2158 			goto out;
2159 		} else {
2160 			/* SFI mode so read SFP module */
2161 			goto sfp_check;
2162 		}
2163 	case IXGBE_AUTOC_LMS_10G_LINK_NO_AN:
2164 		if (pma_pmd_10g_parallel == IXGBE_AUTOC_10G_CX4)
2165 			physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_CX4;
2166 		else if (pma_pmd_10g_parallel == IXGBE_AUTOC_10G_KX4)
2167 			physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_KX4;
2168 		else if (pma_pmd_10g_parallel == IXGBE_AUTOC_10G_XAUI)
2169 			physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_XAUI;
2170 		goto out;
2171 	case IXGBE_AUTOC_LMS_10G_SERIAL:
2172 		if (pma_pmd_10g_serial == IXGBE_AUTOC2_10G_KR) {
2173 			physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_KR;
2174 			goto out;
2175 		} else if (pma_pmd_10g_serial == IXGBE_AUTOC2_10G_SFI)
2176 			goto sfp_check;
2177 		break;
2178 	case IXGBE_AUTOC_LMS_KX4_KX_KR:
2179 	case IXGBE_AUTOC_LMS_KX4_KX_KR_1G_AN:
2180 		if (autoc & IXGBE_AUTOC_KX_SUPP)
2181 			physical_layer |= IXGBE_PHYSICAL_LAYER_1000BASE_KX;
2182 		if (autoc & IXGBE_AUTOC_KX4_SUPP)
2183 			physical_layer |= IXGBE_PHYSICAL_LAYER_10GBASE_KX4;
2184 		if (autoc & IXGBE_AUTOC_KR_SUPP)
2185 			physical_layer |= IXGBE_PHYSICAL_LAYER_10GBASE_KR;
2186 		goto out;
2187 	default:
2188 		goto out;
2189 	}
2190 
2191 sfp_check:
2192 	/*
2193 	 * SFP check must be done last since DA modules are sometimes used to
2194 	 * test KR mode -  we need to id KR mode correctly before SFP module.
2195 	 * Call identify_sfp because the pluggable module may have changed
2196 	 */
2197 	hw->phy.ops.identify_sfp(hw);
2198 	if (hw->phy.sfp_type == ixgbe_sfp_type_not_present)
2199 		goto out;
2200 
2201 	switch (hw->phy.type) {
2202 	case ixgbe_phy_tw_tyco:
2203 	case ixgbe_phy_tw_unknown:
2204 		physical_layer = IXGBE_PHYSICAL_LAYER_SFP_PLUS_CU;
2205 		break;
2206 	case ixgbe_phy_sfp_avago:
2207 	case ixgbe_phy_sfp_ftl:
2208 	case ixgbe_phy_sfp_intel:
2209 	case ixgbe_phy_sfp_unknown:
2210 		hw->phy.ops.read_i2c_eeprom(hw,
2211 		    IXGBE_SFF_10GBE_COMP_CODES, &comp_codes_10g);
2212 		if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)
2213 			physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_SR;
2214 		else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)
2215 			physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_LR;
2216 		break;
2217 	default:
2218 		break;
2219 	}
2220 
2221 out:
2222 	return (physical_layer);
2223 }
2224 
2225 /*
2226  * ixgbe_enable_rx_dma_82599 - Enable the Rx DMA unit on 82599
2227  * @hw: pointer to hardware structure
2228  * @regval: register value to write to RXCTRL
2229  *
2230  * Enables the Rx DMA unit for 82599
2231  */
2232 s32
2233 ixgbe_enable_rx_dma_82599(struct ixgbe_hw *hw, u32 regval)
2234 {
2235 #define	IXGBE_MAX_SECRX_POLL	30
2236 	int i;
2237 	int secrxreg;
2238 
2239 	DEBUGFUNC("ixgbe_enable_rx_dma_82599");
2240 
2241 	/*
2242 	 * Workaround for 82599 silicon errata when enabling the Rx datapath.
2243 	 * If traffic is incoming before we enable the Rx unit, it could hang
2244 	 * the Rx DMA unit.  Therefore, make sure the security engine is
2245 	 * completely disabled prior to enabling the Rx unit.
2246 	 */
2247 	secrxreg = IXGBE_READ_REG(hw, IXGBE_SECRXCTRL);
2248 	secrxreg |= IXGBE_SECRXCTRL_RX_DIS;
2249 	IXGBE_WRITE_REG(hw, IXGBE_SECRXCTRL, secrxreg);
2250 	for (i = 0; i < IXGBE_MAX_SECRX_POLL; i++) {
2251 		secrxreg = IXGBE_READ_REG(hw, IXGBE_SECRXSTAT);
2252 		if (secrxreg & IXGBE_SECRXSTAT_SECRX_RDY)
2253 			break;
2254 		else
2255 			/* Use interrupt-safe sleep just in case */
2256 			usec_delay(10);
2257 	}
2258 
2259 	/* For informational purposes only */
2260 	if (i >= IXGBE_MAX_SECRX_POLL)
2261 		DEBUGOUT("Rx unit being enabled before security "
2262 		    "path fully disabled.	Continuing with init.\n");
2263 
2264 	IXGBE_WRITE_REG(hw, IXGBE_RXCTRL, regval);
2265 	secrxreg = IXGBE_READ_REG(hw, IXGBE_SECRXCTRL);
2266 	secrxreg &= ~IXGBE_SECRXCTRL_RX_DIS;
2267 	IXGBE_WRITE_REG(hw, IXGBE_SECRXCTRL, secrxreg);
2268 	IXGBE_WRITE_FLUSH(hw);
2269 
2270 	return (IXGBE_SUCCESS);
2271 }
2272 
2273 /*
2274  * ixgbe_get_device_caps_82599 - Get additional device capabilities
2275  * @hw: pointer to hardware structure
2276  * @device_caps: the EEPROM word with the extra device capabilities
2277  *
2278  * This function will read the EEPROM location for the device capabilities,
2279  * and return the word through device_caps.
2280  */
2281 s32
2282 ixgbe_get_device_caps_82599(struct ixgbe_hw *hw, u16 *device_caps)
2283 {
2284 	DEBUGFUNC("ixgbe_get_device_caps_82599");
2285 
2286 	hw->eeprom.ops.read(hw, IXGBE_DEVICE_CAPS, device_caps);
2287 
2288 	return (IXGBE_SUCCESS);
2289 }
2290 
2291 /*
2292  * ixgbe_verify_fw_version_82599 - verify fw version for 82599
2293  * @hw: pointer to hardware structure
2294  *
2295  * Verifies that installed the firmware version is 0.6 or higher
2296  * for SFI devices. All 82599 SFI devices should have version 0.6 or higher.
2297  *
2298  * Returns IXGBE_ERR_EEPROM_VERSION if the FW is not present or
2299  * if the FW version is not supported.
2300  */
2301 static s32
2302 ixgbe_verify_fw_version_82599(struct ixgbe_hw *hw)
2303 {
2304 	s32 status = IXGBE_ERR_EEPROM_VERSION;
2305 	u16 fw_offset, fw_ptp_cfg_offset;
2306 	u16 fw_version = 0;
2307 
2308 	DEBUGFUNC("ixgbe_verify_fw_version_82599");
2309 
2310 	/* firmware check is only necessary for SFI devices */
2311 	if (hw->phy.media_type != ixgbe_media_type_fiber) {
2312 		status = IXGBE_SUCCESS;
2313 		goto fw_version_out;
2314 	}
2315 
2316 	/* get the offset to the Firmware Module block */
2317 	hw->eeprom.ops.read(hw, IXGBE_FW_PTR, &fw_offset);
2318 
2319 	if ((fw_offset == 0) || (fw_offset == 0xFFFF))
2320 		goto fw_version_out;
2321 
2322 	/* get the offset to the Pass Through Patch Configuration block */
2323 	hw->eeprom.ops.read(hw, (fw_offset +
2324 	    IXGBE_FW_PASSTHROUGH_PATCH_CONFIG_PTR), &fw_ptp_cfg_offset);
2325 
2326 	if ((fw_ptp_cfg_offset == 0) || (fw_ptp_cfg_offset == 0xFFFF))
2327 		goto fw_version_out;
2328 
2329 	/* get the firmware version */
2330 	hw->eeprom.ops.read(hw, (fw_ptp_cfg_offset + IXGBE_FW_PATCH_VERSION_4),
2331 	    &fw_version);
2332 
2333 	if (fw_version > 0x5)
2334 		status = IXGBE_SUCCESS;
2335 
2336 fw_version_out:
2337 	return (status);
2338 }
2339