GNU Linux-libre 4.14.332-gnu1
[releases.git] / drivers / net / ethernet / qlogic / qede / qede_ethtool.c
1 /* QLogic qede NIC Driver
2  * Copyright (c) 2015-2017  QLogic Corporation
3  *
4  * This software is available to you under a choice of one of two
5  * licenses.  You may choose to be licensed under the terms of the GNU
6  * General Public License (GPL) Version 2, available from the file
7  * COPYING in the main directory of this source tree, or the
8  * OpenIB.org BSD license below:
9  *
10  *     Redistribution and use in source and binary forms, with or
11  *     without modification, are permitted provided that the following
12  *     conditions are met:
13  *
14  *      - Redistributions of source code must retain the above
15  *        copyright notice, this list of conditions and the following
16  *        disclaimer.
17  *
18  *      - Redistributions in binary form must reproduce the above
19  *        copyright notice, this list of conditions and the following
20  *        disclaimer in the documentation and /or other materials
21  *        provided with the distribution.
22  *
23  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30  * SOFTWARE.
31  */
32 #include <linux/version.h>
33 #include <linux/types.h>
34 #include <linux/netdevice.h>
35 #include <linux/etherdevice.h>
36 #include <linux/ethtool.h>
37 #include <linux/string.h>
38 #include <linux/pci.h>
39 #include <linux/capability.h>
40 #include <linux/vmalloc.h>
41 #include "qede.h"
42 #include "qede_ptp.h"
43
44 #define QEDE_RQSTAT_OFFSET(stat_name) \
45          (offsetof(struct qede_rx_queue, stat_name))
46 #define QEDE_RQSTAT_STRING(stat_name) (#stat_name)
47 #define QEDE_RQSTAT(stat_name) \
48          {QEDE_RQSTAT_OFFSET(stat_name), QEDE_RQSTAT_STRING(stat_name)}
49
50 #define QEDE_SELFTEST_POLL_COUNT 100
51
52 static const struct {
53         u64 offset;
54         char string[ETH_GSTRING_LEN];
55 } qede_rqstats_arr[] = {
56         QEDE_RQSTAT(rcv_pkts),
57         QEDE_RQSTAT(rx_hw_errors),
58         QEDE_RQSTAT(rx_alloc_errors),
59         QEDE_RQSTAT(rx_ip_frags),
60         QEDE_RQSTAT(xdp_no_pass),
61 };
62
63 #define QEDE_NUM_RQSTATS ARRAY_SIZE(qede_rqstats_arr)
64 #define QEDE_TQSTAT_OFFSET(stat_name) \
65         (offsetof(struct qede_tx_queue, stat_name))
66 #define QEDE_TQSTAT_STRING(stat_name) (#stat_name)
67 #define QEDE_TQSTAT(stat_name) \
68         {QEDE_TQSTAT_OFFSET(stat_name), QEDE_TQSTAT_STRING(stat_name)}
69 #define QEDE_NUM_TQSTATS ARRAY_SIZE(qede_tqstats_arr)
70 static const struct {
71         u64 offset;
72         char string[ETH_GSTRING_LEN];
73 } qede_tqstats_arr[] = {
74         QEDE_TQSTAT(xmit_pkts),
75         QEDE_TQSTAT(stopped_cnt),
76 };
77
78 #define QEDE_STAT_OFFSET(stat_name, type, base) \
79         (offsetof(type, stat_name) + (base))
80 #define QEDE_STAT_STRING(stat_name)     (#stat_name)
81 #define _QEDE_STAT(stat_name, type, base, attr) \
82         {QEDE_STAT_OFFSET(stat_name, type, base), \
83          QEDE_STAT_STRING(stat_name), \
84          attr}
85 #define QEDE_STAT(stat_name) \
86         _QEDE_STAT(stat_name, struct qede_stats_common, 0, 0x0)
87 #define QEDE_PF_STAT(stat_name) \
88         _QEDE_STAT(stat_name, struct qede_stats_common, 0, \
89                    BIT(QEDE_STAT_PF_ONLY))
90 #define QEDE_PF_BB_STAT(stat_name) \
91         _QEDE_STAT(stat_name, struct qede_stats_bb, \
92                    offsetof(struct qede_stats, bb), \
93                    BIT(QEDE_STAT_PF_ONLY) | BIT(QEDE_STAT_BB_ONLY))
94 #define QEDE_PF_AH_STAT(stat_name) \
95         _QEDE_STAT(stat_name, struct qede_stats_ah, \
96                    offsetof(struct qede_stats, ah), \
97                    BIT(QEDE_STAT_PF_ONLY) | BIT(QEDE_STAT_AH_ONLY))
98 static const struct {
99         u64 offset;
100         char string[ETH_GSTRING_LEN];
101         unsigned long attr;
102 #define QEDE_STAT_PF_ONLY       0
103 #define QEDE_STAT_BB_ONLY       1
104 #define QEDE_STAT_AH_ONLY       2
105 } qede_stats_arr[] = {
106         QEDE_STAT(rx_ucast_bytes),
107         QEDE_STAT(rx_mcast_bytes),
108         QEDE_STAT(rx_bcast_bytes),
109         QEDE_STAT(rx_ucast_pkts),
110         QEDE_STAT(rx_mcast_pkts),
111         QEDE_STAT(rx_bcast_pkts),
112
113         QEDE_STAT(tx_ucast_bytes),
114         QEDE_STAT(tx_mcast_bytes),
115         QEDE_STAT(tx_bcast_bytes),
116         QEDE_STAT(tx_ucast_pkts),
117         QEDE_STAT(tx_mcast_pkts),
118         QEDE_STAT(tx_bcast_pkts),
119
120         QEDE_PF_STAT(rx_64_byte_packets),
121         QEDE_PF_STAT(rx_65_to_127_byte_packets),
122         QEDE_PF_STAT(rx_128_to_255_byte_packets),
123         QEDE_PF_STAT(rx_256_to_511_byte_packets),
124         QEDE_PF_STAT(rx_512_to_1023_byte_packets),
125         QEDE_PF_STAT(rx_1024_to_1518_byte_packets),
126         QEDE_PF_BB_STAT(rx_1519_to_1522_byte_packets),
127         QEDE_PF_BB_STAT(rx_1519_to_2047_byte_packets),
128         QEDE_PF_BB_STAT(rx_2048_to_4095_byte_packets),
129         QEDE_PF_BB_STAT(rx_4096_to_9216_byte_packets),
130         QEDE_PF_BB_STAT(rx_9217_to_16383_byte_packets),
131         QEDE_PF_AH_STAT(rx_1519_to_max_byte_packets),
132         QEDE_PF_STAT(tx_64_byte_packets),
133         QEDE_PF_STAT(tx_65_to_127_byte_packets),
134         QEDE_PF_STAT(tx_128_to_255_byte_packets),
135         QEDE_PF_STAT(tx_256_to_511_byte_packets),
136         QEDE_PF_STAT(tx_512_to_1023_byte_packets),
137         QEDE_PF_STAT(tx_1024_to_1518_byte_packets),
138         QEDE_PF_BB_STAT(tx_1519_to_2047_byte_packets),
139         QEDE_PF_BB_STAT(tx_2048_to_4095_byte_packets),
140         QEDE_PF_BB_STAT(tx_4096_to_9216_byte_packets),
141         QEDE_PF_BB_STAT(tx_9217_to_16383_byte_packets),
142         QEDE_PF_AH_STAT(tx_1519_to_max_byte_packets),
143         QEDE_PF_STAT(rx_mac_crtl_frames),
144         QEDE_PF_STAT(tx_mac_ctrl_frames),
145         QEDE_PF_STAT(rx_pause_frames),
146         QEDE_PF_STAT(tx_pause_frames),
147         QEDE_PF_STAT(rx_pfc_frames),
148         QEDE_PF_STAT(tx_pfc_frames),
149
150         QEDE_PF_STAT(rx_crc_errors),
151         QEDE_PF_STAT(rx_align_errors),
152         QEDE_PF_STAT(rx_carrier_errors),
153         QEDE_PF_STAT(rx_oversize_packets),
154         QEDE_PF_STAT(rx_jabbers),
155         QEDE_PF_STAT(rx_undersize_packets),
156         QEDE_PF_STAT(rx_fragments),
157         QEDE_PF_BB_STAT(tx_lpi_entry_count),
158         QEDE_PF_BB_STAT(tx_total_collisions),
159         QEDE_PF_STAT(brb_truncates),
160         QEDE_PF_STAT(brb_discards),
161         QEDE_STAT(no_buff_discards),
162         QEDE_PF_STAT(mftag_filter_discards),
163         QEDE_PF_STAT(mac_filter_discards),
164         QEDE_STAT(tx_err_drop_pkts),
165         QEDE_STAT(ttl0_discard),
166         QEDE_STAT(packet_too_big_discard),
167
168         QEDE_STAT(coalesced_pkts),
169         QEDE_STAT(coalesced_events),
170         QEDE_STAT(coalesced_aborts_num),
171         QEDE_STAT(non_coalesced_pkts),
172         QEDE_STAT(coalesced_bytes),
173 };
174
175 #define QEDE_NUM_STATS  ARRAY_SIZE(qede_stats_arr)
176 #define QEDE_STAT_IS_PF_ONLY(i) \
177         test_bit(QEDE_STAT_PF_ONLY, &qede_stats_arr[i].attr)
178 #define QEDE_STAT_IS_BB_ONLY(i) \
179         test_bit(QEDE_STAT_BB_ONLY, &qede_stats_arr[i].attr)
180 #define QEDE_STAT_IS_AH_ONLY(i) \
181         test_bit(QEDE_STAT_AH_ONLY, &qede_stats_arr[i].attr)
182
183 enum {
184         QEDE_PRI_FLAG_CMT,
185         QEDE_PRI_FLAG_LEN,
186 };
187
188 static const char qede_private_arr[QEDE_PRI_FLAG_LEN][ETH_GSTRING_LEN] = {
189         "Coupled-Function",
190 };
191
192 enum qede_ethtool_tests {
193         QEDE_ETHTOOL_INT_LOOPBACK,
194         QEDE_ETHTOOL_INTERRUPT_TEST,
195         QEDE_ETHTOOL_MEMORY_TEST,
196         QEDE_ETHTOOL_REGISTER_TEST,
197         QEDE_ETHTOOL_CLOCK_TEST,
198         QEDE_ETHTOOL_NVRAM_TEST,
199         QEDE_ETHTOOL_TEST_MAX
200 };
201
202 static const char qede_tests_str_arr[QEDE_ETHTOOL_TEST_MAX][ETH_GSTRING_LEN] = {
203         "Internal loopback (offline)",
204         "Interrupt (online)\t",
205         "Memory (online)\t\t",
206         "Register (online)\t",
207         "Clock (online)\t\t",
208         "Nvram (online)\t\t",
209 };
210
211 static void qede_get_strings_stats_txq(struct qede_dev *edev,
212                                        struct qede_tx_queue *txq, u8 **buf)
213 {
214         int i;
215
216         for (i = 0; i < QEDE_NUM_TQSTATS; i++) {
217                 if (txq->is_xdp)
218                         sprintf(*buf, "%d [XDP]: %s",
219                                 QEDE_TXQ_XDP_TO_IDX(edev, txq),
220                                 qede_tqstats_arr[i].string);
221                 else
222                         sprintf(*buf, "%d: %s", txq->index,
223                                 qede_tqstats_arr[i].string);
224                 *buf += ETH_GSTRING_LEN;
225         }
226 }
227
228 static void qede_get_strings_stats_rxq(struct qede_dev *edev,
229                                        struct qede_rx_queue *rxq, u8 **buf)
230 {
231         int i;
232
233         for (i = 0; i < QEDE_NUM_RQSTATS; i++) {
234                 sprintf(*buf, "%d: %s", rxq->rxq_id,
235                         qede_rqstats_arr[i].string);
236                 *buf += ETH_GSTRING_LEN;
237         }
238 }
239
240 static bool qede_is_irrelevant_stat(struct qede_dev *edev, int stat_index)
241 {
242         return (IS_VF(edev) && QEDE_STAT_IS_PF_ONLY(stat_index)) ||
243                (QEDE_IS_BB(edev) && QEDE_STAT_IS_AH_ONLY(stat_index)) ||
244                (QEDE_IS_AH(edev) && QEDE_STAT_IS_BB_ONLY(stat_index));
245 }
246
247 static void qede_get_strings_stats(struct qede_dev *edev, u8 *buf)
248 {
249         struct qede_fastpath *fp;
250         int i;
251
252         /* Account for queue statistics */
253         for (i = 0; i < QEDE_QUEUE_CNT(edev); i++) {
254                 fp = &edev->fp_array[i];
255
256                 if (fp->type & QEDE_FASTPATH_RX)
257                         qede_get_strings_stats_rxq(edev, fp->rxq, &buf);
258
259                 if (fp->type & QEDE_FASTPATH_XDP)
260                         qede_get_strings_stats_txq(edev, fp->xdp_tx, &buf);
261
262                 if (fp->type & QEDE_FASTPATH_TX)
263                         qede_get_strings_stats_txq(edev, fp->txq, &buf);
264         }
265
266         /* Account for non-queue statistics */
267         for (i = 0; i < QEDE_NUM_STATS; i++) {
268                 if (qede_is_irrelevant_stat(edev, i))
269                         continue;
270                 strcpy(buf, qede_stats_arr[i].string);
271                 buf += ETH_GSTRING_LEN;
272         }
273 }
274
275 static void qede_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
276 {
277         struct qede_dev *edev = netdev_priv(dev);
278
279         switch (stringset) {
280         case ETH_SS_STATS:
281                 qede_get_strings_stats(edev, buf);
282                 break;
283         case ETH_SS_PRIV_FLAGS:
284                 memcpy(buf, qede_private_arr,
285                        ETH_GSTRING_LEN * QEDE_PRI_FLAG_LEN);
286                 break;
287         case ETH_SS_TEST:
288                 memcpy(buf, qede_tests_str_arr,
289                        ETH_GSTRING_LEN * QEDE_ETHTOOL_TEST_MAX);
290                 break;
291         default:
292                 DP_VERBOSE(edev, QED_MSG_DEBUG,
293                            "Unsupported stringset 0x%08x\n", stringset);
294         }
295 }
296
297 static void qede_get_ethtool_stats_txq(struct qede_tx_queue *txq, u64 **buf)
298 {
299         int i;
300
301         for (i = 0; i < QEDE_NUM_TQSTATS; i++) {
302                 **buf = *((u64 *)(((void *)txq) + qede_tqstats_arr[i].offset));
303                 (*buf)++;
304         }
305 }
306
307 static void qede_get_ethtool_stats_rxq(struct qede_rx_queue *rxq, u64 **buf)
308 {
309         int i;
310
311         for (i = 0; i < QEDE_NUM_RQSTATS; i++) {
312                 **buf = *((u64 *)(((void *)rxq) + qede_rqstats_arr[i].offset));
313                 (*buf)++;
314         }
315 }
316
317 static void qede_get_ethtool_stats(struct net_device *dev,
318                                    struct ethtool_stats *stats, u64 *buf)
319 {
320         struct qede_dev *edev = netdev_priv(dev);
321         struct qede_fastpath *fp;
322         int i;
323
324         qede_fill_by_demand_stats(edev);
325
326         /* Need to protect the access to the fastpath array */
327         __qede_lock(edev);
328
329         for (i = 0; i < QEDE_QUEUE_CNT(edev); i++) {
330                 fp = &edev->fp_array[i];
331
332                 if (fp->type & QEDE_FASTPATH_RX)
333                         qede_get_ethtool_stats_rxq(fp->rxq, &buf);
334
335                 if (fp->type & QEDE_FASTPATH_XDP)
336                         qede_get_ethtool_stats_txq(fp->xdp_tx, &buf);
337
338                 if (fp->type & QEDE_FASTPATH_TX)
339                         qede_get_ethtool_stats_txq(fp->txq, &buf);
340         }
341
342         for (i = 0; i < QEDE_NUM_STATS; i++) {
343                 if (qede_is_irrelevant_stat(edev, i))
344                         continue;
345                 *buf = *((u64 *)(((void *)&edev->stats) +
346                                  qede_stats_arr[i].offset));
347
348                 buf++;
349         }
350
351         __qede_unlock(edev);
352 }
353
354 static int qede_get_sset_count(struct net_device *dev, int stringset)
355 {
356         struct qede_dev *edev = netdev_priv(dev);
357         int num_stats = QEDE_NUM_STATS, i;
358
359         switch (stringset) {
360         case ETH_SS_STATS:
361                 for (i = 0; i < QEDE_NUM_STATS; i++)
362                         if (qede_is_irrelevant_stat(edev, i))
363                                 num_stats--;
364
365                 /* Account for the Regular Tx statistics */
366                 num_stats += QEDE_TSS_COUNT(edev) * QEDE_NUM_TQSTATS;
367
368                 /* Account for the Regular Rx statistics */
369                 num_stats += QEDE_RSS_COUNT(edev) * QEDE_NUM_RQSTATS;
370
371                 /* Account for XDP statistics [if needed] */
372                 if (edev->xdp_prog)
373                         num_stats += QEDE_RSS_COUNT(edev) * QEDE_NUM_TQSTATS;
374                 return num_stats;
375
376         case ETH_SS_PRIV_FLAGS:
377                 return QEDE_PRI_FLAG_LEN;
378         case ETH_SS_TEST:
379                 if (!IS_VF(edev))
380                         return QEDE_ETHTOOL_TEST_MAX;
381                 else
382                         return 0;
383         default:
384                 DP_VERBOSE(edev, QED_MSG_DEBUG,
385                            "Unsupported stringset 0x%08x\n", stringset);
386                 return -EINVAL;
387         }
388 }
389
390 static u32 qede_get_priv_flags(struct net_device *dev)
391 {
392         struct qede_dev *edev = netdev_priv(dev);
393
394         return (!!(edev->dev_info.common.num_hwfns > 1)) << QEDE_PRI_FLAG_CMT;
395 }
396
397 struct qede_link_mode_mapping {
398         u32 qed_link_mode;
399         u32 ethtool_link_mode;
400 };
401
402 static const struct qede_link_mode_mapping qed_lm_map[] = {
403         {QED_LM_FIBRE_BIT, ETHTOOL_LINK_MODE_FIBRE_BIT},
404         {QED_LM_Autoneg_BIT, ETHTOOL_LINK_MODE_Autoneg_BIT},
405         {QED_LM_Asym_Pause_BIT, ETHTOOL_LINK_MODE_Asym_Pause_BIT},
406         {QED_LM_Pause_BIT, ETHTOOL_LINK_MODE_Pause_BIT},
407         {QED_LM_1000baseT_Half_BIT, ETHTOOL_LINK_MODE_1000baseT_Half_BIT},
408         {QED_LM_1000baseT_Full_BIT, ETHTOOL_LINK_MODE_1000baseT_Full_BIT},
409         {QED_LM_10000baseKR_Full_BIT, ETHTOOL_LINK_MODE_10000baseKR_Full_BIT},
410         {QED_LM_25000baseKR_Full_BIT, ETHTOOL_LINK_MODE_25000baseKR_Full_BIT},
411         {QED_LM_40000baseLR4_Full_BIT, ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT},
412         {QED_LM_50000baseKR2_Full_BIT, ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT},
413         {QED_LM_100000baseKR4_Full_BIT,
414          ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT},
415 };
416
417 #define QEDE_DRV_TO_ETHTOOL_CAPS(caps, lk_ksettings, name)      \
418 {                                                               \
419         int i;                                                  \
420                                                                 \
421         for (i = 0; i < ARRAY_SIZE(qed_lm_map); i++) {          \
422                 if ((caps) & (qed_lm_map[i].qed_link_mode))     \
423                         __set_bit(qed_lm_map[i].ethtool_link_mode,\
424                                   lk_ksettings->link_modes.name); \
425         }                                                       \
426 }
427
428 #define QEDE_ETHTOOL_TO_DRV_CAPS(caps, lk_ksettings, name)      \
429 {                                                               \
430         int i;                                                  \
431                                                                 \
432         for (i = 0; i < ARRAY_SIZE(qed_lm_map); i++) {          \
433                 if (test_bit(qed_lm_map[i].ethtool_link_mode,   \
434                              lk_ksettings->link_modes.name))    \
435                         caps |= qed_lm_map[i].qed_link_mode;    \
436         }                                                       \
437 }
438
439 static int qede_get_link_ksettings(struct net_device *dev,
440                                    struct ethtool_link_ksettings *cmd)
441 {
442         struct ethtool_link_settings *base = &cmd->base;
443         struct qede_dev *edev = netdev_priv(dev);
444         struct qed_link_output current_link;
445
446         __qede_lock(edev);
447
448         memset(&current_link, 0, sizeof(current_link));
449         edev->ops->common->get_link(edev->cdev, &current_link);
450
451         ethtool_link_ksettings_zero_link_mode(cmd, supported);
452         QEDE_DRV_TO_ETHTOOL_CAPS(current_link.supported_caps, cmd, supported)
453
454         ethtool_link_ksettings_zero_link_mode(cmd, advertising);
455         QEDE_DRV_TO_ETHTOOL_CAPS(current_link.advertised_caps, cmd, advertising)
456
457         ethtool_link_ksettings_zero_link_mode(cmd, lp_advertising);
458         QEDE_DRV_TO_ETHTOOL_CAPS(current_link.lp_caps, cmd, lp_advertising)
459
460         if ((edev->state == QEDE_STATE_OPEN) && (current_link.link_up)) {
461                 base->speed = current_link.speed;
462                 base->duplex = current_link.duplex;
463         } else {
464                 base->speed = SPEED_UNKNOWN;
465                 base->duplex = DUPLEX_UNKNOWN;
466         }
467
468         __qede_unlock(edev);
469
470         base->port = current_link.port;
471         base->autoneg = (current_link.autoneg) ? AUTONEG_ENABLE :
472                         AUTONEG_DISABLE;
473
474         return 0;
475 }
476
477 static int qede_set_link_ksettings(struct net_device *dev,
478                                    const struct ethtool_link_ksettings *cmd)
479 {
480         const struct ethtool_link_settings *base = &cmd->base;
481         struct qede_dev *edev = netdev_priv(dev);
482         struct qed_link_output current_link;
483         struct qed_link_params params;
484
485         if (!edev->ops || !edev->ops->common->can_link_change(edev->cdev)) {
486                 DP_INFO(edev, "Link settings are not allowed to be changed\n");
487                 return -EOPNOTSUPP;
488         }
489         memset(&current_link, 0, sizeof(current_link));
490         memset(&params, 0, sizeof(params));
491         edev->ops->common->get_link(edev->cdev, &current_link);
492
493         params.override_flags |= QED_LINK_OVERRIDE_SPEED_ADV_SPEEDS;
494         params.override_flags |= QED_LINK_OVERRIDE_SPEED_AUTONEG;
495         if (base->autoneg == AUTONEG_ENABLE) {
496                 if (!(current_link.supported_caps & QED_LM_Autoneg_BIT)) {
497                         DP_INFO(edev, "Auto negotiation is not supported\n");
498                         return -EOPNOTSUPP;
499                 }
500
501                 params.autoneg = true;
502                 params.forced_speed = 0;
503                 QEDE_ETHTOOL_TO_DRV_CAPS(params.adv_speeds, cmd, advertising)
504         } else {                /* forced speed */
505                 params.override_flags |= QED_LINK_OVERRIDE_SPEED_FORCED_SPEED;
506                 params.autoneg = false;
507                 params.forced_speed = base->speed;
508                 switch (base->speed) {
509                 case SPEED_1000:
510                         if (!(current_link.supported_caps &
511                               QED_LM_1000baseT_Full_BIT)) {
512                                 DP_INFO(edev, "1G speed not supported\n");
513                                 return -EINVAL;
514                         }
515                         params.adv_speeds = QED_LM_1000baseT_Full_BIT;
516                         break;
517                 case SPEED_10000:
518                         if (!(current_link.supported_caps &
519                               QED_LM_10000baseKR_Full_BIT)) {
520                                 DP_INFO(edev, "10G speed not supported\n");
521                                 return -EINVAL;
522                         }
523                         params.adv_speeds = QED_LM_10000baseKR_Full_BIT;
524                         break;
525                 case SPEED_25000:
526                         if (!(current_link.supported_caps &
527                               QED_LM_25000baseKR_Full_BIT)) {
528                                 DP_INFO(edev, "25G speed not supported\n");
529                                 return -EINVAL;
530                         }
531                         params.adv_speeds = QED_LM_25000baseKR_Full_BIT;
532                         break;
533                 case SPEED_40000:
534                         if (!(current_link.supported_caps &
535                               QED_LM_40000baseLR4_Full_BIT)) {
536                                 DP_INFO(edev, "40G speed not supported\n");
537                                 return -EINVAL;
538                         }
539                         params.adv_speeds = QED_LM_40000baseLR4_Full_BIT;
540                         break;
541                 case SPEED_50000:
542                         if (!(current_link.supported_caps &
543                               QED_LM_50000baseKR2_Full_BIT)) {
544                                 DP_INFO(edev, "50G speed not supported\n");
545                                 return -EINVAL;
546                         }
547                         params.adv_speeds = QED_LM_50000baseKR2_Full_BIT;
548                         break;
549                 case SPEED_100000:
550                         if (!(current_link.supported_caps &
551                               QED_LM_100000baseKR4_Full_BIT)) {
552                                 DP_INFO(edev, "100G speed not supported\n");
553                                 return -EINVAL;
554                         }
555                         params.adv_speeds = QED_LM_100000baseKR4_Full_BIT;
556                         break;
557                 default:
558                         DP_INFO(edev, "Unsupported speed %u\n", base->speed);
559                         return -EINVAL;
560                 }
561         }
562
563         params.link_up = true;
564         edev->ops->common->set_link(edev->cdev, &params);
565
566         return 0;
567 }
568
569 static void qede_get_drvinfo(struct net_device *ndev,
570                              struct ethtool_drvinfo *info)
571 {
572         char mfw[ETHTOOL_FWVERS_LEN], storm[ETHTOOL_FWVERS_LEN];
573         struct qede_dev *edev = netdev_priv(ndev);
574
575         strlcpy(info->driver, "qede", sizeof(info->driver));
576         strlcpy(info->version, DRV_MODULE_VERSION, sizeof(info->version));
577
578         snprintf(storm, ETHTOOL_FWVERS_LEN, "%d.%d.%d.%d",
579                  edev->dev_info.common.fw_major,
580                  edev->dev_info.common.fw_minor,
581                  edev->dev_info.common.fw_rev,
582                  edev->dev_info.common.fw_eng);
583
584         snprintf(mfw, ETHTOOL_FWVERS_LEN, "%d.%d.%d.%d",
585                  (edev->dev_info.common.mfw_rev >> 24) & 0xFF,
586                  (edev->dev_info.common.mfw_rev >> 16) & 0xFF,
587                  (edev->dev_info.common.mfw_rev >> 8) & 0xFF,
588                  edev->dev_info.common.mfw_rev & 0xFF);
589
590         if ((strlen(storm) + strlen(mfw) + strlen("mfw storm  ")) <
591             sizeof(info->fw_version)) {
592                 snprintf(info->fw_version, sizeof(info->fw_version),
593                          "mfw %s storm %s", mfw, storm);
594         } else {
595                 snprintf(info->fw_version, sizeof(info->fw_version),
596                          "%s %s", mfw, storm);
597         }
598
599         strlcpy(info->bus_info, pci_name(edev->pdev), sizeof(info->bus_info));
600 }
601
602 static void qede_get_wol(struct net_device *ndev, struct ethtool_wolinfo *wol)
603 {
604         struct qede_dev *edev = netdev_priv(ndev);
605
606         if (edev->dev_info.common.wol_support) {
607                 wol->supported = WAKE_MAGIC;
608                 wol->wolopts = edev->wol_enabled ? WAKE_MAGIC : 0;
609         }
610 }
611
612 static int qede_set_wol(struct net_device *ndev, struct ethtool_wolinfo *wol)
613 {
614         struct qede_dev *edev = netdev_priv(ndev);
615         bool wol_requested;
616         int rc;
617
618         if (wol->wolopts & ~WAKE_MAGIC) {
619                 DP_INFO(edev,
620                         "Can't support WoL options other than magic-packet\n");
621                 return -EINVAL;
622         }
623
624         wol_requested = !!(wol->wolopts & WAKE_MAGIC);
625         if (wol_requested == edev->wol_enabled)
626                 return 0;
627
628         /* Need to actually change configuration */
629         if (!edev->dev_info.common.wol_support) {
630                 DP_INFO(edev, "Device doesn't support WoL\n");
631                 return -EINVAL;
632         }
633
634         rc = edev->ops->common->update_wol(edev->cdev, wol_requested);
635         if (!rc)
636                 edev->wol_enabled = wol_requested;
637
638         return rc;
639 }
640
641 static u32 qede_get_msglevel(struct net_device *ndev)
642 {
643         struct qede_dev *edev = netdev_priv(ndev);
644
645         return ((u32)edev->dp_level << QED_LOG_LEVEL_SHIFT) | edev->dp_module;
646 }
647
648 static void qede_set_msglevel(struct net_device *ndev, u32 level)
649 {
650         struct qede_dev *edev = netdev_priv(ndev);
651         u32 dp_module = 0;
652         u8 dp_level = 0;
653
654         qede_config_debug(level, &dp_module, &dp_level);
655
656         edev->dp_level = dp_level;
657         edev->dp_module = dp_module;
658         edev->ops->common->update_msglvl(edev->cdev,
659                                          dp_module, dp_level);
660 }
661
662 static int qede_nway_reset(struct net_device *dev)
663 {
664         struct qede_dev *edev = netdev_priv(dev);
665         struct qed_link_output current_link;
666         struct qed_link_params link_params;
667
668         if (!edev->ops || !edev->ops->common->can_link_change(edev->cdev)) {
669                 DP_INFO(edev, "Link settings are not allowed to be changed\n");
670                 return -EOPNOTSUPP;
671         }
672
673         if (!netif_running(dev))
674                 return 0;
675
676         memset(&current_link, 0, sizeof(current_link));
677         edev->ops->common->get_link(edev->cdev, &current_link);
678         if (!current_link.link_up)
679                 return 0;
680
681         /* Toggle the link */
682         memset(&link_params, 0, sizeof(link_params));
683         link_params.link_up = false;
684         edev->ops->common->set_link(edev->cdev, &link_params);
685         link_params.link_up = true;
686         edev->ops->common->set_link(edev->cdev, &link_params);
687
688         return 0;
689 }
690
691 static u32 qede_get_link(struct net_device *dev)
692 {
693         struct qede_dev *edev = netdev_priv(dev);
694         struct qed_link_output current_link;
695
696         memset(&current_link, 0, sizeof(current_link));
697         edev->ops->common->get_link(edev->cdev, &current_link);
698
699         return current_link.link_up;
700 }
701
702 static int qede_get_coalesce(struct net_device *dev,
703                              struct ethtool_coalesce *coal)
704 {
705         void *rx_handle = NULL, *tx_handle = NULL;
706         struct qede_dev *edev = netdev_priv(dev);
707         u16 rx_coal, tx_coal, i, rc = 0;
708         struct qede_fastpath *fp;
709
710         rx_coal = QED_DEFAULT_RX_USECS;
711         tx_coal = QED_DEFAULT_TX_USECS;
712
713         memset(coal, 0, sizeof(struct ethtool_coalesce));
714
715         __qede_lock(edev);
716         if (edev->state == QEDE_STATE_OPEN) {
717                 for_each_queue(i) {
718                         fp = &edev->fp_array[i];
719
720                         if (fp->type & QEDE_FASTPATH_RX) {
721                                 rx_handle = fp->rxq->handle;
722                                 break;
723                         }
724                 }
725
726                 rc = edev->ops->get_coalesce(edev->cdev, &rx_coal, rx_handle);
727                 if (rc) {
728                         DP_INFO(edev, "Read Rx coalesce error\n");
729                         goto out;
730                 }
731
732                 for_each_queue(i) {
733                         fp = &edev->fp_array[i];
734                         if (fp->type & QEDE_FASTPATH_TX) {
735                                 tx_handle = fp->txq->handle;
736                                 break;
737                         }
738                 }
739
740                 rc = edev->ops->get_coalesce(edev->cdev, &tx_coal, tx_handle);
741                 if (rc)
742                         DP_INFO(edev, "Read Tx coalesce error\n");
743         }
744
745 out:
746         __qede_unlock(edev);
747
748         coal->rx_coalesce_usecs = rx_coal;
749         coal->tx_coalesce_usecs = tx_coal;
750
751         return rc;
752 }
753
754 static int qede_set_coalesce(struct net_device *dev,
755                              struct ethtool_coalesce *coal)
756 {
757         struct qede_dev *edev = netdev_priv(dev);
758         struct qede_fastpath *fp;
759         int i, rc = 0;
760         u16 rxc, txc;
761
762         if (!netif_running(dev)) {
763                 DP_INFO(edev, "Interface is down\n");
764                 return -EINVAL;
765         }
766
767         if (coal->rx_coalesce_usecs > QED_COALESCE_MAX ||
768             coal->tx_coalesce_usecs > QED_COALESCE_MAX) {
769                 DP_INFO(edev,
770                         "Can't support requested %s coalesce value [max supported value %d]\n",
771                         coal->rx_coalesce_usecs > QED_COALESCE_MAX ? "rx" :
772                         "tx", QED_COALESCE_MAX);
773                 return -EINVAL;
774         }
775
776         rxc = (u16)coal->rx_coalesce_usecs;
777         txc = (u16)coal->tx_coalesce_usecs;
778         for_each_queue(i) {
779                 fp = &edev->fp_array[i];
780
781                 if (edev->fp_array[i].type & QEDE_FASTPATH_RX) {
782                         rc = edev->ops->common->set_coalesce(edev->cdev,
783                                                              rxc, 0,
784                                                              fp->rxq->handle);
785                         if (rc) {
786                                 DP_INFO(edev,
787                                         "Set RX coalesce error, rc = %d\n", rc);
788                                 return rc;
789                         }
790                 }
791
792                 if (edev->fp_array[i].type & QEDE_FASTPATH_TX) {
793                         rc = edev->ops->common->set_coalesce(edev->cdev,
794                                                              0, txc,
795                                                              fp->txq->handle);
796                         if (rc) {
797                                 DP_INFO(edev,
798                                         "Set TX coalesce error, rc = %d\n", rc);
799                                 return rc;
800                         }
801                 }
802         }
803
804         return rc;
805 }
806
807 static void qede_get_ringparam(struct net_device *dev,
808                                struct ethtool_ringparam *ering)
809 {
810         struct qede_dev *edev = netdev_priv(dev);
811
812         ering->rx_max_pending = NUM_RX_BDS_MAX;
813         ering->rx_pending = edev->q_num_rx_buffers;
814         ering->tx_max_pending = NUM_TX_BDS_MAX;
815         ering->tx_pending = edev->q_num_tx_buffers;
816 }
817
818 static int qede_set_ringparam(struct net_device *dev,
819                               struct ethtool_ringparam *ering)
820 {
821         struct qede_dev *edev = netdev_priv(dev);
822
823         DP_VERBOSE(edev, (NETIF_MSG_IFUP | NETIF_MSG_IFDOWN),
824                    "Set ring params command parameters: rx_pending = %d, tx_pending = %d\n",
825                    ering->rx_pending, ering->tx_pending);
826
827         /* Validate legality of configuration */
828         if (ering->rx_pending > NUM_RX_BDS_MAX ||
829             ering->rx_pending < NUM_RX_BDS_MIN ||
830             ering->tx_pending > NUM_TX_BDS_MAX ||
831             ering->tx_pending < NUM_TX_BDS_MIN) {
832                 DP_VERBOSE(edev, (NETIF_MSG_IFUP | NETIF_MSG_IFDOWN),
833                            "Can only support Rx Buffer size [0%08x,...,0x%08x] and Tx Buffer size [0x%08x,...,0x%08x]\n",
834                            NUM_RX_BDS_MIN, NUM_RX_BDS_MAX,
835                            NUM_TX_BDS_MIN, NUM_TX_BDS_MAX);
836                 return -EINVAL;
837         }
838
839         /* Change ring size and re-load */
840         edev->q_num_rx_buffers = ering->rx_pending;
841         edev->q_num_tx_buffers = ering->tx_pending;
842
843         qede_reload(edev, NULL, false);
844
845         return 0;
846 }
847
848 static void qede_get_pauseparam(struct net_device *dev,
849                                 struct ethtool_pauseparam *epause)
850 {
851         struct qede_dev *edev = netdev_priv(dev);
852         struct qed_link_output current_link;
853
854         memset(&current_link, 0, sizeof(current_link));
855         edev->ops->common->get_link(edev->cdev, &current_link);
856
857         if (current_link.pause_config & QED_LINK_PAUSE_AUTONEG_ENABLE)
858                 epause->autoneg = true;
859         if (current_link.pause_config & QED_LINK_PAUSE_RX_ENABLE)
860                 epause->rx_pause = true;
861         if (current_link.pause_config & QED_LINK_PAUSE_TX_ENABLE)
862                 epause->tx_pause = true;
863
864         DP_VERBOSE(edev, QED_MSG_DEBUG,
865                    "ethtool_pauseparam: cmd %d  autoneg %d  rx_pause %d  tx_pause %d\n",
866                    epause->cmd, epause->autoneg, epause->rx_pause,
867                    epause->tx_pause);
868 }
869
870 static int qede_set_pauseparam(struct net_device *dev,
871                                struct ethtool_pauseparam *epause)
872 {
873         struct qede_dev *edev = netdev_priv(dev);
874         struct qed_link_params params;
875         struct qed_link_output current_link;
876
877         if (!edev->ops || !edev->ops->common->can_link_change(edev->cdev)) {
878                 DP_INFO(edev,
879                         "Pause settings are not allowed to be changed\n");
880                 return -EOPNOTSUPP;
881         }
882
883         memset(&current_link, 0, sizeof(current_link));
884         edev->ops->common->get_link(edev->cdev, &current_link);
885
886         memset(&params, 0, sizeof(params));
887         params.override_flags |= QED_LINK_OVERRIDE_PAUSE_CONFIG;
888         if (epause->autoneg) {
889                 if (!(current_link.supported_caps & QED_LM_Autoneg_BIT)) {
890                         DP_INFO(edev, "autoneg not supported\n");
891                         return -EINVAL;
892                 }
893                 params.pause_config |= QED_LINK_PAUSE_AUTONEG_ENABLE;
894         }
895         if (epause->rx_pause)
896                 params.pause_config |= QED_LINK_PAUSE_RX_ENABLE;
897         if (epause->tx_pause)
898                 params.pause_config |= QED_LINK_PAUSE_TX_ENABLE;
899
900         params.link_up = true;
901         edev->ops->common->set_link(edev->cdev, &params);
902
903         return 0;
904 }
905
906 static void qede_get_regs(struct net_device *ndev,
907                           struct ethtool_regs *regs, void *buffer)
908 {
909         struct qede_dev *edev = netdev_priv(ndev);
910
911         regs->version = 0;
912         memset(buffer, 0, regs->len);
913
914         if (edev->ops && edev->ops->common)
915                 edev->ops->common->dbg_all_data(edev->cdev, buffer);
916 }
917
918 static int qede_get_regs_len(struct net_device *ndev)
919 {
920         struct qede_dev *edev = netdev_priv(ndev);
921
922         if (edev->ops && edev->ops->common)
923                 return edev->ops->common->dbg_all_data_size(edev->cdev);
924         else
925                 return -EINVAL;
926 }
927
928 static void qede_update_mtu(struct qede_dev *edev,
929                             struct qede_reload_args *args)
930 {
931         edev->ndev->mtu = args->u.mtu;
932 }
933
934 /* Netdevice NDOs */
935 int qede_change_mtu(struct net_device *ndev, int new_mtu)
936 {
937         struct qede_dev *edev = netdev_priv(ndev);
938         struct qede_reload_args args;
939
940         DP_VERBOSE(edev, (NETIF_MSG_IFUP | NETIF_MSG_IFDOWN),
941                    "Configuring MTU size of %d\n", new_mtu);
942
943         /* Set the mtu field and re-start the interface if needed */
944         args.u.mtu = new_mtu;
945         args.func = &qede_update_mtu;
946         qede_reload(edev, &args, false);
947
948         edev->ops->common->update_mtu(edev->cdev, new_mtu);
949
950         return 0;
951 }
952
953 static void qede_get_channels(struct net_device *dev,
954                               struct ethtool_channels *channels)
955 {
956         struct qede_dev *edev = netdev_priv(dev);
957
958         channels->max_combined = QEDE_MAX_RSS_CNT(edev);
959         channels->max_rx = QEDE_MAX_RSS_CNT(edev);
960         channels->max_tx = QEDE_MAX_RSS_CNT(edev);
961         channels->combined_count = QEDE_QUEUE_CNT(edev) - edev->fp_num_tx -
962                                         edev->fp_num_rx;
963         channels->tx_count = edev->fp_num_tx;
964         channels->rx_count = edev->fp_num_rx;
965 }
966
967 static int qede_set_channels(struct net_device *dev,
968                              struct ethtool_channels *channels)
969 {
970         struct qede_dev *edev = netdev_priv(dev);
971         u32 count;
972
973         DP_VERBOSE(edev, (NETIF_MSG_IFUP | NETIF_MSG_IFDOWN),
974                    "set-channels command parameters: rx = %d, tx = %d, other = %d, combined = %d\n",
975                    channels->rx_count, channels->tx_count,
976                    channels->other_count, channels->combined_count);
977
978         count = channels->rx_count + channels->tx_count +
979                         channels->combined_count;
980
981         /* We don't support `other' channels */
982         if (channels->other_count) {
983                 DP_VERBOSE(edev, (NETIF_MSG_IFUP | NETIF_MSG_IFDOWN),
984                            "command parameters not supported\n");
985                 return -EINVAL;
986         }
987
988         if (!(channels->combined_count || (channels->rx_count &&
989                                            channels->tx_count))) {
990                 DP_VERBOSE(edev, (NETIF_MSG_IFUP | NETIF_MSG_IFDOWN),
991                            "need to request at least one transmit and one receive channel\n");
992                 return -EINVAL;
993         }
994
995         if (count > QEDE_MAX_RSS_CNT(edev)) {
996                 DP_VERBOSE(edev, (NETIF_MSG_IFUP | NETIF_MSG_IFDOWN),
997                            "requested channels = %d max supported channels = %d\n",
998                            count, QEDE_MAX_RSS_CNT(edev));
999                 return -EINVAL;
1000         }
1001
1002         /* Check if there was a change in the active parameters */
1003         if ((count == QEDE_QUEUE_CNT(edev)) &&
1004             (channels->tx_count == edev->fp_num_tx) &&
1005             (channels->rx_count == edev->fp_num_rx)) {
1006                 DP_VERBOSE(edev, (NETIF_MSG_IFUP | NETIF_MSG_IFDOWN),
1007                            "No change in active parameters\n");
1008                 return 0;
1009         }
1010
1011         /* We need the number of queues to be divisible between the hwfns */
1012         if ((count % edev->dev_info.common.num_hwfns) ||
1013             (channels->tx_count % edev->dev_info.common.num_hwfns) ||
1014             (channels->rx_count % edev->dev_info.common.num_hwfns)) {
1015                 DP_VERBOSE(edev, (NETIF_MSG_IFUP | NETIF_MSG_IFDOWN),
1016                            "Number of channels must be divisible by %04x\n",
1017                            edev->dev_info.common.num_hwfns);
1018                 return -EINVAL;
1019         }
1020
1021         /* Set number of queues and reload if necessary */
1022         edev->req_queues = count;
1023         edev->req_num_tx = channels->tx_count;
1024         edev->req_num_rx = channels->rx_count;
1025         /* Reset the indirection table if rx queue count is updated */
1026         if ((edev->req_queues - edev->req_num_tx) != QEDE_RSS_COUNT(edev)) {
1027                 edev->rss_params_inited &= ~QEDE_RSS_INDIR_INITED;
1028                 memset(edev->rss_ind_table, 0, sizeof(edev->rss_ind_table));
1029         }
1030
1031         qede_reload(edev, NULL, false);
1032
1033         return 0;
1034 }
1035
1036 static int qede_get_ts_info(struct net_device *dev,
1037                             struct ethtool_ts_info *info)
1038 {
1039         struct qede_dev *edev = netdev_priv(dev);
1040
1041         return qede_ptp_get_ts_info(edev, info);
1042 }
1043
1044 static int qede_set_phys_id(struct net_device *dev,
1045                             enum ethtool_phys_id_state state)
1046 {
1047         struct qede_dev *edev = netdev_priv(dev);
1048         u8 led_state = 0;
1049
1050         switch (state) {
1051         case ETHTOOL_ID_ACTIVE:
1052                 return 1;       /* cycle on/off once per second */
1053
1054         case ETHTOOL_ID_ON:
1055                 led_state = QED_LED_MODE_ON;
1056                 break;
1057
1058         case ETHTOOL_ID_OFF:
1059                 led_state = QED_LED_MODE_OFF;
1060                 break;
1061
1062         case ETHTOOL_ID_INACTIVE:
1063                 led_state = QED_LED_MODE_RESTORE;
1064                 break;
1065         }
1066
1067         edev->ops->common->set_led(edev->cdev, led_state);
1068
1069         return 0;
1070 }
1071
1072 static int qede_get_rss_flags(struct qede_dev *edev, struct ethtool_rxnfc *info)
1073 {
1074         info->data = RXH_IP_SRC | RXH_IP_DST;
1075
1076         switch (info->flow_type) {
1077         case TCP_V4_FLOW:
1078         case TCP_V6_FLOW:
1079                 info->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
1080                 break;
1081         case UDP_V4_FLOW:
1082                 if (edev->rss_caps & QED_RSS_IPV4_UDP)
1083                         info->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
1084                 break;
1085         case UDP_V6_FLOW:
1086                 if (edev->rss_caps & QED_RSS_IPV6_UDP)
1087                         info->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
1088                 break;
1089         case IPV4_FLOW:
1090         case IPV6_FLOW:
1091                 break;
1092         default:
1093                 info->data = 0;
1094                 break;
1095         }
1096
1097         return 0;
1098 }
1099
1100 static int qede_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
1101                           u32 *rule_locs)
1102 {
1103         struct qede_dev *edev = netdev_priv(dev);
1104         int rc = 0;
1105
1106         switch (info->cmd) {
1107         case ETHTOOL_GRXRINGS:
1108                 info->data = QEDE_RSS_COUNT(edev);
1109                 break;
1110         case ETHTOOL_GRXFH:
1111                 rc = qede_get_rss_flags(edev, info);
1112                 break;
1113         case ETHTOOL_GRXCLSRLCNT:
1114                 info->rule_cnt = qede_get_arfs_filter_count(edev);
1115                 info->data = QEDE_RFS_MAX_FLTR;
1116                 break;
1117         case ETHTOOL_GRXCLSRULE:
1118                 rc = qede_get_cls_rule_entry(edev, info);
1119                 break;
1120         case ETHTOOL_GRXCLSRLALL:
1121                 rc = qede_get_cls_rule_all(edev, info, rule_locs);
1122                 break;
1123         default:
1124                 DP_ERR(edev, "Command parameters not supported\n");
1125                 rc = -EOPNOTSUPP;
1126         }
1127
1128         return rc;
1129 }
1130
1131 static int qede_set_rss_flags(struct qede_dev *edev, struct ethtool_rxnfc *info)
1132 {
1133         struct qed_update_vport_params *vport_update_params;
1134         u8 set_caps = 0, clr_caps = 0;
1135         int rc = 0;
1136
1137         DP_VERBOSE(edev, QED_MSG_DEBUG,
1138                    "Set rss flags command parameters: flow type = %d, data = %llu\n",
1139                    info->flow_type, info->data);
1140
1141         switch (info->flow_type) {
1142         case TCP_V4_FLOW:
1143         case TCP_V6_FLOW:
1144                 /* For TCP only 4-tuple hash is supported */
1145                 if (info->data ^ (RXH_IP_SRC | RXH_IP_DST |
1146                                   RXH_L4_B_0_1 | RXH_L4_B_2_3)) {
1147                         DP_INFO(edev, "Command parameters not supported\n");
1148                         return -EINVAL;
1149                 }
1150                 return 0;
1151         case UDP_V4_FLOW:
1152                 /* For UDP either 2-tuple hash or 4-tuple hash is supported */
1153                 if (info->data == (RXH_IP_SRC | RXH_IP_DST |
1154                                    RXH_L4_B_0_1 | RXH_L4_B_2_3)) {
1155                         set_caps = QED_RSS_IPV4_UDP;
1156                         DP_VERBOSE(edev, QED_MSG_DEBUG,
1157                                    "UDP 4-tuple enabled\n");
1158                 } else if (info->data == (RXH_IP_SRC | RXH_IP_DST)) {
1159                         clr_caps = QED_RSS_IPV4_UDP;
1160                         DP_VERBOSE(edev, QED_MSG_DEBUG,
1161                                    "UDP 4-tuple disabled\n");
1162                 } else {
1163                         return -EINVAL;
1164                 }
1165                 break;
1166         case UDP_V6_FLOW:
1167                 /* For UDP either 2-tuple hash or 4-tuple hash is supported */
1168                 if (info->data == (RXH_IP_SRC | RXH_IP_DST |
1169                                    RXH_L4_B_0_1 | RXH_L4_B_2_3)) {
1170                         set_caps = QED_RSS_IPV6_UDP;
1171                         DP_VERBOSE(edev, QED_MSG_DEBUG,
1172                                    "UDP 4-tuple enabled\n");
1173                 } else if (info->data == (RXH_IP_SRC | RXH_IP_DST)) {
1174                         clr_caps = QED_RSS_IPV6_UDP;
1175                         DP_VERBOSE(edev, QED_MSG_DEBUG,
1176                                    "UDP 4-tuple disabled\n");
1177                 } else {
1178                         return -EINVAL;
1179                 }
1180                 break;
1181         case IPV4_FLOW:
1182         case IPV6_FLOW:
1183                 /* For IP only 2-tuple hash is supported */
1184                 if (info->data ^ (RXH_IP_SRC | RXH_IP_DST)) {
1185                         DP_INFO(edev, "Command parameters not supported\n");
1186                         return -EINVAL;
1187                 }
1188                 return 0;
1189         case SCTP_V4_FLOW:
1190         case AH_ESP_V4_FLOW:
1191         case AH_V4_FLOW:
1192         case ESP_V4_FLOW:
1193         case SCTP_V6_FLOW:
1194         case AH_ESP_V6_FLOW:
1195         case AH_V6_FLOW:
1196         case ESP_V6_FLOW:
1197         case IP_USER_FLOW:
1198         case ETHER_FLOW:
1199                 /* RSS is not supported for these protocols */
1200                 if (info->data) {
1201                         DP_INFO(edev, "Command parameters not supported\n");
1202                         return -EINVAL;
1203                 }
1204                 return 0;
1205         default:
1206                 return -EINVAL;
1207         }
1208
1209         /* No action is needed if there is no change in the rss capability */
1210         if (edev->rss_caps == ((edev->rss_caps & ~clr_caps) | set_caps))
1211                 return 0;
1212
1213         /* Update internal configuration */
1214         edev->rss_caps = ((edev->rss_caps & ~clr_caps) | set_caps);
1215         edev->rss_params_inited |= QEDE_RSS_CAPS_INITED;
1216
1217         /* Re-configure if possible */
1218         __qede_lock(edev);
1219         if (edev->state == QEDE_STATE_OPEN) {
1220                 vport_update_params = vzalloc(sizeof(*vport_update_params));
1221                 if (!vport_update_params) {
1222                         __qede_unlock(edev);
1223                         return -ENOMEM;
1224                 }
1225                 qede_fill_rss_params(edev, &vport_update_params->rss_params,
1226                                      &vport_update_params->update_rss_flg);
1227                 rc = edev->ops->vport_update(edev->cdev, vport_update_params);
1228                 vfree(vport_update_params);
1229         }
1230         __qede_unlock(edev);
1231
1232         return rc;
1233 }
1234
1235 static int qede_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info)
1236 {
1237         struct qede_dev *edev = netdev_priv(dev);
1238         int rc;
1239
1240         switch (info->cmd) {
1241         case ETHTOOL_SRXFH:
1242                 rc = qede_set_rss_flags(edev, info);
1243                 break;
1244         case ETHTOOL_SRXCLSRLINS:
1245                 rc = qede_add_cls_rule(edev, info);
1246                 break;
1247         case ETHTOOL_SRXCLSRLDEL:
1248                 rc = qede_del_cls_rule(edev, info);
1249                 break;
1250         default:
1251                 DP_INFO(edev, "Command parameters not supported\n");
1252                 rc = -EOPNOTSUPP;
1253         }
1254
1255         return rc;
1256 }
1257
1258 static u32 qede_get_rxfh_indir_size(struct net_device *dev)
1259 {
1260         return QED_RSS_IND_TABLE_SIZE;
1261 }
1262
1263 static u32 qede_get_rxfh_key_size(struct net_device *dev)
1264 {
1265         struct qede_dev *edev = netdev_priv(dev);
1266
1267         return sizeof(edev->rss_key);
1268 }
1269
1270 static int qede_get_rxfh(struct net_device *dev, u32 *indir, u8 *key, u8 *hfunc)
1271 {
1272         struct qede_dev *edev = netdev_priv(dev);
1273         int i;
1274
1275         if (hfunc)
1276                 *hfunc = ETH_RSS_HASH_TOP;
1277
1278         if (!indir)
1279                 return 0;
1280
1281         for (i = 0; i < QED_RSS_IND_TABLE_SIZE; i++)
1282                 indir[i] = edev->rss_ind_table[i];
1283
1284         if (key)
1285                 memcpy(key, edev->rss_key, qede_get_rxfh_key_size(dev));
1286
1287         return 0;
1288 }
1289
1290 static int qede_set_rxfh(struct net_device *dev, const u32 *indir,
1291                          const u8 *key, const u8 hfunc)
1292 {
1293         struct qed_update_vport_params *vport_update_params;
1294         struct qede_dev *edev = netdev_priv(dev);
1295         int i, rc = 0;
1296
1297         if (edev->dev_info.common.num_hwfns > 1) {
1298                 DP_INFO(edev,
1299                         "RSS configuration is not supported for 100G devices\n");
1300                 return -EOPNOTSUPP;
1301         }
1302
1303         if (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP)
1304                 return -EOPNOTSUPP;
1305
1306         if (!indir && !key)
1307                 return 0;
1308
1309         if (indir) {
1310                 for (i = 0; i < QED_RSS_IND_TABLE_SIZE; i++)
1311                         edev->rss_ind_table[i] = indir[i];
1312                 edev->rss_params_inited |= QEDE_RSS_INDIR_INITED;
1313         }
1314
1315         if (key) {
1316                 memcpy(&edev->rss_key, key, qede_get_rxfh_key_size(dev));
1317                 edev->rss_params_inited |= QEDE_RSS_KEY_INITED;
1318         }
1319
1320         __qede_lock(edev);
1321         if (edev->state == QEDE_STATE_OPEN) {
1322                 vport_update_params = vzalloc(sizeof(*vport_update_params));
1323                 if (!vport_update_params) {
1324                         __qede_unlock(edev);
1325                         return -ENOMEM;
1326                 }
1327                 qede_fill_rss_params(edev, &vport_update_params->rss_params,
1328                                      &vport_update_params->update_rss_flg);
1329                 rc = edev->ops->vport_update(edev->cdev, vport_update_params);
1330                 vfree(vport_update_params);
1331         }
1332         __qede_unlock(edev);
1333
1334         return rc;
1335 }
1336
1337 /* This function enables the interrupt generation and the NAPI on the device */
1338 static void qede_netif_start(struct qede_dev *edev)
1339 {
1340         int i;
1341
1342         if (!netif_running(edev->ndev))
1343                 return;
1344
1345         for_each_queue(i) {
1346                 /* Update and reenable interrupts */
1347                 qed_sb_ack(edev->fp_array[i].sb_info, IGU_INT_ENABLE, 1);
1348                 napi_enable(&edev->fp_array[i].napi);
1349         }
1350 }
1351
1352 /* This function disables the NAPI and the interrupt generation on the device */
1353 static void qede_netif_stop(struct qede_dev *edev)
1354 {
1355         int i;
1356
1357         for_each_queue(i) {
1358                 napi_disable(&edev->fp_array[i].napi);
1359                 /* Disable interrupts */
1360                 qed_sb_ack(edev->fp_array[i].sb_info, IGU_INT_DISABLE, 0);
1361         }
1362 }
1363
1364 static int qede_selftest_transmit_traffic(struct qede_dev *edev,
1365                                           struct sk_buff *skb)
1366 {
1367         struct qede_tx_queue *txq = NULL;
1368         struct eth_tx_1st_bd *first_bd;
1369         dma_addr_t mapping;
1370         int i, idx;
1371         u16 val;
1372
1373         for_each_queue(i) {
1374                 if (edev->fp_array[i].type & QEDE_FASTPATH_TX) {
1375                         txq = edev->fp_array[i].txq;
1376                         break;
1377                 }
1378         }
1379
1380         if (!txq) {
1381                 DP_NOTICE(edev, "Tx path is not available\n");
1382                 return -1;
1383         }
1384
1385         /* Fill the entry in the SW ring and the BDs in the FW ring */
1386         idx = txq->sw_tx_prod;
1387         txq->sw_tx_ring.skbs[idx].skb = skb;
1388         first_bd = qed_chain_produce(&txq->tx_pbl);
1389         memset(first_bd, 0, sizeof(*first_bd));
1390         val = 1 << ETH_TX_1ST_BD_FLAGS_START_BD_SHIFT;
1391         first_bd->data.bd_flags.bitfields = val;
1392         val = skb->len & ETH_TX_DATA_1ST_BD_PKT_LEN_MASK;
1393         val = val << ETH_TX_DATA_1ST_BD_PKT_LEN_SHIFT;
1394         first_bd->data.bitfields |= cpu_to_le16(val);
1395
1396         /* Map skb linear data for DMA and set in the first BD */
1397         mapping = dma_map_single(&edev->pdev->dev, skb->data,
1398                                  skb_headlen(skb), DMA_TO_DEVICE);
1399         if (unlikely(dma_mapping_error(&edev->pdev->dev, mapping))) {
1400                 DP_NOTICE(edev, "SKB mapping failed\n");
1401                 return -ENOMEM;
1402         }
1403         BD_SET_UNMAP_ADDR_LEN(first_bd, mapping, skb_headlen(skb));
1404
1405         /* update the first BD with the actual num BDs */
1406         first_bd->data.nbds = 1;
1407         txq->sw_tx_prod = (txq->sw_tx_prod + 1) % txq->num_tx_buffers;
1408         /* 'next page' entries are counted in the producer value */
1409         val = qed_chain_get_prod_idx(&txq->tx_pbl);
1410         txq->tx_db.data.bd_prod = cpu_to_le16(val);
1411
1412         /* wmb makes sure that the BDs data is updated before updating the
1413          * producer, otherwise FW may read old data from the BDs.
1414          */
1415         wmb();
1416         barrier();
1417         writel(txq->tx_db.raw, txq->doorbell_addr);
1418
1419         /* mmiowb is needed to synchronize doorbell writes from more than one
1420          * processor. It guarantees that the write arrives to the device before
1421          * the queue lock is released and another start_xmit is called (possibly
1422          * on another CPU). Without this barrier, the next doorbell can bypass
1423          * this doorbell. This is applicable to IA64/Altix systems.
1424          */
1425         mmiowb();
1426
1427         for (i = 0; i < QEDE_SELFTEST_POLL_COUNT; i++) {
1428                 if (qede_txq_has_work(txq))
1429                         break;
1430                 usleep_range(100, 200);
1431         }
1432
1433         if (!qede_txq_has_work(txq)) {
1434                 DP_NOTICE(edev, "Tx completion didn't happen\n");
1435                 return -1;
1436         }
1437
1438         first_bd = (struct eth_tx_1st_bd *)qed_chain_consume(&txq->tx_pbl);
1439         dma_unmap_single(&edev->pdev->dev, BD_UNMAP_ADDR(first_bd),
1440                          BD_UNMAP_LEN(first_bd), DMA_TO_DEVICE);
1441         txq->sw_tx_cons = (txq->sw_tx_cons + 1) % txq->num_tx_buffers;
1442         txq->sw_tx_ring.skbs[idx].skb = NULL;
1443
1444         return 0;
1445 }
1446
1447 static int qede_selftest_receive_traffic(struct qede_dev *edev)
1448 {
1449         u16 hw_comp_cons, sw_comp_cons, sw_rx_index, len;
1450         struct eth_fast_path_rx_reg_cqe *fp_cqe;
1451         struct qede_rx_queue *rxq = NULL;
1452         struct sw_rx_data *sw_rx_data;
1453         union eth_rx_cqe *cqe;
1454         int i, iter, rc = 0;
1455         u8 *data_ptr;
1456
1457         for_each_queue(i) {
1458                 if (edev->fp_array[i].type & QEDE_FASTPATH_RX) {
1459                         rxq = edev->fp_array[i].rxq;
1460                         break;
1461                 }
1462         }
1463
1464         if (!rxq) {
1465                 DP_NOTICE(edev, "Rx path is not available\n");
1466                 return -1;
1467         }
1468
1469         /* The packet is expected to receive on rx-queue 0 even though RSS is
1470          * enabled. This is because the queue 0 is configured as the default
1471          * queue and that the loopback traffic is not IP.
1472          */
1473         for (iter = 0; iter < QEDE_SELFTEST_POLL_COUNT; iter++) {
1474                 if (!qede_has_rx_work(rxq)) {
1475                         usleep_range(100, 200);
1476                         continue;
1477                 }
1478
1479                 hw_comp_cons = le16_to_cpu(*rxq->hw_cons_ptr);
1480                 sw_comp_cons = qed_chain_get_cons_idx(&rxq->rx_comp_ring);
1481
1482                 /* Memory barrier to prevent the CPU from doing speculative
1483                  * reads of CQE/BD before reading hw_comp_cons. If the CQE is
1484                  * read before it is written by FW, then FW writes CQE and SB,
1485                  * and then the CPU reads the hw_comp_cons, it will use an old
1486                  * CQE.
1487                  */
1488                 rmb();
1489
1490                 /* Get the CQE from the completion ring */
1491                 cqe = (union eth_rx_cqe *)qed_chain_consume(&rxq->rx_comp_ring);
1492
1493                 /* Get the data from the SW ring */
1494                 sw_rx_index = rxq->sw_rx_cons & NUM_RX_BDS_MAX;
1495                 sw_rx_data = &rxq->sw_rx_ring[sw_rx_index];
1496                 fp_cqe = &cqe->fast_path_regular;
1497                 len =  le16_to_cpu(fp_cqe->len_on_first_bd);
1498                 data_ptr = (u8 *)(page_address(sw_rx_data->data) +
1499                                   fp_cqe->placement_offset +
1500                                   sw_rx_data->page_offset);
1501                 if (ether_addr_equal(data_ptr,  edev->ndev->dev_addr) &&
1502                     ether_addr_equal(data_ptr + ETH_ALEN,
1503                                      edev->ndev->dev_addr)) {
1504                         for (i = ETH_HLEN; i < len; i++)
1505                                 if (data_ptr[i] != (unsigned char)(i & 0xff)) {
1506                                         rc = -1;
1507                                         break;
1508                                 }
1509
1510                         qede_recycle_rx_bd_ring(rxq, 1);
1511                         qed_chain_recycle_consumed(&rxq->rx_comp_ring);
1512                         break;
1513                 }
1514
1515                 DP_INFO(edev, "Not the transmitted packet\n");
1516                 qede_recycle_rx_bd_ring(rxq, 1);
1517                 qed_chain_recycle_consumed(&rxq->rx_comp_ring);
1518         }
1519
1520         if (iter == QEDE_SELFTEST_POLL_COUNT) {
1521                 DP_NOTICE(edev, "Failed to receive the traffic\n");
1522                 return -1;
1523         }
1524
1525         qede_update_rx_prod(edev, rxq);
1526
1527         return rc;
1528 }
1529
1530 static int qede_selftest_run_loopback(struct qede_dev *edev, u32 loopback_mode)
1531 {
1532         struct qed_link_params link_params;
1533         struct sk_buff *skb = NULL;
1534         int rc = 0, i;
1535         u32 pkt_size;
1536         u8 *packet;
1537
1538         if (!netif_running(edev->ndev)) {
1539                 DP_NOTICE(edev, "Interface is down\n");
1540                 return -EINVAL;
1541         }
1542
1543         qede_netif_stop(edev);
1544
1545         /* Bring up the link in Loopback mode */
1546         memset(&link_params, 0, sizeof(link_params));
1547         link_params.link_up = true;
1548         link_params.override_flags = QED_LINK_OVERRIDE_LOOPBACK_MODE;
1549         link_params.loopback_mode = loopback_mode;
1550         edev->ops->common->set_link(edev->cdev, &link_params);
1551
1552         /* Wait for loopback configuration to apply */
1553         msleep_interruptible(500);
1554
1555         /* prepare the loopback packet */
1556         pkt_size = edev->ndev->mtu + ETH_HLEN;
1557
1558         skb = netdev_alloc_skb(edev->ndev, pkt_size);
1559         if (!skb) {
1560                 DP_INFO(edev, "Can't allocate skb\n");
1561                 rc = -ENOMEM;
1562                 goto test_loopback_exit;
1563         }
1564         packet = skb_put(skb, pkt_size);
1565         ether_addr_copy(packet, edev->ndev->dev_addr);
1566         ether_addr_copy(packet + ETH_ALEN, edev->ndev->dev_addr);
1567         memset(packet + (2 * ETH_ALEN), 0x77, (ETH_HLEN - (2 * ETH_ALEN)));
1568         for (i = ETH_HLEN; i < pkt_size; i++)
1569                 packet[i] = (unsigned char)(i & 0xff);
1570
1571         rc = qede_selftest_transmit_traffic(edev, skb);
1572         if (rc)
1573                 goto test_loopback_exit;
1574
1575         rc = qede_selftest_receive_traffic(edev);
1576         if (rc)
1577                 goto test_loopback_exit;
1578
1579         DP_VERBOSE(edev, NETIF_MSG_RX_STATUS, "Loopback test successful\n");
1580
1581 test_loopback_exit:
1582         dev_kfree_skb(skb);
1583
1584         /* Bring up the link in Normal mode */
1585         memset(&link_params, 0, sizeof(link_params));
1586         link_params.link_up = true;
1587         link_params.override_flags = QED_LINK_OVERRIDE_LOOPBACK_MODE;
1588         link_params.loopback_mode = QED_LINK_LOOPBACK_NONE;
1589         edev->ops->common->set_link(edev->cdev, &link_params);
1590
1591         /* Wait for loopback configuration to apply */
1592         msleep_interruptible(500);
1593
1594         qede_netif_start(edev);
1595
1596         return rc;
1597 }
1598
1599 static void qede_self_test(struct net_device *dev,
1600                            struct ethtool_test *etest, u64 *buf)
1601 {
1602         struct qede_dev *edev = netdev_priv(dev);
1603
1604         DP_VERBOSE(edev, QED_MSG_DEBUG,
1605                    "Self-test command parameters: offline = %d, external_lb = %d\n",
1606                    (etest->flags & ETH_TEST_FL_OFFLINE),
1607                    (etest->flags & ETH_TEST_FL_EXTERNAL_LB) >> 2);
1608
1609         memset(buf, 0, sizeof(u64) * QEDE_ETHTOOL_TEST_MAX);
1610
1611         if (etest->flags & ETH_TEST_FL_OFFLINE) {
1612                 if (qede_selftest_run_loopback(edev,
1613                                                QED_LINK_LOOPBACK_INT_PHY)) {
1614                         buf[QEDE_ETHTOOL_INT_LOOPBACK] = 1;
1615                         etest->flags |= ETH_TEST_FL_FAILED;
1616                 }
1617         }
1618
1619         if (edev->ops->common->selftest->selftest_interrupt(edev->cdev)) {
1620                 buf[QEDE_ETHTOOL_INTERRUPT_TEST] = 1;
1621                 etest->flags |= ETH_TEST_FL_FAILED;
1622         }
1623
1624         if (edev->ops->common->selftest->selftest_memory(edev->cdev)) {
1625                 buf[QEDE_ETHTOOL_MEMORY_TEST] = 1;
1626                 etest->flags |= ETH_TEST_FL_FAILED;
1627         }
1628
1629         if (edev->ops->common->selftest->selftest_register(edev->cdev)) {
1630                 buf[QEDE_ETHTOOL_REGISTER_TEST] = 1;
1631                 etest->flags |= ETH_TEST_FL_FAILED;
1632         }
1633
1634         if (edev->ops->common->selftest->selftest_clock(edev->cdev)) {
1635                 buf[QEDE_ETHTOOL_CLOCK_TEST] = 1;
1636                 etest->flags |= ETH_TEST_FL_FAILED;
1637         }
1638
1639         if (edev->ops->common->selftest->selftest_nvram(edev->cdev)) {
1640                 buf[QEDE_ETHTOOL_NVRAM_TEST] = 1;
1641                 etest->flags |= ETH_TEST_FL_FAILED;
1642         }
1643 }
1644
1645 static int qede_set_tunable(struct net_device *dev,
1646                             const struct ethtool_tunable *tuna,
1647                             const void *data)
1648 {
1649         struct qede_dev *edev = netdev_priv(dev);
1650         u32 val;
1651
1652         switch (tuna->id) {
1653         case ETHTOOL_RX_COPYBREAK:
1654                 val = *(u32 *)data;
1655                 if (val < QEDE_MIN_PKT_LEN || val > QEDE_RX_HDR_SIZE) {
1656                         DP_VERBOSE(edev, QED_MSG_DEBUG,
1657                                    "Invalid rx copy break value, range is [%u, %u]",
1658                                    QEDE_MIN_PKT_LEN, QEDE_RX_HDR_SIZE);
1659                         return -EINVAL;
1660                 }
1661
1662                 edev->rx_copybreak = *(u32 *)data;
1663                 break;
1664         default:
1665                 return -EOPNOTSUPP;
1666         }
1667
1668         return 0;
1669 }
1670
1671 static int qede_get_tunable(struct net_device *dev,
1672                             const struct ethtool_tunable *tuna, void *data)
1673 {
1674         struct qede_dev *edev = netdev_priv(dev);
1675
1676         switch (tuna->id) {
1677         case ETHTOOL_RX_COPYBREAK:
1678                 *(u32 *)data = edev->rx_copybreak;
1679                 break;
1680         default:
1681                 return -EOPNOTSUPP;
1682         }
1683
1684         return 0;
1685 }
1686
1687 static int qede_get_eee(struct net_device *dev, struct ethtool_eee *edata)
1688 {
1689         struct qede_dev *edev = netdev_priv(dev);
1690         struct qed_link_output current_link;
1691
1692         memset(&current_link, 0, sizeof(current_link));
1693         edev->ops->common->get_link(edev->cdev, &current_link);
1694
1695         if (!current_link.eee_supported) {
1696                 DP_INFO(edev, "EEE is not supported\n");
1697                 return -EOPNOTSUPP;
1698         }
1699
1700         if (current_link.eee.adv_caps & QED_EEE_1G_ADV)
1701                 edata->advertised = ADVERTISED_1000baseT_Full;
1702         if (current_link.eee.adv_caps & QED_EEE_10G_ADV)
1703                 edata->advertised |= ADVERTISED_10000baseT_Full;
1704         if (current_link.sup_caps & QED_EEE_1G_ADV)
1705                 edata->supported = ADVERTISED_1000baseT_Full;
1706         if (current_link.sup_caps & QED_EEE_10G_ADV)
1707                 edata->supported |= ADVERTISED_10000baseT_Full;
1708         if (current_link.eee.lp_adv_caps & QED_EEE_1G_ADV)
1709                 edata->lp_advertised = ADVERTISED_1000baseT_Full;
1710         if (current_link.eee.lp_adv_caps & QED_EEE_10G_ADV)
1711                 edata->lp_advertised |= ADVERTISED_10000baseT_Full;
1712
1713         edata->tx_lpi_timer = current_link.eee.tx_lpi_timer;
1714         edata->eee_enabled = current_link.eee.enable;
1715         edata->tx_lpi_enabled = current_link.eee.tx_lpi_enable;
1716         edata->eee_active = current_link.eee_active;
1717
1718         return 0;
1719 }
1720
1721 static int qede_set_eee(struct net_device *dev, struct ethtool_eee *edata)
1722 {
1723         struct qede_dev *edev = netdev_priv(dev);
1724         struct qed_link_output current_link;
1725         struct qed_link_params params;
1726
1727         if (!edev->ops->common->can_link_change(edev->cdev)) {
1728                 DP_INFO(edev, "Link settings are not allowed to be changed\n");
1729                 return -EOPNOTSUPP;
1730         }
1731
1732         memset(&current_link, 0, sizeof(current_link));
1733         edev->ops->common->get_link(edev->cdev, &current_link);
1734
1735         if (!current_link.eee_supported) {
1736                 DP_INFO(edev, "EEE is not supported\n");
1737                 return -EOPNOTSUPP;
1738         }
1739
1740         memset(&params, 0, sizeof(params));
1741         params.override_flags |= QED_LINK_OVERRIDE_EEE_CONFIG;
1742
1743         if (!(edata->advertised & (ADVERTISED_1000baseT_Full |
1744                                    ADVERTISED_10000baseT_Full)) ||
1745             ((edata->advertised & (ADVERTISED_1000baseT_Full |
1746                                    ADVERTISED_10000baseT_Full)) !=
1747              edata->advertised)) {
1748                 DP_VERBOSE(edev, QED_MSG_DEBUG,
1749                            "Invalid advertised capabilities %d\n",
1750                            edata->advertised);
1751                 return -EINVAL;
1752         }
1753
1754         if (edata->advertised & ADVERTISED_1000baseT_Full)
1755                 params.eee.adv_caps = QED_EEE_1G_ADV;
1756         if (edata->advertised & ADVERTISED_10000baseT_Full)
1757                 params.eee.adv_caps |= QED_EEE_10G_ADV;
1758         params.eee.enable = edata->eee_enabled;
1759         params.eee.tx_lpi_enable = edata->tx_lpi_enabled;
1760         params.eee.tx_lpi_timer = edata->tx_lpi_timer;
1761
1762         params.link_up = true;
1763         edev->ops->common->set_link(edev->cdev, &params);
1764
1765         return 0;
1766 }
1767
1768 static const struct ethtool_ops qede_ethtool_ops = {
1769         .get_link_ksettings = qede_get_link_ksettings,
1770         .set_link_ksettings = qede_set_link_ksettings,
1771         .get_drvinfo = qede_get_drvinfo,
1772         .get_regs_len = qede_get_regs_len,
1773         .get_regs = qede_get_regs,
1774         .get_wol = qede_get_wol,
1775         .set_wol = qede_set_wol,
1776         .get_msglevel = qede_get_msglevel,
1777         .set_msglevel = qede_set_msglevel,
1778         .nway_reset = qede_nway_reset,
1779         .get_link = qede_get_link,
1780         .get_coalesce = qede_get_coalesce,
1781         .set_coalesce = qede_set_coalesce,
1782         .get_ringparam = qede_get_ringparam,
1783         .set_ringparam = qede_set_ringparam,
1784         .get_pauseparam = qede_get_pauseparam,
1785         .set_pauseparam = qede_set_pauseparam,
1786         .get_strings = qede_get_strings,
1787         .set_phys_id = qede_set_phys_id,
1788         .get_ethtool_stats = qede_get_ethtool_stats,
1789         .get_priv_flags = qede_get_priv_flags,
1790         .get_sset_count = qede_get_sset_count,
1791         .get_rxnfc = qede_get_rxnfc,
1792         .set_rxnfc = qede_set_rxnfc,
1793         .get_rxfh_indir_size = qede_get_rxfh_indir_size,
1794         .get_rxfh_key_size = qede_get_rxfh_key_size,
1795         .get_rxfh = qede_get_rxfh,
1796         .set_rxfh = qede_set_rxfh,
1797         .get_ts_info = qede_get_ts_info,
1798         .get_channels = qede_get_channels,
1799         .set_channels = qede_set_channels,
1800         .self_test = qede_self_test,
1801         .get_eee = qede_get_eee,
1802         .set_eee = qede_set_eee,
1803
1804         .get_tunable = qede_get_tunable,
1805         .set_tunable = qede_set_tunable,
1806 };
1807
1808 static const struct ethtool_ops qede_vf_ethtool_ops = {
1809         .get_link_ksettings = qede_get_link_ksettings,
1810         .get_drvinfo = qede_get_drvinfo,
1811         .get_msglevel = qede_get_msglevel,
1812         .set_msglevel = qede_set_msglevel,
1813         .get_link = qede_get_link,
1814         .get_coalesce = qede_get_coalesce,
1815         .set_coalesce = qede_set_coalesce,
1816         .get_ringparam = qede_get_ringparam,
1817         .set_ringparam = qede_set_ringparam,
1818         .get_strings = qede_get_strings,
1819         .get_ethtool_stats = qede_get_ethtool_stats,
1820         .get_priv_flags = qede_get_priv_flags,
1821         .get_sset_count = qede_get_sset_count,
1822         .get_rxnfc = qede_get_rxnfc,
1823         .set_rxnfc = qede_set_rxnfc,
1824         .get_rxfh_indir_size = qede_get_rxfh_indir_size,
1825         .get_rxfh_key_size = qede_get_rxfh_key_size,
1826         .get_rxfh = qede_get_rxfh,
1827         .set_rxfh = qede_set_rxfh,
1828         .get_channels = qede_get_channels,
1829         .set_channels = qede_set_channels,
1830         .get_tunable = qede_get_tunable,
1831         .set_tunable = qede_set_tunable,
1832 };
1833
1834 void qede_set_ethtool_ops(struct net_device *dev)
1835 {
1836         struct qede_dev *edev = netdev_priv(dev);
1837
1838         if (IS_VF(edev))
1839                 dev->ethtool_ops = &qede_vf_ethtool_ops;
1840         else
1841                 dev->ethtool_ops = &qede_ethtool_ops;
1842 }