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