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