Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf
[sfrench/cifs-2.6.git] / drivers / net / ethernet / chelsio / cxgb3 / cxgb3_main.c
1 /*
2  * Copyright (c) 2003-2008 Chelsio, Inc. All rights reserved.
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
33 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
34
35 #include <linux/module.h>
36 #include <linux/moduleparam.h>
37 #include <linux/init.h>
38 #include <linux/pci.h>
39 #include <linux/dma-mapping.h>
40 #include <linux/netdevice.h>
41 #include <linux/etherdevice.h>
42 #include <linux/if_vlan.h>
43 #include <linux/mdio.h>
44 #include <linux/sockios.h>
45 #include <linux/workqueue.h>
46 #include <linux/proc_fs.h>
47 #include <linux/rtnetlink.h>
48 #include <linux/firmware.h>
49 #include <linux/log2.h>
50 #include <linux/stringify.h>
51 #include <linux/sched.h>
52 #include <linux/slab.h>
53 #include <linux/uaccess.h>
54 #include <linux/nospec.h>
55
56 #include "common.h"
57 #include "cxgb3_ioctl.h"
58 #include "regs.h"
59 #include "cxgb3_offload.h"
60 #include "version.h"
61
62 #include "cxgb3_ctl_defs.h"
63 #include "t3_cpl.h"
64 #include "firmware_exports.h"
65
66 enum {
67         MAX_TXQ_ENTRIES = 16384,
68         MAX_CTRL_TXQ_ENTRIES = 1024,
69         MAX_RSPQ_ENTRIES = 16384,
70         MAX_RX_BUFFERS = 16384,
71         MAX_RX_JUMBO_BUFFERS = 16384,
72         MIN_TXQ_ENTRIES = 4,
73         MIN_CTRL_TXQ_ENTRIES = 4,
74         MIN_RSPQ_ENTRIES = 32,
75         MIN_FL_ENTRIES = 32
76 };
77
78 #define PORT_MASK ((1 << MAX_NPORTS) - 1)
79
80 #define DFLT_MSG_ENABLE (NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_LINK | \
81                          NETIF_MSG_TIMER | NETIF_MSG_IFDOWN | NETIF_MSG_IFUP |\
82                          NETIF_MSG_RX_ERR | NETIF_MSG_TX_ERR)
83
84 #define EEPROM_MAGIC 0x38E2F10C
85
86 #define CH_DEVICE(devid, idx) \
87         { PCI_VENDOR_ID_CHELSIO, devid, PCI_ANY_ID, PCI_ANY_ID, 0, 0, idx }
88
89 static const struct pci_device_id cxgb3_pci_tbl[] = {
90         CH_DEVICE(0x20, 0),     /* PE9000 */
91         CH_DEVICE(0x21, 1),     /* T302E */
92         CH_DEVICE(0x22, 2),     /* T310E */
93         CH_DEVICE(0x23, 3),     /* T320X */
94         CH_DEVICE(0x24, 1),     /* T302X */
95         CH_DEVICE(0x25, 3),     /* T320E */
96         CH_DEVICE(0x26, 2),     /* T310X */
97         CH_DEVICE(0x30, 2),     /* T3B10 */
98         CH_DEVICE(0x31, 3),     /* T3B20 */
99         CH_DEVICE(0x32, 1),     /* T3B02 */
100         CH_DEVICE(0x35, 6),     /* T3C20-derived T3C10 */
101         CH_DEVICE(0x36, 3),     /* S320E-CR */
102         CH_DEVICE(0x37, 7),     /* N320E-G2 */
103         {0,}
104 };
105
106 MODULE_DESCRIPTION(DRV_DESC);
107 MODULE_AUTHOR("Chelsio Communications");
108 MODULE_LICENSE("Dual BSD/GPL");
109 MODULE_VERSION(DRV_VERSION);
110 MODULE_DEVICE_TABLE(pci, cxgb3_pci_tbl);
111
112 static int dflt_msg_enable = DFLT_MSG_ENABLE;
113
114 module_param(dflt_msg_enable, int, 0644);
115 MODULE_PARM_DESC(dflt_msg_enable, "Chelsio T3 default message enable bitmap");
116
117 /*
118  * The driver uses the best interrupt scheme available on a platform in the
119  * order MSI-X, MSI, legacy pin interrupts.  This parameter determines which
120  * of these schemes the driver may consider as follows:
121  *
122  * msi = 2: choose from among all three options
123  * msi = 1: only consider MSI and pin interrupts
124  * msi = 0: force pin interrupts
125  */
126 static int msi = 2;
127
128 module_param(msi, int, 0644);
129 MODULE_PARM_DESC(msi, "whether to use MSI or MSI-X");
130
131 /*
132  * The driver enables offload as a default.
133  * To disable it, use ofld_disable = 1.
134  */
135
136 static int ofld_disable = 0;
137
138 module_param(ofld_disable, int, 0644);
139 MODULE_PARM_DESC(ofld_disable, "whether to enable offload at init time or not");
140
141 /*
142  * We have work elements that we need to cancel when an interface is taken
143  * down.  Normally the work elements would be executed by keventd but that
144  * can deadlock because of linkwatch.  If our close method takes the rtnl
145  * lock and linkwatch is ahead of our work elements in keventd, linkwatch
146  * will block keventd as it needs the rtnl lock, and we'll deadlock waiting
147  * for our work to complete.  Get our own work queue to solve this.
148  */
149 struct workqueue_struct *cxgb3_wq;
150
151 /**
152  *      link_report - show link status and link speed/duplex
153  *      @p: the port whose settings are to be reported
154  *
155  *      Shows the link status, speed, and duplex of a port.
156  */
157 static void link_report(struct net_device *dev)
158 {
159         if (!netif_carrier_ok(dev))
160                 netdev_info(dev, "link down\n");
161         else {
162                 const char *s = "10Mbps";
163                 const struct port_info *p = netdev_priv(dev);
164
165                 switch (p->link_config.speed) {
166                 case SPEED_10000:
167                         s = "10Gbps";
168                         break;
169                 case SPEED_1000:
170                         s = "1000Mbps";
171                         break;
172                 case SPEED_100:
173                         s = "100Mbps";
174                         break;
175                 }
176
177                 netdev_info(dev, "link up, %s, %s-duplex\n",
178                             s, p->link_config.duplex == DUPLEX_FULL
179                             ? "full" : "half");
180         }
181 }
182
183 static void enable_tx_fifo_drain(struct adapter *adapter,
184                                  struct port_info *pi)
185 {
186         t3_set_reg_field(adapter, A_XGM_TXFIFO_CFG + pi->mac.offset, 0,
187                          F_ENDROPPKT);
188         t3_write_reg(adapter, A_XGM_RX_CTRL + pi->mac.offset, 0);
189         t3_write_reg(adapter, A_XGM_TX_CTRL + pi->mac.offset, F_TXEN);
190         t3_write_reg(adapter, A_XGM_RX_CTRL + pi->mac.offset, F_RXEN);
191 }
192
193 static void disable_tx_fifo_drain(struct adapter *adapter,
194                                   struct port_info *pi)
195 {
196         t3_set_reg_field(adapter, A_XGM_TXFIFO_CFG + pi->mac.offset,
197                          F_ENDROPPKT, 0);
198 }
199
200 void t3_os_link_fault(struct adapter *adap, int port_id, int state)
201 {
202         struct net_device *dev = adap->port[port_id];
203         struct port_info *pi = netdev_priv(dev);
204
205         if (state == netif_carrier_ok(dev))
206                 return;
207
208         if (state) {
209                 struct cmac *mac = &pi->mac;
210
211                 netif_carrier_on(dev);
212
213                 disable_tx_fifo_drain(adap, pi);
214
215                 /* Clear local faults */
216                 t3_xgm_intr_disable(adap, pi->port_id);
217                 t3_read_reg(adap, A_XGM_INT_STATUS +
218                                     pi->mac.offset);
219                 t3_write_reg(adap,
220                              A_XGM_INT_CAUSE + pi->mac.offset,
221                              F_XGM_INT);
222
223                 t3_set_reg_field(adap,
224                                  A_XGM_INT_ENABLE +
225                                  pi->mac.offset,
226                                  F_XGM_INT, F_XGM_INT);
227                 t3_xgm_intr_enable(adap, pi->port_id);
228
229                 t3_mac_enable(mac, MAC_DIRECTION_TX);
230         } else {
231                 netif_carrier_off(dev);
232
233                 /* Flush TX FIFO */
234                 enable_tx_fifo_drain(adap, pi);
235         }
236         link_report(dev);
237 }
238
239 /**
240  *      t3_os_link_changed - handle link status changes
241  *      @adapter: the adapter associated with the link change
242  *      @port_id: the port index whose limk status has changed
243  *      @link_stat: the new status of the link
244  *      @speed: the new speed setting
245  *      @duplex: the new duplex setting
246  *      @pause: the new flow-control setting
247  *
248  *      This is the OS-dependent handler for link status changes.  The OS
249  *      neutral handler takes care of most of the processing for these events,
250  *      then calls this handler for any OS-specific processing.
251  */
252 void t3_os_link_changed(struct adapter *adapter, int port_id, int link_stat,
253                         int speed, int duplex, int pause)
254 {
255         struct net_device *dev = adapter->port[port_id];
256         struct port_info *pi = netdev_priv(dev);
257         struct cmac *mac = &pi->mac;
258
259         /* Skip changes from disabled ports. */
260         if (!netif_running(dev))
261                 return;
262
263         if (link_stat != netif_carrier_ok(dev)) {
264                 if (link_stat) {
265                         disable_tx_fifo_drain(adapter, pi);
266
267                         t3_mac_enable(mac, MAC_DIRECTION_RX);
268
269                         /* Clear local faults */
270                         t3_xgm_intr_disable(adapter, pi->port_id);
271                         t3_read_reg(adapter, A_XGM_INT_STATUS +
272                                     pi->mac.offset);
273                         t3_write_reg(adapter,
274                                      A_XGM_INT_CAUSE + pi->mac.offset,
275                                      F_XGM_INT);
276
277                         t3_set_reg_field(adapter,
278                                          A_XGM_INT_ENABLE + pi->mac.offset,
279                                          F_XGM_INT, F_XGM_INT);
280                         t3_xgm_intr_enable(adapter, pi->port_id);
281
282                         netif_carrier_on(dev);
283                 } else {
284                         netif_carrier_off(dev);
285
286                         t3_xgm_intr_disable(adapter, pi->port_id);
287                         t3_read_reg(adapter, A_XGM_INT_STATUS + pi->mac.offset);
288                         t3_set_reg_field(adapter,
289                                          A_XGM_INT_ENABLE + pi->mac.offset,
290                                          F_XGM_INT, 0);
291
292                         if (is_10G(adapter))
293                                 pi->phy.ops->power_down(&pi->phy, 1);
294
295                         t3_read_reg(adapter, A_XGM_INT_STATUS + pi->mac.offset);
296                         t3_mac_disable(mac, MAC_DIRECTION_RX);
297                         t3_link_start(&pi->phy, mac, &pi->link_config);
298
299                         /* Flush TX FIFO */
300                         enable_tx_fifo_drain(adapter, pi);
301                 }
302
303                 link_report(dev);
304         }
305 }
306
307 /**
308  *      t3_os_phymod_changed - handle PHY module changes
309  *      @phy: the PHY reporting the module change
310  *      @mod_type: new module type
311  *
312  *      This is the OS-dependent handler for PHY module changes.  It is
313  *      invoked when a PHY module is removed or inserted for any OS-specific
314  *      processing.
315  */
316 void t3_os_phymod_changed(struct adapter *adap, int port_id)
317 {
318         static const char *mod_str[] = {
319                 NULL, "SR", "LR", "LRM", "TWINAX", "TWINAX", "unknown"
320         };
321
322         const struct net_device *dev = adap->port[port_id];
323         const struct port_info *pi = netdev_priv(dev);
324
325         if (pi->phy.modtype == phy_modtype_none)
326                 netdev_info(dev, "PHY module unplugged\n");
327         else
328                 netdev_info(dev, "%s PHY module inserted\n",
329                             mod_str[pi->phy.modtype]);
330 }
331
332 static void cxgb_set_rxmode(struct net_device *dev)
333 {
334         struct port_info *pi = netdev_priv(dev);
335
336         t3_mac_set_rx_mode(&pi->mac, dev);
337 }
338
339 /**
340  *      link_start - enable a port
341  *      @dev: the device to enable
342  *
343  *      Performs the MAC and PHY actions needed to enable a port.
344  */
345 static void link_start(struct net_device *dev)
346 {
347         struct port_info *pi = netdev_priv(dev);
348         struct cmac *mac = &pi->mac;
349
350         t3_mac_reset(mac);
351         t3_mac_set_num_ucast(mac, MAX_MAC_IDX);
352         t3_mac_set_mtu(mac, dev->mtu);
353         t3_mac_set_address(mac, LAN_MAC_IDX, dev->dev_addr);
354         t3_mac_set_address(mac, SAN_MAC_IDX, pi->iscsic.mac_addr);
355         t3_mac_set_rx_mode(mac, dev);
356         t3_link_start(&pi->phy, mac, &pi->link_config);
357         t3_mac_enable(mac, MAC_DIRECTION_RX | MAC_DIRECTION_TX);
358 }
359
360 static inline void cxgb_disable_msi(struct adapter *adapter)
361 {
362         if (adapter->flags & USING_MSIX) {
363                 pci_disable_msix(adapter->pdev);
364                 adapter->flags &= ~USING_MSIX;
365         } else if (adapter->flags & USING_MSI) {
366                 pci_disable_msi(adapter->pdev);
367                 adapter->flags &= ~USING_MSI;
368         }
369 }
370
371 /*
372  * Interrupt handler for asynchronous events used with MSI-X.
373  */
374 static irqreturn_t t3_async_intr_handler(int irq, void *cookie)
375 {
376         t3_slow_intr_handler(cookie);
377         return IRQ_HANDLED;
378 }
379
380 /*
381  * Name the MSI-X interrupts.
382  */
383 static void name_msix_vecs(struct adapter *adap)
384 {
385         int i, j, msi_idx = 1, n = sizeof(adap->msix_info[0].desc) - 1;
386
387         snprintf(adap->msix_info[0].desc, n, "%s", adap->name);
388         adap->msix_info[0].desc[n] = 0;
389
390         for_each_port(adap, j) {
391                 struct net_device *d = adap->port[j];
392                 const struct port_info *pi = netdev_priv(d);
393
394                 for (i = 0; i < pi->nqsets; i++, msi_idx++) {
395                         snprintf(adap->msix_info[msi_idx].desc, n,
396                                  "%s-%d", d->name, pi->first_qset + i);
397                         adap->msix_info[msi_idx].desc[n] = 0;
398                 }
399         }
400 }
401
402 static int request_msix_data_irqs(struct adapter *adap)
403 {
404         int i, j, err, qidx = 0;
405
406         for_each_port(adap, i) {
407                 int nqsets = adap2pinfo(adap, i)->nqsets;
408
409                 for (j = 0; j < nqsets; ++j) {
410                         err = request_irq(adap->msix_info[qidx + 1].vec,
411                                           t3_intr_handler(adap,
412                                                           adap->sge.qs[qidx].
413                                                           rspq.polling), 0,
414                                           adap->msix_info[qidx + 1].desc,
415                                           &adap->sge.qs[qidx]);
416                         if (err) {
417                                 while (--qidx >= 0)
418                                         free_irq(adap->msix_info[qidx + 1].vec,
419                                                  &adap->sge.qs[qidx]);
420                                 return err;
421                         }
422                         qidx++;
423                 }
424         }
425         return 0;
426 }
427
428 static void free_irq_resources(struct adapter *adapter)
429 {
430         if (adapter->flags & USING_MSIX) {
431                 int i, n = 0;
432
433                 free_irq(adapter->msix_info[0].vec, adapter);
434                 for_each_port(adapter, i)
435                         n += adap2pinfo(adapter, i)->nqsets;
436
437                 for (i = 0; i < n; ++i)
438                         free_irq(adapter->msix_info[i + 1].vec,
439                                  &adapter->sge.qs[i]);
440         } else
441                 free_irq(adapter->pdev->irq, adapter);
442 }
443
444 static int await_mgmt_replies(struct adapter *adap, unsigned long init_cnt,
445                               unsigned long n)
446 {
447         int attempts = 10;
448
449         while (adap->sge.qs[0].rspq.offload_pkts < init_cnt + n) {
450                 if (!--attempts)
451                         return -ETIMEDOUT;
452                 msleep(10);
453         }
454         return 0;
455 }
456
457 static int init_tp_parity(struct adapter *adap)
458 {
459         int i;
460         struct sk_buff *skb;
461         struct cpl_set_tcb_field *greq;
462         unsigned long cnt = adap->sge.qs[0].rspq.offload_pkts;
463
464         t3_tp_set_offload_mode(adap, 1);
465
466         for (i = 0; i < 16; i++) {
467                 struct cpl_smt_write_req *req;
468
469                 skb = alloc_skb(sizeof(*req), GFP_KERNEL);
470                 if (!skb)
471                         skb = adap->nofail_skb;
472                 if (!skb)
473                         goto alloc_skb_fail;
474
475                 req = __skb_put_zero(skb, sizeof(*req));
476                 req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
477                 OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_SMT_WRITE_REQ, i));
478                 req->mtu_idx = NMTUS - 1;
479                 req->iff = i;
480                 t3_mgmt_tx(adap, skb);
481                 if (skb == adap->nofail_skb) {
482                         await_mgmt_replies(adap, cnt, i + 1);
483                         adap->nofail_skb = alloc_skb(sizeof(*greq), GFP_KERNEL);
484                         if (!adap->nofail_skb)
485                                 goto alloc_skb_fail;
486                 }
487         }
488
489         for (i = 0; i < 2048; i++) {
490                 struct cpl_l2t_write_req *req;
491
492                 skb = alloc_skb(sizeof(*req), GFP_KERNEL);
493                 if (!skb)
494                         skb = adap->nofail_skb;
495                 if (!skb)
496                         goto alloc_skb_fail;
497
498                 req = __skb_put_zero(skb, sizeof(*req));
499                 req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
500                 OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_L2T_WRITE_REQ, i));
501                 req->params = htonl(V_L2T_W_IDX(i));
502                 t3_mgmt_tx(adap, skb);
503                 if (skb == adap->nofail_skb) {
504                         await_mgmt_replies(adap, cnt, 16 + i + 1);
505                         adap->nofail_skb = alloc_skb(sizeof(*greq), GFP_KERNEL);
506                         if (!adap->nofail_skb)
507                                 goto alloc_skb_fail;
508                 }
509         }
510
511         for (i = 0; i < 2048; i++) {
512                 struct cpl_rte_write_req *req;
513
514                 skb = alloc_skb(sizeof(*req), GFP_KERNEL);
515                 if (!skb)
516                         skb = adap->nofail_skb;
517                 if (!skb)
518                         goto alloc_skb_fail;
519
520                 req = __skb_put_zero(skb, sizeof(*req));
521                 req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
522                 OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_RTE_WRITE_REQ, i));
523                 req->l2t_idx = htonl(V_L2T_W_IDX(i));
524                 t3_mgmt_tx(adap, skb);
525                 if (skb == adap->nofail_skb) {
526                         await_mgmt_replies(adap, cnt, 16 + 2048 + i + 1);
527                         adap->nofail_skb = alloc_skb(sizeof(*greq), GFP_KERNEL);
528                         if (!adap->nofail_skb)
529                                 goto alloc_skb_fail;
530                 }
531         }
532
533         skb = alloc_skb(sizeof(*greq), GFP_KERNEL);
534         if (!skb)
535                 skb = adap->nofail_skb;
536         if (!skb)
537                 goto alloc_skb_fail;
538
539         greq = __skb_put_zero(skb, sizeof(*greq));
540         greq->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
541         OPCODE_TID(greq) = htonl(MK_OPCODE_TID(CPL_SET_TCB_FIELD, 0));
542         greq->mask = cpu_to_be64(1);
543         t3_mgmt_tx(adap, skb);
544
545         i = await_mgmt_replies(adap, cnt, 16 + 2048 + 2048 + 1);
546         if (skb == adap->nofail_skb) {
547                 i = await_mgmt_replies(adap, cnt, 16 + 2048 + 2048 + 1);
548                 adap->nofail_skb = alloc_skb(sizeof(*greq), GFP_KERNEL);
549         }
550
551         t3_tp_set_offload_mode(adap, 0);
552         return i;
553
554 alloc_skb_fail:
555         t3_tp_set_offload_mode(adap, 0);
556         return -ENOMEM;
557 }
558
559 /**
560  *      setup_rss - configure RSS
561  *      @adap: the adapter
562  *
563  *      Sets up RSS to distribute packets to multiple receive queues.  We
564  *      configure the RSS CPU lookup table to distribute to the number of HW
565  *      receive queues, and the response queue lookup table to narrow that
566  *      down to the response queues actually configured for each port.
567  *      We always configure the RSS mapping for two ports since the mapping
568  *      table has plenty of entries.
569  */
570 static void setup_rss(struct adapter *adap)
571 {
572         int i;
573         unsigned int nq0 = adap2pinfo(adap, 0)->nqsets;
574         unsigned int nq1 = adap->port[1] ? adap2pinfo(adap, 1)->nqsets : 1;
575         u8 cpus[SGE_QSETS + 1];
576         u16 rspq_map[RSS_TABLE_SIZE + 1];
577
578         for (i = 0; i < SGE_QSETS; ++i)
579                 cpus[i] = i;
580         cpus[SGE_QSETS] = 0xff; /* terminator */
581
582         for (i = 0; i < RSS_TABLE_SIZE / 2; ++i) {
583                 rspq_map[i] = i % nq0;
584                 rspq_map[i + RSS_TABLE_SIZE / 2] = (i % nq1) + nq0;
585         }
586         rspq_map[RSS_TABLE_SIZE] = 0xffff; /* terminator */
587
588         t3_config_rss(adap, F_RQFEEDBACKENABLE | F_TNLLKPEN | F_TNLMAPEN |
589                       F_TNLPRTEN | F_TNL2TUPEN | F_TNL4TUPEN |
590                       V_RRCPLCPUSIZE(6) | F_HASHTOEPLITZ, cpus, rspq_map);
591 }
592
593 static void ring_dbs(struct adapter *adap)
594 {
595         int i, j;
596
597         for (i = 0; i < SGE_QSETS; i++) {
598                 struct sge_qset *qs = &adap->sge.qs[i];
599
600                 if (qs->adap)
601                         for (j = 0; j < SGE_TXQ_PER_SET; j++)
602                                 t3_write_reg(adap, A_SG_KDOORBELL, F_SELEGRCNTX | V_EGRCNTX(qs->txq[j].cntxt_id));
603         }
604 }
605
606 static void init_napi(struct adapter *adap)
607 {
608         int i;
609
610         for (i = 0; i < SGE_QSETS; i++) {
611                 struct sge_qset *qs = &adap->sge.qs[i];
612
613                 if (qs->adap)
614                         netif_napi_add(qs->netdev, &qs->napi, qs->napi.poll,
615                                        64);
616         }
617
618         /*
619          * netif_napi_add() can be called only once per napi_struct because it
620          * adds each new napi_struct to a list.  Be careful not to call it a
621          * second time, e.g., during EEH recovery, by making a note of it.
622          */
623         adap->flags |= NAPI_INIT;
624 }
625
626 /*
627  * Wait until all NAPI handlers are descheduled.  This includes the handlers of
628  * both netdevices representing interfaces and the dummy ones for the extra
629  * queues.
630  */
631 static void quiesce_rx(struct adapter *adap)
632 {
633         int i;
634
635         for (i = 0; i < SGE_QSETS; i++)
636                 if (adap->sge.qs[i].adap)
637                         napi_disable(&adap->sge.qs[i].napi);
638 }
639
640 static void enable_all_napi(struct adapter *adap)
641 {
642         int i;
643         for (i = 0; i < SGE_QSETS; i++)
644                 if (adap->sge.qs[i].adap)
645                         napi_enable(&adap->sge.qs[i].napi);
646 }
647
648 /**
649  *      setup_sge_qsets - configure SGE Tx/Rx/response queues
650  *      @adap: the adapter
651  *
652  *      Determines how many sets of SGE queues to use and initializes them.
653  *      We support multiple queue sets per port if we have MSI-X, otherwise
654  *      just one queue set per port.
655  */
656 static int setup_sge_qsets(struct adapter *adap)
657 {
658         int i, j, err, irq_idx = 0, qset_idx = 0;
659         unsigned int ntxq = SGE_TXQ_PER_SET;
660
661         if (adap->params.rev > 0 && !(adap->flags & USING_MSI))
662                 irq_idx = -1;
663
664         for_each_port(adap, i) {
665                 struct net_device *dev = adap->port[i];
666                 struct port_info *pi = netdev_priv(dev);
667
668                 pi->qs = &adap->sge.qs[pi->first_qset];
669                 for (j = 0; j < pi->nqsets; ++j, ++qset_idx) {
670                         err = t3_sge_alloc_qset(adap, qset_idx, 1,
671                                 (adap->flags & USING_MSIX) ? qset_idx + 1 :
672                                                              irq_idx,
673                                 &adap->params.sge.qset[qset_idx], ntxq, dev,
674                                 netdev_get_tx_queue(dev, j));
675                         if (err) {
676                                 t3_free_sge_resources(adap);
677                                 return err;
678                         }
679                 }
680         }
681
682         return 0;
683 }
684
685 static ssize_t attr_show(struct device *d, char *buf,
686                          ssize_t(*format) (struct net_device *, char *))
687 {
688         ssize_t len;
689
690         /* Synchronize with ioctls that may shut down the device */
691         rtnl_lock();
692         len = (*format) (to_net_dev(d), buf);
693         rtnl_unlock();
694         return len;
695 }
696
697 static ssize_t attr_store(struct device *d,
698                           const char *buf, size_t len,
699                           ssize_t(*set) (struct net_device *, unsigned int),
700                           unsigned int min_val, unsigned int max_val)
701 {
702         ssize_t ret;
703         unsigned int val;
704
705         if (!capable(CAP_NET_ADMIN))
706                 return -EPERM;
707
708         ret = kstrtouint(buf, 0, &val);
709         if (ret)
710                 return ret;
711         if (val < min_val || val > max_val)
712                 return -EINVAL;
713
714         rtnl_lock();
715         ret = (*set) (to_net_dev(d), val);
716         if (!ret)
717                 ret = len;
718         rtnl_unlock();
719         return ret;
720 }
721
722 #define CXGB3_SHOW(name, val_expr) \
723 static ssize_t format_##name(struct net_device *dev, char *buf) \
724 { \
725         struct port_info *pi = netdev_priv(dev); \
726         struct adapter *adap = pi->adapter; \
727         return sprintf(buf, "%u\n", val_expr); \
728 } \
729 static ssize_t show_##name(struct device *d, struct device_attribute *attr, \
730                            char *buf) \
731 { \
732         return attr_show(d, buf, format_##name); \
733 }
734
735 static ssize_t set_nfilters(struct net_device *dev, unsigned int val)
736 {
737         struct port_info *pi = netdev_priv(dev);
738         struct adapter *adap = pi->adapter;
739         int min_tids = is_offload(adap) ? MC5_MIN_TIDS : 0;
740
741         if (adap->flags & FULL_INIT_DONE)
742                 return -EBUSY;
743         if (val && adap->params.rev == 0)
744                 return -EINVAL;
745         if (val > t3_mc5_size(&adap->mc5) - adap->params.mc5.nservers -
746             min_tids)
747                 return -EINVAL;
748         adap->params.mc5.nfilters = val;
749         return 0;
750 }
751
752 static ssize_t store_nfilters(struct device *d, struct device_attribute *attr,
753                               const char *buf, size_t len)
754 {
755         return attr_store(d, buf, len, set_nfilters, 0, ~0);
756 }
757
758 static ssize_t set_nservers(struct net_device *dev, unsigned int val)
759 {
760         struct port_info *pi = netdev_priv(dev);
761         struct adapter *adap = pi->adapter;
762
763         if (adap->flags & FULL_INIT_DONE)
764                 return -EBUSY;
765         if (val > t3_mc5_size(&adap->mc5) - adap->params.mc5.nfilters -
766             MC5_MIN_TIDS)
767                 return -EINVAL;
768         adap->params.mc5.nservers = val;
769         return 0;
770 }
771
772 static ssize_t store_nservers(struct device *d, struct device_attribute *attr,
773                               const char *buf, size_t len)
774 {
775         return attr_store(d, buf, len, set_nservers, 0, ~0);
776 }
777
778 #define CXGB3_ATTR_R(name, val_expr) \
779 CXGB3_SHOW(name, val_expr) \
780 static DEVICE_ATTR(name, 0444, show_##name, NULL)
781
782 #define CXGB3_ATTR_RW(name, val_expr, store_method) \
783 CXGB3_SHOW(name, val_expr) \
784 static DEVICE_ATTR(name, 0644, show_##name, store_method)
785
786 CXGB3_ATTR_R(cam_size, t3_mc5_size(&adap->mc5));
787 CXGB3_ATTR_RW(nfilters, adap->params.mc5.nfilters, store_nfilters);
788 CXGB3_ATTR_RW(nservers, adap->params.mc5.nservers, store_nservers);
789
790 static struct attribute *cxgb3_attrs[] = {
791         &dev_attr_cam_size.attr,
792         &dev_attr_nfilters.attr,
793         &dev_attr_nservers.attr,
794         NULL
795 };
796
797 static const struct attribute_group cxgb3_attr_group = {
798         .attrs = cxgb3_attrs,
799 };
800
801 static ssize_t tm_attr_show(struct device *d,
802                             char *buf, int sched)
803 {
804         struct port_info *pi = netdev_priv(to_net_dev(d));
805         struct adapter *adap = pi->adapter;
806         unsigned int v, addr, bpt, cpt;
807         ssize_t len;
808
809         addr = A_TP_TX_MOD_Q1_Q0_RATE_LIMIT - sched / 2;
810         rtnl_lock();
811         t3_write_reg(adap, A_TP_TM_PIO_ADDR, addr);
812         v = t3_read_reg(adap, A_TP_TM_PIO_DATA);
813         if (sched & 1)
814                 v >>= 16;
815         bpt = (v >> 8) & 0xff;
816         cpt = v & 0xff;
817         if (!cpt)
818                 len = sprintf(buf, "disabled\n");
819         else {
820                 v = (adap->params.vpd.cclk * 1000) / cpt;
821                 len = sprintf(buf, "%u Kbps\n", (v * bpt) / 125);
822         }
823         rtnl_unlock();
824         return len;
825 }
826
827 static ssize_t tm_attr_store(struct device *d,
828                              const char *buf, size_t len, int sched)
829 {
830         struct port_info *pi = netdev_priv(to_net_dev(d));
831         struct adapter *adap = pi->adapter;
832         unsigned int val;
833         ssize_t ret;
834
835         if (!capable(CAP_NET_ADMIN))
836                 return -EPERM;
837
838         ret = kstrtouint(buf, 0, &val);
839         if (ret)
840                 return ret;
841         if (val > 10000000)
842                 return -EINVAL;
843
844         rtnl_lock();
845         ret = t3_config_sched(adap, val, sched);
846         if (!ret)
847                 ret = len;
848         rtnl_unlock();
849         return ret;
850 }
851
852 #define TM_ATTR(name, sched) \
853 static ssize_t show_##name(struct device *d, struct device_attribute *attr, \
854                            char *buf) \
855 { \
856         return tm_attr_show(d, buf, sched); \
857 } \
858 static ssize_t store_##name(struct device *d, struct device_attribute *attr, \
859                             const char *buf, size_t len) \
860 { \
861         return tm_attr_store(d, buf, len, sched); \
862 } \
863 static DEVICE_ATTR(name, 0644, show_##name, store_##name)
864
865 TM_ATTR(sched0, 0);
866 TM_ATTR(sched1, 1);
867 TM_ATTR(sched2, 2);
868 TM_ATTR(sched3, 3);
869 TM_ATTR(sched4, 4);
870 TM_ATTR(sched5, 5);
871 TM_ATTR(sched6, 6);
872 TM_ATTR(sched7, 7);
873
874 static struct attribute *offload_attrs[] = {
875         &dev_attr_sched0.attr,
876         &dev_attr_sched1.attr,
877         &dev_attr_sched2.attr,
878         &dev_attr_sched3.attr,
879         &dev_attr_sched4.attr,
880         &dev_attr_sched5.attr,
881         &dev_attr_sched6.attr,
882         &dev_attr_sched7.attr,
883         NULL
884 };
885
886 static const struct attribute_group offload_attr_group = {
887         .attrs = offload_attrs,
888 };
889
890 /*
891  * Sends an sk_buff to an offload queue driver
892  * after dealing with any active network taps.
893  */
894 static inline int offload_tx(struct t3cdev *tdev, struct sk_buff *skb)
895 {
896         int ret;
897
898         local_bh_disable();
899         ret = t3_offload_tx(tdev, skb);
900         local_bh_enable();
901         return ret;
902 }
903
904 static int write_smt_entry(struct adapter *adapter, int idx)
905 {
906         struct cpl_smt_write_req *req;
907         struct port_info *pi = netdev_priv(adapter->port[idx]);
908         struct sk_buff *skb = alloc_skb(sizeof(*req), GFP_KERNEL);
909
910         if (!skb)
911                 return -ENOMEM;
912
913         req = __skb_put(skb, sizeof(*req));
914         req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
915         OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_SMT_WRITE_REQ, idx));
916         req->mtu_idx = NMTUS - 1;       /* should be 0 but there's a T3 bug */
917         req->iff = idx;
918         memcpy(req->src_mac0, adapter->port[idx]->dev_addr, ETH_ALEN);
919         memcpy(req->src_mac1, pi->iscsic.mac_addr, ETH_ALEN);
920         skb->priority = 1;
921         offload_tx(&adapter->tdev, skb);
922         return 0;
923 }
924
925 static int init_smt(struct adapter *adapter)
926 {
927         int i;
928
929         for_each_port(adapter, i)
930             write_smt_entry(adapter, i);
931         return 0;
932 }
933
934 static void init_port_mtus(struct adapter *adapter)
935 {
936         unsigned int mtus = adapter->port[0]->mtu;
937
938         if (adapter->port[1])
939                 mtus |= adapter->port[1]->mtu << 16;
940         t3_write_reg(adapter, A_TP_MTU_PORT_TABLE, mtus);
941 }
942
943 static int send_pktsched_cmd(struct adapter *adap, int sched, int qidx, int lo,
944                               int hi, int port)
945 {
946         struct sk_buff *skb;
947         struct mngt_pktsched_wr *req;
948         int ret;
949
950         skb = alloc_skb(sizeof(*req), GFP_KERNEL);
951         if (!skb)
952                 skb = adap->nofail_skb;
953         if (!skb)
954                 return -ENOMEM;
955
956         req = skb_put(skb, sizeof(*req));
957         req->wr_hi = htonl(V_WR_OP(FW_WROPCODE_MNGT));
958         req->mngt_opcode = FW_MNGTOPCODE_PKTSCHED_SET;
959         req->sched = sched;
960         req->idx = qidx;
961         req->min = lo;
962         req->max = hi;
963         req->binding = port;
964         ret = t3_mgmt_tx(adap, skb);
965         if (skb == adap->nofail_skb) {
966                 adap->nofail_skb = alloc_skb(sizeof(struct cpl_set_tcb_field),
967                                              GFP_KERNEL);
968                 if (!adap->nofail_skb)
969                         ret = -ENOMEM;
970         }
971
972         return ret;
973 }
974
975 static int bind_qsets(struct adapter *adap)
976 {
977         int i, j, err = 0;
978
979         for_each_port(adap, i) {
980                 const struct port_info *pi = adap2pinfo(adap, i);
981
982                 for (j = 0; j < pi->nqsets; ++j) {
983                         int ret = send_pktsched_cmd(adap, 1,
984                                                     pi->first_qset + j, -1,
985                                                     -1, i);
986                         if (ret)
987                                 err = ret;
988                 }
989         }
990
991         return err;
992 }
993
994 #define FW_VERSION __stringify(FW_VERSION_MAJOR) "."                    \
995         __stringify(FW_VERSION_MINOR) "." __stringify(FW_VERSION_MICRO)
996 #define FW_FNAME "cxgb3/t3fw-" FW_VERSION ".bin"
997 #define TPSRAM_VERSION __stringify(TP_VERSION_MAJOR) "."                \
998         __stringify(TP_VERSION_MINOR) "." __stringify(TP_VERSION_MICRO)
999 #define TPSRAM_NAME "cxgb3/t3%c_psram-" TPSRAM_VERSION ".bin"
1000 #define AEL2005_OPT_EDC_NAME "cxgb3/ael2005_opt_edc.bin"
1001 #define AEL2005_TWX_EDC_NAME "cxgb3/ael2005_twx_edc.bin"
1002 #define AEL2020_TWX_EDC_NAME "cxgb3/ael2020_twx_edc.bin"
1003 MODULE_FIRMWARE(FW_FNAME);
1004 MODULE_FIRMWARE("cxgb3/t3b_psram-" TPSRAM_VERSION ".bin");
1005 MODULE_FIRMWARE("cxgb3/t3c_psram-" TPSRAM_VERSION ".bin");
1006 MODULE_FIRMWARE(AEL2005_OPT_EDC_NAME);
1007 MODULE_FIRMWARE(AEL2005_TWX_EDC_NAME);
1008 MODULE_FIRMWARE(AEL2020_TWX_EDC_NAME);
1009
1010 static inline const char *get_edc_fw_name(int edc_idx)
1011 {
1012         const char *fw_name = NULL;
1013
1014         switch (edc_idx) {
1015         case EDC_OPT_AEL2005:
1016                 fw_name = AEL2005_OPT_EDC_NAME;
1017                 break;
1018         case EDC_TWX_AEL2005:
1019                 fw_name = AEL2005_TWX_EDC_NAME;
1020                 break;
1021         case EDC_TWX_AEL2020:
1022                 fw_name = AEL2020_TWX_EDC_NAME;
1023                 break;
1024         }
1025         return fw_name;
1026 }
1027
1028 int t3_get_edc_fw(struct cphy *phy, int edc_idx, int size)
1029 {
1030         struct adapter *adapter = phy->adapter;
1031         const struct firmware *fw;
1032         const char *fw_name;
1033         u32 csum;
1034         const __be32 *p;
1035         u16 *cache = phy->phy_cache;
1036         int i, ret = -EINVAL;
1037
1038         fw_name = get_edc_fw_name(edc_idx);
1039         if (fw_name)
1040                 ret = request_firmware(&fw, fw_name, &adapter->pdev->dev);
1041         if (ret < 0) {
1042                 dev_err(&adapter->pdev->dev,
1043                         "could not upgrade firmware: unable to load %s\n",
1044                         fw_name);
1045                 return ret;
1046         }
1047
1048         /* check size, take checksum in account */
1049         if (fw->size > size + 4) {
1050                 CH_ERR(adapter, "firmware image too large %u, expected %d\n",
1051                        (unsigned int)fw->size, size + 4);
1052                 ret = -EINVAL;
1053         }
1054
1055         /* compute checksum */
1056         p = (const __be32 *)fw->data;
1057         for (csum = 0, i = 0; i < fw->size / sizeof(csum); i++)
1058                 csum += ntohl(p[i]);
1059
1060         if (csum != 0xffffffff) {
1061                 CH_ERR(adapter, "corrupted firmware image, checksum %u\n",
1062                        csum);
1063                 ret = -EINVAL;
1064         }
1065
1066         for (i = 0; i < size / 4 ; i++) {
1067                 *cache++ = (be32_to_cpu(p[i]) & 0xffff0000) >> 16;
1068                 *cache++ = be32_to_cpu(p[i]) & 0xffff;
1069         }
1070
1071         release_firmware(fw);
1072
1073         return ret;
1074 }
1075
1076 static int upgrade_fw(struct adapter *adap)
1077 {
1078         int ret;
1079         const struct firmware *fw;
1080         struct device *dev = &adap->pdev->dev;
1081
1082         ret = request_firmware(&fw, FW_FNAME, dev);
1083         if (ret < 0) {
1084                 dev_err(dev, "could not upgrade firmware: unable to load %s\n",
1085                         FW_FNAME);
1086                 return ret;
1087         }
1088         ret = t3_load_fw(adap, fw->data, fw->size);
1089         release_firmware(fw);
1090
1091         if (ret == 0)
1092                 dev_info(dev, "successful upgrade to firmware %d.%d.%d\n",
1093                          FW_VERSION_MAJOR, FW_VERSION_MINOR, FW_VERSION_MICRO);
1094         else
1095                 dev_err(dev, "failed to upgrade to firmware %d.%d.%d\n",
1096                         FW_VERSION_MAJOR, FW_VERSION_MINOR, FW_VERSION_MICRO);
1097
1098         return ret;
1099 }
1100
1101 static inline char t3rev2char(struct adapter *adapter)
1102 {
1103         char rev = 0;
1104
1105         switch(adapter->params.rev) {
1106         case T3_REV_B:
1107         case T3_REV_B2:
1108                 rev = 'b';
1109                 break;
1110         case T3_REV_C:
1111                 rev = 'c';
1112                 break;
1113         }
1114         return rev;
1115 }
1116
1117 static int update_tpsram(struct adapter *adap)
1118 {
1119         const struct firmware *tpsram;
1120         char buf[64];
1121         struct device *dev = &adap->pdev->dev;
1122         int ret;
1123         char rev;
1124
1125         rev = t3rev2char(adap);
1126         if (!rev)
1127                 return 0;
1128
1129         snprintf(buf, sizeof(buf), TPSRAM_NAME, rev);
1130
1131         ret = request_firmware(&tpsram, buf, dev);
1132         if (ret < 0) {
1133                 dev_err(dev, "could not load TP SRAM: unable to load %s\n",
1134                         buf);
1135                 return ret;
1136         }
1137
1138         ret = t3_check_tpsram(adap, tpsram->data, tpsram->size);
1139         if (ret)
1140                 goto release_tpsram;
1141
1142         ret = t3_set_proto_sram(adap, tpsram->data);
1143         if (ret == 0)
1144                 dev_info(dev,
1145                          "successful update of protocol engine "
1146                          "to %d.%d.%d\n",
1147                          TP_VERSION_MAJOR, TP_VERSION_MINOR, TP_VERSION_MICRO);
1148         else
1149                 dev_err(dev, "failed to update of protocol engine %d.%d.%d\n",
1150                         TP_VERSION_MAJOR, TP_VERSION_MINOR, TP_VERSION_MICRO);
1151         if (ret)
1152                 dev_err(dev, "loading protocol SRAM failed\n");
1153
1154 release_tpsram:
1155         release_firmware(tpsram);
1156
1157         return ret;
1158 }
1159
1160 /**
1161  * t3_synchronize_rx - wait for current Rx processing on a port to complete
1162  * @adap: the adapter
1163  * @p: the port
1164  *
1165  * Ensures that current Rx processing on any of the queues associated with
1166  * the given port completes before returning.  We do this by acquiring and
1167  * releasing the locks of the response queues associated with the port.
1168  */
1169 static void t3_synchronize_rx(struct adapter *adap, const struct port_info *p)
1170 {
1171         int i;
1172
1173         for (i = p->first_qset; i < p->first_qset + p->nqsets; i++) {
1174                 struct sge_rspq *q = &adap->sge.qs[i].rspq;
1175
1176                 spin_lock_irq(&q->lock);
1177                 spin_unlock_irq(&q->lock);
1178         }
1179 }
1180
1181 static void cxgb_vlan_mode(struct net_device *dev, netdev_features_t features)
1182 {
1183         struct port_info *pi = netdev_priv(dev);
1184         struct adapter *adapter = pi->adapter;
1185
1186         if (adapter->params.rev > 0) {
1187                 t3_set_vlan_accel(adapter, 1 << pi->port_id,
1188                                   features & NETIF_F_HW_VLAN_CTAG_RX);
1189         } else {
1190                 /* single control for all ports */
1191                 unsigned int i, have_vlans = features & NETIF_F_HW_VLAN_CTAG_RX;
1192
1193                 for_each_port(adapter, i)
1194                         have_vlans |=
1195                                 adapter->port[i]->features &
1196                                 NETIF_F_HW_VLAN_CTAG_RX;
1197
1198                 t3_set_vlan_accel(adapter, 1, have_vlans);
1199         }
1200         t3_synchronize_rx(adapter, pi);
1201 }
1202
1203 /**
1204  *      cxgb_up - enable the adapter
1205  *      @adapter: adapter being enabled
1206  *
1207  *      Called when the first port is enabled, this function performs the
1208  *      actions necessary to make an adapter operational, such as completing
1209  *      the initialization of HW modules, and enabling interrupts.
1210  *
1211  *      Must be called with the rtnl lock held.
1212  */
1213 static int cxgb_up(struct adapter *adap)
1214 {
1215         int i, err;
1216
1217         if (!(adap->flags & FULL_INIT_DONE)) {
1218                 err = t3_check_fw_version(adap);
1219                 if (err == -EINVAL) {
1220                         err = upgrade_fw(adap);
1221                         CH_WARN(adap, "FW upgrade to %d.%d.%d %s\n",
1222                                 FW_VERSION_MAJOR, FW_VERSION_MINOR,
1223                                 FW_VERSION_MICRO, err ? "failed" : "succeeded");
1224                 }
1225
1226                 err = t3_check_tpsram_version(adap);
1227                 if (err == -EINVAL) {
1228                         err = update_tpsram(adap);
1229                         CH_WARN(adap, "TP upgrade to %d.%d.%d %s\n",
1230                                 TP_VERSION_MAJOR, TP_VERSION_MINOR,
1231                                 TP_VERSION_MICRO, err ? "failed" : "succeeded");
1232                 }
1233
1234                 /*
1235                  * Clear interrupts now to catch errors if t3_init_hw fails.
1236                  * We clear them again later as initialization may trigger
1237                  * conditions that can interrupt.
1238                  */
1239                 t3_intr_clear(adap);
1240
1241                 err = t3_init_hw(adap, 0);
1242                 if (err)
1243                         goto out;
1244
1245                 t3_set_reg_field(adap, A_TP_PARA_REG5, 0, F_RXDDPOFFINIT);
1246                 t3_write_reg(adap, A_ULPRX_TDDP_PSZ, V_HPZ0(PAGE_SHIFT - 12));
1247
1248                 err = setup_sge_qsets(adap);
1249                 if (err)
1250                         goto out;
1251
1252                 for_each_port(adap, i)
1253                         cxgb_vlan_mode(adap->port[i], adap->port[i]->features);
1254
1255                 setup_rss(adap);
1256                 if (!(adap->flags & NAPI_INIT))
1257                         init_napi(adap);
1258
1259                 t3_start_sge_timers(adap);
1260                 adap->flags |= FULL_INIT_DONE;
1261         }
1262
1263         t3_intr_clear(adap);
1264
1265         if (adap->flags & USING_MSIX) {
1266                 name_msix_vecs(adap);
1267                 err = request_irq(adap->msix_info[0].vec,
1268                                   t3_async_intr_handler, 0,
1269                                   adap->msix_info[0].desc, adap);
1270                 if (err)
1271                         goto irq_err;
1272
1273                 err = request_msix_data_irqs(adap);
1274                 if (err) {
1275                         free_irq(adap->msix_info[0].vec, adap);
1276                         goto irq_err;
1277                 }
1278         } else if ((err = request_irq(adap->pdev->irq,
1279                                       t3_intr_handler(adap,
1280                                                       adap->sge.qs[0].rspq.
1281                                                       polling),
1282                                       (adap->flags & USING_MSI) ?
1283                                        0 : IRQF_SHARED,
1284                                       adap->name, adap)))
1285                 goto irq_err;
1286
1287         enable_all_napi(adap);
1288         t3_sge_start(adap);
1289         t3_intr_enable(adap);
1290
1291         if (adap->params.rev >= T3_REV_C && !(adap->flags & TP_PARITY_INIT) &&
1292             is_offload(adap) && init_tp_parity(adap) == 0)
1293                 adap->flags |= TP_PARITY_INIT;
1294
1295         if (adap->flags & TP_PARITY_INIT) {
1296                 t3_write_reg(adap, A_TP_INT_CAUSE,
1297                              F_CMCACHEPERR | F_ARPLUTPERR);
1298                 t3_write_reg(adap, A_TP_INT_ENABLE, 0x7fbfffff);
1299         }
1300
1301         if (!(adap->flags & QUEUES_BOUND)) {
1302                 int ret = bind_qsets(adap);
1303
1304                 if (ret < 0) {
1305                         CH_ERR(adap, "failed to bind qsets, err %d\n", ret);
1306                         t3_intr_disable(adap);
1307                         free_irq_resources(adap);
1308                         err = ret;
1309                         goto out;
1310                 }
1311                 adap->flags |= QUEUES_BOUND;
1312         }
1313
1314 out:
1315         return err;
1316 irq_err:
1317         CH_ERR(adap, "request_irq failed, err %d\n", err);
1318         goto out;
1319 }
1320
1321 /*
1322  * Release resources when all the ports and offloading have been stopped.
1323  */
1324 static void cxgb_down(struct adapter *adapter, int on_wq)
1325 {
1326         t3_sge_stop(adapter);
1327         spin_lock_irq(&adapter->work_lock);     /* sync with PHY intr task */
1328         t3_intr_disable(adapter);
1329         spin_unlock_irq(&adapter->work_lock);
1330
1331         free_irq_resources(adapter);
1332         quiesce_rx(adapter);
1333         t3_sge_stop(adapter);
1334         if (!on_wq)
1335                 flush_workqueue(cxgb3_wq);/* wait for external IRQ handler */
1336 }
1337
1338 static void schedule_chk_task(struct adapter *adap)
1339 {
1340         unsigned int timeo;
1341
1342         timeo = adap->params.linkpoll_period ?
1343             (HZ * adap->params.linkpoll_period) / 10 :
1344             adap->params.stats_update_period * HZ;
1345         if (timeo)
1346                 queue_delayed_work(cxgb3_wq, &adap->adap_check_task, timeo);
1347 }
1348
1349 static int offload_open(struct net_device *dev)
1350 {
1351         struct port_info *pi = netdev_priv(dev);
1352         struct adapter *adapter = pi->adapter;
1353         struct t3cdev *tdev = dev2t3cdev(dev);
1354         int adap_up = adapter->open_device_map & PORT_MASK;
1355         int err;
1356
1357         if (test_and_set_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map))
1358                 return 0;
1359
1360         if (!adap_up && (err = cxgb_up(adapter)) < 0)
1361                 goto out;
1362
1363         t3_tp_set_offload_mode(adapter, 1);
1364         tdev->lldev = adapter->port[0];
1365         err = cxgb3_offload_activate(adapter);
1366         if (err)
1367                 goto out;
1368
1369         init_port_mtus(adapter);
1370         t3_load_mtus(adapter, adapter->params.mtus, adapter->params.a_wnd,
1371                      adapter->params.b_wnd,
1372                      adapter->params.rev == 0 ?
1373                      adapter->port[0]->mtu : 0xffff);
1374         init_smt(adapter);
1375
1376         if (sysfs_create_group(&tdev->lldev->dev.kobj, &offload_attr_group))
1377                 dev_dbg(&dev->dev, "cannot create sysfs group\n");
1378
1379         /* Call back all registered clients */
1380         cxgb3_add_clients(tdev);
1381
1382 out:
1383         /* restore them in case the offload module has changed them */
1384         if (err) {
1385                 t3_tp_set_offload_mode(adapter, 0);
1386                 clear_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map);
1387                 cxgb3_set_dummy_ops(tdev);
1388         }
1389         return err;
1390 }
1391
1392 static int offload_close(struct t3cdev *tdev)
1393 {
1394         struct adapter *adapter = tdev2adap(tdev);
1395         struct t3c_data *td = T3C_DATA(tdev);
1396
1397         if (!test_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map))
1398                 return 0;
1399
1400         /* Call back all registered clients */
1401         cxgb3_remove_clients(tdev);
1402
1403         sysfs_remove_group(&tdev->lldev->dev.kobj, &offload_attr_group);
1404
1405         /* Flush work scheduled while releasing TIDs */
1406         flush_work(&td->tid_release_task);
1407
1408         tdev->lldev = NULL;
1409         cxgb3_set_dummy_ops(tdev);
1410         t3_tp_set_offload_mode(adapter, 0);
1411         clear_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map);
1412
1413         if (!adapter->open_device_map)
1414                 cxgb_down(adapter, 0);
1415
1416         cxgb3_offload_deactivate(adapter);
1417         return 0;
1418 }
1419
1420 static int cxgb_open(struct net_device *dev)
1421 {
1422         struct port_info *pi = netdev_priv(dev);
1423         struct adapter *adapter = pi->adapter;
1424         int other_ports = adapter->open_device_map & PORT_MASK;
1425         int err;
1426
1427         if (!adapter->open_device_map && (err = cxgb_up(adapter)) < 0)
1428                 return err;
1429
1430         set_bit(pi->port_id, &adapter->open_device_map);
1431         if (is_offload(adapter) && !ofld_disable) {
1432                 err = offload_open(dev);
1433                 if (err)
1434                         pr_warn("Could not initialize offload capabilities\n");
1435         }
1436
1437         netif_set_real_num_tx_queues(dev, pi->nqsets);
1438         err = netif_set_real_num_rx_queues(dev, pi->nqsets);
1439         if (err)
1440                 return err;
1441         link_start(dev);
1442         t3_port_intr_enable(adapter, pi->port_id);
1443         netif_tx_start_all_queues(dev);
1444         if (!other_ports)
1445                 schedule_chk_task(adapter);
1446
1447         cxgb3_event_notify(&adapter->tdev, OFFLOAD_PORT_UP, pi->port_id);
1448         return 0;
1449 }
1450
1451 static int __cxgb_close(struct net_device *dev, int on_wq)
1452 {
1453         struct port_info *pi = netdev_priv(dev);
1454         struct adapter *adapter = pi->adapter;
1455
1456         
1457         if (!adapter->open_device_map)
1458                 return 0;
1459
1460         /* Stop link fault interrupts */
1461         t3_xgm_intr_disable(adapter, pi->port_id);
1462         t3_read_reg(adapter, A_XGM_INT_STATUS + pi->mac.offset);
1463
1464         t3_port_intr_disable(adapter, pi->port_id);
1465         netif_tx_stop_all_queues(dev);
1466         pi->phy.ops->power_down(&pi->phy, 1);
1467         netif_carrier_off(dev);
1468         t3_mac_disable(&pi->mac, MAC_DIRECTION_TX | MAC_DIRECTION_RX);
1469
1470         spin_lock_irq(&adapter->work_lock);     /* sync with update task */
1471         clear_bit(pi->port_id, &adapter->open_device_map);
1472         spin_unlock_irq(&adapter->work_lock);
1473
1474         if (!(adapter->open_device_map & PORT_MASK))
1475                 cancel_delayed_work_sync(&adapter->adap_check_task);
1476
1477         if (!adapter->open_device_map)
1478                 cxgb_down(adapter, on_wq);
1479
1480         cxgb3_event_notify(&adapter->tdev, OFFLOAD_PORT_DOWN, pi->port_id);
1481         return 0;
1482 }
1483
1484 static int cxgb_close(struct net_device *dev)
1485 {
1486         return __cxgb_close(dev, 0);
1487 }
1488
1489 static struct net_device_stats *cxgb_get_stats(struct net_device *dev)
1490 {
1491         struct port_info *pi = netdev_priv(dev);
1492         struct adapter *adapter = pi->adapter;
1493         struct net_device_stats *ns = &dev->stats;
1494         const struct mac_stats *pstats;
1495
1496         spin_lock(&adapter->stats_lock);
1497         pstats = t3_mac_update_stats(&pi->mac);
1498         spin_unlock(&adapter->stats_lock);
1499
1500         ns->tx_bytes = pstats->tx_octets;
1501         ns->tx_packets = pstats->tx_frames;
1502         ns->rx_bytes = pstats->rx_octets;
1503         ns->rx_packets = pstats->rx_frames;
1504         ns->multicast = pstats->rx_mcast_frames;
1505
1506         ns->tx_errors = pstats->tx_underrun;
1507         ns->rx_errors = pstats->rx_symbol_errs + pstats->rx_fcs_errs +
1508             pstats->rx_too_long + pstats->rx_jabber + pstats->rx_short +
1509             pstats->rx_fifo_ovfl;
1510
1511         /* detailed rx_errors */
1512         ns->rx_length_errors = pstats->rx_jabber + pstats->rx_too_long;
1513         ns->rx_over_errors = 0;
1514         ns->rx_crc_errors = pstats->rx_fcs_errs;
1515         ns->rx_frame_errors = pstats->rx_symbol_errs;
1516         ns->rx_fifo_errors = pstats->rx_fifo_ovfl;
1517         ns->rx_missed_errors = pstats->rx_cong_drops;
1518
1519         /* detailed tx_errors */
1520         ns->tx_aborted_errors = 0;
1521         ns->tx_carrier_errors = 0;
1522         ns->tx_fifo_errors = pstats->tx_underrun;
1523         ns->tx_heartbeat_errors = 0;
1524         ns->tx_window_errors = 0;
1525         return ns;
1526 }
1527
1528 static u32 get_msglevel(struct net_device *dev)
1529 {
1530         struct port_info *pi = netdev_priv(dev);
1531         struct adapter *adapter = pi->adapter;
1532
1533         return adapter->msg_enable;
1534 }
1535
1536 static void set_msglevel(struct net_device *dev, u32 val)
1537 {
1538         struct port_info *pi = netdev_priv(dev);
1539         struct adapter *adapter = pi->adapter;
1540
1541         adapter->msg_enable = val;
1542 }
1543
1544 static const char stats_strings[][ETH_GSTRING_LEN] = {
1545         "TxOctetsOK         ",
1546         "TxFramesOK         ",
1547         "TxMulticastFramesOK",
1548         "TxBroadcastFramesOK",
1549         "TxPauseFrames      ",
1550         "TxUnderrun         ",
1551         "TxExtUnderrun      ",
1552
1553         "TxFrames64         ",
1554         "TxFrames65To127    ",
1555         "TxFrames128To255   ",
1556         "TxFrames256To511   ",
1557         "TxFrames512To1023  ",
1558         "TxFrames1024To1518 ",
1559         "TxFrames1519ToMax  ",
1560
1561         "RxOctetsOK         ",
1562         "RxFramesOK         ",
1563         "RxMulticastFramesOK",
1564         "RxBroadcastFramesOK",
1565         "RxPauseFrames      ",
1566         "RxFCSErrors        ",
1567         "RxSymbolErrors     ",
1568         "RxShortErrors      ",
1569         "RxJabberErrors     ",
1570         "RxLengthErrors     ",
1571         "RxFIFOoverflow     ",
1572
1573         "RxFrames64         ",
1574         "RxFrames65To127    ",
1575         "RxFrames128To255   ",
1576         "RxFrames256To511   ",
1577         "RxFrames512To1023  ",
1578         "RxFrames1024To1518 ",
1579         "RxFrames1519ToMax  ",
1580
1581         "PhyFIFOErrors      ",
1582         "TSO                ",
1583         "VLANextractions    ",
1584         "VLANinsertions     ",
1585         "TxCsumOffload      ",
1586         "RxCsumGood         ",
1587         "LroAggregated      ",
1588         "LroFlushed         ",
1589         "LroNoDesc          ",
1590         "RxDrops            ",
1591
1592         "CheckTXEnToggled   ",
1593         "CheckResets        ",
1594
1595         "LinkFaults         ",
1596 };
1597
1598 static int get_sset_count(struct net_device *dev, int sset)
1599 {
1600         switch (sset) {
1601         case ETH_SS_STATS:
1602                 return ARRAY_SIZE(stats_strings);
1603         default:
1604                 return -EOPNOTSUPP;
1605         }
1606 }
1607
1608 #define T3_REGMAP_SIZE (3 * 1024)
1609
1610 static int get_regs_len(struct net_device *dev)
1611 {
1612         return T3_REGMAP_SIZE;
1613 }
1614
1615 static int get_eeprom_len(struct net_device *dev)
1616 {
1617         return EEPROMSIZE;
1618 }
1619
1620 static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
1621 {
1622         struct port_info *pi = netdev_priv(dev);
1623         struct adapter *adapter = pi->adapter;
1624         u32 fw_vers = 0;
1625         u32 tp_vers = 0;
1626
1627         spin_lock(&adapter->stats_lock);
1628         t3_get_fw_version(adapter, &fw_vers);
1629         t3_get_tp_version(adapter, &tp_vers);
1630         spin_unlock(&adapter->stats_lock);
1631
1632         strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
1633         strlcpy(info->version, DRV_VERSION, sizeof(info->version));
1634         strlcpy(info->bus_info, pci_name(adapter->pdev),
1635                 sizeof(info->bus_info));
1636         if (fw_vers)
1637                 snprintf(info->fw_version, sizeof(info->fw_version),
1638                          "%s %u.%u.%u TP %u.%u.%u",
1639                          G_FW_VERSION_TYPE(fw_vers) ? "T" : "N",
1640                          G_FW_VERSION_MAJOR(fw_vers),
1641                          G_FW_VERSION_MINOR(fw_vers),
1642                          G_FW_VERSION_MICRO(fw_vers),
1643                          G_TP_VERSION_MAJOR(tp_vers),
1644                          G_TP_VERSION_MINOR(tp_vers),
1645                          G_TP_VERSION_MICRO(tp_vers));
1646 }
1647
1648 static void get_strings(struct net_device *dev, u32 stringset, u8 * data)
1649 {
1650         if (stringset == ETH_SS_STATS)
1651                 memcpy(data, stats_strings, sizeof(stats_strings));
1652 }
1653
1654 static unsigned long collect_sge_port_stats(struct adapter *adapter,
1655                                             struct port_info *p, int idx)
1656 {
1657         int i;
1658         unsigned long tot = 0;
1659
1660         for (i = p->first_qset; i < p->first_qset + p->nqsets; ++i)
1661                 tot += adapter->sge.qs[i].port_stats[idx];
1662         return tot;
1663 }
1664
1665 static void get_stats(struct net_device *dev, struct ethtool_stats *stats,
1666                       u64 *data)
1667 {
1668         struct port_info *pi = netdev_priv(dev);
1669         struct adapter *adapter = pi->adapter;
1670         const struct mac_stats *s;
1671
1672         spin_lock(&adapter->stats_lock);
1673         s = t3_mac_update_stats(&pi->mac);
1674         spin_unlock(&adapter->stats_lock);
1675
1676         *data++ = s->tx_octets;
1677         *data++ = s->tx_frames;
1678         *data++ = s->tx_mcast_frames;
1679         *data++ = s->tx_bcast_frames;
1680         *data++ = s->tx_pause;
1681         *data++ = s->tx_underrun;
1682         *data++ = s->tx_fifo_urun;
1683
1684         *data++ = s->tx_frames_64;
1685         *data++ = s->tx_frames_65_127;
1686         *data++ = s->tx_frames_128_255;
1687         *data++ = s->tx_frames_256_511;
1688         *data++ = s->tx_frames_512_1023;
1689         *data++ = s->tx_frames_1024_1518;
1690         *data++ = s->tx_frames_1519_max;
1691
1692         *data++ = s->rx_octets;
1693         *data++ = s->rx_frames;
1694         *data++ = s->rx_mcast_frames;
1695         *data++ = s->rx_bcast_frames;
1696         *data++ = s->rx_pause;
1697         *data++ = s->rx_fcs_errs;
1698         *data++ = s->rx_symbol_errs;
1699         *data++ = s->rx_short;
1700         *data++ = s->rx_jabber;
1701         *data++ = s->rx_too_long;
1702         *data++ = s->rx_fifo_ovfl;
1703
1704         *data++ = s->rx_frames_64;
1705         *data++ = s->rx_frames_65_127;
1706         *data++ = s->rx_frames_128_255;
1707         *data++ = s->rx_frames_256_511;
1708         *data++ = s->rx_frames_512_1023;
1709         *data++ = s->rx_frames_1024_1518;
1710         *data++ = s->rx_frames_1519_max;
1711
1712         *data++ = pi->phy.fifo_errors;
1713
1714         *data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_TSO);
1715         *data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_VLANEX);
1716         *data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_VLANINS);
1717         *data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_TX_CSUM);
1718         *data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_RX_CSUM_GOOD);
1719         *data++ = 0;
1720         *data++ = 0;
1721         *data++ = 0;
1722         *data++ = s->rx_cong_drops;
1723
1724         *data++ = s->num_toggled;
1725         *data++ = s->num_resets;
1726
1727         *data++ = s->link_faults;
1728 }
1729
1730 static inline void reg_block_dump(struct adapter *ap, void *buf,
1731                                   unsigned int start, unsigned int end)
1732 {
1733         u32 *p = buf + start;
1734
1735         for (; start <= end; start += sizeof(u32))
1736                 *p++ = t3_read_reg(ap, start);
1737 }
1738
1739 static void get_regs(struct net_device *dev, struct ethtool_regs *regs,
1740                      void *buf)
1741 {
1742         struct port_info *pi = netdev_priv(dev);
1743         struct adapter *ap = pi->adapter;
1744
1745         /*
1746          * Version scheme:
1747          * bits 0..9: chip version
1748          * bits 10..15: chip revision
1749          * bit 31: set for PCIe cards
1750          */
1751         regs->version = 3 | (ap->params.rev << 10) | (is_pcie(ap) << 31);
1752
1753         /*
1754          * We skip the MAC statistics registers because they are clear-on-read.
1755          * Also reading multi-register stats would need to synchronize with the
1756          * periodic mac stats accumulation.  Hard to justify the complexity.
1757          */
1758         memset(buf, 0, T3_REGMAP_SIZE);
1759         reg_block_dump(ap, buf, 0, A_SG_RSPQ_CREDIT_RETURN);
1760         reg_block_dump(ap, buf, A_SG_HI_DRB_HI_THRSH, A_ULPRX_PBL_ULIMIT);
1761         reg_block_dump(ap, buf, A_ULPTX_CONFIG, A_MPS_INT_CAUSE);
1762         reg_block_dump(ap, buf, A_CPL_SWITCH_CNTRL, A_CPL_MAP_TBL_DATA);
1763         reg_block_dump(ap, buf, A_SMB_GLOBAL_TIME_CFG, A_XGM_SERDES_STAT3);
1764         reg_block_dump(ap, buf, A_XGM_SERDES_STATUS0,
1765                        XGM_REG(A_XGM_SERDES_STAT3, 1));
1766         reg_block_dump(ap, buf, XGM_REG(A_XGM_SERDES_STATUS0, 1),
1767                        XGM_REG(A_XGM_RX_SPI4_SOP_EOP_CNT, 1));
1768 }
1769
1770 static int restart_autoneg(struct net_device *dev)
1771 {
1772         struct port_info *p = netdev_priv(dev);
1773
1774         if (!netif_running(dev))
1775                 return -EAGAIN;
1776         if (p->link_config.autoneg != AUTONEG_ENABLE)
1777                 return -EINVAL;
1778         p->phy.ops->autoneg_restart(&p->phy);
1779         return 0;
1780 }
1781
1782 static int set_phys_id(struct net_device *dev,
1783                        enum ethtool_phys_id_state state)
1784 {
1785         struct port_info *pi = netdev_priv(dev);
1786         struct adapter *adapter = pi->adapter;
1787
1788         switch (state) {
1789         case ETHTOOL_ID_ACTIVE:
1790                 return 1;       /* cycle on/off once per second */
1791
1792         case ETHTOOL_ID_OFF:
1793                 t3_set_reg_field(adapter, A_T3DBG_GPIO_EN, F_GPIO0_OUT_VAL, 0);
1794                 break;
1795
1796         case ETHTOOL_ID_ON:
1797         case ETHTOOL_ID_INACTIVE:
1798                 t3_set_reg_field(adapter, A_T3DBG_GPIO_EN, F_GPIO0_OUT_VAL,
1799                          F_GPIO0_OUT_VAL);
1800         }
1801
1802         return 0;
1803 }
1804
1805 static int get_link_ksettings(struct net_device *dev,
1806                               struct ethtool_link_ksettings *cmd)
1807 {
1808         struct port_info *p = netdev_priv(dev);
1809         u32 supported;
1810
1811         ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
1812                                                 p->link_config.supported);
1813         ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising,
1814                                                 p->link_config.advertising);
1815
1816         if (netif_carrier_ok(dev)) {
1817                 cmd->base.speed = p->link_config.speed;
1818                 cmd->base.duplex = p->link_config.duplex;
1819         } else {
1820                 cmd->base.speed = SPEED_UNKNOWN;
1821                 cmd->base.duplex = DUPLEX_UNKNOWN;
1822         }
1823
1824         ethtool_convert_link_mode_to_legacy_u32(&supported,
1825                                                 cmd->link_modes.supported);
1826
1827         cmd->base.port = (supported & SUPPORTED_TP) ? PORT_TP : PORT_FIBRE;
1828         cmd->base.phy_address = p->phy.mdio.prtad;
1829         cmd->base.autoneg = p->link_config.autoneg;
1830         return 0;
1831 }
1832
1833 static int speed_duplex_to_caps(int speed, int duplex)
1834 {
1835         int cap = 0;
1836
1837         switch (speed) {
1838         case SPEED_10:
1839                 if (duplex == DUPLEX_FULL)
1840                         cap = SUPPORTED_10baseT_Full;
1841                 else
1842                         cap = SUPPORTED_10baseT_Half;
1843                 break;
1844         case SPEED_100:
1845                 if (duplex == DUPLEX_FULL)
1846                         cap = SUPPORTED_100baseT_Full;
1847                 else
1848                         cap = SUPPORTED_100baseT_Half;
1849                 break;
1850         case SPEED_1000:
1851                 if (duplex == DUPLEX_FULL)
1852                         cap = SUPPORTED_1000baseT_Full;
1853                 else
1854                         cap = SUPPORTED_1000baseT_Half;
1855                 break;
1856         case SPEED_10000:
1857                 if (duplex == DUPLEX_FULL)
1858                         cap = SUPPORTED_10000baseT_Full;
1859         }
1860         return cap;
1861 }
1862
1863 #define ADVERTISED_MASK (ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full | \
1864                       ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full | \
1865                       ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full | \
1866                       ADVERTISED_10000baseT_Full)
1867
1868 static int set_link_ksettings(struct net_device *dev,
1869                               const struct ethtool_link_ksettings *cmd)
1870 {
1871         struct port_info *p = netdev_priv(dev);
1872         struct link_config *lc = &p->link_config;
1873         u32 advertising;
1874
1875         ethtool_convert_link_mode_to_legacy_u32(&advertising,
1876                                                 cmd->link_modes.advertising);
1877
1878         if (!(lc->supported & SUPPORTED_Autoneg)) {
1879                 /*
1880                  * PHY offers a single speed/duplex.  See if that's what's
1881                  * being requested.
1882                  */
1883                 if (cmd->base.autoneg == AUTONEG_DISABLE) {
1884                         u32 speed = cmd->base.speed;
1885                         int cap = speed_duplex_to_caps(speed, cmd->base.duplex);
1886                         if (lc->supported & cap)
1887                                 return 0;
1888                 }
1889                 return -EINVAL;
1890         }
1891
1892         if (cmd->base.autoneg == AUTONEG_DISABLE) {
1893                 u32 speed = cmd->base.speed;
1894                 int cap = speed_duplex_to_caps(speed, cmd->base.duplex);
1895
1896                 if (!(lc->supported & cap) || (speed == SPEED_1000))
1897                         return -EINVAL;
1898                 lc->requested_speed = speed;
1899                 lc->requested_duplex = cmd->base.duplex;
1900                 lc->advertising = 0;
1901         } else {
1902                 advertising &= ADVERTISED_MASK;
1903                 advertising &= lc->supported;
1904                 if (!advertising)
1905                         return -EINVAL;
1906                 lc->requested_speed = SPEED_INVALID;
1907                 lc->requested_duplex = DUPLEX_INVALID;
1908                 lc->advertising = advertising | ADVERTISED_Autoneg;
1909         }
1910         lc->autoneg = cmd->base.autoneg;
1911         if (netif_running(dev))
1912                 t3_link_start(&p->phy, &p->mac, lc);
1913         return 0;
1914 }
1915
1916 static void get_pauseparam(struct net_device *dev,
1917                            struct ethtool_pauseparam *epause)
1918 {
1919         struct port_info *p = netdev_priv(dev);
1920
1921         epause->autoneg = (p->link_config.requested_fc & PAUSE_AUTONEG) != 0;
1922         epause->rx_pause = (p->link_config.fc & PAUSE_RX) != 0;
1923         epause->tx_pause = (p->link_config.fc & PAUSE_TX) != 0;
1924 }
1925
1926 static int set_pauseparam(struct net_device *dev,
1927                           struct ethtool_pauseparam *epause)
1928 {
1929         struct port_info *p = netdev_priv(dev);
1930         struct link_config *lc = &p->link_config;
1931
1932         if (epause->autoneg == AUTONEG_DISABLE)
1933                 lc->requested_fc = 0;
1934         else if (lc->supported & SUPPORTED_Autoneg)
1935                 lc->requested_fc = PAUSE_AUTONEG;
1936         else
1937                 return -EINVAL;
1938
1939         if (epause->rx_pause)
1940                 lc->requested_fc |= PAUSE_RX;
1941         if (epause->tx_pause)
1942                 lc->requested_fc |= PAUSE_TX;
1943         if (lc->autoneg == AUTONEG_ENABLE) {
1944                 if (netif_running(dev))
1945                         t3_link_start(&p->phy, &p->mac, lc);
1946         } else {
1947                 lc->fc = lc->requested_fc & (PAUSE_RX | PAUSE_TX);
1948                 if (netif_running(dev))
1949                         t3_mac_set_speed_duplex_fc(&p->mac, -1, -1, lc->fc);
1950         }
1951         return 0;
1952 }
1953
1954 static void get_sge_param(struct net_device *dev, struct ethtool_ringparam *e)
1955 {
1956         struct port_info *pi = netdev_priv(dev);
1957         struct adapter *adapter = pi->adapter;
1958         const struct qset_params *q = &adapter->params.sge.qset[pi->first_qset];
1959
1960         e->rx_max_pending = MAX_RX_BUFFERS;
1961         e->rx_jumbo_max_pending = MAX_RX_JUMBO_BUFFERS;
1962         e->tx_max_pending = MAX_TXQ_ENTRIES;
1963
1964         e->rx_pending = q->fl_size;
1965         e->rx_mini_pending = q->rspq_size;
1966         e->rx_jumbo_pending = q->jumbo_size;
1967         e->tx_pending = q->txq_size[0];
1968 }
1969
1970 static int set_sge_param(struct net_device *dev, struct ethtool_ringparam *e)
1971 {
1972         struct port_info *pi = netdev_priv(dev);
1973         struct adapter *adapter = pi->adapter;
1974         struct qset_params *q;
1975         int i;
1976
1977         if (e->rx_pending > MAX_RX_BUFFERS ||
1978             e->rx_jumbo_pending > MAX_RX_JUMBO_BUFFERS ||
1979             e->tx_pending > MAX_TXQ_ENTRIES ||
1980             e->rx_mini_pending > MAX_RSPQ_ENTRIES ||
1981             e->rx_mini_pending < MIN_RSPQ_ENTRIES ||
1982             e->rx_pending < MIN_FL_ENTRIES ||
1983             e->rx_jumbo_pending < MIN_FL_ENTRIES ||
1984             e->tx_pending < adapter->params.nports * MIN_TXQ_ENTRIES)
1985                 return -EINVAL;
1986
1987         if (adapter->flags & FULL_INIT_DONE)
1988                 return -EBUSY;
1989
1990         q = &adapter->params.sge.qset[pi->first_qset];
1991         for (i = 0; i < pi->nqsets; ++i, ++q) {
1992                 q->rspq_size = e->rx_mini_pending;
1993                 q->fl_size = e->rx_pending;
1994                 q->jumbo_size = e->rx_jumbo_pending;
1995                 q->txq_size[0] = e->tx_pending;
1996                 q->txq_size[1] = e->tx_pending;
1997                 q->txq_size[2] = e->tx_pending;
1998         }
1999         return 0;
2000 }
2001
2002 static int set_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
2003 {
2004         struct port_info *pi = netdev_priv(dev);
2005         struct adapter *adapter = pi->adapter;
2006         struct qset_params *qsp;
2007         struct sge_qset *qs;
2008         int i;
2009
2010         if (c->rx_coalesce_usecs * 10 > M_NEWTIMER)
2011                 return -EINVAL;
2012
2013         for (i = 0; i < pi->nqsets; i++) {
2014                 qsp = &adapter->params.sge.qset[i];
2015                 qs = &adapter->sge.qs[i];
2016                 qsp->coalesce_usecs = c->rx_coalesce_usecs;
2017                 t3_update_qset_coalesce(qs, qsp);
2018         }
2019
2020         return 0;
2021 }
2022
2023 static int get_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
2024 {
2025         struct port_info *pi = netdev_priv(dev);
2026         struct adapter *adapter = pi->adapter;
2027         struct qset_params *q = adapter->params.sge.qset;
2028
2029         c->rx_coalesce_usecs = q->coalesce_usecs;
2030         return 0;
2031 }
2032
2033 static int get_eeprom(struct net_device *dev, struct ethtool_eeprom *e,
2034                       u8 * data)
2035 {
2036         struct port_info *pi = netdev_priv(dev);
2037         struct adapter *adapter = pi->adapter;
2038         int i, err = 0;
2039
2040         u8 *buf = kmalloc(EEPROMSIZE, GFP_KERNEL);
2041         if (!buf)
2042                 return -ENOMEM;
2043
2044         e->magic = EEPROM_MAGIC;
2045         for (i = e->offset & ~3; !err && i < e->offset + e->len; i += 4)
2046                 err = t3_seeprom_read(adapter, i, (__le32 *) & buf[i]);
2047
2048         if (!err)
2049                 memcpy(data, buf + e->offset, e->len);
2050         kfree(buf);
2051         return err;
2052 }
2053
2054 static int set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom,
2055                       u8 * data)
2056 {
2057         struct port_info *pi = netdev_priv(dev);
2058         struct adapter *adapter = pi->adapter;
2059         u32 aligned_offset, aligned_len;
2060         __le32 *p;
2061         u8 *buf;
2062         int err;
2063
2064         if (eeprom->magic != EEPROM_MAGIC)
2065                 return -EINVAL;
2066
2067         aligned_offset = eeprom->offset & ~3;
2068         aligned_len = (eeprom->len + (eeprom->offset & 3) + 3) & ~3;
2069
2070         if (aligned_offset != eeprom->offset || aligned_len != eeprom->len) {
2071                 buf = kmalloc(aligned_len, GFP_KERNEL);
2072                 if (!buf)
2073                         return -ENOMEM;
2074                 err = t3_seeprom_read(adapter, aligned_offset, (__le32 *) buf);
2075                 if (!err && aligned_len > 4)
2076                         err = t3_seeprom_read(adapter,
2077                                               aligned_offset + aligned_len - 4,
2078                                               (__le32 *) & buf[aligned_len - 4]);
2079                 if (err)
2080                         goto out;
2081                 memcpy(buf + (eeprom->offset & 3), data, eeprom->len);
2082         } else
2083                 buf = data;
2084
2085         err = t3_seeprom_wp(adapter, 0);
2086         if (err)
2087                 goto out;
2088
2089         for (p = (__le32 *) buf; !err && aligned_len; aligned_len -= 4, p++) {
2090                 err = t3_seeprom_write(adapter, aligned_offset, *p);
2091                 aligned_offset += 4;
2092         }
2093
2094         if (!err)
2095                 err = t3_seeprom_wp(adapter, 1);
2096 out:
2097         if (buf != data)
2098                 kfree(buf);
2099         return err;
2100 }
2101
2102 static void get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
2103 {
2104         wol->supported = 0;
2105         wol->wolopts = 0;
2106         memset(&wol->sopass, 0, sizeof(wol->sopass));
2107 }
2108
2109 static const struct ethtool_ops cxgb_ethtool_ops = {
2110         .get_drvinfo = get_drvinfo,
2111         .get_msglevel = get_msglevel,
2112         .set_msglevel = set_msglevel,
2113         .get_ringparam = get_sge_param,
2114         .set_ringparam = set_sge_param,
2115         .get_coalesce = get_coalesce,
2116         .set_coalesce = set_coalesce,
2117         .get_eeprom_len = get_eeprom_len,
2118         .get_eeprom = get_eeprom,
2119         .set_eeprom = set_eeprom,
2120         .get_pauseparam = get_pauseparam,
2121         .set_pauseparam = set_pauseparam,
2122         .get_link = ethtool_op_get_link,
2123         .get_strings = get_strings,
2124         .set_phys_id = set_phys_id,
2125         .nway_reset = restart_autoneg,
2126         .get_sset_count = get_sset_count,
2127         .get_ethtool_stats = get_stats,
2128         .get_regs_len = get_regs_len,
2129         .get_regs = get_regs,
2130         .get_wol = get_wol,
2131         .get_link_ksettings = get_link_ksettings,
2132         .set_link_ksettings = set_link_ksettings,
2133 };
2134
2135 static int in_range(int val, int lo, int hi)
2136 {
2137         return val < 0 || (val <= hi && val >= lo);
2138 }
2139
2140 static int cxgb_extension_ioctl(struct net_device *dev, void __user *useraddr)
2141 {
2142         struct port_info *pi = netdev_priv(dev);
2143         struct adapter *adapter = pi->adapter;
2144         u32 cmd;
2145         int ret;
2146
2147         if (copy_from_user(&cmd, useraddr, sizeof(cmd)))
2148                 return -EFAULT;
2149
2150         switch (cmd) {
2151         case CHELSIO_SET_QSET_PARAMS:{
2152                 int i;
2153                 struct qset_params *q;
2154                 struct ch_qset_params t;
2155                 int q1 = pi->first_qset;
2156                 int nqsets = pi->nqsets;
2157
2158                 if (!capable(CAP_NET_ADMIN))
2159                         return -EPERM;
2160                 if (copy_from_user(&t, useraddr, sizeof(t)))
2161                         return -EFAULT;
2162                 if (t.qset_idx >= SGE_QSETS)
2163                         return -EINVAL;
2164                 if (!in_range(t.intr_lat, 0, M_NEWTIMER) ||
2165                     !in_range(t.cong_thres, 0, 255) ||
2166                     !in_range(t.txq_size[0], MIN_TXQ_ENTRIES,
2167                               MAX_TXQ_ENTRIES) ||
2168                     !in_range(t.txq_size[1], MIN_TXQ_ENTRIES,
2169                               MAX_TXQ_ENTRIES) ||
2170                     !in_range(t.txq_size[2], MIN_CTRL_TXQ_ENTRIES,
2171                               MAX_CTRL_TXQ_ENTRIES) ||
2172                     !in_range(t.fl_size[0], MIN_FL_ENTRIES,
2173                               MAX_RX_BUFFERS) ||
2174                     !in_range(t.fl_size[1], MIN_FL_ENTRIES,
2175                               MAX_RX_JUMBO_BUFFERS) ||
2176                     !in_range(t.rspq_size, MIN_RSPQ_ENTRIES,
2177                               MAX_RSPQ_ENTRIES))
2178                         return -EINVAL;
2179
2180                 if ((adapter->flags & FULL_INIT_DONE) &&
2181                         (t.rspq_size >= 0 || t.fl_size[0] >= 0 ||
2182                         t.fl_size[1] >= 0 || t.txq_size[0] >= 0 ||
2183                         t.txq_size[1] >= 0 || t.txq_size[2] >= 0 ||
2184                         t.polling >= 0 || t.cong_thres >= 0))
2185                         return -EBUSY;
2186
2187                 /* Allow setting of any available qset when offload enabled */
2188                 if (test_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map)) {
2189                         q1 = 0;
2190                         for_each_port(adapter, i) {
2191                                 pi = adap2pinfo(adapter, i);
2192                                 nqsets += pi->first_qset + pi->nqsets;
2193                         }
2194                 }
2195
2196                 if (t.qset_idx < q1)
2197                         return -EINVAL;
2198                 if (t.qset_idx > q1 + nqsets - 1)
2199                         return -EINVAL;
2200
2201                 q = &adapter->params.sge.qset[t.qset_idx];
2202
2203                 if (t.rspq_size >= 0)
2204                         q->rspq_size = t.rspq_size;
2205                 if (t.fl_size[0] >= 0)
2206                         q->fl_size = t.fl_size[0];
2207                 if (t.fl_size[1] >= 0)
2208                         q->jumbo_size = t.fl_size[1];
2209                 if (t.txq_size[0] >= 0)
2210                         q->txq_size[0] = t.txq_size[0];
2211                 if (t.txq_size[1] >= 0)
2212                         q->txq_size[1] = t.txq_size[1];
2213                 if (t.txq_size[2] >= 0)
2214                         q->txq_size[2] = t.txq_size[2];
2215                 if (t.cong_thres >= 0)
2216                         q->cong_thres = t.cong_thres;
2217                 if (t.intr_lat >= 0) {
2218                         struct sge_qset *qs =
2219                                 &adapter->sge.qs[t.qset_idx];
2220
2221                         q->coalesce_usecs = t.intr_lat;
2222                         t3_update_qset_coalesce(qs, q);
2223                 }
2224                 if (t.polling >= 0) {
2225                         if (adapter->flags & USING_MSIX)
2226                                 q->polling = t.polling;
2227                         else {
2228                                 /* No polling with INTx for T3A */
2229                                 if (adapter->params.rev == 0 &&
2230                                         !(adapter->flags & USING_MSI))
2231                                         t.polling = 0;
2232
2233                                 for (i = 0; i < SGE_QSETS; i++) {
2234                                         q = &adapter->params.sge.
2235                                                 qset[i];
2236                                         q->polling = t.polling;
2237                                 }
2238                         }
2239                 }
2240
2241                 if (t.lro >= 0) {
2242                         if (t.lro)
2243                                 dev->wanted_features |= NETIF_F_GRO;
2244                         else
2245                                 dev->wanted_features &= ~NETIF_F_GRO;
2246                         netdev_update_features(dev);
2247                 }
2248
2249                 break;
2250         }
2251         case CHELSIO_GET_QSET_PARAMS:{
2252                 struct qset_params *q;
2253                 struct ch_qset_params t;
2254                 int q1 = pi->first_qset;
2255                 int nqsets = pi->nqsets;
2256                 int i;
2257
2258                 if (copy_from_user(&t, useraddr, sizeof(t)))
2259                         return -EFAULT;
2260
2261                 /* Display qsets for all ports when offload enabled */
2262                 if (test_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map)) {
2263                         q1 = 0;
2264                         for_each_port(adapter, i) {
2265                                 pi = adap2pinfo(adapter, i);
2266                                 nqsets = pi->first_qset + pi->nqsets;
2267                         }
2268                 }
2269
2270                 if (t.qset_idx >= nqsets)
2271                         return -EINVAL;
2272                 t.qset_idx = array_index_nospec(t.qset_idx, nqsets);
2273
2274                 q = &adapter->params.sge.qset[q1 + t.qset_idx];
2275                 t.rspq_size = q->rspq_size;
2276                 t.txq_size[0] = q->txq_size[0];
2277                 t.txq_size[1] = q->txq_size[1];
2278                 t.txq_size[2] = q->txq_size[2];
2279                 t.fl_size[0] = q->fl_size;
2280                 t.fl_size[1] = q->jumbo_size;
2281                 t.polling = q->polling;
2282                 t.lro = !!(dev->features & NETIF_F_GRO);
2283                 t.intr_lat = q->coalesce_usecs;
2284                 t.cong_thres = q->cong_thres;
2285                 t.qnum = q1;
2286
2287                 if (adapter->flags & USING_MSIX)
2288                         t.vector = adapter->msix_info[q1 + t.qset_idx + 1].vec;
2289                 else
2290                         t.vector = adapter->pdev->irq;
2291
2292                 if (copy_to_user(useraddr, &t, sizeof(t)))
2293                         return -EFAULT;
2294                 break;
2295         }
2296         case CHELSIO_SET_QSET_NUM:{
2297                 struct ch_reg edata;
2298                 unsigned int i, first_qset = 0, other_qsets = 0;
2299
2300                 if (!capable(CAP_NET_ADMIN))
2301                         return -EPERM;
2302                 if (adapter->flags & FULL_INIT_DONE)
2303                         return -EBUSY;
2304                 if (copy_from_user(&edata, useraddr, sizeof(edata)))
2305                         return -EFAULT;
2306                 if (edata.val < 1 ||
2307                         (edata.val > 1 && !(adapter->flags & USING_MSIX)))
2308                         return -EINVAL;
2309
2310                 for_each_port(adapter, i)
2311                         if (adapter->port[i] && adapter->port[i] != dev)
2312                                 other_qsets += adap2pinfo(adapter, i)->nqsets;
2313
2314                 if (edata.val + other_qsets > SGE_QSETS)
2315                         return -EINVAL;
2316
2317                 pi->nqsets = edata.val;
2318
2319                 for_each_port(adapter, i)
2320                         if (adapter->port[i]) {
2321                                 pi = adap2pinfo(adapter, i);
2322                                 pi->first_qset = first_qset;
2323                                 first_qset += pi->nqsets;
2324                         }
2325                 break;
2326         }
2327         case CHELSIO_GET_QSET_NUM:{
2328                 struct ch_reg edata;
2329
2330                 memset(&edata, 0, sizeof(struct ch_reg));
2331
2332                 edata.cmd = CHELSIO_GET_QSET_NUM;
2333                 edata.val = pi->nqsets;
2334                 if (copy_to_user(useraddr, &edata, sizeof(edata)))
2335                         return -EFAULT;
2336                 break;
2337         }
2338         case CHELSIO_LOAD_FW:{
2339                 u8 *fw_data;
2340                 struct ch_mem_range t;
2341
2342                 if (!capable(CAP_SYS_RAWIO))
2343                         return -EPERM;
2344                 if (copy_from_user(&t, useraddr, sizeof(t)))
2345                         return -EFAULT;
2346                 /* Check t.len sanity ? */
2347                 fw_data = memdup_user(useraddr + sizeof(t), t.len);
2348                 if (IS_ERR(fw_data))
2349                         return PTR_ERR(fw_data);
2350
2351                 ret = t3_load_fw(adapter, fw_data, t.len);
2352                 kfree(fw_data);
2353                 if (ret)
2354                         return ret;
2355                 break;
2356         }
2357         case CHELSIO_SETMTUTAB:{
2358                 struct ch_mtus m;
2359                 int i;
2360
2361                 if (!is_offload(adapter))
2362                         return -EOPNOTSUPP;
2363                 if (!capable(CAP_NET_ADMIN))
2364                         return -EPERM;
2365                 if (offload_running(adapter))
2366                         return -EBUSY;
2367                 if (copy_from_user(&m, useraddr, sizeof(m)))
2368                         return -EFAULT;
2369                 if (m.nmtus != NMTUS)
2370                         return -EINVAL;
2371                 if (m.mtus[0] < 81)     /* accommodate SACK */
2372                         return -EINVAL;
2373
2374                 /* MTUs must be in ascending order */
2375                 for (i = 1; i < NMTUS; ++i)
2376                         if (m.mtus[i] < m.mtus[i - 1])
2377                                 return -EINVAL;
2378
2379                 memcpy(adapter->params.mtus, m.mtus,
2380                         sizeof(adapter->params.mtus));
2381                 break;
2382         }
2383         case CHELSIO_GET_PM:{
2384                 struct tp_params *p = &adapter->params.tp;
2385                 struct ch_pm m = {.cmd = CHELSIO_GET_PM };
2386
2387                 if (!is_offload(adapter))
2388                         return -EOPNOTSUPP;
2389                 m.tx_pg_sz = p->tx_pg_size;
2390                 m.tx_num_pg = p->tx_num_pgs;
2391                 m.rx_pg_sz = p->rx_pg_size;
2392                 m.rx_num_pg = p->rx_num_pgs;
2393                 m.pm_total = p->pmtx_size + p->chan_rx_size * p->nchan;
2394                 if (copy_to_user(useraddr, &m, sizeof(m)))
2395                         return -EFAULT;
2396                 break;
2397         }
2398         case CHELSIO_SET_PM:{
2399                 struct ch_pm m;
2400                 struct tp_params *p = &adapter->params.tp;
2401
2402                 if (!is_offload(adapter))
2403                         return -EOPNOTSUPP;
2404                 if (!capable(CAP_NET_ADMIN))
2405                         return -EPERM;
2406                 if (adapter->flags & FULL_INIT_DONE)
2407                         return -EBUSY;
2408                 if (copy_from_user(&m, useraddr, sizeof(m)))
2409                         return -EFAULT;
2410                 if (!is_power_of_2(m.rx_pg_sz) ||
2411                         !is_power_of_2(m.tx_pg_sz))
2412                         return -EINVAL; /* not power of 2 */
2413                 if (!(m.rx_pg_sz & 0x14000))
2414                         return -EINVAL; /* not 16KB or 64KB */
2415                 if (!(m.tx_pg_sz & 0x1554000))
2416                         return -EINVAL;
2417                 if (m.tx_num_pg == -1)
2418                         m.tx_num_pg = p->tx_num_pgs;
2419                 if (m.rx_num_pg == -1)
2420                         m.rx_num_pg = p->rx_num_pgs;
2421                 if (m.tx_num_pg % 24 || m.rx_num_pg % 24)
2422                         return -EINVAL;
2423                 if (m.rx_num_pg * m.rx_pg_sz > p->chan_rx_size ||
2424                         m.tx_num_pg * m.tx_pg_sz > p->chan_tx_size)
2425                         return -EINVAL;
2426                 p->rx_pg_size = m.rx_pg_sz;
2427                 p->tx_pg_size = m.tx_pg_sz;
2428                 p->rx_num_pgs = m.rx_num_pg;
2429                 p->tx_num_pgs = m.tx_num_pg;
2430                 break;
2431         }
2432         case CHELSIO_GET_MEM:{
2433                 struct ch_mem_range t;
2434                 struct mc7 *mem;
2435                 u64 buf[32];
2436
2437                 if (!is_offload(adapter))
2438                         return -EOPNOTSUPP;
2439                 if (!(adapter->flags & FULL_INIT_DONE))
2440                         return -EIO;    /* need the memory controllers */
2441                 if (copy_from_user(&t, useraddr, sizeof(t)))
2442                         return -EFAULT;
2443                 if ((t.addr & 7) || (t.len & 7))
2444                         return -EINVAL;
2445                 if (t.mem_id == MEM_CM)
2446                         mem = &adapter->cm;
2447                 else if (t.mem_id == MEM_PMRX)
2448                         mem = &adapter->pmrx;
2449                 else if (t.mem_id == MEM_PMTX)
2450                         mem = &adapter->pmtx;
2451                 else
2452                         return -EINVAL;
2453
2454                 /*
2455                  * Version scheme:
2456                  * bits 0..9: chip version
2457                  * bits 10..15: chip revision
2458                  */
2459                 t.version = 3 | (adapter->params.rev << 10);
2460                 if (copy_to_user(useraddr, &t, sizeof(t)))
2461                         return -EFAULT;
2462
2463                 /*
2464                  * Read 256 bytes at a time as len can be large and we don't
2465                  * want to use huge intermediate buffers.
2466                  */
2467                 useraddr += sizeof(t);  /* advance to start of buffer */
2468                 while (t.len) {
2469                         unsigned int chunk =
2470                                 min_t(unsigned int, t.len, sizeof(buf));
2471
2472                         ret =
2473                                 t3_mc7_bd_read(mem, t.addr / 8, chunk / 8,
2474                                                 buf);
2475                         if (ret)
2476                                 return ret;
2477                         if (copy_to_user(useraddr, buf, chunk))
2478                                 return -EFAULT;
2479                         useraddr += chunk;
2480                         t.addr += chunk;
2481                         t.len -= chunk;
2482                 }
2483                 break;
2484         }
2485         case CHELSIO_SET_TRACE_FILTER:{
2486                 struct ch_trace t;
2487                 const struct trace_params *tp;
2488
2489                 if (!capable(CAP_NET_ADMIN))
2490                         return -EPERM;
2491                 if (!offload_running(adapter))
2492                         return -EAGAIN;
2493                 if (copy_from_user(&t, useraddr, sizeof(t)))
2494                         return -EFAULT;
2495
2496                 tp = (const struct trace_params *)&t.sip;
2497                 if (t.config_tx)
2498                         t3_config_trace_filter(adapter, tp, 0,
2499                                                 t.invert_match,
2500                                                 t.trace_tx);
2501                 if (t.config_rx)
2502                         t3_config_trace_filter(adapter, tp, 1,
2503                                                 t.invert_match,
2504                                                 t.trace_rx);
2505                 break;
2506         }
2507         default:
2508                 return -EOPNOTSUPP;
2509         }
2510         return 0;
2511 }
2512
2513 static int cxgb_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
2514 {
2515         struct mii_ioctl_data *data = if_mii(req);
2516         struct port_info *pi = netdev_priv(dev);
2517         struct adapter *adapter = pi->adapter;
2518
2519         switch (cmd) {
2520         case SIOCGMIIREG:
2521         case SIOCSMIIREG:
2522                 /* Convert phy_id from older PRTAD/DEVAD format */
2523                 if (is_10G(adapter) &&
2524                     !mdio_phy_id_is_c45(data->phy_id) &&
2525                     (data->phy_id & 0x1f00) &&
2526                     !(data->phy_id & 0xe0e0))
2527                         data->phy_id = mdio_phy_id_c45(data->phy_id >> 8,
2528                                                        data->phy_id & 0x1f);
2529                 /* FALLTHRU */
2530         case SIOCGMIIPHY:
2531                 return mdio_mii_ioctl(&pi->phy.mdio, data, cmd);
2532         case SIOCCHIOCTL:
2533                 return cxgb_extension_ioctl(dev, req->ifr_data);
2534         default:
2535                 return -EOPNOTSUPP;
2536         }
2537 }
2538
2539 static int cxgb_change_mtu(struct net_device *dev, int new_mtu)
2540 {
2541         struct port_info *pi = netdev_priv(dev);
2542         struct adapter *adapter = pi->adapter;
2543         int ret;
2544
2545         if ((ret = t3_mac_set_mtu(&pi->mac, new_mtu)))
2546                 return ret;
2547         dev->mtu = new_mtu;
2548         init_port_mtus(adapter);
2549         if (adapter->params.rev == 0 && offload_running(adapter))
2550                 t3_load_mtus(adapter, adapter->params.mtus,
2551                              adapter->params.a_wnd, adapter->params.b_wnd,
2552                              adapter->port[0]->mtu);
2553         return 0;
2554 }
2555
2556 static int cxgb_set_mac_addr(struct net_device *dev, void *p)
2557 {
2558         struct port_info *pi = netdev_priv(dev);
2559         struct adapter *adapter = pi->adapter;
2560         struct sockaddr *addr = p;
2561
2562         if (!is_valid_ether_addr(addr->sa_data))
2563                 return -EADDRNOTAVAIL;
2564
2565         memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
2566         t3_mac_set_address(&pi->mac, LAN_MAC_IDX, dev->dev_addr);
2567         if (offload_running(adapter))
2568                 write_smt_entry(adapter, pi->port_id);
2569         return 0;
2570 }
2571
2572 static netdev_features_t cxgb_fix_features(struct net_device *dev,
2573         netdev_features_t features)
2574 {
2575         /*
2576          * Since there is no support for separate rx/tx vlan accel
2577          * enable/disable make sure tx flag is always in same state as rx.
2578          */
2579         if (features & NETIF_F_HW_VLAN_CTAG_RX)
2580                 features |= NETIF_F_HW_VLAN_CTAG_TX;
2581         else
2582                 features &= ~NETIF_F_HW_VLAN_CTAG_TX;
2583
2584         return features;
2585 }
2586
2587 static int cxgb_set_features(struct net_device *dev, netdev_features_t features)
2588 {
2589         netdev_features_t changed = dev->features ^ features;
2590
2591         if (changed & NETIF_F_HW_VLAN_CTAG_RX)
2592                 cxgb_vlan_mode(dev, features);
2593
2594         return 0;
2595 }
2596
2597 #ifdef CONFIG_NET_POLL_CONTROLLER
2598 static void cxgb_netpoll(struct net_device *dev)
2599 {
2600         struct port_info *pi = netdev_priv(dev);
2601         struct adapter *adapter = pi->adapter;
2602         int qidx;
2603
2604         for (qidx = pi->first_qset; qidx < pi->first_qset + pi->nqsets; qidx++) {
2605                 struct sge_qset *qs = &adapter->sge.qs[qidx];
2606                 void *source;
2607
2608                 if (adapter->flags & USING_MSIX)
2609                         source = qs;
2610                 else
2611                         source = adapter;
2612
2613                 t3_intr_handler(adapter, qs->rspq.polling) (0, source);
2614         }
2615 }
2616 #endif
2617
2618 /*
2619  * Periodic accumulation of MAC statistics.
2620  */
2621 static void mac_stats_update(struct adapter *adapter)
2622 {
2623         int i;
2624
2625         for_each_port(adapter, i) {
2626                 struct net_device *dev = adapter->port[i];
2627                 struct port_info *p = netdev_priv(dev);
2628
2629                 if (netif_running(dev)) {
2630                         spin_lock(&adapter->stats_lock);
2631                         t3_mac_update_stats(&p->mac);
2632                         spin_unlock(&adapter->stats_lock);
2633                 }
2634         }
2635 }
2636
2637 static void check_link_status(struct adapter *adapter)
2638 {
2639         int i;
2640
2641         for_each_port(adapter, i) {
2642                 struct net_device *dev = adapter->port[i];
2643                 struct port_info *p = netdev_priv(dev);
2644                 int link_fault;
2645
2646                 spin_lock_irq(&adapter->work_lock);
2647                 link_fault = p->link_fault;
2648                 spin_unlock_irq(&adapter->work_lock);
2649
2650                 if (link_fault) {
2651                         t3_link_fault(adapter, i);
2652                         continue;
2653                 }
2654
2655                 if (!(p->phy.caps & SUPPORTED_IRQ) && netif_running(dev)) {
2656                         t3_xgm_intr_disable(adapter, i);
2657                         t3_read_reg(adapter, A_XGM_INT_STATUS + p->mac.offset);
2658
2659                         t3_link_changed(adapter, i);
2660                         t3_xgm_intr_enable(adapter, i);
2661                 }
2662         }
2663 }
2664
2665 static void check_t3b2_mac(struct adapter *adapter)
2666 {
2667         int i;
2668
2669         if (!rtnl_trylock())    /* synchronize with ifdown */
2670                 return;
2671
2672         for_each_port(adapter, i) {
2673                 struct net_device *dev = adapter->port[i];
2674                 struct port_info *p = netdev_priv(dev);
2675                 int status;
2676
2677                 if (!netif_running(dev))
2678                         continue;
2679
2680                 status = 0;
2681                 if (netif_running(dev) && netif_carrier_ok(dev))
2682                         status = t3b2_mac_watchdog_task(&p->mac);
2683                 if (status == 1)
2684                         p->mac.stats.num_toggled++;
2685                 else if (status == 2) {
2686                         struct cmac *mac = &p->mac;
2687
2688                         t3_mac_set_mtu(mac, dev->mtu);
2689                         t3_mac_set_address(mac, LAN_MAC_IDX, dev->dev_addr);
2690                         cxgb_set_rxmode(dev);
2691                         t3_link_start(&p->phy, mac, &p->link_config);
2692                         t3_mac_enable(mac, MAC_DIRECTION_RX | MAC_DIRECTION_TX);
2693                         t3_port_intr_enable(adapter, p->port_id);
2694                         p->mac.stats.num_resets++;
2695                 }
2696         }
2697         rtnl_unlock();
2698 }
2699
2700
2701 static void t3_adap_check_task(struct work_struct *work)
2702 {
2703         struct adapter *adapter = container_of(work, struct adapter,
2704                                                adap_check_task.work);
2705         const struct adapter_params *p = &adapter->params;
2706         int port;
2707         unsigned int v, status, reset;
2708
2709         adapter->check_task_cnt++;
2710
2711         check_link_status(adapter);
2712
2713         /* Accumulate MAC stats if needed */
2714         if (!p->linkpoll_period ||
2715             (adapter->check_task_cnt * p->linkpoll_period) / 10 >=
2716             p->stats_update_period) {
2717                 mac_stats_update(adapter);
2718                 adapter->check_task_cnt = 0;
2719         }
2720
2721         if (p->rev == T3_REV_B2)
2722                 check_t3b2_mac(adapter);
2723
2724         /*
2725          * Scan the XGMAC's to check for various conditions which we want to
2726          * monitor in a periodic polling manner rather than via an interrupt
2727          * condition.  This is used for conditions which would otherwise flood
2728          * the system with interrupts and we only really need to know that the
2729          * conditions are "happening" ...  For each condition we count the
2730          * detection of the condition and reset it for the next polling loop.
2731          */
2732         for_each_port(adapter, port) {
2733                 struct cmac *mac =  &adap2pinfo(adapter, port)->mac;
2734                 u32 cause;
2735
2736                 cause = t3_read_reg(adapter, A_XGM_INT_CAUSE + mac->offset);
2737                 reset = 0;
2738                 if (cause & F_RXFIFO_OVERFLOW) {
2739                         mac->stats.rx_fifo_ovfl++;
2740                         reset |= F_RXFIFO_OVERFLOW;
2741                 }
2742
2743                 t3_write_reg(adapter, A_XGM_INT_CAUSE + mac->offset, reset);
2744         }
2745
2746         /*
2747          * We do the same as above for FL_EMPTY interrupts.
2748          */
2749         status = t3_read_reg(adapter, A_SG_INT_CAUSE);
2750         reset = 0;
2751
2752         if (status & F_FLEMPTY) {
2753                 struct sge_qset *qs = &adapter->sge.qs[0];
2754                 int i = 0;
2755
2756                 reset |= F_FLEMPTY;
2757
2758                 v = (t3_read_reg(adapter, A_SG_RSPQ_FL_STATUS) >> S_FL0EMPTY) &
2759                     0xffff;
2760
2761                 while (v) {
2762                         qs->fl[i].empty += (v & 1);
2763                         if (i)
2764                                 qs++;
2765                         i ^= 1;
2766                         v >>= 1;
2767                 }
2768         }
2769
2770         t3_write_reg(adapter, A_SG_INT_CAUSE, reset);
2771
2772         /* Schedule the next check update if any port is active. */
2773         spin_lock_irq(&adapter->work_lock);
2774         if (adapter->open_device_map & PORT_MASK)
2775                 schedule_chk_task(adapter);
2776         spin_unlock_irq(&adapter->work_lock);
2777 }
2778
2779 static void db_full_task(struct work_struct *work)
2780 {
2781         struct adapter *adapter = container_of(work, struct adapter,
2782                                                db_full_task);
2783
2784         cxgb3_event_notify(&adapter->tdev, OFFLOAD_DB_FULL, 0);
2785 }
2786
2787 static void db_empty_task(struct work_struct *work)
2788 {
2789         struct adapter *adapter = container_of(work, struct adapter,
2790                                                db_empty_task);
2791
2792         cxgb3_event_notify(&adapter->tdev, OFFLOAD_DB_EMPTY, 0);
2793 }
2794
2795 static void db_drop_task(struct work_struct *work)
2796 {
2797         struct adapter *adapter = container_of(work, struct adapter,
2798                                                db_drop_task);
2799         unsigned long delay = 1000;
2800         unsigned short r;
2801
2802         cxgb3_event_notify(&adapter->tdev, OFFLOAD_DB_DROP, 0);
2803
2804         /*
2805          * Sleep a while before ringing the driver qset dbs.
2806          * The delay is between 1000-2023 usecs.
2807          */
2808         get_random_bytes(&r, 2);
2809         delay += r & 1023;
2810         set_current_state(TASK_UNINTERRUPTIBLE);
2811         schedule_timeout(usecs_to_jiffies(delay));
2812         ring_dbs(adapter);
2813 }
2814
2815 /*
2816  * Processes external (PHY) interrupts in process context.
2817  */
2818 static void ext_intr_task(struct work_struct *work)
2819 {
2820         struct adapter *adapter = container_of(work, struct adapter,
2821                                                ext_intr_handler_task);
2822         int i;
2823
2824         /* Disable link fault interrupts */
2825         for_each_port(adapter, i) {
2826                 struct net_device *dev = adapter->port[i];
2827                 struct port_info *p = netdev_priv(dev);
2828
2829                 t3_xgm_intr_disable(adapter, i);
2830                 t3_read_reg(adapter, A_XGM_INT_STATUS + p->mac.offset);
2831         }
2832
2833         /* Re-enable link fault interrupts */
2834         t3_phy_intr_handler(adapter);
2835
2836         for_each_port(adapter, i)
2837                 t3_xgm_intr_enable(adapter, i);
2838
2839         /* Now reenable external interrupts */
2840         spin_lock_irq(&adapter->work_lock);
2841         if (adapter->slow_intr_mask) {
2842                 adapter->slow_intr_mask |= F_T3DBG;
2843                 t3_write_reg(adapter, A_PL_INT_CAUSE0, F_T3DBG);
2844                 t3_write_reg(adapter, A_PL_INT_ENABLE0,
2845                              adapter->slow_intr_mask);
2846         }
2847         spin_unlock_irq(&adapter->work_lock);
2848 }
2849
2850 /*
2851  * Interrupt-context handler for external (PHY) interrupts.
2852  */
2853 void t3_os_ext_intr_handler(struct adapter *adapter)
2854 {
2855         /*
2856          * Schedule a task to handle external interrupts as they may be slow
2857          * and we use a mutex to protect MDIO registers.  We disable PHY
2858          * interrupts in the meantime and let the task reenable them when
2859          * it's done.
2860          */
2861         spin_lock(&adapter->work_lock);
2862         if (adapter->slow_intr_mask) {
2863                 adapter->slow_intr_mask &= ~F_T3DBG;
2864                 t3_write_reg(adapter, A_PL_INT_ENABLE0,
2865                              adapter->slow_intr_mask);
2866                 queue_work(cxgb3_wq, &adapter->ext_intr_handler_task);
2867         }
2868         spin_unlock(&adapter->work_lock);
2869 }
2870
2871 void t3_os_link_fault_handler(struct adapter *adapter, int port_id)
2872 {
2873         struct net_device *netdev = adapter->port[port_id];
2874         struct port_info *pi = netdev_priv(netdev);
2875
2876         spin_lock(&adapter->work_lock);
2877         pi->link_fault = 1;
2878         spin_unlock(&adapter->work_lock);
2879 }
2880
2881 static int t3_adapter_error(struct adapter *adapter, int reset, int on_wq)
2882 {
2883         int i, ret = 0;
2884
2885         if (is_offload(adapter) &&
2886             test_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map)) {
2887                 cxgb3_event_notify(&adapter->tdev, OFFLOAD_STATUS_DOWN, 0);
2888                 offload_close(&adapter->tdev);
2889         }
2890
2891         /* Stop all ports */
2892         for_each_port(adapter, i) {
2893                 struct net_device *netdev = adapter->port[i];
2894
2895                 if (netif_running(netdev))
2896                         __cxgb_close(netdev, on_wq);
2897         }
2898
2899         /* Stop SGE timers */
2900         t3_stop_sge_timers(adapter);
2901
2902         adapter->flags &= ~FULL_INIT_DONE;
2903
2904         if (reset)
2905                 ret = t3_reset_adapter(adapter);
2906
2907         pci_disable_device(adapter->pdev);
2908
2909         return ret;
2910 }
2911
2912 static int t3_reenable_adapter(struct adapter *adapter)
2913 {
2914         if (pci_enable_device(adapter->pdev)) {
2915                 dev_err(&adapter->pdev->dev,
2916                         "Cannot re-enable PCI device after reset.\n");
2917                 goto err;
2918         }
2919         pci_set_master(adapter->pdev);
2920         pci_restore_state(adapter->pdev);
2921         pci_save_state(adapter->pdev);
2922
2923         /* Free sge resources */
2924         t3_free_sge_resources(adapter);
2925
2926         if (t3_replay_prep_adapter(adapter))
2927                 goto err;
2928
2929         return 0;
2930 err:
2931         return -1;
2932 }
2933
2934 static void t3_resume_ports(struct adapter *adapter)
2935 {
2936         int i;
2937
2938         /* Restart the ports */
2939         for_each_port(adapter, i) {
2940                 struct net_device *netdev = adapter->port[i];
2941
2942                 if (netif_running(netdev)) {
2943                         if (cxgb_open(netdev)) {
2944                                 dev_err(&adapter->pdev->dev,
2945                                         "can't bring device back up"
2946                                         " after reset\n");
2947                                 continue;
2948                         }
2949                 }
2950         }
2951
2952         if (is_offload(adapter) && !ofld_disable)
2953                 cxgb3_event_notify(&adapter->tdev, OFFLOAD_STATUS_UP, 0);
2954 }
2955
2956 /*
2957  * processes a fatal error.
2958  * Bring the ports down, reset the chip, bring the ports back up.
2959  */
2960 static void fatal_error_task(struct work_struct *work)
2961 {
2962         struct adapter *adapter = container_of(work, struct adapter,
2963                                                fatal_error_handler_task);
2964         int err = 0;
2965
2966         rtnl_lock();
2967         err = t3_adapter_error(adapter, 1, 1);
2968         if (!err)
2969                 err = t3_reenable_adapter(adapter);
2970         if (!err)
2971                 t3_resume_ports(adapter);
2972
2973         CH_ALERT(adapter, "adapter reset %s\n", err ? "failed" : "succeeded");
2974         rtnl_unlock();
2975 }
2976
2977 void t3_fatal_err(struct adapter *adapter)
2978 {
2979         unsigned int fw_status[4];
2980
2981         if (adapter->flags & FULL_INIT_DONE) {
2982                 t3_sge_stop(adapter);
2983                 t3_write_reg(adapter, A_XGM_TX_CTRL, 0);
2984                 t3_write_reg(adapter, A_XGM_RX_CTRL, 0);
2985                 t3_write_reg(adapter, XGM_REG(A_XGM_TX_CTRL, 1), 0);
2986                 t3_write_reg(adapter, XGM_REG(A_XGM_RX_CTRL, 1), 0);
2987
2988                 spin_lock(&adapter->work_lock);
2989                 t3_intr_disable(adapter);
2990                 queue_work(cxgb3_wq, &adapter->fatal_error_handler_task);
2991                 spin_unlock(&adapter->work_lock);
2992         }
2993         CH_ALERT(adapter, "encountered fatal error, operation suspended\n");
2994         if (!t3_cim_ctl_blk_read(adapter, 0xa0, 4, fw_status))
2995                 CH_ALERT(adapter, "FW status: 0x%x, 0x%x, 0x%x, 0x%x\n",
2996                          fw_status[0], fw_status[1],
2997                          fw_status[2], fw_status[3]);
2998 }
2999
3000 /**
3001  * t3_io_error_detected - called when PCI error is detected
3002  * @pdev: Pointer to PCI device
3003  * @state: The current pci connection state
3004  *
3005  * This function is called after a PCI bus error affecting
3006  * this device has been detected.
3007  */
3008 static pci_ers_result_t t3_io_error_detected(struct pci_dev *pdev,
3009                                              pci_channel_state_t state)
3010 {
3011         struct adapter *adapter = pci_get_drvdata(pdev);
3012
3013         if (state == pci_channel_io_perm_failure)
3014                 return PCI_ERS_RESULT_DISCONNECT;
3015
3016         t3_adapter_error(adapter, 0, 0);
3017
3018         /* Request a slot reset. */
3019         return PCI_ERS_RESULT_NEED_RESET;
3020 }
3021
3022 /**
3023  * t3_io_slot_reset - called after the pci bus has been reset.
3024  * @pdev: Pointer to PCI device
3025  *
3026  * Restart the card from scratch, as if from a cold-boot.
3027  */
3028 static pci_ers_result_t t3_io_slot_reset(struct pci_dev *pdev)
3029 {
3030         struct adapter *adapter = pci_get_drvdata(pdev);
3031
3032         if (!t3_reenable_adapter(adapter))
3033                 return PCI_ERS_RESULT_RECOVERED;
3034
3035         return PCI_ERS_RESULT_DISCONNECT;
3036 }
3037
3038 /**
3039  * t3_io_resume - called when traffic can start flowing again.
3040  * @pdev: Pointer to PCI device
3041  *
3042  * This callback is called when the error recovery driver tells us that
3043  * its OK to resume normal operation.
3044  */
3045 static void t3_io_resume(struct pci_dev *pdev)
3046 {
3047         struct adapter *adapter = pci_get_drvdata(pdev);
3048
3049         CH_ALERT(adapter, "adapter recovering, PEX ERR 0x%x\n",
3050                  t3_read_reg(adapter, A_PCIE_PEX_ERR));
3051
3052         rtnl_lock();
3053         t3_resume_ports(adapter);
3054         rtnl_unlock();
3055 }
3056
3057 static const struct pci_error_handlers t3_err_handler = {
3058         .error_detected = t3_io_error_detected,
3059         .slot_reset = t3_io_slot_reset,
3060         .resume = t3_io_resume,
3061 };
3062
3063 /*
3064  * Set the number of qsets based on the number of CPUs and the number of ports,
3065  * not to exceed the number of available qsets, assuming there are enough qsets
3066  * per port in HW.
3067  */
3068 static void set_nqsets(struct adapter *adap)
3069 {
3070         int i, j = 0;
3071         int num_cpus = netif_get_num_default_rss_queues();
3072         int hwports = adap->params.nports;
3073         int nqsets = adap->msix_nvectors - 1;
3074
3075         if (adap->params.rev > 0 && adap->flags & USING_MSIX) {
3076                 if (hwports == 2 &&
3077                     (hwports * nqsets > SGE_QSETS ||
3078                      num_cpus >= nqsets / hwports))
3079                         nqsets /= hwports;
3080                 if (nqsets > num_cpus)
3081                         nqsets = num_cpus;
3082                 if (nqsets < 1 || hwports == 4)
3083                         nqsets = 1;
3084         } else
3085                 nqsets = 1;
3086
3087         for_each_port(adap, i) {
3088                 struct port_info *pi = adap2pinfo(adap, i);
3089
3090                 pi->first_qset = j;
3091                 pi->nqsets = nqsets;
3092                 j = pi->first_qset + nqsets;
3093
3094                 dev_info(&adap->pdev->dev,
3095                          "Port %d using %d queue sets.\n", i, nqsets);
3096         }
3097 }
3098
3099 static int cxgb_enable_msix(struct adapter *adap)
3100 {
3101         struct msix_entry entries[SGE_QSETS + 1];
3102         int vectors;
3103         int i;
3104
3105         vectors = ARRAY_SIZE(entries);
3106         for (i = 0; i < vectors; ++i)
3107                 entries[i].entry = i;
3108
3109         vectors = pci_enable_msix_range(adap->pdev, entries,
3110                                         adap->params.nports + 1, vectors);
3111         if (vectors < 0)
3112                 return vectors;
3113
3114         for (i = 0; i < vectors; ++i)
3115                 adap->msix_info[i].vec = entries[i].vector;
3116         adap->msix_nvectors = vectors;
3117
3118         return 0;
3119 }
3120
3121 static void print_port_info(struct adapter *adap, const struct adapter_info *ai)
3122 {
3123         static const char *pci_variant[] = {
3124                 "PCI", "PCI-X", "PCI-X ECC", "PCI-X 266", "PCI Express"
3125         };
3126
3127         int i;
3128         char buf[80];
3129
3130         if (is_pcie(adap))
3131                 snprintf(buf, sizeof(buf), "%s x%d",
3132                          pci_variant[adap->params.pci.variant],
3133                          adap->params.pci.width);
3134         else
3135                 snprintf(buf, sizeof(buf), "%s %dMHz/%d-bit",
3136                          pci_variant[adap->params.pci.variant],
3137                          adap->params.pci.speed, adap->params.pci.width);
3138
3139         for_each_port(adap, i) {
3140                 struct net_device *dev = adap->port[i];
3141                 const struct port_info *pi = netdev_priv(dev);
3142
3143                 if (!test_bit(i, &adap->registered_device_map))
3144                         continue;
3145                 netdev_info(dev, "%s %s %sNIC (rev %d) %s%s\n",
3146                             ai->desc, pi->phy.desc,
3147                             is_offload(adap) ? "R" : "", adap->params.rev, buf,
3148                             (adap->flags & USING_MSIX) ? " MSI-X" :
3149                             (adap->flags & USING_MSI) ? " MSI" : "");
3150                 if (adap->name == dev->name && adap->params.vpd.mclk)
3151                         pr_info("%s: %uMB CM, %uMB PMTX, %uMB PMRX, S/N: %s\n",
3152                                adap->name, t3_mc7_size(&adap->cm) >> 20,
3153                                t3_mc7_size(&adap->pmtx) >> 20,
3154                                t3_mc7_size(&adap->pmrx) >> 20,
3155                                adap->params.vpd.sn);
3156         }
3157 }
3158
3159 static const struct net_device_ops cxgb_netdev_ops = {
3160         .ndo_open               = cxgb_open,
3161         .ndo_stop               = cxgb_close,
3162         .ndo_start_xmit         = t3_eth_xmit,
3163         .ndo_get_stats          = cxgb_get_stats,
3164         .ndo_validate_addr      = eth_validate_addr,
3165         .ndo_set_rx_mode        = cxgb_set_rxmode,
3166         .ndo_do_ioctl           = cxgb_ioctl,
3167         .ndo_change_mtu         = cxgb_change_mtu,
3168         .ndo_set_mac_address    = cxgb_set_mac_addr,
3169         .ndo_fix_features       = cxgb_fix_features,
3170         .ndo_set_features       = cxgb_set_features,
3171 #ifdef CONFIG_NET_POLL_CONTROLLER
3172         .ndo_poll_controller    = cxgb_netpoll,
3173 #endif
3174 };
3175
3176 static void cxgb3_init_iscsi_mac(struct net_device *dev)
3177 {
3178         struct port_info *pi = netdev_priv(dev);
3179
3180         memcpy(pi->iscsic.mac_addr, dev->dev_addr, ETH_ALEN);
3181         pi->iscsic.mac_addr[3] |= 0x80;
3182 }
3183
3184 #define TSO_FLAGS (NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_TSO_ECN)
3185 #define VLAN_FEAT (NETIF_F_SG | NETIF_F_IP_CSUM | TSO_FLAGS | \
3186                         NETIF_F_IPV6_CSUM | NETIF_F_HIGHDMA)
3187 static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
3188 {
3189         int i, err, pci_using_dac = 0;
3190         resource_size_t mmio_start, mmio_len;
3191         const struct adapter_info *ai;
3192         struct adapter *adapter = NULL;
3193         struct port_info *pi;
3194
3195         pr_info_once("%s - version %s\n", DRV_DESC, DRV_VERSION);
3196
3197         if (!cxgb3_wq) {
3198                 cxgb3_wq = create_singlethread_workqueue(DRV_NAME);
3199                 if (!cxgb3_wq) {
3200                         pr_err("cannot initialize work queue\n");
3201                         return -ENOMEM;
3202                 }
3203         }
3204
3205         err = pci_enable_device(pdev);
3206         if (err) {
3207                 dev_err(&pdev->dev, "cannot enable PCI device\n");
3208                 goto out;
3209         }
3210
3211         err = pci_request_regions(pdev, DRV_NAME);
3212         if (err) {
3213                 /* Just info, some other driver may have claimed the device. */
3214                 dev_info(&pdev->dev, "cannot obtain PCI resources\n");
3215                 goto out_disable_device;
3216         }
3217
3218         if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
3219                 pci_using_dac = 1;
3220                 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
3221                 if (err) {
3222                         dev_err(&pdev->dev, "unable to obtain 64-bit DMA for "
3223                                "coherent allocations\n");
3224                         goto out_release_regions;
3225                 }
3226         } else if ((err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) != 0) {
3227                 dev_err(&pdev->dev, "no usable DMA configuration\n");
3228                 goto out_release_regions;
3229         }
3230
3231         pci_set_master(pdev);
3232         pci_save_state(pdev);
3233
3234         mmio_start = pci_resource_start(pdev, 0);
3235         mmio_len = pci_resource_len(pdev, 0);
3236         ai = t3_get_adapter_info(ent->driver_data);
3237
3238         adapter = kzalloc(sizeof(*adapter), GFP_KERNEL);
3239         if (!adapter) {
3240                 err = -ENOMEM;
3241                 goto out_release_regions;
3242         }
3243
3244         adapter->nofail_skb =
3245                 alloc_skb(sizeof(struct cpl_set_tcb_field), GFP_KERNEL);
3246         if (!adapter->nofail_skb) {
3247                 dev_err(&pdev->dev, "cannot allocate nofail buffer\n");
3248                 err = -ENOMEM;
3249                 goto out_free_adapter;
3250         }
3251
3252         adapter->regs = ioremap_nocache(mmio_start, mmio_len);
3253         if (!adapter->regs) {
3254                 dev_err(&pdev->dev, "cannot map device registers\n");
3255                 err = -ENOMEM;
3256                 goto out_free_adapter;
3257         }
3258
3259         adapter->pdev = pdev;
3260         adapter->name = pci_name(pdev);
3261         adapter->msg_enable = dflt_msg_enable;
3262         adapter->mmio_len = mmio_len;
3263
3264         mutex_init(&adapter->mdio_lock);
3265         spin_lock_init(&adapter->work_lock);
3266         spin_lock_init(&adapter->stats_lock);
3267
3268         INIT_LIST_HEAD(&adapter->adapter_list);
3269         INIT_WORK(&adapter->ext_intr_handler_task, ext_intr_task);
3270         INIT_WORK(&adapter->fatal_error_handler_task, fatal_error_task);
3271
3272         INIT_WORK(&adapter->db_full_task, db_full_task);
3273         INIT_WORK(&adapter->db_empty_task, db_empty_task);
3274         INIT_WORK(&adapter->db_drop_task, db_drop_task);
3275
3276         INIT_DELAYED_WORK(&adapter->adap_check_task, t3_adap_check_task);
3277
3278         for (i = 0; i < ai->nports0 + ai->nports1; ++i) {
3279                 struct net_device *netdev;
3280
3281                 netdev = alloc_etherdev_mq(sizeof(struct port_info), SGE_QSETS);
3282                 if (!netdev) {
3283                         err = -ENOMEM;
3284                         goto out_free_dev;
3285                 }
3286
3287                 SET_NETDEV_DEV(netdev, &pdev->dev);
3288
3289                 adapter->port[i] = netdev;
3290                 pi = netdev_priv(netdev);
3291                 pi->adapter = adapter;
3292                 pi->port_id = i;
3293                 netif_carrier_off(netdev);
3294                 netdev->irq = pdev->irq;
3295                 netdev->mem_start = mmio_start;
3296                 netdev->mem_end = mmio_start + mmio_len - 1;
3297                 netdev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM |
3298                         NETIF_F_TSO | NETIF_F_RXCSUM | NETIF_F_HW_VLAN_CTAG_RX;
3299                 netdev->features |= netdev->hw_features |
3300                                     NETIF_F_HW_VLAN_CTAG_TX;
3301                 netdev->vlan_features |= netdev->features & VLAN_FEAT;
3302                 if (pci_using_dac)
3303                         netdev->features |= NETIF_F_HIGHDMA;
3304
3305                 netdev->netdev_ops = &cxgb_netdev_ops;
3306                 netdev->ethtool_ops = &cxgb_ethtool_ops;
3307                 netdev->min_mtu = 81;
3308                 netdev->max_mtu = ETH_MAX_MTU;
3309                 netdev->dev_port = pi->port_id;
3310         }
3311
3312         pci_set_drvdata(pdev, adapter);
3313         if (t3_prep_adapter(adapter, ai, 1) < 0) {
3314                 err = -ENODEV;
3315                 goto out_free_dev;
3316         }
3317
3318         /*
3319          * The card is now ready to go.  If any errors occur during device
3320          * registration we do not fail the whole card but rather proceed only
3321          * with the ports we manage to register successfully.  However we must
3322          * register at least one net device.
3323          */
3324         for_each_port(adapter, i) {
3325                 err = register_netdev(adapter->port[i]);
3326                 if (err)
3327                         dev_warn(&pdev->dev,
3328                                  "cannot register net device %s, skipping\n",
3329                                  adapter->port[i]->name);
3330                 else {
3331                         /*
3332                          * Change the name we use for messages to the name of
3333                          * the first successfully registered interface.
3334                          */
3335                         if (!adapter->registered_device_map)
3336                                 adapter->name = adapter->port[i]->name;
3337
3338                         __set_bit(i, &adapter->registered_device_map);
3339                 }
3340         }
3341         if (!adapter->registered_device_map) {
3342                 dev_err(&pdev->dev, "could not register any net devices\n");
3343                 goto out_free_dev;
3344         }
3345
3346         for_each_port(adapter, i)
3347                 cxgb3_init_iscsi_mac(adapter->port[i]);
3348
3349         /* Driver's ready. Reflect it on LEDs */
3350         t3_led_ready(adapter);
3351
3352         if (is_offload(adapter)) {
3353                 __set_bit(OFFLOAD_DEVMAP_BIT, &adapter->registered_device_map);
3354                 cxgb3_adapter_ofld(adapter);
3355         }
3356
3357         /* See what interrupts we'll be using */
3358         if (msi > 1 && cxgb_enable_msix(adapter) == 0)
3359                 adapter->flags |= USING_MSIX;
3360         else if (msi > 0 && pci_enable_msi(pdev) == 0)
3361                 adapter->flags |= USING_MSI;
3362
3363         set_nqsets(adapter);
3364
3365         err = sysfs_create_group(&adapter->port[0]->dev.kobj,
3366                                  &cxgb3_attr_group);
3367         if (err) {
3368                 dev_err(&pdev->dev, "cannot create sysfs group\n");
3369                 goto out_close_led;
3370         }
3371
3372         print_port_info(adapter, ai);
3373         return 0;
3374
3375 out_close_led:
3376         t3_set_reg_field(adapter, A_T3DBG_GPIO_EN, F_GPIO0_OUT_VAL, 0);
3377
3378 out_free_dev:
3379         iounmap(adapter->regs);
3380         for (i = ai->nports0 + ai->nports1 - 1; i >= 0; --i)
3381                 if (adapter->port[i])
3382                         free_netdev(adapter->port[i]);
3383
3384 out_free_adapter:
3385         kfree(adapter);
3386
3387 out_release_regions:
3388         pci_release_regions(pdev);
3389 out_disable_device:
3390         pci_disable_device(pdev);
3391 out:
3392         return err;
3393 }
3394
3395 static void remove_one(struct pci_dev *pdev)
3396 {
3397         struct adapter *adapter = pci_get_drvdata(pdev);
3398
3399         if (adapter) {
3400                 int i;
3401
3402                 t3_sge_stop(adapter);
3403                 sysfs_remove_group(&adapter->port[0]->dev.kobj,
3404                                    &cxgb3_attr_group);
3405
3406                 if (is_offload(adapter)) {
3407                         cxgb3_adapter_unofld(adapter);
3408                         if (test_bit(OFFLOAD_DEVMAP_BIT,
3409                                      &adapter->open_device_map))
3410                                 offload_close(&adapter->tdev);
3411                 }
3412
3413                 for_each_port(adapter, i)
3414                     if (test_bit(i, &adapter->registered_device_map))
3415                         unregister_netdev(adapter->port[i]);
3416
3417                 t3_stop_sge_timers(adapter);
3418                 t3_free_sge_resources(adapter);
3419                 cxgb_disable_msi(adapter);
3420
3421                 for_each_port(adapter, i)
3422                         if (adapter->port[i])
3423                                 free_netdev(adapter->port[i]);
3424
3425                 iounmap(adapter->regs);
3426                 if (adapter->nofail_skb)
3427                         kfree_skb(adapter->nofail_skb);
3428                 kfree(adapter);
3429                 pci_release_regions(pdev);
3430                 pci_disable_device(pdev);
3431         }
3432 }
3433
3434 static struct pci_driver driver = {
3435         .name = DRV_NAME,
3436         .id_table = cxgb3_pci_tbl,
3437         .probe = init_one,
3438         .remove = remove_one,
3439         .err_handler = &t3_err_handler,
3440 };
3441
3442 static int __init cxgb3_init_module(void)
3443 {
3444         int ret;
3445
3446         cxgb3_offload_init();
3447
3448         ret = pci_register_driver(&driver);
3449         return ret;
3450 }
3451
3452 static void __exit cxgb3_cleanup_module(void)
3453 {
3454         pci_unregister_driver(&driver);
3455         if (cxgb3_wq)
3456                 destroy_workqueue(cxgb3_wq);
3457 }
3458
3459 module_init(cxgb3_init_module);
3460 module_exit(cxgb3_cleanup_module);