]> CyberLeo.Net >> Repos - FreeBSD/releng/8.2.git/blob - sys/dev/ixgbe/ixgbe_common.c
Copy stable/8 to releng/8.2 in preparation for FreeBSD-8.2 release.
[FreeBSD/releng/8.2.git] / sys / dev / ixgbe / ixgbe_common.c
1 /******************************************************************************
2
3   Copyright (c) 2001-2010, Intel Corporation 
4   All rights reserved.
5   
6   Redistribution and use in source and binary forms, with or without 
7   modification, are permitted provided that the following conditions are met:
8   
9    1. Redistributions of source code must retain the above copyright notice, 
10       this list of conditions and the following disclaimer.
11   
12    2. Redistributions in binary form must reproduce the above copyright 
13       notice, this list of conditions and the following disclaimer in the 
14       documentation and/or other materials provided with the distribution.
15   
16    3. Neither the name of the Intel Corporation nor the names of its 
17       contributors may be used to endorse or promote products derived from 
18       this software without specific prior written permission.
19   
20   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
22   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
23   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
24   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
25   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
26   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
27   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
28   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
29   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   POSSIBILITY OF SUCH DAMAGE.
31
32 ******************************************************************************/
33 /*$FreeBSD$*/
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_fc_autoneg_fiber(struct ixgbe_hw *hw);
55 static s32 ixgbe_fc_autoneg_backplane(struct ixgbe_hw *hw);
56 static s32 ixgbe_fc_autoneg_copper(struct ixgbe_hw *hw);
57 static s32 ixgbe_device_supports_autoneg_fc(struct ixgbe_hw *hw);
58 static s32 ixgbe_negotiate_fc(struct ixgbe_hw *hw, u32 adv_reg, u32 lp_reg,
59                               u32 adv_sym, u32 adv_asm, u32 lp_sym, u32 lp_asm);
60
61 s32 ixgbe_find_vlvf_slot(struct ixgbe_hw *hw, u32 vlan);
62
63 /**
64  *  ixgbe_init_ops_generic - Inits function ptrs
65  *  @hw: pointer to the hardware structure
66  *
67  *  Initialize the function pointers.
68  **/
69 s32 ixgbe_init_ops_generic(struct ixgbe_hw *hw)
70 {
71         struct ixgbe_eeprom_info *eeprom = &hw->eeprom;
72         struct ixgbe_mac_info *mac = &hw->mac;
73         u32 eec = IXGBE_READ_REG(hw, IXGBE_EEC);
74
75         DEBUGFUNC("ixgbe_init_ops_generic");
76
77         /* EEPROM */
78         eeprom->ops.init_params = &ixgbe_init_eeprom_params_generic;
79         /* If EEPROM is valid (bit 8 = 1), use EERD otherwise use bit bang */
80         if (eec & (1 << 8))
81                 eeprom->ops.read = &ixgbe_read_eerd_generic;
82         else
83                 eeprom->ops.read = &ixgbe_read_eeprom_bit_bang_generic;
84         eeprom->ops.write = &ixgbe_write_eeprom_generic;
85         eeprom->ops.validate_checksum =
86                                       &ixgbe_validate_eeprom_checksum_generic;
87         eeprom->ops.update_checksum = &ixgbe_update_eeprom_checksum_generic;
88         eeprom->ops.calc_checksum = &ixgbe_calc_eeprom_checksum_generic;
89
90         /* MAC */
91         mac->ops.init_hw = &ixgbe_init_hw_generic;
92         mac->ops.reset_hw = NULL;
93         mac->ops.start_hw = &ixgbe_start_hw_generic;
94         mac->ops.clear_hw_cntrs = &ixgbe_clear_hw_cntrs_generic;
95         mac->ops.get_media_type = NULL;
96         mac->ops.get_supported_physical_layer = NULL;
97         mac->ops.enable_rx_dma = &ixgbe_enable_rx_dma_generic;
98         mac->ops.get_mac_addr = &ixgbe_get_mac_addr_generic;
99         mac->ops.stop_adapter = &ixgbe_stop_adapter_generic;
100         mac->ops.get_bus_info = &ixgbe_get_bus_info_generic;
101         mac->ops.set_lan_id = &ixgbe_set_lan_id_multi_port_pcie;
102         mac->ops.acquire_swfw_sync = &ixgbe_acquire_swfw_sync;
103         mac->ops.release_swfw_sync = &ixgbe_release_swfw_sync;
104
105         /* LEDs */
106         mac->ops.led_on = &ixgbe_led_on_generic;
107         mac->ops.led_off = &ixgbe_led_off_generic;
108         mac->ops.blink_led_start = &ixgbe_blink_led_start_generic;
109         mac->ops.blink_led_stop = &ixgbe_blink_led_stop_generic;
110
111         /* RAR, Multicast, VLAN */
112         mac->ops.set_rar = &ixgbe_set_rar_generic;
113         mac->ops.clear_rar = &ixgbe_clear_rar_generic;
114         mac->ops.insert_mac_addr = NULL;
115         mac->ops.set_vmdq = NULL;
116         mac->ops.clear_vmdq = NULL;
117         mac->ops.init_rx_addrs = &ixgbe_init_rx_addrs_generic;
118         mac->ops.update_uc_addr_list = &ixgbe_update_uc_addr_list_generic;
119         mac->ops.update_mc_addr_list = &ixgbe_update_mc_addr_list_generic;
120         mac->ops.enable_mc = &ixgbe_enable_mc_generic;
121         mac->ops.disable_mc = &ixgbe_disable_mc_generic;
122         mac->ops.clear_vfta = NULL;
123         mac->ops.set_vfta = NULL;
124         mac->ops.init_uta_tables = NULL;
125
126         /* Flow Control */
127         mac->ops.fc_enable = &ixgbe_fc_enable_generic;
128
129         /* Link */
130         mac->ops.get_link_capabilities = NULL;
131         mac->ops.setup_link = NULL;
132         mac->ops.check_link = NULL;
133
134         return IXGBE_SUCCESS;
135 }
136
137 /**
138  *  ixgbe_start_hw_generic - Prepare hardware for Tx/Rx
139  *  @hw: pointer to hardware structure
140  *
141  *  Starts the hardware by filling the bus info structure and media type, clears
142  *  all on chip counters, initializes receive address registers, multicast
143  *  table, VLAN filter table, calls routine to set up link and flow control
144  *  settings, and leaves transmit and receive units disabled and uninitialized
145  **/
146 s32 ixgbe_start_hw_generic(struct ixgbe_hw *hw)
147 {
148         u32 ctrl_ext;
149
150         DEBUGFUNC("ixgbe_start_hw_generic");
151
152         /* Set the media type */
153         hw->phy.media_type = hw->mac.ops.get_media_type(hw);
154
155         /* PHY ops initialization must be done in reset_hw() */
156
157         /* Clear the VLAN filter table */
158         hw->mac.ops.clear_vfta(hw);
159
160         /* Clear statistics registers */
161         hw->mac.ops.clear_hw_cntrs(hw);
162
163         /* Set No Snoop Disable */
164         ctrl_ext = IXGBE_READ_REG(hw, IXGBE_CTRL_EXT);
165         ctrl_ext |= IXGBE_CTRL_EXT_NS_DIS;
166         IXGBE_WRITE_REG(hw, IXGBE_CTRL_EXT, ctrl_ext);
167         IXGBE_WRITE_FLUSH(hw);
168
169         /* Setup flow control */
170         ixgbe_setup_fc(hw, 0);
171
172         /* Clear adapter stopped flag */
173         hw->adapter_stopped = FALSE;
174
175         return IXGBE_SUCCESS;
176 }
177
178 /**
179  *  ixgbe_start_hw_gen2 - Init sequence for common device family
180  *  @hw: pointer to hw structure
181  *
182  * Performs the init sequence common to the second generation
183  * of 10 GbE devices.
184  * Devices in the second generation:
185  *     82599
186  **/
187 s32 ixgbe_start_hw_gen2(struct ixgbe_hw *hw)
188 {
189         u32 i;
190         u32 regval;
191
192         /* Clear the rate limiters */
193         for (i = 0; i < hw->mac.max_tx_queues; i++) {
194                 IXGBE_WRITE_REG(hw, IXGBE_RTTDQSEL, i);
195                 IXGBE_WRITE_REG(hw, IXGBE_RTTBCNRC, 0);
196         }
197         IXGBE_WRITE_FLUSH(hw);
198
199         /* Disable relaxed ordering */
200         for (i = 0; i < hw->mac.max_tx_queues; i++) {
201                 regval = IXGBE_READ_REG(hw, IXGBE_DCA_TXCTRL_82599(i));
202                 regval &= ~IXGBE_DCA_TXCTRL_TX_WB_RO_EN;
203                 IXGBE_WRITE_REG(hw, IXGBE_DCA_TXCTRL_82599(i), regval);
204         }
205
206         for (i = 0; i < hw->mac.max_rx_queues; i++) {
207                 regval = IXGBE_READ_REG(hw, IXGBE_DCA_RXCTRL(i));
208                 regval &= ~(IXGBE_DCA_RXCTRL_DESC_WRO_EN |
209                                         IXGBE_DCA_RXCTRL_DESC_HSRO_EN);
210                 IXGBE_WRITE_REG(hw, IXGBE_DCA_RXCTRL(i), regval);
211         }
212
213         return IXGBE_SUCCESS;
214 }
215
216 /**
217  *  ixgbe_init_hw_generic - Generic hardware initialization
218  *  @hw: pointer to hardware structure
219  *
220  *  Initialize the hardware by resetting the hardware, filling the bus info
221  *  structure and media type, clears all on chip counters, initializes receive
222  *  address registers, multicast table, VLAN filter table, calls routine to set
223  *  up link and flow control settings, and leaves transmit and receive units
224  *  disabled and uninitialized
225  **/
226 s32 ixgbe_init_hw_generic(struct ixgbe_hw *hw)
227 {
228         s32 status;
229
230         DEBUGFUNC("ixgbe_init_hw_generic");
231
232         /* Reset the hardware */
233         status = hw->mac.ops.reset_hw(hw);
234
235         if (status == IXGBE_SUCCESS) {
236                 /* Start the HW */
237                 status = hw->mac.ops.start_hw(hw);
238         }
239
240         return status;
241 }
242
243 /**
244  *  ixgbe_clear_hw_cntrs_generic - Generic clear hardware counters
245  *  @hw: pointer to hardware structure
246  *
247  *  Clears all hardware statistics counters by reading them from the hardware
248  *  Statistics counters are clear on read.
249  **/
250 s32 ixgbe_clear_hw_cntrs_generic(struct ixgbe_hw *hw)
251 {
252         u16 i = 0;
253
254         DEBUGFUNC("ixgbe_clear_hw_cntrs_generic");
255
256         IXGBE_READ_REG(hw, IXGBE_CRCERRS);
257         IXGBE_READ_REG(hw, IXGBE_ILLERRC);
258         IXGBE_READ_REG(hw, IXGBE_ERRBC);
259         IXGBE_READ_REG(hw, IXGBE_MSPDC);
260         for (i = 0; i < 8; i++)
261                 IXGBE_READ_REG(hw, IXGBE_MPC(i));
262
263         IXGBE_READ_REG(hw, IXGBE_MLFC);
264         IXGBE_READ_REG(hw, IXGBE_MRFC);
265         IXGBE_READ_REG(hw, IXGBE_RLEC);
266         IXGBE_READ_REG(hw, IXGBE_LXONTXC);
267         IXGBE_READ_REG(hw, IXGBE_LXOFFTXC);
268         if (hw->mac.type >= ixgbe_mac_82599EB) {
269                 IXGBE_READ_REG(hw, IXGBE_LXONRXCNT);
270                 IXGBE_READ_REG(hw, IXGBE_LXOFFRXCNT);
271         } else {
272                 IXGBE_READ_REG(hw, IXGBE_LXONRXC);
273                 IXGBE_READ_REG(hw, IXGBE_LXOFFRXC);
274         }
275
276         for (i = 0; i < 8; i++) {
277                 IXGBE_READ_REG(hw, IXGBE_PXONTXC(i));
278                 IXGBE_READ_REG(hw, IXGBE_PXOFFTXC(i));
279                 if (hw->mac.type >= ixgbe_mac_82599EB) {
280                         IXGBE_READ_REG(hw, IXGBE_PXONRXCNT(i));
281                         IXGBE_READ_REG(hw, IXGBE_PXOFFRXCNT(i));
282                 } else {
283                         IXGBE_READ_REG(hw, IXGBE_PXONRXC(i));
284                         IXGBE_READ_REG(hw, IXGBE_PXOFFRXC(i));
285                 }
286         }
287         if (hw->mac.type >= ixgbe_mac_82599EB)
288                 for (i = 0; i < 8; i++)
289                         IXGBE_READ_REG(hw, IXGBE_PXON2OFFCNT(i));
290         IXGBE_READ_REG(hw, IXGBE_PRC64);
291         IXGBE_READ_REG(hw, IXGBE_PRC127);
292         IXGBE_READ_REG(hw, IXGBE_PRC255);
293         IXGBE_READ_REG(hw, IXGBE_PRC511);
294         IXGBE_READ_REG(hw, IXGBE_PRC1023);
295         IXGBE_READ_REG(hw, IXGBE_PRC1522);
296         IXGBE_READ_REG(hw, IXGBE_GPRC);
297         IXGBE_READ_REG(hw, IXGBE_BPRC);
298         IXGBE_READ_REG(hw, IXGBE_MPRC);
299         IXGBE_READ_REG(hw, IXGBE_GPTC);
300         IXGBE_READ_REG(hw, IXGBE_GORCL);
301         IXGBE_READ_REG(hw, IXGBE_GORCH);
302         IXGBE_READ_REG(hw, IXGBE_GOTCL);
303         IXGBE_READ_REG(hw, IXGBE_GOTCH);
304         for (i = 0; i < 8; i++)
305                 IXGBE_READ_REG(hw, IXGBE_RNBC(i));
306         IXGBE_READ_REG(hw, IXGBE_RUC);
307         IXGBE_READ_REG(hw, IXGBE_RFC);
308         IXGBE_READ_REG(hw, IXGBE_ROC);
309         IXGBE_READ_REG(hw, IXGBE_RJC);
310         IXGBE_READ_REG(hw, IXGBE_MNGPRC);
311         IXGBE_READ_REG(hw, IXGBE_MNGPDC);
312         IXGBE_READ_REG(hw, IXGBE_MNGPTC);
313         IXGBE_READ_REG(hw, IXGBE_TORL);
314         IXGBE_READ_REG(hw, IXGBE_TORH);
315         IXGBE_READ_REG(hw, IXGBE_TPR);
316         IXGBE_READ_REG(hw, IXGBE_TPT);
317         IXGBE_READ_REG(hw, IXGBE_PTC64);
318         IXGBE_READ_REG(hw, IXGBE_PTC127);
319         IXGBE_READ_REG(hw, IXGBE_PTC255);
320         IXGBE_READ_REG(hw, IXGBE_PTC511);
321         IXGBE_READ_REG(hw, IXGBE_PTC1023);
322         IXGBE_READ_REG(hw, IXGBE_PTC1522);
323         IXGBE_READ_REG(hw, IXGBE_MPTC);
324         IXGBE_READ_REG(hw, IXGBE_BPTC);
325         for (i = 0; i < 16; i++) {
326                 IXGBE_READ_REG(hw, IXGBE_QPRC(i));
327                 IXGBE_READ_REG(hw, IXGBE_QPTC(i));
328                 if (hw->mac.type >= ixgbe_mac_82599EB) {
329                         IXGBE_READ_REG(hw, IXGBE_QBRC_L(i));
330                         IXGBE_READ_REG(hw, IXGBE_QBRC_H(i));
331                         IXGBE_READ_REG(hw, IXGBE_QBTC_L(i));
332                         IXGBE_READ_REG(hw, IXGBE_QBTC_H(i));
333                         IXGBE_READ_REG(hw, IXGBE_QPRDC(i));
334                 } else {
335                         IXGBE_READ_REG(hw, IXGBE_QBRC(i));
336                         IXGBE_READ_REG(hw, IXGBE_QBTC(i));
337                 }
338         }
339
340         return IXGBE_SUCCESS;
341 }
342
343 /**
344  *  ixgbe_read_pba_string_generic - Reads part number string from EEPROM
345  *  @hw: pointer to hardware structure
346  *  @pba_num: stores the part number string from the EEPROM
347  *  @pba_num_size: part number string buffer length
348  *
349  *  Reads the part number string from the EEPROM.
350  **/
351 s32 ixgbe_read_pba_string_generic(struct ixgbe_hw *hw, u8 *pba_num,
352                                   u32 pba_num_size)
353 {
354         s32 ret_val;
355         u16 data;
356         u16 pba_ptr;
357         u16 offset;
358         u16 length;
359
360         DEBUGFUNC("ixgbe_read_pba_string_generic");
361
362         if (pba_num == NULL) {
363                 DEBUGOUT("PBA string buffer was null\n");
364                 return IXGBE_ERR_INVALID_ARGUMENT;
365         }
366
367         ret_val = hw->eeprom.ops.read(hw, IXGBE_PBANUM0_PTR, &data);
368         if (ret_val) {
369                 DEBUGOUT("NVM Read Error\n");
370                 return ret_val;
371         }
372
373         ret_val = hw->eeprom.ops.read(hw, IXGBE_PBANUM1_PTR, &pba_ptr);
374         if (ret_val) {
375                 DEBUGOUT("NVM Read Error\n");
376                 return ret_val;
377         }
378
379         /*
380          * if data is not ptr guard the PBA must be in legacy format which
381          * means pba_ptr is actually our second data word for the PBA number
382          * and we can decode it into an ascii string
383          */
384         if (data != IXGBE_PBANUM_PTR_GUARD) {
385                 DEBUGOUT("NVM PBA number is not stored as string\n");
386
387                 /* we will need 11 characters to store the PBA */
388                 if (pba_num_size < 11) {
389                         DEBUGOUT("PBA string buffer too small\n");
390                         return IXGBE_ERR_NO_SPACE;
391                 }
392
393                 /* extract hex string from data and pba_ptr */
394                 pba_num[0] = (data >> 12) & 0xF;
395                 pba_num[1] = (data >> 8) & 0xF;
396                 pba_num[2] = (data >> 4) & 0xF;
397                 pba_num[3] = data & 0xF;
398                 pba_num[4] = (pba_ptr >> 12) & 0xF;
399                 pba_num[5] = (pba_ptr >> 8) & 0xF;
400                 pba_num[6] = '-';
401                 pba_num[7] = 0;
402                 pba_num[8] = (pba_ptr >> 4) & 0xF;
403                 pba_num[9] = pba_ptr & 0xF;
404
405                 /* put a null character on the end of our string */
406                 pba_num[10] = '\0';
407
408                 /* switch all the data but the '-' to hex char */
409                 for (offset = 0; offset < 10; offset++) {
410                         if (pba_num[offset] < 0xA)
411                                 pba_num[offset] += '0';
412                         else if (pba_num[offset] < 0x10)
413                                 pba_num[offset] += 'A' - 0xA;
414                 }
415
416                 return IXGBE_SUCCESS;
417         }
418
419         ret_val = hw->eeprom.ops.read(hw, pba_ptr, &length);
420         if (ret_val) {
421                 DEBUGOUT("NVM Read Error\n");
422                 return ret_val;
423         }
424
425         if (length == 0xFFFF || length == 0) {
426                 DEBUGOUT("NVM PBA number section invalid length\n");
427                 return IXGBE_ERR_PBA_SECTION;
428         }
429
430         /* check if pba_num buffer is big enough */
431         if (pba_num_size  < (((u32)length * 2) - 1)) {
432                 DEBUGOUT("PBA string buffer too small\n");
433                 return IXGBE_ERR_NO_SPACE;
434         }
435
436         /* trim pba length from start of string */
437         pba_ptr++;
438         length--;
439
440         for (offset = 0; offset < length; offset++) {
441                 ret_val = hw->eeprom.ops.read(hw, pba_ptr + offset, &data);
442                 if (ret_val) {
443                         DEBUGOUT("NVM Read Error\n");
444                         return ret_val;
445                 }
446                 pba_num[offset * 2] = (u8)(data >> 8);
447                 pba_num[(offset * 2) + 1] = (u8)(data & 0xFF);
448         }
449         pba_num[offset * 2] = '\0';
450
451         return IXGBE_SUCCESS;
452 }
453
454 /**
455  *  ixgbe_read_pba_length_generic - Reads part number length from EEPROM
456  *  @hw: pointer to hardware structure
457  *  @pba_num_size: part number string buffer length
458  *
459  *  Reads the part number length from the EEPROM.
460  *  Returns expected buffer size in pba_num_size
461  **/
462 s32 ixgbe_read_pba_length_generic(struct ixgbe_hw *hw, u32 *pba_num_size)
463 {
464         s32 ret_val;
465         u16 data;
466         u16 pba_ptr;
467         u16 length;
468
469         DEBUGFUNC("ixgbe_read_pba_length_generic");
470
471         if (pba_num_size == NULL) {
472                 DEBUGOUT("PBA buffer size was null\n");
473                 return IXGBE_ERR_INVALID_ARGUMENT;
474         }
475
476         ret_val = hw->eeprom.ops.read(hw, IXGBE_PBANUM0_PTR, &data);
477         if (ret_val) {
478                 DEBUGOUT("NVM Read Error\n");
479                 return ret_val;
480         }
481
482         ret_val = hw->eeprom.ops.read(hw, IXGBE_PBANUM1_PTR, &pba_ptr);
483         if (ret_val) {
484                 DEBUGOUT("NVM Read Error\n");
485                 return ret_val;
486         }
487
488          /* if data is not ptr guard the PBA must be in legacy format */
489         if (data != IXGBE_PBANUM_PTR_GUARD) {
490                 *pba_num_size = 11;
491                 return IXGBE_SUCCESS;
492         }
493
494         ret_val = hw->eeprom.ops.read(hw, pba_ptr, &length);
495         if (ret_val) {
496                 DEBUGOUT("NVM Read Error\n");
497                 return ret_val;
498         }
499
500         if (length == 0xFFFF || length == 0) {
501                 DEBUGOUT("NVM PBA number section invalid length\n");
502                 return IXGBE_ERR_PBA_SECTION;
503         }
504
505         /*
506          * Convert from length in u16 values to u8 chars, add 1 for NULL,
507          * and subtract 2 because length field is included in length.
508          */
509         *pba_num_size = ((u32)length * 2) - 1;
510
511         return IXGBE_SUCCESS;
512 }
513
514 /**
515  *  ixgbe_read_pba_num_generic - Reads part number from EEPROM
516  *  @hw: pointer to hardware structure
517  *  @pba_num: stores the part number from the EEPROM
518  *
519  *  Reads the part number from the EEPROM.
520  **/
521 s32 ixgbe_read_pba_num_generic(struct ixgbe_hw *hw, u32 *pba_num)
522 {
523         s32 ret_val;
524         u16 data;
525
526         DEBUGFUNC("ixgbe_read_pba_num_generic");
527
528         ret_val = hw->eeprom.ops.read(hw, IXGBE_PBANUM0_PTR, &data);
529         if (ret_val) {
530                 DEBUGOUT("NVM Read Error\n");
531                 return ret_val;
532         } else if (data == IXGBE_PBANUM_PTR_GUARD) {
533                 DEBUGOUT("NVM Not supported\n");
534                 return IXGBE_NOT_IMPLEMENTED;
535         }
536         *pba_num = (u32)(data << 16);
537
538         ret_val = hw->eeprom.ops.read(hw, IXGBE_PBANUM1_PTR, &data);
539         if (ret_val) {
540                 DEBUGOUT("NVM Read Error\n");
541                 return ret_val;
542         }
543         *pba_num |= data;
544
545         return IXGBE_SUCCESS;
546 }
547
548 /**
549  *  ixgbe_get_mac_addr_generic - Generic get MAC address
550  *  @hw: pointer to hardware structure
551  *  @mac_addr: Adapter MAC address
552  *
553  *  Reads the adapter's MAC address from first Receive Address Register (RAR0)
554  *  A reset of the adapter must be performed prior to calling this function
555  *  in order for the MAC address to have been loaded from the EEPROM into RAR0
556  **/
557 s32 ixgbe_get_mac_addr_generic(struct ixgbe_hw *hw, u8 *mac_addr)
558 {
559         u32 rar_high;
560         u32 rar_low;
561         u16 i;
562
563         DEBUGFUNC("ixgbe_get_mac_addr_generic");
564
565         rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(0));
566         rar_low = IXGBE_READ_REG(hw, IXGBE_RAL(0));
567
568         for (i = 0; i < 4; i++)
569                 mac_addr[i] = (u8)(rar_low >> (i*8));
570
571         for (i = 0; i < 2; i++)
572                 mac_addr[i+4] = (u8)(rar_high >> (i*8));
573
574         return IXGBE_SUCCESS;
575 }
576
577 /**
578  *  ixgbe_get_bus_info_generic - Generic set PCI bus info
579  *  @hw: pointer to hardware structure
580  *
581  *  Sets the PCI bus info (speed, width, type) within the ixgbe_hw structure
582  **/
583 s32 ixgbe_get_bus_info_generic(struct ixgbe_hw *hw)
584 {
585         struct ixgbe_mac_info *mac = &hw->mac;
586         u16 link_status;
587
588         DEBUGFUNC("ixgbe_get_bus_info_generic");
589
590         hw->bus.type = ixgbe_bus_type_pci_express;
591
592         /* Get the negotiated link width and speed from PCI config space */
593         link_status = IXGBE_READ_PCIE_WORD(hw, IXGBE_PCI_LINK_STATUS);
594
595         switch (link_status & IXGBE_PCI_LINK_WIDTH) {
596         case IXGBE_PCI_LINK_WIDTH_1:
597                 hw->bus.width = ixgbe_bus_width_pcie_x1;
598                 break;
599         case IXGBE_PCI_LINK_WIDTH_2:
600                 hw->bus.width = ixgbe_bus_width_pcie_x2;
601                 break;
602         case IXGBE_PCI_LINK_WIDTH_4:
603                 hw->bus.width = ixgbe_bus_width_pcie_x4;
604                 break;
605         case IXGBE_PCI_LINK_WIDTH_8:
606                 hw->bus.width = ixgbe_bus_width_pcie_x8;
607                 break;
608         default:
609                 hw->bus.width = ixgbe_bus_width_unknown;
610                 break;
611         }
612
613         switch (link_status & IXGBE_PCI_LINK_SPEED) {
614         case IXGBE_PCI_LINK_SPEED_2500:
615                 hw->bus.speed = ixgbe_bus_speed_2500;
616                 break;
617         case IXGBE_PCI_LINK_SPEED_5000:
618                 hw->bus.speed = ixgbe_bus_speed_5000;
619                 break;
620         default:
621                 hw->bus.speed = ixgbe_bus_speed_unknown;
622                 break;
623         }
624
625         mac->ops.set_lan_id(hw);
626
627         return IXGBE_SUCCESS;
628 }
629
630 /**
631  *  ixgbe_set_lan_id_multi_port_pcie - Set LAN id for PCIe multiple port devices
632  *  @hw: pointer to the HW structure
633  *
634  *  Determines the LAN function id by reading memory-mapped registers
635  *  and swaps the port value if requested.
636  **/
637 void ixgbe_set_lan_id_multi_port_pcie(struct ixgbe_hw *hw)
638 {
639         struct ixgbe_bus_info *bus = &hw->bus;
640         u32 reg;
641
642         DEBUGFUNC("ixgbe_set_lan_id_multi_port_pcie");
643
644         reg = IXGBE_READ_REG(hw, IXGBE_STATUS);
645         bus->func = (reg & IXGBE_STATUS_LAN_ID) >> IXGBE_STATUS_LAN_ID_SHIFT;
646         bus->lan_id = bus->func;
647
648         /* check for a port swap */
649         reg = IXGBE_READ_REG(hw, IXGBE_FACTPS);
650         if (reg & IXGBE_FACTPS_LFS)
651                 bus->func ^= 0x1;
652 }
653
654 /**
655  *  ixgbe_stop_adapter_generic - Generic stop Tx/Rx units
656  *  @hw: pointer to hardware structure
657  *
658  *  Sets the adapter_stopped flag within ixgbe_hw struct. Clears interrupts,
659  *  disables transmit and receive units. The adapter_stopped flag is used by
660  *  the shared code and drivers to determine if the adapter is in a stopped
661  *  state and should not touch the hardware.
662  **/
663 s32 ixgbe_stop_adapter_generic(struct ixgbe_hw *hw)
664 {
665         u32 number_of_queues;
666         u32 reg_val;
667         u16 i;
668
669         DEBUGFUNC("ixgbe_stop_adapter_generic");
670
671         /*
672          * Set the adapter_stopped flag so other driver functions stop touching
673          * the hardware
674          */
675         hw->adapter_stopped = TRUE;
676
677         /* Disable the receive unit */
678         reg_val = IXGBE_READ_REG(hw, IXGBE_RXCTRL);
679         reg_val &= ~(IXGBE_RXCTRL_RXEN);
680         IXGBE_WRITE_REG(hw, IXGBE_RXCTRL, reg_val);
681         IXGBE_WRITE_FLUSH(hw);
682         msec_delay(2);
683
684         /* Clear interrupt mask to stop from interrupts being generated */
685         IXGBE_WRITE_REG(hw, IXGBE_EIMC, IXGBE_IRQ_CLEAR_MASK);
686
687         /* Clear any pending interrupts */
688         IXGBE_READ_REG(hw, IXGBE_EICR);
689
690         /* Disable the transmit unit.  Each queue must be disabled. */
691         number_of_queues = hw->mac.max_tx_queues;
692         for (i = 0; i < number_of_queues; i++) {
693                 reg_val = IXGBE_READ_REG(hw, IXGBE_TXDCTL(i));
694                 if (reg_val & IXGBE_TXDCTL_ENABLE) {
695                         reg_val &= ~IXGBE_TXDCTL_ENABLE;
696                         IXGBE_WRITE_REG(hw, IXGBE_TXDCTL(i), reg_val);
697                 }
698         }
699
700         /*
701          * Prevent the PCI-E bus from from hanging by disabling PCI-E master
702          * access and verify no pending requests
703          */
704         ixgbe_disable_pcie_master(hw);
705
706         return IXGBE_SUCCESS;
707 }
708
709 /**
710  *  ixgbe_led_on_generic - Turns on the software controllable LEDs.
711  *  @hw: pointer to hardware structure
712  *  @index: led number to turn on
713  **/
714 s32 ixgbe_led_on_generic(struct ixgbe_hw *hw, u32 index)
715 {
716         u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
717
718         DEBUGFUNC("ixgbe_led_on_generic");
719
720         /* To turn on the LED, set mode to ON. */
721         led_reg &= ~IXGBE_LED_MODE_MASK(index);
722         led_reg |= IXGBE_LED_ON << IXGBE_LED_MODE_SHIFT(index);
723         IXGBE_WRITE_REG(hw, IXGBE_LEDCTL, led_reg);
724         IXGBE_WRITE_FLUSH(hw);
725
726         return IXGBE_SUCCESS;
727 }
728
729 /**
730  *  ixgbe_led_off_generic - Turns off the software controllable LEDs.
731  *  @hw: pointer to hardware structure
732  *  @index: led number to turn off
733  **/
734 s32 ixgbe_led_off_generic(struct ixgbe_hw *hw, u32 index)
735 {
736         u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
737
738         DEBUGFUNC("ixgbe_led_off_generic");
739
740         /* To turn off the LED, set mode to OFF. */
741         led_reg &= ~IXGBE_LED_MODE_MASK(index);
742         led_reg |= IXGBE_LED_OFF << IXGBE_LED_MODE_SHIFT(index);
743         IXGBE_WRITE_REG(hw, IXGBE_LEDCTL, led_reg);
744         IXGBE_WRITE_FLUSH(hw);
745
746         return IXGBE_SUCCESS;
747 }
748
749 /**
750  *  ixgbe_init_eeprom_params_generic - Initialize EEPROM params
751  *  @hw: pointer to hardware structure
752  *
753  *  Initializes the EEPROM parameters ixgbe_eeprom_info within the
754  *  ixgbe_hw struct in order to set up EEPROM access.
755  **/
756 s32 ixgbe_init_eeprom_params_generic(struct ixgbe_hw *hw)
757 {
758         struct ixgbe_eeprom_info *eeprom = &hw->eeprom;
759         u32 eec;
760         u16 eeprom_size;
761
762         DEBUGFUNC("ixgbe_init_eeprom_params_generic");
763
764         if (eeprom->type == ixgbe_eeprom_uninitialized) {
765                 eeprom->type = ixgbe_eeprom_none;
766                 /* Set default semaphore delay to 10ms which is a well
767                  * tested value */
768                 eeprom->semaphore_delay = 10;
769
770                 /*
771                  * Check for EEPROM present first.
772                  * If not present leave as none
773                  */
774                 eec = IXGBE_READ_REG(hw, IXGBE_EEC);
775                 if (eec & IXGBE_EEC_PRES) {
776                         eeprom->type = ixgbe_eeprom_spi;
777
778                         /*
779                          * SPI EEPROM is assumed here.  This code would need to
780                          * change if a future EEPROM is not SPI.
781                          */
782                         eeprom_size = (u16)((eec & IXGBE_EEC_SIZE) >>
783                                             IXGBE_EEC_SIZE_SHIFT);
784                         eeprom->word_size = 1 << (eeprom_size +
785                                              IXGBE_EEPROM_WORD_SIZE_BASE_SHIFT);
786                 }
787
788                 if (eec & IXGBE_EEC_ADDR_SIZE)
789                         eeprom->address_bits = 16;
790                 else
791                         eeprom->address_bits = 8;
792                 DEBUGOUT3("Eeprom params: type = %d, size = %d, address bits: "
793                           "%d\n", eeprom->type, eeprom->word_size,
794                           eeprom->address_bits);
795         }
796
797         return IXGBE_SUCCESS;
798 }
799
800 /**
801  *  ixgbe_write_eeprom_generic - Writes 16 bit value to EEPROM
802  *  @hw: pointer to hardware structure
803  *  @offset: offset within the EEPROM to be written to
804  *  @data: 16 bit word to be written to the EEPROM
805  *
806  *  If ixgbe_eeprom_update_checksum is not called after this function, the
807  *  EEPROM will most likely contain an invalid checksum.
808  **/
809 s32 ixgbe_write_eeprom_generic(struct ixgbe_hw *hw, u16 offset, u16 data)
810 {
811         s32 status;
812         u8 write_opcode = IXGBE_EEPROM_WRITE_OPCODE_SPI;
813
814         DEBUGFUNC("ixgbe_write_eeprom_generic");
815
816         hw->eeprom.ops.init_params(hw);
817
818         if (offset >= hw->eeprom.word_size) {
819                 status = IXGBE_ERR_EEPROM;
820                 goto out;
821         }
822
823         /* Prepare the EEPROM for writing  */
824         status = ixgbe_acquire_eeprom(hw);
825
826         if (status == IXGBE_SUCCESS) {
827                 if (ixgbe_ready_eeprom(hw) != IXGBE_SUCCESS) {
828                         ixgbe_release_eeprom(hw);
829                         status = IXGBE_ERR_EEPROM;
830                 }
831         }
832
833         if (status == IXGBE_SUCCESS) {
834                 ixgbe_standby_eeprom(hw);
835
836                 /*  Send the WRITE ENABLE command (8 bit opcode )  */
837                 ixgbe_shift_out_eeprom_bits(hw, IXGBE_EEPROM_WREN_OPCODE_SPI,
838                                             IXGBE_EEPROM_OPCODE_BITS);
839
840                 ixgbe_standby_eeprom(hw);
841
842                 /*
843                  * Some SPI eeproms use the 8th address bit embedded in the
844                  * opcode
845                  */
846                 if ((hw->eeprom.address_bits == 8) && (offset >= 128))
847                         write_opcode |= IXGBE_EEPROM_A8_OPCODE_SPI;
848
849                 /* Send the Write command (8-bit opcode + addr) */
850                 ixgbe_shift_out_eeprom_bits(hw, write_opcode,
851                                             IXGBE_EEPROM_OPCODE_BITS);
852                 ixgbe_shift_out_eeprom_bits(hw, (u16)(offset*2),
853                                             hw->eeprom.address_bits);
854
855                 /* Send the data */
856                 data = (data >> 8) | (data << 8);
857                 ixgbe_shift_out_eeprom_bits(hw, data, 16);
858                 ixgbe_standby_eeprom(hw);
859
860                 /* Done with writing - release the EEPROM */
861                 ixgbe_release_eeprom(hw);
862         }
863
864 out:
865         return status;
866 }
867
868 /**
869  *  ixgbe_read_eeprom_bit_bang_generic - Read EEPROM word using bit-bang
870  *  @hw: pointer to hardware structure
871  *  @offset: offset within the EEPROM to be read
872  *  @data: read 16 bit value from EEPROM
873  *
874  *  Reads 16 bit value from EEPROM through bit-bang method
875  **/
876 s32 ixgbe_read_eeprom_bit_bang_generic(struct ixgbe_hw *hw, u16 offset,
877                                        u16 *data)
878 {
879         s32 status;
880         u16 word_in;
881         u8 read_opcode = IXGBE_EEPROM_READ_OPCODE_SPI;
882
883         DEBUGFUNC("ixgbe_read_eeprom_bit_bang_generic");
884
885         hw->eeprom.ops.init_params(hw);
886
887         if (offset >= hw->eeprom.word_size) {
888                 status = IXGBE_ERR_EEPROM;
889                 goto out;
890         }
891
892         /* Prepare the EEPROM for reading  */
893         status = ixgbe_acquire_eeprom(hw);
894
895         if (status == IXGBE_SUCCESS) {
896                 if (ixgbe_ready_eeprom(hw) != IXGBE_SUCCESS) {
897                         ixgbe_release_eeprom(hw);
898                         status = IXGBE_ERR_EEPROM;
899                 }
900         }
901
902         if (status == IXGBE_SUCCESS) {
903                 ixgbe_standby_eeprom(hw);
904
905                 /*
906                  * Some SPI eeproms use the 8th address bit embedded in the
907                  * opcode
908                  */
909                 if ((hw->eeprom.address_bits == 8) && (offset >= 128))
910                         read_opcode |= IXGBE_EEPROM_A8_OPCODE_SPI;
911
912                 /* Send the READ command (opcode + addr) */
913                 ixgbe_shift_out_eeprom_bits(hw, read_opcode,
914                                             IXGBE_EEPROM_OPCODE_BITS);
915                 ixgbe_shift_out_eeprom_bits(hw, (u16)(offset*2),
916                                             hw->eeprom.address_bits);
917
918                 /* Read the data. */
919                 word_in = ixgbe_shift_in_eeprom_bits(hw, 16);
920                 *data = (word_in >> 8) | (word_in << 8);
921
922                 /* End this read operation */
923                 ixgbe_release_eeprom(hw);
924         }
925
926 out:
927         return status;
928 }
929
930 /**
931  *  ixgbe_read_eerd_generic - Read EEPROM word using EERD
932  *  @hw: pointer to hardware structure
933  *  @offset: offset of  word in the EEPROM to read
934  *  @data: word read from the EEPROM
935  *
936  *  Reads a 16 bit word from the EEPROM using the EERD register.
937  **/
938 s32 ixgbe_read_eerd_generic(struct ixgbe_hw *hw, u16 offset, u16 *data)
939 {
940         u32 eerd;
941         s32 status;
942
943         DEBUGFUNC("ixgbe_read_eerd_generic");
944
945         hw->eeprom.ops.init_params(hw);
946
947         if (offset >= hw->eeprom.word_size) {
948                 status = IXGBE_ERR_EEPROM;
949                 goto out;
950         }
951
952         eerd = (offset << IXGBE_EEPROM_RW_ADDR_SHIFT) +
953                IXGBE_EEPROM_RW_REG_START;
954
955         IXGBE_WRITE_REG(hw, IXGBE_EERD, eerd);
956         status = ixgbe_poll_eerd_eewr_done(hw, IXGBE_NVM_POLL_READ);
957
958         if (status == IXGBE_SUCCESS)
959                 *data = (IXGBE_READ_REG(hw, IXGBE_EERD) >>
960                          IXGBE_EEPROM_RW_REG_DATA);
961         else
962                 DEBUGOUT("Eeprom read timed out\n");
963
964 out:
965         return status;
966 }
967
968 /**
969  *  ixgbe_write_eewr_generic - Write EEPROM word using EEWR
970  *  @hw: pointer to hardware structure
971  *  @offset: offset of  word in the EEPROM to write
972  *  @data: word write to the EEPROM
973  *
974  *  Write a 16 bit word to the EEPROM using the EEWR register.
975  **/
976 s32 ixgbe_write_eewr_generic(struct ixgbe_hw *hw, u16 offset, u16 data)
977 {
978         u32 eewr;
979         s32 status;
980
981         DEBUGFUNC("ixgbe_write_eewr_generic");
982
983         hw->eeprom.ops.init_params(hw);
984
985         if (offset >= hw->eeprom.word_size) {
986                 status = IXGBE_ERR_EEPROM;
987                 goto out;
988         }
989
990         eewr = (offset << IXGBE_EEPROM_RW_ADDR_SHIFT) |
991                (data << IXGBE_EEPROM_RW_REG_DATA) | IXGBE_EEPROM_RW_REG_START;
992
993         status = ixgbe_poll_eerd_eewr_done(hw, IXGBE_NVM_POLL_WRITE);
994         if (status != IXGBE_SUCCESS) {
995                 DEBUGOUT("Eeprom write EEWR timed out\n");
996                 goto out;
997         }
998
999         IXGBE_WRITE_REG(hw, IXGBE_EEWR, eewr);
1000
1001         status = ixgbe_poll_eerd_eewr_done(hw, IXGBE_NVM_POLL_WRITE);
1002         if (status != IXGBE_SUCCESS) {
1003                 DEBUGOUT("Eeprom write EEWR timed out\n");
1004                 goto out;
1005         }
1006
1007 out:
1008         return status;
1009 }
1010
1011 /**
1012  *  ixgbe_poll_eerd_eewr_done - Poll EERD read or EEWR write status
1013  *  @hw: pointer to hardware structure
1014  *  @ee_reg: EEPROM flag for polling
1015  *
1016  *  Polls the status bit (bit 1) of the EERD or EEWR to determine when the
1017  *  read or write is done respectively.
1018  **/
1019 s32 ixgbe_poll_eerd_eewr_done(struct ixgbe_hw *hw, u32 ee_reg)
1020 {
1021         u32 i;
1022         u32 reg;
1023         s32 status = IXGBE_ERR_EEPROM;
1024
1025         DEBUGFUNC("ixgbe_poll_eerd_eewr_done");
1026
1027         for (i = 0; i < IXGBE_EERD_EEWR_ATTEMPTS; i++) {
1028                 if (ee_reg == IXGBE_NVM_POLL_READ)
1029                         reg = IXGBE_READ_REG(hw, IXGBE_EERD);
1030                 else
1031                         reg = IXGBE_READ_REG(hw, IXGBE_EEWR);
1032
1033                 if (reg & IXGBE_EEPROM_RW_REG_DONE) {
1034                         status = IXGBE_SUCCESS;
1035                         break;
1036                 }
1037                 usec_delay(5);
1038         }
1039         return status;
1040 }
1041
1042 /**
1043  *  ixgbe_acquire_eeprom - Acquire EEPROM using bit-bang
1044  *  @hw: pointer to hardware structure
1045  *
1046  *  Prepares EEPROM for access using bit-bang method. This function should
1047  *  be called before issuing a command to the EEPROM.
1048  **/
1049 static s32 ixgbe_acquire_eeprom(struct ixgbe_hw *hw)
1050 {
1051         s32 status = IXGBE_SUCCESS;
1052         u32 eec;
1053         u32 i;
1054
1055         DEBUGFUNC("ixgbe_acquire_eeprom");
1056
1057         if (ixgbe_acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM) != IXGBE_SUCCESS)
1058                 status = IXGBE_ERR_SWFW_SYNC;
1059
1060         if (status == IXGBE_SUCCESS) {
1061                 eec = IXGBE_READ_REG(hw, IXGBE_EEC);
1062
1063                 /* Request EEPROM Access */
1064                 eec |= IXGBE_EEC_REQ;
1065                 IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
1066
1067                 for (i = 0; i < IXGBE_EEPROM_GRANT_ATTEMPTS; i++) {
1068                         eec = IXGBE_READ_REG(hw, IXGBE_EEC);
1069                         if (eec & IXGBE_EEC_GNT)
1070                                 break;
1071                         usec_delay(5);
1072                 }
1073
1074                 /* Release if grant not acquired */
1075                 if (!(eec & IXGBE_EEC_GNT)) {
1076                         eec &= ~IXGBE_EEC_REQ;
1077                         IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
1078                         DEBUGOUT("Could not acquire EEPROM grant\n");
1079
1080                         ixgbe_release_swfw_sync(hw, IXGBE_GSSR_EEP_SM);
1081                         status = IXGBE_ERR_EEPROM;
1082                 }
1083
1084                 /* Setup EEPROM for Read/Write */
1085                 if (status == IXGBE_SUCCESS) {
1086                         /* Clear CS and SK */
1087                         eec &= ~(IXGBE_EEC_CS | IXGBE_EEC_SK);
1088                         IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
1089                         IXGBE_WRITE_FLUSH(hw);
1090                         usec_delay(1);
1091                 }
1092         }
1093         return status;
1094 }
1095
1096 /**
1097  *  ixgbe_get_eeprom_semaphore - Get hardware semaphore
1098  *  @hw: pointer to hardware structure
1099  *
1100  *  Sets the hardware semaphores so EEPROM access can occur for bit-bang method
1101  **/
1102 static s32 ixgbe_get_eeprom_semaphore(struct ixgbe_hw *hw)
1103 {
1104         s32 status = IXGBE_ERR_EEPROM;
1105         u32 timeout = 2000;
1106         u32 i;
1107         u32 swsm;
1108
1109         DEBUGFUNC("ixgbe_get_eeprom_semaphore");
1110
1111
1112         /* Get SMBI software semaphore between device drivers first */
1113         for (i = 0; i < timeout; i++) {
1114                 /*
1115                  * If the SMBI bit is 0 when we read it, then the bit will be
1116                  * set and we have the semaphore
1117                  */
1118                 swsm = IXGBE_READ_REG(hw, IXGBE_SWSM);
1119                 if (!(swsm & IXGBE_SWSM_SMBI)) {
1120                         status = IXGBE_SUCCESS;
1121                         break;
1122                 }
1123                 usec_delay(50);
1124         }
1125
1126         /* Now get the semaphore between SW/FW through the SWESMBI bit */
1127         if (status == IXGBE_SUCCESS) {
1128                 for (i = 0; i < timeout; i++) {
1129                         swsm = IXGBE_READ_REG(hw, IXGBE_SWSM);
1130
1131                         /* Set the SW EEPROM semaphore bit to request access */
1132                         swsm |= IXGBE_SWSM_SWESMBI;
1133                         IXGBE_WRITE_REG(hw, IXGBE_SWSM, swsm);
1134
1135                         /*
1136                          * If we set the bit successfully then we got the
1137                          * semaphore.
1138                          */
1139                         swsm = IXGBE_READ_REG(hw, IXGBE_SWSM);
1140                         if (swsm & IXGBE_SWSM_SWESMBI)
1141                                 break;
1142
1143                         usec_delay(50);
1144                 }
1145
1146                 /*
1147                  * Release semaphores and return error if SW EEPROM semaphore
1148                  * was not granted because we don't have access to the EEPROM
1149                  */
1150                 if (i >= timeout) {
1151                         DEBUGOUT("SWESMBI Software EEPROM semaphore "
1152                                  "not granted.\n");
1153                         ixgbe_release_eeprom_semaphore(hw);
1154                         status = IXGBE_ERR_EEPROM;
1155                 }
1156         } else {
1157                 DEBUGOUT("Software semaphore SMBI between device drivers "
1158                          "not granted.\n");
1159         }
1160
1161         return status;
1162 }
1163
1164 /**
1165  *  ixgbe_release_eeprom_semaphore - Release hardware semaphore
1166  *  @hw: pointer to hardware structure
1167  *
1168  *  This function clears hardware semaphore bits.
1169  **/
1170 static void ixgbe_release_eeprom_semaphore(struct ixgbe_hw *hw)
1171 {
1172         u32 swsm;
1173
1174         DEBUGFUNC("ixgbe_release_eeprom_semaphore");
1175
1176         swsm = IXGBE_READ_REG(hw, IXGBE_SWSM);
1177
1178         /* Release both semaphores by writing 0 to the bits SWESMBI and SMBI */
1179         swsm &= ~(IXGBE_SWSM_SWESMBI | IXGBE_SWSM_SMBI);
1180         IXGBE_WRITE_REG(hw, IXGBE_SWSM, swsm);
1181         IXGBE_WRITE_FLUSH(hw);
1182 }
1183
1184 /**
1185  *  ixgbe_ready_eeprom - Polls for EEPROM ready
1186  *  @hw: pointer to hardware structure
1187  **/
1188 static s32 ixgbe_ready_eeprom(struct ixgbe_hw *hw)
1189 {
1190         s32 status = IXGBE_SUCCESS;
1191         u16 i;
1192         u8 spi_stat_reg;
1193
1194         DEBUGFUNC("ixgbe_ready_eeprom");
1195
1196         /*
1197          * Read "Status Register" repeatedly until the LSB is cleared.  The
1198          * EEPROM will signal that the command has been completed by clearing
1199          * bit 0 of the internal status register.  If it's not cleared within
1200          * 5 milliseconds, then error out.
1201          */
1202         for (i = 0; i < IXGBE_EEPROM_MAX_RETRY_SPI; i += 5) {
1203                 ixgbe_shift_out_eeprom_bits(hw, IXGBE_EEPROM_RDSR_OPCODE_SPI,
1204                                             IXGBE_EEPROM_OPCODE_BITS);
1205                 spi_stat_reg = (u8)ixgbe_shift_in_eeprom_bits(hw, 8);
1206                 if (!(spi_stat_reg & IXGBE_EEPROM_STATUS_RDY_SPI))
1207                         break;
1208
1209                 usec_delay(5);
1210                 ixgbe_standby_eeprom(hw);
1211         };
1212
1213         /*
1214          * On some parts, SPI write time could vary from 0-20mSec on 3.3V
1215          * devices (and only 0-5mSec on 5V devices)
1216          */
1217         if (i >= IXGBE_EEPROM_MAX_RETRY_SPI) {
1218                 DEBUGOUT("SPI EEPROM Status error\n");
1219                 status = IXGBE_ERR_EEPROM;
1220         }
1221
1222         return status;
1223 }
1224
1225 /**
1226  *  ixgbe_standby_eeprom - Returns EEPROM to a "standby" state
1227  *  @hw: pointer to hardware structure
1228  **/
1229 static void ixgbe_standby_eeprom(struct ixgbe_hw *hw)
1230 {
1231         u32 eec;
1232
1233         DEBUGFUNC("ixgbe_standby_eeprom");
1234
1235         eec = IXGBE_READ_REG(hw, IXGBE_EEC);
1236
1237         /* Toggle CS to flush commands */
1238         eec |= IXGBE_EEC_CS;
1239         IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
1240         IXGBE_WRITE_FLUSH(hw);
1241         usec_delay(1);
1242         eec &= ~IXGBE_EEC_CS;
1243         IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
1244         IXGBE_WRITE_FLUSH(hw);
1245         usec_delay(1);
1246 }
1247
1248 /**
1249  *  ixgbe_shift_out_eeprom_bits - Shift data bits out to the EEPROM.
1250  *  @hw: pointer to hardware structure
1251  *  @data: data to send to the EEPROM
1252  *  @count: number of bits to shift out
1253  **/
1254 static void ixgbe_shift_out_eeprom_bits(struct ixgbe_hw *hw, u16 data,
1255                                         u16 count)
1256 {
1257         u32 eec;
1258         u32 mask;
1259         u32 i;
1260
1261         DEBUGFUNC("ixgbe_shift_out_eeprom_bits");
1262
1263         eec = IXGBE_READ_REG(hw, IXGBE_EEC);
1264
1265         /*
1266          * Mask is used to shift "count" bits of "data" out to the EEPROM
1267          * one bit at a time.  Determine the starting bit based on count
1268          */
1269         mask = 0x01 << (count - 1);
1270
1271         for (i = 0; i < count; i++) {
1272                 /*
1273                  * A "1" is shifted out to the EEPROM by setting bit "DI" to a
1274                  * "1", and then raising and then lowering the clock (the SK
1275                  * bit controls the clock input to the EEPROM).  A "0" is
1276                  * shifted out to the EEPROM by setting "DI" to "0" and then
1277                  * raising and then lowering the clock.
1278                  */
1279                 if (data & mask)
1280                         eec |= IXGBE_EEC_DI;
1281                 else
1282                         eec &= ~IXGBE_EEC_DI;
1283
1284                 IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
1285                 IXGBE_WRITE_FLUSH(hw);
1286
1287                 usec_delay(1);
1288
1289                 ixgbe_raise_eeprom_clk(hw, &eec);
1290                 ixgbe_lower_eeprom_clk(hw, &eec);
1291
1292                 /*
1293                  * Shift mask to signify next bit of data to shift in to the
1294                  * EEPROM
1295                  */
1296                 mask = mask >> 1;
1297         };
1298
1299         /* We leave the "DI" bit set to "0" when we leave this routine. */
1300         eec &= ~IXGBE_EEC_DI;
1301         IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
1302         IXGBE_WRITE_FLUSH(hw);
1303 }
1304
1305 /**
1306  *  ixgbe_shift_in_eeprom_bits - Shift data bits in from the EEPROM
1307  *  @hw: pointer to hardware structure
1308  **/
1309 static u16 ixgbe_shift_in_eeprom_bits(struct ixgbe_hw *hw, u16 count)
1310 {
1311         u32 eec;
1312         u32 i;
1313         u16 data = 0;
1314
1315         DEBUGFUNC("ixgbe_shift_in_eeprom_bits");
1316
1317         /*
1318          * In order to read a register from the EEPROM, we need to shift
1319          * 'count' bits in from the EEPROM. Bits are "shifted in" by raising
1320          * the clock input to the EEPROM (setting the SK bit), and then reading
1321          * the value of the "DO" bit.  During this "shifting in" process the
1322          * "DI" bit should always be clear.
1323          */
1324         eec = IXGBE_READ_REG(hw, IXGBE_EEC);
1325
1326         eec &= ~(IXGBE_EEC_DO | IXGBE_EEC_DI);
1327
1328         for (i = 0; i < count; i++) {
1329                 data = data << 1;
1330                 ixgbe_raise_eeprom_clk(hw, &eec);
1331
1332                 eec = IXGBE_READ_REG(hw, IXGBE_EEC);
1333
1334                 eec &= ~(IXGBE_EEC_DI);
1335                 if (eec & IXGBE_EEC_DO)
1336                         data |= 1;
1337
1338                 ixgbe_lower_eeprom_clk(hw, &eec);
1339         }
1340
1341         return data;
1342 }
1343
1344 /**
1345  *  ixgbe_raise_eeprom_clk - Raises the EEPROM's clock input.
1346  *  @hw: pointer to hardware structure
1347  *  @eec: EEC register's current value
1348  **/
1349 static void ixgbe_raise_eeprom_clk(struct ixgbe_hw *hw, u32 *eec)
1350 {
1351         DEBUGFUNC("ixgbe_raise_eeprom_clk");
1352
1353         /*
1354          * Raise the clock input to the EEPROM
1355          * (setting the SK bit), then delay
1356          */
1357         *eec = *eec | IXGBE_EEC_SK;
1358         IXGBE_WRITE_REG(hw, IXGBE_EEC, *eec);
1359         IXGBE_WRITE_FLUSH(hw);
1360         usec_delay(1);
1361 }
1362
1363 /**
1364  *  ixgbe_lower_eeprom_clk - Lowers the EEPROM's clock input.
1365  *  @hw: pointer to hardware structure
1366  *  @eecd: EECD's current value
1367  **/
1368 static void ixgbe_lower_eeprom_clk(struct ixgbe_hw *hw, u32 *eec)
1369 {
1370         DEBUGFUNC("ixgbe_lower_eeprom_clk");
1371
1372         /*
1373          * Lower the clock input to the EEPROM (clearing the SK bit), then
1374          * delay
1375          */
1376         *eec = *eec & ~IXGBE_EEC_SK;
1377         IXGBE_WRITE_REG(hw, IXGBE_EEC, *eec);
1378         IXGBE_WRITE_FLUSH(hw);
1379         usec_delay(1);
1380 }
1381
1382 /**
1383  *  ixgbe_release_eeprom - Release EEPROM, release semaphores
1384  *  @hw: pointer to hardware structure
1385  **/
1386 static void ixgbe_release_eeprom(struct ixgbe_hw *hw)
1387 {
1388         u32 eec;
1389
1390         DEBUGFUNC("ixgbe_release_eeprom");
1391
1392         eec = IXGBE_READ_REG(hw, IXGBE_EEC);
1393
1394         eec |= IXGBE_EEC_CS;  /* Pull CS high */
1395         eec &= ~IXGBE_EEC_SK; /* Lower SCK */
1396
1397         IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
1398         IXGBE_WRITE_FLUSH(hw);
1399
1400         usec_delay(1);
1401
1402         /* Stop requesting EEPROM access */
1403         eec &= ~IXGBE_EEC_REQ;
1404         IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
1405
1406         ixgbe_release_swfw_sync(hw, IXGBE_GSSR_EEP_SM);
1407
1408         /* Delay before attempt to obtain semaphore again to allow FW access */
1409         msec_delay(hw->eeprom.semaphore_delay);
1410 }
1411
1412 /**
1413  *  ixgbe_calc_eeprom_checksum_generic - Calculates and returns the checksum
1414  *  @hw: pointer to hardware structure
1415  **/
1416 u16 ixgbe_calc_eeprom_checksum_generic(struct ixgbe_hw *hw)
1417 {
1418         u16 i;
1419         u16 j;
1420         u16 checksum = 0;
1421         u16 length = 0;
1422         u16 pointer = 0;
1423         u16 word = 0;
1424
1425         DEBUGFUNC("ixgbe_calc_eeprom_checksum_generic");
1426
1427         /* Include 0x0-0x3F in the checksum */
1428         for (i = 0; i < IXGBE_EEPROM_CHECKSUM; i++) {
1429                 if (hw->eeprom.ops.read(hw, i, &word) != IXGBE_SUCCESS) {
1430                         DEBUGOUT("EEPROM read failed\n");
1431                         break;
1432                 }
1433                 checksum += word;
1434         }
1435
1436         /* Include all data from pointers except for the fw pointer */
1437         for (i = IXGBE_PCIE_ANALOG_PTR; i < IXGBE_FW_PTR; i++) {
1438                 hw->eeprom.ops.read(hw, i, &pointer);
1439
1440                 /* Make sure the pointer seems valid */
1441                 if (pointer != 0xFFFF && pointer != 0) {
1442                         hw->eeprom.ops.read(hw, pointer, &length);
1443
1444                         if (length != 0xFFFF && length != 0) {
1445                                 for (j = pointer+1; j <= pointer+length; j++) {
1446                                         hw->eeprom.ops.read(hw, j, &word);
1447                                         checksum += word;
1448                                 }
1449                         }
1450                 }
1451         }
1452
1453         checksum = (u16)IXGBE_EEPROM_SUM - checksum;
1454
1455         return checksum;
1456 }
1457
1458 /**
1459  *  ixgbe_validate_eeprom_checksum_generic - Validate EEPROM checksum
1460  *  @hw: pointer to hardware structure
1461  *  @checksum_val: calculated checksum
1462  *
1463  *  Performs checksum calculation and validates the EEPROM checksum.  If the
1464  *  caller does not need checksum_val, the value can be NULL.
1465  **/
1466 s32 ixgbe_validate_eeprom_checksum_generic(struct ixgbe_hw *hw,
1467                                            u16 *checksum_val)
1468 {
1469         s32 status;
1470         u16 checksum;
1471         u16 read_checksum = 0;
1472
1473         DEBUGFUNC("ixgbe_validate_eeprom_checksum_generic");
1474
1475         /*
1476          * Read the first word from the EEPROM. If this times out or fails, do
1477          * not continue or we could be in for a very long wait while every
1478          * EEPROM read fails
1479          */
1480         status = hw->eeprom.ops.read(hw, 0, &checksum);
1481
1482         if (status == IXGBE_SUCCESS) {
1483                 checksum = hw->eeprom.ops.calc_checksum(hw);
1484
1485                 hw->eeprom.ops.read(hw, IXGBE_EEPROM_CHECKSUM, &read_checksum);
1486
1487                 /*
1488                  * Verify read checksum from EEPROM is the same as
1489                  * calculated checksum
1490                  */
1491                 if (read_checksum != checksum)
1492                         status = IXGBE_ERR_EEPROM_CHECKSUM;
1493
1494                 /* If the user cares, return the calculated checksum */
1495                 if (checksum_val)
1496                         *checksum_val = checksum;
1497         } else {
1498                 DEBUGOUT("EEPROM read failed\n");
1499         }
1500
1501         return status;
1502 }
1503
1504 /**
1505  *  ixgbe_update_eeprom_checksum_generic - Updates the EEPROM checksum
1506  *  @hw: pointer to hardware structure
1507  **/
1508 s32 ixgbe_update_eeprom_checksum_generic(struct ixgbe_hw *hw)
1509 {
1510         s32 status;
1511         u16 checksum;
1512
1513         DEBUGFUNC("ixgbe_update_eeprom_checksum_generic");
1514
1515         /*
1516          * Read the first word from the EEPROM. If this times out or fails, do
1517          * not continue or we could be in for a very long wait while every
1518          * EEPROM read fails
1519          */
1520         status = hw->eeprom.ops.read(hw, 0, &checksum);
1521
1522         if (status == IXGBE_SUCCESS) {
1523                 checksum = hw->eeprom.ops.calc_checksum(hw);
1524                 status = hw->eeprom.ops.write(hw, IXGBE_EEPROM_CHECKSUM,
1525                                               checksum);
1526         } else {
1527                 DEBUGOUT("EEPROM read failed\n");
1528         }
1529
1530         return status;
1531 }
1532
1533 /**
1534  *  ixgbe_validate_mac_addr - Validate MAC address
1535  *  @mac_addr: pointer to MAC address.
1536  *
1537  *  Tests a MAC address to ensure it is a valid Individual Address
1538  **/
1539 s32 ixgbe_validate_mac_addr(u8 *mac_addr)
1540 {
1541         s32 status = IXGBE_SUCCESS;
1542
1543         DEBUGFUNC("ixgbe_validate_mac_addr");
1544
1545         /* Make sure it is not a multicast address */
1546         if (IXGBE_IS_MULTICAST(mac_addr)) {
1547                 DEBUGOUT("MAC address is multicast\n");
1548                 status = IXGBE_ERR_INVALID_MAC_ADDR;
1549         /* Not a broadcast address */
1550         } else if (IXGBE_IS_BROADCAST(mac_addr)) {
1551                 DEBUGOUT("MAC address is broadcast\n");
1552                 status = IXGBE_ERR_INVALID_MAC_ADDR;
1553         /* Reject the zero address */
1554         } else if (mac_addr[0] == 0 && mac_addr[1] == 0 && mac_addr[2] == 0 &&
1555                    mac_addr[3] == 0 && mac_addr[4] == 0 && mac_addr[5] == 0) {
1556                 DEBUGOUT("MAC address is all zeros\n");
1557                 status = IXGBE_ERR_INVALID_MAC_ADDR;
1558         }
1559         return status;
1560 }
1561
1562 /**
1563  *  ixgbe_set_rar_generic - Set Rx address register
1564  *  @hw: pointer to hardware structure
1565  *  @index: Receive address register to write
1566  *  @addr: Address to put into receive address register
1567  *  @vmdq: VMDq "set" or "pool" index
1568  *  @enable_addr: set flag that address is active
1569  *
1570  *  Puts an ethernet address into a receive address register.
1571  **/
1572 s32 ixgbe_set_rar_generic(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq,
1573                           u32 enable_addr)
1574 {
1575         u32 rar_low, rar_high;
1576         u32 rar_entries = hw->mac.num_rar_entries;
1577
1578         DEBUGFUNC("ixgbe_set_rar_generic");
1579
1580         /* Make sure we are using a valid rar index range */
1581         if (index >= rar_entries) {
1582                 DEBUGOUT1("RAR index %d is out of range.\n", index);
1583                 return IXGBE_ERR_INVALID_ARGUMENT;
1584         }
1585
1586         /* setup VMDq pool selection before this RAR gets enabled */
1587         hw->mac.ops.set_vmdq(hw, index, vmdq);
1588
1589         /*
1590          * HW expects these in little endian so we reverse the byte
1591          * order from network order (big endian) to little endian
1592          */
1593         rar_low = ((u32)addr[0] |
1594                    ((u32)addr[1] << 8) |
1595                    ((u32)addr[2] << 16) |
1596                    ((u32)addr[3] << 24));
1597         /*
1598          * Some parts put the VMDq setting in the extra RAH bits,
1599          * so save everything except the lower 16 bits that hold part
1600          * of the address and the address valid bit.
1601          */
1602         rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(index));
1603         rar_high &= ~(0x0000FFFF | IXGBE_RAH_AV);
1604         rar_high |= ((u32)addr[4] | ((u32)addr[5] << 8));
1605
1606         if (enable_addr != 0)
1607                 rar_high |= IXGBE_RAH_AV;
1608
1609         IXGBE_WRITE_REG(hw, IXGBE_RAL(index), rar_low);
1610         IXGBE_WRITE_REG(hw, IXGBE_RAH(index), rar_high);
1611
1612         return IXGBE_SUCCESS;
1613 }
1614
1615 /**
1616  *  ixgbe_clear_rar_generic - Remove Rx address register
1617  *  @hw: pointer to hardware structure
1618  *  @index: Receive address register to write
1619  *
1620  *  Clears an ethernet address from a receive address register.
1621  **/
1622 s32 ixgbe_clear_rar_generic(struct ixgbe_hw *hw, u32 index)
1623 {
1624         u32 rar_high;
1625         u32 rar_entries = hw->mac.num_rar_entries;
1626
1627         DEBUGFUNC("ixgbe_clear_rar_generic");
1628
1629         /* Make sure we are using a valid rar index range */
1630         if (index >= rar_entries) {
1631                 DEBUGOUT1("RAR index %d is out of range.\n", index);
1632                 return IXGBE_ERR_INVALID_ARGUMENT;
1633         }
1634
1635         /*
1636          * Some parts put the VMDq setting in the extra RAH bits,
1637          * so save everything except the lower 16 bits that hold part
1638          * of the address and the address valid bit.
1639          */
1640         rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(index));
1641         rar_high &= ~(0x0000FFFF | IXGBE_RAH_AV);
1642
1643         IXGBE_WRITE_REG(hw, IXGBE_RAL(index), 0);
1644         IXGBE_WRITE_REG(hw, IXGBE_RAH(index), rar_high);
1645
1646         /* clear VMDq pool/queue selection for this RAR */
1647         hw->mac.ops.clear_vmdq(hw, index, IXGBE_CLEAR_VMDQ_ALL);
1648
1649         return IXGBE_SUCCESS;
1650 }
1651
1652 /**
1653  *  ixgbe_init_rx_addrs_generic - Initializes receive address filters.
1654  *  @hw: pointer to hardware structure
1655  *
1656  *  Places the MAC address in receive address register 0 and clears the rest
1657  *  of the receive address registers. Clears the multicast table. Assumes
1658  *  the receiver is in reset when the routine is called.
1659  **/
1660 s32 ixgbe_init_rx_addrs_generic(struct ixgbe_hw *hw)
1661 {
1662         u32 i;
1663         u32 rar_entries = hw->mac.num_rar_entries;
1664
1665         DEBUGFUNC("ixgbe_init_rx_addrs_generic");
1666
1667         /*
1668          * If the current mac address is valid, assume it is a software override
1669          * to the permanent address.
1670          * Otherwise, use the permanent address from the eeprom.
1671          */
1672         if (ixgbe_validate_mac_addr(hw->mac.addr) ==
1673             IXGBE_ERR_INVALID_MAC_ADDR) {
1674                 /* Get the MAC address from the RAR0 for later reference */
1675                 hw->mac.ops.get_mac_addr(hw, hw->mac.addr);
1676
1677                 DEBUGOUT3(" Keeping Current RAR0 Addr =%.2X %.2X %.2X ",
1678                           hw->mac.addr[0], hw->mac.addr[1],
1679                           hw->mac.addr[2]);
1680                 DEBUGOUT3("%.2X %.2X %.2X\n", hw->mac.addr[3],
1681                           hw->mac.addr[4], hw->mac.addr[5]);
1682         } else {
1683                 /* Setup the receive address. */
1684                 DEBUGOUT("Overriding MAC Address in RAR[0]\n");
1685                 DEBUGOUT3(" New MAC Addr =%.2X %.2X %.2X ",
1686                           hw->mac.addr[0], hw->mac.addr[1],
1687                           hw->mac.addr[2]);
1688                 DEBUGOUT3("%.2X %.2X %.2X\n", hw->mac.addr[3],
1689                           hw->mac.addr[4], hw->mac.addr[5]);
1690
1691                 hw->mac.ops.set_rar(hw, 0, hw->mac.addr, 0, IXGBE_RAH_AV);
1692         }
1693         hw->addr_ctrl.overflow_promisc = 0;
1694
1695         hw->addr_ctrl.rar_used_count = 1;
1696
1697         /* Zero out the other receive addresses. */
1698         DEBUGOUT1("Clearing RAR[1-%d]\n", rar_entries - 1);
1699         for (i = 1; i < rar_entries; i++) {
1700                 IXGBE_WRITE_REG(hw, IXGBE_RAL(i), 0);
1701                 IXGBE_WRITE_REG(hw, IXGBE_RAH(i), 0);
1702         }
1703
1704         /* Clear the MTA */
1705         hw->addr_ctrl.mta_in_use = 0;
1706         IXGBE_WRITE_REG(hw, IXGBE_MCSTCTRL, hw->mac.mc_filter_type);
1707
1708         DEBUGOUT(" Clearing MTA\n");
1709         for (i = 0; i < hw->mac.mcft_size; i++)
1710                 IXGBE_WRITE_REG(hw, IXGBE_MTA(i), 0);
1711
1712         ixgbe_init_uta_tables(hw);
1713
1714         return IXGBE_SUCCESS;
1715 }
1716
1717 /**
1718  *  ixgbe_add_uc_addr - Adds a secondary unicast address.
1719  *  @hw: pointer to hardware structure
1720  *  @addr: new address
1721  *
1722  *  Adds it to unused receive address register or goes into promiscuous mode.
1723  **/
1724 void ixgbe_add_uc_addr(struct ixgbe_hw *hw, u8 *addr, u32 vmdq)
1725 {
1726         u32 rar_entries = hw->mac.num_rar_entries;
1727         u32 rar;
1728
1729         DEBUGFUNC("ixgbe_add_uc_addr");
1730
1731         DEBUGOUT6(" UC Addr = %.2X %.2X %.2X %.2X %.2X %.2X\n",
1732                   addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
1733
1734         /*
1735          * Place this address in the RAR if there is room,
1736          * else put the controller into promiscuous mode
1737          */
1738         if (hw->addr_ctrl.rar_used_count < rar_entries) {
1739                 rar = hw->addr_ctrl.rar_used_count;
1740                 hw->mac.ops.set_rar(hw, rar, addr, vmdq, IXGBE_RAH_AV);
1741                 DEBUGOUT1("Added a secondary address to RAR[%d]\n", rar);
1742                 hw->addr_ctrl.rar_used_count++;
1743         } else {
1744                 hw->addr_ctrl.overflow_promisc++;
1745         }
1746
1747         DEBUGOUT("ixgbe_add_uc_addr Complete\n");
1748 }
1749
1750 /**
1751  *  ixgbe_update_uc_addr_list_generic - Updates MAC list of secondary addresses
1752  *  @hw: pointer to hardware structure
1753  *  @addr_list: the list of new addresses
1754  *  @addr_count: number of addresses
1755  *  @next: iterator function to walk the address list
1756  *
1757  *  The given list replaces any existing list.  Clears the secondary addrs from
1758  *  receive address registers.  Uses unused receive address registers for the
1759  *  first secondary addresses, and falls back to promiscuous mode as needed.
1760  *
1761  *  Drivers using secondary unicast addresses must set user_set_promisc when
1762  *  manually putting the device into promiscuous mode.
1763  **/
1764 s32 ixgbe_update_uc_addr_list_generic(struct ixgbe_hw *hw, u8 *addr_list,
1765                                       u32 addr_count, ixgbe_mc_addr_itr next)
1766 {
1767         u8 *addr;
1768         u32 i;
1769         u32 old_promisc_setting = hw->addr_ctrl.overflow_promisc;
1770         u32 uc_addr_in_use;
1771         u32 fctrl;
1772         u32 vmdq;
1773
1774         DEBUGFUNC("ixgbe_update_uc_addr_list_generic");
1775
1776         /*
1777          * Clear accounting of old secondary address list,
1778          * don't count RAR[0]
1779          */
1780         uc_addr_in_use = hw->addr_ctrl.rar_used_count - 1;
1781         hw->addr_ctrl.rar_used_count -= uc_addr_in_use;
1782         hw->addr_ctrl.overflow_promisc = 0;
1783
1784         /* Zero out the other receive addresses */
1785         DEBUGOUT1("Clearing RAR[1-%d]\n", uc_addr_in_use+1);
1786         for (i = 0; i < uc_addr_in_use; i++) {
1787                 IXGBE_WRITE_REG(hw, IXGBE_RAL(1+i), 0);
1788                 IXGBE_WRITE_REG(hw, IXGBE_RAH(1+i), 0);
1789         }
1790
1791         /* Add the new addresses */
1792         for (i = 0; i < addr_count; i++) {
1793                 DEBUGOUT(" Adding the secondary addresses:\n");
1794                 addr = next(hw, &addr_list, &vmdq);
1795                 ixgbe_add_uc_addr(hw, addr, vmdq);
1796         }
1797
1798         if (hw->addr_ctrl.overflow_promisc) {
1799                 /* enable promisc if not already in overflow or set by user */
1800                 if (!old_promisc_setting && !hw->addr_ctrl.user_set_promisc) {
1801                         DEBUGOUT(" Entering address overflow promisc mode\n");
1802                         fctrl = IXGBE_READ_REG(hw, IXGBE_FCTRL);
1803                         fctrl |= IXGBE_FCTRL_UPE;
1804                         IXGBE_WRITE_REG(hw, IXGBE_FCTRL, fctrl);
1805                 }
1806         } else {
1807                 /* only disable if set by overflow, not by user */
1808                 if (old_promisc_setting && !hw->addr_ctrl.user_set_promisc) {
1809                         DEBUGOUT(" Leaving address overflow promisc mode\n");
1810                         fctrl = IXGBE_READ_REG(hw, IXGBE_FCTRL);
1811                         fctrl &= ~IXGBE_FCTRL_UPE;
1812                         IXGBE_WRITE_REG(hw, IXGBE_FCTRL, fctrl);
1813                 }
1814         }
1815
1816         DEBUGOUT("ixgbe_update_uc_addr_list_generic Complete\n");
1817         return IXGBE_SUCCESS;
1818 }
1819
1820 /**
1821  *  ixgbe_mta_vector - Determines bit-vector in multicast table to set
1822  *  @hw: pointer to hardware structure
1823  *  @mc_addr: the multicast address
1824  *
1825  *  Extracts the 12 bits, from a multicast address, to determine which
1826  *  bit-vector to set in the multicast table. The hardware uses 12 bits, from
1827  *  incoming rx multicast addresses, to determine the bit-vector to check in
1828  *  the MTA. Which of the 4 combination, of 12-bits, the hardware uses is set
1829  *  by the MO field of the MCSTCTRL. The MO field is set during initialization
1830  *  to mc_filter_type.
1831  **/
1832 static s32 ixgbe_mta_vector(struct ixgbe_hw *hw, u8 *mc_addr)
1833 {
1834         u32 vector = 0;
1835
1836         DEBUGFUNC("ixgbe_mta_vector");
1837
1838         switch (hw->mac.mc_filter_type) {
1839         case 0:   /* use bits [47:36] of the address */
1840                 vector = ((mc_addr[4] >> 4) | (((u16)mc_addr[5]) << 4));
1841                 break;
1842         case 1:   /* use bits [46:35] of the address */
1843                 vector = ((mc_addr[4] >> 3) | (((u16)mc_addr[5]) << 5));
1844                 break;
1845         case 2:   /* use bits [45:34] of the address */
1846                 vector = ((mc_addr[4] >> 2) | (((u16)mc_addr[5]) << 6));
1847                 break;
1848         case 3:   /* use bits [43:32] of the address */
1849                 vector = ((mc_addr[4]) | (((u16)mc_addr[5]) << 8));
1850                 break;
1851         default:  /* Invalid mc_filter_type */
1852                 DEBUGOUT("MC filter type param set incorrectly\n");
1853                 ASSERT(0);
1854                 break;
1855         }
1856
1857         /* vector can only be 12-bits or boundary will be exceeded */
1858         vector &= 0xFFF;
1859         return vector;
1860 }
1861
1862 /**
1863  *  ixgbe_set_mta - Set bit-vector in multicast table
1864  *  @hw: pointer to hardware structure
1865  *  @hash_value: Multicast address hash value
1866  *
1867  *  Sets the bit-vector in the multicast table.
1868  **/
1869 void ixgbe_set_mta(struct ixgbe_hw *hw, u8 *mc_addr)
1870 {
1871         u32 vector;
1872         u32 vector_bit;
1873         u32 vector_reg;
1874
1875         DEBUGFUNC("ixgbe_set_mta");
1876
1877         hw->addr_ctrl.mta_in_use++;
1878
1879         vector = ixgbe_mta_vector(hw, mc_addr);
1880         DEBUGOUT1(" bit-vector = 0x%03X\n", vector);
1881
1882         /*
1883          * The MTA is a register array of 128 32-bit registers. It is treated
1884          * like an array of 4096 bits.  We want to set bit
1885          * BitArray[vector_value]. So we figure out what register the bit is
1886          * in, read it, OR in the new bit, then write back the new value.  The
1887          * register is determined by the upper 7 bits of the vector value and
1888          * the bit within that register are determined by the lower 5 bits of
1889          * the value.
1890          */
1891         vector_reg = (vector >> 5) & 0x7F;
1892         vector_bit = vector & 0x1F;
1893         hw->mac.mta_shadow[vector_reg] |= (1 << vector_bit);
1894 }
1895
1896 /**
1897  *  ixgbe_update_mc_addr_list_generic - Updates MAC list of multicast addresses
1898  *  @hw: pointer to hardware structure
1899  *  @mc_addr_list: the list of new multicast addresses
1900  *  @mc_addr_count: number of addresses
1901  *  @next: iterator function to walk the multicast address list
1902  *
1903  *  The given list replaces any existing list. Clears the MC addrs from receive
1904  *  address registers and the multicast table. Uses unused receive address
1905  *  registers for the first multicast addresses, and hashes the rest into the
1906  *  multicast table.
1907  **/
1908 s32 ixgbe_update_mc_addr_list_generic(struct ixgbe_hw *hw, u8 *mc_addr_list,
1909                                       u32 mc_addr_count, ixgbe_mc_addr_itr next)
1910 {
1911         u32 i;
1912         u32 vmdq;
1913
1914         DEBUGFUNC("ixgbe_update_mc_addr_list_generic");
1915
1916         /*
1917          * Set the new number of MC addresses that we are being requested to
1918          * use.
1919          */
1920         hw->addr_ctrl.num_mc_addrs = mc_addr_count;
1921         hw->addr_ctrl.mta_in_use = 0;
1922
1923         /* Clear mta_shadow */
1924         DEBUGOUT(" Clearing MTA\n");
1925         memset(&hw->mac.mta_shadow, 0, sizeof(hw->mac.mta_shadow));
1926
1927         /* Update mta_shadow */
1928         for (i = 0; i < mc_addr_count; i++) {
1929                 DEBUGOUT(" Adding the multicast addresses:\n");
1930                 ixgbe_set_mta(hw, next(hw, &mc_addr_list, &vmdq));
1931         }
1932
1933         /* Enable mta */
1934         for (i = 0; i < hw->mac.mcft_size; i++)
1935                 IXGBE_WRITE_REG_ARRAY(hw, IXGBE_MTA(0), i,
1936                                       hw->mac.mta_shadow[i]);
1937
1938         if (hw->addr_ctrl.mta_in_use > 0)
1939                 IXGBE_WRITE_REG(hw, IXGBE_MCSTCTRL,
1940                                 IXGBE_MCSTCTRL_MFE | hw->mac.mc_filter_type);
1941
1942         DEBUGOUT("ixgbe_update_mc_addr_list_generic Complete\n");
1943         return IXGBE_SUCCESS;
1944 }
1945
1946 /**
1947  *  ixgbe_enable_mc_generic - Enable multicast address in RAR
1948  *  @hw: pointer to hardware structure
1949  *
1950  *  Enables multicast address in RAR and the use of the multicast hash table.
1951  **/
1952 s32 ixgbe_enable_mc_generic(struct ixgbe_hw *hw)
1953 {
1954         struct ixgbe_addr_filter_info *a = &hw->addr_ctrl;
1955
1956         DEBUGFUNC("ixgbe_enable_mc_generic");
1957
1958         if (a->mta_in_use > 0)
1959                 IXGBE_WRITE_REG(hw, IXGBE_MCSTCTRL, IXGBE_MCSTCTRL_MFE |
1960                                 hw->mac.mc_filter_type);
1961
1962         return IXGBE_SUCCESS;
1963 }
1964
1965 /**
1966  *  ixgbe_disable_mc_generic - Disable multicast address in RAR
1967  *  @hw: pointer to hardware structure
1968  *
1969  *  Disables multicast address in RAR and the use of the multicast hash table.
1970  **/
1971 s32 ixgbe_disable_mc_generic(struct ixgbe_hw *hw)
1972 {
1973         struct ixgbe_addr_filter_info *a = &hw->addr_ctrl;
1974
1975         DEBUGFUNC("ixgbe_disable_mc_generic");
1976
1977         if (a->mta_in_use > 0)
1978                 IXGBE_WRITE_REG(hw, IXGBE_MCSTCTRL, hw->mac.mc_filter_type);
1979
1980         return IXGBE_SUCCESS;
1981 }
1982
1983 /**
1984  *  ixgbe_fc_enable_generic - Enable flow control
1985  *  @hw: pointer to hardware structure
1986  *  @packetbuf_num: packet buffer number (0-7)
1987  *
1988  *  Enable flow control according to the current settings.
1989  **/
1990 s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw, s32 packetbuf_num)
1991 {
1992         s32 ret_val = IXGBE_SUCCESS;
1993         u32 mflcn_reg, fccfg_reg;
1994         u32 reg;
1995         u32 rx_pba_size;
1996         u32 fcrtl, fcrth;
1997
1998         DEBUGFUNC("ixgbe_fc_enable_generic");
1999
2000         /* Negotiate the fc mode to use */
2001         ret_val = ixgbe_fc_autoneg(hw);
2002         if (ret_val == IXGBE_ERR_FLOW_CONTROL)
2003                 goto out;
2004
2005         /* Disable any previous flow control settings */
2006         mflcn_reg = IXGBE_READ_REG(hw, IXGBE_MFLCN);
2007         mflcn_reg &= ~(IXGBE_MFLCN_RFCE | IXGBE_MFLCN_RPFCE);
2008
2009         fccfg_reg = IXGBE_READ_REG(hw, IXGBE_FCCFG);
2010         fccfg_reg &= ~(IXGBE_FCCFG_TFCE_802_3X | IXGBE_FCCFG_TFCE_PRIORITY);
2011
2012         /*
2013          * The possible values of fc.current_mode are:
2014          * 0: Flow control is completely disabled
2015          * 1: Rx flow control is enabled (we can receive pause frames,
2016          *    but not send pause frames).
2017          * 2: Tx flow control is enabled (we can send pause frames but
2018          *    we do not support receiving pause frames).
2019          * 3: Both Rx and Tx flow control (symmetric) are enabled.
2020          * other: Invalid.
2021          */
2022         switch (hw->fc.current_mode) {
2023         case ixgbe_fc_none:
2024                 /*
2025                  * Flow control is disabled by software override or autoneg.
2026                  * The code below will actually disable it in the HW.
2027                  */
2028                 break;
2029         case ixgbe_fc_rx_pause:
2030                 /*
2031                  * Rx Flow control is enabled and Tx Flow control is
2032                  * disabled by software override. Since there really
2033                  * isn't a way to advertise that we are capable of RX
2034                  * Pause ONLY, we will advertise that we support both
2035                  * symmetric and asymmetric Rx PAUSE.  Later, we will
2036                  * disable the adapter's ability to send PAUSE frames.
2037                  */
2038                 mflcn_reg |= IXGBE_MFLCN_RFCE;
2039                 break;
2040         case ixgbe_fc_tx_pause:
2041                 /*
2042                  * Tx Flow control is enabled, and Rx Flow control is
2043                  * disabled by software override.
2044                  */
2045                 fccfg_reg |= IXGBE_FCCFG_TFCE_802_3X;
2046                 break;
2047         case ixgbe_fc_full:
2048                 /* Flow control (both Rx and Tx) is enabled by SW override. */
2049                 mflcn_reg |= IXGBE_MFLCN_RFCE;
2050                 fccfg_reg |= IXGBE_FCCFG_TFCE_802_3X;
2051                 break;
2052         default:
2053                 DEBUGOUT("Flow control param set incorrectly\n");
2054                 ret_val = IXGBE_ERR_CONFIG;
2055                 goto out;
2056                 break;
2057         }
2058
2059         /* Set 802.3x based flow control settings. */
2060         mflcn_reg |= IXGBE_MFLCN_DPF;
2061         IXGBE_WRITE_REG(hw, IXGBE_MFLCN, mflcn_reg);
2062         IXGBE_WRITE_REG(hw, IXGBE_FCCFG, fccfg_reg);
2063
2064         rx_pba_size = IXGBE_READ_REG(hw, IXGBE_RXPBSIZE(packetbuf_num));
2065         rx_pba_size >>= IXGBE_RXPBSIZE_SHIFT;
2066
2067         fcrth = (rx_pba_size - hw->fc.high_water) << 10;
2068         fcrtl = (rx_pba_size - hw->fc.low_water) << 10;
2069
2070         if (hw->fc.current_mode & ixgbe_fc_tx_pause) {
2071                 fcrth |= IXGBE_FCRTH_FCEN;
2072                 if (hw->fc.send_xon)
2073                         fcrtl |= IXGBE_FCRTL_XONE;
2074         }
2075
2076         IXGBE_WRITE_REG(hw, IXGBE_FCRTH_82599(packetbuf_num), fcrth);
2077         IXGBE_WRITE_REG(hw, IXGBE_FCRTL_82599(packetbuf_num), fcrtl);
2078
2079         /* Configure pause time (2 TCs per register) */
2080         reg = IXGBE_READ_REG(hw, IXGBE_FCTTV(packetbuf_num / 2));
2081         if ((packetbuf_num & 1) == 0)
2082                 reg = (reg & 0xFFFF0000) | hw->fc.pause_time;
2083         else
2084                 reg = (reg & 0x0000FFFF) | (hw->fc.pause_time << 16);
2085         IXGBE_WRITE_REG(hw, IXGBE_FCTTV(packetbuf_num / 2), reg);
2086
2087         IXGBE_WRITE_REG(hw, IXGBE_FCRTV, (hw->fc.pause_time >> 1));
2088
2089 out:
2090         return ret_val;
2091 }
2092
2093 /**
2094  *  ixgbe_fc_autoneg - Configure flow control
2095  *  @hw: pointer to hardware structure
2096  *
2097  *  Compares our advertised flow control capabilities to those advertised by
2098  *  our link partner, and determines the proper flow control mode to use.
2099  **/
2100 s32 ixgbe_fc_autoneg(struct ixgbe_hw *hw)
2101 {
2102         s32 ret_val = IXGBE_ERR_FC_NOT_NEGOTIATED;
2103         ixgbe_link_speed speed;
2104         bool link_up;
2105
2106         DEBUGFUNC("ixgbe_fc_autoneg");
2107
2108         if (hw->fc.disable_fc_autoneg)
2109                 goto out;
2110
2111         /*
2112          * AN should have completed when the cable was plugged in.
2113          * Look for reasons to bail out.  Bail out if:
2114          * - FC autoneg is disabled, or if
2115          * - link is not up.
2116          *
2117          * Since we're being called from an LSC, link is already known to be up.
2118          * So use link_up_wait_to_complete=FALSE.
2119          */
2120         hw->mac.ops.check_link(hw, &speed, &link_up, FALSE);
2121         if (!link_up) {
2122                 ret_val = IXGBE_ERR_FLOW_CONTROL;
2123                 goto out;
2124         }
2125
2126         switch (hw->phy.media_type) {
2127         /* Autoneg flow control on fiber adapters */
2128         case ixgbe_media_type_fiber:
2129                 if (speed == IXGBE_LINK_SPEED_1GB_FULL)
2130                         ret_val = ixgbe_fc_autoneg_fiber(hw);
2131                 break;
2132
2133         /* Autoneg flow control on backplane adapters */
2134         case ixgbe_media_type_backplane:
2135                 ret_val = ixgbe_fc_autoneg_backplane(hw);
2136                 break;
2137
2138         /* Autoneg flow control on copper adapters */
2139         case ixgbe_media_type_copper:
2140                 if (ixgbe_device_supports_autoneg_fc(hw) == IXGBE_SUCCESS)
2141                         ret_val = ixgbe_fc_autoneg_copper(hw);
2142                 break;
2143
2144         default:
2145                 break;
2146         }
2147
2148 out:
2149         if (ret_val == IXGBE_SUCCESS) {
2150                 hw->fc.fc_was_autonegged = TRUE;
2151         } else {
2152                 hw->fc.fc_was_autonegged = FALSE;
2153                 hw->fc.current_mode = hw->fc.requested_mode;
2154         }
2155         return ret_val;
2156 }
2157
2158 /**
2159  *  ixgbe_fc_autoneg_fiber - Enable flow control on 1 gig fiber
2160  *  @hw: pointer to hardware structure
2161  *  @speed:
2162  *  @link_up
2163  *
2164  *  Enable flow control according on 1 gig fiber.
2165  **/
2166 static s32 ixgbe_fc_autoneg_fiber(struct ixgbe_hw *hw)
2167 {
2168         u32 pcs_anadv_reg, pcs_lpab_reg, linkstat;
2169         s32 ret_val;
2170
2171         /*
2172          * On multispeed fiber at 1g, bail out if
2173          * - link is up but AN did not complete, or if
2174          * - link is up and AN completed but timed out
2175          */
2176
2177         linkstat = IXGBE_READ_REG(hw, IXGBE_PCS1GLSTA);
2178         if (((linkstat & IXGBE_PCS1GLSTA_AN_COMPLETE) == 0) ||
2179             ((linkstat & IXGBE_PCS1GLSTA_AN_TIMED_OUT) == 1)) {
2180                 ret_val = IXGBE_ERR_FC_NOT_NEGOTIATED;
2181                 goto out;
2182         }
2183
2184         pcs_anadv_reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANA);
2185         pcs_lpab_reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANLP);
2186
2187         ret_val =  ixgbe_negotiate_fc(hw, pcs_anadv_reg,
2188                                pcs_lpab_reg, IXGBE_PCS1GANA_SYM_PAUSE,
2189                                IXGBE_PCS1GANA_ASM_PAUSE,
2190                                IXGBE_PCS1GANA_SYM_PAUSE,
2191                                IXGBE_PCS1GANA_ASM_PAUSE);
2192
2193 out:
2194         return ret_val;
2195 }
2196
2197 /**
2198  *  ixgbe_fc_autoneg_backplane - Enable flow control IEEE clause 37
2199  *  @hw: pointer to hardware structure
2200  *
2201  *  Enable flow control according to IEEE clause 37.
2202  **/
2203 static s32 ixgbe_fc_autoneg_backplane(struct ixgbe_hw *hw)
2204 {
2205         u32 links2, anlp1_reg, autoc_reg, links;
2206         s32 ret_val;
2207
2208         /*
2209          * On backplane, bail out if
2210          * - backplane autoneg was not completed, or if
2211          * - we are 82599 and link partner is not AN enabled
2212          */
2213         links = IXGBE_READ_REG(hw, IXGBE_LINKS);
2214         if ((links & IXGBE_LINKS_KX_AN_COMP) == 0) {
2215                 hw->fc.fc_was_autonegged = FALSE;
2216                 hw->fc.current_mode = hw->fc.requested_mode;
2217                 ret_val = IXGBE_ERR_FC_NOT_NEGOTIATED;
2218                 goto out;
2219         }
2220
2221         if (hw->mac.type == ixgbe_mac_82599EB) {
2222                 links2 = IXGBE_READ_REG(hw, IXGBE_LINKS2);
2223                 if ((links2 & IXGBE_LINKS2_AN_SUPPORTED) == 0) {
2224                         hw->fc.fc_was_autonegged = FALSE;
2225                         hw->fc.current_mode = hw->fc.requested_mode;
2226                         ret_val = IXGBE_ERR_FC_NOT_NEGOTIATED;
2227                         goto out;
2228                 }
2229         }
2230         /*
2231          * Read the 10g AN autoc and LP ability registers and resolve
2232          * local flow control settings accordingly
2233          */
2234         autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
2235         anlp1_reg = IXGBE_READ_REG(hw, IXGBE_ANLP1);
2236
2237         ret_val = ixgbe_negotiate_fc(hw, autoc_reg,
2238                 anlp1_reg, IXGBE_AUTOC_SYM_PAUSE, IXGBE_AUTOC_ASM_PAUSE,
2239                 IXGBE_ANLP1_SYM_PAUSE, IXGBE_ANLP1_ASM_PAUSE);
2240
2241 out:
2242         return ret_val;
2243 }
2244
2245 /**
2246  *  ixgbe_fc_autoneg_copper - Enable flow control IEEE clause 37
2247  *  @hw: pointer to hardware structure
2248  *
2249  *  Enable flow control according to IEEE clause 37.
2250  **/
2251 static s32 ixgbe_fc_autoneg_copper(struct ixgbe_hw *hw)
2252 {
2253         u16 technology_ability_reg = 0;
2254         u16 lp_technology_ability_reg = 0;
2255
2256         hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_ADVT,
2257                              IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
2258                              &technology_ability_reg);
2259         hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_LP,
2260                              IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
2261                              &lp_technology_ability_reg);
2262
2263         return ixgbe_negotiate_fc(hw, (u32)technology_ability_reg,
2264                                   (u32)lp_technology_ability_reg,
2265                                   IXGBE_TAF_SYM_PAUSE, IXGBE_TAF_ASM_PAUSE,
2266                                   IXGBE_TAF_SYM_PAUSE, IXGBE_TAF_ASM_PAUSE);
2267 }
2268
2269 /**
2270  *  ixgbe_negotiate_fc - Negotiate flow control
2271  *  @hw: pointer to hardware structure
2272  *  @adv_reg: flow control advertised settings
2273  *  @lp_reg: link partner's flow control settings
2274  *  @adv_sym: symmetric pause bit in advertisement
2275  *  @adv_asm: asymmetric pause bit in advertisement
2276  *  @lp_sym: symmetric pause bit in link partner advertisement
2277  *  @lp_asm: asymmetric pause bit in link partner advertisement
2278  *
2279  *  Find the intersection between advertised settings and link partner's
2280  *  advertised settings
2281  **/
2282 static s32 ixgbe_negotiate_fc(struct ixgbe_hw *hw, u32 adv_reg, u32 lp_reg,
2283                               u32 adv_sym, u32 adv_asm, u32 lp_sym, u32 lp_asm)
2284 {
2285         if ((!(adv_reg)) ||  (!(lp_reg)))
2286                 return IXGBE_ERR_FC_NOT_NEGOTIATED;
2287
2288         if ((adv_reg & adv_sym) && (lp_reg & lp_sym)) {
2289                 /*
2290                  * Now we need to check if the user selected Rx ONLY
2291                  * of pause frames.  In this case, we had to advertise
2292                  * FULL flow control because we could not advertise RX
2293                  * ONLY. Hence, we must now check to see if we need to
2294                  * turn OFF the TRANSMISSION of PAUSE frames.
2295                  */
2296                 if (hw->fc.requested_mode == ixgbe_fc_full) {
2297                         hw->fc.current_mode = ixgbe_fc_full;
2298                         DEBUGOUT("Flow Control = FULL.\n");
2299                 } else {
2300                         hw->fc.current_mode = ixgbe_fc_rx_pause;
2301                         DEBUGOUT("Flow Control=RX PAUSE frames only\n");
2302                 }
2303         } else if (!(adv_reg & adv_sym) && (adv_reg & adv_asm) &&
2304                    (lp_reg & lp_sym) && (lp_reg & lp_asm)) {
2305                 hw->fc.current_mode = ixgbe_fc_tx_pause;
2306                 DEBUGOUT("Flow Control = TX PAUSE frames only.\n");
2307         } else if ((adv_reg & adv_sym) && (adv_reg & adv_asm) &&
2308                    !(lp_reg & lp_sym) && (lp_reg & lp_asm)) {
2309                 hw->fc.current_mode = ixgbe_fc_rx_pause;
2310                 DEBUGOUT("Flow Control = RX PAUSE frames only.\n");
2311         } else {
2312                 hw->fc.current_mode = ixgbe_fc_none;
2313                 DEBUGOUT("Flow Control = NONE.\n");
2314         }
2315         return IXGBE_SUCCESS;
2316 }
2317
2318 /**
2319  *  ixgbe_setup_fc - Set up flow control
2320  *  @hw: pointer to hardware structure
2321  *
2322  *  Called at init time to set up flow control.
2323  **/
2324 s32 ixgbe_setup_fc(struct ixgbe_hw *hw, s32 packetbuf_num)
2325 {
2326         s32 ret_val = IXGBE_SUCCESS;
2327         u32 reg = 0, reg_bp = 0;
2328         u16 reg_cu = 0;
2329
2330         DEBUGFUNC("ixgbe_setup_fc");
2331
2332         /* Validate the packetbuf configuration */
2333         if (packetbuf_num < 0 || packetbuf_num > 7) {
2334                 DEBUGOUT1("Invalid packet buffer number [%d], expected range is"
2335                           " 0-7\n", packetbuf_num);
2336                 ret_val = IXGBE_ERR_INVALID_LINK_SETTINGS;
2337                 goto out;
2338         }
2339
2340         /*
2341          * Validate the water mark configuration.  Zero water marks are invalid
2342          * because it causes the controller to just blast out fc packets.
2343          */
2344         if (!hw->fc.low_water || !hw->fc.high_water || !hw->fc.pause_time) {
2345                 DEBUGOUT("Invalid water mark configuration\n");
2346                 ret_val = IXGBE_ERR_INVALID_LINK_SETTINGS;
2347                 goto out;
2348         }
2349
2350         /*
2351          * Validate the requested mode.  Strict IEEE mode does not allow
2352          * ixgbe_fc_rx_pause because it will cause us to fail at UNH.
2353          */
2354         if (hw->fc.strict_ieee && hw->fc.requested_mode == ixgbe_fc_rx_pause) {
2355                 DEBUGOUT("ixgbe_fc_rx_pause not valid in strict IEEE mode\n");
2356                 ret_val = IXGBE_ERR_INVALID_LINK_SETTINGS;
2357                 goto out;
2358         }
2359
2360         /*
2361          * 10gig parts do not have a word in the EEPROM to determine the
2362          * default flow control setting, so we explicitly set it to full.
2363          */
2364         if (hw->fc.requested_mode == ixgbe_fc_default)
2365                 hw->fc.requested_mode = ixgbe_fc_full;
2366
2367         /*
2368          * Set up the 1G and 10G flow control advertisement registers so the
2369          * HW will be able to do fc autoneg once the cable is plugged in.  If
2370          * we link at 10G, the 1G advertisement is harmless and vice versa.
2371          */
2372
2373         switch (hw->phy.media_type) {
2374         case ixgbe_media_type_fiber:
2375         case ixgbe_media_type_backplane:
2376                 reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANA);
2377                 reg_bp = IXGBE_READ_REG(hw, IXGBE_AUTOC);
2378                 break;
2379
2380         case ixgbe_media_type_copper:
2381                 hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_ADVT,
2382                                         IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &reg_cu);
2383                 break;
2384
2385         default:
2386                 ;
2387         }
2388
2389         /*
2390          * The possible values of fc.requested_mode are:
2391          * 0: Flow control is completely disabled
2392          * 1: Rx flow control is enabled (we can receive pause frames,
2393          *    but not send pause frames).
2394          * 2: Tx flow control is enabled (we can send pause frames but
2395          *    we do not support receiving pause frames).
2396          * 3: Both Rx and Tx flow control (symmetric) are enabled.
2397          * other: Invalid.
2398          */
2399         switch (hw->fc.requested_mode) {
2400         case ixgbe_fc_none:
2401                 /* Flow control completely disabled by software override. */
2402                 reg &= ~(IXGBE_PCS1GANA_SYM_PAUSE | IXGBE_PCS1GANA_ASM_PAUSE);
2403                 if (hw->phy.media_type == ixgbe_media_type_backplane)
2404                         reg_bp &= ~(IXGBE_AUTOC_SYM_PAUSE |
2405                                     IXGBE_AUTOC_ASM_PAUSE);
2406                 else if (hw->phy.media_type == ixgbe_media_type_copper)
2407                         reg_cu &= ~(IXGBE_TAF_SYM_PAUSE | IXGBE_TAF_ASM_PAUSE);
2408                 break;
2409         case ixgbe_fc_rx_pause:
2410                 /*
2411                  * Rx Flow control is enabled and Tx Flow control is
2412                  * disabled by software override. Since there really
2413                  * isn't a way to advertise that we are capable of RX
2414                  * Pause ONLY, we will advertise that we support both
2415                  * symmetric and asymmetric Rx PAUSE.  Later, we will
2416                  * disable the adapter's ability to send PAUSE frames.
2417                  */
2418                 reg |= (IXGBE_PCS1GANA_SYM_PAUSE | IXGBE_PCS1GANA_ASM_PAUSE);
2419                 if (hw->phy.media_type == ixgbe_media_type_backplane)
2420                         reg_bp |= (IXGBE_AUTOC_SYM_PAUSE |
2421                                    IXGBE_AUTOC_ASM_PAUSE);
2422                 else if (hw->phy.media_type == ixgbe_media_type_copper)
2423                         reg_cu |= (IXGBE_TAF_SYM_PAUSE | IXGBE_TAF_ASM_PAUSE);
2424                 break;
2425         case ixgbe_fc_tx_pause:
2426                 /*
2427                  * Tx Flow control is enabled, and Rx Flow control is
2428                  * disabled by software override.
2429                  */
2430                 reg |= (IXGBE_PCS1GANA_ASM_PAUSE);
2431                 reg &= ~(IXGBE_PCS1GANA_SYM_PAUSE);
2432                 if (hw->phy.media_type == ixgbe_media_type_backplane) {
2433                         reg_bp |= (IXGBE_AUTOC_ASM_PAUSE);
2434                         reg_bp &= ~(IXGBE_AUTOC_SYM_PAUSE);
2435                 } else if (hw->phy.media_type == ixgbe_media_type_copper) {
2436                         reg_cu |= (IXGBE_TAF_ASM_PAUSE);
2437                         reg_cu &= ~(IXGBE_TAF_SYM_PAUSE);
2438                 }
2439                 break;
2440         case ixgbe_fc_full:
2441                 /* Flow control (both Rx and Tx) is enabled by SW override. */
2442                 reg |= (IXGBE_PCS1GANA_SYM_PAUSE | IXGBE_PCS1GANA_ASM_PAUSE);
2443                 if (hw->phy.media_type == ixgbe_media_type_backplane)
2444                         reg_bp |= (IXGBE_AUTOC_SYM_PAUSE |
2445                                    IXGBE_AUTOC_ASM_PAUSE);
2446                 else if (hw->phy.media_type == ixgbe_media_type_copper)
2447                         reg_cu |= (IXGBE_TAF_SYM_PAUSE | IXGBE_TAF_ASM_PAUSE);
2448                 break;
2449         default:
2450                 DEBUGOUT("Flow control param set incorrectly\n");
2451                 ret_val = IXGBE_ERR_CONFIG;
2452                 goto out;
2453                 break;
2454         }
2455
2456         /*
2457          * Enable auto-negotiation between the MAC & PHY;
2458          * the MAC will advertise clause 37 flow control.
2459          */
2460         IXGBE_WRITE_REG(hw, IXGBE_PCS1GANA, reg);
2461         reg = IXGBE_READ_REG(hw, IXGBE_PCS1GLCTL);
2462
2463         /* Disable AN timeout */
2464         if (hw->fc.strict_ieee)
2465                 reg &= ~IXGBE_PCS1GLCTL_AN_1G_TIMEOUT_EN;
2466
2467         IXGBE_WRITE_REG(hw, IXGBE_PCS1GLCTL, reg);
2468         DEBUGOUT1("Set up FC; PCS1GLCTL = 0x%08X\n", reg);
2469
2470         /*
2471          * AUTOC restart handles negotiation of 1G and 10G on backplane
2472          * and copper. There is no need to set the PCS1GCTL register.
2473          *
2474          */
2475         if (hw->phy.media_type == ixgbe_media_type_backplane) {
2476                 reg_bp |= IXGBE_AUTOC_AN_RESTART;
2477                 IXGBE_WRITE_REG(hw, IXGBE_AUTOC, reg_bp);
2478         } else if ((hw->phy.media_type == ixgbe_media_type_copper) &&
2479                     (ixgbe_device_supports_autoneg_fc(hw) == IXGBE_SUCCESS)) {
2480                 hw->phy.ops.write_reg(hw, IXGBE_MDIO_AUTO_NEG_ADVT,
2481                                       IXGBE_MDIO_AUTO_NEG_DEV_TYPE, reg_cu);
2482         }
2483
2484         DEBUGOUT1("Set up FC; IXGBE_AUTOC = 0x%08X\n", reg);
2485 out:
2486         return ret_val;
2487 }
2488
2489 /**
2490  *  ixgbe_disable_pcie_master - Disable PCI-express master access
2491  *  @hw: pointer to hardware structure
2492  *
2493  *  Disables PCI-Express master access and verifies there are no pending
2494  *  requests. IXGBE_ERR_MASTER_REQUESTS_PENDING is returned if master disable
2495  *  bit hasn't caused the master requests to be disabled, else IXGBE_SUCCESS
2496  *  is returned signifying master requests disabled.
2497  **/
2498 s32 ixgbe_disable_pcie_master(struct ixgbe_hw *hw)
2499 {
2500         u32 i;
2501         u32 reg_val;
2502         u32 number_of_queues;
2503         s32 status = IXGBE_SUCCESS;
2504
2505         DEBUGFUNC("ixgbe_disable_pcie_master");
2506
2507         /* Just jump out if bus mastering is already disabled */
2508         if (!(IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_GIO))
2509                 goto out;
2510
2511         /* Disable the receive unit by stopping each queue */
2512         number_of_queues = hw->mac.max_rx_queues;
2513         for (i = 0; i < number_of_queues; i++) {
2514                 reg_val = IXGBE_READ_REG(hw, IXGBE_RXDCTL(i));
2515                 if (reg_val & IXGBE_RXDCTL_ENABLE) {
2516                         reg_val &= ~IXGBE_RXDCTL_ENABLE;
2517                         IXGBE_WRITE_REG(hw, IXGBE_RXDCTL(i), reg_val);
2518                 }
2519         }
2520
2521         reg_val = IXGBE_READ_REG(hw, IXGBE_CTRL);
2522         reg_val |= IXGBE_CTRL_GIO_DIS;
2523         IXGBE_WRITE_REG(hw, IXGBE_CTRL, reg_val);
2524
2525         for (i = 0; i < IXGBE_PCI_MASTER_DISABLE_TIMEOUT; i++) {
2526                 if (!(IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_GIO))
2527                         goto out;
2528                 usec_delay(100);
2529         }
2530
2531         DEBUGOUT("GIO Master Disable bit didn't clear - requesting resets\n");
2532         status = IXGBE_ERR_MASTER_REQUESTS_PENDING;
2533
2534         /*
2535          * The GIO Master Disable bit didn't clear.  There are multiple reasons
2536          * for this listed in the datasheet 5.2.5.3.2 Master Disable, and they
2537          * all require a double reset to recover from.  Before proceeding, we
2538          * first wait a little more to try to ensure that, at a minimum, the
2539          * PCIe block has no transactions pending.
2540          */
2541         for (i = 0; i < IXGBE_PCI_MASTER_DISABLE_TIMEOUT; i++) {
2542                 if (!(IXGBE_READ_PCIE_WORD(hw, IXGBE_PCI_DEVICE_STATUS) &
2543                         IXGBE_PCI_DEVICE_STATUS_TRANSACTION_PENDING))
2544                         break;
2545                 usec_delay(100);
2546         }
2547
2548         if (i == IXGBE_PCI_MASTER_DISABLE_TIMEOUT)
2549                 DEBUGOUT("PCIe transaction pending bit also did not clear.\n");
2550
2551         /*
2552          * Two consecutive resets are required via CTRL.RST per datasheet
2553          * 5.2.5.3.2 Master Disable.  We set a flag to inform the reset routine
2554          * of this need.  The first reset prevents new master requests from
2555          * being issued by our device.  We then must wait 1usec for any
2556          * remaining completions from the PCIe bus to trickle in, and then reset
2557          * again to clear out any effects they may have had on our device.
2558          */
2559          hw->mac.flags |= IXGBE_FLAGS_DOUBLE_RESET_REQUIRED;
2560
2561 out:
2562         return status;
2563 }
2564
2565
2566 /**
2567  *  ixgbe_acquire_swfw_sync - Acquire SWFW semaphore
2568  *  @hw: pointer to hardware structure
2569  *  @mask: Mask to specify which semaphore to acquire
2570  *
2571  *  Acquires the SWFW semaphore thought the GSSR register for the specified
2572  *  function (CSR, PHY0, PHY1, EEPROM, Flash)
2573  **/
2574 s32 ixgbe_acquire_swfw_sync(struct ixgbe_hw *hw, u16 mask)
2575 {
2576         u32 gssr;
2577         u32 swmask = mask;
2578         u32 fwmask = mask << 5;
2579         s32 timeout = 200;
2580
2581         DEBUGFUNC("ixgbe_acquire_swfw_sync");
2582
2583         while (timeout) {
2584                 /*
2585                  * SW EEPROM semaphore bit is used for access to all
2586                  * SW_FW_SYNC/GSSR bits (not just EEPROM)
2587                  */
2588                 if (ixgbe_get_eeprom_semaphore(hw))
2589                         return IXGBE_ERR_SWFW_SYNC;
2590
2591                 gssr = IXGBE_READ_REG(hw, IXGBE_GSSR);
2592                 if (!(gssr & (fwmask | swmask)))
2593                         break;
2594
2595                 /*
2596                  * Firmware currently using resource (fwmask) or other software
2597                  * thread currently using resource (swmask)
2598                  */
2599                 ixgbe_release_eeprom_semaphore(hw);
2600                 msec_delay(5);
2601                 timeout--;
2602         }
2603
2604         if (!timeout) {
2605                 DEBUGOUT("Driver can't access resource, SW_FW_SYNC timeout.\n");
2606                 return IXGBE_ERR_SWFW_SYNC;
2607         }
2608
2609         gssr |= swmask;
2610         IXGBE_WRITE_REG(hw, IXGBE_GSSR, gssr);
2611
2612         ixgbe_release_eeprom_semaphore(hw);
2613         return IXGBE_SUCCESS;
2614 }
2615
2616 /**
2617  *  ixgbe_release_swfw_sync - Release SWFW semaphore
2618  *  @hw: pointer to hardware structure
2619  *  @mask: Mask to specify which semaphore to release
2620  *
2621  *  Releases the SWFW semaphore thought the GSSR register for the specified
2622  *  function (CSR, PHY0, PHY1, EEPROM, Flash)
2623  **/
2624 void ixgbe_release_swfw_sync(struct ixgbe_hw *hw, u16 mask)
2625 {
2626         u32 gssr;
2627         u32 swmask = mask;
2628
2629         DEBUGFUNC("ixgbe_release_swfw_sync");
2630
2631         ixgbe_get_eeprom_semaphore(hw);
2632
2633         gssr = IXGBE_READ_REG(hw, IXGBE_GSSR);
2634         gssr &= ~swmask;
2635         IXGBE_WRITE_REG(hw, IXGBE_GSSR, gssr);
2636
2637         ixgbe_release_eeprom_semaphore(hw);
2638 }
2639
2640 /**
2641  *  ixgbe_enable_rx_dma_generic - Enable the Rx DMA unit
2642  *  @hw: pointer to hardware structure
2643  *  @regval: register value to write to RXCTRL
2644  *
2645  *  Enables the Rx DMA unit
2646  **/
2647 s32 ixgbe_enable_rx_dma_generic(struct ixgbe_hw *hw, u32 regval)
2648 {
2649         DEBUGFUNC("ixgbe_enable_rx_dma_generic");
2650
2651         IXGBE_WRITE_REG(hw, IXGBE_RXCTRL, regval);
2652
2653         return IXGBE_SUCCESS;
2654 }
2655
2656 /**
2657  *  ixgbe_blink_led_start_generic - Blink LED based on index.
2658  *  @hw: pointer to hardware structure
2659  *  @index: led number to blink
2660  **/
2661 s32 ixgbe_blink_led_start_generic(struct ixgbe_hw *hw, u32 index)
2662 {
2663         ixgbe_link_speed speed = 0;
2664         bool link_up = 0;
2665         u32 autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
2666         u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
2667
2668         DEBUGFUNC("ixgbe_blink_led_start_generic");
2669
2670         /*
2671          * Link must be up to auto-blink the LEDs;
2672          * Force it if link is down.
2673          */
2674         hw->mac.ops.check_link(hw, &speed, &link_up, FALSE);
2675
2676         if (!link_up) {
2677                 autoc_reg |= IXGBE_AUTOC_AN_RESTART;
2678                 autoc_reg |= IXGBE_AUTOC_FLU;
2679                 IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc_reg);
2680                 msec_delay(10);
2681         }
2682
2683         led_reg &= ~IXGBE_LED_MODE_MASK(index);
2684         led_reg |= IXGBE_LED_BLINK(index);
2685         IXGBE_WRITE_REG(hw, IXGBE_LEDCTL, led_reg);
2686         IXGBE_WRITE_FLUSH(hw);
2687
2688         return IXGBE_SUCCESS;
2689 }
2690
2691 /**
2692  *  ixgbe_blink_led_stop_generic - Stop blinking LED based on index.
2693  *  @hw: pointer to hardware structure
2694  *  @index: led number to stop blinking
2695  **/
2696 s32 ixgbe_blink_led_stop_generic(struct ixgbe_hw *hw, u32 index)
2697 {
2698         u32 autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
2699         u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
2700
2701         DEBUGFUNC("ixgbe_blink_led_stop_generic");
2702
2703
2704         autoc_reg &= ~IXGBE_AUTOC_FLU;
2705         autoc_reg |= IXGBE_AUTOC_AN_RESTART;
2706         IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc_reg);
2707
2708         led_reg &= ~IXGBE_LED_MODE_MASK(index);
2709         led_reg &= ~IXGBE_LED_BLINK(index);
2710         led_reg |= IXGBE_LED_LINK_ACTIVE << IXGBE_LED_MODE_SHIFT(index);
2711         IXGBE_WRITE_REG(hw, IXGBE_LEDCTL, led_reg);
2712         IXGBE_WRITE_FLUSH(hw);
2713
2714         return IXGBE_SUCCESS;
2715 }
2716
2717 /**
2718  *  ixgbe_get_san_mac_addr_offset - Get SAN MAC address offset from the EEPROM
2719  *  @hw: pointer to hardware structure
2720  *  @san_mac_offset: SAN MAC address offset
2721  *
2722  *  This function will read the EEPROM location for the SAN MAC address
2723  *  pointer, and returns the value at that location.  This is used in both
2724  *  get and set mac_addr routines.
2725  **/
2726 static s32 ixgbe_get_san_mac_addr_offset(struct ixgbe_hw *hw,
2727                                         u16 *san_mac_offset)
2728 {
2729         DEBUGFUNC("ixgbe_get_san_mac_addr_offset");
2730
2731         /*
2732          * First read the EEPROM pointer to see if the MAC addresses are
2733          * available.
2734          */
2735         hw->eeprom.ops.read(hw, IXGBE_SAN_MAC_ADDR_PTR, san_mac_offset);
2736
2737         return IXGBE_SUCCESS;
2738 }
2739
2740 /**
2741  *  ixgbe_get_san_mac_addr_generic - SAN MAC address retrieval from the EEPROM
2742  *  @hw: pointer to hardware structure
2743  *  @san_mac_addr: SAN MAC address
2744  *
2745  *  Reads the SAN MAC address from the EEPROM, if it's available.  This is
2746  *  per-port, so set_lan_id() must be called before reading the addresses.
2747  *  set_lan_id() is called by identify_sfp(), but this cannot be relied
2748  *  upon for non-SFP connections, so we must call it here.
2749  **/
2750 s32 ixgbe_get_san_mac_addr_generic(struct ixgbe_hw *hw, u8 *san_mac_addr)
2751 {
2752         u16 san_mac_data, san_mac_offset;
2753         u8 i;
2754
2755         DEBUGFUNC("ixgbe_get_san_mac_addr_generic");
2756
2757         /*
2758          * First read the EEPROM pointer to see if the MAC addresses are
2759          * available.  If they're not, no point in calling set_lan_id() here.
2760          */
2761         ixgbe_get_san_mac_addr_offset(hw, &san_mac_offset);
2762
2763         if ((san_mac_offset == 0) || (san_mac_offset == 0xFFFF)) {
2764                 /*
2765                  * No addresses available in this EEPROM.  It's not an
2766                  * error though, so just wipe the local address and return.
2767                  */
2768                 for (i = 0; i < 6; i++)
2769                         san_mac_addr[i] = 0xFF;
2770
2771                 goto san_mac_addr_out;
2772         }
2773
2774         /* make sure we know which port we need to program */
2775         hw->mac.ops.set_lan_id(hw);
2776         /* apply the port offset to the address offset */
2777         (hw->bus.func) ? (san_mac_offset += IXGBE_SAN_MAC_ADDR_PORT1_OFFSET) :
2778                          (san_mac_offset += IXGBE_SAN_MAC_ADDR_PORT0_OFFSET);
2779         for (i = 0; i < 3; i++) {
2780                 hw->eeprom.ops.read(hw, san_mac_offset, &san_mac_data);
2781                 san_mac_addr[i * 2] = (u8)(san_mac_data);
2782                 san_mac_addr[i * 2 + 1] = (u8)(san_mac_data >> 8);
2783                 san_mac_offset++;
2784         }
2785
2786 san_mac_addr_out:
2787         return IXGBE_SUCCESS;
2788 }
2789
2790 /**
2791  *  ixgbe_set_san_mac_addr_generic - Write the SAN MAC address to the EEPROM
2792  *  @hw: pointer to hardware structure
2793  *  @san_mac_addr: SAN MAC address
2794  *
2795  *  Write a SAN MAC address to the EEPROM.
2796  **/
2797 s32 ixgbe_set_san_mac_addr_generic(struct ixgbe_hw *hw, u8 *san_mac_addr)
2798 {
2799         s32 status = IXGBE_SUCCESS;
2800         u16 san_mac_data, san_mac_offset;
2801         u8 i;
2802
2803         DEBUGFUNC("ixgbe_set_san_mac_addr_generic");
2804
2805         /* Look for SAN mac address pointer.  If not defined, return */
2806         ixgbe_get_san_mac_addr_offset(hw, &san_mac_offset);
2807
2808         if ((san_mac_offset == 0) || (san_mac_offset == 0xFFFF)) {
2809                 status = IXGBE_ERR_NO_SAN_ADDR_PTR;
2810                 goto san_mac_addr_out;
2811         }
2812
2813         /* Make sure we know which port we need to write */
2814         hw->mac.ops.set_lan_id(hw);
2815         /* Apply the port offset to the address offset */
2816         (hw->bus.func) ? (san_mac_offset += IXGBE_SAN_MAC_ADDR_PORT1_OFFSET) :
2817                          (san_mac_offset += IXGBE_SAN_MAC_ADDR_PORT0_OFFSET);
2818
2819         for (i = 0; i < 3; i++) {
2820                 san_mac_data = (u16)((u16)(san_mac_addr[i * 2 + 1]) << 8);
2821                 san_mac_data |= (u16)(san_mac_addr[i * 2]);
2822                 hw->eeprom.ops.write(hw, san_mac_offset, san_mac_data);
2823                 san_mac_offset++;
2824         }
2825
2826 san_mac_addr_out:
2827         return status;
2828 }
2829
2830 /**
2831  *  ixgbe_get_pcie_msix_count_generic - Gets MSI-X vector count
2832  *  @hw: pointer to hardware structure
2833  *
2834  *  Read PCIe configuration space, and get the MSI-X vector count from
2835  *  the capabilities table.
2836  **/
2837 u32 ixgbe_get_pcie_msix_count_generic(struct ixgbe_hw *hw)
2838 {
2839         u32 msix_count = 64;
2840
2841         DEBUGFUNC("ixgbe_get_pcie_msix_count_generic");
2842         if (hw->mac.msix_vectors_from_pcie) {
2843                 msix_count = IXGBE_READ_PCIE_WORD(hw,
2844                                                   IXGBE_PCIE_MSIX_82599_CAPS);
2845                 msix_count &= IXGBE_PCIE_MSIX_TBL_SZ_MASK;
2846
2847                 /* MSI-X count is zero-based in HW, so increment to give
2848                  * proper value */
2849                 msix_count++;
2850         }
2851
2852         return msix_count;
2853 }
2854
2855 /**
2856  *  ixgbe_insert_mac_addr_generic - Find a RAR for this mac address
2857  *  @hw: pointer to hardware structure
2858  *  @addr: Address to put into receive address register
2859  *  @vmdq: VMDq pool to assign
2860  *
2861  *  Puts an ethernet address into a receive address register, or
2862  *  finds the rar that it is aleady in; adds to the pool list
2863  **/
2864 s32 ixgbe_insert_mac_addr_generic(struct ixgbe_hw *hw, u8 *addr, u32 vmdq)
2865 {
2866         static const u32 NO_EMPTY_RAR_FOUND = 0xFFFFFFFF;
2867         u32 first_empty_rar = NO_EMPTY_RAR_FOUND;
2868         u32 rar;
2869         u32 rar_low, rar_high;
2870         u32 addr_low, addr_high;
2871
2872         DEBUGFUNC("ixgbe_insert_mac_addr_generic");
2873
2874         /* swap bytes for HW little endian */
2875         addr_low  = addr[0] | (addr[1] << 8)
2876                             | (addr[2] << 16)
2877                             | (addr[3] << 24);
2878         addr_high = addr[4] | (addr[5] << 8);
2879
2880         /*
2881          * Either find the mac_id in rar or find the first empty space.
2882          * rar_highwater points to just after the highest currently used
2883          * rar in order to shorten the search.  It grows when we add a new
2884          * rar to the top.
2885          */
2886         for (rar = 0; rar < hw->mac.rar_highwater; rar++) {
2887                 rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(rar));
2888
2889                 if (((IXGBE_RAH_AV & rar_high) == 0)
2890                     && first_empty_rar == NO_EMPTY_RAR_FOUND) {
2891                         first_empty_rar = rar;
2892                 } else if ((rar_high & 0xFFFF) == addr_high) {
2893                         rar_low = IXGBE_READ_REG(hw, IXGBE_RAL(rar));
2894                         if (rar_low == addr_low)
2895                                 break;    /* found it already in the rars */
2896                 }
2897         }
2898
2899         if (rar < hw->mac.rar_highwater) {
2900                 /* already there so just add to the pool bits */
2901                 ixgbe_set_vmdq(hw, rar, vmdq);
2902         } else if (first_empty_rar != NO_EMPTY_RAR_FOUND) {
2903                 /* stick it into first empty RAR slot we found */
2904                 rar = first_empty_rar;
2905                 ixgbe_set_rar(hw, rar, addr, vmdq, IXGBE_RAH_AV);
2906         } else if (rar == hw->mac.rar_highwater) {
2907                 /* add it to the top of the list and inc the highwater mark */
2908                 ixgbe_set_rar(hw, rar, addr, vmdq, IXGBE_RAH_AV);
2909                 hw->mac.rar_highwater++;
2910         } else if (rar >= hw->mac.num_rar_entries) {
2911                 return IXGBE_ERR_INVALID_MAC_ADDR;
2912         }
2913
2914         /*
2915          * If we found rar[0], make sure the default pool bit (we use pool 0)
2916          * remains cleared to be sure default pool packets will get delivered
2917          */
2918         if (rar == 0)
2919                 ixgbe_clear_vmdq(hw, rar, 0);
2920
2921         return rar;
2922 }
2923
2924 /**
2925  *  ixgbe_clear_vmdq_generic - Disassociate a VMDq pool index from a rx address
2926  *  @hw: pointer to hardware struct
2927  *  @rar: receive address register index to disassociate
2928  *  @vmdq: VMDq pool index to remove from the rar
2929  **/
2930 s32 ixgbe_clear_vmdq_generic(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
2931 {
2932         u32 mpsar_lo, mpsar_hi;
2933         u32 rar_entries = hw->mac.num_rar_entries;
2934
2935         DEBUGFUNC("ixgbe_clear_vmdq_generic");
2936
2937         /* Make sure we are using a valid rar index range */
2938         if (rar >= rar_entries) {
2939                 DEBUGOUT1("RAR index %d is out of range.\n", rar);
2940                 return IXGBE_ERR_INVALID_ARGUMENT;
2941         }
2942
2943         mpsar_lo = IXGBE_READ_REG(hw, IXGBE_MPSAR_LO(rar));
2944         mpsar_hi = IXGBE_READ_REG(hw, IXGBE_MPSAR_HI(rar));
2945
2946         if (!mpsar_lo && !mpsar_hi)
2947                 goto done;
2948
2949         if (vmdq == IXGBE_CLEAR_VMDQ_ALL) {
2950                 if (mpsar_lo) {
2951                         IXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), 0);
2952                         mpsar_lo = 0;
2953                 }
2954                 if (mpsar_hi) {
2955                         IXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), 0);
2956                         mpsar_hi = 0;
2957                 }
2958         } else if (vmdq < 32) {
2959                 mpsar_lo &= ~(1 << vmdq);
2960                 IXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), mpsar_lo);
2961         } else {
2962                 mpsar_hi &= ~(1 << (vmdq - 32));
2963                 IXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), mpsar_hi);
2964         }
2965
2966         /* was that the last pool using this rar? */
2967         if (mpsar_lo == 0 && mpsar_hi == 0 && rar != 0)
2968                 hw->mac.ops.clear_rar(hw, rar);
2969 done:
2970         return IXGBE_SUCCESS;
2971 }
2972
2973 /**
2974  *  ixgbe_set_vmdq_generic - Associate a VMDq pool index with a rx address
2975  *  @hw: pointer to hardware struct
2976  *  @rar: receive address register index to associate with a VMDq index
2977  *  @vmdq: VMDq pool index
2978  **/
2979 s32 ixgbe_set_vmdq_generic(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
2980 {
2981         u32 mpsar;
2982         u32 rar_entries = hw->mac.num_rar_entries;
2983
2984         DEBUGFUNC("ixgbe_set_vmdq_generic");
2985
2986         /* Make sure we are using a valid rar index range */
2987         if (rar >= rar_entries) {
2988                 DEBUGOUT1("RAR index %d is out of range.\n", rar);
2989                 return IXGBE_ERR_INVALID_ARGUMENT;
2990         }
2991
2992         if (vmdq < 32) {
2993                 mpsar = IXGBE_READ_REG(hw, IXGBE_MPSAR_LO(rar));
2994                 mpsar |= 1 << vmdq;
2995                 IXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), mpsar);
2996         } else {
2997                 mpsar = IXGBE_READ_REG(hw, IXGBE_MPSAR_HI(rar));
2998                 mpsar |= 1 << (vmdq - 32);
2999                 IXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), mpsar);
3000         }
3001         return IXGBE_SUCCESS;
3002 }
3003
3004 /**
3005  *  ixgbe_init_uta_tables_generic - Initialize the Unicast Table Array
3006  *  @hw: pointer to hardware structure
3007  **/
3008 s32 ixgbe_init_uta_tables_generic(struct ixgbe_hw *hw)
3009 {
3010         int i;
3011
3012         DEBUGFUNC("ixgbe_init_uta_tables_generic");
3013         DEBUGOUT(" Clearing UTA\n");
3014
3015         for (i = 0; i < 128; i++)
3016                 IXGBE_WRITE_REG(hw, IXGBE_UTA(i), 0);
3017
3018         return IXGBE_SUCCESS;
3019 }
3020
3021 /**
3022  *  ixgbe_find_vlvf_slot - find the vlanid or the first empty slot
3023  *  @hw: pointer to hardware structure
3024  *  @vlan: VLAN id to write to VLAN filter
3025  *
3026  *  return the VLVF index where this VLAN id should be placed
3027  *
3028  **/
3029 s32 ixgbe_find_vlvf_slot(struct ixgbe_hw *hw, u32 vlan)
3030 {
3031         u32 bits = 0;
3032         u32 first_empty_slot = 0;
3033         s32 regindex;
3034
3035         /* short cut the special case */
3036         if (vlan == 0)
3037                 return 0;
3038
3039         /*
3040           * Search for the vlan id in the VLVF entries. Save off the first empty
3041           * slot found along the way
3042           */
3043         for (regindex = 1; regindex < IXGBE_VLVF_ENTRIES; regindex++) {
3044                 bits = IXGBE_READ_REG(hw, IXGBE_VLVF(regindex));
3045                 if (!bits && !(first_empty_slot))
3046                         first_empty_slot = regindex;
3047                 else if ((bits & 0x0FFF) == vlan)
3048                         break;
3049         }
3050
3051         /*
3052           * If regindex is less than IXGBE_VLVF_ENTRIES, then we found the vlan
3053           * in the VLVF. Else use the first empty VLVF register for this
3054           * vlan id.
3055           */
3056         if (regindex >= IXGBE_VLVF_ENTRIES) {
3057                 if (first_empty_slot)
3058                         regindex = first_empty_slot;
3059                 else {
3060                         DEBUGOUT("No space in VLVF.\n");
3061                         regindex = IXGBE_ERR_NO_SPACE;
3062                 }
3063         }
3064
3065         return regindex;
3066 }
3067
3068 /**
3069  *  ixgbe_set_vfta_generic - Set VLAN filter table
3070  *  @hw: pointer to hardware structure
3071  *  @vlan: VLAN id to write to VLAN filter
3072  *  @vind: VMDq output index that maps queue to VLAN id in VFVFB
3073  *  @vlan_on: boolean flag to turn on/off VLAN in VFVF
3074  *
3075  *  Turn on/off specified VLAN in the VLAN filter table.
3076  **/
3077 s32 ixgbe_set_vfta_generic(struct ixgbe_hw *hw, u32 vlan, u32 vind,
3078                            bool vlan_on)
3079 {
3080         s32 regindex;
3081         u32 bitindex;
3082         u32 vfta;
3083         u32 bits;
3084         u32 vt;
3085         u32 targetbit;
3086         bool vfta_changed = FALSE;
3087
3088         DEBUGFUNC("ixgbe_set_vfta_generic");
3089
3090         if (vlan > 4095)
3091                 return IXGBE_ERR_PARAM;
3092
3093         /*
3094          * this is a 2 part operation - first the VFTA, then the
3095          * VLVF and VLVFB if VT Mode is set
3096          * We don't write the VFTA until we know the VLVF part succeeded.
3097          */
3098
3099         /* Part 1
3100          * The VFTA is a bitstring made up of 128 32-bit registers
3101          * that enable the particular VLAN id, much like the MTA:
3102          *    bits[11-5]: which register
3103          *    bits[4-0]:  which bit in the register
3104          */
3105         regindex = (vlan >> 5) & 0x7F;
3106         bitindex = vlan & 0x1F;
3107         targetbit = (1 << bitindex);
3108         vfta = IXGBE_READ_REG(hw, IXGBE_VFTA(regindex));
3109
3110         if (vlan_on) {
3111                 if (!(vfta & targetbit)) {
3112                         vfta |= targetbit;
3113                         vfta_changed = TRUE;
3114                 }
3115         } else {
3116                 if ((vfta & targetbit)) {
3117                         vfta &= ~targetbit;
3118                         vfta_changed = TRUE;
3119                 }
3120         }
3121
3122         /* Part 2
3123          * If VT Mode is set
3124          *   Either vlan_on
3125          *     make sure the vlan is in VLVF
3126          *     set the vind bit in the matching VLVFB
3127          *   Or !vlan_on
3128          *     clear the pool bit and possibly the vind
3129          */
3130         vt = IXGBE_READ_REG(hw, IXGBE_VT_CTL);
3131         if (vt & IXGBE_VT_CTL_VT_ENABLE) {
3132                 s32 vlvf_index;
3133
3134                 vlvf_index = ixgbe_find_vlvf_slot(hw, vlan);
3135                 if (vlvf_index < 0)
3136                         return vlvf_index;
3137
3138                 if (vlan_on) {
3139                         /* set the pool bit */
3140                         if (vind < 32) {
3141                                 bits = IXGBE_READ_REG(hw,
3142                                                 IXGBE_VLVFB(vlvf_index*2));
3143                                 bits |= (1 << vind);
3144                                 IXGBE_WRITE_REG(hw,
3145                                                 IXGBE_VLVFB(vlvf_index*2),
3146                                                 bits);
3147                         } else {
3148                                 bits = IXGBE_READ_REG(hw,
3149                                                 IXGBE_VLVFB((vlvf_index*2)+1));
3150                                 bits |= (1 << (vind-32));
3151                                 IXGBE_WRITE_REG(hw,
3152                                                 IXGBE_VLVFB((vlvf_index*2)+1),
3153                                                 bits);
3154                         }
3155                 } else {
3156                         /* clear the pool bit */
3157                         if (vind < 32) {
3158                                 bits = IXGBE_READ_REG(hw,
3159                                                 IXGBE_VLVFB(vlvf_index*2));
3160                                 bits &= ~(1 << vind);
3161                                 IXGBE_WRITE_REG(hw,
3162                                                 IXGBE_VLVFB(vlvf_index*2),
3163                                                 bits);
3164                                 bits |= IXGBE_READ_REG(hw,
3165                                                 IXGBE_VLVFB((vlvf_index*2)+1));
3166                         } else {
3167                                 bits = IXGBE_READ_REG(hw,
3168                                                 IXGBE_VLVFB((vlvf_index*2)+1));
3169                                 bits &= ~(1 << (vind-32));
3170                                 IXGBE_WRITE_REG(hw,
3171                                                 IXGBE_VLVFB((vlvf_index*2)+1),
3172                                                 bits);
3173                                 bits |= IXGBE_READ_REG(hw,
3174                                                 IXGBE_VLVFB(vlvf_index*2));
3175                         }
3176                 }
3177
3178                 /*
3179                  * If there are still bits set in the VLVFB registers
3180                  * for the VLAN ID indicated we need to see if the
3181                  * caller is requesting that we clear the VFTA entry bit.
3182                  * If the caller has requested that we clear the VFTA
3183                  * entry bit but there are still pools/VFs using this VLAN
3184                  * ID entry then ignore the request.  We're not worried
3185                  * about the case where we're turning the VFTA VLAN ID
3186                  * entry bit on, only when requested to turn it off as
3187                  * there may be multiple pools and/or VFs using the
3188                  * VLAN ID entry.  In that case we cannot clear the
3189                  * VFTA bit until all pools/VFs using that VLAN ID have also
3190                  * been cleared.  This will be indicated by "bits" being
3191                  * zero.
3192                  */
3193                 if (bits) {
3194                         IXGBE_WRITE_REG(hw, IXGBE_VLVF(vlvf_index),
3195                                         (IXGBE_VLVF_VIEN | vlan));
3196                         if (!vlan_on) {
3197                                 /* someone wants to clear the vfta entry
3198                                  * but some pools/VFs are still using it.
3199                                  * Ignore it. */
3200                                 vfta_changed = FALSE;
3201                         }
3202                 }
3203                 else
3204                         IXGBE_WRITE_REG(hw, IXGBE_VLVF(vlvf_index), 0);
3205         }
3206
3207         if (vfta_changed)
3208                 IXGBE_WRITE_REG(hw, IXGBE_VFTA(regindex), vfta);
3209
3210         return IXGBE_SUCCESS;
3211 }
3212
3213 /**
3214  *  ixgbe_clear_vfta_generic - Clear VLAN filter table
3215  *  @hw: pointer to hardware structure
3216  *
3217  *  Clears the VLAN filer table, and the VMDq index associated with the filter
3218  **/
3219 s32 ixgbe_clear_vfta_generic(struct ixgbe_hw *hw)
3220 {
3221         u32 offset;
3222
3223         DEBUGFUNC("ixgbe_clear_vfta_generic");
3224
3225         for (offset = 0; offset < hw->mac.vft_size; offset++)
3226                 IXGBE_WRITE_REG(hw, IXGBE_VFTA(offset), 0);
3227
3228         for (offset = 0; offset < IXGBE_VLVF_ENTRIES; offset++) {
3229                 IXGBE_WRITE_REG(hw, IXGBE_VLVF(offset), 0);
3230                 IXGBE_WRITE_REG(hw, IXGBE_VLVFB(offset*2), 0);
3231                 IXGBE_WRITE_REG(hw, IXGBE_VLVFB((offset*2)+1), 0);
3232         }
3233
3234         return IXGBE_SUCCESS;
3235 }
3236
3237 /**
3238  *  ixgbe_check_mac_link_generic - Determine link and speed status
3239  *  @hw: pointer to hardware structure
3240  *  @speed: pointer to link speed
3241  *  @link_up: TRUE when link is up
3242  *  @link_up_wait_to_complete: bool used to wait for link up or not
3243  *
3244  *  Reads the links register to determine if link is up and the current speed
3245  **/
3246 s32 ixgbe_check_mac_link_generic(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
3247                                  bool *link_up, bool link_up_wait_to_complete)
3248 {
3249         u32 links_reg, links_orig;
3250         u32 i;
3251
3252         DEBUGFUNC("ixgbe_check_mac_link_generic");
3253
3254         /* clear the old state */
3255         links_orig = IXGBE_READ_REG(hw, IXGBE_LINKS);
3256
3257         links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
3258
3259         if (links_orig != links_reg) {
3260                 DEBUGOUT2("LINKS changed from %08X to %08X\n",
3261                           links_orig, links_reg);
3262         }
3263
3264         if (link_up_wait_to_complete) {
3265                 for (i = 0; i < IXGBE_LINK_UP_TIME; i++) {
3266                         if (links_reg & IXGBE_LINKS_UP) {
3267                                 *link_up = TRUE;
3268                                 break;
3269                         } else {
3270                                 *link_up = FALSE;
3271                         }
3272                         msec_delay(100);
3273                         links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
3274                 }
3275         } else {
3276                 if (links_reg & IXGBE_LINKS_UP)
3277                         *link_up = TRUE;
3278                 else
3279                         *link_up = FALSE;
3280         }
3281
3282         if ((links_reg & IXGBE_LINKS_SPEED_82599) ==
3283             IXGBE_LINKS_SPEED_10G_82599)
3284                 *speed = IXGBE_LINK_SPEED_10GB_FULL;
3285         else if ((links_reg & IXGBE_LINKS_SPEED_82599) ==
3286                  IXGBE_LINKS_SPEED_1G_82599)
3287                 *speed = IXGBE_LINK_SPEED_1GB_FULL;
3288         else if ((links_reg & IXGBE_LINKS_SPEED_82599) ==
3289                  IXGBE_LINKS_SPEED_100_82599)
3290                 *speed = IXGBE_LINK_SPEED_100_FULL;
3291         else
3292                 *speed = IXGBE_LINK_SPEED_UNKNOWN;
3293
3294         /* if link is down, zero out the current_mode */
3295         if (*link_up == FALSE) {
3296                 hw->fc.current_mode = ixgbe_fc_none;
3297                 hw->fc.fc_was_autonegged = FALSE;
3298         }
3299
3300         return IXGBE_SUCCESS;
3301 }
3302
3303 /**
3304  *  ixgbe_get_wwn_prefix_generic - Get alternative WWNN/WWPN prefix from
3305  *  the EEPROM
3306  *  @hw: pointer to hardware structure
3307  *  @wwnn_prefix: the alternative WWNN prefix
3308  *  @wwpn_prefix: the alternative WWPN prefix
3309  *
3310  *  This function will read the EEPROM from the alternative SAN MAC address
3311  *  block to check the support for the alternative WWNN/WWPN prefix support.
3312  **/
3313 s32 ixgbe_get_wwn_prefix_generic(struct ixgbe_hw *hw, u16 *wwnn_prefix,
3314                                  u16 *wwpn_prefix)
3315 {
3316         u16 offset, caps;
3317         u16 alt_san_mac_blk_offset;
3318
3319         DEBUGFUNC("ixgbe_get_wwn_prefix_generic");
3320
3321         /* clear output first */
3322         *wwnn_prefix = 0xFFFF;
3323         *wwpn_prefix = 0xFFFF;
3324
3325         /* check if alternative SAN MAC is supported */
3326         hw->eeprom.ops.read(hw, IXGBE_ALT_SAN_MAC_ADDR_BLK_PTR,
3327                             &alt_san_mac_blk_offset);
3328
3329         if ((alt_san_mac_blk_offset == 0) ||
3330             (alt_san_mac_blk_offset == 0xFFFF))
3331                 goto wwn_prefix_out;
3332
3333         /* check capability in alternative san mac address block */
3334         offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_CAPS_OFFSET;
3335         hw->eeprom.ops.read(hw, offset, &caps);
3336         if (!(caps & IXGBE_ALT_SAN_MAC_ADDR_CAPS_ALTWWN))
3337                 goto wwn_prefix_out;
3338
3339         /* get the corresponding prefix for WWNN/WWPN */
3340         offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_WWNN_OFFSET;
3341         hw->eeprom.ops.read(hw, offset, wwnn_prefix);
3342
3343         offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_WWPN_OFFSET;
3344         hw->eeprom.ops.read(hw, offset, wwpn_prefix);
3345
3346 wwn_prefix_out:
3347         return IXGBE_SUCCESS;
3348 }
3349
3350 /**
3351  *  ixgbe_get_fcoe_boot_status_generic - Get FCOE boot status from EEPROM
3352  *  @hw: pointer to hardware structure
3353  *  @bs: the fcoe boot status
3354  *
3355  *  This function will read the FCOE boot status from the iSCSI FCOE block
3356  **/
3357 s32 ixgbe_get_fcoe_boot_status_generic(struct ixgbe_hw *hw, u16 *bs)
3358 {
3359         u16 offset, caps, flags;
3360         s32 status;
3361
3362         DEBUGFUNC("ixgbe_get_fcoe_boot_status_generic");
3363
3364         /* clear output first */
3365         *bs = ixgbe_fcoe_bootstatus_unavailable;
3366
3367         /* check if FCOE IBA block is present */
3368         offset = IXGBE_FCOE_IBA_CAPS_BLK_PTR;
3369         status = hw->eeprom.ops.read(hw, offset, &caps);
3370         if (status != IXGBE_SUCCESS)
3371                 goto out;
3372
3373         if (!(caps & IXGBE_FCOE_IBA_CAPS_FCOE))
3374                 goto out;
3375
3376         /* check if iSCSI FCOE block is populated */
3377         status = hw->eeprom.ops.read(hw, IXGBE_ISCSI_FCOE_BLK_PTR, &offset);
3378         if (status != IXGBE_SUCCESS)
3379                 goto out;
3380
3381         if ((offset == 0) || (offset == 0xFFFF))
3382                 goto out;
3383
3384         /* read fcoe flags in iSCSI FCOE block */
3385         offset = offset + IXGBE_ISCSI_FCOE_FLAGS_OFFSET;
3386         status = hw->eeprom.ops.read(hw, offset, &flags);
3387         if (status != IXGBE_SUCCESS)
3388                 goto out;
3389
3390         if (flags & IXGBE_ISCSI_FCOE_FLAGS_ENABLE)
3391                 *bs = ixgbe_fcoe_bootstatus_enabled;
3392         else
3393                 *bs = ixgbe_fcoe_bootstatus_disabled;
3394
3395 out:
3396         return status;
3397 }
3398
3399 /**
3400  *  ixgbe_device_supports_autoneg_fc - Check if phy supports autoneg flow
3401  *  control
3402  *  @hw: pointer to hardware structure
3403  *
3404  *  There are several phys that do not support autoneg flow control. This
3405  *  function check the device id to see if the associated phy supports
3406  *  autoneg flow control.
3407  **/
3408 static s32 ixgbe_device_supports_autoneg_fc(struct ixgbe_hw *hw)
3409 {
3410
3411         DEBUGFUNC("ixgbe_device_supports_autoneg_fc");
3412
3413         switch (hw->device_id) {
3414         case IXGBE_DEV_ID_82599_T3_LOM:
3415                 return IXGBE_SUCCESS;
3416         default:
3417                 return IXGBE_ERR_FC_NOT_SUPPORTED;
3418         }
3419 }
3420
3421 /**
3422  *  ixgbe_set_mac_anti_spoofing - Enable/Disable MAC anti-spoofing
3423  *  @hw: pointer to hardware structure
3424  *  @enable: enable or disable switch for anti-spoofing
3425  *  @pf: Physical Function pool - do not enable anti-spoofing for the PF
3426  *
3427  **/
3428 void ixgbe_set_mac_anti_spoofing(struct ixgbe_hw *hw, bool enable, int pf)
3429 {
3430         int j;
3431         int pf_target_reg = pf >> 3;
3432         int pf_target_shift = pf % 8;
3433         u32 pfvfspoof = 0;
3434
3435         if (hw->mac.type == ixgbe_mac_82598EB)
3436                 return;
3437
3438         if (enable)
3439                 pfvfspoof = IXGBE_SPOOF_MACAS_MASK;
3440
3441         /*
3442          * PFVFSPOOF register array is size 8 with 8 bits assigned to
3443          * MAC anti-spoof enables in each register array element.
3444          */
3445         for (j = 0; j < IXGBE_PFVFSPOOF_REG_COUNT; j++)
3446                 IXGBE_WRITE_REG(hw, IXGBE_PFVFSPOOF(j), pfvfspoof);
3447
3448         /* If not enabling anti-spoofing then done */
3449         if (!enable)
3450                 return;
3451
3452         /*
3453          * The PF should be allowed to spoof so that it can support
3454          * emulation mode NICs.  Reset the bit assigned to the PF
3455          */
3456         pfvfspoof = IXGBE_READ_REG(hw, IXGBE_PFVFSPOOF(pf_target_reg));
3457         pfvfspoof ^= (1 << pf_target_shift);
3458         IXGBE_WRITE_REG(hw, IXGBE_PFVFSPOOF(pf_target_reg), pfvfspoof);
3459 }
3460
3461 /**
3462  *  ixgbe_set_vlan_anti_spoofing - Enable/Disable VLAN anti-spoofing
3463  *  @hw: pointer to hardware structure
3464  *  @enable: enable or disable switch for VLAN anti-spoofing
3465  *  @pf: Virtual Function pool - VF Pool to set for VLAN anti-spoofing
3466  *
3467  **/
3468 void ixgbe_set_vlan_anti_spoofing(struct ixgbe_hw *hw, bool enable, int vf)
3469 {
3470         int vf_target_reg = vf >> 3;
3471         int vf_target_shift = vf % 8 + IXGBE_SPOOF_VLANAS_SHIFT;
3472         u32 pfvfspoof;
3473
3474         if (hw->mac.type == ixgbe_mac_82598EB)
3475                 return;
3476
3477         pfvfspoof = IXGBE_READ_REG(hw, IXGBE_PFVFSPOOF(vf_target_reg));
3478         if (enable)
3479                 pfvfspoof |= (1 << vf_target_shift);
3480         else
3481                 pfvfspoof &= ~(1 << vf_target_shift);
3482         IXGBE_WRITE_REG(hw, IXGBE_PFVFSPOOF(vf_target_reg), pfvfspoof);
3483 }