xref: /netbsd-src/sys/dev/pci/ixgbe/ixgbe_82598.c (revision a5847cc334d9a7029f6352b847e9e8d71a0f9e0c)
1 /******************************************************************************
2 
3   Copyright (c) 2001-2010, Intel Corporation
4   All rights reserved.
5 
6   Redistribution and use in source and binary forms, with or without
7   modification, are permitted provided that the following conditions are met:
8 
9    1. Redistributions of source code must retain the above copyright notice,
10       this list of conditions and the following disclaimer.
11 
12    2. Redistributions in binary form must reproduce the above copyright
13       notice, this list of conditions and the following disclaimer in the
14       documentation and/or other materials provided with the distribution.
15 
16    3. Neither the name of the Intel Corporation nor the names of its
17       contributors may be used to endorse or promote products derived from
18       this software without specific prior written permission.
19 
20   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   POSSIBILITY OF SUCH DAMAGE.
31 
32 ******************************************************************************/
33 /*$FreeBSD: src/sys/dev/ixgbe/ixgbe_82598.c,v 1.11 2010/11/26 22:46:32 jfv Exp $*/
34 /*$NetBSD: ixgbe_82598.c,v 1.1 2011/08/12 21:55:29 dyoung Exp $*/
35 
36 #include "ixgbe_type.h"
37 #include "ixgbe_api.h"
38 #include "ixgbe_common.h"
39 #include "ixgbe_phy.h"
40 
41 u32 ixgbe_get_pcie_msix_count_82598(struct ixgbe_hw *hw);
42 s32 ixgbe_init_ops_82598(struct ixgbe_hw *hw);
43 static s32 ixgbe_get_link_capabilities_82598(struct ixgbe_hw *hw,
44                                              ixgbe_link_speed *speed,
45                                              bool *autoneg);
46 static enum ixgbe_media_type ixgbe_get_media_type_82598(struct ixgbe_hw *hw);
47 s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num);
48 static s32 ixgbe_start_mac_link_82598(struct ixgbe_hw *hw,
49 					bool autoneg_wait_to_complete);
50 static s32 ixgbe_check_mac_link_82598(struct ixgbe_hw *hw,
51                                       ixgbe_link_speed *speed, bool *link_up,
52                                       bool link_up_wait_to_complete);
53 static s32 ixgbe_setup_mac_link_82598(struct ixgbe_hw *hw,
54                                             ixgbe_link_speed speed,
55                                             bool autoneg,
56                                             bool autoneg_wait_to_complete);
57 static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw,
58                                                ixgbe_link_speed speed,
59                                                bool autoneg,
60                                                bool autoneg_wait_to_complete);
61 static s32 ixgbe_reset_hw_82598(struct ixgbe_hw *hw);
62 s32 ixgbe_start_hw_82598(struct ixgbe_hw *hw);
63 void ixgbe_enable_relaxed_ordering_82598(struct ixgbe_hw *hw);
64 s32 ixgbe_set_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq);
65 static s32 ixgbe_clear_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq);
66 s32 ixgbe_set_vfta_82598(struct ixgbe_hw *hw, u32 vlan,
67                          u32 vind, bool vlan_on);
68 static s32 ixgbe_clear_vfta_82598(struct ixgbe_hw *hw);
69 s32 ixgbe_read_analog_reg8_82598(struct ixgbe_hw *hw, u32 reg, u8 *val);
70 s32 ixgbe_write_analog_reg8_82598(struct ixgbe_hw *hw, u32 reg, u8 val);
71 s32 ixgbe_read_i2c_eeprom_82598(struct ixgbe_hw *hw, u8 byte_offset,
72                                 u8 *eeprom_data);
73 u32 ixgbe_get_supported_physical_layer_82598(struct ixgbe_hw *hw);
74 s32 ixgbe_init_phy_ops_82598(struct ixgbe_hw *hw);
75 void ixgbe_set_lan_id_multi_port_pcie_82598(struct ixgbe_hw *hw);
76 void ixgbe_set_pcie_completion_timeout(struct ixgbe_hw *hw);
77 
78 /**
79  *  ixgbe_set_pcie_completion_timeout - set pci-e completion timeout
80  *  @hw: pointer to the HW structure
81  *
82  *  The defaults for 82598 should be in the range of 50us to 50ms,
83  *  however the hardware default for these parts is 500us to 1ms which is less
84  *  than the 10ms recommended by the pci-e spec.  To address this we need to
85  *  increase the value to either 10ms to 250ms for capability version 1 config,
86  *  or 16ms to 55ms for version 2.
87  **/
88 void ixgbe_set_pcie_completion_timeout(struct ixgbe_hw *hw)
89 {
90 	u32 gcr = IXGBE_READ_REG(hw, IXGBE_GCR);
91 	u16 pcie_devctl2;
92 
93 	/* only take action if timeout value is defaulted to 0 */
94 	if (gcr & IXGBE_GCR_CMPL_TMOUT_MASK)
95 		goto out;
96 
97 	/*
98 	 * if capababilities version is type 1 we can write the
99 	 * timeout of 10ms to 250ms through the GCR register
100 	 */
101 	if (!(gcr & IXGBE_GCR_CAP_VER2)) {
102 		gcr |= IXGBE_GCR_CMPL_TMOUT_10ms;
103 		goto out;
104 	}
105 
106 	/*
107 	 * for version 2 capabilities we need to write the config space
108 	 * directly in order to set the completion timeout value for
109 	 * 16ms to 55ms
110 	 */
111 	pcie_devctl2 = IXGBE_READ_PCIE_WORD(hw, IXGBE_PCI_DEVICE_CONTROL2);
112 	pcie_devctl2 |= IXGBE_PCI_DEVICE_CONTROL2_16ms;
113 	IXGBE_WRITE_PCIE_WORD(hw, IXGBE_PCI_DEVICE_CONTROL2, pcie_devctl2);
114 out:
115 	/* disable completion timeout resend */
116 	gcr &= ~IXGBE_GCR_CMPL_TMOUT_RESEND;
117 	IXGBE_WRITE_REG(hw, IXGBE_GCR, gcr);
118 }
119 
120 /**
121  *  ixgbe_get_pcie_msix_count_82598 - Gets MSI-X vector count
122  *  @hw: pointer to hardware structure
123  *
124  *  Read PCIe configuration space, and get the MSI-X vector count from
125  *  the capabilities table.
126  **/
127 u32 ixgbe_get_pcie_msix_count_82598(struct ixgbe_hw *hw)
128 {
129 	u32 msix_count = 18;
130 
131 	DEBUGFUNC("ixgbe_get_pcie_msix_count_82598");
132 
133 	if (hw->mac.msix_vectors_from_pcie) {
134 		msix_count = IXGBE_READ_PCIE_WORD(hw,
135 		                                  IXGBE_PCIE_MSIX_82598_CAPS);
136 		msix_count &= IXGBE_PCIE_MSIX_TBL_SZ_MASK;
137 
138 		/* MSI-X count is zero-based in HW, so increment to give
139 		 * proper value */
140 		msix_count++;
141 	}
142 	return msix_count;
143 }
144 
145 /**
146  *  ixgbe_init_ops_82598 - Inits func ptrs and MAC type
147  *  @hw: pointer to hardware structure
148  *
149  *  Initialize the function pointers and assign the MAC type for 82598.
150  *  Does not touch the hardware.
151  **/
152 s32 ixgbe_init_ops_82598(struct ixgbe_hw *hw)
153 {
154 	struct ixgbe_mac_info *mac = &hw->mac;
155 	struct ixgbe_phy_info *phy = &hw->phy;
156 	s32 ret_val;
157 
158 	DEBUGFUNC("ixgbe_init_ops_82598");
159 
160 	ret_val = ixgbe_init_phy_ops_generic(hw);
161 	ret_val = ixgbe_init_ops_generic(hw);
162 
163 	/* PHY */
164 	phy->ops.init = &ixgbe_init_phy_ops_82598;
165 
166 	/* MAC */
167 	mac->ops.start_hw = &ixgbe_start_hw_82598;
168 	mac->ops.enable_relaxed_ordering = &ixgbe_enable_relaxed_ordering_82598;
169 	mac->ops.reset_hw = &ixgbe_reset_hw_82598;
170 	mac->ops.get_media_type = &ixgbe_get_media_type_82598;
171 	mac->ops.get_supported_physical_layer =
172 	                            &ixgbe_get_supported_physical_layer_82598;
173 	mac->ops.read_analog_reg8 = &ixgbe_read_analog_reg8_82598;
174 	mac->ops.write_analog_reg8 = &ixgbe_write_analog_reg8_82598;
175 	mac->ops.set_lan_id = &ixgbe_set_lan_id_multi_port_pcie_82598;
176 
177 	/* RAR, Multicast, VLAN */
178 	mac->ops.set_vmdq = &ixgbe_set_vmdq_82598;
179 	mac->ops.clear_vmdq = &ixgbe_clear_vmdq_82598;
180 	mac->ops.set_vfta = &ixgbe_set_vfta_82598;
181 	mac->ops.clear_vfta = &ixgbe_clear_vfta_82598;
182 
183 	/* Flow Control */
184 	mac->ops.fc_enable = &ixgbe_fc_enable_82598;
185 
186 	mac->mcft_size       = 128;
187 	mac->vft_size        = 128;
188 	mac->num_rar_entries = 16;
189 	mac->rx_pb_size      = 512;
190 	mac->max_tx_queues   = 32;
191 	mac->max_rx_queues   = 64;
192 	mac->max_msix_vectors = ixgbe_get_pcie_msix_count_82598(hw);
193 
194 	/* SFP+ Module */
195 	phy->ops.read_i2c_eeprom = &ixgbe_read_i2c_eeprom_82598;
196 
197 	/* Link */
198 	mac->ops.check_link = &ixgbe_check_mac_link_82598;
199 	mac->ops.setup_link = &ixgbe_setup_mac_link_82598;
200 	mac->ops.flap_tx_laser = NULL;
201 	mac->ops.get_link_capabilities =
202 	                       &ixgbe_get_link_capabilities_82598;
203 
204 	return ret_val;
205 }
206 
207 /**
208  *  ixgbe_init_phy_ops_82598 - PHY/SFP specific init
209  *  @hw: pointer to hardware structure
210  *
211  *  Initialize any function pointers that were not able to be
212  *  set during init_shared_code because the PHY/SFP type was
213  *  not known.  Perform the SFP init if necessary.
214  *
215  **/
216 s32 ixgbe_init_phy_ops_82598(struct ixgbe_hw *hw)
217 {
218 	struct ixgbe_mac_info *mac = &hw->mac;
219 	struct ixgbe_phy_info *phy = &hw->phy;
220 	s32 ret_val = IXGBE_SUCCESS;
221 	u16 list_offset, data_offset;
222 
223 	DEBUGFUNC("ixgbe_init_phy_ops_82598");
224 
225 	/* Identify the PHY */
226 	phy->ops.identify(hw);
227 
228 	/* Overwrite the link function pointers if copper PHY */
229 	if (mac->ops.get_media_type(hw) == ixgbe_media_type_copper) {
230 		mac->ops.setup_link = &ixgbe_setup_copper_link_82598;
231 		mac->ops.get_link_capabilities =
232 		                  &ixgbe_get_copper_link_capabilities_generic;
233 	}
234 
235 	switch (hw->phy.type) {
236 	case ixgbe_phy_tn:
237 		phy->ops.setup_link = &ixgbe_setup_phy_link_tnx;
238 		phy->ops.check_link = &ixgbe_check_phy_link_tnx;
239 		phy->ops.get_firmware_version =
240 		             &ixgbe_get_phy_firmware_version_tnx;
241 		break;
242 	case ixgbe_phy_aq:
243 		phy->ops.get_firmware_version =
244 		             &ixgbe_get_phy_firmware_version_generic;
245 		break;
246 	case ixgbe_phy_nl:
247 		phy->ops.reset = &ixgbe_reset_phy_nl;
248 
249 		/* Call SFP+ identify routine to get the SFP+ module type */
250 		ret_val = phy->ops.identify_sfp(hw);
251 		if (ret_val != IXGBE_SUCCESS)
252 			goto out;
253 		else if (hw->phy.sfp_type == ixgbe_sfp_type_unknown) {
254 			ret_val = IXGBE_ERR_SFP_NOT_SUPPORTED;
255 			goto out;
256 		}
257 
258 		/* Check to see if SFP+ module is supported */
259 		ret_val = ixgbe_get_sfp_init_sequence_offsets(hw,
260 		                                            &list_offset,
261 		                                            &data_offset);
262 		if (ret_val != IXGBE_SUCCESS) {
263 			ret_val = IXGBE_ERR_SFP_NOT_SUPPORTED;
264 			goto out;
265 		}
266 		break;
267 	default:
268 		break;
269 	}
270 
271 out:
272 	return ret_val;
273 }
274 
275 /**
276  *  ixgbe_start_hw_82598 - Prepare hardware for Tx/Rx
277  *  @hw: pointer to hardware structure
278  *
279  *  Starts the hardware using the generic start_hw function.
280  *  Disables relaxed ordering Then set pcie completion timeout
281  *
282  **/
283 s32 ixgbe_start_hw_82598(struct ixgbe_hw *hw)
284 {
285 	u32 regval;
286 	u32 i;
287 	s32 ret_val = IXGBE_SUCCESS;
288 
289 	DEBUGFUNC("ixgbe_start_hw_82598");
290 
291 	ret_val = ixgbe_start_hw_generic(hw);
292 
293 	/* Disable relaxed ordering */
294 	for (i = 0; ((i < hw->mac.max_tx_queues) &&
295 	     (i < IXGBE_DCA_MAX_QUEUES_82598)); i++) {
296 		regval = IXGBE_READ_REG(hw, IXGBE_DCA_TXCTRL(i));
297 		regval &= ~IXGBE_DCA_TXCTRL_TX_WB_RO_EN;
298 		IXGBE_WRITE_REG(hw, IXGBE_DCA_TXCTRL(i), regval);
299 	}
300 
301 	for (i = 0; ((i < hw->mac.max_rx_queues) &&
302 	     (i < IXGBE_DCA_MAX_QUEUES_82598)); i++) {
303 		regval = IXGBE_READ_REG(hw, IXGBE_DCA_RXCTRL(i));
304 		regval &= ~(IXGBE_DCA_RXCTRL_DESC_WRO_EN |
305 		            IXGBE_DCA_RXCTRL_DESC_HSRO_EN);
306 		IXGBE_WRITE_REG(hw, IXGBE_DCA_RXCTRL(i), regval);
307 	}
308 
309 	/* set the completion timeout for interface */
310 	if (ret_val == IXGBE_SUCCESS)
311 		ixgbe_set_pcie_completion_timeout(hw);
312 
313 	return ret_val;
314 }
315 
316 /**
317  *  ixgbe_get_link_capabilities_82598 - Determines link capabilities
318  *  @hw: pointer to hardware structure
319  *  @speed: pointer to link speed
320  *  @autoneg: boolean auto-negotiation value
321  *
322  *  Determines the link capabilities by reading the AUTOC register.
323  **/
324 static s32 ixgbe_get_link_capabilities_82598(struct ixgbe_hw *hw,
325                                              ixgbe_link_speed *speed,
326                                              bool *autoneg)
327 {
328 	s32 status = IXGBE_SUCCESS;
329 	u32 autoc = 0;
330 
331 	DEBUGFUNC("ixgbe_get_link_capabilities_82598");
332 
333 	/*
334 	 * Determine link capabilities based on the stored value of AUTOC,
335 	 * which represents EEPROM defaults.  If AUTOC value has not been
336 	 * stored, use the current register value.
337 	 */
338 	if (hw->mac.orig_link_settings_stored)
339 		autoc = hw->mac.orig_autoc;
340 	else
341 		autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
342 
343 	switch (autoc & IXGBE_AUTOC_LMS_MASK) {
344 	case IXGBE_AUTOC_LMS_1G_LINK_NO_AN:
345 		*speed = IXGBE_LINK_SPEED_1GB_FULL;
346 		*autoneg = FALSE;
347 		break;
348 
349 	case IXGBE_AUTOC_LMS_10G_LINK_NO_AN:
350 		*speed = IXGBE_LINK_SPEED_10GB_FULL;
351 		*autoneg = FALSE;
352 		break;
353 
354 	case IXGBE_AUTOC_LMS_1G_AN:
355 		*speed = IXGBE_LINK_SPEED_1GB_FULL;
356 		*autoneg = TRUE;
357 		break;
358 
359 	case IXGBE_AUTOC_LMS_KX4_AN:
360 	case IXGBE_AUTOC_LMS_KX4_AN_1G_AN:
361 		*speed = IXGBE_LINK_SPEED_UNKNOWN;
362 		if (autoc & IXGBE_AUTOC_KX4_SUPP)
363 			*speed |= IXGBE_LINK_SPEED_10GB_FULL;
364 		if (autoc & IXGBE_AUTOC_KX_SUPP)
365 			*speed |= IXGBE_LINK_SPEED_1GB_FULL;
366 		*autoneg = TRUE;
367 		break;
368 
369 	default:
370 		status = IXGBE_ERR_LINK_SETUP;
371 		break;
372 	}
373 
374 	return status;
375 }
376 
377 /**
378  *  ixgbe_get_media_type_82598 - Determines media type
379  *  @hw: pointer to hardware structure
380  *
381  *  Returns the media type (fiber, copper, backplane)
382  **/
383 static enum ixgbe_media_type ixgbe_get_media_type_82598(struct ixgbe_hw *hw)
384 {
385 	enum ixgbe_media_type media_type;
386 
387 	DEBUGFUNC("ixgbe_get_media_type_82598");
388 
389 	/* Detect if there is a copper PHY attached. */
390 	switch (hw->phy.type) {
391 	case ixgbe_phy_cu_unknown:
392 	case ixgbe_phy_tn:
393 	case ixgbe_phy_aq:
394 		media_type = ixgbe_media_type_copper;
395 		goto out;
396 	default:
397 		break;
398 	}
399 
400 	/* Media type for I82598 is based on device ID */
401 	switch (hw->device_id) {
402 	case IXGBE_DEV_ID_82598:
403 	case IXGBE_DEV_ID_82598_BX:
404 		/* Default device ID is mezzanine card KX/KX4 */
405 		media_type = ixgbe_media_type_backplane;
406 		break;
407 	case IXGBE_DEV_ID_82598AF_DUAL_PORT:
408 	case IXGBE_DEV_ID_82598AF_SINGLE_PORT:
409 	case IXGBE_DEV_ID_82598_DA_DUAL_PORT:
410 	case IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM:
411 	case IXGBE_DEV_ID_82598EB_XF_LR:
412 	case IXGBE_DEV_ID_82598EB_SFP_LOM:
413 		media_type = ixgbe_media_type_fiber;
414 		break;
415 	case IXGBE_DEV_ID_82598EB_CX4:
416 	case IXGBE_DEV_ID_82598_CX4_DUAL_PORT:
417 		media_type = ixgbe_media_type_cx4;
418 		break;
419 	case IXGBE_DEV_ID_82598AT:
420 	case IXGBE_DEV_ID_82598AT2:
421 		media_type = ixgbe_media_type_copper;
422 		break;
423 	default:
424 		media_type = ixgbe_media_type_unknown;
425 		break;
426 	}
427 out:
428 	return media_type;
429 }
430 
431 /**
432  *  ixgbe_fc_enable_82598 - Enable flow control
433  *  @hw: pointer to hardware structure
434  *  @packetbuf_num: packet buffer number (0-7)
435  *
436  *  Enable flow control according to the current settings.
437  **/
438 s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num)
439 {
440 	s32 ret_val = IXGBE_SUCCESS;
441 	u32 fctrl_reg;
442 	u32 rmcs_reg;
443 	u32 reg;
444 	u32 rx_pba_size;
445 	u32 link_speed = 0;
446 	bool link_up;
447 
448 	DEBUGFUNC("ixgbe_fc_enable_82598");
449 
450 	/*
451 	 * On 82598 having Rx FC on causes resets while doing 1G
452 	 * so if it's on turn it off once we know link_speed. For
453 	 * more details see 82598 Specification update.
454 	 */
455 	hw->mac.ops.check_link(hw, &link_speed, &link_up, FALSE);
456 	if (link_up && link_speed == IXGBE_LINK_SPEED_1GB_FULL) {
457 		switch (hw->fc.requested_mode) {
458 		case ixgbe_fc_full:
459 			hw->fc.requested_mode = ixgbe_fc_tx_pause;
460 			break;
461 		case ixgbe_fc_rx_pause:
462 			hw->fc.requested_mode = ixgbe_fc_none;
463 			break;
464 		default:
465 			/* no change */
466 			break;
467 		}
468 	}
469 
470 	/* Negotiate the fc mode to use */
471 	ret_val = ixgbe_fc_autoneg(hw);
472 	if (ret_val == IXGBE_ERR_FLOW_CONTROL)
473 		goto out;
474 
475 	/* Disable any previous flow control settings */
476 	fctrl_reg = IXGBE_READ_REG(hw, IXGBE_FCTRL);
477 	fctrl_reg &= ~(IXGBE_FCTRL_RFCE | IXGBE_FCTRL_RPFCE);
478 
479 	rmcs_reg = IXGBE_READ_REG(hw, IXGBE_RMCS);
480 	rmcs_reg &= ~(IXGBE_RMCS_TFCE_PRIORITY | IXGBE_RMCS_TFCE_802_3X);
481 
482 	/*
483 	 * The possible values of fc.current_mode are:
484 	 * 0: Flow control is completely disabled
485 	 * 1: Rx flow control is enabled (we can receive pause frames,
486 	 *    but not send pause frames).
487 	 * 2: Tx flow control is enabled (we can send pause frames but
488 	 *     we do not support receiving pause frames).
489 	 * 3: Both Rx and Tx flow control (symmetric) are enabled.
490 	 * other: Invalid.
491 	 */
492 	switch (hw->fc.current_mode) {
493 	case ixgbe_fc_none:
494 		/*
495 		 * Flow control is disabled by software override or autoneg.
496 		 * The code below will actually disable it in the HW.
497 		 */
498 		break;
499 	case ixgbe_fc_rx_pause:
500 		/*
501 		 * Rx Flow control is enabled and Tx Flow control is
502 		 * disabled by software override. Since there really
503 		 * isn't a way to advertise that we are capable of RX
504 		 * Pause ONLY, we will advertise that we support both
505 		 * symmetric and asymmetric Rx PAUSE.  Later, we will
506 		 * disable the adapter's ability to send PAUSE frames.
507 		 */
508 		fctrl_reg |= IXGBE_FCTRL_RFCE;
509 		break;
510 	case ixgbe_fc_tx_pause:
511 		/*
512 		 * Tx Flow control is enabled, and Rx Flow control is
513 		 * disabled by software override.
514 		 */
515 		rmcs_reg |= IXGBE_RMCS_TFCE_802_3X;
516 		break;
517 	case ixgbe_fc_full:
518 		/* Flow control (both Rx and Tx) is enabled by SW override. */
519 		fctrl_reg |= IXGBE_FCTRL_RFCE;
520 		rmcs_reg |= IXGBE_RMCS_TFCE_802_3X;
521 		break;
522 	default:
523 		DEBUGOUT("Flow control param set incorrectly\n");
524 		ret_val = IXGBE_ERR_CONFIG;
525 		goto out;
526 		break;
527 	}
528 
529 	/* Set 802.3x based flow control settings. */
530 	fctrl_reg |= IXGBE_FCTRL_DPF;
531 	IXGBE_WRITE_REG(hw, IXGBE_FCTRL, fctrl_reg);
532 	IXGBE_WRITE_REG(hw, IXGBE_RMCS, rmcs_reg);
533 
534 	/* Set up and enable Rx high/low water mark thresholds, enable XON. */
535 	if (hw->fc.current_mode & ixgbe_fc_tx_pause) {
536 		rx_pba_size = IXGBE_READ_REG(hw, IXGBE_RXPBSIZE(packetbuf_num));
537 		rx_pba_size >>= IXGBE_RXPBSIZE_SHIFT;
538 
539 		reg = (rx_pba_size - hw->fc.low_water) << 6;
540 		if (hw->fc.send_xon)
541 			reg |= IXGBE_FCRTL_XONE;
542 
543 		IXGBE_WRITE_REG(hw, IXGBE_FCRTL(packetbuf_num), reg);
544 
545 		reg = (rx_pba_size - hw->fc.high_water) << 6;
546 		reg |= IXGBE_FCRTH_FCEN;
547 
548 		IXGBE_WRITE_REG(hw, IXGBE_FCRTH(packetbuf_num), reg);
549 	}
550 
551 	/* Configure pause time (2 TCs per register) */
552 	reg = IXGBE_READ_REG(hw, IXGBE_FCTTV(packetbuf_num / 2));
553 	if ((packetbuf_num & 1) == 0)
554 		reg = (reg & 0xFFFF0000) | hw->fc.pause_time;
555 	else
556 		reg = (reg & 0x0000FFFF) | (hw->fc.pause_time << 16);
557 	IXGBE_WRITE_REG(hw, IXGBE_FCTTV(packetbuf_num / 2), reg);
558 
559 	IXGBE_WRITE_REG(hw, IXGBE_FCRTV, (hw->fc.pause_time >> 1));
560 
561 out:
562 	return ret_val;
563 }
564 
565 /**
566  *  ixgbe_start_mac_link_82598 - Configures MAC link settings
567  *  @hw: pointer to hardware structure
568  *
569  *  Configures link settings based on values in the ixgbe_hw struct.
570  *  Restarts the link.  Performs autonegotiation if needed.
571  **/
572 static s32 ixgbe_start_mac_link_82598(struct ixgbe_hw *hw,
573                                       bool autoneg_wait_to_complete)
574 {
575 	u32 autoc_reg;
576 	u32 links_reg;
577 	u32 i;
578 	s32 status = IXGBE_SUCCESS;
579 
580 	DEBUGFUNC("ixgbe_start_mac_link_82598");
581 
582 	/* Restart link */
583 	autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
584 	autoc_reg |= IXGBE_AUTOC_AN_RESTART;
585 	IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc_reg);
586 
587 	/* Only poll for autoneg to complete if specified to do so */
588 	if (autoneg_wait_to_complete) {
589 		if ((autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
590 		     IXGBE_AUTOC_LMS_KX4_AN ||
591 		    (autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
592 		     IXGBE_AUTOC_LMS_KX4_AN_1G_AN) {
593 			links_reg = 0; /* Just in case Autoneg time = 0 */
594 			for (i = 0; i < IXGBE_AUTO_NEG_TIME; i++) {
595 				links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
596 				if (links_reg & IXGBE_LINKS_KX_AN_COMP)
597 					break;
598 				msec_delay(100);
599 			}
600 			if (!(links_reg & IXGBE_LINKS_KX_AN_COMP)) {
601 				status = IXGBE_ERR_AUTONEG_NOT_COMPLETE;
602 				DEBUGOUT("Autonegotiation did not complete.\n");
603 			}
604 		}
605 	}
606 
607 	/* Add delay to filter out noises during initial link setup */
608 	msec_delay(50);
609 
610 	return status;
611 }
612 
613 /**
614  *  ixgbe_validate_link_ready - Function looks for phy link
615  *  @hw: pointer to hardware structure
616  *
617  *  Function indicates success when phy link is available. If phy is not ready
618  *  within 5 seconds of MAC indicating link, the function returns error.
619  **/
620 static s32 ixgbe_validate_link_ready(struct ixgbe_hw *hw)
621 {
622 	u32 timeout;
623 	u16 an_reg;
624 
625 	if (hw->device_id != IXGBE_DEV_ID_82598AT2)
626 		return IXGBE_SUCCESS;
627 
628 	for (timeout = 0;
629 	     timeout < IXGBE_VALIDATE_LINK_READY_TIMEOUT; timeout++) {
630 		hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_STATUS,
631 		                     IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &an_reg);
632 
633 		if ((an_reg & IXGBE_MII_AUTONEG_COMPLETE) &&
634 		    (an_reg & IXGBE_MII_AUTONEG_LINK_UP))
635 			break;
636 
637 		msec_delay(100);
638 	}
639 
640 	if (timeout == IXGBE_VALIDATE_LINK_READY_TIMEOUT) {
641 		DEBUGOUT("Link was indicated but link is down\n");
642 		return IXGBE_ERR_LINK_SETUP;
643 	}
644 
645 	return IXGBE_SUCCESS;
646 }
647 
648 /**
649  *  ixgbe_check_mac_link_82598 - Get link/speed status
650  *  @hw: pointer to hardware structure
651  *  @speed: pointer to link speed
652  *  @link_up: TRUE is link is up, FALSE otherwise
653  *  @link_up_wait_to_complete: bool used to wait for link up or not
654  *
655  *  Reads the links register to determine if link is up and the current speed
656  **/
657 static s32 ixgbe_check_mac_link_82598(struct ixgbe_hw *hw,
658                                       ixgbe_link_speed *speed, bool *link_up,
659                                       bool link_up_wait_to_complete)
660 {
661 	u32 links_reg;
662 	u32 i;
663 	u16 link_reg, adapt_comp_reg;
664 
665 	DEBUGFUNC("ixgbe_check_mac_link_82598");
666 
667 	/*
668 	 * SERDES PHY requires us to read link status from undocumented
669 	 * register 0xC79F.  Bit 0 set indicates link is up/ready; clear
670 	 * indicates link down.  OxC00C is read to check that the XAUI lanes
671 	 * are active.  Bit 0 clear indicates active; set indicates inactive.
672 	 */
673 	if (hw->phy.type == ixgbe_phy_nl) {
674 		hw->phy.ops.read_reg(hw, 0xC79F, IXGBE_TWINAX_DEV, &link_reg);
675 		hw->phy.ops.read_reg(hw, 0xC79F, IXGBE_TWINAX_DEV, &link_reg);
676 		hw->phy.ops.read_reg(hw, 0xC00C, IXGBE_TWINAX_DEV,
677 		                     &adapt_comp_reg);
678 		if (link_up_wait_to_complete) {
679 			for (i = 0; i < IXGBE_LINK_UP_TIME; i++) {
680 				if ((link_reg & 1) &&
681 				    ((adapt_comp_reg & 1) == 0)) {
682 					*link_up = TRUE;
683 					break;
684 				} else {
685 					*link_up = FALSE;
686 				}
687 				msec_delay(100);
688 				hw->phy.ops.read_reg(hw, 0xC79F,
689 				                     IXGBE_TWINAX_DEV,
690 				                     &link_reg);
691 				hw->phy.ops.read_reg(hw, 0xC00C,
692 				                     IXGBE_TWINAX_DEV,
693 				                     &adapt_comp_reg);
694 			}
695 		} else {
696 			if ((link_reg & 1) && ((adapt_comp_reg & 1) == 0))
697 				*link_up = TRUE;
698 			else
699 				*link_up = FALSE;
700 		}
701 
702 		if (*link_up == FALSE)
703 			goto out;
704 	}
705 
706 	links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
707 	if (link_up_wait_to_complete) {
708 		for (i = 0; i < IXGBE_LINK_UP_TIME; i++) {
709 			if (links_reg & IXGBE_LINKS_UP) {
710 				*link_up = TRUE;
711 				break;
712 			} else {
713 				*link_up = FALSE;
714 			}
715 			msec_delay(100);
716 			links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
717 		}
718 	} else {
719 		if (links_reg & IXGBE_LINKS_UP)
720 			*link_up = TRUE;
721 		else
722 			*link_up = FALSE;
723 	}
724 
725 	if (links_reg & IXGBE_LINKS_SPEED)
726 		*speed = IXGBE_LINK_SPEED_10GB_FULL;
727 	else
728 		*speed = IXGBE_LINK_SPEED_1GB_FULL;
729 
730 	if ((hw->device_id == IXGBE_DEV_ID_82598AT2) && (*link_up == TRUE) &&
731 	    (ixgbe_validate_link_ready(hw) != IXGBE_SUCCESS))
732 		*link_up = FALSE;
733 
734 	/* if link is down, zero out the current_mode */
735 	if (*link_up == FALSE) {
736 		hw->fc.current_mode = ixgbe_fc_none;
737 		hw->fc.fc_was_autonegged = FALSE;
738 	}
739 out:
740 	return IXGBE_SUCCESS;
741 }
742 
743 /**
744  *  ixgbe_setup_mac_link_82598 - Set MAC link speed
745  *  @hw: pointer to hardware structure
746  *  @speed: new link speed
747  *  @autoneg: TRUE if autonegotiation enabled
748  *  @autoneg_wait_to_complete: TRUE when waiting for completion is needed
749  *
750  *  Set the link speed in the AUTOC register and restarts link.
751  **/
752 static s32 ixgbe_setup_mac_link_82598(struct ixgbe_hw *hw,
753                                            ixgbe_link_speed speed, bool autoneg,
754                                            bool autoneg_wait_to_complete)
755 {
756 	s32              status            = IXGBE_SUCCESS;
757 	ixgbe_link_speed link_capabilities = IXGBE_LINK_SPEED_UNKNOWN;
758 	u32              curr_autoc        = IXGBE_READ_REG(hw, IXGBE_AUTOC);
759 	u32              autoc             = curr_autoc;
760 	u32              link_mode         = autoc & IXGBE_AUTOC_LMS_MASK;
761 
762 	DEBUGFUNC("ixgbe_setup_mac_link_82598");
763 
764 	/* Check to see if speed passed in is supported. */
765 	ixgbe_get_link_capabilities(hw, &link_capabilities, &autoneg);
766 	speed &= link_capabilities;
767 
768 	if (speed == IXGBE_LINK_SPEED_UNKNOWN)
769 		status = IXGBE_ERR_LINK_SETUP;
770 
771 	/* Set KX4/KX support according to speed requested */
772 	else if (link_mode == IXGBE_AUTOC_LMS_KX4_AN ||
773 	         link_mode == IXGBE_AUTOC_LMS_KX4_AN_1G_AN) {
774 		autoc &= ~IXGBE_AUTOC_KX4_KX_SUPP_MASK;
775 		if (speed & IXGBE_LINK_SPEED_10GB_FULL)
776 			autoc |= IXGBE_AUTOC_KX4_SUPP;
777 		if (speed & IXGBE_LINK_SPEED_1GB_FULL)
778 			autoc |= IXGBE_AUTOC_KX_SUPP;
779 		if (autoc != curr_autoc)
780 			IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc);
781 	}
782 
783 	if (status == IXGBE_SUCCESS) {
784 		/*
785 		 * Setup and restart the link based on the new values in
786 		 * ixgbe_hw This will write the AUTOC register based on the new
787 		 * stored values
788 		 */
789 		status = ixgbe_start_mac_link_82598(hw,
790 		                                    autoneg_wait_to_complete);
791 	}
792 
793 	return status;
794 }
795 
796 
797 /**
798  *  ixgbe_setup_copper_link_82598 - Set the PHY autoneg advertised field
799  *  @hw: pointer to hardware structure
800  *  @speed: new link speed
801  *  @autoneg: TRUE if autonegotiation enabled
802  *  @autoneg_wait_to_complete: TRUE if waiting is needed to complete
803  *
804  *  Sets the link speed in the AUTOC register in the MAC and restarts link.
805  **/
806 static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw,
807                                                ixgbe_link_speed speed,
808                                                bool autoneg,
809                                                bool autoneg_wait_to_complete)
810 {
811 	s32 status;
812 
813 	DEBUGFUNC("ixgbe_setup_copper_link_82598");
814 
815 	/* Setup the PHY according to input speed */
816 	status = hw->phy.ops.setup_link_speed(hw, speed, autoneg,
817 	                                      autoneg_wait_to_complete);
818 	/* Set up MAC */
819 	ixgbe_start_mac_link_82598(hw, autoneg_wait_to_complete);
820 
821 	return status;
822 }
823 
824 /**
825  *  ixgbe_reset_hw_82598 - Performs hardware reset
826  *  @hw: pointer to hardware structure
827  *
828  *  Resets the hardware by resetting the transmit and receive units, masks and
829  *  clears all interrupts, performing a PHY reset, and performing a link (MAC)
830  *  reset.
831  **/
832 static s32 ixgbe_reset_hw_82598(struct ixgbe_hw *hw)
833 {
834 	s32 status = IXGBE_SUCCESS;
835 	s32 phy_status = IXGBE_SUCCESS;
836 	u32 ctrl;
837 	u32 gheccr;
838 	u32 i;
839 	u32 autoc;
840 	u8  analog_val;
841 
842 	DEBUGFUNC("ixgbe_reset_hw_82598");
843 
844 	/* Call adapter stop to disable tx/rx and clear interrupts */
845 	hw->mac.ops.stop_adapter(hw);
846 
847 	/*
848 	 * Power up the Atlas Tx lanes if they are currently powered down.
849 	 * Atlas Tx lanes are powered down for MAC loopback tests, but
850 	 * they are not automatically restored on reset.
851 	 */
852 	hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_LPBK, &analog_val);
853 	if (analog_val & IXGBE_ATLAS_PDN_TX_REG_EN) {
854 		/* Enable Tx Atlas so packets can be transmitted again */
855 		hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_LPBK,
856 		                             &analog_val);
857 		analog_val &= ~IXGBE_ATLAS_PDN_TX_REG_EN;
858 		hw->mac.ops.write_analog_reg8(hw, IXGBE_ATLAS_PDN_LPBK,
859 		                              analog_val);
860 
861 		hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_10G,
862 		                             &analog_val);
863 		analog_val &= ~IXGBE_ATLAS_PDN_TX_10G_QL_ALL;
864 		hw->mac.ops.write_analog_reg8(hw, IXGBE_ATLAS_PDN_10G,
865 		                              analog_val);
866 
867 		hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_1G,
868 		                             &analog_val);
869 		analog_val &= ~IXGBE_ATLAS_PDN_TX_1G_QL_ALL;
870 		hw->mac.ops.write_analog_reg8(hw, IXGBE_ATLAS_PDN_1G,
871 		                              analog_val);
872 
873 		hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_AN,
874 		                             &analog_val);
875 		analog_val &= ~IXGBE_ATLAS_PDN_TX_AN_QL_ALL;
876 		hw->mac.ops.write_analog_reg8(hw, IXGBE_ATLAS_PDN_AN,
877 		                              analog_val);
878 	}
879 
880 	/* Reset PHY */
881 	if (hw->phy.reset_disable == FALSE) {
882 		/* PHY ops must be identified and initialized prior to reset */
883 
884 		/* Init PHY and function pointers, perform SFP setup */
885 		phy_status = hw->phy.ops.init(hw);
886 		if (phy_status == IXGBE_ERR_SFP_NOT_SUPPORTED)
887 			goto reset_hw_out;
888 		else if (phy_status == IXGBE_ERR_SFP_NOT_PRESENT)
889 			goto no_phy_reset;
890 
891 		hw->phy.ops.reset(hw);
892 	}
893 
894 no_phy_reset:
895 	/*
896 	 * Prevent the PCI-E bus from from hanging by disabling PCI-E master
897 	 * access and verify no pending requests before reset
898 	 */
899 	ixgbe_disable_pcie_master(hw);
900 
901 mac_reset_top:
902 	/*
903 	 * Issue global reset to the MAC.  This needs to be a SW reset.
904 	 * If link reset is used, it might reset the MAC when mng is using it
905 	 */
906 	ctrl = IXGBE_READ_REG(hw, IXGBE_CTRL);
907 	IXGBE_WRITE_REG(hw, IXGBE_CTRL, (ctrl | IXGBE_CTRL_RST));
908 	IXGBE_WRITE_FLUSH(hw);
909 
910 	/* Poll for reset bit to self-clear indicating reset is complete */
911 	for (i = 0; i < 10; i++) {
912 		usec_delay(1);
913 		ctrl = IXGBE_READ_REG(hw, IXGBE_CTRL);
914 		if (!(ctrl & IXGBE_CTRL_RST))
915 			break;
916 	}
917 	if (ctrl & IXGBE_CTRL_RST) {
918 		status = IXGBE_ERR_RESET_FAILED;
919 		DEBUGOUT("Reset polling failed to complete.\n");
920 	}
921 
922 	/*
923 	 * Double resets are required for recovery from certain error
924 	 * conditions.  Between resets, it is necessary to stall to allow time
925 	 * for any pending HW events to complete.  We use 1usec since that is
926 	 * what is needed for ixgbe_disable_pcie_master().  The second reset
927 	 * then clears out any effects of those events.
928 	 */
929 	if (hw->mac.flags & IXGBE_FLAGS_DOUBLE_RESET_REQUIRED) {
930 		hw->mac.flags &= ~IXGBE_FLAGS_DOUBLE_RESET_REQUIRED;
931 		usec_delay(1);
932 		goto mac_reset_top;
933 	}
934 
935 	msec_delay(50);
936 
937 	gheccr = IXGBE_READ_REG(hw, IXGBE_GHECCR);
938 	gheccr &= ~((1 << 21) | (1 << 18) | (1 << 9) | (1 << 6));
939 	IXGBE_WRITE_REG(hw, IXGBE_GHECCR, gheccr);
940 
941 	/*
942 	 * Store the original AUTOC value if it has not been
943 	 * stored off yet.  Otherwise restore the stored original
944 	 * AUTOC value since the reset operation sets back to deaults.
945 	 */
946 	autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
947 	if (hw->mac.orig_link_settings_stored == FALSE) {
948 		hw->mac.orig_autoc = autoc;
949 		hw->mac.orig_link_settings_stored = TRUE;
950 	} else if (autoc != hw->mac.orig_autoc) {
951 		IXGBE_WRITE_REG(hw, IXGBE_AUTOC, hw->mac.orig_autoc);
952 	}
953 
954 	/* Store the permanent mac address */
955 	hw->mac.ops.get_mac_addr(hw, hw->mac.perm_addr);
956 
957 	/*
958 	 * Store MAC address from RAR0, clear receive address registers, and
959 	 * clear the multicast table
960 	 */
961 	hw->mac.ops.init_rx_addrs(hw);
962 
963 reset_hw_out:
964 	if (phy_status != IXGBE_SUCCESS)
965 		status = phy_status;
966 
967 	return status;
968 }
969 
970 /**
971  *  ixgbe_set_vmdq_82598 - Associate a VMDq set index with a rx address
972  *  @hw: pointer to hardware struct
973  *  @rar: receive address register index to associate with a VMDq index
974  *  @vmdq: VMDq set index
975  **/
976 s32 ixgbe_set_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
977 {
978 	u32 rar_high;
979 	u32 rar_entries = hw->mac.num_rar_entries;
980 
981 	DEBUGFUNC("ixgbe_set_vmdq_82598");
982 
983 	/* Make sure we are using a valid rar index range */
984 	if (rar >= rar_entries) {
985 		DEBUGOUT1("RAR index %d is out of range.\n", rar);
986 		return IXGBE_ERR_INVALID_ARGUMENT;
987 	}
988 
989 	rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(rar));
990 	rar_high &= ~IXGBE_RAH_VIND_MASK;
991 	rar_high |= ((vmdq << IXGBE_RAH_VIND_SHIFT) & IXGBE_RAH_VIND_MASK);
992 	IXGBE_WRITE_REG(hw, IXGBE_RAH(rar), rar_high);
993 	return IXGBE_SUCCESS;
994 }
995 
996 /**
997  *  ixgbe_clear_vmdq_82598 - Disassociate a VMDq set index from an rx address
998  *  @hw: pointer to hardware struct
999  *  @rar: receive address register index to associate with a VMDq index
1000  *  @vmdq: VMDq clear index (not used in 82598, but elsewhere)
1001  **/
1002 static s32 ixgbe_clear_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
1003 {
1004 	u32 rar_high;
1005 	u32 rar_entries = hw->mac.num_rar_entries;
1006 
1007 	UNREFERENCED_PARAMETER(vmdq);
1008 
1009 	/* Make sure we are using a valid rar index range */
1010 	if (rar >= rar_entries) {
1011 		DEBUGOUT1("RAR index %d is out of range.\n", rar);
1012 		return IXGBE_ERR_INVALID_ARGUMENT;
1013 	}
1014 
1015 	rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(rar));
1016 	if (rar_high & IXGBE_RAH_VIND_MASK) {
1017 		rar_high &= ~IXGBE_RAH_VIND_MASK;
1018 		IXGBE_WRITE_REG(hw, IXGBE_RAH(rar), rar_high);
1019 	}
1020 
1021 	return IXGBE_SUCCESS;
1022 }
1023 
1024 /**
1025  *  ixgbe_set_vfta_82598 - Set VLAN filter table
1026  *  @hw: pointer to hardware structure
1027  *  @vlan: VLAN id to write to VLAN filter
1028  *  @vind: VMDq output index that maps queue to VLAN id in VFTA
1029  *  @vlan_on: boolean flag to turn on/off VLAN in VFTA
1030  *
1031  *  Turn on/off specified VLAN in the VLAN filter table.
1032  **/
1033 s32 ixgbe_set_vfta_82598(struct ixgbe_hw *hw, u32 vlan, u32 vind,
1034 	                                              bool vlan_on)
1035 {
1036 	u32 regindex;
1037 	u32 bitindex;
1038 	u32 bits;
1039 	u32 vftabyte;
1040 
1041 	DEBUGFUNC("ixgbe_set_vfta_82598");
1042 
1043 	if (vlan > 4095)
1044 		return IXGBE_ERR_PARAM;
1045 
1046 	/* Determine 32-bit word position in array */
1047 	regindex = (vlan >> 5) & 0x7F;   /* upper seven bits */
1048 
1049 	/* Determine the location of the (VMD) queue index */
1050 	vftabyte =  ((vlan >> 3) & 0x03); /* bits (4:3) indicating byte array */
1051 	bitindex = (vlan & 0x7) << 2;    /* lower 3 bits indicate nibble */
1052 
1053 	/* Set the nibble for VMD queue index */
1054 	bits = IXGBE_READ_REG(hw, IXGBE_VFTAVIND(vftabyte, regindex));
1055 	bits &= (~(0x0F << bitindex));
1056 	bits |= (vind << bitindex);
1057 	IXGBE_WRITE_REG(hw, IXGBE_VFTAVIND(vftabyte, regindex), bits);
1058 
1059 	/* Determine the location of the bit for this VLAN id */
1060 	bitindex = vlan & 0x1F;   /* lower five bits */
1061 
1062 	bits = IXGBE_READ_REG(hw, IXGBE_VFTA(regindex));
1063 	if (vlan_on)
1064 		/* Turn on this VLAN id */
1065 		bits |= (1 << bitindex);
1066 	else
1067 		/* Turn off this VLAN id */
1068 		bits &= ~(1 << bitindex);
1069 	IXGBE_WRITE_REG(hw, IXGBE_VFTA(regindex), bits);
1070 
1071 	return IXGBE_SUCCESS;
1072 }
1073 
1074 /**
1075  *  ixgbe_clear_vfta_82598 - Clear VLAN filter table
1076  *  @hw: pointer to hardware structure
1077  *
1078  *  Clears the VLAN filer table, and the VMDq index associated with the filter
1079  **/
1080 static s32 ixgbe_clear_vfta_82598(struct ixgbe_hw *hw)
1081 {
1082 	u32 offset;
1083 	u32 vlanbyte;
1084 
1085 	DEBUGFUNC("ixgbe_clear_vfta_82598");
1086 
1087 	for (offset = 0; offset < hw->mac.vft_size; offset++)
1088 		IXGBE_WRITE_REG(hw, IXGBE_VFTA(offset), 0);
1089 
1090 	for (vlanbyte = 0; vlanbyte < 4; vlanbyte++)
1091 		for (offset = 0; offset < hw->mac.vft_size; offset++)
1092 			IXGBE_WRITE_REG(hw, IXGBE_VFTAVIND(vlanbyte, offset),
1093 			                0);
1094 
1095 	return IXGBE_SUCCESS;
1096 }
1097 
1098 /**
1099  *  ixgbe_read_analog_reg8_82598 - Reads 8 bit Atlas analog register
1100  *  @hw: pointer to hardware structure
1101  *  @reg: analog register to read
1102  *  @val: read value
1103  *
1104  *  Performs read operation to Atlas analog register specified.
1105  **/
1106 s32 ixgbe_read_analog_reg8_82598(struct ixgbe_hw *hw, u32 reg, u8 *val)
1107 {
1108 	u32  atlas_ctl;
1109 
1110 	DEBUGFUNC("ixgbe_read_analog_reg8_82598");
1111 
1112 	IXGBE_WRITE_REG(hw, IXGBE_ATLASCTL,
1113 	                IXGBE_ATLASCTL_WRITE_CMD | (reg << 8));
1114 	IXGBE_WRITE_FLUSH(hw);
1115 	usec_delay(10);
1116 	atlas_ctl = IXGBE_READ_REG(hw, IXGBE_ATLASCTL);
1117 	*val = (u8)atlas_ctl;
1118 
1119 	return IXGBE_SUCCESS;
1120 }
1121 
1122 /**
1123  *  ixgbe_write_analog_reg8_82598 - Writes 8 bit Atlas analog register
1124  *  @hw: pointer to hardware structure
1125  *  @reg: atlas register to write
1126  *  @val: value to write
1127  *
1128  *  Performs write operation to Atlas analog register specified.
1129  **/
1130 s32 ixgbe_write_analog_reg8_82598(struct ixgbe_hw *hw, u32 reg, u8 val)
1131 {
1132 	u32  atlas_ctl;
1133 
1134 	DEBUGFUNC("ixgbe_write_analog_reg8_82598");
1135 
1136 	atlas_ctl = (reg << 8) | val;
1137 	IXGBE_WRITE_REG(hw, IXGBE_ATLASCTL, atlas_ctl);
1138 	IXGBE_WRITE_FLUSH(hw);
1139 	usec_delay(10);
1140 
1141 	return IXGBE_SUCCESS;
1142 }
1143 
1144 /**
1145  *  ixgbe_read_i2c_eeprom_82598 - Reads 8 bit word over I2C interface.
1146  *  @hw: pointer to hardware structure
1147  *  @byte_offset: EEPROM byte offset to read
1148  *  @eeprom_data: value read
1149  *
1150  *  Performs 8 byte read operation to SFP module's EEPROM over I2C interface.
1151  **/
1152 s32 ixgbe_read_i2c_eeprom_82598(struct ixgbe_hw *hw, u8 byte_offset,
1153                                 u8 *eeprom_data)
1154 {
1155 	s32 status = IXGBE_SUCCESS;
1156 	u16 sfp_addr = 0;
1157 	u16 sfp_data = 0;
1158 	u16 sfp_stat = 0;
1159 	u32 i;
1160 
1161 	DEBUGFUNC("ixgbe_read_i2c_eeprom_82598");
1162 
1163 	if (hw->phy.type == ixgbe_phy_nl) {
1164 		/*
1165 		 * NetLogic phy SDA/SCL registers are at addresses 0xC30A to
1166 		 * 0xC30D. These registers are used to talk to the SFP+
1167 		 * module's EEPROM through the SDA/SCL (I2C) interface.
1168 		 */
1169 		sfp_addr = (IXGBE_I2C_EEPROM_DEV_ADDR << 8) + byte_offset;
1170 		sfp_addr = (sfp_addr | IXGBE_I2C_EEPROM_READ_MASK);
1171 		hw->phy.ops.write_reg(hw,
1172 		                      IXGBE_MDIO_PMA_PMD_SDA_SCL_ADDR,
1173 		                      IXGBE_MDIO_PMA_PMD_DEV_TYPE,
1174 		                      sfp_addr);
1175 
1176 		/* Poll status */
1177 		for (i = 0; i < 100; i++) {
1178 			hw->phy.ops.read_reg(hw,
1179 			                     IXGBE_MDIO_PMA_PMD_SDA_SCL_STAT,
1180 			                     IXGBE_MDIO_PMA_PMD_DEV_TYPE,
1181 			                     &sfp_stat);
1182 			sfp_stat = sfp_stat & IXGBE_I2C_EEPROM_STATUS_MASK;
1183 			if (sfp_stat != IXGBE_I2C_EEPROM_STATUS_IN_PROGRESS)
1184 				break;
1185 			msec_delay(10);
1186 		}
1187 
1188 		if (sfp_stat != IXGBE_I2C_EEPROM_STATUS_PASS) {
1189 			DEBUGOUT("EEPROM read did not pass.\n");
1190 			status = IXGBE_ERR_SFP_NOT_PRESENT;
1191 			goto out;
1192 		}
1193 
1194 		/* Read data */
1195 		hw->phy.ops.read_reg(hw, IXGBE_MDIO_PMA_PMD_SDA_SCL_DATA,
1196 		                     IXGBE_MDIO_PMA_PMD_DEV_TYPE, &sfp_data);
1197 
1198 		*eeprom_data = (u8)(sfp_data >> 8);
1199 	} else {
1200 		status = IXGBE_ERR_PHY;
1201 		goto out;
1202 	}
1203 
1204 out:
1205 	return status;
1206 }
1207 
1208 /**
1209  *  ixgbe_get_supported_physical_layer_82598 - Returns physical layer type
1210  *  @hw: pointer to hardware structure
1211  *
1212  *  Determines physical layer capabilities of the current configuration.
1213  **/
1214 u32 ixgbe_get_supported_physical_layer_82598(struct ixgbe_hw *hw)
1215 {
1216 	u32 physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN;
1217 	u32 autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
1218 	u32 pma_pmd_10g = autoc & IXGBE_AUTOC_10G_PMA_PMD_MASK;
1219 	u32 pma_pmd_1g = autoc & IXGBE_AUTOC_1G_PMA_PMD_MASK;
1220 	u16 ext_ability = 0;
1221 
1222 	DEBUGFUNC("ixgbe_get_supported_physical_layer_82598");
1223 
1224 	hw->phy.ops.identify(hw);
1225 
1226 	/* Copper PHY must be checked before AUTOC LMS to determine correct
1227 	 * physical layer because 10GBase-T PHYs use LMS = KX4/KX */
1228 	switch (hw->phy.type) {
1229 	case ixgbe_phy_tn:
1230 	case ixgbe_phy_aq:
1231 	case ixgbe_phy_cu_unknown:
1232 		hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_EXT_ABILITY,
1233 		IXGBE_MDIO_PMA_PMD_DEV_TYPE, &ext_ability);
1234 		if (ext_ability & IXGBE_MDIO_PHY_10GBASET_ABILITY)
1235 			physical_layer |= IXGBE_PHYSICAL_LAYER_10GBASE_T;
1236 		if (ext_ability & IXGBE_MDIO_PHY_1000BASET_ABILITY)
1237 			physical_layer |= IXGBE_PHYSICAL_LAYER_1000BASE_T;
1238 		if (ext_ability & IXGBE_MDIO_PHY_100BASETX_ABILITY)
1239 			physical_layer |= IXGBE_PHYSICAL_LAYER_100BASE_TX;
1240 		goto out;
1241 	default:
1242 		break;
1243 	}
1244 
1245 	switch (autoc & IXGBE_AUTOC_LMS_MASK) {
1246 	case IXGBE_AUTOC_LMS_1G_AN:
1247 	case IXGBE_AUTOC_LMS_1G_LINK_NO_AN:
1248 		if (pma_pmd_1g == IXGBE_AUTOC_1G_KX)
1249 			physical_layer = IXGBE_PHYSICAL_LAYER_1000BASE_KX;
1250 		else
1251 			physical_layer = IXGBE_PHYSICAL_LAYER_1000BASE_BX;
1252 		break;
1253 	case IXGBE_AUTOC_LMS_10G_LINK_NO_AN:
1254 		if (pma_pmd_10g == IXGBE_AUTOC_10G_CX4)
1255 			physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_CX4;
1256 		else if (pma_pmd_10g == IXGBE_AUTOC_10G_KX4)
1257 			physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_KX4;
1258 		else /* XAUI */
1259 			physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN;
1260 		break;
1261 	case IXGBE_AUTOC_LMS_KX4_AN:
1262 	case IXGBE_AUTOC_LMS_KX4_AN_1G_AN:
1263 		if (autoc & IXGBE_AUTOC_KX_SUPP)
1264 			physical_layer |= IXGBE_PHYSICAL_LAYER_1000BASE_KX;
1265 		if (autoc & IXGBE_AUTOC_KX4_SUPP)
1266 			physical_layer |= IXGBE_PHYSICAL_LAYER_10GBASE_KX4;
1267 		break;
1268 	default:
1269 		break;
1270 	}
1271 
1272 	if (hw->phy.type == ixgbe_phy_nl) {
1273 		hw->phy.ops.identify_sfp(hw);
1274 
1275 		switch (hw->phy.sfp_type) {
1276 		case ixgbe_sfp_type_da_cu:
1277 			physical_layer = IXGBE_PHYSICAL_LAYER_SFP_PLUS_CU;
1278 			break;
1279 		case ixgbe_sfp_type_sr:
1280 			physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_SR;
1281 			break;
1282 		case ixgbe_sfp_type_lr:
1283 			physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_LR;
1284 			break;
1285 		default:
1286 			physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN;
1287 			break;
1288 		}
1289 	}
1290 
1291 	switch (hw->device_id) {
1292 	case IXGBE_DEV_ID_82598_DA_DUAL_PORT:
1293 		physical_layer = IXGBE_PHYSICAL_LAYER_SFP_PLUS_CU;
1294 		break;
1295 	case IXGBE_DEV_ID_82598AF_DUAL_PORT:
1296 	case IXGBE_DEV_ID_82598AF_SINGLE_PORT:
1297 	case IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM:
1298 		physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_SR;
1299 		break;
1300 	case IXGBE_DEV_ID_82598EB_XF_LR:
1301 		physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_LR;
1302 		break;
1303 	default:
1304 		break;
1305 	}
1306 
1307 out:
1308 	return physical_layer;
1309 }
1310 
1311 /**
1312  *  ixgbe_set_lan_id_multi_port_pcie_82598 - Set LAN id for PCIe multiple
1313  *  port devices.
1314  *  @hw: pointer to the HW structure
1315  *
1316  *  Calls common function and corrects issue with some single port devices
1317  *  that enable LAN1 but not LAN0.
1318  **/
1319 void ixgbe_set_lan_id_multi_port_pcie_82598(struct ixgbe_hw *hw)
1320 {
1321 	struct ixgbe_bus_info *bus = &hw->bus;
1322 	u16 pci_gen = 0;
1323 	u16 pci_ctrl2 = 0;
1324 
1325 	DEBUGFUNC("ixgbe_set_lan_id_multi_port_pcie_82598");
1326 
1327 	ixgbe_set_lan_id_multi_port_pcie(hw);
1328 
1329 	/* check if LAN0 is disabled */
1330 	hw->eeprom.ops.read(hw, IXGBE_PCIE_GENERAL_PTR, &pci_gen);
1331 	if ((pci_gen != 0) && (pci_gen != 0xFFFF)) {
1332 
1333 		hw->eeprom.ops.read(hw, pci_gen + IXGBE_PCIE_CTRL2, &pci_ctrl2);
1334 
1335 		/* if LAN0 is completely disabled force function to 0 */
1336 		if ((pci_ctrl2 & IXGBE_PCIE_CTRL2_LAN_DISABLE) &&
1337 		    !(pci_ctrl2 & IXGBE_PCIE_CTRL2_DISABLE_SELECT) &&
1338 		    !(pci_ctrl2 & IXGBE_PCIE_CTRL2_DUMMY_ENABLE)) {
1339 
1340 			bus->func = 0;
1341 		}
1342 	}
1343 }
1344 
1345 /**
1346  *  ixgbe_enable_relaxed_ordering_82598 - enable relaxed ordering
1347  *  @hw: pointer to hardware structure
1348  *
1349  **/
1350 void ixgbe_enable_relaxed_ordering_82598(struct ixgbe_hw *hw)
1351 {
1352 	u32 regval;
1353 	u32 i;
1354 
1355 	DEBUGFUNC("ixgbe_enable_relaxed_ordering_82598");
1356 
1357 	/* Enable relaxed ordering */
1358 	for (i = 0; ((i < hw->mac.max_tx_queues) &&
1359 	     (i < IXGBE_DCA_MAX_QUEUES_82598)); i++) {
1360 		regval = IXGBE_READ_REG(hw, IXGBE_DCA_TXCTRL(i));
1361 		regval |= IXGBE_DCA_TXCTRL_TX_WB_RO_EN;
1362 		IXGBE_WRITE_REG(hw, IXGBE_DCA_TXCTRL(i), regval);
1363 	}
1364 
1365 	for (i = 0; ((i < hw->mac.max_rx_queues) &&
1366 	     (i < IXGBE_DCA_MAX_QUEUES_82598)); i++) {
1367 		regval = IXGBE_READ_REG(hw, IXGBE_DCA_RXCTRL(i));
1368 		regval |= (IXGBE_DCA_RXCTRL_DESC_WRO_EN |
1369 		           IXGBE_DCA_RXCTRL_DESC_HSRO_EN);
1370 		IXGBE_WRITE_REG(hw, IXGBE_DCA_RXCTRL(i), regval);
1371 	}
1372 
1373 }
1374