• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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