]> CyberLeo.Net >> Repos - FreeBSD/stable/9.git/blob - sys/dev/ixgbe/ixgbe_82599.c
MFC of the ixgbe driver. Including revisions:
[FreeBSD/stable/9.git] / sys / dev / ixgbe / ixgbe_82599.c
1 /******************************************************************************
2
3   Copyright (c) 2001-2012, Intel Corporation 
4   All rights reserved.
5   
6   Redistribution and use in source and binary forms, with or without 
7   modification, are permitted provided that the following conditions are met:
8   
9    1. Redistributions of source code must retain the above copyright notice, 
10       this list of conditions and the following disclaimer.
11   
12    2. Redistributions in binary form must reproduce the above copyright 
13       notice, this list of conditions and the following disclaimer in the 
14       documentation and/or other materials provided with the distribution.
15   
16    3. Neither the name of the Intel Corporation nor the names of its 
17       contributors may be used to endorse or promote products derived from 
18       this software without specific prior written permission.
19   
20   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
22   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
23   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
24   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
25   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
26   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
27   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
28   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
29   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   POSSIBILITY OF SUCH DAMAGE.
31
32 ******************************************************************************/
33 /*$FreeBSD$*/
34
35 #include "ixgbe_type.h"
36 #include "ixgbe_82599.h"
37 #include "ixgbe_api.h"
38 #include "ixgbe_common.h"
39 #include "ixgbe_phy.h"
40
41 static s32 ixgbe_setup_copper_link_82599(struct ixgbe_hw *hw,
42                                          ixgbe_link_speed speed,
43                                          bool autoneg,
44                                          bool autoneg_wait_to_complete);
45 static s32 ixgbe_verify_fw_version_82599(struct ixgbe_hw *hw);
46 static s32 ixgbe_read_eeprom_82599(struct ixgbe_hw *hw,
47                                    u16 offset, u16 *data);
48 static s32 ixgbe_read_eeprom_buffer_82599(struct ixgbe_hw *hw, u16 offset,
49                                           u16 words, u16 *data);
50
51 void ixgbe_init_mac_link_ops_82599(struct ixgbe_hw *hw)
52 {
53         struct ixgbe_mac_info *mac = &hw->mac;
54
55         DEBUGFUNC("ixgbe_init_mac_link_ops_82599");
56
57         /* enable the laser control functions for SFP+ fiber */
58         if (mac->ops.get_media_type(hw) == ixgbe_media_type_fiber) {
59                 mac->ops.disable_tx_laser =
60                                        &ixgbe_disable_tx_laser_multispeed_fiber;
61                 mac->ops.enable_tx_laser =
62                                         &ixgbe_enable_tx_laser_multispeed_fiber;
63                 mac->ops.flap_tx_laser = &ixgbe_flap_tx_laser_multispeed_fiber;
64
65         } else {
66                 mac->ops.disable_tx_laser = NULL;
67                 mac->ops.enable_tx_laser = NULL;
68                 mac->ops.flap_tx_laser = NULL;
69         }
70
71         if (hw->phy.multispeed_fiber) {
72                 /* Set up dual speed SFP+ support */
73                 mac->ops.setup_link = &ixgbe_setup_mac_link_multispeed_fiber;
74         } else {
75                 if ((ixgbe_get_media_type(hw) == ixgbe_media_type_backplane) &&
76                      (hw->phy.smart_speed == ixgbe_smart_speed_auto ||
77                       hw->phy.smart_speed == ixgbe_smart_speed_on) &&
78                       !ixgbe_verify_lesm_fw_enabled_82599(hw)) {
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 /**
87  *  ixgbe_init_phy_ops_82599 - PHY/SFP specific init
88  *  @hw: pointer to hardware structure
89  *
90  *  Initialize any function pointers that were not able to be
91  *  set during init_shared_code because the PHY/SFP type was
92  *  not known.  Perform the SFP init if necessary.
93  *
94  **/
95 s32 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.setup_link = &ixgbe_setup_phy_link_tnx;
124                 phy->ops.check_link = &ixgbe_check_phy_link_tnx;
125                 phy->ops.get_firmware_version =
126                              &ixgbe_get_phy_firmware_version_tnx;
127                 break;
128         default:
129                 break;
130         }
131 init_phy_ops_out:
132         return ret_val;
133 }
134
135 s32 ixgbe_setup_sfp_modules_82599(struct ixgbe_hw *hw)
136 {
137         s32 ret_val = IXGBE_SUCCESS;
138         u32 reg_anlp1 = 0;
139         u32 i = 0;
140         u16 list_offset, data_offset, data_value;
141
142         DEBUGFUNC("ixgbe_setup_sfp_modules_82599");
143
144         if (hw->phy.sfp_type != ixgbe_sfp_type_unknown) {
145                 ixgbe_init_mac_link_ops_82599(hw);
146
147                 hw->phy.ops.reset = NULL;
148
149                 ret_val = ixgbe_get_sfp_init_sequence_offsets(hw, &list_offset,
150                                                               &data_offset);
151                 if (ret_val != IXGBE_SUCCESS)
152                         goto setup_sfp_out;
153
154                 /* PHY config will finish before releasing the semaphore */
155                 ret_val = hw->mac.ops.acquire_swfw_sync(hw,
156                                                         IXGBE_GSSR_MAC_CSR_SM);
157                 if (ret_val != IXGBE_SUCCESS) {
158                         ret_val = IXGBE_ERR_SWFW_SYNC;
159                         goto setup_sfp_out;
160                 }
161
162                 hw->eeprom.ops.read(hw, ++data_offset, &data_value);
163                 while (data_value != 0xffff) {
164                         IXGBE_WRITE_REG(hw, IXGBE_CORECTL, data_value);
165                         IXGBE_WRITE_FLUSH(hw);
166                         hw->eeprom.ops.read(hw, ++data_offset, &data_value);
167                 }
168
169                 /* Release the semaphore */
170                 hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_MAC_CSR_SM);
171                 /* Delay obtaining semaphore again to allow FW access */
172                 msec_delay(hw->eeprom.semaphore_delay);
173
174                 /* Now restart DSP by setting Restart_AN and clearing LMS */
175                 IXGBE_WRITE_REG(hw, IXGBE_AUTOC, ((IXGBE_READ_REG(hw,
176                                 IXGBE_AUTOC) & ~IXGBE_AUTOC_LMS_MASK) |
177                                 IXGBE_AUTOC_AN_RESTART));
178
179                 /* Wait for AN to leave state 0 */
180                 for (i = 0; i < 10; i++) {
181                         msec_delay(4);
182                         reg_anlp1 = IXGBE_READ_REG(hw, IXGBE_ANLP1);
183                         if (reg_anlp1 & IXGBE_ANLP1_AN_STATE_MASK)
184                                 break;
185                 }
186                 if (!(reg_anlp1 & IXGBE_ANLP1_AN_STATE_MASK)) {
187                         DEBUGOUT("sfp module setup not complete\n");
188                         ret_val = IXGBE_ERR_SFP_SETUP_NOT_COMPLETE;
189                         goto setup_sfp_out;
190                 }
191
192                 /* Restart DSP by setting Restart_AN and return to SFI mode */
193                 IXGBE_WRITE_REG(hw, IXGBE_AUTOC, (IXGBE_READ_REG(hw,
194                                 IXGBE_AUTOC) | IXGBE_AUTOC_LMS_10G_SERIAL |
195                                 IXGBE_AUTOC_AN_RESTART));
196         }
197
198 setup_sfp_out:
199         return ret_val;
200 }
201
202 /**
203  *  ixgbe_init_ops_82599 - Inits func ptrs and MAC type
204  *  @hw: pointer to hardware structure
205  *
206  *  Initialize the function pointers and assign the MAC type for 82599.
207  *  Does not touch the hardware.
208  **/
209
210 s32 ixgbe_init_ops_82599(struct ixgbe_hw *hw)
211 {
212         struct ixgbe_mac_info *mac = &hw->mac;
213         struct ixgbe_phy_info *phy = &hw->phy;
214         struct ixgbe_eeprom_info *eeprom = &hw->eeprom;
215         s32 ret_val;
216
217         DEBUGFUNC("ixgbe_init_ops_82599");
218
219         ret_val = ixgbe_init_phy_ops_generic(hw);
220         ret_val = ixgbe_init_ops_generic(hw);
221
222         /* PHY */
223         phy->ops.identify = &ixgbe_identify_phy_82599;
224         phy->ops.init = &ixgbe_init_phy_ops_82599;
225
226         /* MAC */
227         mac->ops.reset_hw = &ixgbe_reset_hw_82599;
228         mac->ops.enable_relaxed_ordering = &ixgbe_enable_relaxed_ordering_gen2;
229         mac->ops.get_media_type = &ixgbe_get_media_type_82599;
230         mac->ops.get_supported_physical_layer =
231                                     &ixgbe_get_supported_physical_layer_82599;
232         mac->ops.disable_sec_rx_path = &ixgbe_disable_sec_rx_path_generic;
233         mac->ops.enable_sec_rx_path = &ixgbe_enable_sec_rx_path_generic;
234         mac->ops.enable_rx_dma = &ixgbe_enable_rx_dma_82599;
235         mac->ops.read_analog_reg8 = &ixgbe_read_analog_reg8_82599;
236         mac->ops.write_analog_reg8 = &ixgbe_write_analog_reg8_82599;
237         mac->ops.start_hw = &ixgbe_start_hw_82599;
238         mac->ops.get_san_mac_addr = &ixgbe_get_san_mac_addr_generic;
239         mac->ops.set_san_mac_addr = &ixgbe_set_san_mac_addr_generic;
240         mac->ops.get_device_caps = &ixgbe_get_device_caps_generic;
241         mac->ops.get_wwn_prefix = &ixgbe_get_wwn_prefix_generic;
242         mac->ops.get_fcoe_boot_status = &ixgbe_get_fcoe_boot_status_generic;
243
244         /* RAR, Multicast, VLAN */
245         mac->ops.set_vmdq = &ixgbe_set_vmdq_generic;
246         mac->ops.clear_vmdq = &ixgbe_clear_vmdq_generic;
247         mac->ops.insert_mac_addr = &ixgbe_insert_mac_addr_generic;
248         mac->rar_highwater = 1;
249         mac->ops.set_vfta = &ixgbe_set_vfta_generic;
250         mac->ops.set_vlvf = &ixgbe_set_vlvf_generic;
251         mac->ops.clear_vfta = &ixgbe_clear_vfta_generic;
252         mac->ops.init_uta_tables = &ixgbe_init_uta_tables_generic;
253         mac->ops.setup_sfp = &ixgbe_setup_sfp_modules_82599;
254         mac->ops.set_mac_anti_spoofing = &ixgbe_set_mac_anti_spoofing;
255         mac->ops.set_vlan_anti_spoofing = &ixgbe_set_vlan_anti_spoofing;
256
257         /* Link */
258         mac->ops.get_link_capabilities = &ixgbe_get_link_capabilities_82599;
259         mac->ops.check_link = &ixgbe_check_mac_link_generic;
260         mac->ops.setup_rxpba = &ixgbe_set_rxpba_generic;
261         ixgbe_init_mac_link_ops_82599(hw);
262
263         mac->mcft_size          = 128;
264         mac->vft_size           = 128;
265         mac->num_rar_entries    = 128;
266         mac->rx_pb_size         = 512;
267         mac->max_tx_queues      = 128;
268         mac->max_rx_queues      = 128;
269         mac->max_msix_vectors   = ixgbe_get_pcie_msix_count_generic(hw);
270
271         mac->arc_subsystem_valid = (IXGBE_READ_REG(hw, IXGBE_FWSM) &
272                                    IXGBE_FWSM_MODE_MASK) ? TRUE : FALSE;
273
274         hw->mbx.ops.init_params = ixgbe_init_mbx_params_pf;
275
276         /* EEPROM */
277         eeprom->ops.read = &ixgbe_read_eeprom_82599;
278         eeprom->ops.read_buffer = &ixgbe_read_eeprom_buffer_82599;
279
280         /* Manageability interface */
281         mac->ops.set_fw_drv_ver = &ixgbe_set_fw_drv_ver_generic;
282
283
284         return ret_val;
285 }
286
287 /**
288  *  ixgbe_get_link_capabilities_82599 - Determines link capabilities
289  *  @hw: pointer to hardware structure
290  *  @speed: pointer to link speed
291  *  @negotiation: TRUE when autoneg or autotry is enabled
292  *
293  *  Determines the link capabilities by reading the AUTOC register.
294  **/
295 s32 ixgbe_get_link_capabilities_82599(struct ixgbe_hw *hw,
296                                       ixgbe_link_speed *speed,
297                                       bool *negotiation)
298 {
299         s32 status = IXGBE_SUCCESS;
300         u32 autoc = 0;
301
302         DEBUGFUNC("ixgbe_get_link_capabilities_82599");
303
304
305         /* Check if 1G SFP module. */
306         if (hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
307             hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1) {
308                 *speed = IXGBE_LINK_SPEED_1GB_FULL;
309                 *negotiation = TRUE;
310                 goto out;
311         }
312
313         /*
314          * Determine link capabilities based on the stored value of AUTOC,
315          * which represents EEPROM defaults.  If AUTOC value has not
316          * been stored, use the current register values.
317          */
318         if (hw->mac.orig_link_settings_stored)
319                 autoc = hw->mac.orig_autoc;
320         else
321                 autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
322
323         switch (autoc & IXGBE_AUTOC_LMS_MASK) {
324         case IXGBE_AUTOC_LMS_1G_LINK_NO_AN:
325                 *speed = IXGBE_LINK_SPEED_1GB_FULL;
326                 *negotiation = FALSE;
327                 break;
328
329         case IXGBE_AUTOC_LMS_10G_LINK_NO_AN:
330                 *speed = IXGBE_LINK_SPEED_10GB_FULL;
331                 *negotiation = FALSE;
332                 break;
333
334         case IXGBE_AUTOC_LMS_1G_AN:
335                 *speed = IXGBE_LINK_SPEED_1GB_FULL;
336                 *negotiation = TRUE;
337                 break;
338
339         case IXGBE_AUTOC_LMS_10G_SERIAL:
340                 *speed = IXGBE_LINK_SPEED_10GB_FULL;
341                 *negotiation = FALSE;
342                 break;
343
344         case IXGBE_AUTOC_LMS_KX4_KX_KR:
345         case IXGBE_AUTOC_LMS_KX4_KX_KR_1G_AN:
346                 *speed = IXGBE_LINK_SPEED_UNKNOWN;
347                 if (autoc & IXGBE_AUTOC_KR_SUPP)
348                         *speed |= IXGBE_LINK_SPEED_10GB_FULL;
349                 if (autoc & IXGBE_AUTOC_KX4_SUPP)
350                         *speed |= IXGBE_LINK_SPEED_10GB_FULL;
351                 if (autoc & IXGBE_AUTOC_KX_SUPP)
352                         *speed |= IXGBE_LINK_SPEED_1GB_FULL;
353                 *negotiation = TRUE;
354                 break;
355
356         case IXGBE_AUTOC_LMS_KX4_KX_KR_SGMII:
357                 *speed = IXGBE_LINK_SPEED_100_FULL;
358                 if (autoc & IXGBE_AUTOC_KR_SUPP)
359                         *speed |= IXGBE_LINK_SPEED_10GB_FULL;
360                 if (autoc & IXGBE_AUTOC_KX4_SUPP)
361                         *speed |= IXGBE_LINK_SPEED_10GB_FULL;
362                 if (autoc & IXGBE_AUTOC_KX_SUPP)
363                         *speed |= IXGBE_LINK_SPEED_1GB_FULL;
364                 *negotiation = TRUE;
365                 break;
366
367         case IXGBE_AUTOC_LMS_SGMII_1G_100M:
368                 *speed = IXGBE_LINK_SPEED_1GB_FULL | IXGBE_LINK_SPEED_100_FULL;
369                 *negotiation = FALSE;
370                 break;
371
372         default:
373                 status = IXGBE_ERR_LINK_SETUP;
374                 goto out;
375                 break;
376         }
377
378         if (hw->phy.multispeed_fiber) {
379                 *speed |= IXGBE_LINK_SPEED_10GB_FULL |
380                           IXGBE_LINK_SPEED_1GB_FULL;
381                 *negotiation = TRUE;
382         }
383
384 out:
385         return status;
386 }
387
388 /**
389  *  ixgbe_get_media_type_82599 - Get media type
390  *  @hw: pointer to hardware structure
391  *
392  *  Returns the media type (fiber, copper, backplane)
393  **/
394 enum ixgbe_media_type ixgbe_get_media_type_82599(struct ixgbe_hw *hw)
395 {
396         enum ixgbe_media_type media_type;
397
398         DEBUGFUNC("ixgbe_get_media_type_82599");
399
400         /* Detect if there is a copper PHY attached. */
401         switch (hw->phy.type) {
402         case ixgbe_phy_cu_unknown:
403         case ixgbe_phy_tn:
404                 media_type = ixgbe_media_type_copper;
405                 goto out;
406         default:
407                 break;
408         }
409
410         switch (hw->device_id) {
411         case IXGBE_DEV_ID_82599_KX4:
412         case IXGBE_DEV_ID_82599_KX4_MEZZ:
413         case IXGBE_DEV_ID_82599_COMBO_BACKPLANE:
414         case IXGBE_DEV_ID_82599_KR:
415         case IXGBE_DEV_ID_82599_BACKPLANE_FCOE:
416         case IXGBE_DEV_ID_82599_XAUI_LOM:
417                 /* Default device ID is mezzanine card KX/KX4 */
418                 media_type = ixgbe_media_type_backplane;
419                 break;
420         case IXGBE_DEV_ID_82599_SFP:
421         case IXGBE_DEV_ID_82599_SFP_FCOE:
422         case IXGBE_DEV_ID_82599_SFP_EM:
423         case IXGBE_DEV_ID_82599EN_SFP:
424                 media_type = ixgbe_media_type_fiber;
425                 break;
426         case IXGBE_DEV_ID_82599_CX4:
427                 media_type = ixgbe_media_type_cx4;
428                 break;
429         case IXGBE_DEV_ID_82599_T3_LOM:
430                 media_type = ixgbe_media_type_copper;
431                 break;
432         default:
433                 media_type = ixgbe_media_type_unknown;
434                 break;
435         }
436 out:
437         return media_type;
438 }
439
440 /**
441  *  ixgbe_start_mac_link_82599 - Setup MAC link settings
442  *  @hw: pointer to hardware structure
443  *  @autoneg_wait_to_complete: TRUE when waiting for completion is needed
444  *
445  *  Configures link settings based on values in the ixgbe_hw struct.
446  *  Restarts the link.  Performs autonegotiation if needed.
447  **/
448 s32 ixgbe_start_mac_link_82599(struct ixgbe_hw *hw,
449                                bool autoneg_wait_to_complete)
450 {
451         u32 autoc_reg;
452         u32 links_reg;
453         u32 i;
454         s32 status = IXGBE_SUCCESS;
455
456         DEBUGFUNC("ixgbe_start_mac_link_82599");
457
458
459         /* Restart link */
460         autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
461         autoc_reg |= IXGBE_AUTOC_AN_RESTART;
462         IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc_reg);
463
464         /* Only poll for autoneg to complete if specified to do so */
465         if (autoneg_wait_to_complete) {
466                 if ((autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
467                      IXGBE_AUTOC_LMS_KX4_KX_KR ||
468                     (autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
469                      IXGBE_AUTOC_LMS_KX4_KX_KR_1G_AN ||
470                     (autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
471                      IXGBE_AUTOC_LMS_KX4_KX_KR_SGMII) {
472                         links_reg = 0; /* Just in case Autoneg time = 0 */
473                         for (i = 0; i < IXGBE_AUTO_NEG_TIME; i++) {
474                                 links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
475                                 if (links_reg & IXGBE_LINKS_KX_AN_COMP)
476                                         break;
477                                 msec_delay(100);
478                         }
479                         if (!(links_reg & IXGBE_LINKS_KX_AN_COMP)) {
480                                 status = IXGBE_ERR_AUTONEG_NOT_COMPLETE;
481                                 DEBUGOUT("Autoneg did not complete.\n");
482                         }
483                 }
484         }
485
486         /* Add delay to filter out noises during initial link setup */
487         msec_delay(50);
488
489         return status;
490 }
491
492 /**
493  *  ixgbe_disable_tx_laser_multispeed_fiber - Disable Tx laser
494  *  @hw: pointer to hardware structure
495  *
496  *  The base drivers may require better control over SFP+ module
497  *  PHY states.  This includes selectively shutting down the Tx
498  *  laser on the PHY, effectively halting physical link.
499  **/
500 void ixgbe_disable_tx_laser_multispeed_fiber(struct ixgbe_hw *hw)
501 {
502         u32 esdp_reg = IXGBE_READ_REG(hw, IXGBE_ESDP);
503
504         /* Disable tx laser; allow 100us to go dark per spec */
505         esdp_reg |= IXGBE_ESDP_SDP3;
506         IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp_reg);
507         IXGBE_WRITE_FLUSH(hw);
508         usec_delay(100);
509 }
510
511 /**
512  *  ixgbe_enable_tx_laser_multispeed_fiber - Enable Tx laser
513  *  @hw: pointer to hardware structure
514  *
515  *  The base drivers may require better control over SFP+ module
516  *  PHY states.  This includes selectively turning on the Tx
517  *  laser on the PHY, effectively starting physical link.
518  **/
519 void ixgbe_enable_tx_laser_multispeed_fiber(struct ixgbe_hw *hw)
520 {
521         u32 esdp_reg = IXGBE_READ_REG(hw, IXGBE_ESDP);
522
523         /* Enable tx laser; allow 100ms to light up */
524         esdp_reg &= ~IXGBE_ESDP_SDP3;
525         IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp_reg);
526         IXGBE_WRITE_FLUSH(hw);
527         msec_delay(100);
528 }
529
530 /**
531  *  ixgbe_flap_tx_laser_multispeed_fiber - Flap Tx laser
532  *  @hw: pointer to hardware structure
533  *
534  *  When the driver changes the link speeds that it can support,
535  *  it sets autotry_restart to TRUE to indicate that we need to
536  *  initiate a new autotry session with the link partner.  To do
537  *  so, we set the speed then disable and re-enable the tx laser, to
538  *  alert the link partner that it also needs to restart autotry on its
539  *  end.  This is consistent with TRUE clause 37 autoneg, which also
540  *  involves a loss of signal.
541  **/
542 void ixgbe_flap_tx_laser_multispeed_fiber(struct ixgbe_hw *hw)
543 {
544         DEBUGFUNC("ixgbe_flap_tx_laser_multispeed_fiber");
545
546         if (hw->mac.autotry_restart) {
547                 ixgbe_disable_tx_laser_multispeed_fiber(hw);
548                 ixgbe_enable_tx_laser_multispeed_fiber(hw);
549                 hw->mac.autotry_restart = FALSE;
550         }
551 }
552
553 /**
554  *  ixgbe_setup_mac_link_multispeed_fiber - Set MAC link speed
555  *  @hw: pointer to hardware structure
556  *  @speed: new link speed
557  *  @autoneg: TRUE if autonegotiation enabled
558  *  @autoneg_wait_to_complete: TRUE when waiting for completion is needed
559  *
560  *  Set the link speed in the AUTOC register and restarts link.
561  **/
562 s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
563                                      ixgbe_link_speed speed, bool autoneg,
564                                      bool autoneg_wait_to_complete)
565 {
566         s32 status = IXGBE_SUCCESS;
567         ixgbe_link_speed link_speed = IXGBE_LINK_SPEED_UNKNOWN;
568         ixgbe_link_speed highest_link_speed = IXGBE_LINK_SPEED_UNKNOWN;
569         u32 speedcnt = 0;
570         u32 esdp_reg = IXGBE_READ_REG(hw, IXGBE_ESDP);
571         u32 i = 0;
572         bool link_up = FALSE;
573         bool negotiation;
574
575         DEBUGFUNC("ixgbe_setup_mac_link_multispeed_fiber");
576
577         /* Mask off requested but non-supported speeds */
578         status = ixgbe_get_link_capabilities(hw, &link_speed, &negotiation);
579         if (status != IXGBE_SUCCESS)
580                 return status;
581
582         speed &= link_speed;
583
584         /*
585          * Try each speed one by one, highest priority first.  We do this in
586          * software because 10gb fiber doesn't support speed autonegotiation.
587          */
588         if (speed & IXGBE_LINK_SPEED_10GB_FULL) {
589                 speedcnt++;
590                 highest_link_speed = IXGBE_LINK_SPEED_10GB_FULL;
591
592                 /* If we already have link at this speed, just jump out */
593                 status = ixgbe_check_link(hw, &link_speed, &link_up, FALSE);
594                 if (status != IXGBE_SUCCESS)
595                         return status;
596
597                 if ((link_speed == IXGBE_LINK_SPEED_10GB_FULL) && link_up)
598                         goto out;
599
600                 /* Set the module link speed */
601                 esdp_reg |= (IXGBE_ESDP_SDP5_DIR | IXGBE_ESDP_SDP5);
602                 IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp_reg);
603                 IXGBE_WRITE_FLUSH(hw);
604
605                 /* Allow module to change analog characteristics (1G->10G) */
606                 msec_delay(40);
607
608                 status = ixgbe_setup_mac_link_82599(hw,
609                                                     IXGBE_LINK_SPEED_10GB_FULL,
610                                                     autoneg,
611                                                     autoneg_wait_to_complete);
612                 if (status != IXGBE_SUCCESS)
613                         return status;
614
615                 /* Flap the tx laser if it has not already been done */
616                 ixgbe_flap_tx_laser(hw);
617
618                 /*
619                  * Wait for the controller to acquire link.  Per IEEE 802.3ap,
620                  * Section 73.10.2, we may have to wait up to 500ms if KR is
621                  * attempted.  82599 uses the same timing for 10g SFI.
622                  */
623                 for (i = 0; i < 5; i++) {
624                         /* Wait for the link partner to also set speed */
625                         msec_delay(100);
626
627                         /* If we have link, just jump out */
628                         status = ixgbe_check_link(hw, &link_speed,
629                                                   &link_up, FALSE);
630                         if (status != IXGBE_SUCCESS)
631                                 return status;
632
633                         if (link_up)
634                                 goto out;
635                 }
636         }
637
638         if (speed & IXGBE_LINK_SPEED_1GB_FULL) {
639                 speedcnt++;
640                 if (highest_link_speed == IXGBE_LINK_SPEED_UNKNOWN)
641                         highest_link_speed = IXGBE_LINK_SPEED_1GB_FULL;
642
643                 /* If we already have link at this speed, just jump out */
644                 status = ixgbe_check_link(hw, &link_speed, &link_up, FALSE);
645                 if (status != IXGBE_SUCCESS)
646                         return status;
647
648                 if ((link_speed == IXGBE_LINK_SPEED_1GB_FULL) && link_up)
649                         goto out;
650
651                 /* Set the module link speed */
652                 esdp_reg &= ~IXGBE_ESDP_SDP5;
653                 esdp_reg |= IXGBE_ESDP_SDP5_DIR;
654                 IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp_reg);
655                 IXGBE_WRITE_FLUSH(hw);
656
657                 /* Allow module to change analog characteristics (10G->1G) */
658                 msec_delay(40);
659
660                 status = ixgbe_setup_mac_link_82599(hw,
661                                                     IXGBE_LINK_SPEED_1GB_FULL,
662                                                     autoneg,
663                                                     autoneg_wait_to_complete);
664                 if (status != IXGBE_SUCCESS)
665                         return status;
666
667                 /* Flap the tx laser if it has not already been done */
668                 ixgbe_flap_tx_laser(hw);
669
670                 /* Wait for the link partner to also set speed */
671                 msec_delay(100);
672
673                 /* If we have link, just jump out */
674                 status = ixgbe_check_link(hw, &link_speed, &link_up, FALSE);
675                 if (status != IXGBE_SUCCESS)
676                         return status;
677
678                 if (link_up)
679                         goto out;
680         }
681
682         /*
683          * We didn't get link.  Configure back to the highest speed we tried,
684          * (if there was more than one).  We call ourselves back with just the
685          * single highest speed that the user requested.
686          */
687         if (speedcnt > 1)
688                 status = ixgbe_setup_mac_link_multispeed_fiber(hw,
689                         highest_link_speed, autoneg, autoneg_wait_to_complete);
690
691 out:
692         /* Set autoneg_advertised value based on input link speed */
693         hw->phy.autoneg_advertised = 0;
694
695         if (speed & IXGBE_LINK_SPEED_10GB_FULL)
696                 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_10GB_FULL;
697
698         if (speed & IXGBE_LINK_SPEED_1GB_FULL)
699                 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_1GB_FULL;
700
701         return status;
702 }
703
704 /**
705  *  ixgbe_setup_mac_link_smartspeed - Set MAC link speed using SmartSpeed
706  *  @hw: pointer to hardware structure
707  *  @speed: new link speed
708  *  @autoneg: TRUE if autonegotiation enabled
709  *  @autoneg_wait_to_complete: TRUE when waiting for completion is needed
710  *
711  *  Implements the Intel SmartSpeed algorithm.
712  **/
713 s32 ixgbe_setup_mac_link_smartspeed(struct ixgbe_hw *hw,
714                                     ixgbe_link_speed speed, bool autoneg,
715                                     bool autoneg_wait_to_complete)
716 {
717         s32 status = IXGBE_SUCCESS;
718         ixgbe_link_speed link_speed = IXGBE_LINK_SPEED_UNKNOWN;
719         s32 i, j;
720         bool link_up = FALSE;
721         u32 autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
722
723         DEBUGFUNC("ixgbe_setup_mac_link_smartspeed");
724
725          /* Set autoneg_advertised value based on input link speed */
726         hw->phy.autoneg_advertised = 0;
727
728         if (speed & IXGBE_LINK_SPEED_10GB_FULL)
729                 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_10GB_FULL;
730
731         if (speed & IXGBE_LINK_SPEED_1GB_FULL)
732                 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_1GB_FULL;
733
734         if (speed & IXGBE_LINK_SPEED_100_FULL)
735                 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_100_FULL;
736
737         /*
738          * Implement Intel SmartSpeed algorithm.  SmartSpeed will reduce the
739          * autoneg advertisement if link is unable to be established at the
740          * highest negotiated rate.  This can sometimes happen due to integrity
741          * issues with the physical media connection.
742          */
743
744         /* First, try to get link with full advertisement */
745         hw->phy.smart_speed_active = FALSE;
746         for (j = 0; j < IXGBE_SMARTSPEED_MAX_RETRIES; j++) {
747                 status = ixgbe_setup_mac_link_82599(hw, speed, autoneg,
748                                                     autoneg_wait_to_complete);
749                 if (status != IXGBE_SUCCESS)
750                         goto out;
751
752                 /*
753                  * Wait for the controller to acquire link.  Per IEEE 802.3ap,
754                  * Section 73.10.2, we may have to wait up to 500ms if KR is
755                  * attempted, or 200ms if KX/KX4/BX/BX4 is attempted, per
756                  * Table 9 in the AN MAS.
757                  */
758                 for (i = 0; i < 5; i++) {
759                         msec_delay(100);
760
761                         /* If we have link, just jump out */
762                         status = ixgbe_check_link(hw, &link_speed, &link_up,
763                                                   FALSE);
764                         if (status != IXGBE_SUCCESS)
765                                 goto out;
766
767                         if (link_up)
768                                 goto out;
769                 }
770         }
771
772         /*
773          * We didn't get link.  If we advertised KR plus one of KX4/KX
774          * (or BX4/BX), then disable KR and try again.
775          */
776         if (((autoc_reg & IXGBE_AUTOC_KR_SUPP) == 0) ||
777             ((autoc_reg & IXGBE_AUTOC_KX4_KX_SUPP_MASK) == 0))
778                 goto out;
779
780         /* Turn SmartSpeed on to disable KR support */
781         hw->phy.smart_speed_active = TRUE;
782         status = ixgbe_setup_mac_link_82599(hw, speed, autoneg,
783                                             autoneg_wait_to_complete);
784         if (status != IXGBE_SUCCESS)
785                 goto out;
786
787         /*
788          * Wait for the controller to acquire link.  600ms will allow for
789          * the AN link_fail_inhibit_timer as well for multiple cycles of
790          * parallel detect, both 10g and 1g. This allows for the maximum
791          * connect attempts as defined in the AN MAS table 73-7.
792          */
793         for (i = 0; i < 6; i++) {
794                 msec_delay(100);
795
796                 /* If we have link, just jump out */
797                 status = ixgbe_check_link(hw, &link_speed, &link_up, FALSE);
798                 if (status != IXGBE_SUCCESS)
799                         goto out;
800
801                 if (link_up)
802                         goto out;
803         }
804
805         /* We didn't get link.  Turn SmartSpeed back off. */
806         hw->phy.smart_speed_active = FALSE;
807         status = ixgbe_setup_mac_link_82599(hw, speed, autoneg,
808                                             autoneg_wait_to_complete);
809
810 out:
811         if (link_up && (link_speed == IXGBE_LINK_SPEED_1GB_FULL))
812                 DEBUGOUT("Smartspeed has downgraded the link speed "
813                 "from the maximum advertised\n");
814         return status;
815 }
816
817 /**
818  *  ixgbe_setup_mac_link_82599 - Set MAC link speed
819  *  @hw: pointer to hardware structure
820  *  @speed: new link speed
821  *  @autoneg: TRUE if autonegotiation enabled
822  *  @autoneg_wait_to_complete: TRUE when waiting for completion is needed
823  *
824  *  Set the link speed in the AUTOC register and restarts link.
825  **/
826 s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw,
827                                ixgbe_link_speed speed, bool autoneg,
828                                bool autoneg_wait_to_complete)
829 {
830         s32 status = IXGBE_SUCCESS;
831         u32 autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
832         u32 autoc2 = IXGBE_READ_REG(hw, IXGBE_AUTOC2);
833         u32 start_autoc = autoc;
834         u32 orig_autoc = 0;
835         u32 link_mode = autoc & IXGBE_AUTOC_LMS_MASK;
836         u32 pma_pmd_1g = autoc & IXGBE_AUTOC_1G_PMA_PMD_MASK;
837         u32 pma_pmd_10g_serial = autoc2 & IXGBE_AUTOC2_10G_SERIAL_PMA_PMD_MASK;
838         u32 links_reg;
839         u32 i;
840         ixgbe_link_speed link_capabilities = IXGBE_LINK_SPEED_UNKNOWN;
841
842         DEBUGFUNC("ixgbe_setup_mac_link_82599");
843
844         /* Check to see if speed passed in is supported. */
845         status = ixgbe_get_link_capabilities(hw, &link_capabilities, &autoneg);
846         if (status != IXGBE_SUCCESS)
847                 goto out;
848
849         speed &= link_capabilities;
850
851         if (speed == IXGBE_LINK_SPEED_UNKNOWN) {
852                 status = IXGBE_ERR_LINK_SETUP;
853                 goto out;
854         }
855
856         /* Use stored value (EEPROM defaults) of AUTOC to find KR/KX4 support*/
857         if (hw->mac.orig_link_settings_stored)
858                 orig_autoc = hw->mac.orig_autoc;
859         else
860                 orig_autoc = autoc;
861
862         if (link_mode == IXGBE_AUTOC_LMS_KX4_KX_KR ||
863             link_mode == IXGBE_AUTOC_LMS_KX4_KX_KR_1G_AN ||
864             link_mode == IXGBE_AUTOC_LMS_KX4_KX_KR_SGMII) {
865                 /* Set KX4/KX/KR support according to speed requested */
866                 autoc &= ~(IXGBE_AUTOC_KX4_KX_SUPP_MASK | IXGBE_AUTOC_KR_SUPP);
867                 if (speed & IXGBE_LINK_SPEED_10GB_FULL)
868                         if (orig_autoc & IXGBE_AUTOC_KX4_SUPP)
869                                 autoc |= IXGBE_AUTOC_KX4_SUPP;
870                         if ((orig_autoc & IXGBE_AUTOC_KR_SUPP) &&
871                             (hw->phy.smart_speed_active == FALSE))
872                                 autoc |= IXGBE_AUTOC_KR_SUPP;
873                 if (speed & IXGBE_LINK_SPEED_1GB_FULL)
874                         autoc |= IXGBE_AUTOC_KX_SUPP;
875         } else if ((pma_pmd_1g == IXGBE_AUTOC_1G_SFI) &&
876                    (link_mode == IXGBE_AUTOC_LMS_1G_LINK_NO_AN ||
877                     link_mode == IXGBE_AUTOC_LMS_1G_AN)) {
878                 /* Switch from 1G SFI to 10G SFI if requested */
879                 if ((speed == IXGBE_LINK_SPEED_10GB_FULL) &&
880                     (pma_pmd_10g_serial == IXGBE_AUTOC2_10G_SFI)) {
881                         autoc &= ~IXGBE_AUTOC_LMS_MASK;
882                         autoc |= IXGBE_AUTOC_LMS_10G_SERIAL;
883                 }
884         } else if ((pma_pmd_10g_serial == IXGBE_AUTOC2_10G_SFI) &&
885                    (link_mode == IXGBE_AUTOC_LMS_10G_SERIAL)) {
886                 /* Switch from 10G SFI to 1G SFI if requested */
887                 if ((speed == IXGBE_LINK_SPEED_1GB_FULL) &&
888                     (pma_pmd_1g == IXGBE_AUTOC_1G_SFI)) {
889                         autoc &= ~IXGBE_AUTOC_LMS_MASK;
890                         if (autoneg)
891                                 autoc |= IXGBE_AUTOC_LMS_1G_AN;
892                         else
893                                 autoc |= IXGBE_AUTOC_LMS_1G_LINK_NO_AN;
894                 }
895         }
896
897         if (autoc != start_autoc) {
898                 /* Restart link */
899                 autoc |= IXGBE_AUTOC_AN_RESTART;
900                 IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc);
901
902                 /* Only poll for autoneg to complete if specified to do so */
903                 if (autoneg_wait_to_complete) {
904                         if (link_mode == IXGBE_AUTOC_LMS_KX4_KX_KR ||
905                             link_mode == IXGBE_AUTOC_LMS_KX4_KX_KR_1G_AN ||
906                             link_mode == IXGBE_AUTOC_LMS_KX4_KX_KR_SGMII) {
907                                 links_reg = 0; /*Just in case Autoneg time=0*/
908                                 for (i = 0; i < IXGBE_AUTO_NEG_TIME; i++) {
909                                         links_reg =
910                                                IXGBE_READ_REG(hw, IXGBE_LINKS);
911                                         if (links_reg & IXGBE_LINKS_KX_AN_COMP)
912                                                 break;
913                                         msec_delay(100);
914                                 }
915                                 if (!(links_reg & IXGBE_LINKS_KX_AN_COMP)) {
916                                         status =
917                                                 IXGBE_ERR_AUTONEG_NOT_COMPLETE;
918                                         DEBUGOUT("Autoneg did not complete.\n");
919                                 }
920                         }
921                 }
922
923                 /* Add delay to filter out noises during initial link setup */
924                 msec_delay(50);
925         }
926
927 out:
928         return status;
929 }
930
931 /**
932  *  ixgbe_setup_copper_link_82599 - Set the PHY autoneg advertised field
933  *  @hw: pointer to hardware structure
934  *  @speed: new link speed
935  *  @autoneg: TRUE if autonegotiation enabled
936  *  @autoneg_wait_to_complete: TRUE if waiting is needed to complete
937  *
938  *  Restarts link on PHY and MAC based on settings passed in.
939  **/
940 static s32 ixgbe_setup_copper_link_82599(struct ixgbe_hw *hw,
941                                          ixgbe_link_speed speed,
942                                          bool autoneg,
943                                          bool autoneg_wait_to_complete)
944 {
945         s32 status;
946
947         DEBUGFUNC("ixgbe_setup_copper_link_82599");
948
949         /* Setup the PHY according to input speed */
950         status = hw->phy.ops.setup_link_speed(hw, speed, autoneg,
951                                               autoneg_wait_to_complete);
952         /* Set up MAC */
953         ixgbe_start_mac_link_82599(hw, autoneg_wait_to_complete);
954
955         return status;
956 }
957
958 /**
959  *  ixgbe_reset_hw_82599 - Perform hardware reset
960  *  @hw: pointer to hardware structure
961  *
962  *  Resets the hardware by resetting the transmit and receive units, masks
963  *  and clears all interrupts, perform a PHY reset, and perform a link (MAC)
964  *  reset.
965  **/
966 s32 ixgbe_reset_hw_82599(struct ixgbe_hw *hw)
967 {
968         ixgbe_link_speed link_speed;
969         s32 status;
970         u32 ctrl, i, autoc, autoc2;
971         bool link_up = FALSE;
972
973         DEBUGFUNC("ixgbe_reset_hw_82599");
974
975         /* Call adapter stop to disable tx/rx and clear interrupts */
976         status = hw->mac.ops.stop_adapter(hw);
977         if (status != IXGBE_SUCCESS)
978                 goto reset_hw_out;
979
980         /* flush pending Tx transactions */
981         ixgbe_clear_tx_pending(hw);
982
983         /* PHY ops must be identified and initialized prior to reset */
984
985         /* Identify PHY and related function pointers */
986         status = hw->phy.ops.init(hw);
987
988         if (status == IXGBE_ERR_SFP_NOT_SUPPORTED)
989                 goto reset_hw_out;
990
991         /* Setup SFP module if there is one present. */
992         if (hw->phy.sfp_setup_needed) {
993                 status = hw->mac.ops.setup_sfp(hw);
994                 hw->phy.sfp_setup_needed = FALSE;
995         }
996
997         if (status == IXGBE_ERR_SFP_NOT_SUPPORTED)
998                 goto reset_hw_out;
999
1000         /* Reset PHY */
1001         if (hw->phy.reset_disable == FALSE && hw->phy.ops.reset != NULL)
1002                 hw->phy.ops.reset(hw);
1003
1004 mac_reset_top:
1005         /*
1006          * Issue global reset to the MAC.  Needs to be SW reset if link is up.
1007          * If link reset is used when link is up, it might reset the PHY when
1008          * mng is using it.  If link is down or the flag to force full link
1009          * reset is set, then perform link reset.
1010          */
1011         ctrl = IXGBE_CTRL_LNK_RST;
1012         if (!hw->force_full_reset) {
1013                 hw->mac.ops.check_link(hw, &link_speed, &link_up, FALSE);
1014                 if (link_up)
1015                         ctrl = IXGBE_CTRL_RST;
1016         }
1017
1018         ctrl |= IXGBE_READ_REG(hw, IXGBE_CTRL);
1019         IXGBE_WRITE_REG(hw, IXGBE_CTRL, ctrl);
1020         IXGBE_WRITE_FLUSH(hw);
1021
1022         /* Poll for reset bit to self-clear indicating reset is complete */
1023         for (i = 0; i < 10; i++) {
1024                 usec_delay(1);
1025                 ctrl = IXGBE_READ_REG(hw, IXGBE_CTRL);
1026                 if (!(ctrl & IXGBE_CTRL_RST_MASK))
1027                         break;
1028         }
1029
1030         if (ctrl & IXGBE_CTRL_RST_MASK) {
1031                 status = IXGBE_ERR_RESET_FAILED;
1032                 DEBUGOUT("Reset polling failed to complete.\n");
1033         }
1034
1035         msec_delay(50);
1036
1037         /*
1038          * Double resets are required for recovery from certain error
1039          * conditions.  Between resets, it is necessary to stall to allow time
1040          * for any pending HW events to complete.
1041          */
1042         if (hw->mac.flags & IXGBE_FLAGS_DOUBLE_RESET_REQUIRED) {
1043                 hw->mac.flags &= ~IXGBE_FLAGS_DOUBLE_RESET_REQUIRED;
1044                 goto mac_reset_top;
1045         }
1046
1047         /*
1048          * Store the original AUTOC/AUTOC2 values if they have not been
1049          * stored off yet.  Otherwise restore the stored original
1050          * values since the reset operation sets back to defaults.
1051          */
1052         autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
1053         autoc2 = IXGBE_READ_REG(hw, IXGBE_AUTOC2);
1054         if (hw->mac.orig_link_settings_stored == FALSE) {
1055                 hw->mac.orig_autoc = autoc;
1056                 hw->mac.orig_autoc2 = autoc2;
1057                 hw->mac.orig_link_settings_stored = TRUE;
1058         } else {
1059                 if (autoc != hw->mac.orig_autoc)
1060                         IXGBE_WRITE_REG(hw, IXGBE_AUTOC, (hw->mac.orig_autoc |
1061                                         IXGBE_AUTOC_AN_RESTART));
1062
1063                 if ((autoc2 & IXGBE_AUTOC2_UPPER_MASK) !=
1064                     (hw->mac.orig_autoc2 & IXGBE_AUTOC2_UPPER_MASK)) {
1065                         autoc2 &= ~IXGBE_AUTOC2_UPPER_MASK;
1066                         autoc2 |= (hw->mac.orig_autoc2 &
1067                                    IXGBE_AUTOC2_UPPER_MASK);
1068                         IXGBE_WRITE_REG(hw, IXGBE_AUTOC2, autoc2);
1069                 }
1070         }
1071
1072         /* Store the permanent mac address */
1073         hw->mac.ops.get_mac_addr(hw, hw->mac.perm_addr);
1074
1075         /*
1076          * Store MAC address from RAR0, clear receive address registers, and
1077          * clear the multicast table.  Also reset num_rar_entries to 128,
1078          * since we modify this value when programming the SAN MAC address.
1079          */
1080         hw->mac.num_rar_entries = 128;
1081         hw->mac.ops.init_rx_addrs(hw);
1082
1083         /* Store the permanent SAN mac address */
1084         hw->mac.ops.get_san_mac_addr(hw, hw->mac.san_addr);
1085
1086         /* Add the SAN MAC address to the RAR only if it's a valid address */
1087         if (ixgbe_validate_mac_addr(hw->mac.san_addr) == 0) {
1088                 hw->mac.ops.set_rar(hw, hw->mac.num_rar_entries - 1,
1089                                     hw->mac.san_addr, 0, IXGBE_RAH_AV);
1090
1091                 /* Reserve the last RAR for the SAN MAC address */
1092                 hw->mac.num_rar_entries--;
1093         }
1094
1095         /* Store the alternative WWNN/WWPN prefix */
1096         hw->mac.ops.get_wwn_prefix(hw, &hw->mac.wwnn_prefix,
1097                                    &hw->mac.wwpn_prefix);
1098
1099 reset_hw_out:
1100         return status;
1101 }
1102
1103 /**
1104  *  ixgbe_reinit_fdir_tables_82599 - Reinitialize Flow Director tables.
1105  *  @hw: pointer to hardware structure
1106  **/
1107 s32 ixgbe_reinit_fdir_tables_82599(struct ixgbe_hw *hw)
1108 {
1109         int i;
1110         u32 fdirctrl = IXGBE_READ_REG(hw, IXGBE_FDIRCTRL);
1111         fdirctrl &= ~IXGBE_FDIRCTRL_INIT_DONE;
1112
1113         DEBUGFUNC("ixgbe_reinit_fdir_tables_82599");
1114
1115         /*
1116          * Before starting reinitialization process,
1117          * FDIRCMD.CMD must be zero.
1118          */
1119         for (i = 0; i < IXGBE_FDIRCMD_CMD_POLL; i++) {
1120                 if (!(IXGBE_READ_REG(hw, IXGBE_FDIRCMD) &
1121                       IXGBE_FDIRCMD_CMD_MASK))
1122                         break;
1123                 usec_delay(10);
1124         }
1125         if (i >= IXGBE_FDIRCMD_CMD_POLL) {
1126                 DEBUGOUT("Flow Director previous command isn't complete, "
1127                          "aborting table re-initialization.\n");
1128                 return IXGBE_ERR_FDIR_REINIT_FAILED;
1129         }
1130
1131         IXGBE_WRITE_REG(hw, IXGBE_FDIRFREE, 0);
1132         IXGBE_WRITE_FLUSH(hw);
1133         /*
1134          * 82599 adapters flow director init flow cannot be restarted,
1135          * Workaround 82599 silicon errata by performing the following steps
1136          * before re-writing the FDIRCTRL control register with the same value.
1137          * - write 1 to bit 8 of FDIRCMD register &
1138          * - write 0 to bit 8 of FDIRCMD register
1139          */
1140         IXGBE_WRITE_REG(hw, IXGBE_FDIRCMD,
1141                         (IXGBE_READ_REG(hw, IXGBE_FDIRCMD) |
1142                          IXGBE_FDIRCMD_CLEARHT));
1143         IXGBE_WRITE_FLUSH(hw);
1144         IXGBE_WRITE_REG(hw, IXGBE_FDIRCMD,
1145                         (IXGBE_READ_REG(hw, IXGBE_FDIRCMD) &
1146                          ~IXGBE_FDIRCMD_CLEARHT));
1147         IXGBE_WRITE_FLUSH(hw);
1148         /*
1149          * Clear FDIR Hash register to clear any leftover hashes
1150          * waiting to be programmed.
1151          */
1152         IXGBE_WRITE_REG(hw, IXGBE_FDIRHASH, 0x00);
1153         IXGBE_WRITE_FLUSH(hw);
1154
1155         IXGBE_WRITE_REG(hw, IXGBE_FDIRCTRL, fdirctrl);
1156         IXGBE_WRITE_FLUSH(hw);
1157
1158         /* Poll init-done after we write FDIRCTRL register */
1159         for (i = 0; i < IXGBE_FDIR_INIT_DONE_POLL; i++) {
1160                 if (IXGBE_READ_REG(hw, IXGBE_FDIRCTRL) &
1161                                    IXGBE_FDIRCTRL_INIT_DONE)
1162                         break;
1163                 usec_delay(10);
1164         }
1165         if (i >= IXGBE_FDIR_INIT_DONE_POLL) {
1166                 DEBUGOUT("Flow Director Signature poll time exceeded!\n");
1167                 return IXGBE_ERR_FDIR_REINIT_FAILED;
1168         }
1169
1170         /* Clear FDIR statistics registers (read to clear) */
1171         IXGBE_READ_REG(hw, IXGBE_FDIRUSTAT);
1172         IXGBE_READ_REG(hw, IXGBE_FDIRFSTAT);
1173         IXGBE_READ_REG(hw, IXGBE_FDIRMATCH);
1174         IXGBE_READ_REG(hw, IXGBE_FDIRMISS);
1175         IXGBE_READ_REG(hw, IXGBE_FDIRLEN);
1176
1177         return IXGBE_SUCCESS;
1178 }
1179
1180 /**
1181  *  ixgbe_fdir_enable_82599 - Initialize Flow Director control registers
1182  *  @hw: pointer to hardware structure
1183  *  @fdirctrl: value to write to flow director control register
1184  **/
1185 static void ixgbe_fdir_enable_82599(struct ixgbe_hw *hw, u32 fdirctrl)
1186 {
1187         int i;
1188
1189         DEBUGFUNC("ixgbe_fdir_enable_82599");
1190
1191         /* Prime the keys for hashing */
1192         IXGBE_WRITE_REG(hw, IXGBE_FDIRHKEY, IXGBE_ATR_BUCKET_HASH_KEY);
1193         IXGBE_WRITE_REG(hw, IXGBE_FDIRSKEY, IXGBE_ATR_SIGNATURE_HASH_KEY);
1194
1195         /*
1196          * Poll init-done after we write the register.  Estimated times:
1197          *      10G: PBALLOC = 11b, timing is 60us
1198          *       1G: PBALLOC = 11b, timing is 600us
1199          *     100M: PBALLOC = 11b, timing is 6ms
1200          *
1201          *     Multiple these timings by 4 if under full Rx load
1202          *
1203          * So we'll poll for IXGBE_FDIR_INIT_DONE_POLL times, sleeping for
1204          * 1 msec per poll time.  If we're at line rate and drop to 100M, then
1205          * this might not finish in our poll time, but we can live with that
1206          * for now.
1207          */
1208         IXGBE_WRITE_REG(hw, IXGBE_FDIRCTRL, fdirctrl);
1209         IXGBE_WRITE_FLUSH(hw);
1210         for (i = 0; i < IXGBE_FDIR_INIT_DONE_POLL; i++) {
1211                 if (IXGBE_READ_REG(hw, IXGBE_FDIRCTRL) &
1212                                    IXGBE_FDIRCTRL_INIT_DONE)
1213                         break;
1214                 msec_delay(1);
1215         }
1216
1217         if (i >= IXGBE_FDIR_INIT_DONE_POLL)
1218                 DEBUGOUT("Flow Director poll time exceeded!\n");
1219 }
1220
1221 /**
1222  *  ixgbe_init_fdir_signature_82599 - Initialize Flow Director signature filters
1223  *  @hw: pointer to hardware structure
1224  *  @fdirctrl: value to write to flow director control register, initially
1225  *           contains just the value of the Rx packet buffer allocation
1226  **/
1227 s32 ixgbe_init_fdir_signature_82599(struct ixgbe_hw *hw, u32 fdirctrl)
1228 {
1229         DEBUGFUNC("ixgbe_init_fdir_signature_82599");
1230
1231         /*
1232          * Continue setup of fdirctrl register bits:
1233          *  Move the flexible bytes to use the ethertype - shift 6 words
1234          *  Set the maximum length per hash bucket to 0xA filters
1235          *  Send interrupt when 64 filters are left
1236          */
1237         fdirctrl |= (0x6 << IXGBE_FDIRCTRL_FLEX_SHIFT) |
1238                     (0xA << IXGBE_FDIRCTRL_MAX_LENGTH_SHIFT) |
1239                     (4 << IXGBE_FDIRCTRL_FULL_THRESH_SHIFT);
1240
1241         /* write hashes and fdirctrl register, poll for completion */
1242         ixgbe_fdir_enable_82599(hw, fdirctrl);
1243
1244         return IXGBE_SUCCESS;
1245 }
1246
1247 /**
1248  *  ixgbe_init_fdir_perfect_82599 - Initialize Flow Director perfect filters
1249  *  @hw: pointer to hardware structure
1250  *  @fdirctrl: value to write to flow director control register, initially
1251  *           contains just the value of the Rx packet buffer allocation
1252  **/
1253 s32 ixgbe_init_fdir_perfect_82599(struct ixgbe_hw *hw, u32 fdirctrl)
1254 {
1255         DEBUGFUNC("ixgbe_init_fdir_perfect_82599");
1256
1257         /*
1258          * Continue setup of fdirctrl register bits:
1259          *  Turn perfect match filtering on
1260          *  Report hash in RSS field of Rx wb descriptor
1261          *  Initialize the drop queue
1262          *  Move the flexible bytes to use the ethertype - shift 6 words
1263          *  Set the maximum length per hash bucket to 0xA filters
1264          *  Send interrupt when 64 (0x4 * 16) filters are left
1265          */
1266         fdirctrl |= IXGBE_FDIRCTRL_PERFECT_MATCH |
1267                     IXGBE_FDIRCTRL_REPORT_STATUS |
1268                     (IXGBE_FDIR_DROP_QUEUE << IXGBE_FDIRCTRL_DROP_Q_SHIFT) |
1269                     (0x6 << IXGBE_FDIRCTRL_FLEX_SHIFT) |
1270                     (0xA << IXGBE_FDIRCTRL_MAX_LENGTH_SHIFT) |
1271                     (4 << IXGBE_FDIRCTRL_FULL_THRESH_SHIFT);
1272
1273         /* write hashes and fdirctrl register, poll for completion */
1274         ixgbe_fdir_enable_82599(hw, fdirctrl);
1275
1276         return IXGBE_SUCCESS;
1277 }
1278
1279 /*
1280  * These defines allow us to quickly generate all of the necessary instructions
1281  * in the function below by simply calling out IXGBE_COMPUTE_SIG_HASH_ITERATION
1282  * for values 0 through 15
1283  */
1284 #define IXGBE_ATR_COMMON_HASH_KEY \
1285                 (IXGBE_ATR_BUCKET_HASH_KEY & IXGBE_ATR_SIGNATURE_HASH_KEY)
1286 #define IXGBE_COMPUTE_SIG_HASH_ITERATION(_n) \
1287 do { \
1288         u32 n = (_n); \
1289         if (IXGBE_ATR_COMMON_HASH_KEY & (0x01 << n)) \
1290                 common_hash ^= lo_hash_dword >> n; \
1291         else if (IXGBE_ATR_BUCKET_HASH_KEY & (0x01 << n)) \
1292                 bucket_hash ^= lo_hash_dword >> n; \
1293         else if (IXGBE_ATR_SIGNATURE_HASH_KEY & (0x01 << n)) \
1294                 sig_hash ^= lo_hash_dword << (16 - n); \
1295         if (IXGBE_ATR_COMMON_HASH_KEY & (0x01 << (n + 16))) \
1296                 common_hash ^= hi_hash_dword >> n; \
1297         else if (IXGBE_ATR_BUCKET_HASH_KEY & (0x01 << (n + 16))) \
1298                 bucket_hash ^= hi_hash_dword >> n; \
1299         else if (IXGBE_ATR_SIGNATURE_HASH_KEY & (0x01 << (n + 16))) \
1300                 sig_hash ^= hi_hash_dword << (16 - n); \
1301 } while (0);
1302
1303 /**
1304  *  ixgbe_atr_compute_sig_hash_82599 - Compute the signature hash
1305  *  @stream: input bitstream to compute the hash on
1306  *
1307  *  This function is almost identical to the function above but contains
1308  *  several optomizations such as unwinding all of the loops, letting the
1309  *  compiler work out all of the conditional ifs since the keys are static
1310  *  defines, and computing two keys at once since the hashed dword stream
1311  *  will be the same for both keys.
1312  **/
1313 u32 ixgbe_atr_compute_sig_hash_82599(union ixgbe_atr_hash_dword input,
1314                                      union ixgbe_atr_hash_dword common)
1315 {
1316         u32 hi_hash_dword, lo_hash_dword, flow_vm_vlan;
1317         u32 sig_hash = 0, bucket_hash = 0, common_hash = 0;
1318
1319         /* record the flow_vm_vlan bits as they are a key part to the hash */
1320         flow_vm_vlan = IXGBE_NTOHL(input.dword);
1321
1322         /* generate common hash dword */
1323         hi_hash_dword = IXGBE_NTOHL(common.dword);
1324
1325         /* low dword is word swapped version of common */
1326         lo_hash_dword = (hi_hash_dword >> 16) | (hi_hash_dword << 16);
1327
1328         /* apply flow ID/VM pool/VLAN ID bits to hash words */
1329         hi_hash_dword ^= flow_vm_vlan ^ (flow_vm_vlan >> 16);
1330
1331         /* Process bits 0 and 16 */
1332         IXGBE_COMPUTE_SIG_HASH_ITERATION(0);
1333
1334         /*
1335          * apply flow ID/VM pool/VLAN ID bits to lo hash dword, we had to
1336          * delay this because bit 0 of the stream should not be processed
1337          * so we do not add the vlan until after bit 0 was processed
1338          */
1339         lo_hash_dword ^= flow_vm_vlan ^ (flow_vm_vlan << 16);
1340
1341         /* Process remaining 30 bit of the key */
1342         IXGBE_COMPUTE_SIG_HASH_ITERATION(1);
1343         IXGBE_COMPUTE_SIG_HASH_ITERATION(2);
1344         IXGBE_COMPUTE_SIG_HASH_ITERATION(3);
1345         IXGBE_COMPUTE_SIG_HASH_ITERATION(4);
1346         IXGBE_COMPUTE_SIG_HASH_ITERATION(5);
1347         IXGBE_COMPUTE_SIG_HASH_ITERATION(6);
1348         IXGBE_COMPUTE_SIG_HASH_ITERATION(7);
1349         IXGBE_COMPUTE_SIG_HASH_ITERATION(8);
1350         IXGBE_COMPUTE_SIG_HASH_ITERATION(9);
1351         IXGBE_COMPUTE_SIG_HASH_ITERATION(10);
1352         IXGBE_COMPUTE_SIG_HASH_ITERATION(11);
1353         IXGBE_COMPUTE_SIG_HASH_ITERATION(12);
1354         IXGBE_COMPUTE_SIG_HASH_ITERATION(13);
1355         IXGBE_COMPUTE_SIG_HASH_ITERATION(14);
1356         IXGBE_COMPUTE_SIG_HASH_ITERATION(15);
1357
1358         /* combine common_hash result with signature and bucket hashes */
1359         bucket_hash ^= common_hash;
1360         bucket_hash &= IXGBE_ATR_HASH_MASK;
1361
1362         sig_hash ^= common_hash << 16;
1363         sig_hash &= IXGBE_ATR_HASH_MASK << 16;
1364
1365         /* return completed signature hash */
1366         return sig_hash ^ bucket_hash;
1367 }
1368
1369 /**
1370  *  ixgbe_atr_add_signature_filter_82599 - Adds a signature hash filter
1371  *  @hw: pointer to hardware structure
1372  *  @input: unique input dword
1373  *  @common: compressed common input dword
1374  *  @queue: queue index to direct traffic to
1375  **/
1376 s32 ixgbe_fdir_add_signature_filter_82599(struct ixgbe_hw *hw,
1377                                           union ixgbe_atr_hash_dword input,
1378                                           union ixgbe_atr_hash_dword common,
1379                                           u8 queue)
1380 {
1381         u64  fdirhashcmd;
1382         u32  fdircmd;
1383
1384         DEBUGFUNC("ixgbe_fdir_add_signature_filter_82599");
1385
1386         /*
1387          * Get the flow_type in order to program FDIRCMD properly
1388          * lowest 2 bits are FDIRCMD.L4TYPE, third lowest bit is FDIRCMD.IPV6
1389          */
1390         switch (input.formatted.flow_type) {
1391         case IXGBE_ATR_FLOW_TYPE_TCPV4:
1392         case IXGBE_ATR_FLOW_TYPE_UDPV4:
1393         case IXGBE_ATR_FLOW_TYPE_SCTPV4:
1394         case IXGBE_ATR_FLOW_TYPE_TCPV6:
1395         case IXGBE_ATR_FLOW_TYPE_UDPV6:
1396         case IXGBE_ATR_FLOW_TYPE_SCTPV6:
1397                 break;
1398         default:
1399                 DEBUGOUT(" Error on flow type input\n");
1400                 return IXGBE_ERR_CONFIG;
1401         }
1402
1403         /* configure FDIRCMD register */
1404         fdircmd = IXGBE_FDIRCMD_CMD_ADD_FLOW | IXGBE_FDIRCMD_FILTER_UPDATE |
1405                   IXGBE_FDIRCMD_LAST | IXGBE_FDIRCMD_QUEUE_EN;
1406         fdircmd |= input.formatted.flow_type << IXGBE_FDIRCMD_FLOW_TYPE_SHIFT;
1407         fdircmd |= (u32)queue << IXGBE_FDIRCMD_RX_QUEUE_SHIFT;
1408
1409         /*
1410          * The lower 32-bits of fdirhashcmd is for FDIRHASH, the upper 32-bits
1411          * is for FDIRCMD.  Then do a 64-bit register write from FDIRHASH.
1412          */
1413         fdirhashcmd = (u64)fdircmd << 32;
1414         fdirhashcmd |= ixgbe_atr_compute_sig_hash_82599(input, common);
1415         IXGBE_WRITE_REG64(hw, IXGBE_FDIRHASH, fdirhashcmd);
1416
1417         DEBUGOUT2("Tx Queue=%x hash=%x\n", queue, (u32)fdirhashcmd);
1418
1419         return IXGBE_SUCCESS;
1420 }
1421
1422 #define IXGBE_COMPUTE_BKT_HASH_ITERATION(_n) \
1423 do { \
1424         u32 n = (_n); \
1425         if (IXGBE_ATR_BUCKET_HASH_KEY & (0x01 << n)) \
1426                 bucket_hash ^= lo_hash_dword >> n; \
1427         if (IXGBE_ATR_BUCKET_HASH_KEY & (0x01 << (n + 16))) \
1428                 bucket_hash ^= hi_hash_dword >> n; \
1429 } while (0);
1430
1431 /**
1432  *  ixgbe_atr_compute_perfect_hash_82599 - Compute the perfect filter hash
1433  *  @atr_input: input bitstream to compute the hash on
1434  *  @input_mask: mask for the input bitstream
1435  *
1436  *  This function serves two main purposes.  First it applys the input_mask
1437  *  to the atr_input resulting in a cleaned up atr_input data stream.
1438  *  Secondly it computes the hash and stores it in the bkt_hash field at
1439  *  the end of the input byte stream.  This way it will be available for
1440  *  future use without needing to recompute the hash.
1441  **/
1442 void ixgbe_atr_compute_perfect_hash_82599(union ixgbe_atr_input *input,
1443                                           union ixgbe_atr_input *input_mask)
1444 {
1445
1446         u32 hi_hash_dword, lo_hash_dword, flow_vm_vlan;
1447         u32 bucket_hash = 0;
1448
1449         /* Apply masks to input data */
1450         input->dword_stream[0]  &= input_mask->dword_stream[0];
1451         input->dword_stream[1]  &= input_mask->dword_stream[1];
1452         input->dword_stream[2]  &= input_mask->dword_stream[2];
1453         input->dword_stream[3]  &= input_mask->dword_stream[3];
1454         input->dword_stream[4]  &= input_mask->dword_stream[4];
1455         input->dword_stream[5]  &= input_mask->dword_stream[5];
1456         input->dword_stream[6]  &= input_mask->dword_stream[6];
1457         input->dword_stream[7]  &= input_mask->dword_stream[7];
1458         input->dword_stream[8]  &= input_mask->dword_stream[8];
1459         input->dword_stream[9]  &= input_mask->dword_stream[9];
1460         input->dword_stream[10] &= input_mask->dword_stream[10];
1461
1462         /* record the flow_vm_vlan bits as they are a key part to the hash */
1463         flow_vm_vlan = IXGBE_NTOHL(input->dword_stream[0]);
1464
1465         /* generate common hash dword */
1466         hi_hash_dword = IXGBE_NTOHL(input->dword_stream[1] ^
1467                                     input->dword_stream[2] ^
1468                                     input->dword_stream[3] ^
1469                                     input->dword_stream[4] ^
1470                                     input->dword_stream[5] ^
1471                                     input->dword_stream[6] ^
1472                                     input->dword_stream[7] ^
1473                                     input->dword_stream[8] ^
1474                                     input->dword_stream[9] ^
1475                                     input->dword_stream[10]);
1476
1477         /* low dword is word swapped version of common */
1478         lo_hash_dword = (hi_hash_dword >> 16) | (hi_hash_dword << 16);
1479
1480         /* apply flow ID/VM pool/VLAN ID bits to hash words */
1481         hi_hash_dword ^= flow_vm_vlan ^ (flow_vm_vlan >> 16);
1482
1483         /* Process bits 0 and 16 */
1484         IXGBE_COMPUTE_BKT_HASH_ITERATION(0);
1485
1486         /*
1487          * apply flow ID/VM pool/VLAN ID bits to lo hash dword, we had to
1488          * delay this because bit 0 of the stream should not be processed
1489          * so we do not add the vlan until after bit 0 was processed
1490          */
1491         lo_hash_dword ^= flow_vm_vlan ^ (flow_vm_vlan << 16);
1492
1493         /* Process remaining 30 bit of the key */
1494         IXGBE_COMPUTE_BKT_HASH_ITERATION(1);
1495         IXGBE_COMPUTE_BKT_HASH_ITERATION(2);
1496         IXGBE_COMPUTE_BKT_HASH_ITERATION(3);
1497         IXGBE_COMPUTE_BKT_HASH_ITERATION(4);
1498         IXGBE_COMPUTE_BKT_HASH_ITERATION(5);
1499         IXGBE_COMPUTE_BKT_HASH_ITERATION(6);
1500         IXGBE_COMPUTE_BKT_HASH_ITERATION(7);
1501         IXGBE_COMPUTE_BKT_HASH_ITERATION(8);
1502         IXGBE_COMPUTE_BKT_HASH_ITERATION(9);
1503         IXGBE_COMPUTE_BKT_HASH_ITERATION(10);
1504         IXGBE_COMPUTE_BKT_HASH_ITERATION(11);
1505         IXGBE_COMPUTE_BKT_HASH_ITERATION(12);
1506         IXGBE_COMPUTE_BKT_HASH_ITERATION(13);
1507         IXGBE_COMPUTE_BKT_HASH_ITERATION(14);
1508         IXGBE_COMPUTE_BKT_HASH_ITERATION(15);
1509
1510         /*
1511          * Limit hash to 13 bits since max bucket count is 8K.
1512          * Store result at the end of the input stream.
1513          */
1514         input->formatted.bkt_hash = bucket_hash & 0x1FFF;
1515 }
1516
1517 /**
1518  *  ixgbe_get_fdirtcpm_82599 - generate a tcp port from atr_input_masks
1519  *  @input_mask: mask to be bit swapped
1520  *
1521  *  The source and destination port masks for flow director are bit swapped
1522  *  in that bit 15 effects bit 0, 14 effects 1, 13, 2 etc.  In order to
1523  *  generate a correctly swapped value we need to bit swap the mask and that
1524  *  is what is accomplished by this function.
1525  **/
1526 static u32 ixgbe_get_fdirtcpm_82599(union ixgbe_atr_input *input_mask)
1527 {
1528         u32 mask = IXGBE_NTOHS(input_mask->formatted.dst_port);
1529         mask <<= IXGBE_FDIRTCPM_DPORTM_SHIFT;
1530         mask |= IXGBE_NTOHS(input_mask->formatted.src_port);
1531         mask = ((mask & 0x55555555) << 1) | ((mask & 0xAAAAAAAA) >> 1);
1532         mask = ((mask & 0x33333333) << 2) | ((mask & 0xCCCCCCCC) >> 2);
1533         mask = ((mask & 0x0F0F0F0F) << 4) | ((mask & 0xF0F0F0F0) >> 4);
1534         return ((mask & 0x00FF00FF) << 8) | ((mask & 0xFF00FF00) >> 8);
1535 }
1536
1537 /*
1538  * These two macros are meant to address the fact that we have registers
1539  * that are either all or in part big-endian.  As a result on big-endian
1540  * systems we will end up byte swapping the value to little-endian before
1541  * it is byte swapped again and written to the hardware in the original
1542  * big-endian format.
1543  */
1544 #define IXGBE_STORE_AS_BE32(_value) \
1545         (((u32)(_value) >> 24) | (((u32)(_value) & 0x00FF0000) >> 8) | \
1546          (((u32)(_value) & 0x0000FF00) << 8) | ((u32)(_value) << 24))
1547
1548 #define IXGBE_WRITE_REG_BE32(a, reg, value) \
1549         IXGBE_WRITE_REG((a), (reg), IXGBE_STORE_AS_BE32(IXGBE_NTOHL(value)))
1550
1551 #define IXGBE_STORE_AS_BE16(_value) \
1552         IXGBE_NTOHS(((u16)(_value) >> 8) | ((u16)(_value) << 8))
1553
1554 s32 ixgbe_fdir_set_input_mask_82599(struct ixgbe_hw *hw,
1555                                     union ixgbe_atr_input *input_mask)
1556 {
1557         /* mask IPv6 since it is currently not supported */
1558         u32 fdirm = IXGBE_FDIRM_DIPv6;
1559         u32 fdirtcpm;
1560
1561         DEBUGFUNC("ixgbe_fdir_set_atr_input_mask_82599");
1562
1563         /*
1564          * Program the relevant mask registers.  If src/dst_port or src/dst_addr
1565          * are zero, then assume a full mask for that field.  Also assume that
1566          * a VLAN of 0 is unspecified, so mask that out as well.  L4type
1567          * cannot be masked out in this implementation.
1568          *
1569          * This also assumes IPv4 only.  IPv6 masking isn't supported at this
1570          * point in time.
1571          */
1572
1573         /* verify bucket hash is cleared on hash generation */
1574         if (input_mask->formatted.bkt_hash)
1575                 DEBUGOUT(" bucket hash should always be 0 in mask\n");
1576
1577         /* Program FDIRM and verify partial masks */
1578         switch (input_mask->formatted.vm_pool & 0x7F) {
1579         case 0x0:
1580                 fdirm |= IXGBE_FDIRM_POOL;
1581         case 0x7F:
1582                 break;
1583         default:
1584                 DEBUGOUT(" Error on vm pool mask\n");
1585                 return IXGBE_ERR_CONFIG;
1586         }
1587
1588         switch (input_mask->formatted.flow_type & IXGBE_ATR_L4TYPE_MASK) {
1589         case 0x0:
1590                 fdirm |= IXGBE_FDIRM_L4P;
1591                 if (input_mask->formatted.dst_port ||
1592                     input_mask->formatted.src_port) {
1593                         DEBUGOUT(" Error on src/dst port mask\n");
1594                         return IXGBE_ERR_CONFIG;
1595                 }
1596         case IXGBE_ATR_L4TYPE_MASK:
1597                 break;
1598         default:
1599                 DEBUGOUT(" Error on flow type mask\n");
1600                 return IXGBE_ERR_CONFIG;
1601         }
1602
1603         switch (IXGBE_NTOHS(input_mask->formatted.vlan_id) & 0xEFFF) {
1604         case 0x0000:
1605                 /* mask VLAN ID, fall through to mask VLAN priority */
1606                 fdirm |= IXGBE_FDIRM_VLANID;
1607         case 0x0FFF:
1608                 /* mask VLAN priority */
1609                 fdirm |= IXGBE_FDIRM_VLANP;
1610                 break;
1611         case 0xE000:
1612                 /* mask VLAN ID only, fall through */
1613                 fdirm |= IXGBE_FDIRM_VLANID;
1614         case 0xEFFF:
1615                 /* no VLAN fields masked */
1616                 break;
1617         default:
1618                 DEBUGOUT(" Error on VLAN mask\n");
1619                 return IXGBE_ERR_CONFIG;
1620         }
1621
1622         switch (input_mask->formatted.flex_bytes & 0xFFFF) {
1623         case 0x0000:
1624                 /* Mask Flex Bytes, fall through */
1625                 fdirm |= IXGBE_FDIRM_FLEX;
1626         case 0xFFFF:
1627                 break;
1628         default:
1629                 DEBUGOUT(" Error on flexible byte mask\n");
1630                 return IXGBE_ERR_CONFIG;
1631         }
1632
1633         /* Now mask VM pool and destination IPv6 - bits 5 and 2 */
1634         IXGBE_WRITE_REG(hw, IXGBE_FDIRM, fdirm);
1635
1636         /* store the TCP/UDP port masks, bit reversed from port layout */
1637         fdirtcpm = ixgbe_get_fdirtcpm_82599(input_mask);
1638
1639         /* write both the same so that UDP and TCP use the same mask */
1640         IXGBE_WRITE_REG(hw, IXGBE_FDIRTCPM, ~fdirtcpm);
1641         IXGBE_WRITE_REG(hw, IXGBE_FDIRUDPM, ~fdirtcpm);
1642
1643         /* store source and destination IP masks (big-enian) */
1644         IXGBE_WRITE_REG_BE32(hw, IXGBE_FDIRSIP4M,
1645                              ~input_mask->formatted.src_ip[0]);
1646         IXGBE_WRITE_REG_BE32(hw, IXGBE_FDIRDIP4M,
1647                              ~input_mask->formatted.dst_ip[0]);
1648
1649         return IXGBE_SUCCESS;
1650 }
1651
1652 s32 ixgbe_fdir_write_perfect_filter_82599(struct ixgbe_hw *hw,
1653                                           union ixgbe_atr_input *input,
1654                                           u16 soft_id, u8 queue)
1655 {
1656         u32 fdirport, fdirvlan, fdirhash, fdircmd;
1657
1658         DEBUGFUNC("ixgbe_fdir_write_perfect_filter_82599");
1659
1660         /* currently IPv6 is not supported, must be programmed with 0 */
1661         IXGBE_WRITE_REG_BE32(hw, IXGBE_FDIRSIPv6(0),
1662                              input->formatted.src_ip[0]);
1663         IXGBE_WRITE_REG_BE32(hw, IXGBE_FDIRSIPv6(1),
1664                              input->formatted.src_ip[1]);
1665         IXGBE_WRITE_REG_BE32(hw, IXGBE_FDIRSIPv6(2),
1666                              input->formatted.src_ip[2]);
1667
1668         /* record the source address (big-endian) */
1669         IXGBE_WRITE_REG_BE32(hw, IXGBE_FDIRIPSA, input->formatted.src_ip[0]);
1670
1671         /* record the first 32 bits of the destination address (big-endian) */
1672         IXGBE_WRITE_REG_BE32(hw, IXGBE_FDIRIPDA, input->formatted.dst_ip[0]);
1673
1674         /* record source and destination port (little-endian)*/
1675         fdirport = IXGBE_NTOHS(input->formatted.dst_port);
1676         fdirport <<= IXGBE_FDIRPORT_DESTINATION_SHIFT;
1677         fdirport |= IXGBE_NTOHS(input->formatted.src_port);
1678         IXGBE_WRITE_REG(hw, IXGBE_FDIRPORT, fdirport);
1679
1680         /* record vlan (little-endian) and flex_bytes(big-endian) */
1681         fdirvlan = IXGBE_STORE_AS_BE16(input->formatted.flex_bytes);
1682         fdirvlan <<= IXGBE_FDIRVLAN_FLEX_SHIFT;
1683         fdirvlan |= IXGBE_NTOHS(input->formatted.vlan_id);
1684         IXGBE_WRITE_REG(hw, IXGBE_FDIRVLAN, fdirvlan);
1685
1686         /* configure FDIRHASH register */
1687         fdirhash = input->formatted.bkt_hash;
1688         fdirhash |= soft_id << IXGBE_FDIRHASH_SIG_SW_INDEX_SHIFT;
1689         IXGBE_WRITE_REG(hw, IXGBE_FDIRHASH, fdirhash);
1690
1691         /*
1692          * flush all previous writes to make certain registers are
1693          * programmed prior to issuing the command
1694          */
1695         IXGBE_WRITE_FLUSH(hw);
1696
1697         /* configure FDIRCMD register */
1698         fdircmd = IXGBE_FDIRCMD_CMD_ADD_FLOW | IXGBE_FDIRCMD_FILTER_UPDATE |
1699                   IXGBE_FDIRCMD_LAST | IXGBE_FDIRCMD_QUEUE_EN;
1700         if (queue == IXGBE_FDIR_DROP_QUEUE)
1701                 fdircmd |= IXGBE_FDIRCMD_DROP;
1702         fdircmd |= input->formatted.flow_type << IXGBE_FDIRCMD_FLOW_TYPE_SHIFT;
1703         fdircmd |= (u32)queue << IXGBE_FDIRCMD_RX_QUEUE_SHIFT;
1704         fdircmd |= (u32)input->formatted.vm_pool << IXGBE_FDIRCMD_VT_POOL_SHIFT;
1705
1706         IXGBE_WRITE_REG(hw, IXGBE_FDIRCMD, fdircmd);
1707
1708         return IXGBE_SUCCESS;
1709 }
1710
1711 s32 ixgbe_fdir_erase_perfect_filter_82599(struct ixgbe_hw *hw,
1712                                           union ixgbe_atr_input *input,
1713                                           u16 soft_id)
1714 {
1715         u32 fdirhash;
1716         u32 fdircmd = 0;
1717         u32 retry_count;
1718         s32 err = IXGBE_SUCCESS;
1719
1720         /* configure FDIRHASH register */
1721         fdirhash = input->formatted.bkt_hash;
1722         fdirhash |= soft_id << IXGBE_FDIRHASH_SIG_SW_INDEX_SHIFT;
1723         IXGBE_WRITE_REG(hw, IXGBE_FDIRHASH, fdirhash);
1724
1725         /* flush hash to HW */
1726         IXGBE_WRITE_FLUSH(hw);
1727
1728         /* Query if filter is present */
1729         IXGBE_WRITE_REG(hw, IXGBE_FDIRCMD, IXGBE_FDIRCMD_CMD_QUERY_REM_FILT);
1730
1731         for (retry_count = 10; retry_count; retry_count--) {
1732                 /* allow 10us for query to process */
1733                 usec_delay(10);
1734                 /* verify query completed successfully */
1735                 fdircmd = IXGBE_READ_REG(hw, IXGBE_FDIRCMD);
1736                 if (!(fdircmd & IXGBE_FDIRCMD_CMD_MASK))
1737                         break;
1738         }
1739
1740         if (!retry_count)
1741                 err = IXGBE_ERR_FDIR_REINIT_FAILED;
1742
1743         /* if filter exists in hardware then remove it */
1744         if (fdircmd & IXGBE_FDIRCMD_FILTER_VALID) {
1745                 IXGBE_WRITE_REG(hw, IXGBE_FDIRHASH, fdirhash);
1746                 IXGBE_WRITE_FLUSH(hw);
1747                 IXGBE_WRITE_REG(hw, IXGBE_FDIRCMD,
1748                                 IXGBE_FDIRCMD_CMD_REMOVE_FLOW);
1749         }
1750
1751         return err;
1752 }
1753
1754 /**
1755  *  ixgbe_fdir_add_perfect_filter_82599 - Adds a perfect filter
1756  *  @hw: pointer to hardware structure
1757  *  @input: input bitstream
1758  *  @input_mask: mask for the input bitstream
1759  *  @soft_id: software index for the filters
1760  *  @queue: queue index to direct traffic to
1761  *
1762  *  Note that the caller to this function must lock before calling, since the
1763  *  hardware writes must be protected from one another.
1764  **/
1765 s32 ixgbe_fdir_add_perfect_filter_82599(struct ixgbe_hw *hw,
1766                                         union ixgbe_atr_input *input,
1767                                         union ixgbe_atr_input *input_mask,
1768                                         u16 soft_id, u8 queue)
1769 {
1770         s32 err = IXGBE_ERR_CONFIG;
1771
1772         DEBUGFUNC("ixgbe_fdir_add_perfect_filter_82599");
1773
1774         /*
1775          * Check flow_type formatting, and bail out before we touch the hardware
1776          * if there's a configuration issue
1777          */
1778         switch (input->formatted.flow_type) {
1779         case IXGBE_ATR_FLOW_TYPE_IPV4:
1780                 input_mask->formatted.flow_type = IXGBE_ATR_L4TYPE_IPV6_MASK;
1781                 if (input->formatted.dst_port || input->formatted.src_port) {
1782                         DEBUGOUT(" Error on src/dst port\n");
1783                         return IXGBE_ERR_CONFIG;
1784                 }
1785                 break;
1786         case IXGBE_ATR_FLOW_TYPE_SCTPV4:
1787                 if (input->formatted.dst_port || input->formatted.src_port) {
1788                         DEBUGOUT(" Error on src/dst port\n");
1789                         return IXGBE_ERR_CONFIG;
1790                 }
1791         case IXGBE_ATR_FLOW_TYPE_TCPV4:
1792         case IXGBE_ATR_FLOW_TYPE_UDPV4:
1793                 input_mask->formatted.flow_type = IXGBE_ATR_L4TYPE_IPV6_MASK |
1794                                                   IXGBE_ATR_L4TYPE_MASK;
1795                 break;
1796         default:
1797                 DEBUGOUT(" Error on flow type input\n");
1798                 return err;
1799         }
1800
1801         /* program input mask into the HW */
1802         err = ixgbe_fdir_set_input_mask_82599(hw, input_mask);
1803         if (err)
1804                 return err;
1805
1806         /* apply mask and compute/store hash */
1807         ixgbe_atr_compute_perfect_hash_82599(input, input_mask);
1808
1809         /* program filters to filter memory */
1810         return ixgbe_fdir_write_perfect_filter_82599(hw, input,
1811                                                      soft_id, queue);
1812 }
1813
1814 /**
1815  *  ixgbe_read_analog_reg8_82599 - Reads 8 bit Omer analog register
1816  *  @hw: pointer to hardware structure
1817  *  @reg: analog register to read
1818  *  @val: read value
1819  *
1820  *  Performs read operation to Omer analog register specified.
1821  **/
1822 s32 ixgbe_read_analog_reg8_82599(struct ixgbe_hw *hw, u32 reg, u8 *val)
1823 {
1824         u32  core_ctl;
1825
1826         DEBUGFUNC("ixgbe_read_analog_reg8_82599");
1827
1828         IXGBE_WRITE_REG(hw, IXGBE_CORECTL, IXGBE_CORECTL_WRITE_CMD |
1829                         (reg << 8));
1830         IXGBE_WRITE_FLUSH(hw);
1831         usec_delay(10);
1832         core_ctl = IXGBE_READ_REG(hw, IXGBE_CORECTL);
1833         *val = (u8)core_ctl;
1834
1835         return IXGBE_SUCCESS;
1836 }
1837
1838 /**
1839  *  ixgbe_write_analog_reg8_82599 - Writes 8 bit Omer analog register
1840  *  @hw: pointer to hardware structure
1841  *  @reg: atlas register to write
1842  *  @val: value to write
1843  *
1844  *  Performs write operation to Omer analog register specified.
1845  **/
1846 s32 ixgbe_write_analog_reg8_82599(struct ixgbe_hw *hw, u32 reg, u8 val)
1847 {
1848         u32  core_ctl;
1849
1850         DEBUGFUNC("ixgbe_write_analog_reg8_82599");
1851
1852         core_ctl = (reg << 8) | val;
1853         IXGBE_WRITE_REG(hw, IXGBE_CORECTL, core_ctl);
1854         IXGBE_WRITE_FLUSH(hw);
1855         usec_delay(10);
1856
1857         return IXGBE_SUCCESS;
1858 }
1859
1860 /**
1861  *  ixgbe_start_hw_82599 - Prepare hardware for Tx/Rx
1862  *  @hw: pointer to hardware structure
1863  *
1864  *  Starts the hardware using the generic start_hw function
1865  *  and the generation start_hw function.
1866  *  Then performs revision-specific operations, if any.
1867  **/
1868 s32 ixgbe_start_hw_82599(struct ixgbe_hw *hw)
1869 {
1870         s32 ret_val = IXGBE_SUCCESS;
1871
1872         DEBUGFUNC("ixgbe_start_hw_82599");
1873
1874         ret_val = ixgbe_start_hw_generic(hw);
1875         if (ret_val != IXGBE_SUCCESS)
1876                 goto out;
1877
1878         ret_val = ixgbe_start_hw_gen2(hw);
1879         if (ret_val != IXGBE_SUCCESS)
1880                 goto out;
1881
1882         /* We need to run link autotry after the driver loads */
1883         hw->mac.autotry_restart = TRUE;
1884
1885         if (ret_val == IXGBE_SUCCESS)
1886                 ret_val = ixgbe_verify_fw_version_82599(hw);
1887 out:
1888         return ret_val;
1889 }
1890
1891 /**
1892  *  ixgbe_identify_phy_82599 - Get physical layer module
1893  *  @hw: pointer to hardware structure
1894  *
1895  *  Determines the physical layer module found on the current adapter.
1896  *  If PHY already detected, maintains current PHY type in hw struct,
1897  *  otherwise executes the PHY detection routine.
1898  **/
1899 s32 ixgbe_identify_phy_82599(struct ixgbe_hw *hw)
1900 {
1901         s32 status = IXGBE_ERR_PHY_ADDR_INVALID;
1902
1903         DEBUGFUNC("ixgbe_identify_phy_82599");
1904
1905         /* Detect PHY if not unknown - returns success if already detected. */
1906         status = ixgbe_identify_phy_generic(hw);
1907         if (status != IXGBE_SUCCESS) {
1908                 /* 82599 10GBASE-T requires an external PHY */
1909                 if (hw->mac.ops.get_media_type(hw) == ixgbe_media_type_copper)
1910                         goto out;
1911                 else
1912                         status = ixgbe_identify_module_generic(hw);
1913         }
1914
1915         /* Set PHY type none if no PHY detected */
1916         if (hw->phy.type == ixgbe_phy_unknown) {
1917                 hw->phy.type = ixgbe_phy_none;
1918                 status = IXGBE_SUCCESS;
1919         }
1920
1921         /* Return error if SFP module has been detected but is not supported */
1922         if (hw->phy.type == ixgbe_phy_sfp_unsupported)
1923                 status = IXGBE_ERR_SFP_NOT_SUPPORTED;
1924
1925 out:
1926         return status;
1927 }
1928
1929 /**
1930  *  ixgbe_get_supported_physical_layer_82599 - Returns physical layer type
1931  *  @hw: pointer to hardware structure
1932  *
1933  *  Determines physical layer capabilities of the current configuration.
1934  **/
1935 u32 ixgbe_get_supported_physical_layer_82599(struct ixgbe_hw *hw)
1936 {
1937         u32 physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN;
1938         u32 autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
1939         u32 autoc2 = IXGBE_READ_REG(hw, IXGBE_AUTOC2);
1940         u32 pma_pmd_10g_serial = autoc2 & IXGBE_AUTOC2_10G_SERIAL_PMA_PMD_MASK;
1941         u32 pma_pmd_10g_parallel = autoc & IXGBE_AUTOC_10G_PMA_PMD_MASK;
1942         u32 pma_pmd_1g = autoc & IXGBE_AUTOC_1G_PMA_PMD_MASK;
1943         u16 ext_ability = 0;
1944         u8 comp_codes_10g = 0;
1945         u8 comp_codes_1g = 0;
1946
1947         DEBUGFUNC("ixgbe_get_support_physical_layer_82599");
1948
1949         hw->phy.ops.identify(hw);
1950
1951         switch (hw->phy.type) {
1952         case ixgbe_phy_tn:
1953         case ixgbe_phy_cu_unknown:
1954                 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_EXT_ABILITY,
1955                 IXGBE_MDIO_PMA_PMD_DEV_TYPE, &ext_ability);
1956                 if (ext_ability & IXGBE_MDIO_PHY_10GBASET_ABILITY)
1957                         physical_layer |= IXGBE_PHYSICAL_LAYER_10GBASE_T;
1958                 if (ext_ability & IXGBE_MDIO_PHY_1000BASET_ABILITY)
1959                         physical_layer |= IXGBE_PHYSICAL_LAYER_1000BASE_T;
1960                 if (ext_ability & IXGBE_MDIO_PHY_100BASETX_ABILITY)
1961                         physical_layer |= IXGBE_PHYSICAL_LAYER_100BASE_TX;
1962                 goto out;
1963         default:
1964                 break;
1965         }
1966
1967         switch (autoc & IXGBE_AUTOC_LMS_MASK) {
1968         case IXGBE_AUTOC_LMS_1G_AN:
1969         case IXGBE_AUTOC_LMS_1G_LINK_NO_AN:
1970                 if (pma_pmd_1g == IXGBE_AUTOC_1G_KX_BX) {
1971                         physical_layer = IXGBE_PHYSICAL_LAYER_1000BASE_KX |
1972                             IXGBE_PHYSICAL_LAYER_1000BASE_BX;
1973                         goto out;
1974                 } else
1975                         /* SFI mode so read SFP module */
1976                         goto sfp_check;
1977                 break;
1978         case IXGBE_AUTOC_LMS_10G_LINK_NO_AN:
1979                 if (pma_pmd_10g_parallel == IXGBE_AUTOC_10G_CX4)
1980                         physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_CX4;
1981                 else if (pma_pmd_10g_parallel == IXGBE_AUTOC_10G_KX4)
1982                         physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_KX4;
1983                 else if (pma_pmd_10g_parallel == IXGBE_AUTOC_10G_XAUI)
1984                         physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_XAUI;
1985                 goto out;
1986                 break;
1987         case IXGBE_AUTOC_LMS_10G_SERIAL:
1988                 if (pma_pmd_10g_serial == IXGBE_AUTOC2_10G_KR) {
1989                         physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_KR;
1990                         goto out;
1991                 } else if (pma_pmd_10g_serial == IXGBE_AUTOC2_10G_SFI)
1992                         goto sfp_check;
1993                 break;
1994         case IXGBE_AUTOC_LMS_KX4_KX_KR:
1995         case IXGBE_AUTOC_LMS_KX4_KX_KR_1G_AN:
1996                 if (autoc & IXGBE_AUTOC_KX_SUPP)
1997                         physical_layer |= IXGBE_PHYSICAL_LAYER_1000BASE_KX;
1998                 if (autoc & IXGBE_AUTOC_KX4_SUPP)
1999                         physical_layer |= IXGBE_PHYSICAL_LAYER_10GBASE_KX4;
2000                 if (autoc & IXGBE_AUTOC_KR_SUPP)
2001                         physical_layer |= IXGBE_PHYSICAL_LAYER_10GBASE_KR;
2002                 goto out;
2003                 break;
2004         default:
2005                 goto out;
2006                 break;
2007         }
2008
2009 sfp_check:
2010         /* SFP check must be done last since DA modules are sometimes used to
2011          * test KR mode -  we need to id KR mode correctly before SFP module.
2012          * Call identify_sfp because the pluggable module may have changed */
2013         hw->phy.ops.identify_sfp(hw);
2014         if (hw->phy.sfp_type == ixgbe_sfp_type_not_present)
2015                 goto out;
2016
2017         switch (hw->phy.type) {
2018         case ixgbe_phy_sfp_passive_tyco:
2019         case ixgbe_phy_sfp_passive_unknown:
2020                 physical_layer = IXGBE_PHYSICAL_LAYER_SFP_PLUS_CU;
2021                 break;
2022         case ixgbe_phy_sfp_ftl_active:
2023         case ixgbe_phy_sfp_active_unknown:
2024                 physical_layer = IXGBE_PHYSICAL_LAYER_SFP_ACTIVE_DA;
2025                 break;
2026         case ixgbe_phy_sfp_avago:
2027         case ixgbe_phy_sfp_ftl:
2028         case ixgbe_phy_sfp_intel:
2029         case ixgbe_phy_sfp_unknown:
2030                 hw->phy.ops.read_i2c_eeprom(hw,
2031                       IXGBE_SFF_1GBE_COMP_CODES, &comp_codes_1g);
2032                 hw->phy.ops.read_i2c_eeprom(hw,
2033                       IXGBE_SFF_10GBE_COMP_CODES, &comp_codes_10g);
2034                 if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)
2035                         physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_SR;
2036                 else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)
2037                         physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_LR;
2038                 else if (comp_codes_1g & IXGBE_SFF_1GBASET_CAPABLE)
2039                         physical_layer = IXGBE_PHYSICAL_LAYER_1000BASE_T;
2040                 break;
2041         default:
2042                 break;
2043         }
2044
2045 out:
2046         return physical_layer;
2047 }
2048
2049 /**
2050  *  ixgbe_enable_rx_dma_82599 - Enable the Rx DMA unit on 82599
2051  *  @hw: pointer to hardware structure
2052  *  @regval: register value to write to RXCTRL
2053  *
2054  *  Enables the Rx DMA unit for 82599
2055  **/
2056 s32 ixgbe_enable_rx_dma_82599(struct ixgbe_hw *hw, u32 regval)
2057 {
2058
2059         DEBUGFUNC("ixgbe_enable_rx_dma_82599");
2060
2061         /*
2062          * Workaround for 82599 silicon errata when enabling the Rx datapath.
2063          * If traffic is incoming before we enable the Rx unit, it could hang
2064          * the Rx DMA unit.  Therefore, make sure the security engine is
2065          * completely disabled prior to enabling the Rx unit.
2066          */
2067
2068         hw->mac.ops.disable_sec_rx_path(hw);
2069
2070         IXGBE_WRITE_REG(hw, IXGBE_RXCTRL, regval);
2071
2072         hw->mac.ops.enable_sec_rx_path(hw);
2073
2074         return IXGBE_SUCCESS;
2075 }
2076
2077 /**
2078  *  ixgbe_verify_fw_version_82599 - verify fw version for 82599
2079  *  @hw: pointer to hardware structure
2080  *
2081  *  Verifies that installed the firmware version is 0.6 or higher
2082  *  for SFI devices. All 82599 SFI devices should have version 0.6 or higher.
2083  *
2084  *  Returns IXGBE_ERR_EEPROM_VERSION if the FW is not present or
2085  *  if the FW version is not supported.
2086  **/
2087 static s32 ixgbe_verify_fw_version_82599(struct ixgbe_hw *hw)
2088 {
2089         s32 status = IXGBE_ERR_EEPROM_VERSION;
2090         u16 fw_offset, fw_ptp_cfg_offset;
2091         u16 fw_version = 0;
2092
2093         DEBUGFUNC("ixgbe_verify_fw_version_82599");
2094
2095         /* firmware check is only necessary for SFI devices */
2096         if (hw->phy.media_type != ixgbe_media_type_fiber) {
2097                 status = IXGBE_SUCCESS;
2098                 goto fw_version_out;
2099         }
2100
2101         /* get the offset to the Firmware Module block */
2102         hw->eeprom.ops.read(hw, IXGBE_FW_PTR, &fw_offset);
2103
2104         if ((fw_offset == 0) || (fw_offset == 0xFFFF))
2105                 goto fw_version_out;
2106
2107         /* get the offset to the Pass Through Patch Configuration block */
2108         hw->eeprom.ops.read(hw, (fw_offset +
2109                                  IXGBE_FW_PASSTHROUGH_PATCH_CONFIG_PTR),
2110                                  &fw_ptp_cfg_offset);
2111
2112         if ((fw_ptp_cfg_offset == 0) || (fw_ptp_cfg_offset == 0xFFFF))
2113                 goto fw_version_out;
2114
2115         /* get the firmware version */
2116         hw->eeprom.ops.read(hw, (fw_ptp_cfg_offset +
2117                             IXGBE_FW_PATCH_VERSION_4), &fw_version);
2118
2119         if (fw_version > 0x5)
2120                 status = IXGBE_SUCCESS;
2121
2122 fw_version_out:
2123         return status;
2124 }
2125
2126 /**
2127  *  ixgbe_verify_lesm_fw_enabled_82599 - Checks LESM FW module state.
2128  *  @hw: pointer to hardware structure
2129  *
2130  *  Returns TRUE if the LESM FW module is present and enabled. Otherwise
2131  *  returns FALSE. Smart Speed must be disabled if LESM FW module is enabled.
2132  **/
2133 bool ixgbe_verify_lesm_fw_enabled_82599(struct ixgbe_hw *hw)
2134 {
2135         bool lesm_enabled = FALSE;
2136         u16 fw_offset, fw_lesm_param_offset, fw_lesm_state;
2137         s32 status;
2138
2139         DEBUGFUNC("ixgbe_verify_lesm_fw_enabled_82599");
2140
2141         /* get the offset to the Firmware Module block */
2142         status = hw->eeprom.ops.read(hw, IXGBE_FW_PTR, &fw_offset);
2143
2144         if ((status != IXGBE_SUCCESS) ||
2145             (fw_offset == 0) || (fw_offset == 0xFFFF))
2146                 goto out;
2147
2148         /* get the offset to the LESM Parameters block */
2149         status = hw->eeprom.ops.read(hw, (fw_offset +
2150                                      IXGBE_FW_LESM_PARAMETERS_PTR),
2151                                      &fw_lesm_param_offset);
2152
2153         if ((status != IXGBE_SUCCESS) ||
2154             (fw_lesm_param_offset == 0) || (fw_lesm_param_offset == 0xFFFF))
2155                 goto out;
2156
2157         /* get the lesm state word */
2158         status = hw->eeprom.ops.read(hw, (fw_lesm_param_offset +
2159                                      IXGBE_FW_LESM_STATE_1),
2160                                      &fw_lesm_state);
2161
2162         if ((status == IXGBE_SUCCESS) &&
2163             (fw_lesm_state & IXGBE_FW_LESM_STATE_ENABLED))
2164                 lesm_enabled = TRUE;
2165
2166 out:
2167         return lesm_enabled;
2168 }
2169
2170 /**
2171  *  ixgbe_read_eeprom_buffer_82599 - Read EEPROM word(s) using
2172  *  fastest available method
2173  *
2174  *  @hw: pointer to hardware structure
2175  *  @offset: offset of  word in EEPROM to read
2176  *  @words: number of words
2177  *  @data: word(s) read from the EEPROM
2178  *
2179  *  Retrieves 16 bit word(s) read from EEPROM
2180  **/
2181 static s32 ixgbe_read_eeprom_buffer_82599(struct ixgbe_hw *hw, u16 offset,
2182                                           u16 words, u16 *data)
2183 {
2184         struct ixgbe_eeprom_info *eeprom = &hw->eeprom;
2185         s32 ret_val = IXGBE_ERR_CONFIG;
2186
2187         DEBUGFUNC("ixgbe_read_eeprom_buffer_82599");
2188
2189         /*
2190          * If EEPROM is detected and can be addressed using 14 bits,
2191          * use EERD otherwise use bit bang
2192          */
2193         if ((eeprom->type == ixgbe_eeprom_spi) &&
2194             (offset + (words - 1) <= IXGBE_EERD_MAX_ADDR))
2195                 ret_val = ixgbe_read_eerd_buffer_generic(hw, offset, words,
2196                                                          data);
2197         else
2198                 ret_val = ixgbe_read_eeprom_buffer_bit_bang_generic(hw, offset,
2199                                                                     words,
2200                                                                     data);
2201
2202         return ret_val;
2203 }
2204
2205 /**
2206  *  ixgbe_read_eeprom_82599 - Read EEPROM word using
2207  *  fastest available method
2208  *
2209  *  @hw: pointer to hardware structure
2210  *  @offset: offset of  word in the EEPROM to read
2211  *  @data: word read from the EEPROM
2212  *
2213  *  Reads a 16 bit word from the EEPROM
2214  **/
2215 static s32 ixgbe_read_eeprom_82599(struct ixgbe_hw *hw,
2216                                    u16 offset, u16 *data)
2217 {
2218         struct ixgbe_eeprom_info *eeprom = &hw->eeprom;
2219         s32 ret_val = IXGBE_ERR_CONFIG;
2220
2221         DEBUGFUNC("ixgbe_read_eeprom_82599");
2222
2223         /*
2224          * If EEPROM is detected and can be addressed using 14 bits,
2225          * use EERD otherwise use bit bang
2226          */
2227         if ((eeprom->type == ixgbe_eeprom_spi) &&
2228             (offset <= IXGBE_EERD_MAX_ADDR))
2229                 ret_val = ixgbe_read_eerd_generic(hw, offset, data);
2230         else
2231                 ret_val = ixgbe_read_eeprom_bit_bang_generic(hw, offset, data);
2232
2233         return ret_val;
2234 }
2235