1b7f6b9ccc8b8724af4e7915b90f68d688d31cac
[linux-2.6-microblaze.git] / drivers / net / ethernet / chelsio / cxgb4 / cxgb4_ethtool.c
1 /*
2  *  Copyright (C) 2013-2015 Chelsio Communications.  All rights reserved.
3  *
4  *  This program is free software; you can redistribute it and/or modify it
5  *  under the terms and conditions of the GNU General Public License,
6  *  version 2, as published by the Free Software Foundation.
7  *
8  *  This program is distributed in the hope it will be useful, but WITHOUT
9  *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10  *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
11  *  more details.
12  *
13  *  The full GNU General Public License is included in this distribution in
14  *  the file called "COPYING".
15  *
16  */
17
18 #include <linux/firmware.h>
19 #include <linux/mdio.h>
20
21 #include "cxgb4.h"
22 #include "t4_regs.h"
23 #include "t4fw_api.h"
24 #include "cxgb4_cudbg.h"
25
26 #define EEPROM_MAGIC 0x38E2F10C
27
28 static u32 get_msglevel(struct net_device *dev)
29 {
30         return netdev2adap(dev)->msg_enable;
31 }
32
33 static void set_msglevel(struct net_device *dev, u32 val)
34 {
35         netdev2adap(dev)->msg_enable = val;
36 }
37
38 static const char stats_strings[][ETH_GSTRING_LEN] = {
39         "tx_octets_ok           ",
40         "tx_frames_ok           ",
41         "tx_broadcast_frames    ",
42         "tx_multicast_frames    ",
43         "tx_unicast_frames      ",
44         "tx_error_frames        ",
45
46         "tx_frames_64           ",
47         "tx_frames_65_to_127    ",
48         "tx_frames_128_to_255   ",
49         "tx_frames_256_to_511   ",
50         "tx_frames_512_to_1023  ",
51         "tx_frames_1024_to_1518 ",
52         "tx_frames_1519_to_max  ",
53
54         "tx_frames_dropped      ",
55         "tx_pause_frames        ",
56         "tx_ppp0_frames         ",
57         "tx_ppp1_frames         ",
58         "tx_ppp2_frames         ",
59         "tx_ppp3_frames         ",
60         "tx_ppp4_frames         ",
61         "tx_ppp5_frames         ",
62         "tx_ppp6_frames         ",
63         "tx_ppp7_frames         ",
64
65         "rx_octets_ok           ",
66         "rx_frames_ok           ",
67         "rx_broadcast_frames    ",
68         "rx_multicast_frames    ",
69         "rx_unicast_frames      ",
70
71         "rx_frames_too_long     ",
72         "rx_jabber_errors       ",
73         "rx_fcs_errors          ",
74         "rx_length_errors       ",
75         "rx_symbol_errors       ",
76         "rx_runt_frames         ",
77
78         "rx_frames_64           ",
79         "rx_frames_65_to_127    ",
80         "rx_frames_128_to_255   ",
81         "rx_frames_256_to_511   ",
82         "rx_frames_512_to_1023  ",
83         "rx_frames_1024_to_1518 ",
84         "rx_frames_1519_to_max  ",
85
86         "rx_pause_frames        ",
87         "rx_ppp0_frames         ",
88         "rx_ppp1_frames         ",
89         "rx_ppp2_frames         ",
90         "rx_ppp3_frames         ",
91         "rx_ppp4_frames         ",
92         "rx_ppp5_frames         ",
93         "rx_ppp6_frames         ",
94         "rx_ppp7_frames         ",
95
96         "rx_bg0_frames_dropped  ",
97         "rx_bg1_frames_dropped  ",
98         "rx_bg2_frames_dropped  ",
99         "rx_bg3_frames_dropped  ",
100         "rx_bg0_frames_trunc    ",
101         "rx_bg1_frames_trunc    ",
102         "rx_bg2_frames_trunc    ",
103         "rx_bg3_frames_trunc    ",
104
105         "tso                    ",
106         "tx_csum_offload        ",
107         "rx_csum_good           ",
108         "vlan_extractions       ",
109         "vlan_insertions        ",
110         "gro_packets            ",
111         "gro_merged             ",
112 };
113
114 static char adapter_stats_strings[][ETH_GSTRING_LEN] = {
115         "db_drop                ",
116         "db_full                ",
117         "db_empty               ",
118         "tcp_ipv4_out_rsts      ",
119         "tcp_ipv4_in_segs       ",
120         "tcp_ipv4_out_segs      ",
121         "tcp_ipv4_retrans_segs  ",
122         "tcp_ipv6_out_rsts      ",
123         "tcp_ipv6_in_segs       ",
124         "tcp_ipv6_out_segs      ",
125         "tcp_ipv6_retrans_segs  ",
126         "usm_ddp_frames         ",
127         "usm_ddp_octets         ",
128         "usm_ddp_drops          ",
129         "rdma_no_rqe_mod_defer  ",
130         "rdma_no_rqe_pkt_defer  ",
131         "tp_err_ofld_no_neigh   ",
132         "tp_err_ofld_cong_defer ",
133         "write_coal_success     ",
134         "write_coal_fail        ",
135 };
136
137 static char channel_stats_strings[][ETH_GSTRING_LEN] = {
138         "--------Channel--------- ",
139         "tp_cpl_requests        ",
140         "tp_cpl_responses       ",
141         "tp_mac_in_errs         ",
142         "tp_hdr_in_errs         ",
143         "tp_tcp_in_errs         ",
144         "tp_tcp6_in_errs        ",
145         "tp_tnl_cong_drops      ",
146         "tp_tnl_tx_drops        ",
147         "tp_ofld_vlan_drops     ",
148         "tp_ofld_chan_drops     ",
149         "fcoe_octets_ddp        ",
150         "fcoe_frames_ddp        ",
151         "fcoe_frames_drop       ",
152 };
153
154 static char loopback_stats_strings[][ETH_GSTRING_LEN] = {
155         "-------Loopback----------- ",
156         "octets_ok              ",
157         "frames_ok              ",
158         "bcast_frames           ",
159         "mcast_frames           ",
160         "ucast_frames           ",
161         "error_frames           ",
162         "frames_64              ",
163         "frames_65_to_127       ",
164         "frames_128_to_255      ",
165         "frames_256_to_511      ",
166         "frames_512_to_1023     ",
167         "frames_1024_to_1518    ",
168         "frames_1519_to_max     ",
169         "frames_dropped         ",
170         "bg0_frames_dropped     ",
171         "bg1_frames_dropped     ",
172         "bg2_frames_dropped     ",
173         "bg3_frames_dropped     ",
174         "bg0_frames_trunc       ",
175         "bg1_frames_trunc       ",
176         "bg2_frames_trunc       ",
177         "bg3_frames_trunc       ",
178 };
179
180 static int get_sset_count(struct net_device *dev, int sset)
181 {
182         switch (sset) {
183         case ETH_SS_STATS:
184                 return ARRAY_SIZE(stats_strings) +
185                        ARRAY_SIZE(adapter_stats_strings) +
186                        ARRAY_SIZE(channel_stats_strings) +
187                        ARRAY_SIZE(loopback_stats_strings);
188         default:
189                 return -EOPNOTSUPP;
190         }
191 }
192
193 static int get_regs_len(struct net_device *dev)
194 {
195         struct adapter *adap = netdev2adap(dev);
196
197         return t4_get_regs_len(adap);
198 }
199
200 static int get_eeprom_len(struct net_device *dev)
201 {
202         return EEPROMSIZE;
203 }
204
205 static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
206 {
207         struct adapter *adapter = netdev2adap(dev);
208         u32 exprom_vers;
209
210         strlcpy(info->driver, cxgb4_driver_name, sizeof(info->driver));
211         strlcpy(info->version, cxgb4_driver_version,
212                 sizeof(info->version));
213         strlcpy(info->bus_info, pci_name(adapter->pdev),
214                 sizeof(info->bus_info));
215         info->regdump_len = get_regs_len(dev);
216
217         if (!adapter->params.fw_vers)
218                 strcpy(info->fw_version, "N/A");
219         else
220                 snprintf(info->fw_version, sizeof(info->fw_version),
221                          "%u.%u.%u.%u, TP %u.%u.%u.%u",
222                          FW_HDR_FW_VER_MAJOR_G(adapter->params.fw_vers),
223                          FW_HDR_FW_VER_MINOR_G(adapter->params.fw_vers),
224                          FW_HDR_FW_VER_MICRO_G(adapter->params.fw_vers),
225                          FW_HDR_FW_VER_BUILD_G(adapter->params.fw_vers),
226                          FW_HDR_FW_VER_MAJOR_G(adapter->params.tp_vers),
227                          FW_HDR_FW_VER_MINOR_G(adapter->params.tp_vers),
228                          FW_HDR_FW_VER_MICRO_G(adapter->params.tp_vers),
229                          FW_HDR_FW_VER_BUILD_G(adapter->params.tp_vers));
230
231         if (!t4_get_exprom_version(adapter, &exprom_vers))
232                 snprintf(info->erom_version, sizeof(info->erom_version),
233                          "%u.%u.%u.%u",
234                          FW_HDR_FW_VER_MAJOR_G(exprom_vers),
235                          FW_HDR_FW_VER_MINOR_G(exprom_vers),
236                          FW_HDR_FW_VER_MICRO_G(exprom_vers),
237                          FW_HDR_FW_VER_BUILD_G(exprom_vers));
238 }
239
240 static void get_strings(struct net_device *dev, u32 stringset, u8 *data)
241 {
242         if (stringset == ETH_SS_STATS) {
243                 memcpy(data, stats_strings, sizeof(stats_strings));
244                 data += sizeof(stats_strings);
245                 memcpy(data, adapter_stats_strings,
246                        sizeof(adapter_stats_strings));
247                 data += sizeof(adapter_stats_strings);
248                 memcpy(data, channel_stats_strings,
249                        sizeof(channel_stats_strings));
250                 data += sizeof(channel_stats_strings);
251                 memcpy(data, loopback_stats_strings,
252                        sizeof(loopback_stats_strings));
253         }
254 }
255
256 /* port stats maintained per queue of the port. They should be in the same
257  * order as in stats_strings above.
258  */
259 struct queue_port_stats {
260         u64 tso;
261         u64 tx_csum;
262         u64 rx_csum;
263         u64 vlan_ex;
264         u64 vlan_ins;
265         u64 gro_pkts;
266         u64 gro_merged;
267 };
268
269 struct adapter_stats {
270         u64 db_drop;
271         u64 db_full;
272         u64 db_empty;
273         u64 tcp_v4_out_rsts;
274         u64 tcp_v4_in_segs;
275         u64 tcp_v4_out_segs;
276         u64 tcp_v4_retrans_segs;
277         u64 tcp_v6_out_rsts;
278         u64 tcp_v6_in_segs;
279         u64 tcp_v6_out_segs;
280         u64 tcp_v6_retrans_segs;
281         u64 frames;
282         u64 octets;
283         u64 drops;
284         u64 rqe_dfr_mod;
285         u64 rqe_dfr_pkt;
286         u64 ofld_no_neigh;
287         u64 ofld_cong_defer;
288         u64 wc_success;
289         u64 wc_fail;
290 };
291
292 struct channel_stats {
293         u64 cpl_req;
294         u64 cpl_rsp;
295         u64 mac_in_errs;
296         u64 hdr_in_errs;
297         u64 tcp_in_errs;
298         u64 tcp6_in_errs;
299         u64 tnl_cong_drops;
300         u64 tnl_tx_drops;
301         u64 ofld_vlan_drops;
302         u64 ofld_chan_drops;
303         u64 octets_ddp;
304         u64 frames_ddp;
305         u64 frames_drop;
306 };
307
308 static void collect_sge_port_stats(const struct adapter *adap,
309                                    const struct port_info *p,
310                                    struct queue_port_stats *s)
311 {
312         int i;
313         const struct sge_eth_txq *tx = &adap->sge.ethtxq[p->first_qset];
314         const struct sge_eth_rxq *rx = &adap->sge.ethrxq[p->first_qset];
315
316         memset(s, 0, sizeof(*s));
317         for (i = 0; i < p->nqsets; i++, rx++, tx++) {
318                 s->tso += tx->tso;
319                 s->tx_csum += tx->tx_cso;
320                 s->rx_csum += rx->stats.rx_cso;
321                 s->vlan_ex += rx->stats.vlan_ex;
322                 s->vlan_ins += tx->vlan_ins;
323                 s->gro_pkts += rx->stats.lro_pkts;
324                 s->gro_merged += rx->stats.lro_merged;
325         }
326 }
327
328 static void collect_adapter_stats(struct adapter *adap, struct adapter_stats *s)
329 {
330         struct tp_tcp_stats v4, v6;
331         struct tp_rdma_stats rdma_stats;
332         struct tp_err_stats err_stats;
333         struct tp_usm_stats usm_stats;
334         u64 val1, val2;
335
336         memset(s, 0, sizeof(*s));
337
338         spin_lock(&adap->stats_lock);
339         t4_tp_get_tcp_stats(adap, &v4, &v6, false);
340         t4_tp_get_rdma_stats(adap, &rdma_stats, false);
341         t4_get_usm_stats(adap, &usm_stats, false);
342         t4_tp_get_err_stats(adap, &err_stats, false);
343         spin_unlock(&adap->stats_lock);
344
345         s->db_drop = adap->db_stats.db_drop;
346         s->db_full = adap->db_stats.db_full;
347         s->db_empty = adap->db_stats.db_empty;
348
349         s->tcp_v4_out_rsts = v4.tcp_out_rsts;
350         s->tcp_v4_in_segs = v4.tcp_in_segs;
351         s->tcp_v4_out_segs = v4.tcp_out_segs;
352         s->tcp_v4_retrans_segs = v4.tcp_retrans_segs;
353         s->tcp_v6_out_rsts = v6.tcp_out_rsts;
354         s->tcp_v6_in_segs = v6.tcp_in_segs;
355         s->tcp_v6_out_segs = v6.tcp_out_segs;
356         s->tcp_v6_retrans_segs = v6.tcp_retrans_segs;
357
358         if (is_offload(adap)) {
359                 s->frames = usm_stats.frames;
360                 s->octets = usm_stats.octets;
361                 s->drops = usm_stats.drops;
362                 s->rqe_dfr_mod = rdma_stats.rqe_dfr_mod;
363                 s->rqe_dfr_pkt = rdma_stats.rqe_dfr_pkt;
364         }
365
366         s->ofld_no_neigh = err_stats.ofld_no_neigh;
367         s->ofld_cong_defer = err_stats.ofld_cong_defer;
368
369         if (!is_t4(adap->params.chip)) {
370                 int v;
371
372                 v = t4_read_reg(adap, SGE_STAT_CFG_A);
373                 if (STATSOURCE_T5_G(v) == 7) {
374                         val2 = t4_read_reg(adap, SGE_STAT_MATCH_A);
375                         val1 = t4_read_reg(adap, SGE_STAT_TOTAL_A);
376                         s->wc_success = val1 - val2;
377                         s->wc_fail = val2;
378                 }
379         }
380 }
381
382 static void collect_channel_stats(struct adapter *adap, struct channel_stats *s,
383                                   u8 i)
384 {
385         struct tp_cpl_stats cpl_stats;
386         struct tp_err_stats err_stats;
387         struct tp_fcoe_stats fcoe_stats;
388
389         memset(s, 0, sizeof(*s));
390
391         spin_lock(&adap->stats_lock);
392         t4_tp_get_cpl_stats(adap, &cpl_stats, false);
393         t4_tp_get_err_stats(adap, &err_stats, false);
394         t4_get_fcoe_stats(adap, i, &fcoe_stats, false);
395         spin_unlock(&adap->stats_lock);
396
397         s->cpl_req = cpl_stats.req[i];
398         s->cpl_rsp = cpl_stats.rsp[i];
399         s->mac_in_errs = err_stats.mac_in_errs[i];
400         s->hdr_in_errs = err_stats.hdr_in_errs[i];
401         s->tcp_in_errs = err_stats.tcp_in_errs[i];
402         s->tcp6_in_errs = err_stats.tcp6_in_errs[i];
403         s->tnl_cong_drops = err_stats.tnl_cong_drops[i];
404         s->tnl_tx_drops = err_stats.tnl_tx_drops[i];
405         s->ofld_vlan_drops = err_stats.ofld_vlan_drops[i];
406         s->ofld_chan_drops = err_stats.ofld_chan_drops[i];
407         s->octets_ddp = fcoe_stats.octets_ddp;
408         s->frames_ddp = fcoe_stats.frames_ddp;
409         s->frames_drop = fcoe_stats.frames_drop;
410 }
411
412 static void get_stats(struct net_device *dev, struct ethtool_stats *stats,
413                       u64 *data)
414 {
415         struct port_info *pi = netdev_priv(dev);
416         struct adapter *adapter = pi->adapter;
417         struct lb_port_stats s;
418         int i;
419         u64 *p0;
420
421         t4_get_port_stats_offset(adapter, pi->tx_chan,
422                                  (struct port_stats *)data,
423                                  &pi->stats_base);
424
425         data += sizeof(struct port_stats) / sizeof(u64);
426         collect_sge_port_stats(adapter, pi, (struct queue_port_stats *)data);
427         data += sizeof(struct queue_port_stats) / sizeof(u64);
428         collect_adapter_stats(adapter, (struct adapter_stats *)data);
429         data += sizeof(struct adapter_stats) / sizeof(u64);
430
431         *data++ = (u64)pi->port_id;
432         collect_channel_stats(adapter, (struct channel_stats *)data,
433                               pi->port_id);
434         data += sizeof(struct channel_stats) / sizeof(u64);
435
436         *data++ = (u64)pi->port_id;
437         memset(&s, 0, sizeof(s));
438         t4_get_lb_stats(adapter, pi->port_id, &s);
439
440         p0 = &s.octets;
441         for (i = 0; i < ARRAY_SIZE(loopback_stats_strings) - 1; i++)
442                 *data++ = (unsigned long long)*p0++;
443 }
444
445 static void get_regs(struct net_device *dev, struct ethtool_regs *regs,
446                      void *buf)
447 {
448         struct adapter *adap = netdev2adap(dev);
449         size_t buf_size;
450
451         buf_size = t4_get_regs_len(adap);
452         regs->version = mk_adap_vers(adap);
453         t4_get_regs(adap, buf, buf_size);
454 }
455
456 static int restart_autoneg(struct net_device *dev)
457 {
458         struct port_info *p = netdev_priv(dev);
459
460         if (!netif_running(dev))
461                 return -EAGAIN;
462         if (p->link_cfg.autoneg != AUTONEG_ENABLE)
463                 return -EINVAL;
464         t4_restart_aneg(p->adapter, p->adapter->pf, p->tx_chan);
465         return 0;
466 }
467
468 static int identify_port(struct net_device *dev,
469                          enum ethtool_phys_id_state state)
470 {
471         unsigned int val;
472         struct adapter *adap = netdev2adap(dev);
473
474         if (state == ETHTOOL_ID_ACTIVE)
475                 val = 0xffff;
476         else if (state == ETHTOOL_ID_INACTIVE)
477                 val = 0;
478         else
479                 return -EINVAL;
480
481         return t4_identify_port(adap, adap->pf, netdev2pinfo(dev)->viid, val);
482 }
483
484 /**
485  *      from_fw_port_mod_type - translate Firmware Port/Module type to Ethtool
486  *      @port_type: Firmware Port Type
487  *      @mod_type: Firmware Module Type
488  *
489  *      Translate Firmware Port/Module type to Ethtool Port Type.
490  */
491 static int from_fw_port_mod_type(enum fw_port_type port_type,
492                                  enum fw_port_module_type mod_type)
493 {
494         if (port_type == FW_PORT_TYPE_BT_SGMII ||
495             port_type == FW_PORT_TYPE_BT_XFI ||
496             port_type == FW_PORT_TYPE_BT_XAUI) {
497                 return PORT_TP;
498         } else if (port_type == FW_PORT_TYPE_FIBER_XFI ||
499                    port_type == FW_PORT_TYPE_FIBER_XAUI) {
500                 return PORT_FIBRE;
501         } else if (port_type == FW_PORT_TYPE_SFP ||
502                    port_type == FW_PORT_TYPE_QSFP_10G ||
503                    port_type == FW_PORT_TYPE_QSA ||
504                    port_type == FW_PORT_TYPE_QSFP ||
505                    port_type == FW_PORT_TYPE_CR4_QSFP ||
506                    port_type == FW_PORT_TYPE_CR_QSFP ||
507                    port_type == FW_PORT_TYPE_CR2_QSFP ||
508                    port_type == FW_PORT_TYPE_SFP28) {
509                 if (mod_type == FW_PORT_MOD_TYPE_LR ||
510                     mod_type == FW_PORT_MOD_TYPE_SR ||
511                     mod_type == FW_PORT_MOD_TYPE_ER ||
512                     mod_type == FW_PORT_MOD_TYPE_LRM)
513                         return PORT_FIBRE;
514                 else if (mod_type == FW_PORT_MOD_TYPE_TWINAX_PASSIVE ||
515                          mod_type == FW_PORT_MOD_TYPE_TWINAX_ACTIVE)
516                         return PORT_DA;
517                 else
518                         return PORT_OTHER;
519         } else if (port_type == FW_PORT_TYPE_KR4_100G ||
520                    port_type == FW_PORT_TYPE_KR_SFP28) {
521                 return PORT_NONE;
522         }
523
524         return PORT_OTHER;
525 }
526
527 /**
528  *      speed_to_fw_caps - translate Port Speed to Firmware Port Capabilities
529  *      @speed: speed in Kb/s
530  *
531  *      Translates a specific Port Speed into a Firmware Port Capabilities
532  *      value.
533  */
534 static unsigned int speed_to_fw_caps(int speed)
535 {
536         if (speed == 100)
537                 return FW_PORT_CAP32_SPEED_100M;
538         if (speed == 1000)
539                 return FW_PORT_CAP32_SPEED_1G;
540         if (speed == 10000)
541                 return FW_PORT_CAP32_SPEED_10G;
542         if (speed == 25000)
543                 return FW_PORT_CAP32_SPEED_25G;
544         if (speed == 40000)
545                 return FW_PORT_CAP32_SPEED_40G;
546         if (speed == 50000)
547                 return FW_PORT_CAP32_SPEED_50G;
548         if (speed == 100000)
549                 return FW_PORT_CAP32_SPEED_100G;
550         if (speed == 200000)
551                 return FW_PORT_CAP32_SPEED_200G;
552         if (speed == 400000)
553                 return FW_PORT_CAP32_SPEED_400G;
554         return 0;
555 }
556
557 /**
558  *      fw_caps_to_lmm - translate Firmware to ethtool Link Mode Mask
559  *      @port_type: Firmware Port Type
560  *      @fw_caps: Firmware Port Capabilities
561  *      @link_mode_mask: ethtool Link Mode Mask
562  *
563  *      Translate a Firmware Port Capabilities specification to an ethtool
564  *      Link Mode Mask.
565  */
566 static void fw_caps_to_lmm(enum fw_port_type port_type,
567                            unsigned int fw_caps,
568                            unsigned long *link_mode_mask)
569 {
570         #define SET_LMM(__lmm_name) \
571                 __set_bit(ETHTOOL_LINK_MODE_ ## __lmm_name ## _BIT, \
572                           link_mode_mask)
573
574         #define FW_CAPS_TO_LMM(__fw_name, __lmm_name) \
575                 do { \
576                         if (fw_caps & FW_PORT_CAP32_ ## __fw_name) \
577                                 SET_LMM(__lmm_name); \
578                 } while (0)
579
580         switch (port_type) {
581         case FW_PORT_TYPE_BT_SGMII:
582         case FW_PORT_TYPE_BT_XFI:
583         case FW_PORT_TYPE_BT_XAUI:
584                 SET_LMM(TP);
585                 FW_CAPS_TO_LMM(SPEED_100M, 100baseT_Full);
586                 FW_CAPS_TO_LMM(SPEED_1G, 1000baseT_Full);
587                 FW_CAPS_TO_LMM(SPEED_10G, 10000baseT_Full);
588                 break;
589
590         case FW_PORT_TYPE_KX4:
591         case FW_PORT_TYPE_KX:
592                 SET_LMM(Backplane);
593                 FW_CAPS_TO_LMM(SPEED_1G, 1000baseKX_Full);
594                 FW_CAPS_TO_LMM(SPEED_10G, 10000baseKX4_Full);
595                 break;
596
597         case FW_PORT_TYPE_KR:
598                 SET_LMM(Backplane);
599                 SET_LMM(10000baseKR_Full);
600                 break;
601
602         case FW_PORT_TYPE_BP_AP:
603                 SET_LMM(Backplane);
604                 SET_LMM(10000baseR_FEC);
605                 SET_LMM(10000baseKR_Full);
606                 SET_LMM(1000baseKX_Full);
607                 break;
608
609         case FW_PORT_TYPE_BP4_AP:
610                 SET_LMM(Backplane);
611                 SET_LMM(10000baseR_FEC);
612                 SET_LMM(10000baseKR_Full);
613                 SET_LMM(1000baseKX_Full);
614                 SET_LMM(10000baseKX4_Full);
615                 break;
616
617         case FW_PORT_TYPE_FIBER_XFI:
618         case FW_PORT_TYPE_FIBER_XAUI:
619         case FW_PORT_TYPE_SFP:
620         case FW_PORT_TYPE_QSFP_10G:
621         case FW_PORT_TYPE_QSA:
622                 SET_LMM(FIBRE);
623                 FW_CAPS_TO_LMM(SPEED_1G, 1000baseT_Full);
624                 FW_CAPS_TO_LMM(SPEED_10G, 10000baseT_Full);
625                 break;
626
627         case FW_PORT_TYPE_BP40_BA:
628         case FW_PORT_TYPE_QSFP:
629                 SET_LMM(FIBRE);
630                 SET_LMM(40000baseSR4_Full);
631                 break;
632
633         case FW_PORT_TYPE_CR_QSFP:
634         case FW_PORT_TYPE_SFP28:
635                 SET_LMM(FIBRE);
636                 FW_CAPS_TO_LMM(SPEED_1G, 1000baseT_Full);
637                 FW_CAPS_TO_LMM(SPEED_10G, 10000baseT_Full);
638                 FW_CAPS_TO_LMM(SPEED_25G, 25000baseCR_Full);
639                 break;
640
641         case FW_PORT_TYPE_KR_SFP28:
642                 SET_LMM(Backplane);
643                 FW_CAPS_TO_LMM(SPEED_1G, 1000baseT_Full);
644                 FW_CAPS_TO_LMM(SPEED_10G, 10000baseKR_Full);
645                 FW_CAPS_TO_LMM(SPEED_25G, 25000baseKR_Full);
646                 break;
647
648         case FW_PORT_TYPE_CR2_QSFP:
649                 SET_LMM(FIBRE);
650                 SET_LMM(50000baseSR2_Full);
651                 break;
652
653         case FW_PORT_TYPE_KR4_100G:
654         case FW_PORT_TYPE_CR4_QSFP:
655                 SET_LMM(FIBRE);
656                 FW_CAPS_TO_LMM(SPEED_40G, 40000baseSR4_Full);
657                 FW_CAPS_TO_LMM(SPEED_25G, 25000baseCR_Full);
658                 FW_CAPS_TO_LMM(SPEED_50G, 50000baseCR2_Full);
659                 FW_CAPS_TO_LMM(SPEED_100G, 100000baseCR4_Full);
660                 break;
661
662         default:
663                 break;
664         }
665
666         FW_CAPS_TO_LMM(ANEG, Autoneg);
667         FW_CAPS_TO_LMM(802_3_PAUSE, Pause);
668         FW_CAPS_TO_LMM(802_3_ASM_DIR, Asym_Pause);
669
670         #undef FW_CAPS_TO_LMM
671         #undef SET_LMM
672 }
673
674 /**
675  *      lmm_to_fw_caps - translate ethtool Link Mode Mask to Firmware
676  *      capabilities
677  *      @et_lmm: ethtool Link Mode Mask
678  *
679  *      Translate ethtool Link Mode Mask into a Firmware Port capabilities
680  *      value.
681  */
682 static unsigned int lmm_to_fw_caps(const unsigned long *link_mode_mask)
683 {
684         unsigned int fw_caps = 0;
685
686         #define LMM_TO_FW_CAPS(__lmm_name, __fw_name) \
687                 do { \
688                         if (test_bit(ETHTOOL_LINK_MODE_ ## __lmm_name ## _BIT, \
689                                      link_mode_mask)) \
690                                 fw_caps |= FW_PORT_CAP32_ ## __fw_name; \
691                 } while (0)
692
693         LMM_TO_FW_CAPS(100baseT_Full, SPEED_100M);
694         LMM_TO_FW_CAPS(1000baseT_Full, SPEED_1G);
695         LMM_TO_FW_CAPS(10000baseT_Full, SPEED_10G);
696         LMM_TO_FW_CAPS(40000baseSR4_Full, SPEED_40G);
697         LMM_TO_FW_CAPS(25000baseCR_Full, SPEED_25G);
698         LMM_TO_FW_CAPS(50000baseCR2_Full, SPEED_50G);
699         LMM_TO_FW_CAPS(100000baseCR4_Full, SPEED_100G);
700
701         #undef LMM_TO_FW_CAPS
702
703         return fw_caps;
704 }
705
706 static int get_link_ksettings(struct net_device *dev,
707                               struct ethtool_link_ksettings *link_ksettings)
708 {
709         struct port_info *pi = netdev_priv(dev);
710         struct ethtool_link_settings *base = &link_ksettings->base;
711
712         /* For the nonce, the Firmware doesn't send up Port State changes
713          * when the Virtual Interface attached to the Port is down.  So
714          * if it's down, let's grab any changes.
715          */
716         if (!netif_running(dev))
717                 (void)t4_update_port_info(pi);
718
719         ethtool_link_ksettings_zero_link_mode(link_ksettings, supported);
720         ethtool_link_ksettings_zero_link_mode(link_ksettings, advertising);
721         ethtool_link_ksettings_zero_link_mode(link_ksettings, lp_advertising);
722
723         base->port = from_fw_port_mod_type(pi->port_type, pi->mod_type);
724
725         if (pi->mdio_addr >= 0) {
726                 base->phy_address = pi->mdio_addr;
727                 base->mdio_support = (pi->port_type == FW_PORT_TYPE_BT_SGMII
728                                       ? ETH_MDIO_SUPPORTS_C22
729                                       : ETH_MDIO_SUPPORTS_C45);
730         } else {
731                 base->phy_address = 255;
732                 base->mdio_support = 0;
733         }
734
735         fw_caps_to_lmm(pi->port_type, pi->link_cfg.pcaps,
736                        link_ksettings->link_modes.supported);
737         fw_caps_to_lmm(pi->port_type, pi->link_cfg.acaps,
738                        link_ksettings->link_modes.advertising);
739         fw_caps_to_lmm(pi->port_type, pi->link_cfg.lpacaps,
740                        link_ksettings->link_modes.lp_advertising);
741
742         if (netif_carrier_ok(dev)) {
743                 base->speed = pi->link_cfg.speed;
744                 base->duplex = DUPLEX_FULL;
745         } else {
746                 base->speed = SPEED_UNKNOWN;
747                 base->duplex = DUPLEX_UNKNOWN;
748         }
749
750         if (pi->link_cfg.fc & PAUSE_RX) {
751                 if (pi->link_cfg.fc & PAUSE_TX) {
752                         ethtool_link_ksettings_add_link_mode(link_ksettings,
753                                                              advertising,
754                                                              Pause);
755                 } else {
756                         ethtool_link_ksettings_add_link_mode(link_ksettings,
757                                                              advertising,
758                                                              Asym_Pause);
759                 }
760         } else if (pi->link_cfg.fc & PAUSE_TX) {
761                 ethtool_link_ksettings_add_link_mode(link_ksettings,
762                                                      advertising,
763                                                      Asym_Pause);
764         }
765
766         base->autoneg = pi->link_cfg.autoneg;
767         if (pi->link_cfg.pcaps & FW_PORT_CAP32_ANEG)
768                 ethtool_link_ksettings_add_link_mode(link_ksettings,
769                                                      supported, Autoneg);
770         if (pi->link_cfg.autoneg)
771                 ethtool_link_ksettings_add_link_mode(link_ksettings,
772                                                      advertising, Autoneg);
773
774         return 0;
775 }
776
777 static int set_link_ksettings(struct net_device *dev,
778                             const struct ethtool_link_ksettings *link_ksettings)
779 {
780         struct port_info *pi = netdev_priv(dev);
781         struct link_config *lc = &pi->link_cfg;
782         const struct ethtool_link_settings *base = &link_ksettings->base;
783         struct link_config old_lc;
784         unsigned int fw_caps;
785         int ret = 0;
786
787         /* only full-duplex supported */
788         if (base->duplex != DUPLEX_FULL)
789                 return -EINVAL;
790
791         if (!(lc->pcaps & FW_PORT_CAP32_ANEG)) {
792                 /* PHY offers a single speed.  See if that's what's
793                  * being requested.
794                  */
795                 if (base->autoneg == AUTONEG_DISABLE &&
796                     (lc->pcaps & speed_to_fw_caps(base->speed)))
797                         return 0;
798                 return -EINVAL;
799         }
800
801         old_lc = *lc;
802         if (base->autoneg == AUTONEG_DISABLE) {
803                 fw_caps = speed_to_fw_caps(base->speed);
804
805                 if (!(lc->pcaps & fw_caps))
806                         return -EINVAL;
807                 lc->speed_caps = fw_caps;
808                 lc->acaps = 0;
809         } else {
810                 fw_caps =
811                          lmm_to_fw_caps(link_ksettings->link_modes.advertising);
812                 if (!(lc->pcaps & fw_caps))
813                         return -EINVAL;
814                 lc->speed_caps = 0;
815                 lc->acaps = fw_caps | FW_PORT_CAP32_ANEG;
816         }
817         lc->autoneg = base->autoneg;
818
819         /* If the firmware rejects the Link Configuration request, back out
820          * the changes and report the error.
821          */
822         ret = t4_link_l1cfg(pi->adapter, pi->adapter->mbox, pi->tx_chan, lc);
823         if (ret)
824                 *lc = old_lc;
825
826         return ret;
827 }
828
829 /* Translate the Firmware FEC value into the ethtool value. */
830 static inline unsigned int fwcap_to_eth_fec(unsigned int fw_fec)
831 {
832         unsigned int eth_fec = 0;
833
834         if (fw_fec & FW_PORT_CAP32_FEC_RS)
835                 eth_fec |= ETHTOOL_FEC_RS;
836         if (fw_fec & FW_PORT_CAP32_FEC_BASER_RS)
837                 eth_fec |= ETHTOOL_FEC_BASER;
838
839         /* if nothing is set, then FEC is off */
840         if (!eth_fec)
841                 eth_fec = ETHTOOL_FEC_OFF;
842
843         return eth_fec;
844 }
845
846 /* Translate Common Code FEC value into ethtool value. */
847 static inline unsigned int cc_to_eth_fec(unsigned int cc_fec)
848 {
849         unsigned int eth_fec = 0;
850
851         if (cc_fec & FEC_AUTO)
852                 eth_fec |= ETHTOOL_FEC_AUTO;
853         if (cc_fec & FEC_RS)
854                 eth_fec |= ETHTOOL_FEC_RS;
855         if (cc_fec & FEC_BASER_RS)
856                 eth_fec |= ETHTOOL_FEC_BASER;
857
858         /* if nothing is set, then FEC is off */
859         if (!eth_fec)
860                 eth_fec = ETHTOOL_FEC_OFF;
861
862         return eth_fec;
863 }
864
865 /* Translate ethtool FEC value into Common Code value. */
866 static inline unsigned int eth_to_cc_fec(unsigned int eth_fec)
867 {
868         unsigned int cc_fec = 0;
869
870         if (eth_fec & ETHTOOL_FEC_OFF)
871                 return cc_fec;
872
873         if (eth_fec & ETHTOOL_FEC_AUTO)
874                 cc_fec |= FEC_AUTO;
875         if (eth_fec & ETHTOOL_FEC_RS)
876                 cc_fec |= FEC_RS;
877         if (eth_fec & ETHTOOL_FEC_BASER)
878                 cc_fec |= FEC_BASER_RS;
879
880         return cc_fec;
881 }
882
883 static int get_fecparam(struct net_device *dev, struct ethtool_fecparam *fec)
884 {
885         const struct port_info *pi = netdev_priv(dev);
886         const struct link_config *lc = &pi->link_cfg;
887
888         /* Translate the Firmware FEC Support into the ethtool value.  We
889          * always support IEEE 802.3 "automatic" selection of Link FEC type if
890          * any FEC is supported.
891          */
892         fec->fec = fwcap_to_eth_fec(lc->pcaps);
893         if (fec->fec != ETHTOOL_FEC_OFF)
894                 fec->fec |= ETHTOOL_FEC_AUTO;
895
896         /* Translate the current internal FEC parameters into the
897          * ethtool values.
898          */
899         fec->active_fec = cc_to_eth_fec(lc->fec);
900
901         return 0;
902 }
903
904 static int set_fecparam(struct net_device *dev, struct ethtool_fecparam *fec)
905 {
906         struct port_info *pi = netdev_priv(dev);
907         struct link_config *lc = &pi->link_cfg;
908         struct link_config old_lc;
909         int ret;
910
911         /* Save old Link Configuration in case the L1 Configure below
912          * fails.
913          */
914         old_lc = *lc;
915
916         /* Try to perform the L1 Configure and return the result of that
917          * effort.  If it fails, revert the attempted change.
918          */
919         lc->requested_fec = eth_to_cc_fec(fec->fec);
920         ret = t4_link_l1cfg(pi->adapter, pi->adapter->mbox,
921                             pi->tx_chan, lc);
922         if (ret)
923                 *lc = old_lc;
924         return ret;
925 }
926
927 static void get_pauseparam(struct net_device *dev,
928                            struct ethtool_pauseparam *epause)
929 {
930         struct port_info *p = netdev_priv(dev);
931
932         epause->autoneg = (p->link_cfg.requested_fc & PAUSE_AUTONEG) != 0;
933         epause->rx_pause = (p->link_cfg.fc & PAUSE_RX) != 0;
934         epause->tx_pause = (p->link_cfg.fc & PAUSE_TX) != 0;
935 }
936
937 static int set_pauseparam(struct net_device *dev,
938                           struct ethtool_pauseparam *epause)
939 {
940         struct port_info *p = netdev_priv(dev);
941         struct link_config *lc = &p->link_cfg;
942
943         if (epause->autoneg == AUTONEG_DISABLE)
944                 lc->requested_fc = 0;
945         else if (lc->pcaps & FW_PORT_CAP32_ANEG)
946                 lc->requested_fc = PAUSE_AUTONEG;
947         else
948                 return -EINVAL;
949
950         if (epause->rx_pause)
951                 lc->requested_fc |= PAUSE_RX;
952         if (epause->tx_pause)
953                 lc->requested_fc |= PAUSE_TX;
954         if (netif_running(dev))
955                 return t4_link_l1cfg(p->adapter, p->adapter->mbox, p->tx_chan,
956                                      lc);
957         return 0;
958 }
959
960 static void get_sge_param(struct net_device *dev, struct ethtool_ringparam *e)
961 {
962         const struct port_info *pi = netdev_priv(dev);
963         const struct sge *s = &pi->adapter->sge;
964
965         e->rx_max_pending = MAX_RX_BUFFERS;
966         e->rx_mini_max_pending = MAX_RSPQ_ENTRIES;
967         e->rx_jumbo_max_pending = 0;
968         e->tx_max_pending = MAX_TXQ_ENTRIES;
969
970         e->rx_pending = s->ethrxq[pi->first_qset].fl.size - 8;
971         e->rx_mini_pending = s->ethrxq[pi->first_qset].rspq.size;
972         e->rx_jumbo_pending = 0;
973         e->tx_pending = s->ethtxq[pi->first_qset].q.size;
974 }
975
976 static int set_sge_param(struct net_device *dev, struct ethtool_ringparam *e)
977 {
978         int i;
979         const struct port_info *pi = netdev_priv(dev);
980         struct adapter *adapter = pi->adapter;
981         struct sge *s = &adapter->sge;
982
983         if (e->rx_pending > MAX_RX_BUFFERS || e->rx_jumbo_pending ||
984             e->tx_pending > MAX_TXQ_ENTRIES ||
985             e->rx_mini_pending > MAX_RSPQ_ENTRIES ||
986             e->rx_mini_pending < MIN_RSPQ_ENTRIES ||
987             e->rx_pending < MIN_FL_ENTRIES || e->tx_pending < MIN_TXQ_ENTRIES)
988                 return -EINVAL;
989
990         if (adapter->flags & FULL_INIT_DONE)
991                 return -EBUSY;
992
993         for (i = 0; i < pi->nqsets; ++i) {
994                 s->ethtxq[pi->first_qset + i].q.size = e->tx_pending;
995                 s->ethrxq[pi->first_qset + i].fl.size = e->rx_pending + 8;
996                 s->ethrxq[pi->first_qset + i].rspq.size = e->rx_mini_pending;
997         }
998         return 0;
999 }
1000
1001 /**
1002  * set_rx_intr_params - set a net devices's RX interrupt holdoff paramete!
1003  * @dev: the network device
1004  * @us: the hold-off time in us, or 0 to disable timer
1005  * @cnt: the hold-off packet count, or 0 to disable counter
1006  *
1007  * Set the RX interrupt hold-off parameters for a network device.
1008  */
1009 static int set_rx_intr_params(struct net_device *dev,
1010                               unsigned int us, unsigned int cnt)
1011 {
1012         int i, err;
1013         struct port_info *pi = netdev_priv(dev);
1014         struct adapter *adap = pi->adapter;
1015         struct sge_eth_rxq *q = &adap->sge.ethrxq[pi->first_qset];
1016
1017         for (i = 0; i < pi->nqsets; i++, q++) {
1018                 err = cxgb4_set_rspq_intr_params(&q->rspq, us, cnt);
1019                 if (err)
1020                         return err;
1021         }
1022         return 0;
1023 }
1024
1025 static int set_adaptive_rx_setting(struct net_device *dev, int adaptive_rx)
1026 {
1027         int i;
1028         struct port_info *pi = netdev_priv(dev);
1029         struct adapter *adap = pi->adapter;
1030         struct sge_eth_rxq *q = &adap->sge.ethrxq[pi->first_qset];
1031
1032         for (i = 0; i < pi->nqsets; i++, q++)
1033                 q->rspq.adaptive_rx = adaptive_rx;
1034
1035         return 0;
1036 }
1037
1038 static int get_adaptive_rx_setting(struct net_device *dev)
1039 {
1040         struct port_info *pi = netdev_priv(dev);
1041         struct adapter *adap = pi->adapter;
1042         struct sge_eth_rxq *q = &adap->sge.ethrxq[pi->first_qset];
1043
1044         return q->rspq.adaptive_rx;
1045 }
1046
1047 static int set_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
1048 {
1049         set_adaptive_rx_setting(dev, c->use_adaptive_rx_coalesce);
1050         return set_rx_intr_params(dev, c->rx_coalesce_usecs,
1051                                   c->rx_max_coalesced_frames);
1052 }
1053
1054 static int get_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
1055 {
1056         const struct port_info *pi = netdev_priv(dev);
1057         const struct adapter *adap = pi->adapter;
1058         const struct sge_rspq *rq = &adap->sge.ethrxq[pi->first_qset].rspq;
1059
1060         c->rx_coalesce_usecs = qtimer_val(adap, rq);
1061         c->rx_max_coalesced_frames = (rq->intr_params & QINTR_CNT_EN_F) ?
1062                 adap->sge.counter_val[rq->pktcnt_idx] : 0;
1063         c->use_adaptive_rx_coalesce = get_adaptive_rx_setting(dev);
1064         return 0;
1065 }
1066
1067 /**
1068  *      eeprom_ptov - translate a physical EEPROM address to virtual
1069  *      @phys_addr: the physical EEPROM address
1070  *      @fn: the PCI function number
1071  *      @sz: size of function-specific area
1072  *
1073  *      Translate a physical EEPROM address to virtual.  The first 1K is
1074  *      accessed through virtual addresses starting at 31K, the rest is
1075  *      accessed through virtual addresses starting at 0.
1076  *
1077  *      The mapping is as follows:
1078  *      [0..1K) -> [31K..32K)
1079  *      [1K..1K+A) -> [31K-A..31K)
1080  *      [1K+A..ES) -> [0..ES-A-1K)
1081  *
1082  *      where A = @fn * @sz, and ES = EEPROM size.
1083  */
1084 static int eeprom_ptov(unsigned int phys_addr, unsigned int fn, unsigned int sz)
1085 {
1086         fn *= sz;
1087         if (phys_addr < 1024)
1088                 return phys_addr + (31 << 10);
1089         if (phys_addr < 1024 + fn)
1090                 return 31744 - fn + phys_addr - 1024;
1091         if (phys_addr < EEPROMSIZE)
1092                 return phys_addr - 1024 - fn;
1093         return -EINVAL;
1094 }
1095
1096 /* The next two routines implement eeprom read/write from physical addresses.
1097  */
1098 static int eeprom_rd_phys(struct adapter *adap, unsigned int phys_addr, u32 *v)
1099 {
1100         int vaddr = eeprom_ptov(phys_addr, adap->pf, EEPROMPFSIZE);
1101
1102         if (vaddr >= 0)
1103                 vaddr = pci_read_vpd(adap->pdev, vaddr, sizeof(u32), v);
1104         return vaddr < 0 ? vaddr : 0;
1105 }
1106
1107 static int eeprom_wr_phys(struct adapter *adap, unsigned int phys_addr, u32 v)
1108 {
1109         int vaddr = eeprom_ptov(phys_addr, adap->pf, EEPROMPFSIZE);
1110
1111         if (vaddr >= 0)
1112                 vaddr = pci_write_vpd(adap->pdev, vaddr, sizeof(u32), &v);
1113         return vaddr < 0 ? vaddr : 0;
1114 }
1115
1116 #define EEPROM_MAGIC 0x38E2F10C
1117
1118 static int get_eeprom(struct net_device *dev, struct ethtool_eeprom *e,
1119                       u8 *data)
1120 {
1121         int i, err = 0;
1122         struct adapter *adapter = netdev2adap(dev);
1123         u8 *buf = kvzalloc(EEPROMSIZE, GFP_KERNEL);
1124
1125         if (!buf)
1126                 return -ENOMEM;
1127
1128         e->magic = EEPROM_MAGIC;
1129         for (i = e->offset & ~3; !err && i < e->offset + e->len; i += 4)
1130                 err = eeprom_rd_phys(adapter, i, (u32 *)&buf[i]);
1131
1132         if (!err)
1133                 memcpy(data, buf + e->offset, e->len);
1134         kvfree(buf);
1135         return err;
1136 }
1137
1138 static int set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom,
1139                       u8 *data)
1140 {
1141         u8 *buf;
1142         int err = 0;
1143         u32 aligned_offset, aligned_len, *p;
1144         struct adapter *adapter = netdev2adap(dev);
1145
1146         if (eeprom->magic != EEPROM_MAGIC)
1147                 return -EINVAL;
1148
1149         aligned_offset = eeprom->offset & ~3;
1150         aligned_len = (eeprom->len + (eeprom->offset & 3) + 3) & ~3;
1151
1152         if (adapter->pf > 0) {
1153                 u32 start = 1024 + adapter->pf * EEPROMPFSIZE;
1154
1155                 if (aligned_offset < start ||
1156                     aligned_offset + aligned_len > start + EEPROMPFSIZE)
1157                         return -EPERM;
1158         }
1159
1160         if (aligned_offset != eeprom->offset || aligned_len != eeprom->len) {
1161                 /* RMW possibly needed for first or last words.
1162                  */
1163                 buf = kvzalloc(aligned_len, GFP_KERNEL);
1164                 if (!buf)
1165                         return -ENOMEM;
1166                 err = eeprom_rd_phys(adapter, aligned_offset, (u32 *)buf);
1167                 if (!err && aligned_len > 4)
1168                         err = eeprom_rd_phys(adapter,
1169                                              aligned_offset + aligned_len - 4,
1170                                              (u32 *)&buf[aligned_len - 4]);
1171                 if (err)
1172                         goto out;
1173                 memcpy(buf + (eeprom->offset & 3), data, eeprom->len);
1174         } else {
1175                 buf = data;
1176         }
1177
1178         err = t4_seeprom_wp(adapter, false);
1179         if (err)
1180                 goto out;
1181
1182         for (p = (u32 *)buf; !err && aligned_len; aligned_len -= 4, p++) {
1183                 err = eeprom_wr_phys(adapter, aligned_offset, *p);
1184                 aligned_offset += 4;
1185         }
1186
1187         if (!err)
1188                 err = t4_seeprom_wp(adapter, true);
1189 out:
1190         if (buf != data)
1191                 kvfree(buf);
1192         return err;
1193 }
1194
1195 static int set_flash(struct net_device *netdev, struct ethtool_flash *ef)
1196 {
1197         int ret;
1198         const struct firmware *fw;
1199         struct adapter *adap = netdev2adap(netdev);
1200         unsigned int mbox = PCIE_FW_MASTER_M + 1;
1201         u32 pcie_fw;
1202         unsigned int master;
1203         u8 master_vld = 0;
1204
1205         pcie_fw = t4_read_reg(adap, PCIE_FW_A);
1206         master = PCIE_FW_MASTER_G(pcie_fw);
1207         if (pcie_fw & PCIE_FW_MASTER_VLD_F)
1208                 master_vld = 1;
1209         /* if csiostor is the master return */
1210         if (master_vld && (master != adap->pf)) {
1211                 dev_warn(adap->pdev_dev,
1212                          "cxgb4 driver needs to be loaded as MASTER to support FW flash\n");
1213                 return -EOPNOTSUPP;
1214         }
1215
1216         ef->data[sizeof(ef->data) - 1] = '\0';
1217         ret = request_firmware(&fw, ef->data, adap->pdev_dev);
1218         if (ret < 0)
1219                 return ret;
1220
1221         /* If the adapter has been fully initialized then we'll go ahead and
1222          * try to get the firmware's cooperation in upgrading to the new
1223          * firmware image otherwise we'll try to do the entire job from the
1224          * host ... and we always "force" the operation in this path.
1225          */
1226         if (adap->flags & FULL_INIT_DONE)
1227                 mbox = adap->mbox;
1228
1229         ret = t4_fw_upgrade(adap, mbox, fw->data, fw->size, 1);
1230         release_firmware(fw);
1231         if (!ret)
1232                 dev_info(adap->pdev_dev,
1233                          "loaded firmware %s, reload cxgb4 driver\n", ef->data);
1234         return ret;
1235 }
1236
1237 static int get_ts_info(struct net_device *dev, struct ethtool_ts_info *ts_info)
1238 {
1239         struct port_info *pi = netdev_priv(dev);
1240         struct  adapter *adapter = pi->adapter;
1241
1242         ts_info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE |
1243                                    SOF_TIMESTAMPING_RX_SOFTWARE |
1244                                    SOF_TIMESTAMPING_SOFTWARE;
1245
1246         ts_info->so_timestamping |= SOF_TIMESTAMPING_RX_HARDWARE |
1247                                     SOF_TIMESTAMPING_TX_HARDWARE |
1248                                     SOF_TIMESTAMPING_RAW_HARDWARE;
1249
1250         ts_info->tx_types = (1 << HWTSTAMP_TX_OFF) |
1251                             (1 << HWTSTAMP_TX_ON);
1252
1253         ts_info->rx_filters = (1 << HWTSTAMP_FILTER_NONE) |
1254                               (1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT) |
1255                               (1 << HWTSTAMP_FILTER_PTP_V1_L4_SYNC) |
1256                               (1 << HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ) |
1257                               (1 << HWTSTAMP_FILTER_PTP_V2_L4_SYNC) |
1258                               (1 << HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ);
1259
1260         if (adapter->ptp_clock)
1261                 ts_info->phc_index = ptp_clock_index(adapter->ptp_clock);
1262         else
1263                 ts_info->phc_index = -1;
1264
1265         return 0;
1266 }
1267
1268 static u32 get_rss_table_size(struct net_device *dev)
1269 {
1270         const struct port_info *pi = netdev_priv(dev);
1271
1272         return pi->rss_size;
1273 }
1274
1275 static int get_rss_table(struct net_device *dev, u32 *p, u8 *key, u8 *hfunc)
1276 {
1277         const struct port_info *pi = netdev_priv(dev);
1278         unsigned int n = pi->rss_size;
1279
1280         if (hfunc)
1281                 *hfunc = ETH_RSS_HASH_TOP;
1282         if (!p)
1283                 return 0;
1284         while (n--)
1285                 p[n] = pi->rss[n];
1286         return 0;
1287 }
1288
1289 static int set_rss_table(struct net_device *dev, const u32 *p, const u8 *key,
1290                          const u8 hfunc)
1291 {
1292         unsigned int i;
1293         struct port_info *pi = netdev_priv(dev);
1294
1295         /* We require at least one supported parameter to be changed and no
1296          * change in any of the unsupported parameters
1297          */
1298         if (key ||
1299             (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP))
1300                 return -EOPNOTSUPP;
1301         if (!p)
1302                 return 0;
1303
1304         /* Interface must be brought up atleast once */
1305         if (pi->adapter->flags & FULL_INIT_DONE) {
1306                 for (i = 0; i < pi->rss_size; i++)
1307                         pi->rss[i] = p[i];
1308
1309                 return cxgb4_write_rss(pi, pi->rss);
1310         }
1311
1312         return -EPERM;
1313 }
1314
1315 static int get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
1316                      u32 *rules)
1317 {
1318         const struct port_info *pi = netdev_priv(dev);
1319
1320         switch (info->cmd) {
1321         case ETHTOOL_GRXFH: {
1322                 unsigned int v = pi->rss_mode;
1323
1324                 info->data = 0;
1325                 switch (info->flow_type) {
1326                 case TCP_V4_FLOW:
1327                         if (v & FW_RSS_VI_CONFIG_CMD_IP4FOURTUPEN_F)
1328                                 info->data = RXH_IP_SRC | RXH_IP_DST |
1329                                              RXH_L4_B_0_1 | RXH_L4_B_2_3;
1330                         else if (v & FW_RSS_VI_CONFIG_CMD_IP4TWOTUPEN_F)
1331                                 info->data = RXH_IP_SRC | RXH_IP_DST;
1332                         break;
1333                 case UDP_V4_FLOW:
1334                         if ((v & FW_RSS_VI_CONFIG_CMD_IP4FOURTUPEN_F) &&
1335                             (v & FW_RSS_VI_CONFIG_CMD_UDPEN_F))
1336                                 info->data = RXH_IP_SRC | RXH_IP_DST |
1337                                              RXH_L4_B_0_1 | RXH_L4_B_2_3;
1338                         else if (v & FW_RSS_VI_CONFIG_CMD_IP4TWOTUPEN_F)
1339                                 info->data = RXH_IP_SRC | RXH_IP_DST;
1340                         break;
1341                 case SCTP_V4_FLOW:
1342                 case AH_ESP_V4_FLOW:
1343                 case IPV4_FLOW:
1344                         if (v & FW_RSS_VI_CONFIG_CMD_IP4TWOTUPEN_F)
1345                                 info->data = RXH_IP_SRC | RXH_IP_DST;
1346                         break;
1347                 case TCP_V6_FLOW:
1348                         if (v & FW_RSS_VI_CONFIG_CMD_IP6FOURTUPEN_F)
1349                                 info->data = RXH_IP_SRC | RXH_IP_DST |
1350                                              RXH_L4_B_0_1 | RXH_L4_B_2_3;
1351                         else if (v & FW_RSS_VI_CONFIG_CMD_IP6TWOTUPEN_F)
1352                                 info->data = RXH_IP_SRC | RXH_IP_DST;
1353                         break;
1354                 case UDP_V6_FLOW:
1355                         if ((v & FW_RSS_VI_CONFIG_CMD_IP6FOURTUPEN_F) &&
1356                             (v & FW_RSS_VI_CONFIG_CMD_UDPEN_F))
1357                                 info->data = RXH_IP_SRC | RXH_IP_DST |
1358                                              RXH_L4_B_0_1 | RXH_L4_B_2_3;
1359                         else if (v & FW_RSS_VI_CONFIG_CMD_IP6TWOTUPEN_F)
1360                                 info->data = RXH_IP_SRC | RXH_IP_DST;
1361                         break;
1362                 case SCTP_V6_FLOW:
1363                 case AH_ESP_V6_FLOW:
1364                 case IPV6_FLOW:
1365                         if (v & FW_RSS_VI_CONFIG_CMD_IP6TWOTUPEN_F)
1366                                 info->data = RXH_IP_SRC | RXH_IP_DST;
1367                         break;
1368                 }
1369                 return 0;
1370         }
1371         case ETHTOOL_GRXRINGS:
1372                 info->data = pi->nqsets;
1373                 return 0;
1374         }
1375         return -EOPNOTSUPP;
1376 }
1377
1378 static int set_dump(struct net_device *dev, struct ethtool_dump *eth_dump)
1379 {
1380         struct adapter *adapter = netdev2adap(dev);
1381         u32 len = 0;
1382
1383         len = sizeof(struct cudbg_hdr) +
1384               sizeof(struct cudbg_entity_hdr) * CUDBG_MAX_ENTITY;
1385         len += cxgb4_get_dump_length(adapter, eth_dump->flag);
1386
1387         adapter->eth_dump.flag = eth_dump->flag;
1388         adapter->eth_dump.len = len;
1389         return 0;
1390 }
1391
1392 static int get_dump_flag(struct net_device *dev, struct ethtool_dump *eth_dump)
1393 {
1394         struct adapter *adapter = netdev2adap(dev);
1395
1396         eth_dump->flag = adapter->eth_dump.flag;
1397         eth_dump->len = adapter->eth_dump.len;
1398         eth_dump->version = adapter->eth_dump.version;
1399         return 0;
1400 }
1401
1402 static int get_dump_data(struct net_device *dev, struct ethtool_dump *eth_dump,
1403                          void *buf)
1404 {
1405         struct adapter *adapter = netdev2adap(dev);
1406         u32 len = 0;
1407         int ret = 0;
1408
1409         if (adapter->eth_dump.flag == CXGB4_ETH_DUMP_NONE)
1410                 return -ENOENT;
1411
1412         len = sizeof(struct cudbg_hdr) +
1413               sizeof(struct cudbg_entity_hdr) * CUDBG_MAX_ENTITY;
1414         len += cxgb4_get_dump_length(adapter, adapter->eth_dump.flag);
1415         if (eth_dump->len < len)
1416                 return -ENOMEM;
1417
1418         ret = cxgb4_cudbg_collect(adapter, buf, &len, adapter->eth_dump.flag);
1419         if (ret)
1420                 return ret;
1421
1422         eth_dump->flag = adapter->eth_dump.flag;
1423         eth_dump->len = len;
1424         eth_dump->version = adapter->eth_dump.version;
1425         return 0;
1426 }
1427
1428 static const struct ethtool_ops cxgb_ethtool_ops = {
1429         .get_link_ksettings = get_link_ksettings,
1430         .set_link_ksettings = set_link_ksettings,
1431         .get_fecparam      = get_fecparam,
1432         .set_fecparam      = set_fecparam,
1433         .get_drvinfo       = get_drvinfo,
1434         .get_msglevel      = get_msglevel,
1435         .set_msglevel      = set_msglevel,
1436         .get_ringparam     = get_sge_param,
1437         .set_ringparam     = set_sge_param,
1438         .get_coalesce      = get_coalesce,
1439         .set_coalesce      = set_coalesce,
1440         .get_eeprom_len    = get_eeprom_len,
1441         .get_eeprom        = get_eeprom,
1442         .set_eeprom        = set_eeprom,
1443         .get_pauseparam    = get_pauseparam,
1444         .set_pauseparam    = set_pauseparam,
1445         .get_link          = ethtool_op_get_link,
1446         .get_strings       = get_strings,
1447         .set_phys_id       = identify_port,
1448         .nway_reset        = restart_autoneg,
1449         .get_sset_count    = get_sset_count,
1450         .get_ethtool_stats = get_stats,
1451         .get_regs_len      = get_regs_len,
1452         .get_regs          = get_regs,
1453         .get_rxnfc         = get_rxnfc,
1454         .get_rxfh_indir_size = get_rss_table_size,
1455         .get_rxfh          = get_rss_table,
1456         .set_rxfh          = set_rss_table,
1457         .flash_device      = set_flash,
1458         .get_ts_info       = get_ts_info,
1459         .set_dump          = set_dump,
1460         .get_dump_flag     = get_dump_flag,
1461         .get_dump_data     = get_dump_data,
1462 };
1463
1464 void cxgb4_set_ethtool_ops(struct net_device *netdev)
1465 {
1466         netdev->ethtool_ops = &cxgb_ethtool_ops;
1467 }