hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
....@@ -136,36 +136,77 @@
136136 static const char ixgbe_priv_flags_strings[][ETH_GSTRING_LEN] = {
137137 #define IXGBE_PRIV_FLAGS_LEGACY_RX BIT(0)
138138 "legacy-rx",
139
+#define IXGBE_PRIV_FLAGS_VF_IPSEC_EN BIT(1)
140
+ "vf-ipsec",
139141 };
140142
141143 #define IXGBE_PRIV_FLAGS_STR_LEN ARRAY_SIZE(ixgbe_priv_flags_strings)
142144
143
-/* currently supported speeds for 10G */
144
-#define ADVRTSD_MSK_10G (SUPPORTED_10000baseT_Full | \
145
- SUPPORTED_10000baseKX4_Full | \
146
- SUPPORTED_10000baseKR_Full)
147
-
148145 #define ixgbe_isbackplane(type) ((type) == ixgbe_media_type_backplane)
149146
150
-static u32 ixgbe_get_supported_10gtypes(struct ixgbe_hw *hw)
147
+static void ixgbe_set_supported_10gtypes(struct ixgbe_hw *hw,
148
+ struct ethtool_link_ksettings *cmd)
151149 {
152
- if (!ixgbe_isbackplane(hw->phy.media_type))
153
- return SUPPORTED_10000baseT_Full;
150
+ if (!ixgbe_isbackplane(hw->phy.media_type)) {
151
+ ethtool_link_ksettings_add_link_mode(cmd, supported,
152
+ 10000baseT_Full);
153
+ return;
154
+ }
154155
155156 switch (hw->device_id) {
156157 case IXGBE_DEV_ID_82598:
157158 case IXGBE_DEV_ID_82599_KX4:
158159 case IXGBE_DEV_ID_82599_KX4_MEZZ:
159160 case IXGBE_DEV_ID_X550EM_X_KX4:
160
- return SUPPORTED_10000baseKX4_Full;
161
+ ethtool_link_ksettings_add_link_mode
162
+ (cmd, supported, 10000baseKX4_Full);
163
+ break;
161164 case IXGBE_DEV_ID_82598_BX:
162165 case IXGBE_DEV_ID_82599_KR:
163166 case IXGBE_DEV_ID_X550EM_X_KR:
164167 case IXGBE_DEV_ID_X550EM_X_XFI:
165
- return SUPPORTED_10000baseKR_Full;
168
+ ethtool_link_ksettings_add_link_mode
169
+ (cmd, supported, 10000baseKR_Full);
170
+ break;
166171 default:
167
- return SUPPORTED_10000baseKX4_Full |
168
- SUPPORTED_10000baseKR_Full;
172
+ ethtool_link_ksettings_add_link_mode
173
+ (cmd, supported, 10000baseKX4_Full);
174
+ ethtool_link_ksettings_add_link_mode
175
+ (cmd, supported, 10000baseKR_Full);
176
+ break;
177
+ }
178
+}
179
+
180
+static void ixgbe_set_advertising_10gtypes(struct ixgbe_hw *hw,
181
+ struct ethtool_link_ksettings *cmd)
182
+{
183
+ if (!ixgbe_isbackplane(hw->phy.media_type)) {
184
+ ethtool_link_ksettings_add_link_mode(cmd, advertising,
185
+ 10000baseT_Full);
186
+ return;
187
+ }
188
+
189
+ switch (hw->device_id) {
190
+ case IXGBE_DEV_ID_82598:
191
+ case IXGBE_DEV_ID_82599_KX4:
192
+ case IXGBE_DEV_ID_82599_KX4_MEZZ:
193
+ case IXGBE_DEV_ID_X550EM_X_KX4:
194
+ ethtool_link_ksettings_add_link_mode
195
+ (cmd, advertising, 10000baseKX4_Full);
196
+ break;
197
+ case IXGBE_DEV_ID_82598_BX:
198
+ case IXGBE_DEV_ID_82599_KR:
199
+ case IXGBE_DEV_ID_X550EM_X_KR:
200
+ case IXGBE_DEV_ID_X550EM_X_XFI:
201
+ ethtool_link_ksettings_add_link_mode
202
+ (cmd, advertising, 10000baseKR_Full);
203
+ break;
204
+ default:
205
+ ethtool_link_ksettings_add_link_mode
206
+ (cmd, advertising, 10000baseKX4_Full);
207
+ ethtool_link_ksettings_add_link_mode
208
+ (cmd, advertising, 10000baseKR_Full);
209
+ break;
169210 }
170211 }
171212
....@@ -176,52 +217,88 @@
176217 struct ixgbe_hw *hw = &adapter->hw;
177218 ixgbe_link_speed supported_link;
178219 bool autoneg = false;
179
- u32 supported, advertising;
180220
181
- ethtool_convert_link_mode_to_legacy_u32(&supported,
182
- cmd->link_modes.supported);
221
+ ethtool_link_ksettings_zero_link_mode(cmd, supported);
222
+ ethtool_link_ksettings_zero_link_mode(cmd, advertising);
183223
184224 hw->mac.ops.get_link_capabilities(hw, &supported_link, &autoneg);
185225
186226 /* set the supported link speeds */
187
- if (supported_link & IXGBE_LINK_SPEED_10GB_FULL)
188
- supported |= ixgbe_get_supported_10gtypes(hw);
189
- if (supported_link & IXGBE_LINK_SPEED_1GB_FULL)
190
- supported |= (ixgbe_isbackplane(hw->phy.media_type)) ?
191
- SUPPORTED_1000baseKX_Full :
192
- SUPPORTED_1000baseT_Full;
193
- if (supported_link & IXGBE_LINK_SPEED_100_FULL)
194
- supported |= SUPPORTED_100baseT_Full;
195
- if (supported_link & IXGBE_LINK_SPEED_10_FULL)
196
- supported |= SUPPORTED_10baseT_Full;
227
+ if (supported_link & IXGBE_LINK_SPEED_10GB_FULL) {
228
+ ixgbe_set_supported_10gtypes(hw, cmd);
229
+ ixgbe_set_advertising_10gtypes(hw, cmd);
230
+ }
231
+ if (supported_link & IXGBE_LINK_SPEED_5GB_FULL)
232
+ ethtool_link_ksettings_add_link_mode(cmd, supported,
233
+ 5000baseT_Full);
197234
198
- /* default advertised speed if phy.autoneg_advertised isn't set */
199
- advertising = supported;
235
+ if (supported_link & IXGBE_LINK_SPEED_2_5GB_FULL)
236
+ ethtool_link_ksettings_add_link_mode(cmd, supported,
237
+ 2500baseT_Full);
238
+
239
+ if (supported_link & IXGBE_LINK_SPEED_1GB_FULL) {
240
+ if (ixgbe_isbackplane(hw->phy.media_type)) {
241
+ ethtool_link_ksettings_add_link_mode(cmd, supported,
242
+ 1000baseKX_Full);
243
+ ethtool_link_ksettings_add_link_mode(cmd, advertising,
244
+ 1000baseKX_Full);
245
+ } else {
246
+ ethtool_link_ksettings_add_link_mode(cmd, supported,
247
+ 1000baseT_Full);
248
+ ethtool_link_ksettings_add_link_mode(cmd, advertising,
249
+ 1000baseT_Full);
250
+ }
251
+ }
252
+ if (supported_link & IXGBE_LINK_SPEED_100_FULL) {
253
+ ethtool_link_ksettings_add_link_mode(cmd, supported,
254
+ 100baseT_Full);
255
+ ethtool_link_ksettings_add_link_mode(cmd, advertising,
256
+ 100baseT_Full);
257
+ }
258
+ if (supported_link & IXGBE_LINK_SPEED_10_FULL) {
259
+ ethtool_link_ksettings_add_link_mode(cmd, supported,
260
+ 10baseT_Full);
261
+ ethtool_link_ksettings_add_link_mode(cmd, advertising,
262
+ 10baseT_Full);
263
+ }
264
+
200265 /* set the advertised speeds */
201266 if (hw->phy.autoneg_advertised) {
202
- advertising = 0;
267
+ ethtool_link_ksettings_zero_link_mode(cmd, advertising);
203268 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10_FULL)
204
- advertising |= ADVERTISED_10baseT_Full;
269
+ ethtool_link_ksettings_add_link_mode(cmd, advertising,
270
+ 10baseT_Full);
205271 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL)
206
- advertising |= ADVERTISED_100baseT_Full;
272
+ ethtool_link_ksettings_add_link_mode(cmd, advertising,
273
+ 100baseT_Full);
207274 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL)
208
- advertising |= supported & ADVRTSD_MSK_10G;
275
+ ixgbe_set_advertising_10gtypes(hw, cmd);
209276 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL) {
210
- if (supported & SUPPORTED_1000baseKX_Full)
211
- advertising |= ADVERTISED_1000baseKX_Full;
277
+ if (ethtool_link_ksettings_test_link_mode
278
+ (cmd, supported, 1000baseKX_Full))
279
+ ethtool_link_ksettings_add_link_mode
280
+ (cmd, advertising, 1000baseKX_Full);
212281 else
213
- advertising |= ADVERTISED_1000baseT_Full;
282
+ ethtool_link_ksettings_add_link_mode
283
+ (cmd, advertising, 1000baseT_Full);
214284 }
285
+ if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_5GB_FULL)
286
+ ethtool_link_ksettings_add_link_mode(cmd, advertising,
287
+ 5000baseT_Full);
288
+ if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_2_5GB_FULL)
289
+ ethtool_link_ksettings_add_link_mode(cmd, advertising,
290
+ 2500baseT_Full);
215291 } else {
216292 if (hw->phy.multispeed_fiber && !autoneg) {
217293 if (supported_link & IXGBE_LINK_SPEED_10GB_FULL)
218
- advertising = ADVERTISED_10000baseT_Full;
294
+ ethtool_link_ksettings_add_link_mode
295
+ (cmd, advertising, 10000baseT_Full);
219296 }
220297 }
221298
222299 if (autoneg) {
223
- supported |= SUPPORTED_Autoneg;
224
- advertising |= ADVERTISED_Autoneg;
300
+ ethtool_link_ksettings_add_link_mode(cmd, supported, Autoneg);
301
+ ethtool_link_ksettings_add_link_mode(cmd, advertising, Autoneg);
225302 cmd->base.autoneg = AUTONEG_ENABLE;
226303 } else
227304 cmd->base.autoneg = AUTONEG_DISABLE;
....@@ -233,13 +310,13 @@
233310 case ixgbe_phy_x550em_ext_t:
234311 case ixgbe_phy_fw:
235312 case ixgbe_phy_cu_unknown:
236
- supported |= SUPPORTED_TP;
237
- advertising |= ADVERTISED_TP;
313
+ ethtool_link_ksettings_add_link_mode(cmd, supported, TP);
314
+ ethtool_link_ksettings_add_link_mode(cmd, advertising, TP);
238315 cmd->base.port = PORT_TP;
239316 break;
240317 case ixgbe_phy_qt:
241
- supported |= SUPPORTED_FIBRE;
242
- advertising |= ADVERTISED_FIBRE;
318
+ ethtool_link_ksettings_add_link_mode(cmd, supported, FIBRE);
319
+ ethtool_link_ksettings_add_link_mode(cmd, advertising, FIBRE);
243320 cmd->base.port = PORT_FIBRE;
244321 break;
245322 case ixgbe_phy_nl:
....@@ -258,8 +335,10 @@
258335 case ixgbe_sfp_type_da_cu:
259336 case ixgbe_sfp_type_da_cu_core0:
260337 case ixgbe_sfp_type_da_cu_core1:
261
- supported |= SUPPORTED_FIBRE;
262
- advertising |= ADVERTISED_FIBRE;
338
+ ethtool_link_ksettings_add_link_mode(cmd, supported,
339
+ FIBRE);
340
+ ethtool_link_ksettings_add_link_mode(cmd, advertising,
341
+ FIBRE);
263342 cmd->base.port = PORT_DA;
264343 break;
265344 case ixgbe_sfp_type_sr:
....@@ -270,61 +349,76 @@
270349 case ixgbe_sfp_type_1g_sx_core1:
271350 case ixgbe_sfp_type_1g_lx_core0:
272351 case ixgbe_sfp_type_1g_lx_core1:
273
- supported |= SUPPORTED_FIBRE;
274
- advertising |= ADVERTISED_FIBRE;
352
+ ethtool_link_ksettings_add_link_mode(cmd, supported,
353
+ FIBRE);
354
+ ethtool_link_ksettings_add_link_mode(cmd, advertising,
355
+ FIBRE);
275356 cmd->base.port = PORT_FIBRE;
276357 break;
277358 case ixgbe_sfp_type_not_present:
278
- supported |= SUPPORTED_FIBRE;
279
- advertising |= ADVERTISED_FIBRE;
359
+ ethtool_link_ksettings_add_link_mode(cmd, supported,
360
+ FIBRE);
361
+ ethtool_link_ksettings_add_link_mode(cmd, advertising,
362
+ FIBRE);
280363 cmd->base.port = PORT_NONE;
281364 break;
282365 case ixgbe_sfp_type_1g_cu_core0:
283366 case ixgbe_sfp_type_1g_cu_core1:
284
- supported |= SUPPORTED_TP;
285
- advertising |= ADVERTISED_TP;
367
+ ethtool_link_ksettings_add_link_mode(cmd, supported,
368
+ TP);
369
+ ethtool_link_ksettings_add_link_mode(cmd, advertising,
370
+ TP);
286371 cmd->base.port = PORT_TP;
287372 break;
288373 case ixgbe_sfp_type_unknown:
289374 default:
290
- supported |= SUPPORTED_FIBRE;
291
- advertising |= ADVERTISED_FIBRE;
375
+ ethtool_link_ksettings_add_link_mode(cmd, supported,
376
+ FIBRE);
377
+ ethtool_link_ksettings_add_link_mode(cmd, advertising,
378
+ FIBRE);
292379 cmd->base.port = PORT_OTHER;
293380 break;
294381 }
295382 break;
296383 case ixgbe_phy_xaui:
297
- supported |= SUPPORTED_FIBRE;
298
- advertising |= ADVERTISED_FIBRE;
384
+ ethtool_link_ksettings_add_link_mode(cmd, supported,
385
+ FIBRE);
386
+ ethtool_link_ksettings_add_link_mode(cmd, advertising,
387
+ FIBRE);
299388 cmd->base.port = PORT_NONE;
300389 break;
301390 case ixgbe_phy_unknown:
302391 case ixgbe_phy_generic:
303392 case ixgbe_phy_sfp_unsupported:
304393 default:
305
- supported |= SUPPORTED_FIBRE;
306
- advertising |= ADVERTISED_FIBRE;
394
+ ethtool_link_ksettings_add_link_mode(cmd, supported,
395
+ FIBRE);
396
+ ethtool_link_ksettings_add_link_mode(cmd, advertising,
397
+ FIBRE);
307398 cmd->base.port = PORT_OTHER;
308399 break;
309400 }
310401
311402 /* Indicate pause support */
312
- supported |= SUPPORTED_Pause;
403
+ ethtool_link_ksettings_add_link_mode(cmd, supported, Pause);
313404
314405 switch (hw->fc.requested_mode) {
315406 case ixgbe_fc_full:
316
- advertising |= ADVERTISED_Pause;
407
+ ethtool_link_ksettings_add_link_mode(cmd, advertising, Pause);
317408 break;
318409 case ixgbe_fc_rx_pause:
319
- advertising |= ADVERTISED_Pause |
320
- ADVERTISED_Asym_Pause;
410
+ ethtool_link_ksettings_add_link_mode(cmd, advertising, Pause);
411
+ ethtool_link_ksettings_add_link_mode(cmd, advertising,
412
+ Asym_Pause);
321413 break;
322414 case ixgbe_fc_tx_pause:
323
- advertising |= ADVERTISED_Asym_Pause;
415
+ ethtool_link_ksettings_add_link_mode(cmd, advertising,
416
+ Asym_Pause);
324417 break;
325418 default:
326
- advertising &= ~(ADVERTISED_Pause |
327
- ADVERTISED_Asym_Pause);
419
+ ethtool_link_ksettings_del_link_mode(cmd, advertising, Pause);
420
+ ethtool_link_ksettings_del_link_mode(cmd, advertising,
421
+ Asym_Pause);
328422 }
329423
330424 if (netif_carrier_ok(netdev)) {
....@@ -356,11 +450,6 @@
356450 cmd->base.duplex = DUPLEX_UNKNOWN;
357451 }
358452
359
- ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
360
- supported);
361
- ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising,
362
- advertising);
363
-
364453 return 0;
365454 }
366455
....@@ -371,12 +460,6 @@
371460 struct ixgbe_hw *hw = &adapter->hw;
372461 u32 advertised, old;
373462 s32 err = 0;
374
- u32 supported, advertising;
375
-
376
- ethtool_convert_link_mode_to_legacy_u32(&supported,
377
- cmd->link_modes.supported);
378
- ethtool_convert_link_mode_to_legacy_u32(&advertising,
379
- cmd->link_modes.advertising);
380463
381464 if ((hw->phy.media_type == ixgbe_media_type_copper) ||
382465 (hw->phy.multispeed_fiber)) {
....@@ -384,29 +467,41 @@
384467 * this function does not support duplex forcing, but can
385468 * limit the advertising of the adapter to the specified speed
386469 */
387
- if (advertising & ~supported)
470
+ if (!bitmap_subset(cmd->link_modes.advertising,
471
+ cmd->link_modes.supported,
472
+ __ETHTOOL_LINK_MODE_MASK_NBITS))
388473 return -EINVAL;
389474
390475 /* only allow one speed at a time if no autoneg */
391476 if (!cmd->base.autoneg && hw->phy.multispeed_fiber) {
392
- if (advertising ==
393
- (ADVERTISED_10000baseT_Full |
394
- ADVERTISED_1000baseT_Full))
477
+ if (ethtool_link_ksettings_test_link_mode(cmd, advertising,
478
+ 10000baseT_Full) &&
479
+ ethtool_link_ksettings_test_link_mode(cmd, advertising,
480
+ 1000baseT_Full))
395481 return -EINVAL;
396482 }
397483
398484 old = hw->phy.autoneg_advertised;
399485 advertised = 0;
400
- if (advertising & ADVERTISED_10000baseT_Full)
486
+ if (ethtool_link_ksettings_test_link_mode(cmd, advertising,
487
+ 10000baseT_Full))
401488 advertised |= IXGBE_LINK_SPEED_10GB_FULL;
402
-
403
- if (advertising & ADVERTISED_1000baseT_Full)
489
+ if (ethtool_link_ksettings_test_link_mode(cmd, advertising,
490
+ 5000baseT_Full))
491
+ advertised |= IXGBE_LINK_SPEED_5GB_FULL;
492
+ if (ethtool_link_ksettings_test_link_mode(cmd, advertising,
493
+ 2500baseT_Full))
494
+ advertised |= IXGBE_LINK_SPEED_2_5GB_FULL;
495
+ if (ethtool_link_ksettings_test_link_mode(cmd, advertising,
496
+ 1000baseT_Full))
404497 advertised |= IXGBE_LINK_SPEED_1GB_FULL;
405498
406
- if (advertising & ADVERTISED_100baseT_Full)
499
+ if (ethtool_link_ksettings_test_link_mode(cmd, advertising,
500
+ 100baseT_Full))
407501 advertised |= IXGBE_LINK_SPEED_100_FULL;
408502
409
- if (advertising & ADVERTISED_10baseT_Full)
503
+ if (ethtool_link_ksettings_test_link_mode(cmd, advertising,
504
+ 10baseT_Full))
410505 advertised |= IXGBE_LINK_SPEED_10_FULL;
411506
412507 if (old == advertised)
....@@ -427,12 +522,23 @@
427522 u32 speed = cmd->base.speed;
428523
429524 if ((cmd->base.autoneg == AUTONEG_ENABLE) ||
430
- (advertising != ADVERTISED_10000baseT_Full) ||
525
+ (!ethtool_link_ksettings_test_link_mode(cmd, advertising,
526
+ 10000baseT_Full)) ||
431527 (speed + cmd->base.duplex != SPEED_10000 + DUPLEX_FULL))
432528 return -EINVAL;
433529 }
434530
435531 return err;
532
+}
533
+
534
+static void ixgbe_get_pause_stats(struct net_device *netdev,
535
+ struct ethtool_pause_stats *stats)
536
+{
537
+ struct ixgbe_adapter *adapter = netdev_priv(netdev);
538
+ struct ixgbe_hw_stats *hwstats = &adapter->stats;
539
+
540
+ stats->tx_pause_frames = hwstats->lxontxc + hwstats->lxofftxc;
541
+ stats->rx_pause_frames = hwstats->lxonrxc + hwstats->lxoffrxc;
436542 }
437543
438544 static void ixgbe_get_pauseparam(struct net_device *netdev,
....@@ -1002,8 +1108,6 @@
10021108 struct ixgbe_adapter *adapter = netdev_priv(netdev);
10031109
10041110 strlcpy(drvinfo->driver, ixgbe_driver_name, sizeof(drvinfo->driver));
1005
- strlcpy(drvinfo->version, ixgbe_driver_version,
1006
- sizeof(drvinfo->version));
10071111
10081112 strlcpy(drvinfo->fw_version, adapter->eeprom_id,
10091113 sizeof(drvinfo->fw_version));
....@@ -1857,8 +1961,8 @@
18571961 memset(skb->data, 0xFF, frame_size);
18581962 frame_size >>= 1;
18591963 memset(&skb->data[frame_size], 0xAA, frame_size / 2 - 1);
1860
- memset(&skb->data[frame_size + 10], 0xBE, 1);
1861
- memset(&skb->data[frame_size + 12], 0xAF, 1);
1964
+ skb->data[frame_size + 10] = 0xBE;
1965
+ skb->data[frame_size + 12] = 0xAF;
18621966 }
18631967
18641968 static bool ixgbe_check_lbtest_frame(struct ixgbe_rx_buffer *rx_buffer,
....@@ -2084,7 +2188,7 @@
20842188 eth_test->flags |= ETH_TEST_FL_FAILED;
20852189 clear_bit(__IXGBE_TESTING,
20862190 &adapter->state);
2087
- goto skip_ol_tests;
2191
+ return;
20882192 }
20892193 }
20902194 }
....@@ -2156,9 +2260,6 @@
21562260
21572261 clear_bit(__IXGBE_TESTING, &adapter->state);
21582262 }
2159
-
2160
-skip_ol_tests:
2161
- msleep_interruptible(4 * 1000);
21622263 }
21632264
21642265 static int ixgbe_wol_exclusion(struct ixgbe_adapter *adapter,
....@@ -2204,7 +2305,8 @@
22042305 {
22052306 struct ixgbe_adapter *adapter = netdev_priv(netdev);
22062307
2207
- if (wol->wolopts & (WAKE_PHY | WAKE_ARP | WAKE_MAGICSECURE))
2308
+ if (wol->wolopts & (WAKE_PHY | WAKE_ARP | WAKE_MAGICSECURE |
2309
+ WAKE_FILTER))
22082310 return -EOPNOTSUPP;
22092311
22102312 if (ixgbe_wol_exclusion(adapter, wol))
....@@ -2506,11 +2608,11 @@
25062608 switch (cmd->flow_type) {
25072609 case TCP_V4_FLOW:
25082610 cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
2509
- /* fallthrough */
2611
+ fallthrough;
25102612 case UDP_V4_FLOW:
25112613 if (adapter->flags2 & IXGBE_FLAG2_RSS_FIELD_IPV4_UDP)
25122614 cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
2513
- /* fallthrough */
2615
+ fallthrough;
25142616 case SCTP_V4_FLOW:
25152617 case AH_ESP_V4_FLOW:
25162618 case AH_V4_FLOW:
....@@ -2520,11 +2622,11 @@
25202622 break;
25212623 case TCP_V6_FLOW:
25222624 cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
2523
- /* fallthrough */
2625
+ fallthrough;
25242626 case UDP_V6_FLOW:
25252627 if (adapter->flags2 & IXGBE_FLAG2_RSS_FIELD_IPV6_UDP)
25262628 cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
2527
- /* fallthrough */
2629
+ fallthrough;
25282630 case SCTP_V6_FLOW:
25292631 case AH_ESP_V6_FLOW:
25302632 case AH_V6_FLOW:
....@@ -2539,6 +2641,14 @@
25392641 return 0;
25402642 }
25412643
2644
+static int ixgbe_rss_indir_tbl_max(struct ixgbe_adapter *adapter)
2645
+{
2646
+ if (adapter->hw.mac.type < ixgbe_mac_X550)
2647
+ return 16;
2648
+ else
2649
+ return 64;
2650
+}
2651
+
25422652 static int ixgbe_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd,
25432653 u32 *rule_locs)
25442654 {
....@@ -2547,7 +2657,8 @@
25472657
25482658 switch (cmd->cmd) {
25492659 case ETHTOOL_GRXRINGS:
2550
- cmd->data = adapter->num_rx_queues;
2660
+ cmd->data = min_t(int, adapter->num_rx_queues,
2661
+ ixgbe_rss_indir_tbl_max(adapter));
25512662 ret = 0;
25522663 break;
25532664 case ETHTOOL_GRXCLSRLCNT:
....@@ -2656,7 +2767,7 @@
26562767 *flow_type = IXGBE_ATR_FLOW_TYPE_IPV4;
26572768 break;
26582769 }
2659
- /* fall through */
2770
+ fallthrough;
26602771 default:
26612772 return 0;
26622773 }
....@@ -2949,14 +3060,6 @@
29493060 return ret;
29503061 }
29513062
2952
-static int ixgbe_rss_indir_tbl_max(struct ixgbe_adapter *adapter)
2953
-{
2954
- if (adapter->hw.mac.type < ixgbe_mac_X550)
2955
- return 16;
2956
- else
2957
- return 64;
2958
-}
2959
-
29603063 static u32 ixgbe_get_rxfh_key_size(struct net_device *netdev)
29613064 {
29623065 return IXGBE_RSS_KEY_SIZE;
....@@ -3005,8 +3108,8 @@
30053108 int i;
30063109 u32 reta_entries = ixgbe_rss_indir_tbl_entries(adapter);
30073110
3008
- if (hfunc)
3009
- return -EINVAL;
3111
+ if (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP)
3112
+ return -EOPNOTSUPP;
30103113
30113114 /* Fill out the redirection table */
30123115 if (indir) {
....@@ -3114,7 +3217,7 @@
31143217 max_combined = ixgbe_max_rss_indices(adapter);
31153218 }
31163219
3117
- return max_combined;
3220
+ return min_t(int, max_combined, num_online_cpus());
31183221 }
31193222
31203223 static void ixgbe_get_channels(struct net_device *dev,
....@@ -3410,6 +3513,9 @@
34103513 if (adapter->flags2 & IXGBE_FLAG2_RX_LEGACY)
34113514 priv_flags |= IXGBE_PRIV_FLAGS_LEGACY_RX;
34123515
3516
+ if (adapter->flags2 & IXGBE_FLAG2_VF_IPSEC_ENABLED)
3517
+ priv_flags |= IXGBE_PRIV_FLAGS_VF_IPSEC_EN;
3518
+
34133519 return priv_flags;
34143520 }
34153521
....@@ -3421,6 +3527,10 @@
34213527 flags2 &= ~IXGBE_FLAG2_RX_LEGACY;
34223528 if (priv_flags & IXGBE_PRIV_FLAGS_LEGACY_RX)
34233529 flags2 |= IXGBE_FLAG2_RX_LEGACY;
3530
+
3531
+ flags2 &= ~IXGBE_FLAG2_VF_IPSEC_ENABLED;
3532
+ if (priv_flags & IXGBE_PRIV_FLAGS_VF_IPSEC_EN)
3533
+ flags2 |= IXGBE_FLAG2_VF_IPSEC_ENABLED;
34243534
34253535 if (flags2 != adapter->flags2) {
34263536 adapter->flags2 = flags2;
....@@ -3434,6 +3544,7 @@
34343544 }
34353545
34363546 static const struct ethtool_ops ixgbe_ethtool_ops = {
3547
+ .supported_coalesce_params = ETHTOOL_COALESCE_USECS,
34373548 .get_drvinfo = ixgbe_get_drvinfo,
34383549 .get_regs_len = ixgbe_get_regs_len,
34393550 .get_regs = ixgbe_get_regs,
....@@ -3446,6 +3557,7 @@
34463557 .set_eeprom = ixgbe_set_eeprom,
34473558 .get_ringparam = ixgbe_get_ringparam,
34483559 .set_ringparam = ixgbe_set_ringparam,
3560
+ .get_pause_stats = ixgbe_get_pause_stats,
34493561 .get_pauseparam = ixgbe_get_pauseparam,
34503562 .set_pauseparam = ixgbe_set_pauseparam,
34513563 .get_msglevel = ixgbe_get_msglevel,