2 * Copyright (c) 2003-2007 Chelsio, Inc. All rights reserved.
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:
10 * Redistribution and use in source and binary forms, with or
11 * without modification, are permitted provided that the following
14 * - Redistributions of source code must retain the above
15 * copyright notice, this list of conditions and the following
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.
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
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>
50 #include "cxgb3_ioctl.h"
52 #include "cxgb3_offload.h"
55 #include "cxgb3_ctl_defs.h"
57 #include "firmware_exports.h"
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,
66 MIN_CTRL_TXQ_ENTRIES = 4,
67 MIN_RSPQ_ENTRIES = 32,
71 #define PORT_MASK ((1 << MAX_NPORTS) - 1)
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)
77 #define EEPROM_MAGIC 0x38E2F10C
79 #define CH_DEVICE(devid, idx) \
80 { PCI_VENDOR_ID_CHELSIO, devid, PCI_ANY_ID, PCI_ANY_ID, 0, 0, idx }
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 */
96 MODULE_DESCRIPTION(DRV_DESC);
97 MODULE_AUTHOR("Chelsio Communications");
98 MODULE_LICENSE("Dual BSD/GPL");
99 MODULE_VERSION(DRV_VERSION);
100 MODULE_DEVICE_TABLE(pci, cxgb3_pci_tbl);
102 static int dflt_msg_enable = DFLT_MSG_ENABLE;
104 module_param(dflt_msg_enable, int, 0644);
105 MODULE_PARM_DESC(dflt_msg_enable, "Chelsio T3 default message enable bitmap");
108 * The driver uses the best interrupt scheme available on a platform in the
109 * order MSI-X, MSI, legacy pin interrupts. This parameter determines which
110 * of these schemes the driver may consider as follows:
112 * msi = 2: choose from among all three options
113 * msi = 1: only consider MSI and pin interrupts
114 * msi = 0: force pin interrupts
118 module_param(msi, int, 0644);
119 MODULE_PARM_DESC(msi, "whether to use MSI or MSI-X");
122 * The driver enables offload as a default.
123 * To disable it, use ofld_disable = 1.
126 static int ofld_disable = 0;
128 module_param(ofld_disable, int, 0644);
129 MODULE_PARM_DESC(ofld_disable, "whether to enable offload at init time or not");
132 * We have work elements that we need to cancel when an interface is taken
133 * down. Normally the work elements would be executed by keventd but that
134 * can deadlock because of linkwatch. If our close method takes the rtnl
135 * lock and linkwatch is ahead of our work elements in keventd, linkwatch
136 * will block keventd as it needs the rtnl lock, and we'll deadlock waiting
137 * for our work to complete. Get our own work queue to solve this.
139 static struct workqueue_struct *cxgb3_wq;
142 * link_report - show link status and link speed/duplex
143 * @p: the port whose settings are to be reported
145 * Shows the link status, speed, and duplex of a port.
147 static void link_report(struct net_device *dev)
149 if (!netif_carrier_ok(dev))
150 printk(KERN_INFO "%s: link down\n", dev->name);
152 const char *s = "10Mbps";
153 const struct port_info *p = netdev_priv(dev);
155 switch (p->link_config.speed) {
167 printk(KERN_INFO "%s: link up, %s, %s-duplex\n", dev->name, s,
168 p->link_config.duplex == DUPLEX_FULL ? "full" : "half");
173 * t3_os_link_changed - handle link status changes
174 * @adapter: the adapter associated with the link change
175 * @port_id: the port index whose limk status has changed
176 * @link_stat: the new status of the link
177 * @speed: the new speed setting
178 * @duplex: the new duplex setting
179 * @pause: the new flow-control setting
181 * This is the OS-dependent handler for link status changes. The OS
182 * neutral handler takes care of most of the processing for these events,
183 * then calls this handler for any OS-specific processing.
185 void t3_os_link_changed(struct adapter *adapter, int port_id, int link_stat,
186 int speed, int duplex, int pause)
188 struct net_device *dev = adapter->port[port_id];
189 struct port_info *pi = netdev_priv(dev);
190 struct cmac *mac = &pi->mac;
192 /* Skip changes from disabled ports. */
193 if (!netif_running(dev))
196 if (link_stat != netif_carrier_ok(dev)) {
198 t3_mac_enable(mac, MAC_DIRECTION_RX);
199 netif_carrier_on(dev);
201 netif_carrier_off(dev);
202 pi->phy.ops->power_down(&pi->phy, 1);
203 t3_mac_disable(mac, MAC_DIRECTION_RX);
204 t3_link_start(&pi->phy, mac, &pi->link_config);
211 static void cxgb_set_rxmode(struct net_device *dev)
213 struct t3_rx_mode rm;
214 struct port_info *pi = netdev_priv(dev);
216 init_rx_mode(&rm, dev, dev->mc_list);
217 t3_mac_set_rx_mode(&pi->mac, &rm);
221 * link_start - enable a port
222 * @dev: the device to enable
224 * Performs the MAC and PHY actions needed to enable a port.
226 static void link_start(struct net_device *dev)
228 struct t3_rx_mode rm;
229 struct port_info *pi = netdev_priv(dev);
230 struct cmac *mac = &pi->mac;
232 init_rx_mode(&rm, dev, dev->mc_list);
234 t3_mac_set_mtu(mac, dev->mtu);
235 t3_mac_set_address(mac, 0, dev->dev_addr);
236 t3_mac_set_rx_mode(mac, &rm);
237 t3_link_start(&pi->phy, mac, &pi->link_config);
238 t3_mac_enable(mac, MAC_DIRECTION_RX | MAC_DIRECTION_TX);
241 static inline void cxgb_disable_msi(struct adapter *adapter)
243 if (adapter->flags & USING_MSIX) {
244 pci_disable_msix(adapter->pdev);
245 adapter->flags &= ~USING_MSIX;
246 } else if (adapter->flags & USING_MSI) {
247 pci_disable_msi(adapter->pdev);
248 adapter->flags &= ~USING_MSI;
253 * Interrupt handler for asynchronous events used with MSI-X.
255 static irqreturn_t t3_async_intr_handler(int irq, void *cookie)
257 t3_slow_intr_handler(cookie);
262 * Name the MSI-X interrupts.
264 static void name_msix_vecs(struct adapter *adap)
266 int i, j, msi_idx = 1, n = sizeof(adap->msix_info[0].desc) - 1;
268 snprintf(adap->msix_info[0].desc, n, "%s", adap->name);
269 adap->msix_info[0].desc[n] = 0;
271 for_each_port(adap, j) {
272 struct net_device *d = adap->port[j];
273 const struct port_info *pi = netdev_priv(d);
275 for (i = 0; i < pi->nqsets; i++, msi_idx++) {
276 snprintf(adap->msix_info[msi_idx].desc, n,
277 "%s-%d", d->name, pi->first_qset + i);
278 adap->msix_info[msi_idx].desc[n] = 0;
283 static int request_msix_data_irqs(struct adapter *adap)
285 int i, j, err, qidx = 0;
287 for_each_port(adap, i) {
288 int nqsets = adap2pinfo(adap, i)->nqsets;
290 for (j = 0; j < nqsets; ++j) {
291 err = request_irq(adap->msix_info[qidx + 1].vec,
292 t3_intr_handler(adap,
295 adap->msix_info[qidx + 1].desc,
296 &adap->sge.qs[qidx]);
299 free_irq(adap->msix_info[qidx + 1].vec,
300 &adap->sge.qs[qidx]);
309 static void free_irq_resources(struct adapter *adapter)
311 if (adapter->flags & USING_MSIX) {
314 free_irq(adapter->msix_info[0].vec, adapter);
315 for_each_port(adapter, i)
316 n += adap2pinfo(adapter, i)->nqsets;
318 for (i = 0; i < n; ++i)
319 free_irq(adapter->msix_info[i + 1].vec,
320 &adapter->sge.qs[i]);
322 free_irq(adapter->pdev->irq, adapter);
325 static int await_mgmt_replies(struct adapter *adap, unsigned long init_cnt,
330 while (adap->sge.qs[0].rspq.offload_pkts < init_cnt + n) {
338 static int init_tp_parity(struct adapter *adap)
342 struct cpl_set_tcb_field *greq;
343 unsigned long cnt = adap->sge.qs[0].rspq.offload_pkts;
345 t3_tp_set_offload_mode(adap, 1);
347 for (i = 0; i < 16; i++) {
348 struct cpl_smt_write_req *req;
350 skb = alloc_skb(sizeof(*req), GFP_KERNEL | __GFP_NOFAIL);
351 req = (struct cpl_smt_write_req *)__skb_put(skb, sizeof(*req));
352 memset(req, 0, sizeof(*req));
353 req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
354 OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_SMT_WRITE_REQ, i));
356 t3_mgmt_tx(adap, skb);
359 for (i = 0; i < 2048; i++) {
360 struct cpl_l2t_write_req *req;
362 skb = alloc_skb(sizeof(*req), GFP_KERNEL | __GFP_NOFAIL);
363 req = (struct cpl_l2t_write_req *)__skb_put(skb, sizeof(*req));
364 memset(req, 0, sizeof(*req));
365 req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
366 OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_L2T_WRITE_REQ, i));
367 req->params = htonl(V_L2T_W_IDX(i));
368 t3_mgmt_tx(adap, skb);
371 for (i = 0; i < 2048; i++) {
372 struct cpl_rte_write_req *req;
374 skb = alloc_skb(sizeof(*req), GFP_KERNEL | __GFP_NOFAIL);
375 req = (struct cpl_rte_write_req *)__skb_put(skb, sizeof(*req));
376 memset(req, 0, sizeof(*req));
377 req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
378 OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_RTE_WRITE_REQ, i));
379 req->l2t_idx = htonl(V_L2T_W_IDX(i));
380 t3_mgmt_tx(adap, skb);
383 skb = alloc_skb(sizeof(*greq), GFP_KERNEL | __GFP_NOFAIL);
384 greq = (struct cpl_set_tcb_field *)__skb_put(skb, sizeof(*greq));
385 memset(greq, 0, sizeof(*greq));
386 greq->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
387 OPCODE_TID(greq) = htonl(MK_OPCODE_TID(CPL_SET_TCB_FIELD, 0));
388 greq->mask = cpu_to_be64(1);
389 t3_mgmt_tx(adap, skb);
391 i = await_mgmt_replies(adap, cnt, 16 + 2048 + 2048 + 1);
392 t3_tp_set_offload_mode(adap, 0);
397 * setup_rss - configure RSS
400 * Sets up RSS to distribute packets to multiple receive queues. We
401 * configure the RSS CPU lookup table to distribute to the number of HW
402 * receive queues, and the response queue lookup table to narrow that
403 * down to the response queues actually configured for each port.
404 * We always configure the RSS mapping for two ports since the mapping
405 * table has plenty of entries.
407 static void setup_rss(struct adapter *adap)
410 unsigned int nq0 = adap2pinfo(adap, 0)->nqsets;
411 unsigned int nq1 = adap->port[1] ? adap2pinfo(adap, 1)->nqsets : 1;
412 u8 cpus[SGE_QSETS + 1];
413 u16 rspq_map[RSS_TABLE_SIZE];
415 for (i = 0; i < SGE_QSETS; ++i)
417 cpus[SGE_QSETS] = 0xff; /* terminator */
419 for (i = 0; i < RSS_TABLE_SIZE / 2; ++i) {
420 rspq_map[i] = i % nq0;
421 rspq_map[i + RSS_TABLE_SIZE / 2] = (i % nq1) + nq0;
424 t3_config_rss(adap, F_RQFEEDBACKENABLE | F_TNLLKPEN | F_TNLMAPEN |
425 F_TNLPRTEN | F_TNL2TUPEN | F_TNL4TUPEN |
426 V_RRCPLCPUSIZE(6) | F_HASHTOEPLITZ, cpus, rspq_map);
429 static void init_napi(struct adapter *adap)
433 for (i = 0; i < SGE_QSETS; i++) {
434 struct sge_qset *qs = &adap->sge.qs[i];
437 netif_napi_add(qs->netdev, &qs->napi, qs->napi.poll,
442 * netif_napi_add() can be called only once per napi_struct because it
443 * adds each new napi_struct to a list. Be careful not to call it a
444 * second time, e.g., during EEH recovery, by making a note of it.
446 adap->flags |= NAPI_INIT;
450 * Wait until all NAPI handlers are descheduled. This includes the handlers of
451 * both netdevices representing interfaces and the dummy ones for the extra
454 static void quiesce_rx(struct adapter *adap)
458 for (i = 0; i < SGE_QSETS; i++)
459 if (adap->sge.qs[i].adap)
460 napi_disable(&adap->sge.qs[i].napi);
463 static void enable_all_napi(struct adapter *adap)
466 for (i = 0; i < SGE_QSETS; i++)
467 if (adap->sge.qs[i].adap)
468 napi_enable(&adap->sge.qs[i].napi);
472 * setup_sge_qsets - configure SGE Tx/Rx/response queues
475 * Determines how many sets of SGE queues to use and initializes them.
476 * We support multiple queue sets per port if we have MSI-X, otherwise
477 * just one queue set per port.
479 static int setup_sge_qsets(struct adapter *adap)
481 int i, j, err, irq_idx = 0, qset_idx = 0;
482 unsigned int ntxq = SGE_TXQ_PER_SET;
484 if (adap->params.rev > 0 && !(adap->flags & USING_MSI))
487 for_each_port(adap, i) {
488 struct net_device *dev = adap->port[i];
489 struct port_info *pi = netdev_priv(dev);
491 pi->qs = &adap->sge.qs[pi->first_qset];
492 for (j = pi->first_qset; j < pi->first_qset + pi->nqsets;
494 if (!pi->rx_csum_offload)
495 adap->params.sge.qset[qset_idx].lro = 0;
496 err = t3_sge_alloc_qset(adap, qset_idx, 1,
497 (adap->flags & USING_MSIX) ? qset_idx + 1 :
499 &adap->params.sge.qset[qset_idx], ntxq, dev);
501 t3_stop_sge_timers(adap);
502 t3_free_sge_resources(adap);
511 static ssize_t attr_show(struct device *d, char *buf,
512 ssize_t(*format) (struct net_device *, char *))
516 /* Synchronize with ioctls that may shut down the device */
518 len = (*format) (to_net_dev(d), buf);
523 static ssize_t attr_store(struct device *d,
524 const char *buf, size_t len,
525 ssize_t(*set) (struct net_device *, unsigned int),
526 unsigned int min_val, unsigned int max_val)
532 if (!capable(CAP_NET_ADMIN))
535 val = simple_strtoul(buf, &endp, 0);
536 if (endp == buf || val < min_val || val > max_val)
540 ret = (*set) (to_net_dev(d), val);
547 #define CXGB3_SHOW(name, val_expr) \
548 static ssize_t format_##name(struct net_device *dev, char *buf) \
550 struct port_info *pi = netdev_priv(dev); \
551 struct adapter *adap = pi->adapter; \
552 return sprintf(buf, "%u\n", val_expr); \
554 static ssize_t show_##name(struct device *d, struct device_attribute *attr, \
557 return attr_show(d, buf, format_##name); \
560 static ssize_t set_nfilters(struct net_device *dev, unsigned int val)
562 struct port_info *pi = netdev_priv(dev);
563 struct adapter *adap = pi->adapter;
564 int min_tids = is_offload(adap) ? MC5_MIN_TIDS : 0;
566 if (adap->flags & FULL_INIT_DONE)
568 if (val && adap->params.rev == 0)
570 if (val > t3_mc5_size(&adap->mc5) - adap->params.mc5.nservers -
573 adap->params.mc5.nfilters = val;
577 static ssize_t store_nfilters(struct device *d, struct device_attribute *attr,
578 const char *buf, size_t len)
580 return attr_store(d, buf, len, set_nfilters, 0, ~0);
583 static ssize_t set_nservers(struct net_device *dev, unsigned int val)
585 struct port_info *pi = netdev_priv(dev);
586 struct adapter *adap = pi->adapter;
588 if (adap->flags & FULL_INIT_DONE)
590 if (val > t3_mc5_size(&adap->mc5) - adap->params.mc5.nfilters -
593 adap->params.mc5.nservers = val;
597 static ssize_t store_nservers(struct device *d, struct device_attribute *attr,
598 const char *buf, size_t len)
600 return attr_store(d, buf, len, set_nservers, 0, ~0);
603 #define CXGB3_ATTR_R(name, val_expr) \
604 CXGB3_SHOW(name, val_expr) \
605 static DEVICE_ATTR(name, S_IRUGO, show_##name, NULL)
607 #define CXGB3_ATTR_RW(name, val_expr, store_method) \
608 CXGB3_SHOW(name, val_expr) \
609 static DEVICE_ATTR(name, S_IRUGO | S_IWUSR, show_##name, store_method)
611 CXGB3_ATTR_R(cam_size, t3_mc5_size(&adap->mc5));
612 CXGB3_ATTR_RW(nfilters, adap->params.mc5.nfilters, store_nfilters);
613 CXGB3_ATTR_RW(nservers, adap->params.mc5.nservers, store_nservers);
615 static struct attribute *cxgb3_attrs[] = {
616 &dev_attr_cam_size.attr,
617 &dev_attr_nfilters.attr,
618 &dev_attr_nservers.attr,
622 static struct attribute_group cxgb3_attr_group = {.attrs = cxgb3_attrs };
624 static ssize_t tm_attr_show(struct device *d,
625 char *buf, int sched)
627 struct port_info *pi = netdev_priv(to_net_dev(d));
628 struct adapter *adap = pi->adapter;
629 unsigned int v, addr, bpt, cpt;
632 addr = A_TP_TX_MOD_Q1_Q0_RATE_LIMIT - sched / 2;
634 t3_write_reg(adap, A_TP_TM_PIO_ADDR, addr);
635 v = t3_read_reg(adap, A_TP_TM_PIO_DATA);
638 bpt = (v >> 8) & 0xff;
641 len = sprintf(buf, "disabled\n");
643 v = (adap->params.vpd.cclk * 1000) / cpt;
644 len = sprintf(buf, "%u Kbps\n", (v * bpt) / 125);
650 static ssize_t tm_attr_store(struct device *d,
651 const char *buf, size_t len, int sched)
653 struct port_info *pi = netdev_priv(to_net_dev(d));
654 struct adapter *adap = pi->adapter;
659 if (!capable(CAP_NET_ADMIN))
662 val = simple_strtoul(buf, &endp, 0);
663 if (endp == buf || val > 10000000)
667 ret = t3_config_sched(adap, val, sched);
674 #define TM_ATTR(name, sched) \
675 static ssize_t show_##name(struct device *d, struct device_attribute *attr, \
678 return tm_attr_show(d, buf, sched); \
680 static ssize_t store_##name(struct device *d, struct device_attribute *attr, \
681 const char *buf, size_t len) \
683 return tm_attr_store(d, buf, len, sched); \
685 static DEVICE_ATTR(name, S_IRUGO | S_IWUSR, show_##name, store_##name)
696 static struct attribute *offload_attrs[] = {
697 &dev_attr_sched0.attr,
698 &dev_attr_sched1.attr,
699 &dev_attr_sched2.attr,
700 &dev_attr_sched3.attr,
701 &dev_attr_sched4.attr,
702 &dev_attr_sched5.attr,
703 &dev_attr_sched6.attr,
704 &dev_attr_sched7.attr,
708 static struct attribute_group offload_attr_group = {.attrs = offload_attrs };
711 * Sends an sk_buff to an offload queue driver
712 * after dealing with any active network taps.
714 static inline int offload_tx(struct t3cdev *tdev, struct sk_buff *skb)
719 ret = t3_offload_tx(tdev, skb);
724 static int write_smt_entry(struct adapter *adapter, int idx)
726 struct cpl_smt_write_req *req;
727 struct sk_buff *skb = alloc_skb(sizeof(*req), GFP_KERNEL);
732 req = (struct cpl_smt_write_req *)__skb_put(skb, sizeof(*req));
733 req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
734 OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_SMT_WRITE_REQ, idx));
735 req->mtu_idx = NMTUS - 1; /* should be 0 but there's a T3 bug */
737 memset(req->src_mac1, 0, sizeof(req->src_mac1));
738 memcpy(req->src_mac0, adapter->port[idx]->dev_addr, ETH_ALEN);
740 offload_tx(&adapter->tdev, skb);
744 static int init_smt(struct adapter *adapter)
748 for_each_port(adapter, i)
749 write_smt_entry(adapter, i);
753 static void init_port_mtus(struct adapter *adapter)
755 unsigned int mtus = adapter->port[0]->mtu;
757 if (adapter->port[1])
758 mtus |= adapter->port[1]->mtu << 16;
759 t3_write_reg(adapter, A_TP_MTU_PORT_TABLE, mtus);
762 static int send_pktsched_cmd(struct adapter *adap, int sched, int qidx, int lo,
766 struct mngt_pktsched_wr *req;
769 skb = alloc_skb(sizeof(*req), GFP_KERNEL | __GFP_NOFAIL);
770 req = (struct mngt_pktsched_wr *)skb_put(skb, sizeof(*req));
771 req->wr_hi = htonl(V_WR_OP(FW_WROPCODE_MNGT));
772 req->mngt_opcode = FW_MNGTOPCODE_PKTSCHED_SET;
778 ret = t3_mgmt_tx(adap, skb);
783 static int bind_qsets(struct adapter *adap)
787 for_each_port(adap, i) {
788 const struct port_info *pi = adap2pinfo(adap, i);
790 for (j = 0; j < pi->nqsets; ++j) {
791 int ret = send_pktsched_cmd(adap, 1,
792 pi->first_qset + j, -1,
802 #define FW_FNAME "t3fw-%d.%d.%d.bin"
803 #define TPSRAM_NAME "t3%c_protocol_sram-%d.%d.%d.bin"
805 static int upgrade_fw(struct adapter *adap)
809 const struct firmware *fw;
810 struct device *dev = &adap->pdev->dev;
812 snprintf(buf, sizeof(buf), FW_FNAME, FW_VERSION_MAJOR,
813 FW_VERSION_MINOR, FW_VERSION_MICRO);
814 ret = request_firmware(&fw, buf, dev);
816 dev_err(dev, "could not upgrade firmware: unable to load %s\n",
820 ret = t3_load_fw(adap, fw->data, fw->size);
821 release_firmware(fw);
824 dev_info(dev, "successful upgrade to firmware %d.%d.%d\n",
825 FW_VERSION_MAJOR, FW_VERSION_MINOR, FW_VERSION_MICRO);
827 dev_err(dev, "failed to upgrade to firmware %d.%d.%d\n",
828 FW_VERSION_MAJOR, FW_VERSION_MINOR, FW_VERSION_MICRO);
833 static inline char t3rev2char(struct adapter *adapter)
837 switch(adapter->params.rev) {
849 static int update_tpsram(struct adapter *adap)
851 const struct firmware *tpsram;
853 struct device *dev = &adap->pdev->dev;
857 rev = t3rev2char(adap);
861 snprintf(buf, sizeof(buf), TPSRAM_NAME, rev,
862 TP_VERSION_MAJOR, TP_VERSION_MINOR, TP_VERSION_MICRO);
864 ret = request_firmware(&tpsram, buf, dev);
866 dev_err(dev, "could not load TP SRAM: unable to load %s\n",
871 ret = t3_check_tpsram(adap, tpsram->data, tpsram->size);
875 ret = t3_set_proto_sram(adap, tpsram->data);
878 "successful update of protocol engine "
880 TP_VERSION_MAJOR, TP_VERSION_MINOR, TP_VERSION_MICRO);
882 dev_err(dev, "failed to update of protocol engine %d.%d.%d\n",
883 TP_VERSION_MAJOR, TP_VERSION_MINOR, TP_VERSION_MICRO);
885 dev_err(dev, "loading protocol SRAM failed\n");
888 release_firmware(tpsram);
894 * cxgb_up - enable the adapter
895 * @adapter: adapter being enabled
897 * Called when the first port is enabled, this function performs the
898 * actions necessary to make an adapter operational, such as completing
899 * the initialization of HW modules, and enabling interrupts.
901 * Must be called with the rtnl lock held.
903 static int cxgb_up(struct adapter *adap)
908 if (!(adap->flags & FULL_INIT_DONE)) {
909 err = t3_check_fw_version(adap, &must_load);
910 if (err == -EINVAL) {
911 err = upgrade_fw(adap);
912 if (err && must_load)
916 err = t3_check_tpsram_version(adap, &must_load);
917 if (err == -EINVAL) {
918 err = update_tpsram(adap);
919 if (err && must_load)
924 * Clear interrupts now to catch errors if t3_init_hw fails.
925 * We clear them again later as initialization may trigger
926 * conditions that can interrupt.
930 err = t3_init_hw(adap, 0);
934 t3_set_reg_field(adap, A_TP_PARA_REG5, 0, F_RXDDPOFFINIT);
935 t3_write_reg(adap, A_ULPRX_TDDP_PSZ, V_HPZ0(PAGE_SHIFT - 12));
937 err = setup_sge_qsets(adap);
942 if (!(adap->flags & NAPI_INIT))
944 adap->flags |= FULL_INIT_DONE;
949 if (adap->flags & USING_MSIX) {
950 name_msix_vecs(adap);
951 err = request_irq(adap->msix_info[0].vec,
952 t3_async_intr_handler, 0,
953 adap->msix_info[0].desc, adap);
957 err = request_msix_data_irqs(adap);
959 free_irq(adap->msix_info[0].vec, adap);
962 } else if ((err = request_irq(adap->pdev->irq,
963 t3_intr_handler(adap,
964 adap->sge.qs[0].rspq.
966 (adap->flags & USING_MSI) ?
971 enable_all_napi(adap);
973 t3_intr_enable(adap);
975 if (adap->params.rev >= T3_REV_C && !(adap->flags & TP_PARITY_INIT) &&
976 is_offload(adap) && init_tp_parity(adap) == 0)
977 adap->flags |= TP_PARITY_INIT;
979 if (adap->flags & TP_PARITY_INIT) {
980 t3_write_reg(adap, A_TP_INT_CAUSE,
981 F_CMCACHEPERR | F_ARPLUTPERR);
982 t3_write_reg(adap, A_TP_INT_ENABLE, 0x7fbfffff);
985 if (!(adap->flags & QUEUES_BOUND)) {
986 err = bind_qsets(adap);
988 CH_ERR(adap, "failed to bind qsets, err %d\n", err);
989 t3_intr_disable(adap);
990 free_irq_resources(adap);
993 adap->flags |= QUEUES_BOUND;
999 CH_ERR(adap, "request_irq failed, err %d\n", err);
1004 * Release resources when all the ports and offloading have been stopped.
1006 static void cxgb_down(struct adapter *adapter)
1008 t3_sge_stop(adapter);
1009 spin_lock_irq(&adapter->work_lock); /* sync with PHY intr task */
1010 t3_intr_disable(adapter);
1011 spin_unlock_irq(&adapter->work_lock);
1013 free_irq_resources(adapter);
1014 flush_workqueue(cxgb3_wq); /* wait for external IRQ handler */
1015 quiesce_rx(adapter);
1018 static void schedule_chk_task(struct adapter *adap)
1022 timeo = adap->params.linkpoll_period ?
1023 (HZ * adap->params.linkpoll_period) / 10 :
1024 adap->params.stats_update_period * HZ;
1026 queue_delayed_work(cxgb3_wq, &adap->adap_check_task, timeo);
1029 static int offload_open(struct net_device *dev)
1031 struct port_info *pi = netdev_priv(dev);
1032 struct adapter *adapter = pi->adapter;
1033 struct t3cdev *tdev = dev2t3cdev(dev);
1034 int adap_up = adapter->open_device_map & PORT_MASK;
1037 if (test_and_set_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map))
1040 if (!adap_up && (err = cxgb_up(adapter)) < 0)
1043 t3_tp_set_offload_mode(adapter, 1);
1044 tdev->lldev = adapter->port[0];
1045 err = cxgb3_offload_activate(adapter);
1049 init_port_mtus(adapter);
1050 t3_load_mtus(adapter, adapter->params.mtus, adapter->params.a_wnd,
1051 adapter->params.b_wnd,
1052 adapter->params.rev == 0 ?
1053 adapter->port[0]->mtu : 0xffff);
1056 if (sysfs_create_group(&tdev->lldev->dev.kobj, &offload_attr_group))
1057 dev_dbg(&dev->dev, "cannot create sysfs group\n");
1059 /* Call back all registered clients */
1060 cxgb3_add_clients(tdev);
1063 /* restore them in case the offload module has changed them */
1065 t3_tp_set_offload_mode(adapter, 0);
1066 clear_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map);
1067 cxgb3_set_dummy_ops(tdev);
1072 static int offload_close(struct t3cdev *tdev)
1074 struct adapter *adapter = tdev2adap(tdev);
1076 if (!test_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map))
1079 /* Call back all registered clients */
1080 cxgb3_remove_clients(tdev);
1082 sysfs_remove_group(&tdev->lldev->dev.kobj, &offload_attr_group);
1085 cxgb3_set_dummy_ops(tdev);
1086 t3_tp_set_offload_mode(adapter, 0);
1087 clear_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map);
1089 if (!adapter->open_device_map)
1092 cxgb3_offload_deactivate(adapter);
1096 static int cxgb_open(struct net_device *dev)
1098 struct port_info *pi = netdev_priv(dev);
1099 struct adapter *adapter = pi->adapter;
1100 int other_ports = adapter->open_device_map & PORT_MASK;
1103 if (!adapter->open_device_map && (err = cxgb_up(adapter)) < 0)
1106 set_bit(pi->port_id, &adapter->open_device_map);
1107 if (is_offload(adapter) && !ofld_disable) {
1108 err = offload_open(dev);
1111 "Could not initialize offload capabilities\n");
1115 t3_port_intr_enable(adapter, pi->port_id);
1116 netif_start_queue(dev);
1118 schedule_chk_task(adapter);
1123 static int cxgb_close(struct net_device *dev)
1125 struct port_info *pi = netdev_priv(dev);
1126 struct adapter *adapter = pi->adapter;
1128 t3_port_intr_disable(adapter, pi->port_id);
1129 netif_stop_queue(dev);
1130 pi->phy.ops->power_down(&pi->phy, 1);
1131 netif_carrier_off(dev);
1132 t3_mac_disable(&pi->mac, MAC_DIRECTION_TX | MAC_DIRECTION_RX);
1134 spin_lock_irq(&adapter->work_lock); /* sync with update task */
1135 clear_bit(pi->port_id, &adapter->open_device_map);
1136 spin_unlock_irq(&adapter->work_lock);
1138 if (!(adapter->open_device_map & PORT_MASK))
1139 cancel_rearming_delayed_workqueue(cxgb3_wq,
1140 &adapter->adap_check_task);
1142 if (!adapter->open_device_map)
1148 static struct net_device_stats *cxgb_get_stats(struct net_device *dev)
1150 struct port_info *pi = netdev_priv(dev);
1151 struct adapter *adapter = pi->adapter;
1152 struct net_device_stats *ns = &pi->netstats;
1153 const struct mac_stats *pstats;
1155 spin_lock(&adapter->stats_lock);
1156 pstats = t3_mac_update_stats(&pi->mac);
1157 spin_unlock(&adapter->stats_lock);
1159 ns->tx_bytes = pstats->tx_octets;
1160 ns->tx_packets = pstats->tx_frames;
1161 ns->rx_bytes = pstats->rx_octets;
1162 ns->rx_packets = pstats->rx_frames;
1163 ns->multicast = pstats->rx_mcast_frames;
1165 ns->tx_errors = pstats->tx_underrun;
1166 ns->rx_errors = pstats->rx_symbol_errs + pstats->rx_fcs_errs +
1167 pstats->rx_too_long + pstats->rx_jabber + pstats->rx_short +
1168 pstats->rx_fifo_ovfl;
1170 /* detailed rx_errors */
1171 ns->rx_length_errors = pstats->rx_jabber + pstats->rx_too_long;
1172 ns->rx_over_errors = 0;
1173 ns->rx_crc_errors = pstats->rx_fcs_errs;
1174 ns->rx_frame_errors = pstats->rx_symbol_errs;
1175 ns->rx_fifo_errors = pstats->rx_fifo_ovfl;
1176 ns->rx_missed_errors = pstats->rx_cong_drops;
1178 /* detailed tx_errors */
1179 ns->tx_aborted_errors = 0;
1180 ns->tx_carrier_errors = 0;
1181 ns->tx_fifo_errors = pstats->tx_underrun;
1182 ns->tx_heartbeat_errors = 0;
1183 ns->tx_window_errors = 0;
1187 static u32 get_msglevel(struct net_device *dev)
1189 struct port_info *pi = netdev_priv(dev);
1190 struct adapter *adapter = pi->adapter;
1192 return adapter->msg_enable;
1195 static void set_msglevel(struct net_device *dev, u32 val)
1197 struct port_info *pi = netdev_priv(dev);
1198 struct adapter *adapter = pi->adapter;
1200 adapter->msg_enable = val;
1203 static char stats_strings[][ETH_GSTRING_LEN] = {
1206 "TxMulticastFramesOK",
1207 "TxBroadcastFramesOK",
1214 "TxFrames128To255 ",
1215 "TxFrames256To511 ",
1216 "TxFrames512To1023 ",
1217 "TxFrames1024To1518 ",
1218 "TxFrames1519ToMax ",
1222 "RxMulticastFramesOK",
1223 "RxBroadcastFramesOK",
1234 "RxFrames128To255 ",
1235 "RxFrames256To511 ",
1236 "RxFrames512To1023 ",
1237 "RxFrames1024To1518 ",
1238 "RxFrames1519ToMax ",
1251 "CheckTXEnToggled ",
1256 static int get_sset_count(struct net_device *dev, int sset)
1260 return ARRAY_SIZE(stats_strings);
1266 #define T3_REGMAP_SIZE (3 * 1024)
1268 static int get_regs_len(struct net_device *dev)
1270 return T3_REGMAP_SIZE;
1273 static int get_eeprom_len(struct net_device *dev)
1278 static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
1280 struct port_info *pi = netdev_priv(dev);
1281 struct adapter *adapter = pi->adapter;
1285 t3_get_fw_version(adapter, &fw_vers);
1286 t3_get_tp_version(adapter, &tp_vers);
1288 strcpy(info->driver, DRV_NAME);
1289 strcpy(info->version, DRV_VERSION);
1290 strcpy(info->bus_info, pci_name(adapter->pdev));
1292 strcpy(info->fw_version, "N/A");
1294 snprintf(info->fw_version, sizeof(info->fw_version),
1295 "%s %u.%u.%u TP %u.%u.%u",
1296 G_FW_VERSION_TYPE(fw_vers) ? "T" : "N",
1297 G_FW_VERSION_MAJOR(fw_vers),
1298 G_FW_VERSION_MINOR(fw_vers),
1299 G_FW_VERSION_MICRO(fw_vers),
1300 G_TP_VERSION_MAJOR(tp_vers),
1301 G_TP_VERSION_MINOR(tp_vers),
1302 G_TP_VERSION_MICRO(tp_vers));
1306 static void get_strings(struct net_device *dev, u32 stringset, u8 * data)
1308 if (stringset == ETH_SS_STATS)
1309 memcpy(data, stats_strings, sizeof(stats_strings));
1312 static unsigned long collect_sge_port_stats(struct adapter *adapter,
1313 struct port_info *p, int idx)
1316 unsigned long tot = 0;
1318 for (i = p->first_qset; i < p->first_qset + p->nqsets; ++i)
1319 tot += adapter->sge.qs[i].port_stats[idx];
1323 static void get_stats(struct net_device *dev, struct ethtool_stats *stats,
1326 struct port_info *pi = netdev_priv(dev);
1327 struct adapter *adapter = pi->adapter;
1328 const struct mac_stats *s;
1330 spin_lock(&adapter->stats_lock);
1331 s = t3_mac_update_stats(&pi->mac);
1332 spin_unlock(&adapter->stats_lock);
1334 *data++ = s->tx_octets;
1335 *data++ = s->tx_frames;
1336 *data++ = s->tx_mcast_frames;
1337 *data++ = s->tx_bcast_frames;
1338 *data++ = s->tx_pause;
1339 *data++ = s->tx_underrun;
1340 *data++ = s->tx_fifo_urun;
1342 *data++ = s->tx_frames_64;
1343 *data++ = s->tx_frames_65_127;
1344 *data++ = s->tx_frames_128_255;
1345 *data++ = s->tx_frames_256_511;
1346 *data++ = s->tx_frames_512_1023;
1347 *data++ = s->tx_frames_1024_1518;
1348 *data++ = s->tx_frames_1519_max;
1350 *data++ = s->rx_octets;
1351 *data++ = s->rx_frames;
1352 *data++ = s->rx_mcast_frames;
1353 *data++ = s->rx_bcast_frames;
1354 *data++ = s->rx_pause;
1355 *data++ = s->rx_fcs_errs;
1356 *data++ = s->rx_symbol_errs;
1357 *data++ = s->rx_short;
1358 *data++ = s->rx_jabber;
1359 *data++ = s->rx_too_long;
1360 *data++ = s->rx_fifo_ovfl;
1362 *data++ = s->rx_frames_64;
1363 *data++ = s->rx_frames_65_127;
1364 *data++ = s->rx_frames_128_255;
1365 *data++ = s->rx_frames_256_511;
1366 *data++ = s->rx_frames_512_1023;
1367 *data++ = s->rx_frames_1024_1518;
1368 *data++ = s->rx_frames_1519_max;
1370 *data++ = pi->phy.fifo_errors;
1372 *data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_TSO);
1373 *data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_VLANEX);
1374 *data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_VLANINS);
1375 *data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_TX_CSUM);
1376 *data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_RX_CSUM_GOOD);
1377 *data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_LRO_AGGR);
1378 *data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_LRO_FLUSHED);
1379 *data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_LRO_NO_DESC);
1380 *data++ = s->rx_cong_drops;
1382 *data++ = s->num_toggled;
1383 *data++ = s->num_resets;
1386 static inline void reg_block_dump(struct adapter *ap, void *buf,
1387 unsigned int start, unsigned int end)
1389 u32 *p = buf + start;
1391 for (; start <= end; start += sizeof(u32))
1392 *p++ = t3_read_reg(ap, start);
1395 static void get_regs(struct net_device *dev, struct ethtool_regs *regs,
1398 struct port_info *pi = netdev_priv(dev);
1399 struct adapter *ap = pi->adapter;
1403 * bits 0..9: chip version
1404 * bits 10..15: chip revision
1405 * bit 31: set for PCIe cards
1407 regs->version = 3 | (ap->params.rev << 10) | (is_pcie(ap) << 31);
1410 * We skip the MAC statistics registers because they are clear-on-read.
1411 * Also reading multi-register stats would need to synchronize with the
1412 * periodic mac stats accumulation. Hard to justify the complexity.
1414 memset(buf, 0, T3_REGMAP_SIZE);
1415 reg_block_dump(ap, buf, 0, A_SG_RSPQ_CREDIT_RETURN);
1416 reg_block_dump(ap, buf, A_SG_HI_DRB_HI_THRSH, A_ULPRX_PBL_ULIMIT);
1417 reg_block_dump(ap, buf, A_ULPTX_CONFIG, A_MPS_INT_CAUSE);
1418 reg_block_dump(ap, buf, A_CPL_SWITCH_CNTRL, A_CPL_MAP_TBL_DATA);
1419 reg_block_dump(ap, buf, A_SMB_GLOBAL_TIME_CFG, A_XGM_SERDES_STAT3);
1420 reg_block_dump(ap, buf, A_XGM_SERDES_STATUS0,
1421 XGM_REG(A_XGM_SERDES_STAT3, 1));
1422 reg_block_dump(ap, buf, XGM_REG(A_XGM_SERDES_STATUS0, 1),
1423 XGM_REG(A_XGM_RX_SPI4_SOP_EOP_CNT, 1));
1426 static int restart_autoneg(struct net_device *dev)
1428 struct port_info *p = netdev_priv(dev);
1430 if (!netif_running(dev))
1432 if (p->link_config.autoneg != AUTONEG_ENABLE)
1434 p->phy.ops->autoneg_restart(&p->phy);
1438 static int cxgb3_phys_id(struct net_device *dev, u32 data)
1440 struct port_info *pi = netdev_priv(dev);
1441 struct adapter *adapter = pi->adapter;
1447 for (i = 0; i < data * 2; i++) {
1448 t3_set_reg_field(adapter, A_T3DBG_GPIO_EN, F_GPIO0_OUT_VAL,
1449 (i & 1) ? F_GPIO0_OUT_VAL : 0);
1450 if (msleep_interruptible(500))
1453 t3_set_reg_field(adapter, A_T3DBG_GPIO_EN, F_GPIO0_OUT_VAL,
1458 static int get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
1460 struct port_info *p = netdev_priv(dev);
1462 cmd->supported = p->link_config.supported;
1463 cmd->advertising = p->link_config.advertising;
1465 if (netif_carrier_ok(dev)) {
1466 cmd->speed = p->link_config.speed;
1467 cmd->duplex = p->link_config.duplex;
1473 cmd->port = (cmd->supported & SUPPORTED_TP) ? PORT_TP : PORT_FIBRE;
1474 cmd->phy_address = p->phy.addr;
1475 cmd->transceiver = XCVR_EXTERNAL;
1476 cmd->autoneg = p->link_config.autoneg;
1482 static int speed_duplex_to_caps(int speed, int duplex)
1488 if (duplex == DUPLEX_FULL)
1489 cap = SUPPORTED_10baseT_Full;
1491 cap = SUPPORTED_10baseT_Half;
1494 if (duplex == DUPLEX_FULL)
1495 cap = SUPPORTED_100baseT_Full;
1497 cap = SUPPORTED_100baseT_Half;
1500 if (duplex == DUPLEX_FULL)
1501 cap = SUPPORTED_1000baseT_Full;
1503 cap = SUPPORTED_1000baseT_Half;
1506 if (duplex == DUPLEX_FULL)
1507 cap = SUPPORTED_10000baseT_Full;
1512 #define ADVERTISED_MASK (ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full | \
1513 ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full | \
1514 ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full | \
1515 ADVERTISED_10000baseT_Full)
1517 static int set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
1519 struct port_info *p = netdev_priv(dev);
1520 struct link_config *lc = &p->link_config;
1522 if (!(lc->supported & SUPPORTED_Autoneg))
1523 return -EOPNOTSUPP; /* can't change speed/duplex */
1525 if (cmd->autoneg == AUTONEG_DISABLE) {
1526 int cap = speed_duplex_to_caps(cmd->speed, cmd->duplex);
1528 if (!(lc->supported & cap) || cmd->speed == SPEED_1000)
1530 lc->requested_speed = cmd->speed;
1531 lc->requested_duplex = cmd->duplex;
1532 lc->advertising = 0;
1534 cmd->advertising &= ADVERTISED_MASK;
1535 cmd->advertising &= lc->supported;
1536 if (!cmd->advertising)
1538 lc->requested_speed = SPEED_INVALID;
1539 lc->requested_duplex = DUPLEX_INVALID;
1540 lc->advertising = cmd->advertising | ADVERTISED_Autoneg;
1542 lc->autoneg = cmd->autoneg;
1543 if (netif_running(dev))
1544 t3_link_start(&p->phy, &p->mac, lc);
1548 static void get_pauseparam(struct net_device *dev,
1549 struct ethtool_pauseparam *epause)
1551 struct port_info *p = netdev_priv(dev);
1553 epause->autoneg = (p->link_config.requested_fc & PAUSE_AUTONEG) != 0;
1554 epause->rx_pause = (p->link_config.fc & PAUSE_RX) != 0;
1555 epause->tx_pause = (p->link_config.fc & PAUSE_TX) != 0;
1558 static int set_pauseparam(struct net_device *dev,
1559 struct ethtool_pauseparam *epause)
1561 struct port_info *p = netdev_priv(dev);
1562 struct link_config *lc = &p->link_config;
1564 if (epause->autoneg == AUTONEG_DISABLE)
1565 lc->requested_fc = 0;
1566 else if (lc->supported & SUPPORTED_Autoneg)
1567 lc->requested_fc = PAUSE_AUTONEG;
1571 if (epause->rx_pause)
1572 lc->requested_fc |= PAUSE_RX;
1573 if (epause->tx_pause)
1574 lc->requested_fc |= PAUSE_TX;
1575 if (lc->autoneg == AUTONEG_ENABLE) {
1576 if (netif_running(dev))
1577 t3_link_start(&p->phy, &p->mac, lc);
1579 lc->fc = lc->requested_fc & (PAUSE_RX | PAUSE_TX);
1580 if (netif_running(dev))
1581 t3_mac_set_speed_duplex_fc(&p->mac, -1, -1, lc->fc);
1586 static u32 get_rx_csum(struct net_device *dev)
1588 struct port_info *p = netdev_priv(dev);
1590 return p->rx_csum_offload;
1593 static int set_rx_csum(struct net_device *dev, u32 data)
1595 struct port_info *p = netdev_priv(dev);
1597 p->rx_csum_offload = data;
1599 struct adapter *adap = p->adapter;
1602 for (i = p->first_qset; i < p->first_qset + p->nqsets; i++) {
1603 adap->params.sge.qset[i].lro = 0;
1604 adap->sge.qs[i].lro_enabled = 0;
1610 static void get_sge_param(struct net_device *dev, struct ethtool_ringparam *e)
1612 struct port_info *pi = netdev_priv(dev);
1613 struct adapter *adapter = pi->adapter;
1614 const struct qset_params *q = &adapter->params.sge.qset[pi->first_qset];
1616 e->rx_max_pending = MAX_RX_BUFFERS;
1617 e->rx_mini_max_pending = 0;
1618 e->rx_jumbo_max_pending = MAX_RX_JUMBO_BUFFERS;
1619 e->tx_max_pending = MAX_TXQ_ENTRIES;
1621 e->rx_pending = q->fl_size;
1622 e->rx_mini_pending = q->rspq_size;
1623 e->rx_jumbo_pending = q->jumbo_size;
1624 e->tx_pending = q->txq_size[0];
1627 static int set_sge_param(struct net_device *dev, struct ethtool_ringparam *e)
1629 struct port_info *pi = netdev_priv(dev);
1630 struct adapter *adapter = pi->adapter;
1631 struct qset_params *q;
1634 if (e->rx_pending > MAX_RX_BUFFERS ||
1635 e->rx_jumbo_pending > MAX_RX_JUMBO_BUFFERS ||
1636 e->tx_pending > MAX_TXQ_ENTRIES ||
1637 e->rx_mini_pending > MAX_RSPQ_ENTRIES ||
1638 e->rx_mini_pending < MIN_RSPQ_ENTRIES ||
1639 e->rx_pending < MIN_FL_ENTRIES ||
1640 e->rx_jumbo_pending < MIN_FL_ENTRIES ||
1641 e->tx_pending < adapter->params.nports * MIN_TXQ_ENTRIES)
1644 if (adapter->flags & FULL_INIT_DONE)
1647 q = &adapter->params.sge.qset[pi->first_qset];
1648 for (i = 0; i < pi->nqsets; ++i, ++q) {
1649 q->rspq_size = e->rx_mini_pending;
1650 q->fl_size = e->rx_pending;
1651 q->jumbo_size = e->rx_jumbo_pending;
1652 q->txq_size[0] = e->tx_pending;
1653 q->txq_size[1] = e->tx_pending;
1654 q->txq_size[2] = e->tx_pending;
1659 static int set_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
1661 struct port_info *pi = netdev_priv(dev);
1662 struct adapter *adapter = pi->adapter;
1663 struct qset_params *qsp = &adapter->params.sge.qset[0];
1664 struct sge_qset *qs = &adapter->sge.qs[0];
1666 if (c->rx_coalesce_usecs * 10 > M_NEWTIMER)
1669 qsp->coalesce_usecs = c->rx_coalesce_usecs;
1670 t3_update_qset_coalesce(qs, qsp);
1674 static int get_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
1676 struct port_info *pi = netdev_priv(dev);
1677 struct adapter *adapter = pi->adapter;
1678 struct qset_params *q = adapter->params.sge.qset;
1680 c->rx_coalesce_usecs = q->coalesce_usecs;
1684 static int get_eeprom(struct net_device *dev, struct ethtool_eeprom *e,
1687 struct port_info *pi = netdev_priv(dev);
1688 struct adapter *adapter = pi->adapter;
1691 u8 *buf = kmalloc(EEPROMSIZE, GFP_KERNEL);
1695 e->magic = EEPROM_MAGIC;
1696 for (i = e->offset & ~3; !err && i < e->offset + e->len; i += 4)
1697 err = t3_seeprom_read(adapter, i, (__le32 *) & buf[i]);
1700 memcpy(data, buf + e->offset, e->len);
1705 static int set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom,
1708 struct port_info *pi = netdev_priv(dev);
1709 struct adapter *adapter = pi->adapter;
1710 u32 aligned_offset, aligned_len;
1715 if (eeprom->magic != EEPROM_MAGIC)
1718 aligned_offset = eeprom->offset & ~3;
1719 aligned_len = (eeprom->len + (eeprom->offset & 3) + 3) & ~3;
1721 if (aligned_offset != eeprom->offset || aligned_len != eeprom->len) {
1722 buf = kmalloc(aligned_len, GFP_KERNEL);
1725 err = t3_seeprom_read(adapter, aligned_offset, (__le32 *) buf);
1726 if (!err && aligned_len > 4)
1727 err = t3_seeprom_read(adapter,
1728 aligned_offset + aligned_len - 4,
1729 (__le32 *) & buf[aligned_len - 4]);
1732 memcpy(buf + (eeprom->offset & 3), data, eeprom->len);
1736 err = t3_seeprom_wp(adapter, 0);
1740 for (p = (__le32 *) buf; !err && aligned_len; aligned_len -= 4, p++) {
1741 err = t3_seeprom_write(adapter, aligned_offset, *p);
1742 aligned_offset += 4;
1746 err = t3_seeprom_wp(adapter, 1);
1753 static void get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
1757 memset(&wol->sopass, 0, sizeof(wol->sopass));
1760 static const struct ethtool_ops cxgb_ethtool_ops = {
1761 .get_settings = get_settings,
1762 .set_settings = set_settings,
1763 .get_drvinfo = get_drvinfo,
1764 .get_msglevel = get_msglevel,
1765 .set_msglevel = set_msglevel,
1766 .get_ringparam = get_sge_param,
1767 .set_ringparam = set_sge_param,
1768 .get_coalesce = get_coalesce,
1769 .set_coalesce = set_coalesce,
1770 .get_eeprom_len = get_eeprom_len,
1771 .get_eeprom = get_eeprom,
1772 .set_eeprom = set_eeprom,
1773 .get_pauseparam = get_pauseparam,
1774 .set_pauseparam = set_pauseparam,
1775 .get_rx_csum = get_rx_csum,
1776 .set_rx_csum = set_rx_csum,
1777 .set_tx_csum = ethtool_op_set_tx_csum,
1778 .set_sg = ethtool_op_set_sg,
1779 .get_link = ethtool_op_get_link,
1780 .get_strings = get_strings,
1781 .phys_id = cxgb3_phys_id,
1782 .nway_reset = restart_autoneg,
1783 .get_sset_count = get_sset_count,
1784 .get_ethtool_stats = get_stats,
1785 .get_regs_len = get_regs_len,
1786 .get_regs = get_regs,
1788 .set_tso = ethtool_op_set_tso,
1791 static int in_range(int val, int lo, int hi)
1793 return val < 0 || (val <= hi && val >= lo);
1796 static int cxgb_extension_ioctl(struct net_device *dev, void __user *useraddr)
1798 struct port_info *pi = netdev_priv(dev);
1799 struct adapter *adapter = pi->adapter;
1803 if (copy_from_user(&cmd, useraddr, sizeof(cmd)))
1807 case CHELSIO_SET_QSET_PARAMS:{
1809 struct qset_params *q;
1810 struct ch_qset_params t;
1811 int q1 = pi->first_qset;
1812 int nqsets = pi->nqsets;
1814 if (!capable(CAP_NET_ADMIN))
1816 if (copy_from_user(&t, useraddr, sizeof(t)))
1818 if (t.qset_idx >= SGE_QSETS)
1820 if (!in_range(t.intr_lat, 0, M_NEWTIMER) ||
1821 !in_range(t.cong_thres, 0, 255) ||
1822 !in_range(t.txq_size[0], MIN_TXQ_ENTRIES,
1824 !in_range(t.txq_size[1], MIN_TXQ_ENTRIES,
1826 !in_range(t.txq_size[2], MIN_CTRL_TXQ_ENTRIES,
1827 MAX_CTRL_TXQ_ENTRIES) ||
1828 !in_range(t.fl_size[0], MIN_FL_ENTRIES,
1830 || !in_range(t.fl_size[1], MIN_FL_ENTRIES,
1831 MAX_RX_JUMBO_BUFFERS)
1832 || !in_range(t.rspq_size, MIN_RSPQ_ENTRIES,
1836 if ((adapter->flags & FULL_INIT_DONE) && t.lro > 0)
1837 for_each_port(adapter, i) {
1838 pi = adap2pinfo(adapter, i);
1839 if (t.qset_idx >= pi->first_qset &&
1840 t.qset_idx < pi->first_qset + pi->nqsets &&
1841 !pi->rx_csum_offload)
1845 if ((adapter->flags & FULL_INIT_DONE) &&
1846 (t.rspq_size >= 0 || t.fl_size[0] >= 0 ||
1847 t.fl_size[1] >= 0 || t.txq_size[0] >= 0 ||
1848 t.txq_size[1] >= 0 || t.txq_size[2] >= 0 ||
1849 t.polling >= 0 || t.cong_thres >= 0))
1852 /* Allow setting of any available qset when offload enabled */
1853 if (test_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map)) {
1855 for_each_port(adapter, i) {
1856 pi = adap2pinfo(adapter, i);
1857 nqsets += pi->first_qset + pi->nqsets;
1861 if (t.qset_idx < q1)
1863 if (t.qset_idx > q1 + nqsets - 1)
1866 q = &adapter->params.sge.qset[t.qset_idx];
1868 if (t.rspq_size >= 0)
1869 q->rspq_size = t.rspq_size;
1870 if (t.fl_size[0] >= 0)
1871 q->fl_size = t.fl_size[0];
1872 if (t.fl_size[1] >= 0)
1873 q->jumbo_size = t.fl_size[1];
1874 if (t.txq_size[0] >= 0)
1875 q->txq_size[0] = t.txq_size[0];
1876 if (t.txq_size[1] >= 0)
1877 q->txq_size[1] = t.txq_size[1];
1878 if (t.txq_size[2] >= 0)
1879 q->txq_size[2] = t.txq_size[2];
1880 if (t.cong_thres >= 0)
1881 q->cong_thres = t.cong_thres;
1882 if (t.intr_lat >= 0) {
1883 struct sge_qset *qs =
1884 &adapter->sge.qs[t.qset_idx];
1886 q->coalesce_usecs = t.intr_lat;
1887 t3_update_qset_coalesce(qs, q);
1889 if (t.polling >= 0) {
1890 if (adapter->flags & USING_MSIX)
1891 q->polling = t.polling;
1893 /* No polling with INTx for T3A */
1894 if (adapter->params.rev == 0 &&
1895 !(adapter->flags & USING_MSI))
1898 for (i = 0; i < SGE_QSETS; i++) {
1899 q = &adapter->params.sge.
1901 q->polling = t.polling;
1906 struct sge_qset *qs = &adapter->sge.qs[t.qset_idx];
1908 qs->lro_enabled = t.lro;
1912 case CHELSIO_GET_QSET_PARAMS:{
1913 struct qset_params *q;
1914 struct ch_qset_params t;
1915 int q1 = pi->first_qset;
1916 int nqsets = pi->nqsets;
1919 if (copy_from_user(&t, useraddr, sizeof(t)))
1922 /* Display qsets for all ports when offload enabled */
1923 if (test_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map)) {
1925 for_each_port(adapter, i) {
1926 pi = adap2pinfo(adapter, i);
1927 nqsets = pi->first_qset + pi->nqsets;
1931 if (t.qset_idx >= nqsets)
1934 q = &adapter->params.sge.qset[q1 + t.qset_idx];
1935 t.rspq_size = q->rspq_size;
1936 t.txq_size[0] = q->txq_size[0];
1937 t.txq_size[1] = q->txq_size[1];
1938 t.txq_size[2] = q->txq_size[2];
1939 t.fl_size[0] = q->fl_size;
1940 t.fl_size[1] = q->jumbo_size;
1941 t.polling = q->polling;
1943 t.intr_lat = q->coalesce_usecs;
1944 t.cong_thres = q->cong_thres;
1947 if (adapter->flags & USING_MSIX)
1948 t.vector = adapter->msix_info[q1 + t.qset_idx + 1].vec;
1950 t.vector = adapter->pdev->irq;
1952 if (copy_to_user(useraddr, &t, sizeof(t)))
1956 case CHELSIO_SET_QSET_NUM:{
1957 struct ch_reg edata;
1958 unsigned int i, first_qset = 0, other_qsets = 0;
1960 if (!capable(CAP_NET_ADMIN))
1962 if (adapter->flags & FULL_INIT_DONE)
1964 if (copy_from_user(&edata, useraddr, sizeof(edata)))
1966 if (edata.val < 1 ||
1967 (edata.val > 1 && !(adapter->flags & USING_MSIX)))
1970 for_each_port(adapter, i)
1971 if (adapter->port[i] && adapter->port[i] != dev)
1972 other_qsets += adap2pinfo(adapter, i)->nqsets;
1974 if (edata.val + other_qsets > SGE_QSETS)
1977 pi->nqsets = edata.val;
1979 for_each_port(adapter, i)
1980 if (adapter->port[i]) {
1981 pi = adap2pinfo(adapter, i);
1982 pi->first_qset = first_qset;
1983 first_qset += pi->nqsets;
1987 case CHELSIO_GET_QSET_NUM:{
1988 struct ch_reg edata;
1990 edata.cmd = CHELSIO_GET_QSET_NUM;
1991 edata.val = pi->nqsets;
1992 if (copy_to_user(useraddr, &edata, sizeof(edata)))
1996 case CHELSIO_LOAD_FW:{
1998 struct ch_mem_range t;
2000 if (!capable(CAP_SYS_RAWIO))
2002 if (copy_from_user(&t, useraddr, sizeof(t)))
2004 /* Check t.len sanity ? */
2005 fw_data = kmalloc(t.len, GFP_KERNEL);
2010 (fw_data, useraddr + sizeof(t), t.len)) {
2015 ret = t3_load_fw(adapter, fw_data, t.len);
2021 case CHELSIO_SETMTUTAB:{
2025 if (!is_offload(adapter))
2027 if (!capable(CAP_NET_ADMIN))
2029 if (offload_running(adapter))
2031 if (copy_from_user(&m, useraddr, sizeof(m)))
2033 if (m.nmtus != NMTUS)
2035 if (m.mtus[0] < 81) /* accommodate SACK */
2038 /* MTUs must be in ascending order */
2039 for (i = 1; i < NMTUS; ++i)
2040 if (m.mtus[i] < m.mtus[i - 1])
2043 memcpy(adapter->params.mtus, m.mtus,
2044 sizeof(adapter->params.mtus));
2047 case CHELSIO_GET_PM:{
2048 struct tp_params *p = &adapter->params.tp;
2049 struct ch_pm m = {.cmd = CHELSIO_GET_PM };
2051 if (!is_offload(adapter))
2053 m.tx_pg_sz = p->tx_pg_size;
2054 m.tx_num_pg = p->tx_num_pgs;
2055 m.rx_pg_sz = p->rx_pg_size;
2056 m.rx_num_pg = p->rx_num_pgs;
2057 m.pm_total = p->pmtx_size + p->chan_rx_size * p->nchan;
2058 if (copy_to_user(useraddr, &m, sizeof(m)))
2062 case CHELSIO_SET_PM:{
2064 struct tp_params *p = &adapter->params.tp;
2066 if (!is_offload(adapter))
2068 if (!capable(CAP_NET_ADMIN))
2070 if (adapter->flags & FULL_INIT_DONE)
2072 if (copy_from_user(&m, useraddr, sizeof(m)))
2074 if (!is_power_of_2(m.rx_pg_sz) ||
2075 !is_power_of_2(m.tx_pg_sz))
2076 return -EINVAL; /* not power of 2 */
2077 if (!(m.rx_pg_sz & 0x14000))
2078 return -EINVAL; /* not 16KB or 64KB */
2079 if (!(m.tx_pg_sz & 0x1554000))
2081 if (m.tx_num_pg == -1)
2082 m.tx_num_pg = p->tx_num_pgs;
2083 if (m.rx_num_pg == -1)
2084 m.rx_num_pg = p->rx_num_pgs;
2085 if (m.tx_num_pg % 24 || m.rx_num_pg % 24)
2087 if (m.rx_num_pg * m.rx_pg_sz > p->chan_rx_size ||
2088 m.tx_num_pg * m.tx_pg_sz > p->chan_tx_size)
2090 p->rx_pg_size = m.rx_pg_sz;
2091 p->tx_pg_size = m.tx_pg_sz;
2092 p->rx_num_pgs = m.rx_num_pg;
2093 p->tx_num_pgs = m.tx_num_pg;
2096 case CHELSIO_GET_MEM:{
2097 struct ch_mem_range t;
2101 if (!is_offload(adapter))
2103 if (!(adapter->flags & FULL_INIT_DONE))
2104 return -EIO; /* need the memory controllers */
2105 if (copy_from_user(&t, useraddr, sizeof(t)))
2107 if ((t.addr & 7) || (t.len & 7))
2109 if (t.mem_id == MEM_CM)
2111 else if (t.mem_id == MEM_PMRX)
2112 mem = &adapter->pmrx;
2113 else if (t.mem_id == MEM_PMTX)
2114 mem = &adapter->pmtx;
2120 * bits 0..9: chip version
2121 * bits 10..15: chip revision
2123 t.version = 3 | (adapter->params.rev << 10);
2124 if (copy_to_user(useraddr, &t, sizeof(t)))
2128 * Read 256 bytes at a time as len can be large and we don't
2129 * want to use huge intermediate buffers.
2131 useraddr += sizeof(t); /* advance to start of buffer */
2133 unsigned int chunk =
2134 min_t(unsigned int, t.len, sizeof(buf));
2137 t3_mc7_bd_read(mem, t.addr / 8, chunk / 8,
2141 if (copy_to_user(useraddr, buf, chunk))
2149 case CHELSIO_SET_TRACE_FILTER:{
2151 const struct trace_params *tp;
2153 if (!capable(CAP_NET_ADMIN))
2155 if (!offload_running(adapter))
2157 if (copy_from_user(&t, useraddr, sizeof(t)))
2160 tp = (const struct trace_params *)&t.sip;
2162 t3_config_trace_filter(adapter, tp, 0,
2166 t3_config_trace_filter(adapter, tp, 1,
2177 static int cxgb_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
2179 struct mii_ioctl_data *data = if_mii(req);
2180 struct port_info *pi = netdev_priv(dev);
2181 struct adapter *adapter = pi->adapter;
2186 data->phy_id = pi->phy.addr;
2190 struct cphy *phy = &pi->phy;
2192 if (!phy->mdio_read)
2194 if (is_10G(adapter)) {
2195 mmd = data->phy_id >> 8;
2198 else if (mmd > MDIO_DEV_XGXS)
2202 phy->mdio_read(adapter, data->phy_id & 0x1f,
2203 mmd, data->reg_num, &val);
2206 phy->mdio_read(adapter, data->phy_id & 0x1f,
2207 0, data->reg_num & 0x1f,
2210 data->val_out = val;
2214 struct cphy *phy = &pi->phy;
2216 if (!capable(CAP_NET_ADMIN))
2218 if (!phy->mdio_write)
2220 if (is_10G(adapter)) {
2221 mmd = data->phy_id >> 8;
2224 else if (mmd > MDIO_DEV_XGXS)
2228 phy->mdio_write(adapter,
2229 data->phy_id & 0x1f, mmd,
2234 phy->mdio_write(adapter,
2235 data->phy_id & 0x1f, 0,
2236 data->reg_num & 0x1f,
2241 return cxgb_extension_ioctl(dev, req->ifr_data);
2248 static int cxgb_change_mtu(struct net_device *dev, int new_mtu)
2250 struct port_info *pi = netdev_priv(dev);
2251 struct adapter *adapter = pi->adapter;
2254 if (new_mtu < 81) /* accommodate SACK */
2256 if ((ret = t3_mac_set_mtu(&pi->mac, new_mtu)))
2259 init_port_mtus(adapter);
2260 if (adapter->params.rev == 0 && offload_running(adapter))
2261 t3_load_mtus(adapter, adapter->params.mtus,
2262 adapter->params.a_wnd, adapter->params.b_wnd,
2263 adapter->port[0]->mtu);
2267 static int cxgb_set_mac_addr(struct net_device *dev, void *p)
2269 struct port_info *pi = netdev_priv(dev);
2270 struct adapter *adapter = pi->adapter;
2271 struct sockaddr *addr = p;
2273 if (!is_valid_ether_addr(addr->sa_data))
2276 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
2277 t3_mac_set_address(&pi->mac, 0, dev->dev_addr);
2278 if (offload_running(adapter))
2279 write_smt_entry(adapter, pi->port_id);
2284 * t3_synchronize_rx - wait for current Rx processing on a port to complete
2285 * @adap: the adapter
2288 * Ensures that current Rx processing on any of the queues associated with
2289 * the given port completes before returning. We do this by acquiring and
2290 * releasing the locks of the response queues associated with the port.
2292 static void t3_synchronize_rx(struct adapter *adap, const struct port_info *p)
2296 for (i = p->first_qset; i < p->first_qset + p->nqsets; i++) {
2297 struct sge_rspq *q = &adap->sge.qs[i].rspq;
2299 spin_lock_irq(&q->lock);
2300 spin_unlock_irq(&q->lock);
2304 static void vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
2306 struct port_info *pi = netdev_priv(dev);
2307 struct adapter *adapter = pi->adapter;
2310 if (adapter->params.rev > 0)
2311 t3_set_vlan_accel(adapter, 1 << pi->port_id, grp != NULL);
2313 /* single control for all ports */
2314 unsigned int i, have_vlans = 0;
2315 for_each_port(adapter, i)
2316 have_vlans |= adap2pinfo(adapter, i)->vlan_grp != NULL;
2318 t3_set_vlan_accel(adapter, 1, have_vlans);
2320 t3_synchronize_rx(adapter, pi);
2323 #ifdef CONFIG_NET_POLL_CONTROLLER
2324 static void cxgb_netpoll(struct net_device *dev)
2326 struct port_info *pi = netdev_priv(dev);
2327 struct adapter *adapter = pi->adapter;
2330 for (qidx = pi->first_qset; qidx < pi->first_qset + pi->nqsets; qidx++) {
2331 struct sge_qset *qs = &adapter->sge.qs[qidx];
2334 if (adapter->flags & USING_MSIX)
2339 t3_intr_handler(adapter, qs->rspq.polling) (0, source);
2345 * Periodic accumulation of MAC statistics.
2347 static void mac_stats_update(struct adapter *adapter)
2351 for_each_port(adapter, i) {
2352 struct net_device *dev = adapter->port[i];
2353 struct port_info *p = netdev_priv(dev);
2355 if (netif_running(dev)) {
2356 spin_lock(&adapter->stats_lock);
2357 t3_mac_update_stats(&p->mac);
2358 spin_unlock(&adapter->stats_lock);
2363 static void check_link_status(struct adapter *adapter)
2367 for_each_port(adapter, i) {
2368 struct net_device *dev = adapter->port[i];
2369 struct port_info *p = netdev_priv(dev);
2371 if (!(p->phy.caps & SUPPORTED_IRQ) && netif_running(dev))
2372 t3_link_changed(adapter, i);
2376 static void check_t3b2_mac(struct adapter *adapter)
2380 if (!rtnl_trylock()) /* synchronize with ifdown */
2383 for_each_port(adapter, i) {
2384 struct net_device *dev = adapter->port[i];
2385 struct port_info *p = netdev_priv(dev);
2388 if (!netif_running(dev))
2392 if (netif_running(dev) && netif_carrier_ok(dev))
2393 status = t3b2_mac_watchdog_task(&p->mac);
2395 p->mac.stats.num_toggled++;
2396 else if (status == 2) {
2397 struct cmac *mac = &p->mac;
2399 t3_mac_set_mtu(mac, dev->mtu);
2400 t3_mac_set_address(mac, 0, dev->dev_addr);
2401 cxgb_set_rxmode(dev);
2402 t3_link_start(&p->phy, mac, &p->link_config);
2403 t3_mac_enable(mac, MAC_DIRECTION_RX | MAC_DIRECTION_TX);
2404 t3_port_intr_enable(adapter, p->port_id);
2405 p->mac.stats.num_resets++;
2412 static void t3_adap_check_task(struct work_struct *work)
2414 struct adapter *adapter = container_of(work, struct adapter,
2415 adap_check_task.work);
2416 const struct adapter_params *p = &adapter->params;
2418 adapter->check_task_cnt++;
2420 /* Check link status for PHYs without interrupts */
2421 if (p->linkpoll_period)
2422 check_link_status(adapter);
2424 /* Accumulate MAC stats if needed */
2425 if (!p->linkpoll_period ||
2426 (adapter->check_task_cnt * p->linkpoll_period) / 10 >=
2427 p->stats_update_period) {
2428 mac_stats_update(adapter);
2429 adapter->check_task_cnt = 0;
2432 if (p->rev == T3_REV_B2)
2433 check_t3b2_mac(adapter);
2435 /* Schedule the next check update if any port is active. */
2436 spin_lock_irq(&adapter->work_lock);
2437 if (adapter->open_device_map & PORT_MASK)
2438 schedule_chk_task(adapter);
2439 spin_unlock_irq(&adapter->work_lock);
2443 * Processes external (PHY) interrupts in process context.
2445 static void ext_intr_task(struct work_struct *work)
2447 struct adapter *adapter = container_of(work, struct adapter,
2448 ext_intr_handler_task);
2450 t3_phy_intr_handler(adapter);
2452 /* Now reenable external interrupts */
2453 spin_lock_irq(&adapter->work_lock);
2454 if (adapter->slow_intr_mask) {
2455 adapter->slow_intr_mask |= F_T3DBG;
2456 t3_write_reg(adapter, A_PL_INT_CAUSE0, F_T3DBG);
2457 t3_write_reg(adapter, A_PL_INT_ENABLE0,
2458 adapter->slow_intr_mask);
2460 spin_unlock_irq(&adapter->work_lock);
2464 * Interrupt-context handler for external (PHY) interrupts.
2466 void t3_os_ext_intr_handler(struct adapter *adapter)
2469 * Schedule a task to handle external interrupts as they may be slow
2470 * and we use a mutex to protect MDIO registers. We disable PHY
2471 * interrupts in the meantime and let the task reenable them when
2474 spin_lock(&adapter->work_lock);
2475 if (adapter->slow_intr_mask) {
2476 adapter->slow_intr_mask &= ~F_T3DBG;
2477 t3_write_reg(adapter, A_PL_INT_ENABLE0,
2478 adapter->slow_intr_mask);
2479 queue_work(cxgb3_wq, &adapter->ext_intr_handler_task);
2481 spin_unlock(&adapter->work_lock);
2484 static int t3_adapter_error(struct adapter *adapter, int reset)
2488 /* Stop all ports */
2489 for_each_port(adapter, i) {
2490 struct net_device *netdev = adapter->port[i];
2492 if (netif_running(netdev))
2496 if (is_offload(adapter) &&
2497 test_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map))
2498 offload_close(&adapter->tdev);
2500 /* Stop SGE timers */
2501 t3_stop_sge_timers(adapter);
2503 adapter->flags &= ~FULL_INIT_DONE;
2506 ret = t3_reset_adapter(adapter);
2508 pci_disable_device(adapter->pdev);
2513 static int t3_reenable_adapter(struct adapter *adapter)
2515 if (pci_enable_device(adapter->pdev)) {
2516 dev_err(&adapter->pdev->dev,
2517 "Cannot re-enable PCI device after reset.\n");
2520 pci_set_master(adapter->pdev);
2521 pci_restore_state(adapter->pdev);
2523 /* Free sge resources */
2524 t3_free_sge_resources(adapter);
2526 if (t3_replay_prep_adapter(adapter))
2534 static void t3_resume_ports(struct adapter *adapter)
2538 /* Restart the ports */
2539 for_each_port(adapter, i) {
2540 struct net_device *netdev = adapter->port[i];
2542 if (netif_running(netdev)) {
2543 if (cxgb_open(netdev)) {
2544 dev_err(&adapter->pdev->dev,
2545 "can't bring device back up"
2554 * processes a fatal error.
2555 * Bring the ports down, reset the chip, bring the ports back up.
2557 static void fatal_error_task(struct work_struct *work)
2559 struct adapter *adapter = container_of(work, struct adapter,
2560 fatal_error_handler_task);
2564 err = t3_adapter_error(adapter, 1);
2566 err = t3_reenable_adapter(adapter);
2568 t3_resume_ports(adapter);
2570 CH_ALERT(adapter, "adapter reset %s\n", err ? "failed" : "succeeded");
2574 void t3_fatal_err(struct adapter *adapter)
2576 unsigned int fw_status[4];
2578 if (adapter->flags & FULL_INIT_DONE) {
2579 t3_sge_stop(adapter);
2580 t3_write_reg(adapter, A_XGM_TX_CTRL, 0);
2581 t3_write_reg(adapter, A_XGM_RX_CTRL, 0);
2582 t3_write_reg(adapter, XGM_REG(A_XGM_TX_CTRL, 1), 0);
2583 t3_write_reg(adapter, XGM_REG(A_XGM_RX_CTRL, 1), 0);
2585 spin_lock(&adapter->work_lock);
2586 t3_intr_disable(adapter);
2587 queue_work(cxgb3_wq, &adapter->fatal_error_handler_task);
2588 spin_unlock(&adapter->work_lock);
2590 CH_ALERT(adapter, "encountered fatal error, operation suspended\n");
2591 if (!t3_cim_ctl_blk_read(adapter, 0xa0, 4, fw_status))
2592 CH_ALERT(adapter, "FW status: 0x%x, 0x%x, 0x%x, 0x%x\n",
2593 fw_status[0], fw_status[1],
2594 fw_status[2], fw_status[3]);
2599 * t3_io_error_detected - called when PCI error is detected
2600 * @pdev: Pointer to PCI device
2601 * @state: The current pci connection state
2603 * This function is called after a PCI bus error affecting
2604 * this device has been detected.
2606 static pci_ers_result_t t3_io_error_detected(struct pci_dev *pdev,
2607 pci_channel_state_t state)
2609 struct adapter *adapter = pci_get_drvdata(pdev);
2612 ret = t3_adapter_error(adapter, 0);
2614 /* Request a slot reset. */
2615 return PCI_ERS_RESULT_NEED_RESET;
2619 * t3_io_slot_reset - called after the pci bus has been reset.
2620 * @pdev: Pointer to PCI device
2622 * Restart the card from scratch, as if from a cold-boot.
2624 static pci_ers_result_t t3_io_slot_reset(struct pci_dev *pdev)
2626 struct adapter *adapter = pci_get_drvdata(pdev);
2628 if (!t3_reenable_adapter(adapter))
2629 return PCI_ERS_RESULT_RECOVERED;
2631 return PCI_ERS_RESULT_DISCONNECT;
2635 * t3_io_resume - called when traffic can start flowing again.
2636 * @pdev: Pointer to PCI device
2638 * This callback is called when the error recovery driver tells us that
2639 * its OK to resume normal operation.
2641 static void t3_io_resume(struct pci_dev *pdev)
2643 struct adapter *adapter = pci_get_drvdata(pdev);
2645 t3_resume_ports(adapter);
2648 static struct pci_error_handlers t3_err_handler = {
2649 .error_detected = t3_io_error_detected,
2650 .slot_reset = t3_io_slot_reset,
2651 .resume = t3_io_resume,
2655 * Set the number of qsets based on the number of CPUs and the number of ports,
2656 * not to exceed the number of available qsets, assuming there are enough qsets
2659 static void set_nqsets(struct adapter *adap)
2662 int num_cpus = num_online_cpus();
2663 int hwports = adap->params.nports;
2664 int nqsets = SGE_QSETS;
2666 if (adap->params.rev > 0) {
2668 (hwports * nqsets > SGE_QSETS ||
2669 num_cpus >= nqsets / hwports))
2671 if (nqsets > num_cpus)
2673 if (nqsets < 1 || hwports == 4)
2678 for_each_port(adap, i) {
2679 struct port_info *pi = adap2pinfo(adap, i);
2682 pi->nqsets = nqsets;
2683 j = pi->first_qset + nqsets;
2685 dev_info(&adap->pdev->dev,
2686 "Port %d using %d queue sets.\n", i, nqsets);
2690 static int __devinit cxgb_enable_msix(struct adapter *adap)
2692 struct msix_entry entries[SGE_QSETS + 1];
2695 for (i = 0; i < ARRAY_SIZE(entries); ++i)
2696 entries[i].entry = i;
2698 err = pci_enable_msix(adap->pdev, entries, ARRAY_SIZE(entries));
2700 for (i = 0; i < ARRAY_SIZE(entries); ++i)
2701 adap->msix_info[i].vec = entries[i].vector;
2703 dev_info(&adap->pdev->dev,
2704 "only %d MSI-X vectors left, not using MSI-X\n", err);
2708 static void __devinit print_port_info(struct adapter *adap,
2709 const struct adapter_info *ai)
2711 static const char *pci_variant[] = {
2712 "PCI", "PCI-X", "PCI-X ECC", "PCI-X 266", "PCI Express"
2719 snprintf(buf, sizeof(buf), "%s x%d",
2720 pci_variant[adap->params.pci.variant],
2721 adap->params.pci.width);
2723 snprintf(buf, sizeof(buf), "%s %dMHz/%d-bit",
2724 pci_variant[adap->params.pci.variant],
2725 adap->params.pci.speed, adap->params.pci.width);
2727 for_each_port(adap, i) {
2728 struct net_device *dev = adap->port[i];
2729 const struct port_info *pi = netdev_priv(dev);
2731 if (!test_bit(i, &adap->registered_device_map))
2733 printk(KERN_INFO "%s: %s %s %sNIC (rev %d) %s%s\n",
2734 dev->name, ai->desc, pi->phy.desc,
2735 is_offload(adap) ? "R" : "", adap->params.rev, buf,
2736 (adap->flags & USING_MSIX) ? " MSI-X" :
2737 (adap->flags & USING_MSI) ? " MSI" : "");
2738 if (adap->name == dev->name && adap->params.vpd.mclk)
2740 "%s: %uMB CM, %uMB PMTX, %uMB PMRX, S/N: %s\n",
2741 adap->name, t3_mc7_size(&adap->cm) >> 20,
2742 t3_mc7_size(&adap->pmtx) >> 20,
2743 t3_mc7_size(&adap->pmrx) >> 20,
2744 adap->params.vpd.sn);
2748 static int __devinit init_one(struct pci_dev *pdev,
2749 const struct pci_device_id *ent)
2751 static int version_printed;
2753 int i, err, pci_using_dac = 0;
2754 unsigned long mmio_start, mmio_len;
2755 const struct adapter_info *ai;
2756 struct adapter *adapter = NULL;
2757 struct port_info *pi;
2759 if (!version_printed) {
2760 printk(KERN_INFO "%s - version %s\n", DRV_DESC, DRV_VERSION);
2765 cxgb3_wq = create_singlethread_workqueue(DRV_NAME);
2767 printk(KERN_ERR DRV_NAME
2768 ": cannot initialize work queue\n");
2773 err = pci_request_regions(pdev, DRV_NAME);
2775 /* Just info, some other driver may have claimed the device. */
2776 dev_info(&pdev->dev, "cannot obtain PCI resources\n");
2780 err = pci_enable_device(pdev);
2782 dev_err(&pdev->dev, "cannot enable PCI device\n");
2783 goto out_release_regions;
2786 if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) {
2788 err = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK);
2790 dev_err(&pdev->dev, "unable to obtain 64-bit DMA for "
2791 "coherent allocations\n");
2792 goto out_disable_device;
2794 } else if ((err = pci_set_dma_mask(pdev, DMA_32BIT_MASK)) != 0) {
2795 dev_err(&pdev->dev, "no usable DMA configuration\n");
2796 goto out_disable_device;
2799 pci_set_master(pdev);
2800 pci_save_state(pdev);
2802 mmio_start = pci_resource_start(pdev, 0);
2803 mmio_len = pci_resource_len(pdev, 0);
2804 ai = t3_get_adapter_info(ent->driver_data);
2806 adapter = kzalloc(sizeof(*adapter), GFP_KERNEL);
2809 goto out_disable_device;
2812 adapter->regs = ioremap_nocache(mmio_start, mmio_len);
2813 if (!adapter->regs) {
2814 dev_err(&pdev->dev, "cannot map device registers\n");
2816 goto out_free_adapter;
2819 adapter->pdev = pdev;
2820 adapter->name = pci_name(pdev);
2821 adapter->msg_enable = dflt_msg_enable;
2822 adapter->mmio_len = mmio_len;
2824 mutex_init(&adapter->mdio_lock);
2825 spin_lock_init(&adapter->work_lock);
2826 spin_lock_init(&adapter->stats_lock);
2828 INIT_LIST_HEAD(&adapter->adapter_list);
2829 INIT_WORK(&adapter->ext_intr_handler_task, ext_intr_task);
2830 INIT_WORK(&adapter->fatal_error_handler_task, fatal_error_task);
2831 INIT_DELAYED_WORK(&adapter->adap_check_task, t3_adap_check_task);
2833 for (i = 0; i < ai->nports; ++i) {
2834 struct net_device *netdev;
2836 netdev = alloc_etherdev(sizeof(struct port_info));
2842 SET_NETDEV_DEV(netdev, &pdev->dev);
2844 adapter->port[i] = netdev;
2845 pi = netdev_priv(netdev);
2846 pi->adapter = adapter;
2847 pi->rx_csum_offload = 1;
2849 netif_carrier_off(netdev);
2850 netdev->irq = pdev->irq;
2851 netdev->mem_start = mmio_start;
2852 netdev->mem_end = mmio_start + mmio_len - 1;
2853 netdev->features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO;
2854 netdev->features |= NETIF_F_LLTX;
2856 netdev->features |= NETIF_F_HIGHDMA;
2858 netdev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
2859 netdev->vlan_rx_register = vlan_rx_register;
2861 netdev->open = cxgb_open;
2862 netdev->stop = cxgb_close;
2863 netdev->hard_start_xmit = t3_eth_xmit;
2864 netdev->get_stats = cxgb_get_stats;
2865 netdev->set_multicast_list = cxgb_set_rxmode;
2866 netdev->do_ioctl = cxgb_ioctl;
2867 netdev->change_mtu = cxgb_change_mtu;
2868 netdev->set_mac_address = cxgb_set_mac_addr;
2869 #ifdef CONFIG_NET_POLL_CONTROLLER
2870 netdev->poll_controller = cxgb_netpoll;
2873 SET_ETHTOOL_OPS(netdev, &cxgb_ethtool_ops);
2876 pci_set_drvdata(pdev, adapter);
2877 if (t3_prep_adapter(adapter, ai, 1) < 0) {
2883 * The card is now ready to go. If any errors occur during device
2884 * registration we do not fail the whole card but rather proceed only
2885 * with the ports we manage to register successfully. However we must
2886 * register at least one net device.
2888 for_each_port(adapter, i) {
2889 err = register_netdev(adapter->port[i]);
2891 dev_warn(&pdev->dev,
2892 "cannot register net device %s, skipping\n",
2893 adapter->port[i]->name);
2896 * Change the name we use for messages to the name of
2897 * the first successfully registered interface.
2899 if (!adapter->registered_device_map)
2900 adapter->name = adapter->port[i]->name;
2902 __set_bit(i, &adapter->registered_device_map);
2905 if (!adapter->registered_device_map) {
2906 dev_err(&pdev->dev, "could not register any net devices\n");
2910 /* Driver's ready. Reflect it on LEDs */
2911 t3_led_ready(adapter);
2913 if (is_offload(adapter)) {
2914 __set_bit(OFFLOAD_DEVMAP_BIT, &adapter->registered_device_map);
2915 cxgb3_adapter_ofld(adapter);
2918 /* See what interrupts we'll be using */
2919 if (msi > 1 && cxgb_enable_msix(adapter) == 0)
2920 adapter->flags |= USING_MSIX;
2921 else if (msi > 0 && pci_enable_msi(pdev) == 0)
2922 adapter->flags |= USING_MSI;
2924 set_nqsets(adapter);
2926 err = sysfs_create_group(&adapter->port[0]->dev.kobj,
2929 print_port_info(adapter, ai);
2933 iounmap(adapter->regs);
2934 for (i = ai->nports - 1; i >= 0; --i)
2935 if (adapter->port[i])
2936 free_netdev(adapter->port[i]);
2942 pci_disable_device(pdev);
2943 out_release_regions:
2944 pci_release_regions(pdev);
2945 pci_set_drvdata(pdev, NULL);
2949 static void __devexit remove_one(struct pci_dev *pdev)
2951 struct adapter *adapter = pci_get_drvdata(pdev);
2956 t3_sge_stop(adapter);
2957 sysfs_remove_group(&adapter->port[0]->dev.kobj,
2960 if (is_offload(adapter)) {
2961 cxgb3_adapter_unofld(adapter);
2962 if (test_bit(OFFLOAD_DEVMAP_BIT,
2963 &adapter->open_device_map))
2964 offload_close(&adapter->tdev);
2967 for_each_port(adapter, i)
2968 if (test_bit(i, &adapter->registered_device_map))
2969 unregister_netdev(adapter->port[i]);
2971 t3_stop_sge_timers(adapter);
2972 t3_free_sge_resources(adapter);
2973 cxgb_disable_msi(adapter);
2975 for_each_port(adapter, i)
2976 if (adapter->port[i])
2977 free_netdev(adapter->port[i]);
2979 iounmap(adapter->regs);
2981 pci_release_regions(pdev);
2982 pci_disable_device(pdev);
2983 pci_set_drvdata(pdev, NULL);
2987 static struct pci_driver driver = {
2989 .id_table = cxgb3_pci_tbl,
2991 .remove = __devexit_p(remove_one),
2992 .err_handler = &t3_err_handler,
2995 static int __init cxgb3_init_module(void)
2999 cxgb3_offload_init();
3001 ret = pci_register_driver(&driver);
3005 static void __exit cxgb3_cleanup_module(void)
3007 pci_unregister_driver(&driver);
3009 destroy_workqueue(cxgb3_wq);
3012 module_init(cxgb3_init_module);
3013 module_exit(cxgb3_cleanup_module);