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