1/*****************************************************************************
2 *                                                                           *
3 * File: cxgb2.c                                                             *
4 * $Revision: 1.25 $                                                         *
5 * $Date: 2005/06/22 00:43:25 $                                              *
6 * Description:                                                              *
7 *  Chelsio 10Gb Ethernet Driver.                                            *
8 *                                                                           *
9 * This program is free software; you can redistribute it and/or modify      *
10 * it under the terms of the GNU General Public License, version 2, as       *
11 * published by the Free Software Foundation.                                *
12 *                                                                           *
13 * You should have received a copy of the GNU General Public License along   *
14 * with this program; if not, write to the Free Software Foundation, Inc.,   *
15 * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.                 *
16 *                                                                           *
17 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED    *
18 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF      *
19 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.                     *
20 *                                                                           *
21 * http://www.chelsio.com                                                    *
22 *                                                                           *
23 * Copyright (c) 2003 - 2005 Chelsio Communications, Inc.                    *
24 * All rights reserved.                                                      *
25 *                                                                           *
26 * Maintainers: maintainers@chelsio.com                                      *
27 *                                                                           *
28 * Authors: Dimitrios Michailidis   <dm@chelsio.com>                         *
29 *          Tina Yang               <tainay@chelsio.com>                     *
30 *          Felix Marti             <felix@chelsio.com>                      *
31 *          Scott Bardone           <sbardone@chelsio.com>                   *
32 *          Kurt Ottaway            <kottaway@chelsio.com>                   *
33 *          Frank DiMambro          <frank@chelsio.com>                      *
34 *                                                                           *
35 * History:                                                                  *
36 *                                                                           *
37 ****************************************************************************/
38
39#include "common.h"
40#include <linux/module.h>
41#include <linux/init.h>
42#include <linux/pci.h>
43#include <linux/netdevice.h>
44#include <linux/etherdevice.h>
45#include <linux/if_vlan.h>
46#include <linux/mii.h>
47#include <linux/sockios.h>
48#include <linux/dma-mapping.h>
49#include <asm/uaccess.h>
50
51#include "cpl5_cmd.h"
52#include "regs.h"
53#include "gmac.h"
54#include "cphy.h"
55#include "sge.h"
56#include "tp.h"
57#include "espi.h"
58#include "elmer0.h"
59
60#include <linux/workqueue.h>
61
62static inline void schedule_mac_stats_update(struct adapter *ap, int secs)
63{
64	schedule_delayed_work(&ap->stats_update_task, secs * HZ);
65}
66
67static inline void cancel_mac_stats_update(struct adapter *ap)
68{
69	cancel_delayed_work(&ap->stats_update_task);
70}
71
72#define MAX_CMDQ_ENTRIES	16384
73#define MAX_CMDQ1_ENTRIES	1024
74#define MAX_RX_BUFFERS		16384
75#define MAX_RX_JUMBO_BUFFERS	16384
76#define MAX_TX_BUFFERS_HIGH	16384U
77#define MAX_TX_BUFFERS_LOW	1536U
78#define MAX_TX_BUFFERS		1460U
79#define MIN_FL_ENTRIES		32
80
81#define DFLT_MSG_ENABLE (NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_LINK | \
82			 NETIF_MSG_TIMER | NETIF_MSG_IFDOWN | NETIF_MSG_IFUP |\
83			 NETIF_MSG_RX_ERR | NETIF_MSG_TX_ERR)
84
85/*
86 * The EEPROM is actually bigger but only the first few bytes are used so we
87 * only report those.
88 */
89#define EEPROM_SIZE 32
90
91MODULE_DESCRIPTION(DRV_DESCRIPTION);
92MODULE_AUTHOR("Chelsio Communications");
93MODULE_LICENSE("GPL");
94
95static int dflt_msg_enable = DFLT_MSG_ENABLE;
96
97module_param(dflt_msg_enable, int, 0);
98MODULE_PARM_DESC(dflt_msg_enable, "Chelsio T1 default message enable bitmap");
99
100#define HCLOCK 0x0
101#define LCLOCK 0x1
102
103/* T1 cards powersave mode */
104static int t1_clock(struct adapter *adapter, int mode);
105static int t1powersave = 1;	/* HW default is powersave mode. */
106
107module_param(t1powersave, int, 0);
108MODULE_PARM_DESC(t1powersave, "Enable/Disable T1 powersaving mode");
109
110static int disable_msi = 0;
111module_param(disable_msi, int, 0);
112MODULE_PARM_DESC(disable_msi, "Disable Message Signaled Interrupt (MSI)");
113
114static const char pci_speed[][4] = {
115	"33", "66", "100", "133"
116};
117
118/*
119 * Setup MAC to receive the types of packets we want.
120 */
121static void t1_set_rxmode(struct net_device *dev)
122{
123	struct adapter *adapter = dev->ml_priv;
124	struct cmac *mac = adapter->port[dev->if_port].mac;
125	struct t1_rx_mode rm;
126
127	rm.dev = dev;
128	mac->ops->set_rx_mode(mac, &rm);
129}
130
131static void link_report(struct port_info *p)
132{
133	if (!netif_carrier_ok(p->dev))
134		printk(KERN_INFO "%s: link down\n", p->dev->name);
135	else {
136		const char *s = "10Mbps";
137
138		switch (p->link_config.speed) {
139			case SPEED_10000: s = "10Gbps"; break;
140			case SPEED_1000:  s = "1000Mbps"; break;
141			case SPEED_100:   s = "100Mbps"; break;
142		}
143
144		printk(KERN_INFO "%s: link up, %s, %s-duplex\n",
145		       p->dev->name, s,
146		       p->link_config.duplex == DUPLEX_FULL ? "full" : "half");
147	}
148}
149
150void t1_link_negotiated(struct adapter *adapter, int port_id, int link_stat,
151			int speed, int duplex, int pause)
152{
153	struct port_info *p = &adapter->port[port_id];
154
155	if (link_stat != netif_carrier_ok(p->dev)) {
156		if (link_stat)
157			netif_carrier_on(p->dev);
158		else
159			netif_carrier_off(p->dev);
160		link_report(p);
161
162		/* multi-ports: inform toe */
163		if ((speed > 0) && (adapter->params.nports > 1)) {
164			unsigned int sched_speed = 10;
165			switch (speed) {
166			case SPEED_1000:
167				sched_speed = 1000;
168				break;
169			case SPEED_100:
170				sched_speed = 100;
171				break;
172			case SPEED_10:
173				sched_speed = 10;
174				break;
175			}
176			t1_sched_update_parms(adapter->sge, port_id, 0, sched_speed);
177		}
178	}
179}
180
181static void link_start(struct port_info *p)
182{
183	struct cmac *mac = p->mac;
184
185	mac->ops->reset(mac);
186	if (mac->ops->macaddress_set)
187		mac->ops->macaddress_set(mac, p->dev->dev_addr);
188	t1_set_rxmode(p->dev);
189	t1_link_start(p->phy, mac, &p->link_config);
190	mac->ops->enable(mac, MAC_DIRECTION_RX | MAC_DIRECTION_TX);
191}
192
193static void enable_hw_csum(struct adapter *adapter)
194{
195	if (adapter->port[0].dev->hw_features & NETIF_F_TSO)
196		t1_tp_set_ip_checksum_offload(adapter->tp, 1);	/* for TSO only */
197	t1_tp_set_tcp_checksum_offload(adapter->tp, 1);
198}
199
200/*
201 * Things to do upon first use of a card.
202 * This must run with the rtnl lock held.
203 */
204static int cxgb_up(struct adapter *adapter)
205{
206	int err = 0;
207
208	if (!(adapter->flags & FULL_INIT_DONE)) {
209		err = t1_init_hw_modules(adapter);
210		if (err)
211			goto out_err;
212
213		enable_hw_csum(adapter);
214		adapter->flags |= FULL_INIT_DONE;
215	}
216
217	t1_interrupts_clear(adapter);
218
219	adapter->params.has_msi = !disable_msi && !pci_enable_msi(adapter->pdev);
220	err = request_irq(adapter->pdev->irq, t1_interrupt,
221			  adapter->params.has_msi ? 0 : IRQF_SHARED,
222			  adapter->name, adapter);
223	if (err) {
224		if (adapter->params.has_msi)
225			pci_disable_msi(adapter->pdev);
226
227		goto out_err;
228	}
229
230	t1_sge_start(adapter->sge);
231	t1_interrupts_enable(adapter);
232out_err:
233	return err;
234}
235
236/*
237 * Release resources when all the ports have been stopped.
238 */
239static void cxgb_down(struct adapter *adapter)
240{
241	t1_sge_stop(adapter->sge);
242	t1_interrupts_disable(adapter);
243	free_irq(adapter->pdev->irq, adapter);
244	if (adapter->params.has_msi)
245		pci_disable_msi(adapter->pdev);
246}
247
248static int cxgb_open(struct net_device *dev)
249{
250	int err;
251	struct adapter *adapter = dev->ml_priv;
252	int other_ports = adapter->open_device_map & PORT_MASK;
253
254	napi_enable(&adapter->napi);
255	if (!adapter->open_device_map && (err = cxgb_up(adapter)) < 0) {
256		napi_disable(&adapter->napi);
257		return err;
258	}
259
260	__set_bit(dev->if_port, &adapter->open_device_map);
261	link_start(&adapter->port[dev->if_port]);
262	netif_start_queue(dev);
263	if (!other_ports && adapter->params.stats_update_period)
264		schedule_mac_stats_update(adapter,
265					  adapter->params.stats_update_period);
266
267	t1_vlan_mode(adapter, dev->features);
268	return 0;
269}
270
271static int cxgb_close(struct net_device *dev)
272{
273	struct adapter *adapter = dev->ml_priv;
274	struct port_info *p = &adapter->port[dev->if_port];
275	struct cmac *mac = p->mac;
276
277	netif_stop_queue(dev);
278	napi_disable(&adapter->napi);
279	mac->ops->disable(mac, MAC_DIRECTION_TX | MAC_DIRECTION_RX);
280	netif_carrier_off(dev);
281
282	clear_bit(dev->if_port, &adapter->open_device_map);
283	if (adapter->params.stats_update_period &&
284	    !(adapter->open_device_map & PORT_MASK)) {
285		/* Stop statistics accumulation. */
286		smp_mb__after_clear_bit();
287		spin_lock(&adapter->work_lock);   /* sync with update task */
288		spin_unlock(&adapter->work_lock);
289		cancel_mac_stats_update(adapter);
290	}
291
292	if (!adapter->open_device_map)
293		cxgb_down(adapter);
294	return 0;
295}
296
297static struct net_device_stats *t1_get_stats(struct net_device *dev)
298{
299	struct adapter *adapter = dev->ml_priv;
300	struct port_info *p = &adapter->port[dev->if_port];
301	struct net_device_stats *ns = &p->netstats;
302	const struct cmac_statistics *pstats;
303
304	/* Do a full update of the MAC stats */
305	pstats = p->mac->ops->statistics_update(p->mac,
306						MAC_STATS_UPDATE_FULL);
307
308	ns->tx_packets = pstats->TxUnicastFramesOK +
309		pstats->TxMulticastFramesOK + pstats->TxBroadcastFramesOK;
310
311	ns->rx_packets = pstats->RxUnicastFramesOK +
312		pstats->RxMulticastFramesOK + pstats->RxBroadcastFramesOK;
313
314	ns->tx_bytes = pstats->TxOctetsOK;
315	ns->rx_bytes = pstats->RxOctetsOK;
316
317	ns->tx_errors = pstats->TxLateCollisions + pstats->TxLengthErrors +
318		pstats->TxUnderrun + pstats->TxFramesAbortedDueToXSCollisions;
319	ns->rx_errors = pstats->RxDataErrors + pstats->RxJabberErrors +
320		pstats->RxFCSErrors + pstats->RxAlignErrors +
321		pstats->RxSequenceErrors + pstats->RxFrameTooLongErrors +
322		pstats->RxSymbolErrors + pstats->RxRuntErrors;
323
324	ns->multicast  = pstats->RxMulticastFramesOK;
325	ns->collisions = pstats->TxTotalCollisions;
326
327	/* detailed rx_errors */
328	ns->rx_length_errors = pstats->RxFrameTooLongErrors +
329		pstats->RxJabberErrors;
330	ns->rx_over_errors   = 0;
331	ns->rx_crc_errors    = pstats->RxFCSErrors;
332	ns->rx_frame_errors  = pstats->RxAlignErrors;
333	ns->rx_fifo_errors   = 0;
334	ns->rx_missed_errors = 0;
335
336	/* detailed tx_errors */
337	ns->tx_aborted_errors   = pstats->TxFramesAbortedDueToXSCollisions;
338	ns->tx_carrier_errors   = 0;
339	ns->tx_fifo_errors      = pstats->TxUnderrun;
340	ns->tx_heartbeat_errors = 0;
341	ns->tx_window_errors    = pstats->TxLateCollisions;
342	return ns;
343}
344
345static u32 get_msglevel(struct net_device *dev)
346{
347	struct adapter *adapter = dev->ml_priv;
348
349	return adapter->msg_enable;
350}
351
352static void set_msglevel(struct net_device *dev, u32 val)
353{
354	struct adapter *adapter = dev->ml_priv;
355
356	adapter->msg_enable = val;
357}
358
359static char stats_strings[][ETH_GSTRING_LEN] = {
360	"TxOctetsOK",
361	"TxOctetsBad",
362	"TxUnicastFramesOK",
363	"TxMulticastFramesOK",
364	"TxBroadcastFramesOK",
365	"TxPauseFrames",
366	"TxFramesWithDeferredXmissions",
367	"TxLateCollisions",
368	"TxTotalCollisions",
369	"TxFramesAbortedDueToXSCollisions",
370	"TxUnderrun",
371	"TxLengthErrors",
372	"TxInternalMACXmitError",
373	"TxFramesWithExcessiveDeferral",
374	"TxFCSErrors",
375	"TxJumboFramesOk",
376	"TxJumboOctetsOk",
377
378	"RxOctetsOK",
379	"RxOctetsBad",
380	"RxUnicastFramesOK",
381	"RxMulticastFramesOK",
382	"RxBroadcastFramesOK",
383	"RxPauseFrames",
384	"RxFCSErrors",
385	"RxAlignErrors",
386	"RxSymbolErrors",
387	"RxDataErrors",
388	"RxSequenceErrors",
389	"RxRuntErrors",
390	"RxJabberErrors",
391	"RxInternalMACRcvError",
392	"RxInRangeLengthErrors",
393	"RxOutOfRangeLengthField",
394	"RxFrameTooLongErrors",
395	"RxJumboFramesOk",
396	"RxJumboOctetsOk",
397
398	/* Port stats */
399	"RxCsumGood",
400	"TxCsumOffload",
401	"TxTso",
402	"RxVlan",
403	"TxVlan",
404	"TxNeedHeadroom",
405
406	/* Interrupt stats */
407	"rx drops",
408	"pure_rsps",
409	"unhandled irqs",
410	"respQ_empty",
411	"respQ_overflow",
412	"freelistQ_empty",
413	"pkt_too_big",
414	"pkt_mismatch",
415	"cmdQ_full0",
416	"cmdQ_full1",
417
418	"espi_DIP2ParityErr",
419	"espi_DIP4Err",
420	"espi_RxDrops",
421	"espi_TxDrops",
422	"espi_RxOvfl",
423	"espi_ParityErr"
424};
425
426#define T2_REGMAP_SIZE (3 * 1024)
427
428static int get_regs_len(struct net_device *dev)
429{
430	return T2_REGMAP_SIZE;
431}
432
433static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
434{
435	struct adapter *adapter = dev->ml_priv;
436
437	strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
438	strlcpy(info->version, DRV_VERSION, sizeof(info->version));
439	strlcpy(info->bus_info, pci_name(adapter->pdev),
440		sizeof(info->bus_info));
441}
442
443static int get_sset_count(struct net_device *dev, int sset)
444{
445	switch (sset) {
446	case ETH_SS_STATS:
447		return ARRAY_SIZE(stats_strings);
448	default:
449		return -EOPNOTSUPP;
450	}
451}
452
453static void get_strings(struct net_device *dev, u32 stringset, u8 *data)
454{
455	if (stringset == ETH_SS_STATS)
456		memcpy(data, stats_strings, sizeof(stats_strings));
457}
458
459static void get_stats(struct net_device *dev, struct ethtool_stats *stats,
460		      u64 *data)
461{
462	struct adapter *adapter = dev->ml_priv;
463	struct cmac *mac = adapter->port[dev->if_port].mac;
464	const struct cmac_statistics *s;
465	const struct sge_intr_counts *t;
466	struct sge_port_stats ss;
467
468	s = mac->ops->statistics_update(mac, MAC_STATS_UPDATE_FULL);
469	t = t1_sge_get_intr_counts(adapter->sge);
470	t1_sge_get_port_stats(adapter->sge, dev->if_port, &ss);
471
472	*data++ = s->TxOctetsOK;
473	*data++ = s->TxOctetsBad;
474	*data++ = s->TxUnicastFramesOK;
475	*data++ = s->TxMulticastFramesOK;
476	*data++ = s->TxBroadcastFramesOK;
477	*data++ = s->TxPauseFrames;
478	*data++ = s->TxFramesWithDeferredXmissions;
479	*data++ = s->TxLateCollisions;
480	*data++ = s->TxTotalCollisions;
481	*data++ = s->TxFramesAbortedDueToXSCollisions;
482	*data++ = s->TxUnderrun;
483	*data++ = s->TxLengthErrors;
484	*data++ = s->TxInternalMACXmitError;
485	*data++ = s->TxFramesWithExcessiveDeferral;
486	*data++ = s->TxFCSErrors;
487	*data++ = s->TxJumboFramesOK;
488	*data++ = s->TxJumboOctetsOK;
489
490	*data++ = s->RxOctetsOK;
491	*data++ = s->RxOctetsBad;
492	*data++ = s->RxUnicastFramesOK;
493	*data++ = s->RxMulticastFramesOK;
494	*data++ = s->RxBroadcastFramesOK;
495	*data++ = s->RxPauseFrames;
496	*data++ = s->RxFCSErrors;
497	*data++ = s->RxAlignErrors;
498	*data++ = s->RxSymbolErrors;
499	*data++ = s->RxDataErrors;
500	*data++ = s->RxSequenceErrors;
501	*data++ = s->RxRuntErrors;
502	*data++ = s->RxJabberErrors;
503	*data++ = s->RxInternalMACRcvError;
504	*data++ = s->RxInRangeLengthErrors;
505	*data++ = s->RxOutOfRangeLengthField;
506	*data++ = s->RxFrameTooLongErrors;
507	*data++ = s->RxJumboFramesOK;
508	*data++ = s->RxJumboOctetsOK;
509
510	*data++ = ss.rx_cso_good;
511	*data++ = ss.tx_cso;
512	*data++ = ss.tx_tso;
513	*data++ = ss.vlan_xtract;
514	*data++ = ss.vlan_insert;
515	*data++ = ss.tx_need_hdrroom;
516
517	*data++ = t->rx_drops;
518	*data++ = t->pure_rsps;
519	*data++ = t->unhandled_irqs;
520	*data++ = t->respQ_empty;
521	*data++ = t->respQ_overflow;
522	*data++ = t->freelistQ_empty;
523	*data++ = t->pkt_too_big;
524	*data++ = t->pkt_mismatch;
525	*data++ = t->cmdQ_full[0];
526	*data++ = t->cmdQ_full[1];
527
528	if (adapter->espi) {
529		const struct espi_intr_counts *e;
530
531		e = t1_espi_get_intr_counts(adapter->espi);
532		*data++ = e->DIP2_parity_err;
533		*data++ = e->DIP4_err;
534		*data++ = e->rx_drops;
535		*data++ = e->tx_drops;
536		*data++ = e->rx_ovflw;
537		*data++ = e->parity_err;
538	}
539}
540
541static inline void reg_block_dump(struct adapter *ap, void *buf,
542				  unsigned int start, unsigned int end)
543{
544	u32 *p = buf + start;
545
546	for ( ; start <= end; start += sizeof(u32))
547		*p++ = readl(ap->regs + start);
548}
549
550static void get_regs(struct net_device *dev, struct ethtool_regs *regs,
551		     void *buf)
552{
553	struct adapter *ap = dev->ml_priv;
554
555	/*
556	 * Version scheme: bits 0..9: chip version, bits 10..15: chip revision
557	 */
558	regs->version = 2;
559
560	memset(buf, 0, T2_REGMAP_SIZE);
561	reg_block_dump(ap, buf, 0, A_SG_RESPACCUTIMER);
562	reg_block_dump(ap, buf, A_MC3_CFG, A_MC4_INT_CAUSE);
563	reg_block_dump(ap, buf, A_TPI_ADDR, A_TPI_PAR);
564	reg_block_dump(ap, buf, A_TP_IN_CONFIG, A_TP_TX_DROP_COUNT);
565	reg_block_dump(ap, buf, A_RAT_ROUTE_CONTROL, A_RAT_INTR_CAUSE);
566	reg_block_dump(ap, buf, A_CSPI_RX_AE_WM, A_CSPI_INTR_ENABLE);
567	reg_block_dump(ap, buf, A_ESPI_SCH_TOKEN0, A_ESPI_GOSTAT);
568	reg_block_dump(ap, buf, A_ULP_ULIMIT, A_ULP_PIO_CTRL);
569	reg_block_dump(ap, buf, A_PL_ENABLE, A_PL_CAUSE);
570	reg_block_dump(ap, buf, A_MC5_CONFIG, A_MC5_MASK_WRITE_CMD);
571}
572
573static int get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
574{
575	struct adapter *adapter = dev->ml_priv;
576	struct port_info *p = &adapter->port[dev->if_port];
577
578	cmd->supported = p->link_config.supported;
579	cmd->advertising = p->link_config.advertising;
580
581	if (netif_carrier_ok(dev)) {
582		ethtool_cmd_speed_set(cmd, p->link_config.speed);
583		cmd->duplex = p->link_config.duplex;
584	} else {
585		ethtool_cmd_speed_set(cmd, -1);
586		cmd->duplex = -1;
587	}
588
589	cmd->port = (cmd->supported & SUPPORTED_TP) ? PORT_TP : PORT_FIBRE;
590	cmd->phy_address = p->phy->mdio.prtad;
591	cmd->transceiver = XCVR_EXTERNAL;
592	cmd->autoneg = p->link_config.autoneg;
593	cmd->maxtxpkt = 0;
594	cmd->maxrxpkt = 0;
595	return 0;
596}
597
598static int speed_duplex_to_caps(int speed, int duplex)
599{
600	int cap = 0;
601
602	switch (speed) {
603	case SPEED_10:
604		if (duplex == DUPLEX_FULL)
605			cap = SUPPORTED_10baseT_Full;
606		else
607			cap = SUPPORTED_10baseT_Half;
608		break;
609	case SPEED_100:
610		if (duplex == DUPLEX_FULL)
611			cap = SUPPORTED_100baseT_Full;
612		else
613			cap = SUPPORTED_100baseT_Half;
614		break;
615	case SPEED_1000:
616		if (duplex == DUPLEX_FULL)
617			cap = SUPPORTED_1000baseT_Full;
618		else
619			cap = SUPPORTED_1000baseT_Half;
620		break;
621	case SPEED_10000:
622		if (duplex == DUPLEX_FULL)
623			cap = SUPPORTED_10000baseT_Full;
624	}
625	return cap;
626}
627
628#define ADVERTISED_MASK (ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full | \
629		      ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full | \
630		      ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full | \
631		      ADVERTISED_10000baseT_Full)
632
633static int set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
634{
635	struct adapter *adapter = dev->ml_priv;
636	struct port_info *p = &adapter->port[dev->if_port];
637	struct link_config *lc = &p->link_config;
638
639	if (!(lc->supported & SUPPORTED_Autoneg))
640		return -EOPNOTSUPP;             /* can't change speed/duplex */
641
642	if (cmd->autoneg == AUTONEG_DISABLE) {
643		u32 speed = ethtool_cmd_speed(cmd);
644		int cap = speed_duplex_to_caps(speed, cmd->duplex);
645
646		if (!(lc->supported & cap) || (speed == SPEED_1000))
647			return -EINVAL;
648		lc->requested_speed = speed;
649		lc->requested_duplex = cmd->duplex;
650		lc->advertising = 0;
651	} else {
652		cmd->advertising &= ADVERTISED_MASK;
653		if (cmd->advertising & (cmd->advertising - 1))
654			cmd->advertising = lc->supported;
655		cmd->advertising &= lc->supported;
656		if (!cmd->advertising)
657			return -EINVAL;
658		lc->requested_speed = SPEED_INVALID;
659		lc->requested_duplex = DUPLEX_INVALID;
660		lc->advertising = cmd->advertising | ADVERTISED_Autoneg;
661	}
662	lc->autoneg = cmd->autoneg;
663	if (netif_running(dev))
664		t1_link_start(p->phy, p->mac, lc);
665	return 0;
666}
667
668static void get_pauseparam(struct net_device *dev,
669			   struct ethtool_pauseparam *epause)
670{
671	struct adapter *adapter = dev->ml_priv;
672	struct port_info *p = &adapter->port[dev->if_port];
673
674	epause->autoneg = (p->link_config.requested_fc & PAUSE_AUTONEG) != 0;
675	epause->rx_pause = (p->link_config.fc & PAUSE_RX) != 0;
676	epause->tx_pause = (p->link_config.fc & PAUSE_TX) != 0;
677}
678
679static int set_pauseparam(struct net_device *dev,
680			  struct ethtool_pauseparam *epause)
681{
682	struct adapter *adapter = dev->ml_priv;
683	struct port_info *p = &adapter->port[dev->if_port];
684	struct link_config *lc = &p->link_config;
685
686	if (epause->autoneg == AUTONEG_DISABLE)
687		lc->requested_fc = 0;
688	else if (lc->supported & SUPPORTED_Autoneg)
689		lc->requested_fc = PAUSE_AUTONEG;
690	else
691		return -EINVAL;
692
693	if (epause->rx_pause)
694		lc->requested_fc |= PAUSE_RX;
695	if (epause->tx_pause)
696		lc->requested_fc |= PAUSE_TX;
697	if (lc->autoneg == AUTONEG_ENABLE) {
698		if (netif_running(dev))
699			t1_link_start(p->phy, p->mac, lc);
700	} else {
701		lc->fc = lc->requested_fc & (PAUSE_RX | PAUSE_TX);
702		if (netif_running(dev))
703			p->mac->ops->set_speed_duplex_fc(p->mac, -1, -1,
704							 lc->fc);
705	}
706	return 0;
707}
708
709static void get_sge_param(struct net_device *dev, struct ethtool_ringparam *e)
710{
711	struct adapter *adapter = dev->ml_priv;
712	int jumbo_fl = t1_is_T1B(adapter) ? 1 : 0;
713
714	e->rx_max_pending = MAX_RX_BUFFERS;
715	e->rx_jumbo_max_pending = MAX_RX_JUMBO_BUFFERS;
716	e->tx_max_pending = MAX_CMDQ_ENTRIES;
717
718	e->rx_pending = adapter->params.sge.freelQ_size[!jumbo_fl];
719	e->rx_jumbo_pending = adapter->params.sge.freelQ_size[jumbo_fl];
720	e->tx_pending = adapter->params.sge.cmdQ_size[0];
721}
722
723static int set_sge_param(struct net_device *dev, struct ethtool_ringparam *e)
724{
725	struct adapter *adapter = dev->ml_priv;
726	int jumbo_fl = t1_is_T1B(adapter) ? 1 : 0;
727
728	if (e->rx_pending > MAX_RX_BUFFERS || e->rx_mini_pending ||
729	    e->rx_jumbo_pending > MAX_RX_JUMBO_BUFFERS ||
730	    e->tx_pending > MAX_CMDQ_ENTRIES ||
731	    e->rx_pending < MIN_FL_ENTRIES ||
732	    e->rx_jumbo_pending < MIN_FL_ENTRIES ||
733	    e->tx_pending < (adapter->params.nports + 1) * (MAX_SKB_FRAGS + 1))
734		return -EINVAL;
735
736	if (adapter->flags & FULL_INIT_DONE)
737		return -EBUSY;
738
739	adapter->params.sge.freelQ_size[!jumbo_fl] = e->rx_pending;
740	adapter->params.sge.freelQ_size[jumbo_fl] = e->rx_jumbo_pending;
741	adapter->params.sge.cmdQ_size[0] = e->tx_pending;
742	adapter->params.sge.cmdQ_size[1] = e->tx_pending > MAX_CMDQ1_ENTRIES ?
743		MAX_CMDQ1_ENTRIES : e->tx_pending;
744	return 0;
745}
746
747static int set_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
748{
749	struct adapter *adapter = dev->ml_priv;
750
751	adapter->params.sge.rx_coalesce_usecs = c->rx_coalesce_usecs;
752	adapter->params.sge.coalesce_enable = c->use_adaptive_rx_coalesce;
753	adapter->params.sge.sample_interval_usecs = c->rate_sample_interval;
754	t1_sge_set_coalesce_params(adapter->sge, &adapter->params.sge);
755	return 0;
756}
757
758static int get_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
759{
760	struct adapter *adapter = dev->ml_priv;
761
762	c->rx_coalesce_usecs = adapter->params.sge.rx_coalesce_usecs;
763	c->rate_sample_interval = adapter->params.sge.sample_interval_usecs;
764	c->use_adaptive_rx_coalesce = adapter->params.sge.coalesce_enable;
765	return 0;
766}
767
768static int get_eeprom_len(struct net_device *dev)
769{
770	struct adapter *adapter = dev->ml_priv;
771
772	return t1_is_asic(adapter) ? EEPROM_SIZE : 0;
773}
774
775#define EEPROM_MAGIC(ap) \
776	(PCI_VENDOR_ID_CHELSIO | ((ap)->params.chip_version << 16))
777
778static int get_eeprom(struct net_device *dev, struct ethtool_eeprom *e,
779		      u8 *data)
780{
781	int i;
782	u8 buf[EEPROM_SIZE] __attribute__((aligned(4)));
783	struct adapter *adapter = dev->ml_priv;
784
785	e->magic = EEPROM_MAGIC(adapter);
786	for (i = e->offset & ~3; i < e->offset + e->len; i += sizeof(u32))
787		t1_seeprom_read(adapter, i, (__le32 *)&buf[i]);
788	memcpy(data, buf + e->offset, e->len);
789	return 0;
790}
791
792static const struct ethtool_ops t1_ethtool_ops = {
793	.get_settings      = get_settings,
794	.set_settings      = set_settings,
795	.get_drvinfo       = get_drvinfo,
796	.get_msglevel      = get_msglevel,
797	.set_msglevel      = set_msglevel,
798	.get_ringparam     = get_sge_param,
799	.set_ringparam     = set_sge_param,
800	.get_coalesce      = get_coalesce,
801	.set_coalesce      = set_coalesce,
802	.get_eeprom_len    = get_eeprom_len,
803	.get_eeprom        = get_eeprom,
804	.get_pauseparam    = get_pauseparam,
805	.set_pauseparam    = set_pauseparam,
806	.get_link          = ethtool_op_get_link,
807	.get_strings       = get_strings,
808	.get_sset_count	   = get_sset_count,
809	.get_ethtool_stats = get_stats,
810	.get_regs_len      = get_regs_len,
811	.get_regs          = get_regs,
812};
813
814static int t1_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
815{
816	struct adapter *adapter = dev->ml_priv;
817	struct mdio_if_info *mdio = &adapter->port[dev->if_port].phy->mdio;
818
819	return mdio_mii_ioctl(mdio, if_mii(req), cmd);
820}
821
822static int t1_change_mtu(struct net_device *dev, int new_mtu)
823{
824	int ret;
825	struct adapter *adapter = dev->ml_priv;
826	struct cmac *mac = adapter->port[dev->if_port].mac;
827
828	if (!mac->ops->set_mtu)
829		return -EOPNOTSUPP;
830	if (new_mtu < 68)
831		return -EINVAL;
832	if ((ret = mac->ops->set_mtu(mac, new_mtu)))
833		return ret;
834	dev->mtu = new_mtu;
835	return 0;
836}
837
838static int t1_set_mac_addr(struct net_device *dev, void *p)
839{
840	struct adapter *adapter = dev->ml_priv;
841	struct cmac *mac = adapter->port[dev->if_port].mac;
842	struct sockaddr *addr = p;
843
844	if (!mac->ops->macaddress_set)
845		return -EOPNOTSUPP;
846
847	memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
848	mac->ops->macaddress_set(mac, dev->dev_addr);
849	return 0;
850}
851
852static netdev_features_t t1_fix_features(struct net_device *dev,
853	netdev_features_t features)
854{
855	/*
856	 * Since there is no support for separate rx/tx vlan accel
857	 * enable/disable make sure tx flag is always in same state as rx.
858	 */
859	if (features & NETIF_F_HW_VLAN_RX)
860		features |= NETIF_F_HW_VLAN_TX;
861	else
862		features &= ~NETIF_F_HW_VLAN_TX;
863
864	return features;
865}
866
867static int t1_set_features(struct net_device *dev, netdev_features_t features)
868{
869	netdev_features_t changed = dev->features ^ features;
870	struct adapter *adapter = dev->ml_priv;
871
872	if (changed & NETIF_F_HW_VLAN_RX)
873		t1_vlan_mode(adapter, features);
874
875	return 0;
876}
877#ifdef CONFIG_NET_POLL_CONTROLLER
878static void t1_netpoll(struct net_device *dev)
879{
880	unsigned long flags;
881	struct adapter *adapter = dev->ml_priv;
882
883	local_irq_save(flags);
884	t1_interrupt(adapter->pdev->irq, adapter);
885	local_irq_restore(flags);
886}
887#endif
888
889/*
890 * Periodic accumulation of MAC statistics.  This is used only if the MAC
891 * does not have any other way to prevent stats counter overflow.
892 */
893static void mac_stats_task(struct work_struct *work)
894{
895	int i;
896	struct adapter *adapter =
897		container_of(work, struct adapter, stats_update_task.work);
898
899	for_each_port(adapter, i) {
900		struct port_info *p = &adapter->port[i];
901
902		if (netif_running(p->dev))
903			p->mac->ops->statistics_update(p->mac,
904						       MAC_STATS_UPDATE_FAST);
905	}
906
907	/* Schedule the next statistics update if any port is active. */
908	spin_lock(&adapter->work_lock);
909	if (adapter->open_device_map & PORT_MASK)
910		schedule_mac_stats_update(adapter,
911					  adapter->params.stats_update_period);
912	spin_unlock(&adapter->work_lock);
913}
914
915/*
916 * Processes elmer0 external interrupts in process context.
917 */
918static void ext_intr_task(struct work_struct *work)
919{
920	struct adapter *adapter =
921		container_of(work, struct adapter, ext_intr_handler_task);
922
923	t1_elmer0_ext_intr_handler(adapter);
924
925	/* Now reenable external interrupts */
926	spin_lock_irq(&adapter->async_lock);
927	adapter->slow_intr_mask |= F_PL_INTR_EXT;
928	writel(F_PL_INTR_EXT, adapter->regs + A_PL_CAUSE);
929	writel(adapter->slow_intr_mask | F_PL_INTR_SGE_DATA,
930		   adapter->regs + A_PL_ENABLE);
931	spin_unlock_irq(&adapter->async_lock);
932}
933
934/*
935 * Interrupt-context handler for elmer0 external interrupts.
936 */
937void t1_elmer0_ext_intr(struct adapter *adapter)
938{
939	/*
940	 * Schedule a task to handle external interrupts as we require
941	 * a process context.  We disable EXT interrupts in the interim
942	 * and let the task reenable them when it's done.
943	 */
944	adapter->slow_intr_mask &= ~F_PL_INTR_EXT;
945	writel(adapter->slow_intr_mask | F_PL_INTR_SGE_DATA,
946		   adapter->regs + A_PL_ENABLE);
947	schedule_work(&adapter->ext_intr_handler_task);
948}
949
950void t1_fatal_err(struct adapter *adapter)
951{
952	if (adapter->flags & FULL_INIT_DONE) {
953		t1_sge_stop(adapter->sge);
954		t1_interrupts_disable(adapter);
955	}
956	pr_alert("%s: encountered fatal error, operation suspended\n",
957		 adapter->name);
958}
959
960static const struct net_device_ops cxgb_netdev_ops = {
961	.ndo_open		= cxgb_open,
962	.ndo_stop		= cxgb_close,
963	.ndo_start_xmit		= t1_start_xmit,
964	.ndo_get_stats		= t1_get_stats,
965	.ndo_validate_addr	= eth_validate_addr,
966	.ndo_set_rx_mode	= t1_set_rxmode,
967	.ndo_do_ioctl		= t1_ioctl,
968	.ndo_change_mtu		= t1_change_mtu,
969	.ndo_set_mac_address	= t1_set_mac_addr,
970	.ndo_fix_features	= t1_fix_features,
971	.ndo_set_features	= t1_set_features,
972#ifdef CONFIG_NET_POLL_CONTROLLER
973	.ndo_poll_controller	= t1_netpoll,
974#endif
975};
976
977static int __devinit init_one(struct pci_dev *pdev,
978			      const struct pci_device_id *ent)
979{
980	static int version_printed;
981
982	int i, err, pci_using_dac = 0;
983	unsigned long mmio_start, mmio_len;
984	const struct board_info *bi;
985	struct adapter *adapter = NULL;
986	struct port_info *pi;
987
988	if (!version_printed) {
989		printk(KERN_INFO "%s - version %s\n", DRV_DESCRIPTION,
990		       DRV_VERSION);
991		++version_printed;
992	}
993
994	err = pci_enable_device(pdev);
995	if (err)
996		return err;
997
998	if (!(pci_resource_flags(pdev, 0) & IORESOURCE_MEM)) {
999		pr_err("%s: cannot find PCI device memory base address\n",
1000		       pci_name(pdev));
1001		err = -ENODEV;
1002		goto out_disable_pdev;
1003	}
1004
1005	if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
1006		pci_using_dac = 1;
1007
1008		if (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64))) {
1009			pr_err("%s: unable to obtain 64-bit DMA for "
1010			       "consistent allocations\n", pci_name(pdev));
1011			err = -ENODEV;
1012			goto out_disable_pdev;
1013		}
1014
1015	} else if ((err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) != 0) {
1016		pr_err("%s: no usable DMA configuration\n", pci_name(pdev));
1017		goto out_disable_pdev;
1018	}
1019
1020	err = pci_request_regions(pdev, DRV_NAME);
1021	if (err) {
1022		pr_err("%s: cannot obtain PCI resources\n", pci_name(pdev));
1023		goto out_disable_pdev;
1024	}
1025
1026	pci_set_master(pdev);
1027
1028	mmio_start = pci_resource_start(pdev, 0);
1029	mmio_len = pci_resource_len(pdev, 0);
1030	bi = t1_get_board_info(ent->driver_data);
1031
1032	for (i = 0; i < bi->port_number; ++i) {
1033		struct net_device *netdev;
1034
1035		netdev = alloc_etherdev(adapter ? 0 : sizeof(*adapter));
1036		if (!netdev) {
1037			err = -ENOMEM;
1038			goto out_free_dev;
1039		}
1040
1041		SET_NETDEV_DEV(netdev, &pdev->dev);
1042
1043		if (!adapter) {
1044			adapter = netdev_priv(netdev);
1045			adapter->pdev = pdev;
1046			adapter->port[0].dev = netdev;  /* so we don't leak it */
1047
1048			adapter->regs = ioremap(mmio_start, mmio_len);
1049			if (!adapter->regs) {
1050				pr_err("%s: cannot map device registers\n",
1051				       pci_name(pdev));
1052				err = -ENOMEM;
1053				goto out_free_dev;
1054			}
1055
1056			if (t1_get_board_rev(adapter, bi, &adapter->params)) {
1057				err = -ENODEV;	  /* Can't handle this chip rev */
1058				goto out_free_dev;
1059			}
1060
1061			adapter->name = pci_name(pdev);
1062			adapter->msg_enable = dflt_msg_enable;
1063			adapter->mmio_len = mmio_len;
1064
1065			spin_lock_init(&adapter->tpi_lock);
1066			spin_lock_init(&adapter->work_lock);
1067			spin_lock_init(&adapter->async_lock);
1068			spin_lock_init(&adapter->mac_lock);
1069
1070			INIT_WORK(&adapter->ext_intr_handler_task,
1071				  ext_intr_task);
1072			INIT_DELAYED_WORK(&adapter->stats_update_task,
1073					  mac_stats_task);
1074
1075			pci_set_drvdata(pdev, netdev);
1076		}
1077
1078		pi = &adapter->port[i];
1079		pi->dev = netdev;
1080		netif_carrier_off(netdev);
1081		netdev->irq = pdev->irq;
1082		netdev->if_port = i;
1083		netdev->mem_start = mmio_start;
1084		netdev->mem_end = mmio_start + mmio_len - 1;
1085		netdev->ml_priv = adapter;
1086		netdev->hw_features |= NETIF_F_SG | NETIF_F_IP_CSUM |
1087			NETIF_F_RXCSUM;
1088		netdev->features |= NETIF_F_SG | NETIF_F_IP_CSUM |
1089			NETIF_F_RXCSUM | NETIF_F_LLTX;
1090
1091		if (pci_using_dac)
1092			netdev->features |= NETIF_F_HIGHDMA;
1093		if (vlan_tso_capable(adapter)) {
1094			netdev->features |=
1095				NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
1096			netdev->hw_features |= NETIF_F_HW_VLAN_RX;
1097
1098			/* T204: disable TSO */
1099			if (!(is_T2(adapter)) || bi->port_number != 4) {
1100				netdev->hw_features |= NETIF_F_TSO;
1101				netdev->features |= NETIF_F_TSO;
1102			}
1103		}
1104
1105		netdev->netdev_ops = &cxgb_netdev_ops;
1106		netdev->hard_header_len += (netdev->hw_features & NETIF_F_TSO) ?
1107			sizeof(struct cpl_tx_pkt_lso) : sizeof(struct cpl_tx_pkt);
1108
1109		netif_napi_add(netdev, &adapter->napi, t1_poll, 64);
1110
1111		SET_ETHTOOL_OPS(netdev, &t1_ethtool_ops);
1112	}
1113
1114	if (t1_init_sw_modules(adapter, bi) < 0) {
1115		err = -ENODEV;
1116		goto out_free_dev;
1117	}
1118
1119	/*
1120	 * The card is now ready to go.  If any errors occur during device
1121	 * registration we do not fail the whole card but rather proceed only
1122	 * with the ports we manage to register successfully.  However we must
1123	 * register at least one net device.
1124	 */
1125	for (i = 0; i < bi->port_number; ++i) {
1126		err = register_netdev(adapter->port[i].dev);
1127		if (err)
1128			pr_warning("%s: cannot register net device %s, skipping\n",
1129				   pci_name(pdev), adapter->port[i].dev->name);
1130		else {
1131			/*
1132			 * Change the name we use for messages to the name of
1133			 * the first successfully registered interface.
1134			 */
1135			if (!adapter->registered_device_map)
1136				adapter->name = adapter->port[i].dev->name;
1137
1138			__set_bit(i, &adapter->registered_device_map);
1139		}
1140	}
1141	if (!adapter->registered_device_map) {
1142		pr_err("%s: could not register any net devices\n",
1143		       pci_name(pdev));
1144		goto out_release_adapter_res;
1145	}
1146
1147	printk(KERN_INFO "%s: %s (rev %d), %s %dMHz/%d-bit\n", adapter->name,
1148	       bi->desc, adapter->params.chip_revision,
1149	       adapter->params.pci.is_pcix ? "PCIX" : "PCI",
1150	       adapter->params.pci.speed, adapter->params.pci.width);
1151
1152	/*
1153	 * Set the T1B ASIC and memory clocks.
1154	 */
1155	if (t1powersave)
1156		adapter->t1powersave = LCLOCK;	/* HW default is powersave mode. */
1157	else
1158		adapter->t1powersave = HCLOCK;
1159	if (t1_is_T1B(adapter))
1160		t1_clock(adapter, t1powersave);
1161
1162	return 0;
1163
1164out_release_adapter_res:
1165	t1_free_sw_modules(adapter);
1166out_free_dev:
1167	if (adapter) {
1168		if (adapter->regs)
1169			iounmap(adapter->regs);
1170		for (i = bi->port_number - 1; i >= 0; --i)
1171			if (adapter->port[i].dev)
1172				free_netdev(adapter->port[i].dev);
1173	}
1174	pci_release_regions(pdev);
1175out_disable_pdev:
1176	pci_disable_device(pdev);
1177	pci_set_drvdata(pdev, NULL);
1178	return err;
1179}
1180
1181static void bit_bang(struct adapter *adapter, int bitdata, int nbits)
1182{
1183	int data;
1184	int i;
1185	u32 val;
1186
1187	enum {
1188		S_CLOCK = 1 << 3,
1189		S_DATA = 1 << 4
1190	};
1191
1192	for (i = (nbits - 1); i > -1; i--) {
1193
1194		udelay(50);
1195
1196		data = ((bitdata >> i) & 0x1);
1197		__t1_tpi_read(adapter, A_ELMER0_GPO, &val);
1198
1199		if (data)
1200			val |= S_DATA;
1201		else
1202			val &= ~S_DATA;
1203
1204		udelay(50);
1205
1206		/* Set SCLOCK low */
1207		val &= ~S_CLOCK;
1208		__t1_tpi_write(adapter, A_ELMER0_GPO, val);
1209
1210		udelay(50);
1211
1212		/* Write SCLOCK high */
1213		val |= S_CLOCK;
1214		__t1_tpi_write(adapter, A_ELMER0_GPO, val);
1215
1216	}
1217}
1218
1219static int t1_clock(struct adapter *adapter, int mode)
1220{
1221	u32 val;
1222	int M_CORE_VAL;
1223	int M_MEM_VAL;
1224
1225	enum {
1226		M_CORE_BITS	= 9,
1227		T_CORE_VAL	= 0,
1228		T_CORE_BITS	= 2,
1229		N_CORE_VAL	= 0,
1230		N_CORE_BITS	= 2,
1231		M_MEM_BITS	= 9,
1232		T_MEM_VAL	= 0,
1233		T_MEM_BITS	= 2,
1234		N_MEM_VAL	= 0,
1235		N_MEM_BITS	= 2,
1236		NP_LOAD		= 1 << 17,
1237		S_LOAD_MEM	= 1 << 5,
1238		S_LOAD_CORE	= 1 << 6,
1239		S_CLOCK		= 1 << 3
1240	};
1241
1242	if (!t1_is_T1B(adapter))
1243		return -ENODEV;	/* Can't re-clock this chip. */
1244
1245	if (mode & 2)
1246		return 0;	/* show current mode. */
1247
1248	if ((adapter->t1powersave & 1) == (mode & 1))
1249		return -EALREADY;	/* ASIC already running in mode. */
1250
1251	if ((mode & 1) == HCLOCK) {
1252		M_CORE_VAL = 0x14;
1253		M_MEM_VAL = 0x18;
1254		adapter->t1powersave = HCLOCK;	/* overclock */
1255	} else {
1256		M_CORE_VAL = 0xe;
1257		M_MEM_VAL = 0x10;
1258		adapter->t1powersave = LCLOCK;	/* underclock */
1259	}
1260
1261	/* Don't interrupt this serial stream! */
1262	spin_lock(&adapter->tpi_lock);
1263
1264	/* Initialize for ASIC core */
1265	__t1_tpi_read(adapter, A_ELMER0_GPO, &val);
1266	val |= NP_LOAD;
1267	udelay(50);
1268	__t1_tpi_write(adapter, A_ELMER0_GPO, val);
1269	udelay(50);
1270	__t1_tpi_read(adapter, A_ELMER0_GPO, &val);
1271	val &= ~S_LOAD_CORE;
1272	val &= ~S_CLOCK;
1273	__t1_tpi_write(adapter, A_ELMER0_GPO, val);
1274	udelay(50);
1275
1276	/* Serial program the ASIC clock synthesizer */
1277	bit_bang(adapter, T_CORE_VAL, T_CORE_BITS);
1278	bit_bang(adapter, N_CORE_VAL, N_CORE_BITS);
1279	bit_bang(adapter, M_CORE_VAL, M_CORE_BITS);
1280	udelay(50);
1281
1282	/* Finish ASIC core */
1283	__t1_tpi_read(adapter, A_ELMER0_GPO, &val);
1284	val |= S_LOAD_CORE;
1285	udelay(50);
1286	__t1_tpi_write(adapter, A_ELMER0_GPO, val);
1287	udelay(50);
1288	__t1_tpi_read(adapter, A_ELMER0_GPO, &val);
1289	val &= ~S_LOAD_CORE;
1290	udelay(50);
1291	__t1_tpi_write(adapter, A_ELMER0_GPO, val);
1292	udelay(50);
1293
1294	/* Initialize for memory */
1295	__t1_tpi_read(adapter, A_ELMER0_GPO, &val);
1296	val |= NP_LOAD;
1297	udelay(50);
1298	__t1_tpi_write(adapter, A_ELMER0_GPO, val);
1299	udelay(50);
1300	__t1_tpi_read(adapter, A_ELMER0_GPO, &val);
1301	val &= ~S_LOAD_MEM;
1302	val &= ~S_CLOCK;
1303	udelay(50);
1304	__t1_tpi_write(adapter, A_ELMER0_GPO, val);
1305	udelay(50);
1306
1307	/* Serial program the memory clock synthesizer */
1308	bit_bang(adapter, T_MEM_VAL, T_MEM_BITS);
1309	bit_bang(adapter, N_MEM_VAL, N_MEM_BITS);
1310	bit_bang(adapter, M_MEM_VAL, M_MEM_BITS);
1311	udelay(50);
1312
1313	/* Finish memory */
1314	__t1_tpi_read(adapter, A_ELMER0_GPO, &val);
1315	val |= S_LOAD_MEM;
1316	udelay(50);
1317	__t1_tpi_write(adapter, A_ELMER0_GPO, val);
1318	udelay(50);
1319	__t1_tpi_read(adapter, A_ELMER0_GPO, &val);
1320	val &= ~S_LOAD_MEM;
1321	udelay(50);
1322	__t1_tpi_write(adapter, A_ELMER0_GPO, val);
1323
1324	spin_unlock(&adapter->tpi_lock);
1325
1326	return 0;
1327}
1328
1329static inline void t1_sw_reset(struct pci_dev *pdev)
1330{
1331	pci_write_config_dword(pdev, A_PCICFG_PM_CSR, 3);
1332	pci_write_config_dword(pdev, A_PCICFG_PM_CSR, 0);
1333}
1334
1335static void __devexit remove_one(struct pci_dev *pdev)
1336{
1337	struct net_device *dev = pci_get_drvdata(pdev);
1338	struct adapter *adapter = dev->ml_priv;
1339	int i;
1340
1341	for_each_port(adapter, i) {
1342		if (test_bit(i, &adapter->registered_device_map))
1343			unregister_netdev(adapter->port[i].dev);
1344	}
1345
1346	t1_free_sw_modules(adapter);
1347	iounmap(adapter->regs);
1348
1349	while (--i >= 0) {
1350		if (adapter->port[i].dev)
1351			free_netdev(adapter->port[i].dev);
1352	}
1353
1354	pci_release_regions(pdev);
1355	pci_disable_device(pdev);
1356	pci_set_drvdata(pdev, NULL);
1357	t1_sw_reset(pdev);
1358}
1359
1360static struct pci_driver driver = {
1361	.name     = DRV_NAME,
1362	.id_table = t1_pci_tbl,
1363	.probe    = init_one,
1364	.remove   = __devexit_p(remove_one),
1365};
1366
1367static int __init t1_init_module(void)
1368{
1369	return pci_register_driver(&driver);
1370}
1371
1372static void __exit t1_cleanup_module(void)
1373{
1374	pci_unregister_driver(&driver);
1375}
1376
1377module_init(t1_init_module);
1378module_exit(t1_cleanup_module);
1379