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