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