diff options
Diffstat (limited to 'drivers/net/ixgbe')
-rw-r--r-- | drivers/net/ixgbe/ixgbe_82598.c | 7 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_82599.c | 1277 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_common.c | 319 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_common.h | 10 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_ethtool.c | 2 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_phy.c | 590 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_phy.h | 16 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_type.h | 766 |
8 files changed, 2928 insertions, 59 deletions
diff --git a/drivers/net/ixgbe/ixgbe_82598.c b/drivers/net/ixgbe/ixgbe_82598.c index 51dba1c78e1e..623737fb719b 100644 --- a/drivers/net/ixgbe/ixgbe_82598.c +++ b/drivers/net/ixgbe/ixgbe_82598.c | |||
@@ -1046,9 +1046,9 @@ out: | |||
1046 | * | 1046 | * |
1047 | * Determines physical layer capabilities of the current configuration. | 1047 | * Determines physical layer capabilities of the current configuration. |
1048 | **/ | 1048 | **/ |
1049 | static s32 ixgbe_get_supported_physical_layer_82598(struct ixgbe_hw *hw) | 1049 | static u32 ixgbe_get_supported_physical_layer_82598(struct ixgbe_hw *hw) |
1050 | { | 1050 | { |
1051 | s32 physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN; | 1051 | u32 physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN; |
1052 | 1052 | ||
1053 | switch (hw->device_id) { | 1053 | switch (hw->device_id) { |
1054 | case IXGBE_DEV_ID_82598: | 1054 | case IXGBE_DEV_ID_82598: |
@@ -1111,8 +1111,11 @@ static struct ixgbe_mac_operations mac_ops_82598 = { | |||
1111 | .clear_hw_cntrs = &ixgbe_clear_hw_cntrs_generic, | 1111 | .clear_hw_cntrs = &ixgbe_clear_hw_cntrs_generic, |
1112 | .get_media_type = &ixgbe_get_media_type_82598, | 1112 | .get_media_type = &ixgbe_get_media_type_82598, |
1113 | .get_supported_physical_layer = &ixgbe_get_supported_physical_layer_82598, | 1113 | .get_supported_physical_layer = &ixgbe_get_supported_physical_layer_82598, |
1114 | .enable_rx_dma = &ixgbe_enable_rx_dma_generic, | ||
1114 | .get_mac_addr = &ixgbe_get_mac_addr_generic, | 1115 | .get_mac_addr = &ixgbe_get_mac_addr_generic, |
1115 | .stop_adapter = &ixgbe_stop_adapter_generic, | 1116 | .stop_adapter = &ixgbe_stop_adapter_generic, |
1117 | .get_bus_info = &ixgbe_get_bus_info_generic, | ||
1118 | .set_lan_id = &ixgbe_set_lan_id_multi_port_pcie, | ||
1116 | .read_analog_reg8 = &ixgbe_read_analog_reg8_82598, | 1119 | .read_analog_reg8 = &ixgbe_read_analog_reg8_82598, |
1117 | .write_analog_reg8 = &ixgbe_write_analog_reg8_82598, | 1120 | .write_analog_reg8 = &ixgbe_write_analog_reg8_82598, |
1118 | .setup_link = &ixgbe_setup_mac_link_82598, | 1121 | .setup_link = &ixgbe_setup_mac_link_82598, |
diff --git a/drivers/net/ixgbe/ixgbe_82599.c b/drivers/net/ixgbe/ixgbe_82599.c new file mode 100644 index 000000000000..cc3bfa195b78 --- /dev/null +++ b/drivers/net/ixgbe/ixgbe_82599.c | |||
@@ -0,0 +1,1277 @@ | |||
1 | /******************************************************************************* | ||
2 | |||
3 | Intel 10 Gigabit PCI Express Linux driver | ||
4 | Copyright(c) 1999 - 2009 Intel Corporation. | ||
5 | |||
6 | This program is free software; you can redistribute it and/or modify it | ||
7 | under the terms and conditions of the GNU General Public License, | ||
8 | version 2, as published by the Free Software Foundation. | ||
9 | |||
10 | This program is distributed in the hope it will be useful, but WITHOUT | ||
11 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
12 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
13 | more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License along with | ||
16 | this program; if not, write to the Free Software Foundation, Inc., | ||
17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | |||
19 | The full GNU General Public License is included in this distribution in | ||
20 | the file called "COPYING". | ||
21 | |||
22 | Contact Information: | ||
23 | e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | ||
24 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
25 | |||
26 | *******************************************************************************/ | ||
27 | |||
28 | #include <linux/pci.h> | ||
29 | #include <linux/delay.h> | ||
30 | #include <linux/sched.h> | ||
31 | |||
32 | #include "ixgbe.h" | ||
33 | #include "ixgbe_phy.h" | ||
34 | |||
35 | #define IXGBE_82599_MAX_TX_QUEUES 128 | ||
36 | #define IXGBE_82599_MAX_RX_QUEUES 128 | ||
37 | #define IXGBE_82599_RAR_ENTRIES 128 | ||
38 | #define IXGBE_82599_MC_TBL_SIZE 128 | ||
39 | #define IXGBE_82599_VFT_TBL_SIZE 128 | ||
40 | |||
41 | s32 ixgbe_get_link_capabilities_82599(struct ixgbe_hw *hw, | ||
42 | ixgbe_link_speed *speed, | ||
43 | bool *autoneg); | ||
44 | enum ixgbe_media_type ixgbe_get_media_type_82599(struct ixgbe_hw *hw); | ||
45 | s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw); | ||
46 | s32 ixgbe_setup_mac_link_speed_multispeed_fiber(struct ixgbe_hw *hw, | ||
47 | ixgbe_link_speed speed, bool autoneg, | ||
48 | bool autoneg_wait_to_complete); | ||
49 | s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw); | ||
50 | s32 ixgbe_check_mac_link_82599(struct ixgbe_hw *hw, | ||
51 | ixgbe_link_speed *speed, | ||
52 | bool *link_up, bool link_up_wait_to_complete); | ||
53 | s32 ixgbe_setup_mac_link_speed_82599(struct ixgbe_hw *hw, | ||
54 | ixgbe_link_speed speed, | ||
55 | bool autoneg, | ||
56 | bool autoneg_wait_to_complete); | ||
57 | static s32 ixgbe_get_copper_link_capabilities_82599(struct ixgbe_hw *hw, | ||
58 | ixgbe_link_speed *speed, | ||
59 | bool *autoneg); | ||
60 | static s32 ixgbe_setup_copper_link_82599(struct ixgbe_hw *hw); | ||
61 | static s32 ixgbe_setup_copper_link_speed_82599(struct ixgbe_hw *hw, | ||
62 | ixgbe_link_speed speed, | ||
63 | bool autoneg, | ||
64 | bool autoneg_wait_to_complete); | ||
65 | s32 ixgbe_reset_hw_82599(struct ixgbe_hw *hw); | ||
66 | s32 ixgbe_set_vmdq_82599(struct ixgbe_hw *hw, u32 rar, u32 vmdq); | ||
67 | s32 ixgbe_clear_vmdq_82599(struct ixgbe_hw *hw, u32 rar, u32 vmdq); | ||
68 | s32 ixgbe_set_vfta_82599(struct ixgbe_hw *hw, u32 vlan, | ||
69 | u32 vind, bool vlan_on); | ||
70 | s32 ixgbe_clear_vfta_82599(struct ixgbe_hw *hw); | ||
71 | s32 ixgbe_blink_led_stop_82599(struct ixgbe_hw *hw, u32 index); | ||
72 | s32 ixgbe_blink_led_start_82599(struct ixgbe_hw *hw, u32 index); | ||
73 | s32 ixgbe_init_uta_tables_82599(struct ixgbe_hw *hw); | ||
74 | s32 ixgbe_read_analog_reg8_82599(struct ixgbe_hw *hw, u32 reg, u8 *val); | ||
75 | s32 ixgbe_write_analog_reg8_82599(struct ixgbe_hw *hw, u32 reg, u8 val); | ||
76 | s32 ixgbe_start_hw_rev_0_82599(struct ixgbe_hw *hw); | ||
77 | s32 ixgbe_identify_phy_82599(struct ixgbe_hw *hw); | ||
78 | s32 ixgbe_start_hw_82599(struct ixgbe_hw *hw); | ||
79 | u32 ixgbe_get_supported_physical_layer_82599(struct ixgbe_hw *hw); | ||
80 | |||
81 | void ixgbe_init_mac_link_ops_82599(struct ixgbe_hw *hw) | ||
82 | { | ||
83 | struct ixgbe_mac_info *mac = &hw->mac; | ||
84 | if (hw->phy.multispeed_fiber) { | ||
85 | /* Set up dual speed SFP+ support */ | ||
86 | mac->ops.setup_link = | ||
87 | &ixgbe_setup_mac_link_multispeed_fiber; | ||
88 | mac->ops.setup_link_speed = | ||
89 | &ixgbe_setup_mac_link_speed_multispeed_fiber; | ||
90 | } else { | ||
91 | mac->ops.setup_link = | ||
92 | &ixgbe_setup_mac_link_82599; | ||
93 | mac->ops.setup_link_speed = | ||
94 | &ixgbe_setup_mac_link_speed_82599; | ||
95 | } | ||
96 | } | ||
97 | |||
98 | s32 ixgbe_setup_sfp_modules_82599(struct ixgbe_hw *hw) | ||
99 | { | ||
100 | s32 ret_val = 0; | ||
101 | u16 list_offset, data_offset, data_value; | ||
102 | |||
103 | if (hw->phy.sfp_type != ixgbe_sfp_type_unknown) { | ||
104 | ixgbe_init_mac_link_ops_82599(hw); | ||
105 | ret_val = ixgbe_get_sfp_init_sequence_offsets(hw, &list_offset, | ||
106 | &data_offset); | ||
107 | |||
108 | if (ret_val != 0) | ||
109 | goto setup_sfp_out; | ||
110 | |||
111 | hw->eeprom.ops.read(hw, ++data_offset, &data_value); | ||
112 | while (data_value != 0xffff) { | ||
113 | IXGBE_WRITE_REG(hw, IXGBE_CORECTL, data_value); | ||
114 | IXGBE_WRITE_FLUSH(hw); | ||
115 | hw->eeprom.ops.read(hw, ++data_offset, &data_value); | ||
116 | } | ||
117 | /* Now restart DSP */ | ||
118 | IXGBE_WRITE_REG(hw, IXGBE_CORECTL, 0x00000102); | ||
119 | IXGBE_WRITE_REG(hw, IXGBE_CORECTL, 0x00000b1d); | ||
120 | IXGBE_WRITE_FLUSH(hw); | ||
121 | } | ||
122 | |||
123 | setup_sfp_out: | ||
124 | return ret_val; | ||
125 | } | ||
126 | |||
127 | /** | ||
128 | * ixgbe_get_pcie_msix_count_82599 - Gets MSI-X vector count | ||
129 | * @hw: pointer to hardware structure | ||
130 | * | ||
131 | * Read PCIe configuration space, and get the MSI-X vector count from | ||
132 | * the capabilities table. | ||
133 | **/ | ||
134 | u32 ixgbe_get_pcie_msix_count_82599(struct ixgbe_hw *hw) | ||
135 | { | ||
136 | struct ixgbe_adapter *adapter = hw->back; | ||
137 | u16 msix_count; | ||
138 | pci_read_config_word(adapter->pdev, IXGBE_PCIE_MSIX_82599_CAPS, | ||
139 | &msix_count); | ||
140 | msix_count &= IXGBE_PCIE_MSIX_TBL_SZ_MASK; | ||
141 | |||
142 | /* MSI-X count is zero-based in HW, so increment to give proper value */ | ||
143 | msix_count++; | ||
144 | |||
145 | return msix_count; | ||
146 | } | ||
147 | |||
148 | static s32 ixgbe_get_invariants_82599(struct ixgbe_hw *hw) | ||
149 | { | ||
150 | struct ixgbe_mac_info *mac = &hw->mac; | ||
151 | struct ixgbe_phy_info *phy = &hw->phy; | ||
152 | s32 ret_val; | ||
153 | |||
154 | /* Set the bus information prior to PHY identification */ | ||
155 | mac->ops.get_bus_info(hw); | ||
156 | |||
157 | /* Call PHY identify routine to get the Cu or SFI phy type */ | ||
158 | ret_val = phy->ops.identify(hw); | ||
159 | |||
160 | if (ret_val == IXGBE_ERR_SFP_NOT_SUPPORTED) | ||
161 | goto get_invariants_out; | ||
162 | |||
163 | ixgbe_init_mac_link_ops_82599(hw); | ||
164 | |||
165 | /* Setup SFP module if there is one present. */ | ||
166 | ret_val = mac->ops.setup_sfp(hw); | ||
167 | |||
168 | /* If copper media, overwrite with copper function pointers */ | ||
169 | if (mac->ops.get_media_type(hw) == ixgbe_media_type_copper) { | ||
170 | mac->ops.setup_link = &ixgbe_setup_copper_link_82599; | ||
171 | mac->ops.setup_link_speed = | ||
172 | &ixgbe_setup_copper_link_speed_82599; | ||
173 | mac->ops.get_link_capabilities = | ||
174 | &ixgbe_get_copper_link_capabilities_82599; | ||
175 | } | ||
176 | |||
177 | /* PHY Init */ | ||
178 | switch (hw->phy.type) { | ||
179 | case ixgbe_phy_tn: | ||
180 | phy->ops.check_link = &ixgbe_check_phy_link_tnx; | ||
181 | phy->ops.get_firmware_version = | ||
182 | &ixgbe_get_phy_firmware_version_tnx; | ||
183 | break; | ||
184 | default: | ||
185 | break; | ||
186 | } | ||
187 | |||
188 | mac->mcft_size = IXGBE_82599_MC_TBL_SIZE; | ||
189 | mac->vft_size = IXGBE_82599_VFT_TBL_SIZE; | ||
190 | mac->num_rar_entries = IXGBE_82599_RAR_ENTRIES; | ||
191 | mac->max_rx_queues = IXGBE_82599_MAX_RX_QUEUES; | ||
192 | mac->max_tx_queues = IXGBE_82599_MAX_TX_QUEUES; | ||
193 | mac->max_msix_vectors = ixgbe_get_pcie_msix_count_82599(hw); | ||
194 | |||
195 | get_invariants_out: | ||
196 | return ret_val; | ||
197 | } | ||
198 | |||
199 | /** | ||
200 | * ixgbe_get_link_capabilities_82599 - Determines link capabilities | ||
201 | * @hw: pointer to hardware structure | ||
202 | * @speed: pointer to link speed | ||
203 | * @negotiation: true when autoneg or autotry is enabled | ||
204 | * | ||
205 | * Determines the link capabilities by reading the AUTOC register. | ||
206 | **/ | ||
207 | s32 ixgbe_get_link_capabilities_82599(struct ixgbe_hw *hw, | ||
208 | ixgbe_link_speed *speed, | ||
209 | bool *negotiation) | ||
210 | { | ||
211 | s32 status = 0; | ||
212 | |||
213 | switch (hw->mac.orig_autoc & IXGBE_AUTOC_LMS_MASK) { | ||
214 | case IXGBE_AUTOC_LMS_1G_LINK_NO_AN: | ||
215 | *speed = IXGBE_LINK_SPEED_1GB_FULL; | ||
216 | *negotiation = false; | ||
217 | break; | ||
218 | |||
219 | case IXGBE_AUTOC_LMS_10G_LINK_NO_AN: | ||
220 | *speed = IXGBE_LINK_SPEED_10GB_FULL; | ||
221 | *negotiation = false; | ||
222 | break; | ||
223 | |||
224 | case IXGBE_AUTOC_LMS_1G_AN: | ||
225 | *speed = IXGBE_LINK_SPEED_1GB_FULL; | ||
226 | *negotiation = true; | ||
227 | break; | ||
228 | |||
229 | case IXGBE_AUTOC_LMS_10G_SERIAL: | ||
230 | *speed = IXGBE_LINK_SPEED_10GB_FULL; | ||
231 | *negotiation = false; | ||
232 | break; | ||
233 | |||
234 | case IXGBE_AUTOC_LMS_KX4_KX_KR: | ||
235 | case IXGBE_AUTOC_LMS_KX4_KX_KR_1G_AN: | ||
236 | *speed = IXGBE_LINK_SPEED_UNKNOWN; | ||
237 | if (hw->mac.orig_autoc & IXGBE_AUTOC_KR_SUPP) | ||
238 | *speed |= IXGBE_LINK_SPEED_10GB_FULL; | ||
239 | if (hw->mac.orig_autoc & IXGBE_AUTOC_KX4_SUPP) | ||
240 | *speed |= IXGBE_LINK_SPEED_10GB_FULL; | ||
241 | if (hw->mac.orig_autoc & IXGBE_AUTOC_KX_SUPP) | ||
242 | *speed |= IXGBE_LINK_SPEED_1GB_FULL; | ||
243 | *negotiation = true; | ||
244 | break; | ||
245 | |||
246 | case IXGBE_AUTOC_LMS_KX4_KX_KR_SGMII: | ||
247 | *speed = IXGBE_LINK_SPEED_100_FULL; | ||
248 | if (hw->mac.orig_autoc & IXGBE_AUTOC_KR_SUPP) | ||
249 | *speed |= IXGBE_LINK_SPEED_10GB_FULL; | ||
250 | if (hw->mac.orig_autoc & IXGBE_AUTOC_KX4_SUPP) | ||
251 | *speed |= IXGBE_LINK_SPEED_10GB_FULL; | ||
252 | if (hw->mac.orig_autoc & IXGBE_AUTOC_KX_SUPP) | ||
253 | *speed |= IXGBE_LINK_SPEED_1GB_FULL; | ||
254 | *negotiation = true; | ||
255 | break; | ||
256 | |||
257 | case IXGBE_AUTOC_LMS_SGMII_1G_100M: | ||
258 | *speed = IXGBE_LINK_SPEED_1GB_FULL | IXGBE_LINK_SPEED_100_FULL; | ||
259 | *negotiation = false; | ||
260 | break; | ||
261 | |||
262 | default: | ||
263 | status = IXGBE_ERR_LINK_SETUP; | ||
264 | goto out; | ||
265 | break; | ||
266 | } | ||
267 | |||
268 | if (hw->phy.multispeed_fiber) { | ||
269 | *speed |= IXGBE_LINK_SPEED_10GB_FULL | | ||
270 | IXGBE_LINK_SPEED_1GB_FULL; | ||
271 | *negotiation = true; | ||
272 | } | ||
273 | |||
274 | out: | ||
275 | return status; | ||
276 | } | ||
277 | |||
278 | /** | ||
279 | * ixgbe_get_copper_link_capabilities_82599 - Determines link capabilities | ||
280 | * @hw: pointer to hardware structure | ||
281 | * @speed: pointer to link speed | ||
282 | * @autoneg: boolean auto-negotiation value | ||
283 | * | ||
284 | * Determines the link capabilities by reading the AUTOC register. | ||
285 | **/ | ||
286 | static s32 ixgbe_get_copper_link_capabilities_82599(struct ixgbe_hw *hw, | ||
287 | ixgbe_link_speed *speed, | ||
288 | bool *autoneg) | ||
289 | { | ||
290 | s32 status = IXGBE_ERR_LINK_SETUP; | ||
291 | u16 speed_ability; | ||
292 | |||
293 | *speed = 0; | ||
294 | *autoneg = true; | ||
295 | |||
296 | status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_SPEED_ABILITY, | ||
297 | IXGBE_MDIO_PMA_PMD_DEV_TYPE, | ||
298 | &speed_ability); | ||
299 | |||
300 | if (status == 0) { | ||
301 | if (speed_ability & IXGBE_MDIO_PHY_SPEED_10G) | ||
302 | *speed |= IXGBE_LINK_SPEED_10GB_FULL; | ||
303 | if (speed_ability & IXGBE_MDIO_PHY_SPEED_1G) | ||
304 | *speed |= IXGBE_LINK_SPEED_1GB_FULL; | ||
305 | } | ||
306 | |||
307 | return status; | ||
308 | } | ||
309 | |||
310 | /** | ||
311 | * ixgbe_get_media_type_82599 - Get media type | ||
312 | * @hw: pointer to hardware structure | ||
313 | * | ||
314 | * Returns the media type (fiber, copper, backplane) | ||
315 | **/ | ||
316 | enum ixgbe_media_type ixgbe_get_media_type_82599(struct ixgbe_hw *hw) | ||
317 | { | ||
318 | enum ixgbe_media_type media_type; | ||
319 | |||
320 | /* Detect if there is a copper PHY attached. */ | ||
321 | if (hw->phy.type == ixgbe_phy_cu_unknown || | ||
322 | hw->phy.type == ixgbe_phy_tn) { | ||
323 | media_type = ixgbe_media_type_copper; | ||
324 | goto out; | ||
325 | } | ||
326 | |||
327 | switch (hw->device_id) { | ||
328 | case IXGBE_DEV_ID_82599: | ||
329 | case IXGBE_DEV_ID_82599_KX4: | ||
330 | /* Default device ID is mezzanine card KX/KX4 */ | ||
331 | media_type = ixgbe_media_type_backplane; | ||
332 | break; | ||
333 | case IXGBE_DEV_ID_82599_SFP: | ||
334 | media_type = ixgbe_media_type_fiber; | ||
335 | break; | ||
336 | default: | ||
337 | media_type = ixgbe_media_type_unknown; | ||
338 | break; | ||
339 | } | ||
340 | out: | ||
341 | return media_type; | ||
342 | } | ||
343 | |||
344 | /** | ||
345 | * ixgbe_setup_mac_link_82599 - Setup MAC link settings | ||
346 | * @hw: pointer to hardware structure | ||
347 | * | ||
348 | * Configures link settings based on values in the ixgbe_hw struct. | ||
349 | * Restarts the link. Performs autonegotiation if needed. | ||
350 | **/ | ||
351 | s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw) | ||
352 | { | ||
353 | u32 autoc_reg; | ||
354 | u32 links_reg; | ||
355 | u32 i; | ||
356 | s32 status = 0; | ||
357 | |||
358 | /* Restart link */ | ||
359 | autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC); | ||
360 | autoc_reg |= IXGBE_AUTOC_AN_RESTART; | ||
361 | IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc_reg); | ||
362 | |||
363 | /* Only poll for autoneg to complete if specified to do so */ | ||
364 | if (hw->phy.autoneg_wait_to_complete) { | ||
365 | if ((autoc_reg & IXGBE_AUTOC_LMS_MASK) == | ||
366 | IXGBE_AUTOC_LMS_KX4_KX_KR || | ||
367 | (autoc_reg & IXGBE_AUTOC_LMS_MASK) == | ||
368 | IXGBE_AUTOC_LMS_KX4_KX_KR_1G_AN || | ||
369 | (autoc_reg & IXGBE_AUTOC_LMS_MASK) == | ||
370 | IXGBE_AUTOC_LMS_KX4_KX_KR_SGMII) { | ||
371 | links_reg = 0; /* Just in case Autoneg time = 0 */ | ||
372 | for (i = 0; i < IXGBE_AUTO_NEG_TIME; i++) { | ||
373 | links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS); | ||
374 | if (links_reg & IXGBE_LINKS_KX_AN_COMP) | ||
375 | break; | ||
376 | msleep(100); | ||
377 | } | ||
378 | if (!(links_reg & IXGBE_LINKS_KX_AN_COMP)) { | ||
379 | status = IXGBE_ERR_AUTONEG_NOT_COMPLETE; | ||
380 | hw_dbg(hw, "Autoneg did not complete.\n"); | ||
381 | } | ||
382 | } | ||
383 | } | ||
384 | |||
385 | /* Set up flow control */ | ||
386 | status = ixgbe_setup_fc_generic(hw, 0); | ||
387 | |||
388 | /* Add delay to filter out noises during initial link setup */ | ||
389 | msleep(50); | ||
390 | |||
391 | return status; | ||
392 | } | ||
393 | |||
394 | /** | ||
395 | * ixgbe_setup_mac_link_multispeed_fiber - Setup MAC link settings | ||
396 | * @hw: pointer to hardware structure | ||
397 | * | ||
398 | * Configures link settings based on values in the ixgbe_hw struct. | ||
399 | * Restarts the link for multi-speed fiber at 1G speed, if link | ||
400 | * fails at 10G. | ||
401 | * Performs autonegotiation if needed. | ||
402 | **/ | ||
403 | s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw) | ||
404 | { | ||
405 | s32 status = 0; | ||
406 | ixgbe_link_speed link_speed = IXGBE_LINK_SPEED_82599_AUTONEG; | ||
407 | status = ixgbe_setup_mac_link_speed_multispeed_fiber(hw, | ||
408 | link_speed, | ||
409 | true, true); | ||
410 | return status; | ||
411 | } | ||
412 | |||
413 | /** | ||
414 | * ixgbe_setup_mac_link_speed_multispeed_fiber - Set MAC link speed | ||
415 | * @hw: pointer to hardware structure | ||
416 | * @speed: new link speed | ||
417 | * @autoneg: true if autonegotiation enabled | ||
418 | * @autoneg_wait_to_complete: true when waiting for completion is needed | ||
419 | * | ||
420 | * Set the link speed in the AUTOC register and restarts link. | ||
421 | **/ | ||
422 | s32 ixgbe_setup_mac_link_speed_multispeed_fiber(struct ixgbe_hw *hw, | ||
423 | ixgbe_link_speed speed, | ||
424 | bool autoneg, | ||
425 | bool autoneg_wait_to_complete) | ||
426 | { | ||
427 | s32 status = 0; | ||
428 | ixgbe_link_speed phy_link_speed; | ||
429 | ixgbe_link_speed highest_link_speed = IXGBE_LINK_SPEED_UNKNOWN; | ||
430 | u32 speedcnt = 0; | ||
431 | u32 esdp_reg = IXGBE_READ_REG(hw, IXGBE_ESDP); | ||
432 | bool link_up = false; | ||
433 | bool negotiation; | ||
434 | |||
435 | /* Mask off requested but non-supported speeds */ | ||
436 | hw->mac.ops.get_link_capabilities(hw, &phy_link_speed, &negotiation); | ||
437 | speed &= phy_link_speed; | ||
438 | |||
439 | /* | ||
440 | * Try each speed one by one, highest priority first. We do this in | ||
441 | * software because 10gb fiber doesn't support speed autonegotiation. | ||
442 | */ | ||
443 | if (speed & IXGBE_LINK_SPEED_10GB_FULL) { | ||
444 | speedcnt++; | ||
445 | highest_link_speed = IXGBE_LINK_SPEED_10GB_FULL; | ||
446 | |||
447 | /* Set hardware SDP's */ | ||
448 | esdp_reg |= (IXGBE_ESDP_SDP5_DIR | IXGBE_ESDP_SDP5); | ||
449 | IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp_reg); | ||
450 | |||
451 | ixgbe_setup_mac_link_speed_82599(hw, | ||
452 | IXGBE_LINK_SPEED_10GB_FULL, | ||
453 | autoneg, | ||
454 | autoneg_wait_to_complete); | ||
455 | |||
456 | msleep(50); | ||
457 | |||
458 | /* If we have link, just jump out */ | ||
459 | hw->mac.ops.check_link(hw, &phy_link_speed, &link_up, false); | ||
460 | if (link_up) | ||
461 | goto out; | ||
462 | } | ||
463 | |||
464 | if (speed & IXGBE_LINK_SPEED_1GB_FULL) { | ||
465 | speedcnt++; | ||
466 | if (highest_link_speed == IXGBE_LINK_SPEED_UNKNOWN) | ||
467 | highest_link_speed = IXGBE_LINK_SPEED_1GB_FULL; | ||
468 | |||
469 | /* Set hardware SDP's */ | ||
470 | esdp_reg &= ~IXGBE_ESDP_SDP5; | ||
471 | esdp_reg |= IXGBE_ESDP_SDP5_DIR; | ||
472 | IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp_reg); | ||
473 | |||
474 | ixgbe_setup_mac_link_speed_82599( | ||
475 | hw, IXGBE_LINK_SPEED_1GB_FULL, autoneg, | ||
476 | autoneg_wait_to_complete); | ||
477 | |||
478 | msleep(50); | ||
479 | |||
480 | /* If we have link, just jump out */ | ||
481 | hw->mac.ops.check_link(hw, &phy_link_speed, &link_up, false); | ||
482 | if (link_up) | ||
483 | goto out; | ||
484 | } | ||
485 | |||
486 | /* | ||
487 | * We didn't get link. Configure back to the highest speed we tried, | ||
488 | * (if there was more than one). We call ourselves back with just the | ||
489 | * single highest speed that the user requested. | ||
490 | */ | ||
491 | if (speedcnt > 1) | ||
492 | status = ixgbe_setup_mac_link_speed_multispeed_fiber(hw, | ||
493 | highest_link_speed, | ||
494 | autoneg, | ||
495 | autoneg_wait_to_complete); | ||
496 | |||
497 | out: | ||
498 | return status; | ||
499 | } | ||
500 | |||
501 | /** | ||
502 | * ixgbe_check_mac_link_82599 - Determine link and speed status | ||
503 | * @hw: pointer to hardware structure | ||
504 | * @speed: pointer to link speed | ||
505 | * @link_up: true when link is up | ||
506 | * @link_up_wait_to_complete: bool used to wait for link up or not | ||
507 | * | ||
508 | * Reads the links register to determine if link is up and the current speed | ||
509 | **/ | ||
510 | s32 ixgbe_check_mac_link_82599(struct ixgbe_hw *hw, ixgbe_link_speed *speed, | ||
511 | bool *link_up, bool link_up_wait_to_complete) | ||
512 | { | ||
513 | u32 links_reg; | ||
514 | u32 i; | ||
515 | |||
516 | links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS); | ||
517 | if (link_up_wait_to_complete) { | ||
518 | for (i = 0; i < IXGBE_LINK_UP_TIME; i++) { | ||
519 | if (links_reg & IXGBE_LINKS_UP) { | ||
520 | *link_up = true; | ||
521 | break; | ||
522 | } else { | ||
523 | *link_up = false; | ||
524 | } | ||
525 | msleep(100); | ||
526 | links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS); | ||
527 | } | ||
528 | } else { | ||
529 | if (links_reg & IXGBE_LINKS_UP) | ||
530 | *link_up = true; | ||
531 | else | ||
532 | *link_up = false; | ||
533 | } | ||
534 | |||
535 | if ((links_reg & IXGBE_LINKS_SPEED_82599) == | ||
536 | IXGBE_LINKS_SPEED_10G_82599) | ||
537 | *speed = IXGBE_LINK_SPEED_10GB_FULL; | ||
538 | else if ((links_reg & IXGBE_LINKS_SPEED_82599) == | ||
539 | IXGBE_LINKS_SPEED_1G_82599) | ||
540 | *speed = IXGBE_LINK_SPEED_1GB_FULL; | ||
541 | else | ||
542 | *speed = IXGBE_LINK_SPEED_100_FULL; | ||
543 | |||
544 | |||
545 | return 0; | ||
546 | } | ||
547 | |||
548 | /** | ||
549 | * ixgbe_setup_mac_link_speed_82599 - Set MAC link speed | ||
550 | * @hw: pointer to hardware structure | ||
551 | * @speed: new link speed | ||
552 | * @autoneg: true if autonegotiation enabled | ||
553 | * @autoneg_wait_to_complete: true when waiting for completion is needed | ||
554 | * | ||
555 | * Set the link speed in the AUTOC register and restarts link. | ||
556 | **/ | ||
557 | s32 ixgbe_setup_mac_link_speed_82599(struct ixgbe_hw *hw, | ||
558 | ixgbe_link_speed speed, bool autoneg, | ||
559 | bool autoneg_wait_to_complete) | ||
560 | { | ||
561 | s32 status = 0; | ||
562 | u32 autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC); | ||
563 | u32 autoc2 = IXGBE_READ_REG(hw, IXGBE_AUTOC2); | ||
564 | u32 link_mode = autoc & IXGBE_AUTOC_LMS_MASK; | ||
565 | u32 pma_pmd_1g = autoc & IXGBE_AUTOC_1G_PMA_PMD_MASK; | ||
566 | u32 pma_pmd_10g_serial = autoc2 & IXGBE_AUTOC2_10G_SERIAL_PMA_PMD_MASK; | ||
567 | u32 links_reg; | ||
568 | u32 i; | ||
569 | ixgbe_link_speed link_capabilities = IXGBE_LINK_SPEED_UNKNOWN; | ||
570 | |||
571 | /* Check to see if speed passed in is supported. */ | ||
572 | hw->mac.ops.get_link_capabilities(hw, &link_capabilities, &autoneg); | ||
573 | speed &= link_capabilities; | ||
574 | |||
575 | if (speed == IXGBE_LINK_SPEED_UNKNOWN) { | ||
576 | status = IXGBE_ERR_LINK_SETUP; | ||
577 | } else if (link_mode == IXGBE_AUTOC_LMS_KX4_KX_KR || | ||
578 | link_mode == IXGBE_AUTOC_LMS_KX4_KX_KR_1G_AN || | ||
579 | link_mode == IXGBE_AUTOC_LMS_KX4_KX_KR_SGMII) { | ||
580 | /* Set KX4/KX/KR support according to speed requested */ | ||
581 | autoc &= ~(IXGBE_AUTOC_KX4_KX_SUPP_MASK | IXGBE_AUTOC_KR_SUPP); | ||
582 | if (speed & IXGBE_LINK_SPEED_10GB_FULL) | ||
583 | if (hw->mac.orig_autoc & IXGBE_AUTOC_KX4_SUPP) | ||
584 | autoc |= IXGBE_AUTOC_KX4_SUPP; | ||
585 | if (hw->mac.orig_autoc & IXGBE_AUTOC_KR_SUPP) | ||
586 | autoc |= IXGBE_AUTOC_KR_SUPP; | ||
587 | if (speed & IXGBE_LINK_SPEED_1GB_FULL) | ||
588 | autoc |= IXGBE_AUTOC_KX_SUPP; | ||
589 | } else if ((pma_pmd_1g == IXGBE_AUTOC_1G_SFI) && | ||
590 | (link_mode == IXGBE_AUTOC_LMS_1G_LINK_NO_AN || | ||
591 | link_mode == IXGBE_AUTOC_LMS_1G_AN)) { | ||
592 | /* Switch from 1G SFI to 10G SFI if requested */ | ||
593 | if ((speed == IXGBE_LINK_SPEED_10GB_FULL) && | ||
594 | (pma_pmd_10g_serial == IXGBE_AUTOC2_10G_SFI)) { | ||
595 | autoc &= ~IXGBE_AUTOC_LMS_MASK; | ||
596 | autoc |= IXGBE_AUTOC_LMS_10G_SERIAL; | ||
597 | } | ||
598 | } else if ((pma_pmd_10g_serial == IXGBE_AUTOC2_10G_SFI) && | ||
599 | (link_mode == IXGBE_AUTOC_LMS_10G_SERIAL)) { | ||
600 | /* Switch from 10G SFI to 1G SFI if requested */ | ||
601 | if ((speed == IXGBE_LINK_SPEED_1GB_FULL) && | ||
602 | (pma_pmd_1g == IXGBE_AUTOC_1G_SFI)) { | ||
603 | autoc &= ~IXGBE_AUTOC_LMS_MASK; | ||
604 | if (autoneg) | ||
605 | autoc |= IXGBE_AUTOC_LMS_1G_AN; | ||
606 | else | ||
607 | autoc |= IXGBE_AUTOC_LMS_1G_LINK_NO_AN; | ||
608 | } | ||
609 | } | ||
610 | |||
611 | if (status == 0) { | ||
612 | /* Restart link */ | ||
613 | autoc |= IXGBE_AUTOC_AN_RESTART; | ||
614 | IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc); | ||
615 | |||
616 | /* Only poll for autoneg to complete if specified to do so */ | ||
617 | if (autoneg_wait_to_complete) { | ||
618 | if (link_mode == IXGBE_AUTOC_LMS_KX4_KX_KR || | ||
619 | link_mode == IXGBE_AUTOC_LMS_KX4_KX_KR_1G_AN || | ||
620 | link_mode == IXGBE_AUTOC_LMS_KX4_KX_KR_SGMII) { | ||
621 | links_reg = 0; /*Just in case Autoneg time=0*/ | ||
622 | for (i = 0; i < IXGBE_AUTO_NEG_TIME; i++) { | ||
623 | links_reg = | ||
624 | IXGBE_READ_REG(hw, IXGBE_LINKS); | ||
625 | if (links_reg & IXGBE_LINKS_KX_AN_COMP) | ||
626 | break; | ||
627 | msleep(100); | ||
628 | } | ||
629 | if (!(links_reg & IXGBE_LINKS_KX_AN_COMP)) { | ||
630 | status = | ||
631 | IXGBE_ERR_AUTONEG_NOT_COMPLETE; | ||
632 | hw_dbg(hw, "Autoneg did not " | ||
633 | "complete.\n"); | ||
634 | } | ||
635 | } | ||
636 | } | ||
637 | |||
638 | /* Set up flow control */ | ||
639 | status = ixgbe_setup_fc_generic(hw, 0); | ||
640 | |||
641 | /* Add delay to filter out noises during initial link setup */ | ||
642 | msleep(50); | ||
643 | } | ||
644 | |||
645 | return status; | ||
646 | } | ||
647 | |||
648 | /** | ||
649 | * ixgbe_setup_copper_link_82599 - Setup copper link settings | ||
650 | * @hw: pointer to hardware structure | ||
651 | * | ||
652 | * Restarts the link on PHY and then MAC. Performs autonegotiation if needed. | ||
653 | **/ | ||
654 | static s32 ixgbe_setup_copper_link_82599(struct ixgbe_hw *hw) | ||
655 | { | ||
656 | s32 status; | ||
657 | |||
658 | /* Restart autonegotiation on PHY */ | ||
659 | status = hw->phy.ops.setup_link(hw); | ||
660 | |||
661 | /* Set up MAC */ | ||
662 | ixgbe_setup_mac_link_82599(hw); | ||
663 | |||
664 | return status; | ||
665 | } | ||
666 | |||
667 | /** | ||
668 | * ixgbe_setup_copper_link_speed_82599 - Set the PHY autoneg advertised field | ||
669 | * @hw: pointer to hardware structure | ||
670 | * @speed: new link speed | ||
671 | * @autoneg: true if autonegotiation enabled | ||
672 | * @autoneg_wait_to_complete: true if waiting is needed to complete | ||
673 | * | ||
674 | * Restarts link on PHY and MAC based on settings passed in. | ||
675 | **/ | ||
676 | static s32 ixgbe_setup_copper_link_speed_82599(struct ixgbe_hw *hw, | ||
677 | ixgbe_link_speed speed, | ||
678 | bool autoneg, | ||
679 | bool autoneg_wait_to_complete) | ||
680 | { | ||
681 | s32 status; | ||
682 | |||
683 | /* Setup the PHY according to input speed */ | ||
684 | status = hw->phy.ops.setup_link_speed(hw, speed, autoneg, | ||
685 | autoneg_wait_to_complete); | ||
686 | /* Set up MAC */ | ||
687 | ixgbe_setup_mac_link_82599(hw); | ||
688 | |||
689 | return status; | ||
690 | } | ||
691 | |||
692 | /** | ||
693 | * ixgbe_reset_hw_82599 - Perform hardware reset | ||
694 | * @hw: pointer to hardware structure | ||
695 | * | ||
696 | * Resets the hardware by resetting the transmit and receive units, masks | ||
697 | * and clears all interrupts, perform a PHY reset, and perform a link (MAC) | ||
698 | * reset. | ||
699 | **/ | ||
700 | s32 ixgbe_reset_hw_82599(struct ixgbe_hw *hw) | ||
701 | { | ||
702 | s32 status = 0; | ||
703 | u32 ctrl, ctrl_ext; | ||
704 | u32 i; | ||
705 | u32 autoc; | ||
706 | u32 autoc2; | ||
707 | |||
708 | /* Call adapter stop to disable tx/rx and clear interrupts */ | ||
709 | hw->mac.ops.stop_adapter(hw); | ||
710 | |||
711 | /* Reset PHY */ | ||
712 | hw->phy.ops.reset(hw); | ||
713 | |||
714 | /* | ||
715 | * Prevent the PCI-E bus from from hanging by disabling PCI-E master | ||
716 | * access and verify no pending requests before reset | ||
717 | */ | ||
718 | if (ixgbe_disable_pcie_master(hw) != 0) { | ||
719 | status = IXGBE_ERR_MASTER_REQUESTS_PENDING; | ||
720 | hw_dbg(hw, "PCI-E Master disable polling has failed.\n"); | ||
721 | } | ||
722 | |||
723 | /* | ||
724 | * Issue global reset to the MAC. This needs to be a SW reset. | ||
725 | * If link reset is used, it might reset the MAC when mng is using it | ||
726 | */ | ||
727 | ctrl = IXGBE_READ_REG(hw, IXGBE_CTRL); | ||
728 | IXGBE_WRITE_REG(hw, IXGBE_CTRL, (ctrl | IXGBE_CTRL_RST)); | ||
729 | IXGBE_WRITE_FLUSH(hw); | ||
730 | |||
731 | /* Poll for reset bit to self-clear indicating reset is complete */ | ||
732 | for (i = 0; i < 10; i++) { | ||
733 | udelay(1); | ||
734 | ctrl = IXGBE_READ_REG(hw, IXGBE_CTRL); | ||
735 | if (!(ctrl & IXGBE_CTRL_RST)) | ||
736 | break; | ||
737 | } | ||
738 | if (ctrl & IXGBE_CTRL_RST) { | ||
739 | status = IXGBE_ERR_RESET_FAILED; | ||
740 | hw_dbg(hw, "Reset polling failed to complete.\n"); | ||
741 | } | ||
742 | /* Clear PF Reset Done bit so PF/VF Mail Ops can work */ | ||
743 | ctrl_ext = IXGBE_READ_REG(hw, IXGBE_CTRL_EXT); | ||
744 | ctrl_ext |= IXGBE_CTRL_EXT_PFRSTD; | ||
745 | IXGBE_WRITE_REG(hw, IXGBE_CTRL_EXT, ctrl_ext); | ||
746 | |||
747 | msleep(50); | ||
748 | |||
749 | |||
750 | |||
751 | /* | ||
752 | * Store the original AUTOC/AUTOC2 values if they have not been | ||
753 | * stored off yet. Otherwise restore the stored original | ||
754 | * values since the reset operation sets back to defaults. | ||
755 | */ | ||
756 | autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC); | ||
757 | autoc2 = IXGBE_READ_REG(hw, IXGBE_AUTOC2); | ||
758 | if (hw->mac.orig_link_settings_stored == false) { | ||
759 | hw->mac.orig_autoc = autoc; | ||
760 | hw->mac.orig_autoc2 = autoc2; | ||
761 | hw->mac.orig_link_settings_stored = true; | ||
762 | } else { | ||
763 | if (autoc != hw->mac.orig_autoc) | ||
764 | IXGBE_WRITE_REG(hw, IXGBE_AUTOC, (hw->mac.orig_autoc | | ||
765 | IXGBE_AUTOC_AN_RESTART)); | ||
766 | |||
767 | if ((autoc2 & IXGBE_AUTOC2_UPPER_MASK) != | ||
768 | (hw->mac.orig_autoc2 & IXGBE_AUTOC2_UPPER_MASK)) { | ||
769 | autoc2 &= ~IXGBE_AUTOC2_UPPER_MASK; | ||
770 | autoc2 |= (hw->mac.orig_autoc2 & | ||
771 | IXGBE_AUTOC2_UPPER_MASK); | ||
772 | IXGBE_WRITE_REG(hw, IXGBE_AUTOC2, autoc2); | ||
773 | } | ||
774 | } | ||
775 | |||
776 | /* Store the permanent mac address */ | ||
777 | hw->mac.ops.get_mac_addr(hw, hw->mac.perm_addr); | ||
778 | |||
779 | return status; | ||
780 | } | ||
781 | |||
782 | /** | ||
783 | * ixgbe_clear_vmdq_82599 - Disassociate a VMDq pool index from a rx address | ||
784 | * @hw: pointer to hardware struct | ||
785 | * @rar: receive address register index to disassociate | ||
786 | * @vmdq: VMDq pool index to remove from the rar | ||
787 | **/ | ||
788 | s32 ixgbe_clear_vmdq_82599(struct ixgbe_hw *hw, u32 rar, u32 vmdq) | ||
789 | { | ||
790 | u32 mpsar_lo, mpsar_hi; | ||
791 | u32 rar_entries = hw->mac.num_rar_entries; | ||
792 | |||
793 | if (rar < rar_entries) { | ||
794 | mpsar_lo = IXGBE_READ_REG(hw, IXGBE_MPSAR_LO(rar)); | ||
795 | mpsar_hi = IXGBE_READ_REG(hw, IXGBE_MPSAR_HI(rar)); | ||
796 | |||
797 | if (!mpsar_lo && !mpsar_hi) | ||
798 | goto done; | ||
799 | |||
800 | if (vmdq == IXGBE_CLEAR_VMDQ_ALL) { | ||
801 | if (mpsar_lo) { | ||
802 | IXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), 0); | ||
803 | mpsar_lo = 0; | ||
804 | } | ||
805 | if (mpsar_hi) { | ||
806 | IXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), 0); | ||
807 | mpsar_hi = 0; | ||
808 | } | ||
809 | } else if (vmdq < 32) { | ||
810 | mpsar_lo &= ~(1 << vmdq); | ||
811 | IXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), mpsar_lo); | ||
812 | } else { | ||
813 | mpsar_hi &= ~(1 << (vmdq - 32)); | ||
814 | IXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), mpsar_hi); | ||
815 | } | ||
816 | |||
817 | /* was that the last pool using this rar? */ | ||
818 | if (mpsar_lo == 0 && mpsar_hi == 0 && rar != 0) | ||
819 | hw->mac.ops.clear_rar(hw, rar); | ||
820 | } else { | ||
821 | hw_dbg(hw, "RAR index %d is out of range.\n", rar); | ||
822 | } | ||
823 | |||
824 | done: | ||
825 | return 0; | ||
826 | } | ||
827 | |||
828 | /** | ||
829 | * ixgbe_set_vmdq_82599 - Associate a VMDq pool index with a rx address | ||
830 | * @hw: pointer to hardware struct | ||
831 | * @rar: receive address register index to associate with a VMDq index | ||
832 | * @vmdq: VMDq pool index | ||
833 | **/ | ||
834 | s32 ixgbe_set_vmdq_82599(struct ixgbe_hw *hw, u32 rar, u32 vmdq) | ||
835 | { | ||
836 | u32 mpsar; | ||
837 | u32 rar_entries = hw->mac.num_rar_entries; | ||
838 | |||
839 | if (rar < rar_entries) { | ||
840 | if (vmdq < 32) { | ||
841 | mpsar = IXGBE_READ_REG(hw, IXGBE_MPSAR_LO(rar)); | ||
842 | mpsar |= 1 << vmdq; | ||
843 | IXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), mpsar); | ||
844 | } else { | ||
845 | mpsar = IXGBE_READ_REG(hw, IXGBE_MPSAR_HI(rar)); | ||
846 | mpsar |= 1 << (vmdq - 32); | ||
847 | IXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), mpsar); | ||
848 | } | ||
849 | } else { | ||
850 | hw_dbg(hw, "RAR index %d is out of range.\n", rar); | ||
851 | } | ||
852 | return 0; | ||
853 | } | ||
854 | |||
855 | /** | ||
856 | * ixgbe_set_vfta_82599 - Set VLAN filter table | ||
857 | * @hw: pointer to hardware structure | ||
858 | * @vlan: VLAN id to write to VLAN filter | ||
859 | * @vind: VMDq output index that maps queue to VLAN id in VFVFB | ||
860 | * @vlan_on: boolean flag to turn on/off VLAN in VFVF | ||
861 | * | ||
862 | * Turn on/off specified VLAN in the VLAN filter table. | ||
863 | **/ | ||
864 | s32 ixgbe_set_vfta_82599(struct ixgbe_hw *hw, u32 vlan, u32 vind, | ||
865 | bool vlan_on) | ||
866 | { | ||
867 | u32 regindex; | ||
868 | u32 bitindex; | ||
869 | u32 bits; | ||
870 | u32 first_empty_slot; | ||
871 | |||
872 | if (vlan > 4095) | ||
873 | return IXGBE_ERR_PARAM; | ||
874 | |||
875 | /* | ||
876 | * this is a 2 part operation - first the VFTA, then the | ||
877 | * VLVF and VLVFB if vind is set | ||
878 | */ | ||
879 | |||
880 | /* Part 1 | ||
881 | * The VFTA is a bitstring made up of 128 32-bit registers | ||
882 | * that enable the particular VLAN id, much like the MTA: | ||
883 | * bits[11-5]: which register | ||
884 | * bits[4-0]: which bit in the register | ||
885 | */ | ||
886 | regindex = (vlan >> 5) & 0x7F; | ||
887 | bitindex = vlan & 0x1F; | ||
888 | bits = IXGBE_READ_REG(hw, IXGBE_VFTA(regindex)); | ||
889 | if (vlan_on) | ||
890 | bits |= (1 << bitindex); | ||
891 | else | ||
892 | bits &= ~(1 << bitindex); | ||
893 | IXGBE_WRITE_REG(hw, IXGBE_VFTA(regindex), bits); | ||
894 | |||
895 | |||
896 | /* Part 2 | ||
897 | * If the vind is set | ||
898 | * Either vlan_on | ||
899 | * make sure the vlan is in VLVF | ||
900 | * set the vind bit in the matching VLVFB | ||
901 | * Or !vlan_on | ||
902 | * clear the pool bit and possibly the vind | ||
903 | */ | ||
904 | if (vind) { | ||
905 | /* find the vlanid or the first empty slot */ | ||
906 | first_empty_slot = 0; | ||
907 | |||
908 | for (regindex = 1; regindex < IXGBE_VLVF_ENTRIES; regindex++) { | ||
909 | bits = IXGBE_READ_REG(hw, IXGBE_VLVF(regindex)); | ||
910 | if (!bits && !first_empty_slot) | ||
911 | first_empty_slot = regindex; | ||
912 | else if ((bits & 0x0FFF) == vlan) | ||
913 | break; | ||
914 | } | ||
915 | |||
916 | if (regindex >= IXGBE_VLVF_ENTRIES) { | ||
917 | if (first_empty_slot) | ||
918 | regindex = first_empty_slot; | ||
919 | else { | ||
920 | hw_dbg(hw, "No space in VLVF.\n"); | ||
921 | goto out; | ||
922 | } | ||
923 | } | ||
924 | |||
925 | if (vlan_on) { | ||
926 | /* set the pool bit */ | ||
927 | if (vind < 32) { | ||
928 | bits = IXGBE_READ_REG(hw, | ||
929 | IXGBE_VLVFB(regindex * 2)); | ||
930 | bits |= (1 << vind); | ||
931 | IXGBE_WRITE_REG(hw, | ||
932 | IXGBE_VLVFB(regindex * 2), bits); | ||
933 | } else { | ||
934 | bits = IXGBE_READ_REG(hw, | ||
935 | IXGBE_VLVFB((regindex * 2) + 1)); | ||
936 | bits |= (1 << vind); | ||
937 | IXGBE_WRITE_REG(hw, | ||
938 | IXGBE_VLVFB((regindex * 2) + 1), bits); | ||
939 | } | ||
940 | } else { | ||
941 | /* clear the pool bit */ | ||
942 | if (vind < 32) { | ||
943 | bits = IXGBE_READ_REG(hw, | ||
944 | IXGBE_VLVFB(regindex * 2)); | ||
945 | bits &= ~(1 << vind); | ||
946 | IXGBE_WRITE_REG(hw, | ||
947 | IXGBE_VLVFB(regindex * 2), bits); | ||
948 | bits |= IXGBE_READ_REG(hw, | ||
949 | IXGBE_VLVFB((regindex * 2) + 1)); | ||
950 | } else { | ||
951 | bits = IXGBE_READ_REG(hw, | ||
952 | IXGBE_VLVFB((regindex * 2) + 1)); | ||
953 | bits &= ~(1 << vind); | ||
954 | IXGBE_WRITE_REG(hw, | ||
955 | IXGBE_VLVFB((regindex * 2) + 1), bits); | ||
956 | bits |= IXGBE_READ_REG(hw, | ||
957 | IXGBE_VLVFB(regindex * 2)); | ||
958 | } | ||
959 | } | ||
960 | |||
961 | if (bits) | ||
962 | IXGBE_WRITE_REG(hw, IXGBE_VLVF(regindex), | ||
963 | (IXGBE_VLVF_VIEN | vlan)); | ||
964 | else | ||
965 | IXGBE_WRITE_REG(hw, IXGBE_VLVF(regindex), 0); | ||
966 | } | ||
967 | |||
968 | out: | ||
969 | return 0; | ||
970 | } | ||
971 | |||
972 | /** | ||
973 | * ixgbe_clear_vfta_82599 - Clear VLAN filter table | ||
974 | * @hw: pointer to hardware structure | ||
975 | * | ||
976 | * Clears the VLAN filer table, and the VMDq index associated with the filter | ||
977 | **/ | ||
978 | s32 ixgbe_clear_vfta_82599(struct ixgbe_hw *hw) | ||
979 | { | ||
980 | u32 offset; | ||
981 | |||
982 | for (offset = 0; offset < hw->mac.vft_size; offset++) | ||
983 | IXGBE_WRITE_REG(hw, IXGBE_VFTA(offset), 0); | ||
984 | |||
985 | for (offset = 0; offset < IXGBE_VLVF_ENTRIES; offset++) { | ||
986 | IXGBE_WRITE_REG(hw, IXGBE_VLVF(offset), 0); | ||
987 | IXGBE_WRITE_REG(hw, IXGBE_VLVFB(offset * 2), 0); | ||
988 | IXGBE_WRITE_REG(hw, IXGBE_VLVFB((offset * 2) + 1), 0); | ||
989 | } | ||
990 | |||
991 | return 0; | ||
992 | } | ||
993 | |||
994 | /** | ||
995 | * ixgbe_blink_led_start_82599 - Blink LED based on index. | ||
996 | * @hw: pointer to hardware structure | ||
997 | * @index: led number to blink | ||
998 | **/ | ||
999 | s32 ixgbe_blink_led_start_82599(struct ixgbe_hw *hw, u32 index) | ||
1000 | { | ||
1001 | u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL); | ||
1002 | |||
1003 | led_reg &= ~IXGBE_LED_MODE_MASK(index); | ||
1004 | led_reg |= IXGBE_LED_BLINK(index); | ||
1005 | IXGBE_WRITE_REG(hw, IXGBE_LEDCTL, led_reg); | ||
1006 | IXGBE_WRITE_FLUSH(hw); | ||
1007 | |||
1008 | return 0; | ||
1009 | } | ||
1010 | |||
1011 | /** | ||
1012 | * ixgbe_blink_led_stop_82599 - Stop blinking LED based on index. | ||
1013 | * @hw: pointer to hardware structure | ||
1014 | * @index: led number to stop blinking | ||
1015 | **/ | ||
1016 | s32 ixgbe_blink_led_stop_82599(struct ixgbe_hw *hw, u32 index) | ||
1017 | { | ||
1018 | u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL); | ||
1019 | |||
1020 | led_reg &= ~IXGBE_LED_MODE_MASK(index); | ||
1021 | led_reg &= ~IXGBE_LED_BLINK(index); | ||
1022 | IXGBE_WRITE_REG(hw, IXGBE_LEDCTL, led_reg); | ||
1023 | IXGBE_WRITE_FLUSH(hw); | ||
1024 | |||
1025 | return 0; | ||
1026 | } | ||
1027 | |||
1028 | /** | ||
1029 | * ixgbe_init_uta_tables_82599 - Initialize the Unicast Table Array | ||
1030 | * @hw: pointer to hardware structure | ||
1031 | **/ | ||
1032 | s32 ixgbe_init_uta_tables_82599(struct ixgbe_hw *hw) | ||
1033 | { | ||
1034 | int i; | ||
1035 | hw_dbg(hw, " Clearing UTA\n"); | ||
1036 | |||
1037 | for (i = 0; i < 128; i++) | ||
1038 | IXGBE_WRITE_REG(hw, IXGBE_UTA(i), 0); | ||
1039 | |||
1040 | return 0; | ||
1041 | } | ||
1042 | |||
1043 | /** | ||
1044 | * ixgbe_read_analog_reg8_82599 - Reads 8 bit Omer analog register | ||
1045 | * @hw: pointer to hardware structure | ||
1046 | * @reg: analog register to read | ||
1047 | * @val: read value | ||
1048 | * | ||
1049 | * Performs read operation to Omer analog register specified. | ||
1050 | **/ | ||
1051 | s32 ixgbe_read_analog_reg8_82599(struct ixgbe_hw *hw, u32 reg, u8 *val) | ||
1052 | { | ||
1053 | u32 core_ctl; | ||
1054 | |||
1055 | IXGBE_WRITE_REG(hw, IXGBE_CORECTL, IXGBE_CORECTL_WRITE_CMD | | ||
1056 | (reg << 8)); | ||
1057 | IXGBE_WRITE_FLUSH(hw); | ||
1058 | udelay(10); | ||
1059 | core_ctl = IXGBE_READ_REG(hw, IXGBE_CORECTL); | ||
1060 | *val = (u8)core_ctl; | ||
1061 | |||
1062 | return 0; | ||
1063 | } | ||
1064 | |||
1065 | /** | ||
1066 | * ixgbe_write_analog_reg8_82599 - Writes 8 bit Omer analog register | ||
1067 | * @hw: pointer to hardware structure | ||
1068 | * @reg: atlas register to write | ||
1069 | * @val: value to write | ||
1070 | * | ||
1071 | * Performs write operation to Omer analog register specified. | ||
1072 | **/ | ||
1073 | s32 ixgbe_write_analog_reg8_82599(struct ixgbe_hw *hw, u32 reg, u8 val) | ||
1074 | { | ||
1075 | u32 core_ctl; | ||
1076 | |||
1077 | core_ctl = (reg << 8) | val; | ||
1078 | IXGBE_WRITE_REG(hw, IXGBE_CORECTL, core_ctl); | ||
1079 | IXGBE_WRITE_FLUSH(hw); | ||
1080 | udelay(10); | ||
1081 | |||
1082 | return 0; | ||
1083 | } | ||
1084 | |||
1085 | /** | ||
1086 | * ixgbe_start_hw_82599 - Prepare hardware for Tx/Rx | ||
1087 | * @hw: pointer to hardware structure | ||
1088 | * | ||
1089 | * Starts the hardware using the generic start_hw function. | ||
1090 | * Then performs device-specific: | ||
1091 | * Clears the rate limiter registers. | ||
1092 | **/ | ||
1093 | s32 ixgbe_start_hw_82599(struct ixgbe_hw *hw) | ||
1094 | { | ||
1095 | u32 q_num; | ||
1096 | |||
1097 | ixgbe_start_hw_generic(hw); | ||
1098 | |||
1099 | /* Clear the rate limiters */ | ||
1100 | for (q_num = 0; q_num < hw->mac.max_tx_queues; q_num++) { | ||
1101 | IXGBE_WRITE_REG(hw, IXGBE_RTTDQSEL, q_num); | ||
1102 | IXGBE_WRITE_REG(hw, IXGBE_RTTBCNRC, 0); | ||
1103 | } | ||
1104 | IXGBE_WRITE_FLUSH(hw); | ||
1105 | |||
1106 | return 0; | ||
1107 | } | ||
1108 | |||
1109 | /** | ||
1110 | * ixgbe_identify_phy_82599 - Get physical layer module | ||
1111 | * @hw: pointer to hardware structure | ||
1112 | * | ||
1113 | * Determines the physical layer module found on the current adapter. | ||
1114 | **/ | ||
1115 | s32 ixgbe_identify_phy_82599(struct ixgbe_hw *hw) | ||
1116 | { | ||
1117 | s32 status = IXGBE_ERR_PHY_ADDR_INVALID; | ||
1118 | status = ixgbe_identify_phy_generic(hw); | ||
1119 | if (status != 0) | ||
1120 | status = ixgbe_identify_sfp_module_generic(hw); | ||
1121 | return status; | ||
1122 | } | ||
1123 | |||
1124 | /** | ||
1125 | * ixgbe_get_supported_physical_layer_82599 - Returns physical layer type | ||
1126 | * @hw: pointer to hardware structure | ||
1127 | * | ||
1128 | * Determines physical layer capabilities of the current configuration. | ||
1129 | **/ | ||
1130 | u32 ixgbe_get_supported_physical_layer_82599(struct ixgbe_hw *hw) | ||
1131 | { | ||
1132 | u32 physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN; | ||
1133 | |||
1134 | switch (hw->device_id) { | ||
1135 | case IXGBE_DEV_ID_82599: | ||
1136 | case IXGBE_DEV_ID_82599_KX4: | ||
1137 | /* Default device ID is mezzanine card KX/KX4 */ | ||
1138 | physical_layer = (IXGBE_PHYSICAL_LAYER_10GBASE_KX4 | | ||
1139 | IXGBE_PHYSICAL_LAYER_1000BASE_KX); | ||
1140 | break; | ||
1141 | case IXGBE_DEV_ID_82599_SFP: | ||
1142 | hw->phy.ops.identify_sfp(hw); | ||
1143 | |||
1144 | switch (hw->phy.sfp_type) { | ||
1145 | case ixgbe_sfp_type_da_cu: | ||
1146 | physical_layer = IXGBE_PHYSICAL_LAYER_SFP_PLUS_CU; | ||
1147 | break; | ||
1148 | case ixgbe_sfp_type_sr: | ||
1149 | physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_SR; | ||
1150 | break; | ||
1151 | case ixgbe_sfp_type_lr: | ||
1152 | physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_LR; | ||
1153 | break; | ||
1154 | default: | ||
1155 | physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN; | ||
1156 | break; | ||
1157 | } | ||
1158 | break; | ||
1159 | default: | ||
1160 | physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN; | ||
1161 | break; | ||
1162 | } | ||
1163 | |||
1164 | return physical_layer; | ||
1165 | } | ||
1166 | |||
1167 | /** | ||
1168 | * ixgbe_enable_rx_dma_82599 - Enable the Rx DMA unit on 82599 | ||
1169 | * @hw: pointer to hardware structure | ||
1170 | * @regval: register value to write to RXCTRL | ||
1171 | * | ||
1172 | * Enables the Rx DMA unit for 82599 | ||
1173 | **/ | ||
1174 | s32 ixgbe_enable_rx_dma_82599(struct ixgbe_hw *hw, u32 regval) | ||
1175 | { | ||
1176 | #define IXGBE_MAX_SECRX_POLL 30 | ||
1177 | int i; | ||
1178 | int secrxreg; | ||
1179 | |||
1180 | /* | ||
1181 | * Workaround for 82599 silicon errata when enabling the Rx datapath. | ||
1182 | * If traffic is incoming before we enable the Rx unit, it could hang | ||
1183 | * the Rx DMA unit. Therefore, make sure the security engine is | ||
1184 | * completely disabled prior to enabling the Rx unit. | ||
1185 | */ | ||
1186 | secrxreg = IXGBE_READ_REG(hw, IXGBE_SECRXCTRL); | ||
1187 | secrxreg |= IXGBE_SECRXCTRL_RX_DIS; | ||
1188 | IXGBE_WRITE_REG(hw, IXGBE_SECRXCTRL, secrxreg); | ||
1189 | for (i = 0; i < IXGBE_MAX_SECRX_POLL; i++) { | ||
1190 | secrxreg = IXGBE_READ_REG(hw, IXGBE_SECRXSTAT); | ||
1191 | if (secrxreg & IXGBE_SECRXSTAT_SECRX_RDY) | ||
1192 | break; | ||
1193 | else | ||
1194 | udelay(10); | ||
1195 | } | ||
1196 | |||
1197 | /* For informational purposes only */ | ||
1198 | if (i >= IXGBE_MAX_SECRX_POLL) | ||
1199 | hw_dbg(hw, "Rx unit being enabled before security " | ||
1200 | "path fully disabled. Continuing with init.\n"); | ||
1201 | |||
1202 | IXGBE_WRITE_REG(hw, IXGBE_RXCTRL, regval); | ||
1203 | secrxreg = IXGBE_READ_REG(hw, IXGBE_SECRXCTRL); | ||
1204 | secrxreg &= ~IXGBE_SECRXCTRL_RX_DIS; | ||
1205 | IXGBE_WRITE_REG(hw, IXGBE_SECRXCTRL, secrxreg); | ||
1206 | IXGBE_WRITE_FLUSH(hw); | ||
1207 | |||
1208 | return 0; | ||
1209 | } | ||
1210 | |||
1211 | static struct ixgbe_mac_operations mac_ops_82599 = { | ||
1212 | .init_hw = &ixgbe_init_hw_generic, | ||
1213 | .reset_hw = &ixgbe_reset_hw_82599, | ||
1214 | .start_hw = &ixgbe_start_hw_82599, | ||
1215 | .clear_hw_cntrs = &ixgbe_clear_hw_cntrs_generic, | ||
1216 | .get_media_type = &ixgbe_get_media_type_82599, | ||
1217 | .get_supported_physical_layer = &ixgbe_get_supported_physical_layer_82599, | ||
1218 | .enable_rx_dma = &ixgbe_enable_rx_dma_82599, | ||
1219 | .get_mac_addr = &ixgbe_get_mac_addr_generic, | ||
1220 | .stop_adapter = &ixgbe_stop_adapter_generic, | ||
1221 | .get_bus_info = &ixgbe_get_bus_info_generic, | ||
1222 | .set_lan_id = &ixgbe_set_lan_id_multi_port_pcie, | ||
1223 | .read_analog_reg8 = &ixgbe_read_analog_reg8_82599, | ||
1224 | .write_analog_reg8 = &ixgbe_write_analog_reg8_82599, | ||
1225 | .setup_link = &ixgbe_setup_mac_link_82599, | ||
1226 | .setup_link_speed = &ixgbe_setup_mac_link_speed_82599, | ||
1227 | .check_link = &ixgbe_check_mac_link_82599, | ||
1228 | .get_link_capabilities = &ixgbe_get_link_capabilities_82599, | ||
1229 | .led_on = &ixgbe_led_on_generic, | ||
1230 | .led_off = &ixgbe_led_off_generic, | ||
1231 | .blink_led_start = &ixgbe_blink_led_start_82599, | ||
1232 | .blink_led_stop = &ixgbe_blink_led_stop_82599, | ||
1233 | .set_rar = &ixgbe_set_rar_generic, | ||
1234 | .clear_rar = &ixgbe_clear_rar_generic, | ||
1235 | .set_vmdq = &ixgbe_set_vmdq_82599, | ||
1236 | .clear_vmdq = &ixgbe_clear_vmdq_82599, | ||
1237 | .init_rx_addrs = &ixgbe_init_rx_addrs_generic, | ||
1238 | .update_uc_addr_list = &ixgbe_update_uc_addr_list_generic, | ||
1239 | .update_mc_addr_list = &ixgbe_update_mc_addr_list_generic, | ||
1240 | .enable_mc = &ixgbe_enable_mc_generic, | ||
1241 | .disable_mc = &ixgbe_disable_mc_generic, | ||
1242 | .clear_vfta = &ixgbe_clear_vfta_82599, | ||
1243 | .set_vfta = &ixgbe_set_vfta_82599, | ||
1244 | .setup_fc = &ixgbe_setup_fc_generic, | ||
1245 | .init_uta_tables = &ixgbe_init_uta_tables_82599, | ||
1246 | .setup_sfp = &ixgbe_setup_sfp_modules_82599, | ||
1247 | }; | ||
1248 | |||
1249 | static struct ixgbe_eeprom_operations eeprom_ops_82599 = { | ||
1250 | .init_params = &ixgbe_init_eeprom_params_generic, | ||
1251 | .read = &ixgbe_read_eeprom_generic, | ||
1252 | .write = &ixgbe_write_eeprom_generic, | ||
1253 | .validate_checksum = &ixgbe_validate_eeprom_checksum_generic, | ||
1254 | .update_checksum = &ixgbe_update_eeprom_checksum_generic, | ||
1255 | }; | ||
1256 | |||
1257 | static struct ixgbe_phy_operations phy_ops_82599 = { | ||
1258 | .identify = &ixgbe_identify_phy_82599, | ||
1259 | .identify_sfp = &ixgbe_identify_sfp_module_generic, | ||
1260 | .reset = &ixgbe_reset_phy_generic, | ||
1261 | .read_reg = &ixgbe_read_phy_reg_generic, | ||
1262 | .write_reg = &ixgbe_write_phy_reg_generic, | ||
1263 | .setup_link = &ixgbe_setup_phy_link_generic, | ||
1264 | .setup_link_speed = &ixgbe_setup_phy_link_speed_generic, | ||
1265 | .read_i2c_byte = &ixgbe_read_i2c_byte_generic, | ||
1266 | .write_i2c_byte = &ixgbe_write_i2c_byte_generic, | ||
1267 | .read_i2c_eeprom = &ixgbe_read_i2c_eeprom_generic, | ||
1268 | .write_i2c_eeprom = &ixgbe_write_i2c_eeprom_generic, | ||
1269 | }; | ||
1270 | |||
1271 | struct ixgbe_info ixgbe_82599_info = { | ||
1272 | .mac = ixgbe_mac_82599EB, | ||
1273 | .get_invariants = &ixgbe_get_invariants_82599, | ||
1274 | .mac_ops = &mac_ops_82599, | ||
1275 | .eeprom_ops = &eeprom_ops_82599, | ||
1276 | .phy_ops = &phy_ops_82599, | ||
1277 | }; | ||
diff --git a/drivers/net/ixgbe/ixgbe_common.c b/drivers/net/ixgbe/ixgbe_common.c index 5ae93989784f..26ee8a04646e 100644 --- a/drivers/net/ixgbe/ixgbe_common.c +++ b/drivers/net/ixgbe/ixgbe_common.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <linux/delay.h> | 29 | #include <linux/delay.h> |
30 | #include <linux/sched.h> | 30 | #include <linux/sched.h> |
31 | 31 | ||
32 | #include "ixgbe.h" | ||
32 | #include "ixgbe_common.h" | 33 | #include "ixgbe_common.h" |
33 | #include "ixgbe_phy.h" | 34 | #include "ixgbe_phy.h" |
34 | 35 | ||
@@ -251,6 +252,81 @@ s32 ixgbe_get_mac_addr_generic(struct ixgbe_hw *hw, u8 *mac_addr) | |||
251 | } | 252 | } |
252 | 253 | ||
253 | /** | 254 | /** |
255 | * ixgbe_get_bus_info_generic - Generic set PCI bus info | ||
256 | * @hw: pointer to hardware structure | ||
257 | * | ||
258 | * Sets the PCI bus info (speed, width, type) within the ixgbe_hw structure | ||
259 | **/ | ||
260 | s32 ixgbe_get_bus_info_generic(struct ixgbe_hw *hw) | ||
261 | { | ||
262 | struct ixgbe_adapter *adapter = hw->back; | ||
263 | struct ixgbe_mac_info *mac = &hw->mac; | ||
264 | u16 link_status; | ||
265 | |||
266 | hw->bus.type = ixgbe_bus_type_pci_express; | ||
267 | |||
268 | /* Get the negotiated link width and speed from PCI config space */ | ||
269 | pci_read_config_word(adapter->pdev, IXGBE_PCI_LINK_STATUS, | ||
270 | &link_status); | ||
271 | |||
272 | switch (link_status & IXGBE_PCI_LINK_WIDTH) { | ||
273 | case IXGBE_PCI_LINK_WIDTH_1: | ||
274 | hw->bus.width = ixgbe_bus_width_pcie_x1; | ||
275 | break; | ||
276 | case IXGBE_PCI_LINK_WIDTH_2: | ||
277 | hw->bus.width = ixgbe_bus_width_pcie_x2; | ||
278 | break; | ||
279 | case IXGBE_PCI_LINK_WIDTH_4: | ||
280 | hw->bus.width = ixgbe_bus_width_pcie_x4; | ||
281 | break; | ||
282 | case IXGBE_PCI_LINK_WIDTH_8: | ||
283 | hw->bus.width = ixgbe_bus_width_pcie_x8; | ||
284 | break; | ||
285 | default: | ||
286 | hw->bus.width = ixgbe_bus_width_unknown; | ||
287 | break; | ||
288 | } | ||
289 | |||
290 | switch (link_status & IXGBE_PCI_LINK_SPEED) { | ||
291 | case IXGBE_PCI_LINK_SPEED_2500: | ||
292 | hw->bus.speed = ixgbe_bus_speed_2500; | ||
293 | break; | ||
294 | case IXGBE_PCI_LINK_SPEED_5000: | ||
295 | hw->bus.speed = ixgbe_bus_speed_5000; | ||
296 | break; | ||
297 | default: | ||
298 | hw->bus.speed = ixgbe_bus_speed_unknown; | ||
299 | break; | ||
300 | } | ||
301 | |||
302 | mac->ops.set_lan_id(hw); | ||
303 | |||
304 | return 0; | ||
305 | } | ||
306 | |||
307 | /** | ||
308 | * ixgbe_set_lan_id_multi_port_pcie - Set LAN id for PCIe multiple port devices | ||
309 | * @hw: pointer to the HW structure | ||
310 | * | ||
311 | * Determines the LAN function id by reading memory-mapped registers | ||
312 | * and swaps the port value if requested. | ||
313 | **/ | ||
314 | void ixgbe_set_lan_id_multi_port_pcie(struct ixgbe_hw *hw) | ||
315 | { | ||
316 | struct ixgbe_bus_info *bus = &hw->bus; | ||
317 | u32 reg; | ||
318 | |||
319 | reg = IXGBE_READ_REG(hw, IXGBE_STATUS); | ||
320 | bus->func = (reg & IXGBE_STATUS_LAN_ID) >> IXGBE_STATUS_LAN_ID_SHIFT; | ||
321 | bus->lan_id = bus->func; | ||
322 | |||
323 | /* check for a port swap */ | ||
324 | reg = IXGBE_READ_REG(hw, IXGBE_FACTPS); | ||
325 | if (reg & IXGBE_FACTPS_LFS) | ||
326 | bus->func ^= 0x1; | ||
327 | } | ||
328 | |||
329 | /** | ||
254 | * ixgbe_stop_adapter_generic - Generic stop Tx/Rx units | 330 | * ixgbe_stop_adapter_generic - Generic stop Tx/Rx units |
255 | * @hw: pointer to hardware structure | 331 | * @hw: pointer to hardware structure |
256 | * | 332 | * |
@@ -390,6 +466,73 @@ s32 ixgbe_init_eeprom_params_generic(struct ixgbe_hw *hw) | |||
390 | } | 466 | } |
391 | 467 | ||
392 | /** | 468 | /** |
469 | * ixgbe_write_eeprom_generic - Writes 16 bit value to EEPROM | ||
470 | * @hw: pointer to hardware structure | ||
471 | * @offset: offset within the EEPROM to be written to | ||
472 | * @data: 16 bit word to be written to the EEPROM | ||
473 | * | ||
474 | * If ixgbe_eeprom_update_checksum is not called after this function, the | ||
475 | * EEPROM will most likely contain an invalid checksum. | ||
476 | **/ | ||
477 | s32 ixgbe_write_eeprom_generic(struct ixgbe_hw *hw, u16 offset, u16 data) | ||
478 | { | ||
479 | s32 status; | ||
480 | u8 write_opcode = IXGBE_EEPROM_WRITE_OPCODE_SPI; | ||
481 | |||
482 | hw->eeprom.ops.init_params(hw); | ||
483 | |||
484 | if (offset >= hw->eeprom.word_size) { | ||
485 | status = IXGBE_ERR_EEPROM; | ||
486 | goto out; | ||
487 | } | ||
488 | |||
489 | /* Prepare the EEPROM for writing */ | ||
490 | status = ixgbe_acquire_eeprom(hw); | ||
491 | |||
492 | if (status == 0) { | ||
493 | if (ixgbe_ready_eeprom(hw) != 0) { | ||
494 | ixgbe_release_eeprom(hw); | ||
495 | status = IXGBE_ERR_EEPROM; | ||
496 | } | ||
497 | } | ||
498 | |||
499 | if (status == 0) { | ||
500 | ixgbe_standby_eeprom(hw); | ||
501 | |||
502 | /* Send the WRITE ENABLE command (8 bit opcode ) */ | ||
503 | ixgbe_shift_out_eeprom_bits(hw, IXGBE_EEPROM_WREN_OPCODE_SPI, | ||
504 | IXGBE_EEPROM_OPCODE_BITS); | ||
505 | |||
506 | ixgbe_standby_eeprom(hw); | ||
507 | |||
508 | /* | ||
509 | * Some SPI eeproms use the 8th address bit embedded in the | ||
510 | * opcode | ||
511 | */ | ||
512 | if ((hw->eeprom.address_bits == 8) && (offset >= 128)) | ||
513 | write_opcode |= IXGBE_EEPROM_A8_OPCODE_SPI; | ||
514 | |||
515 | /* Send the Write command (8-bit opcode + addr) */ | ||
516 | ixgbe_shift_out_eeprom_bits(hw, write_opcode, | ||
517 | IXGBE_EEPROM_OPCODE_BITS); | ||
518 | ixgbe_shift_out_eeprom_bits(hw, (u16)(offset*2), | ||
519 | hw->eeprom.address_bits); | ||
520 | |||
521 | /* Send the data */ | ||
522 | data = (data >> 8) | (data << 8); | ||
523 | ixgbe_shift_out_eeprom_bits(hw, data, 16); | ||
524 | ixgbe_standby_eeprom(hw); | ||
525 | |||
526 | msleep(hw->eeprom.semaphore_delay); | ||
527 | /* Done with writing - release the EEPROM */ | ||
528 | ixgbe_release_eeprom(hw); | ||
529 | } | ||
530 | |||
531 | out: | ||
532 | return status; | ||
533 | } | ||
534 | |||
535 | /** | ||
393 | * ixgbe_read_eeprom_bit_bang_generic - Read EEPROM word using bit-bang | 536 | * ixgbe_read_eeprom_bit_bang_generic - Read EEPROM word using bit-bang |
394 | * @hw: pointer to hardware structure | 537 | * @hw: pointer to hardware structure |
395 | * @offset: offset within the EEPROM to be read | 538 | * @offset: offset within the EEPROM to be read |
@@ -1487,6 +1630,101 @@ s32 ixgbe_disable_mc_generic(struct ixgbe_hw *hw) | |||
1487 | } | 1630 | } |
1488 | 1631 | ||
1489 | /** | 1632 | /** |
1633 | * ixgbe_fc_enable - Enable flow control | ||
1634 | * @hw: pointer to hardware structure | ||
1635 | * @packetbuf_num: packet buffer number (0-7) | ||
1636 | * | ||
1637 | * Enable flow control according to the current settings. | ||
1638 | **/ | ||
1639 | s32 ixgbe_fc_enable(struct ixgbe_hw *hw, s32 packetbuf_num) | ||
1640 | { | ||
1641 | s32 ret_val = 0; | ||
1642 | u32 mflcn_reg; | ||
1643 | u32 fccfg_reg; | ||
1644 | u32 reg; | ||
1645 | |||
1646 | mflcn_reg = IXGBE_READ_REG(hw, IXGBE_MFLCN); | ||
1647 | mflcn_reg &= ~(IXGBE_MFLCN_RFCE | IXGBE_MFLCN_RPFCE); | ||
1648 | |||
1649 | fccfg_reg = IXGBE_READ_REG(hw, IXGBE_FCCFG); | ||
1650 | fccfg_reg &= ~(IXGBE_FCCFG_TFCE_802_3X | IXGBE_FCCFG_TFCE_PRIORITY); | ||
1651 | |||
1652 | /* | ||
1653 | * The possible values of fc.current_mode are: | ||
1654 | * 0: Flow control is completely disabled | ||
1655 | * 1: Rx flow control is enabled (we can receive pause frames, | ||
1656 | * but not send pause frames). | ||
1657 | * 2: Tx flow control is enabled (we can send pause frames but | ||
1658 | * we do not support receiving pause frames). | ||
1659 | * 3: Both Rx and Tx flow control (symmetric) are enabled. | ||
1660 | * other: Invalid. | ||
1661 | */ | ||
1662 | switch (hw->fc.current_mode) { | ||
1663 | case ixgbe_fc_none: | ||
1664 | /* Flow control completely disabled by software override. */ | ||
1665 | break; | ||
1666 | case ixgbe_fc_rx_pause: | ||
1667 | /* | ||
1668 | * Rx Flow control is enabled and Tx Flow control is | ||
1669 | * disabled by software override. Since there really | ||
1670 | * isn't a way to advertise that we are capable of RX | ||
1671 | * Pause ONLY, we will advertise that we support both | ||
1672 | * symmetric and asymmetric Rx PAUSE. Later, we will | ||
1673 | * disable the adapter's ability to send PAUSE frames. | ||
1674 | */ | ||
1675 | mflcn_reg |= IXGBE_MFLCN_RFCE; | ||
1676 | break; | ||
1677 | case ixgbe_fc_tx_pause: | ||
1678 | /* | ||
1679 | * Tx Flow control is enabled, and Rx Flow control is | ||
1680 | * disabled by software override. | ||
1681 | */ | ||
1682 | fccfg_reg |= IXGBE_FCCFG_TFCE_802_3X; | ||
1683 | break; | ||
1684 | case ixgbe_fc_full: | ||
1685 | /* Flow control (both Rx and Tx) is enabled by SW override. */ | ||
1686 | mflcn_reg |= IXGBE_MFLCN_RFCE; | ||
1687 | fccfg_reg |= IXGBE_FCCFG_TFCE_802_3X; | ||
1688 | break; | ||
1689 | default: | ||
1690 | hw_dbg(hw, "Flow control param set incorrectly\n"); | ||
1691 | ret_val = -IXGBE_ERR_CONFIG; | ||
1692 | goto out; | ||
1693 | break; | ||
1694 | } | ||
1695 | |||
1696 | /* Enable 802.3x based flow control settings. */ | ||
1697 | IXGBE_WRITE_REG(hw, IXGBE_MFLCN, mflcn_reg); | ||
1698 | IXGBE_WRITE_REG(hw, IXGBE_FCCFG, fccfg_reg); | ||
1699 | |||
1700 | /* Set up and enable Rx high/low water mark thresholds, enable XON. */ | ||
1701 | if (hw->fc.current_mode & ixgbe_fc_tx_pause) { | ||
1702 | if (hw->fc.send_xon) | ||
1703 | IXGBE_WRITE_REG(hw, IXGBE_FCRTL_82599(packetbuf_num), | ||
1704 | (hw->fc.low_water | IXGBE_FCRTL_XONE)); | ||
1705 | else | ||
1706 | IXGBE_WRITE_REG(hw, IXGBE_FCRTL_82599(packetbuf_num), | ||
1707 | hw->fc.low_water); | ||
1708 | |||
1709 | IXGBE_WRITE_REG(hw, IXGBE_FCRTH_82599(packetbuf_num), | ||
1710 | (hw->fc.high_water | IXGBE_FCRTH_FCEN)); | ||
1711 | } | ||
1712 | |||
1713 | /* Configure pause time (2 TCs per register) */ | ||
1714 | reg = IXGBE_READ_REG(hw, IXGBE_FCTTV(packetbuf_num)); | ||
1715 | if ((packetbuf_num & 1) == 0) | ||
1716 | reg = (reg & 0xFFFF0000) | hw->fc.pause_time; | ||
1717 | else | ||
1718 | reg = (reg & 0x0000FFFF) | (hw->fc.pause_time << 16); | ||
1719 | IXGBE_WRITE_REG(hw, IXGBE_FCTTV(packetbuf_num / 2), reg); | ||
1720 | |||
1721 | IXGBE_WRITE_REG(hw, IXGBE_FCRTV, (hw->fc.pause_time >> 1)); | ||
1722 | |||
1723 | out: | ||
1724 | return ret_val; | ||
1725 | } | ||
1726 | |||
1727 | /** | ||
1490 | * ixgbe_fc_autoneg - Configure flow control | 1728 | * ixgbe_fc_autoneg - Configure flow control |
1491 | * @hw: pointer to hardware structure | 1729 | * @hw: pointer to hardware structure |
1492 | * | 1730 | * |
@@ -1625,6 +1863,74 @@ out: | |||
1625 | } | 1863 | } |
1626 | 1864 | ||
1627 | /** | 1865 | /** |
1866 | * ixgbe_setup_fc_generic - Set up flow control | ||
1867 | * @hw: pointer to hardware structure | ||
1868 | * | ||
1869 | * Sets up flow control. | ||
1870 | **/ | ||
1871 | s32 ixgbe_setup_fc_generic(struct ixgbe_hw *hw, s32 packetbuf_num) | ||
1872 | { | ||
1873 | s32 ret_val = 0; | ||
1874 | ixgbe_link_speed speed; | ||
1875 | bool link_up; | ||
1876 | |||
1877 | /* Validate the packetbuf configuration */ | ||
1878 | if (packetbuf_num < 0 || packetbuf_num > 7) { | ||
1879 | hw_dbg(hw, "Invalid packet buffer number [%d], expected range " | ||
1880 | "is 0-7\n", packetbuf_num); | ||
1881 | ret_val = IXGBE_ERR_INVALID_LINK_SETTINGS; | ||
1882 | goto out; | ||
1883 | } | ||
1884 | |||
1885 | /* | ||
1886 | * Validate the water mark configuration. Zero water marks are invalid | ||
1887 | * because it causes the controller to just blast out fc packets. | ||
1888 | */ | ||
1889 | if (!hw->fc.low_water || !hw->fc.high_water || !hw->fc.pause_time) { | ||
1890 | hw_dbg(hw, "Invalid water mark configuration\n"); | ||
1891 | ret_val = IXGBE_ERR_INVALID_LINK_SETTINGS; | ||
1892 | goto out; | ||
1893 | } | ||
1894 | |||
1895 | /* | ||
1896 | * Validate the requested mode. Strict IEEE mode does not allow | ||
1897 | * ixgbe_fc_rx_pause because it will cause testing anomalies. | ||
1898 | */ | ||
1899 | if (hw->fc.strict_ieee && hw->fc.requested_mode == ixgbe_fc_rx_pause) { | ||
1900 | hw_dbg(hw, "ixgbe_fc_rx_pause not valid in strict " | ||
1901 | "IEEE mode\n"); | ||
1902 | ret_val = IXGBE_ERR_INVALID_LINK_SETTINGS; | ||
1903 | goto out; | ||
1904 | } | ||
1905 | |||
1906 | /* | ||
1907 | * 10gig parts do not have a word in the EEPROM to determine the | ||
1908 | * default flow control setting, so we explicitly set it to full. | ||
1909 | */ | ||
1910 | if (hw->fc.requested_mode == ixgbe_fc_default) | ||
1911 | hw->fc.requested_mode = ixgbe_fc_full; | ||
1912 | |||
1913 | /* | ||
1914 | * Save off the requested flow control mode for use later. Depending | ||
1915 | * on the link partner's capabilities, we may or may not use this mode. | ||
1916 | */ | ||
1917 | hw->fc.current_mode = hw->fc.requested_mode; | ||
1918 | |||
1919 | /* Decide whether to use autoneg or not. */ | ||
1920 | hw->mac.ops.check_link(hw, &speed, &link_up, false); | ||
1921 | if (hw->phy.multispeed_fiber && (speed == IXGBE_LINK_SPEED_1GB_FULL)) | ||
1922 | ret_val = ixgbe_fc_autoneg(hw); | ||
1923 | |||
1924 | if (ret_val) | ||
1925 | goto out; | ||
1926 | |||
1927 | ret_val = ixgbe_fc_enable(hw, packetbuf_num); | ||
1928 | |||
1929 | out: | ||
1930 | return ret_val; | ||
1931 | } | ||
1932 | |||
1933 | /** | ||
1628 | * ixgbe_disable_pcie_master - Disable PCI-express master access | 1934 | * ixgbe_disable_pcie_master - Disable PCI-express master access |
1629 | * @hw: pointer to hardware structure | 1935 | * @hw: pointer to hardware structure |
1630 | * | 1936 | * |
@@ -1732,3 +2038,16 @@ void ixgbe_release_swfw_sync(struct ixgbe_hw *hw, u16 mask) | |||
1732 | ixgbe_release_eeprom_semaphore(hw); | 2038 | ixgbe_release_eeprom_semaphore(hw); |
1733 | } | 2039 | } |
1734 | 2040 | ||
2041 | /** | ||
2042 | * ixgbe_enable_rx_dma_generic - Enable the Rx DMA unit | ||
2043 | * @hw: pointer to hardware structure | ||
2044 | * @regval: register value to write to RXCTRL | ||
2045 | * | ||
2046 | * Enables the Rx DMA unit | ||
2047 | **/ | ||
2048 | s32 ixgbe_enable_rx_dma_generic(struct ixgbe_hw *hw, u32 regval) | ||
2049 | { | ||
2050 | IXGBE_WRITE_REG(hw, IXGBE_RXCTRL, regval); | ||
2051 | |||
2052 | return 0; | ||
2053 | } | ||
diff --git a/drivers/net/ixgbe/ixgbe_common.h b/drivers/net/ixgbe/ixgbe_common.h index c63021261e56..7e94d6d399ab 100644 --- a/drivers/net/ixgbe/ixgbe_common.h +++ b/drivers/net/ixgbe/ixgbe_common.h | |||
@@ -37,12 +37,14 @@ s32 ixgbe_clear_hw_cntrs_generic(struct ixgbe_hw *hw); | |||
37 | s32 ixgbe_read_pba_num_generic(struct ixgbe_hw *hw, u32 *pba_num); | 37 | s32 ixgbe_read_pba_num_generic(struct ixgbe_hw *hw, u32 *pba_num); |
38 | s32 ixgbe_get_mac_addr_generic(struct ixgbe_hw *hw, u8 *mac_addr); | 38 | s32 ixgbe_get_mac_addr_generic(struct ixgbe_hw *hw, u8 *mac_addr); |
39 | s32 ixgbe_get_bus_info_generic(struct ixgbe_hw *hw); | 39 | s32 ixgbe_get_bus_info_generic(struct ixgbe_hw *hw); |
40 | void ixgbe_set_lan_id_multi_port_pcie(struct ixgbe_hw *hw); | ||
40 | s32 ixgbe_stop_adapter_generic(struct ixgbe_hw *hw); | 41 | s32 ixgbe_stop_adapter_generic(struct ixgbe_hw *hw); |
41 | 42 | ||
42 | s32 ixgbe_led_on_generic(struct ixgbe_hw *hw, u32 index); | 43 | s32 ixgbe_led_on_generic(struct ixgbe_hw *hw, u32 index); |
43 | s32 ixgbe_led_off_generic(struct ixgbe_hw *hw, u32 index); | 44 | s32 ixgbe_led_off_generic(struct ixgbe_hw *hw, u32 index); |
44 | 45 | ||
45 | s32 ixgbe_init_eeprom_params_generic(struct ixgbe_hw *hw); | 46 | s32 ixgbe_init_eeprom_params_generic(struct ixgbe_hw *hw); |
47 | s32 ixgbe_write_eeprom_generic(struct ixgbe_hw *hw, u16 offset, u16 data); | ||
46 | s32 ixgbe_read_eeprom_generic(struct ixgbe_hw *hw, u16 offset, u16 *data); | 48 | s32 ixgbe_read_eeprom_generic(struct ixgbe_hw *hw, u16 offset, u16 *data); |
47 | s32 ixgbe_read_eeprom_bit_bang_generic(struct ixgbe_hw *hw, u16 offset, | 49 | s32 ixgbe_read_eeprom_bit_bang_generic(struct ixgbe_hw *hw, u16 offset, |
48 | u16 *data); | 50 | u16 *data); |
@@ -61,6 +63,7 @@ s32 ixgbe_update_uc_addr_list_generic(struct ixgbe_hw *hw, u8 *addr_list, | |||
61 | u32 addr_count, ixgbe_mc_addr_itr func); | 63 | u32 addr_count, ixgbe_mc_addr_itr func); |
62 | s32 ixgbe_enable_mc_generic(struct ixgbe_hw *hw); | 64 | s32 ixgbe_enable_mc_generic(struct ixgbe_hw *hw); |
63 | s32 ixgbe_disable_mc_generic(struct ixgbe_hw *hw); | 65 | s32 ixgbe_disable_mc_generic(struct ixgbe_hw *hw); |
66 | s32 ixgbe_enable_rx_dma_generic(struct ixgbe_hw *hw, u32 regval); | ||
64 | s32 ixgbe_setup_fc_generic(struct ixgbe_hw *hw, s32 packetbuf_num); | 67 | s32 ixgbe_setup_fc_generic(struct ixgbe_hw *hw, s32 packetbuf_num); |
65 | s32 ixgbe_fc_enable(struct ixgbe_hw *hw, s32 packtetbuf_num); | 68 | s32 ixgbe_fc_enable(struct ixgbe_hw *hw, s32 packtetbuf_num); |
66 | s32 ixgbe_fc_autoneg(struct ixgbe_hw *hw); | 69 | s32 ixgbe_fc_autoneg(struct ixgbe_hw *hw); |
@@ -75,6 +78,13 @@ s32 ixgbe_write_analog_reg8_generic(struct ixgbe_hw *hw, u32 reg, u8 val); | |||
75 | 78 | ||
76 | #define IXGBE_WRITE_REG(a, reg, value) writel((value), ((a)->hw_addr + (reg))) | 79 | #define IXGBE_WRITE_REG(a, reg, value) writel((value), ((a)->hw_addr + (reg))) |
77 | 80 | ||
81 | #ifndef writeq | ||
82 | #define writeq(val, addr) writel((u32) (val), addr); \ | ||
83 | writel((u32) (val >> 32), (addr + 4)); | ||
84 | #endif | ||
85 | |||
86 | #define IXGBE_WRITE_REG64(a, reg, value) writeq((value), ((a)->hw_addr + (reg))) | ||
87 | |||
78 | #define IXGBE_READ_REG(a, reg) readl((a)->hw_addr + (reg)) | 88 | #define IXGBE_READ_REG(a, reg) readl((a)->hw_addr + (reg)) |
79 | 89 | ||
80 | #define IXGBE_WRITE_REG_ARRAY(a, reg, offset, value) (\ | 90 | #define IXGBE_WRITE_REG_ARRAY(a, reg, offset, value) (\ |
diff --git a/drivers/net/ixgbe/ixgbe_ethtool.c b/drivers/net/ixgbe/ixgbe_ethtool.c index cec2f4e8c61e..35d820e6dfa8 100644 --- a/drivers/net/ixgbe/ixgbe_ethtool.c +++ b/drivers/net/ixgbe/ixgbe_ethtool.c | |||
@@ -469,7 +469,7 @@ static void ixgbe_get_regs(struct net_device *netdev, | |||
469 | regs_buff[825] = IXGBE_READ_REG(hw, IXGBE_IP6AT); | 469 | regs_buff[825] = IXGBE_READ_REG(hw, IXGBE_IP6AT); |
470 | regs_buff[826] = IXGBE_READ_REG(hw, IXGBE_WUPL); | 470 | regs_buff[826] = IXGBE_READ_REG(hw, IXGBE_WUPL); |
471 | regs_buff[827] = IXGBE_READ_REG(hw, IXGBE_WUPM); | 471 | regs_buff[827] = IXGBE_READ_REG(hw, IXGBE_WUPM); |
472 | regs_buff[828] = IXGBE_READ_REG(hw, IXGBE_FHFT); | 472 | regs_buff[828] = IXGBE_READ_REG(hw, IXGBE_FHFT(0)); |
473 | 473 | ||
474 | regs_buff[829] = IXGBE_READ_REG(hw, IXGBE_RMCS); | 474 | regs_buff[829] = IXGBE_READ_REG(hw, IXGBE_RMCS); |
475 | regs_buff[830] = IXGBE_READ_REG(hw, IXGBE_DPMCS); | 475 | regs_buff[830] = IXGBE_READ_REG(hw, IXGBE_DPMCS); |
diff --git a/drivers/net/ixgbe/ixgbe_phy.c b/drivers/net/ixgbe/ixgbe_phy.c index 77ec26f5650a..14e9606aa3b3 100644 --- a/drivers/net/ixgbe/ixgbe_phy.c +++ b/drivers/net/ixgbe/ixgbe_phy.c | |||
@@ -32,6 +32,18 @@ | |||
32 | #include "ixgbe_common.h" | 32 | #include "ixgbe_common.h" |
33 | #include "ixgbe_phy.h" | 33 | #include "ixgbe_phy.h" |
34 | 34 | ||
35 | static void ixgbe_i2c_start(struct ixgbe_hw *hw); | ||
36 | static void ixgbe_i2c_stop(struct ixgbe_hw *hw); | ||
37 | static s32 ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data); | ||
38 | static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data); | ||
39 | static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw); | ||
40 | static s32 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data); | ||
41 | static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data); | ||
42 | static s32 ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl); | ||
43 | static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl); | ||
44 | static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data); | ||
45 | static bool ixgbe_get_i2c_data(u32 *i2cctl); | ||
46 | static void ixgbe_i2c_bus_clear(struct ixgbe_hw *hw); | ||
35 | static bool ixgbe_validate_phy_addr(struct ixgbe_hw *hw, u32 phy_addr); | 47 | static bool ixgbe_validate_phy_addr(struct ixgbe_hw *hw, u32 phy_addr); |
36 | static enum ixgbe_phy_type ixgbe_get_phy_type_from_id(u32 phy_id); | 48 | static enum ixgbe_phy_type ixgbe_get_phy_type_from_id(u32 phy_id); |
37 | static s32 ixgbe_get_phy_id(struct ixgbe_hw *hw); | 49 | static s32 ixgbe_get_phy_id(struct ixgbe_hw *hw); |
@@ -543,8 +555,9 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw) | |||
543 | u8 identifier = 0; | 555 | u8 identifier = 0; |
544 | u8 comp_codes_1g = 0; | 556 | u8 comp_codes_1g = 0; |
545 | u8 comp_codes_10g = 0; | 557 | u8 comp_codes_10g = 0; |
546 | u8 oui_bytes[4] = {0, 0, 0, 0}; | 558 | u8 oui_bytes[3] = {0, 0, 0}; |
547 | u8 transmission_media = 0; | 559 | u8 transmission_media = 0; |
560 | u16 enforce_sfp = 0; | ||
548 | 561 | ||
549 | status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_IDENTIFIER, | 562 | status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_IDENTIFIER, |
550 | &identifier); | 563 | &identifier); |
@@ -564,18 +577,48 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw) | |||
564 | 577 | ||
565 | /* ID Module | 578 | /* ID Module |
566 | * ========= | 579 | * ========= |
567 | * 0 SFP_DA_CU | 580 | * 0 SFP_DA_CU |
568 | * 1 SFP_SR | 581 | * 1 SFP_SR |
569 | * 2 SFP_LR | 582 | * 2 SFP_LR |
583 | * 3 SFP_DA_CORE0 - 82599-specific | ||
584 | * 4 SFP_DA_CORE1 - 82599-specific | ||
585 | * 5 SFP_SR/LR_CORE0 - 82599-specific | ||
586 | * 6 SFP_SR/LR_CORE1 - 82599-specific | ||
570 | */ | 587 | */ |
571 | if (transmission_media & IXGBE_SFF_TWIN_AX_CAPABLE) | 588 | if (hw->mac.type == ixgbe_mac_82598EB) { |
572 | hw->phy.sfp_type = ixgbe_sfp_type_da_cu; | 589 | if (transmission_media & IXGBE_SFF_TWIN_AX_CAPABLE) |
573 | else if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE) | 590 | hw->phy.sfp_type = ixgbe_sfp_type_da_cu; |
574 | hw->phy.sfp_type = ixgbe_sfp_type_sr; | 591 | else if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE) |
575 | else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE) | 592 | hw->phy.sfp_type = ixgbe_sfp_type_sr; |
576 | hw->phy.sfp_type = ixgbe_sfp_type_lr; | 593 | else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE) |
577 | else | 594 | hw->phy.sfp_type = ixgbe_sfp_type_lr; |
578 | hw->phy.sfp_type = ixgbe_sfp_type_unknown; | 595 | else |
596 | hw->phy.sfp_type = ixgbe_sfp_type_unknown; | ||
597 | } else if (hw->mac.type == ixgbe_mac_82599EB) { | ||
598 | if (transmission_media & IXGBE_SFF_TWIN_AX_CAPABLE) | ||
599 | if (hw->bus.lan_id == 0) | ||
600 | hw->phy.sfp_type = | ||
601 | ixgbe_sfp_type_da_cu_core0; | ||
602 | else | ||
603 | hw->phy.sfp_type = | ||
604 | ixgbe_sfp_type_da_cu_core1; | ||
605 | else if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE) | ||
606 | if (hw->bus.lan_id == 0) | ||
607 | hw->phy.sfp_type = | ||
608 | ixgbe_sfp_type_srlr_core0; | ||
609 | else | ||
610 | hw->phy.sfp_type = | ||
611 | ixgbe_sfp_type_srlr_core1; | ||
612 | else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE) | ||
613 | if (hw->bus.lan_id == 0) | ||
614 | hw->phy.sfp_type = | ||
615 | ixgbe_sfp_type_srlr_core0; | ||
616 | else | ||
617 | hw->phy.sfp_type = | ||
618 | ixgbe_sfp_type_srlr_core1; | ||
619 | else | ||
620 | hw->phy.sfp_type = ixgbe_sfp_type_unknown; | ||
621 | } | ||
579 | 622 | ||
580 | /* Determine PHY vendor */ | 623 | /* Determine PHY vendor */ |
581 | if (hw->phy.type == ixgbe_phy_unknown) { | 624 | if (hw->phy.type == ixgbe_phy_unknown) { |
@@ -607,6 +650,9 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw) | |||
607 | case IXGBE_SFF_VENDOR_OUI_AVAGO: | 650 | case IXGBE_SFF_VENDOR_OUI_AVAGO: |
608 | hw->phy.type = ixgbe_phy_sfp_avago; | 651 | hw->phy.type = ixgbe_phy_sfp_avago; |
609 | break; | 652 | break; |
653 | case IXGBE_SFF_VENDOR_OUI_INTEL: | ||
654 | hw->phy.type = ixgbe_phy_sfp_intel; | ||
655 | break; | ||
610 | default: | 656 | default: |
611 | if (transmission_media & | 657 | if (transmission_media & |
612 | IXGBE_SFF_TWIN_AX_CAPABLE) | 658 | IXGBE_SFF_TWIN_AX_CAPABLE) |
@@ -616,7 +662,28 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw) | |||
616 | break; | 662 | break; |
617 | } | 663 | } |
618 | } | 664 | } |
619 | status = 0; | 665 | if (hw->mac.type == ixgbe_mac_82598EB || |
666 | (hw->phy.sfp_type != ixgbe_sfp_type_sr && | ||
667 | hw->phy.sfp_type != ixgbe_sfp_type_lr && | ||
668 | hw->phy.sfp_type != ixgbe_sfp_type_srlr_core0 && | ||
669 | hw->phy.sfp_type != ixgbe_sfp_type_srlr_core1)) { | ||
670 | status = 0; | ||
671 | goto out; | ||
672 | } | ||
673 | |||
674 | hw->eeprom.ops.read(hw, IXGBE_PHY_ENFORCE_INTEL_SFP_OFFSET, | ||
675 | &enforce_sfp); | ||
676 | if (!(enforce_sfp & IXGBE_PHY_ALLOW_ANY_SFP)) { | ||
677 | /* Make sure we're a supported PHY type */ | ||
678 | if (hw->phy.type == ixgbe_phy_sfp_intel) { | ||
679 | status = 0; | ||
680 | } else { | ||
681 | hw_dbg(hw, "SFP+ module not supported\n"); | ||
682 | status = IXGBE_ERR_SFP_NOT_SUPPORTED; | ||
683 | } | ||
684 | } else { | ||
685 | status = 0; | ||
686 | } | ||
620 | } | 687 | } |
621 | 688 | ||
622 | out: | 689 | out: |
@@ -651,7 +718,7 @@ s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw, | |||
651 | hw->eeprom.ops.read(hw, IXGBE_PHY_INIT_OFFSET_NL, list_offset); | 718 | hw->eeprom.ops.read(hw, IXGBE_PHY_INIT_OFFSET_NL, list_offset); |
652 | 719 | ||
653 | if ((!*list_offset) || (*list_offset == 0xFFFF)) | 720 | if ((!*list_offset) || (*list_offset == 0xFFFF)) |
654 | return IXGBE_ERR_PHY; | 721 | return IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT; |
655 | 722 | ||
656 | /* Shift offset to first ID word */ | 723 | /* Shift offset to first ID word */ |
657 | (*list_offset)++; | 724 | (*list_offset)++; |
@@ -688,6 +755,501 @@ s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw, | |||
688 | } | 755 | } |
689 | 756 | ||
690 | /** | 757 | /** |
758 | * ixgbe_read_i2c_eeprom_generic - Reads 8 bit EEPROM word over I2C interface | ||
759 | * @hw: pointer to hardware structure | ||
760 | * @byte_offset: EEPROM byte offset to read | ||
761 | * @eeprom_data: value read | ||
762 | * | ||
763 | * Performs byte read operation to SFP module's EEPROM over I2C interface. | ||
764 | **/ | ||
765 | s32 ixgbe_read_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset, | ||
766 | u8 *eeprom_data) | ||
767 | { | ||
768 | return hw->phy.ops.read_i2c_byte(hw, byte_offset, | ||
769 | IXGBE_I2C_EEPROM_DEV_ADDR, | ||
770 | eeprom_data); | ||
771 | } | ||
772 | |||
773 | /** | ||
774 | * ixgbe_write_i2c_eeprom_generic - Writes 8 bit EEPROM word over I2C interface | ||
775 | * @hw: pointer to hardware structure | ||
776 | * @byte_offset: EEPROM byte offset to write | ||
777 | * @eeprom_data: value to write | ||
778 | * | ||
779 | * Performs byte write operation to SFP module's EEPROM over I2C interface. | ||
780 | **/ | ||
781 | s32 ixgbe_write_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset, | ||
782 | u8 eeprom_data) | ||
783 | { | ||
784 | return hw->phy.ops.write_i2c_byte(hw, byte_offset, | ||
785 | IXGBE_I2C_EEPROM_DEV_ADDR, | ||
786 | eeprom_data); | ||
787 | } | ||
788 | |||
789 | /** | ||
790 | * ixgbe_read_i2c_byte_generic - Reads 8 bit word over I2C | ||
791 | * @hw: pointer to hardware structure | ||
792 | * @byte_offset: byte offset to read | ||
793 | * @data: value read | ||
794 | * | ||
795 | * Performs byte read operation to SFP module's EEPROM over I2C interface at | ||
796 | * a specified deivce address. | ||
797 | **/ | ||
798 | s32 ixgbe_read_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset, | ||
799 | u8 dev_addr, u8 *data) | ||
800 | { | ||
801 | s32 status = 0; | ||
802 | u32 max_retry = 1; | ||
803 | u32 retry = 0; | ||
804 | bool nack = 1; | ||
805 | |||
806 | do { | ||
807 | ixgbe_i2c_start(hw); | ||
808 | |||
809 | /* Device Address and write indication */ | ||
810 | status = ixgbe_clock_out_i2c_byte(hw, dev_addr); | ||
811 | if (status != 0) | ||
812 | goto fail; | ||
813 | |||
814 | status = ixgbe_get_i2c_ack(hw); | ||
815 | if (status != 0) | ||
816 | goto fail; | ||
817 | |||
818 | status = ixgbe_clock_out_i2c_byte(hw, byte_offset); | ||
819 | if (status != 0) | ||
820 | goto fail; | ||
821 | |||
822 | status = ixgbe_get_i2c_ack(hw); | ||
823 | if (status != 0) | ||
824 | goto fail; | ||
825 | |||
826 | ixgbe_i2c_start(hw); | ||
827 | |||
828 | /* Device Address and read indication */ | ||
829 | status = ixgbe_clock_out_i2c_byte(hw, (dev_addr | 0x1)); | ||
830 | if (status != 0) | ||
831 | goto fail; | ||
832 | |||
833 | status = ixgbe_get_i2c_ack(hw); | ||
834 | if (status != 0) | ||
835 | goto fail; | ||
836 | |||
837 | status = ixgbe_clock_in_i2c_byte(hw, data); | ||
838 | if (status != 0) | ||
839 | goto fail; | ||
840 | |||
841 | status = ixgbe_clock_out_i2c_bit(hw, nack); | ||
842 | if (status != 0) | ||
843 | goto fail; | ||
844 | |||
845 | ixgbe_i2c_stop(hw); | ||
846 | break; | ||
847 | |||
848 | fail: | ||
849 | ixgbe_i2c_bus_clear(hw); | ||
850 | retry++; | ||
851 | if (retry < max_retry) | ||
852 | hw_dbg(hw, "I2C byte read error - Retrying.\n"); | ||
853 | else | ||
854 | hw_dbg(hw, "I2C byte read error.\n"); | ||
855 | |||
856 | } while (retry < max_retry); | ||
857 | |||
858 | return status; | ||
859 | } | ||
860 | |||
861 | /** | ||
862 | * ixgbe_write_i2c_byte_generic - Writes 8 bit word over I2C | ||
863 | * @hw: pointer to hardware structure | ||
864 | * @byte_offset: byte offset to write | ||
865 | * @data: value to write | ||
866 | * | ||
867 | * Performs byte write operation to SFP module's EEPROM over I2C interface at | ||
868 | * a specified device address. | ||
869 | **/ | ||
870 | s32 ixgbe_write_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset, | ||
871 | u8 dev_addr, u8 data) | ||
872 | { | ||
873 | s32 status = 0; | ||
874 | u32 max_retry = 1; | ||
875 | u32 retry = 0; | ||
876 | |||
877 | do { | ||
878 | ixgbe_i2c_start(hw); | ||
879 | |||
880 | status = ixgbe_clock_out_i2c_byte(hw, dev_addr); | ||
881 | if (status != 0) | ||
882 | goto fail; | ||
883 | |||
884 | status = ixgbe_get_i2c_ack(hw); | ||
885 | if (status != 0) | ||
886 | goto fail; | ||
887 | |||
888 | status = ixgbe_clock_out_i2c_byte(hw, byte_offset); | ||
889 | if (status != 0) | ||
890 | goto fail; | ||
891 | |||
892 | status = ixgbe_get_i2c_ack(hw); | ||
893 | if (status != 0) | ||
894 | goto fail; | ||
895 | |||
896 | status = ixgbe_clock_out_i2c_byte(hw, data); | ||
897 | if (status != 0) | ||
898 | goto fail; | ||
899 | |||
900 | status = ixgbe_get_i2c_ack(hw); | ||
901 | if (status != 0) | ||
902 | goto fail; | ||
903 | |||
904 | ixgbe_i2c_stop(hw); | ||
905 | break; | ||
906 | |||
907 | fail: | ||
908 | ixgbe_i2c_bus_clear(hw); | ||
909 | retry++; | ||
910 | if (retry < max_retry) | ||
911 | hw_dbg(hw, "I2C byte write error - Retrying.\n"); | ||
912 | else | ||
913 | hw_dbg(hw, "I2C byte write error.\n"); | ||
914 | } while (retry < max_retry); | ||
915 | |||
916 | return status; | ||
917 | } | ||
918 | |||
919 | /** | ||
920 | * ixgbe_i2c_start - Sets I2C start condition | ||
921 | * @hw: pointer to hardware structure | ||
922 | * | ||
923 | * Sets I2C start condition (High -> Low on SDA while SCL is High) | ||
924 | **/ | ||
925 | static void ixgbe_i2c_start(struct ixgbe_hw *hw) | ||
926 | { | ||
927 | u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL); | ||
928 | |||
929 | /* Start condition must begin with data and clock high */ | ||
930 | ixgbe_set_i2c_data(hw, &i2cctl, 1); | ||
931 | ixgbe_raise_i2c_clk(hw, &i2cctl); | ||
932 | |||
933 | /* Setup time for start condition (4.7us) */ | ||
934 | udelay(IXGBE_I2C_T_SU_STA); | ||
935 | |||
936 | ixgbe_set_i2c_data(hw, &i2cctl, 0); | ||
937 | |||
938 | /* Hold time for start condition (4us) */ | ||
939 | udelay(IXGBE_I2C_T_HD_STA); | ||
940 | |||
941 | ixgbe_lower_i2c_clk(hw, &i2cctl); | ||
942 | |||
943 | /* Minimum low period of clock is 4.7 us */ | ||
944 | udelay(IXGBE_I2C_T_LOW); | ||
945 | |||
946 | } | ||
947 | |||
948 | /** | ||
949 | * ixgbe_i2c_stop - Sets I2C stop condition | ||
950 | * @hw: pointer to hardware structure | ||
951 | * | ||
952 | * Sets I2C stop condition (Low -> High on SDA while SCL is High) | ||
953 | **/ | ||
954 | static void ixgbe_i2c_stop(struct ixgbe_hw *hw) | ||
955 | { | ||
956 | u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL); | ||
957 | |||
958 | /* Stop condition must begin with data low and clock high */ | ||
959 | ixgbe_set_i2c_data(hw, &i2cctl, 0); | ||
960 | ixgbe_raise_i2c_clk(hw, &i2cctl); | ||
961 | |||
962 | /* Setup time for stop condition (4us) */ | ||
963 | udelay(IXGBE_I2C_T_SU_STO); | ||
964 | |||
965 | ixgbe_set_i2c_data(hw, &i2cctl, 1); | ||
966 | |||
967 | /* bus free time between stop and start (4.7us)*/ | ||
968 | udelay(IXGBE_I2C_T_BUF); | ||
969 | } | ||
970 | |||
971 | /** | ||
972 | * ixgbe_clock_in_i2c_byte - Clocks in one byte via I2C | ||
973 | * @hw: pointer to hardware structure | ||
974 | * @data: data byte to clock in | ||
975 | * | ||
976 | * Clocks in one byte data via I2C data/clock | ||
977 | **/ | ||
978 | static s32 ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data) | ||
979 | { | ||
980 | s32 status = 0; | ||
981 | s32 i; | ||
982 | bool bit = 0; | ||
983 | |||
984 | for (i = 7; i >= 0; i--) { | ||
985 | status = ixgbe_clock_in_i2c_bit(hw, &bit); | ||
986 | *data |= bit << i; | ||
987 | |||
988 | if (status != 0) | ||
989 | break; | ||
990 | } | ||
991 | |||
992 | return status; | ||
993 | } | ||
994 | |||
995 | /** | ||
996 | * ixgbe_clock_out_i2c_byte - Clocks out one byte via I2C | ||
997 | * @hw: pointer to hardware structure | ||
998 | * @data: data byte clocked out | ||
999 | * | ||
1000 | * Clocks out one byte data via I2C data/clock | ||
1001 | **/ | ||
1002 | static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data) | ||
1003 | { | ||
1004 | s32 status = 0; | ||
1005 | s32 i; | ||
1006 | u32 i2cctl; | ||
1007 | bool bit = 0; | ||
1008 | |||
1009 | for (i = 7; i >= 0; i--) { | ||
1010 | bit = (data >> i) & 0x1; | ||
1011 | status = ixgbe_clock_out_i2c_bit(hw, bit); | ||
1012 | |||
1013 | if (status != 0) | ||
1014 | break; | ||
1015 | } | ||
1016 | |||
1017 | /* Release SDA line (set high) */ | ||
1018 | i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL); | ||
1019 | i2cctl |= IXGBE_I2C_DATA_OUT; | ||
1020 | IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, i2cctl); | ||
1021 | |||
1022 | return status; | ||
1023 | } | ||
1024 | |||
1025 | /** | ||
1026 | * ixgbe_get_i2c_ack - Polls for I2C ACK | ||
1027 | * @hw: pointer to hardware structure | ||
1028 | * | ||
1029 | * Clocks in/out one bit via I2C data/clock | ||
1030 | **/ | ||
1031 | static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw) | ||
1032 | { | ||
1033 | s32 status; | ||
1034 | u32 i = 0; | ||
1035 | u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL); | ||
1036 | u32 timeout = 10; | ||
1037 | bool ack = 1; | ||
1038 | |||
1039 | status = ixgbe_raise_i2c_clk(hw, &i2cctl); | ||
1040 | |||
1041 | if (status != 0) | ||
1042 | goto out; | ||
1043 | |||
1044 | /* Minimum high period of clock is 4us */ | ||
1045 | udelay(IXGBE_I2C_T_HIGH); | ||
1046 | |||
1047 | /* Poll for ACK. Note that ACK in I2C spec is | ||
1048 | * transition from 1 to 0 */ | ||
1049 | for (i = 0; i < timeout; i++) { | ||
1050 | i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL); | ||
1051 | ack = ixgbe_get_i2c_data(&i2cctl); | ||
1052 | |||
1053 | udelay(1); | ||
1054 | if (ack == 0) | ||
1055 | break; | ||
1056 | } | ||
1057 | |||
1058 | if (ack == 1) { | ||
1059 | hw_dbg(hw, "I2C ack was not received.\n"); | ||
1060 | status = IXGBE_ERR_I2C; | ||
1061 | } | ||
1062 | |||
1063 | ixgbe_lower_i2c_clk(hw, &i2cctl); | ||
1064 | |||
1065 | /* Minimum low period of clock is 4.7 us */ | ||
1066 | udelay(IXGBE_I2C_T_LOW); | ||
1067 | |||
1068 | out: | ||
1069 | return status; | ||
1070 | } | ||
1071 | |||
1072 | /** | ||
1073 | * ixgbe_clock_in_i2c_bit - Clocks in one bit via I2C data/clock | ||
1074 | * @hw: pointer to hardware structure | ||
1075 | * @data: read data value | ||
1076 | * | ||
1077 | * Clocks in one bit via I2C data/clock | ||
1078 | **/ | ||
1079 | static s32 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data) | ||
1080 | { | ||
1081 | s32 status; | ||
1082 | u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL); | ||
1083 | |||
1084 | status = ixgbe_raise_i2c_clk(hw, &i2cctl); | ||
1085 | |||
1086 | /* Minimum high period of clock is 4us */ | ||
1087 | udelay(IXGBE_I2C_T_HIGH); | ||
1088 | |||
1089 | i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL); | ||
1090 | *data = ixgbe_get_i2c_data(&i2cctl); | ||
1091 | |||
1092 | ixgbe_lower_i2c_clk(hw, &i2cctl); | ||
1093 | |||
1094 | /* Minimum low period of clock is 4.7 us */ | ||
1095 | udelay(IXGBE_I2C_T_LOW); | ||
1096 | |||
1097 | return status; | ||
1098 | } | ||
1099 | |||
1100 | /** | ||
1101 | * ixgbe_clock_out_i2c_bit - Clocks in/out one bit via I2C data/clock | ||
1102 | * @hw: pointer to hardware structure | ||
1103 | * @data: data value to write | ||
1104 | * | ||
1105 | * Clocks out one bit via I2C data/clock | ||
1106 | **/ | ||
1107 | static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data) | ||
1108 | { | ||
1109 | s32 status; | ||
1110 | u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL); | ||
1111 | |||
1112 | status = ixgbe_set_i2c_data(hw, &i2cctl, data); | ||
1113 | if (status == 0) { | ||
1114 | status = ixgbe_raise_i2c_clk(hw, &i2cctl); | ||
1115 | |||
1116 | /* Minimum high period of clock is 4us */ | ||
1117 | udelay(IXGBE_I2C_T_HIGH); | ||
1118 | |||
1119 | ixgbe_lower_i2c_clk(hw, &i2cctl); | ||
1120 | |||
1121 | /* Minimum low period of clock is 4.7 us. | ||
1122 | * This also takes care of the data hold time. | ||
1123 | */ | ||
1124 | udelay(IXGBE_I2C_T_LOW); | ||
1125 | } else { | ||
1126 | status = IXGBE_ERR_I2C; | ||
1127 | hw_dbg(hw, "I2C data was not set to %X\n", data); | ||
1128 | } | ||
1129 | |||
1130 | return status; | ||
1131 | } | ||
1132 | /** | ||
1133 | * ixgbe_raise_i2c_clk - Raises the I2C SCL clock | ||
1134 | * @hw: pointer to hardware structure | ||
1135 | * @i2cctl: Current value of I2CCTL register | ||
1136 | * | ||
1137 | * Raises the I2C clock line '0'->'1' | ||
1138 | **/ | ||
1139 | static s32 ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl) | ||
1140 | { | ||
1141 | s32 status = 0; | ||
1142 | |||
1143 | *i2cctl |= IXGBE_I2C_CLK_OUT; | ||
1144 | |||
1145 | IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl); | ||
1146 | |||
1147 | /* SCL rise time (1000ns) */ | ||
1148 | udelay(IXGBE_I2C_T_RISE); | ||
1149 | |||
1150 | return status; | ||
1151 | } | ||
1152 | |||
1153 | /** | ||
1154 | * ixgbe_lower_i2c_clk - Lowers the I2C SCL clock | ||
1155 | * @hw: pointer to hardware structure | ||
1156 | * @i2cctl: Current value of I2CCTL register | ||
1157 | * | ||
1158 | * Lowers the I2C clock line '1'->'0' | ||
1159 | **/ | ||
1160 | static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl) | ||
1161 | { | ||
1162 | |||
1163 | *i2cctl &= ~IXGBE_I2C_CLK_OUT; | ||
1164 | |||
1165 | IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl); | ||
1166 | |||
1167 | /* SCL fall time (300ns) */ | ||
1168 | udelay(IXGBE_I2C_T_FALL); | ||
1169 | } | ||
1170 | |||
1171 | /** | ||
1172 | * ixgbe_set_i2c_data - Sets the I2C data bit | ||
1173 | * @hw: pointer to hardware structure | ||
1174 | * @i2cctl: Current value of I2CCTL register | ||
1175 | * @data: I2C data value (0 or 1) to set | ||
1176 | * | ||
1177 | * Sets the I2C data bit | ||
1178 | **/ | ||
1179 | static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data) | ||
1180 | { | ||
1181 | s32 status = 0; | ||
1182 | |||
1183 | if (data) | ||
1184 | *i2cctl |= IXGBE_I2C_DATA_OUT; | ||
1185 | else | ||
1186 | *i2cctl &= ~IXGBE_I2C_DATA_OUT; | ||
1187 | |||
1188 | IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl); | ||
1189 | |||
1190 | /* Data rise/fall (1000ns/300ns) and set-up time (250ns) */ | ||
1191 | udelay(IXGBE_I2C_T_RISE + IXGBE_I2C_T_FALL + IXGBE_I2C_T_SU_DATA); | ||
1192 | |||
1193 | /* Verify data was set correctly */ | ||
1194 | *i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL); | ||
1195 | if (data != ixgbe_get_i2c_data(i2cctl)) { | ||
1196 | status = IXGBE_ERR_I2C; | ||
1197 | hw_dbg(hw, "Error - I2C data was not set to %X.\n", data); | ||
1198 | } | ||
1199 | |||
1200 | return status; | ||
1201 | } | ||
1202 | |||
1203 | /** | ||
1204 | * ixgbe_get_i2c_data - Reads the I2C SDA data bit | ||
1205 | * @hw: pointer to hardware structure | ||
1206 | * @i2cctl: Current value of I2CCTL register | ||
1207 | * | ||
1208 | * Returns the I2C data bit value | ||
1209 | **/ | ||
1210 | static bool ixgbe_get_i2c_data(u32 *i2cctl) | ||
1211 | { | ||
1212 | bool data; | ||
1213 | |||
1214 | if (*i2cctl & IXGBE_I2C_DATA_IN) | ||
1215 | data = 1; | ||
1216 | else | ||
1217 | data = 0; | ||
1218 | |||
1219 | return data; | ||
1220 | } | ||
1221 | |||
1222 | /** | ||
1223 | * ixgbe_i2c_bus_clear - Clears the I2C bus | ||
1224 | * @hw: pointer to hardware structure | ||
1225 | * | ||
1226 | * Clears the I2C bus by sending nine clock pulses. | ||
1227 | * Used when data line is stuck low. | ||
1228 | **/ | ||
1229 | static void ixgbe_i2c_bus_clear(struct ixgbe_hw *hw) | ||
1230 | { | ||
1231 | u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL); | ||
1232 | u32 i; | ||
1233 | |||
1234 | ixgbe_set_i2c_data(hw, &i2cctl, 1); | ||
1235 | |||
1236 | for (i = 0; i < 9; i++) { | ||
1237 | ixgbe_raise_i2c_clk(hw, &i2cctl); | ||
1238 | |||
1239 | /* Min high period of clock is 4us */ | ||
1240 | udelay(IXGBE_I2C_T_HIGH); | ||
1241 | |||
1242 | ixgbe_lower_i2c_clk(hw, &i2cctl); | ||
1243 | |||
1244 | /* Min low period of clock is 4.7us*/ | ||
1245 | udelay(IXGBE_I2C_T_LOW); | ||
1246 | } | ||
1247 | |||
1248 | /* Put the i2c bus back to default state */ | ||
1249 | ixgbe_i2c_stop(hw); | ||
1250 | } | ||
1251 | |||
1252 | /** | ||
691 | * ixgbe_check_phy_link_tnx - Determine link and speed status | 1253 | * ixgbe_check_phy_link_tnx - Determine link and speed status |
692 | * @hw: pointer to hardware structure | 1254 | * @hw: pointer to hardware structure |
693 | * | 1255 | * |
diff --git a/drivers/net/ixgbe/ixgbe_phy.h b/drivers/net/ixgbe/ixgbe_phy.h index 539a3061eb29..cc5f1b3287e1 100644 --- a/drivers/net/ixgbe/ixgbe_phy.h +++ b/drivers/net/ixgbe/ixgbe_phy.h | |||
@@ -54,14 +54,15 @@ | |||
54 | #define IXGBE_I2C_EEPROM_STATUS_IN_PROGRESS 0x3 | 54 | #define IXGBE_I2C_EEPROM_STATUS_IN_PROGRESS 0x3 |
55 | 55 | ||
56 | /* Bit-shift macros */ | 56 | /* Bit-shift macros */ |
57 | #define IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT 12 | 57 | #define IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT 24 |
58 | #define IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT 8 | 58 | #define IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT 16 |
59 | #define IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT 4 | 59 | #define IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT 8 |
60 | 60 | ||
61 | /* Vendor OUIs: format of OUI is 0x[byte0][byte1][byte2][00] */ | 61 | /* Vendor OUIs: format of OUI is 0x[byte0][byte1][byte2][00] */ |
62 | #define IXGBE_SFF_VENDOR_OUI_TYCO 0x00407600 | 62 | #define IXGBE_SFF_VENDOR_OUI_TYCO 0x00407600 |
63 | #define IXGBE_SFF_VENDOR_OUI_FTL 0x00906500 | 63 | #define IXGBE_SFF_VENDOR_OUI_FTL 0x00906500 |
64 | #define IXGBE_SFF_VENDOR_OUI_AVAGO 0x00176A00 | 64 | #define IXGBE_SFF_VENDOR_OUI_AVAGO 0x00176A00 |
65 | #define IXGBE_SFF_VENDOR_OUI_INTEL 0x001B2100 | ||
65 | 66 | ||
66 | /* I2C SDA and SCL timing parameters for standard mode */ | 67 | /* I2C SDA and SCL timing parameters for standard mode */ |
67 | #define IXGBE_I2C_T_HD_STA 4 | 68 | #define IXGBE_I2C_T_HD_STA 4 |
@@ -101,5 +102,12 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw); | |||
101 | s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw, | 102 | s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw, |
102 | u16 *list_offset, | 103 | u16 *list_offset, |
103 | u16 *data_offset); | 104 | u16 *data_offset); |
104 | 105 | s32 ixgbe_read_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset, | |
106 | u8 dev_addr, u8 *data); | ||
107 | s32 ixgbe_write_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset, | ||
108 | u8 dev_addr, u8 data); | ||
109 | s32 ixgbe_read_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset, | ||
110 | u8 *eeprom_data); | ||
111 | s32 ixgbe_write_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset, | ||
112 | u8 eeprom_data); | ||
105 | #endif /* _IXGBE_PHY_H_ */ | 113 | #endif /* _IXGBE_PHY_H_ */ |
diff --git a/drivers/net/ixgbe/ixgbe_type.h b/drivers/net/ixgbe/ixgbe_type.h index 237c688f8b6e..60905936d927 100644 --- a/drivers/net/ixgbe/ixgbe_type.h +++ b/drivers/net/ixgbe/ixgbe_type.h | |||
@@ -45,6 +45,9 @@ | |||
45 | #define IXGBE_DEV_ID_82598_DA_DUAL_PORT 0x10F1 | 45 | #define IXGBE_DEV_ID_82598_DA_DUAL_PORT 0x10F1 |
46 | #define IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM 0x10E1 | 46 | #define IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM 0x10E1 |
47 | #define IXGBE_DEV_ID_82598EB_XF_LR 0x10F4 | 47 | #define IXGBE_DEV_ID_82598EB_XF_LR 0x10F4 |
48 | #define IXGBE_DEV_ID_82599 0x10D8 | ||
49 | #define IXGBE_DEV_ID_82599_KX4 0x10F7 | ||
50 | #define IXGBE_DEV_ID_82599_SFP 0x10FB | ||
48 | 51 | ||
49 | /* General Registers */ | 52 | /* General Registers */ |
50 | #define IXGBE_CTRL 0x00000 | 53 | #define IXGBE_CTRL 0x00000 |
@@ -52,9 +55,12 @@ | |||
52 | #define IXGBE_CTRL_EXT 0x00018 | 55 | #define IXGBE_CTRL_EXT 0x00018 |
53 | #define IXGBE_ESDP 0x00020 | 56 | #define IXGBE_ESDP 0x00020 |
54 | #define IXGBE_EODSDP 0x00028 | 57 | #define IXGBE_EODSDP 0x00028 |
58 | #define IXGBE_I2CCTL 0x00028 | ||
55 | #define IXGBE_LEDCTL 0x00200 | 59 | #define IXGBE_LEDCTL 0x00200 |
56 | #define IXGBE_FRTIMER 0x00048 | 60 | #define IXGBE_FRTIMER 0x00048 |
57 | #define IXGBE_TCPTIMER 0x0004C | 61 | #define IXGBE_TCPTIMER 0x0004C |
62 | #define IXGBE_CORESPARE 0x00600 | ||
63 | #define IXGBE_EXVET 0x05078 | ||
58 | 64 | ||
59 | /* NVM Registers */ | 65 | /* NVM Registers */ |
60 | #define IXGBE_EEC 0x10010 | 66 | #define IXGBE_EEC 0x10010 |
@@ -68,6 +74,19 @@ | |||
68 | #define IXGBE_FLOP 0x1013C | 74 | #define IXGBE_FLOP 0x1013C |
69 | #define IXGBE_GRC 0x10200 | 75 | #define IXGBE_GRC 0x10200 |
70 | 76 | ||
77 | /* General Receive Control */ | ||
78 | #define IXGBE_GRC_MNG 0x00000001 /* Manageability Enable */ | ||
79 | #define IXGBE_GRC_APME 0x00000002 /* Advanced Power Management Enable */ | ||
80 | |||
81 | #define IXGBE_VPDDIAG0 0x10204 | ||
82 | #define IXGBE_VPDDIAG1 0x10208 | ||
83 | |||
84 | /* I2CCTL Bit Masks */ | ||
85 | #define IXGBE_I2C_CLK_IN 0x00000001 | ||
86 | #define IXGBE_I2C_CLK_OUT 0x00000002 | ||
87 | #define IXGBE_I2C_DATA_IN 0x00000004 | ||
88 | #define IXGBE_I2C_DATA_OUT 0x00000008 | ||
89 | |||
71 | /* Interrupt Registers */ | 90 | /* Interrupt Registers */ |
72 | #define IXGBE_EICR 0x00800 | 91 | #define IXGBE_EICR 0x00800 |
73 | #define IXGBE_EICS 0x00808 | 92 | #define IXGBE_EICS 0x00808 |
@@ -75,28 +94,54 @@ | |||
75 | #define IXGBE_EIMC 0x00888 | 94 | #define IXGBE_EIMC 0x00888 |
76 | #define IXGBE_EIAC 0x00810 | 95 | #define IXGBE_EIAC 0x00810 |
77 | #define IXGBE_EIAM 0x00890 | 96 | #define IXGBE_EIAM 0x00890 |
78 | #define IXGBE_EITR(_i) (((_i) <= 23) ? (0x00820 + ((_i) * 4)) : (0x012300 + ((_i) * 4))) | 97 | #define IXGBE_EICS_EX(_i) (0x00A90 + (_i) * 4) |
98 | #define IXGBE_EIMS_EX(_i) (0x00AA0 + (_i) * 4) | ||
99 | #define IXGBE_EIMC_EX(_i) (0x00AB0 + (_i) * 4) | ||
100 | #define IXGBE_EIAM_EX(_i) (0x00AD0 + (_i) * 4) | ||
101 | #define IXGBE_EITR(_i) (((_i) <= 23) ? (0x00820 + ((_i) * 4)) : \ | ||
102 | (0x012300 + (((_i) - 24) * 4))) | ||
103 | #define IXGBE_EITR_ITR_INT_MASK 0x00000FFF | ||
104 | #define IXGBE_EITR_LLI_MOD 0x00008000 | ||
105 | #define IXGBE_EITR_CNT_WDIS 0x80000000 | ||
79 | #define IXGBE_IVAR(_i) (0x00900 + ((_i) * 4)) /* 24 at 0x900-0x960 */ | 106 | #define IXGBE_IVAR(_i) (0x00900 + ((_i) * 4)) /* 24 at 0x900-0x960 */ |
107 | #define IXGBE_IVAR_MISC 0x00A00 /* misc MSI-X interrupt causes */ | ||
108 | #define IXGBE_EITRSEL 0x00894 | ||
80 | #define IXGBE_MSIXT 0x00000 /* MSI-X Table. 0x0000 - 0x01C */ | 109 | #define IXGBE_MSIXT 0x00000 /* MSI-X Table. 0x0000 - 0x01C */ |
81 | #define IXGBE_MSIXPBA 0x02000 /* MSI-X Pending bit array */ | 110 | #define IXGBE_MSIXPBA 0x02000 /* MSI-X Pending bit array */ |
82 | #define IXGBE_PBACL(_i) (((_i) == 0) ? (0x11068) : (0x110C0 + ((_i) * 4))) | 111 | #define IXGBE_PBACL(_i) (((_i) == 0) ? (0x11068) : (0x110C0 + ((_i) * 4))) |
83 | #define IXGBE_GPIE 0x00898 | 112 | #define IXGBE_GPIE 0x00898 |
84 | 113 | ||
85 | /* Flow Control Registers */ | 114 | /* Flow Control Registers */ |
115 | #define IXGBE_FCADBUL 0x03210 | ||
116 | #define IXGBE_FCADBUH 0x03214 | ||
117 | #define IXGBE_FCAMACL 0x04328 | ||
118 | #define IXGBE_FCAMACH 0x0432C | ||
119 | #define IXGBE_FCRTH_82599(_i) (0x03260 + ((_i) * 4)) /* 8 of these (0-7) */ | ||
120 | #define IXGBE_FCRTL_82599(_i) (0x03220 + ((_i) * 4)) /* 8 of these (0-7) */ | ||
86 | #define IXGBE_PFCTOP 0x03008 | 121 | #define IXGBE_PFCTOP 0x03008 |
87 | #define IXGBE_FCTTV(_i) (0x03200 + ((_i) * 4)) /* 4 of these (0-3) */ | 122 | #define IXGBE_FCTTV(_i) (0x03200 + ((_i) * 4)) /* 4 of these (0-3) */ |
88 | #define IXGBE_FCRTL(_i) (0x03220 + ((_i) * 8)) /* 8 of these (0-7) */ | 123 | #define IXGBE_FCRTL(_i) (0x03220 + ((_i) * 8)) /* 8 of these (0-7) */ |
89 | #define IXGBE_FCRTH(_i) (0x03260 + ((_i) * 8)) /* 8 of these (0-7) */ | 124 | #define IXGBE_FCRTH(_i) (0x03260 + ((_i) * 8)) /* 8 of these (0-7) */ |
90 | #define IXGBE_FCRTV 0x032A0 | 125 | #define IXGBE_FCRTV 0x032A0 |
126 | #define IXGBE_FCCFG 0x03D00 | ||
91 | #define IXGBE_TFCS 0x0CE00 | 127 | #define IXGBE_TFCS 0x0CE00 |
92 | 128 | ||
93 | /* Receive DMA Registers */ | 129 | /* Receive DMA Registers */ |
94 | #define IXGBE_RDBAL(_i) (((_i) < 64) ? (0x01000 + ((_i) * 0x40)) : (0x0D000 + ((_i - 64) * 0x40))) | 130 | #define IXGBE_RDBAL(_i) (((_i) < 64) ? (0x01000 + ((_i) * 0x40)) : \ |
95 | #define IXGBE_RDBAH(_i) (((_i) < 64) ? (0x01004 + ((_i) * 0x40)) : (0x0D004 + ((_i - 64) * 0x40))) | 131 | (0x0D000 + ((_i - 64) * 0x40))) |
96 | #define IXGBE_RDLEN(_i) (((_i) < 64) ? (0x01008 + ((_i) * 0x40)) : (0x0D008 + ((_i - 64) * 0x40))) | 132 | #define IXGBE_RDBAH(_i) (((_i) < 64) ? (0x01004 + ((_i) * 0x40)) : \ |
97 | #define IXGBE_RDH(_i) (((_i) < 64) ? (0x01010 + ((_i) * 0x40)) : (0x0D010 + ((_i - 64) * 0x40))) | 133 | (0x0D004 + ((_i - 64) * 0x40))) |
98 | #define IXGBE_RDT(_i) (((_i) < 64) ? (0x01018 + ((_i) * 0x40)) : (0x0D018 + ((_i - 64) * 0x40))) | 134 | #define IXGBE_RDLEN(_i) (((_i) < 64) ? (0x01008 + ((_i) * 0x40)) : \ |
99 | #define IXGBE_RXDCTL(_i) (((_i) < 64) ? (0x01028 + ((_i) * 0x40)) : (0x0D028 + ((_i - 64) * 0x40))) | 135 | (0x0D008 + ((_i - 64) * 0x40))) |
136 | #define IXGBE_RDH(_i) (((_i) < 64) ? (0x01010 + ((_i) * 0x40)) : \ | ||
137 | (0x0D010 + ((_i - 64) * 0x40))) | ||
138 | #define IXGBE_RDT(_i) (((_i) < 64) ? (0x01018 + ((_i) * 0x40)) : \ | ||
139 | (0x0D018 + ((_i - 64) * 0x40))) | ||
140 | #define IXGBE_RXDCTL(_i) (((_i) < 64) ? (0x01028 + ((_i) * 0x40)) : \ | ||
141 | (0x0D028 + ((_i - 64) * 0x40))) | ||
142 | #define IXGBE_RDDCC 0x02F20 | ||
143 | #define IXGBE_RXMEMWRAP 0x03190 | ||
144 | #define IXGBE_STARCTRL 0x03024 | ||
100 | /* | 145 | /* |
101 | * Split and Replication Receive Control Registers | 146 | * Split and Replication Receive Control Registers |
102 | * 00-15 : 0x02100 + n*4 | 147 | * 00-15 : 0x02100 + n*4 |
@@ -129,10 +174,15 @@ | |||
129 | #define IXGBE_DRECCCTL_DISABLE 0 | 174 | #define IXGBE_DRECCCTL_DISABLE 0 |
130 | /* Multicast Table Array - 128 entries */ | 175 | /* Multicast Table Array - 128 entries */ |
131 | #define IXGBE_MTA(_i) (0x05200 + ((_i) * 4)) | 176 | #define IXGBE_MTA(_i) (0x05200 + ((_i) * 4)) |
132 | #define IXGBE_RAL(_i) (((_i) <= 15) ? (0x05400 + ((_i) * 8)) : (0x0A200 + ((_i) * 8))) | 177 | #define IXGBE_RAL(_i) (((_i) <= 15) ? (0x05400 + ((_i) * 8)) : \ |
133 | #define IXGBE_RAH(_i) (((_i) <= 15) ? (0x05404 + ((_i) * 8)) : (0x0A204 + ((_i) * 8))) | 178 | (0x0A200 + ((_i) * 8))) |
179 | #define IXGBE_RAH(_i) (((_i) <= 15) ? (0x05404 + ((_i) * 8)) : \ | ||
180 | (0x0A204 + ((_i) * 8))) | ||
181 | #define IXGBE_MPSAR_LO(_i) (0x0A600 + ((_i) * 8)) | ||
182 | #define IXGBE_MPSAR_HI(_i) (0x0A604 + ((_i) * 8)) | ||
134 | /* Packet split receive type */ | 183 | /* Packet split receive type */ |
135 | #define IXGBE_PSRTYPE(_i) (((_i) <= 15) ? (0x05480 + ((_i) * 4)) : (0x0EA00 + ((_i) * 4))) | 184 | #define IXGBE_PSRTYPE(_i) (((_i) <= 15) ? (0x05480 + ((_i) * 4)) : \ |
185 | (0x0EA00 + ((_i) * 4))) | ||
136 | /* array of 4096 1-bit vlan filters */ | 186 | /* array of 4096 1-bit vlan filters */ |
137 | #define IXGBE_VFTA(_i) (0x0A000 + ((_i) * 4)) | 187 | #define IXGBE_VFTA(_i) (0x0A000 + ((_i) * 4)) |
138 | /*array of 4096 4-bit vlan vmdq indices */ | 188 | /*array of 4096 4-bit vlan vmdq indices */ |
@@ -141,6 +191,28 @@ | |||
141 | #define IXGBE_VLNCTRL 0x05088 | 191 | #define IXGBE_VLNCTRL 0x05088 |
142 | #define IXGBE_MCSTCTRL 0x05090 | 192 | #define IXGBE_MCSTCTRL 0x05090 |
143 | #define IXGBE_MRQC 0x05818 | 193 | #define IXGBE_MRQC 0x05818 |
194 | #define IXGBE_SAQF(_i) (0x0E000 + ((_i) * 4)) /* Source Address Queue Filter */ | ||
195 | #define IXGBE_DAQF(_i) (0x0E200 + ((_i) * 4)) /* Dest. Address Queue Filter */ | ||
196 | #define IXGBE_SDPQF(_i) (0x0E400 + ((_i) * 4)) /* Src Dest. Addr Queue Filter */ | ||
197 | #define IXGBE_FTQF(_i) (0x0E600 + ((_i) * 4)) /* Five Tuple Queue Filter */ | ||
198 | #define IXGBE_ETQF(_i) (0x05128 + ((_i) * 4)) /* EType Queue Filter */ | ||
199 | #define IXGBE_ETQS(_i) (0x0EC00 + ((_i) * 4)) /* EType Queue Select */ | ||
200 | #define IXGBE_SYNQF 0x0EC30 /* SYN Packet Queue Filter */ | ||
201 | #define IXGBE_RQTC 0x0EC70 | ||
202 | #define IXGBE_MTQC 0x08120 | ||
203 | #define IXGBE_VLVF(_i) (0x0F100 + ((_i) * 4)) /* 64 of these (0-63) */ | ||
204 | #define IXGBE_VLVFB(_i) (0x0F200 + ((_i) * 4)) /* 128 of these (0-127) */ | ||
205 | #define IXGBE_VT_CTL 0x051B0 | ||
206 | #define IXGBE_VFRE(_i) (0x051E0 + ((_i) * 4)) | ||
207 | #define IXGBE_VFTE(_i) (0x08110 + ((_i) * 4)) | ||
208 | #define IXGBE_QDE 0x2F04 | ||
209 | #define IXGBE_VMOLR(_i) (0x0F000 + ((_i) * 4)) /* 64 total */ | ||
210 | #define IXGBE_UTA(_i) (0x0F400 + ((_i) * 4)) | ||
211 | #define IXGBE_VMRCTL(_i) (0x0F600 + ((_i) * 4)) | ||
212 | #define IXGBE_VMRVLAN(_i) (0x0F610 + ((_i) * 4)) | ||
213 | #define IXGBE_VMRVM(_i) (0x0F630 + ((_i) * 4)) | ||
214 | #define IXGBE_L34T_IMIR(_i) (0x0E800 + ((_i) * 4)) /*128 of these (0-127)*/ | ||
215 | #define IXGBE_LLITHRESH 0x0EC90 | ||
144 | #define IXGBE_IMIR(_i) (0x05A80 + ((_i) * 4)) /* 8 of these (0-7) */ | 216 | #define IXGBE_IMIR(_i) (0x05A80 + ((_i) * 4)) /* 8 of these (0-7) */ |
145 | #define IXGBE_IMIREXT(_i) (0x05AA0 + ((_i) * 4)) /* 8 of these (0-7) */ | 217 | #define IXGBE_IMIREXT(_i) (0x05AA0 + ((_i) * 4)) /* 8 of these (0-7) */ |
146 | #define IXGBE_IMIRVP 0x05AC0 | 218 | #define IXGBE_IMIRVP 0x05AC0 |
@@ -148,7 +220,6 @@ | |||
148 | #define IXGBE_RETA(_i) (0x05C00 + ((_i) * 4)) /* 32 of these (0-31) */ | 220 | #define IXGBE_RETA(_i) (0x05C00 + ((_i) * 4)) /* 32 of these (0-31) */ |
149 | #define IXGBE_RSSRK(_i) (0x05C80 + ((_i) * 4)) /* 10 of these (0-9) */ | 221 | #define IXGBE_RSSRK(_i) (0x05C80 + ((_i) * 4)) /* 10 of these (0-9) */ |
150 | 222 | ||
151 | |||
152 | /* Transmit DMA registers */ | 223 | /* Transmit DMA registers */ |
153 | #define IXGBE_TDBAL(_i) (0x06000 + ((_i) * 0x40)) /* 32 of these (0-31)*/ | 224 | #define IXGBE_TDBAL(_i) (0x06000 + ((_i) * 0x40)) /* 32 of these (0-31)*/ |
154 | #define IXGBE_TDBAH(_i) (0x06004 + ((_i) * 0x40)) | 225 | #define IXGBE_TDBAH(_i) (0x06004 + ((_i) * 0x40)) |
@@ -160,7 +231,20 @@ | |||
160 | #define IXGBE_TDWBAH(_i) (0x0603C + ((_i) * 0x40)) | 231 | #define IXGBE_TDWBAH(_i) (0x0603C + ((_i) * 0x40)) |
161 | #define IXGBE_DTXCTL 0x07E00 | 232 | #define IXGBE_DTXCTL 0x07E00 |
162 | 233 | ||
234 | #define IXGBE_DMATXCTL 0x04A80 | ||
235 | #define IXGBE_DTXMXSZRQ 0x08100 | ||
236 | #define IXGBE_DTXTCPFLGL 0x04A88 | ||
237 | #define IXGBE_DTXTCPFLGH 0x04A8C | ||
238 | #define IXGBE_LBDRPEN 0x0CA00 | ||
239 | #define IXGBE_TXPBTHRESH(_i) (0x04950 + ((_i) * 4)) /* 8 of these 0 - 7 */ | ||
240 | |||
241 | #define IXGBE_DMATXCTL_TE 0x1 /* Transmit Enable */ | ||
242 | #define IXGBE_DMATXCTL_NS 0x2 /* No Snoop LSO hdr buffer */ | ||
243 | #define IXGBE_DMATXCTL_GDV 0x8 /* Global Double VLAN */ | ||
244 | #define IXGBE_DMATXCTL_VT_SHIFT 16 /* VLAN EtherType */ | ||
163 | #define IXGBE_DCA_TXCTRL(_i) (0x07200 + ((_i) * 4)) /* 16 of these (0-15) */ | 245 | #define IXGBE_DCA_TXCTRL(_i) (0x07200 + ((_i) * 4)) /* 16 of these (0-15) */ |
246 | /* Tx DCA Control register : 128 of these (0-127) */ | ||
247 | #define IXGBE_DCA_TXCTRL_82599(_i) (0x0600C + ((_i) * 0x40)) | ||
164 | #define IXGBE_TIPG 0x0CB00 | 248 | #define IXGBE_TIPG 0x0CB00 |
165 | #define IXGBE_TXPBSIZE(_i) (0x0CC00 + ((_i) * 4)) /* 8 of these */ | 249 | #define IXGBE_TXPBSIZE(_i) (0x0CC00 + ((_i) * 4)) /* 8 of these */ |
166 | #define IXGBE_MNGTXMAP 0x0CD10 | 250 | #define IXGBE_MNGTXMAP 0x0CD10 |
@@ -177,9 +261,69 @@ | |||
177 | 261 | ||
178 | #define IXGBE_WUPL 0x05900 | 262 | #define IXGBE_WUPL 0x05900 |
179 | #define IXGBE_WUPM 0x05A00 /* wake up pkt memory 0x5A00-0x5A7C */ | 263 | #define IXGBE_WUPM 0x05A00 /* wake up pkt memory 0x5A00-0x5A7C */ |
180 | #define IXGBE_FHFT 0x09000 /* Flex host filter table 9000-93FC */ | 264 | #define IXGBE_FHFT(_n) (0x09000 + (_n * 0x100)) /* Flex host filter table */ |
181 | 265 | #define IXGBE_FHFT_EXT(_n) (0x09800 + (_n * 0x100)) /* Ext Flexible Host | |
182 | /* Music registers */ | 266 | * Filter Table */ |
267 | |||
268 | #define IXGBE_FLEXIBLE_FILTER_COUNT_MAX 4 | ||
269 | #define IXGBE_EXT_FLEXIBLE_FILTER_COUNT_MAX 2 | ||
270 | |||
271 | /* Each Flexible Filter is at most 128 (0x80) bytes in length */ | ||
272 | #define IXGBE_FLEXIBLE_FILTER_SIZE_MAX 128 | ||
273 | #define IXGBE_FHFT_LENGTH_OFFSET 0xFC /* Length byte in FHFT */ | ||
274 | #define IXGBE_FHFT_LENGTH_MASK 0x0FF /* Length in lower byte */ | ||
275 | |||
276 | /* Definitions for power management and wakeup registers */ | ||
277 | /* Wake Up Control */ | ||
278 | #define IXGBE_WUC_PME_EN 0x00000002 /* PME Enable */ | ||
279 | #define IXGBE_WUC_PME_STATUS 0x00000004 /* PME Status */ | ||
280 | #define IXGBE_WUC_ADVD3WUC 0x00000010 /* D3Cold wake up cap. enable*/ | ||
281 | |||
282 | /* Wake Up Filter Control */ | ||
283 | #define IXGBE_WUFC_LNKC 0x00000001 /* Link Status Change Wakeup Enable */ | ||
284 | #define IXGBE_WUFC_MAG 0x00000002 /* Magic Packet Wakeup Enable */ | ||
285 | #define IXGBE_WUFC_EX 0x00000004 /* Directed Exact Wakeup Enable */ | ||
286 | #define IXGBE_WUFC_MC 0x00000008 /* Directed Multicast Wakeup Enable */ | ||
287 | #define IXGBE_WUFC_BC 0x00000010 /* Broadcast Wakeup Enable */ | ||
288 | #define IXGBE_WUFC_ARP 0x00000020 /* ARP Request Packet Wakeup Enable */ | ||
289 | #define IXGBE_WUFC_IPV4 0x00000040 /* Directed IPv4 Packet Wakeup Enable */ | ||
290 | #define IXGBE_WUFC_IPV6 0x00000080 /* Directed IPv6 Packet Wakeup Enable */ | ||
291 | #define IXGBE_WUFC_MNG 0x00000100 /* Directed Mgmt Packet Wakeup Enable */ | ||
292 | |||
293 | #define IXGBE_WUFC_IGNORE_TCO 0x00008000 /* Ignore WakeOn TCO packets */ | ||
294 | #define IXGBE_WUFC_FLX0 0x00010000 /* Flexible Filter 0 Enable */ | ||
295 | #define IXGBE_WUFC_FLX1 0x00020000 /* Flexible Filter 1 Enable */ | ||
296 | #define IXGBE_WUFC_FLX2 0x00040000 /* Flexible Filter 2 Enable */ | ||
297 | #define IXGBE_WUFC_FLX3 0x00080000 /* Flexible Filter 3 Enable */ | ||
298 | #define IXGBE_WUFC_FLX4 0x00100000 /* Flexible Filter 4 Enable */ | ||
299 | #define IXGBE_WUFC_FLX5 0x00200000 /* Flexible Filter 5 Enable */ | ||
300 | #define IXGBE_WUFC_FLX_FILTERS 0x000F0000 /* Mask for 4 flex filters */ | ||
301 | #define IXGBE_WUFC_EXT_FLX_FILTERS 0x00300000 /* Mask for Ext. flex filters */ | ||
302 | #define IXGBE_WUFC_ALL_FILTERS 0x003F00FF /* Mask for all 6 wakeup filters*/ | ||
303 | #define IXGBE_WUFC_FLX_OFFSET 16 /* Offset to the Flexible Filters bits */ | ||
304 | |||
305 | /* Wake Up Status */ | ||
306 | #define IXGBE_WUS_LNKC IXGBE_WUFC_LNKC | ||
307 | #define IXGBE_WUS_MAG IXGBE_WUFC_MAG | ||
308 | #define IXGBE_WUS_EX IXGBE_WUFC_EX | ||
309 | #define IXGBE_WUS_MC IXGBE_WUFC_MC | ||
310 | #define IXGBE_WUS_BC IXGBE_WUFC_BC | ||
311 | #define IXGBE_WUS_ARP IXGBE_WUFC_ARP | ||
312 | #define IXGBE_WUS_IPV4 IXGBE_WUFC_IPV4 | ||
313 | #define IXGBE_WUS_IPV6 IXGBE_WUFC_IPV6 | ||
314 | #define IXGBE_WUS_MNG IXGBE_WUFC_MNG | ||
315 | #define IXGBE_WUS_FLX0 IXGBE_WUFC_FLX0 | ||
316 | #define IXGBE_WUS_FLX1 IXGBE_WUFC_FLX1 | ||
317 | #define IXGBE_WUS_FLX2 IXGBE_WUFC_FLX2 | ||
318 | #define IXGBE_WUS_FLX3 IXGBE_WUFC_FLX3 | ||
319 | #define IXGBE_WUS_FLX4 IXGBE_WUFC_FLX4 | ||
320 | #define IXGBE_WUS_FLX5 IXGBE_WUFC_FLX5 | ||
321 | #define IXGBE_WUS_FLX_FILTERS IXGBE_WUFC_FLX_FILTERS | ||
322 | |||
323 | /* Wake Up Packet Length */ | ||
324 | #define IXGBE_WUPL_LENGTH_MASK 0xFFFF | ||
325 | |||
326 | /* DCB registers */ | ||
183 | #define IXGBE_RMCS 0x03D00 | 327 | #define IXGBE_RMCS 0x03D00 |
184 | #define IXGBE_DPMCS 0x07F40 | 328 | #define IXGBE_DPMCS 0x07F40 |
185 | #define IXGBE_PDPMCS 0x0CD00 | 329 | #define IXGBE_PDPMCS 0x0CD00 |
@@ -192,6 +336,122 @@ | |||
192 | #define IXGBE_TDPT2TCSR(_i) (0x0CD40 + ((_i) * 4)) /* 8 of these (0-7) */ | 336 | #define IXGBE_TDPT2TCSR(_i) (0x0CD40 + ((_i) * 4)) /* 8 of these (0-7) */ |
193 | 337 | ||
194 | 338 | ||
339 | /* Security Control Registers */ | ||
340 | #define IXGBE_SECTXCTRL 0x08800 | ||
341 | #define IXGBE_SECTXSTAT 0x08804 | ||
342 | #define IXGBE_SECTXBUFFAF 0x08808 | ||
343 | #define IXGBE_SECTXMINIFG 0x08810 | ||
344 | #define IXGBE_SECTXSTAT 0x08804 | ||
345 | #define IXGBE_SECRXCTRL 0x08D00 | ||
346 | #define IXGBE_SECRXSTAT 0x08D04 | ||
347 | |||
348 | /* Security Bit Fields and Masks */ | ||
349 | #define IXGBE_SECTXCTRL_SECTX_DIS 0x00000001 | ||
350 | #define IXGBE_SECTXCTRL_TX_DIS 0x00000002 | ||
351 | #define IXGBE_SECTXCTRL_STORE_FORWARD 0x00000004 | ||
352 | |||
353 | #define IXGBE_SECTXSTAT_SECTX_RDY 0x00000001 | ||
354 | #define IXGBE_SECTXSTAT_ECC_TXERR 0x00000002 | ||
355 | |||
356 | #define IXGBE_SECRXCTRL_SECRX_DIS 0x00000001 | ||
357 | #define IXGBE_SECRXCTRL_RX_DIS 0x00000002 | ||
358 | |||
359 | #define IXGBE_SECRXSTAT_SECRX_RDY 0x00000001 | ||
360 | #define IXGBE_SECRXSTAT_ECC_RXERR 0x00000002 | ||
361 | |||
362 | /* LinkSec (MacSec) Registers */ | ||
363 | #define IXGBE_LSECTXCAP 0x08A00 | ||
364 | #define IXGBE_LSECRXCAP 0x08F00 | ||
365 | #define IXGBE_LSECTXCTRL 0x08A04 | ||
366 | #define IXGBE_LSECTXSCL 0x08A08 /* SCI Low */ | ||
367 | #define IXGBE_LSECTXSCH 0x08A0C /* SCI High */ | ||
368 | #define IXGBE_LSECTXSA 0x08A10 | ||
369 | #define IXGBE_LSECTXPN0 0x08A14 | ||
370 | #define IXGBE_LSECTXPN1 0x08A18 | ||
371 | #define IXGBE_LSECTXKEY0(_n) (0x08A1C + (4 * (_n))) /* 4 of these (0-3) */ | ||
372 | #define IXGBE_LSECTXKEY1(_n) (0x08A2C + (4 * (_n))) /* 4 of these (0-3) */ | ||
373 | #define IXGBE_LSECRXCTRL 0x08F04 | ||
374 | #define IXGBE_LSECRXSCL 0x08F08 | ||
375 | #define IXGBE_LSECRXSCH 0x08F0C | ||
376 | #define IXGBE_LSECRXSA(_i) (0x08F10 + (4 * (_i))) /* 2 of these (0-1) */ | ||
377 | #define IXGBE_LSECRXPN(_i) (0x08F18 + (4 * (_i))) /* 2 of these (0-1) */ | ||
378 | #define IXGBE_LSECRXKEY(_n, _m) (0x08F20 + ((0x10 * (_n)) + (4 * (_m)))) | ||
379 | #define IXGBE_LSECTXUT 0x08A3C /* OutPktsUntagged */ | ||
380 | #define IXGBE_LSECTXPKTE 0x08A40 /* OutPktsEncrypted */ | ||
381 | #define IXGBE_LSECTXPKTP 0x08A44 /* OutPktsProtected */ | ||
382 | #define IXGBE_LSECTXOCTE 0x08A48 /* OutOctetsEncrypted */ | ||
383 | #define IXGBE_LSECTXOCTP 0x08A4C /* OutOctetsProtected */ | ||
384 | #define IXGBE_LSECRXUT 0x08F40 /* InPktsUntagged/InPktsNoTag */ | ||
385 | #define IXGBE_LSECRXOCTD 0x08F44 /* InOctetsDecrypted */ | ||
386 | #define IXGBE_LSECRXOCTV 0x08F48 /* InOctetsValidated */ | ||
387 | #define IXGBE_LSECRXBAD 0x08F4C /* InPktsBadTag */ | ||
388 | #define IXGBE_LSECRXNOSCI 0x08F50 /* InPktsNoSci */ | ||
389 | #define IXGBE_LSECRXUNSCI 0x08F54 /* InPktsUnknownSci */ | ||
390 | #define IXGBE_LSECRXUNCH 0x08F58 /* InPktsUnchecked */ | ||
391 | #define IXGBE_LSECRXDELAY 0x08F5C /* InPktsDelayed */ | ||
392 | #define IXGBE_LSECRXLATE 0x08F60 /* InPktsLate */ | ||
393 | #define IXGBE_LSECRXOK(_n) (0x08F64 + (0x04 * (_n))) /* InPktsOk */ | ||
394 | #define IXGBE_LSECRXINV(_n) (0x08F6C + (0x04 * (_n))) /* InPktsInvalid */ | ||
395 | #define IXGBE_LSECRXNV(_n) (0x08F74 + (0x04 * (_n))) /* InPktsNotValid */ | ||
396 | #define IXGBE_LSECRXUNSA 0x08F7C /* InPktsUnusedSa */ | ||
397 | #define IXGBE_LSECRXNUSA 0x08F80 /* InPktsNotUsingSa */ | ||
398 | |||
399 | /* LinkSec (MacSec) Bit Fields and Masks */ | ||
400 | #define IXGBE_LSECTXCAP_SUM_MASK 0x00FF0000 | ||
401 | #define IXGBE_LSECTXCAP_SUM_SHIFT 16 | ||
402 | #define IXGBE_LSECRXCAP_SUM_MASK 0x00FF0000 | ||
403 | #define IXGBE_LSECRXCAP_SUM_SHIFT 16 | ||
404 | |||
405 | #define IXGBE_LSECTXCTRL_EN_MASK 0x00000003 | ||
406 | #define IXGBE_LSECTXCTRL_DISABLE 0x0 | ||
407 | #define IXGBE_LSECTXCTRL_AUTH 0x1 | ||
408 | #define IXGBE_LSECTXCTRL_AUTH_ENCRYPT 0x2 | ||
409 | #define IXGBE_LSECTXCTRL_AISCI 0x00000020 | ||
410 | #define IXGBE_LSECTXCTRL_PNTHRSH_MASK 0xFFFFFF00 | ||
411 | #define IXGBE_LSECTXCTRL_RSV_MASK 0x000000D8 | ||
412 | |||
413 | #define IXGBE_LSECRXCTRL_EN_MASK 0x0000000C | ||
414 | #define IXGBE_LSECRXCTRL_EN_SHIFT 2 | ||
415 | #define IXGBE_LSECRXCTRL_DISABLE 0x0 | ||
416 | #define IXGBE_LSECRXCTRL_CHECK 0x1 | ||
417 | #define IXGBE_LSECRXCTRL_STRICT 0x2 | ||
418 | #define IXGBE_LSECRXCTRL_DROP 0x3 | ||
419 | #define IXGBE_LSECRXCTRL_PLSH 0x00000040 | ||
420 | #define IXGBE_LSECRXCTRL_RP 0x00000080 | ||
421 | #define IXGBE_LSECRXCTRL_RSV_MASK 0xFFFFFF33 | ||
422 | |||
423 | /* IpSec Registers */ | ||
424 | #define IXGBE_IPSTXIDX 0x08900 | ||
425 | #define IXGBE_IPSTXSALT 0x08904 | ||
426 | #define IXGBE_IPSTXKEY(_i) (0x08908 + (4 * (_i))) /* 4 of these (0-3) */ | ||
427 | #define IXGBE_IPSRXIDX 0x08E00 | ||
428 | #define IXGBE_IPSRXIPADDR(_i) (0x08E04 + (4 * (_i))) /* 4 of these (0-3) */ | ||
429 | #define IXGBE_IPSRXSPI 0x08E14 | ||
430 | #define IXGBE_IPSRXIPIDX 0x08E18 | ||
431 | #define IXGBE_IPSRXKEY(_i) (0x08E1C + (4 * (_i))) /* 4 of these (0-3) */ | ||
432 | #define IXGBE_IPSRXSALT 0x08E2C | ||
433 | #define IXGBE_IPSRXMOD 0x08E30 | ||
434 | |||
435 | #define IXGBE_SECTXCTRL_STORE_FORWARD_ENABLE 0x4 | ||
436 | |||
437 | /* DCB registers */ | ||
438 | #define IXGBE_RTRPCS 0x02430 | ||
439 | #define IXGBE_RTTDCS 0x04900 | ||
440 | #define IXGBE_RTTPCS 0x0CD00 | ||
441 | #define IXGBE_RTRUP2TC 0x03020 | ||
442 | #define IXGBE_RTTUP2TC 0x0C800 | ||
443 | #define IXGBE_RTRPT4C(_i) (0x02140 + ((_i) * 4)) /* 8 of these (0-7) */ | ||
444 | #define IXGBE_RTRPT4S(_i) (0x02160 + ((_i) * 4)) /* 8 of these (0-7) */ | ||
445 | #define IXGBE_RTTDT2C(_i) (0x04910 + ((_i) * 4)) /* 8 of these (0-7) */ | ||
446 | #define IXGBE_RTTDT2S(_i) (0x04930 + ((_i) * 4)) /* 8 of these (0-7) */ | ||
447 | #define IXGBE_RTTPT2C(_i) (0x0CD20 + ((_i) * 4)) /* 8 of these (0-7) */ | ||
448 | #define IXGBE_RTTPT2S(_i) (0x0CD40 + ((_i) * 4)) /* 8 of these (0-7) */ | ||
449 | #define IXGBE_RTTDQSEL 0x04904 | ||
450 | #define IXGBE_RTTDT1C 0x04908 | ||
451 | #define IXGBE_RTTDT1S 0x0490C | ||
452 | #define IXGBE_RTTDTECC 0x04990 | ||
453 | #define IXGBE_RTTDTECC_NO_BCN 0x00000100 | ||
454 | #define IXGBE_RTTBCNRC 0x04984 | ||
195 | 455 | ||
196 | /* Stats registers */ | 456 | /* Stats registers */ |
197 | #define IXGBE_CRCERRS 0x04000 | 457 | #define IXGBE_CRCERRS 0x04000 |
@@ -206,6 +466,11 @@ | |||
206 | #define IXGBE_LXONRXC 0x0CF60 | 466 | #define IXGBE_LXONRXC 0x0CF60 |
207 | #define IXGBE_LXOFFTXC 0x03F68 | 467 | #define IXGBE_LXOFFTXC 0x03F68 |
208 | #define IXGBE_LXOFFRXC 0x0CF68 | 468 | #define IXGBE_LXOFFRXC 0x0CF68 |
469 | #define IXGBE_LXONRXCNT 0x041A4 | ||
470 | #define IXGBE_LXOFFRXCNT 0x041A8 | ||
471 | #define IXGBE_PXONRXCNT(_i) (0x04140 + ((_i) * 4)) /* 8 of these */ | ||
472 | #define IXGBE_PXOFFRXCNT(_i) (0x04160 + ((_i) * 4)) /* 8 of these */ | ||
473 | #define IXGBE_PXON2OFFCNT(_i) (0x03240 + ((_i) * 4)) /* 8 of these */ | ||
209 | #define IXGBE_PXONTXC(_i) (0x03F00 + ((_i) * 4)) /* 8 of these 3F00-3F1C*/ | 474 | #define IXGBE_PXONTXC(_i) (0x03F00 + ((_i) * 4)) /* 8 of these 3F00-3F1C*/ |
210 | #define IXGBE_PXONRXC(_i) (0x0CF00 + ((_i) * 4)) /* 8 of these CF00-CF1C*/ | 475 | #define IXGBE_PXONRXC(_i) (0x0CF00 + ((_i) * 4)) /* 8 of these CF00-CF1C*/ |
211 | #define IXGBE_PXOFFTXC(_i) (0x03F20 + ((_i) * 4)) /* 8 of these 3F20-3F3C*/ | 476 | #define IXGBE_PXOFFTXC(_i) (0x03F20 + ((_i) * 4)) /* 8 of these 3F20-3F3C*/ |
@@ -245,14 +510,20 @@ | |||
245 | #define IXGBE_MPTC 0x040F0 | 510 | #define IXGBE_MPTC 0x040F0 |
246 | #define IXGBE_BPTC 0x040F4 | 511 | #define IXGBE_BPTC 0x040F4 |
247 | #define IXGBE_XEC 0x04120 | 512 | #define IXGBE_XEC 0x04120 |
513 | #define IXGBE_SSVPC 0x08780 | ||
248 | 514 | ||
249 | #define IXGBE_RQSMR(_i) (0x02300 + ((_i) * 4)) /* 16 of these */ | 515 | #define IXGBE_RQSMR(_i) (0x02300 + ((_i) * 4)) |
250 | #define IXGBE_TQSMR(_i) (((_i) <= 7) ? (0x07300 + ((_i) * 4)) : (0x08600 + ((_i) * 4))) | 516 | #define IXGBE_TQSMR(_i) (((_i) <= 7) ? (0x07300 + ((_i) * 4)) : \ |
517 | (0x08600 + ((_i) * 4))) | ||
518 | #define IXGBE_TQSM(_i) (0x08600 + ((_i) * 4)) | ||
251 | 519 | ||
252 | #define IXGBE_QPRC(_i) (0x01030 + ((_i) * 0x40)) /* 16 of these */ | 520 | #define IXGBE_QPRC(_i) (0x01030 + ((_i) * 0x40)) /* 16 of these */ |
253 | #define IXGBE_QPTC(_i) (0x06030 + ((_i) * 0x40)) /* 16 of these */ | 521 | #define IXGBE_QPTC(_i) (0x06030 + ((_i) * 0x40)) /* 16 of these */ |
254 | #define IXGBE_QBRC(_i) (0x01034 + ((_i) * 0x40)) /* 16 of these */ | 522 | #define IXGBE_QBRC(_i) (0x01034 + ((_i) * 0x40)) /* 16 of these */ |
255 | #define IXGBE_QBTC(_i) (0x06034 + ((_i) * 0x40)) /* 16 of these */ | 523 | #define IXGBE_QBTC(_i) (0x06034 + ((_i) * 0x40)) /* 16 of these */ |
524 | #define IXGBE_QPRDC(_i) (0x01430 + ((_i) * 0x40)) /* 16 of these */ | ||
525 | #define IXGBE_QBTC_L(_i) (0x08700 + ((_i) * 0x8)) /* 16 of these */ | ||
526 | #define IXGBE_QBTC_H(_i) (0x08704 + ((_i) * 0x8)) /* 16 of these */ | ||
256 | 527 | ||
257 | /* Management */ | 528 | /* Management */ |
258 | #define IXGBE_MAVTV(_i) (0x05010 + ((_i) * 4)) /* 8 of these (0-7) */ | 529 | #define IXGBE_MAVTV(_i) (0x05010 + ((_i) * 4)) /* 8 of these (0-7) */ |
@@ -265,6 +536,9 @@ | |||
265 | #define IXGBE_MMAL(_i) (0x05910 + ((_i) * 8)) /* 4 of these (0-3) */ | 536 | #define IXGBE_MMAL(_i) (0x05910 + ((_i) * 8)) /* 4 of these (0-3) */ |
266 | #define IXGBE_MMAH(_i) (0x05914 + ((_i) * 8)) /* 4 of these (0-3) */ | 537 | #define IXGBE_MMAH(_i) (0x05914 + ((_i) * 8)) /* 4 of these (0-3) */ |
267 | #define IXGBE_FTFT 0x09400 /* 0x9400-0x97FC */ | 538 | #define IXGBE_FTFT 0x09400 /* 0x9400-0x97FC */ |
539 | #define IXGBE_METF(_i) (0x05190 + ((_i) * 4)) /* 4 of these (0-3) */ | ||
540 | #define IXGBE_MDEF_EXT(_i) (0x05160 + ((_i) * 4)) /* 8 of these (0-7) */ | ||
541 | #define IXGBE_LSWFW 0x15014 | ||
268 | 542 | ||
269 | /* ARC Subsystem registers */ | 543 | /* ARC Subsystem registers */ |
270 | #define IXGBE_HICR 0x15F00 | 544 | #define IXGBE_HICR 0x15F00 |
@@ -297,16 +571,65 @@ | |||
297 | #define IXGBE_DCA_ID 0x11070 | 571 | #define IXGBE_DCA_ID 0x11070 |
298 | #define IXGBE_DCA_CTRL 0x11074 | 572 | #define IXGBE_DCA_CTRL 0x11074 |
299 | 573 | ||
574 | /* PCIe registers 82599-specific */ | ||
575 | #define IXGBE_GCR_EXT 0x11050 | ||
576 | #define IXGBE_GSCL_5_82599 0x11030 | ||
577 | #define IXGBE_GSCL_6_82599 0x11034 | ||
578 | #define IXGBE_GSCL_7_82599 0x11038 | ||
579 | #define IXGBE_GSCL_8_82599 0x1103C | ||
580 | #define IXGBE_PHYADR_82599 0x11040 | ||
581 | #define IXGBE_PHYDAT_82599 0x11044 | ||
582 | #define IXGBE_PHYCTL_82599 0x11048 | ||
583 | #define IXGBE_PBACLR_82599 0x11068 | ||
584 | #define IXGBE_CIAA_82599 0x11088 | ||
585 | #define IXGBE_CIAD_82599 0x1108C | ||
586 | #define IXGBE_PCIE_DIAG_0_82599 0x11090 | ||
587 | #define IXGBE_PCIE_DIAG_1_82599 0x11094 | ||
588 | #define IXGBE_PCIE_DIAG_2_82599 0x11098 | ||
589 | #define IXGBE_PCIE_DIAG_3_82599 0x1109C | ||
590 | #define IXGBE_PCIE_DIAG_4_82599 0x110A0 | ||
591 | #define IXGBE_PCIE_DIAG_5_82599 0x110A4 | ||
592 | #define IXGBE_PCIE_DIAG_6_82599 0x110A8 | ||
593 | #define IXGBE_PCIE_DIAG_7_82599 0x110C0 | ||
594 | #define IXGBE_INTRPT_CSR_82599 0x110B0 | ||
595 | #define IXGBE_INTRPT_MASK_82599 0x110B8 | ||
596 | #define IXGBE_CDQ_MBR_82599 0x110B4 | ||
597 | #define IXGBE_MISC_REG_82599 0x110F0 | ||
598 | #define IXGBE_ECC_CTRL_0_82599 0x11100 | ||
599 | #define IXGBE_ECC_CTRL_1_82599 0x11104 | ||
600 | #define IXGBE_ECC_STATUS_82599 0x110E0 | ||
601 | #define IXGBE_BAR_CTRL_82599 0x110F4 | ||
602 | |||
603 | /* Time Sync Registers */ | ||
604 | #define IXGBE_TSYNCRXCTL 0x05188 /* Rx Time Sync Control register - RW */ | ||
605 | #define IXGBE_TSYNCTXCTL 0x08C00 /* Tx Time Sync Control register - RW */ | ||
606 | #define IXGBE_RXSTMPL 0x051E8 /* Rx timestamp Low - RO */ | ||
607 | #define IXGBE_RXSTMPH 0x051A4 /* Rx timestamp High - RO */ | ||
608 | #define IXGBE_RXSATRL 0x051A0 /* Rx timestamp attribute low - RO */ | ||
609 | #define IXGBE_RXSATRH 0x051A8 /* Rx timestamp attribute high - RO */ | ||
610 | #define IXGBE_RXMTRL 0x05120 /* RX message type register low - RW */ | ||
611 | #define IXGBE_TXSTMPL 0x08C04 /* Tx timestamp value Low - RO */ | ||
612 | #define IXGBE_TXSTMPH 0x08C08 /* Tx timestamp value High - RO */ | ||
613 | #define IXGBE_SYSTIML 0x08C0C /* System time register Low - RO */ | ||
614 | #define IXGBE_SYSTIMH 0x08C10 /* System time register High - RO */ | ||
615 | #define IXGBE_TIMINCA 0x08C14 /* Increment attributes register - RW */ | ||
616 | #define IXGBE_RXUDP 0x08C1C /* Time Sync Rx UDP Port - RW */ | ||
617 | |||
300 | /* Diagnostic Registers */ | 618 | /* Diagnostic Registers */ |
301 | #define IXGBE_RDSTATCTL 0x02C20 | 619 | #define IXGBE_RDSTATCTL 0x02C20 |
302 | #define IXGBE_RDSTAT(_i) (0x02C00 + ((_i) * 4)) /* 0x02C00-0x02C1C */ | 620 | #define IXGBE_RDSTAT(_i) (0x02C00 + ((_i) * 4)) /* 0x02C00-0x02C1C */ |
303 | #define IXGBE_RDHMPN 0x02F08 | 621 | #define IXGBE_RDHMPN 0x02F08 |
304 | #define IXGBE_RIC_DW(_i) (0x02F10 + ((_i) * 4)) | 622 | #define IXGBE_RIC_DW(_i) (0x02F10 + ((_i) * 4)) |
305 | #define IXGBE_RDPROBE 0x02F20 | 623 | #define IXGBE_RDPROBE 0x02F20 |
624 | #define IXGBE_RDMAM 0x02F30 | ||
625 | #define IXGBE_RDMAD 0x02F34 | ||
306 | #define IXGBE_TDSTATCTL 0x07C20 | 626 | #define IXGBE_TDSTATCTL 0x07C20 |
307 | #define IXGBE_TDSTAT(_i) (0x07C00 + ((_i) * 4)) /* 0x07C00 - 0x07C1C */ | 627 | #define IXGBE_TDSTAT(_i) (0x07C00 + ((_i) * 4)) /* 0x07C00 - 0x07C1C */ |
308 | #define IXGBE_TDHMPN 0x07F08 | 628 | #define IXGBE_TDHMPN 0x07F08 |
629 | #define IXGBE_TDHMPN2 0x082FC | ||
630 | #define IXGBE_TXDESCIC 0x082CC | ||
309 | #define IXGBE_TIC_DW(_i) (0x07F10 + ((_i) * 4)) | 631 | #define IXGBE_TIC_DW(_i) (0x07F10 + ((_i) * 4)) |
632 | #define IXGBE_TIC_DW2(_i) (0x082B0 + ((_i) * 4)) | ||
310 | #define IXGBE_TDPROBE 0x07F20 | 633 | #define IXGBE_TDPROBE 0x07F20 |
311 | #define IXGBE_TXBUFCTRL 0x0C600 | 634 | #define IXGBE_TXBUFCTRL 0x0C600 |
312 | #define IXGBE_TXBUFDATA0 0x0C610 | 635 | #define IXGBE_TXBUFDATA0 0x0C610 |
@@ -334,6 +657,8 @@ | |||
334 | #define IXGBE_TXDATARDPTR(_i) (0x0C720 + ((_i) * 4)) /* 8 of these C720-C72C*/ | 657 | #define IXGBE_TXDATARDPTR(_i) (0x0C720 + ((_i) * 4)) /* 8 of these C720-C72C*/ |
335 | #define IXGBE_TXDESCRDPTR(_i) (0x0C730 + ((_i) * 4)) /* 8 of these C730-C73C*/ | 658 | #define IXGBE_TXDESCRDPTR(_i) (0x0C730 + ((_i) * 4)) /* 8 of these C730-C73C*/ |
336 | #define IXGBE_PCIEECCCTL 0x1106C | 659 | #define IXGBE_PCIEECCCTL 0x1106C |
660 | #define IXGBE_PCIEECCCTL0 0x11100 | ||
661 | #define IXGBE_PCIEECCCTL1 0x11104 | ||
337 | #define IXGBE_PBTXECC 0x0C300 | 662 | #define IXGBE_PBTXECC 0x0C300 |
338 | #define IXGBE_PBRXECC 0x03300 | 663 | #define IXGBE_PBRXECC 0x03300 |
339 | #define IXGBE_GHECCR 0x110B0 | 664 | #define IXGBE_GHECCR 0x110B0 |
@@ -359,24 +684,61 @@ | |||
359 | #define IXGBE_MSRWD 0x04260 | 684 | #define IXGBE_MSRWD 0x04260 |
360 | #define IXGBE_MLADD 0x04264 | 685 | #define IXGBE_MLADD 0x04264 |
361 | #define IXGBE_MHADD 0x04268 | 686 | #define IXGBE_MHADD 0x04268 |
687 | #define IXGBE_MAXFRS 0x04268 | ||
362 | #define IXGBE_TREG 0x0426C | 688 | #define IXGBE_TREG 0x0426C |
363 | #define IXGBE_PCSS1 0x04288 | 689 | #define IXGBE_PCSS1 0x04288 |
364 | #define IXGBE_PCSS2 0x0428C | 690 | #define IXGBE_PCSS2 0x0428C |
365 | #define IXGBE_XPCSS 0x04290 | 691 | #define IXGBE_XPCSS 0x04290 |
692 | #define IXGBE_MFLCN 0x04294 | ||
366 | #define IXGBE_SERDESC 0x04298 | 693 | #define IXGBE_SERDESC 0x04298 |
367 | #define IXGBE_MACS 0x0429C | 694 | #define IXGBE_MACS 0x0429C |
368 | #define IXGBE_AUTOC 0x042A0 | 695 | #define IXGBE_AUTOC 0x042A0 |
369 | #define IXGBE_LINKS 0x042A4 | 696 | #define IXGBE_LINKS 0x042A4 |
697 | #define IXGBE_LINKS2 0x04324 | ||
370 | #define IXGBE_AUTOC2 0x042A8 | 698 | #define IXGBE_AUTOC2 0x042A8 |
371 | #define IXGBE_AUTOC3 0x042AC | 699 | #define IXGBE_AUTOC3 0x042AC |
372 | #define IXGBE_ANLP1 0x042B0 | 700 | #define IXGBE_ANLP1 0x042B0 |
373 | #define IXGBE_ANLP2 0x042B4 | 701 | #define IXGBE_ANLP2 0x042B4 |
374 | #define IXGBE_ATLASCTL 0x04800 | 702 | #define IXGBE_ATLASCTL 0x04800 |
703 | #define IXGBE_MMNGC 0x042D0 | ||
704 | #define IXGBE_ANLPNP1 0x042D4 | ||
705 | #define IXGBE_ANLPNP2 0x042D8 | ||
706 | #define IXGBE_KRPCSFC 0x042E0 | ||
707 | #define IXGBE_KRPCSS 0x042E4 | ||
708 | #define IXGBE_FECS1 0x042E8 | ||
709 | #define IXGBE_FECS2 0x042EC | ||
710 | #define IXGBE_SMADARCTL 0x14F10 | ||
711 | #define IXGBE_MPVC 0x04318 | ||
712 | #define IXGBE_SGMIIC 0x04314 | ||
713 | |||
714 | /* Omer CORECTL */ | ||
715 | #define IXGBE_CORECTL 0x014F00 | ||
716 | /* BARCTRL */ | ||
717 | #define IXGBE_BARCTRL 0x110F4 | ||
718 | #define IXGBE_BARCTRL_FLSIZE 0x0700 | ||
719 | #define IXGBE_BARCTRL_CSRSIZE 0x2000 | ||
375 | 720 | ||
376 | /* RDRXCTL Bit Masks */ | 721 | /* RDRXCTL Bit Masks */ |
377 | #define IXGBE_RDRXCTL_RDMTS_1_2 0x00000000 /* Rx Desc Min Threshold Size */ | 722 | #define IXGBE_RDRXCTL_RDMTS_1_2 0x00000000 /* Rx Desc Min Threshold Size */ |
723 | #define IXGBE_RDRXCTL_CRCSTRIP 0x00000002 /* CRC Strip */ | ||
378 | #define IXGBE_RDRXCTL_MVMEN 0x00000020 | 724 | #define IXGBE_RDRXCTL_MVMEN 0x00000020 |
379 | #define IXGBE_RDRXCTL_DMAIDONE 0x00000008 /* DMA init cycle done */ | 725 | #define IXGBE_RDRXCTL_DMAIDONE 0x00000008 /* DMA init cycle done */ |
726 | #define IXGBE_RDRXCTL_AGGDIS 0x00010000 /* Aggregation disable */ | ||
727 | |||
728 | /* RQTC Bit Masks and Shifts */ | ||
729 | #define IXGBE_RQTC_SHIFT_TC(_i) ((_i) * 4) | ||
730 | #define IXGBE_RQTC_TC0_MASK (0x7 << 0) | ||
731 | #define IXGBE_RQTC_TC1_MASK (0x7 << 4) | ||
732 | #define IXGBE_RQTC_TC2_MASK (0x7 << 8) | ||
733 | #define IXGBE_RQTC_TC3_MASK (0x7 << 12) | ||
734 | #define IXGBE_RQTC_TC4_MASK (0x7 << 16) | ||
735 | #define IXGBE_RQTC_TC5_MASK (0x7 << 20) | ||
736 | #define IXGBE_RQTC_TC6_MASK (0x7 << 24) | ||
737 | #define IXGBE_RQTC_TC7_MASK (0x7 << 28) | ||
738 | |||
739 | /* PSRTYPE.RQPL Bit masks and shift */ | ||
740 | #define IXGBE_PSRTYPE_RQPL_MASK 0x7 | ||
741 | #define IXGBE_PSRTYPE_RQPL_SHIFT 29 | ||
380 | 742 | ||
381 | /* CTRL Bit Masks */ | 743 | /* CTRL Bit Masks */ |
382 | #define IXGBE_CTRL_GIO_DIS 0x00000004 /* Global IO Master Disable bit */ | 744 | #define IXGBE_CTRL_GIO_DIS 0x00000004 /* Global IO Master Disable bit */ |
@@ -391,6 +753,7 @@ | |||
391 | #define IXGBE_MHADD_MFS_SHIFT 16 | 753 | #define IXGBE_MHADD_MFS_SHIFT 16 |
392 | 754 | ||
393 | /* Extended Device Control */ | 755 | /* Extended Device Control */ |
756 | #define IXGBE_CTRL_EXT_PFRSTD 0x00004000 /* Physical Function Reset Done */ | ||
394 | #define IXGBE_CTRL_EXT_NS_DIS 0x00010000 /* No Snoop disable */ | 757 | #define IXGBE_CTRL_EXT_NS_DIS 0x00010000 /* No Snoop disable */ |
395 | #define IXGBE_CTRL_EXT_RO_DIS 0x00020000 /* Relaxed Ordering disable */ | 758 | #define IXGBE_CTRL_EXT_RO_DIS 0x00020000 /* Relaxed Ordering disable */ |
396 | #define IXGBE_CTRL_EXT_DRV_LOAD 0x10000000 /* Driver loaded bit for FW */ | 759 | #define IXGBE_CTRL_EXT_DRV_LOAD 0x10000000 /* Driver loaded bit for FW */ |
@@ -403,6 +766,8 @@ | |||
403 | #define IXGBE_DCA_CTRL_DCA_MODE_CB2 0x02 /* DCA Mode CB2 */ | 766 | #define IXGBE_DCA_CTRL_DCA_MODE_CB2 0x02 /* DCA Mode CB2 */ |
404 | 767 | ||
405 | #define IXGBE_DCA_RXCTRL_CPUID_MASK 0x0000001F /* Rx CPUID Mask */ | 768 | #define IXGBE_DCA_RXCTRL_CPUID_MASK 0x0000001F /* Rx CPUID Mask */ |
769 | #define IXGBE_DCA_RXCTRL_CPUID_MASK_82599 0xFF000000 /* Rx CPUID Mask */ | ||
770 | #define IXGBE_DCA_RXCTRL_CPUID_SHIFT_82599 24 /* Rx CPUID Shift */ | ||
406 | #define IXGBE_DCA_RXCTRL_DESC_DCA_EN (1 << 5) /* DCA Rx Desc enable */ | 771 | #define IXGBE_DCA_RXCTRL_DESC_DCA_EN (1 << 5) /* DCA Rx Desc enable */ |
407 | #define IXGBE_DCA_RXCTRL_HEAD_DCA_EN (1 << 6) /* DCA Rx Desc header enable */ | 772 | #define IXGBE_DCA_RXCTRL_HEAD_DCA_EN (1 << 6) /* DCA Rx Desc header enable */ |
408 | #define IXGBE_DCA_RXCTRL_DATA_DCA_EN (1 << 7) /* DCA Rx Desc payload enable */ | 773 | #define IXGBE_DCA_RXCTRL_DATA_DCA_EN (1 << 7) /* DCA Rx Desc payload enable */ |
@@ -411,6 +776,8 @@ | |||
411 | #define IXGBE_DCA_RXCTRL_DESC_HSRO_EN (1 << 15) /* DCA Rx Split Header RO */ | 776 | #define IXGBE_DCA_RXCTRL_DESC_HSRO_EN (1 << 15) /* DCA Rx Split Header RO */ |
412 | 777 | ||
413 | #define IXGBE_DCA_TXCTRL_CPUID_MASK 0x0000001F /* Tx CPUID Mask */ | 778 | #define IXGBE_DCA_TXCTRL_CPUID_MASK 0x0000001F /* Tx CPUID Mask */ |
779 | #define IXGBE_DCA_TXCTRL_CPUID_MASK_82599 0xFF000000 /* Tx CPUID Mask */ | ||
780 | #define IXGBE_DCA_TXCTRL_CPUID_SHIFT_82599 24 /* Tx CPUID Shift */ | ||
414 | #define IXGBE_DCA_TXCTRL_DESC_DCA_EN (1 << 5) /* DCA Tx Desc enable */ | 781 | #define IXGBE_DCA_TXCTRL_DESC_DCA_EN (1 << 5) /* DCA Tx Desc enable */ |
415 | #define IXGBE_DCA_TXCTRL_TX_WB_RO_EN (1 << 11) /* Tx Desc writeback RO bit */ | 782 | #define IXGBE_DCA_TXCTRL_TX_WB_RO_EN (1 << 11) /* Tx Desc writeback RO bit */ |
416 | #define IXGBE_DCA_MAX_QUEUES_82598 16 /* DCA regs only on 16 queues */ | 783 | #define IXGBE_DCA_MAX_QUEUES_82598 16 /* DCA regs only on 16 queues */ |
@@ -454,6 +821,8 @@ | |||
454 | #define IXGBE_ATLAS_PDN_TX_1G_QL_ALL 0xF0 | 821 | #define IXGBE_ATLAS_PDN_TX_1G_QL_ALL 0xF0 |
455 | #define IXGBE_ATLAS_PDN_TX_AN_QL_ALL 0xF0 | 822 | #define IXGBE_ATLAS_PDN_TX_AN_QL_ALL 0xF0 |
456 | 823 | ||
824 | /* Omer bit masks */ | ||
825 | #define IXGBE_CORECTL_WRITE_CMD 0x00010000 | ||
457 | 826 | ||
458 | /* Device Type definitions for new protocol MDIO commands */ | 827 | /* Device Type definitions for new protocol MDIO commands */ |
459 | #define IXGBE_MDIO_PMA_PMD_DEV_TYPE 0x1 | 828 | #define IXGBE_MDIO_PMA_PMD_DEV_TYPE 0x1 |
@@ -481,8 +850,11 @@ | |||
481 | #define IXGBE_MDIO_PHY_SPEED_ABILITY 0x4 /* Speed Ability Reg */ | 850 | #define IXGBE_MDIO_PHY_SPEED_ABILITY 0x4 /* Speed Ability Reg */ |
482 | #define IXGBE_MDIO_PHY_SPEED_10G 0x0001 /* 10G capable */ | 851 | #define IXGBE_MDIO_PHY_SPEED_10G 0x0001 /* 10G capable */ |
483 | #define IXGBE_MDIO_PHY_SPEED_1G 0x0010 /* 1G capable */ | 852 | #define IXGBE_MDIO_PHY_SPEED_1G 0x0010 /* 1G capable */ |
853 | #define IXGBE_MDIO_PHY_EXT_ABILITY 0xB /* Ext Ability Reg */ | ||
854 | #define IXGBE_MDIO_PHY_10GBASET_ABILITY 0x0004 /* 10GBaseT capable */ | ||
855 | #define IXGBE_MDIO_PHY_1000BASET_ABILITY 0x0020 /* 1000BaseT capable */ | ||
484 | 856 | ||
485 | #define IXGBE_MDIO_PMA_PMD_SDA_SCL_ADDR 0xC30A /* PHY_XS SDA/SCL Address Reg */ | 857 | #define IXGBE_MDIO_PMA_PMD_SDA_SCL_ADDR 0xC30A /* PHY_XS SDA/SCL Addr Reg */ |
486 | #define IXGBE_MDIO_PMA_PMD_SDA_SCL_DATA 0xC30B /* PHY_XS SDA/SCL Data Reg */ | 858 | #define IXGBE_MDIO_PMA_PMD_SDA_SCL_DATA 0xC30B /* PHY_XS SDA/SCL Data Reg */ |
487 | #define IXGBE_MDIO_PMA_PMD_SDA_SCL_STAT 0xC30C /* PHY_XS SDA/SCL Status Reg */ | 859 | #define IXGBE_MDIO_PMA_PMD_SDA_SCL_STAT 0xC30C /* PHY_XS SDA/SCL Status Reg */ |
488 | 860 | ||
@@ -497,7 +869,7 @@ | |||
497 | #define IXGBE_PHY_REVISION_MASK 0xFFFFFFF0 | 869 | #define IXGBE_PHY_REVISION_MASK 0xFFFFFFF0 |
498 | #define IXGBE_MAX_PHY_ADDR 32 | 870 | #define IXGBE_MAX_PHY_ADDR 32 |
499 | 871 | ||
500 | /* PHY IDs */ | 872 | /* PHY IDs*/ |
501 | #define TN1010_PHY_ID 0x00A19410 | 873 | #define TN1010_PHY_ID 0x00A19410 |
502 | #define TNX_FW_REV 0xB | 874 | #define TNX_FW_REV 0xB |
503 | #define QT2022_PHY_ID 0x0043A400 | 875 | #define QT2022_PHY_ID 0x0043A400 |
@@ -517,15 +889,22 @@ | |||
517 | #define IXGBE_CONTROL_NL 0x000F | 889 | #define IXGBE_CONTROL_NL 0x000F |
518 | #define IXGBE_CONTROL_EOL_NL 0x0FFF | 890 | #define IXGBE_CONTROL_EOL_NL 0x0FFF |
519 | #define IXGBE_CONTROL_SOL_NL 0x0000 | 891 | #define IXGBE_CONTROL_SOL_NL 0x0000 |
892 | #define IXGBE_PHY_ENFORCE_INTEL_SFP_OFFSET 0x002C | ||
893 | #define IXGBE_PHY_ALLOW_ANY_SFP 0x1 | ||
520 | 894 | ||
521 | /* General purpose Interrupt Enable */ | 895 | /* General purpose Interrupt Enable */ |
522 | #define IXGBE_SDP0_GPIEN 0x00000001 /* SDP0 */ | 896 | #define IXGBE_SDP0_GPIEN 0x00000001 /* SDP0 */ |
523 | #define IXGBE_SDP1_GPIEN 0x00000002 /* SDP1 */ | 897 | #define IXGBE_SDP1_GPIEN 0x00000002 /* SDP1 */ |
898 | #define IXGBE_SDP2_GPIEN 0x00000004 /* SDP2 */ | ||
524 | #define IXGBE_GPIE_MSIX_MODE 0x00000010 /* MSI-X mode */ | 899 | #define IXGBE_GPIE_MSIX_MODE 0x00000010 /* MSI-X mode */ |
525 | #define IXGBE_GPIE_OCD 0x00000020 /* Other Clear Disable */ | 900 | #define IXGBE_GPIE_OCD 0x00000020 /* Other Clear Disable */ |
526 | #define IXGBE_GPIE_EIMEN 0x00000040 /* Immediate Interrupt Enable */ | 901 | #define IXGBE_GPIE_EIMEN 0x00000040 /* Immediate Interrupt Enable */ |
527 | #define IXGBE_GPIE_EIAME 0x40000000 | 902 | #define IXGBE_GPIE_EIAME 0x40000000 |
528 | #define IXGBE_GPIE_PBA_SUPPORT 0x80000000 | 903 | #define IXGBE_GPIE_PBA_SUPPORT 0x80000000 |
904 | #define IXGBE_GPIE_VTMODE_MASK 0x0000C000 /* VT Mode Mask */ | ||
905 | #define IXGBE_GPIE_VTMODE_16 0x00004000 /* 16 VFs 8 queues per VF */ | ||
906 | #define IXGBE_GPIE_VTMODE_32 0x00008000 /* 32 VFs 4 queues per VF */ | ||
907 | #define IXGBE_GPIE_VTMODE_64 0x0000C000 /* 64 VFs 2 queues per VF */ | ||
529 | 908 | ||
530 | /* Transmit Flow Control status */ | 909 | /* Transmit Flow Control status */ |
531 | #define IXGBE_TFCS_TXOFF 0x00000001 | 910 | #define IXGBE_TFCS_TXOFF 0x00000001 |
@@ -566,6 +945,21 @@ | |||
566 | #define IXGBE_VMD_CTL_VMDQ_EN 0x00000001 | 945 | #define IXGBE_VMD_CTL_VMDQ_EN 0x00000001 |
567 | #define IXGBE_VMD_CTL_VMDQ_FILTER 0x00000002 | 946 | #define IXGBE_VMD_CTL_VMDQ_FILTER 0x00000002 |
568 | 947 | ||
948 | /* VT_CTL bitmasks */ | ||
949 | #define IXGBE_VT_CTL_DIS_DEFPL 0x20000000 /* disable default pool */ | ||
950 | #define IXGBE_VT_CTL_REPLEN 0x40000000 /* replication enabled */ | ||
951 | #define IXGBE_VT_CTL_VT_ENABLE 0x00000001 /* Enable VT Mode */ | ||
952 | |||
953 | /* VMOLR bitmasks */ | ||
954 | #define IXGBE_VMOLR_AUPE 0x01000000 /* accept untagged packets */ | ||
955 | #define IXGBE_VMOLR_ROMPE 0x02000000 /* accept packets in MTA tbl */ | ||
956 | #define IXGBE_VMOLR_ROPE 0x04000000 /* accept packets in UC tbl */ | ||
957 | #define IXGBE_VMOLR_BAM 0x08000000 /* accept broadcast packets */ | ||
958 | #define IXGBE_VMOLR_MPE 0x10000000 /* multicast promiscuous */ | ||
959 | |||
960 | /* VFRE bitmask */ | ||
961 | #define IXGBE_VFRE_ENABLE_ALL 0xFFFFFFFF | ||
962 | |||
569 | /* RDHMPN and TDHMPN bitmasks */ | 963 | /* RDHMPN and TDHMPN bitmasks */ |
570 | #define IXGBE_RDHMPN_RDICADDR 0x007FF800 | 964 | #define IXGBE_RDHMPN_RDICADDR 0x007FF800 |
571 | #define IXGBE_RDHMPN_RDICRDREQ 0x00800000 | 965 | #define IXGBE_RDHMPN_RDICRDREQ 0x00800000 |
@@ -574,13 +968,39 @@ | |||
574 | #define IXGBE_TDHMPN_TDICRDREQ 0x00800000 | 968 | #define IXGBE_TDHMPN_TDICRDREQ 0x00800000 |
575 | #define IXGBE_TDHMPN_TDICADDR_SHIFT 11 | 969 | #define IXGBE_TDHMPN_TDICADDR_SHIFT 11 |
576 | 970 | ||
971 | #define IXGBE_RDMAM_MEM_SEL_SHIFT 13 | ||
972 | #define IXGBE_RDMAM_DWORD_SHIFT 9 | ||
973 | #define IXGBE_RDMAM_DESC_COMP_FIFO 1 | ||
974 | #define IXGBE_RDMAM_DFC_CMD_FIFO 2 | ||
975 | #define IXGBE_RDMAM_TCN_STATUS_RAM 4 | ||
976 | #define IXGBE_RDMAM_WB_COLL_FIFO 5 | ||
977 | #define IXGBE_RDMAM_QSC_CNT_RAM 6 | ||
978 | #define IXGBE_RDMAM_QSC_QUEUE_CNT 8 | ||
979 | #define IXGBE_RDMAM_QSC_QUEUE_RAM 0xA | ||
980 | #define IXGBE_RDMAM_DESC_COM_FIFO_RANGE 135 | ||
981 | #define IXGBE_RDMAM_DESC_COM_FIFO_COUNT 4 | ||
982 | #define IXGBE_RDMAM_DFC_CMD_FIFO_RANGE 48 | ||
983 | #define IXGBE_RDMAM_DFC_CMD_FIFO_COUNT 7 | ||
984 | #define IXGBE_RDMAM_TCN_STATUS_RAM_RANGE 256 | ||
985 | #define IXGBE_RDMAM_TCN_STATUS_RAM_COUNT 9 | ||
986 | #define IXGBE_RDMAM_WB_COLL_FIFO_RANGE 8 | ||
987 | #define IXGBE_RDMAM_WB_COLL_FIFO_COUNT 4 | ||
988 | #define IXGBE_RDMAM_QSC_CNT_RAM_RANGE 64 | ||
989 | #define IXGBE_RDMAM_QSC_CNT_RAM_COUNT 4 | ||
990 | #define IXGBE_RDMAM_QSC_QUEUE_CNT_RANGE 32 | ||
991 | #define IXGBE_RDMAM_QSC_QUEUE_CNT_COUNT 4 | ||
992 | #define IXGBE_RDMAM_QSC_QUEUE_RAM_RANGE 128 | ||
993 | #define IXGBE_RDMAM_QSC_QUEUE_RAM_COUNT 8 | ||
994 | |||
995 | #define IXGBE_TXDESCIC_READY 0x80000000 | ||
996 | |||
577 | /* Receive Checksum Control */ | 997 | /* Receive Checksum Control */ |
578 | #define IXGBE_RXCSUM_IPPCSE 0x00001000 /* IP payload checksum enable */ | 998 | #define IXGBE_RXCSUM_IPPCSE 0x00001000 /* IP payload checksum enable */ |
579 | #define IXGBE_RXCSUM_PCSD 0x00002000 /* packet checksum disabled */ | 999 | #define IXGBE_RXCSUM_PCSD 0x00002000 /* packet checksum disabled */ |
580 | 1000 | ||
581 | /* FCRTL Bit Masks */ | 1001 | /* FCRTL Bit Masks */ |
582 | #define IXGBE_FCRTL_XONE 0x80000000 /* bit 31, XON enable */ | 1002 | #define IXGBE_FCRTL_XONE 0x80000000 /* XON enable */ |
583 | #define IXGBE_FCRTH_FCEN 0x80000000 /* Rx Flow control enable */ | 1003 | #define IXGBE_FCRTH_FCEN 0x80000000 /* Packet buffer fc enable */ |
584 | 1004 | ||
585 | /* PAP bit masks*/ | 1005 | /* PAP bit masks*/ |
586 | #define IXGBE_PAP_TXPAUSECNT_MASK 0x0000FFFF /* Pause counter mask */ | 1006 | #define IXGBE_PAP_TXPAUSECNT_MASK 0x0000FFFF /* Pause counter mask */ |
@@ -590,19 +1010,29 @@ | |||
590 | /* Receive Arbitration Control: 0 Round Robin, 1 DFP */ | 1010 | /* Receive Arbitration Control: 0 Round Robin, 1 DFP */ |
591 | #define IXGBE_RMCS_RAC 0x00000004 | 1011 | #define IXGBE_RMCS_RAC 0x00000004 |
592 | #define IXGBE_RMCS_DFP IXGBE_RMCS_RAC /* Deficit Fixed Priority ena */ | 1012 | #define IXGBE_RMCS_DFP IXGBE_RMCS_RAC /* Deficit Fixed Priority ena */ |
593 | #define IXGBE_RMCS_TFCE_802_3X 0x00000008 /* Tx Priority flow control ena */ | 1013 | #define IXGBE_RMCS_TFCE_802_3X 0x00000008 /* Tx Priority FC ena */ |
594 | #define IXGBE_RMCS_TFCE_PRIORITY 0x00000010 /* Tx Priority flow control ena */ | 1014 | #define IXGBE_RMCS_TFCE_PRIORITY 0x00000010 /* Tx Priority FC ena */ |
595 | #define IXGBE_RMCS_ARBDIS 0x00000040 /* Arbitration disable bit */ | 1015 | #define IXGBE_RMCS_ARBDIS 0x00000040 /* Arbitration disable bit */ |
596 | 1016 | ||
1017 | /* FCCFG Bit Masks */ | ||
1018 | #define IXGBE_FCCFG_TFCE_802_3X 0x00000008 /* Tx link FC enable */ | ||
1019 | #define IXGBE_FCCFG_TFCE_PRIORITY 0x00000010 /* Tx priority FC enable */ | ||
597 | 1020 | ||
598 | /* Interrupt register bitmasks */ | 1021 | /* Interrupt register bitmasks */ |
599 | 1022 | ||
600 | /* Extended Interrupt Cause Read */ | 1023 | /* Extended Interrupt Cause Read */ |
601 | #define IXGBE_EICR_RTX_QUEUE 0x0000FFFF /* RTx Queue Interrupt */ | 1024 | #define IXGBE_EICR_RTX_QUEUE 0x0000FFFF /* RTx Queue Interrupt */ |
1025 | #define IXGBE_EICR_FLOW_DIR 0x00010000 /* FDir Exception */ | ||
1026 | #define IXGBE_EICR_RX_MISS 0x00020000 /* Packet Buffer Overrun */ | ||
1027 | #define IXGBE_EICR_PCI 0x00040000 /* PCI Exception */ | ||
1028 | #define IXGBE_EICR_MAILBOX 0x00080000 /* VF to PF Mailbox Interrupt */ | ||
602 | #define IXGBE_EICR_LSC 0x00100000 /* Link Status Change */ | 1029 | #define IXGBE_EICR_LSC 0x00100000 /* Link Status Change */ |
1030 | #define IXGBE_EICR_LINKSEC 0x00200000 /* PN Threshold */ | ||
603 | #define IXGBE_EICR_MNG 0x00400000 /* Manageability Event Interrupt */ | 1031 | #define IXGBE_EICR_MNG 0x00400000 /* Manageability Event Interrupt */ |
604 | #define IXGBE_EICR_GPI_SDP0 0x01000000 /* Gen Purpose Interrupt on SDP0 */ | 1032 | #define IXGBE_EICR_GPI_SDP0 0x01000000 /* Gen Purpose Interrupt on SDP0 */ |
605 | #define IXGBE_EICR_GPI_SDP1 0x02000000 /* Gen Purpose Interrupt on SDP1 */ | 1033 | #define IXGBE_EICR_GPI_SDP1 0x02000000 /* Gen Purpose Interrupt on SDP1 */ |
1034 | #define IXGBE_EICR_GPI_SDP2 0x04000000 /* Gen Purpose Interrupt on SDP2 */ | ||
1035 | #define IXGBE_EICR_ECC 0x10000000 /* ECC Error */ | ||
606 | #define IXGBE_EICR_PBUR 0x10000000 /* Packet Buffer Handler Error */ | 1036 | #define IXGBE_EICR_PBUR 0x10000000 /* Packet Buffer Handler Error */ |
607 | #define IXGBE_EICR_DHER 0x20000000 /* Descriptor Handler Error */ | 1037 | #define IXGBE_EICR_DHER 0x20000000 /* Descriptor Handler Error */ |
608 | #define IXGBE_EICR_TCP_TIMER 0x40000000 /* TCP Timer */ | 1038 | #define IXGBE_EICR_TCP_TIMER 0x40000000 /* TCP Timer */ |
@@ -610,10 +1040,16 @@ | |||
610 | 1040 | ||
611 | /* Extended Interrupt Cause Set */ | 1041 | /* Extended Interrupt Cause Set */ |
612 | #define IXGBE_EICS_RTX_QUEUE IXGBE_EICR_RTX_QUEUE /* RTx Queue Interrupt */ | 1042 | #define IXGBE_EICS_RTX_QUEUE IXGBE_EICR_RTX_QUEUE /* RTx Queue Interrupt */ |
1043 | #define IXGBE_EICS_FLOW_DIR IXGBE_EICR_FLOW_DIR /* FDir Exception */ | ||
1044 | #define IXGBE_EICS_RX_MISS IXGBE_EICR_RX_MISS /* Pkt Buffer Overrun */ | ||
1045 | #define IXGBE_EICS_PCI IXGBE_EICR_PCI /* PCI Exception */ | ||
1046 | #define IXGBE_EICS_MAILBOX IXGBE_EICR_MAILBOX /* VF to PF Mailbox Int */ | ||
613 | #define IXGBE_EICS_LSC IXGBE_EICR_LSC /* Link Status Change */ | 1047 | #define IXGBE_EICS_LSC IXGBE_EICR_LSC /* Link Status Change */ |
614 | #define IXGBE_EICS_MNG IXGBE_EICR_MNG /* MNG Event Interrupt */ | 1048 | #define IXGBE_EICS_MNG IXGBE_EICR_MNG /* MNG Event Interrupt */ |
615 | #define IXGBE_EICS_GPI_SDP0 IXGBE_EICR_GPI_SDP0 /* SDP0 Gen Purpose Int */ | 1049 | #define IXGBE_EICS_GPI_SDP0 IXGBE_EICR_GPI_SDP0 /* SDP0 Gen Purpose Int */ |
616 | #define IXGBE_EICS_GPI_SDP1 IXGBE_EICR_GPI_SDP1 /* SDP1 Gen Purpose Int */ | 1050 | #define IXGBE_EICS_GPI_SDP1 IXGBE_EICR_GPI_SDP1 /* SDP1 Gen Purpose Int */ |
1051 | #define IXGBE_EICS_GPI_SDP2 IXGBE_EICR_GPI_SDP2 /* SDP2 Gen Purpose Int */ | ||
1052 | #define IXGBE_EICS_ECC IXGBE_EICR_ECC /* ECC Error */ | ||
617 | #define IXGBE_EICS_PBUR IXGBE_EICR_PBUR /* Pkt Buf Handler Err */ | 1053 | #define IXGBE_EICS_PBUR IXGBE_EICR_PBUR /* Pkt Buf Handler Err */ |
618 | #define IXGBE_EICS_DHER IXGBE_EICR_DHER /* Desc Handler Error */ | 1054 | #define IXGBE_EICS_DHER IXGBE_EICR_DHER /* Desc Handler Error */ |
619 | #define IXGBE_EICS_TCP_TIMER IXGBE_EICR_TCP_TIMER /* TCP Timer */ | 1055 | #define IXGBE_EICS_TCP_TIMER IXGBE_EICR_TCP_TIMER /* TCP Timer */ |
@@ -621,10 +1057,16 @@ | |||
621 | 1057 | ||
622 | /* Extended Interrupt Mask Set */ | 1058 | /* Extended Interrupt Mask Set */ |
623 | #define IXGBE_EIMS_RTX_QUEUE IXGBE_EICR_RTX_QUEUE /* RTx Queue Interrupt */ | 1059 | #define IXGBE_EIMS_RTX_QUEUE IXGBE_EICR_RTX_QUEUE /* RTx Queue Interrupt */ |
1060 | #define IXGBE_EIMS_FLOW_DIR IXGBE_EICR_FLOW_DIR /* FDir Exception */ | ||
1061 | #define IXGBE_EIMS_RX_MISS IXGBE_EICR_RX_MISS /* Packet Buffer Overrun */ | ||
1062 | #define IXGBE_EIMS_PCI IXGBE_EICR_PCI /* PCI Exception */ | ||
1063 | #define IXGBE_EIMS_MAILBOX IXGBE_EICR_MAILBOX /* VF to PF Mailbox Int */ | ||
624 | #define IXGBE_EIMS_LSC IXGBE_EICR_LSC /* Link Status Change */ | 1064 | #define IXGBE_EIMS_LSC IXGBE_EICR_LSC /* Link Status Change */ |
625 | #define IXGBE_EIMS_MNG IXGBE_EICR_MNG /* MNG Event Interrupt */ | 1065 | #define IXGBE_EIMS_MNG IXGBE_EICR_MNG /* MNG Event Interrupt */ |
626 | #define IXGBE_EIMS_GPI_SDP0 IXGBE_EICR_GPI_SDP0 /* SDP0 Gen Purpose Int */ | 1066 | #define IXGBE_EIMS_GPI_SDP0 IXGBE_EICR_GPI_SDP0 /* SDP0 Gen Purpose Int */ |
627 | #define IXGBE_EIMS_GPI_SDP1 IXGBE_EICR_GPI_SDP1 /* SDP1 Gen Purpose Int */ | 1067 | #define IXGBE_EIMS_GPI_SDP1 IXGBE_EICR_GPI_SDP1 /* SDP1 Gen Purpose Int */ |
1068 | #define IXGBE_EIMS_GPI_SDP2 IXGBE_EICR_GPI_SDP2 /* SDP2 Gen Purpose Int */ | ||
1069 | #define IXGBE_EIMS_ECC IXGBE_EICR_ECC /* ECC Error */ | ||
628 | #define IXGBE_EIMS_PBUR IXGBE_EICR_PBUR /* Pkt Buf Handler Err */ | 1070 | #define IXGBE_EIMS_PBUR IXGBE_EICR_PBUR /* Pkt Buf Handler Err */ |
629 | #define IXGBE_EIMS_DHER IXGBE_EICR_DHER /* Descr Handler Error */ | 1071 | #define IXGBE_EIMS_DHER IXGBE_EICR_DHER /* Descr Handler Error */ |
630 | #define IXGBE_EIMS_TCP_TIMER IXGBE_EICR_TCP_TIMER /* TCP Timer */ | 1072 | #define IXGBE_EIMS_TCP_TIMER IXGBE_EICR_TCP_TIMER /* TCP Timer */ |
@@ -632,10 +1074,16 @@ | |||
632 | 1074 | ||
633 | /* Extended Interrupt Mask Clear */ | 1075 | /* Extended Interrupt Mask Clear */ |
634 | #define IXGBE_EIMC_RTX_QUEUE IXGBE_EICR_RTX_QUEUE /* RTx Queue Interrupt */ | 1076 | #define IXGBE_EIMC_RTX_QUEUE IXGBE_EICR_RTX_QUEUE /* RTx Queue Interrupt */ |
1077 | #define IXGBE_EIMC_FLOW_DIR IXGBE_EICR_FLOW_DIR /* FDir Exception */ | ||
1078 | #define IXGBE_EIMC_RX_MISS IXGBE_EICR_RX_MISS /* Packet Buffer Overrun */ | ||
1079 | #define IXGBE_EIMC_PCI IXGBE_EICR_PCI /* PCI Exception */ | ||
1080 | #define IXGBE_EIMC_MAILBOX IXGBE_EICR_MAILBOX /* VF to PF Mailbox Int */ | ||
635 | #define IXGBE_EIMC_LSC IXGBE_EICR_LSC /* Link Status Change */ | 1081 | #define IXGBE_EIMC_LSC IXGBE_EICR_LSC /* Link Status Change */ |
636 | #define IXGBE_EIMC_MNG IXGBE_EICR_MNG /* MNG Event Interrupt */ | 1082 | #define IXGBE_EIMC_MNG IXGBE_EICR_MNG /* MNG Event Interrupt */ |
637 | #define IXGBE_EIMC_GPI_SDP0 IXGBE_EICR_GPI_SDP0 /* SDP0 Gen Purpose Int */ | 1083 | #define IXGBE_EIMC_GPI_SDP0 IXGBE_EICR_GPI_SDP0 /* SDP0 Gen Purpose Int */ |
638 | #define IXGBE_EIMC_GPI_SDP1 IXGBE_EICR_GPI_SDP1 /* SDP1 Gen Purpose Int */ | 1084 | #define IXGBE_EIMC_GPI_SDP1 IXGBE_EICR_GPI_SDP1 /* SDP1 Gen Purpose Int */ |
1085 | #define IXGBE_EIMC_GPI_SDP2 IXGBE_EICR_GPI_SDP2 /* SDP2 Gen Purpose Int */ | ||
1086 | #define IXGBE_EIMC_ECC IXGBE_EICR_ECC /* ECC Error */ | ||
639 | #define IXGBE_EIMC_PBUR IXGBE_EICR_PBUR /* Pkt Buf Handler Err */ | 1087 | #define IXGBE_EIMC_PBUR IXGBE_EICR_PBUR /* Pkt Buf Handler Err */ |
640 | #define IXGBE_EIMC_DHER IXGBE_EICR_DHER /* Desc Handler Err */ | 1088 | #define IXGBE_EIMC_DHER IXGBE_EICR_DHER /* Desc Handler Err */ |
641 | #define IXGBE_EIMC_TCP_TIMER IXGBE_EICR_TCP_TIMER /* TCP Timer */ | 1089 | #define IXGBE_EIMC_TCP_TIMER IXGBE_EICR_TCP_TIMER /* TCP Timer */ |
@@ -658,6 +1106,33 @@ | |||
658 | #define IXGBE_IMIREXT_CTRL_SYN 0x00020000 /* Check SYN bit in header */ | 1106 | #define IXGBE_IMIREXT_CTRL_SYN 0x00020000 /* Check SYN bit in header */ |
659 | #define IXGBE_IMIREXT_CTRL_FIN 0x00040000 /* Check FIN bit in header */ | 1107 | #define IXGBE_IMIREXT_CTRL_FIN 0x00040000 /* Check FIN bit in header */ |
660 | #define IXGBE_IMIREXT_CTRL_BP 0x00080000 /* Bypass check of control bits */ | 1108 | #define IXGBE_IMIREXT_CTRL_BP 0x00080000 /* Bypass check of control bits */ |
1109 | #define IXGBE_IMIR_SIZE_BP_82599 0x00001000 /* Packet size bypass */ | ||
1110 | #define IXGBE_IMIR_CTRL_URG_82599 0x00002000 /* Check URG bit in header */ | ||
1111 | #define IXGBE_IMIR_CTRL_ACK_82599 0x00004000 /* Check ACK bit in header */ | ||
1112 | #define IXGBE_IMIR_CTRL_PSH_82599 0x00008000 /* Check PSH bit in header */ | ||
1113 | #define IXGBE_IMIR_CTRL_RST_82599 0x00010000 /* Check RST bit in header */ | ||
1114 | #define IXGBE_IMIR_CTRL_SYN_82599 0x00020000 /* Check SYN bit in header */ | ||
1115 | #define IXGBE_IMIR_CTRL_FIN_82599 0x00040000 /* Check FIN bit in header */ | ||
1116 | #define IXGBE_IMIR_CTRL_BP_82599 0x00080000 /* Bypass check of control bits */ | ||
1117 | #define IXGBE_IMIR_LLI_EN_82599 0x00100000 /* Enables low latency Int */ | ||
1118 | #define IXGBE_IMIR_RX_QUEUE_MASK_82599 0x0000007F /* Rx Queue Mask */ | ||
1119 | #define IXGBE_IMIR_RX_QUEUE_SHIFT_82599 21 /* Rx Queue Shift */ | ||
1120 | #define IXGBE_IMIRVP_PRIORITY_MASK 0x00000007 /* VLAN priority mask */ | ||
1121 | #define IXGBE_IMIRVP_PRIORITY_EN 0x00000008 /* VLAN priority enable */ | ||
1122 | |||
1123 | #define IXGBE_MAX_FTQF_FILTERS 128 | ||
1124 | #define IXGBE_FTQF_PROTOCOL_MASK 0x00000003 | ||
1125 | #define IXGBE_FTQF_PROTOCOL_TCP 0x00000000 | ||
1126 | #define IXGBE_FTQF_PROTOCOL_UDP 0x00000001 | ||
1127 | #define IXGBE_FTQF_PROTOCOL_SCTP 2 | ||
1128 | #define IXGBE_FTQF_PRIORITY_MASK 0x00000007 | ||
1129 | #define IXGBE_FTQF_PRIORITY_SHIFT 2 | ||
1130 | #define IXGBE_FTQF_POOL_MASK 0x0000003F | ||
1131 | #define IXGBE_FTQF_POOL_SHIFT 8 | ||
1132 | #define IXGBE_FTQF_5TUPLE_MASK_MASK 0x0000001F | ||
1133 | #define IXGBE_FTQF_5TUPLE_MASK_SHIFT 25 | ||
1134 | #define IXGBE_FTQF_POOL_MASK_EN 0x40000000 | ||
1135 | #define IXGBE_FTQF_QUEUE_ENABLE 0x80000000 | ||
661 | 1136 | ||
662 | /* Interrupt clear mask */ | 1137 | /* Interrupt clear mask */ |
663 | #define IXGBE_IRQ_CLEAR_MASK 0xFFFFFFFF | 1138 | #define IXGBE_IRQ_CLEAR_MASK 0xFFFFFFFF |
@@ -677,6 +1152,31 @@ | |||
677 | 1152 | ||
678 | #define IXGBE_IVAR_ALLOC_VAL 0x80 /* Interrupt Allocation valid */ | 1153 | #define IXGBE_IVAR_ALLOC_VAL 0x80 /* Interrupt Allocation valid */ |
679 | 1154 | ||
1155 | /* ETYPE Queue Filter/Select Bit Masks */ | ||
1156 | #define IXGBE_MAX_ETQF_FILTERS 8 | ||
1157 | #define IXGBE_ETQF_BCN 0x10000000 /* bit 28 */ | ||
1158 | #define IXGBE_ETQF_1588 0x40000000 /* bit 30 */ | ||
1159 | #define IXGBE_ETQF_FILTER_EN 0x80000000 /* bit 31 */ | ||
1160 | #define IXGBE_ETQF_POOL_ENABLE (1 << 26) /* bit 26 */ | ||
1161 | |||
1162 | #define IXGBE_ETQS_RX_QUEUE 0x007F0000 /* bits 22:16 */ | ||
1163 | #define IXGBE_ETQS_RX_QUEUE_SHIFT 16 | ||
1164 | #define IXGBE_ETQS_LLI 0x20000000 /* bit 29 */ | ||
1165 | #define IXGBE_ETQS_QUEUE_EN 0x80000000 /* bit 31 */ | ||
1166 | |||
1167 | /* | ||
1168 | * ETQF filter list: one static filter per filter consumer. This is | ||
1169 | * to avoid filter collisions later. Add new filters | ||
1170 | * here!! | ||
1171 | * | ||
1172 | * Current filters: | ||
1173 | * EAPOL 802.1x (0x888e): Filter 0 | ||
1174 | * BCN (0x8904): Filter 1 | ||
1175 | * 1588 (0x88f7): Filter 3 | ||
1176 | */ | ||
1177 | #define IXGBE_ETQF_FILTER_EAPOL 0 | ||
1178 | #define IXGBE_ETQF_FILTER_BCN 1 | ||
1179 | #define IXGBE_ETQF_FILTER_1588 3 | ||
680 | /* VLAN Control Bit Masks */ | 1180 | /* VLAN Control Bit Masks */ |
681 | #define IXGBE_VLNCTRL_VET 0x0000FFFF /* bits 0-15 */ | 1181 | #define IXGBE_VLNCTRL_VET 0x0000FFFF /* bits 0-15 */ |
682 | #define IXGBE_VLNCTRL_CFI 0x10000000 /* bit 28 */ | 1182 | #define IXGBE_VLNCTRL_CFI 0x10000000 /* bit 28 */ |
@@ -684,21 +1184,28 @@ | |||
684 | #define IXGBE_VLNCTRL_VFE 0x40000000 /* bit 30 */ | 1184 | #define IXGBE_VLNCTRL_VFE 0x40000000 /* bit 30 */ |
685 | #define IXGBE_VLNCTRL_VME 0x80000000 /* bit 31 */ | 1185 | #define IXGBE_VLNCTRL_VME 0x80000000 /* bit 31 */ |
686 | 1186 | ||
1187 | /* VLAN pool filtering masks */ | ||
1188 | #define IXGBE_VLVF_VIEN 0x80000000 /* filter is valid */ | ||
1189 | #define IXGBE_VLVF_ENTRIES 64 | ||
687 | 1190 | ||
688 | #define IXGBE_ETHERNET_IEEE_VLAN_TYPE 0x8100 /* 802.1q protocol */ | 1191 | #define IXGBE_ETHERNET_IEEE_VLAN_TYPE 0x8100 /* 802.1q protocol */ |
689 | 1192 | ||
690 | /* STATUS Bit Masks */ | 1193 | /* STATUS Bit Masks */ |
691 | #define IXGBE_STATUS_LAN_ID 0x0000000C /* LAN ID */ | 1194 | #define IXGBE_STATUS_LAN_ID 0x0000000C /* LAN ID */ |
692 | #define IXGBE_STATUS_GIO 0x00080000 /* GIO Master Enable Status */ | 1195 | #define IXGBE_STATUS_LAN_ID_SHIFT 2 /* LAN ID Shift*/ |
1196 | #define IXGBE_STATUS_GIO 0x00080000 /* GIO Master Enable Status */ | ||
693 | 1197 | ||
694 | #define IXGBE_STATUS_LAN_ID_0 0x00000000 /* LAN ID 0 */ | 1198 | #define IXGBE_STATUS_LAN_ID_0 0x00000000 /* LAN ID 0 */ |
695 | #define IXGBE_STATUS_LAN_ID_1 0x00000004 /* LAN ID 1 */ | 1199 | #define IXGBE_STATUS_LAN_ID_1 0x00000004 /* LAN ID 1 */ |
696 | 1200 | ||
697 | /* ESDP Bit Masks */ | 1201 | /* ESDP Bit Masks */ |
698 | #define IXGBE_ESDP_SDP4 0x00000001 /* SDP4 Data Value */ | 1202 | #define IXGBE_ESDP_SDP0 0x00000001 |
699 | #define IXGBE_ESDP_SDP5 0x00000002 /* SDP5 Data Value */ | 1203 | #define IXGBE_ESDP_SDP1 0x00000002 |
1204 | #define IXGBE_ESDP_SDP4 0x00000010 /* SDP4 Data Value */ | ||
1205 | #define IXGBE_ESDP_SDP5 0x00000020 /* SDP5 Data Value */ | ||
1206 | #define IXGBE_ESDP_SDP6 0x00000040 /* SDP6 Data Value */ | ||
700 | #define IXGBE_ESDP_SDP4_DIR 0x00000004 /* SDP4 IO direction */ | 1207 | #define IXGBE_ESDP_SDP4_DIR 0x00000004 /* SDP4 IO direction */ |
701 | #define IXGBE_ESDP_SDP5_DIR 0x00000008 /* SDP5 IO direction */ | 1208 | #define IXGBE_ESDP_SDP5_DIR 0x00002000 /* SDP5 IO direction */ |
702 | 1209 | ||
703 | /* LEDCTL Bit Masks */ | 1210 | /* LEDCTL Bit Masks */ |
704 | #define IXGBE_LED_IVRT_BASE 0x00000040 | 1211 | #define IXGBE_LED_IVRT_BASE 0x00000040 |
@@ -730,9 +1237,17 @@ | |||
730 | #define IXGBE_AUTOC_AN_RX_LOOSE 0x01000000 | 1237 | #define IXGBE_AUTOC_AN_RX_LOOSE 0x01000000 |
731 | #define IXGBE_AUTOC_AN_RX_DRIFT 0x00800000 | 1238 | #define IXGBE_AUTOC_AN_RX_DRIFT 0x00800000 |
732 | #define IXGBE_AUTOC_AN_RX_ALIGN 0x007C0000 | 1239 | #define IXGBE_AUTOC_AN_RX_ALIGN 0x007C0000 |
1240 | #define IXGBE_AUTOC_FECA 0x00040000 | ||
1241 | #define IXGBE_AUTOC_FECR 0x00020000 | ||
1242 | #define IXGBE_AUTOC_KR_SUPP 0x00010000 | ||
733 | #define IXGBE_AUTOC_AN_RESTART 0x00001000 | 1243 | #define IXGBE_AUTOC_AN_RESTART 0x00001000 |
734 | #define IXGBE_AUTOC_FLU 0x00000001 | 1244 | #define IXGBE_AUTOC_FLU 0x00000001 |
735 | #define IXGBE_AUTOC_LMS_SHIFT 13 | 1245 | #define IXGBE_AUTOC_LMS_SHIFT 13 |
1246 | #define IXGBE_AUTOC_LMS_10G_SERIAL (0x3 << IXGBE_AUTOC_LMS_SHIFT) | ||
1247 | #define IXGBE_AUTOC_LMS_KX4_KX_KR (0x4 << IXGBE_AUTOC_LMS_SHIFT) | ||
1248 | #define IXGBE_AUTOC_LMS_SGMII_1G_100M (0x5 << IXGBE_AUTOC_LMS_SHIFT) | ||
1249 | #define IXGBE_AUTOC_LMS_KX4_KX_KR_1G_AN (0x6 << IXGBE_AUTOC_LMS_SHIFT) | ||
1250 | #define IXGBE_AUTOC_LMS_KX4_KX_KR_SGMII (0x7 << IXGBE_AUTOC_LMS_SHIFT) | ||
736 | #define IXGBE_AUTOC_LMS_MASK (0x7 << IXGBE_AUTOC_LMS_SHIFT) | 1251 | #define IXGBE_AUTOC_LMS_MASK (0x7 << IXGBE_AUTOC_LMS_SHIFT) |
737 | #define IXGBE_AUTOC_LMS_1G_LINK_NO_AN (0x0 << IXGBE_AUTOC_LMS_SHIFT) | 1252 | #define IXGBE_AUTOC_LMS_1G_LINK_NO_AN (0x0 << IXGBE_AUTOC_LMS_SHIFT) |
738 | #define IXGBE_AUTOC_LMS_10G_LINK_NO_AN (0x1 << IXGBE_AUTOC_LMS_SHIFT) | 1253 | #define IXGBE_AUTOC_LMS_10G_LINK_NO_AN (0x1 << IXGBE_AUTOC_LMS_SHIFT) |
@@ -741,15 +1256,24 @@ | |||
741 | #define IXGBE_AUTOC_LMS_KX4_AN_1G_AN (0x6 << IXGBE_AUTOC_LMS_SHIFT) | 1256 | #define IXGBE_AUTOC_LMS_KX4_AN_1G_AN (0x6 << IXGBE_AUTOC_LMS_SHIFT) |
742 | #define IXGBE_AUTOC_LMS_ATTACH_TYPE (0x7 << IXGBE_AUTOC_10G_PMA_PMD_SHIFT) | 1257 | #define IXGBE_AUTOC_LMS_ATTACH_TYPE (0x7 << IXGBE_AUTOC_10G_PMA_PMD_SHIFT) |
743 | 1258 | ||
744 | #define IXGBE_AUTOC_1G_PMA_PMD 0x00000200 | 1259 | #define IXGBE_AUTOC_1G_PMA_PMD_MASK 0x00000200 |
745 | #define IXGBE_AUTOC_10G_PMA_PMD 0x00000180 | 1260 | #define IXGBE_AUTOC_1G_PMA_PMD_SHIFT 9 |
746 | #define IXGBE_AUTOC_10G_PMA_PMD_SHIFT 7 | 1261 | #define IXGBE_AUTOC_10G_PMA_PMD_MASK 0x00000180 |
747 | #define IXGBE_AUTOC_1G_PMA_PMD_SHIFT 9 | 1262 | #define IXGBE_AUTOC_10G_PMA_PMD_SHIFT 7 |
748 | #define IXGBE_AUTOC_10G_XAUI (0x0 << IXGBE_AUTOC_10G_PMA_PMD_SHIFT) | 1263 | #define IXGBE_AUTOC_10G_XAUI (0x0 << IXGBE_AUTOC_10G_PMA_PMD_SHIFT) |
749 | #define IXGBE_AUTOC_10G_KX4 (0x1 << IXGBE_AUTOC_10G_PMA_PMD_SHIFT) | 1264 | #define IXGBE_AUTOC_10G_KX4 (0x1 << IXGBE_AUTOC_10G_PMA_PMD_SHIFT) |
750 | #define IXGBE_AUTOC_10G_CX4 (0x2 << IXGBE_AUTOC_10G_PMA_PMD_SHIFT) | 1265 | #define IXGBE_AUTOC_10G_CX4 (0x2 << IXGBE_AUTOC_10G_PMA_PMD_SHIFT) |
751 | #define IXGBE_AUTOC_1G_BX (0x0 << IXGBE_AUTOC_1G_PMA_PMD_SHIFT) | 1266 | #define IXGBE_AUTOC_1G_BX (0x0 << IXGBE_AUTOC_1G_PMA_PMD_SHIFT) |
752 | #define IXGBE_AUTOC_1G_KX (0x1 << IXGBE_AUTOC_1G_PMA_PMD_SHIFT) | 1267 | #define IXGBE_AUTOC_1G_KX (0x1 << IXGBE_AUTOC_1G_PMA_PMD_SHIFT) |
1268 | #define IXGBE_AUTOC_1G_SFI (0x0 << IXGBE_AUTOC_1G_PMA_PMD_SHIFT) | ||
1269 | #define IXGBE_AUTOC_1G_KX_BX (0x1 << IXGBE_AUTOC_1G_PMA_PMD_SHIFT) | ||
1270 | |||
1271 | #define IXGBE_AUTOC2_UPPER_MASK 0xFFFF0000 | ||
1272 | #define IXGBE_AUTOC2_10G_SERIAL_PMA_PMD_MASK 0x00030000 | ||
1273 | #define IXGBE_AUTOC2_10G_SERIAL_PMA_PMD_SHIFT 16 | ||
1274 | #define IXGBE_AUTOC2_10G_KR (0x0 << IXGBE_AUTOC2_10G_SERIAL_PMA_PMD_SHIFT) | ||
1275 | #define IXGBE_AUTOC2_10G_XFI (0x1 << IXGBE_AUTOC2_10G_SERIAL_PMA_PMD_SHIFT) | ||
1276 | #define IXGBE_AUTOC2_10G_SFI (0x2 << IXGBE_AUTOC2_10G_SERIAL_PMA_PMD_SHIFT) | ||
753 | 1277 | ||
754 | /* LINKS Bit Masks */ | 1278 | /* LINKS Bit Masks */ |
755 | #define IXGBE_LINKS_KX_AN_COMP 0x80000000 | 1279 | #define IXGBE_LINKS_KX_AN_COMP 0x80000000 |
@@ -759,6 +1283,7 @@ | |||
759 | #define IXGBE_LINKS_RX_MODE 0x06000000 | 1283 | #define IXGBE_LINKS_RX_MODE 0x06000000 |
760 | #define IXGBE_LINKS_TX_MODE 0x01800000 | 1284 | #define IXGBE_LINKS_TX_MODE 0x01800000 |
761 | #define IXGBE_LINKS_XGXS_EN 0x00400000 | 1285 | #define IXGBE_LINKS_XGXS_EN 0x00400000 |
1286 | #define IXGBE_LINKS_SGMII_EN 0x02000000 | ||
762 | #define IXGBE_LINKS_PCS_1G_EN 0x00200000 | 1287 | #define IXGBE_LINKS_PCS_1G_EN 0x00200000 |
763 | #define IXGBE_LINKS_1G_AN_EN 0x00100000 | 1288 | #define IXGBE_LINKS_1G_AN_EN 0x00100000 |
764 | #define IXGBE_LINKS_KX_AN_IDLE 0x00080000 | 1289 | #define IXGBE_LINKS_KX_AN_IDLE 0x00080000 |
@@ -768,6 +1293,10 @@ | |||
768 | #define IXGBE_LINKS_TL_FAULT 0x00001000 | 1293 | #define IXGBE_LINKS_TL_FAULT 0x00001000 |
769 | #define IXGBE_LINKS_SIGNAL 0x00000F00 | 1294 | #define IXGBE_LINKS_SIGNAL 0x00000F00 |
770 | 1295 | ||
1296 | #define IXGBE_LINKS_SPEED_82599 0x30000000 | ||
1297 | #define IXGBE_LINKS_SPEED_10G_82599 0x30000000 | ||
1298 | #define IXGBE_LINKS_SPEED_1G_82599 0x20000000 | ||
1299 | #define IXGBE_LINKS_SPEED_100_82599 0x10000000 | ||
771 | #define IXGBE_LINK_UP_TIME 90 /* 9.0 Seconds */ | 1300 | #define IXGBE_LINK_UP_TIME 90 /* 9.0 Seconds */ |
772 | #define IXGBE_AUTO_NEG_TIME 45 /* 4.5 Seconds */ | 1301 | #define IXGBE_AUTO_NEG_TIME 45 /* 4.5 Seconds */ |
773 | 1302 | ||
@@ -844,6 +1373,7 @@ | |||
844 | #define IXGBE_FW_PTR 0x0F | 1373 | #define IXGBE_FW_PTR 0x0F |
845 | #define IXGBE_PBANUM0_PTR 0x15 | 1374 | #define IXGBE_PBANUM0_PTR 0x15 |
846 | #define IXGBE_PBANUM1_PTR 0x16 | 1375 | #define IXGBE_PBANUM1_PTR 0x16 |
1376 | #define IXGBE_PCIE_MSIX_82599_CAPS 0x72 | ||
847 | #define IXGBE_PCIE_MSIX_82598_CAPS 0x62 | 1377 | #define IXGBE_PCIE_MSIX_82598_CAPS 0x62 |
848 | 1378 | ||
849 | /* MSI-X capability fields masks */ | 1379 | /* MSI-X capability fields masks */ |
@@ -896,6 +1426,8 @@ | |||
896 | #define IXGBE_PCI_LINK_SPEED 0xF | 1426 | #define IXGBE_PCI_LINK_SPEED 0xF |
897 | #define IXGBE_PCI_LINK_SPEED_2500 0x1 | 1427 | #define IXGBE_PCI_LINK_SPEED_2500 0x1 |
898 | #define IXGBE_PCI_LINK_SPEED_5000 0x2 | 1428 | #define IXGBE_PCI_LINK_SPEED_5000 0x2 |
1429 | #define IXGBE_PCI_HEADER_TYPE_REGISTER 0x0E | ||
1430 | #define IXGBE_PCI_HEADER_TYPE_MULTIFUNC 0x80 | ||
899 | 1431 | ||
900 | /* Number of 100 microseconds we wait for PCI Express master disable */ | 1432 | /* Number of 100 microseconds we wait for PCI Express master disable */ |
901 | #define IXGBE_PCI_MASTER_DISABLE_TIMEOUT 800 | 1433 | #define IXGBE_PCI_MASTER_DISABLE_TIMEOUT 800 |
@@ -948,6 +1480,7 @@ | |||
948 | #define IXGBE_RXCTRL_RXEN 0x00000001 /* Enable Receiver */ | 1480 | #define IXGBE_RXCTRL_RXEN 0x00000001 /* Enable Receiver */ |
949 | #define IXGBE_RXCTRL_DMBYPS 0x00000002 /* Descriptor Monitor Bypass */ | 1481 | #define IXGBE_RXCTRL_DMBYPS 0x00000002 /* Descriptor Monitor Bypass */ |
950 | #define IXGBE_RXDCTL_ENABLE 0x02000000 /* Enable specific Rx Queue */ | 1482 | #define IXGBE_RXDCTL_ENABLE 0x02000000 /* Enable specific Rx Queue */ |
1483 | #define IXGBE_RXDCTL_VME 0x40000000 /* VLAN mode enable */ | ||
951 | 1484 | ||
952 | #define IXGBE_FCTRL_SBP 0x00000002 /* Store Bad Packet */ | 1485 | #define IXGBE_FCTRL_SBP 0x00000002 /* Store Bad Packet */ |
953 | #define IXGBE_FCTRL_MPE 0x00000100 /* Multicast Promiscuous Ena*/ | 1486 | #define IXGBE_FCTRL_MPE 0x00000100 /* Multicast Promiscuous Ena*/ |
@@ -958,9 +1491,23 @@ | |||
958 | /* Receive Priority Flow Control Enable */ | 1491 | /* Receive Priority Flow Control Enable */ |
959 | #define IXGBE_FCTRL_RPFCE 0x00004000 | 1492 | #define IXGBE_FCTRL_RPFCE 0x00004000 |
960 | #define IXGBE_FCTRL_RFCE 0x00008000 /* Receive Flow Control Ena */ | 1493 | #define IXGBE_FCTRL_RFCE 0x00008000 /* Receive Flow Control Ena */ |
1494 | #define IXGBE_MFLCN_PMCF 0x00000001 /* Pass MAC Control Frames */ | ||
1495 | #define IXGBE_MFLCN_DPF 0x00000002 /* Discard Pause Frame */ | ||
1496 | #define IXGBE_MFLCN_RPFCE 0x00000004 /* Receive Priority FC Enable */ | ||
1497 | #define IXGBE_MFLCN_RFCE 0x00000008 /* Receive FC Enable */ | ||
961 | 1498 | ||
962 | /* Multiple Receive Queue Control */ | 1499 | /* Multiple Receive Queue Control */ |
963 | #define IXGBE_MRQC_RSSEN 0x00000001 /* RSS Enable */ | 1500 | #define IXGBE_MRQC_RSSEN 0x00000001 /* RSS Enable */ |
1501 | #define IXGBE_MRQC_MRQE_MASK 0xF /* Bits 3:0 */ | ||
1502 | #define IXGBE_MRQC_RT8TCEN 0x00000002 /* 8 TC no RSS */ | ||
1503 | #define IXGBE_MRQC_RT4TCEN 0x00000003 /* 4 TC no RSS */ | ||
1504 | #define IXGBE_MRQC_RTRSS8TCEN 0x00000004 /* 8 TC w/ RSS */ | ||
1505 | #define IXGBE_MRQC_RTRSS4TCEN 0x00000005 /* 4 TC w/ RSS */ | ||
1506 | #define IXGBE_MRQC_VMDQEN 0x00000008 /* VMDq2 64 pools no RSS */ | ||
1507 | #define IXGBE_MRQC_VMDQRSS32EN 0x0000000A /* VMDq2 32 pools w/ RSS */ | ||
1508 | #define IXGBE_MRQC_VMDQRSS64EN 0x0000000B /* VMDq2 64 pools w/ RSS */ | ||
1509 | #define IXGBE_MRQC_VMDQRT8TCEN 0x0000000C /* VMDq2/RT 16 pool 8 TC */ | ||
1510 | #define IXGBE_MRQC_VMDQRT4TCEN 0x0000000D /* VMDq2/RT 32 pool 4 TC */ | ||
964 | #define IXGBE_MRQC_RSS_FIELD_MASK 0xFFFF0000 | 1511 | #define IXGBE_MRQC_RSS_FIELD_MASK 0xFFFF0000 |
965 | #define IXGBE_MRQC_RSS_FIELD_IPV4_TCP 0x00010000 | 1512 | #define IXGBE_MRQC_RSS_FIELD_IPV4_TCP 0x00010000 |
966 | #define IXGBE_MRQC_RSS_FIELD_IPV4 0x00020000 | 1513 | #define IXGBE_MRQC_RSS_FIELD_IPV4 0x00020000 |
@@ -971,6 +1518,12 @@ | |||
971 | #define IXGBE_MRQC_RSS_FIELD_IPV4_UDP 0x00400000 | 1518 | #define IXGBE_MRQC_RSS_FIELD_IPV4_UDP 0x00400000 |
972 | #define IXGBE_MRQC_RSS_FIELD_IPV6_UDP 0x00800000 | 1519 | #define IXGBE_MRQC_RSS_FIELD_IPV6_UDP 0x00800000 |
973 | #define IXGBE_MRQC_RSS_FIELD_IPV6_EX_UDP 0x01000000 | 1520 | #define IXGBE_MRQC_RSS_FIELD_IPV6_EX_UDP 0x01000000 |
1521 | #define IXGBE_MRQC_L3L4TXSWEN 0x00008000 | ||
1522 | |||
1523 | /* Queue Drop Enable */ | ||
1524 | #define IXGBE_QDE_ENABLE 0x00000001 | ||
1525 | #define IXGBE_QDE_IDX_MASK 0x00007F00 | ||
1526 | #define IXGBE_QDE_IDX_SHIFT 8 | ||
974 | 1527 | ||
975 | #define IXGBE_TXD_POPTS_IXSM 0x01 /* Insert IP checksum */ | 1528 | #define IXGBE_TXD_POPTS_IXSM 0x01 /* Insert IP checksum */ |
976 | #define IXGBE_TXD_POPTS_TXSM 0x02 /* Insert TCP/UDP checksum */ | 1529 | #define IXGBE_TXD_POPTS_TXSM 0x02 /* Insert TCP/UDP checksum */ |
@@ -982,10 +1535,25 @@ | |||
982 | #define IXGBE_TXD_CMD_VLE 0x40000000 /* Add VLAN tag */ | 1535 | #define IXGBE_TXD_CMD_VLE 0x40000000 /* Add VLAN tag */ |
983 | #define IXGBE_TXD_STAT_DD 0x00000001 /* Descriptor Done */ | 1536 | #define IXGBE_TXD_STAT_DD 0x00000001 /* Descriptor Done */ |
984 | 1537 | ||
1538 | #define IXGBE_RXDADV_IPSEC_STATUS_SECP 0x00020000 | ||
1539 | #define IXGBE_RXDADV_IPSEC_ERROR_INVALID_PROTOCOL 0x08000000 | ||
1540 | #define IXGBE_RXDADV_IPSEC_ERROR_INVALID_LENGTH 0x10000000 | ||
1541 | #define IXGBE_RXDADV_IPSEC_ERROR_AUTH_FAILED 0x18000000 | ||
1542 | #define IXGBE_RXDADV_IPSEC_ERROR_BIT_MASK 0x18000000 | ||
1543 | /* Multiple Transmit Queue Command Register */ | ||
1544 | #define IXGBE_MTQC_RT_ENA 0x1 /* DCB Enable */ | ||
1545 | #define IXGBE_MTQC_VT_ENA 0x2 /* VMDQ2 Enable */ | ||
1546 | #define IXGBE_MTQC_64Q_1PB 0x0 /* 64 queues 1 pack buffer */ | ||
1547 | #define IXGBE_MTQC_64VF 0x8 /* 2 TX Queues per pool w/64VF's */ | ||
1548 | #define IXGBE_MTQC_8TC_8TQ 0xC /* 8 TC if RT_ENA or 8 TQ if VT_ENA */ | ||
1549 | |||
985 | /* Receive Descriptor bit definitions */ | 1550 | /* Receive Descriptor bit definitions */ |
986 | #define IXGBE_RXD_STAT_DD 0x01 /* Descriptor Done */ | 1551 | #define IXGBE_RXD_STAT_DD 0x01 /* Descriptor Done */ |
987 | #define IXGBE_RXD_STAT_EOP 0x02 /* End of Packet */ | 1552 | #define IXGBE_RXD_STAT_EOP 0x02 /* End of Packet */ |
1553 | #define IXGBE_RXD_STAT_FLM 0x04 /* FDir Match */ | ||
988 | #define IXGBE_RXD_STAT_VP 0x08 /* IEEE VLAN Packet */ | 1554 | #define IXGBE_RXD_STAT_VP 0x08 /* IEEE VLAN Packet */ |
1555 | #define IXGBE_RXDADV_NEXTP_MASK 0x000FFFF0 /* Next Descriptor Index */ | ||
1556 | #define IXGBE_RXDADV_NEXTP_SHIFT 0x00000004 | ||
989 | #define IXGBE_RXD_STAT_UDPCS 0x10 /* UDP xsum calculated */ | 1557 | #define IXGBE_RXD_STAT_UDPCS 0x10 /* UDP xsum calculated */ |
990 | #define IXGBE_RXD_STAT_L4CS 0x20 /* L4 xsum calculated */ | 1558 | #define IXGBE_RXD_STAT_L4CS 0x20 /* L4 xsum calculated */ |
991 | #define IXGBE_RXD_STAT_IPCS 0x40 /* IP xsum calculated */ | 1559 | #define IXGBE_RXD_STAT_IPCS 0x40 /* IP xsum calculated */ |
@@ -994,6 +1562,10 @@ | |||
994 | #define IXGBE_RXD_STAT_VEXT 0x200 /* 1st VLAN found */ | 1562 | #define IXGBE_RXD_STAT_VEXT 0x200 /* 1st VLAN found */ |
995 | #define IXGBE_RXD_STAT_UDPV 0x400 /* Valid UDP checksum */ | 1563 | #define IXGBE_RXD_STAT_UDPV 0x400 /* Valid UDP checksum */ |
996 | #define IXGBE_RXD_STAT_DYNINT 0x800 /* Pkt caused INT via DYNINT */ | 1564 | #define IXGBE_RXD_STAT_DYNINT 0x800 /* Pkt caused INT via DYNINT */ |
1565 | #define IXGBE_RXD_STAT_LLINT 0x800 /* Pkt caused Low Latency Interrupt */ | ||
1566 | #define IXGBE_RXD_STAT_TS 0x10000 /* Time Stamp */ | ||
1567 | #define IXGBE_RXD_STAT_SECP 0x20000 /* Security Processing */ | ||
1568 | #define IXGBE_RXD_STAT_LB 0x40000 /* Loopback Status */ | ||
997 | #define IXGBE_RXD_STAT_ACK 0x8000 /* ACK Packet indication */ | 1569 | #define IXGBE_RXD_STAT_ACK 0x8000 /* ACK Packet indication */ |
998 | #define IXGBE_RXD_ERR_CE 0x01 /* CRC Error */ | 1570 | #define IXGBE_RXD_ERR_CE 0x01 /* CRC Error */ |
999 | #define IXGBE_RXD_ERR_LE 0x02 /* Length Error */ | 1571 | #define IXGBE_RXD_ERR_LE 0x02 /* Length Error */ |
@@ -1002,6 +1574,8 @@ | |||
1002 | #define IXGBE_RXD_ERR_USE 0x20 /* Undersize Error */ | 1574 | #define IXGBE_RXD_ERR_USE 0x20 /* Undersize Error */ |
1003 | #define IXGBE_RXD_ERR_TCPE 0x40 /* TCP/UDP Checksum Error */ | 1575 | #define IXGBE_RXD_ERR_TCPE 0x40 /* TCP/UDP Checksum Error */ |
1004 | #define IXGBE_RXD_ERR_IPE 0x80 /* IP Checksum Error */ | 1576 | #define IXGBE_RXD_ERR_IPE 0x80 /* IP Checksum Error */ |
1577 | #define IXGBE_RXDADV_ERR_MASK 0xfff00000 /* RDESC.ERRORS mask */ | ||
1578 | #define IXGBE_RXDADV_ERR_SHIFT 20 /* RDESC.ERRORS shift */ | ||
1005 | #define IXGBE_RXDADV_ERR_HBO 0x00800000 /*Header Buffer Overflow */ | 1579 | #define IXGBE_RXDADV_ERR_HBO 0x00800000 /*Header Buffer Overflow */ |
1006 | #define IXGBE_RXDADV_ERR_CE 0x01000000 /* CRC Error */ | 1580 | #define IXGBE_RXDADV_ERR_CE 0x01000000 /* CRC Error */ |
1007 | #define IXGBE_RXDADV_ERR_LE 0x02000000 /* Length Error */ | 1581 | #define IXGBE_RXDADV_ERR_LE 0x02000000 /* Length Error */ |
@@ -1016,9 +1590,23 @@ | |||
1016 | #define IXGBE_RXD_CFI_MASK 0x1000 /* CFI is bit 12 */ | 1590 | #define IXGBE_RXD_CFI_MASK 0x1000 /* CFI is bit 12 */ |
1017 | #define IXGBE_RXD_CFI_SHIFT 12 | 1591 | #define IXGBE_RXD_CFI_SHIFT 12 |
1018 | 1592 | ||
1593 | #define IXGBE_RXDADV_STAT_DD IXGBE_RXD_STAT_DD /* Done */ | ||
1594 | #define IXGBE_RXDADV_STAT_EOP IXGBE_RXD_STAT_EOP /* End of Packet */ | ||
1595 | #define IXGBE_RXDADV_STAT_FLM IXGBE_RXD_STAT_FLM /* FDir Match */ | ||
1596 | #define IXGBE_RXDADV_STAT_VP IXGBE_RXD_STAT_VP /* IEEE VLAN Pkt */ | ||
1597 | #define IXGBE_RXDADV_STAT_MASK 0x000fffff /* Stat/NEXTP: bit 0-19 */ | ||
1598 | |||
1599 | /* PSRTYPE bit definitions */ | ||
1600 | #define IXGBE_PSRTYPE_TCPHDR 0x00000010 | ||
1601 | #define IXGBE_PSRTYPE_UDPHDR 0x00000020 | ||
1602 | #define IXGBE_PSRTYPE_IPV4HDR 0x00000100 | ||
1603 | #define IXGBE_PSRTYPE_IPV6HDR 0x00000200 | ||
1019 | 1604 | ||
1020 | /* SRRCTL bit definitions */ | 1605 | /* SRRCTL bit definitions */ |
1021 | #define IXGBE_SRRCTL_BSIZEPKT_SHIFT 10 /* so many KBs */ | 1606 | #define IXGBE_SRRCTL_BSIZEPKT_SHIFT 10 /* so many KBs */ |
1607 | #define IXGBE_SRRCTL_RDMTS_SHIFT 22 | ||
1608 | #define IXGBE_SRRCTL_RDMTS_MASK 0x01C00000 | ||
1609 | #define IXGBE_SRRCTL_DROP_EN 0x10000000 | ||
1022 | #define IXGBE_SRRCTL_BSIZEPKT_MASK 0x0000007F | 1610 | #define IXGBE_SRRCTL_BSIZEPKT_MASK 0x0000007F |
1023 | #define IXGBE_SRRCTL_BSIZEHDR_MASK 0x00003F00 | 1611 | #define IXGBE_SRRCTL_BSIZEHDR_MASK 0x00003F00 |
1024 | #define IXGBE_SRRCTL_DESCTYPE_LEGACY 0x00000000 | 1612 | #define IXGBE_SRRCTL_DESCTYPE_LEGACY 0x00000000 |
@@ -1033,6 +1621,7 @@ | |||
1033 | 1621 | ||
1034 | #define IXGBE_RXDADV_RSSTYPE_MASK 0x0000000F | 1622 | #define IXGBE_RXDADV_RSSTYPE_MASK 0x0000000F |
1035 | #define IXGBE_RXDADV_PKTTYPE_MASK 0x0000FFF0 | 1623 | #define IXGBE_RXDADV_PKTTYPE_MASK 0x0000FFF0 |
1624 | #define IXGBE_RXDADV_PKTTYPE_MASK_EX 0x0001FFF0 | ||
1036 | #define IXGBE_RXDADV_HDRBUFLEN_MASK 0x00007FE0 | 1625 | #define IXGBE_RXDADV_HDRBUFLEN_MASK 0x00007FE0 |
1037 | #define IXGBE_RXDADV_HDRBUFLEN_SHIFT 5 | 1626 | #define IXGBE_RXDADV_HDRBUFLEN_SHIFT 5 |
1038 | #define IXGBE_RXDADV_SPLITHEADER_EN 0x00001000 | 1627 | #define IXGBE_RXDADV_SPLITHEADER_EN 0x00001000 |
@@ -1060,6 +1649,20 @@ | |||
1060 | #define IXGBE_RXDADV_PKTTYPE_UDP 0x00000200 /* UDP hdr present */ | 1649 | #define IXGBE_RXDADV_PKTTYPE_UDP 0x00000200 /* UDP hdr present */ |
1061 | #define IXGBE_RXDADV_PKTTYPE_SCTP 0x00000400 /* SCTP hdr present */ | 1650 | #define IXGBE_RXDADV_PKTTYPE_SCTP 0x00000400 /* SCTP hdr present */ |
1062 | #define IXGBE_RXDADV_PKTTYPE_NFS 0x00000800 /* NFS hdr present */ | 1651 | #define IXGBE_RXDADV_PKTTYPE_NFS 0x00000800 /* NFS hdr present */ |
1652 | #define IXGBE_RXDADV_PKTTYPE_IPSEC_ESP 0x00001000 /* IPSec ESP */ | ||
1653 | #define IXGBE_RXDADV_PKTTYPE_IPSEC_AH 0x00002000 /* IPSec AH */ | ||
1654 | #define IXGBE_RXDADV_PKTTYPE_LINKSEC 0x00004000 /* LinkSec Encap */ | ||
1655 | #define IXGBE_RXDADV_PKTTYPE_ETQF 0x00008000 /* PKTTYPE is ETQF index */ | ||
1656 | #define IXGBE_RXDADV_PKTTYPE_ETQF_MASK 0x00000070 /* ETQF has 8 indices */ | ||
1657 | #define IXGBE_RXDADV_PKTTYPE_ETQF_SHIFT 4 /* Right-shift 4 bits */ | ||
1658 | |||
1659 | /* Security Processing bit Indication */ | ||
1660 | #define IXGBE_RXDADV_LNKSEC_STATUS_SECP 0x00020000 | ||
1661 | #define IXGBE_RXDADV_LNKSEC_ERROR_NO_SA_MATCH 0x08000000 | ||
1662 | #define IXGBE_RXDADV_LNKSEC_ERROR_REPLAY_ERROR 0x10000000 | ||
1663 | #define IXGBE_RXDADV_LNKSEC_ERROR_BIT_MASK 0x18000000 | ||
1664 | #define IXGBE_RXDADV_LNKSEC_ERROR_BAD_SIG 0x18000000 | ||
1665 | |||
1063 | /* Masks to determine if packets should be dropped due to frame errors */ | 1666 | /* Masks to determine if packets should be dropped due to frame errors */ |
1064 | #define IXGBE_RXD_ERR_FRAME_ERR_MASK ( \ | 1667 | #define IXGBE_RXD_ERR_FRAME_ERR_MASK ( \ |
1065 | IXGBE_RXD_ERR_CE | \ | 1668 | IXGBE_RXD_ERR_CE | \ |
@@ -1089,6 +1692,14 @@ | |||
1089 | #define IXGBE_RX_DESC_SPECIAL_PRI_SHIFT 0x000D /* Priority in upper 3 of 16 */ | 1692 | #define IXGBE_RX_DESC_SPECIAL_PRI_SHIFT 0x000D /* Priority in upper 3 of 16 */ |
1090 | #define IXGBE_TX_DESC_SPECIAL_PRI_SHIFT IXGBE_RX_DESC_SPECIAL_PRI_SHIFT | 1693 | #define IXGBE_TX_DESC_SPECIAL_PRI_SHIFT IXGBE_RX_DESC_SPECIAL_PRI_SHIFT |
1091 | 1694 | ||
1695 | /* Little Endian defines */ | ||
1696 | #ifndef __le32 | ||
1697 | #define __le32 u32 | ||
1698 | #endif | ||
1699 | #ifndef __le64 | ||
1700 | #define __le64 u64 | ||
1701 | |||
1702 | #endif | ||
1092 | 1703 | ||
1093 | /* Transmit Descriptor - Legacy */ | 1704 | /* Transmit Descriptor - Legacy */ |
1094 | struct ixgbe_legacy_tx_desc { | 1705 | struct ixgbe_legacy_tx_desc { |
@@ -1176,6 +1787,9 @@ struct ixgbe_adv_tx_context_desc { | |||
1176 | 1787 | ||
1177 | /* Adv Transmit Descriptor Config Masks */ | 1788 | /* Adv Transmit Descriptor Config Masks */ |
1178 | #define IXGBE_ADVTXD_DTALEN_MASK 0x0000FFFF /* Data buf length(bytes) */ | 1789 | #define IXGBE_ADVTXD_DTALEN_MASK 0x0000FFFF /* Data buf length(bytes) */ |
1790 | #define IXGBE_ADVTXD_MAC_LINKSEC 0x00040000 /* Insert LinkSec */ | ||
1791 | #define IXGBE_ADVTXD_IPSEC_SA_INDEX_MASK 0x000003FF /* IPSec SA index */ | ||
1792 | #define IXGBE_ADVTXD_IPSEC_ESP_LEN_MASK 0x000001FF /* IPSec ESP length */ | ||
1179 | #define IXGBE_ADVTXD_DTYP_MASK 0x00F00000 /* DTYP mask */ | 1793 | #define IXGBE_ADVTXD_DTYP_MASK 0x00F00000 /* DTYP mask */ |
1180 | #define IXGBE_ADVTXD_DTYP_CTXT 0x00200000 /* Advanced Context Desc */ | 1794 | #define IXGBE_ADVTXD_DTYP_CTXT 0x00200000 /* Advanced Context Desc */ |
1181 | #define IXGBE_ADVTXD_DTYP_DATA 0x00300000 /* Advanced Data Descriptor */ | 1795 | #define IXGBE_ADVTXD_DTYP_DATA 0x00300000 /* Advanced Data Descriptor */ |
@@ -1210,6 +1824,9 @@ struct ixgbe_adv_tx_context_desc { | |||
1210 | #define IXGBE_ADVTXD_TUCMD_L4T_TCP 0x00000800 /* L4 Packet TYPE of TCP */ | 1824 | #define IXGBE_ADVTXD_TUCMD_L4T_TCP 0x00000800 /* L4 Packet TYPE of TCP */ |
1211 | #define IXGBE_ADVTXD_TUCMD_L4T_SCTP 0x00001000 /* L4 Packet TYPE of SCTP */ | 1825 | #define IXGBE_ADVTXD_TUCMD_L4T_SCTP 0x00001000 /* L4 Packet TYPE of SCTP */ |
1212 | #define IXGBE_ADVTXD_TUCMD_MKRREQ 0x00002000 /*Req requires Markers and CRC*/ | 1826 | #define IXGBE_ADVTXD_TUCMD_MKRREQ 0x00002000 /*Req requires Markers and CRC*/ |
1827 | #define IXGBE_ADVTXD_POPTS_IPSEC 0x00000400 /* IPSec offload request */ | ||
1828 | #define IXGBE_ADVTXD_TUCMD_IPSEC_TYPE_ESP 0x00002000 /* IPSec Type ESP */ | ||
1829 | #define IXGBE_ADVTXD_TUCMD_IPSEC_ENCRYPT_EN 0x00004000/* ESP Encrypt Enable */ | ||
1213 | #define IXGBE_ADVTXD_L4LEN_SHIFT 8 /* Adv ctxt L4LEN shift */ | 1830 | #define IXGBE_ADVTXD_L4LEN_SHIFT 8 /* Adv ctxt L4LEN shift */ |
1214 | #define IXGBE_ADVTXD_MSS_SHIFT 16 /* Adv ctxt MSS shift */ | 1831 | #define IXGBE_ADVTXD_MSS_SHIFT 16 /* Adv ctxt MSS shift */ |
1215 | 1832 | ||
@@ -1223,6 +1840,12 @@ typedef u32 ixgbe_link_speed; | |||
1223 | #define IXGBE_LINK_SPEED_10GB_FULL 0x0080 | 1840 | #define IXGBE_LINK_SPEED_10GB_FULL 0x0080 |
1224 | #define IXGBE_LINK_SPEED_82598_AUTONEG (IXGBE_LINK_SPEED_1GB_FULL | \ | 1841 | #define IXGBE_LINK_SPEED_82598_AUTONEG (IXGBE_LINK_SPEED_1GB_FULL | \ |
1225 | IXGBE_LINK_SPEED_10GB_FULL) | 1842 | IXGBE_LINK_SPEED_10GB_FULL) |
1843 | #define IXGBE_LINK_SPEED_82599_AUTONEG (IXGBE_LINK_SPEED_100_FULL | \ | ||
1844 | IXGBE_LINK_SPEED_1GB_FULL | \ | ||
1845 | IXGBE_LINK_SPEED_10GB_FULL) | ||
1846 | |||
1847 | #define IXGBE_PCIE_DEV_CTRL_2 0xC8 | ||
1848 | #define PCIE_COMPL_TO_VALUE 0x05 | ||
1226 | 1849 | ||
1227 | /* Physical layer type */ | 1850 | /* Physical layer type */ |
1228 | typedef u32 ixgbe_physical_layer; | 1851 | typedef u32 ixgbe_physical_layer; |
@@ -1239,7 +1862,6 @@ typedef u32 ixgbe_physical_layer; | |||
1239 | #define IXGBE_PHYSICAL_LAYER_1000BASE_KX 0x0200 | 1862 | #define IXGBE_PHYSICAL_LAYER_1000BASE_KX 0x0200 |
1240 | #define IXGBE_PHYSICAL_LAYER_1000BASE_BX 0x0400 | 1863 | #define IXGBE_PHYSICAL_LAYER_1000BASE_BX 0x0400 |
1241 | 1864 | ||
1242 | |||
1243 | enum ixgbe_eeprom_type { | 1865 | enum ixgbe_eeprom_type { |
1244 | ixgbe_eeprom_uninitialized = 0, | 1866 | ixgbe_eeprom_uninitialized = 0, |
1245 | ixgbe_eeprom_spi, | 1867 | ixgbe_eeprom_spi, |
@@ -1249,12 +1871,14 @@ enum ixgbe_eeprom_type { | |||
1249 | enum ixgbe_mac_type { | 1871 | enum ixgbe_mac_type { |
1250 | ixgbe_mac_unknown = 0, | 1872 | ixgbe_mac_unknown = 0, |
1251 | ixgbe_mac_82598EB, | 1873 | ixgbe_mac_82598EB, |
1874 | ixgbe_mac_82599EB, | ||
1252 | ixgbe_num_macs | 1875 | ixgbe_num_macs |
1253 | }; | 1876 | }; |
1254 | 1877 | ||
1255 | enum ixgbe_phy_type { | 1878 | enum ixgbe_phy_type { |
1256 | ixgbe_phy_unknown = 0, | 1879 | ixgbe_phy_unknown = 0, |
1257 | ixgbe_phy_tn, | 1880 | ixgbe_phy_tn, |
1881 | ixgbe_phy_cu_unknown, | ||
1258 | ixgbe_phy_qt, | 1882 | ixgbe_phy_qt, |
1259 | ixgbe_phy_xaui, | 1883 | ixgbe_phy_xaui, |
1260 | ixgbe_phy_nl, | 1884 | ixgbe_phy_nl, |
@@ -1263,22 +1887,31 @@ enum ixgbe_phy_type { | |||
1263 | ixgbe_phy_sfp_avago, | 1887 | ixgbe_phy_sfp_avago, |
1264 | ixgbe_phy_sfp_ftl, | 1888 | ixgbe_phy_sfp_ftl, |
1265 | ixgbe_phy_sfp_unknown, | 1889 | ixgbe_phy_sfp_unknown, |
1890 | ixgbe_phy_sfp_intel, | ||
1266 | ixgbe_phy_generic | 1891 | ixgbe_phy_generic |
1267 | }; | 1892 | }; |
1268 | 1893 | ||
1269 | /* | 1894 | /* |
1270 | * SFP+ module type IDs: | 1895 | * SFP+ module type IDs: |
1271 | * | 1896 | * |
1272 | * ID Module Type | 1897 | * ID Module Type |
1273 | * ============= | 1898 | * ============= |
1274 | * 0 SFP_DA_CU | 1899 | * 0 SFP_DA_CU |
1275 | * 1 SFP_SR | 1900 | * 1 SFP_SR |
1276 | * 2 SFP_LR | 1901 | * 2 SFP_LR |
1902 | * 3 SFP_DA_CU_CORE0 - 82599-specific | ||
1903 | * 4 SFP_DA_CU_CORE1 - 82599-specific | ||
1904 | * 5 SFP_SR/LR_CORE0 - 82599-specific | ||
1905 | * 6 SFP_SR/LR_CORE1 - 82599-specific | ||
1277 | */ | 1906 | */ |
1278 | enum ixgbe_sfp_type { | 1907 | enum ixgbe_sfp_type { |
1279 | ixgbe_sfp_type_da_cu = 0, | 1908 | ixgbe_sfp_type_da_cu = 0, |
1280 | ixgbe_sfp_type_sr = 1, | 1909 | ixgbe_sfp_type_sr = 1, |
1281 | ixgbe_sfp_type_lr = 2, | 1910 | ixgbe_sfp_type_lr = 2, |
1911 | ixgbe_sfp_type_da_cu_core0 = 3, | ||
1912 | ixgbe_sfp_type_da_cu_core1 = 4, | ||
1913 | ixgbe_sfp_type_srlr_core0 = 5, | ||
1914 | ixgbe_sfp_type_srlr_core1 = 6, | ||
1282 | ixgbe_sfp_type_not_present = 0xFFFE, | 1915 | ixgbe_sfp_type_not_present = 0xFFFE, |
1283 | ixgbe_sfp_type_unknown = 0xFFFF | 1916 | ixgbe_sfp_type_unknown = 0xFFFF |
1284 | }; | 1917 | }; |
@@ -1300,6 +1933,40 @@ enum ixgbe_fc_mode { | |||
1300 | ixgbe_fc_default | 1933 | ixgbe_fc_default |
1301 | }; | 1934 | }; |
1302 | 1935 | ||
1936 | /* PCI bus types */ | ||
1937 | enum ixgbe_bus_type { | ||
1938 | ixgbe_bus_type_unknown = 0, | ||
1939 | ixgbe_bus_type_pci, | ||
1940 | ixgbe_bus_type_pcix, | ||
1941 | ixgbe_bus_type_pci_express, | ||
1942 | ixgbe_bus_type_reserved | ||
1943 | }; | ||
1944 | |||
1945 | /* PCI bus speeds */ | ||
1946 | enum ixgbe_bus_speed { | ||
1947 | ixgbe_bus_speed_unknown = 0, | ||
1948 | ixgbe_bus_speed_33, | ||
1949 | ixgbe_bus_speed_66, | ||
1950 | ixgbe_bus_speed_100, | ||
1951 | ixgbe_bus_speed_120, | ||
1952 | ixgbe_bus_speed_133, | ||
1953 | ixgbe_bus_speed_2500, | ||
1954 | ixgbe_bus_speed_5000, | ||
1955 | ixgbe_bus_speed_reserved | ||
1956 | }; | ||
1957 | |||
1958 | /* PCI bus widths */ | ||
1959 | enum ixgbe_bus_width { | ||
1960 | ixgbe_bus_width_unknown = 0, | ||
1961 | ixgbe_bus_width_pcie_x1, | ||
1962 | ixgbe_bus_width_pcie_x2, | ||
1963 | ixgbe_bus_width_pcie_x4 = 4, | ||
1964 | ixgbe_bus_width_pcie_x8 = 8, | ||
1965 | ixgbe_bus_width_32, | ||
1966 | ixgbe_bus_width_64, | ||
1967 | ixgbe_bus_width_reserved | ||
1968 | }; | ||
1969 | |||
1303 | struct ixgbe_addr_filter_info { | 1970 | struct ixgbe_addr_filter_info { |
1304 | u32 num_mc_addrs; | 1971 | u32 num_mc_addrs; |
1305 | u32 rar_used_count; | 1972 | u32 rar_used_count; |
@@ -1309,6 +1976,16 @@ struct ixgbe_addr_filter_info { | |||
1309 | bool user_set_promisc; | 1976 | bool user_set_promisc; |
1310 | }; | 1977 | }; |
1311 | 1978 | ||
1979 | /* Bus parameters */ | ||
1980 | struct ixgbe_bus_info { | ||
1981 | enum ixgbe_bus_speed speed; | ||
1982 | enum ixgbe_bus_width width; | ||
1983 | enum ixgbe_bus_type type; | ||
1984 | |||
1985 | u16 func; | ||
1986 | u16 lan_id; | ||
1987 | }; | ||
1988 | |||
1312 | /* Flow control parameters */ | 1989 | /* Flow control parameters */ |
1313 | struct ixgbe_fc_info { | 1990 | struct ixgbe_fc_info { |
1314 | u32 high_water; /* Flow Control High-water */ | 1991 | u32 high_water; /* Flow Control High-water */ |
@@ -1377,6 +2054,14 @@ struct ixgbe_hw_stats { | |||
1377 | u64 qptc[16]; | 2054 | u64 qptc[16]; |
1378 | u64 qbrc[16]; | 2055 | u64 qbrc[16]; |
1379 | u64 qbtc[16]; | 2056 | u64 qbtc[16]; |
2057 | u64 qprdc[16]; | ||
2058 | u64 pxon2offc[8]; | ||
2059 | u64 fdirustat_add; | ||
2060 | u64 fdirustat_remove; | ||
2061 | u64 fdirfstat_fadd; | ||
2062 | u64 fdirfstat_fremove; | ||
2063 | u64 fdirmatch; | ||
2064 | u64 fdirmiss; | ||
1380 | }; | 2065 | }; |
1381 | 2066 | ||
1382 | /* forward declaration */ | 2067 | /* forward declaration */ |
@@ -1401,12 +2086,15 @@ struct ixgbe_mac_operations { | |||
1401 | s32 (*start_hw)(struct ixgbe_hw *); | 2086 | s32 (*start_hw)(struct ixgbe_hw *); |
1402 | s32 (*clear_hw_cntrs)(struct ixgbe_hw *); | 2087 | s32 (*clear_hw_cntrs)(struct ixgbe_hw *); |
1403 | enum ixgbe_media_type (*get_media_type)(struct ixgbe_hw *); | 2088 | enum ixgbe_media_type (*get_media_type)(struct ixgbe_hw *); |
1404 | s32 (*get_supported_physical_layer)(struct ixgbe_hw *); | 2089 | u32 (*get_supported_physical_layer)(struct ixgbe_hw *); |
1405 | s32 (*get_mac_addr)(struct ixgbe_hw *, u8 *); | 2090 | s32 (*get_mac_addr)(struct ixgbe_hw *, u8 *); |
1406 | s32 (*stop_adapter)(struct ixgbe_hw *); | 2091 | s32 (*stop_adapter)(struct ixgbe_hw *); |
1407 | s32 (*get_bus_info)(struct ixgbe_hw *); | 2092 | s32 (*get_bus_info)(struct ixgbe_hw *); |
2093 | void (*set_lan_id)(struct ixgbe_hw *); | ||
1408 | s32 (*read_analog_reg8)(struct ixgbe_hw*, u32, u8*); | 2094 | s32 (*read_analog_reg8)(struct ixgbe_hw*, u32, u8*); |
1409 | s32 (*write_analog_reg8)(struct ixgbe_hw*, u32, u8); | 2095 | s32 (*write_analog_reg8)(struct ixgbe_hw*, u32, u8); |
2096 | s32 (*setup_sfp)(struct ixgbe_hw *); | ||
2097 | s32 (*enable_rx_dma)(struct ixgbe_hw *, u32); | ||
1410 | 2098 | ||
1411 | /* Link */ | 2099 | /* Link */ |
1412 | s32 (*setup_link)(struct ixgbe_hw *); | 2100 | s32 (*setup_link)(struct ixgbe_hw *); |
@@ -1462,7 +2150,7 @@ struct ixgbe_phy_operations { | |||
1462 | struct ixgbe_eeprom_info { | 2150 | struct ixgbe_eeprom_info { |
1463 | struct ixgbe_eeprom_operations ops; | 2151 | struct ixgbe_eeprom_operations ops; |
1464 | enum ixgbe_eeprom_type type; | 2152 | enum ixgbe_eeprom_type type; |
1465 | u32 semaphore_delay; | 2153 | u32 semaphore_delay; |
1466 | u16 word_size; | 2154 | u16 word_size; |
1467 | u16 address_bits; | 2155 | u16 address_bits; |
1468 | }; | 2156 | }; |
@@ -1508,6 +2196,7 @@ struct ixgbe_hw { | |||
1508 | struct ixgbe_fc_info fc; | 2196 | struct ixgbe_fc_info fc; |
1509 | struct ixgbe_phy_info phy; | 2197 | struct ixgbe_phy_info phy; |
1510 | struct ixgbe_eeprom_info eeprom; | 2198 | struct ixgbe_eeprom_info eeprom; |
2199 | struct ixgbe_bus_info bus; | ||
1511 | u16 device_id; | 2200 | u16 device_id; |
1512 | u16 vendor_id; | 2201 | u16 vendor_id; |
1513 | u16 subsystem_device_id; | 2202 | u16 subsystem_device_id; |
@@ -1546,6 +2235,7 @@ struct ixgbe_info { | |||
1546 | #define IXGBE_ERR_I2C -18 | 2235 | #define IXGBE_ERR_I2C -18 |
1547 | #define IXGBE_ERR_SFP_NOT_SUPPORTED -19 | 2236 | #define IXGBE_ERR_SFP_NOT_SUPPORTED -19 |
1548 | #define IXGBE_ERR_SFP_NOT_PRESENT -20 | 2237 | #define IXGBE_ERR_SFP_NOT_PRESENT -20 |
2238 | #define IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT -21 | ||
1549 | #define IXGBE_NOT_IMPLEMENTED 0x7FFFFFFF | 2239 | #define IXGBE_NOT_IMPLEMENTED 0x7FFFFFFF |
1550 | 2240 | ||
1551 | #endif /* _IXGBE_TYPE_H_ */ | 2241 | #endif /* _IXGBE_TYPE_H_ */ |