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