]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
Merge remote-tracking branch 'signal/for-next'
[karo-tx-linux.git] / drivers / net / ethernet / chelsio / cxgb4 / cxgb4_main.c
1 /*
2  * This file is part of the Chelsio T4 Ethernet driver for Linux.
3  *
4  * Copyright (c) 2003-2010 Chelsio Communications, Inc. All rights reserved.
5  *
6  * This software is available to you under a choice of one of two
7  * licenses.  You may choose to be licensed under the terms of the GNU
8  * General Public License (GPL) Version 2, available from the file
9  * COPYING in the main directory of this source tree, or the
10  * OpenIB.org BSD license below:
11  *
12  *     Redistribution and use in source and binary forms, with or
13  *     without modification, are permitted provided that the following
14  *     conditions are met:
15  *
16  *      - Redistributions of source code must retain the above
17  *        copyright notice, this list of conditions and the following
18  *        disclaimer.
19  *
20  *      - Redistributions in binary form must reproduce the above
21  *        copyright notice, this list of conditions and the following
22  *        disclaimer in the documentation and/or other materials
23  *        provided with the distribution.
24  *
25  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
29  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
30  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
31  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32  * SOFTWARE.
33  */
34
35 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
36
37 #include <linux/bitmap.h>
38 #include <linux/crc32.h>
39 #include <linux/ctype.h>
40 #include <linux/debugfs.h>
41 #include <linux/err.h>
42 #include <linux/etherdevice.h>
43 #include <linux/firmware.h>
44 #include <linux/if.h>
45 #include <linux/if_vlan.h>
46 #include <linux/init.h>
47 #include <linux/log2.h>
48 #include <linux/mdio.h>
49 #include <linux/module.h>
50 #include <linux/moduleparam.h>
51 #include <linux/mutex.h>
52 #include <linux/netdevice.h>
53 #include <linux/pci.h>
54 #include <linux/aer.h>
55 #include <linux/rtnetlink.h>
56 #include <linux/sched.h>
57 #include <linux/seq_file.h>
58 #include <linux/sockios.h>
59 #include <linux/vmalloc.h>
60 #include <linux/workqueue.h>
61 #include <net/neighbour.h>
62 #include <net/netevent.h>
63 #include <asm/uaccess.h>
64
65 #include "cxgb4.h"
66 #include "t4_regs.h"
67 #include "t4_msg.h"
68 #include "t4fw_api.h"
69 #include "l2t.h"
70
71 #define DRV_VERSION "1.3.0-ko"
72 #define DRV_DESC "Chelsio T4 Network Driver"
73
74 /*
75  * Max interrupt hold-off timer value in us.  Queues fall back to this value
76  * under extreme memory pressure so it's largish to give the system time to
77  * recover.
78  */
79 #define MAX_SGE_TIMERVAL 200U
80
81 enum {
82         /*
83          * Physical Function provisioning constants.
84          */
85         PFRES_NVI = 4,                  /* # of Virtual Interfaces */
86         PFRES_NETHCTRL = 128,           /* # of EQs used for ETH or CTRL Qs */
87         PFRES_NIQFLINT = 128,           /* # of ingress Qs/w Free List(s)/intr
88                                          */
89         PFRES_NEQ = 256,                /* # of egress queues */
90         PFRES_NIQ = 0,                  /* # of ingress queues */
91         PFRES_TC = 0,                   /* PCI-E traffic class */
92         PFRES_NEXACTF = 128,            /* # of exact MPS filters */
93
94         PFRES_R_CAPS = FW_CMD_CAP_PF,
95         PFRES_WX_CAPS = FW_CMD_CAP_PF,
96
97 #ifdef CONFIG_PCI_IOV
98         /*
99          * Virtual Function provisioning constants.  We need two extra Ingress
100          * Queues with Interrupt capability to serve as the VF's Firmware
101          * Event Queue and Forwarded Interrupt Queue (when using MSI mode) --
102          * neither will have Free Lists associated with them).  For each
103          * Ethernet/Control Egress Queue and for each Free List, we need an
104          * Egress Context.
105          */
106         VFRES_NPORTS = 1,               /* # of "ports" per VF */
107         VFRES_NQSETS = 2,               /* # of "Queue Sets" per VF */
108
109         VFRES_NVI = VFRES_NPORTS,       /* # of Virtual Interfaces */
110         VFRES_NETHCTRL = VFRES_NQSETS,  /* # of EQs used for ETH or CTRL Qs */
111         VFRES_NIQFLINT = VFRES_NQSETS+2,/* # of ingress Qs/w Free List(s)/intr */
112         VFRES_NEQ = VFRES_NQSETS*2,     /* # of egress queues */
113         VFRES_NIQ = 0,                  /* # of non-fl/int ingress queues */
114         VFRES_TC = 0,                   /* PCI-E traffic class */
115         VFRES_NEXACTF = 16,             /* # of exact MPS filters */
116
117         VFRES_R_CAPS = FW_CMD_CAP_DMAQ|FW_CMD_CAP_VF|FW_CMD_CAP_PORT,
118         VFRES_WX_CAPS = FW_CMD_CAP_DMAQ|FW_CMD_CAP_VF,
119 #endif
120 };
121
122 /*
123  * Provide a Port Access Rights Mask for the specified PF/VF.  This is very
124  * static and likely not to be useful in the long run.  We really need to
125  * implement some form of persistent configuration which the firmware
126  * controls.
127  */
128 static unsigned int pfvfres_pmask(struct adapter *adapter,
129                                   unsigned int pf, unsigned int vf)
130 {
131         unsigned int portn, portvec;
132
133         /*
134          * Give PF's access to all of the ports.
135          */
136         if (vf == 0)
137                 return FW_PFVF_CMD_PMASK_MASK;
138
139         /*
140          * For VFs, we'll assign them access to the ports based purely on the
141          * PF.  We assign active ports in order, wrapping around if there are
142          * fewer active ports than PFs: e.g. active port[pf % nports].
143          * Unfortunately the adapter's port_info structs haven't been
144          * initialized yet so we have to compute this.
145          */
146         if (adapter->params.nports == 0)
147                 return 0;
148
149         portn = pf % adapter->params.nports;
150         portvec = adapter->params.portvec;
151         for (;;) {
152                 /*
153                  * Isolate the lowest set bit in the port vector.  If we're at
154                  * the port number that we want, return that as the pmask.
155                  * otherwise mask that bit out of the port vector and
156                  * decrement our port number ...
157                  */
158                 unsigned int pmask = portvec ^ (portvec & (portvec-1));
159                 if (portn == 0)
160                         return pmask;
161                 portn--;
162                 portvec &= ~pmask;
163         }
164         /*NOTREACHED*/
165 }
166
167 enum {
168         MAX_TXQ_ENTRIES      = 16384,
169         MAX_CTRL_TXQ_ENTRIES = 1024,
170         MAX_RSPQ_ENTRIES     = 16384,
171         MAX_RX_BUFFERS       = 16384,
172         MIN_TXQ_ENTRIES      = 32,
173         MIN_CTRL_TXQ_ENTRIES = 32,
174         MIN_RSPQ_ENTRIES     = 128,
175         MIN_FL_ENTRIES       = 16
176 };
177
178 #define DFLT_MSG_ENABLE (NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_LINK | \
179                          NETIF_MSG_TIMER | NETIF_MSG_IFDOWN | NETIF_MSG_IFUP |\
180                          NETIF_MSG_RX_ERR | NETIF_MSG_TX_ERR)
181
182 #define CH_DEVICE(devid, data) { PCI_VDEVICE(CHELSIO, devid), (data) }
183
184 static DEFINE_PCI_DEVICE_TABLE(cxgb4_pci_tbl) = {
185         CH_DEVICE(0xa000, 0),  /* PE10K */
186         CH_DEVICE(0x4001, -1),
187         CH_DEVICE(0x4002, -1),
188         CH_DEVICE(0x4003, -1),
189         CH_DEVICE(0x4004, -1),
190         CH_DEVICE(0x4005, -1),
191         CH_DEVICE(0x4006, -1),
192         CH_DEVICE(0x4007, -1),
193         CH_DEVICE(0x4008, -1),
194         CH_DEVICE(0x4009, -1),
195         CH_DEVICE(0x400a, -1),
196         CH_DEVICE(0x4401, 4),
197         CH_DEVICE(0x4402, 4),
198         CH_DEVICE(0x4403, 4),
199         CH_DEVICE(0x4404, 4),
200         CH_DEVICE(0x4405, 4),
201         CH_DEVICE(0x4406, 4),
202         CH_DEVICE(0x4407, 4),
203         CH_DEVICE(0x4408, 4),
204         CH_DEVICE(0x4409, 4),
205         CH_DEVICE(0x440a, 4),
206         CH_DEVICE(0x440d, 4),
207         CH_DEVICE(0x440e, 4),
208         { 0, }
209 };
210
211 #define FW_FNAME "cxgb4/t4fw.bin"
212 #define FW_CFNAME "cxgb4/t4-config.txt"
213
214 MODULE_DESCRIPTION(DRV_DESC);
215 MODULE_AUTHOR("Chelsio Communications");
216 MODULE_LICENSE("Dual BSD/GPL");
217 MODULE_VERSION(DRV_VERSION);
218 MODULE_DEVICE_TABLE(pci, cxgb4_pci_tbl);
219 MODULE_FIRMWARE(FW_FNAME);
220
221 /*
222  * Normally we're willing to become the firmware's Master PF but will be happy
223  * if another PF has already become the Master and initialized the adapter.
224  * Setting "force_init" will cause this driver to forcibly establish itself as
225  * the Master PF and initialize the adapter.
226  */
227 static uint force_init;
228
229 module_param(force_init, uint, 0644);
230 MODULE_PARM_DESC(force_init, "Forcibly become Master PF and initialize adapter");
231
232 /*
233  * Normally if the firmware we connect to has Configuration File support, we
234  * use that and only fall back to the old Driver-based initialization if the
235  * Configuration File fails for some reason.  If force_old_init is set, then
236  * we'll always use the old Driver-based initialization sequence.
237  */
238 static uint force_old_init;
239
240 module_param(force_old_init, uint, 0644);
241 MODULE_PARM_DESC(force_old_init, "Force old initialization sequence");
242
243 static int dflt_msg_enable = DFLT_MSG_ENABLE;
244
245 module_param(dflt_msg_enable, int, 0644);
246 MODULE_PARM_DESC(dflt_msg_enable, "Chelsio T4 default message enable bitmap");
247
248 /*
249  * The driver uses the best interrupt scheme available on a platform in the
250  * order MSI-X, MSI, legacy INTx interrupts.  This parameter determines which
251  * of these schemes the driver may consider as follows:
252  *
253  * msi = 2: choose from among all three options
254  * msi = 1: only consider MSI and INTx interrupts
255  * msi = 0: force INTx interrupts
256  */
257 static int msi = 2;
258
259 module_param(msi, int, 0644);
260 MODULE_PARM_DESC(msi, "whether to use INTx (0), MSI (1) or MSI-X (2)");
261
262 /*
263  * Queue interrupt hold-off timer values.  Queues default to the first of these
264  * upon creation.
265  */
266 static unsigned int intr_holdoff[SGE_NTIMERS - 1] = { 5, 10, 20, 50, 100 };
267
268 module_param_array(intr_holdoff, uint, NULL, 0644);
269 MODULE_PARM_DESC(intr_holdoff, "values for queue interrupt hold-off timers "
270                  "0..4 in microseconds");
271
272 static unsigned int intr_cnt[SGE_NCOUNTERS - 1] = { 4, 8, 16 };
273
274 module_param_array(intr_cnt, uint, NULL, 0644);
275 MODULE_PARM_DESC(intr_cnt,
276                  "thresholds 1..3 for queue interrupt packet counters");
277
278 /*
279  * Normally we tell the chip to deliver Ingress Packets into our DMA buffers
280  * offset by 2 bytes in order to have the IP headers line up on 4-byte
281  * boundaries.  This is a requirement for many architectures which will throw
282  * a machine check fault if an attempt is made to access one of the 4-byte IP
283  * header fields on a non-4-byte boundary.  And it's a major performance issue
284  * even on some architectures which allow it like some implementations of the
285  * x86 ISA.  However, some architectures don't mind this and for some very
286  * edge-case performance sensitive applications (like forwarding large volumes
287  * of small packets), setting this DMA offset to 0 will decrease the number of
288  * PCI-E Bus transfers enough to measurably affect performance.
289  */
290 static int rx_dma_offset = 2;
291
292 static bool vf_acls;
293
294 #ifdef CONFIG_PCI_IOV
295 module_param(vf_acls, bool, 0644);
296 MODULE_PARM_DESC(vf_acls, "if set enable virtualization L2 ACL enforcement");
297
298 static unsigned int num_vf[4];
299
300 module_param_array(num_vf, uint, NULL, 0644);
301 MODULE_PARM_DESC(num_vf, "number of VFs for each of PFs 0-3");
302 #endif
303
304 /*
305  * The filter TCAM has a fixed portion and a variable portion.  The fixed
306  * portion can match on source/destination IP IPv4/IPv6 addresses and TCP/UDP
307  * ports.  The variable portion is 36 bits which can include things like Exact
308  * Match MAC Index (9 bits), Ether Type (16 bits), IP Protocol (8 bits),
309  * [Inner] VLAN Tag (17 bits), etc. which, if all were somehow selected, would
310  * far exceed the 36-bit budget for this "compressed" header portion of the
311  * filter.  Thus, we have a scarce resource which must be carefully managed.
312  *
313  * By default we set this up to mostly match the set of filter matching
314  * capabilities of T3 but with accommodations for some of T4's more
315  * interesting features:
316  *
317  *   { IP Fragment (1), MPS Match Type (3), IP Protocol (8),
318  *     [Inner] VLAN (17), Port (3), FCoE (1) }
319  */
320 enum {
321         TP_VLAN_PRI_MAP_DEFAULT = HW_TPL_FR_MT_PR_IV_P_FC,
322         TP_VLAN_PRI_MAP_FIRST = FCOE_SHIFT,
323         TP_VLAN_PRI_MAP_LAST = FRAGMENTATION_SHIFT,
324 };
325
326 static unsigned int tp_vlan_pri_map = TP_VLAN_PRI_MAP_DEFAULT;
327
328 static struct dentry *cxgb4_debugfs_root;
329
330 static LIST_HEAD(adapter_list);
331 static DEFINE_MUTEX(uld_mutex);
332 static struct cxgb4_uld_info ulds[CXGB4_ULD_MAX];
333 static const char *uld_str[] = { "RDMA", "iSCSI" };
334
335 static void link_report(struct net_device *dev)
336 {
337         if (!netif_carrier_ok(dev))
338                 netdev_info(dev, "link down\n");
339         else {
340                 static const char *fc[] = { "no", "Rx", "Tx", "Tx/Rx" };
341
342                 const char *s = "10Mbps";
343                 const struct port_info *p = netdev_priv(dev);
344
345                 switch (p->link_cfg.speed) {
346                 case SPEED_10000:
347                         s = "10Gbps";
348                         break;
349                 case SPEED_1000:
350                         s = "1000Mbps";
351                         break;
352                 case SPEED_100:
353                         s = "100Mbps";
354                         break;
355                 }
356
357                 netdev_info(dev, "link up, %s, full-duplex, %s PAUSE\n", s,
358                             fc[p->link_cfg.fc]);
359         }
360 }
361
362 void t4_os_link_changed(struct adapter *adapter, int port_id, int link_stat)
363 {
364         struct net_device *dev = adapter->port[port_id];
365
366         /* Skip changes from disabled ports. */
367         if (netif_running(dev) && link_stat != netif_carrier_ok(dev)) {
368                 if (link_stat)
369                         netif_carrier_on(dev);
370                 else
371                         netif_carrier_off(dev);
372
373                 link_report(dev);
374         }
375 }
376
377 void t4_os_portmod_changed(const struct adapter *adap, int port_id)
378 {
379         static const char *mod_str[] = {
380                 NULL, "LR", "SR", "ER", "passive DA", "active DA", "LRM"
381         };
382
383         const struct net_device *dev = adap->port[port_id];
384         const struct port_info *pi = netdev_priv(dev);
385
386         if (pi->mod_type == FW_PORT_MOD_TYPE_NONE)
387                 netdev_info(dev, "port module unplugged\n");
388         else if (pi->mod_type < ARRAY_SIZE(mod_str))
389                 netdev_info(dev, "%s module inserted\n", mod_str[pi->mod_type]);
390 }
391
392 /*
393  * Configure the exact and hash address filters to handle a port's multicast
394  * and secondary unicast MAC addresses.
395  */
396 static int set_addr_filters(const struct net_device *dev, bool sleep)
397 {
398         u64 mhash = 0;
399         u64 uhash = 0;
400         bool free = true;
401         u16 filt_idx[7];
402         const u8 *addr[7];
403         int ret, naddr = 0;
404         const struct netdev_hw_addr *ha;
405         int uc_cnt = netdev_uc_count(dev);
406         int mc_cnt = netdev_mc_count(dev);
407         const struct port_info *pi = netdev_priv(dev);
408         unsigned int mb = pi->adapter->fn;
409
410         /* first do the secondary unicast addresses */
411         netdev_for_each_uc_addr(ha, dev) {
412                 addr[naddr++] = ha->addr;
413                 if (--uc_cnt == 0 || naddr >= ARRAY_SIZE(addr)) {
414                         ret = t4_alloc_mac_filt(pi->adapter, mb, pi->viid, free,
415                                         naddr, addr, filt_idx, &uhash, sleep);
416                         if (ret < 0)
417                                 return ret;
418
419                         free = false;
420                         naddr = 0;
421                 }
422         }
423
424         /* next set up the multicast addresses */
425         netdev_for_each_mc_addr(ha, dev) {
426                 addr[naddr++] = ha->addr;
427                 if (--mc_cnt == 0 || naddr >= ARRAY_SIZE(addr)) {
428                         ret = t4_alloc_mac_filt(pi->adapter, mb, pi->viid, free,
429                                         naddr, addr, filt_idx, &mhash, sleep);
430                         if (ret < 0)
431                                 return ret;
432
433                         free = false;
434                         naddr = 0;
435                 }
436         }
437
438         return t4_set_addr_hash(pi->adapter, mb, pi->viid, uhash != 0,
439                                 uhash | mhash, sleep);
440 }
441
442 int dbfifo_int_thresh = 10; /* 10 == 640 entry threshold */
443 module_param(dbfifo_int_thresh, int, 0644);
444 MODULE_PARM_DESC(dbfifo_int_thresh, "doorbell fifo interrupt threshold");
445
446 /*
447  * usecs to sleep while draining the dbfifo
448  */
449 static int dbfifo_drain_delay = 1000;
450 module_param(dbfifo_drain_delay, int, 0644);
451 MODULE_PARM_DESC(dbfifo_drain_delay,
452                  "usecs to sleep while draining the dbfifo");
453
454 /*
455  * Set Rx properties of a port, such as promiscruity, address filters, and MTU.
456  * If @mtu is -1 it is left unchanged.
457  */
458 static int set_rxmode(struct net_device *dev, int mtu, bool sleep_ok)
459 {
460         int ret;
461         struct port_info *pi = netdev_priv(dev);
462
463         ret = set_addr_filters(dev, sleep_ok);
464         if (ret == 0)
465                 ret = t4_set_rxmode(pi->adapter, pi->adapter->fn, pi->viid, mtu,
466                                     (dev->flags & IFF_PROMISC) ? 1 : 0,
467                                     (dev->flags & IFF_ALLMULTI) ? 1 : 0, 1, -1,
468                                     sleep_ok);
469         return ret;
470 }
471
472 static struct workqueue_struct *workq;
473
474 /**
475  *      link_start - enable a port
476  *      @dev: the port to enable
477  *
478  *      Performs the MAC and PHY actions needed to enable a port.
479  */
480 static int link_start(struct net_device *dev)
481 {
482         int ret;
483         struct port_info *pi = netdev_priv(dev);
484         unsigned int mb = pi->adapter->fn;
485
486         /*
487          * We do not set address filters and promiscuity here, the stack does
488          * that step explicitly.
489          */
490         ret = t4_set_rxmode(pi->adapter, mb, pi->viid, dev->mtu, -1, -1, -1,
491                             !!(dev->features & NETIF_F_HW_VLAN_RX), true);
492         if (ret == 0) {
493                 ret = t4_change_mac(pi->adapter, mb, pi->viid,
494                                     pi->xact_addr_filt, dev->dev_addr, true,
495                                     true);
496                 if (ret >= 0) {
497                         pi->xact_addr_filt = ret;
498                         ret = 0;
499                 }
500         }
501         if (ret == 0)
502                 ret = t4_link_start(pi->adapter, mb, pi->tx_chan,
503                                     &pi->link_cfg);
504         if (ret == 0)
505                 ret = t4_enable_vi(pi->adapter, mb, pi->viid, true, true);
506         return ret;
507 }
508
509 /*
510  * Response queue handler for the FW event queue.
511  */
512 static int fwevtq_handler(struct sge_rspq *q, const __be64 *rsp,
513                           const struct pkt_gl *gl)
514 {
515         u8 opcode = ((const struct rss_header *)rsp)->opcode;
516
517         rsp++;                                          /* skip RSS header */
518         if (likely(opcode == CPL_SGE_EGR_UPDATE)) {
519                 const struct cpl_sge_egr_update *p = (void *)rsp;
520                 unsigned int qid = EGR_QID(ntohl(p->opcode_qid));
521                 struct sge_txq *txq;
522
523                 txq = q->adap->sge.egr_map[qid - q->adap->sge.egr_start];
524                 txq->restarts++;
525                 if ((u8 *)txq < (u8 *)q->adap->sge.ofldtxq) {
526                         struct sge_eth_txq *eq;
527
528                         eq = container_of(txq, struct sge_eth_txq, q);
529                         netif_tx_wake_queue(eq->txq);
530                 } else {
531                         struct sge_ofld_txq *oq;
532
533                         oq = container_of(txq, struct sge_ofld_txq, q);
534                         tasklet_schedule(&oq->qresume_tsk);
535                 }
536         } else if (opcode == CPL_FW6_MSG || opcode == CPL_FW4_MSG) {
537                 const struct cpl_fw6_msg *p = (void *)rsp;
538
539                 if (p->type == 0)
540                         t4_handle_fw_rpl(q->adap, p->data);
541         } else if (opcode == CPL_L2T_WRITE_RPL) {
542                 const struct cpl_l2t_write_rpl *p = (void *)rsp;
543
544                 do_l2t_write_rpl(q->adap, p);
545         } else
546                 dev_err(q->adap->pdev_dev,
547                         "unexpected CPL %#x on FW event queue\n", opcode);
548         return 0;
549 }
550
551 /**
552  *      uldrx_handler - response queue handler for ULD queues
553  *      @q: the response queue that received the packet
554  *      @rsp: the response queue descriptor holding the offload message
555  *      @gl: the gather list of packet fragments
556  *
557  *      Deliver an ingress offload packet to a ULD.  All processing is done by
558  *      the ULD, we just maintain statistics.
559  */
560 static int uldrx_handler(struct sge_rspq *q, const __be64 *rsp,
561                          const struct pkt_gl *gl)
562 {
563         struct sge_ofld_rxq *rxq = container_of(q, struct sge_ofld_rxq, rspq);
564
565         if (ulds[q->uld].rx_handler(q->adap->uld_handle[q->uld], rsp, gl)) {
566                 rxq->stats.nomem++;
567                 return -1;
568         }
569         if (gl == NULL)
570                 rxq->stats.imm++;
571         else if (gl == CXGB4_MSG_AN)
572                 rxq->stats.an++;
573         else
574                 rxq->stats.pkts++;
575         return 0;
576 }
577
578 static void disable_msi(struct adapter *adapter)
579 {
580         if (adapter->flags & USING_MSIX) {
581                 pci_disable_msix(adapter->pdev);
582                 adapter->flags &= ~USING_MSIX;
583         } else if (adapter->flags & USING_MSI) {
584                 pci_disable_msi(adapter->pdev);
585                 adapter->flags &= ~USING_MSI;
586         }
587 }
588
589 /*
590  * Interrupt handler for non-data events used with MSI-X.
591  */
592 static irqreturn_t t4_nondata_intr(int irq, void *cookie)
593 {
594         struct adapter *adap = cookie;
595
596         u32 v = t4_read_reg(adap, MYPF_REG(PL_PF_INT_CAUSE));
597         if (v & PFSW) {
598                 adap->swintr = 1;
599                 t4_write_reg(adap, MYPF_REG(PL_PF_INT_CAUSE), v);
600         }
601         t4_slow_intr_handler(adap);
602         return IRQ_HANDLED;
603 }
604
605 /*
606  * Name the MSI-X interrupts.
607  */
608 static void name_msix_vecs(struct adapter *adap)
609 {
610         int i, j, msi_idx = 2, n = sizeof(adap->msix_info[0].desc);
611
612         /* non-data interrupts */
613         snprintf(adap->msix_info[0].desc, n, "%s", adap->port[0]->name);
614
615         /* FW events */
616         snprintf(adap->msix_info[1].desc, n, "%s-FWeventq",
617                  adap->port[0]->name);
618
619         /* Ethernet queues */
620         for_each_port(adap, j) {
621                 struct net_device *d = adap->port[j];
622                 const struct port_info *pi = netdev_priv(d);
623
624                 for (i = 0; i < pi->nqsets; i++, msi_idx++)
625                         snprintf(adap->msix_info[msi_idx].desc, n, "%s-Rx%d",
626                                  d->name, i);
627         }
628
629         /* offload queues */
630         for_each_ofldrxq(&adap->sge, i)
631                 snprintf(adap->msix_info[msi_idx++].desc, n, "%s-ofld%d",
632                          adap->port[0]->name, i);
633
634         for_each_rdmarxq(&adap->sge, i)
635                 snprintf(adap->msix_info[msi_idx++].desc, n, "%s-rdma%d",
636                          adap->port[0]->name, i);
637 }
638
639 static int request_msix_queue_irqs(struct adapter *adap)
640 {
641         struct sge *s = &adap->sge;
642         int err, ethqidx, ofldqidx = 0, rdmaqidx = 0, msi_index = 2;
643
644         err = request_irq(adap->msix_info[1].vec, t4_sge_intr_msix, 0,
645                           adap->msix_info[1].desc, &s->fw_evtq);
646         if (err)
647                 return err;
648
649         for_each_ethrxq(s, ethqidx) {
650                 err = request_irq(adap->msix_info[msi_index].vec,
651                                   t4_sge_intr_msix, 0,
652                                   adap->msix_info[msi_index].desc,
653                                   &s->ethrxq[ethqidx].rspq);
654                 if (err)
655                         goto unwind;
656                 msi_index++;
657         }
658         for_each_ofldrxq(s, ofldqidx) {
659                 err = request_irq(adap->msix_info[msi_index].vec,
660                                   t4_sge_intr_msix, 0,
661                                   adap->msix_info[msi_index].desc,
662                                   &s->ofldrxq[ofldqidx].rspq);
663                 if (err)
664                         goto unwind;
665                 msi_index++;
666         }
667         for_each_rdmarxq(s, rdmaqidx) {
668                 err = request_irq(adap->msix_info[msi_index].vec,
669                                   t4_sge_intr_msix, 0,
670                                   adap->msix_info[msi_index].desc,
671                                   &s->rdmarxq[rdmaqidx].rspq);
672                 if (err)
673                         goto unwind;
674                 msi_index++;
675         }
676         return 0;
677
678 unwind:
679         while (--rdmaqidx >= 0)
680                 free_irq(adap->msix_info[--msi_index].vec,
681                          &s->rdmarxq[rdmaqidx].rspq);
682         while (--ofldqidx >= 0)
683                 free_irq(adap->msix_info[--msi_index].vec,
684                          &s->ofldrxq[ofldqidx].rspq);
685         while (--ethqidx >= 0)
686                 free_irq(adap->msix_info[--msi_index].vec,
687                          &s->ethrxq[ethqidx].rspq);
688         free_irq(adap->msix_info[1].vec, &s->fw_evtq);
689         return err;
690 }
691
692 static void free_msix_queue_irqs(struct adapter *adap)
693 {
694         int i, msi_index = 2;
695         struct sge *s = &adap->sge;
696
697         free_irq(adap->msix_info[1].vec, &s->fw_evtq);
698         for_each_ethrxq(s, i)
699                 free_irq(adap->msix_info[msi_index++].vec, &s->ethrxq[i].rspq);
700         for_each_ofldrxq(s, i)
701                 free_irq(adap->msix_info[msi_index++].vec, &s->ofldrxq[i].rspq);
702         for_each_rdmarxq(s, i)
703                 free_irq(adap->msix_info[msi_index++].vec, &s->rdmarxq[i].rspq);
704 }
705
706 /**
707  *      write_rss - write the RSS table for a given port
708  *      @pi: the port
709  *      @queues: array of queue indices for RSS
710  *
711  *      Sets up the portion of the HW RSS table for the port's VI to distribute
712  *      packets to the Rx queues in @queues.
713  */
714 static int write_rss(const struct port_info *pi, const u16 *queues)
715 {
716         u16 *rss;
717         int i, err;
718         const struct sge_eth_rxq *q = &pi->adapter->sge.ethrxq[pi->first_qset];
719
720         rss = kmalloc(pi->rss_size * sizeof(u16), GFP_KERNEL);
721         if (!rss)
722                 return -ENOMEM;
723
724         /* map the queue indices to queue ids */
725         for (i = 0; i < pi->rss_size; i++, queues++)
726                 rss[i] = q[*queues].rspq.abs_id;
727
728         err = t4_config_rss_range(pi->adapter, pi->adapter->fn, pi->viid, 0,
729                                   pi->rss_size, rss, pi->rss_size);
730         kfree(rss);
731         return err;
732 }
733
734 /**
735  *      setup_rss - configure RSS
736  *      @adap: the adapter
737  *
738  *      Sets up RSS for each port.
739  */
740 static int setup_rss(struct adapter *adap)
741 {
742         int i, err;
743
744         for_each_port(adap, i) {
745                 const struct port_info *pi = adap2pinfo(adap, i);
746
747                 err = write_rss(pi, pi->rss);
748                 if (err)
749                         return err;
750         }
751         return 0;
752 }
753
754 /*
755  * Return the channel of the ingress queue with the given qid.
756  */
757 static unsigned int rxq_to_chan(const struct sge *p, unsigned int qid)
758 {
759         qid -= p->ingr_start;
760         return netdev2pinfo(p->ingr_map[qid]->netdev)->tx_chan;
761 }
762
763 /*
764  * Wait until all NAPI handlers are descheduled.
765  */
766 static void quiesce_rx(struct adapter *adap)
767 {
768         int i;
769
770         for (i = 0; i < ARRAY_SIZE(adap->sge.ingr_map); i++) {
771                 struct sge_rspq *q = adap->sge.ingr_map[i];
772
773                 if (q && q->handler)
774                         napi_disable(&q->napi);
775         }
776 }
777
778 /*
779  * Enable NAPI scheduling and interrupt generation for all Rx queues.
780  */
781 static void enable_rx(struct adapter *adap)
782 {
783         int i;
784
785         for (i = 0; i < ARRAY_SIZE(adap->sge.ingr_map); i++) {
786                 struct sge_rspq *q = adap->sge.ingr_map[i];
787
788                 if (!q)
789                         continue;
790                 if (q->handler)
791                         napi_enable(&q->napi);
792                 /* 0-increment GTS to start the timer and enable interrupts */
793                 t4_write_reg(adap, MYPF_REG(SGE_PF_GTS),
794                              SEINTARM(q->intr_params) |
795                              INGRESSQID(q->cntxt_id));
796         }
797 }
798
799 /**
800  *      setup_sge_queues - configure SGE Tx/Rx/response queues
801  *      @adap: the adapter
802  *
803  *      Determines how many sets of SGE queues to use and initializes them.
804  *      We support multiple queue sets per port if we have MSI-X, otherwise
805  *      just one queue set per port.
806  */
807 static int setup_sge_queues(struct adapter *adap)
808 {
809         int err, msi_idx, i, j;
810         struct sge *s = &adap->sge;
811
812         bitmap_zero(s->starving_fl, MAX_EGRQ);
813         bitmap_zero(s->txq_maperr, MAX_EGRQ);
814
815         if (adap->flags & USING_MSIX)
816                 msi_idx = 1;         /* vector 0 is for non-queue interrupts */
817         else {
818                 err = t4_sge_alloc_rxq(adap, &s->intrq, false, adap->port[0], 0,
819                                        NULL, NULL);
820                 if (err)
821                         return err;
822                 msi_idx = -((int)s->intrq.abs_id + 1);
823         }
824
825         err = t4_sge_alloc_rxq(adap, &s->fw_evtq, true, adap->port[0],
826                                msi_idx, NULL, fwevtq_handler);
827         if (err) {
828 freeout:        t4_free_sge_resources(adap);
829                 return err;
830         }
831
832         for_each_port(adap, i) {
833                 struct net_device *dev = adap->port[i];
834                 struct port_info *pi = netdev_priv(dev);
835                 struct sge_eth_rxq *q = &s->ethrxq[pi->first_qset];
836                 struct sge_eth_txq *t = &s->ethtxq[pi->first_qset];
837
838                 for (j = 0; j < pi->nqsets; j++, q++) {
839                         if (msi_idx > 0)
840                                 msi_idx++;
841                         err = t4_sge_alloc_rxq(adap, &q->rspq, false, dev,
842                                                msi_idx, &q->fl,
843                                                t4_ethrx_handler);
844                         if (err)
845                                 goto freeout;
846                         q->rspq.idx = j;
847                         memset(&q->stats, 0, sizeof(q->stats));
848                 }
849                 for (j = 0; j < pi->nqsets; j++, t++) {
850                         err = t4_sge_alloc_eth_txq(adap, t, dev,
851                                         netdev_get_tx_queue(dev, j),
852                                         s->fw_evtq.cntxt_id);
853                         if (err)
854                                 goto freeout;
855                 }
856         }
857
858         j = s->ofldqsets / adap->params.nports; /* ofld queues per channel */
859         for_each_ofldrxq(s, i) {
860                 struct sge_ofld_rxq *q = &s->ofldrxq[i];
861                 struct net_device *dev = adap->port[i / j];
862
863                 if (msi_idx > 0)
864                         msi_idx++;
865                 err = t4_sge_alloc_rxq(adap, &q->rspq, false, dev, msi_idx,
866                                        &q->fl, uldrx_handler);
867                 if (err)
868                         goto freeout;
869                 memset(&q->stats, 0, sizeof(q->stats));
870                 s->ofld_rxq[i] = q->rspq.abs_id;
871                 err = t4_sge_alloc_ofld_txq(adap, &s->ofldtxq[i], dev,
872                                             s->fw_evtq.cntxt_id);
873                 if (err)
874                         goto freeout;
875         }
876
877         for_each_rdmarxq(s, i) {
878                 struct sge_ofld_rxq *q = &s->rdmarxq[i];
879
880                 if (msi_idx > 0)
881                         msi_idx++;
882                 err = t4_sge_alloc_rxq(adap, &q->rspq, false, adap->port[i],
883                                        msi_idx, &q->fl, uldrx_handler);
884                 if (err)
885                         goto freeout;
886                 memset(&q->stats, 0, sizeof(q->stats));
887                 s->rdma_rxq[i] = q->rspq.abs_id;
888         }
889
890         for_each_port(adap, i) {
891                 /*
892                  * Note that ->rdmarxq[i].rspq.cntxt_id below is 0 if we don't
893                  * have RDMA queues, and that's the right value.
894                  */
895                 err = t4_sge_alloc_ctrl_txq(adap, &s->ctrlq[i], adap->port[i],
896                                             s->fw_evtq.cntxt_id,
897                                             s->rdmarxq[i].rspq.cntxt_id);
898                 if (err)
899                         goto freeout;
900         }
901
902         t4_write_reg(adap, MPS_TRC_RSS_CONTROL,
903                      RSSCONTROL(netdev2pinfo(adap->port[0])->tx_chan) |
904                      QUEUENUMBER(s->ethrxq[0].rspq.abs_id));
905         return 0;
906 }
907
908 /*
909  * Returns 0 if new FW was successfully loaded, a positive errno if a load was
910  * started but failed, and a negative errno if flash load couldn't start.
911  */
912 static int upgrade_fw(struct adapter *adap)
913 {
914         int ret;
915         u32 vers;
916         const struct fw_hdr *hdr;
917         const struct firmware *fw;
918         struct device *dev = adap->pdev_dev;
919
920         ret = request_firmware(&fw, FW_FNAME, dev);
921         if (ret < 0) {
922                 dev_err(dev, "unable to load firmware image " FW_FNAME
923                         ", error %d\n", ret);
924                 return ret;
925         }
926
927         hdr = (const struct fw_hdr *)fw->data;
928         vers = ntohl(hdr->fw_ver);
929         if (FW_HDR_FW_VER_MAJOR_GET(vers) != FW_VERSION_MAJOR) {
930                 ret = -EINVAL;              /* wrong major version, won't do */
931                 goto out;
932         }
933
934         /*
935          * If the flash FW is unusable or we found something newer, load it.
936          */
937         if (FW_HDR_FW_VER_MAJOR_GET(adap->params.fw_vers) != FW_VERSION_MAJOR ||
938             vers > adap->params.fw_vers) {
939                 dev_info(dev, "upgrading firmware ...\n");
940                 ret = t4_fw_upgrade(adap, adap->mbox, fw->data, fw->size,
941                                     /*force=*/false);
942                 if (!ret)
943                         dev_info(dev, "firmware successfully upgraded to "
944                                  FW_FNAME " (%d.%d.%d.%d)\n",
945                                  FW_HDR_FW_VER_MAJOR_GET(vers),
946                                  FW_HDR_FW_VER_MINOR_GET(vers),
947                                  FW_HDR_FW_VER_MICRO_GET(vers),
948                                  FW_HDR_FW_VER_BUILD_GET(vers));
949                 else
950                         dev_err(dev, "firmware upgrade failed! err=%d\n", -ret);
951         } else {
952                 /*
953                  * Tell our caller that we didn't upgrade the firmware.
954                  */
955                 ret = -EINVAL;
956         }
957
958 out:    release_firmware(fw);
959         return ret;
960 }
961
962 /*
963  * Allocate a chunk of memory using kmalloc or, if that fails, vmalloc.
964  * The allocated memory is cleared.
965  */
966 void *t4_alloc_mem(size_t size)
967 {
968         void *p = kzalloc(size, GFP_KERNEL);
969
970         if (!p)
971                 p = vzalloc(size);
972         return p;
973 }
974
975 /*
976  * Free memory allocated through alloc_mem().
977  */
978 static void t4_free_mem(void *addr)
979 {
980         if (is_vmalloc_addr(addr))
981                 vfree(addr);
982         else
983                 kfree(addr);
984 }
985
986 static inline int is_offload(const struct adapter *adap)
987 {
988         return adap->params.offload;
989 }
990
991 /*
992  * Implementation of ethtool operations.
993  */
994
995 static u32 get_msglevel(struct net_device *dev)
996 {
997         return netdev2adap(dev)->msg_enable;
998 }
999
1000 static void set_msglevel(struct net_device *dev, u32 val)
1001 {
1002         netdev2adap(dev)->msg_enable = val;
1003 }
1004
1005 static char stats_strings[][ETH_GSTRING_LEN] = {
1006         "TxOctetsOK         ",
1007         "TxFramesOK         ",
1008         "TxBroadcastFrames  ",
1009         "TxMulticastFrames  ",
1010         "TxUnicastFrames    ",
1011         "TxErrorFrames      ",
1012
1013         "TxFrames64         ",
1014         "TxFrames65To127    ",
1015         "TxFrames128To255   ",
1016         "TxFrames256To511   ",
1017         "TxFrames512To1023  ",
1018         "TxFrames1024To1518 ",
1019         "TxFrames1519ToMax  ",
1020
1021         "TxFramesDropped    ",
1022         "TxPauseFrames      ",
1023         "TxPPP0Frames       ",
1024         "TxPPP1Frames       ",
1025         "TxPPP2Frames       ",
1026         "TxPPP3Frames       ",
1027         "TxPPP4Frames       ",
1028         "TxPPP5Frames       ",
1029         "TxPPP6Frames       ",
1030         "TxPPP7Frames       ",
1031
1032         "RxOctetsOK         ",
1033         "RxFramesOK         ",
1034         "RxBroadcastFrames  ",
1035         "RxMulticastFrames  ",
1036         "RxUnicastFrames    ",
1037
1038         "RxFramesTooLong    ",
1039         "RxJabberErrors     ",
1040         "RxFCSErrors        ",
1041         "RxLengthErrors     ",
1042         "RxSymbolErrors     ",
1043         "RxRuntFrames       ",
1044
1045         "RxFrames64         ",
1046         "RxFrames65To127    ",
1047         "RxFrames128To255   ",
1048         "RxFrames256To511   ",
1049         "RxFrames512To1023  ",
1050         "RxFrames1024To1518 ",
1051         "RxFrames1519ToMax  ",
1052
1053         "RxPauseFrames      ",
1054         "RxPPP0Frames       ",
1055         "RxPPP1Frames       ",
1056         "RxPPP2Frames       ",
1057         "RxPPP3Frames       ",
1058         "RxPPP4Frames       ",
1059         "RxPPP5Frames       ",
1060         "RxPPP6Frames       ",
1061         "RxPPP7Frames       ",
1062
1063         "RxBG0FramesDropped ",
1064         "RxBG1FramesDropped ",
1065         "RxBG2FramesDropped ",
1066         "RxBG3FramesDropped ",
1067         "RxBG0FramesTrunc   ",
1068         "RxBG1FramesTrunc   ",
1069         "RxBG2FramesTrunc   ",
1070         "RxBG3FramesTrunc   ",
1071
1072         "TSO                ",
1073         "TxCsumOffload      ",
1074         "RxCsumGood         ",
1075         "VLANextractions    ",
1076         "VLANinsertions     ",
1077         "GROpackets         ",
1078         "GROmerged          ",
1079 };
1080
1081 static int get_sset_count(struct net_device *dev, int sset)
1082 {
1083         switch (sset) {
1084         case ETH_SS_STATS:
1085                 return ARRAY_SIZE(stats_strings);
1086         default:
1087                 return -EOPNOTSUPP;
1088         }
1089 }
1090
1091 #define T4_REGMAP_SIZE (160 * 1024)
1092
1093 static int get_regs_len(struct net_device *dev)
1094 {
1095         return T4_REGMAP_SIZE;
1096 }
1097
1098 static int get_eeprom_len(struct net_device *dev)
1099 {
1100         return EEPROMSIZE;
1101 }
1102
1103 static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
1104 {
1105         struct adapter *adapter = netdev2adap(dev);
1106
1107         strlcpy(info->driver, KBUILD_MODNAME, sizeof(info->driver));
1108         strlcpy(info->version, DRV_VERSION, sizeof(info->version));
1109         strlcpy(info->bus_info, pci_name(adapter->pdev),
1110                 sizeof(info->bus_info));
1111
1112         if (adapter->params.fw_vers)
1113                 snprintf(info->fw_version, sizeof(info->fw_version),
1114                         "%u.%u.%u.%u, TP %u.%u.%u.%u",
1115                         FW_HDR_FW_VER_MAJOR_GET(adapter->params.fw_vers),
1116                         FW_HDR_FW_VER_MINOR_GET(adapter->params.fw_vers),
1117                         FW_HDR_FW_VER_MICRO_GET(adapter->params.fw_vers),
1118                         FW_HDR_FW_VER_BUILD_GET(adapter->params.fw_vers),
1119                         FW_HDR_FW_VER_MAJOR_GET(adapter->params.tp_vers),
1120                         FW_HDR_FW_VER_MINOR_GET(adapter->params.tp_vers),
1121                         FW_HDR_FW_VER_MICRO_GET(adapter->params.tp_vers),
1122                         FW_HDR_FW_VER_BUILD_GET(adapter->params.tp_vers));
1123 }
1124
1125 static void get_strings(struct net_device *dev, u32 stringset, u8 *data)
1126 {
1127         if (stringset == ETH_SS_STATS)
1128                 memcpy(data, stats_strings, sizeof(stats_strings));
1129 }
1130
1131 /*
1132  * port stats maintained per queue of the port.  They should be in the same
1133  * order as in stats_strings above.
1134  */
1135 struct queue_port_stats {
1136         u64 tso;
1137         u64 tx_csum;
1138         u64 rx_csum;
1139         u64 vlan_ex;
1140         u64 vlan_ins;
1141         u64 gro_pkts;
1142         u64 gro_merged;
1143 };
1144
1145 static void collect_sge_port_stats(const struct adapter *adap,
1146                 const struct port_info *p, struct queue_port_stats *s)
1147 {
1148         int i;
1149         const struct sge_eth_txq *tx = &adap->sge.ethtxq[p->first_qset];
1150         const struct sge_eth_rxq *rx = &adap->sge.ethrxq[p->first_qset];
1151
1152         memset(s, 0, sizeof(*s));
1153         for (i = 0; i < p->nqsets; i++, rx++, tx++) {
1154                 s->tso += tx->tso;
1155                 s->tx_csum += tx->tx_cso;
1156                 s->rx_csum += rx->stats.rx_cso;
1157                 s->vlan_ex += rx->stats.vlan_ex;
1158                 s->vlan_ins += tx->vlan_ins;
1159                 s->gro_pkts += rx->stats.lro_pkts;
1160                 s->gro_merged += rx->stats.lro_merged;
1161         }
1162 }
1163
1164 static void get_stats(struct net_device *dev, struct ethtool_stats *stats,
1165                       u64 *data)
1166 {
1167         struct port_info *pi = netdev_priv(dev);
1168         struct adapter *adapter = pi->adapter;
1169
1170         t4_get_port_stats(adapter, pi->tx_chan, (struct port_stats *)data);
1171
1172         data += sizeof(struct port_stats) / sizeof(u64);
1173         collect_sge_port_stats(adapter, pi, (struct queue_port_stats *)data);
1174 }
1175
1176 /*
1177  * Return a version number to identify the type of adapter.  The scheme is:
1178  * - bits 0..9: chip version
1179  * - bits 10..15: chip revision
1180  * - bits 16..23: register dump version
1181  */
1182 static inline unsigned int mk_adap_vers(const struct adapter *ap)
1183 {
1184         return 4 | (ap->params.rev << 10) | (1 << 16);
1185 }
1186
1187 static void reg_block_dump(struct adapter *ap, void *buf, unsigned int start,
1188                            unsigned int end)
1189 {
1190         u32 *p = buf + start;
1191
1192         for ( ; start <= end; start += sizeof(u32))
1193                 *p++ = t4_read_reg(ap, start);
1194 }
1195
1196 static void get_regs(struct net_device *dev, struct ethtool_regs *regs,
1197                      void *buf)
1198 {
1199         static const unsigned int reg_ranges[] = {
1200                 0x1008, 0x1108,
1201                 0x1180, 0x11b4,
1202                 0x11fc, 0x123c,
1203                 0x1300, 0x173c,
1204                 0x1800, 0x18fc,
1205                 0x3000, 0x30d8,
1206                 0x30e0, 0x5924,
1207                 0x5960, 0x59d4,
1208                 0x5a00, 0x5af8,
1209                 0x6000, 0x6098,
1210                 0x6100, 0x6150,
1211                 0x6200, 0x6208,
1212                 0x6240, 0x6248,
1213                 0x6280, 0x6338,
1214                 0x6370, 0x638c,
1215                 0x6400, 0x643c,
1216                 0x6500, 0x6524,
1217                 0x6a00, 0x6a38,
1218                 0x6a60, 0x6a78,
1219                 0x6b00, 0x6b84,
1220                 0x6bf0, 0x6c84,
1221                 0x6cf0, 0x6d84,
1222                 0x6df0, 0x6e84,
1223                 0x6ef0, 0x6f84,
1224                 0x6ff0, 0x7084,
1225                 0x70f0, 0x7184,
1226                 0x71f0, 0x7284,
1227                 0x72f0, 0x7384,
1228                 0x73f0, 0x7450,
1229                 0x7500, 0x7530,
1230                 0x7600, 0x761c,
1231                 0x7680, 0x76cc,
1232                 0x7700, 0x7798,
1233                 0x77c0, 0x77fc,
1234                 0x7900, 0x79fc,
1235                 0x7b00, 0x7c38,
1236                 0x7d00, 0x7efc,
1237                 0x8dc0, 0x8e1c,
1238                 0x8e30, 0x8e78,
1239                 0x8ea0, 0x8f6c,
1240                 0x8fc0, 0x9074,
1241                 0x90fc, 0x90fc,
1242                 0x9400, 0x9458,
1243                 0x9600, 0x96bc,
1244                 0x9800, 0x9808,
1245                 0x9820, 0x983c,
1246                 0x9850, 0x9864,
1247                 0x9c00, 0x9c6c,
1248                 0x9c80, 0x9cec,
1249                 0x9d00, 0x9d6c,
1250                 0x9d80, 0x9dec,
1251                 0x9e00, 0x9e6c,
1252                 0x9e80, 0x9eec,
1253                 0x9f00, 0x9f6c,
1254                 0x9f80, 0x9fec,
1255                 0xd004, 0xd03c,
1256                 0xdfc0, 0xdfe0,
1257                 0xe000, 0xea7c,
1258                 0xf000, 0x11190,
1259                 0x19040, 0x1906c,
1260                 0x19078, 0x19080,
1261                 0x1908c, 0x19124,
1262                 0x19150, 0x191b0,
1263                 0x191d0, 0x191e8,
1264                 0x19238, 0x1924c,
1265                 0x193f8, 0x19474,
1266                 0x19490, 0x194f8,
1267                 0x19800, 0x19f30,
1268                 0x1a000, 0x1a06c,
1269                 0x1a0b0, 0x1a120,
1270                 0x1a128, 0x1a138,
1271                 0x1a190, 0x1a1c4,
1272                 0x1a1fc, 0x1a1fc,
1273                 0x1e040, 0x1e04c,
1274                 0x1e284, 0x1e28c,
1275                 0x1e2c0, 0x1e2c0,
1276                 0x1e2e0, 0x1e2e0,
1277                 0x1e300, 0x1e384,
1278                 0x1e3c0, 0x1e3c8,
1279                 0x1e440, 0x1e44c,
1280                 0x1e684, 0x1e68c,
1281                 0x1e6c0, 0x1e6c0,
1282                 0x1e6e0, 0x1e6e0,
1283                 0x1e700, 0x1e784,
1284                 0x1e7c0, 0x1e7c8,
1285                 0x1e840, 0x1e84c,
1286                 0x1ea84, 0x1ea8c,
1287                 0x1eac0, 0x1eac0,
1288                 0x1eae0, 0x1eae0,
1289                 0x1eb00, 0x1eb84,
1290                 0x1ebc0, 0x1ebc8,
1291                 0x1ec40, 0x1ec4c,
1292                 0x1ee84, 0x1ee8c,
1293                 0x1eec0, 0x1eec0,
1294                 0x1eee0, 0x1eee0,
1295                 0x1ef00, 0x1ef84,
1296                 0x1efc0, 0x1efc8,
1297                 0x1f040, 0x1f04c,
1298                 0x1f284, 0x1f28c,
1299                 0x1f2c0, 0x1f2c0,
1300                 0x1f2e0, 0x1f2e0,
1301                 0x1f300, 0x1f384,
1302                 0x1f3c0, 0x1f3c8,
1303                 0x1f440, 0x1f44c,
1304                 0x1f684, 0x1f68c,
1305                 0x1f6c0, 0x1f6c0,
1306                 0x1f6e0, 0x1f6e0,
1307                 0x1f700, 0x1f784,
1308                 0x1f7c0, 0x1f7c8,
1309                 0x1f840, 0x1f84c,
1310                 0x1fa84, 0x1fa8c,
1311                 0x1fac0, 0x1fac0,
1312                 0x1fae0, 0x1fae0,
1313                 0x1fb00, 0x1fb84,
1314                 0x1fbc0, 0x1fbc8,
1315                 0x1fc40, 0x1fc4c,
1316                 0x1fe84, 0x1fe8c,
1317                 0x1fec0, 0x1fec0,
1318                 0x1fee0, 0x1fee0,
1319                 0x1ff00, 0x1ff84,
1320                 0x1ffc0, 0x1ffc8,
1321                 0x20000, 0x2002c,
1322                 0x20100, 0x2013c,
1323                 0x20190, 0x201c8,
1324                 0x20200, 0x20318,
1325                 0x20400, 0x20528,
1326                 0x20540, 0x20614,
1327                 0x21000, 0x21040,
1328                 0x2104c, 0x21060,
1329                 0x210c0, 0x210ec,
1330                 0x21200, 0x21268,
1331                 0x21270, 0x21284,
1332                 0x212fc, 0x21388,
1333                 0x21400, 0x21404,
1334                 0x21500, 0x21518,
1335                 0x2152c, 0x2153c,
1336                 0x21550, 0x21554,
1337                 0x21600, 0x21600,
1338                 0x21608, 0x21628,
1339                 0x21630, 0x2163c,
1340                 0x21700, 0x2171c,
1341                 0x21780, 0x2178c,
1342                 0x21800, 0x21c38,
1343                 0x21c80, 0x21d7c,
1344                 0x21e00, 0x21e04,
1345                 0x22000, 0x2202c,
1346                 0x22100, 0x2213c,
1347                 0x22190, 0x221c8,
1348                 0x22200, 0x22318,
1349                 0x22400, 0x22528,
1350                 0x22540, 0x22614,
1351                 0x23000, 0x23040,
1352                 0x2304c, 0x23060,
1353                 0x230c0, 0x230ec,
1354                 0x23200, 0x23268,
1355                 0x23270, 0x23284,
1356                 0x232fc, 0x23388,
1357                 0x23400, 0x23404,
1358                 0x23500, 0x23518,
1359                 0x2352c, 0x2353c,
1360                 0x23550, 0x23554,
1361                 0x23600, 0x23600,
1362                 0x23608, 0x23628,
1363                 0x23630, 0x2363c,
1364                 0x23700, 0x2371c,
1365                 0x23780, 0x2378c,
1366                 0x23800, 0x23c38,
1367                 0x23c80, 0x23d7c,
1368                 0x23e00, 0x23e04,
1369                 0x24000, 0x2402c,
1370                 0x24100, 0x2413c,
1371                 0x24190, 0x241c8,
1372                 0x24200, 0x24318,
1373                 0x24400, 0x24528,
1374                 0x24540, 0x24614,
1375                 0x25000, 0x25040,
1376                 0x2504c, 0x25060,
1377                 0x250c0, 0x250ec,
1378                 0x25200, 0x25268,
1379                 0x25270, 0x25284,
1380                 0x252fc, 0x25388,
1381                 0x25400, 0x25404,
1382                 0x25500, 0x25518,
1383                 0x2552c, 0x2553c,
1384                 0x25550, 0x25554,
1385                 0x25600, 0x25600,
1386                 0x25608, 0x25628,
1387                 0x25630, 0x2563c,
1388                 0x25700, 0x2571c,
1389                 0x25780, 0x2578c,
1390                 0x25800, 0x25c38,
1391                 0x25c80, 0x25d7c,
1392                 0x25e00, 0x25e04,
1393                 0x26000, 0x2602c,
1394                 0x26100, 0x2613c,
1395                 0x26190, 0x261c8,
1396                 0x26200, 0x26318,
1397                 0x26400, 0x26528,
1398                 0x26540, 0x26614,
1399                 0x27000, 0x27040,
1400                 0x2704c, 0x27060,
1401                 0x270c0, 0x270ec,
1402                 0x27200, 0x27268,
1403                 0x27270, 0x27284,
1404                 0x272fc, 0x27388,
1405                 0x27400, 0x27404,
1406                 0x27500, 0x27518,
1407                 0x2752c, 0x2753c,
1408                 0x27550, 0x27554,
1409                 0x27600, 0x27600,
1410                 0x27608, 0x27628,
1411                 0x27630, 0x2763c,
1412                 0x27700, 0x2771c,
1413                 0x27780, 0x2778c,
1414                 0x27800, 0x27c38,
1415                 0x27c80, 0x27d7c,
1416                 0x27e00, 0x27e04
1417         };
1418
1419         int i;
1420         struct adapter *ap = netdev2adap(dev);
1421
1422         regs->version = mk_adap_vers(ap);
1423
1424         memset(buf, 0, T4_REGMAP_SIZE);
1425         for (i = 0; i < ARRAY_SIZE(reg_ranges); i += 2)
1426                 reg_block_dump(ap, buf, reg_ranges[i], reg_ranges[i + 1]);
1427 }
1428
1429 static int restart_autoneg(struct net_device *dev)
1430 {
1431         struct port_info *p = netdev_priv(dev);
1432
1433         if (!netif_running(dev))
1434                 return -EAGAIN;
1435         if (p->link_cfg.autoneg != AUTONEG_ENABLE)
1436                 return -EINVAL;
1437         t4_restart_aneg(p->adapter, p->adapter->fn, p->tx_chan);
1438         return 0;
1439 }
1440
1441 static int identify_port(struct net_device *dev,
1442                          enum ethtool_phys_id_state state)
1443 {
1444         unsigned int val;
1445         struct adapter *adap = netdev2adap(dev);
1446
1447         if (state == ETHTOOL_ID_ACTIVE)
1448                 val = 0xffff;
1449         else if (state == ETHTOOL_ID_INACTIVE)
1450                 val = 0;
1451         else
1452                 return -EINVAL;
1453
1454         return t4_identify_port(adap, adap->fn, netdev2pinfo(dev)->viid, val);
1455 }
1456
1457 static unsigned int from_fw_linkcaps(unsigned int type, unsigned int caps)
1458 {
1459         unsigned int v = 0;
1460
1461         if (type == FW_PORT_TYPE_BT_SGMII || type == FW_PORT_TYPE_BT_XFI ||
1462             type == FW_PORT_TYPE_BT_XAUI) {
1463                 v |= SUPPORTED_TP;
1464                 if (caps & FW_PORT_CAP_SPEED_100M)
1465                         v |= SUPPORTED_100baseT_Full;
1466                 if (caps & FW_PORT_CAP_SPEED_1G)
1467                         v |= SUPPORTED_1000baseT_Full;
1468                 if (caps & FW_PORT_CAP_SPEED_10G)
1469                         v |= SUPPORTED_10000baseT_Full;
1470         } else if (type == FW_PORT_TYPE_KX4 || type == FW_PORT_TYPE_KX) {
1471                 v |= SUPPORTED_Backplane;
1472                 if (caps & FW_PORT_CAP_SPEED_1G)
1473                         v |= SUPPORTED_1000baseKX_Full;
1474                 if (caps & FW_PORT_CAP_SPEED_10G)
1475                         v |= SUPPORTED_10000baseKX4_Full;
1476         } else if (type == FW_PORT_TYPE_KR)
1477                 v |= SUPPORTED_Backplane | SUPPORTED_10000baseKR_Full;
1478         else if (type == FW_PORT_TYPE_BP_AP)
1479                 v |= SUPPORTED_Backplane | SUPPORTED_10000baseR_FEC |
1480                      SUPPORTED_10000baseKR_Full | SUPPORTED_1000baseKX_Full;
1481         else if (type == FW_PORT_TYPE_BP4_AP)
1482                 v |= SUPPORTED_Backplane | SUPPORTED_10000baseR_FEC |
1483                      SUPPORTED_10000baseKR_Full | SUPPORTED_1000baseKX_Full |
1484                      SUPPORTED_10000baseKX4_Full;
1485         else if (type == FW_PORT_TYPE_FIBER_XFI ||
1486                  type == FW_PORT_TYPE_FIBER_XAUI || type == FW_PORT_TYPE_SFP)
1487                 v |= SUPPORTED_FIBRE;
1488
1489         if (caps & FW_PORT_CAP_ANEG)
1490                 v |= SUPPORTED_Autoneg;
1491         return v;
1492 }
1493
1494 static unsigned int to_fw_linkcaps(unsigned int caps)
1495 {
1496         unsigned int v = 0;
1497
1498         if (caps & ADVERTISED_100baseT_Full)
1499                 v |= FW_PORT_CAP_SPEED_100M;
1500         if (caps & ADVERTISED_1000baseT_Full)
1501                 v |= FW_PORT_CAP_SPEED_1G;
1502         if (caps & ADVERTISED_10000baseT_Full)
1503                 v |= FW_PORT_CAP_SPEED_10G;
1504         return v;
1505 }
1506
1507 static int get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
1508 {
1509         const struct port_info *p = netdev_priv(dev);
1510
1511         if (p->port_type == FW_PORT_TYPE_BT_SGMII ||
1512             p->port_type == FW_PORT_TYPE_BT_XFI ||
1513             p->port_type == FW_PORT_TYPE_BT_XAUI)
1514                 cmd->port = PORT_TP;
1515         else if (p->port_type == FW_PORT_TYPE_FIBER_XFI ||
1516                  p->port_type == FW_PORT_TYPE_FIBER_XAUI)
1517                 cmd->port = PORT_FIBRE;
1518         else if (p->port_type == FW_PORT_TYPE_SFP) {
1519                 if (p->mod_type == FW_PORT_MOD_TYPE_TWINAX_PASSIVE ||
1520                     p->mod_type == FW_PORT_MOD_TYPE_TWINAX_ACTIVE)
1521                         cmd->port = PORT_DA;
1522                 else
1523                         cmd->port = PORT_FIBRE;
1524         } else
1525                 cmd->port = PORT_OTHER;
1526
1527         if (p->mdio_addr >= 0) {
1528                 cmd->phy_address = p->mdio_addr;
1529                 cmd->transceiver = XCVR_EXTERNAL;
1530                 cmd->mdio_support = p->port_type == FW_PORT_TYPE_BT_SGMII ?
1531                         MDIO_SUPPORTS_C22 : MDIO_SUPPORTS_C45;
1532         } else {
1533                 cmd->phy_address = 0;  /* not really, but no better option */
1534                 cmd->transceiver = XCVR_INTERNAL;
1535                 cmd->mdio_support = 0;
1536         }
1537
1538         cmd->supported = from_fw_linkcaps(p->port_type, p->link_cfg.supported);
1539         cmd->advertising = from_fw_linkcaps(p->port_type,
1540                                             p->link_cfg.advertising);
1541         ethtool_cmd_speed_set(cmd,
1542                               netif_carrier_ok(dev) ? p->link_cfg.speed : 0);
1543         cmd->duplex = DUPLEX_FULL;
1544         cmd->autoneg = p->link_cfg.autoneg;
1545         cmd->maxtxpkt = 0;
1546         cmd->maxrxpkt = 0;
1547         return 0;
1548 }
1549
1550 static unsigned int speed_to_caps(int speed)
1551 {
1552         if (speed == SPEED_100)
1553                 return FW_PORT_CAP_SPEED_100M;
1554         if (speed == SPEED_1000)
1555                 return FW_PORT_CAP_SPEED_1G;
1556         if (speed == SPEED_10000)
1557                 return FW_PORT_CAP_SPEED_10G;
1558         return 0;
1559 }
1560
1561 static int set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
1562 {
1563         unsigned int cap;
1564         struct port_info *p = netdev_priv(dev);
1565         struct link_config *lc = &p->link_cfg;
1566         u32 speed = ethtool_cmd_speed(cmd);
1567
1568         if (cmd->duplex != DUPLEX_FULL)     /* only full-duplex supported */
1569                 return -EINVAL;
1570
1571         if (!(lc->supported & FW_PORT_CAP_ANEG)) {
1572                 /*
1573                  * PHY offers a single speed.  See if that's what's
1574                  * being requested.
1575                  */
1576                 if (cmd->autoneg == AUTONEG_DISABLE &&
1577                     (lc->supported & speed_to_caps(speed)))
1578                         return 0;
1579                 return -EINVAL;
1580         }
1581
1582         if (cmd->autoneg == AUTONEG_DISABLE) {
1583                 cap = speed_to_caps(speed);
1584
1585                 if (!(lc->supported & cap) || (speed == SPEED_1000) ||
1586                     (speed == SPEED_10000))
1587                         return -EINVAL;
1588                 lc->requested_speed = cap;
1589                 lc->advertising = 0;
1590         } else {
1591                 cap = to_fw_linkcaps(cmd->advertising);
1592                 if (!(lc->supported & cap))
1593                         return -EINVAL;
1594                 lc->requested_speed = 0;
1595                 lc->advertising = cap | FW_PORT_CAP_ANEG;
1596         }
1597         lc->autoneg = cmd->autoneg;
1598
1599         if (netif_running(dev))
1600                 return t4_link_start(p->adapter, p->adapter->fn, p->tx_chan,
1601                                      lc);
1602         return 0;
1603 }
1604
1605 static void get_pauseparam(struct net_device *dev,
1606                            struct ethtool_pauseparam *epause)
1607 {
1608         struct port_info *p = netdev_priv(dev);
1609
1610         epause->autoneg = (p->link_cfg.requested_fc & PAUSE_AUTONEG) != 0;
1611         epause->rx_pause = (p->link_cfg.fc & PAUSE_RX) != 0;
1612         epause->tx_pause = (p->link_cfg.fc & PAUSE_TX) != 0;
1613 }
1614
1615 static int set_pauseparam(struct net_device *dev,
1616                           struct ethtool_pauseparam *epause)
1617 {
1618         struct port_info *p = netdev_priv(dev);
1619         struct link_config *lc = &p->link_cfg;
1620
1621         if (epause->autoneg == AUTONEG_DISABLE)
1622                 lc->requested_fc = 0;
1623         else if (lc->supported & FW_PORT_CAP_ANEG)
1624                 lc->requested_fc = PAUSE_AUTONEG;
1625         else
1626                 return -EINVAL;
1627
1628         if (epause->rx_pause)
1629                 lc->requested_fc |= PAUSE_RX;
1630         if (epause->tx_pause)
1631                 lc->requested_fc |= PAUSE_TX;
1632         if (netif_running(dev))
1633                 return t4_link_start(p->adapter, p->adapter->fn, p->tx_chan,
1634                                      lc);
1635         return 0;
1636 }
1637
1638 static void get_sge_param(struct net_device *dev, struct ethtool_ringparam *e)
1639 {
1640         const struct port_info *pi = netdev_priv(dev);
1641         const struct sge *s = &pi->adapter->sge;
1642
1643         e->rx_max_pending = MAX_RX_BUFFERS;
1644         e->rx_mini_max_pending = MAX_RSPQ_ENTRIES;
1645         e->rx_jumbo_max_pending = 0;
1646         e->tx_max_pending = MAX_TXQ_ENTRIES;
1647
1648         e->rx_pending = s->ethrxq[pi->first_qset].fl.size - 8;
1649         e->rx_mini_pending = s->ethrxq[pi->first_qset].rspq.size;
1650         e->rx_jumbo_pending = 0;
1651         e->tx_pending = s->ethtxq[pi->first_qset].q.size;
1652 }
1653
1654 static int set_sge_param(struct net_device *dev, struct ethtool_ringparam *e)
1655 {
1656         int i;
1657         const struct port_info *pi = netdev_priv(dev);
1658         struct adapter *adapter = pi->adapter;
1659         struct sge *s = &adapter->sge;
1660
1661         if (e->rx_pending > MAX_RX_BUFFERS || e->rx_jumbo_pending ||
1662             e->tx_pending > MAX_TXQ_ENTRIES ||
1663             e->rx_mini_pending > MAX_RSPQ_ENTRIES ||
1664             e->rx_mini_pending < MIN_RSPQ_ENTRIES ||
1665             e->rx_pending < MIN_FL_ENTRIES || e->tx_pending < MIN_TXQ_ENTRIES)
1666                 return -EINVAL;
1667
1668         if (adapter->flags & FULL_INIT_DONE)
1669                 return -EBUSY;
1670
1671         for (i = 0; i < pi->nqsets; ++i) {
1672                 s->ethtxq[pi->first_qset + i].q.size = e->tx_pending;
1673                 s->ethrxq[pi->first_qset + i].fl.size = e->rx_pending + 8;
1674                 s->ethrxq[pi->first_qset + i].rspq.size = e->rx_mini_pending;
1675         }
1676         return 0;
1677 }
1678
1679 static int closest_timer(const struct sge *s, int time)
1680 {
1681         int i, delta, match = 0, min_delta = INT_MAX;
1682
1683         for (i = 0; i < ARRAY_SIZE(s->timer_val); i++) {
1684                 delta = time - s->timer_val[i];
1685                 if (delta < 0)
1686                         delta = -delta;
1687                 if (delta < min_delta) {
1688                         min_delta = delta;
1689                         match = i;
1690                 }
1691         }
1692         return match;
1693 }
1694
1695 static int closest_thres(const struct sge *s, int thres)
1696 {
1697         int i, delta, match = 0, min_delta = INT_MAX;
1698
1699         for (i = 0; i < ARRAY_SIZE(s->counter_val); i++) {
1700                 delta = thres - s->counter_val[i];
1701                 if (delta < 0)
1702                         delta = -delta;
1703                 if (delta < min_delta) {
1704                         min_delta = delta;
1705                         match = i;
1706                 }
1707         }
1708         return match;
1709 }
1710
1711 /*
1712  * Return a queue's interrupt hold-off time in us.  0 means no timer.
1713  */
1714 static unsigned int qtimer_val(const struct adapter *adap,
1715                                const struct sge_rspq *q)
1716 {
1717         unsigned int idx = q->intr_params >> 1;
1718
1719         return idx < SGE_NTIMERS ? adap->sge.timer_val[idx] : 0;
1720 }
1721
1722 /**
1723  *      set_rxq_intr_params - set a queue's interrupt holdoff parameters
1724  *      @adap: the adapter
1725  *      @q: the Rx queue
1726  *      @us: the hold-off time in us, or 0 to disable timer
1727  *      @cnt: the hold-off packet count, or 0 to disable counter
1728  *
1729  *      Sets an Rx queue's interrupt hold-off time and packet count.  At least
1730  *      one of the two needs to be enabled for the queue to generate interrupts.
1731  */
1732 static int set_rxq_intr_params(struct adapter *adap, struct sge_rspq *q,
1733                                unsigned int us, unsigned int cnt)
1734 {
1735         if ((us | cnt) == 0)
1736                 cnt = 1;
1737
1738         if (cnt) {
1739                 int err;
1740                 u32 v, new_idx;
1741
1742                 new_idx = closest_thres(&adap->sge, cnt);
1743                 if (q->desc && q->pktcnt_idx != new_idx) {
1744                         /* the queue has already been created, update it */
1745                         v = FW_PARAMS_MNEM(FW_PARAMS_MNEM_DMAQ) |
1746                             FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_DMAQ_IQ_INTCNTTHRESH) |
1747                             FW_PARAMS_PARAM_YZ(q->cntxt_id);
1748                         err = t4_set_params(adap, adap->fn, adap->fn, 0, 1, &v,
1749                                             &new_idx);
1750                         if (err)
1751                                 return err;
1752                 }
1753                 q->pktcnt_idx = new_idx;
1754         }
1755
1756         us = us == 0 ? 6 : closest_timer(&adap->sge, us);
1757         q->intr_params = QINTR_TIMER_IDX(us) | (cnt > 0 ? QINTR_CNT_EN : 0);
1758         return 0;
1759 }
1760
1761 static int set_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
1762 {
1763         const struct port_info *pi = netdev_priv(dev);
1764         struct adapter *adap = pi->adapter;
1765
1766         return set_rxq_intr_params(adap, &adap->sge.ethrxq[pi->first_qset].rspq,
1767                         c->rx_coalesce_usecs, c->rx_max_coalesced_frames);
1768 }
1769
1770 static int get_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
1771 {
1772         const struct port_info *pi = netdev_priv(dev);
1773         const struct adapter *adap = pi->adapter;
1774         const struct sge_rspq *rq = &adap->sge.ethrxq[pi->first_qset].rspq;
1775
1776         c->rx_coalesce_usecs = qtimer_val(adap, rq);
1777         c->rx_max_coalesced_frames = (rq->intr_params & QINTR_CNT_EN) ?
1778                 adap->sge.counter_val[rq->pktcnt_idx] : 0;
1779         return 0;
1780 }
1781
1782 /**
1783  *      eeprom_ptov - translate a physical EEPROM address to virtual
1784  *      @phys_addr: the physical EEPROM address
1785  *      @fn: the PCI function number
1786  *      @sz: size of function-specific area
1787  *
1788  *      Translate a physical EEPROM address to virtual.  The first 1K is
1789  *      accessed through virtual addresses starting at 31K, the rest is
1790  *      accessed through virtual addresses starting at 0.
1791  *
1792  *      The mapping is as follows:
1793  *      [0..1K) -> [31K..32K)
1794  *      [1K..1K+A) -> [31K-A..31K)
1795  *      [1K+A..ES) -> [0..ES-A-1K)
1796  *
1797  *      where A = @fn * @sz, and ES = EEPROM size.
1798  */
1799 static int eeprom_ptov(unsigned int phys_addr, unsigned int fn, unsigned int sz)
1800 {
1801         fn *= sz;
1802         if (phys_addr < 1024)
1803                 return phys_addr + (31 << 10);
1804         if (phys_addr < 1024 + fn)
1805                 return 31744 - fn + phys_addr - 1024;
1806         if (phys_addr < EEPROMSIZE)
1807                 return phys_addr - 1024 - fn;
1808         return -EINVAL;
1809 }
1810
1811 /*
1812  * The next two routines implement eeprom read/write from physical addresses.
1813  */
1814 static int eeprom_rd_phys(struct adapter *adap, unsigned int phys_addr, u32 *v)
1815 {
1816         int vaddr = eeprom_ptov(phys_addr, adap->fn, EEPROMPFSIZE);
1817
1818         if (vaddr >= 0)
1819                 vaddr = pci_read_vpd(adap->pdev, vaddr, sizeof(u32), v);
1820         return vaddr < 0 ? vaddr : 0;
1821 }
1822
1823 static int eeprom_wr_phys(struct adapter *adap, unsigned int phys_addr, u32 v)
1824 {
1825         int vaddr = eeprom_ptov(phys_addr, adap->fn, EEPROMPFSIZE);
1826
1827         if (vaddr >= 0)
1828                 vaddr = pci_write_vpd(adap->pdev, vaddr, sizeof(u32), &v);
1829         return vaddr < 0 ? vaddr : 0;
1830 }
1831
1832 #define EEPROM_MAGIC 0x38E2F10C
1833
1834 static int get_eeprom(struct net_device *dev, struct ethtool_eeprom *e,
1835                       u8 *data)
1836 {
1837         int i, err = 0;
1838         struct adapter *adapter = netdev2adap(dev);
1839
1840         u8 *buf = kmalloc(EEPROMSIZE, GFP_KERNEL);
1841         if (!buf)
1842                 return -ENOMEM;
1843
1844         e->magic = EEPROM_MAGIC;
1845         for (i = e->offset & ~3; !err && i < e->offset + e->len; i += 4)
1846                 err = eeprom_rd_phys(adapter, i, (u32 *)&buf[i]);
1847
1848         if (!err)
1849                 memcpy(data, buf + e->offset, e->len);
1850         kfree(buf);
1851         return err;
1852 }
1853
1854 static int set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom,
1855                       u8 *data)
1856 {
1857         u8 *buf;
1858         int err = 0;
1859         u32 aligned_offset, aligned_len, *p;
1860         struct adapter *adapter = netdev2adap(dev);
1861
1862         if (eeprom->magic != EEPROM_MAGIC)
1863                 return -EINVAL;
1864
1865         aligned_offset = eeprom->offset & ~3;
1866         aligned_len = (eeprom->len + (eeprom->offset & 3) + 3) & ~3;
1867
1868         if (adapter->fn > 0) {
1869                 u32 start = 1024 + adapter->fn * EEPROMPFSIZE;
1870
1871                 if (aligned_offset < start ||
1872                     aligned_offset + aligned_len > start + EEPROMPFSIZE)
1873                         return -EPERM;
1874         }
1875
1876         if (aligned_offset != eeprom->offset || aligned_len != eeprom->len) {
1877                 /*
1878                  * RMW possibly needed for first or last words.
1879                  */
1880                 buf = kmalloc(aligned_len, GFP_KERNEL);
1881                 if (!buf)
1882                         return -ENOMEM;
1883                 err = eeprom_rd_phys(adapter, aligned_offset, (u32 *)buf);
1884                 if (!err && aligned_len > 4)
1885                         err = eeprom_rd_phys(adapter,
1886                                              aligned_offset + aligned_len - 4,
1887                                              (u32 *)&buf[aligned_len - 4]);
1888                 if (err)
1889                         goto out;
1890                 memcpy(buf + (eeprom->offset & 3), data, eeprom->len);
1891         } else
1892                 buf = data;
1893
1894         err = t4_seeprom_wp(adapter, false);
1895         if (err)
1896                 goto out;
1897
1898         for (p = (u32 *)buf; !err && aligned_len; aligned_len -= 4, p++) {
1899                 err = eeprom_wr_phys(adapter, aligned_offset, *p);
1900                 aligned_offset += 4;
1901         }
1902
1903         if (!err)
1904                 err = t4_seeprom_wp(adapter, true);
1905 out:
1906         if (buf != data)
1907                 kfree(buf);
1908         return err;
1909 }
1910
1911 static int set_flash(struct net_device *netdev, struct ethtool_flash *ef)
1912 {
1913         int ret;
1914         const struct firmware *fw;
1915         struct adapter *adap = netdev2adap(netdev);
1916
1917         ef->data[sizeof(ef->data) - 1] = '\0';
1918         ret = request_firmware(&fw, ef->data, adap->pdev_dev);
1919         if (ret < 0)
1920                 return ret;
1921
1922         ret = t4_load_fw(adap, fw->data, fw->size);
1923         release_firmware(fw);
1924         if (!ret)
1925                 dev_info(adap->pdev_dev, "loaded firmware %s\n", ef->data);
1926         return ret;
1927 }
1928
1929 #define WOL_SUPPORTED (WAKE_BCAST | WAKE_MAGIC)
1930 #define BCAST_CRC 0xa0ccc1a6
1931
1932 static void get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
1933 {
1934         wol->supported = WAKE_BCAST | WAKE_MAGIC;
1935         wol->wolopts = netdev2adap(dev)->wol;
1936         memset(&wol->sopass, 0, sizeof(wol->sopass));
1937 }
1938
1939 static int set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
1940 {
1941         int err = 0;
1942         struct port_info *pi = netdev_priv(dev);
1943
1944         if (wol->wolopts & ~WOL_SUPPORTED)
1945                 return -EINVAL;
1946         t4_wol_magic_enable(pi->adapter, pi->tx_chan,
1947                             (wol->wolopts & WAKE_MAGIC) ? dev->dev_addr : NULL);
1948         if (wol->wolopts & WAKE_BCAST) {
1949                 err = t4_wol_pat_enable(pi->adapter, pi->tx_chan, 0xfe, ~0ULL,
1950                                         ~0ULL, 0, false);
1951                 if (!err)
1952                         err = t4_wol_pat_enable(pi->adapter, pi->tx_chan, 1,
1953                                                 ~6ULL, ~0ULL, BCAST_CRC, true);
1954         } else
1955                 t4_wol_pat_enable(pi->adapter, pi->tx_chan, 0, 0, 0, 0, false);
1956         return err;
1957 }
1958
1959 static int cxgb_set_features(struct net_device *dev, netdev_features_t features)
1960 {
1961         const struct port_info *pi = netdev_priv(dev);
1962         netdev_features_t changed = dev->features ^ features;
1963         int err;
1964
1965         if (!(changed & NETIF_F_HW_VLAN_RX))
1966                 return 0;
1967
1968         err = t4_set_rxmode(pi->adapter, pi->adapter->fn, pi->viid, -1,
1969                             -1, -1, -1,
1970                             !!(features & NETIF_F_HW_VLAN_RX), true);
1971         if (unlikely(err))
1972                 dev->features = features ^ NETIF_F_HW_VLAN_RX;
1973         return err;
1974 }
1975
1976 static u32 get_rss_table_size(struct net_device *dev)
1977 {
1978         const struct port_info *pi = netdev_priv(dev);
1979
1980         return pi->rss_size;
1981 }
1982
1983 static int get_rss_table(struct net_device *dev, u32 *p)
1984 {
1985         const struct port_info *pi = netdev_priv(dev);
1986         unsigned int n = pi->rss_size;
1987
1988         while (n--)
1989                 p[n] = pi->rss[n];
1990         return 0;
1991 }
1992
1993 static int set_rss_table(struct net_device *dev, const u32 *p)
1994 {
1995         unsigned int i;
1996         struct port_info *pi = netdev_priv(dev);
1997
1998         for (i = 0; i < pi->rss_size; i++)
1999                 pi->rss[i] = p[i];
2000         if (pi->adapter->flags & FULL_INIT_DONE)
2001                 return write_rss(pi, pi->rss);
2002         return 0;
2003 }
2004
2005 static int get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
2006                      u32 *rules)
2007 {
2008         const struct port_info *pi = netdev_priv(dev);
2009
2010         switch (info->cmd) {
2011         case ETHTOOL_GRXFH: {
2012                 unsigned int v = pi->rss_mode;
2013
2014                 info->data = 0;
2015                 switch (info->flow_type) {
2016                 case TCP_V4_FLOW:
2017                         if (v & FW_RSS_VI_CONFIG_CMD_IP4FOURTUPEN)
2018                                 info->data = RXH_IP_SRC | RXH_IP_DST |
2019                                              RXH_L4_B_0_1 | RXH_L4_B_2_3;
2020                         else if (v & FW_RSS_VI_CONFIG_CMD_IP4TWOTUPEN)
2021                                 info->data = RXH_IP_SRC | RXH_IP_DST;
2022                         break;
2023                 case UDP_V4_FLOW:
2024                         if ((v & FW_RSS_VI_CONFIG_CMD_IP4FOURTUPEN) &&
2025                             (v & FW_RSS_VI_CONFIG_CMD_UDPEN))
2026                                 info->data = RXH_IP_SRC | RXH_IP_DST |
2027                                              RXH_L4_B_0_1 | RXH_L4_B_2_3;
2028                         else if (v & FW_RSS_VI_CONFIG_CMD_IP4TWOTUPEN)
2029                                 info->data = RXH_IP_SRC | RXH_IP_DST;
2030                         break;
2031                 case SCTP_V4_FLOW:
2032                 case AH_ESP_V4_FLOW:
2033                 case IPV4_FLOW:
2034                         if (v & FW_RSS_VI_CONFIG_CMD_IP4TWOTUPEN)
2035                                 info->data = RXH_IP_SRC | RXH_IP_DST;
2036                         break;
2037                 case TCP_V6_FLOW:
2038                         if (v & FW_RSS_VI_CONFIG_CMD_IP6FOURTUPEN)
2039                                 info->data = RXH_IP_SRC | RXH_IP_DST |
2040                                              RXH_L4_B_0_1 | RXH_L4_B_2_3;
2041                         else if (v & FW_RSS_VI_CONFIG_CMD_IP6TWOTUPEN)
2042                                 info->data = RXH_IP_SRC | RXH_IP_DST;
2043                         break;
2044                 case UDP_V6_FLOW:
2045                         if ((v & FW_RSS_VI_CONFIG_CMD_IP6FOURTUPEN) &&
2046                             (v & FW_RSS_VI_CONFIG_CMD_UDPEN))
2047                                 info->data = RXH_IP_SRC | RXH_IP_DST |
2048                                              RXH_L4_B_0_1 | RXH_L4_B_2_3;
2049                         else if (v & FW_RSS_VI_CONFIG_CMD_IP6TWOTUPEN)
2050                                 info->data = RXH_IP_SRC | RXH_IP_DST;
2051                         break;
2052                 case SCTP_V6_FLOW:
2053                 case AH_ESP_V6_FLOW:
2054                 case IPV6_FLOW:
2055                         if (v & FW_RSS_VI_CONFIG_CMD_IP6TWOTUPEN)
2056                                 info->data = RXH_IP_SRC | RXH_IP_DST;
2057                         break;
2058                 }
2059                 return 0;
2060         }
2061         case ETHTOOL_GRXRINGS:
2062                 info->data = pi->nqsets;
2063                 return 0;
2064         }
2065         return -EOPNOTSUPP;
2066 }
2067
2068 static const struct ethtool_ops cxgb_ethtool_ops = {
2069         .get_settings      = get_settings,
2070         .set_settings      = set_settings,
2071         .get_drvinfo       = get_drvinfo,
2072         .get_msglevel      = get_msglevel,
2073         .set_msglevel      = set_msglevel,
2074         .get_ringparam     = get_sge_param,
2075         .set_ringparam     = set_sge_param,
2076         .get_coalesce      = get_coalesce,
2077         .set_coalesce      = set_coalesce,
2078         .get_eeprom_len    = get_eeprom_len,
2079         .get_eeprom        = get_eeprom,
2080         .set_eeprom        = set_eeprom,
2081         .get_pauseparam    = get_pauseparam,
2082         .set_pauseparam    = set_pauseparam,
2083         .get_link          = ethtool_op_get_link,
2084         .get_strings       = get_strings,
2085         .set_phys_id       = identify_port,
2086         .nway_reset        = restart_autoneg,
2087         .get_sset_count    = get_sset_count,
2088         .get_ethtool_stats = get_stats,
2089         .get_regs_len      = get_regs_len,
2090         .get_regs          = get_regs,
2091         .get_wol           = get_wol,
2092         .set_wol           = set_wol,
2093         .get_rxnfc         = get_rxnfc,
2094         .get_rxfh_indir_size = get_rss_table_size,
2095         .get_rxfh_indir    = get_rss_table,
2096         .set_rxfh_indir    = set_rss_table,
2097         .flash_device      = set_flash,
2098 };
2099
2100 /*
2101  * debugfs support
2102  */
2103 static ssize_t mem_read(struct file *file, char __user *buf, size_t count,
2104                         loff_t *ppos)
2105 {
2106         loff_t pos = *ppos;
2107         loff_t avail = file->f_path.dentry->d_inode->i_size;
2108         unsigned int mem = (uintptr_t)file->private_data & 3;
2109         struct adapter *adap = file->private_data - mem;
2110
2111         if (pos < 0)
2112                 return -EINVAL;
2113         if (pos >= avail)
2114                 return 0;
2115         if (count > avail - pos)
2116                 count = avail - pos;
2117
2118         while (count) {
2119                 size_t len;
2120                 int ret, ofst;
2121                 __be32 data[16];
2122
2123                 if (mem == MEM_MC)
2124                         ret = t4_mc_read(adap, pos, data, NULL);
2125                 else
2126                         ret = t4_edc_read(adap, mem, pos, data, NULL);
2127                 if (ret)
2128                         return ret;
2129
2130                 ofst = pos % sizeof(data);
2131                 len = min(count, sizeof(data) - ofst);
2132                 if (copy_to_user(buf, (u8 *)data + ofst, len))
2133                         return -EFAULT;
2134
2135                 buf += len;
2136                 pos += len;
2137                 count -= len;
2138         }
2139         count = pos - *ppos;
2140         *ppos = pos;
2141         return count;
2142 }
2143
2144 static const struct file_operations mem_debugfs_fops = {
2145         .owner   = THIS_MODULE,
2146         .open    = simple_open,
2147         .read    = mem_read,
2148         .llseek  = default_llseek,
2149 };
2150
2151 static void __devinit add_debugfs_mem(struct adapter *adap, const char *name,
2152                                       unsigned int idx, unsigned int size_mb)
2153 {
2154         struct dentry *de;
2155
2156         de = debugfs_create_file(name, S_IRUSR, adap->debugfs_root,
2157                                  (void *)adap + idx, &mem_debugfs_fops);
2158         if (de && de->d_inode)
2159                 de->d_inode->i_size = size_mb << 20;
2160 }
2161
2162 static int __devinit setup_debugfs(struct adapter *adap)
2163 {
2164         int i;
2165
2166         if (IS_ERR_OR_NULL(adap->debugfs_root))
2167                 return -1;
2168
2169         i = t4_read_reg(adap, MA_TARGET_MEM_ENABLE);
2170         if (i & EDRAM0_ENABLE)
2171                 add_debugfs_mem(adap, "edc0", MEM_EDC0, 5);
2172         if (i & EDRAM1_ENABLE)
2173                 add_debugfs_mem(adap, "edc1", MEM_EDC1, 5);
2174         if (i & EXT_MEM_ENABLE)
2175                 add_debugfs_mem(adap, "mc", MEM_MC,
2176                         EXT_MEM_SIZE_GET(t4_read_reg(adap, MA_EXT_MEMORY_BAR)));
2177         if (adap->l2t)
2178                 debugfs_create_file("l2t", S_IRUSR, adap->debugfs_root, adap,
2179                                     &t4_l2t_fops);
2180         return 0;
2181 }
2182
2183 /*
2184  * upper-layer driver support
2185  */
2186
2187 /*
2188  * Allocate an active-open TID and set it to the supplied value.
2189  */
2190 int cxgb4_alloc_atid(struct tid_info *t, void *data)
2191 {
2192         int atid = -1;
2193
2194         spin_lock_bh(&t->atid_lock);
2195         if (t->afree) {
2196                 union aopen_entry *p = t->afree;
2197
2198                 atid = p - t->atid_tab;
2199                 t->afree = p->next;
2200                 p->data = data;
2201                 t->atids_in_use++;
2202         }
2203         spin_unlock_bh(&t->atid_lock);
2204         return atid;
2205 }
2206 EXPORT_SYMBOL(cxgb4_alloc_atid);
2207
2208 /*
2209  * Release an active-open TID.
2210  */
2211 void cxgb4_free_atid(struct tid_info *t, unsigned int atid)
2212 {
2213         union aopen_entry *p = &t->atid_tab[atid];
2214
2215         spin_lock_bh(&t->atid_lock);
2216         p->next = t->afree;
2217         t->afree = p;
2218         t->atids_in_use--;
2219         spin_unlock_bh(&t->atid_lock);
2220 }
2221 EXPORT_SYMBOL(cxgb4_free_atid);
2222
2223 /*
2224  * Allocate a server TID and set it to the supplied value.
2225  */
2226 int cxgb4_alloc_stid(struct tid_info *t, int family, void *data)
2227 {
2228         int stid;
2229
2230         spin_lock_bh(&t->stid_lock);
2231         if (family == PF_INET) {
2232                 stid = find_first_zero_bit(t->stid_bmap, t->nstids);
2233                 if (stid < t->nstids)
2234                         __set_bit(stid, t->stid_bmap);
2235                 else
2236                         stid = -1;
2237         } else {
2238                 stid = bitmap_find_free_region(t->stid_bmap, t->nstids, 2);
2239                 if (stid < 0)
2240                         stid = -1;
2241         }
2242         if (stid >= 0) {
2243                 t->stid_tab[stid].data = data;
2244                 stid += t->stid_base;
2245                 t->stids_in_use++;
2246         }
2247         spin_unlock_bh(&t->stid_lock);
2248         return stid;
2249 }
2250 EXPORT_SYMBOL(cxgb4_alloc_stid);
2251
2252 /*
2253  * Release a server TID.
2254  */
2255 void cxgb4_free_stid(struct tid_info *t, unsigned int stid, int family)
2256 {
2257         stid -= t->stid_base;
2258         spin_lock_bh(&t->stid_lock);
2259         if (family == PF_INET)
2260                 __clear_bit(stid, t->stid_bmap);
2261         else
2262                 bitmap_release_region(t->stid_bmap, stid, 2);
2263         t->stid_tab[stid].data = NULL;
2264         t->stids_in_use--;
2265         spin_unlock_bh(&t->stid_lock);
2266 }
2267 EXPORT_SYMBOL(cxgb4_free_stid);
2268
2269 /*
2270  * Populate a TID_RELEASE WR.  Caller must properly size the skb.
2271  */
2272 static void mk_tid_release(struct sk_buff *skb, unsigned int chan,
2273                            unsigned int tid)
2274 {
2275         struct cpl_tid_release *req;
2276
2277         set_wr_txq(skb, CPL_PRIORITY_SETUP, chan);
2278         req = (struct cpl_tid_release *)__skb_put(skb, sizeof(*req));
2279         INIT_TP_WR(req, tid);
2280         OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_TID_RELEASE, tid));
2281 }
2282
2283 /*
2284  * Queue a TID release request and if necessary schedule a work queue to
2285  * process it.
2286  */
2287 static void cxgb4_queue_tid_release(struct tid_info *t, unsigned int chan,
2288                                     unsigned int tid)
2289 {
2290         void **p = &t->tid_tab[tid];
2291         struct adapter *adap = container_of(t, struct adapter, tids);
2292
2293         spin_lock_bh(&adap->tid_release_lock);
2294         *p = adap->tid_release_head;
2295         /* Low 2 bits encode the Tx channel number */
2296         adap->tid_release_head = (void **)((uintptr_t)p | chan);
2297         if (!adap->tid_release_task_busy) {
2298                 adap->tid_release_task_busy = true;
2299                 queue_work(workq, &adap->tid_release_task);
2300         }
2301         spin_unlock_bh(&adap->tid_release_lock);
2302 }
2303
2304 /*
2305  * Process the list of pending TID release requests.
2306  */
2307 static void process_tid_release_list(struct work_struct *work)
2308 {
2309         struct sk_buff *skb;
2310         struct adapter *adap;
2311
2312         adap = container_of(work, struct adapter, tid_release_task);
2313
2314         spin_lock_bh(&adap->tid_release_lock);
2315         while (adap->tid_release_head) {
2316                 void **p = adap->tid_release_head;
2317                 unsigned int chan = (uintptr_t)p & 3;
2318                 p = (void *)p - chan;
2319
2320                 adap->tid_release_head = *p;
2321                 *p = NULL;
2322                 spin_unlock_bh(&adap->tid_release_lock);
2323
2324                 while (!(skb = alloc_skb(sizeof(struct cpl_tid_release),
2325                                          GFP_KERNEL)))
2326                         schedule_timeout_uninterruptible(1);
2327
2328                 mk_tid_release(skb, chan, p - adap->tids.tid_tab);
2329                 t4_ofld_send(adap, skb);
2330                 spin_lock_bh(&adap->tid_release_lock);
2331         }
2332         adap->tid_release_task_busy = false;
2333         spin_unlock_bh(&adap->tid_release_lock);
2334 }
2335
2336 /*
2337  * Release a TID and inform HW.  If we are unable to allocate the release
2338  * message we defer to a work queue.
2339  */
2340 void cxgb4_remove_tid(struct tid_info *t, unsigned int chan, unsigned int tid)
2341 {
2342         void *old;
2343         struct sk_buff *skb;
2344         struct adapter *adap = container_of(t, struct adapter, tids);
2345
2346         old = t->tid_tab[tid];
2347         skb = alloc_skb(sizeof(struct cpl_tid_release), GFP_ATOMIC);
2348         if (likely(skb)) {
2349                 t->tid_tab[tid] = NULL;
2350                 mk_tid_release(skb, chan, tid);
2351                 t4_ofld_send(adap, skb);
2352         } else
2353                 cxgb4_queue_tid_release(t, chan, tid);
2354         if (old)
2355                 atomic_dec(&t->tids_in_use);
2356 }
2357 EXPORT_SYMBOL(cxgb4_remove_tid);
2358
2359 /*
2360  * Allocate and initialize the TID tables.  Returns 0 on success.
2361  */
2362 static int tid_init(struct tid_info *t)
2363 {
2364         size_t size;
2365         unsigned int natids = t->natids;
2366
2367         size = t->ntids * sizeof(*t->tid_tab) + natids * sizeof(*t->atid_tab) +
2368                t->nstids * sizeof(*t->stid_tab) +
2369                BITS_TO_LONGS(t->nstids) * sizeof(long);
2370         t->tid_tab = t4_alloc_mem(size);
2371         if (!t->tid_tab)
2372                 return -ENOMEM;
2373
2374         t->atid_tab = (union aopen_entry *)&t->tid_tab[t->ntids];
2375         t->stid_tab = (struct serv_entry *)&t->atid_tab[natids];
2376         t->stid_bmap = (unsigned long *)&t->stid_tab[t->nstids];
2377         spin_lock_init(&t->stid_lock);
2378         spin_lock_init(&t->atid_lock);
2379
2380         t->stids_in_use = 0;
2381         t->afree = NULL;
2382         t->atids_in_use = 0;
2383         atomic_set(&t->tids_in_use, 0);
2384
2385         /* Setup the free list for atid_tab and clear the stid bitmap. */
2386         if (natids) {
2387                 while (--natids)
2388                         t->atid_tab[natids - 1].next = &t->atid_tab[natids];
2389                 t->afree = t->atid_tab;
2390         }
2391         bitmap_zero(t->stid_bmap, t->nstids);
2392         return 0;
2393 }
2394
2395 /**
2396  *      cxgb4_create_server - create an IP server
2397  *      @dev: the device
2398  *      @stid: the server TID
2399  *      @sip: local IP address to bind server to
2400  *      @sport: the server's TCP port
2401  *      @queue: queue to direct messages from this server to
2402  *
2403  *      Create an IP server for the given port and address.
2404  *      Returns <0 on error and one of the %NET_XMIT_* values on success.
2405  */
2406 int cxgb4_create_server(const struct net_device *dev, unsigned int stid,
2407                         __be32 sip, __be16 sport, unsigned int queue)
2408 {
2409         unsigned int chan;
2410         struct sk_buff *skb;
2411         struct adapter *adap;
2412         struct cpl_pass_open_req *req;
2413
2414         skb = alloc_skb(sizeof(*req), GFP_KERNEL);
2415         if (!skb)
2416                 return -ENOMEM;
2417
2418         adap = netdev2adap(dev);
2419         req = (struct cpl_pass_open_req *)__skb_put(skb, sizeof(*req));
2420         INIT_TP_WR(req, 0);
2421         OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_PASS_OPEN_REQ, stid));
2422         req->local_port = sport;
2423         req->peer_port = htons(0);
2424         req->local_ip = sip;
2425         req->peer_ip = htonl(0);
2426         chan = rxq_to_chan(&adap->sge, queue);
2427         req->opt0 = cpu_to_be64(TX_CHAN(chan));
2428         req->opt1 = cpu_to_be64(CONN_POLICY_ASK |
2429                                 SYN_RSS_ENABLE | SYN_RSS_QUEUE(queue));
2430         return t4_mgmt_tx(adap, skb);
2431 }
2432 EXPORT_SYMBOL(cxgb4_create_server);
2433
2434 /**
2435  *      cxgb4_best_mtu - find the entry in the MTU table closest to an MTU
2436  *      @mtus: the HW MTU table
2437  *      @mtu: the target MTU
2438  *      @idx: index of selected entry in the MTU table
2439  *
2440  *      Returns the index and the value in the HW MTU table that is closest to
2441  *      but does not exceed @mtu, unless @mtu is smaller than any value in the
2442  *      table, in which case that smallest available value is selected.
2443  */
2444 unsigned int cxgb4_best_mtu(const unsigned short *mtus, unsigned short mtu,
2445                             unsigned int *idx)
2446 {
2447         unsigned int i = 0;
2448
2449         while (i < NMTUS - 1 && mtus[i + 1] <= mtu)
2450                 ++i;
2451         if (idx)
2452                 *idx = i;
2453         return mtus[i];
2454 }
2455 EXPORT_SYMBOL(cxgb4_best_mtu);
2456
2457 /**
2458  *      cxgb4_port_chan - get the HW channel of a port
2459  *      @dev: the net device for the port
2460  *
2461  *      Return the HW Tx channel of the given port.
2462  */
2463 unsigned int cxgb4_port_chan(const struct net_device *dev)
2464 {
2465         return netdev2pinfo(dev)->tx_chan;
2466 }
2467 EXPORT_SYMBOL(cxgb4_port_chan);
2468
2469 unsigned int cxgb4_dbfifo_count(const struct net_device *dev, int lpfifo)
2470 {
2471         struct adapter *adap = netdev2adap(dev);
2472         u32 v;
2473
2474         v = t4_read_reg(adap, A_SGE_DBFIFO_STATUS);
2475         return lpfifo ? G_LP_COUNT(v) : G_HP_COUNT(v);
2476 }
2477 EXPORT_SYMBOL(cxgb4_dbfifo_count);
2478
2479 /**
2480  *      cxgb4_port_viid - get the VI id of a port
2481  *      @dev: the net device for the port
2482  *
2483  *      Return the VI id of the given port.
2484  */
2485 unsigned int cxgb4_port_viid(const struct net_device *dev)
2486 {
2487         return netdev2pinfo(dev)->viid;
2488 }
2489 EXPORT_SYMBOL(cxgb4_port_viid);
2490
2491 /**
2492  *      cxgb4_port_idx - get the index of a port
2493  *      @dev: the net device for the port
2494  *
2495  *      Return the index of the given port.
2496  */
2497 unsigned int cxgb4_port_idx(const struct net_device *dev)
2498 {
2499         return netdev2pinfo(dev)->port_id;
2500 }
2501 EXPORT_SYMBOL(cxgb4_port_idx);
2502
2503 void cxgb4_get_tcp_stats(struct pci_dev *pdev, struct tp_tcp_stats *v4,
2504                          struct tp_tcp_stats *v6)
2505 {
2506         struct adapter *adap = pci_get_drvdata(pdev);
2507
2508         spin_lock(&adap->stats_lock);
2509         t4_tp_get_tcp_stats(adap, v4, v6);
2510         spin_unlock(&adap->stats_lock);
2511 }
2512 EXPORT_SYMBOL(cxgb4_get_tcp_stats);
2513
2514 void cxgb4_iscsi_init(struct net_device *dev, unsigned int tag_mask,
2515                       const unsigned int *pgsz_order)
2516 {
2517         struct adapter *adap = netdev2adap(dev);
2518
2519         t4_write_reg(adap, ULP_RX_ISCSI_TAGMASK, tag_mask);
2520         t4_write_reg(adap, ULP_RX_ISCSI_PSZ, HPZ0(pgsz_order[0]) |
2521                      HPZ1(pgsz_order[1]) | HPZ2(pgsz_order[2]) |
2522                      HPZ3(pgsz_order[3]));
2523 }
2524 EXPORT_SYMBOL(cxgb4_iscsi_init);
2525
2526 int cxgb4_flush_eq_cache(struct net_device *dev)
2527 {
2528         struct adapter *adap = netdev2adap(dev);
2529         int ret;
2530
2531         ret = t4_fwaddrspace_write(adap, adap->mbox,
2532                                    0xe1000000 + A_SGE_CTXT_CMD, 0x20000000);
2533         return ret;
2534 }
2535 EXPORT_SYMBOL(cxgb4_flush_eq_cache);
2536
2537 static int read_eq_indices(struct adapter *adap, u16 qid, u16 *pidx, u16 *cidx)
2538 {
2539         u32 addr = t4_read_reg(adap, A_SGE_DBQ_CTXT_BADDR) + 24 * qid + 8;
2540         __be64 indices;
2541         int ret;
2542
2543         ret = t4_mem_win_read_len(adap, addr, (__be32 *)&indices, 8);
2544         if (!ret) {
2545                 *cidx = (be64_to_cpu(indices) >> 25) & 0xffff;
2546                 *pidx = (be64_to_cpu(indices) >> 9) & 0xffff;
2547         }
2548         return ret;
2549 }
2550
2551 int cxgb4_sync_txq_pidx(struct net_device *dev, u16 qid, u16 pidx,
2552                         u16 size)
2553 {
2554         struct adapter *adap = netdev2adap(dev);
2555         u16 hw_pidx, hw_cidx;
2556         int ret;
2557
2558         ret = read_eq_indices(adap, qid, &hw_pidx, &hw_cidx);
2559         if (ret)
2560                 goto out;
2561
2562         if (pidx != hw_pidx) {
2563                 u16 delta;
2564
2565                 if (pidx >= hw_pidx)
2566                         delta = pidx - hw_pidx;
2567                 else
2568                         delta = size - hw_pidx + pidx;
2569                 wmb();
2570                 t4_write_reg(adap, MYPF_REG(SGE_PF_KDOORBELL),
2571                              QID(qid) | PIDX(delta));
2572         }
2573 out:
2574         return ret;
2575 }
2576 EXPORT_SYMBOL(cxgb4_sync_txq_pidx);
2577
2578 static struct pci_driver cxgb4_driver;
2579
2580 static void check_neigh_update(struct neighbour *neigh)
2581 {
2582         const struct device *parent;
2583         const struct net_device *netdev = neigh->dev;
2584
2585         if (netdev->priv_flags & IFF_802_1Q_VLAN)
2586                 netdev = vlan_dev_real_dev(netdev);
2587         parent = netdev->dev.parent;
2588         if (parent && parent->driver == &cxgb4_driver.driver)
2589                 t4_l2t_update(dev_get_drvdata(parent), neigh);
2590 }
2591
2592 static int netevent_cb(struct notifier_block *nb, unsigned long event,
2593                        void *data)
2594 {
2595         switch (event) {
2596         case NETEVENT_NEIGH_UPDATE:
2597                 check_neigh_update(data);
2598                 break;
2599         case NETEVENT_REDIRECT:
2600         default:
2601                 break;
2602         }
2603         return 0;
2604 }
2605
2606 static bool netevent_registered;
2607 static struct notifier_block cxgb4_netevent_nb = {
2608         .notifier_call = netevent_cb
2609 };
2610
2611 static void drain_db_fifo(struct adapter *adap, int usecs)
2612 {
2613         u32 v;
2614
2615         do {
2616                 set_current_state(TASK_UNINTERRUPTIBLE);
2617                 schedule_timeout(usecs_to_jiffies(usecs));
2618                 v = t4_read_reg(adap, A_SGE_DBFIFO_STATUS);
2619                 if (G_LP_COUNT(v) == 0 && G_HP_COUNT(v) == 0)
2620                         break;
2621         } while (1);
2622 }
2623
2624 static void disable_txq_db(struct sge_txq *q)
2625 {
2626         spin_lock_irq(&q->db_lock);
2627         q->db_disabled = 1;
2628         spin_unlock_irq(&q->db_lock);
2629 }
2630
2631 static void enable_txq_db(struct sge_txq *q)
2632 {
2633         spin_lock_irq(&q->db_lock);
2634         q->db_disabled = 0;
2635         spin_unlock_irq(&q->db_lock);
2636 }
2637
2638 static void disable_dbs(struct adapter *adap)
2639 {
2640         int i;
2641
2642         for_each_ethrxq(&adap->sge, i)
2643                 disable_txq_db(&adap->sge.ethtxq[i].q);
2644         for_each_ofldrxq(&adap->sge, i)
2645                 disable_txq_db(&adap->sge.ofldtxq[i].q);
2646         for_each_port(adap, i)
2647                 disable_txq_db(&adap->sge.ctrlq[i].q);
2648 }
2649
2650 static void enable_dbs(struct adapter *adap)
2651 {
2652         int i;
2653
2654         for_each_ethrxq(&adap->sge, i)
2655                 enable_txq_db(&adap->sge.ethtxq[i].q);
2656         for_each_ofldrxq(&adap->sge, i)
2657                 enable_txq_db(&adap->sge.ofldtxq[i].q);
2658         for_each_port(adap, i)
2659                 enable_txq_db(&adap->sge.ctrlq[i].q);
2660 }
2661
2662 static void sync_txq_pidx(struct adapter *adap, struct sge_txq *q)
2663 {
2664         u16 hw_pidx, hw_cidx;
2665         int ret;
2666
2667         spin_lock_bh(&q->db_lock);
2668         ret = read_eq_indices(adap, (u16)q->cntxt_id, &hw_pidx, &hw_cidx);
2669         if (ret)
2670                 goto out;
2671         if (q->db_pidx != hw_pidx) {
2672                 u16 delta;
2673
2674                 if (q->db_pidx >= hw_pidx)
2675                         delta = q->db_pidx - hw_pidx;
2676                 else
2677                         delta = q->size - hw_pidx + q->db_pidx;
2678                 wmb();
2679                 t4_write_reg(adap, MYPF_REG(SGE_PF_KDOORBELL),
2680                              QID(q->cntxt_id) | PIDX(delta));
2681         }
2682 out:
2683         q->db_disabled = 0;
2684         spin_unlock_bh(&q->db_lock);
2685         if (ret)
2686                 CH_WARN(adap, "DB drop recovery failed.\n");
2687 }
2688 static void recover_all_queues(struct adapter *adap)
2689 {
2690         int i;
2691
2692         for_each_ethrxq(&adap->sge, i)
2693                 sync_txq_pidx(adap, &adap->sge.ethtxq[i].q);
2694         for_each_ofldrxq(&adap->sge, i)
2695                 sync_txq_pidx(adap, &adap->sge.ofldtxq[i].q);
2696         for_each_port(adap, i)
2697                 sync_txq_pidx(adap, &adap->sge.ctrlq[i].q);
2698 }
2699
2700 static void notify_rdma_uld(struct adapter *adap, enum cxgb4_control cmd)
2701 {
2702         mutex_lock(&uld_mutex);
2703         if (adap->uld_handle[CXGB4_ULD_RDMA])
2704                 ulds[CXGB4_ULD_RDMA].control(adap->uld_handle[CXGB4_ULD_RDMA],
2705                                 cmd);
2706         mutex_unlock(&uld_mutex);
2707 }
2708
2709 static void process_db_full(struct work_struct *work)
2710 {
2711         struct adapter *adap;
2712
2713         adap = container_of(work, struct adapter, db_full_task);
2714
2715         notify_rdma_uld(adap, CXGB4_CONTROL_DB_FULL);
2716         drain_db_fifo(adap, dbfifo_drain_delay);
2717         t4_set_reg_field(adap, SGE_INT_ENABLE3,
2718                          DBFIFO_HP_INT | DBFIFO_LP_INT,
2719                          DBFIFO_HP_INT | DBFIFO_LP_INT);
2720         notify_rdma_uld(adap, CXGB4_CONTROL_DB_EMPTY);
2721 }
2722
2723 static void process_db_drop(struct work_struct *work)
2724 {
2725         struct adapter *adap;
2726
2727         adap = container_of(work, struct adapter, db_drop_task);
2728
2729         t4_set_reg_field(adap, A_SGE_DOORBELL_CONTROL, F_DROPPED_DB, 0);
2730         disable_dbs(adap);
2731         notify_rdma_uld(adap, CXGB4_CONTROL_DB_DROP);
2732         drain_db_fifo(adap, 1);
2733         recover_all_queues(adap);
2734         enable_dbs(adap);
2735 }
2736
2737 void t4_db_full(struct adapter *adap)
2738 {
2739         t4_set_reg_field(adap, SGE_INT_ENABLE3,
2740                          DBFIFO_HP_INT | DBFIFO_LP_INT, 0);
2741         queue_work(workq, &adap->db_full_task);
2742 }
2743
2744 void t4_db_dropped(struct adapter *adap)
2745 {
2746         queue_work(workq, &adap->db_drop_task);
2747 }
2748
2749 static void uld_attach(struct adapter *adap, unsigned int uld)
2750 {
2751         void *handle;
2752         struct cxgb4_lld_info lli;
2753
2754         lli.pdev = adap->pdev;
2755         lli.l2t = adap->l2t;
2756         lli.tids = &adap->tids;
2757         lli.ports = adap->port;
2758         lli.vr = &adap->vres;
2759         lli.mtus = adap->params.mtus;
2760         if (uld == CXGB4_ULD_RDMA) {
2761                 lli.rxq_ids = adap->sge.rdma_rxq;
2762                 lli.nrxq = adap->sge.rdmaqs;
2763         } else if (uld == CXGB4_ULD_ISCSI) {
2764                 lli.rxq_ids = adap->sge.ofld_rxq;
2765                 lli.nrxq = adap->sge.ofldqsets;
2766         }
2767         lli.ntxq = adap->sge.ofldqsets;
2768         lli.nchan = adap->params.nports;
2769         lli.nports = adap->params.nports;
2770         lli.wr_cred = adap->params.ofldq_wr_cred;
2771         lli.adapter_type = adap->params.rev;
2772         lli.iscsi_iolen = MAXRXDATA_GET(t4_read_reg(adap, TP_PARA_REG2));
2773         lli.udb_density = 1 << QUEUESPERPAGEPF0_GET(
2774                         t4_read_reg(adap, SGE_EGRESS_QUEUES_PER_PAGE_PF) >>
2775                         (adap->fn * 4));
2776         lli.ucq_density = 1 << QUEUESPERPAGEPF0_GET(
2777                         t4_read_reg(adap, SGE_INGRESS_QUEUES_PER_PAGE_PF) >>
2778                         (adap->fn * 4));
2779         lli.gts_reg = adap->regs + MYPF_REG(SGE_PF_GTS);
2780         lli.db_reg = adap->regs + MYPF_REG(SGE_PF_KDOORBELL);
2781         lli.fw_vers = adap->params.fw_vers;
2782         lli.dbfifo_int_thresh = dbfifo_int_thresh;
2783
2784         handle = ulds[uld].add(&lli);
2785         if (IS_ERR(handle)) {
2786                 dev_warn(adap->pdev_dev,
2787                          "could not attach to the %s driver, error %ld\n",
2788                          uld_str[uld], PTR_ERR(handle));
2789                 return;
2790         }
2791
2792         adap->uld_handle[uld] = handle;
2793
2794         if (!netevent_registered) {
2795                 register_netevent_notifier(&cxgb4_netevent_nb);
2796                 netevent_registered = true;
2797         }
2798
2799         if (adap->flags & FULL_INIT_DONE)
2800                 ulds[uld].state_change(handle, CXGB4_STATE_UP);
2801 }
2802
2803 static void attach_ulds(struct adapter *adap)
2804 {
2805         unsigned int i;
2806
2807         mutex_lock(&uld_mutex);
2808         list_add_tail(&adap->list_node, &adapter_list);
2809         for (i = 0; i < CXGB4_ULD_MAX; i++)
2810                 if (ulds[i].add)
2811                         uld_attach(adap, i);
2812         mutex_unlock(&uld_mutex);
2813 }
2814
2815 static void detach_ulds(struct adapter *adap)
2816 {
2817         unsigned int i;
2818
2819         mutex_lock(&uld_mutex);
2820         list_del(&adap->list_node);
2821         for (i = 0; i < CXGB4_ULD_MAX; i++)
2822                 if (adap->uld_handle[i]) {
2823                         ulds[i].state_change(adap->uld_handle[i],
2824                                              CXGB4_STATE_DETACH);
2825                         adap->uld_handle[i] = NULL;
2826                 }
2827         if (netevent_registered && list_empty(&adapter_list)) {
2828                 unregister_netevent_notifier(&cxgb4_netevent_nb);
2829                 netevent_registered = false;
2830         }
2831         mutex_unlock(&uld_mutex);
2832 }
2833
2834 static void notify_ulds(struct adapter *adap, enum cxgb4_state new_state)
2835 {
2836         unsigned int i;
2837
2838         mutex_lock(&uld_mutex);
2839         for (i = 0; i < CXGB4_ULD_MAX; i++)
2840                 if (adap->uld_handle[i])
2841                         ulds[i].state_change(adap->uld_handle[i], new_state);
2842         mutex_unlock(&uld_mutex);
2843 }
2844
2845 /**
2846  *      cxgb4_register_uld - register an upper-layer driver
2847  *      @type: the ULD type
2848  *      @p: the ULD methods
2849  *
2850  *      Registers an upper-layer driver with this driver and notifies the ULD
2851  *      about any presently available devices that support its type.  Returns
2852  *      %-EBUSY if a ULD of the same type is already registered.
2853  */
2854 int cxgb4_register_uld(enum cxgb4_uld type, const struct cxgb4_uld_info *p)
2855 {
2856         int ret = 0;
2857         struct adapter *adap;
2858
2859         if (type >= CXGB4_ULD_MAX)
2860                 return -EINVAL;
2861         mutex_lock(&uld_mutex);
2862         if (ulds[type].add) {
2863                 ret = -EBUSY;
2864                 goto out;
2865         }
2866         ulds[type] = *p;
2867         list_for_each_entry(adap, &adapter_list, list_node)
2868                 uld_attach(adap, type);
2869 out:    mutex_unlock(&uld_mutex);
2870         return ret;
2871 }
2872 EXPORT_SYMBOL(cxgb4_register_uld);
2873
2874 /**
2875  *      cxgb4_unregister_uld - unregister an upper-layer driver
2876  *      @type: the ULD type
2877  *
2878  *      Unregisters an existing upper-layer driver.
2879  */
2880 int cxgb4_unregister_uld(enum cxgb4_uld type)
2881 {
2882         struct adapter *adap;
2883
2884         if (type >= CXGB4_ULD_MAX)
2885                 return -EINVAL;
2886         mutex_lock(&uld_mutex);
2887         list_for_each_entry(adap, &adapter_list, list_node)
2888                 adap->uld_handle[type] = NULL;
2889         ulds[type].add = NULL;
2890         mutex_unlock(&uld_mutex);
2891         return 0;
2892 }
2893 EXPORT_SYMBOL(cxgb4_unregister_uld);
2894
2895 /**
2896  *      cxgb_up - enable the adapter
2897  *      @adap: adapter being enabled
2898  *
2899  *      Called when the first port is enabled, this function performs the
2900  *      actions necessary to make an adapter operational, such as completing
2901  *      the initialization of HW modules, and enabling interrupts.
2902  *
2903  *      Must be called with the rtnl lock held.
2904  */
2905 static int cxgb_up(struct adapter *adap)
2906 {
2907         int err;
2908
2909         err = setup_sge_queues(adap);
2910         if (err)
2911                 goto out;
2912         err = setup_rss(adap);
2913         if (err)
2914                 goto freeq;
2915
2916         if (adap->flags & USING_MSIX) {
2917                 name_msix_vecs(adap);
2918                 err = request_irq(adap->msix_info[0].vec, t4_nondata_intr, 0,
2919                                   adap->msix_info[0].desc, adap);
2920                 if (err)
2921                         goto irq_err;
2922
2923                 err = request_msix_queue_irqs(adap);
2924                 if (err) {
2925                         free_irq(adap->msix_info[0].vec, adap);
2926                         goto irq_err;
2927                 }
2928         } else {
2929                 err = request_irq(adap->pdev->irq, t4_intr_handler(adap),
2930                                   (adap->flags & USING_MSI) ? 0 : IRQF_SHARED,
2931                                   adap->port[0]->name, adap);
2932                 if (err)
2933                         goto irq_err;
2934         }
2935         enable_rx(adap);
2936         t4_sge_start(adap);
2937         t4_intr_enable(adap);
2938         adap->flags |= FULL_INIT_DONE;
2939         notify_ulds(adap, CXGB4_STATE_UP);
2940  out:
2941         return err;
2942  irq_err:
2943         dev_err(adap->pdev_dev, "request_irq failed, err %d\n", err);
2944  freeq:
2945         t4_free_sge_resources(adap);
2946         goto out;
2947 }
2948
2949 static void cxgb_down(struct adapter *adapter)
2950 {
2951         t4_intr_disable(adapter);
2952         cancel_work_sync(&adapter->tid_release_task);
2953         cancel_work_sync(&adapter->db_full_task);
2954         cancel_work_sync(&adapter->db_drop_task);
2955         adapter->tid_release_task_busy = false;
2956         adapter->tid_release_head = NULL;
2957
2958         if (adapter->flags & USING_MSIX) {
2959                 free_msix_queue_irqs(adapter);
2960                 free_irq(adapter->msix_info[0].vec, adapter);
2961         } else
2962                 free_irq(adapter->pdev->irq, adapter);
2963         quiesce_rx(adapter);
2964         t4_sge_stop(adapter);
2965         t4_free_sge_resources(adapter);
2966         adapter->flags &= ~FULL_INIT_DONE;
2967 }
2968
2969 /*
2970  * net_device operations
2971  */
2972 static int cxgb_open(struct net_device *dev)
2973 {
2974         int err;
2975         struct port_info *pi = netdev_priv(dev);
2976         struct adapter *adapter = pi->adapter;
2977
2978         netif_carrier_off(dev);
2979
2980         if (!(adapter->flags & FULL_INIT_DONE)) {
2981                 err = cxgb_up(adapter);
2982                 if (err < 0)
2983                         return err;
2984         }
2985
2986         err = link_start(dev);
2987         if (!err)
2988                 netif_tx_start_all_queues(dev);
2989         return err;
2990 }
2991
2992 static int cxgb_close(struct net_device *dev)
2993 {
2994         struct port_info *pi = netdev_priv(dev);
2995         struct adapter *adapter = pi->adapter;
2996
2997         netif_tx_stop_all_queues(dev);
2998         netif_carrier_off(dev);
2999         return t4_enable_vi(adapter, adapter->fn, pi->viid, false, false);
3000 }
3001
3002 static struct rtnl_link_stats64 *cxgb_get_stats(struct net_device *dev,
3003                                                 struct rtnl_link_stats64 *ns)
3004 {
3005         struct port_stats stats;
3006         struct port_info *p = netdev_priv(dev);
3007         struct adapter *adapter = p->adapter;
3008
3009         spin_lock(&adapter->stats_lock);
3010         t4_get_port_stats(adapter, p->tx_chan, &stats);
3011         spin_unlock(&adapter->stats_lock);
3012
3013         ns->tx_bytes   = stats.tx_octets;
3014         ns->tx_packets = stats.tx_frames;
3015         ns->rx_bytes   = stats.rx_octets;
3016         ns->rx_packets = stats.rx_frames;
3017         ns->multicast  = stats.rx_mcast_frames;
3018
3019         /* detailed rx_errors */
3020         ns->rx_length_errors = stats.rx_jabber + stats.rx_too_long +
3021                                stats.rx_runt;
3022         ns->rx_over_errors   = 0;
3023         ns->rx_crc_errors    = stats.rx_fcs_err;
3024         ns->rx_frame_errors  = stats.rx_symbol_err;
3025         ns->rx_fifo_errors   = stats.rx_ovflow0 + stats.rx_ovflow1 +
3026                                stats.rx_ovflow2 + stats.rx_ovflow3 +
3027                                stats.rx_trunc0 + stats.rx_trunc1 +
3028                                stats.rx_trunc2 + stats.rx_trunc3;
3029         ns->rx_missed_errors = 0;
3030
3031         /* detailed tx_errors */
3032         ns->tx_aborted_errors   = 0;
3033         ns->tx_carrier_errors   = 0;
3034         ns->tx_fifo_errors      = 0;
3035         ns->tx_heartbeat_errors = 0;
3036         ns->tx_window_errors    = 0;
3037
3038         ns->tx_errors = stats.tx_error_frames;
3039         ns->rx_errors = stats.rx_symbol_err + stats.rx_fcs_err +
3040                 ns->rx_length_errors + stats.rx_len_err + ns->rx_fifo_errors;
3041         return ns;
3042 }
3043
3044 static int cxgb_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
3045 {
3046         unsigned int mbox;
3047         int ret = 0, prtad, devad;
3048         struct port_info *pi = netdev_priv(dev);
3049         struct mii_ioctl_data *data = (struct mii_ioctl_data *)&req->ifr_data;
3050
3051         switch (cmd) {
3052         case SIOCGMIIPHY:
3053                 if (pi->mdio_addr < 0)
3054                         return -EOPNOTSUPP;
3055                 data->phy_id = pi->mdio_addr;
3056                 break;
3057         case SIOCGMIIREG:
3058         case SIOCSMIIREG:
3059                 if (mdio_phy_id_is_c45(data->phy_id)) {
3060                         prtad = mdio_phy_id_prtad(data->phy_id);
3061                         devad = mdio_phy_id_devad(data->phy_id);
3062                 } else if (data->phy_id < 32) {
3063                         prtad = data->phy_id;
3064                         devad = 0;
3065                         data->reg_num &= 0x1f;
3066                 } else
3067                         return -EINVAL;
3068
3069                 mbox = pi->adapter->fn;
3070                 if (cmd == SIOCGMIIREG)
3071                         ret = t4_mdio_rd(pi->adapter, mbox, prtad, devad,
3072                                          data->reg_num, &data->val_out);
3073                 else
3074                         ret = t4_mdio_wr(pi->adapter, mbox, prtad, devad,
3075                                          data->reg_num, data->val_in);
3076                 break;
3077         default:
3078                 return -EOPNOTSUPP;
3079         }
3080         return ret;
3081 }
3082
3083 static void cxgb_set_rxmode(struct net_device *dev)
3084 {
3085         /* unfortunately we can't return errors to the stack */
3086         set_rxmode(dev, -1, false);
3087 }
3088
3089 static int cxgb_change_mtu(struct net_device *dev, int new_mtu)
3090 {
3091         int ret;
3092         struct port_info *pi = netdev_priv(dev);
3093
3094         if (new_mtu < 81 || new_mtu > MAX_MTU)         /* accommodate SACK */
3095                 return -EINVAL;
3096         ret = t4_set_rxmode(pi->adapter, pi->adapter->fn, pi->viid, new_mtu, -1,
3097                             -1, -1, -1, true);
3098         if (!ret)
3099                 dev->mtu = new_mtu;
3100         return ret;
3101 }
3102
3103 static int cxgb_set_mac_addr(struct net_device *dev, void *p)
3104 {
3105         int ret;
3106         struct sockaddr *addr = p;
3107         struct port_info *pi = netdev_priv(dev);
3108
3109         if (!is_valid_ether_addr(addr->sa_data))
3110                 return -EADDRNOTAVAIL;
3111
3112         ret = t4_change_mac(pi->adapter, pi->adapter->fn, pi->viid,
3113                             pi->xact_addr_filt, addr->sa_data, true, true);
3114         if (ret < 0)
3115                 return ret;
3116
3117         memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
3118         pi->xact_addr_filt = ret;
3119         return 0;
3120 }
3121
3122 #ifdef CONFIG_NET_POLL_CONTROLLER
3123 static void cxgb_netpoll(struct net_device *dev)
3124 {
3125         struct port_info *pi = netdev_priv(dev);
3126         struct adapter *adap = pi->adapter;
3127
3128         if (adap->flags & USING_MSIX) {
3129                 int i;
3130                 struct sge_eth_rxq *rx = &adap->sge.ethrxq[pi->first_qset];
3131
3132                 for (i = pi->nqsets; i; i--, rx++)
3133                         t4_sge_intr_msix(0, &rx->rspq);
3134         } else
3135                 t4_intr_handler(adap)(0, adap);
3136 }
3137 #endif
3138
3139 static const struct net_device_ops cxgb4_netdev_ops = {
3140         .ndo_open             = cxgb_open,
3141         .ndo_stop             = cxgb_close,
3142         .ndo_start_xmit       = t4_eth_xmit,
3143         .ndo_get_stats64      = cxgb_get_stats,
3144         .ndo_set_rx_mode      = cxgb_set_rxmode,
3145         .ndo_set_mac_address  = cxgb_set_mac_addr,
3146         .ndo_set_features     = cxgb_set_features,
3147         .ndo_validate_addr    = eth_validate_addr,
3148         .ndo_do_ioctl         = cxgb_ioctl,
3149         .ndo_change_mtu       = cxgb_change_mtu,
3150 #ifdef CONFIG_NET_POLL_CONTROLLER
3151         .ndo_poll_controller  = cxgb_netpoll,
3152 #endif
3153 };
3154
3155 void t4_fatal_err(struct adapter *adap)
3156 {
3157         t4_set_reg_field(adap, SGE_CONTROL, GLOBALENABLE, 0);
3158         t4_intr_disable(adap);
3159         dev_alert(adap->pdev_dev, "encountered fatal error, adapter stopped\n");
3160 }
3161
3162 static void setup_memwin(struct adapter *adap)
3163 {
3164         u32 bar0;
3165
3166         bar0 = pci_resource_start(adap->pdev, 0);  /* truncation intentional */
3167         t4_write_reg(adap, PCIE_MEM_ACCESS_REG(PCIE_MEM_ACCESS_BASE_WIN, 0),
3168                      (bar0 + MEMWIN0_BASE) | BIR(0) |
3169                      WINDOW(ilog2(MEMWIN0_APERTURE) - 10));
3170         t4_write_reg(adap, PCIE_MEM_ACCESS_REG(PCIE_MEM_ACCESS_BASE_WIN, 1),
3171                      (bar0 + MEMWIN1_BASE) | BIR(0) |
3172                      WINDOW(ilog2(MEMWIN1_APERTURE) - 10));
3173         t4_write_reg(adap, PCIE_MEM_ACCESS_REG(PCIE_MEM_ACCESS_BASE_WIN, 2),
3174                      (bar0 + MEMWIN2_BASE) | BIR(0) |
3175                      WINDOW(ilog2(MEMWIN2_APERTURE) - 10));
3176 }
3177
3178 static void setup_memwin_rdma(struct adapter *adap)
3179 {
3180         if (adap->vres.ocq.size) {
3181                 unsigned int start, sz_kb;
3182
3183                 start = pci_resource_start(adap->pdev, 2) +
3184                         OCQ_WIN_OFFSET(adap->pdev, &adap->vres);
3185                 sz_kb = roundup_pow_of_two(adap->vres.ocq.size) >> 10;
3186                 t4_write_reg(adap,
3187                              PCIE_MEM_ACCESS_REG(PCIE_MEM_ACCESS_BASE_WIN, 3),
3188                              start | BIR(1) | WINDOW(ilog2(sz_kb)));
3189                 t4_write_reg(adap,
3190                              PCIE_MEM_ACCESS_REG(PCIE_MEM_ACCESS_OFFSET, 3),
3191                              adap->vres.ocq.start);
3192                 t4_read_reg(adap,
3193                             PCIE_MEM_ACCESS_REG(PCIE_MEM_ACCESS_OFFSET, 3));
3194         }
3195 }
3196
3197 static int adap_init1(struct adapter *adap, struct fw_caps_config_cmd *c)
3198 {
3199         u32 v;
3200         int ret;
3201
3202         /* get device capabilities */
3203         memset(c, 0, sizeof(*c));
3204         c->op_to_write = htonl(FW_CMD_OP(FW_CAPS_CONFIG_CMD) |
3205                                FW_CMD_REQUEST | FW_CMD_READ);
3206         c->retval_len16 = htonl(FW_LEN16(*c));
3207         ret = t4_wr_mbox(adap, adap->fn, c, sizeof(*c), c);
3208         if (ret < 0)
3209                 return ret;
3210
3211         /* select capabilities we'll be using */
3212         if (c->niccaps & htons(FW_CAPS_CONFIG_NIC_VM)) {
3213                 if (!vf_acls)
3214                         c->niccaps ^= htons(FW_CAPS_CONFIG_NIC_VM);
3215                 else
3216                         c->niccaps = htons(FW_CAPS_CONFIG_NIC_VM);
3217         } else if (vf_acls) {
3218                 dev_err(adap->pdev_dev, "virtualization ACLs not supported");
3219                 return ret;
3220         }
3221         c->op_to_write = htonl(FW_CMD_OP(FW_CAPS_CONFIG_CMD) |
3222                                FW_CMD_REQUEST | FW_CMD_WRITE);
3223         ret = t4_wr_mbox(adap, adap->fn, c, sizeof(*c), NULL);
3224         if (ret < 0)
3225                 return ret;
3226
3227         ret = t4_config_glbl_rss(adap, adap->fn,
3228                                  FW_RSS_GLB_CONFIG_CMD_MODE_BASICVIRTUAL,
3229                                  FW_RSS_GLB_CONFIG_CMD_TNLMAPEN |
3230                                  FW_RSS_GLB_CONFIG_CMD_TNLALLLKP);
3231         if (ret < 0)
3232                 return ret;
3233
3234         ret = t4_cfg_pfvf(adap, adap->fn, adap->fn, 0, MAX_EGRQ, 64, MAX_INGQ,
3235                           0, 0, 4, 0xf, 0xf, 16, FW_CMD_CAP_PF, FW_CMD_CAP_PF);
3236         if (ret < 0)
3237                 return ret;
3238
3239         t4_sge_init(adap);
3240
3241         /* tweak some settings */
3242         t4_write_reg(adap, TP_SHIFT_CNT, 0x64f8849);
3243         t4_write_reg(adap, ULP_RX_TDDP_PSZ, HPZ0(PAGE_SHIFT - 12));
3244         t4_write_reg(adap, TP_PIO_ADDR, TP_INGRESS_CONFIG);
3245         v = t4_read_reg(adap, TP_PIO_DATA);
3246         t4_write_reg(adap, TP_PIO_DATA, v & ~CSUM_HAS_PSEUDO_HDR);
3247
3248         /* get basic stuff going */
3249         return t4_early_init(adap, adap->fn);
3250 }
3251
3252 /*
3253  * Max # of ATIDs.  The absolute HW max is 16K but we keep it lower.
3254  */
3255 #define MAX_ATIDS 8192U
3256
3257 /*
3258  * Phase 0 of initialization: contact FW, obtain config, perform basic init.
3259  *
3260  * If the firmware we're dealing with has Configuration File support, then
3261  * we use that to perform all configuration
3262  */
3263
3264 /*
3265  * Tweak configuration based on module parameters, etc.  Most of these have
3266  * defaults assigned to them by Firmware Configuration Files (if we're using
3267  * them) but need to be explicitly set if we're using hard-coded
3268  * initialization.  But even in the case of using Firmware Configuration
3269  * Files, we'd like to expose the ability to change these via module
3270  * parameters so these are essentially common tweaks/settings for
3271  * Configuration Files and hard-coded initialization ...
3272  */
3273 static int adap_init0_tweaks(struct adapter *adapter)
3274 {
3275         /*
3276          * Fix up various Host-Dependent Parameters like Page Size, Cache
3277          * Line Size, etc.  The firmware default is for a 4KB Page Size and
3278          * 64B Cache Line Size ...
3279          */
3280         t4_fixup_host_params(adapter, PAGE_SIZE, L1_CACHE_BYTES);
3281
3282         /*
3283          * Process module parameters which affect early initialization.
3284          */
3285         if (rx_dma_offset != 2 && rx_dma_offset != 0) {
3286                 dev_err(&adapter->pdev->dev,
3287                         "Ignoring illegal rx_dma_offset=%d, using 2\n",
3288                         rx_dma_offset);
3289                 rx_dma_offset = 2;
3290         }
3291         t4_set_reg_field(adapter, SGE_CONTROL,
3292                          PKTSHIFT_MASK,
3293                          PKTSHIFT(rx_dma_offset));
3294
3295         /*
3296          * Don't include the "IP Pseudo Header" in CPL_RX_PKT checksums: Linux
3297          * adds the pseudo header itself.
3298          */
3299         t4_tp_wr_bits_indirect(adapter, TP_INGRESS_CONFIG,
3300                                CSUM_HAS_PSEUDO_HDR, 0);
3301
3302         return 0;
3303 }
3304
3305 /*
3306  * Attempt to initialize the adapter via a Firmware Configuration File.
3307  */
3308 static int adap_init0_config(struct adapter *adapter, int reset)
3309 {
3310         struct fw_caps_config_cmd caps_cmd;
3311         const struct firmware *cf;
3312         unsigned long mtype = 0, maddr = 0;
3313         u32 finiver, finicsum, cfcsum;
3314         int ret, using_flash;
3315
3316         /*
3317          * Reset device if necessary.
3318          */
3319         if (reset) {
3320                 ret = t4_fw_reset(adapter, adapter->mbox,
3321                                   PIORSTMODE | PIORST);
3322                 if (ret < 0)
3323                         goto bye;
3324         }
3325
3326         /*
3327          * If we have a T4 configuration file under /lib/firmware/cxgb4/,
3328          * then use that.  Otherwise, use the configuration file stored
3329          * in the adapter flash ...
3330          */
3331         ret = request_firmware(&cf, FW_CFNAME, adapter->pdev_dev);
3332         if (ret < 0) {
3333                 using_flash = 1;
3334                 mtype = FW_MEMTYPE_CF_FLASH;
3335                 maddr = t4_flash_cfg_addr(adapter);
3336         } else {
3337                 u32 params[7], val[7];
3338
3339                 using_flash = 0;
3340                 if (cf->size >= FLASH_CFG_MAX_SIZE)
3341                         ret = -ENOMEM;
3342                 else {
3343                         params[0] = (FW_PARAMS_MNEM(FW_PARAMS_MNEM_DEV) |
3344                              FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_DEV_CF));
3345                         ret = t4_query_params(adapter, adapter->mbox,
3346                                               adapter->fn, 0, 1, params, val);
3347                         if (ret == 0) {
3348                                 /*
3349                                  * For t4_memory_write() below addresses and
3350                                  * sizes have to be in terms of multiples of 4
3351                                  * bytes.  So, if the Configuration File isn't
3352                                  * a multiple of 4 bytes in length we'll have
3353                                  * to write that out separately since we can't
3354                                  * guarantee that the bytes following the
3355                                  * residual byte in the buffer returned by
3356                                  * request_firmware() are zeroed out ...
3357                                  */
3358                                 size_t resid = cf->size & 0x3;
3359                                 size_t size = cf->size & ~0x3;
3360                                 __be32 *data = (__be32 *)cf->data;
3361
3362                                 mtype = FW_PARAMS_PARAM_Y_GET(val[0]);
3363                                 maddr = FW_PARAMS_PARAM_Z_GET(val[0]) << 16;
3364
3365                                 ret = t4_memory_write(adapter, mtype, maddr,
3366                                                       size, data);
3367                                 if (ret == 0 && resid != 0) {
3368                                         union {
3369                                                 __be32 word;
3370                                                 char buf[4];
3371                                         } last;
3372                                         int i;
3373
3374                                         last.word = data[size >> 2];
3375                                         for (i = resid; i < 4; i++)
3376                                                 last.buf[i] = 0;
3377                                         ret = t4_memory_write(adapter, mtype,
3378                                                               maddr + size,
3379                                                               4, &last.word);
3380                                 }
3381                         }
3382                 }
3383
3384                 release_firmware(cf);
3385                 if (ret)
3386                         goto bye;
3387         }
3388
3389         /*
3390          * Issue a Capability Configuration command to the firmware to get it
3391          * to parse the Configuration File.  We don't use t4_fw_config_file()
3392          * because we want the ability to modify various features after we've
3393          * processed the configuration file ...
3394          */
3395         memset(&caps_cmd, 0, sizeof(caps_cmd));
3396         caps_cmd.op_to_write =
3397                 htonl(FW_CMD_OP(FW_CAPS_CONFIG_CMD) |
3398                       FW_CMD_REQUEST |
3399                       FW_CMD_READ);
3400         caps_cmd.retval_len16 =
3401                 htonl(FW_CAPS_CONFIG_CMD_CFVALID |
3402                       FW_CAPS_CONFIG_CMD_MEMTYPE_CF(mtype) |
3403                       FW_CAPS_CONFIG_CMD_MEMADDR64K_CF(maddr >> 16) |
3404                       FW_LEN16(caps_cmd));
3405         ret = t4_wr_mbox(adapter, adapter->mbox, &caps_cmd, sizeof(caps_cmd),
3406                          &caps_cmd);
3407         if (ret < 0)
3408                 goto bye;
3409
3410         finiver = ntohl(caps_cmd.finiver);
3411         finicsum = ntohl(caps_cmd.finicsum);
3412         cfcsum = ntohl(caps_cmd.cfcsum);
3413         if (finicsum != cfcsum)
3414                 dev_warn(adapter->pdev_dev, "Configuration File checksum "\
3415                          "mismatch: [fini] csum=%#x, computed csum=%#x\n",
3416                          finicsum, cfcsum);
3417
3418         /*
3419          * If we're a pure NIC driver then disable all offloading facilities.
3420          * This will allow the firmware to optimize aspects of the hardware
3421          * configuration which will result in improved performance.
3422          */
3423         caps_cmd.ofldcaps = 0;
3424         caps_cmd.iscsicaps = 0;
3425         caps_cmd.rdmacaps = 0;
3426         caps_cmd.fcoecaps = 0;
3427
3428         /*
3429          * And now tell the firmware to use the configuration we just loaded.
3430          */
3431         caps_cmd.op_to_write =
3432                 htonl(FW_CMD_OP(FW_CAPS_CONFIG_CMD) |
3433                       FW_CMD_REQUEST |
3434                       FW_CMD_WRITE);
3435         caps_cmd.retval_len16 = htonl(FW_LEN16(caps_cmd));
3436         ret = t4_wr_mbox(adapter, adapter->mbox, &caps_cmd, sizeof(caps_cmd),
3437                          NULL);
3438         if (ret < 0)
3439                 goto bye;
3440
3441         /*
3442          * Tweak configuration based on system architecture, module
3443          * parameters, etc.
3444          */
3445         ret = adap_init0_tweaks(adapter);
3446         if (ret < 0)
3447                 goto bye;
3448
3449         /*
3450          * And finally tell the firmware to initialize itself using the
3451          * parameters from the Configuration File.
3452          */
3453         ret = t4_fw_initialize(adapter, adapter->mbox);
3454         if (ret < 0)
3455                 goto bye;
3456
3457         /*
3458          * Return successfully and note that we're operating with parameters
3459          * not supplied by the driver, rather than from hard-wired
3460          * initialization constants burried in the driver.
3461          */
3462         adapter->flags |= USING_SOFT_PARAMS;
3463         dev_info(adapter->pdev_dev, "Successfully configured using Firmware "\
3464                  "Configuration File %s, version %#x, computed checksum %#x\n",
3465                  (using_flash
3466                   ? "in device FLASH"
3467                   : "/lib/firmware/" FW_CFNAME),
3468                  finiver, cfcsum);
3469         return 0;
3470
3471         /*
3472          * Something bad happened.  Return the error ...  (If the "error"
3473          * is that there's no Configuration File on the adapter we don't
3474          * want to issue a warning since this is fairly common.)
3475          */
3476 bye:
3477         if (ret != -ENOENT)
3478                 dev_warn(adapter->pdev_dev, "Configuration file error %d\n",
3479                          -ret);
3480         return ret;
3481 }
3482
3483 /*
3484  * Attempt to initialize the adapter via hard-coded, driver supplied
3485  * parameters ...
3486  */
3487 static int adap_init0_no_config(struct adapter *adapter, int reset)
3488 {
3489         struct sge *s = &adapter->sge;
3490         struct fw_caps_config_cmd caps_cmd;
3491         u32 v;
3492         int i, ret;
3493
3494         /*
3495          * Reset device if necessary
3496          */
3497         if (reset) {
3498                 ret = t4_fw_reset(adapter, adapter->mbox,
3499                                   PIORSTMODE | PIORST);
3500                 if (ret < 0)
3501                         goto bye;
3502         }
3503
3504         /*
3505          * Get device capabilities and select which we'll be using.
3506          */
3507         memset(&caps_cmd, 0, sizeof(caps_cmd));
3508         caps_cmd.op_to_write = htonl(FW_CMD_OP(FW_CAPS_CONFIG_CMD) |
3509                                      FW_CMD_REQUEST | FW_CMD_READ);
3510         caps_cmd.retval_len16 = htonl(FW_LEN16(caps_cmd));
3511         ret = t4_wr_mbox(adapter, adapter->mbox, &caps_cmd, sizeof(caps_cmd),
3512                          &caps_cmd);
3513         if (ret < 0)
3514                 goto bye;
3515
3516         if (caps_cmd.niccaps & htons(FW_CAPS_CONFIG_NIC_VM)) {
3517                 if (!vf_acls)
3518                         caps_cmd.niccaps ^= htons(FW_CAPS_CONFIG_NIC_VM);
3519                 else
3520                         caps_cmd.niccaps = htons(FW_CAPS_CONFIG_NIC_VM);
3521         } else if (vf_acls) {
3522                 dev_err(adapter->pdev_dev, "virtualization ACLs not supported");
3523                 goto bye;
3524         }
3525         caps_cmd.op_to_write = htonl(FW_CMD_OP(FW_CAPS_CONFIG_CMD) |
3526                               FW_CMD_REQUEST | FW_CMD_WRITE);
3527         ret = t4_wr_mbox(adapter, adapter->mbox, &caps_cmd, sizeof(caps_cmd),
3528                          NULL);
3529         if (ret < 0)
3530                 goto bye;
3531
3532         /*
3533          * Tweak configuration based on system architecture, module
3534          * parameters, etc.
3535          */
3536         ret = adap_init0_tweaks(adapter);
3537         if (ret < 0)
3538                 goto bye;
3539
3540         /*
3541          * Select RSS Global Mode we want to use.  We use "Basic Virtual"
3542          * mode which maps each Virtual Interface to its own section of
3543          * the RSS Table and we turn on all map and hash enables ...
3544          */
3545         adapter->flags |= RSS_TNLALLLOOKUP;
3546         ret = t4_config_glbl_rss(adapter, adapter->mbox,
3547                                  FW_RSS_GLB_CONFIG_CMD_MODE_BASICVIRTUAL,
3548                                  FW_RSS_GLB_CONFIG_CMD_TNLMAPEN |
3549                                  FW_RSS_GLB_CONFIG_CMD_HASHTOEPLITZ |
3550                                  ((adapter->flags & RSS_TNLALLLOOKUP) ?
3551                                         FW_RSS_GLB_CONFIG_CMD_TNLALLLKP : 0));
3552         if (ret < 0)
3553                 goto bye;
3554
3555         /*
3556          * Set up our own fundamental resource provisioning ...
3557          */
3558         ret = t4_cfg_pfvf(adapter, adapter->mbox, adapter->fn, 0,
3559                           PFRES_NEQ, PFRES_NETHCTRL,
3560                           PFRES_NIQFLINT, PFRES_NIQ,
3561                           PFRES_TC, PFRES_NVI,
3562                           FW_PFVF_CMD_CMASK_MASK,
3563                           pfvfres_pmask(adapter, adapter->fn, 0),
3564                           PFRES_NEXACTF,
3565                           PFRES_R_CAPS, PFRES_WX_CAPS);
3566         if (ret < 0)
3567                 goto bye;
3568
3569         /*
3570          * Perform low level SGE initialization.  We need to do this before we
3571          * send the firmware the INITIALIZE command because that will cause
3572          * any other PF Drivers which are waiting for the Master
3573          * Initialization to proceed forward.
3574          */
3575         for (i = 0; i < SGE_NTIMERS - 1; i++)
3576                 s->timer_val[i] = min(intr_holdoff[i], MAX_SGE_TIMERVAL);
3577         s->timer_val[SGE_NTIMERS - 1] = MAX_SGE_TIMERVAL;
3578         s->counter_val[0] = 1;
3579         for (i = 1; i < SGE_NCOUNTERS; i++)
3580                 s->counter_val[i] = min(intr_cnt[i - 1],
3581                                         THRESHOLD_0_GET(THRESHOLD_0_MASK));
3582         t4_sge_init(adapter);
3583
3584 #ifdef CONFIG_PCI_IOV
3585         /*
3586          * Provision resource limits for Virtual Functions.  We currently
3587          * grant them all the same static resource limits except for the Port
3588          * Access Rights Mask which we're assigning based on the PF.  All of
3589          * the static provisioning stuff for both the PF and VF really needs
3590          * to be managed in a persistent manner for each device which the
3591          * firmware controls.
3592          */
3593         {
3594                 int pf, vf;
3595
3596                 for (pf = 0; pf < ARRAY_SIZE(num_vf); pf++) {
3597                         if (num_vf[pf] <= 0)
3598                                 continue;
3599
3600                         /* VF numbering starts at 1! */
3601                         for (vf = 1; vf <= num_vf[pf]; vf++) {
3602                                 ret = t4_cfg_pfvf(adapter, adapter->mbox,
3603                                                   pf, vf,
3604                                                   VFRES_NEQ, VFRES_NETHCTRL,
3605                                                   VFRES_NIQFLINT, VFRES_NIQ,
3606                                                   VFRES_TC, VFRES_NVI,
3607                                                   FW_PFVF_CMD_CMASK_GET(
3608                                                   FW_PFVF_CMD_CMASK_MASK),
3609                                                   pfvfres_pmask(
3610                                                   adapter, pf, vf),
3611                                                   VFRES_NEXACTF,
3612                                                   VFRES_R_CAPS, VFRES_WX_CAPS);
3613                                 if (ret < 0)
3614                                         dev_warn(adapter->pdev_dev,
3615                                                  "failed to "\
3616                                                  "provision pf/vf=%d/%d; "
3617                                                  "err=%d\n", pf, vf, ret);
3618                         }
3619                 }
3620         }
3621 #endif
3622
3623         /*
3624          * Set up the default filter mode.  Later we'll want to implement this
3625          * via a firmware command, etc. ...  This needs to be done before the
3626          * firmare initialization command ...  If the selected set of fields
3627          * isn't equal to the default value, we'll need to make sure that the
3628          * field selections will fit in the 36-bit budget.
3629          */
3630         if (tp_vlan_pri_map != TP_VLAN_PRI_MAP_DEFAULT) {
3631                 int j, bits = 0;
3632
3633                 for (j = TP_VLAN_PRI_MAP_FIRST; j <= TP_VLAN_PRI_MAP_LAST; j++)
3634                         switch (tp_vlan_pri_map & (1 << j)) {
3635                         case 0:
3636                                 /* compressed filter field not enabled */
3637                                 break;
3638                         case FCOE_MASK:
3639                                 bits +=  1;
3640                                 break;
3641                         case PORT_MASK:
3642                                 bits +=  3;
3643                                 break;
3644                         case VNIC_ID_MASK:
3645                                 bits += 17;
3646                                 break;
3647                         case VLAN_MASK:
3648                                 bits += 17;
3649                                 break;
3650                         case TOS_MASK:
3651                                 bits +=  8;
3652                                 break;
3653                         case PROTOCOL_MASK:
3654                                 bits +=  8;
3655                                 break;
3656                         case ETHERTYPE_MASK:
3657                                 bits += 16;
3658                                 break;
3659                         case MACMATCH_MASK:
3660                                 bits +=  9;
3661                                 break;
3662                         case MPSHITTYPE_MASK:
3663                                 bits +=  3;
3664                                 break;
3665                         case FRAGMENTATION_MASK:
3666                                 bits +=  1;
3667                                 break;
3668                         }
3669
3670                 if (bits > 36) {
3671                         dev_err(adapter->pdev_dev,
3672                                 "tp_vlan_pri_map=%#x needs %d bits > 36;"\
3673                                 " using %#x\n", tp_vlan_pri_map, bits,
3674                                 TP_VLAN_PRI_MAP_DEFAULT);
3675                         tp_vlan_pri_map = TP_VLAN_PRI_MAP_DEFAULT;
3676                 }
3677         }
3678         v = tp_vlan_pri_map;
3679         t4_write_indirect(adapter, TP_PIO_ADDR, TP_PIO_DATA,
3680                           &v, 1, TP_VLAN_PRI_MAP);
3681
3682         /*
3683          * We need Five Tuple Lookup mode to be set in TP_GLOBAL_CONFIG order
3684          * to support any of the compressed filter fields above.  Newer
3685          * versions of the firmware do this automatically but it doesn't hurt
3686          * to set it here.  Meanwhile, we do _not_ need to set Lookup Every
3687          * Packet in TP_INGRESS_CONFIG to support matching non-TCP packets
3688          * since the firmware automatically turns this on and off when we have
3689          * a non-zero number of filters active (since it does have a
3690          * performance impact).
3691          */
3692         if (tp_vlan_pri_map)
3693                 t4_set_reg_field(adapter, TP_GLOBAL_CONFIG,
3694                                  FIVETUPLELOOKUP_MASK,
3695                                  FIVETUPLELOOKUP_MASK);
3696
3697         /*
3698          * Tweak some settings.
3699          */
3700         t4_write_reg(adapter, TP_SHIFT_CNT, SYNSHIFTMAX(6) |
3701                      RXTSHIFTMAXR1(4) | RXTSHIFTMAXR2(15) |
3702                      PERSHIFTBACKOFFMAX(8) | PERSHIFTMAX(8) |
3703                      KEEPALIVEMAXR1(4) | KEEPALIVEMAXR2(9));
3704
3705         /*
3706          * Get basic stuff going by issuing the Firmware Initialize command.
3707          * Note that this _must_ be after all PFVF commands ...
3708          */
3709         ret = t4_fw_initialize(adapter, adapter->mbox);
3710         if (ret < 0)
3711                 goto bye;
3712
3713         /*
3714          * Return successfully!
3715          */
3716         dev_info(adapter->pdev_dev, "Successfully configured using built-in "\
3717                  "driver parameters\n");
3718         return 0;
3719
3720         /*
3721          * Something bad happened.  Return the error ...
3722          */
3723 bye:
3724         return ret;
3725 }
3726
3727 /*
3728  * Phase 0 of initialization: contact FW, obtain config, perform basic init.
3729  */
3730 static int adap_init0(struct adapter *adap)
3731 {
3732         int ret;
3733         u32 v, port_vec;
3734         enum dev_state state;
3735         u32 params[7], val[7];
3736         struct fw_caps_config_cmd caps_cmd;
3737         int reset = 1, j;
3738
3739         /*
3740          * Contact FW, advertising Master capability (and potentially forcing
3741          * ourselves as the Master PF if our module parameter force_init is
3742          * set).
3743          */
3744         ret = t4_fw_hello(adap, adap->mbox, adap->fn,
3745                           force_init ? MASTER_MUST : MASTER_MAY,
3746                           &state);
3747         if (ret < 0) {
3748                 dev_err(adap->pdev_dev, "could not connect to FW, error %d\n",
3749                         ret);
3750                 return ret;
3751         }
3752         if (ret == adap->mbox)
3753                 adap->flags |= MASTER_PF;
3754         if (force_init && state == DEV_STATE_INIT)
3755                 state = DEV_STATE_UNINIT;
3756
3757         /*
3758          * If we're the Master PF Driver and the device is uninitialized,
3759          * then let's consider upgrading the firmware ...  (We always want
3760          * to check the firmware version number in order to A. get it for
3761          * later reporting and B. to warn if the currently loaded firmware
3762          * is excessively mismatched relative to the driver.)
3763          */
3764         ret = t4_check_fw_version(adap);
3765         if ((adap->flags & MASTER_PF) && state != DEV_STATE_INIT) {
3766                 if (ret == -EINVAL || ret > 0) {
3767                         if (upgrade_fw(adap) >= 0) {
3768                                 /*
3769                                  * Note that the chip was reset as part of the
3770                                  * firmware upgrade so we don't reset it again
3771                                  * below and grab the new firmware version.
3772                                  */
3773                                 reset = 0;
3774                                 ret = t4_check_fw_version(adap);
3775                         }
3776                 }
3777                 if (ret < 0)
3778                         return ret;
3779         }
3780
3781         /*
3782          * Grab VPD parameters.  This should be done after we establish a
3783          * connection to the firmware since some of the VPD parameters
3784          * (notably the Core Clock frequency) are retrieved via requests to
3785          * the firmware.  On the other hand, we need these fairly early on
3786          * so we do this right after getting ahold of the firmware.
3787          */
3788         ret = get_vpd_params(adap, &adap->params.vpd);
3789         if (ret < 0)
3790                 goto bye;
3791
3792         /*
3793          * Find out what ports are available to us.  Note that we need to do
3794          * this before calling adap_init0_no_config() since it needs nports
3795          * and portvec ...
3796          */
3797         v =
3798             FW_PARAMS_MNEM(FW_PARAMS_MNEM_DEV) |
3799             FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_DEV_PORTVEC);
3800         ret = t4_query_params(adap, adap->mbox, adap->fn, 0, 1, &v, &port_vec);
3801         if (ret < 0)
3802                 goto bye;
3803
3804         adap->params.nports = hweight32(port_vec);
3805         adap->params.portvec = port_vec;
3806
3807         /*
3808          * If the firmware is initialized already (and we're not forcing a
3809          * master initialization), note that we're living with existing
3810          * adapter parameters.  Otherwise, it's time to try initializing the
3811          * adapter ...
3812          */
3813         if (state == DEV_STATE_INIT) {
3814                 dev_info(adap->pdev_dev, "Coming up as %s: "\
3815                          "Adapter already initialized\n",
3816                          adap->flags & MASTER_PF ? "MASTER" : "SLAVE");
3817                 adap->flags |= USING_SOFT_PARAMS;
3818         } else {
3819                 dev_info(adap->pdev_dev, "Coming up as MASTER: "\
3820                          "Initializing adapter\n");
3821
3822                 /*
3823                  * If the firmware doesn't support Configuration
3824                  * Files warn user and exit,
3825                  */
3826                 if (ret < 0)
3827                         dev_warn(adap->pdev_dev, "Firmware doesn't support "
3828                                  "configuration file.\n");
3829                 if (force_old_init)
3830                         ret = adap_init0_no_config(adap, reset);
3831                 else {
3832                         /*
3833                          * Find out whether we're dealing with a version of
3834                          * the firmware which has configuration file support.
3835                          */
3836                         params[0] = (FW_PARAMS_MNEM(FW_PARAMS_MNEM_DEV) |
3837                                      FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_DEV_CF));
3838                         ret = t4_query_params(adap, adap->mbox, adap->fn, 0, 1,
3839                                               params, val);
3840
3841                         /*
3842                          * If the firmware doesn't support Configuration
3843                          * Files, use the old Driver-based, hard-wired
3844                          * initialization.  Otherwise, try using the
3845                          * Configuration File support and fall back to the
3846                          * Driver-based initialization if there's no
3847                          * Configuration File found.
3848                          */
3849                         if (ret < 0)
3850                                 ret = adap_init0_no_config(adap, reset);
3851                         else {
3852                                 /*
3853                                  * The firmware provides us with a memory
3854                                  * buffer where we can load a Configuration
3855                                  * File from the host if we want to override
3856                                  * the Configuration File in flash.
3857                                  */
3858
3859                                 ret = adap_init0_config(adap, reset);
3860                                 if (ret == -ENOENT) {
3861                                         dev_info(adap->pdev_dev,
3862                                             "No Configuration File present "
3863                                             "on adapter.  Using hard-wired "
3864                                             "configuration parameters.\n");
3865                                         ret = adap_init0_no_config(adap, reset);
3866                                 }
3867                         }
3868                 }
3869                 if (ret < 0) {
3870                         dev_err(adap->pdev_dev,
3871                                 "could not initialize adapter, error %d\n",
3872                                 -ret);
3873                         goto bye;
3874                 }
3875         }
3876
3877         /*
3878          * If we're living with non-hard-coded parameters (either from a
3879          * Firmware Configuration File or values programmed by a different PF
3880          * Driver), give the SGE code a chance to pull in anything that it
3881          * needs ...  Note that this must be called after we retrieve our VPD
3882          * parameters in order to know how to convert core ticks to seconds.
3883          */
3884         if (adap->flags & USING_SOFT_PARAMS) {
3885                 ret = t4_sge_init(adap);
3886                 if (ret < 0)
3887                         goto bye;
3888         }
3889
3890         if (is_bypass_device(adap->pdev->device))
3891                 adap->params.bypass = 1;
3892
3893         /*
3894          * Grab some of our basic fundamental operating parameters.
3895          */
3896 #define FW_PARAM_DEV(param) \
3897         (FW_PARAMS_MNEM(FW_PARAMS_MNEM_DEV) | \
3898         FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_DEV_##param))
3899
3900 #define FW_PARAM_PFVF(param) \
3901         FW_PARAMS_MNEM(FW_PARAMS_MNEM_PFVF) | \
3902         FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_PFVF_##param)|  \
3903         FW_PARAMS_PARAM_Y(0) | \
3904         FW_PARAMS_PARAM_Z(0)
3905
3906         params[0] = FW_PARAM_PFVF(EQ_START);
3907         params[1] = FW_PARAM_PFVF(L2T_START);
3908         params[2] = FW_PARAM_PFVF(L2T_END);
3909         params[3] = FW_PARAM_PFVF(FILTER_START);
3910         params[4] = FW_PARAM_PFVF(FILTER_END);
3911         params[5] = FW_PARAM_PFVF(IQFLINT_START);
3912         ret = t4_query_params(adap, adap->mbox, adap->fn, 0, 6, params, val);
3913         if (ret < 0)
3914                 goto bye;
3915         adap->sge.egr_start = val[0];
3916         adap->l2t_start = val[1];
3917         adap->l2t_end = val[2];
3918         adap->tids.ftid_base = val[3];
3919         adap->tids.nftids = val[4] - val[3] + 1;
3920         adap->sge.ingr_start = val[5];
3921
3922         /* query params related to active filter region */
3923         params[0] = FW_PARAM_PFVF(ACTIVE_FILTER_START);
3924         params[1] = FW_PARAM_PFVF(ACTIVE_FILTER_END);
3925         ret = t4_query_params(adap, adap->mbox, adap->fn, 0, 2, params, val);
3926         /* If Active filter size is set we enable establishing
3927          * offload connection through firmware work request
3928          */
3929         if ((val[0] != val[1]) && (ret >= 0)) {
3930                 adap->flags |= FW_OFLD_CONN;
3931                 adap->tids.aftid_base = val[0];
3932                 adap->tids.aftid_end = val[1];
3933         }
3934
3935         /*
3936          * Get device capabilities so we can determine what resources we need
3937          * to manage.
3938          */
3939         memset(&caps_cmd, 0, sizeof(caps_cmd));
3940         caps_cmd.op_to_write = htonl(FW_CMD_OP(FW_CAPS_CONFIG_CMD) |
3941                                      FW_CMD_REQUEST | FW_CMD_READ);
3942         caps_cmd.retval_len16 = htonl(FW_LEN16(caps_cmd));
3943         ret = t4_wr_mbox(adap, adap->mbox, &caps_cmd, sizeof(caps_cmd),
3944                          &caps_cmd);
3945         if (ret < 0)
3946                 goto bye;
3947
3948         if (caps_cmd.ofldcaps) {
3949                 /* query offload-related parameters */
3950                 params[0] = FW_PARAM_DEV(NTID);
3951                 params[1] = FW_PARAM_PFVF(SERVER_START);
3952                 params[2] = FW_PARAM_PFVF(SERVER_END);
3953                 params[3] = FW_PARAM_PFVF(TDDP_START);
3954                 params[4] = FW_PARAM_PFVF(TDDP_END);
3955                 params[5] = FW_PARAM_DEV(FLOWC_BUFFIFO_SZ);
3956                 ret = t4_query_params(adap, adap->mbox, adap->fn, 0, 6,
3957                                       params, val);
3958                 if (ret < 0)
3959                         goto bye;
3960                 adap->tids.ntids = val[0];
3961                 adap->tids.natids = min(adap->tids.ntids / 2, MAX_ATIDS);
3962                 adap->tids.stid_base = val[1];
3963                 adap->tids.nstids = val[2] - val[1] + 1;
3964                 /*
3965                  * Setup server filter region. Divide the availble filter
3966                  * region into two parts. Regular filters get 1/3rd and server
3967                  * filters get 2/3rd part. This is only enabled if workarond
3968                  * path is enabled.
3969                  * 1. For regular filters.
3970                  * 2. Server filter: This are special filters which are used
3971                  * to redirect SYN packets to offload queue.
3972                  */
3973                 if (adap->flags & FW_OFLD_CONN && !is_bypass(adap)) {
3974                         adap->tids.sftid_base = adap->tids.ftid_base +
3975                                         DIV_ROUND_UP(adap->tids.nftids, 3);
3976                         adap->tids.nsftids = adap->tids.nftids -
3977                                          DIV_ROUND_UP(adap->tids.nftids, 3);
3978                         adap->tids.nftids = adap->tids.sftid_base -
3979                                                 adap->tids.ftid_base;
3980                 }
3981                 adap->vres.ddp.start = val[3];
3982                 adap->vres.ddp.size = val[4] - val[3] + 1;
3983                 adap->params.ofldq_wr_cred = val[5];
3984
3985                 adap->params.offload = 1;
3986         }
3987         if (caps_cmd.rdmacaps) {
3988                 params[0] = FW_PARAM_PFVF(STAG_START);
3989                 params[1] = FW_PARAM_PFVF(STAG_END);
3990                 params[2] = FW_PARAM_PFVF(RQ_START);
3991                 params[3] = FW_PARAM_PFVF(RQ_END);
3992                 params[4] = FW_PARAM_PFVF(PBL_START);
3993                 params[5] = FW_PARAM_PFVF(PBL_END);
3994                 ret = t4_query_params(adap, adap->mbox, adap->fn, 0, 6,
3995                                       params, val);
3996                 if (ret < 0)
3997                         goto bye;
3998                 adap->vres.stag.start = val[0];
3999                 adap->vres.stag.size = val[1] - val[0] + 1;
4000                 adap->vres.rq.start = val[2];
4001                 adap->vres.rq.size = val[3] - val[2] + 1;
4002                 adap->vres.pbl.start = val[4];
4003                 adap->vres.pbl.size = val[5] - val[4] + 1;
4004
4005                 params[0] = FW_PARAM_PFVF(SQRQ_START);
4006                 params[1] = FW_PARAM_PFVF(SQRQ_END);
4007                 params[2] = FW_PARAM_PFVF(CQ_START);
4008                 params[3] = FW_PARAM_PFVF(CQ_END);
4009                 params[4] = FW_PARAM_PFVF(OCQ_START);
4010                 params[5] = FW_PARAM_PFVF(OCQ_END);
4011                 ret = t4_query_params(adap, 0, 0, 0, 6, params, val);
4012                 if (ret < 0)
4013                         goto bye;
4014                 adap->vres.qp.start = val[0];
4015                 adap->vres.qp.size = val[1] - val[0] + 1;
4016                 adap->vres.cq.start = val[2];
4017                 adap->vres.cq.size = val[3] - val[2] + 1;
4018                 adap->vres.ocq.start = val[4];
4019                 adap->vres.ocq.size = val[5] - val[4] + 1;
4020         }
4021         if (caps_cmd.iscsicaps) {
4022                 params[0] = FW_PARAM_PFVF(ISCSI_START);
4023                 params[1] = FW_PARAM_PFVF(ISCSI_END);
4024                 ret = t4_query_params(adap, adap->mbox, adap->fn, 0, 2,
4025                                       params, val);
4026                 if (ret < 0)
4027                         goto bye;
4028                 adap->vres.iscsi.start = val[0];
4029                 adap->vres.iscsi.size = val[1] - val[0] + 1;
4030         }
4031 #undef FW_PARAM_PFVF
4032 #undef FW_PARAM_DEV
4033
4034         /*
4035          * These are finalized by FW initialization, load their values now.
4036          */
4037         v = t4_read_reg(adap, TP_TIMER_RESOLUTION);
4038         adap->params.tp.tre = TIMERRESOLUTION_GET(v);
4039         adap->params.tp.dack_re = DELAYEDACKRESOLUTION_GET(v);
4040         t4_read_mtu_tbl(adap, adap->params.mtus, NULL);
4041         t4_load_mtus(adap, adap->params.mtus, adap->params.a_wnd,
4042                      adap->params.b_wnd);
4043
4044         /* MODQ_REQ_MAP defaults to setting queues 0-3 to chan 0-3 */
4045         for (j = 0; j < NCHAN; j++)
4046                 adap->params.tp.tx_modq[j] = j;
4047
4048         adap->flags |= FW_OK;
4049         return 0;
4050
4051         /*
4052          * Something bad happened.  If a command timed out or failed with EIO
4053          * FW does not operate within its spec or something catastrophic
4054          * happened to HW/FW, stop issuing commands.
4055          */
4056 bye:
4057         if (ret != -ETIMEDOUT && ret != -EIO)
4058                 t4_fw_bye(adap, adap->mbox);
4059         return ret;
4060 }
4061
4062 /* EEH callbacks */
4063
4064 static pci_ers_result_t eeh_err_detected(struct pci_dev *pdev,
4065                                          pci_channel_state_t state)
4066 {
4067         int i;
4068         struct adapter *adap = pci_get_drvdata(pdev);
4069
4070         if (!adap)
4071                 goto out;
4072
4073         rtnl_lock();
4074         adap->flags &= ~FW_OK;
4075         notify_ulds(adap, CXGB4_STATE_START_RECOVERY);
4076         for_each_port(adap, i) {
4077                 struct net_device *dev = adap->port[i];
4078
4079                 netif_device_detach(dev);
4080                 netif_carrier_off(dev);
4081         }
4082         if (adap->flags & FULL_INIT_DONE)
4083                 cxgb_down(adap);
4084         rtnl_unlock();
4085         pci_disable_device(pdev);
4086 out:    return state == pci_channel_io_perm_failure ?
4087                 PCI_ERS_RESULT_DISCONNECT : PCI_ERS_RESULT_NEED_RESET;
4088 }
4089
4090 static pci_ers_result_t eeh_slot_reset(struct pci_dev *pdev)
4091 {
4092         int i, ret;
4093         struct fw_caps_config_cmd c;
4094         struct adapter *adap = pci_get_drvdata(pdev);
4095
4096         if (!adap) {
4097                 pci_restore_state(pdev);
4098                 pci_save_state(pdev);
4099                 return PCI_ERS_RESULT_RECOVERED;
4100         }
4101
4102         if (pci_enable_device(pdev)) {
4103                 dev_err(&pdev->dev, "cannot reenable PCI device after reset\n");
4104                 return PCI_ERS_RESULT_DISCONNECT;
4105         }
4106
4107         pci_set_master(pdev);
4108         pci_restore_state(pdev);
4109         pci_save_state(pdev);
4110         pci_cleanup_aer_uncorrect_error_status(pdev);
4111
4112         if (t4_wait_dev_ready(adap) < 0)
4113                 return PCI_ERS_RESULT_DISCONNECT;
4114         if (t4_fw_hello(adap, adap->fn, adap->fn, MASTER_MUST, NULL))
4115                 return PCI_ERS_RESULT_DISCONNECT;
4116         adap->flags |= FW_OK;
4117         if (adap_init1(adap, &c))
4118                 return PCI_ERS_RESULT_DISCONNECT;
4119
4120         for_each_port(adap, i) {
4121                 struct port_info *p = adap2pinfo(adap, i);
4122
4123                 ret = t4_alloc_vi(adap, adap->fn, p->tx_chan, adap->fn, 0, 1,
4124                                   NULL, NULL);
4125                 if (ret < 0)
4126                         return PCI_ERS_RESULT_DISCONNECT;
4127                 p->viid = ret;
4128                 p->xact_addr_filt = -1;
4129         }
4130
4131         t4_load_mtus(adap, adap->params.mtus, adap->params.a_wnd,
4132                      adap->params.b_wnd);
4133         setup_memwin(adap);
4134         if (cxgb_up(adap))
4135                 return PCI_ERS_RESULT_DISCONNECT;
4136         return PCI_ERS_RESULT_RECOVERED;
4137 }
4138
4139 static void eeh_resume(struct pci_dev *pdev)
4140 {
4141         int i;
4142         struct adapter *adap = pci_get_drvdata(pdev);
4143
4144         if (!adap)
4145                 return;
4146
4147         rtnl_lock();
4148         for_each_port(adap, i) {
4149                 struct net_device *dev = adap->port[i];
4150
4151                 if (netif_running(dev)) {
4152                         link_start(dev);
4153                         cxgb_set_rxmode(dev);
4154                 }
4155                 netif_device_attach(dev);
4156         }
4157         rtnl_unlock();
4158 }
4159
4160 static const struct pci_error_handlers cxgb4_eeh = {
4161         .error_detected = eeh_err_detected,
4162         .slot_reset     = eeh_slot_reset,
4163         .resume         = eeh_resume,
4164 };
4165
4166 static inline bool is_10g_port(const struct link_config *lc)
4167 {
4168         return (lc->supported & FW_PORT_CAP_SPEED_10G) != 0;
4169 }
4170
4171 static inline void init_rspq(struct sge_rspq *q, u8 timer_idx, u8 pkt_cnt_idx,
4172                              unsigned int size, unsigned int iqe_size)
4173 {
4174         q->intr_params = QINTR_TIMER_IDX(timer_idx) |
4175                          (pkt_cnt_idx < SGE_NCOUNTERS ? QINTR_CNT_EN : 0);
4176         q->pktcnt_idx = pkt_cnt_idx < SGE_NCOUNTERS ? pkt_cnt_idx : 0;
4177         q->iqe_len = iqe_size;
4178         q->size = size;
4179 }
4180
4181 /*
4182  * Perform default configuration of DMA queues depending on the number and type
4183  * of ports we found and the number of available CPUs.  Most settings can be
4184  * modified by the admin prior to actual use.
4185  */
4186 static void __devinit cfg_queues(struct adapter *adap)
4187 {
4188         struct sge *s = &adap->sge;
4189         int i, q10g = 0, n10g = 0, qidx = 0;
4190
4191         for_each_port(adap, i)
4192                 n10g += is_10g_port(&adap2pinfo(adap, i)->link_cfg);
4193
4194         /*
4195          * We default to 1 queue per non-10G port and up to # of cores queues
4196          * per 10G port.
4197          */
4198         if (n10g)
4199                 q10g = (MAX_ETH_QSETS - (adap->params.nports - n10g)) / n10g;
4200         if (q10g > netif_get_num_default_rss_queues())
4201                 q10g = netif_get_num_default_rss_queues();
4202
4203         for_each_port(adap, i) {
4204                 struct port_info *pi = adap2pinfo(adap, i);
4205
4206                 pi->first_qset = qidx;
4207                 pi->nqsets = is_10g_port(&pi->link_cfg) ? q10g : 1;
4208                 qidx += pi->nqsets;
4209         }
4210
4211         s->ethqsets = qidx;
4212         s->max_ethqsets = qidx;   /* MSI-X may lower it later */
4213
4214         if (is_offload(adap)) {
4215                 /*
4216                  * For offload we use 1 queue/channel if all ports are up to 1G,
4217                  * otherwise we divide all available queues amongst the channels
4218                  * capped by the number of available cores.
4219                  */
4220                 if (n10g) {
4221                         i = min_t(int, ARRAY_SIZE(s->ofldrxq),
4222                                   num_online_cpus());
4223                         s->ofldqsets = roundup(i, adap->params.nports);
4224                 } else
4225                         s->ofldqsets = adap->params.nports;
4226                 /* For RDMA one Rx queue per channel suffices */
4227                 s->rdmaqs = adap->params.nports;
4228         }
4229
4230         for (i = 0; i < ARRAY_SIZE(s->ethrxq); i++) {
4231                 struct sge_eth_rxq *r = &s->ethrxq[i];
4232
4233                 init_rspq(&r->rspq, 0, 0, 1024, 64);
4234                 r->fl.size = 72;
4235         }
4236
4237         for (i = 0; i < ARRAY_SIZE(s->ethtxq); i++)
4238                 s->ethtxq[i].q.size = 1024;
4239
4240         for (i = 0; i < ARRAY_SIZE(s->ctrlq); i++)
4241                 s->ctrlq[i].q.size = 512;
4242
4243         for (i = 0; i < ARRAY_SIZE(s->ofldtxq); i++)
4244                 s->ofldtxq[i].q.size = 1024;
4245
4246         for (i = 0; i < ARRAY_SIZE(s->ofldrxq); i++) {
4247                 struct sge_ofld_rxq *r = &s->ofldrxq[i];
4248
4249                 init_rspq(&r->rspq, 0, 0, 1024, 64);
4250                 r->rspq.uld = CXGB4_ULD_ISCSI;
4251                 r->fl.size = 72;
4252         }
4253
4254         for (i = 0; i < ARRAY_SIZE(s->rdmarxq); i++) {
4255                 struct sge_ofld_rxq *r = &s->rdmarxq[i];
4256
4257                 init_rspq(&r->rspq, 0, 0, 511, 64);
4258                 r->rspq.uld = CXGB4_ULD_RDMA;
4259                 r->fl.size = 72;
4260         }
4261
4262         init_rspq(&s->fw_evtq, 6, 0, 512, 64);
4263         init_rspq(&s->intrq, 6, 0, 2 * MAX_INGQ, 64);
4264 }
4265
4266 /*
4267  * Reduce the number of Ethernet queues across all ports to at most n.
4268  * n provides at least one queue per port.
4269  */
4270 static void __devinit reduce_ethqs(struct adapter *adap, int n)
4271 {
4272         int i;
4273         struct port_info *pi;
4274
4275         while (n < adap->sge.ethqsets)
4276                 for_each_port(adap, i) {
4277                         pi = adap2pinfo(adap, i);
4278                         if (pi->nqsets > 1) {
4279                                 pi->nqsets--;
4280                                 adap->sge.ethqsets--;
4281                                 if (adap->sge.ethqsets <= n)
4282                                         break;
4283                         }
4284                 }
4285
4286         n = 0;
4287         for_each_port(adap, i) {
4288                 pi = adap2pinfo(adap, i);
4289                 pi->first_qset = n;
4290                 n += pi->nqsets;
4291         }
4292 }
4293
4294 /* 2 MSI-X vectors needed for the FW queue and non-data interrupts */
4295 #define EXTRA_VECS 2
4296
4297 static int __devinit enable_msix(struct adapter *adap)
4298 {
4299         int ofld_need = 0;
4300         int i, err, want, need;
4301         struct sge *s = &adap->sge;
4302         unsigned int nchan = adap->params.nports;
4303         struct msix_entry entries[MAX_INGQ + 1];
4304
4305         for (i = 0; i < ARRAY_SIZE(entries); ++i)
4306                 entries[i].entry = i;
4307
4308         want = s->max_ethqsets + EXTRA_VECS;
4309         if (is_offload(adap)) {
4310                 want += s->rdmaqs + s->ofldqsets;
4311                 /* need nchan for each possible ULD */
4312                 ofld_need = 2 * nchan;
4313         }
4314         need = adap->params.nports + EXTRA_VECS + ofld_need;
4315
4316         while ((err = pci_enable_msix(adap->pdev, entries, want)) >= need)
4317                 want = err;
4318
4319         if (!err) {
4320                 /*
4321                  * Distribute available vectors to the various queue groups.
4322                  * Every group gets its minimum requirement and NIC gets top
4323                  * priority for leftovers.
4324                  */
4325                 i = want - EXTRA_VECS - ofld_need;
4326                 if (i < s->max_ethqsets) {
4327                         s->max_ethqsets = i;
4328                         if (i < s->ethqsets)
4329                                 reduce_ethqs(adap, i);
4330                 }
4331                 if (is_offload(adap)) {
4332                         i = want - EXTRA_VECS - s->max_ethqsets;
4333                         i -= ofld_need - nchan;
4334                         s->ofldqsets = (i / nchan) * nchan;  /* round down */
4335                 }
4336                 for (i = 0; i < want; ++i)
4337                         adap->msix_info[i].vec = entries[i].vector;
4338         } else if (err > 0)
4339                 dev_info(adap->pdev_dev,
4340                          "only %d MSI-X vectors left, not using MSI-X\n", err);
4341         return err;
4342 }
4343
4344 #undef EXTRA_VECS
4345
4346 static int __devinit init_rss(struct adapter *adap)
4347 {
4348         unsigned int i, j;
4349
4350         for_each_port(adap, i) {
4351                 struct port_info *pi = adap2pinfo(adap, i);
4352
4353                 pi->rss = kcalloc(pi->rss_size, sizeof(u16), GFP_KERNEL);
4354                 if (!pi->rss)
4355                         return -ENOMEM;
4356                 for (j = 0; j < pi->rss_size; j++)
4357                         pi->rss[j] = ethtool_rxfh_indir_default(j, pi->nqsets);
4358         }
4359         return 0;
4360 }
4361
4362 static void __devinit print_port_info(const struct net_device *dev)
4363 {
4364         static const char *base[] = {
4365                 "R XFI", "R XAUI", "T SGMII", "T XFI", "T XAUI", "KX4", "CX4",
4366                 "KX", "KR", "R SFP+", "KR/KX", "KR/KX/KX4"
4367         };
4368
4369         char buf[80];
4370         char *bufp = buf;
4371         const char *spd = "";
4372         const struct port_info *pi = netdev_priv(dev);
4373         const struct adapter *adap = pi->adapter;
4374
4375         if (adap->params.pci.speed == PCI_EXP_LNKSTA_CLS_2_5GB)
4376                 spd = " 2.5 GT/s";
4377         else if (adap->params.pci.speed == PCI_EXP_LNKSTA_CLS_5_0GB)
4378                 spd = " 5 GT/s";
4379
4380         if (pi->link_cfg.supported & FW_PORT_CAP_SPEED_100M)
4381                 bufp += sprintf(bufp, "100/");
4382         if (pi->link_cfg.supported & FW_PORT_CAP_SPEED_1G)
4383                 bufp += sprintf(bufp, "1000/");
4384         if (pi->link_cfg.supported & FW_PORT_CAP_SPEED_10G)
4385                 bufp += sprintf(bufp, "10G/");
4386         if (bufp != buf)
4387                 --bufp;
4388         sprintf(bufp, "BASE-%s", base[pi->port_type]);
4389
4390         netdev_info(dev, "Chelsio %s rev %d %s %sNIC PCIe x%d%s%s\n",
4391                     adap->params.vpd.id, adap->params.rev, buf,
4392                     is_offload(adap) ? "R" : "", adap->params.pci.width, spd,
4393                     (adap->flags & USING_MSIX) ? " MSI-X" :
4394                     (adap->flags & USING_MSI) ? " MSI" : "");
4395         netdev_info(dev, "S/N: %s, E/C: %s\n",
4396                     adap->params.vpd.sn, adap->params.vpd.ec);
4397 }
4398
4399 static void __devinit enable_pcie_relaxed_ordering(struct pci_dev *dev)
4400 {
4401         pcie_capability_set_word(dev, PCI_EXP_DEVCTL, PCI_EXP_DEVCTL_RELAX_EN);
4402 }
4403
4404 /*
4405  * Free the following resources:
4406  * - memory used for tables
4407  * - MSI/MSI-X
4408  * - net devices
4409  * - resources FW is holding for us
4410  */
4411 static void free_some_resources(struct adapter *adapter)
4412 {
4413         unsigned int i;
4414
4415         t4_free_mem(adapter->l2t);
4416         t4_free_mem(adapter->tids.tid_tab);
4417         disable_msi(adapter);
4418
4419         for_each_port(adapter, i)
4420                 if (adapter->port[i]) {
4421                         kfree(adap2pinfo(adapter, i)->rss);
4422                         free_netdev(adapter->port[i]);
4423                 }
4424         if (adapter->flags & FW_OK)
4425                 t4_fw_bye(adapter, adapter->fn);
4426 }
4427
4428 #define TSO_FLAGS (NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_TSO_ECN)
4429 #define VLAN_FEAT (NETIF_F_SG | NETIF_F_IP_CSUM | TSO_FLAGS | \
4430                    NETIF_F_IPV6_CSUM | NETIF_F_HIGHDMA)
4431
4432 static int __devinit init_one(struct pci_dev *pdev,
4433                               const struct pci_device_id *ent)
4434 {
4435         int func, i, err;
4436         struct port_info *pi;
4437         bool highdma = false;
4438         struct adapter *adapter = NULL;
4439
4440         printk_once(KERN_INFO "%s - version %s\n", DRV_DESC, DRV_VERSION);
4441
4442         err = pci_request_regions(pdev, KBUILD_MODNAME);
4443         if (err) {
4444                 /* Just info, some other driver may have claimed the device. */
4445                 dev_info(&pdev->dev, "cannot obtain PCI resources\n");
4446                 return err;
4447         }
4448
4449         /* We control everything through one PF */
4450         func = PCI_FUNC(pdev->devfn);
4451         if (func != ent->driver_data) {
4452                 pci_save_state(pdev);        /* to restore SR-IOV later */
4453                 goto sriov;
4454         }
4455
4456         err = pci_enable_device(pdev);
4457         if (err) {
4458                 dev_err(&pdev->dev, "cannot enable PCI device\n");
4459                 goto out_release_regions;
4460         }
4461
4462         if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
4463                 highdma = true;
4464                 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
4465                 if (err) {
4466                         dev_err(&pdev->dev, "unable to obtain 64-bit DMA for "
4467                                 "coherent allocations\n");
4468                         goto out_disable_device;
4469                 }
4470         } else {
4471                 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
4472                 if (err) {
4473                         dev_err(&pdev->dev, "no usable DMA configuration\n");
4474                         goto out_disable_device;
4475                 }
4476         }
4477
4478         pci_enable_pcie_error_reporting(pdev);
4479         enable_pcie_relaxed_ordering(pdev);
4480         pci_set_master(pdev);
4481         pci_save_state(pdev);
4482
4483         adapter = kzalloc(sizeof(*adapter), GFP_KERNEL);
4484         if (!adapter) {
4485                 err = -ENOMEM;
4486                 goto out_disable_device;
4487         }
4488
4489         adapter->regs = pci_ioremap_bar(pdev, 0);
4490         if (!adapter->regs) {
4491                 dev_err(&pdev->dev, "cannot map device registers\n");
4492                 err = -ENOMEM;
4493                 goto out_free_adapter;
4494         }
4495
4496         adapter->pdev = pdev;
4497         adapter->pdev_dev = &pdev->dev;
4498         adapter->mbox = func;
4499         adapter->fn = func;
4500         adapter->msg_enable = dflt_msg_enable;
4501         memset(adapter->chan_map, 0xff, sizeof(adapter->chan_map));
4502
4503         spin_lock_init(&adapter->stats_lock);
4504         spin_lock_init(&adapter->tid_release_lock);
4505
4506         INIT_WORK(&adapter->tid_release_task, process_tid_release_list);
4507         INIT_WORK(&adapter->db_full_task, process_db_full);
4508         INIT_WORK(&adapter->db_drop_task, process_db_drop);
4509
4510         err = t4_prep_adapter(adapter);
4511         if (err)
4512                 goto out_unmap_bar;
4513         setup_memwin(adapter);
4514         err = adap_init0(adapter);
4515         setup_memwin_rdma(adapter);
4516         if (err)
4517                 goto out_unmap_bar;
4518
4519         for_each_port(adapter, i) {
4520                 struct net_device *netdev;
4521
4522                 netdev = alloc_etherdev_mq(sizeof(struct port_info),
4523                                            MAX_ETH_QSETS);
4524                 if (!netdev) {
4525                         err = -ENOMEM;
4526                         goto out_free_dev;
4527                 }
4528
4529                 SET_NETDEV_DEV(netdev, &pdev->dev);
4530
4531                 adapter->port[i] = netdev;
4532                 pi = netdev_priv(netdev);
4533                 pi->adapter = adapter;
4534                 pi->xact_addr_filt = -1;
4535                 pi->port_id = i;
4536                 netdev->irq = pdev->irq;
4537
4538                 netdev->hw_features = NETIF_F_SG | TSO_FLAGS |
4539                         NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
4540                         NETIF_F_RXCSUM | NETIF_F_RXHASH |
4541                         NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
4542                 if (highdma)
4543                         netdev->hw_features |= NETIF_F_HIGHDMA;
4544                 netdev->features |= netdev->hw_features;
4545                 netdev->vlan_features = netdev->features & VLAN_FEAT;
4546
4547                 netdev->priv_flags |= IFF_UNICAST_FLT;
4548
4549                 netdev->netdev_ops = &cxgb4_netdev_ops;
4550                 SET_ETHTOOL_OPS(netdev, &cxgb_ethtool_ops);
4551         }
4552
4553         pci_set_drvdata(pdev, adapter);
4554
4555         if (adapter->flags & FW_OK) {
4556                 err = t4_port_init(adapter, func, func, 0);
4557                 if (err)
4558                         goto out_free_dev;
4559         }
4560
4561         /*
4562          * Configure queues and allocate tables now, they can be needed as
4563          * soon as the first register_netdev completes.
4564          */
4565         cfg_queues(adapter);
4566
4567         adapter->l2t = t4_init_l2t();
4568         if (!adapter->l2t) {
4569                 /* We tolerate a lack of L2T, giving up some functionality */
4570                 dev_warn(&pdev->dev, "could not allocate L2T, continuing\n");
4571                 adapter->params.offload = 0;
4572         }
4573
4574         if (is_offload(adapter) && tid_init(&adapter->tids) < 0) {
4575                 dev_warn(&pdev->dev, "could not allocate TID table, "
4576                          "continuing\n");
4577                 adapter->params.offload = 0;
4578         }
4579
4580         /* See what interrupts we'll be using */
4581         if (msi > 1 && enable_msix(adapter) == 0)
4582                 adapter->flags |= USING_MSIX;
4583         else if (msi > 0 && pci_enable_msi(pdev) == 0)
4584                 adapter->flags |= USING_MSI;
4585
4586         err = init_rss(adapter);
4587         if (err)
4588                 goto out_free_dev;
4589
4590         /*
4591          * The card is now ready to go.  If any errors occur during device
4592          * registration we do not fail the whole card but rather proceed only
4593          * with the ports we manage to register successfully.  However we must
4594          * register at least one net device.
4595          */
4596         for_each_port(adapter, i) {
4597                 pi = adap2pinfo(adapter, i);
4598                 netif_set_real_num_tx_queues(adapter->port[i], pi->nqsets);
4599                 netif_set_real_num_rx_queues(adapter->port[i], pi->nqsets);
4600
4601                 err = register_netdev(adapter->port[i]);
4602                 if (err)
4603                         break;
4604                 adapter->chan_map[pi->tx_chan] = i;
4605                 print_port_info(adapter->port[i]);
4606         }
4607         if (i == 0) {
4608                 dev_err(&pdev->dev, "could not register any net devices\n");
4609                 goto out_free_dev;
4610         }
4611         if (err) {
4612                 dev_warn(&pdev->dev, "only %d net devices registered\n", i);
4613                 err = 0;
4614         }
4615
4616         if (cxgb4_debugfs_root) {
4617                 adapter->debugfs_root = debugfs_create_dir(pci_name(pdev),
4618                                                            cxgb4_debugfs_root);
4619                 setup_debugfs(adapter);
4620         }
4621
4622         /* PCIe EEH recovery on powerpc platforms needs fundamental reset */
4623         pdev->needs_freset = 1;
4624
4625         if (is_offload(adapter))
4626                 attach_ulds(adapter);
4627
4628 sriov:
4629 #ifdef CONFIG_PCI_IOV
4630         if (func < ARRAY_SIZE(num_vf) && num_vf[func] > 0)
4631                 if (pci_enable_sriov(pdev, num_vf[func]) == 0)
4632                         dev_info(&pdev->dev,
4633                                  "instantiated %u virtual functions\n",
4634                                  num_vf[func]);
4635 #endif
4636         return 0;
4637
4638  out_free_dev:
4639         free_some_resources(adapter);
4640  out_unmap_bar:
4641         iounmap(adapter->regs);
4642  out_free_adapter:
4643         kfree(adapter);
4644  out_disable_device:
4645         pci_disable_pcie_error_reporting(pdev);
4646         pci_disable_device(pdev);
4647  out_release_regions:
4648         pci_release_regions(pdev);
4649         pci_set_drvdata(pdev, NULL);
4650         return err;
4651 }
4652
4653 static void __devexit remove_one(struct pci_dev *pdev)
4654 {
4655         struct adapter *adapter = pci_get_drvdata(pdev);
4656
4657 #ifdef CONFIG_PCI_IOV
4658         pci_disable_sriov(pdev);
4659
4660 #endif
4661
4662         if (adapter) {
4663                 int i;
4664
4665                 if (is_offload(adapter))
4666                         detach_ulds(adapter);
4667
4668                 for_each_port(adapter, i)
4669                         if (adapter->port[i]->reg_state == NETREG_REGISTERED)
4670                                 unregister_netdev(adapter->port[i]);
4671
4672                 if (adapter->debugfs_root)
4673                         debugfs_remove_recursive(adapter->debugfs_root);
4674
4675                 if (adapter->flags & FULL_INIT_DONE)
4676                         cxgb_down(adapter);
4677
4678                 free_some_resources(adapter);
4679                 iounmap(adapter->regs);
4680                 kfree(adapter);
4681                 pci_disable_pcie_error_reporting(pdev);
4682                 pci_disable_device(pdev);
4683                 pci_release_regions(pdev);
4684                 pci_set_drvdata(pdev, NULL);
4685         } else
4686                 pci_release_regions(pdev);
4687 }
4688
4689 static struct pci_driver cxgb4_driver = {
4690         .name     = KBUILD_MODNAME,
4691         .id_table = cxgb4_pci_tbl,
4692         .probe    = init_one,
4693         .remove   = __devexit_p(remove_one),
4694         .err_handler = &cxgb4_eeh,
4695 };
4696
4697 static int __init cxgb4_init_module(void)
4698 {
4699         int ret;
4700
4701         workq = create_singlethread_workqueue("cxgb4");
4702         if (!workq)
4703                 return -ENOMEM;
4704
4705         /* Debugfs support is optional, just warn if this fails */
4706         cxgb4_debugfs_root = debugfs_create_dir(KBUILD_MODNAME, NULL);
4707         if (!cxgb4_debugfs_root)
4708                 pr_warning("could not create debugfs entry, continuing\n");
4709
4710         ret = pci_register_driver(&cxgb4_driver);
4711         if (ret < 0)
4712                 debugfs_remove(cxgb4_debugfs_root);
4713         return ret;
4714 }
4715
4716 static void __exit cxgb4_cleanup_module(void)
4717 {
4718         pci_unregister_driver(&cxgb4_driver);
4719         debugfs_remove(cxgb4_debugfs_root);  /* NULL ok */
4720         flush_workqueue(workq);
4721         destroy_workqueue(workq);
4722 }
4723
4724 module_init(cxgb4_init_module);
4725 module_exit(cxgb4_cleanup_module);