[PATCH] Scheduled removal of SA_xxx interrupt flags fixups 2
[sfrench/cifs-2.6.git] / drivers / net / cxgb3 / cxgb3_main.c
1 /*
2  * Copyright (c) 2003-2007 Chelsio, Inc. All rights reserved.
3  *
4  * This software is available to you under a choice of one of two
5  * licenses.  You may choose to be licensed under the terms of the GNU
6  * General Public License (GPL) Version 2, available from the file
7  * COPYING in the main directory of this source tree, or the
8  * OpenIB.org BSD license below:
9  *
10  *     Redistribution and use in source and binary forms, with or
11  *     without modification, are permitted provided that the following
12  *     conditions are met:
13  *
14  *      - Redistributions of source code must retain the above
15  *        copyright notice, this list of conditions and the following
16  *        disclaimer.
17  *
18  *      - Redistributions in binary form must reproduce the above
19  *        copyright notice, this list of conditions and the following
20  *        disclaimer in the documentation and/or other materials
21  *        provided with the distribution.
22  *
23  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30  * SOFTWARE.
31  */
32 #include <linux/module.h>
33 #include <linux/moduleparam.h>
34 #include <linux/init.h>
35 #include <linux/pci.h>
36 #include <linux/dma-mapping.h>
37 #include <linux/netdevice.h>
38 #include <linux/etherdevice.h>
39 #include <linux/if_vlan.h>
40 #include <linux/mii.h>
41 #include <linux/sockios.h>
42 #include <linux/workqueue.h>
43 #include <linux/proc_fs.h>
44 #include <linux/rtnetlink.h>
45 #include <asm/uaccess.h>
46
47 #include "common.h"
48 #include "cxgb3_ioctl.h"
49 #include "regs.h"
50 #include "cxgb3_offload.h"
51 #include "version.h"
52
53 #include "cxgb3_ctl_defs.h"
54 #include "t3_cpl.h"
55 #include "firmware_exports.h"
56
57 enum {
58         MAX_TXQ_ENTRIES = 16384,
59         MAX_CTRL_TXQ_ENTRIES = 1024,
60         MAX_RSPQ_ENTRIES = 16384,
61         MAX_RX_BUFFERS = 16384,
62         MAX_RX_JUMBO_BUFFERS = 16384,
63         MIN_TXQ_ENTRIES = 4,
64         MIN_CTRL_TXQ_ENTRIES = 4,
65         MIN_RSPQ_ENTRIES = 32,
66         MIN_FL_ENTRIES = 32
67 };
68
69 #define PORT_MASK ((1 << MAX_NPORTS) - 1)
70
71 #define DFLT_MSG_ENABLE (NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_LINK | \
72                          NETIF_MSG_TIMER | NETIF_MSG_IFDOWN | NETIF_MSG_IFUP |\
73                          NETIF_MSG_RX_ERR | NETIF_MSG_TX_ERR)
74
75 #define EEPROM_MAGIC 0x38E2F10C
76
77 #define CH_DEVICE(devid, ssid, idx) \
78         { PCI_VENDOR_ID_CHELSIO, devid, PCI_ANY_ID, ssid, 0, 0, idx }
79
80 static const struct pci_device_id cxgb3_pci_tbl[] = {
81         CH_DEVICE(0x20, 1, 0),  /* PE9000 */
82         CH_DEVICE(0x21, 1, 1),  /* T302E */
83         CH_DEVICE(0x22, 1, 2),  /* T310E */
84         CH_DEVICE(0x23, 1, 3),  /* T320X */
85         CH_DEVICE(0x24, 1, 1),  /* T302X */
86         CH_DEVICE(0x25, 1, 3),  /* T320E */
87         CH_DEVICE(0x26, 1, 2),  /* T310X */
88         CH_DEVICE(0x30, 1, 2),  /* T3B10 */
89         CH_DEVICE(0x31, 1, 3),  /* T3B20 */
90         CH_DEVICE(0x32, 1, 1),  /* T3B02 */
91         {0,}
92 };
93
94 MODULE_DESCRIPTION(DRV_DESC);
95 MODULE_AUTHOR("Chelsio Communications");
96 MODULE_LICENSE("Dual BSD/GPL");
97 MODULE_VERSION(DRV_VERSION);
98 MODULE_DEVICE_TABLE(pci, cxgb3_pci_tbl);
99
100 static int dflt_msg_enable = DFLT_MSG_ENABLE;
101
102 module_param(dflt_msg_enable, int, 0644);
103 MODULE_PARM_DESC(dflt_msg_enable, "Chelsio T3 default message enable bitmap");
104
105 /*
106  * The driver uses the best interrupt scheme available on a platform in the
107  * order MSI-X, MSI, legacy pin interrupts.  This parameter determines which
108  * of these schemes the driver may consider as follows:
109  *
110  * msi = 2: choose from among all three options
111  * msi = 1: only consider MSI and pin interrupts
112  * msi = 0: force pin interrupts
113  */
114 static int msi = 2;
115
116 module_param(msi, int, 0644);
117 MODULE_PARM_DESC(msi, "whether to use MSI or MSI-X");
118
119 /*
120  * The driver enables offload as a default.
121  * To disable it, use ofld_disable = 1.
122  */
123
124 static int ofld_disable = 0;
125
126 module_param(ofld_disable, int, 0644);
127 MODULE_PARM_DESC(ofld_disable, "whether to enable offload at init time or not");
128
129 /*
130  * We have work elements that we need to cancel when an interface is taken
131  * down.  Normally the work elements would be executed by keventd but that
132  * can deadlock because of linkwatch.  If our close method takes the rtnl
133  * lock and linkwatch is ahead of our work elements in keventd, linkwatch
134  * will block keventd as it needs the rtnl lock, and we'll deadlock waiting
135  * for our work to complete.  Get our own work queue to solve this.
136  */
137 static struct workqueue_struct *cxgb3_wq;
138
139 /**
140  *      link_report - show link status and link speed/duplex
141  *      @p: the port whose settings are to be reported
142  *
143  *      Shows the link status, speed, and duplex of a port.
144  */
145 static void link_report(struct net_device *dev)
146 {
147         if (!netif_carrier_ok(dev))
148                 printk(KERN_INFO "%s: link down\n", dev->name);
149         else {
150                 const char *s = "10Mbps";
151                 const struct port_info *p = netdev_priv(dev);
152
153                 switch (p->link_config.speed) {
154                 case SPEED_10000:
155                         s = "10Gbps";
156                         break;
157                 case SPEED_1000:
158                         s = "1000Mbps";
159                         break;
160                 case SPEED_100:
161                         s = "100Mbps";
162                         break;
163                 }
164
165                 printk(KERN_INFO "%s: link up, %s, %s-duplex\n", dev->name, s,
166                        p->link_config.duplex == DUPLEX_FULL ? "full" : "half");
167         }
168 }
169
170 /**
171  *      t3_os_link_changed - handle link status changes
172  *      @adapter: the adapter associated with the link change
173  *      @port_id: the port index whose limk status has changed
174  *      @link_stat: the new status of the link
175  *      @speed: the new speed setting
176  *      @duplex: the new duplex setting
177  *      @pause: the new flow-control setting
178  *
179  *      This is the OS-dependent handler for link status changes.  The OS
180  *      neutral handler takes care of most of the processing for these events,
181  *      then calls this handler for any OS-specific processing.
182  */
183 void t3_os_link_changed(struct adapter *adapter, int port_id, int link_stat,
184                         int speed, int duplex, int pause)
185 {
186         struct net_device *dev = adapter->port[port_id];
187
188         /* Skip changes from disabled ports. */
189         if (!netif_running(dev))
190                 return;
191
192         if (link_stat != netif_carrier_ok(dev)) {
193                 if (link_stat)
194                         netif_carrier_on(dev);
195                 else
196                         netif_carrier_off(dev);
197                 link_report(dev);
198         }
199 }
200
201 static void cxgb_set_rxmode(struct net_device *dev)
202 {
203         struct t3_rx_mode rm;
204         struct port_info *pi = netdev_priv(dev);
205
206         init_rx_mode(&rm, dev, dev->mc_list);
207         t3_mac_set_rx_mode(&pi->mac, &rm);
208 }
209
210 /**
211  *      link_start - enable a port
212  *      @dev: the device to enable
213  *
214  *      Performs the MAC and PHY actions needed to enable a port.
215  */
216 static void link_start(struct net_device *dev)
217 {
218         struct t3_rx_mode rm;
219         struct port_info *pi = netdev_priv(dev);
220         struct cmac *mac = &pi->mac;
221
222         init_rx_mode(&rm, dev, dev->mc_list);
223         t3_mac_reset(mac);
224         t3_mac_set_mtu(mac, dev->mtu);
225         t3_mac_set_address(mac, 0, dev->dev_addr);
226         t3_mac_set_rx_mode(mac, &rm);
227         t3_link_start(&pi->phy, mac, &pi->link_config);
228         t3_mac_enable(mac, MAC_DIRECTION_RX | MAC_DIRECTION_TX);
229 }
230
231 static inline void cxgb_disable_msi(struct adapter *adapter)
232 {
233         if (adapter->flags & USING_MSIX) {
234                 pci_disable_msix(adapter->pdev);
235                 adapter->flags &= ~USING_MSIX;
236         } else if (adapter->flags & USING_MSI) {
237                 pci_disable_msi(adapter->pdev);
238                 adapter->flags &= ~USING_MSI;
239         }
240 }
241
242 /*
243  * Interrupt handler for asynchronous events used with MSI-X.
244  */
245 static irqreturn_t t3_async_intr_handler(int irq, void *cookie)
246 {
247         t3_slow_intr_handler(cookie);
248         return IRQ_HANDLED;
249 }
250
251 /*
252  * Name the MSI-X interrupts.
253  */
254 static void name_msix_vecs(struct adapter *adap)
255 {
256         int i, j, msi_idx = 1, n = sizeof(adap->msix_info[0].desc) - 1;
257
258         snprintf(adap->msix_info[0].desc, n, "%s", adap->name);
259         adap->msix_info[0].desc[n] = 0;
260
261         for_each_port(adap, j) {
262                 struct net_device *d = adap->port[j];
263                 const struct port_info *pi = netdev_priv(d);
264
265                 for (i = 0; i < pi->nqsets; i++, msi_idx++) {
266                         snprintf(adap->msix_info[msi_idx].desc, n,
267                                  "%s (queue %d)", d->name, i);
268                         adap->msix_info[msi_idx].desc[n] = 0;
269                 }
270         }
271 }
272
273 static int request_msix_data_irqs(struct adapter *adap)
274 {
275         int i, j, err, qidx = 0;
276
277         for_each_port(adap, i) {
278                 int nqsets = adap2pinfo(adap, i)->nqsets;
279
280                 for (j = 0; j < nqsets; ++j) {
281                         err = request_irq(adap->msix_info[qidx + 1].vec,
282                                           t3_intr_handler(adap,
283                                                           adap->sge.qs[qidx].
284                                                           rspq.polling), 0,
285                                           adap->msix_info[qidx + 1].desc,
286                                           &adap->sge.qs[qidx]);
287                         if (err) {
288                                 while (--qidx >= 0)
289                                         free_irq(adap->msix_info[qidx + 1].vec,
290                                                  &adap->sge.qs[qidx]);
291                                 return err;
292                         }
293                         qidx++;
294                 }
295         }
296         return 0;
297 }
298
299 /**
300  *      setup_rss - configure RSS
301  *      @adap: the adapter
302  *
303  *      Sets up RSS to distribute packets to multiple receive queues.  We
304  *      configure the RSS CPU lookup table to distribute to the number of HW
305  *      receive queues, and the response queue lookup table to narrow that
306  *      down to the response queues actually configured for each port.
307  *      We always configure the RSS mapping for two ports since the mapping
308  *      table has plenty of entries.
309  */
310 static void setup_rss(struct adapter *adap)
311 {
312         int i;
313         unsigned int nq0 = adap2pinfo(adap, 0)->nqsets;
314         unsigned int nq1 = adap->port[1] ? adap2pinfo(adap, 1)->nqsets : 1;
315         u8 cpus[SGE_QSETS + 1];
316         u16 rspq_map[RSS_TABLE_SIZE];
317
318         for (i = 0; i < SGE_QSETS; ++i)
319                 cpus[i] = i;
320         cpus[SGE_QSETS] = 0xff; /* terminator */
321
322         for (i = 0; i < RSS_TABLE_SIZE / 2; ++i) {
323                 rspq_map[i] = i % nq0;
324                 rspq_map[i + RSS_TABLE_SIZE / 2] = (i % nq1) + nq0;
325         }
326
327         t3_config_rss(adap, F_RQFEEDBACKENABLE | F_TNLLKPEN | F_TNLMAPEN |
328                       F_TNLPRTEN | F_TNL2TUPEN | F_TNL4TUPEN |
329                       V_RRCPLCPUSIZE(6), cpus, rspq_map);
330 }
331
332 /*
333  * If we have multiple receive queues per port serviced by NAPI we need one
334  * netdevice per queue as NAPI operates on netdevices.  We already have one
335  * netdevice, namely the one associated with the interface, so we use dummy
336  * ones for any additional queues.  Note that these netdevices exist purely
337  * so that NAPI has something to work with, they do not represent network
338  * ports and are not registered.
339  */
340 static int init_dummy_netdevs(struct adapter *adap)
341 {
342         int i, j, dummy_idx = 0;
343         struct net_device *nd;
344
345         for_each_port(adap, i) {
346                 struct net_device *dev = adap->port[i];
347                 const struct port_info *pi = netdev_priv(dev);
348
349                 for (j = 0; j < pi->nqsets - 1; j++) {
350                         if (!adap->dummy_netdev[dummy_idx]) {
351                                 nd = alloc_netdev(0, "", ether_setup);
352                                 if (!nd)
353                                         goto free_all;
354
355                                 nd->priv = adap;
356                                 nd->weight = 64;
357                                 set_bit(__LINK_STATE_START, &nd->state);
358                                 adap->dummy_netdev[dummy_idx] = nd;
359                         }
360                         strcpy(adap->dummy_netdev[dummy_idx]->name, dev->name);
361                         dummy_idx++;
362                 }
363         }
364         return 0;
365
366 free_all:
367         while (--dummy_idx >= 0) {
368                 free_netdev(adap->dummy_netdev[dummy_idx]);
369                 adap->dummy_netdev[dummy_idx] = NULL;
370         }
371         return -ENOMEM;
372 }
373
374 /*
375  * Wait until all NAPI handlers are descheduled.  This includes the handlers of
376  * both netdevices representing interfaces and the dummy ones for the extra
377  * queues.
378  */
379 static void quiesce_rx(struct adapter *adap)
380 {
381         int i;
382         struct net_device *dev;
383
384         for_each_port(adap, i) {
385                 dev = adap->port[i];
386                 while (test_bit(__LINK_STATE_RX_SCHED, &dev->state))
387                         msleep(1);
388         }
389
390         for (i = 0; i < ARRAY_SIZE(adap->dummy_netdev); i++) {
391                 dev = adap->dummy_netdev[i];
392                 if (dev)
393                         while (test_bit(__LINK_STATE_RX_SCHED, &dev->state))
394                                 msleep(1);
395         }
396 }
397
398 /**
399  *      setup_sge_qsets - configure SGE Tx/Rx/response queues
400  *      @adap: the adapter
401  *
402  *      Determines how many sets of SGE queues to use and initializes them.
403  *      We support multiple queue sets per port if we have MSI-X, otherwise
404  *      just one queue set per port.
405  */
406 static int setup_sge_qsets(struct adapter *adap)
407 {
408         int i, j, err, irq_idx = 0, qset_idx = 0, dummy_dev_idx = 0;
409         unsigned int ntxq = is_offload(adap) ? SGE_TXQ_PER_SET : 1;
410
411         if (adap->params.rev > 0 && !(adap->flags & USING_MSI))
412                 irq_idx = -1;
413
414         for_each_port(adap, i) {
415                 struct net_device *dev = adap->port[i];
416                 const struct port_info *pi = netdev_priv(dev);
417
418                 for (j = 0; j < pi->nqsets; ++j, ++qset_idx) {
419                         err = t3_sge_alloc_qset(adap, qset_idx, 1,
420                                 (adap->flags & USING_MSIX) ? qset_idx + 1 :
421                                                              irq_idx,
422                                 &adap->params.sge.qset[qset_idx], ntxq,
423                                 j == 0 ? dev :
424                                          adap-> dummy_netdev[dummy_dev_idx++]);
425                         if (err) {
426                                 t3_free_sge_resources(adap);
427                                 return err;
428                         }
429                 }
430         }
431
432         return 0;
433 }
434
435 static ssize_t attr_show(struct device *d, struct device_attribute *attr,
436                          char *buf,
437                          ssize_t(*format) (struct adapter *, char *))
438 {
439         ssize_t len;
440         struct adapter *adap = to_net_dev(d)->priv;
441
442         /* Synchronize with ioctls that may shut down the device */
443         rtnl_lock();
444         len = (*format) (adap, buf);
445         rtnl_unlock();
446         return len;
447 }
448
449 static ssize_t attr_store(struct device *d, struct device_attribute *attr,
450                           const char *buf, size_t len,
451                           ssize_t(*set) (struct adapter *, unsigned int),
452                           unsigned int min_val, unsigned int max_val)
453 {
454         char *endp;
455         ssize_t ret;
456         unsigned int val;
457         struct adapter *adap = to_net_dev(d)->priv;
458
459         if (!capable(CAP_NET_ADMIN))
460                 return -EPERM;
461
462         val = simple_strtoul(buf, &endp, 0);
463         if (endp == buf || val < min_val || val > max_val)
464                 return -EINVAL;
465
466         rtnl_lock();
467         ret = (*set) (adap, val);
468         if (!ret)
469                 ret = len;
470         rtnl_unlock();
471         return ret;
472 }
473
474 #define CXGB3_SHOW(name, val_expr) \
475 static ssize_t format_##name(struct adapter *adap, char *buf) \
476 { \
477         return sprintf(buf, "%u\n", val_expr); \
478 } \
479 static ssize_t show_##name(struct device *d, struct device_attribute *attr, \
480                            char *buf) \
481 { \
482         return attr_show(d, attr, buf, format_##name); \
483 }
484
485 static ssize_t set_nfilters(struct adapter *adap, unsigned int val)
486 {
487         if (adap->flags & FULL_INIT_DONE)
488                 return -EBUSY;
489         if (val && adap->params.rev == 0)
490                 return -EINVAL;
491         if (val > t3_mc5_size(&adap->mc5) - adap->params.mc5.nservers)
492                 return -EINVAL;
493         adap->params.mc5.nfilters = val;
494         return 0;
495 }
496
497 static ssize_t store_nfilters(struct device *d, struct device_attribute *attr,
498                               const char *buf, size_t len)
499 {
500         return attr_store(d, attr, buf, len, set_nfilters, 0, ~0);
501 }
502
503 static ssize_t set_nservers(struct adapter *adap, unsigned int val)
504 {
505         if (adap->flags & FULL_INIT_DONE)
506                 return -EBUSY;
507         if (val > t3_mc5_size(&adap->mc5) - adap->params.mc5.nfilters)
508                 return -EINVAL;
509         adap->params.mc5.nservers = val;
510         return 0;
511 }
512
513 static ssize_t store_nservers(struct device *d, struct device_attribute *attr,
514                               const char *buf, size_t len)
515 {
516         return attr_store(d, attr, buf, len, set_nservers, 0, ~0);
517 }
518
519 #define CXGB3_ATTR_R(name, val_expr) \
520 CXGB3_SHOW(name, val_expr) \
521 static DEVICE_ATTR(name, S_IRUGO, show_##name, NULL)
522
523 #define CXGB3_ATTR_RW(name, val_expr, store_method) \
524 CXGB3_SHOW(name, val_expr) \
525 static DEVICE_ATTR(name, S_IRUGO | S_IWUSR, show_##name, store_method)
526
527 CXGB3_ATTR_R(cam_size, t3_mc5_size(&adap->mc5));
528 CXGB3_ATTR_RW(nfilters, adap->params.mc5.nfilters, store_nfilters);
529 CXGB3_ATTR_RW(nservers, adap->params.mc5.nservers, store_nservers);
530
531 static struct attribute *cxgb3_attrs[] = {
532         &dev_attr_cam_size.attr,
533         &dev_attr_nfilters.attr,
534         &dev_attr_nservers.attr,
535         NULL
536 };
537
538 static struct attribute_group cxgb3_attr_group = {.attrs = cxgb3_attrs };
539
540 static ssize_t tm_attr_show(struct device *d, struct device_attribute *attr,
541                             char *buf, int sched)
542 {
543         ssize_t len;
544         unsigned int v, addr, bpt, cpt;
545         struct adapter *adap = to_net_dev(d)->priv;
546
547         addr = A_TP_TX_MOD_Q1_Q0_RATE_LIMIT - sched / 2;
548         rtnl_lock();
549         t3_write_reg(adap, A_TP_TM_PIO_ADDR, addr);
550         v = t3_read_reg(adap, A_TP_TM_PIO_DATA);
551         if (sched & 1)
552                 v >>= 16;
553         bpt = (v >> 8) & 0xff;
554         cpt = v & 0xff;
555         if (!cpt)
556                 len = sprintf(buf, "disabled\n");
557         else {
558                 v = (adap->params.vpd.cclk * 1000) / cpt;
559                 len = sprintf(buf, "%u Kbps\n", (v * bpt) / 125);
560         }
561         rtnl_unlock();
562         return len;
563 }
564
565 static ssize_t tm_attr_store(struct device *d, struct device_attribute *attr,
566                              const char *buf, size_t len, int sched)
567 {
568         char *endp;
569         ssize_t ret;
570         unsigned int val;
571         struct adapter *adap = to_net_dev(d)->priv;
572
573         if (!capable(CAP_NET_ADMIN))
574                 return -EPERM;
575
576         val = simple_strtoul(buf, &endp, 0);
577         if (endp == buf || val > 10000000)
578                 return -EINVAL;
579
580         rtnl_lock();
581         ret = t3_config_sched(adap, val, sched);
582         if (!ret)
583                 ret = len;
584         rtnl_unlock();
585         return ret;
586 }
587
588 #define TM_ATTR(name, sched) \
589 static ssize_t show_##name(struct device *d, struct device_attribute *attr, \
590                            char *buf) \
591 { \
592         return tm_attr_show(d, attr, buf, sched); \
593 } \
594 static ssize_t store_##name(struct device *d, struct device_attribute *attr, \
595                             const char *buf, size_t len) \
596 { \
597         return tm_attr_store(d, attr, buf, len, sched); \
598 } \
599 static DEVICE_ATTR(name, S_IRUGO | S_IWUSR, show_##name, store_##name)
600
601 TM_ATTR(sched0, 0);
602 TM_ATTR(sched1, 1);
603 TM_ATTR(sched2, 2);
604 TM_ATTR(sched3, 3);
605 TM_ATTR(sched4, 4);
606 TM_ATTR(sched5, 5);
607 TM_ATTR(sched6, 6);
608 TM_ATTR(sched7, 7);
609
610 static struct attribute *offload_attrs[] = {
611         &dev_attr_sched0.attr,
612         &dev_attr_sched1.attr,
613         &dev_attr_sched2.attr,
614         &dev_attr_sched3.attr,
615         &dev_attr_sched4.attr,
616         &dev_attr_sched5.attr,
617         &dev_attr_sched6.attr,
618         &dev_attr_sched7.attr,
619         NULL
620 };
621
622 static struct attribute_group offload_attr_group = {.attrs = offload_attrs };
623
624 /*
625  * Sends an sk_buff to an offload queue driver
626  * after dealing with any active network taps.
627  */
628 static inline int offload_tx(struct t3cdev *tdev, struct sk_buff *skb)
629 {
630         int ret;
631
632         local_bh_disable();
633         ret = t3_offload_tx(tdev, skb);
634         local_bh_enable();
635         return ret;
636 }
637
638 static int write_smt_entry(struct adapter *adapter, int idx)
639 {
640         struct cpl_smt_write_req *req;
641         struct sk_buff *skb = alloc_skb(sizeof(*req), GFP_KERNEL);
642
643         if (!skb)
644                 return -ENOMEM;
645
646         req = (struct cpl_smt_write_req *)__skb_put(skb, sizeof(*req));
647         req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
648         OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_SMT_WRITE_REQ, idx));
649         req->mtu_idx = NMTUS - 1;       /* should be 0 but there's a T3 bug */
650         req->iff = idx;
651         memset(req->src_mac1, 0, sizeof(req->src_mac1));
652         memcpy(req->src_mac0, adapter->port[idx]->dev_addr, ETH_ALEN);
653         skb->priority = 1;
654         offload_tx(&adapter->tdev, skb);
655         return 0;
656 }
657
658 static int init_smt(struct adapter *adapter)
659 {
660         int i;
661
662         for_each_port(adapter, i)
663             write_smt_entry(adapter, i);
664         return 0;
665 }
666
667 static void init_port_mtus(struct adapter *adapter)
668 {
669         unsigned int mtus = adapter->port[0]->mtu;
670
671         if (adapter->port[1])
672                 mtus |= adapter->port[1]->mtu << 16;
673         t3_write_reg(adapter, A_TP_MTU_PORT_TABLE, mtus);
674 }
675
676 static void send_pktsched_cmd(struct adapter *adap, int sched, int qidx, int lo,
677                               int hi, int port)
678 {
679         struct sk_buff *skb;
680         struct mngt_pktsched_wr *req;
681
682         skb = alloc_skb(sizeof(*req), GFP_KERNEL | __GFP_NOFAIL);
683         req = (struct mngt_pktsched_wr *)skb_put(skb, sizeof(*req));
684         req->wr_hi = htonl(V_WR_OP(FW_WROPCODE_MNGT));
685         req->mngt_opcode = FW_MNGTOPCODE_PKTSCHED_SET;
686         req->sched = sched;
687         req->idx = qidx;
688         req->min = lo;
689         req->max = hi;
690         req->binding = port;
691         t3_mgmt_tx(adap, skb);
692 }
693
694 static void bind_qsets(struct adapter *adap)
695 {
696         int i, j;
697
698         for_each_port(adap, i) {
699                 const struct port_info *pi = adap2pinfo(adap, i);
700
701                 for (j = 0; j < pi->nqsets; ++j)
702                         send_pktsched_cmd(adap, 1, pi->first_qset + j, -1,
703                                           -1, i);
704         }
705 }
706
707 /**
708  *      cxgb_up - enable the adapter
709  *      @adapter: adapter being enabled
710  *
711  *      Called when the first port is enabled, this function performs the
712  *      actions necessary to make an adapter operational, such as completing
713  *      the initialization of HW modules, and enabling interrupts.
714  *
715  *      Must be called with the rtnl lock held.
716  */
717 static int cxgb_up(struct adapter *adap)
718 {
719         int err = 0;
720
721         if (!(adap->flags & FULL_INIT_DONE)) {
722                 err = t3_check_fw_version(adap);
723                 if (err)
724                         goto out;
725
726                 err = init_dummy_netdevs(adap);
727                 if (err)
728                         goto out;
729
730                 err = t3_init_hw(adap, 0);
731                 if (err)
732                         goto out;
733
734                 err = setup_sge_qsets(adap);
735                 if (err)
736                         goto out;
737
738                 setup_rss(adap);
739                 adap->flags |= FULL_INIT_DONE;
740         }
741
742         t3_intr_clear(adap);
743
744         if (adap->flags & USING_MSIX) {
745                 name_msix_vecs(adap);
746                 err = request_irq(adap->msix_info[0].vec,
747                                   t3_async_intr_handler, 0,
748                                   adap->msix_info[0].desc, adap);
749                 if (err)
750                         goto irq_err;
751
752                 if (request_msix_data_irqs(adap)) {
753                         free_irq(adap->msix_info[0].vec, adap);
754                         goto irq_err;
755                 }
756         } else if ((err = request_irq(adap->pdev->irq,
757                                       t3_intr_handler(adap,
758                                                       adap->sge.qs[0].rspq.
759                                                       polling),
760                                       (adap->flags & USING_MSI) ?
761                                        0 : IRQF_SHARED,
762                                       adap->name, adap)))
763                 goto irq_err;
764
765         t3_sge_start(adap);
766         t3_intr_enable(adap);
767
768         if ((adap->flags & (USING_MSIX | QUEUES_BOUND)) == USING_MSIX)
769                 bind_qsets(adap);
770         adap->flags |= QUEUES_BOUND;
771
772 out:
773         return err;
774 irq_err:
775         CH_ERR(adap, "request_irq failed, err %d\n", err);
776         goto out;
777 }
778
779 /*
780  * Release resources when all the ports and offloading have been stopped.
781  */
782 static void cxgb_down(struct adapter *adapter)
783 {
784         t3_sge_stop(adapter);
785         spin_lock_irq(&adapter->work_lock);     /* sync with PHY intr task */
786         t3_intr_disable(adapter);
787         spin_unlock_irq(&adapter->work_lock);
788
789         if (adapter->flags & USING_MSIX) {
790                 int i, n = 0;
791
792                 free_irq(adapter->msix_info[0].vec, adapter);
793                 for_each_port(adapter, i)
794                     n += adap2pinfo(adapter, i)->nqsets;
795
796                 for (i = 0; i < n; ++i)
797                         free_irq(adapter->msix_info[i + 1].vec,
798                                  &adapter->sge.qs[i]);
799         } else
800                 free_irq(adapter->pdev->irq, adapter);
801
802         flush_workqueue(cxgb3_wq);      /* wait for external IRQ handler */
803         quiesce_rx(adapter);
804 }
805
806 static void schedule_chk_task(struct adapter *adap)
807 {
808         unsigned int timeo;
809
810         timeo = adap->params.linkpoll_period ?
811             (HZ * adap->params.linkpoll_period) / 10 :
812             adap->params.stats_update_period * HZ;
813         if (timeo)
814                 queue_delayed_work(cxgb3_wq, &adap->adap_check_task, timeo);
815 }
816
817 static int offload_open(struct net_device *dev)
818 {
819         struct adapter *adapter = dev->priv;
820         struct t3cdev *tdev = T3CDEV(dev);
821         int adap_up = adapter->open_device_map & PORT_MASK;
822         int err = 0;
823
824         if (test_and_set_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map))
825                 return 0;
826
827         if (!adap_up && (err = cxgb_up(adapter)) < 0)
828                 return err;
829
830         t3_tp_set_offload_mode(adapter, 1);
831         tdev->lldev = adapter->port[0];
832         err = cxgb3_offload_activate(adapter);
833         if (err)
834                 goto out;
835
836         init_port_mtus(adapter);
837         t3_load_mtus(adapter, adapter->params.mtus, adapter->params.a_wnd,
838                      adapter->params.b_wnd,
839                      adapter->params.rev == 0 ?
840                      adapter->port[0]->mtu : 0xffff);
841         init_smt(adapter);
842
843         /* Never mind if the next step fails */
844         sysfs_create_group(&tdev->lldev->dev.kobj, &offload_attr_group);
845
846         /* Call back all registered clients */
847         cxgb3_add_clients(tdev);
848
849 out:
850         /* restore them in case the offload module has changed them */
851         if (err) {
852                 t3_tp_set_offload_mode(adapter, 0);
853                 clear_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map);
854                 cxgb3_set_dummy_ops(tdev);
855         }
856         return err;
857 }
858
859 static int offload_close(struct t3cdev *tdev)
860 {
861         struct adapter *adapter = tdev2adap(tdev);
862
863         if (!test_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map))
864                 return 0;
865
866         /* Call back all registered clients */
867         cxgb3_remove_clients(tdev);
868
869         sysfs_remove_group(&tdev->lldev->dev.kobj, &offload_attr_group);
870
871         tdev->lldev = NULL;
872         cxgb3_set_dummy_ops(tdev);
873         t3_tp_set_offload_mode(adapter, 0);
874         clear_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map);
875
876         if (!adapter->open_device_map)
877                 cxgb_down(adapter);
878
879         cxgb3_offload_deactivate(adapter);
880         return 0;
881 }
882
883 static int cxgb_open(struct net_device *dev)
884 {
885         int err;
886         struct adapter *adapter = dev->priv;
887         struct port_info *pi = netdev_priv(dev);
888         int other_ports = adapter->open_device_map & PORT_MASK;
889
890         if (!adapter->open_device_map && (err = cxgb_up(adapter)) < 0)
891                 return err;
892
893         set_bit(pi->port_id, &adapter->open_device_map);
894         if (!ofld_disable) {
895                 err = offload_open(dev);
896                 if (err)
897                         printk(KERN_WARNING
898                                "Could not initialize offload capabilities\n");
899         }
900
901         link_start(dev);
902         t3_port_intr_enable(adapter, pi->port_id);
903         netif_start_queue(dev);
904         if (!other_ports)
905                 schedule_chk_task(adapter);
906
907         return 0;
908 }
909
910 static int cxgb_close(struct net_device *dev)
911 {
912         struct adapter *adapter = dev->priv;
913         struct port_info *p = netdev_priv(dev);
914
915         t3_port_intr_disable(adapter, p->port_id);
916         netif_stop_queue(dev);
917         p->phy.ops->power_down(&p->phy, 1);
918         netif_carrier_off(dev);
919         t3_mac_disable(&p->mac, MAC_DIRECTION_TX | MAC_DIRECTION_RX);
920
921         spin_lock(&adapter->work_lock); /* sync with update task */
922         clear_bit(p->port_id, &adapter->open_device_map);
923         spin_unlock(&adapter->work_lock);
924
925         if (!(adapter->open_device_map & PORT_MASK))
926                 cancel_rearming_delayed_workqueue(cxgb3_wq,
927                                                   &adapter->adap_check_task);
928
929         if (!adapter->open_device_map)
930                 cxgb_down(adapter);
931
932         return 0;
933 }
934
935 static struct net_device_stats *cxgb_get_stats(struct net_device *dev)
936 {
937         struct adapter *adapter = dev->priv;
938         struct port_info *p = netdev_priv(dev);
939         struct net_device_stats *ns = &p->netstats;
940         const struct mac_stats *pstats;
941
942         spin_lock(&adapter->stats_lock);
943         pstats = t3_mac_update_stats(&p->mac);
944         spin_unlock(&adapter->stats_lock);
945
946         ns->tx_bytes = pstats->tx_octets;
947         ns->tx_packets = pstats->tx_frames;
948         ns->rx_bytes = pstats->rx_octets;
949         ns->rx_packets = pstats->rx_frames;
950         ns->multicast = pstats->rx_mcast_frames;
951
952         ns->tx_errors = pstats->tx_underrun;
953         ns->rx_errors = pstats->rx_symbol_errs + pstats->rx_fcs_errs +
954             pstats->rx_too_long + pstats->rx_jabber + pstats->rx_short +
955             pstats->rx_fifo_ovfl;
956
957         /* detailed rx_errors */
958         ns->rx_length_errors = pstats->rx_jabber + pstats->rx_too_long;
959         ns->rx_over_errors = 0;
960         ns->rx_crc_errors = pstats->rx_fcs_errs;
961         ns->rx_frame_errors = pstats->rx_symbol_errs;
962         ns->rx_fifo_errors = pstats->rx_fifo_ovfl;
963         ns->rx_missed_errors = pstats->rx_cong_drops;
964
965         /* detailed tx_errors */
966         ns->tx_aborted_errors = 0;
967         ns->tx_carrier_errors = 0;
968         ns->tx_fifo_errors = pstats->tx_underrun;
969         ns->tx_heartbeat_errors = 0;
970         ns->tx_window_errors = 0;
971         return ns;
972 }
973
974 static u32 get_msglevel(struct net_device *dev)
975 {
976         struct adapter *adapter = dev->priv;
977
978         return adapter->msg_enable;
979 }
980
981 static void set_msglevel(struct net_device *dev, u32 val)
982 {
983         struct adapter *adapter = dev->priv;
984
985         adapter->msg_enable = val;
986 }
987
988 static char stats_strings[][ETH_GSTRING_LEN] = {
989         "TxOctetsOK         ",
990         "TxFramesOK         ",
991         "TxMulticastFramesOK",
992         "TxBroadcastFramesOK",
993         "TxPauseFrames      ",
994         "TxUnderrun         ",
995         "TxExtUnderrun      ",
996
997         "TxFrames64         ",
998         "TxFrames65To127    ",
999         "TxFrames128To255   ",
1000         "TxFrames256To511   ",
1001         "TxFrames512To1023  ",
1002         "TxFrames1024To1518 ",
1003         "TxFrames1519ToMax  ",
1004
1005         "RxOctetsOK         ",
1006         "RxFramesOK         ",
1007         "RxMulticastFramesOK",
1008         "RxBroadcastFramesOK",
1009         "RxPauseFrames      ",
1010         "RxFCSErrors        ",
1011         "RxSymbolErrors     ",
1012         "RxShortErrors      ",
1013         "RxJabberErrors     ",
1014         "RxLengthErrors     ",
1015         "RxFIFOoverflow     ",
1016
1017         "RxFrames64         ",
1018         "RxFrames65To127    ",
1019         "RxFrames128To255   ",
1020         "RxFrames256To511   ",
1021         "RxFrames512To1023  ",
1022         "RxFrames1024To1518 ",
1023         "RxFrames1519ToMax  ",
1024
1025         "PhyFIFOErrors      ",
1026         "TSO                ",
1027         "VLANextractions    ",
1028         "VLANinsertions     ",
1029         "TxCsumOffload      ",
1030         "RxCsumGood         ",
1031         "RxDrops            "
1032 };
1033
1034 static int get_stats_count(struct net_device *dev)
1035 {
1036         return ARRAY_SIZE(stats_strings);
1037 }
1038
1039 #define T3_REGMAP_SIZE (3 * 1024)
1040
1041 static int get_regs_len(struct net_device *dev)
1042 {
1043         return T3_REGMAP_SIZE;
1044 }
1045
1046 static int get_eeprom_len(struct net_device *dev)
1047 {
1048         return EEPROMSIZE;
1049 }
1050
1051 static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
1052 {
1053         u32 fw_vers = 0;
1054         struct adapter *adapter = dev->priv;
1055
1056         t3_get_fw_version(adapter, &fw_vers);
1057
1058         strcpy(info->driver, DRV_NAME);
1059         strcpy(info->version, DRV_VERSION);
1060         strcpy(info->bus_info, pci_name(adapter->pdev));
1061         if (!fw_vers)
1062                 strcpy(info->fw_version, "N/A");
1063         else {
1064                 snprintf(info->fw_version, sizeof(info->fw_version),
1065                          "%s %u.%u.%u",
1066                          G_FW_VERSION_TYPE(fw_vers) ? "T" : "N",
1067                          G_FW_VERSION_MAJOR(fw_vers),
1068                          G_FW_VERSION_MINOR(fw_vers),
1069                          G_FW_VERSION_MICRO(fw_vers));
1070         }
1071 }
1072
1073 static void get_strings(struct net_device *dev, u32 stringset, u8 * data)
1074 {
1075         if (stringset == ETH_SS_STATS)
1076                 memcpy(data, stats_strings, sizeof(stats_strings));
1077 }
1078
1079 static unsigned long collect_sge_port_stats(struct adapter *adapter,
1080                                             struct port_info *p, int idx)
1081 {
1082         int i;
1083         unsigned long tot = 0;
1084
1085         for (i = 0; i < p->nqsets; ++i)
1086                 tot += adapter->sge.qs[i + p->first_qset].port_stats[idx];
1087         return tot;
1088 }
1089
1090 static void get_stats(struct net_device *dev, struct ethtool_stats *stats,
1091                       u64 *data)
1092 {
1093         struct adapter *adapter = dev->priv;
1094         struct port_info *pi = netdev_priv(dev);
1095         const struct mac_stats *s;
1096
1097         spin_lock(&adapter->stats_lock);
1098         s = t3_mac_update_stats(&pi->mac);
1099         spin_unlock(&adapter->stats_lock);
1100
1101         *data++ = s->tx_octets;
1102         *data++ = s->tx_frames;
1103         *data++ = s->tx_mcast_frames;
1104         *data++ = s->tx_bcast_frames;
1105         *data++ = s->tx_pause;
1106         *data++ = s->tx_underrun;
1107         *data++ = s->tx_fifo_urun;
1108
1109         *data++ = s->tx_frames_64;
1110         *data++ = s->tx_frames_65_127;
1111         *data++ = s->tx_frames_128_255;
1112         *data++ = s->tx_frames_256_511;
1113         *data++ = s->tx_frames_512_1023;
1114         *data++ = s->tx_frames_1024_1518;
1115         *data++ = s->tx_frames_1519_max;
1116
1117         *data++ = s->rx_octets;
1118         *data++ = s->rx_frames;
1119         *data++ = s->rx_mcast_frames;
1120         *data++ = s->rx_bcast_frames;
1121         *data++ = s->rx_pause;
1122         *data++ = s->rx_fcs_errs;
1123         *data++ = s->rx_symbol_errs;
1124         *data++ = s->rx_short;
1125         *data++ = s->rx_jabber;
1126         *data++ = s->rx_too_long;
1127         *data++ = s->rx_fifo_ovfl;
1128
1129         *data++ = s->rx_frames_64;
1130         *data++ = s->rx_frames_65_127;
1131         *data++ = s->rx_frames_128_255;
1132         *data++ = s->rx_frames_256_511;
1133         *data++ = s->rx_frames_512_1023;
1134         *data++ = s->rx_frames_1024_1518;
1135         *data++ = s->rx_frames_1519_max;
1136
1137         *data++ = pi->phy.fifo_errors;
1138
1139         *data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_TSO);
1140         *data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_VLANEX);
1141         *data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_VLANINS);
1142         *data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_TX_CSUM);
1143         *data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_RX_CSUM_GOOD);
1144         *data++ = s->rx_cong_drops;
1145 }
1146
1147 static inline void reg_block_dump(struct adapter *ap, void *buf,
1148                                   unsigned int start, unsigned int end)
1149 {
1150         u32 *p = buf + start;
1151
1152         for (; start <= end; start += sizeof(u32))
1153                 *p++ = t3_read_reg(ap, start);
1154 }
1155
1156 static void get_regs(struct net_device *dev, struct ethtool_regs *regs,
1157                      void *buf)
1158 {
1159         struct adapter *ap = dev->priv;
1160
1161         /*
1162          * Version scheme:
1163          * bits 0..9: chip version
1164          * bits 10..15: chip revision
1165          * bit 31: set for PCIe cards
1166          */
1167         regs->version = 3 | (ap->params.rev << 10) | (is_pcie(ap) << 31);
1168
1169         /*
1170          * We skip the MAC statistics registers because they are clear-on-read.
1171          * Also reading multi-register stats would need to synchronize with the
1172          * periodic mac stats accumulation.  Hard to justify the complexity.
1173          */
1174         memset(buf, 0, T3_REGMAP_SIZE);
1175         reg_block_dump(ap, buf, 0, A_SG_RSPQ_CREDIT_RETURN);
1176         reg_block_dump(ap, buf, A_SG_HI_DRB_HI_THRSH, A_ULPRX_PBL_ULIMIT);
1177         reg_block_dump(ap, buf, A_ULPTX_CONFIG, A_MPS_INT_CAUSE);
1178         reg_block_dump(ap, buf, A_CPL_SWITCH_CNTRL, A_CPL_MAP_TBL_DATA);
1179         reg_block_dump(ap, buf, A_SMB_GLOBAL_TIME_CFG, A_XGM_SERDES_STAT3);
1180         reg_block_dump(ap, buf, A_XGM_SERDES_STATUS0,
1181                        XGM_REG(A_XGM_SERDES_STAT3, 1));
1182         reg_block_dump(ap, buf, XGM_REG(A_XGM_SERDES_STATUS0, 1),
1183                        XGM_REG(A_XGM_RX_SPI4_SOP_EOP_CNT, 1));
1184 }
1185
1186 static int restart_autoneg(struct net_device *dev)
1187 {
1188         struct port_info *p = netdev_priv(dev);
1189
1190         if (!netif_running(dev))
1191                 return -EAGAIN;
1192         if (p->link_config.autoneg != AUTONEG_ENABLE)
1193                 return -EINVAL;
1194         p->phy.ops->autoneg_restart(&p->phy);
1195         return 0;
1196 }
1197
1198 static int cxgb3_phys_id(struct net_device *dev, u32 data)
1199 {
1200         int i;
1201         struct adapter *adapter = dev->priv;
1202
1203         if (data == 0)
1204                 data = 2;
1205
1206         for (i = 0; i < data * 2; i++) {
1207                 t3_set_reg_field(adapter, A_T3DBG_GPIO_EN, F_GPIO0_OUT_VAL,
1208                                  (i & 1) ? F_GPIO0_OUT_VAL : 0);
1209                 if (msleep_interruptible(500))
1210                         break;
1211         }
1212         t3_set_reg_field(adapter, A_T3DBG_GPIO_EN, F_GPIO0_OUT_VAL,
1213                          F_GPIO0_OUT_VAL);
1214         return 0;
1215 }
1216
1217 static int get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
1218 {
1219         struct port_info *p = netdev_priv(dev);
1220
1221         cmd->supported = p->link_config.supported;
1222         cmd->advertising = p->link_config.advertising;
1223
1224         if (netif_carrier_ok(dev)) {
1225                 cmd->speed = p->link_config.speed;
1226                 cmd->duplex = p->link_config.duplex;
1227         } else {
1228                 cmd->speed = -1;
1229                 cmd->duplex = -1;
1230         }
1231
1232         cmd->port = (cmd->supported & SUPPORTED_TP) ? PORT_TP : PORT_FIBRE;
1233         cmd->phy_address = p->phy.addr;
1234         cmd->transceiver = XCVR_EXTERNAL;
1235         cmd->autoneg = p->link_config.autoneg;
1236         cmd->maxtxpkt = 0;
1237         cmd->maxrxpkt = 0;
1238         return 0;
1239 }
1240
1241 static int speed_duplex_to_caps(int speed, int duplex)
1242 {
1243         int cap = 0;
1244
1245         switch (speed) {
1246         case SPEED_10:
1247                 if (duplex == DUPLEX_FULL)
1248                         cap = SUPPORTED_10baseT_Full;
1249                 else
1250                         cap = SUPPORTED_10baseT_Half;
1251                 break;
1252         case SPEED_100:
1253                 if (duplex == DUPLEX_FULL)
1254                         cap = SUPPORTED_100baseT_Full;
1255                 else
1256                         cap = SUPPORTED_100baseT_Half;
1257                 break;
1258         case SPEED_1000:
1259                 if (duplex == DUPLEX_FULL)
1260                         cap = SUPPORTED_1000baseT_Full;
1261                 else
1262                         cap = SUPPORTED_1000baseT_Half;
1263                 break;
1264         case SPEED_10000:
1265                 if (duplex == DUPLEX_FULL)
1266                         cap = SUPPORTED_10000baseT_Full;
1267         }
1268         return cap;
1269 }
1270
1271 #define ADVERTISED_MASK (ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full | \
1272                       ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full | \
1273                       ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full | \
1274                       ADVERTISED_10000baseT_Full)
1275
1276 static int set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
1277 {
1278         struct port_info *p = netdev_priv(dev);
1279         struct link_config *lc = &p->link_config;
1280
1281         if (!(lc->supported & SUPPORTED_Autoneg))
1282                 return -EOPNOTSUPP;     /* can't change speed/duplex */
1283
1284         if (cmd->autoneg == AUTONEG_DISABLE) {
1285                 int cap = speed_duplex_to_caps(cmd->speed, cmd->duplex);
1286
1287                 if (!(lc->supported & cap) || cmd->speed == SPEED_1000)
1288                         return -EINVAL;
1289                 lc->requested_speed = cmd->speed;
1290                 lc->requested_duplex = cmd->duplex;
1291                 lc->advertising = 0;
1292         } else {
1293                 cmd->advertising &= ADVERTISED_MASK;
1294                 cmd->advertising &= lc->supported;
1295                 if (!cmd->advertising)
1296                         return -EINVAL;
1297                 lc->requested_speed = SPEED_INVALID;
1298                 lc->requested_duplex = DUPLEX_INVALID;
1299                 lc->advertising = cmd->advertising | ADVERTISED_Autoneg;
1300         }
1301         lc->autoneg = cmd->autoneg;
1302         if (netif_running(dev))
1303                 t3_link_start(&p->phy, &p->mac, lc);
1304         return 0;
1305 }
1306
1307 static void get_pauseparam(struct net_device *dev,
1308                            struct ethtool_pauseparam *epause)
1309 {
1310         struct port_info *p = netdev_priv(dev);
1311
1312         epause->autoneg = (p->link_config.requested_fc & PAUSE_AUTONEG) != 0;
1313         epause->rx_pause = (p->link_config.fc & PAUSE_RX) != 0;
1314         epause->tx_pause = (p->link_config.fc & PAUSE_TX) != 0;
1315 }
1316
1317 static int set_pauseparam(struct net_device *dev,
1318                           struct ethtool_pauseparam *epause)
1319 {
1320         struct port_info *p = netdev_priv(dev);
1321         struct link_config *lc = &p->link_config;
1322
1323         if (epause->autoneg == AUTONEG_DISABLE)
1324                 lc->requested_fc = 0;
1325         else if (lc->supported & SUPPORTED_Autoneg)
1326                 lc->requested_fc = PAUSE_AUTONEG;
1327         else
1328                 return -EINVAL;
1329
1330         if (epause->rx_pause)
1331                 lc->requested_fc |= PAUSE_RX;
1332         if (epause->tx_pause)
1333                 lc->requested_fc |= PAUSE_TX;
1334         if (lc->autoneg == AUTONEG_ENABLE) {
1335                 if (netif_running(dev))
1336                         t3_link_start(&p->phy, &p->mac, lc);
1337         } else {
1338                 lc->fc = lc->requested_fc & (PAUSE_RX | PAUSE_TX);
1339                 if (netif_running(dev))
1340                         t3_mac_set_speed_duplex_fc(&p->mac, -1, -1, lc->fc);
1341         }
1342         return 0;
1343 }
1344
1345 static u32 get_rx_csum(struct net_device *dev)
1346 {
1347         struct port_info *p = netdev_priv(dev);
1348
1349         return p->rx_csum_offload;
1350 }
1351
1352 static int set_rx_csum(struct net_device *dev, u32 data)
1353 {
1354         struct port_info *p = netdev_priv(dev);
1355
1356         p->rx_csum_offload = data;
1357         return 0;
1358 }
1359
1360 static void get_sge_param(struct net_device *dev, struct ethtool_ringparam *e)
1361 {
1362         struct adapter *adapter = dev->priv;
1363
1364         e->rx_max_pending = MAX_RX_BUFFERS;
1365         e->rx_mini_max_pending = 0;
1366         e->rx_jumbo_max_pending = MAX_RX_JUMBO_BUFFERS;
1367         e->tx_max_pending = MAX_TXQ_ENTRIES;
1368
1369         e->rx_pending = adapter->params.sge.qset[0].fl_size;
1370         e->rx_mini_pending = adapter->params.sge.qset[0].rspq_size;
1371         e->rx_jumbo_pending = adapter->params.sge.qset[0].jumbo_size;
1372         e->tx_pending = adapter->params.sge.qset[0].txq_size[0];
1373 }
1374
1375 static int set_sge_param(struct net_device *dev, struct ethtool_ringparam *e)
1376 {
1377         int i;
1378         struct adapter *adapter = dev->priv;
1379
1380         if (e->rx_pending > MAX_RX_BUFFERS ||
1381             e->rx_jumbo_pending > MAX_RX_JUMBO_BUFFERS ||
1382             e->tx_pending > MAX_TXQ_ENTRIES ||
1383             e->rx_mini_pending > MAX_RSPQ_ENTRIES ||
1384             e->rx_mini_pending < MIN_RSPQ_ENTRIES ||
1385             e->rx_pending < MIN_FL_ENTRIES ||
1386             e->rx_jumbo_pending < MIN_FL_ENTRIES ||
1387             e->tx_pending < adapter->params.nports * MIN_TXQ_ENTRIES)
1388                 return -EINVAL;
1389
1390         if (adapter->flags & FULL_INIT_DONE)
1391                 return -EBUSY;
1392
1393         for (i = 0; i < SGE_QSETS; ++i) {
1394                 struct qset_params *q = &adapter->params.sge.qset[i];
1395
1396                 q->rspq_size = e->rx_mini_pending;
1397                 q->fl_size = e->rx_pending;
1398                 q->jumbo_size = e->rx_jumbo_pending;
1399                 q->txq_size[0] = e->tx_pending;
1400                 q->txq_size[1] = e->tx_pending;
1401                 q->txq_size[2] = e->tx_pending;
1402         }
1403         return 0;
1404 }
1405
1406 static int set_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
1407 {
1408         struct adapter *adapter = dev->priv;
1409         struct qset_params *qsp = &adapter->params.sge.qset[0];
1410         struct sge_qset *qs = &adapter->sge.qs[0];
1411
1412         if (c->rx_coalesce_usecs * 10 > M_NEWTIMER)
1413                 return -EINVAL;
1414
1415         qsp->coalesce_usecs = c->rx_coalesce_usecs;
1416         t3_update_qset_coalesce(qs, qsp);
1417         return 0;
1418 }
1419
1420 static int get_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
1421 {
1422         struct adapter *adapter = dev->priv;
1423         struct qset_params *q = adapter->params.sge.qset;
1424
1425         c->rx_coalesce_usecs = q->coalesce_usecs;
1426         return 0;
1427 }
1428
1429 static int get_eeprom(struct net_device *dev, struct ethtool_eeprom *e,
1430                       u8 * data)
1431 {
1432         int i, err = 0;
1433         struct adapter *adapter = dev->priv;
1434
1435         u8 *buf = kmalloc(EEPROMSIZE, GFP_KERNEL);
1436         if (!buf)
1437                 return -ENOMEM;
1438
1439         e->magic = EEPROM_MAGIC;
1440         for (i = e->offset & ~3; !err && i < e->offset + e->len; i += 4)
1441                 err = t3_seeprom_read(adapter, i, (u32 *) & buf[i]);
1442
1443         if (!err)
1444                 memcpy(data, buf + e->offset, e->len);
1445         kfree(buf);
1446         return err;
1447 }
1448
1449 static int set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom,
1450                       u8 * data)
1451 {
1452         u8 *buf;
1453         int err = 0;
1454         u32 aligned_offset, aligned_len, *p;
1455         struct adapter *adapter = dev->priv;
1456
1457         if (eeprom->magic != EEPROM_MAGIC)
1458                 return -EINVAL;
1459
1460         aligned_offset = eeprom->offset & ~3;
1461         aligned_len = (eeprom->len + (eeprom->offset & 3) + 3) & ~3;
1462
1463         if (aligned_offset != eeprom->offset || aligned_len != eeprom->len) {
1464                 buf = kmalloc(aligned_len, GFP_KERNEL);
1465                 if (!buf)
1466                         return -ENOMEM;
1467                 err = t3_seeprom_read(adapter, aligned_offset, (u32 *) buf);
1468                 if (!err && aligned_len > 4)
1469                         err = t3_seeprom_read(adapter,
1470                                               aligned_offset + aligned_len - 4,
1471                                               (u32 *) & buf[aligned_len - 4]);
1472                 if (err)
1473                         goto out;
1474                 memcpy(buf + (eeprom->offset & 3), data, eeprom->len);
1475         } else
1476                 buf = data;
1477
1478         err = t3_seeprom_wp(adapter, 0);
1479         if (err)
1480                 goto out;
1481
1482         for (p = (u32 *) buf; !err && aligned_len; aligned_len -= 4, p++) {
1483                 err = t3_seeprom_write(adapter, aligned_offset, *p);
1484                 aligned_offset += 4;
1485         }
1486
1487         if (!err)
1488                 err = t3_seeprom_wp(adapter, 1);
1489 out:
1490         if (buf != data)
1491                 kfree(buf);
1492         return err;
1493 }
1494
1495 static void get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
1496 {
1497         wol->supported = 0;
1498         wol->wolopts = 0;
1499         memset(&wol->sopass, 0, sizeof(wol->sopass));
1500 }
1501
1502 static const struct ethtool_ops cxgb_ethtool_ops = {
1503         .get_settings = get_settings,
1504         .set_settings = set_settings,
1505         .get_drvinfo = get_drvinfo,
1506         .get_msglevel = get_msglevel,
1507         .set_msglevel = set_msglevel,
1508         .get_ringparam = get_sge_param,
1509         .set_ringparam = set_sge_param,
1510         .get_coalesce = get_coalesce,
1511         .set_coalesce = set_coalesce,
1512         .get_eeprom_len = get_eeprom_len,
1513         .get_eeprom = get_eeprom,
1514         .set_eeprom = set_eeprom,
1515         .get_pauseparam = get_pauseparam,
1516         .set_pauseparam = set_pauseparam,
1517         .get_rx_csum = get_rx_csum,
1518         .set_rx_csum = set_rx_csum,
1519         .get_tx_csum = ethtool_op_get_tx_csum,
1520         .set_tx_csum = ethtool_op_set_tx_csum,
1521         .get_sg = ethtool_op_get_sg,
1522         .set_sg = ethtool_op_set_sg,
1523         .get_link = ethtool_op_get_link,
1524         .get_strings = get_strings,
1525         .phys_id = cxgb3_phys_id,
1526         .nway_reset = restart_autoneg,
1527         .get_stats_count = get_stats_count,
1528         .get_ethtool_stats = get_stats,
1529         .get_regs_len = get_regs_len,
1530         .get_regs = get_regs,
1531         .get_wol = get_wol,
1532         .get_tso = ethtool_op_get_tso,
1533         .set_tso = ethtool_op_set_tso,
1534         .get_perm_addr = ethtool_op_get_perm_addr
1535 };
1536
1537 static int in_range(int val, int lo, int hi)
1538 {
1539         return val < 0 || (val <= hi && val >= lo);
1540 }
1541
1542 static int cxgb_extension_ioctl(struct net_device *dev, void __user *useraddr)
1543 {
1544         int ret;
1545         u32 cmd;
1546         struct adapter *adapter = dev->priv;
1547
1548         if (copy_from_user(&cmd, useraddr, sizeof(cmd)))
1549                 return -EFAULT;
1550
1551         switch (cmd) {
1552         case CHELSIO_SETREG:{
1553                 struct ch_reg edata;
1554
1555                 if (!capable(CAP_NET_ADMIN))
1556                         return -EPERM;
1557                 if (copy_from_user(&edata, useraddr, sizeof(edata)))
1558                         return -EFAULT;
1559                 if ((edata.addr & 3) != 0
1560                         || edata.addr >= adapter->mmio_len)
1561                         return -EINVAL;
1562                 writel(edata.val, adapter->regs + edata.addr);
1563                 break;
1564         }
1565         case CHELSIO_GETREG:{
1566                 struct ch_reg edata;
1567
1568                 if (copy_from_user(&edata, useraddr, sizeof(edata)))
1569                         return -EFAULT;
1570                 if ((edata.addr & 3) != 0
1571                         || edata.addr >= adapter->mmio_len)
1572                         return -EINVAL;
1573                 edata.val = readl(adapter->regs + edata.addr);
1574                 if (copy_to_user(useraddr, &edata, sizeof(edata)))
1575                         return -EFAULT;
1576                 break;
1577         }
1578         case CHELSIO_SET_QSET_PARAMS:{
1579                 int i;
1580                 struct qset_params *q;
1581                 struct ch_qset_params t;
1582
1583                 if (!capable(CAP_NET_ADMIN))
1584                         return -EPERM;
1585                 if (copy_from_user(&t, useraddr, sizeof(t)))
1586                         return -EFAULT;
1587                 if (t.qset_idx >= SGE_QSETS)
1588                         return -EINVAL;
1589                 if (!in_range(t.intr_lat, 0, M_NEWTIMER) ||
1590                         !in_range(t.cong_thres, 0, 255) ||
1591                         !in_range(t.txq_size[0], MIN_TXQ_ENTRIES,
1592                                 MAX_TXQ_ENTRIES) ||
1593                         !in_range(t.txq_size[1], MIN_TXQ_ENTRIES,
1594                                 MAX_TXQ_ENTRIES) ||
1595                         !in_range(t.txq_size[2], MIN_CTRL_TXQ_ENTRIES,
1596                                 MAX_CTRL_TXQ_ENTRIES) ||
1597                         !in_range(t.fl_size[0], MIN_FL_ENTRIES,
1598                                 MAX_RX_BUFFERS)
1599                         || !in_range(t.fl_size[1], MIN_FL_ENTRIES,
1600                                         MAX_RX_JUMBO_BUFFERS)
1601                         || !in_range(t.rspq_size, MIN_RSPQ_ENTRIES,
1602                                         MAX_RSPQ_ENTRIES))
1603                         return -EINVAL;
1604                 if ((adapter->flags & FULL_INIT_DONE) &&
1605                         (t.rspq_size >= 0 || t.fl_size[0] >= 0 ||
1606                         t.fl_size[1] >= 0 || t.txq_size[0] >= 0 ||
1607                         t.txq_size[1] >= 0 || t.txq_size[2] >= 0 ||
1608                         t.polling >= 0 || t.cong_thres >= 0))
1609                         return -EBUSY;
1610
1611                 q = &adapter->params.sge.qset[t.qset_idx];
1612
1613                 if (t.rspq_size >= 0)
1614                         q->rspq_size = t.rspq_size;
1615                 if (t.fl_size[0] >= 0)
1616                         q->fl_size = t.fl_size[0];
1617                 if (t.fl_size[1] >= 0)
1618                         q->jumbo_size = t.fl_size[1];
1619                 if (t.txq_size[0] >= 0)
1620                         q->txq_size[0] = t.txq_size[0];
1621                 if (t.txq_size[1] >= 0)
1622                         q->txq_size[1] = t.txq_size[1];
1623                 if (t.txq_size[2] >= 0)
1624                         q->txq_size[2] = t.txq_size[2];
1625                 if (t.cong_thres >= 0)
1626                         q->cong_thres = t.cong_thres;
1627                 if (t.intr_lat >= 0) {
1628                         struct sge_qset *qs =
1629                                 &adapter->sge.qs[t.qset_idx];
1630
1631                         q->coalesce_usecs = t.intr_lat;
1632                         t3_update_qset_coalesce(qs, q);
1633                 }
1634                 if (t.polling >= 0) {
1635                         if (adapter->flags & USING_MSIX)
1636                                 q->polling = t.polling;
1637                         else {
1638                                 /* No polling with INTx for T3A */
1639                                 if (adapter->params.rev == 0 &&
1640                                         !(adapter->flags & USING_MSI))
1641                                         t.polling = 0;
1642
1643                                 for (i = 0; i < SGE_QSETS; i++) {
1644                                         q = &adapter->params.sge.
1645                                                 qset[i];
1646                                         q->polling = t.polling;
1647                                 }
1648                         }
1649                 }
1650                 break;
1651         }
1652         case CHELSIO_GET_QSET_PARAMS:{
1653                 struct qset_params *q;
1654                 struct ch_qset_params t;
1655
1656                 if (copy_from_user(&t, useraddr, sizeof(t)))
1657                         return -EFAULT;
1658                 if (t.qset_idx >= SGE_QSETS)
1659                         return -EINVAL;
1660
1661                 q = &adapter->params.sge.qset[t.qset_idx];
1662                 t.rspq_size = q->rspq_size;
1663                 t.txq_size[0] = q->txq_size[0];
1664                 t.txq_size[1] = q->txq_size[1];
1665                 t.txq_size[2] = q->txq_size[2];
1666                 t.fl_size[0] = q->fl_size;
1667                 t.fl_size[1] = q->jumbo_size;
1668                 t.polling = q->polling;
1669                 t.intr_lat = q->coalesce_usecs;
1670                 t.cong_thres = q->cong_thres;
1671
1672                 if (copy_to_user(useraddr, &t, sizeof(t)))
1673                         return -EFAULT;
1674                 break;
1675         }
1676         case CHELSIO_SET_QSET_NUM:{
1677                 struct ch_reg edata;
1678                 struct port_info *pi = netdev_priv(dev);
1679                 unsigned int i, first_qset = 0, other_qsets = 0;
1680
1681                 if (!capable(CAP_NET_ADMIN))
1682                         return -EPERM;
1683                 if (adapter->flags & FULL_INIT_DONE)
1684                         return -EBUSY;
1685                 if (copy_from_user(&edata, useraddr, sizeof(edata)))
1686                         return -EFAULT;
1687                 if (edata.val < 1 ||
1688                         (edata.val > 1 && !(adapter->flags & USING_MSIX)))
1689                         return -EINVAL;
1690
1691                 for_each_port(adapter, i)
1692                         if (adapter->port[i] && adapter->port[i] != dev)
1693                                 other_qsets += adap2pinfo(adapter, i)->nqsets;
1694
1695                 if (edata.val + other_qsets > SGE_QSETS)
1696                         return -EINVAL;
1697
1698                 pi->nqsets = edata.val;
1699
1700                 for_each_port(adapter, i)
1701                         if (adapter->port[i]) {
1702                                 pi = adap2pinfo(adapter, i);
1703                                 pi->first_qset = first_qset;
1704                                 first_qset += pi->nqsets;
1705                         }
1706                 break;
1707         }
1708         case CHELSIO_GET_QSET_NUM:{
1709                 struct ch_reg edata;
1710                 struct port_info *pi = netdev_priv(dev);
1711
1712                 edata.cmd = CHELSIO_GET_QSET_NUM;
1713                 edata.val = pi->nqsets;
1714                 if (copy_to_user(useraddr, &edata, sizeof(edata)))
1715                         return -EFAULT;
1716                 break;
1717         }
1718         case CHELSIO_LOAD_FW:{
1719                 u8 *fw_data;
1720                 struct ch_mem_range t;
1721
1722                 if (!capable(CAP_NET_ADMIN))
1723                         return -EPERM;
1724                 if (copy_from_user(&t, useraddr, sizeof(t)))
1725                         return -EFAULT;
1726
1727                 fw_data = kmalloc(t.len, GFP_KERNEL);
1728                 if (!fw_data)
1729                         return -ENOMEM;
1730
1731                 if (copy_from_user
1732                         (fw_data, useraddr + sizeof(t), t.len)) {
1733                         kfree(fw_data);
1734                         return -EFAULT;
1735                 }
1736
1737                 ret = t3_load_fw(adapter, fw_data, t.len);
1738                 kfree(fw_data);
1739                 if (ret)
1740                         return ret;
1741                 break;
1742         }
1743         case CHELSIO_SETMTUTAB:{
1744                 struct ch_mtus m;
1745                 int i;
1746
1747                 if (!is_offload(adapter))
1748                         return -EOPNOTSUPP;
1749                 if (!capable(CAP_NET_ADMIN))
1750                         return -EPERM;
1751                 if (offload_running(adapter))
1752                         return -EBUSY;
1753                 if (copy_from_user(&m, useraddr, sizeof(m)))
1754                         return -EFAULT;
1755                 if (m.nmtus != NMTUS)
1756                         return -EINVAL;
1757                 if (m.mtus[0] < 81)     /* accommodate SACK */
1758                         return -EINVAL;
1759
1760                 /* MTUs must be in ascending order */
1761                 for (i = 1; i < NMTUS; ++i)
1762                         if (m.mtus[i] < m.mtus[i - 1])
1763                                 return -EINVAL;
1764
1765                 memcpy(adapter->params.mtus, m.mtus,
1766                         sizeof(adapter->params.mtus));
1767                 break;
1768         }
1769         case CHELSIO_GET_PM:{
1770                 struct tp_params *p = &adapter->params.tp;
1771                 struct ch_pm m = {.cmd = CHELSIO_GET_PM };
1772
1773                 if (!is_offload(adapter))
1774                         return -EOPNOTSUPP;
1775                 m.tx_pg_sz = p->tx_pg_size;
1776                 m.tx_num_pg = p->tx_num_pgs;
1777                 m.rx_pg_sz = p->rx_pg_size;
1778                 m.rx_num_pg = p->rx_num_pgs;
1779                 m.pm_total = p->pmtx_size + p->chan_rx_size * p->nchan;
1780                 if (copy_to_user(useraddr, &m, sizeof(m)))
1781                         return -EFAULT;
1782                 break;
1783         }
1784         case CHELSIO_SET_PM:{
1785                 struct ch_pm m;
1786                 struct tp_params *p = &adapter->params.tp;
1787
1788                 if (!is_offload(adapter))
1789                         return -EOPNOTSUPP;
1790                 if (!capable(CAP_NET_ADMIN))
1791                         return -EPERM;
1792                 if (adapter->flags & FULL_INIT_DONE)
1793                         return -EBUSY;
1794                 if (copy_from_user(&m, useraddr, sizeof(m)))
1795                         return -EFAULT;
1796                 if (!m.rx_pg_sz || (m.rx_pg_sz & (m.rx_pg_sz - 1)) ||
1797                         !m.tx_pg_sz || (m.tx_pg_sz & (m.tx_pg_sz - 1)))
1798                         return -EINVAL; /* not power of 2 */
1799                 if (!(m.rx_pg_sz & 0x14000))
1800                         return -EINVAL; /* not 16KB or 64KB */
1801                 if (!(m.tx_pg_sz & 0x1554000))
1802                         return -EINVAL;
1803                 if (m.tx_num_pg == -1)
1804                         m.tx_num_pg = p->tx_num_pgs;
1805                 if (m.rx_num_pg == -1)
1806                         m.rx_num_pg = p->rx_num_pgs;
1807                 if (m.tx_num_pg % 24 || m.rx_num_pg % 24)
1808                         return -EINVAL;
1809                 if (m.rx_num_pg * m.rx_pg_sz > p->chan_rx_size ||
1810                         m.tx_num_pg * m.tx_pg_sz > p->chan_tx_size)
1811                         return -EINVAL;
1812                 p->rx_pg_size = m.rx_pg_sz;
1813                 p->tx_pg_size = m.tx_pg_sz;
1814                 p->rx_num_pgs = m.rx_num_pg;
1815                 p->tx_num_pgs = m.tx_num_pg;
1816                 break;
1817         }
1818         case CHELSIO_GET_MEM:{
1819                 struct ch_mem_range t;
1820                 struct mc7 *mem;
1821                 u64 buf[32];
1822
1823                 if (!is_offload(adapter))
1824                         return -EOPNOTSUPP;
1825                 if (!(adapter->flags & FULL_INIT_DONE))
1826                         return -EIO;    /* need the memory controllers */
1827                 if (copy_from_user(&t, useraddr, sizeof(t)))
1828                         return -EFAULT;
1829                 if ((t.addr & 7) || (t.len & 7))
1830                         return -EINVAL;
1831                 if (t.mem_id == MEM_CM)
1832                         mem = &adapter->cm;
1833                 else if (t.mem_id == MEM_PMRX)
1834                         mem = &adapter->pmrx;
1835                 else if (t.mem_id == MEM_PMTX)
1836                         mem = &adapter->pmtx;
1837                 else
1838                         return -EINVAL;
1839
1840                 /*
1841                         * Version scheme:
1842                         * bits 0..9: chip version
1843                         * bits 10..15: chip revision
1844                         */
1845                 t.version = 3 | (adapter->params.rev << 10);
1846                 if (copy_to_user(useraddr, &t, sizeof(t)))
1847                         return -EFAULT;
1848
1849                 /*
1850                  * Read 256 bytes at a time as len can be large and we don't
1851                  * want to use huge intermediate buffers.
1852                  */
1853                 useraddr += sizeof(t);  /* advance to start of buffer */
1854                 while (t.len) {
1855                         unsigned int chunk =
1856                                 min_t(unsigned int, t.len, sizeof(buf));
1857
1858                         ret =
1859                                 t3_mc7_bd_read(mem, t.addr / 8, chunk / 8,
1860                                                 buf);
1861                         if (ret)
1862                                 return ret;
1863                         if (copy_to_user(useraddr, buf, chunk))
1864                                 return -EFAULT;
1865                         useraddr += chunk;
1866                         t.addr += chunk;
1867                         t.len -= chunk;
1868                 }
1869                 break;
1870         }
1871         case CHELSIO_SET_TRACE_FILTER:{
1872                 struct ch_trace t;
1873                 const struct trace_params *tp;
1874
1875                 if (!capable(CAP_NET_ADMIN))
1876                         return -EPERM;
1877                 if (!offload_running(adapter))
1878                         return -EAGAIN;
1879                 if (copy_from_user(&t, useraddr, sizeof(t)))
1880                         return -EFAULT;
1881
1882                 tp = (const struct trace_params *)&t.sip;
1883                 if (t.config_tx)
1884                         t3_config_trace_filter(adapter, tp, 0,
1885                                                 t.invert_match,
1886                                                 t.trace_tx);
1887                 if (t.config_rx)
1888                         t3_config_trace_filter(adapter, tp, 1,
1889                                                 t.invert_match,
1890                                                 t.trace_rx);
1891                 break;
1892         }
1893         case CHELSIO_SET_PKTSCHED:{
1894                 struct ch_pktsched_params p;
1895
1896                 if (!capable(CAP_NET_ADMIN))
1897                                 return -EPERM;
1898                 if (!adapter->open_device_map)
1899                                 return -EAGAIN; /* uP and SGE must be running */
1900                 if (copy_from_user(&p, useraddr, sizeof(p)))
1901                                 return -EFAULT;
1902                 send_pktsched_cmd(adapter, p.sched, p.idx, p.min, p.max,
1903                                   p.binding);
1904                 break;
1905                         
1906         }
1907         default:
1908                 return -EOPNOTSUPP;
1909         }
1910         return 0;
1911 }
1912
1913 static int cxgb_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
1914 {
1915         int ret, mmd;
1916         struct adapter *adapter = dev->priv;
1917         struct port_info *pi = netdev_priv(dev);
1918         struct mii_ioctl_data *data = if_mii(req);
1919
1920         switch (cmd) {
1921         case SIOCGMIIPHY:
1922                 data->phy_id = pi->phy.addr;
1923                 /* FALLTHRU */
1924         case SIOCGMIIREG:{
1925                 u32 val;
1926                 struct cphy *phy = &pi->phy;
1927
1928                 if (!phy->mdio_read)
1929                         return -EOPNOTSUPP;
1930                 if (is_10G(adapter)) {
1931                         mmd = data->phy_id >> 8;
1932                         if (!mmd)
1933                                 mmd = MDIO_DEV_PCS;
1934                         else if (mmd > MDIO_DEV_XGXS)
1935                                 return -EINVAL;
1936
1937                         ret =
1938                                 phy->mdio_read(adapter, data->phy_id & 0x1f,
1939                                                 mmd, data->reg_num, &val);
1940                 } else
1941                         ret =
1942                                 phy->mdio_read(adapter, data->phy_id & 0x1f,
1943                                                 0, data->reg_num & 0x1f,
1944                                                 &val);
1945                 if (!ret)
1946                         data->val_out = val;
1947                 break;
1948         }
1949         case SIOCSMIIREG:{
1950                 struct cphy *phy = &pi->phy;
1951
1952                 if (!capable(CAP_NET_ADMIN))
1953                         return -EPERM;
1954                 if (!phy->mdio_write)
1955                         return -EOPNOTSUPP;
1956                 if (is_10G(adapter)) {
1957                         mmd = data->phy_id >> 8;
1958                         if (!mmd)
1959                                 mmd = MDIO_DEV_PCS;
1960                         else if (mmd > MDIO_DEV_XGXS)
1961                                 return -EINVAL;
1962
1963                         ret =
1964                                 phy->mdio_write(adapter,
1965                                                 data->phy_id & 0x1f, mmd,
1966                                                 data->reg_num,
1967                                                 data->val_in);
1968                 } else
1969                         ret =
1970                                 phy->mdio_write(adapter,
1971                                                 data->phy_id & 0x1f, 0,
1972                                                 data->reg_num & 0x1f,
1973                                                 data->val_in);
1974                 break;
1975         }
1976         case SIOCCHIOCTL:
1977                 return cxgb_extension_ioctl(dev, req->ifr_data);
1978         default:
1979                 return -EOPNOTSUPP;
1980         }
1981         return ret;
1982 }
1983
1984 static int cxgb_change_mtu(struct net_device *dev, int new_mtu)
1985 {
1986         int ret;
1987         struct adapter *adapter = dev->priv;
1988         struct port_info *pi = netdev_priv(dev);
1989
1990         if (new_mtu < 81)       /* accommodate SACK */
1991                 return -EINVAL;
1992         if ((ret = t3_mac_set_mtu(&pi->mac, new_mtu)))
1993                 return ret;
1994         dev->mtu = new_mtu;
1995         init_port_mtus(adapter);
1996         if (adapter->params.rev == 0 && offload_running(adapter))
1997                 t3_load_mtus(adapter, adapter->params.mtus,
1998                              adapter->params.a_wnd, adapter->params.b_wnd,
1999                              adapter->port[0]->mtu);
2000         return 0;
2001 }
2002
2003 static int cxgb_set_mac_addr(struct net_device *dev, void *p)
2004 {
2005         struct adapter *adapter = dev->priv;
2006         struct port_info *pi = netdev_priv(dev);
2007         struct sockaddr *addr = p;
2008
2009         if (!is_valid_ether_addr(addr->sa_data))
2010                 return -EINVAL;
2011
2012         memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
2013         t3_mac_set_address(&pi->mac, 0, dev->dev_addr);
2014         if (offload_running(adapter))
2015                 write_smt_entry(adapter, pi->port_id);
2016         return 0;
2017 }
2018
2019 /**
2020  * t3_synchronize_rx - wait for current Rx processing on a port to complete
2021  * @adap: the adapter
2022  * @p: the port
2023  *
2024  * Ensures that current Rx processing on any of the queues associated with
2025  * the given port completes before returning.  We do this by acquiring and
2026  * releasing the locks of the response queues associated with the port.
2027  */
2028 static void t3_synchronize_rx(struct adapter *adap, const struct port_info *p)
2029 {
2030         int i;
2031
2032         for (i = 0; i < p->nqsets; i++) {
2033                 struct sge_rspq *q = &adap->sge.qs[i + p->first_qset].rspq;
2034
2035                 spin_lock_irq(&q->lock);
2036                 spin_unlock_irq(&q->lock);
2037         }
2038 }
2039
2040 static void vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
2041 {
2042         struct adapter *adapter = dev->priv;
2043         struct port_info *pi = netdev_priv(dev);
2044
2045         pi->vlan_grp = grp;
2046         if (adapter->params.rev > 0)
2047                 t3_set_vlan_accel(adapter, 1 << pi->port_id, grp != NULL);
2048         else {
2049                 /* single control for all ports */
2050                 unsigned int i, have_vlans = 0;
2051                 for_each_port(adapter, i)
2052                     have_vlans |= adap2pinfo(adapter, i)->vlan_grp != NULL;
2053
2054                 t3_set_vlan_accel(adapter, 1, have_vlans);
2055         }
2056         t3_synchronize_rx(adapter, pi);
2057 }
2058
2059 static void vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
2060 {
2061         /* nothing */
2062 }
2063
2064 #ifdef CONFIG_NET_POLL_CONTROLLER
2065 static void cxgb_netpoll(struct net_device *dev)
2066 {
2067         struct adapter *adapter = dev->priv;
2068         struct sge_qset *qs = dev2qset(dev);
2069
2070         t3_intr_handler(adapter, qs->rspq.polling) (adapter->pdev->irq,
2071                                                     adapter);
2072 }
2073 #endif
2074
2075 /*
2076  * Periodic accumulation of MAC statistics.
2077  */
2078 static void mac_stats_update(struct adapter *adapter)
2079 {
2080         int i;
2081
2082         for_each_port(adapter, i) {
2083                 struct net_device *dev = adapter->port[i];
2084                 struct port_info *p = netdev_priv(dev);
2085
2086                 if (netif_running(dev)) {
2087                         spin_lock(&adapter->stats_lock);
2088                         t3_mac_update_stats(&p->mac);
2089                         spin_unlock(&adapter->stats_lock);
2090                 }
2091         }
2092 }
2093
2094 static void check_link_status(struct adapter *adapter)
2095 {
2096         int i;
2097
2098         for_each_port(adapter, i) {
2099                 struct net_device *dev = adapter->port[i];
2100                 struct port_info *p = netdev_priv(dev);
2101
2102                 if (!(p->port_type->caps & SUPPORTED_IRQ) && netif_running(dev))
2103                         t3_link_changed(adapter, i);
2104         }
2105 }
2106
2107 static void t3_adap_check_task(struct work_struct *work)
2108 {
2109         struct adapter *adapter = container_of(work, struct adapter,
2110                                                adap_check_task.work);
2111         const struct adapter_params *p = &adapter->params;
2112
2113         adapter->check_task_cnt++;
2114
2115         /* Check link status for PHYs without interrupts */
2116         if (p->linkpoll_period)
2117                 check_link_status(adapter);
2118
2119         /* Accumulate MAC stats if needed */
2120         if (!p->linkpoll_period ||
2121             (adapter->check_task_cnt * p->linkpoll_period) / 10 >=
2122             p->stats_update_period) {
2123                 mac_stats_update(adapter);
2124                 adapter->check_task_cnt = 0;
2125         }
2126
2127         /* Schedule the next check update if any port is active. */
2128         spin_lock(&adapter->work_lock);
2129         if (adapter->open_device_map & PORT_MASK)
2130                 schedule_chk_task(adapter);
2131         spin_unlock(&adapter->work_lock);
2132 }
2133
2134 /*
2135  * Processes external (PHY) interrupts in process context.
2136  */
2137 static void ext_intr_task(struct work_struct *work)
2138 {
2139         struct adapter *adapter = container_of(work, struct adapter,
2140                                                ext_intr_handler_task);
2141
2142         t3_phy_intr_handler(adapter);
2143
2144         /* Now reenable external interrupts */
2145         spin_lock_irq(&adapter->work_lock);
2146         if (adapter->slow_intr_mask) {
2147                 adapter->slow_intr_mask |= F_T3DBG;
2148                 t3_write_reg(adapter, A_PL_INT_CAUSE0, F_T3DBG);
2149                 t3_write_reg(adapter, A_PL_INT_ENABLE0,
2150                              adapter->slow_intr_mask);
2151         }
2152         spin_unlock_irq(&adapter->work_lock);
2153 }
2154
2155 /*
2156  * Interrupt-context handler for external (PHY) interrupts.
2157  */
2158 void t3_os_ext_intr_handler(struct adapter *adapter)
2159 {
2160         /*
2161          * Schedule a task to handle external interrupts as they may be slow
2162          * and we use a mutex to protect MDIO registers.  We disable PHY
2163          * interrupts in the meantime and let the task reenable them when
2164          * it's done.
2165          */
2166         spin_lock(&adapter->work_lock);
2167         if (adapter->slow_intr_mask) {
2168                 adapter->slow_intr_mask &= ~F_T3DBG;
2169                 t3_write_reg(adapter, A_PL_INT_ENABLE0,
2170                              adapter->slow_intr_mask);
2171                 queue_work(cxgb3_wq, &adapter->ext_intr_handler_task);
2172         }
2173         spin_unlock(&adapter->work_lock);
2174 }
2175
2176 void t3_fatal_err(struct adapter *adapter)
2177 {
2178         unsigned int fw_status[4];
2179
2180         if (adapter->flags & FULL_INIT_DONE) {
2181                 t3_sge_stop(adapter);
2182                 t3_intr_disable(adapter);
2183         }
2184         CH_ALERT(adapter, "encountered fatal error, operation suspended\n");
2185         if (!t3_cim_ctl_blk_read(adapter, 0xa0, 4, fw_status))
2186                 CH_ALERT(adapter, "FW status: 0x%x, 0x%x, 0x%x, 0x%x\n",
2187                          fw_status[0], fw_status[1],
2188                          fw_status[2], fw_status[3]);
2189
2190 }
2191
2192 static int __devinit cxgb_enable_msix(struct adapter *adap)
2193 {
2194         struct msix_entry entries[SGE_QSETS + 1];
2195         int i, err;
2196
2197         for (i = 0; i < ARRAY_SIZE(entries); ++i)
2198                 entries[i].entry = i;
2199
2200         err = pci_enable_msix(adap->pdev, entries, ARRAY_SIZE(entries));
2201         if (!err) {
2202                 for (i = 0; i < ARRAY_SIZE(entries); ++i)
2203                         adap->msix_info[i].vec = entries[i].vector;
2204         } else if (err > 0)
2205                 dev_info(&adap->pdev->dev,
2206                        "only %d MSI-X vectors left, not using MSI-X\n", err);
2207         return err;
2208 }
2209
2210 static void __devinit print_port_info(struct adapter *adap,
2211                                       const struct adapter_info *ai)
2212 {
2213         static const char *pci_variant[] = {
2214                 "PCI", "PCI-X", "PCI-X ECC", "PCI-X 266", "PCI Express"
2215         };
2216
2217         int i;
2218         char buf[80];
2219
2220         if (is_pcie(adap))
2221                 snprintf(buf, sizeof(buf), "%s x%d",
2222                          pci_variant[adap->params.pci.variant],
2223                          adap->params.pci.width);
2224         else
2225                 snprintf(buf, sizeof(buf), "%s %dMHz/%d-bit",
2226                          pci_variant[adap->params.pci.variant],
2227                          adap->params.pci.speed, adap->params.pci.width);
2228
2229         for_each_port(adap, i) {
2230                 struct net_device *dev = adap->port[i];
2231                 const struct port_info *pi = netdev_priv(dev);
2232
2233                 if (!test_bit(i, &adap->registered_device_map))
2234                         continue;
2235                 printk(KERN_INFO "%s: %s %s RNIC (rev %d) %s%s\n",
2236                        dev->name, ai->desc, pi->port_type->desc,
2237                        adap->params.rev, buf,
2238                        (adap->flags & USING_MSIX) ? " MSI-X" :
2239                        (adap->flags & USING_MSI) ? " MSI" : "");
2240                 if (adap->name == dev->name && adap->params.vpd.mclk)
2241                         printk(KERN_INFO "%s: %uMB CM, %uMB PMTX, %uMB PMRX\n",
2242                                adap->name, t3_mc7_size(&adap->cm) >> 20,
2243                                t3_mc7_size(&adap->pmtx) >> 20,
2244                                t3_mc7_size(&adap->pmrx) >> 20);
2245         }
2246 }
2247
2248 static int __devinit init_one(struct pci_dev *pdev,
2249                               const struct pci_device_id *ent)
2250 {
2251         static int version_printed;
2252
2253         int i, err, pci_using_dac = 0;
2254         unsigned long mmio_start, mmio_len;
2255         const struct adapter_info *ai;
2256         struct adapter *adapter = NULL;
2257         struct port_info *pi;
2258
2259         if (!version_printed) {
2260                 printk(KERN_INFO "%s - version %s\n", DRV_DESC, DRV_VERSION);
2261                 ++version_printed;
2262         }
2263
2264         if (!cxgb3_wq) {
2265                 cxgb3_wq = create_singlethread_workqueue(DRV_NAME);
2266                 if (!cxgb3_wq) {
2267                         printk(KERN_ERR DRV_NAME
2268                                ": cannot initialize work queue\n");
2269                         return -ENOMEM;
2270                 }
2271         }
2272
2273         err = pci_request_regions(pdev, DRV_NAME);
2274         if (err) {
2275                 /* Just info, some other driver may have claimed the device. */
2276                 dev_info(&pdev->dev, "cannot obtain PCI resources\n");
2277                 return err;
2278         }
2279
2280         err = pci_enable_device(pdev);
2281         if (err) {
2282                 dev_err(&pdev->dev, "cannot enable PCI device\n");
2283                 goto out_release_regions;
2284         }
2285
2286         if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) {
2287                 pci_using_dac = 1;
2288                 err = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK);
2289                 if (err) {
2290                         dev_err(&pdev->dev, "unable to obtain 64-bit DMA for "
2291                                "coherent allocations\n");
2292                         goto out_disable_device;
2293                 }
2294         } else if ((err = pci_set_dma_mask(pdev, DMA_32BIT_MASK)) != 0) {
2295                 dev_err(&pdev->dev, "no usable DMA configuration\n");
2296                 goto out_disable_device;
2297         }
2298
2299         pci_set_master(pdev);
2300
2301         mmio_start = pci_resource_start(pdev, 0);
2302         mmio_len = pci_resource_len(pdev, 0);
2303         ai = t3_get_adapter_info(ent->driver_data);
2304
2305         adapter = kzalloc(sizeof(*adapter), GFP_KERNEL);
2306         if (!adapter) {
2307                 err = -ENOMEM;
2308                 goto out_disable_device;
2309         }
2310
2311         adapter->regs = ioremap_nocache(mmio_start, mmio_len);
2312         if (!adapter->regs) {
2313                 dev_err(&pdev->dev, "cannot map device registers\n");
2314                 err = -ENOMEM;
2315                 goto out_free_adapter;
2316         }
2317
2318         adapter->pdev = pdev;
2319         adapter->name = pci_name(pdev);
2320         adapter->msg_enable = dflt_msg_enable;
2321         adapter->mmio_len = mmio_len;
2322
2323         mutex_init(&adapter->mdio_lock);
2324         spin_lock_init(&adapter->work_lock);
2325         spin_lock_init(&adapter->stats_lock);
2326
2327         INIT_LIST_HEAD(&adapter->adapter_list);
2328         INIT_WORK(&adapter->ext_intr_handler_task, ext_intr_task);
2329         INIT_DELAYED_WORK(&adapter->adap_check_task, t3_adap_check_task);
2330
2331         for (i = 0; i < ai->nports; ++i) {
2332                 struct net_device *netdev;
2333
2334                 netdev = alloc_etherdev(sizeof(struct port_info));
2335                 if (!netdev) {
2336                         err = -ENOMEM;
2337                         goto out_free_dev;
2338                 }
2339
2340                 SET_MODULE_OWNER(netdev);
2341                 SET_NETDEV_DEV(netdev, &pdev->dev);
2342
2343                 adapter->port[i] = netdev;
2344                 pi = netdev_priv(netdev);
2345                 pi->rx_csum_offload = 1;
2346                 pi->nqsets = 1;
2347                 pi->first_qset = i;
2348                 pi->activity = 0;
2349                 pi->port_id = i;
2350                 netif_carrier_off(netdev);
2351                 netdev->irq = pdev->irq;
2352                 netdev->mem_start = mmio_start;
2353                 netdev->mem_end = mmio_start + mmio_len - 1;
2354                 netdev->priv = adapter;
2355                 netdev->features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO;
2356                 netdev->features |= NETIF_F_LLTX;
2357                 if (pci_using_dac)
2358                         netdev->features |= NETIF_F_HIGHDMA;
2359
2360                 netdev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
2361                 netdev->vlan_rx_register = vlan_rx_register;
2362                 netdev->vlan_rx_kill_vid = vlan_rx_kill_vid;
2363
2364                 netdev->open = cxgb_open;
2365                 netdev->stop = cxgb_close;
2366                 netdev->hard_start_xmit = t3_eth_xmit;
2367                 netdev->get_stats = cxgb_get_stats;
2368                 netdev->set_multicast_list = cxgb_set_rxmode;
2369                 netdev->do_ioctl = cxgb_ioctl;
2370                 netdev->change_mtu = cxgb_change_mtu;
2371                 netdev->set_mac_address = cxgb_set_mac_addr;
2372 #ifdef CONFIG_NET_POLL_CONTROLLER
2373                 netdev->poll_controller = cxgb_netpoll;
2374 #endif
2375                 netdev->weight = 64;
2376
2377                 SET_ETHTOOL_OPS(netdev, &cxgb_ethtool_ops);
2378         }
2379
2380         pci_set_drvdata(pdev, adapter->port[0]);
2381         if (t3_prep_adapter(adapter, ai, 1) < 0) {
2382                 err = -ENODEV;
2383                 goto out_free_dev;
2384         }
2385
2386         /*
2387          * The card is now ready to go.  If any errors occur during device
2388          * registration we do not fail the whole card but rather proceed only
2389          * with the ports we manage to register successfully.  However we must
2390          * register at least one net device.
2391          */
2392         for_each_port(adapter, i) {
2393                 err = register_netdev(adapter->port[i]);
2394                 if (err)
2395                         dev_warn(&pdev->dev,
2396                                  "cannot register net device %s, skipping\n",
2397                                  adapter->port[i]->name);
2398                 else {
2399                         /*
2400                          * Change the name we use for messages to the name of
2401                          * the first successfully registered interface.
2402                          */
2403                         if (!adapter->registered_device_map)
2404                                 adapter->name = adapter->port[i]->name;
2405
2406                         __set_bit(i, &adapter->registered_device_map);
2407                 }
2408         }
2409         if (!adapter->registered_device_map) {
2410                 dev_err(&pdev->dev, "could not register any net devices\n");
2411                 goto out_free_dev;
2412         }
2413
2414         /* Driver's ready. Reflect it on LEDs */
2415         t3_led_ready(adapter);
2416
2417         if (is_offload(adapter)) {
2418                 __set_bit(OFFLOAD_DEVMAP_BIT, &adapter->registered_device_map);
2419                 cxgb3_adapter_ofld(adapter);
2420         }
2421
2422         /* See what interrupts we'll be using */
2423         if (msi > 1 && cxgb_enable_msix(adapter) == 0)
2424                 adapter->flags |= USING_MSIX;
2425         else if (msi > 0 && pci_enable_msi(pdev) == 0)
2426                 adapter->flags |= USING_MSI;
2427
2428         err = sysfs_create_group(&adapter->port[0]->dev.kobj,
2429                                  &cxgb3_attr_group);
2430
2431         print_port_info(adapter, ai);
2432         return 0;
2433
2434 out_free_dev:
2435         iounmap(adapter->regs);
2436         for (i = ai->nports - 1; i >= 0; --i)
2437                 if (adapter->port[i])
2438                         free_netdev(adapter->port[i]);
2439
2440 out_free_adapter:
2441         kfree(adapter);
2442
2443 out_disable_device:
2444         pci_disable_device(pdev);
2445 out_release_regions:
2446         pci_release_regions(pdev);
2447         pci_set_drvdata(pdev, NULL);
2448         return err;
2449 }
2450
2451 static void __devexit remove_one(struct pci_dev *pdev)
2452 {
2453         struct net_device *dev = pci_get_drvdata(pdev);
2454
2455         if (dev) {
2456                 int i;
2457                 struct adapter *adapter = dev->priv;
2458
2459                 t3_sge_stop(adapter);
2460                 sysfs_remove_group(&adapter->port[0]->dev.kobj,
2461                                    &cxgb3_attr_group);
2462
2463                 for_each_port(adapter, i)
2464                     if (test_bit(i, &adapter->registered_device_map))
2465                         unregister_netdev(adapter->port[i]);
2466
2467                 if (is_offload(adapter)) {
2468                         cxgb3_adapter_unofld(adapter);
2469                         if (test_bit(OFFLOAD_DEVMAP_BIT,
2470                                      &adapter->open_device_map))
2471                                 offload_close(&adapter->tdev);
2472                 }
2473
2474                 t3_free_sge_resources(adapter);
2475                 cxgb_disable_msi(adapter);
2476
2477                 for (i = 0; i < ARRAY_SIZE(adapter->dummy_netdev); i++)
2478                         if (adapter->dummy_netdev[i]) {
2479                                 free_netdev(adapter->dummy_netdev[i]);
2480                                 adapter->dummy_netdev[i] = NULL;
2481                         }
2482
2483                 for_each_port(adapter, i)
2484                         if (adapter->port[i])
2485                                 free_netdev(adapter->port[i]);
2486
2487                 iounmap(adapter->regs);
2488                 kfree(adapter);
2489                 pci_release_regions(pdev);
2490                 pci_disable_device(pdev);
2491                 pci_set_drvdata(pdev, NULL);
2492         }
2493 }
2494
2495 static struct pci_driver driver = {
2496         .name = DRV_NAME,
2497         .id_table = cxgb3_pci_tbl,
2498         .probe = init_one,
2499         .remove = __devexit_p(remove_one),
2500 };
2501
2502 static int __init cxgb3_init_module(void)
2503 {
2504         int ret;
2505
2506         cxgb3_offload_init();
2507
2508         ret = pci_register_driver(&driver);
2509         return ret;
2510 }
2511
2512 static void __exit cxgb3_cleanup_module(void)
2513 {
2514         pci_unregister_driver(&driver);
2515         if (cxgb3_wq)
2516                 destroy_workqueue(cxgb3_wq);
2517 }
2518
2519 module_init(cxgb3_init_module);
2520 module_exit(cxgb3_cleanup_module);