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